Submitted By: Pierre Labastie <pierre at linuxfromscratch dot org>
Date: 2022-05-15
Initial Package Version: 5.15.4
Upstream Status: Applied
Origin: The kf5.15 branch (in git, origin/kde/5.15) - see
https://dot.kde.org/2021/04/06/announcing-kdes-qt-5-patch-collection
Patch regenerated using the procedure in
https://wiki.linuxfromscratch.org/blfs/ticket/16549#comment:2
and
https://wiki.linuxfromscratch.org/blfs/ticket/16682#comment:3

Submodule qt3d fa7cb071..0ff905d1:
diff --git a/qt3d/src/animation/backend/animationclip.cpp b/qt3d/src/animation/backend/animationclip.cpp
index 2c7e4fffb..78152c5bc 100644
--- a/qt3d/src/animation/backend/animationclip.cpp
+++ b/qt3d/src/animation/backend/animationclip.cpp
@@ -354,7 +354,7 @@ void AnimationClip::clearData()
 float AnimationClip::findDuration()
 {
     // Iterate over the contained fcurves and find the longest one
-    double tMax = 0.0;
+    float tMax = 0.f;
     for (const Channel &channel : qAsConst(m_channels)) {
         for (const ChannelComponent &channelComponent : qAsConst(channel.channelComponents)) {
             const float t = channelComponent.fcurve.endTime();
diff --git a/qt3d/src/plugins/renderers/opengl/renderer/renderer.cpp b/qt3d/src/plugins/renderers/opengl/renderer/renderer.cpp
index 5c55d3bb9..4de847bf3 100644
--- a/qt3d/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/qt3d/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -594,38 +594,50 @@ void Renderer::releaseGraphicsResources()
     QOpenGLContext *context = m_submissionContext->openGLContext();
     Q_ASSERT(context);
 
-    if (context->thread() == QThread::currentThread() && context->makeCurrent(offscreenSurface)) {
-
-        // Clean up the graphics context and any resources
-        const std::vector<HGLTexture> &activeTexturesHandles = m_glResourceManagers->glTextureManager()->activeHandles();
-        for (const HGLTexture &textureHandle : activeTexturesHandles) {
-            GLTexture *tex = m_glResourceManagers->glTextureManager()->data(textureHandle);
-            tex->destroy();
-        }
+    if (context->thread() == QThread::currentThread()) {
+        QSurface *lastContextSurface = context->surface();
+
+        if (context->makeCurrent(offscreenSurface)) {
+            // Clean up the graphics context and any resources
+            const std::vector<HGLTexture> &activeTexturesHandles = m_glResourceManagers->glTextureManager()->activeHandles();
+            for (const HGLTexture &textureHandle : activeTexturesHandles) {
+                GLTexture *tex = m_glResourceManagers->glTextureManager()->data(textureHandle);
+                tex->destroy();
+            }
 
-        // Do the same thing with buffers
-        const std::vector<HGLBuffer> &activeBuffers = m_glResourceManagers->glBufferManager()->activeHandles();
-        for (const HGLBuffer &bufferHandle : activeBuffers) {
-            GLBuffer *buffer = m_glResourceManagers->glBufferManager()->data(bufferHandle);
-            buffer->destroy(m_submissionContext.data());
-        }
+            // Do the same thing with buffers
+            const std::vector<HGLBuffer> &activeBuffers = m_glResourceManagers->glBufferManager()->activeHandles();
+            for (const HGLBuffer &bufferHandle : activeBuffers) {
+                GLBuffer *buffer = m_glResourceManagers->glBufferManager()->data(bufferHandle);
+                buffer->destroy(m_submissionContext.data());
+            }
 
-        // Do the same thing with shaders
-        const QVector<GLShader *> shaders = m_glResourceManagers->glShaderManager()->takeActiveResources();
-        qDeleteAll(shaders);
+            // Do the same thing with shaders
+            const QVector<GLShader *> shaders = m_glResourceManagers->glShaderManager()->takeActiveResources();
+            qDeleteAll(shaders);
 
-        // Do the same thing with VAOs
-        const std::vector<HVao> &activeVaos = m_glResourceManagers->vaoManager()->activeHandles();
-        for (const HVao &vaoHandle : activeVaos) {
-            OpenGLVertexArrayObject *vao = m_glResourceManagers->vaoManager()->data(vaoHandle);
-            vao->destroy();
-        }
+            // Do the same thing with VAOs
+            const std::vector<HVao> &activeVaos = m_glResourceManagers->vaoManager()->activeHandles();
+            for (const HVao &vaoHandle : activeVaos) {
+                OpenGLVertexArrayObject *vao = m_glResourceManagers->vaoManager()->data(vaoHandle);
+                vao->destroy();
+            }
 
-        m_submissionContext->releaseRenderTargets();
+            m_submissionContext->releaseRenderTargets();
 
-        m_frameProfiler.reset();
-        if (m_ownedContext)
-            context->doneCurrent();
+            m_frameProfiler.reset();
+            if (m_ownedContext) {
+                context->doneCurrent();
+            } else {
+                // Leave the context in the state we found it in by restoring
+                // its last used surface. This satisfies expectations when used
+                // with QQuickWidgets that surface on current context after
+                // QQuickRenderControl cleanup is the same as prior to the
+                // cleanup. Arguably this could also be checked for in
+                // QQuickWidgetPrivate::invalidateRenderControl.
+                context->makeCurrent(lastContextSurface);
+            }
+        }
     } else {
         qWarning() << "Failed to make context current: OpenGL resources will not be destroyed";
     }
@@ -1872,6 +1884,7 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
     // Remove previous dependencies
     m_cleanupJob->removeDependency(QWeakPointer<QAspectJob>());
 
+    const bool dirtyParametersForCurrentFrame = m_dirtyBits.marked & AbstractRenderer::ParameterDirty;
     const BackendNodeDirtySet dirtyBitsForFrame = m_dirtyBits.marked | m_dirtyBits.remaining;
     m_dirtyBits.marked = {};
     m_dirtyBits.remaining = {};
@@ -1995,6 +2008,10 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
 
     m_dirtyBits.remaining = dirtyBitsForFrame & notCleared;
 
+    // Dirty Parameters might need 2 frames to react if the parameter references a texture
+    if (dirtyParametersForCurrentFrame)
+        m_dirtyBits.remaining |= AbstractRenderer::ParameterDirty;
+
     return renderBinJobs;
 }
 
diff --git a/qt3d/src/render/backend/computecommand.cpp b/qt3d/src/render/backend/computecommand.cpp
index bc82291f0..b80f81eb2 100644
--- a/qt3d/src/render/backend/computecommand.cpp
+++ b/qt3d/src/render/backend/computecommand.cpp
@@ -81,7 +81,10 @@ void ComputeCommand::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firs
     if (!node)
         return;
 
+    const bool wasEnabled = isEnabled();
     BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+    if (wasEnabled != isEnabled())
+        markDirty(AbstractRenderer::ComputeDirty);
 
     if (m_workGroups[0] != node->workGroupX()) {
         m_workGroups[0] = node->workGroupX();
diff --git a/qt3d/src/render/picking/objectpicker.cpp b/qt3d/src/render/picking/objectpicker.cpp
index 182e1af55..cc2ebbf15 100644
--- a/qt3d/src/render/picking/objectpicker.cpp
+++ b/qt3d/src/render/picking/objectpicker.cpp
@@ -81,13 +81,16 @@ void ObjectPicker::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstT
     if (!node)
         return;
 
-    BackendNode::syncFromFrontEnd(frontEnd, firstTime);
-
     if (firstTime) {
         markDirty(AbstractRenderer::AllDirty);
         notifyJob();
     }
 
+    if (isEnabled() != node->isEnabled()) {
+        markDirty(AbstractRenderer::AllDirty);
+        // We let QBackendNode::syncFromFrontEnd change the enabled property
+    }
+
     if (node->isHoverEnabled() != m_hoverEnabled) {
         m_hoverEnabled = node->isHoverEnabled();
         markDirty(AbstractRenderer::AllDirty);
@@ -105,6 +108,8 @@ void ObjectPicker::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstT
         markDirty(AbstractRenderer::AllDirty);
         notifyJob();
     }
+
+    BackendNode::syncFromFrontEnd(frontEnd, firstTime);
 }
 
 void ObjectPicker::notifyJob()
diff --git a/qt3d/tests/auto/render/computecommand/tst_computecommand.cpp b/qt3d/tests/auto/render/computecommand/tst_computecommand.cpp
index d6fa1d579..e583a9c61 100644
--- a/qt3d/tests/auto/render/computecommand/tst_computecommand.cpp
+++ b/qt3d/tests/auto/render/computecommand/tst_computecommand.cpp
@@ -141,6 +141,10 @@ private Q_SLOTS:
         backendComputeCommand.setRenderer(&renderer);
         simulateInitializationSync(&computeCommand, &backendComputeCommand);
 
+        // THEN
+        QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+        renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+
         {
             // WHEN
             const bool newValue = false;
@@ -149,6 +153,8 @@ private Q_SLOTS:
 
             // THEN
             QCOMPARE(backendComputeCommand.isEnabled(), newValue);
+            QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+            renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
         }
         {
             // WHEN
@@ -158,6 +164,8 @@ private Q_SLOTS:
 
             // THEN
             QCOMPARE(backendComputeCommand.x(), newValue);
+            QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+            renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
         }
         {
             // WHEN
@@ -167,6 +175,8 @@ private Q_SLOTS:
 
             // THEN
             QCOMPARE(backendComputeCommand.y(), newValue);
+            QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+            renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
         }
         {
             // WHEN
@@ -176,6 +186,8 @@ private Q_SLOTS:
 
             // THEN
             QCOMPARE(backendComputeCommand.z(), newValue);
+            QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+            renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
         }
         {
             // WHEN
@@ -185,6 +197,8 @@ private Q_SLOTS:
 
             // THEN
             QCOMPARE(backendComputeCommand.runType(), newValue);
+            QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+            renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
         }
         {
             // WHEN
@@ -194,6 +208,8 @@ private Q_SLOTS:
 
             // THEN
             QCOMPARE(backendComputeCommand.frameCount(), newValue);
+            QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::ComputeDirty);
+            renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
         }
     }
 
Submodule qtbase ab28ff22..98c727f2:
diff --git a/qtbase/mkspecs/common/android/qplatformdefs.h b/qtbase/mkspecs/common/android/qplatformdefs.h
index f75bc4093b..2bd59410d4 100644
--- a/qtbase/mkspecs/common/android/qplatformdefs.h
+++ b/qtbase/mkspecs/common/android/qplatformdefs.h
@@ -144,11 +144,7 @@
 #define QT_SIGNAL_ARGS          int
 #define QT_SIGNAL_IGNORE        SIG_IGN
 
-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
 #define QT_SOCKLEN_T            socklen_t
-#else
-#define QT_SOCKLEN_T            int
-#endif
 
 #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
 #define QT_SNPRINTF             ::snprintf
diff --git a/qtbase/mkspecs/features/mac/sdk.mk b/qtbase/mkspecs/features/mac/sdk.mk
index f30b5830b4..a32ceacb6c 100644
--- a/qtbase/mkspecs/features/mac/sdk.mk
+++ b/qtbase/mkspecs/features/mac/sdk.mk
@@ -1,6 +1,6 @@
 
 ifeq ($(QT_MAC_SDK_NO_VERSION_CHECK),)
-    CHECK_SDK_COMMAND = /usr/bin/xcrun --sdk $(EXPORT_QMAKE_MAC_SDK) -show-sdk-version 2>&1
+    CHECK_SDK_COMMAND = /usr/bin/xcrun --sdk $(EXPORT_QMAKE_MAC_SDK) -show-sdk-version 2>/dev/null
     CURRENT_MAC_SDK_VERSION := $(shell DEVELOPER_DIR=$(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) $(CHECK_SDK_COMMAND))
     ifneq ($(CURRENT_MAC_SDK_VERSION),$(EXPORT_QMAKE_MAC_SDK_VERSION))
         # We don't want to complain about out of date SDK unless the target needs to be remade.
diff --git a/qtbase/mkspecs/linux-clang/qplatformdefs.h b/qtbase/mkspecs/linux-clang/qplatformdefs.h
index a818d973f0..c1ab72fbc6 100644
--- a/qtbase/mkspecs/linux-clang/qplatformdefs.h
+++ b/qtbase/mkspecs/linux-clang/qplatformdefs.h
@@ -79,14 +79,6 @@
 #define QT_USE_XOPEN_LFS_EXTENSIONS
 #include "../common/posix/qplatformdefs.h"
 
-#undef QT_SOCKLEN_T
-
-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
-#define QT_SOCKLEN_T            socklen_t
-#else
-#define QT_SOCKLEN_T            int
-#endif
-
 #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
 #define QT_SNPRINTF             ::snprintf
 #define QT_VSNPRINTF            ::vsnprintf
diff --git a/qtbase/mkspecs/linux-g++/qplatformdefs.h b/qtbase/mkspecs/linux-g++/qplatformdefs.h
index 13523f0702..4d2750d9ec 100644
--- a/qtbase/mkspecs/linux-g++/qplatformdefs.h
+++ b/qtbase/mkspecs/linux-g++/qplatformdefs.h
@@ -79,14 +79,6 @@
 #define QT_USE_XOPEN_LFS_EXTENSIONS
 #include "../common/posix/qplatformdefs.h"
 
-#undef QT_SOCKLEN_T
-
-#if defined(__GLIBC__) && (__GLIBC__ < 2)
-#define QT_SOCKLEN_T            int
-#else
-#define QT_SOCKLEN_T            socklen_t
-#endif
-
 #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
 #define QT_SNPRINTF             ::snprintf
 #define QT_VSNPRINTF            ::vsnprintf
diff --git a/qtbase/mkspecs/linux-llvm/qplatformdefs.h b/qtbase/mkspecs/linux-llvm/qplatformdefs.h
index dc750ab1ef..d3cc39b47f 100644
--- a/qtbase/mkspecs/linux-llvm/qplatformdefs.h
+++ b/qtbase/mkspecs/linux-llvm/qplatformdefs.h
@@ -80,14 +80,6 @@
 #define QT_USE_XOPEN_LFS_EXTENSIONS
 #include "../common/posix/qplatformdefs.h"
 
-#undef QT_SOCKLEN_T
-
-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
-#define QT_SOCKLEN_T            socklen_t
-#else
-#define QT_SOCKLEN_T            int
-#endif
-
 #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
 #define QT_SNPRINTF             ::snprintf
 #define QT_VSNPRINTF            ::vsnprintf
diff --git a/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h b/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h
index 4c4e53da2a..83baffb3e3 100644
--- a/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h
+++ b/qtbase/mkspecs/linux-lsb-g++/qplatformdefs.h
@@ -85,16 +85,9 @@
 #include "../common/posix/qplatformdefs.h"
 
 #undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
 
 #define QT_OPEN_LARGEFILE       0
 
-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
-#define QT_SOCKLEN_T            socklen_t
-#else
-#define QT_SOCKLEN_T            int
-#endif
-
 #ifndef SIOCGIFBRDADDR
 #  define SIOCGIFBRDADDR 0x8919
 #endif
diff --git a/qtbase/mkspecs/lynxos-g++/qplatformdefs.h b/qtbase/mkspecs/lynxos-g++/qplatformdefs.h
index 4339ea2b23..6007af0055 100644
--- a/qtbase/mkspecs/lynxos-g++/qplatformdefs.h
+++ b/qtbase/mkspecs/lynxos-g++/qplatformdefs.h
@@ -72,14 +72,6 @@
 
 #include "../common/posix/qplatformdefs.h"
 
-#undef QT_SOCKLEN_T
-
-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
-#define QT_SOCKLEN_T            socklen_t
-#else
-#define QT_SOCKLEN_T            int
-#endif
-
 #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
 #define QT_SNPRINTF             ::snprintf
 #define QT_VSNPRINTF            ::vsnprintf
diff --git a/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp b/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp
index c3c184258f..32af3f8f29 100644
--- a/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp
+++ b/qtbase/src/3rdparty/angle/src/libANGLE/HandleAllocator.cpp
@@ -10,6 +10,7 @@
 #include "libANGLE/HandleAllocator.h"
 
 #include <algorithm>
+#include <limits>
 
 #include "common/debug.h"
 
diff --git a/qtbase/src/3rdparty/freetype/LICENSE.txt b/qtbase/src/3rdparty/freetype/LICENSE.txt
index 1119880c09..824f5c6129 100644
--- a/qtbase/src/3rdparty/freetype/LICENSE.txt
+++ b/qtbase/src/3rdparty/freetype/LICENSE.txt
@@ -1,96 +1,101 @@
-The  FreeType 2  font  engine is  copyrighted  work and  cannot be  used
-legally  without a  software license.   In  order to  make this  project
-usable  to a vast  majority of  developers, we  distribute it  under two
+FREETYPE LICENSES
+-----------------
+
+The FreeType  2 font  engine is  copyrighted work  and cannot  be used
+legally without  a software  license.  In order  to make  this project
+usable to  a vast majority of  developers, we distribute it  under two
 mutually exclusive open-source licenses.
 
-This means  that *you* must choose  *one* of the  two licenses described
-below, then obey  all its terms and conditions when  using FreeType 2 in
+This means that *you* must choose  *one* of the two licenses described
+below, then obey all its terms and conditions when using FreeType 2 in
 any of your projects or products.
 
-  - The FreeType License, found in  the file `FTL.TXT', which is similar
-    to the original BSD license *with* an advertising clause that forces
-    you  to  explicitly cite  the  FreeType  project  in your  product's
-    documentation.  All  details are in the license  file.  This license
-    is  suited  to products  which  don't  use  the GNU  General  Public
-    License.
+  - The FreeType License,  found in the file  `docs/FTL.TXT`, which is
+    similar to the  original BSD license *with*  an advertising clause
+    that forces  you to explicitly  cite the FreeType project  in your
+    product's  documentation.  All  details are  in the  license file.
+    This license is suited to products which don't use the GNU General
+    Public License.
 
-    Note that  this license  is  compatible  to the  GNU General  Public
+    Note that  this license  is compatible to  the GNU  General Public
     License version 3, but not version 2.
 
-  - The GNU General Public License version 2, found in  `GPLv2.TXT' (any
-    later version can be used  also), for programs which already use the
-    GPL.  Note  that the  FTL is  incompatible  with  GPLv2 due  to  its
-    advertisement clause.
+  - The   GNU   General   Public   License   version   2,   found   in
+    `docs/GPLv2.TXT`  (any  later  version  can  be  used  also),  for
+    programs  which  already  use  the  GPL.  Note  that  the  FTL  is
+    incompatible with GPLv2 due to its advertisement clause.
 
-The contributed BDF and PCF drivers come with a license similar  to that
-of the X Window System.  It is compatible to the above two licenses (see
-file src/bdf/README and src/pcf/README).
+The contributed  BDF and PCF  drivers come  with a license  similar to
+that  of the  X Window  System.   It is  compatible to  the above  two
+licenses (see files `src/bdf/README`  and `src/pcf/README`).  The same
+holds   for   the   source    code   files   `src/base/fthash.c`   and
+`include/freetype/internal/fthash.h`; they wer part  of the BDF driver
+in earlier FreeType versions.
 
-The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
-compatible to the above two licenses.
+The gzip  module uses the  zlib license (see  `src/gzip/zlib.h`) which
+too is compatible to the above two licenses.
 
-The MD5 checksum support (only used for debugging in development builds)
-is in the public domain.
+The  MD5 checksum  support  (only used  for  debugging in  development
+builds) is in the public domain.
 
+-- FTL.TXT --
 
---- FDL.TXT ---
+The FreeType Project LICENSE
+----------------------------
 
-                    The FreeType Project LICENSE
-                    ----------------------------
+        2006-Jan-27
 
-                            2006-Jan-27
-
-                    Copyright 1996-2002, 2006 by
-          David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright 1996-2002, 2006 by
+David Turner, Robert Wilhelm, and Werner Lemberg
 
 
 
 Introduction
 ============
 
-  The FreeType  Project is distributed in  several archive packages;
-  some of them may contain, in addition to the FreeType font engine,
-  various tools and  contributions which rely on, or  relate to, the
-  FreeType Project.
+The FreeType  Project is distributed in  several archive packages;
+some of them may contain, in addition to the FreeType font engine,
+various tools and  contributions which rely on, or  relate to, the
+FreeType Project.
 
-  This  license applies  to all  files found  in such  packages, and
-  which do not  fall under their own explicit  license.  The license
-  affects  thus  the  FreeType   font  engine,  the  test  programs,
-  documentation and makefiles, at the very least.
+This  license applies  to all  files found  in such  packages, and
+which do not  fall under their own explicit  license.  The license
+affects  thus  the  FreeType   font  engine,  the  test  programs,
+documentation and makefiles, at the very least.
 
-  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
-  (Independent JPEG  Group) licenses, which  all encourage inclusion
-  and  use of  free  software in  commercial  and freeware  products
-  alike.  As a consequence, its main points are that:
+This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
+(Independent JPEG  Group) licenses, which  all encourage inclusion
+and  use of  free  software in  commercial  and freeware  products
+alike.  As a consequence, its main points are that:
 
-    o We don't promise that this software works. However, we will be
-      interested in any kind of bug reports. (`as is' distribution)
+o We don't promise that this software works. However, we will be
+interested in any kind of bug reports. (`as is' distribution)
 
-    o You can  use this software for whatever you  want, in parts or
-      full form, without having to pay us. (`royalty-free' usage)
+o You can  use this software for whatever you  want, in parts or
+full form, without having to pay us. (`royalty-free' usage)
 
-    o You may not pretend that  you wrote this software.  If you use
-      it, or  only parts of it,  in a program,  you must acknowledge
-      somewhere  in  your  documentation  that  you  have  used  the
-      FreeType code. (`credits')
+o You may not pretend that  you wrote this software.  If you use
+it, or  only parts of it,  in a program,  you must acknowledge
+somewhere  in  your  documentation  that  you  have  used  the
+FreeType code. (`credits')
 
-  We  specifically  permit  and  encourage  the  inclusion  of  this
-  software, with  or without modifications,  in commercial products.
-  We  disclaim  all warranties  covering  The  FreeType Project  and
-  assume no liability related to The FreeType Project.
+We  specifically  permit  and  encourage  the  inclusion  of  this
+software, with  or without modifications,  in commercial products.
+We  disclaim  all warranties  covering  The  FreeType Project  and
+assume no liability related to The FreeType Project.
 
 
-  Finally,  many  people  asked  us  for  a  preferred  form  for  a
-  credit/disclaimer to use in compliance with this license.  We thus
-  encourage you to use the following text:
+Finally,  many  people  asked  us  for  a  preferred  form  for  a
+credit/disclaimer to use in compliance with this license.  We thus
+encourage you to use the following text:
 
-   """
-    Portions of this software are copyright © <year> The FreeType
-    Project (www.freetype.org).  All rights reserved.
-   """
+"""
+Portions of this software are copyright © <year> The FreeType
+Project (www.freetype.org).  All rights reserved.
+"""
 
-  Please replace <year> with the value from the FreeType version you
-  actually use.
+Please replace <year> with the value from the FreeType version you
+actually use.
 
 
 Legal Terms
@@ -99,110 +104,111 @@ Legal Terms
 0. Definitions
 --------------
 
-  Throughout this license,  the terms `package', `FreeType Project',
-  and  `FreeType  archive' refer  to  the  set  of files  originally
-  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
-  Werner Lemberg) as the `FreeType Project', be they named as alpha,
-  beta or final release.
-
-  `You' refers to  the licensee, or person using  the project, where
-  `using' is a generic term including compiling the project's source
-  code as  well as linking it  to form a  `program' or `executable'.
-  This  program is  referred to  as  `a program  using the  FreeType
-  engine'.
-
-  This  license applies  to all  files distributed  in  the original
-  FreeType  Project,   including  all  source   code,  binaries  and
-  documentation,  unless  otherwise  stated   in  the  file  in  its
-  original, unmodified form as  distributed in the original archive.
-  If you are  unsure whether or not a particular  file is covered by
-  this license, you must contact us to verify this.
-
-  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
-  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
-  specified below.
+Throughout this license,  the terms `package', `FreeType Project',
+and  `FreeType  archive' refer  to  the  set  of files  originally
+distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
+Werner Lemberg) as the `FreeType Project', be they named as alpha,
+beta or final release.
+
+`You' refers to  the licensee, or person using  the project, where
+`using' is a generic term including compiling the project's source
+code as  well as linking it  to form a  `program' or `executable'.
+This  program is  referred to  as  `a program  using the  FreeType
+engine'.
+
+This  license applies  to all  files distributed  in  the original
+FreeType  Project,   including  all  source   code,  binaries  and
+documentation,  unless  otherwise  stated   in  the  file  in  its
+original, unmodified form as  distributed in the original archive.
+If you are  unsure whether or not a particular  file is covered by
+this license, you must contact us to verify this.
+
+The FreeType  Project is copyright (C) 1996-2000  by David Turner,
+Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
+specified below.
 
 1. No Warranty
 --------------
 
-  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
-  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
-  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
-  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
-  USE, OF THE FREETYPE PROJECT.
+THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
+KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
+WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
+PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
+USE, OF THE FREETYPE PROJECT.
 
 2. Redistribution
 -----------------
 
-  This  license  grants  a  worldwide, royalty-free,  perpetual  and
-  irrevocable right  and license to use,  execute, perform, compile,
-  display,  copy,   create  derivative  works   of,  distribute  and
-  sublicense the  FreeType Project (in  both source and  object code
-  forms)  and  derivative works  thereof  for  any  purpose; and  to
-  authorize others  to exercise  some or all  of the  rights granted
-  herein, subject to the following conditions:
-
-    o Redistribution of  source code  must retain this  license file
-      (`FTL.TXT') unaltered; any  additions, deletions or changes to
-      the original  files must be clearly  indicated in accompanying
-      documentation.   The  copyright   notices  of  the  unaltered,
-      original  files must  be  preserved in  all  copies of  source
-      files.
-
-    o Redistribution in binary form must provide a  disclaimer  that
-      states  that  the software is based in part of the work of the
-      FreeType Team,  in  the  distribution  documentation.  We also
-      encourage you to put an URL to the FreeType web page  in  your
-      documentation, though this isn't mandatory.
-
-  These conditions  apply to any  software derived from or  based on
-  the FreeType Project,  not just the unmodified files.   If you use
-  our work, you  must acknowledge us.  However, no  fee need be paid
-  to us.
+This  license  grants  a  worldwide, royalty-free,  perpetual  and
+irrevocable right  and license to use,  execute, perform, compile,
+display,  copy,   create  derivative  works   of,  distribute  and
+sublicense the  FreeType Project (in  both source and  object code
+forms)  and  derivative works  thereof  for  any  purpose; and  to
+authorize others  to exercise  some or all  of the  rights granted
+herein, subject to the following conditions:
+
+o Redistribution of  source code  must retain this  license file
+(`FTL.TXT') unaltered; any  additions, deletions or changes to
+the original  files must be clearly  indicated in accompanying
+documentation.   The  copyright   notices  of  the  unaltered,
+original  files must  be  preserved in  all  copies of  source
+files.
+
+o Redistribution in binary form must provide a  disclaimer  that
+states  that  the software is based in part of the work of the
+FreeType Team,  in  the  distribution  documentation.  We also
+encourage you to put an URL to the FreeType web page  in  your
+documentation, though this isn't mandatory.
+
+These conditions  apply to any  software derived from or  based on
+the FreeType Project,  not just the unmodified files.   If you use
+our work, you  must acknowledge us.  However, no  fee need be paid
+to us.
 
 3. Advertising
 --------------
 
-  Neither the  FreeType authors and  contributors nor you  shall use
-  the name of the  other for commercial, advertising, or promotional
-  purposes without specific prior written permission.
+Neither the  FreeType authors and  contributors nor you  shall use
+the name of the  other for commercial, advertising, or promotional
+purposes without specific prior written permission.
 
-  We suggest,  but do not require, that  you use one or  more of the
-  following phrases to refer  to this software in your documentation
-  or advertising  materials: `FreeType Project',  `FreeType Engine',
-  `FreeType library', or `FreeType Distribution'.
+We suggest,  but do not require, that  you use one or  more of the
+following phrases to refer  to this software in your documentation
+or advertising  materials: `FreeType Project',  `FreeType Engine',
+`FreeType library', or `FreeType Distribution'.
 
-  As  you have  not signed  this license,  you are  not  required to
-  accept  it.   However,  as  the FreeType  Project  is  copyrighted
-  material, only  this license, or  another one contracted  with the
-  authors, grants you  the right to use, distribute,  and modify it.
-  Therefore,  by  using,  distributing,  or modifying  the  FreeType
-  Project, you indicate that you understand and accept all the terms
-  of this license.
+As  you have  not signed  this license,  you are  not  required to
+accept  it.   However,  as  the FreeType  Project  is  copyrighted
+material, only  this license, or  another one contracted  with the
+authors, grants you  the right to use, distribute,  and modify it.
+Therefore,  by  using,  distributing,  or modifying  the  FreeType
+Project, you indicate that you understand and accept all the terms
+of this license.
 
 4. Contacts
 -----------
 
-  There are two mailing lists related to FreeType:
+There are two mailing lists related to FreeType:
+
+o freetype@nongnu.org
 
-    o freetype@nongnu.org
+Discusses general use and applications of FreeType, as well as
+future and  wanted additions to the  library and distribution.
+If  you are looking  for support,  start in  this list  if you
+haven't found anything to help you in the documentation.
 
-      Discusses general use and applications of FreeType, as well as
-      future and  wanted additions to the  library and distribution.
-      If  you are looking  for support,  start in  this list  if you
-      haven't found anything to help you in the documentation.
+o freetype-devel@nongnu.org
 
-    o freetype-devel@nongnu.org
+Discusses bugs,  as well  as engine internals,  design issues,
+specific licenses, porting, etc.
 
-      Discusses bugs,  as well  as engine internals,  design issues,
-      specific licenses, porting, etc.
+Our home page can be found at
 
-  Our home page can be found at
+https://www.freetype.org
 
-    http://www.freetype.org
 
---- end of FDL.TXT ---
+--- end of FTL.TXT ---
 
 --- GPLv2.TXT ---
 
diff --git a/qtbase/src/3rdparty/freetype/PCF-LICENSE.txt b/qtbase/src/3rdparty/freetype/PCF-LICENSE.txt
index 3f3a3b3f0c..2668007a5c 100644
--- a/qtbase/src/3rdparty/freetype/PCF-LICENSE.txt
+++ b/qtbase/src/3rdparty/freetype/PCF-LICENSE.txt
@@ -18,3 +18,27 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--
+
+Copyright 1990, 1994, 1998  The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
diff --git a/qtbase/src/3rdparty/freetype/README b/qtbase/src/3rdparty/freetype/README
index e4c8cf1c57..7a8a2dcedc 100644
--- a/qtbase/src/3rdparty/freetype/README
+++ b/qtbase/src/3rdparty/freetype/README
@@ -1,92 +1,98 @@
-  FreeType 2.10.4
-  ===============
+FreeType 2.12.1
+===============
 
-  Homepage: https://www.freetype.org
+Homepage: https://www.freetype.org
 
-  FreeType is a freely available software library to render fonts.
+FreeType is a freely available software library to render fonts.
 
-  It  is  written  in  C,  designed to  be  small,  efficient,  highly
-  customizable, and  portable while capable of  producing high-quality
-  output  (glyph  images) of  most  vector  and bitmap  font  formats.
+It  is  written  in  C,   designed  to  be  small,  efficient,  highly
+customizable,  and portable  while capable  of producing  high-quality
+output (glyph images) of most vector and bitmap font formats.
 
-  Please   read   the  docs/CHANGES   file,   it  contains   IMPORTANT
-  INFORMATION.
+Please   read  the   `docs/CHANGES`   file,   it  contains   IMPORTANT
+INFORMATION.
 
-  Read the  files `docs/INSTALL*'  for installation  instructions; see
-  the file `docs/LICENSE.TXT' for the available licenses.
+Read the files `docs/INSTALL*`  for installation instructions; see the
+file `docs/LICENSE.TXT` for the available licenses.
 
-  The FreeType  2 API  reference is located  in `docs/reference/site';
-  use the file `index.html' as the top entry point.  [Please note that
-  currently the  search function  for locally  installed documentation
-  doesn't work due to cross-site scripting issues.]
+For using FreeType's git repository  instead of a distribution bundle,
+please read file `README.git`.
 
-  Additional documentation is available as a separate package from our
-  sites.  Go to
+The FreeType 2 API reference is located in directory `docs/reference`;
+use the file  `index.html` as the top entry point.   [Please note that
+currently  the search  function  for  locally installed  documentation
+doesn't work due to cross-site scripting issues.]
 
-    https://download.savannah.gnu.org/releases/freetype/
+Additional documentation is  available as a separate  package from our
+sites.  Go to
 
-  and download one of the following files.
+  https://download.savannah.gnu.org/releases/freetype/
 
-    freetype-doc-2.10.4.tar.xz
-    freetype-doc-2.10.4.tar.gz
-    ftdoc2104.zip
+and download one of the following files.
 
-  To view the documentation online, go to
+  freetype-doc-2.12.1.tar.xz
+  freetype-doc-2.12.1.tar.gz
+  ftdoc2121.zip
 
-    https://www.freetype.org/freetype2/docs/
+To view the documentation online, go to
 
+  https://www.freetype.org/freetype2/docs/
 
-  Mailing Lists
-  =============
 
-  The preferred way  of communication with the FreeType  team is using
-  e-mail lists.
+Mailing Lists
+-------------
 
-    general use and discussion:      freetype@nongnu.org
-    engine internals, porting, etc.: freetype-devel@nongnu.org
-    announcements:                   freetype-announce@nongnu.org
-    git repository tracker:          freetype-commit@nongnu.org
+The preferred  way of  communication with the  FreeType team  is using
+e-mail lists.
 
-  The lists are moderated; see
+  general use and discussion:      freetype@nongnu.org
+  engine internals, porting, etc.: freetype-devel@nongnu.org
+  announcements:                   freetype-announce@nongnu.org
+  git repository tracker:          freetype-commit@nongnu.org
 
-    https://www.freetype.org/contact.html
+The lists are moderated; see
 
-  how to subscribe.
+  https://www.freetype.org/contact.html
 
+how to subscribe.
 
-  Bugs
-  ====
 
-  Please submit bug reports at
+Bugs
+----
 
-    https://savannah.nongnu.org/bugs/?group=freetype
+Please submit bug reports at
 
-  Alternatively,    you   might    report    bugs    by   e-mail    to
-  `freetype-devel@nongnu.org'.   Don't  forget   to  send  a  detailed
-  explanation of the problem --  there is nothing worse than receiving
-  a terse message that only says `it doesn't work'.
+  https://gitlab.freedesktop.org/freetype/freetype/-/issues
 
+Alternatively,    you    might    report    bugs    by    e-mail    to
+`freetype-devel@nongnu.org`.    Don't  forget   to  send   a  detailed
+explanation of the problem -- there  is nothing worse than receiving a
+terse message that only says 'it doesn't work'.
 
-  Patches
-  =======
 
-  Please  submit patches  to  the `freetype-devel@nongnu.org'  mailing
-  list  --  and thank  you  in  advance  for  your work  on  improving
-  FreeType!
+Patches
+-------
 
-  Details on the process can be found here:
+For larger changes please provide merge requests at
 
-    https://www.freetype.org/developer.html#patches
+  https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests
 
+Alternatively, you can send patches to the `freetype-devel@nongnu.org`
+mailing list  -- and thank you  in advance for your  work on improving
+FreeType!
 
-  Enjoy!
+Details on the process can be found here:
 
+  https://www.freetype.org/developer.html#patches
 
-    The FreeType Team
+
+Enjoy!
+
+  The FreeType Team
 
 ----------------------------------------------------------------------
 
-Copyright (C) 2006-2020 by
+Copyright (C) 2006-2022 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/qtbase/src/3rdparty/freetype/builds/unix/ftconfig.h b/qtbase/src/3rdparty/freetype/builds/unix/ftconfig.h
index 51cb796391..57911e2f71 100644
--- a/qtbase/src/3rdparty/freetype/builds/unix/ftconfig.h
+++ b/qtbase/src/3rdparty/freetype/builds/unix/ftconfig.h
@@ -5,7 +5,7 @@
  *
  *   UNIX-specific configuration file (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/builds/unix/ftsystem.c b/qtbase/src/3rdparty/freetype/builds/unix/ftsystem.c
index 22bb4dab9b..e238c6083d 100644
--- a/qtbase/src/3rdparty/freetype/builds/unix/ftsystem.c
+++ b/qtbase/src/3rdparty/freetype/builds/unix/ftsystem.c
@@ -1,19 +1,19 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftsystem.c                                                             */
-/*                                                                         */
-/*    Unix-specific FreeType low-level system interface (body).            */
-/*                                                                         */
-/*  Copyright (C) 1996-2020 by                                             */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftsystem.c
+ *
+ *   Unix-specific FreeType low-level system interface (body).
+ *
+ * Copyright (C) 1996-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
 
 
 #include <ft2build.h>
@@ -70,30 +70,40 @@
 #include <string.h>
 #include <errno.h>
 
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*                       MEMORY MANAGEMENT INTERFACE                     */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    ft_alloc                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The memory allocation function.                                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    memory :: A pointer to the memory object.                          */
-  /*                                                                       */
-  /*    size   :: The requested size in bytes.                             */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The address of newly allocated block.                              */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   *                      MEMORY MANAGEMENT INTERFACE
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * It is not necessary to do any error checking for the
+   * allocation-related functions.  This will be done by the higher level
+   * routines like ft_mem_alloc() or ft_mem_realloc().
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   ft_alloc
+   *
+   * @Description:
+   *   The memory allocation function.
+   *
+   * @Input:
+   *   memory ::
+   *     A pointer to the memory object.
+   *
+   *   size ::
+   *     The requested size in bytes.
+   *
+   * @Return:
+   *   The address of newly allocated block.
+   */
   FT_CALLBACK_DEF( void* )
   ft_alloc( FT_Memory  memory,
             long       size )
@@ -104,26 +114,30 @@
   }
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    ft_realloc                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The memory reallocation function.                                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    memory   :: A pointer to the memory object.                        */
-  /*                                                                       */
-  /*    cur_size :: The current size of the allocated memory block.        */
-  /*                                                                       */
-  /*    new_size :: The newly requested size in bytes.                     */
-  /*                                                                       */
-  /*    block    :: The current address of the block in memory.            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The address of the reallocated memory block.                       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @Function:
+   *   ft_realloc
+   *
+   * @Description:
+   *   The memory reallocation function.
+   *
+   * @Input:
+   *   memory ::
+   *     A pointer to the memory object.
+   *
+   *   cur_size ::
+   *     The current size of the allocated memory block.
+   *
+   *   new_size ::
+   *     The newly requested size in bytes.
+   *
+   *   block ::
+   *     The current address of the block in memory.
+   *
+   * @Return:
+   *   The address of the reallocated memory block.
+   */
   FT_CALLBACK_DEF( void* )
   ft_realloc( FT_Memory  memory,
               long       cur_size,
@@ -137,19 +151,21 @@
   }
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    ft_free                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The memory release function.                                       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    memory :: A pointer to the memory object.                          */
-  /*                                                                       */
-  /*    block  :: The address of block in memory to be freed.              */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @Function:
+   *   ft_free
+   *
+   * @Description:
+   *   The memory release function.
+   *
+   * @Input:
+   *   memory ::
+   *     A pointer to the memory object.
+   *
+   *   block ::
+   *     The address of block in memory to be freed.
+   */
   FT_CALLBACK_DEF( void )
   ft_free( FT_Memory  memory,
            void*      block )
@@ -160,19 +176,19 @@
   }
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /*                     RESOURCE MANAGEMENT INTERFACE                     */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   *                    RESOURCE MANAGEMENT INTERFACE
+   *
+   */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
-  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
-  /* messages during execution.                                            */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+   * messages during execution.
+   */
 #undef  FT_COMPONENT
 #define FT_COMPONENT  io
 
@@ -181,17 +197,17 @@
 #define STREAM_FILE( stream )  ( (FILE*)stream->descriptor.pointer )
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    ft_close_stream_by_munmap                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The function to close a stream which is opened by mmap.            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    stream :: A pointer to the stream object.                          */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @Function:
+   *   ft_close_stream_by_munmap
+   *
+   * @Description:
+   *   The function to close a stream which is opened by mmap.
+   *
+   * @Input:
+   *   stream :: A pointer to the stream object.
+   */
   FT_CALLBACK_DEF( void )
   ft_close_stream_by_munmap( FT_Stream  stream )
   {
@@ -199,29 +215,29 @@
 
     stream->descriptor.pointer = NULL;
     stream->size               = 0;
-    stream->base               = 0;
+    stream->base               = NULL;
   }
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    ft_close_stream_by_free                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The function to close a stream which is created by ft_alloc.       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    stream :: A pointer to the stream object.                          */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @Function:
+   *   ft_close_stream_by_free
+   *
+   * @Description:
+   *   The function to close a stream which is created by ft_alloc.
+   *
+   * @Input:
+   *   stream :: A pointer to the stream object.
+   */
   FT_CALLBACK_DEF( void )
   ft_close_stream_by_free( FT_Stream  stream )
   {
-    ft_free( NULL, stream->descriptor.pointer );
+    ft_free( stream->memory, stream->descriptor.pointer );
 
     stream->descriptor.pointer = NULL;
     stream->size               = 0;
-    stream->base               = 0;
+    stream->base               = NULL;
   }
 
 
@@ -297,8 +313,7 @@
                                           file,
                                           0 );
 
-    /* on some RTOS, mmap might return 0 */
-    if ( (long)stream->base != -1 && stream->base != NULL )
+    if ( stream->base != MAP_FAILED )
       stream->close = ft_close_stream_by_munmap;
     else
     {
@@ -308,7 +323,7 @@
       FT_ERROR(( "FT_Stream_Open:" ));
       FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
 
-      stream->base = (unsigned char*)ft_alloc( NULL, stream->size );
+      stream->base = (unsigned char*)ft_alloc( stream->memory, stream->size );
 
       if ( !stream->base )
       {
@@ -349,7 +364,7 @@
     stream->descriptor.pointer = stream->base;
     stream->pathname.pointer   = (char*)filepathname;
 
-    stream->read = 0;
+    stream->read = NULL;
 
     FT_TRACE1(( "FT_Stream_Open:" ));
     FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
@@ -358,7 +373,7 @@
     return FT_Err_Ok;
 
   Fail_Read:
-    ft_free( NULL, stream->base );
+    ft_free( stream->memory, stream->base );
 
   Fail_Map:
     close( file );
@@ -393,7 +408,7 @@
     memory = (FT_Memory)malloc( sizeof ( *memory ) );
     if ( memory )
     {
-      memory->user    = 0;
+      memory->user    = NULL;
       memory->alloc   = ft_alloc;
       memory->realloc = ft_realloc;
       memory->free    = ft_free;
diff --git a/qtbase/src/3rdparty/freetype/builds/windows/ftdebug.c b/qtbase/src/3rdparty/freetype/builds/windows/ftdebug.c
new file mode 100644
index 0000000000..a65f544694
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/builds/windows/ftdebug.c
@@ -0,0 +1,698 @@
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ *   Debugging and logging component for Win32 (body).
+ *
+ * Copyright (C) 1996-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+  /**************************************************************************
+   *
+   * This component contains various macros and functions used to ease the
+   * debugging of the FreeType engine.  Its main purpose is in assertion
+   * checking, tracing, and error detection.
+   *
+   * There are now three debugging modes:
+   *
+   * - trace mode
+   *
+   *   Error and trace messages are sent to the log file (which can be the
+   *   standard error output).
+   *
+   * - error mode
+   *
+   *   Only error messages are generated.
+   *
+   * - release mode:
+   *
+   *   No error message is sent or generated.  The code is free from any
+   *   debugging parts.
+   *
+   */
+
+
+#include <freetype/freetype.h>
+#include <freetype/ftlogging.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+
+
+#ifdef FT_DEBUG_LOGGING
+
+  /**************************************************************************
+   *
+   * Variables used to control logging.
+   *
+   * 1. `ft_default_trace_level` stores the value of trace levels, which are
+   *    provided to FreeType using the `FT2_DEBUG` environment variable.
+   *
+   * 2. `ft_fileptr` stores the `FILE*` handle.
+   *
+   * 3. `ft_component` is a string that holds the name of `FT_COMPONENT`.
+   *
+   * 4. The flag `ft_component_flag` prints the name of `FT_COMPONENT` along
+   *    with the actual log message if set to true.
+   *
+   * 5. The flag `ft_timestamp_flag` prints time along with the actual log
+   *    message if set to ture.
+   *
+   * 6. `ft_have_newline_char` is used to differentiate between a log
+   *    message with and without a trailing newline character.
+   *
+   * 7. `ft_custom_trace_level` stores the custom trace level value, which
+   *    is provided by the user at run-time.
+   *
+   * We use `static` to avoid 'unused variable' warnings.
+   *
+   */
+  static const char*  ft_default_trace_level = NULL;
+  static FILE*        ft_fileptr             = NULL;
+  static const char*  ft_component           = NULL;
+  static FT_Bool      ft_component_flag      = FALSE;
+  static FT_Bool      ft_timestamp_flag      = FALSE;
+  static FT_Bool      ft_have_newline_char   = TRUE;
+  static const char*  ft_custom_trace_level  = NULL;
+
+  /* declared in ftdebug.h */
+
+  dlg_handler            ft_default_log_handler = NULL;
+  FT_Custom_Log_Handler  custom_output_handler  = NULL;
+
+#endif /* FT_DEBUG_LOGGING */
+
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+
+#ifdef _WIN32_WCE
+
+  FT_LOACAL_DEF( void )
+  OutputDebugStringA( LPCSTR lpOutputString )
+  {
+    int            len;
+    LPWSTR         lpOutputStringW;
+
+
+    /* allocate memory space for converted string */
+    len = MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
+                               lpOutputString, -1, NULL, 0 );
+
+    lpOutputStringW = (LPWSTR)_alloca( len * sizeof ( WCHAR ) );
+
+    if ( !len || !lpOutputStringW )
+      return;
+
+    /* now it is safe to do the translation */
+    MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
+                         lpOutputString, -1, lpOutputStringW, len );
+
+    OutputDebugStringW( lpOutputStringW );
+  }
+
+#endif /* _WIN32_WCE */
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Message( const char*  fmt,
+              ... )
+  {
+    va_list  ap;
+
+
+    va_start( ap, fmt );
+    vfprintf( stderr, fmt, ap );
+#if ( defined( _WIN32_WINNT ) && _WIN32_WINNT >= 0x0400 ) || \
+    ( defined( _WIN32_WCE )   && _WIN32_WCE   >= 0x0600 )
+    if ( IsDebuggerPresent() )
+    {
+      static char  buf[1024];
+
+
+      vsnprintf( buf, sizeof buf, fmt, ap );
+      OutputDebugStringA( buf );
+    }
+#endif
+    va_end( ap );
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Panic( const char*  fmt,
+            ... )
+  {
+    va_list  ap;
+
+
+    va_start( ap, fmt );
+    vfprintf( stderr, fmt, ap );
+#if ( defined( _WIN32_WINNT ) && _WIN32_WINNT >= 0x0400 ) || \
+    ( defined( _WIN32_WCE )   && _WIN32_WCE   >= 0x0600 )
+    if ( IsDebuggerPresent() )
+    {
+      static char  buf[1024];
+
+
+      vsnprintf( buf, sizeof buf, fmt, ap );
+      OutputDebugStringA( buf );
+    }
+#endif
+    va_end( ap );
+
+    exit( EXIT_FAILURE );
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( int )
+  FT_Throw( FT_Error     error,
+            int          line,
+            const char*  file )
+  {
+#if 0
+    /* activating the code in this block makes FreeType very chatty */
+    fprintf( stderr,
+             "%s:%d: error 0x%02x: %s\n",
+             file,
+             line,
+             error,
+             FT_Error_String( error ) );
+#else
+    FT_UNUSED( error );
+    FT_UNUSED( line );
+    FT_UNUSED( file );
+#endif
+
+    return 0;
+  }
+
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+  /* array of trace levels, initialized to 0; */
+  /* this gets adjusted at run-time           */
+  static int  ft_trace_levels_enabled[trace_count];
+
+  /* array of trace levels, always initialized to 0 */
+  static int  ft_trace_levels_disabled[trace_count];
+
+  /* a pointer to either `ft_trace_levels_enabled' */
+  /* or `ft_trace_levels_disabled'                 */
+  int*  ft_trace_levels;
+
+  /* define array of trace toggle names */
+#define FT_TRACE_DEF( x )  #x ,
+
+  static const char*  ft_trace_toggles[trace_count + 1] =
+  {
+#include <freetype/internal/fttrace.h>
+    NULL
+  };
+
+#undef FT_TRACE_DEF
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return trace_count;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  idx )
+  {
+    int  max = FT_Trace_Get_Count();
+
+
+    if ( idx < max )
+      return ft_trace_toggles[idx];
+    else
+      return NULL;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    ft_trace_levels = ft_trace_levels_disabled;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    ft_trace_levels = ft_trace_levels_enabled;
+  }
+
+
+  /**************************************************************************
+   *
+   * Initialize the tracing sub-system.  This is done by retrieving the
+   * value of the `FT2_DEBUG' environment variable.  It must be a list of
+   * toggles, separated by spaces, `;', or `,'.  Example:
+   *
+   *   export FT2_DEBUG="any:3 memory:7 stream:5"
+   *
+   * This requests that all levels be set to 3, except the trace level for
+   * the memory and stream components which are set to 7 and 5,
+   * respectively.
+   *
+   * See the file `include/freetype/internal/fttrace.h' for details of
+   * the available toggle names.
+   *
+   * The level must be between 0 and 7; 0 means quiet (except for serious
+   * runtime errors), and 7 means _very_ verbose.
+   */
+  FT_BASE_DEF( void )
+  ft_debug_init( void )
+  {
+    const char*  ft2_debug = NULL;
+
+
+#ifdef FT_DEBUG_LOGGING
+    if ( ft_custom_trace_level != NULL )
+      ft2_debug = ft_custom_trace_level;
+    else
+      ft2_debug = ft_default_trace_level;
+#else
+    ft2_debug = ft_getenv( "FT2_DEBUG" );
+#endif
+
+    if ( ft2_debug )
+    {
+      const char*  p = ft2_debug;
+      const char*  q;
+
+
+      for ( ; *p; p++ )
+      {
+        /* skip leading whitespace and separators */
+        if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
+          continue;
+
+#ifdef FT_DEBUG_LOGGING
+
+        /* check extra arguments for logging */
+        if ( *p == '-' )
+        {
+          const char*  r = ++p;
+
+
+          if ( *r == 'v' )
+          {
+            const char*  s = ++r;
+
+
+            ft_component_flag = TRUE;
+
+            if ( *s == 't' )
+            {
+              ft_timestamp_flag = TRUE;
+              p++;
+            }
+
+            p++;
+          }
+
+          else if ( *r == 't' )
+          {
+            const char*  s = ++r;
+
+
+            ft_timestamp_flag = TRUE;
+
+            if ( *s == 'v' )
+            {
+              ft_component_flag = TRUE;
+              p++;
+            }
+
+            p++;
+          }
+        }
+
+#endif /* FT_DEBUG_LOGGING */
+
+        /* read toggle name, followed by ':' */
+        q = p;
+        while ( *p && *p != ':' )
+          p++;
+
+        if ( !*p )
+          break;
+
+        if ( *p == ':' && p > q )
+        {
+          FT_Int  n, i, len = (FT_Int)( p - q );
+          FT_Int  level = -1, found = -1;
+
+
+          for ( n = 0; n < trace_count; n++ )
+          {
+            const char*  toggle = ft_trace_toggles[n];
+
+
+            for ( i = 0; i < len; i++ )
+            {
+              if ( toggle[i] != q[i] )
+                break;
+            }
+
+            if ( i == len && toggle[i] == 0 )
+            {
+              found = n;
+              break;
+            }
+          }
+
+          /* read level */
+          p++;
+          if ( *p )
+          {
+            level = *p - '0';
+            if ( level < 0 || level > 7 )
+              level = -1;
+          }
+
+          if ( found >= 0 && level >= 0 )
+          {
+            if ( found == trace_any )
+            {
+              /* special case for `any' */
+              for ( n = 0; n < trace_count; n++ )
+                ft_trace_levels_enabled[n] = level;
+            }
+            else
+              ft_trace_levels_enabled[found] = level;
+          }
+        }
+      }
+    }
+
+    ft_trace_levels = ft_trace_levels_enabled;
+  }
+
+
+#else  /* !FT_DEBUG_LEVEL_TRACE */
+
+
+  FT_BASE_DEF( void )
+  ft_debug_init( void )
+  {
+    /* nothing */
+  }
+
+
+  FT_BASE_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return 0;
+  }
+
+
+  FT_BASE_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  idx )
+  {
+    FT_UNUSED( idx );
+
+    return NULL;
+  }
+
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    /* nothing */
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    /* nothing */
+  }
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
+
+
+#ifdef FT_DEBUG_LOGGING
+
+  /**************************************************************************
+   *
+   * Initialize and de-initialize 'dlg' library.
+   *
+   */
+
+  FT_BASE_DEF( void )
+  ft_logging_init( void )
+  {
+    ft_default_log_handler = ft_log_handler;
+    ft_default_trace_level = ft_getenv( "FT2_DEBUG" );
+
+    if ( ft_getenv( "FT_LOGGING_FILE" ) )
+      ft_fileptr = ft_fopen( ft_getenv( "FT_LOGGING_FILE" ), "w" );
+    else
+      ft_fileptr = stderr;
+
+    ft_debug_init();
+
+    /* Set the default output handler for 'dlg'. */
+    dlg_set_handler( ft_default_log_handler, NULL );
+  }
+
+
+  FT_BASE_DEF( void )
+  ft_logging_deinit( void )
+  {
+    if ( ft_fileptr != stderr )
+      ft_fclose( ft_fileptr );
+  }
+
+
+  /**************************************************************************
+   *
+   * An output log handler for FreeType.
+   *
+   */
+  FT_BASE_DEF( void )
+  ft_log_handler( const struct dlg_origin*  origin,
+                  const char*               string,
+                  void*                     data )
+  {
+    char         features_buf[128];
+    char*        bufp = features_buf;
+
+    FT_UNUSED( data );
+
+
+    if ( ft_have_newline_char )
+    {
+      const char*  features        = NULL;
+      size_t       features_length = 0;
+
+
+#define FEATURES_TIMESTAMP            "[%h:%m] "
+#define FEATURES_COMPONENT            "[%t] "
+#define FEATURES_TIMESTAMP_COMPONENT  "[%h:%m %t] "
+
+      if ( ft_timestamp_flag && ft_component_flag )
+      {
+        features        = FEATURES_TIMESTAMP_COMPONENT;
+        features_length = sizeof ( FEATURES_TIMESTAMP_COMPONENT );
+      }
+      else if ( ft_timestamp_flag )
+      {
+        features        = FEATURES_TIMESTAMP;
+        features_length = sizeof ( FEATURES_TIMESTAMP );
+      }
+      else if ( ft_component_flag )
+      {
+        features        = FEATURES_COMPONENT;
+        features_length = sizeof ( FEATURES_COMPONENT );
+      }
+
+      if ( ft_component_flag || ft_timestamp_flag )
+      {
+        ft_strncpy( features_buf, features, features_length );
+        bufp += features_length - 1;
+      }
+
+      if ( ft_component_flag )
+      {
+        size_t  tag_length = ft_strlen( *origin->tags );
+        size_t  i;
+
+
+        /* To vertically align tracing messages we compensate the */
+        /* different FT_COMPONENT string lengths by inserting an  */
+        /* appropriate amount of space characters.                */
+        for ( i = 0;
+              i < FT_MAX_TRACE_LEVEL_LENGTH - tag_length;
+              i++ )
+          *bufp++ = ' ';
+      }
+    }
+
+    /* Finally add the format string for the tracing message. */
+    *bufp++ = '%';
+    *bufp++ = 'c';
+    *bufp   = '\0';
+
+    dlg_generic_outputf_stream( ft_fileptr,
+                                (const char*)features_buf,
+                                origin,
+                                string,
+                                dlg_default_output_styles,
+                                true );
+
+    if ( ft_strrchr( string, '\n' ) )
+      ft_have_newline_char = TRUE;
+    else
+      ft_have_newline_char = FALSE;
+  }
+
+
+  /* documentation is in ftdebug.h */
+  FT_BASE_DEF( void )
+  ft_add_tag( const char*  tag )
+  {
+    ft_component = tag;
+
+    dlg_add_tag( tag, NULL );
+  }
+
+
+  /* documentation is in ftdebug.h */
+  FT_BASE_DEF( void )
+  ft_remove_tag( const char*  tag )
+  {
+    dlg_remove_tag( tag, NULL );
+  }
+
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Level( const char*  level )
+  {
+    ft_component_flag     = FALSE;
+    ft_timestamp_flag     = FALSE;
+    ft_custom_trace_level = level;
+
+    ft_debug_init();
+  }
+
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Default_Level( void )
+  {
+    ft_component_flag     = FALSE;
+    ft_timestamp_flag     = FALSE;
+    ft_custom_trace_level = NULL;
+
+    ft_debug_init();
+  }
+
+
+  /**************************************************************************
+   *
+   * Functions to handle a custom log handler.
+   *
+   */
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Log_Handler( FT_Custom_Log_Handler  handler )
+  {
+    custom_output_handler = handler;
+  }
+
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Default_Log_Handler( void )
+  {
+    custom_output_handler = NULL;
+  }
+
+
+  /* documentation is in ftdebug.h */
+  FT_BASE_DEF( void )
+  FT_Logging_Callback( const char*  fmt,
+                       ... )
+  {
+    va_list  ap;
+
+
+    va_start( ap, fmt );
+    custom_output_handler( ft_component, fmt, ap );
+    va_end( ap );
+  }
+
+#else /* !FT_DEBUG_LOGGING */
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Level( const char*  level )
+  {
+    FT_UNUSED( level );
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Default_Level( void )
+  {
+    /* nothing */
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Log_Handler( FT_Custom_Log_Handler  handler )
+  {
+    FT_UNUSED( handler );
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Default_Log_Handler( void )
+  {
+    /* nothing */
+  }
+
+#endif /* !FT_DEBUG_LOGGING */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/docs/CHANGES b/qtbase/src/3rdparty/freetype/docs/CHANGES
index 3bd5291ae1..3ad7ec4333 100644
--- a/qtbase/src/3rdparty/freetype/docs/CHANGES
+++ b/qtbase/src/3rdparty/freetype/docs/CHANGES
@@ -1,4 +1,235 @@
-CHANGES BETWEEN 2.10.3 and 2.10.4
+CHANGES BETWEEN 2.12.0 and 2.12.1
+
+  I. IMPORTANT BUG FIXES
+
+  - Loading CFF fonts sometimes made FreeType crash (bug introduced in
+    version 2.12.0)
+
+  - Loading  a fully  hinted  TrueType glyph  a  second time  (without
+    caching) sometimes yielded different rendering results if TrueType
+    hinting was active (bug introduced in version 2.12.0).
+
+  - The generation of the pkg-config file `freetype2.pc` was broken if
+    the build was done with cmake (bug introduced in version 2.12.0).
+
+
+  II. MISCELLANEOUS
+
+  - New option `--with-librsvg` for  the `configure` script for better
+    FreeType demo support.
+
+  - The  meson  build  no  longer enforces  both  static  and  dynamic
+    versions of the library by default.
+
+  - The internal  zlib library was  updated to version  1.2.12.  Note,
+    however, that  FreeType is *not* affected  by CVE-2018-25032 since
+    it only does decompression.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.11.1 and 2.12.0
+
+  I. IMPORTANT CHANGES
+
+  - FreeType  now   handles  OT-SVG  fonts,  to   be  controlled  with
+    `FT_CONFIG_OPTION_SVG`  configuration macro.   By default,  it can
+    only load the 'SVG ' table of an OpenType font.  However, by using
+    the `svg-hooks` property of the new 'ot-svg' module it is possible
+    to register an  external SVG rendering engine.   The FreeType demo
+    programs  have been  set  up  to use  'librsvg'  as the  rendering
+    library.
+
+    This work was Moazin Khatti's GSoC 2019 project.
+
+
+  II. MISCELLANEOUS
+
+  - The handling of fonts with an 'sbix' table has been improved.
+
+    - Corrected bitmap offsets.
+
+    - A  new tag  `FT_PARAM_TAG_IGNORE_SBIX` for  `FT_Open_Face` makes
+      FreeType ignore an 'sbix' table in a font, allowing applications
+      to access the font's outline glyphs.
+
+    - `FT_FACE_FLAG_SBIX`  and   `FT_FACE_FLAG_SBIX_OVERLAY`  together
+      with their  corresponding preprocessor macros  `FT_HAS_SBIX` and
+      `FT_HAS_SBIX_OVERLAY` enable applications to treat 'sbix' tables
+      as described in the OpenType specification.
+
+  - The internal 'zlib'  code has been updated to be  in sync with the
+    current 'zlib' version (1.2.11).
+
+  - The  previously internal  load  flag  `FT_LOAD_SBITS_ONLY` is  now
+    public.
+
+  - Some  minor improvements  of the  building systems,  in particular
+    handling of the 'zlib' library (internal vs. external).
+
+  - Support for non-desktop Universal Windows Platform.
+
+  - Various other minor bug and documentation fixes.
+
+  - The `ftdump` demo  program shows more information  for Type1 fonts
+    if option `-n` is given.
+
+  - `ftgrid` can now display embedded bitmap strikes.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.11.0 and 2.11.1
+
+  I. IMPORTANT CHANGES
+
+    - Some  fields  in  the  `CID_FaceDictRec`, `CID_FaceInfoRec`, and
+      `FT_Data` structures  have been changed  from signed to unsigned
+      type,  which  better reflects  the actual usage.  It is also  an
+      additional means to protect against malformed input.
+
+
+  II. MISCELLANEOUS
+
+    - Cmake support  has been  further improved.   To do  that various
+      backward-incompatible  changes were  necessary; please  see file
+      `CMakeLists.txt` for more details.
+
+    - Since version  2.11.0, a  C99 compiler  is necessary  to compile
+      FreeType.
+
+    - The experimental  'COLR' v1 API  has been updated to  the latest
+      OpenType standard 1.9.
+
+    - The `apinames` tool got a new  option `-wV` to output an OpenVMS
+      Linker Option File.
+
+    - VMS support was updated.
+
+    - MS Visual Studio support was added to build the demo programs.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.10.4 and 2.11.0
+
+  I. IMPORTANT CHANGES
+
+  - A  new rendering  module has  been  added to  create 8-bit  Signed
+    Distance Field (SDF)  bitmaps for both outline  and bitmap glyphs.
+    The new  rendering mode is called  `FT_RENDER_MODE_SDF`, the pixel
+    mode is  `FT_PIXEL_MODE_GRAY8`, and the corresponding  raster flag
+    is `FT_RASTER_FLAG_SDF`.
+
+    This work was Anuj Verma's GSoC 2020 project.
+
+  - A new, experimental API is  now available for surfacing properties
+    of 'COLR' v1  color fonts (as the name says,  this is an extension
+    to  the  'COLR' table  for  outline  color  fonts using  the  SFNT
+    container  format).   'COLR'  v1  fonts are  a  recently  proposed
+    addition to OFF and OpenType; specification work currently happens
+    in
+
+      https://github.com/googlefonts/colr-gradients-spec/
+
+    'COLR'  v1  is  expected  to   be  merged  to  OpenType;  the  ISO
+    standardisation process  for adding 'COLR'  v1 as an  amendment to
+    OFF is underway.
+
+    Functions similar  to the  already existing  'COLR' API  have been
+    added to access the corresponding data.
+
+      FT_Get_Color_Glyph_Paint
+        Retrieve the root paint for a given glyph ID.
+
+      FT_Get_Paint_Layers
+        Access the layers of a `PaintColrLayers` table.
+
+      FT_Get_Colorline_Stops
+        Retrieve the  'color stops' on a  color line.  As an  input, a
+        color stop iterator gets used, which in turn is retrieved from
+        a paint.
+
+      FT_Get_Paint
+        Dereference  an  `FT_OpaquePaint`   object  and  retrieve  the
+        corresponding `FT_COLR_Paint`  object, which  contains details
+        on how to draw the respective 'COLR' v1 `Paint` table.
+
+
+  II. MISCELLANEOUS
+
+  - FreeType has moved its infrastructure to
+
+      https://gitlab.freedesktop.org/freetype
+
+    A  side  effect  is  that  the git  repositories  are  now  called
+    `freetype.git` and  `freetype-demos.git`, which by  default expand
+    to the directories  `freetype` and `freetype-demos`, respectively.
+    The documentation has been updated accordingly.
+
+    FreeType's Savannah  repositories will stay; they  are now mirrors
+    of the 'freedesktop.org' repositories.
+
+  - A  new  function  `FT_Get_Transform`  returns  the  values set  by
+    `FT_Set_Transform`.
+
+  - A  new configuration  macro `FT_DEBUG_LOGGING`  is available.   It
+    provides extended debugging capabilities for FreeType, for example
+    showing a time stamp or displaying the component a tracing message
+    comes from.  See file `docs/DEBUG` for more information.
+
+    This work was Priyesh Kumar's GSoC 2020 project.
+
+  - The legacy Type 1 and CFF  engines are further demoted due to lack
+    of CFF2 charstring support.  You now need to use `FT_Property_Set`
+    to  enable  them  besides  the  `T1_CONFIG_OPTION_OLD_ENGINE`  and
+    `CFF_CONFIG_OPTION_OLD_ENGINE` options, respectively.
+
+  - The experimental 'warp' mode (AF_CONFIG_OPTION_USE_WARPER) for the
+    auto-hinter has been removed.
+
+  - The smooth rasterizer performance has been improved by >10%.  Note
+    that  due to  necessary code  changes there  might be  very subtle
+    differences  in  rendering.  They  are  not  visible by  the  eye,
+    however.
+
+  - PCF bitmap fonts compressed with LZW (these are usually files with
+    the extension `.pcf.Z`) are now handled correctly.
+
+  - Improved  Meson  build  files,  including  support  to  build  the
+    FreeType demo programs.
+
+  - A new demo program `ftsdf` is available to display Signed Distance
+    Fields of glyphs.
+
+  - The `ftlint` demo program has been  extended to do more testing of
+    its input.  In particular, it  can display horizontal and vertical
+    acutances  for quality  assessment,  together  with computing  MD5
+    checksums of rendered glyphs.
+
+    [The acutance measures  how sharply the pixel  coverage changes at
+     glyph edges.  For monochrome bitmaps,  it is always 2.0 in either
+     X or  Y direction.  For  anti-aliased bitmaps, it depends  on the
+     hinting and the shape of a glyph and might approach or even reach
+     value 2.0  for glyphs like 'I',  'L', '+', '-', or  '=', while it
+     might be lower for glyphs like 'O', 'S', or 'W'.]
+
+  - The `ttdebug`  demo program didn't show  changed point coordinates
+    (bug introduced in version 2.10.3).
+
+  - It is now possible to adjust the axis increment for variable fonts
+    in the `ftmulti` demo program.
+
+  - It is now possible to change  the hinting engine in the `ftstring`
+    demo program.
+
+  - The graphical demo programs work  better now in native color depth
+    on win32 and x11.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.10.3 and 2.10.4 (2020-Oct-20)
 
   I. IMPORTANT BUG FIXES
 
@@ -13,7 +244,7 @@ CHANGES BETWEEN 2.10.3 and 2.10.4
 
 ======================================================================
 
-CHANGES BETWEEN 2.10.2 and 2.10.3
+CHANGES BETWEEN 2.10.2 and 2.10.3 (2020-Oct-10)
 
   I. IMPORTANT CHANGES
 
@@ -63,7 +294,7 @@ CHANGES BETWEEN 2.10.2 and 2.10.3
 
 ======================================================================
 
-CHANGES BETWEEN 2.10.1 and 2.10.2
+CHANGES BETWEEN 2.10.1 and 2.10.2 (2020-May-09)
 
   I. IMPORTANT CHANGES
 
@@ -100,7 +331,7 @@ CHANGES BETWEEN 2.10.1 and 2.10.2
 
 ======================================================================
 
-CHANGES BETWEEN 2.10.0 and 2.10.1
+CHANGES BETWEEN 2.10.0 and 2.10.1 (2019-Jul-01)
 
   I. IMPORTANT BUG FIXES
 
@@ -154,7 +385,7 @@ CHANGES BETWEEN 2.10.0 and 2.10.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.9.1 and 2.10.0
+CHANGES BETWEEN 2.9.1 and 2.10.0 (2019-Mar-15)
 
   I. IMPORTANT CHANGES
 
@@ -280,7 +511,7 @@ CHANGES BETWEEN 2.9.1 and 2.10.0
 
 ======================================================================
 
-CHANGES BETWEEN 2.9 and 2.9.1
+CHANGES BETWEEN 2.9 and 2.9.1 (2019-May-01)
 
   I. IMPORTANT BUG FIXES
 
@@ -328,7 +559,7 @@ CHANGES BETWEEN 2.9 and 2.9.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.8.1 and 2.9
+CHANGES BETWEEN 2.8.1 and 2.9 (2018-Jan-08)
 
   I. IMPORTANT BUG FIXES
 
@@ -418,7 +649,7 @@ CHANGES BETWEEN 2.8.1 and 2.9
 
 ======================================================================
 
-CHANGES BETWEEN 2.8 and 2.8.1
+CHANGES BETWEEN 2.8 and 2.8.1 (2017-Sep-16)
 
   I. IMPORTANT BUG FIXES
 
@@ -501,7 +732,7 @@ CHANGES BETWEEN 2.8 and 2.8.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.7.1 and 2.8
+CHANGES BETWEEN 2.7.1 and 2.8 (2017-May-13)
 
   I. IMPORTANT CHANGES
 
@@ -622,7 +853,7 @@ CHANGES BETWEEN 2.7.1 and 2.8
 
 ======================================================================
 
-CHANGES BETWEEN 2.7 and 2.7.1
+CHANGES BETWEEN 2.7 and 2.7.1 (2016-Dec-30)
 
   I. IMPORTANT CHANGES
 
@@ -699,7 +930,7 @@ CHANGES BETWEEN 2.7 and 2.7.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.6.5 and 2.7
+CHANGES BETWEEN 2.6.5 and 2.7 (2016-Sep-08)
 
   I. IMPORTANT CHANGES
 
@@ -763,7 +994,7 @@ CHANGES BETWEEN 2.6.5 and 2.7
 
 ======================================================================
 
-CHANGES BETWEEN 2.6.4 and 2.6.5
+CHANGES BETWEEN 2.6.4 and 2.6.5 (2016-Jul-12)
 
   I. IMPORTANT BUG FIXES
 
@@ -783,7 +1014,7 @@ CHANGES BETWEEN 2.6.4 and 2.6.5
 
 ======================================================================
 
-CHANGES BETWEEN 2.6.3 and 2.6.4
+CHANGES BETWEEN 2.6.3 and 2.6.4 (2016-Jul-05)
 
   I. IMPORTANT CHANGES
 
@@ -849,7 +1080,7 @@ CHANGES BETWEEN 2.6.3 and 2.6.4
 
 ======================================================================
 
-CHANGES BETWEEN 2.6.2 and 2.6.3
+CHANGES BETWEEN 2.6.2 and 2.6.3 (2016-Feb-08)
 
   I. IMPORTANT CHANGES
 
@@ -898,7 +1129,7 @@ CHANGES BETWEEN 2.6.2 and 2.6.3
 
 ======================================================================
 
-CHANGES BETWEEN 2.6.1 and 2.6.2
+CHANGES BETWEEN 2.6.1 and 2.6.2 (2015-Nov-28)
 
   I. IMPORTANT CHANGES
 
@@ -958,7 +1189,7 @@ CHANGES BETWEEN 2.6.1 and 2.6.2
 
 ======================================================================
 
-CHANGES BETWEEN 2.6 and 2.6.1
+CHANGES BETWEEN 2.6 and 2.6.1 (2015-Oct-04)
 
   I. IMPORTANT BUG FIXES
 
@@ -1039,7 +1270,7 @@ CHANGES BETWEEN 2.6 and 2.6.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.5.5 and 2.6
+CHANGES BETWEEN 2.5.5 and 2.6 (2015-Jun-07)
 
   I. IMPORTANT CHANGES
 
@@ -1145,7 +1376,7 @@ CHANGES BETWEEN 2.5.5 and 2.6
 
 ======================================================================
 
-CHANGES BETWEEN 2.5.4 and 2.5.5
+CHANGES BETWEEN 2.5.4 and 2.5.5 (2014-Dec-30)
 
   I. IMPORTANT BUG FIXES
 
@@ -1155,7 +1386,7 @@ CHANGES BETWEEN 2.5.4 and 2.5.5
 
 ======================================================================
 
-CHANGES BETWEEN 2.5.3 and 2.5.4
+CHANGES BETWEEN 2.5.3 and 2.5.4 (2014-Dec-06)
 
   I. IMPORTANT BUG FIXES
 
@@ -1226,7 +1457,7 @@ CHANGES BETWEEN 2.5.3 and 2.5.4
 
 ======================================================================
 
-CHANGES BETWEEN 2.5.2 and 2.5.3
+CHANGES BETWEEN 2.5.2 and 2.5.3 (2014-Mar-06)
 
   I. IMPORTANT BUG FIXES
 
@@ -1294,7 +1525,7 @@ CHANGES BETWEEN 2.5.2 and 2.5.3
 
 ======================================================================
 
-CHANGES BETWEEN 2.5.1 and 2.5.2
+CHANGES BETWEEN 2.5.1 and 2.5.2 (2013-Dec-08)
 
   I. IMPORTANT BUG FIXES
 
@@ -1318,7 +1549,7 @@ CHANGES BETWEEN 2.5.1 and 2.5.2
 
 ======================================================================
 
-CHANGES BETWEEN 2.5 and 2.5.1
+CHANGES BETWEEN 2.5 and 2.5.1 (2013-Nov-25)
 
   I. IMPORTANT BUG FIXES
 
@@ -1422,7 +1653,7 @@ CHANGES BETWEEN 2.5 and 2.5.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.12 and 2.5
+CHANGES BETWEEN 2.4.12 and 2.5 (2013-Jun-19)
 
   I. IMPORTANT BUG FIXES
 
@@ -1502,7 +1733,7 @@ CHANGES BETWEEN 2.4.12 and 2.5
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.11 and 2.4.12
+CHANGES BETWEEN 2.4.11 and 2.4.12 (2013-May-08)
 
     - We have another CFF parsing and hinting engine!  Written by Dave
       Arnold <darnold@adobe.com>,  this work  has been  contributed by
@@ -1590,7 +1821,7 @@ index ebcf189..3f2ce6b 100644
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.10 and 2.4.11
+CHANGES BETWEEN 2.4.10 and 2.4.11 (2012-Dec-20)
 
   I. IMPORTANT BUG FIXES
 
@@ -1650,7 +1881,7 @@ CHANGES BETWEEN 2.4.10 and 2.4.11
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.9 and 2.4.10
+CHANGES BETWEEN 2.4.9 and 2.4.10 (2012-Jun-15)
 
   I. IMPORTANT BUG FIXES
 
@@ -1675,7 +1906,7 @@ CHANGES BETWEEN 2.4.9 and 2.4.10
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.8 and 2.4.9
+CHANGES BETWEEN 2.4.8 and 2.4.9 (2012-Mar-08)
 
   I. IMPORTANT BUG FIXES
 
@@ -1703,7 +1934,7 @@ CHANGES BETWEEN 2.4.8 and 2.4.9
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.7 and 2.4.8
+CHANGES BETWEEN 2.4.7 and 2.4.8 (2011-Nov-14)
 
   I. IMPORTANT BUG FIXES
 
@@ -1719,7 +1950,7 @@ CHANGES BETWEEN 2.4.7 and 2.4.8
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.6 and 2.4.7
+CHANGES BETWEEN 2.4.6 and 2.4.7 (2011-Oct-18)
 
   I. IMPORTANT BUG FIXES
 
@@ -1736,7 +1967,7 @@ CHANGES BETWEEN 2.4.6 and 2.4.7
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.5 and 2.4.6
+CHANGES BETWEEN 2.4.5 and 2.4.6 (2011-Jul-29)
 
   I. IMPORTANT BUG FIXES
 
@@ -1775,7 +2006,7 @@ CHANGES BETWEEN 2.4.5 and 2.4.6
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.4 and 2.4.5
+CHANGES BETWEEN 2.4.4 and 2.4.5 (2011-Jun-25)
 
   I. IMPORTANT BUG FIXES
 
@@ -1822,7 +2053,7 @@ CHANGES BETWEEN 2.4.4 and 2.4.5
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.3 and 2.4.4
+CHANGES BETWEEN 2.4.3 and 2.4.4 (2010-Nov-28)
 
   I. IMPORTANT BUG FIXES
 
@@ -1847,7 +2078,7 @@ CHANGES BETWEEN 2.4.3 and 2.4.4
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.2 and 2.4.3
+CHANGES BETWEEN 2.4.2 and 2.4.3 (2010-Oct-03)
 
   I. IMPORTANT BUG FIXES
 
@@ -1866,7 +2097,7 @@ CHANGES BETWEEN 2.4.2 and 2.4.3
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.1 and 2.4.2
+CHANGES BETWEEN 2.4.1 and 2.4.2 (2010-Aug-06)
 
   I. IMPORTANT BUG FIXES
 
@@ -1890,7 +2121,7 @@ CHANGES BETWEEN 2.4.1 and 2.4.2
 
 ======================================================================
 
-CHANGES BETWEEN 2.4.0 and 2.4.1
+CHANGES BETWEEN 2.4.0 and 2.4.1 (2010-Jul-18)
 
   I. IMPORTANT CHANGES
 
@@ -1900,7 +2131,7 @@ CHANGES BETWEEN 2.4.0 and 2.4.1
 
 ======================================================================
 
-CHANGES BETWEEN 2.3.12 and 2.4.0
+CHANGES BETWEEN 2.3.12 and 2.4.0 (2010-Jul-12)
 
   I. IMPORTANT CHANGES
 
@@ -5299,7 +5530,7 @@ Extensions support:
 
 ------------------------------------------------------------------------
 
-Copyright (C) 2000-2020 by
+Copyright (C) 2000-2022 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file  is  part  of the  FreeType  project, and may  only be  used,
diff --git a/qtbase/src/3rdparty/freetype/docs/CUSTOMIZE b/qtbase/src/3rdparty/freetype/docs/CUSTOMIZE
index 0f92e70046..1a750825b2 100644
--- a/qtbase/src/3rdparty/freetype/docs/CUSTOMIZE
+++ b/qtbase/src/3rdparty/freetype/docs/CUSTOMIZE
@@ -139,7 +139,7 @@ IV. Overriding default configuration and module headers
 
 ----------------------------------------------------------------------
 
-Copyright (C) 2003-2020 by
+Copyright (C) 2003-2022 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/qtbase/src/3rdparty/freetype/docs/DEBUG b/qtbase/src/3rdparty/freetype/docs/DEBUG
index a96b5e27b8..fd2de134d5 100644
--- a/qtbase/src/3rdparty/freetype/docs/DEBUG
+++ b/qtbase/src/3rdparty/freetype/docs/DEBUG
@@ -44,6 +44,21 @@ located in the file `ftoption.h'.  The macros are:
     When `FT2_DEBUG_MEMORY'  isn't defined  at runtime,  the debugging
     memory manager is ignored, and performance is unaffected.
 
+  FT_DEBUG_LOGGING
+
+    #define this macro for enhanced logging support; it automatically
+    sets `FT_DEBUG_LEVEL_TRACE' and `FT_DEBUG_LEVEL_ERROR'.
+
+    If  defined,  `FT_TRACE'  and  `FT_ERROR'  can  send  tracing  and
+    debugging messages to a file.  The location of the log file has to
+    be set  with the  `FT_LOGGING_FILE' environment variable  (more on
+    this later).
+
+    The main enhancements are the  possibility of logging the time and
+    the name  of the `FT_COMPONENT'  macro together with  the affected
+    `FT_TRACE' or `FT_ERROR' calls.  See below how to activate this in
+    the `FT2_DEBUG' environment variable.
+
 
 II. Debugging macros
 --------------------
@@ -150,6 +165,43 @@ behaviour of FreeType at runtime.
     the memory and io components, which  are set to the trace levels 5
     and 4, respectively.
 
+    If `FT_DEBUG_LOGGING' is defined, two more options are available.
+
+    * -v: Print also  the name of FreeType's component  from which the
+          current log is produced, together with the tracing level.
+
+    * -t: Print also the time.
+
+    Here are some examples how the output might look like.
+
+      FT2_DEBUG="any:7 memory:5 -vt"
+
+        => [20:32:02:44969 ttload:2]    table directory loaded
+
+      FT2_DEBUG="any:7 memory:5 -t"
+
+        => [20:32:02:44969]    table directory loaded
+
+      FT2_DEBUG="any:7 memory:5 -v"
+
+        => [ttload:2]    table directory loaded
+
+
+  FT_LOGGING_FILE
+
+    This  variable  is  only  used  if  FreeType  is  built  with  the
+    `FT_DEBUG_LOGGING'  macro defined.   It contains  the path  to the
+    file where the user wants to put  his log file.  If it is not set,
+    FreeType uses stderr.
+
+    Examples:
+
+      On UNIX-like systems with bash:
+      export FT_LOGGING_FILE="/tmp/freetype2.log"
+
+      On Windows:
+      set FT_LOGGING_FILE=C:\Users\AppData\Local\Temp\freetype2.log
+
 
   FT2_DEBUG_MEMORY
 
@@ -201,9 +253,51 @@ behaviour of FreeType at runtime.
     If it  is undefined,  or if  its value  is not  strictly positive,
     freed blocks are released at runtime.
 
+
+IV. Additional Capabilities with `FT_DEBUG_LOGGING'
+---------------------------------------------------
+
+If `FT_DEBUG_LOGGING' is  defined, four APIs are  available to provide
+additional debugging support.  Use
+
+  #include <freetype/ftlogging.h>
+
+to access them.
+
+  FT_Trace_Set_Level( const char*  level )
+
+    By  default,  FreeType   uses  the  tracing  levels   set  in  the
+    `FT2_DEBUG' environment  variable.  Use this function  to override
+    the value with `level'.  Use value `NULL' to disable tracing.
+
+  FT_Trace_Set_Default_Level():
+
+    Reset the tracing levels to the default value, i.e., the value of
+    the `FT2_DEBUG' environment variable or no tracing if not set.
+
+  FT_Set_Log_Handler( ft_custom_log_handler  handler ):
+
+    Use `handler' as a custom handler for formatting tracing and error
+    messages.  The  `ft_custom_log_handler' typedef has  the following
+    prototype.
+
+      void
+      (*ft_custom_log_handler)( const char*  ft_component,
+                                const char*  fmt,
+                                va_list      args );
+
+   `ft_component' is the current component like `ttload', `fmt' is the
+   first argument  of `FT_TRACE' or  `FT_ERROR', and `args'  holds the
+   remaining arguments.
+
+  FT_Set_Default_Log_Handler():
+
+    Reset the log handler to the default version.
+
+
 ------------------------------------------------------------------------
 
-Copyright (C) 2002-2020 by
+Copyright (C) 2002-2022 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part  of the  FreeType  project, and  may  only be  used,
diff --git a/qtbase/src/3rdparty/freetype/docs/LICENSE.TXT b/qtbase/src/3rdparty/freetype/docs/LICENSE.TXT
deleted file mode 100644
index af5a1c50f6..0000000000
--- a/qtbase/src/3rdparty/freetype/docs/LICENSE.TXT
+++ /dev/null
@@ -1,39 +0,0 @@
-
-The  FreeType 2  font  engine is  copyrighted  work and  cannot be  used
-legally  without a  software license.   In  order to  make this  project
-usable  to a vast  majority of  developers, we  distribute it  under two
-mutually exclusive open-source licenses.
-
-This means  that *you* must choose  *one* of the  two licenses described
-below, then obey  all its terms and conditions when  using FreeType 2 in
-any of your projects or products.
-
-  - The FreeType License, found in  the file `FTL.TXT', which is similar
-    to the original BSD license *with* an advertising clause that forces
-    you  to  explicitly cite  the  FreeType  project  in your  product's
-    documentation.  All  details are in the license  file.  This license
-    is  suited  to products  which  don't  use  the GNU  General  Public
-    License.
-
-    Note that  this license  is  compatible  to the  GNU General  Public
-    License version 3, but not version 2.
-
-  - The GNU General Public License version 2, found in  `GPLv2.TXT' (any
-    later version can be used  also), for programs which already use the
-    GPL.  Note  that the  FTL is  incompatible  with  GPLv2 due  to  its
-    advertisement clause.
-
-The contributed BDF and PCF drivers  come with a license similar to that
-of the X Window System.  It is compatible to the above two licenses (see
-file src/bdf/README and  src/pcf/README).  The same holds  for the files
-`fthash.c' and  `fthash.h'; their  code was  part of  the BDF  driver in
-earlier FreeType versions.
-
-The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
-compatible to the above two licenses.
-
-The MD5 checksum support (only used for debugging in development builds)
-is in the public domain.
-
-
---- end of LICENSE.TXT ---
diff --git a/qtbase/src/3rdparty/freetype/docs/TODO b/qtbase/src/3rdparty/freetype/docs/TODO
index 8b27e269a3..623866eab9 100644
--- a/qtbase/src/3rdparty/freetype/docs/TODO
+++ b/qtbase/src/3rdparty/freetype/docs/TODO
@@ -27,7 +27,7 @@ Other bugs have been registered at the savannah bugzilla of FreeType.
 
 ------------------------------------------------------------------------
 
-Copyright (C) 2001-2020 by
+Copyright (C) 2001-2022 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file  is  part  of the  FreeType  project, and may  only be  used,
diff --git a/qtbase/src/3rdparty/freetype/freetype.pro b/qtbase/src/3rdparty/freetype/freetype.pro
index 0b53c86591..e287222728 100644
--- a/qtbase/src/3rdparty/freetype/freetype.pro
+++ b/qtbase/src/3rdparty/freetype/freetype.pro
@@ -51,17 +51,24 @@ SOURCES += \
     $$PWD/src/pshinter/pshinter.c \
     $$PWD/src/psnames/psmodule.c \
     $$PWD/src/raster/raster.c \
+    $$PWD/src/sdf/ftsdfrend.c \
+    $$PWD/src/sdf/ftbsdf.c \
+    $$PWD/src/sdf/ftsdf.c \
+    $$PWD/src/sdf/ftsdfcommon.c \
     $$PWD/src/sfnt/sfnt.c \
     $$PWD/src/smooth/smooth.c \
+    $$PWD/src/svg/ftsvg.c \
     $$PWD/src/truetype/truetype.c \
     $$PWD/src/type1/type1.c \
     $$PWD/src/type42/type42.c \
     $$PWD/src/winfonts/winfnt.c
 
 win32 {
-    SOURCES += $$PWD/src/base/ftsystem.c
+    SOURCES += $$PWD/src/base/ftsystem.c \
+               $$PWD/builds/windows/ftdebug.c
 } else {
     SOURCES += $$PWD/builds/unix/ftsystem.c
+               $$PWD/src/base/ftdebug.c
     INCLUDEPATH += $$PWD/builds/unix
 }
 
diff --git a/qtbase/src/3rdparty/freetype/import_from_tarball.sh b/qtbase/src/3rdparty/freetype/import_from_tarball.sh
index df8717d68a..e7d1bb8c37 100644
--- a/qtbase/src/3rdparty/freetype/import_from_tarball.sh
+++ b/qtbase/src/3rdparty/freetype/import_from_tarball.sh
@@ -78,6 +78,7 @@ copy_file_or_dir() {
 FILES="
     README
     builds/unix/ftsystem.c
+    builds/windows/ftdebug.c
     docs/CHANGES
     docs/CUSTOMIZE
     docs/DEBUG
@@ -85,7 +86,6 @@ FILES="
     docs/TODO
     docs/FTL.TXT
     docs/GPLv2.TXT
-    docs/LICENSE.TXT
     include/
     src/
 "
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/ftconfig.h b/qtbase/src/3rdparty/freetype/include/freetype/config/ftconfig.h
index b464e0b789..c696e900a6 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/ftconfig.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/ftconfig.h
@@ -4,7 +4,7 @@
  *
  *   ANSI-specific configuration file (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/ftheader.h b/qtbase/src/3rdparty/freetype/include/freetype/config/ftheader.h
index 28b5cc60cf..a8c6833df7 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/ftheader.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/ftheader.h
@@ -4,7 +4,7 @@
  *
  *   Build macros of the FreeType 2 library.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -777,6 +777,18 @@
 #define FT_COLOR_H  <freetype/ftcolor.h>
 
 
+  /**************************************************************************
+   *
+   * @macro:
+   *   FT_OTSVG_H
+   *
+   * @description:
+   *   A macro used in `#include` statements to name the file containing the
+   *   FreeType~2 API which handles the OpenType 'SVG~' glyphs.
+   */
+#define FT_OTSVG_H  <freetype/otsvg.h>
+
+
   /* */
 
   /* These header files don't need to be included by the user. */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/ftmodule.h b/qtbase/src/3rdparty/freetype/include/freetype/config/ftmodule.h
index b5c4b1ee58..b315baba8a 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/ftmodule.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/ftmodule.h
@@ -19,12 +19,15 @@ FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
 FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
 FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
 FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
 FT_USE_MODULE( FT_Module_Class, psaux_module_class )
 FT_USE_MODULE( FT_Module_Class, psnames_module_class )
 FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
 FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
 FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
-FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_bitmap_sdf_renderer_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_svg_renderer_class )
 
 /* EOF */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/ftoption.h b/qtbase/src/3rdparty/freetype/include/freetype/config/ftoption.h
index 097f19b8a5..c5bde243b1 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/ftoption.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/ftoption.h
@@ -4,7 +4,7 @@
  *
  *   User-selectable configuration macros (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -105,8 +105,7 @@ FT_BEGIN_HEADER
    *
    * ```
    *   FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
-   *                       cff:no-stem-darkening=1 \
-   *                       autofitter:warping=1
+   *                       cff:no-stem-darkening=1
    * ```
    *
    */
@@ -220,6 +219,10 @@ FT_BEGIN_HEADER
    *   If you use a build system like cmake or the `configure` script,
    *   options set by those programs have precedence, overwriting the value
    *   here with the configured one.
+   *
+   *   If you use the GNU make build system directly (that is, without the
+   *   `configure` script) and you define this macro, you also have to pass
+   *   `SYSTEM_ZLIB=yes` as an argument to make.
    */
 /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
 
@@ -431,6 +434,23 @@ FT_BEGIN_HEADER
 /* #define FT_DEBUG_LEVEL_TRACE */
 
 
+  /**************************************************************************
+   *
+   * Logging
+   *
+   *   Compiling FreeType in debug or trace mode makes FreeType write error
+   *   and trace log messages to `stderr`.  Enabling this macro
+   *   automatically forces the `FT_DEBUG_LEVEL_ERROR` and
+   *   `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and
+   *   trace log messages to a file instead of `stderr`.  For writing logs
+   *   to a file, FreeType uses an the external `dlg` library (the source
+   *   code is in `src/dlg`).
+   *
+   *   This option needs a C99 compiler.
+   */
+/* #define FT_DEBUG_LOGGING */
+
+
   /**************************************************************************
    *
    * Autofitter debugging
@@ -507,6 +527,20 @@ FT_BEGIN_HEADER
 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
 
 
+  /**************************************************************************
+   *
+   * OpenType SVG Glyph Support
+   *
+   *   Setting this macro enables support for OpenType SVG glyphs.  By
+   *   default, FreeType can only fetch SVG documents.  However, it can also
+   *   render them if external rendering hook functions are plugged in at
+   *   runtime.
+   *
+   *   More details on the hooks can be found in file `otsvg.h`.
+   */
+#define FT_CONFIG_OPTION_SVG
+
+
   /**************************************************************************
    *
    * Error Strings
@@ -892,24 +926,6 @@ FT_BEGIN_HEADER
 #endif
 
 
-  /**************************************************************************
-   *
-   * Compile 'autofit' module with warp hinting.  The idea of the warping
-   * code is to slightly scale and shift a glyph within a single dimension so
-   * that as much of its segments are aligned (more or less) on the grid.  To
-   * find out the optimal scaling and shifting value, various parameter
-   * combinations are tried and scored.
-   *
-   * You can switch warping on and off with the `warping` property of the
-   * auto-hinter (see file `ftdriver.h` for more information; by default it
-   * is switched off).
-   *
-   * This experimental option is not active if the rendering mode is
-   * `FT_RENDER_MODE_LIGHT`.
-   */
-#define AF_CONFIG_OPTION_USE_WARPER
-
-
   /**************************************************************************
    *
    * Use TrueType-like size metrics for 'light' auto-hinting.
@@ -961,6 +977,21 @@ FT_BEGIN_HEADER
 #endif
 
 
+  /*
+   * The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this
+   * version of FreeType has support for 'COLR' v1 API.  This definition is
+   * useful to FreeType clients that want to build in support for 'COLR' v1
+   * depending on a tip-of-tree checkout before it is officially released in
+   * FreeType, and while the feature cannot yet be tested against using
+   * version macros.  Don't change this macro.  This may be removed once the
+   * feature is in a FreeType release version and version macros can be used
+   * to test for availability.
+   */
+#ifdef TT_CONFIG_OPTION_COLOR_LAYERS
+#define  TT_SUPPORT_COLRV1
+#endif
+
+
   /*
    * Check CFF darkening parameters.  The checks are the same as in function
    * `cff_property_set` in file `cffdrivr.c`.
@@ -989,8 +1020,8 @@ FT_BEGIN_HEADER
 #error "Invalid CFF darkening parameters!"
 #endif
 
-FT_END_HEADER
 
+FT_END_HEADER
 
 #endif /* FTOPTION_H_ */
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/ftstdlib.h b/qtbase/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
index d6091f8b3d..7958c2a5f7 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
  *   ANSI-specific library and header configuration file (specification
  *   only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -43,7 +43,8 @@
    *
    * `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of
    * `int` and `long` in bytes at compile-time.  So far, this works for all
-   * platforms the library has been tested on.
+   * platforms the library has been tested on.  We also check `ULLONG_MAX`
+   * to see whether we can use 64-bit `long long` later on.
    *
    * Note that on the extremely rare platforms that do not provide integer
    * types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where
@@ -66,6 +67,15 @@
 #define FT_LONG_MIN    LONG_MIN
 #define FT_LONG_MAX    LONG_MAX
 #define FT_ULONG_MAX   ULONG_MAX
+#ifdef LLONG_MAX
+#define FT_LLONG_MAX   LLONG_MAX
+#endif
+#ifdef LLONG_MIN
+#define FT_LLONG_MIN   LLONG_MIN
+#endif
+#ifdef ULLONG_MAX
+#define FT_ULLONG_MAX  ULLONG_MAX
+#endif
 
 
   /**************************************************************************
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/integer-types.h b/qtbase/src/3rdparty/freetype/include/freetype/config/integer-types.h
index a0ca0c95e2..d9d2638d1e 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/integer-types.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/integer-types.h
@@ -4,7 +4,7 @@
  *
  *   FreeType integer types definitions.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -60,6 +60,18 @@
 
 #endif /* !defined(FT_SIZEOF_LONG) */
 
+#ifndef FT_SIZEOF_LONG_LONG
+
+  /* The size of a `long long` type if available */
+#if defined( FT_ULLONG_MAX ) && FT_ULLONG_MAX >= 0xFFFFFFFFFFFFFFFFULL
+#define FT_SIZEOF_LONG_LONG  ( 64 / FT_CHAR_BIT )
+#else
+#define FT_SIZEOF_LONG_LONG  0
+#endif
+
+#endif /* !defined(FT_SIZEOF_LONG_LONG) */
+
+
   /**************************************************************************
    *
    * @section:
@@ -174,15 +186,17 @@
 #endif
 
 
-  /* determine whether we have a 64-bit `int` type for platforms without */
-  /* Autoconf                                                            */
+  /* determine whether we have a 64-bit integer type */
 #if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
 
-  /* `FT_LONG64` must be defined if a 64-bit type is available */
-#define FT_LONG64
 #define FT_INT64   long
 #define FT_UINT64  unsigned long
 
+#elif FT_SIZEOF_LONG_LONG >= ( 64 / FT_CHAR_BIT )
+
+#define FT_INT64   long long int
+#define FT_UINT64  unsigned long long int
+
   /**************************************************************************
    *
    * A 64-bit data type may create compilation problems if you compile in
@@ -192,16 +206,9 @@
    */
 #elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
 
-#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
-
-#define FT_LONG64
-#define FT_INT64   long long int
-#define FT_UINT64  unsigned long long int
-
-#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
 
   /* this compiler provides the `__int64` type */
-#define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
 
@@ -211,32 +218,30 @@
   /*       to test the compiler version.                                 */
 
   /* this compiler provides the `__int64` type */
-#define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
 
-#elif defined( __WATCOMC__ )   /* Watcom C++ */
+#elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1100  /* Watcom C++ */
 
-  /* Watcom doesn't provide 64-bit data types */
+#define FT_INT64   long long int
+#define FT_UINT64  unsigned long long int
 
 #elif defined( __MWERKS__ )    /* Metrowerks CodeWarrior */
 
-#define FT_LONG64
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
 #elif defined( __GNUC__ )
 
   /* GCC provides the `long long` type */
-#define FT_LONG64
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
-#endif /* __STDC_VERSION__ >= 199901L */
+#endif /* !__STDC__ */
 
 #endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
 
-#ifdef FT_LONG64
+#ifdef FT_INT64
   typedef FT_INT64   FT_Int64;
   typedef FT_UINT64  FT_UInt64;
 #endif
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/mac-support.h b/qtbase/src/3rdparty/freetype/include/freetype/config/mac-support.h
index 94867088e9..e42c9fe410 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/mac-support.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/mac-support.h
@@ -4,7 +4,7 @@
  *
  *   Mac/OS X support configuration header.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/config/public-macros.h b/qtbase/src/3rdparty/freetype/include/freetype/config/public-macros.h
index 6aa673e807..0074134f1d 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/config/public-macros.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/config/public-macros.h
@@ -4,7 +4,7 @@
  *
  *   Define a set of compiler macros used in public FreeType headers.
  *
- * Copyright (C) 2020 by
+ * Copyright (C) 2020-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -103,6 +103,7 @@ FT_BEGIN_HEADER
    */
 #define FT_EXPORT( x )  FT_PUBLIC_FUNCTION_ATTRIBUTE extern x
 
+
   /*
    * `FT_UNUSED` indicates that a given parameter is not used -- this is
    * only used to get rid of unpleasant compiler warnings.
@@ -115,6 +116,23 @@ FT_BEGIN_HEADER
 #endif
 
 
+  /*
+   * Support for casts in both C and C++.
+   */
+#ifdef __cplusplus
+#define FT_STATIC_CAST( type, var )       static_cast<type>(var)
+#define FT_REINTERPRET_CAST( type, var )  reinterpret_cast<type>(var)
+
+#define FT_STATIC_BYTE_CAST( type, var )                         \
+          static_cast<type>( static_cast<unsigned char>( var ) )
+#else
+#define FT_STATIC_CAST( type, var )       (type)(var)
+#define FT_REINTERPRET_CAST( type, var )  (type)(var)
+
+#define FT_STATIC_BYTE_CAST( type, var )  (type)(unsigned char)(var)
+#endif
+
+
 FT_END_HEADER
 
 #endif  /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/freetype.h b/qtbase/src/3rdparty/freetype/include/freetype/freetype.h
index be191f5aa0..aa1a4fe389 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/freetype.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/freetype.h
@@ -4,7 +4,7 @@
  *
  *   FreeType high-level API and common types (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -30,6 +30,34 @@ FT_BEGIN_HEADER
 
 
 
+  /**************************************************************************
+   *
+   * @section:
+   *   preamble
+   *
+   * @title:
+   *   Preamble
+   *
+   * @abstract:
+   *   What FreeType is and isn't
+   *
+   * @description:
+   *   FreeType is a library that provides access to glyphs in font files.  It
+   *   scales the glyph images and their metrics to a requested size, and it
+   *   rasterizes the glyph images to produce pixel or subpixel alpha coverage
+   *   bitmaps.
+   *
+   *   Note that FreeType is _not_ a text layout engine.  You have to use
+   *   higher-level libraries like HarfBuzz, Pango, or ICU for that.
+   *
+   *   Note also that FreeType does _not_ perform alpha blending or
+   *   compositing the resulting bitmaps or pixmaps by itself.  Use your
+   *   favourite graphics library (for example, Cairo or Skia) to further
+   *   process FreeType's output.
+   *
+   */
+
+
   /**************************************************************************
    *
    * @section:
@@ -125,6 +153,9 @@ FT_BEGIN_HEADER
    *   FT_FACE_FLAG_GLYPH_NAMES
    *   FT_FACE_FLAG_EXTERNAL_STREAM
    *   FT_FACE_FLAG_HINTER
+   *   FT_FACE_FLAG_SVG
+   *   FT_FACE_FLAG_SBIX
+   *   FT_FACE_FLAG_SBIX_OVERLAY
    *
    *   FT_HAS_HORIZONTAL
    *   FT_HAS_VERTICAL
@@ -133,6 +164,9 @@ FT_BEGIN_HEADER
    *   FT_HAS_GLYPH_NAMES
    *   FT_HAS_COLOR
    *   FT_HAS_MULTIPLE_MASTERS
+   *   FT_HAS_SVG
+   *   FT_HAS_SBIX
+   *   FT_HAS_SBIX_OVERLAY
    *
    *   FT_IS_SFNT
    *   FT_IS_SCALABLE
@@ -176,6 +210,7 @@ FT_BEGIN_HEADER
    *   FT_Size_RequestRec
    *   FT_Size_Request
    *   FT_Set_Transform
+   *   FT_Get_Transform
    *   FT_Load_Glyph
    *   FT_Get_Char_Index
    *   FT_Get_First_Char
@@ -196,6 +231,7 @@ FT_BEGIN_HEADER
    *   FT_LOAD_NO_SCALE
    *   FT_LOAD_NO_HINTING
    *   FT_LOAD_NO_BITMAP
+   *   FT_LOAD_SBITS_ONLY
    *   FT_LOAD_NO_AUTOHINT
    *   FT_LOAD_COLOR
    *
@@ -493,13 +529,15 @@ FT_BEGIN_HEADER
    *   size.
    *
    * @note:
-   *   An @FT_Face has one _active_ @FT_Size object that is used by functions
-   *   like @FT_Load_Glyph to determine the scaling transformation that in
-   *   turn is used to load and hint glyphs and metrics.
+   *   An @FT_Face has one _active_ `FT_Size` object that is used by
+   *   functions like @FT_Load_Glyph to determine the scaling transformation
+   *   that in turn is used to load and hint glyphs and metrics.
    *
-   *   You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size
+   *   A newly created `FT_Size` object contains only meaningless zero values.
+   *   You must use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size
    *   or even @FT_Select_Size to change the content (i.e., the scaling
-   *   values) of the active @FT_Size.
+   *   values) of the active `FT_Size`.  Otherwise, the scaling and hinting
+   *   will not be performed.
    *
    *   You can use @FT_New_Size to create additional size objects for a given
    *   @FT_Face, but they won't be used by other functions until you activate
@@ -587,11 +625,12 @@ FT_BEGIN_HEADER
    */
 
 #ifndef FT_ENC_TAG
-#define FT_ENC_TAG( value, a, b, c, d )         \
-          value = ( ( (FT_UInt32)(a) << 24 ) |  \
-                    ( (FT_UInt32)(b) << 16 ) |  \
-                    ( (FT_UInt32)(c) <<  8 ) |  \
-                      (FT_UInt32)(d)         )
+
+#define FT_ENC_TAG( value, a, b, c, d )                             \
+          value = ( ( FT_STATIC_BYTE_CAST( FT_UInt32, a ) << 24 ) | \
+                    ( FT_STATIC_BYTE_CAST( FT_UInt32, b ) << 16 ) | \
+                    ( FT_STATIC_BYTE_CAST( FT_UInt32, c ) <<  8 ) | \
+                      FT_STATIC_BYTE_CAST( FT_UInt32, d )         )
 
 #endif /* FT_ENC_TAG */
 
@@ -701,11 +740,16 @@ FT_BEGIN_HEADER
    *     Same as FT_ENCODING_JOHAB.  Deprecated.
    *
    * @note:
-   *   By default, FreeType enables a Unicode charmap and tags it with
-   *   `FT_ENCODING_UNICODE` when it is either provided or can be generated
-   *   from PostScript glyph name dictionaries in the font file.  All other
-   *   encodings are considered legacy and tagged only if explicitly defined
-   *   in the font file.  Otherwise, `FT_ENCODING_NONE` is used.
+   *   When loading a font, FreeType makes a Unicode charmap active if
+   *   possible (either if the font provides such a charmap, or if FreeType
+   *   can synthesize one from PostScript glyph name dictionaries; in either
+   *   case, the charmap is tagged with `FT_ENCODING_UNICODE`).  If such a
+   *   charmap is synthesized, it is placed at the first position of the
+   *   charmap array.
+   *
+   *   All other encodings are considered legacy and tagged only if
+   *   explicitly defined in the font file.  Otherwise, `FT_ENCODING_NONE` is
+   *   used.
    *
    *   `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is
    *   neither Unicode nor ISO-8859-1 (otherwise it is set to
@@ -1193,6 +1237,19 @@ FT_BEGIN_HEADER
    *     altered with @FT_Set_MM_Design_Coordinates,
    *     @FT_Set_Var_Design_Coordinates, or @FT_Set_Var_Blend_Coordinates.
    *     This flag is unset by a call to @FT_Set_Named_Instance.
+   *
+   *   FT_FACE_FLAG_SVG ::
+   *     [Since 2.12] The face has an 'SVG~' OpenType table.
+   *
+   *   FT_FACE_FLAG_SBIX ::
+   *     [Since 2.12] The face has an 'sbix' OpenType table *and* outlines.
+   *     For such fonts, @FT_FACE_FLAG_SCALABLE is not set by default to
+   *     retain backward compatibility.
+   *
+   *   FT_FACE_FLAG_SBIX_OVERLAY ::
+   *     [Since 2.12] The face has an 'sbix' OpenType table where outlines
+   *     should be drawn on top of bitmap strikes.
+   *
    */
 #define FT_FACE_FLAG_SCALABLE          ( 1L <<  0 )
 #define FT_FACE_FLAG_FIXED_SIZES       ( 1L <<  1 )
@@ -1210,6 +1267,9 @@ FT_BEGIN_HEADER
 #define FT_FACE_FLAG_TRICKY            ( 1L << 13 )
 #define FT_FACE_FLAG_COLOR             ( 1L << 14 )
 #define FT_FACE_FLAG_VARIATION         ( 1L << 15 )
+#define FT_FACE_FLAG_SVG               ( 1L << 16 )
+#define FT_FACE_FLAG_SBIX              ( 1L << 17 )
+#define FT_FACE_FLAG_SBIX_OVERLAY      ( 1L << 18 )
 
 
   /**************************************************************************
@@ -1450,6 +1510,124 @@ FT_BEGIN_HEADER
           ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) )
 
 
+  /**************************************************************************
+   *
+   * @macro:
+   *   FT_HAS_SVG
+   *
+   * @description:
+   *   A macro that returns true whenever a face object contains an 'SVG~'
+   *   OpenType table.
+   *
+   * @since:
+   *   2.12
+   */
+#define FT_HAS_SVG( face ) \
+          ( !!( (face)->face_flags & FT_FACE_FLAG_SVG ) )
+
+
+  /**************************************************************************
+   *
+   * @macro:
+   *   FT_HAS_SBIX
+   *
+   * @description:
+   *   A macro that returns true whenever a face object contains an 'sbix'
+   *   OpenType table *and* outline glyphs.
+   *
+   *   Currently, FreeType only supports bitmap glyphs in PNG format for this
+   *   table (i.e., JPEG and TIFF formats are unsupported, as are
+   *   Apple-specific formats not part of the OpenType specification).
+   *
+   * @note:
+   *   For backward compatibility, a font with an 'sbix' table is treated as
+   *   a bitmap-only face.  Using @FT_Open_Face with
+   *   @FT_PARAM_TAG_IGNORE_SBIX, an application can switch off 'sbix'
+   *   handling so that the face is treated as an ordinary outline font with
+   *   scalable outlines.
+   *
+   *   Here is some pseudo code that roughly illustrates how to implement
+   *   'sbix' handling according to the OpenType specification.
+   *
+   * ```
+   *   if ( FT_HAS_SBIX( face ) )
+   *   {
+   *     // open font as a scalable one without sbix handling
+   *     FT_Face       face2;
+   *     FT_Parameter  param = { FT_PARAM_TAG_IGNORE_SBIX, NULL };
+   *     FT_Open_Args  args  = { FT_OPEN_PARAMS | ...,
+   *                             ...,
+   *                             1, &param };
+   *
+   *
+   *     FT_Open_Face( library, &args, 0, &face2 );
+   *
+   *     <sort `face->available_size` as necessary into
+   *      `preferred_sizes`[*]>
+   *
+   *     for ( i = 0; i < face->num_fixed_sizes; i++ )
+   *     {
+   *       size = preferred_sizes[i].size;
+   *
+   *       error = FT_Set_Pixel_Sizes( face, size, size );
+   *       <error handling omitted>
+   *
+   *       // check whether we have a glyph in a bitmap strike
+   *       error = FT_Load_Glyph( face,
+   *                              glyph_index,
+   *                              FT_LOAD_SBITS_ONLY          |
+   *                              FT_LOAD_BITMAP_METRICS_ONLY );
+   *       if ( error == FT_Err_Invalid_Argument )
+   *         continue;
+   *       else if ( error )
+   *         <other error handling omitted>
+   *       else
+   *         break;
+   *     }
+   *
+   *     if ( i != face->num_fixed_sizes )
+   *       <load embedded bitmap with `FT_Load_Glyph`,
+   *        scale it, display it, etc.>
+   *
+   *     if ( i == face->num_fixed_sizes  ||
+   *          FT_HAS_SBIX_OVERLAY( face ) )
+   *       <use `face2` to load outline glyph with `FT_Load_Glyph`,
+   *        scale it, display it on top of the bitmap, etc.>
+   *   }
+   * ```
+   *
+   * [*] Assuming a target value of 400dpi and available strike sizes 100,
+   * 200, 300, and 400dpi, a possible order might be [400, 200, 300, 100]:
+   * scaling 200dpi to 400dpi usually gives better results than scaling
+   * 300dpi to 400dpi; it is also much faster.  However, scaling 100dpi to
+   * 400dpi can yield a too pixelated result, thus the preference might be
+   * 300dpi over 100dpi.
+   *
+   * @since:
+   *   2.12
+   */
+#define FT_HAS_SBIX( face ) \
+          ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX ) )
+
+
+  /**************************************************************************
+   *
+   * @macro:
+   *   FT_HAS_SBIX_OVERLAY
+   *
+   * @description:
+   *   A macro that returns true whenever a face object contains an 'sbix'
+   *   OpenType table with bit~1 in its `flags` field set, instructing the
+   *   application to overlay the bitmap strike with the corresponding
+   *   outline glyph.  See @FT_HAS_SBIX for pseudo code how to use it.
+   *
+   * @since:
+   *   2.12
+   */
+#define FT_HAS_SBIX_OVERLAY( face ) \
+          ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX_OVERLAY ) )
+
+
   /**************************************************************************
    *
    * @enum:
@@ -2065,7 +2243,8 @@ FT_BEGIN_HEADER
    *     The size in bytes of the file in memory.
    *
    *   pathname ::
-   *     A pointer to an 8-bit file pathname.  The pointer is not owned by
+   *     A pointer to an 8-bit file pathname, which must be a C~string (i.e.,
+   *     no null bytes except at the very end).  The pointer is not owned by
    *     FreeType.
    *
    *   stream ::
@@ -2084,8 +2263,7 @@ FT_BEGIN_HEADER
    *     Extra parameters passed to the font driver when opening a new face.
    *
    * @note:
-   *   The stream type is determined by the contents of `flags` that are
-   *   tested in the following order by @FT_Open_Face:
+   *   The stream type is determined by the contents of `flags`:
    *
    *   If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file
    *   of `memory_size` bytes, located at `memory_address`.  The data are not
@@ -2098,6 +2276,9 @@ FT_BEGIN_HEADER
    *   Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a
    *   normal file and use `pathname` to open it.
    *
+   *   If none of the above bits are set or if multiple are set at the same
+   *   time, the flags are invalid and @FT_Open_Face fails.
+   *
    *   If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open
    *   the file with the driver whose handler is in `driver`.
    *
@@ -2150,6 +2331,13 @@ FT_BEGIN_HEADER
    *   FreeType error code.  0~means success.
    *
    * @note:
+   *   The `pathname` string should be recognizable as such by a standard
+   *   `fopen` call on your system; in particular, this means that `pathname`
+   *   must not contain null bytes.  If that is not sufficient to address all
+   *   file name possibilities (for example, to handle wide character file
+   *   names on Windows in UTF-16 encoding) you might use @FT_Open_Face to
+   *   pass a memory array or a stream object instead.
+   *
    *   Use @FT_Done_Face to destroy the created @FT_Face object (along with
    *   its slot and sizes).
    */
@@ -2270,6 +2458,10 @@ FT_BEGIN_HEADER
    *   See the discussion of reference counters in the description of
    *   @FT_Reference_Face.
    *
+   *   If `FT_OPEN_STREAM` is set in `args->flags`, the stream in
+   *   `args->stream` is automatically closed before this function returns
+   *   any error (including `FT_Err_Invalid_Argument`).
+   *
    * @example:
    *   To loop over all faces, use code similar to the following snippet
    *   (omitting the error handling).
@@ -2428,6 +2620,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.4.2
+   *
    */
   FT_EXPORT( FT_Error )
   FT_Reference_Face( FT_Face  face );
@@ -2652,8 +2845,8 @@ FT_BEGIN_HEADER
    *   'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'.
    *
    *   Contrary to @FT_Set_Char_Size, this function doesn't have special code
-   *   to normalize zero-valued widths, heights, or resolutions (which lead
-   *   to errors in most cases).
+   *   to normalize zero-valued widths, heights, or resolutions, which are
+   *   treated as @FT_LOAD_NO_SCALE.
    *
    *   Don't use this function if you are using the FreeType cache API.
    */
@@ -2769,7 +2962,7 @@ FT_BEGIN_HEADER
    *
    *   load_flags ::
    *     A flag indicating what to load for this glyph.  The @FT_LOAD_XXX
-   *     constants can be used to control the glyph loading process (e.g.,
+   *     flags can be used to control the glyph loading process (e.g.,
    *     whether the outline should be scaled, whether to load bitmaps or
    *     not, whether to hint the outline, etc).
    *
@@ -2777,8 +2970,10 @@ FT_BEGIN_HEADER
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The loaded glyph may be transformed.  See @FT_Set_Transform for the
-   *   details.
+   *   For proper scaling and hinting, the active @FT_Size object owned by
+   *   the face has to be meaningfully initialized by calling
+   *   @FT_Set_Char_Size before this function, for example.  The loaded
+   *   glyph may be transformed.  See @FT_Set_Transform for the details.
    *
    *   For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned
    *   for invalid CID values (this is, for CID values that don't have a
@@ -2868,13 +3063,15 @@ FT_BEGIN_HEADER
    *
    *   FT_LOAD_NO_SCALE ::
    *     Don't scale the loaded outline glyph but keep it in font units.
+   *     This flag is also assumed if @FT_Size owned by the face was not
+   *     properly initialized.
    *
    *     This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
    *     unsets @FT_LOAD_RENDER.
    *
    *     If the font is 'tricky' (see @FT_FACE_FLAG_TRICKY for more), using
    *     `FT_LOAD_NO_SCALE` usually yields meaningless outlines because the
-   *     subglyphs must be scaled and positioned with hinting instructions. 
+   *     subglyphs must be scaled and positioned with hinting instructions.
    *     This can be solved by loading the font without `FT_LOAD_NO_SCALE`
    *     and setting the character size to `font->units_per_EM`.
    *
@@ -2898,6 +3095,15 @@ FT_BEGIN_HEADER
    *
    *     @FT_LOAD_NO_SCALE always sets this flag.
    *
+   *   FT_LOAD_SBITS_ONLY ::
+   *     [Since 2.12] This is the opposite of @FT_LOAD_NO_BITMAP, more or
+   *     less: @FT_Load_Glyph returns `FT_Err_Invalid_Argument` if the face
+   *     contains a bitmap strike for the given size (or the strike selected
+   *     by @FT_Select_Size) but there is no glyph in the strike.
+   *
+   *     Note that this load flag was part of FreeType since version 2.0.6
+   *     but previously tagged as internal.
+   *
    *   FT_LOAD_VERTICAL_LAYOUT ::
    *     Load the glyph for vertical text layout.  In particular, the
    *     `advance` value in the @FT_GlyphSlotRec structure is set to the
@@ -2954,21 +3160,31 @@ FT_BEGIN_HEADER
    *     Disable the auto-hinter.  See also the note below.
    *
    *   FT_LOAD_COLOR ::
-   *     Load colored glyphs.  There are slight differences depending on the
-   *     font format.
-   *
-   *     [Since 2.5] Load embedded color bitmap images.  The resulting color
-   *     bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format,
-   *     with pre-multiplied color channels.  If the flag is not set and
-   *     color bitmaps are found, they are converted to 256-level gray
-   *     bitmaps, using the @FT_PIXEL_MODE_GRAY format.
-   *
-   *     [Since 2.10, experimental] If the glyph index contains an entry in
+   *     Load colored glyphs.  FreeType searches in the following order;
+   *     there are slight differences depending on the font format.
+   *
+   *     [Since 2.5] Load embedded color bitmap images (provided
+   *     @FT_LOAD_NO_BITMAP is not set).  The resulting color bitmaps, if
+   *     available, have the @FT_PIXEL_MODE_BGRA format, with pre-multiplied
+   *     color channels.  If the flag is not set and color bitmaps are found,
+   *     they are converted to 256-level gray bitmaps, using the
+   *     @FT_PIXEL_MODE_GRAY format.
+   *
+   *     [Since 2.12] If the glyph index maps to an entry in the face's
+   *     'SVG~' table, load the associated SVG document from this table and
+   *     set the `format` field of @FT_GlyphSlotRec to @FT_GLYPH_FORMAT_SVG.
+   *     Note that FreeType itself can't render SVG documents; however, the
+   *     library provides hooks to seamlessly integrate an external renderer.
+   *     See sections @ot_svg_driver and @svg_fonts for more.
+   *
+   *     [Since 2.10, experimental] If the glyph index maps to an entry in
    *     the face's 'COLR' table with a 'CPAL' palette table (as defined in
    *     the OpenType specification), make @FT_Render_Glyph provide a default
    *     blending of the color glyph layers associated with the glyph index,
    *     using the same bitmap format as embedded color bitmap images.  This
-   *     is mainly for convenience; for full control of color layers use
+   *     is mainly for convenience and works only for glyphs in 'COLR' v0
+   *     tables (or glyphs in 'COLR' v1 tables that exclusively use v0
+   *     features).  For full control of color layers use
    *     @FT_Get_Color_Glyph_Layer and FreeType's color functions like
    *     @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering
    *     so that the client application can handle blending by itself.
@@ -3019,19 +3235,20 @@ FT_BEGIN_HEADER
    *
    */
 #define FT_LOAD_DEFAULT                      0x0
-#define FT_LOAD_NO_SCALE                     ( 1L << 0 )
-#define FT_LOAD_NO_HINTING                   ( 1L << 1 )
-#define FT_LOAD_RENDER                       ( 1L << 2 )
-#define FT_LOAD_NO_BITMAP                    ( 1L << 3 )
-#define FT_LOAD_VERTICAL_LAYOUT              ( 1L << 4 )
-#define FT_LOAD_FORCE_AUTOHINT               ( 1L << 5 )
-#define FT_LOAD_CROP_BITMAP                  ( 1L << 6 )
-#define FT_LOAD_PEDANTIC                     ( 1L << 7 )
-#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH  ( 1L << 9 )
+#define FT_LOAD_NO_SCALE                     ( 1L << 0  )
+#define FT_LOAD_NO_HINTING                   ( 1L << 1  )
+#define FT_LOAD_RENDER                       ( 1L << 2  )
+#define FT_LOAD_NO_BITMAP                    ( 1L << 3  )
+#define FT_LOAD_VERTICAL_LAYOUT              ( 1L << 4  )
+#define FT_LOAD_FORCE_AUTOHINT               ( 1L << 5  )
+#define FT_LOAD_CROP_BITMAP                  ( 1L << 6  )
+#define FT_LOAD_PEDANTIC                     ( 1L << 7  )
+#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH  ( 1L << 9  )
 #define FT_LOAD_NO_RECURSE                   ( 1L << 10 )
 #define FT_LOAD_IGNORE_TRANSFORM             ( 1L << 11 )
 #define FT_LOAD_MONOCHROME                   ( 1L << 12 )
 #define FT_LOAD_LINEAR_DESIGN                ( 1L << 13 )
+#define FT_LOAD_SBITS_ONLY                   ( 1L << 14 )
 #define FT_LOAD_NO_AUTOHINT                  ( 1L << 15 )
   /* Bits 16-19 are used by `FT_LOAD_TARGET_` */
 #define FT_LOAD_COLOR                        ( 1L << 20 )
@@ -3041,8 +3258,8 @@ FT_BEGIN_HEADER
   /* */
 
   /* used internally only by certain font drivers */
-#define FT_LOAD_ADVANCE_ONLY                 ( 1L << 8 )
-#define FT_LOAD_SBITS_ONLY                   ( 1L << 14 )
+#define FT_LOAD_ADVANCE_ONLY                 ( 1L << 8  )
+#define FT_LOAD_SVG_ONLY                     ( 1L << 23 )
 
 
   /**************************************************************************
@@ -3132,7 +3349,7 @@ FT_BEGIN_HEADER
    *   necessary to empty the cache after a mode switch to avoid false hits.
    *
    */
-#define FT_LOAD_TARGET_( x )   ( (FT_Int32)( (x) & 15 ) << 16 )
+#define FT_LOAD_TARGET_( x )   ( FT_STATIC_CAST( FT_Int32, (x) & 15 ) << 16 )
 
 #define FT_LOAD_TARGET_NORMAL  FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )
 #define FT_LOAD_TARGET_LIGHT   FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT  )
@@ -3151,7 +3368,8 @@ FT_BEGIN_HEADER
    *   @FT_LOAD_TARGET_XXX value.
    *
    */
-#define FT_LOAD_TARGET_MODE( x )  ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
+#define FT_LOAD_TARGET_MODE( x )                               \
+          FT_STATIC_CAST( FT_Render_Mode, ( (x) >> 16 ) & 15 )
 
 
   /**************************************************************************
@@ -3172,11 +3390,12 @@ FT_BEGIN_HEADER
    *     A pointer to the transformation's 2x2 matrix.  Use `NULL` for the
    *     identity matrix.
    *   delta ::
-   *     A pointer to the translation vector.  Use `NULL` for the null vector.
+   *     A pointer to the translation vector.  Use `NULL` for the null
+   *     vector.
    *
    * @note:
    *   This function is provided as a convenience, but keep in mind that
-   *   @FT_Matrix coefficients are only 16.16 fixed point values, which can
+   *   @FT_Matrix coefficients are only 16.16 fixed-point values, which can
    *   limit the accuracy of the results.  Using floating-point computations
    *   to perform the transform directly in client code instead will always
    *   yield better numbers.
@@ -3195,6 +3414,39 @@ FT_BEGIN_HEADER
                     FT_Vector*  delta );
 
 
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_Transform
+   *
+   * @description:
+   *   Return the transformation that is applied to glyph images when they
+   *   are loaded into a glyph slot through @FT_Load_Glyph.  See
+   *   @FT_Set_Transform for more details.
+   *
+   * @input:
+   *   face ::
+   *     A handle to the source face object.
+   *
+   * @output:
+   *   matrix ::
+   *     A pointer to a transformation's 2x2 matrix.  Set this to NULL if you
+   *     are not interested in the value.
+   *
+   *   delta ::
+   *     A pointer a translation vector.  Set this to NULL if you are not
+   *     interested in the value.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+  FT_EXPORT( void )
+  FT_Get_Transform( FT_Face     face,
+                    FT_Matrix*  matrix,
+                    FT_Vector*  delta );
+
+
   /**************************************************************************
    *
    * @enum:
@@ -3213,6 +3465,10 @@ FT_BEGIN_HEADER
    *   correction to correctly render non-monochrome glyph bitmaps onto a
    *   surface; see @FT_Render_Glyph.
    *
+   *   The @FT_RENDER_MODE_SDF is a special render mode that uses up to 256
+   *   distance values, indicating the signed distance from the grid position
+   *   to the nearest outline.
+   *
    * @values:
    *   FT_RENDER_MODE_NORMAL ::
    *     Default render mode; it corresponds to 8-bit anti-aliased bitmaps.
@@ -3238,11 +3494,87 @@ FT_BEGIN_HEADER
    *     bitmaps that are 3~times the height of the original glyph outline in
    *     pixels and use the @FT_PIXEL_MODE_LCD_V mode.
    *
+   *   FT_RENDER_MODE_SDF ::
+   *     This mode corresponds to 8-bit, single-channel signed distance field
+   *     (SDF) bitmaps.  Each pixel in the SDF grid is the value from the
+   *     pixel's position to the nearest glyph's outline.  The distances are
+   *     calculated from the center of the pixel and are positive if they are
+   *     filled by the outline (i.e., inside the outline) and negative
+   *     otherwise.  Check the note below on how to convert the output values
+   *     to usable data.
+   *
    * @note:
    *   The selected render mode only affects vector glyphs of a font.
    *   Embedded bitmaps often have a different pixel mode like
    *   @FT_PIXEL_MODE_MONO.  You can use @FT_Bitmap_Convert to transform them
    *   into 8-bit pixmaps.
+   *
+   *   For @FT_RENDER_MODE_SDF the output bitmap buffer contains normalized
+   *   distances that are packed into unsigned 8-bit values.  To get pixel
+   *   values in floating point representation use the following pseudo-C
+   *   code for the conversion.
+   *
+   *   ```
+   *   // Load glyph and render using FT_RENDER_MODE_SDF,
+   *   // then use the output buffer as follows.
+   *
+   *   ...
+   *   FT_Byte  buffer = glyph->bitmap->buffer;
+   *
+   *
+   *   for pixel in buffer
+   *   {
+   *     // `sd` is the signed distance and `spread` is the current spread;
+   *     // the default spread is 2 and can be changed.
+   *
+   *     float  sd = (float)pixel - 128.0f;
+   *
+   *
+   *     // Convert to pixel values.
+   *     sd = ( sd / 128.0f ) * spread;
+   *
+   *     // Store `sd` in a buffer or use as required.
+   *   }
+   *
+   *   ```
+   *
+   *   FreeType has two rasterizers for generating SDF, namely:
+   *
+   *   1. `sdf` for generating SDF directly from glyph's outline, and
+   *
+   *   2. `bsdf` for generating SDF from rasterized bitmaps.
+   *
+   *   Depending on the glyph type (i.e., outline or bitmap), one of the two
+   *   rasterizers is chosen at runtime and used for generating SDFs.  To
+   *   force the use of `bsdf` you should render the glyph with any of the
+   *   FreeType's other rendering modes (e.g., `FT_RENDER_MODE_NORMAL`) and
+   *   then re-render with `FT_RENDER_MODE_SDF`.
+   *
+   *   There are some issues with stability and possible failures of the SDF
+   *   renderers (specifically `sdf`).
+   *
+   *   1. The `sdf` rasterizer is sensitive to really small features (e.g.,
+   *      sharp turns that are less than 1~pixel) and imperfections in the
+   *      glyph's outline, causing artifacts in the final output.
+   *
+   *   2. The `sdf` rasterizer has limited support for handling intersecting
+   *      contours and *cannot* handle self-intersecting contours whatsoever.
+   *      Self-intersection happens when a single connected contour intersect
+   *      itself at some point; having these in your font definitely pose a
+   *      problem to the rasterizer and cause artifacts, too.
+   *
+   *   3. Generating SDF for really small glyphs may result in undesirable
+   *      output; the pixel grid (which stores distance information) becomes
+   *      too coarse.
+   *
+   *   4. Since the output buffer is normalized, precision at smaller spreads
+   *      is greater than precision at larger spread values because the
+   *      output range of [0..255] gets mapped to a smaller SDF range.  A
+   *      spread of~2 should be sufficient in most cases.
+   *
+   *   Points (1) and (2) can be avoided by using the `bsdf` rasterizer,
+   *   which is more stable than the `sdf` rasterizer in general.
+   *
    */
   typedef enum  FT_Render_Mode_
   {
@@ -3251,6 +3583,7 @@ FT_BEGIN_HEADER
     FT_RENDER_MODE_MONO,
     FT_RENDER_MODE_LCD,
     FT_RENDER_MODE_LCD_V,
+    FT_RENDER_MODE_SDF,
 
     FT_RENDER_MODE_MAX
 
@@ -3282,7 +3615,7 @@ FT_BEGIN_HEADER
    *     @FT_Render_Mode for a list of possible values.
    *
    *     If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph
-   *     with flag @FT_LOAD_COLOR makes FT_Render_Glyph provide a default
+   *     with flag @FT_LOAD_COLOR makes `FT_Render_Glyph` provide a default
    *     blending of colored glyph layers associated with the current glyph
    *     slot (provided the font contains such layers) instead of rendering
    *     the glyph slot's outline.  This is an experimental feature; see
@@ -3292,9 +3625,6 @@ FT_BEGIN_HEADER
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   To get meaningful results, font scaling values must be set with
-   *   functions like @FT_Set_Char_Size before calling `FT_Render_Glyph`.
-   *
    *   When FreeType outputs a bitmap of a glyph, it really outputs an alpha
    *   coverage map.  If a pixel is completely covered by a filled-in
    *   outline, the bitmap contains 0xFF at that pixel, meaning that
@@ -3338,7 +3668,8 @@ FT_BEGIN_HEADER
    *
    *   which is known as the OVER operator.
    *
-   *   To correctly composite an antialiased pixel of a glyph onto a surface,
+   *   To correctly composite an anti-aliased pixel of a glyph onto a
+   *   surface,
    *
    *   1. take the foreground and background colors (e.g., in sRGB space)
    *      and apply gamma to get them in a linear space,
@@ -4015,168 +4346,6 @@ FT_BEGIN_HEADER
                         FT_Matrix    *p_transform );
 
 
-  /**************************************************************************
-   *
-   * @section:
-   *   layer_management
-   *
-   * @title:
-   *   Glyph Layer Management
-   *
-   * @abstract:
-   *   Retrieving and manipulating OpenType's 'COLR' table data.
-   *
-   * @description:
-   *   The functions described here allow access of colored glyph layer data
-   *   in OpenType's 'COLR' tables.
-   */
-
-
-  /**************************************************************************
-   *
-   * @struct:
-   *   FT_LayerIterator
-   *
-   * @description:
-   *   This iterator object is needed for @FT_Get_Color_Glyph_Layer.
-   *
-   * @fields:
-   *   num_layers ::
-   *     The number of glyph layers for the requested glyph index.  Will be
-   *     set by @FT_Get_Color_Glyph_Layer.
-   *
-   *   layer ::
-   *     The current layer.  Will be set by @FT_Get_Color_Glyph_Layer.
-   *
-   *   p ::
-   *     An opaque pointer into 'COLR' table data.  The caller must set this
-   *     to `NULL` before the first call of @FT_Get_Color_Glyph_Layer.
-   */
-  typedef struct  FT_LayerIterator_
-  {
-    FT_UInt   num_layers;
-    FT_UInt   layer;
-    FT_Byte*  p;
-
-  } FT_LayerIterator;
-
-
-  /**************************************************************************
-   *
-   * @function:
-   *   FT_Get_Color_Glyph_Layer
-   *
-   * @description:
-   *   This is an interface to the 'COLR' table in OpenType fonts to
-   *   iteratively retrieve the colored glyph layers associated with the
-   *   current glyph slot.
-   *
-   *     https://docs.microsoft.com/en-us/typography/opentype/spec/colr
-   *
-   *   The glyph layer data for a given glyph index, if present, provides an
-   *   alternative, multi-color glyph representation: Instead of rendering
-   *   the outline or bitmap with the given glyph index, glyphs with the
-   *   indices and colors returned by this function are rendered layer by
-   *   layer.
-   *
-   *   The returned elements are ordered in the z~direction from bottom to
-   *   top; the 'n'th element should be rendered with the associated palette
-   *   color and blended on top of the already rendered layers (elements 0,
-   *   1, ..., n-1).
-   *
-   * @input:
-   *   face ::
-   *     A handle to the parent face object.
-   *
-   *   base_glyph ::
-   *     The glyph index the colored glyph layers are associated with.
-   *
-   * @inout:
-   *   iterator ::
-   *     An @FT_LayerIterator object.  For the first call you should set
-   *     `iterator->p` to `NULL`.  For all following calls, simply use the
-   *     same object again.
-   *
-   * @output:
-   *   aglyph_index ::
-   *     The glyph index of the current layer.
-   *
-   *   acolor_index ::
-   *     The color index into the font face's color palette of the current
-   *     layer.  The value 0xFFFF is special; it doesn't reference a palette
-   *     entry but indicates that the text foreground color should be used
-   *     instead (to be set up by the application outside of FreeType).
-   *
-   *     The color palette can be retrieved with @FT_Palette_Select.
-   *
-   * @return:
-   *   Value~1 if everything is OK.  If there are no more layers (or if there
-   *   are no layers at all), value~0 gets returned.  In case of an error,
-   *   value~0 is returned also.
-   *
-   * @note:
-   *   This function is necessary if you want to handle glyph layers by
-   *   yourself.  In particular, functions that operate with @FT_GlyphRec
-   *   objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access
-   *   to this information.
-   *
-   *   Note that @FT_Render_Glyph is able to handle colored glyph layers
-   *   automatically if the @FT_LOAD_COLOR flag is passed to a previous call
-   *   to @FT_Load_Glyph.  [This is an experimental feature.]
-   *
-   * @example:
-   *   ```
-   *     FT_Color*         palette;
-   *     FT_LayerIterator  iterator;
-   *
-   *     FT_Bool  have_layers;
-   *     FT_UInt  layer_glyph_index;
-   *     FT_UInt  layer_color_index;
-   *
-   *
-   *     error = FT_Palette_Select( face, palette_index, &palette );
-   *     if ( error )
-   *       palette = NULL;
-   *
-   *     iterator.p  = NULL;
-   *     have_layers = FT_Get_Color_Glyph_Layer( face,
-   *                                             glyph_index,
-   *                                             &layer_glyph_index,
-   *                                             &layer_color_index,
-   *                                             &iterator );
-   *
-   *     if ( palette && have_layers )
-   *     {
-   *       do
-   *       {
-   *         FT_Color  layer_color;
-   *
-   *
-   *         if ( layer_color_index == 0xFFFF )
-   *           layer_color = text_foreground_color;
-   *         else
-   *           layer_color = palette[layer_color_index];
-   *
-   *         // Load and render glyph `layer_glyph_index', then
-   *         // blend resulting pixmap (using color `layer_color')
-   *         // with previously created pixmaps.
-   *
-   *       } while ( FT_Get_Color_Glyph_Layer( face,
-   *                                           glyph_index,
-   *                                           &layer_glyph_index,
-   *                                           &layer_color_index,
-   *                                           &iterator ) );
-   *     }
-   *   ```
-   */
-  FT_EXPORT( FT_Bool )
-  FT_Get_Color_Glyph_Layer( FT_Face            face,
-                            FT_UInt            base_glyph,
-                            FT_UInt           *aglyph_index,
-                            FT_UInt           *acolor_index,
-                            FT_LayerIterator*  iterator );
-
-
   /**************************************************************************
    *
    * @section:
@@ -4267,6 +4436,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.8
+   *
    */
   FT_EXPORT( FT_UShort )
   FT_Get_FSType_Flags( FT_Face  face );
@@ -4360,6 +4530,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.6
+   *
    */
   FT_EXPORT( FT_UInt )
   FT_Face_GetCharVariantIndex( FT_Face   face,
@@ -4396,6 +4567,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.6
+   *
    */
   FT_EXPORT( FT_Int )
   FT_Face_GetCharVariantIsDefault( FT_Face   face,
@@ -4427,6 +4599,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.6
+   *
    */
   FT_EXPORT( FT_UInt32* )
   FT_Face_GetVariantSelectors( FT_Face  face );
@@ -4460,6 +4633,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.6
+   *
    */
   FT_EXPORT( FT_UInt32* )
   FT_Face_GetVariantsOfChar( FT_Face   face,
@@ -4494,6 +4668,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.6
+   *
    */
   FT_EXPORT( FT_UInt32* )
   FT_Face_GetCharsOfVariant( FT_Face   face,
@@ -4766,8 +4941,8 @@ FT_BEGIN_HEADER
    *
    */
 #define FREETYPE_MAJOR  2
-#define FREETYPE_MINOR  10
-#define FREETYPE_PATCH  4
+#define FREETYPE_MINOR  12
+#define FREETYPE_PATCH  1
 
 
   /**************************************************************************
@@ -4829,6 +5004,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.5
+   *
    */
   FT_EXPORT( FT_Bool )
   FT_Face_CheckTrueTypePatents( FT_Face  face );
@@ -4857,6 +5033,7 @@ FT_BEGIN_HEADER
    *
    * @since:
    *   2.3.5
+   *
    */
   FT_EXPORT( FT_Bool )
   FT_Face_SetUnpatentedHinting( FT_Face  face,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftadvanc.h b/qtbase/src/3rdparty/freetype/include/freetype/ftadvanc.h
index f166bc6f99..8ce4846668 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftadvanc.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftadvanc.h
@@ -4,7 +4,7 @@
  *
  *   Quick computation of advance widths (specification only).
  *
- * Copyright (C) 2008-2020 by
+ * Copyright (C) 2008-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftbbox.h b/qtbase/src/3rdparty/freetype/include/freetype/ftbbox.h
index fda1ad94a5..768478f399 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftbbox.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftbbox.h
@@ -4,7 +4,7 @@
  *
  *   FreeType exact bbox computation (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftbdf.h b/qtbase/src/3rdparty/freetype/include/freetype/ftbdf.h
index 2e1daeeaaf..04d6094f75 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftbdf.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftbdf.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing BDF-specific strings (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftbitmap.h b/qtbase/src/3rdparty/freetype/include/freetype/ftbitmap.h
index 282c22e1cf..c3462dadc5 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftbitmap.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftbitmap.h
@@ -4,7 +4,7 @@
  *
  *   FreeType utility functions for bitmaps (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftbzip2.h b/qtbase/src/3rdparty/freetype/include/freetype/ftbzip2.h
index eb6a5a55d1..c85305806f 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftbzip2.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftbzip2.h
@@ -4,7 +4,7 @@
  *
  *   Bzip2-compressed stream support.
  *
- * Copyright (C) 2010-2020 by
+ * Copyright (C) 2010-2022 by
  * Joel Klinghed.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftcache.h b/qtbase/src/3rdparty/freetype/include/freetype/ftcache.h
index 6047275205..ecbbd7b8fb 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftcache.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftcache.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Cache subsystem (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -86,8 +86,8 @@ FT_BEGIN_HEADER
    *   later use @FTC_CMapCache_Lookup to perform the equivalent of
    *   @FT_Get_Char_Index, only much faster.
    *
-   *   If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then
-   *   later use @FTC_ImageCache_Lookup to retrieve the corresponding
+   *   If you want to use the @FT_Glyph caching, call @FTC_ImageCache_New,
+   *   then later use @FTC_ImageCache_Lookup to retrieve the corresponding
    *   @FT_Glyph objects from the cache.
    *
    *   If you need lots of small bitmaps, it is much more memory efficient to
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftchapters.h b/qtbase/src/3rdparty/freetype/include/freetype/ftchapters.h
index 2ee26973e4..6a9733ad7c 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftchapters.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftchapters.h
@@ -15,6 +15,7 @@
    *   General Remarks
    *
    * @sections:
+   *   preamble
    *   header_inclusion
    *   user_allocation
    *
@@ -61,6 +62,7 @@
    *   cid_fonts
    *   pfr_fonts
    *   winfnt_fonts
+   *   svg_fonts
    *   font_formats
    *   gasp_table
    *
@@ -81,6 +83,7 @@
    *   t1_cid_driver
    *   tt_driver
    *   pcf_driver
+   *   ot_svg_driver
    *   properties
    *   parameter_tags
    *   lcd_rendering
@@ -123,6 +126,7 @@
    *   gzip
    *   lzw
    *   bzip2
+   *   debugging_apis
    *
    */
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftcid.h b/qtbase/src/3rdparty/freetype/include/freetype/ftcid.h
index a29fb33306..d80108387a 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftcid.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftcid.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing CID font information (specification).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * Dereg Clegg and Michael Toftdal.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftcolor.h b/qtbase/src/3rdparty/freetype/include/freetype/ftcolor.h
index ecc6485e5a..3edaee4ec1 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftcolor.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftcolor.h
@@ -4,7 +4,7 @@
  *
  *   FreeType's glyph color management (specification).
  *
- * Copyright (C) 2018-2020 by
+ * Copyright (C) 2018-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -302,6 +302,1411 @@ FT_BEGIN_HEADER
   FT_Palette_Set_Foreground_Color( FT_Face   face,
                                    FT_Color  foreground_color );
 
+
+  /**************************************************************************
+   *
+   * @section:
+   *   layer_management
+   *
+   * @title:
+   *   Glyph Layer Management
+   *
+   * @abstract:
+   *   Retrieving and manipulating OpenType's 'COLR' table data.
+   *
+   * @description:
+   *   The functions described here allow access of colored glyph layer data
+   *   in OpenType's 'COLR' tables.
+   */
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_LayerIterator
+   *
+   * @description:
+   *   This iterator object is needed for @FT_Get_Color_Glyph_Layer.
+   *
+   * @fields:
+   *   num_layers ::
+   *     The number of glyph layers for the requested glyph index.  Will be
+   *     set by @FT_Get_Color_Glyph_Layer.
+   *
+   *   layer ::
+   *     The current layer.  Will be set by @FT_Get_Color_Glyph_Layer.
+   *
+   *   p ::
+   *     An opaque pointer into 'COLR' table data.  The caller must set this
+   *     to `NULL` before the first call of @FT_Get_Color_Glyph_Layer.
+   */
+  typedef struct  FT_LayerIterator_
+  {
+    FT_UInt   num_layers;
+    FT_UInt   layer;
+    FT_Byte*  p;
+
+  } FT_LayerIterator;
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_Color_Glyph_Layer
+   *
+   * @description:
+   *   This is an interface to the 'COLR' table in OpenType fonts to
+   *   iteratively retrieve the colored glyph layers associated with the
+   *   current glyph slot.
+   *
+   *     https://docs.microsoft.com/en-us/typography/opentype/spec/colr
+   *
+   *   The glyph layer data for a given glyph index, if present, provides an
+   *   alternative, multi-color glyph representation: Instead of rendering
+   *   the outline or bitmap with the given glyph index, glyphs with the
+   *   indices and colors returned by this function are rendered layer by
+   *   layer.
+   *
+   *   The returned elements are ordered in the z~direction from bottom to
+   *   top; the 'n'th element should be rendered with the associated palette
+   *   color and blended on top of the already rendered layers (elements 0,
+   *   1, ..., n-1).
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   *   base_glyph ::
+   *     The glyph index the colored glyph layers are associated with.
+   *
+   * @inout:
+   *   iterator ::
+   *     An @FT_LayerIterator object.  For the first call you should set
+   *     `iterator->p` to `NULL`.  For all following calls, simply use the
+   *     same object again.
+   *
+   * @output:
+   *   aglyph_index ::
+   *     The glyph index of the current layer.
+   *
+   *   acolor_index ::
+   *     The color index into the font face's color palette of the current
+   *     layer.  The value 0xFFFF is special; it doesn't reference a palette
+   *     entry but indicates that the text foreground color should be used
+   *     instead (to be set up by the application outside of FreeType).
+   *
+   *     The color palette can be retrieved with @FT_Palette_Select.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  If there are no more layers (or if there
+   *   are no layers at all), value~0 gets returned.  In case of an error,
+   *   value~0 is returned also.
+   *
+   * @note:
+   *   This function is necessary if you want to handle glyph layers by
+   *   yourself.  In particular, functions that operate with @FT_GlyphRec
+   *   objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access
+   *   to this information.
+   *
+   *   Note that @FT_Render_Glyph is able to handle colored glyph layers
+   *   automatically if the @FT_LOAD_COLOR flag is passed to a previous call
+   *   to @FT_Load_Glyph.  [This is an experimental feature.]
+   *
+   * @example:
+   *   ```
+   *     FT_Color*         palette;
+   *     FT_LayerIterator  iterator;
+   *
+   *     FT_Bool  have_layers;
+   *     FT_UInt  layer_glyph_index;
+   *     FT_UInt  layer_color_index;
+   *
+   *
+   *     error = FT_Palette_Select( face, palette_index, &palette );
+   *     if ( error )
+   *       palette = NULL;
+   *
+   *     iterator.p  = NULL;
+   *     have_layers = FT_Get_Color_Glyph_Layer( face,
+   *                                             glyph_index,
+   *                                             &layer_glyph_index,
+   *                                             &layer_color_index,
+   *                                             &iterator );
+   *
+   *     if ( palette && have_layers )
+   *     {
+   *       do
+   *       {
+   *         FT_Color  layer_color;
+   *
+   *
+   *         if ( layer_color_index == 0xFFFF )
+   *           layer_color = text_foreground_color;
+   *         else
+   *           layer_color = palette[layer_color_index];
+   *
+   *         // Load and render glyph `layer_glyph_index', then
+   *         // blend resulting pixmap (using color `layer_color')
+   *         // with previously created pixmaps.
+   *
+   *       } while ( FT_Get_Color_Glyph_Layer( face,
+   *                                           glyph_index,
+   *                                           &layer_glyph_index,
+   *                                           &layer_color_index,
+   *                                           &iterator ) );
+   *     }
+   *   ```
+   */
+  FT_EXPORT( FT_Bool )
+  FT_Get_Color_Glyph_Layer( FT_Face            face,
+                            FT_UInt            base_glyph,
+                            FT_UInt           *aglyph_index,
+                            FT_UInt           *acolor_index,
+                            FT_LayerIterator*  iterator );
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_PaintFormat
+   *
+   * @description:
+   *   Enumeration describing the different paint format types of the v1
+   *   extensions to the 'COLR' table, see
+   *   'https://github.com/googlefonts/colr-gradients-spec'.
+   *
+   *   The enumeration values losely correspond with the format numbers of
+   *   the specification: FreeType always returns a fully specified 'Paint'
+   *   structure for the 'Transform', 'Translate', 'Scale', 'Rotate', and
+   *   'Skew' table types even though the specification has different formats
+   *   depending on whether or not a center is specified, whether the scale
+   *   is uniform in x and y~direction or not, etc.  Also, only non-variable
+   *   format identifiers are listed in this enumeration; as soon as support
+   *   for variable 'COLR' v1 fonts is implemented, interpolation is
+   *   performed dependent on axis coordinates, which are configured on the
+   *   @FT_Face through @FT_Set_Var_Design_Coordinates.  This implies that
+   *   always static, readily interpolated values are returned in the 'Paint'
+   *   structures.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef enum  FT_PaintFormat_
+  {
+    FT_COLR_PAINTFORMAT_COLR_LAYERS     = 1,
+    FT_COLR_PAINTFORMAT_SOLID           = 2,
+    FT_COLR_PAINTFORMAT_LINEAR_GRADIENT = 4,
+    FT_COLR_PAINTFORMAT_RADIAL_GRADIENT = 6,
+    FT_COLR_PAINTFORMAT_SWEEP_GRADIENT  = 8,
+    FT_COLR_PAINTFORMAT_GLYPH           = 10,
+    FT_COLR_PAINTFORMAT_COLR_GLYPH      = 11,
+    FT_COLR_PAINTFORMAT_TRANSFORM       = 12,
+    FT_COLR_PAINTFORMAT_TRANSLATE       = 14,
+    FT_COLR_PAINTFORMAT_SCALE           = 16,
+    FT_COLR_PAINTFORMAT_ROTATE          = 24,
+    FT_COLR_PAINTFORMAT_SKEW            = 28,
+    FT_COLR_PAINTFORMAT_COMPOSITE       = 32,
+    FT_COLR_PAINT_FORMAT_MAX            = 33,
+    FT_COLR_PAINTFORMAT_UNSUPPORTED     = 255
+
+  } FT_PaintFormat;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_ColorStopIterator
+   *
+   * @description:
+   *   This iterator object is needed for @FT_Get_Colorline_Stops.  It keeps
+   *   state while iterating over the stops of an @FT_ColorLine,
+   *   representing the `ColorLine` struct of the v1 extensions to 'COLR',
+   *   see 'https://github.com/googlefonts/colr-gradients-spec'.
+   *
+   * @fields:
+   *   num_color_stops ::
+   *     The number of color stops for the requested glyph index.  Set by
+   *     @FT_Get_Paint.
+   *
+   *   current_color_stop ::
+   *     The current color stop.  Set by @FT_Get_Colorline_Stops.
+   *
+   *   p ::
+   *     An opaque pointer into 'COLR' table data.  Set by @FT_Get_Paint.
+   *     Updated by @FT_Get_Colorline_Stops.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_ColorStopIterator_
+  {
+    FT_UInt  num_color_stops;
+    FT_UInt  current_color_stop;
+
+    FT_Byte*  p;
+
+  } FT_ColorStopIterator;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_ColorIndex
+   *
+   * @description:
+   *   A structure representing a `ColorIndex` value of the 'COLR' v1
+   *   extensions, see 'https://github.com/googlefonts/colr-gradients-spec'.
+   *
+   * @fields:
+   *   palette_index ::
+   *     The palette index into a 'CPAL' palette.
+   *
+   *   alpha ::
+   *     Alpha transparency value multiplied with the value from 'CPAL'.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_ColorIndex_
+  {
+    FT_UInt16   palette_index;
+    FT_F2Dot14  alpha;
+
+  } FT_ColorIndex;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_ColorStop
+   *
+   * @description:
+   *   A structure representing a `ColorStop` value of the 'COLR' v1
+   *   extensions, see 'https://github.com/googlefonts/colr-gradients-spec'.
+   *
+   * @fields:
+   *   stop_offset ::
+   *     The stop offset between 0 and 1 along the gradient.
+   *
+   *   color ::
+   *     The color information for this stop, see @FT_ColorIndex.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_ColorStop_
+  {
+    FT_F2Dot14     stop_offset;
+    FT_ColorIndex  color;
+
+  } FT_ColorStop;
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_PaintExtend
+   *
+   * @description:
+   *   An enumeration representing the 'Extend' mode of the 'COLR' v1
+   *   extensions, see 'https://github.com/googlefonts/colr-gradients-spec'.
+   *   It describes how the gradient fill continues at the other boundaries.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef enum  FT_PaintExtend_
+  {
+    FT_COLR_PAINT_EXTEND_PAD     = 0,
+    FT_COLR_PAINT_EXTEND_REPEAT  = 1,
+    FT_COLR_PAINT_EXTEND_REFLECT = 2
+
+  } FT_PaintExtend;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_ColorLine
+   *
+   * @description:
+   *   A structure representing a `ColorLine` value of the 'COLR' v1
+   *   extensions, see 'https://github.com/googlefonts/colr-gradients-spec'.
+   *   It describes a list of color stops along the defined gradient.
+   *
+   * @fields:
+   *   extend ::
+   *     The extend mode at the outer boundaries, see @FT_PaintExtend.
+   *
+   *   color_stop_iterator ::
+   *     The @FT_ColorStopIterator used to enumerate and retrieve the
+   *     actual @FT_ColorStop's.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_ColorLine_
+  {
+    FT_PaintExtend        extend;
+    FT_ColorStopIterator  color_stop_iterator;
+
+  } FT_ColorLine;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_Affine23
+   *
+   * @description:
+   *   A structure used to store a 2x3 matrix.  Coefficients are in
+   *   16.16 fixed-point format.  The computation performed is
+   *
+   *   ```
+   *     x' = x*xx + y*xy + dx
+   *     y' = x*yx + y*yy + dy
+   *   ```
+   *
+   * @fields:
+   *   xx ::
+   *     Matrix coefficient.
+   *
+   *   xy ::
+   *     Matrix coefficient.
+   *
+   *   dx ::
+   *     x translation.
+   *
+   *   yx ::
+   *     Matrix coefficient.
+   *
+   *   yy ::
+   *     Matrix coefficient.
+   *
+   *   dy ::
+   *     y translation.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_Affine_23_
+  {
+    FT_Fixed  xx, xy, dx;
+    FT_Fixed  yx, yy, dy;
+
+  } FT_Affine23;
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_Composite_Mode
+   *
+   * @description:
+   *   An enumeration listing the 'COLR' v1 composite modes used in
+   *   @FT_PaintComposite.  For more details on each paint mode, see
+   *   'https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators'.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef enum  FT_Composite_Mode_
+  {
+    FT_COLR_COMPOSITE_CLEAR          = 0,
+    FT_COLR_COMPOSITE_SRC            = 1,
+    FT_COLR_COMPOSITE_DEST           = 2,
+    FT_COLR_COMPOSITE_SRC_OVER       = 3,
+    FT_COLR_COMPOSITE_DEST_OVER      = 4,
+    FT_COLR_COMPOSITE_SRC_IN         = 5,
+    FT_COLR_COMPOSITE_DEST_IN        = 6,
+    FT_COLR_COMPOSITE_SRC_OUT        = 7,
+    FT_COLR_COMPOSITE_DEST_OUT       = 8,
+    FT_COLR_COMPOSITE_SRC_ATOP       = 9,
+    FT_COLR_COMPOSITE_DEST_ATOP      = 10,
+    FT_COLR_COMPOSITE_XOR            = 11,
+    FT_COLR_COMPOSITE_PLUS           = 12,
+    FT_COLR_COMPOSITE_SCREEN         = 13,
+    FT_COLR_COMPOSITE_OVERLAY        = 14,
+    FT_COLR_COMPOSITE_DARKEN         = 15,
+    FT_COLR_COMPOSITE_LIGHTEN        = 16,
+    FT_COLR_COMPOSITE_COLOR_DODGE    = 17,
+    FT_COLR_COMPOSITE_COLOR_BURN     = 18,
+    FT_COLR_COMPOSITE_HARD_LIGHT     = 19,
+    FT_COLR_COMPOSITE_SOFT_LIGHT     = 20,
+    FT_COLR_COMPOSITE_DIFFERENCE     = 21,
+    FT_COLR_COMPOSITE_EXCLUSION      = 22,
+    FT_COLR_COMPOSITE_MULTIPLY       = 23,
+    FT_COLR_COMPOSITE_HSL_HUE        = 24,
+    FT_COLR_COMPOSITE_HSL_SATURATION = 25,
+    FT_COLR_COMPOSITE_HSL_COLOR      = 26,
+    FT_COLR_COMPOSITE_HSL_LUMINOSITY = 27,
+    FT_COLR_COMPOSITE_MAX            = 28
+
+  } FT_Composite_Mode;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_OpaquePaint
+   *
+   * @description:
+   *   A structure representing an offset to a `Paint` value stored in any
+   *   of the paint tables of a 'COLR' v1 font.  Compare Offset<24> there.
+   *   When 'COLR' v1 paint tables represented by FreeType objects such as
+   *   @FT_PaintColrLayers, @FT_PaintComposite, or @FT_PaintTransform
+   *   reference downstream nested paint tables, we do not immediately
+   *   retrieve them but encapsulate their location in this type.  Use
+   *   @FT_Get_Paint to retrieve the actual @FT_COLR_Paint object that
+   *   describes the details of the respective paint table.
+   *
+   * @fields:
+   *   p ::
+   *     An internal offset to a Paint table, needs to be set to NULL before
+   *     passing this struct as an argument to @FT_Get_Paint.
+   *
+   *   insert_root_transform ::
+   *     An internal boolean to track whether an initial root transform is
+   *     to be provided.  Do not set this value.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_Opaque_Paint_
+  {
+    FT_Byte*  p;
+    FT_Bool   insert_root_transform;
+  } FT_OpaquePaint;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintColrLayers
+   *
+   * @description:
+   *   A structure representing a `PaintColrLayers` table of a 'COLR' v1
+   *   font.  This table describes a set of layers that are to be composited
+   *   with composite mode `FT_COLR_COMPOSITE_SRC_OVER`.  The return value
+   *   of this function is an @FT_LayerIterator initialized so that it can
+   *   be used with @FT_Get_Paint_Layers to retrieve the @FT_OpaquePaint
+   *   objects as references to each layer.
+   *
+   * @fields:
+   *   layer_iterator ::
+   *     The layer iterator that describes the layers of this paint.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintColrLayers_
+  {
+    FT_LayerIterator  layer_iterator;
+
+  } FT_PaintColrLayers;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintSolid
+   *
+   * @description:
+   *   A structure representing a `PaintSolid` value of the 'COLR' v1
+   *   extensions, see 'https://github.com/googlefonts/colr-gradients-spec'.
+   *   Using a `PaintSolid` value means that the glyph layer filled with
+   *   this paint is solid-colored and does not contain a gradient.
+   *
+   * @fields:
+   *   color ::
+   *     The color information for this solid paint, see @FT_ColorIndex.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintSolid_
+  {
+    FT_ColorIndex  color;
+
+  } FT_PaintSolid;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintLinearGradient
+   *
+   * @description:
+   *   A structure representing a `PaintLinearGradient` value of the 'COLR'
+   *   v1 extensions, see
+   *   'https://github.com/googlefonts/colr-gradients-spec'.  The glyph
+   *   layer filled with this paint is drawn filled with a linear gradient.
+   *
+   * @fields:
+   *   colorline ::
+   *     The @FT_ColorLine information for this paint, i.e., the list of
+   *     color stops along the gradient.
+   *
+   *   p0 ::
+   *     The starting point of the gradient definition in font units
+   *     represented as a 16.16 fixed-point `FT_Vector`.
+   *
+   *   p1 ::
+   *     The end point of the gradient definition in font units
+   *     represented as a 16.16 fixed-point `FT_Vector`.
+   *
+   *   p2 ::
+   *     Optional point~p2 to rotate the gradient in font units
+   *     represented as a 16.16 fixed-point `FT_Vector`.
+   *     Otherwise equal to~p0.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintLinearGradient_
+  {
+    FT_ColorLine  colorline;
+
+    /* TODO: Potentially expose those as x0, y0 etc. */
+    FT_Vector  p0;
+    FT_Vector  p1;
+    FT_Vector  p2;
+
+  } FT_PaintLinearGradient;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintRadialGradient
+   *
+   * @description:
+   *   A structure representing a `PaintRadialGradient` value of the 'COLR'
+   *   v1 extensions, see
+   *   'https://github.com/googlefonts/colr-gradients-spec'.  The glyph
+   *   layer filled with this paint is drawn filled filled with a radial
+   *   gradient.
+   *
+   * @fields:
+   *   colorline ::
+   *     The @FT_ColorLine information for this paint, i.e., the list of
+   *     color stops along the gradient.
+   *
+   *   c0 ::
+   *     The center of the starting point of the radial gradient in font
+   *     units represented as a 16.16 fixed-point `FT_Vector`.
+   *
+   *   r0 ::
+   *     The radius of the starting circle of the radial gradient in font
+   *     units represented as a 16.16 fixed-point value.
+   *
+   *   c1 ::
+   *     The center of the end point of the radial gradient in font units
+   *     represented as a 16.16 fixed-point `FT_Vector`.
+   *
+   *   r1 ::
+   *     The radius of the end circle of the radial gradient in font
+   *     units represented as a 16.16 fixed-point value.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintRadialGradient_
+  {
+    FT_ColorLine  colorline;
+
+    FT_Vector  c0;
+    FT_Pos     r0;
+    FT_Vector  c1;
+    FT_Pos     r1;
+
+  } FT_PaintRadialGradient;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintSweepGradient
+   *
+   * @description:
+   *   A structure representing a `PaintSweepGradient` value of the 'COLR'
+   *   v1 extensions, see
+   *   'https://github.com/googlefonts/colr-gradients-spec'.  The glyph
+   *   layer filled with this paint is drawn filled with a sweep gradient
+   *   from `start_angle` to `end_angle`.
+   *
+   * @fields:
+   *   colorline ::
+   *     The @FT_ColorLine information for this paint, i.e., the list of
+   *     color stops along the gradient.
+   *
+   *   center ::
+   *     The center of the sweep gradient in font units represented as a
+   *     vector of 16.16 fixed-point values.
+   *
+   *   start_angle ::
+   *     The start angle of the sweep gradient in 16.16 fixed-point
+   *     format specifying degrees divided by 180.0 (as in the
+   *     spec).  Multiply by 180.0f to receive degrees value.  Values are
+   *     given counter-clockwise, starting from the (positive) y~axis.
+   *
+   *   end_angle ::
+   *     The end angle of the sweep gradient in 16.16 fixed-point
+   *     format specifying degrees divided by 180.0 (as in the
+   *     spec).  Multiply by 180.0f to receive degrees value.  Values are
+   *     given counter-clockwise, starting from the (positive) y~axis.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintSweepGradient_
+  {
+    FT_ColorLine  colorline;
+
+    FT_Vector  center;
+    FT_Fixed   start_angle;
+    FT_Fixed   end_angle;
+
+  } FT_PaintSweepGradient;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintGlyph
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 `PaintGlyph` paint table.
+   *
+   * @fields:
+   *   paint ::
+   *     An opaque paint object pointing to a `Paint` table that serves as
+   *     the fill for the glyph ID.
+   *
+   *   glyphID ::
+   *     The glyph ID from the 'glyf' table, which serves as the contour
+   *     information that is filled with paint.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintGlyph_
+  {
+    FT_OpaquePaint  paint;
+    FT_UInt         glyphID;
+
+  } FT_PaintGlyph;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintColrGlyph
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 `PaintColorGlyph` paint table.
+   *
+   * @fields:
+   *   glyphID ::
+   *     The glyph ID from the `BaseGlyphV1List` table that is drawn for
+   *     this paint.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintColrGlyph_
+  {
+    FT_UInt  glyphID;
+
+  } FT_PaintColrGlyph;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintTransform
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 `PaintTransform` paint table.
+   *
+   * @fields:
+   *   paint ::
+   *     An opaque paint that is subject to being transformed.
+   *
+   *   affine ::
+   *     A 2x3 transformation matrix in @FT_Affine23 format containing
+   *     16.16 fixed-point values.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintTransform_
+  {
+    FT_OpaquePaint  paint;
+    FT_Affine23     affine;
+
+  } FT_PaintTransform;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintTranslate
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 `PaintTranslate` paint table.
+   *   Used for translating downstream paints by a given x and y~delta.
+   *
+   * @fields:
+   *   paint ::
+   *     An @FT_OpaquePaint object referencing the paint that is to be
+   *     rotated.
+   *
+   *   dx ::
+   *     Translation in x~direction in font units represented as a
+   *     16.16 fixed-point value.
+   *
+   *   dy ::
+   *     Translation in y~direction in font units represented as a
+   *     16.16 fixed-point value.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintTranslate_
+  {
+    FT_OpaquePaint  paint;
+
+    FT_Fixed  dx;
+    FT_Fixed  dy;
+
+  } FT_PaintTranslate;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintScale
+   *
+   * @description:
+   *   A structure representing all of the 'COLR' v1 'PaintScale*' paint
+   *   tables.  Used for scaling downstream paints by a given x and y~scale,
+   *   with a given center.  This structure is used for all 'PaintScale*'
+   *   types that are part of specification; fields of this structure are
+   *   filled accordingly.  If there is a center, the center values are set,
+   *   otherwise they are set to the zero coordinate.  If the source font
+   *   file has 'PaintScaleUniform*' set, the scale values are set
+   *   accordingly to the same value.
+   *
+   * @fields:
+   *   paint ::
+   *     An @FT_OpaquePaint object referencing the paint that is to be
+   *     scaled.
+   *
+   *   scale_x ::
+   *     Scale factor in x~direction represented as a
+   *     16.16 fixed-point value.
+   *
+   *   scale_y ::
+   *     Scale factor in y~direction represented as a
+   *     16.16 fixed-point value.
+   *
+   *   center_x ::
+   *     x~coordinate of center point to scale from represented as a
+   *     16.16 fixed-point value.
+   *
+   *   center_y ::
+   *     y~coordinate of center point to scale from represented as a
+   *     16.16 fixed-point value.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward-compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintScale_
+  {
+    FT_OpaquePaint  paint;
+
+    FT_Fixed  scale_x;
+    FT_Fixed  scale_y;
+
+    FT_Fixed  center_x;
+    FT_Fixed  center_y;
+
+  } FT_PaintScale;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintRotate
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 `PaintRotate` paint table.  Used
+   *   for rotating downstream paints with a given center and angle.
+   *
+   * @fields:
+   *   paint ::
+   *     An @FT_OpaquePaint object referencing the paint that is to be
+   *     rotated.
+   *
+   *   angle ::
+   *     The rotation angle that is to be applied in degrees divided by
+   *     180.0 (as in the spec) represented as a 16.16 fixed-point
+   *     value.  Multiply by 180.0f to receive degrees value.
+   *
+   *   center_x ::
+   *     The x~coordinate of the pivot point of the rotation in font
+   *     units) represented as a 16.16 fixed-point value.
+   *
+   *   center_y ::
+   *     The y~coordinate of the pivot point of the rotation in font
+   *     units represented as a 16.16 fixed-point value.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+
+  typedef struct  FT_PaintRotate_
+  {
+    FT_OpaquePaint  paint;
+
+    FT_Fixed  angle;
+
+    FT_Fixed  center_x;
+    FT_Fixed  center_y;
+
+  } FT_PaintRotate;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintSkew
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 `PaintSkew` paint table.  Used
+   *   for skewing or shearing downstream paints by a given center and
+   *   angle.
+   *
+   * @fields:
+   *   paint ::
+   *     An @FT_OpaquePaint object referencing the paint that is to be
+   *     skewed.
+   *
+   *   x_skew_angle ::
+   *     The skewing angle in x~direction in degrees divided by 180.0
+   *     (as in the spec) represented as a 16.16 fixed-point
+   *     value. Multiply by 180.0f to receive degrees.
+   *
+   *   y_skew_angle ::
+   *     The skewing angle in y~direction in degrees divided by 180.0
+   *     (as in the spec) represented as a 16.16 fixed-point
+   *     value.  Multiply by 180.0f to receive degrees.
+   *
+   *   center_x ::
+   *     The x~coordinate of the pivot point of the skew in font units
+   *     represented as a 16.16 fixed-point value.
+   *
+   *   center_y ::
+   *     The y~coordinate of the pivot point of the skew in font units
+   *     represented as a 16.16 fixed-point value.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintSkew_
+  {
+    FT_OpaquePaint  paint;
+
+    FT_Fixed  x_skew_angle;
+    FT_Fixed  y_skew_angle;
+
+    FT_Fixed  center_x;
+    FT_Fixed  center_y;
+
+  } FT_PaintSkew;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_PaintComposite
+   *
+   * @description:
+   *   A structure representing a 'COLR'v1 `PaintComposite` paint table.
+   *   Used for compositing two paints in a 'COLR' v1 directed acycling
+   *   graph.
+   *
+   * @fields:
+   *   source_paint ::
+   *     An @FT_OpaquePaint object referencing the source that is to be
+   *     composited.
+   *
+   *   composite_mode ::
+   *     An @FT_Composite_Mode enum value determining the composition
+   *     operation.
+   *
+   *   backdrop_paint ::
+   *     An @FT_OpaquePaint object referencing the backdrop paint that
+   *     `source_paint` is composited onto.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_PaintComposite_
+  {
+    FT_OpaquePaint     source_paint;
+    FT_Composite_Mode  composite_mode;
+    FT_OpaquePaint     backdrop_paint;
+
+  } FT_PaintComposite;
+
+
+  /**************************************************************************
+   *
+   * @union:
+   *   FT_COLR_Paint
+   *
+   * @description:
+   *   A union object representing format and details of a paint table of a
+   *   'COLR' v1 font, see
+   *   'https://github.com/googlefonts/colr-gradients-spec'.  Use
+   *   @FT_Get_Paint to retrieve a @FT_COLR_Paint for an @FT_OpaquePaint
+   *   object.
+   *
+   * @fields:
+   *   format ::
+   *     The gradient format for this Paint structure.
+   *
+   *   u ::
+   *     Union of all paint table types:
+   *
+   *       * @FT_PaintColrLayers
+   *       * @FT_PaintGlyph
+   *       * @FT_PaintSolid
+   *       * @FT_PaintLinearGradient
+   *       * @FT_PaintRadialGradient
+   *       * @FT_PaintSweepGradient
+   *       * @FT_PaintTransform
+   *       * @FT_PaintTranslate
+   *       * @FT_PaintRotate
+   *       * @FT_PaintSkew
+   *       * @FT_PaintComposite
+   *       * @FT_PaintColrGlyph
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_COLR_Paint_
+  {
+    FT_PaintFormat format;
+
+    union
+    {
+      FT_PaintColrLayers      colr_layers;
+      FT_PaintGlyph           glyph;
+      FT_PaintSolid           solid;
+      FT_PaintLinearGradient  linear_gradient;
+      FT_PaintRadialGradient  radial_gradient;
+      FT_PaintSweepGradient   sweep_gradient;
+      FT_PaintTransform       transform;
+      FT_PaintTranslate       translate;
+      FT_PaintScale           scale;
+      FT_PaintRotate          rotate;
+      FT_PaintSkew            skew;
+      FT_PaintComposite       composite;
+      FT_PaintColrGlyph       colr_glyph;
+
+    } u;
+
+  } FT_COLR_Paint;
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_Color_Root_Transform
+   *
+   * @description:
+   *   An enumeration to specify whether @FT_Get_Color_Glyph_Paint is to
+   *   return a root transform to configure the client's graphics context
+   *   matrix.
+   *
+   * @values:
+   *   FT_COLOR_INCLUDE_ROOT_TRANSFORM ::
+   *     Do include the root transform as the initial @FT_COLR_Paint object.
+   *
+   *   FT_COLOR_NO_ROOT_TRANSFORM ::
+   *     Do not output an initial root transform.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef enum  FT_Color_Root_Transform_
+  {
+    FT_COLOR_INCLUDE_ROOT_TRANSFORM,
+    FT_COLOR_NO_ROOT_TRANSFORM,
+
+    FT_COLOR_ROOT_TRANSFORM_MAX
+
+  } FT_Color_Root_Transform;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_ClipBox
+   *
+   * @description:
+   *   A structure representing a 'COLR' v1 'ClipBox' table.  'COLR' v1
+   *   glyphs may optionally define a clip box for aiding allocation or
+   *   defining a maximum drawable region.  Use @FT_Get_Color_Glyph_ClipBox
+   *   to retrieve it.
+   *
+   * @fields:
+   *   bottom_left ::
+   *     The bottom left corner of the clip box as an @FT_Vector with
+   *     fixed-point coordinates in 26.6 format.
+   *
+   *   top_left ::
+   *     The top left corner of the clip box as an @FT_Vector with
+   *     fixed-point coordinates in 26.6 format.
+   *
+   *   top_right ::
+   *     The top right corner of the clip box as an @FT_Vector with
+   *     fixed-point coordinates in 26.6 format.
+   *
+   *   bottom_right ::
+   *     The bottom right corner of the clip box as an @FT_Vector with
+   *     fixed-point coordinates in 26.6 format.
+   *
+   * @since:
+   *   2.12 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  typedef struct  FT_ClipBox_
+  {
+    FT_Vector  bottom_left;
+    FT_Vector  top_left;
+    FT_Vector  top_right;
+    FT_Vector  bottom_right;
+
+  } FT_ClipBox;
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_Color_Glyph_Paint
+   *
+   * @description:
+   *   This is the starting point and interface to color gradient
+   *   information in a 'COLR' v1 table in OpenType fonts to recursively
+   *   retrieve the paint tables for the directed acyclic graph of a colored
+   *   glyph, given a glyph ID.
+   *
+   *     https://github.com/googlefonts/colr-gradients-spec
+   *
+   *   In a 'COLR' v1 font, each color glyph defines a directed acyclic
+   *   graph of nested paint tables, such as `PaintGlyph`, `PaintSolid`,
+   *   `PaintLinearGradient`, `PaintRadialGradient`, and so on.  Using this
+   *   function and specifying a glyph ID, one retrieves the root paint
+   *   table for this glyph ID.
+   *
+   *   This function allows control whether an initial root transform is
+   *   returned to configure scaling, transform, and translation correctly
+   *   on the client's graphics context.  The initial root transform is
+   *   computed and returned according to the values configured for @FT_Size
+   *   and @FT_Set_Transform on the @FT_Face object, see below for details
+   *   of the `root_transform` parameter.  This has implications for a
+   *   client 'COLR' v1 implementation: When this function returns an
+   *   initially computed root transform, at the time of executing the
+   *   @FT_PaintGlyph operation, the contours should be retrieved using
+   *   @FT_Load_Glyph at unscaled, untransformed size.  This is because the
+   *   root transform applied to the graphics context will take care of
+   *   correct scaling.
+   *
+   *   Alternatively, to allow hinting of contours, at the time of executing
+   *   @FT_Load_Glyph, the current graphics context transformation matrix
+   *   can be decomposed into a scaling matrix and a remainder, and
+   *   @FT_Load_Glyph can be used to retrieve the contours at scaled size.
+   *   Care must then be taken to blit or clip to the graphics context with
+   *   taking this remainder transformation into account.
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   *   base_glyph ::
+   *     The glyph index for which to retrieve the root paint table.
+   *
+   *   root_transform ::
+   *     Specifies whether an initially computed root is returned by the
+   *     @FT_PaintTransform operation to account for the activated size
+   *     (see @FT_Activate_Size) and the configured transform and translate
+   *     (see @FT_Set_Transform).
+   *
+   *     This root transform is returned before nodes of the glyph graph of
+   *     the font are returned.  Subsequent @FT_COLR_Paint structures
+   *     contain unscaled and untransformed values.  The inserted root
+   *     transform enables the client application to apply an initial
+   *     transform to its graphics context.  When executing subsequent
+   *     FT_COLR_Paint operations, values from @FT_COLR_Paint operations
+   *     will ultimately be correctly scaled because of the root transform
+   *     applied to the graphics context.  Use
+   *     @FT_COLOR_INCLUDE_ROOT_TRANSFORM to include the root transform, use
+   *     @FT_COLOR_NO_ROOT_TRANSFORM to not include it.  The latter may be
+   *     useful when traversing the 'COLR' v1 glyph graph and reaching a
+   *     @FT_PaintColrGlyph.  When recursing into @FT_PaintColrGlyph and
+   *     painting that inline, no additional root transform is needed as it
+   *     has already been applied to the graphics context at the beginning
+   *     of drawing this glyph.
+   *
+   * @output:
+   *   paint ::
+   *     The @FT_OpaquePaint object that references the actual paint table.
+   *
+   *     The respective actual @FT_COLR_Paint object is retrieved via
+   *     @FT_Get_Paint.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  If no color glyph is found, or the root
+   *   paint could not be retrieved, value~0 gets returned.  In case of an
+   *   error, value~0 is returned also.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  FT_EXPORT( FT_Bool )
+  FT_Get_Color_Glyph_Paint( FT_Face                  face,
+                            FT_UInt                  base_glyph,
+                            FT_Color_Root_Transform  root_transform,
+                            FT_OpaquePaint*          paint );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_Color_Glyph_ClipBox
+   *
+   * @description:
+   *   Search for a 'COLR' v1 clip box for the specified `base_glyph` and
+   *   fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information
+   *   if one is found.
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   *   base_glyph ::
+   *     The glyph index for which to retrieve the clip box.
+   *
+   * @output:
+   *   clip_box ::
+   *     The clip box for the requested `base_glyph` if one is found.  The
+   *     clip box is computed taking scale and transformations configured on
+   *     the @FT_Face into account.  @FT_ClipBox contains @FT_Vector values
+   *     in 26.6 format.
+   *
+   * @return:
+   *   Value~1 if a clip box is found.  If no clip box is found or an error
+   *   occured, value~0 is returned.
+   *
+   * @note:
+   *   To retrieve the clip box in font units, reset scale to units-per-em
+   *   and remove transforms configured using @FT_Set_Transform.
+   *
+   * @since:
+   *   2.12 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  FT_EXPORT( FT_Bool )
+  FT_Get_Color_Glyph_ClipBox( FT_Face      face,
+                              FT_UInt      base_glyph,
+                              FT_ClipBox*  clip_box );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_Paint_Layers
+   *
+   * @description:
+   *   Access the layers of a `PaintColrLayers` table.
+   *
+   *   If the root paint of a color glyph, or a nested paint of a 'COLR'
+   *   glyph is a `PaintColrLayers` table, this function retrieves the
+   *   layers of the `PaintColrLayers` table.
+   *
+   *   The @FT_PaintColrLayers object contains an @FT_LayerIterator, which
+   *   is used here to iterate over the layers.  Each layer is returned as
+   *   an @FT_OpaquePaint object, which then can be used with @FT_Get_Paint
+   *   to retrieve the actual paint object.
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   * @inout:
+   *   iterator ::
+   *     The @FT_LayerIterator from an @FT_PaintColrLayers object, for which
+   *     the layers are to be retrieved.  The internal state of the iterator
+   *     is incremented after one call to this function for retrieving one
+   *     layer.
+   *
+   * @output:
+   *   paint ::
+   *     The @FT_OpaquePaint object that references the actual paint table.
+   *     The respective actual @FT_COLR_Paint object is retrieved via
+   *     @FT_Get_Paint.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  Value~0 gets returned when the paint
+   *   object can not be retrieved or any other error occurs.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  FT_EXPORT( FT_Bool )
+  FT_Get_Paint_Layers( FT_Face            face,
+                       FT_LayerIterator*  iterator,
+                       FT_OpaquePaint*    paint );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_Colorline_Stops
+   *
+   * @description:
+   *   This is an interface to color gradient information in a 'COLR' v1
+   *   table in OpenType fonts to iteratively retrieve the gradient and
+   *   solid fill information for colored glyph layers for a specified glyph
+   *   ID.
+   *
+   *     https://github.com/googlefonts/colr-gradients-spec
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   * @inout:
+   *   iterator ::
+   *     The retrieved @FT_ColorStopIterator, configured on an @FT_ColorLine,
+   *     which in turn got retrieved via paint information in
+   *     @FT_PaintLinearGradient or @FT_PaintRadialGradient.
+   *
+   * @output:
+   *   color_stop ::
+   *     Color index and alpha value for the retrieved color stop.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  If there are no more color stops,
+   *   value~0 gets returned.  In case of an error, value~0 is returned
+   *   also.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  FT_EXPORT( FT_Bool )
+  FT_Get_Colorline_Stops( FT_Face                face,
+                          FT_ColorStop*          color_stop,
+                          FT_ColorStopIterator*  iterator );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *  FT_Get_Paint
+   *
+   * @description:
+   *   Access the details of a paint using an @FT_OpaquePaint opaque paint
+   *   object, which internally stores the offset to the respective `Paint`
+   *   object in the 'COLR' table.
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   *   opaque_paint ::
+   *     The opaque paint object for which the underlying @FT_COLR_Paint
+   *     data is to be retrieved.
+   *
+   * @output:
+   *   paint ::
+   *     The specific @FT_COLR_Paint object containing information coming
+   *     from one of the font's `Paint*` tables.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  Value~0 if no details can be found for
+   *   this paint or any other error occured.
+   *
+   * @since:
+   *   2.11 -- **currently experimental only!**  There might be changes
+   *   without retaining backward compatibility of both the API and ABI.
+   *
+   */
+  FT_EXPORT( FT_Bool )
+  FT_Get_Paint( FT_Face         face,
+                FT_OpaquePaint  opaque_paint,
+                FT_COLR_Paint*  paint );
+
   /* */
 
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftdriver.h b/qtbase/src/3rdparty/freetype/include/freetype/ftdriver.h
index 804ec34a39..0dc91e8b40 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftdriver.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftdriver.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for controlling driver modules (specification only).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,10 +53,10 @@ FT_BEGIN_HEADER
    *   reasons.
    *
    *   Available properties are @increase-x-height, @no-stem-darkening
-   *   (experimental), @darkening-parameters (experimental), @warping
-   *   (experimental), @glyph-to-script-map (experimental), @fallback-script
-   *   (experimental), and @default-script (experimental), as documented in
-   *   the @properties section.
+   *   (experimental), @darkening-parameters (experimental),
+   *   @glyph-to-script-map (experimental), @fallback-script (experimental),
+   *   and @default-script (experimental), as documented in the @properties
+   *   section.
    *
    */
 
@@ -84,15 +84,15 @@ FT_BEGIN_HEADER
    *   @properties section.
    *
    *
-   *   **Hinting and antialiasing principles of the new engine**
+   *   **Hinting and anti-aliasing principles of the new engine**
    *
    *   The rasterizer is positioning horizontal features (e.g., ascender
    *   height & x-height, or crossbars) on the pixel grid and minimizing the
-   *   amount of antialiasing applied to them, while placing vertical
+   *   amount of anti-aliasing applied to them, while placing vertical
    *   features (vertical stems) on the pixel grid without hinting, thus
    *   representing the stem position and weight accurately.  Sometimes the
    *   vertical stems may be only partially black.  In this context,
-   *   'antialiasing' means that stems are not positioned exactly on pixel
+   *   'anti-aliasing' means that stems are not positioned exactly on pixel
    *   borders, causing a fuzzy appearance.
    *
    *   There are two principles behind this approach.
@@ -108,7 +108,7 @@ FT_BEGIN_HEADER
    *   sizes are comparable to kerning values and thus would be noticeable
    *   (and distracting) while reading if hinting were applied.
    *
-   *   One of the reasons to not hint horizontally is antialiasing for LCD
+   *   One of the reasons to not hint horizontally is anti-aliasing for LCD
    *   screens: The pixel geometry of modern displays supplies three vertical
    *   subpixels as the eye moves horizontally across each visible pixel.  On
    *   devices where we can be certain this characteristic is present a
@@ -116,7 +116,7 @@ FT_BEGIN_HEADER
    *   weight.  In Western writing systems this turns out to be the more
    *   critical direction anyway; the weights and spacing of vertical stems
    *   (see above) are central to Armenian, Cyrillic, Greek, and Latin type
-   *   designs.  Even when the rasterizer uses greyscale antialiasing instead
+   *   designs.  Even when the rasterizer uses greyscale anti-aliasing instead
    *   of color (a necessary compromise when one doesn't know the screen
    *   characteristics), the unhinted vertical features preserve the design's
    *   weight and spacing much better than aliased type would.
@@ -212,16 +212,14 @@ FT_BEGIN_HEADER
    * @description:
    *   While FreeType's TrueType driver doesn't expose API functions by
    *   itself, it is possible to control its behaviour with @FT_Property_Set
-   *   and @FT_Property_Get.  The following lists the available properties
-   *   together with the necessary macros and structures.
-   *
-   *   The TrueType driver's module name is 'truetype'.
+   *   and @FT_Property_Get.
    *
-   *   A single property @interpreter-version is available, as documented in
-   *   the @properties section.
+   *   The TrueType driver's module name is 'truetype'; a single property
+   *   @interpreter-version is available, as documented in the @properties
+   *   section.
    *
-   *   We start with a list of definitions, kindly provided by Greg
-   *   Hitchcock.
+   *   To help understand the differences between interpreter versions, we
+   *   introduce a list of definitions, kindly provided by Greg Hitchcock.
    *
    *   _Bi-Level Rendering_
    *
@@ -300,6 +298,31 @@ FT_BEGIN_HEADER
    */
 
 
+  /**************************************************************************
+   *
+   * @section:
+   *   ot_svg_driver
+   *
+   * @title:
+   *   The SVG driver
+   *
+   * @abstract:
+   *   Controlling the external rendering of OT-SVG glyphs.
+   *
+   * @description:
+   *   By default, FreeType can only load the 'SVG~' table of OpenType fonts
+   *   if configuration macro `FT_CONFIG_OPTION_SVG` is defined.  To make it
+   *   render SVG glyphs, an external SVG rendering library is needed.  All
+   *   details on the interface between FreeType and the external library
+   *   via function hooks can be found in section @svg_fonts.
+   *
+   *   The OT-SVG driver's module name is 'ot-svg'; it supports a single
+   *   property called @svg-hooks, documented below in the @properties
+   *   section.
+   *
+   */
+
+
   /**************************************************************************
    *
    * @section:
@@ -362,12 +385,8 @@ FT_BEGIN_HEADER
    *   The same holds for the Type~1 and CID modules if compiled with
    *   `T1_CONFIG_OPTION_OLD_ENGINE`.
    *
-   *   For the 'cff' module, the default engine is 'freetype' if
-   *   `CFF_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe' otherwise.
-   *
-   *   For both the 'type1' and 't1cid' modules, the default engine is
-   *   'freetype' if `T1_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe'
-   *   otherwise.
+   *   For the 'cff' module, the default engine is 'adobe'.  For both the
+   *   'type1' and 't1cid' modules, the default engine is 'adobe', too.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
@@ -802,6 +821,40 @@ FT_BEGIN_HEADER
    */
 
 
+  /**************************************************************************
+   *
+   * @property:
+   *   svg-hooks
+   *
+   * @description:
+   *   Set up the interface between FreeType and an extern SVG rendering
+   *   library like 'librsvg'.  All details on the function hooks can be
+   *   found in section @svg_fonts.
+   *
+   * @example:
+   *   The following example code expects that the four hook functions
+   *   `svg_*` are defined elsewhere.  Error handling is omitted, too.
+   *
+   *   ```
+   *     FT_Library  library;
+   *     SVG_RendererHooks  hooks = {
+   *                          (SVG_Lib_Init_Func)svg_init,
+   *                          (SVG_Lib_Free_Func)svg_free,
+   *                          (SVG_Lib_Render_Func)svg_render,
+   *                          (SVG_Lib_Preset_Slot_Func)svg_preset_slot };
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *
+   *     FT_Property_Set( library, "ot-svg",
+   *                               "svg-hooks", &hooks );
+   *   ```
+   *
+   * @since:
+   *   2.12
+   */
+
+
   /**************************************************************************
    *
    * @property:
@@ -1166,48 +1219,18 @@ FT_BEGIN_HEADER
    *   warping
    *
    * @description:
-   *   **Experimental only**
+   *   **Obsolete**
    *
-   *   If FreeType gets compiled with option `AF_CONFIG_OPTION_USE_WARPER` to
-   *   activate the warp hinting code in the auto-hinter, this property
-   *   switches warping on and off.
+   *   This property was always experimental and probably never worked
+   *   correctly.  It was entirely removed from the FreeType~2 sources.  This
+   *   entry is only here for historical reference.
    *
-   *   Warping only works in 'normal' auto-hinting mode replacing it.  The
-   *   idea of the code is to slightly scale and shift a glyph along the
+   *   Warping only worked in 'normal' auto-hinting mode replacing it.  The
+   *   idea of the code was to slightly scale and shift a glyph along the
    *   non-hinted dimension (which is usually the horizontal axis) so that as
-   *   much of its segments are aligned (more or less) to the grid.  To find
+   *   much of its segments were aligned (more or less) to the grid.  To find
    *   out a glyph's optimal scaling and shifting value, various parameter
-   *   combinations are tried and scored.
-   *
-   *   By default, warping is off.
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES` environment
-   *   variable (using values 1 and 0 for 'on' and 'off', respectively).
-   *
-   *   The warping code can also change advance widths.  Have a look at the
-   *   `lsb_delta` and `rsb_delta` fields in the @FT_GlyphSlotRec structure
-   *   for details on improving inter-glyph distances while rendering.
-   *
-   *   Since warping is a global property of the auto-hinter it is best to
-   *   change its value before rendering any face.  Otherwise, you should
-   *   reload all faces that get auto-hinted in 'normal' hinting mode.
-   *
-   * @example:
-   *   This example shows how to switch on warping (omitting the error
-   *   handling).
-   *
-   *   ```
-   *     FT_Library  library;
-   *     FT_Bool     warping = 1;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "autofitter", "warping", &warping );
-   *   ```
+   *   combinations were tried and scored.
    *
    * @since:
    *   2.6
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/fterrdef.h b/qtbase/src/3rdparty/freetype/include/freetype/fterrdef.h
index 895d2d4dc8..a3acfce430 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/fterrdef.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/fterrdef.h
@@ -4,7 +4,7 @@
  *
  *   FreeType error codes (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -101,6 +101,8 @@
                 "too many hints" )
   FT_ERRORDEF_( Invalid_Pixel_Size,                          0x17,
                 "invalid pixel size" )
+  FT_ERRORDEF_( Invalid_SVG_Document,                        0x18,
+                "invalid SVG document" )
 
   /* handle errors */
 
@@ -234,6 +236,8 @@
                 "found FDEF or IDEF opcode in glyf bytecode" )
   FT_ERRORDEF_( Missing_Bitmap,                              0x9D,
                 "missing bitmap in strike" )
+  FT_ERRORDEF_( Missing_SVG_Hooks,                           0x9E,
+                "SVG hooks have not been set" )
 
   /* CFF, CID, and Type 1 errors */
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/fterrors.h b/qtbase/src/3rdparty/freetype/include/freetype/fterrors.h
index 60a637c77c..ff1b375d7d 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/fterrors.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/fterrors.h
@@ -4,7 +4,7 @@
  *
  *   FreeType error code handling (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -281,6 +281,8 @@ FT_BEGIN_HEADER
   FT_EXPORT( const char* )
   FT_Error_String( FT_Error  error_code );
 
+  /* */
+
 FT_END_HEADER
 
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftfntfmt.h b/qtbase/src/3rdparty/freetype/include/freetype/ftfntfmt.h
index f803349cd7..77d553578b 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftfntfmt.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftfntfmt.h
@@ -4,7 +4,7 @@
  *
  *   Support functions for font formats.
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftgasp.h b/qtbase/src/3rdparty/freetype/include/freetype/ftgasp.h
index 6b76882c74..d4ab9b32db 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftgasp.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftgasp.h
@@ -4,7 +4,7 @@
  *
  *   Access of TrueType's 'gasp' table (specification).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftglyph.h b/qtbase/src/3rdparty/freetype/include/freetype/ftglyph.h
index 704619e3d0..6b77bd3d2a 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftglyph.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftglyph.h
@@ -4,7 +4,7 @@
  *
  *   FreeType convenience functions to handle glyphs (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -126,7 +126,7 @@ FT_BEGIN_HEADER
    *
    * @description:
    *   A handle to an object used to model a bitmap glyph image.  This is a
-   *   sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
+   *   'sub-class' of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
    */
   typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
 
@@ -142,7 +142,7 @@ FT_BEGIN_HEADER
    *
    * @fields:
    *   root ::
-   *     The root @FT_Glyph fields.
+   *     The root fields of @FT_Glyph.
    *
    *   left ::
    *     The left-side bearing, i.e., the horizontal distance from the
@@ -181,7 +181,7 @@ FT_BEGIN_HEADER
    *
    * @description:
    *   A handle to an object used to model an outline glyph image.  This is a
-   *   sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
+   *   'sub-class' of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
    */
   typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
 
@@ -222,6 +222,92 @@ FT_BEGIN_HEADER
   } FT_OutlineGlyphRec;
 
 
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_SvgGlyph
+   *
+   * @description:
+   *   A handle to an object used to model an SVG glyph.  This is a
+   *   'sub-class' of @FT_Glyph, and a pointer to @FT_SvgGlyphRec.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef struct FT_SvgGlyphRec_*  FT_SvgGlyph;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_SvgGlyphRec
+   *
+   * @description:
+   *   A structure used for OT-SVG glyphs.  This is a 'sub-class' of
+   *   @FT_GlyphRec.
+   *
+   * @fields:
+   *   root ::
+   *     The root @FT_GlyphRec fields.
+   *
+   *   svg_document ::
+   *     A pointer to the SVG document.
+   *
+   *   svg_document_length ::
+   *     The length of `svg_document`.
+   *
+   *   glyph_index ::
+   *     The index of the glyph to be rendered.
+   *
+   *   metrics ::
+   *     A metrics object storing the size information.
+   *
+   *   units_per_EM ::
+   *     The size of the EM square.
+   *
+   *   start_glyph_id ::
+   *     The first glyph ID in the glyph range covered by this document.
+   *
+   *   end_glyph_id ::
+   *     The last glyph ID in the glyph range covered by this document.
+   *
+   *   transform ::
+   *     A 2x2 transformation matrix to apply to the glyph while rendering
+   *     it.
+   *
+   *   delta ::
+   *     Translation to apply to the glyph while rendering.
+   *
+   * @note:
+   *   The Glyph Management API requires @FT_Glyph or its 'sub-class' to have
+   *   all the information needed to completely define the glyph's rendering.
+   *   Outline-based glyphs can directly apply transformations to the outline
+   *   but this is not possible for an SVG document that hasn't been parsed.
+   *   Therefore, the transformation is stored along with the document.  In
+   *   the absence of a 'ViewBox' or 'Width'/'Height' attribute, the size of
+   *   the ViewPort should be assumed to be 'units_per_EM'.
+   */
+  typedef struct  FT_SvgGlyphRec_
+  {
+    FT_GlyphRec  root;
+
+    FT_Byte*  svg_document;
+    FT_ULong  svg_document_length;
+
+    FT_UInt  glyph_index;
+
+    FT_Size_Metrics  metrics;
+    FT_UShort        units_per_EM;
+
+    FT_UShort  start_glyph_id;
+    FT_UShort  end_glyph_id;
+
+    FT_Matrix  transform;
+    FT_Vector  delta;
+
+  } FT_SvgGlyphRec;
+
+
   /**************************************************************************
    *
    * @function:
@@ -337,9 +423,9 @@ FT_BEGIN_HEADER
    *   vector.
    */
   FT_EXPORT( FT_Error )
-  FT_Glyph_Transform( FT_Glyph    glyph,
-                      FT_Matrix*  matrix,
-                      FT_Vector*  delta );
+  FT_Glyph_Transform( FT_Glyph          glyph,
+                      const FT_Matrix*  matrix,
+                      const FT_Vector*  delta );
 
 
   /**************************************************************************
@@ -498,9 +584,9 @@ FT_BEGIN_HEADER
    *   The glyph image is translated with the `origin` vector before
    *   rendering.
    *
-   *   The first parameter is a pointer to an @FT_Glyph handle, that will be
+   *   The first parameter is a pointer to an @FT_Glyph handle that will be
    *   _replaced_ by this function (with newly allocated data).  Typically,
-   *   you would use (omitting error handling):
+   *   you would do something like the following (omitting error handling).
    *
    *   ```
    *     FT_Glyph        glyph;
@@ -517,7 +603,7 @@ FT_BEGIN_HEADER
    *     if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )
    *     {
    *       error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,
-   *                                     0, 1 );
+   *                                   0, 1 );
    *       if ( error ) // `glyph' unchanged
    *         ...
    *     }
@@ -532,7 +618,7 @@ FT_BEGIN_HEADER
    *     FT_Done_Glyph( glyph );
    *   ```
    *
-   *   Here is another example, again without error handling:
+   *   Here is another example, again without error handling.
    *
    *   ```
    *     FT_Glyph  glyphs[MAX_GLYPHS]
@@ -569,10 +655,10 @@ FT_BEGIN_HEADER
    *   ```
    */
   FT_EXPORT( FT_Error )
-  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
-                      FT_Render_Mode  render_mode,
-                      FT_Vector*      origin,
-                      FT_Bool         destroy );
+  FT_Glyph_To_Bitmap( FT_Glyph*         the_glyph,
+                      FT_Render_Mode    render_mode,
+                      const FT_Vector*  origin,
+                      FT_Bool           destroy );
 
 
   /**************************************************************************
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftgxval.h b/qtbase/src/3rdparty/freetype/include/freetype/ftgxval.h
index 354460a9a7..2d3f382acf 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftgxval.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftgxval.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Masatake YAMATO, Redhat K.K,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftgzip.h b/qtbase/src/3rdparty/freetype/include/freetype/ftgzip.h
index ec5939a191..0880290f9e 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftgzip.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftgzip.h
@@ -4,7 +4,7 @@
  *
  *   Gzip-compressed stream support.
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftimage.h b/qtbase/src/3rdparty/freetype/include/freetype/ftimage.h
index 74911620d2..7f2d721cdc 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftimage.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftimage.h
@@ -5,7 +5,7 @@
  *   FreeType glyph image formats and default raster interface
  *   (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,11 +28,6 @@
 #define FTIMAGE_H_
 
 
-  /* STANDALONE_ is from ftgrays.c */
-#ifndef STANDALONE_
-#endif
-
-
 FT_BEGIN_HEADER
 
 
@@ -201,6 +196,11 @@ FT_BEGIN_HEADER
 #define ft_pixel_mode_pal2   FT_PIXEL_MODE_GRAY2
 #define ft_pixel_mode_pal4   FT_PIXEL_MODE_GRAY4
 
+  /* */
+
+  /* For debugging, the @FT_Pixel_Mode enumeration must stay in sync */
+  /* with the `pixel_modes` array in file `ftobjs.c`.                */
+
 
   /**************************************************************************
    *
@@ -401,11 +401,11 @@ FT_BEGIN_HEADER
    *     information.
    *
    *   FT_OUTLINE_OVERLAP ::
-   *     This flag indicates that this outline contains overlapping contrours
-   *     and the anti-aliased renderer should perform oversampling to
-   *     mitigate possible artifacts.  This flag should _not_ be set for
-   *     well designed glyphs without overlaps because it quadruples the
-   *     rendering time.
+   *     [Since 2.10.3] This flag indicates that this outline contains
+   *     overlapping contours and the anti-aliased renderer should perform
+   *     oversampling to mitigate possible artifacts.  This flag should _not_
+   *     be set for well designed glyphs without overlaps because it quadruples
+   *     the rendering time.
    *
    *   FT_OUTLINE_HIGH_PRECISION ::
    *     This flag indicates that the scan-line converter should try to
@@ -695,11 +695,13 @@ FT_BEGIN_HEADER
    *   to get a simple enumeration without assigning special numbers.
    */
 #ifndef FT_IMAGE_TAG
-#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  \
-          value = ( ( (unsigned long)_x1 << 24 ) | \
-                    ( (unsigned long)_x2 << 16 ) | \
-                    ( (unsigned long)_x3 << 8  ) | \
-                      (unsigned long)_x4         )
+
+#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )                         \
+          value = ( ( FT_STATIC_BYTE_CAST( unsigned long, _x1 ) << 24 ) | \
+                    ( FT_STATIC_BYTE_CAST( unsigned long, _x2 ) << 16 ) | \
+                    ( FT_STATIC_BYTE_CAST( unsigned long, _x3 ) << 8  ) | \
+                      FT_STATIC_BYTE_CAST( unsigned long, _x4 )         )
+
 #endif /* FT_IMAGE_TAG */
 
 
@@ -739,6 +741,10 @@ FT_BEGIN_HEADER
    *     contours.  Some Type~1 fonts, like those in the Hershey family,
    *     contain glyphs in this format.  These are described as @FT_Outline,
    *     but FreeType isn't currently capable of rendering them correctly.
+   *
+   *   FT_GLYPH_FORMAT_SVG ::
+   *     [Since 2.12] The glyph is represented by an SVG document in the
+   *     'SVG~' table.
    */
   typedef enum  FT_Glyph_Format_
   {
@@ -747,7 +753,8 @@ FT_BEGIN_HEADER
     FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
     FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP,    'b', 'i', 't', 's' ),
     FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE,   'o', 'u', 't', 'l' ),
-    FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER,   'p', 'l', 'o', 't' )
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER,   'p', 'l', 'o', 't' ),
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_SVG,       'S', 'V', 'G', ' ' )
 
   } FT_Glyph_Format;
 
@@ -772,17 +779,6 @@ FT_BEGIN_HEADER
   /*************************************************************************/
 
 
-  /**************************************************************************
-   *
-   * A raster is a scan converter, in charge of rendering an outline into a
-   * bitmap.  This section contains the public API for rasters.
-   *
-   * Note that in FreeType 2, all rasters are now encapsulated within
-   * specific modules called 'renderers'.  See `ftrender.h` for more details
-   * on renderers.
-   *
-   */
-
 
   /**************************************************************************
    *
@@ -796,16 +792,35 @@ FT_BEGIN_HEADER
    *   How vectorial outlines are converted into bitmaps and pixmaps.
    *
    * @description:
-   *   This section contains technical definitions.
+   *   A raster or a rasterizer is a scan converter in charge of producing a
+   *   pixel coverage bitmap that can be used as an alpha channel when
+   *   compositing a glyph with a background.  FreeType comes with two
+   *   rasterizers: bilevel `raster1` and anti-aliased `smooth` are two
+   *   separate modules.  They are usually called from the high-level
+   *   @FT_Load_Glyph or @FT_Render_Glyph functions and produce the entire
+   *   coverage bitmap at once, while staying largely invisible to users.
+   *
+   *   Instead of working with complete coverage bitmaps, it is also possible
+   *   to intercept consecutive pixel runs on the same scanline with the same
+   *   coverage, called _spans_, and process them individually.  Only the
+   *   `smooth` rasterizer permits this when calling @FT_Outline_Render with
+   *   @FT_Raster_Params as described below.
+   *
+   *   Working with either complete bitmaps or spans it is important to think
+   *   of them as colorless coverage objects suitable as alpha channels to
+   *   blend arbitrary colors with a background.  For best results, it is
+   *   recommended to use gamma correction, too.
+   *
+   *   This section also describes the public API needed to set up alternative
+   *   @FT_Renderer modules.
    *
    * @order:
-   *   FT_Raster
    *   FT_Span
    *   FT_SpanFunc
-   *
    *   FT_Raster_Params
    *   FT_RASTER_FLAG_XXX
    *
+   *   FT_Raster
    *   FT_Raster_NewFunc
    *   FT_Raster_DoneFunc
    *   FT_Raster_ResetFunc
@@ -816,26 +831,14 @@ FT_BEGIN_HEADER
    */
 
 
-  /**************************************************************************
-   *
-   * @type:
-   *   FT_Raster
-   *
-   * @description:
-   *   An opaque handle (pointer) to a raster object.  Each object can be
-   *   used independently to convert an outline into a bitmap or pixmap.
-   */
-  typedef struct FT_RasterRec_*  FT_Raster;
-
-
   /**************************************************************************
    *
    * @struct:
    *   FT_Span
    *
    * @description:
-   *   A structure used to model a single span of gray pixels when rendering
-   *   an anti-aliased bitmap.
+   *   A structure to model a single span of consecutive pixels when
+   *   rendering an anti-aliased bitmap.
    *
    * @fields:
    *   x ::
@@ -852,8 +855,8 @@ FT_BEGIN_HEADER
    *   This structure is used by the span drawing callback type named
    *   @FT_SpanFunc that takes the y~coordinate of the span as a parameter.
    *
-   *   The coverage value is always between 0 and 255.  If you want less gray
-   *   values, the callback function has to reduce them.
+   *   The anti-aliased rasterizer produces coverage values from 0 to 255,
+   *   this is, from completely transparent to completely opaque.
    */
   typedef struct  FT_Span_
   {
@@ -871,8 +874,8 @@ FT_BEGIN_HEADER
    *
    * @description:
    *   A function used as a call-back by the anti-aliased renderer in order
-   *   to let client applications draw themselves the gray pixel spans on
-   *   each scan line.
+   *   to let client applications draw themselves the pixel spans on each
+   *   scan line.
    *
    * @input:
    *   y ::
@@ -888,11 +891,12 @@ FT_BEGIN_HEADER
    *     User-supplied data that is passed to the callback.
    *
    * @note:
-   *   This callback allows client applications to directly render the gray
-   *   spans of the anti-aliased bitmap to any kind of surfaces.
+   *   This callback allows client applications to directly render the spans
+   *   of the anti-aliased bitmap to any kind of surfaces.
    *
    *   This can be used to write anti-aliased outlines directly to a given
-   *   background bitmap, and even perform translucency.
+   *   background bitmap using alpha compositing.  It can also be used for
+   *   oversampling and averaging.
    */
   typedef void
   (*FT_SpanFunc)( int             y,
@@ -962,11 +966,17 @@ FT_BEGIN_HEADER
    *     will be clipped to a box specified in the `clip_box` field of the
    *     @FT_Raster_Params structure.  Otherwise, the `clip_box` is
    *     effectively set to the bounding box and all spans are generated.
+   *
+   *   FT_RASTER_FLAG_SDF ::
+   *     This flag is set to indicate that a signed distance field glyph
+   *     image should be generated.  This is only used while rendering with
+   *     the @FT_RENDER_MODE_SDF render mode.
    */
 #define FT_RASTER_FLAG_DEFAULT  0x0
 #define FT_RASTER_FLAG_AA       0x1
 #define FT_RASTER_FLAG_DIRECT   0x2
 #define FT_RASTER_FLAG_CLIP     0x4
+#define FT_RASTER_FLAG_SDF      0x8
 
   /* these constants are deprecated; use the corresponding */
   /* `FT_RASTER_FLAG_XXX` values instead                   */
@@ -1047,6 +1057,23 @@ FT_BEGIN_HEADER
   } FT_Raster_Params;
 
 
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Raster
+   *
+   * @description:
+   *   An opaque handle (pointer) to a raster object.  Each object can be
+   *   used independently to convert an outline into a bitmap or pixmap.
+   *
+   * @note:
+   *   In FreeType 2, all rasters are now encapsulated within specific
+   *   @FT_Renderer modules and only used in their context.
+   *
+   */
+  typedef struct FT_RasterRec_*  FT_Raster;
+
+
   /**************************************************************************
    *
    * @functype:
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftincrem.h b/qtbase/src/3rdparty/freetype/include/freetype/ftincrem.h
index f67655eda0..3b3d93c2d3 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftincrem.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftincrem.h
@@ -4,7 +4,7 @@
  *
  *   FreeType incremental loading (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -213,9 +213,14 @@ FT_BEGIN_HEADER
    *
    * @description:
    *   A function used to retrieve the basic metrics of a given glyph index
-   *   before accessing its data.  This is necessary because, in certain
-   *   formats like TrueType, the metrics are stored in a different place
-   *   from the glyph images proper.
+   *   before accessing its data.  This allows for handling font types such
+   *   as PCL~XL Format~1, Class~2 downloaded TrueType fonts, where the glyph
+   *   metrics (`hmtx` and `vmtx` tables) are permitted to be omitted from
+   *   the font, and the relevant metrics included in the header of the glyph
+   *   outline data.  Importantly, this is not intended to allow custom glyph
+   *   metrics (for example, Postscript Metrics dictionaries), because that
+   *   conflicts with the requirements of outline hinting.  Such custom
+   *   metrics must be handled separately, by the calling application.
    *
    * @input:
    *   incremental ::
@@ -235,7 +240,7 @@ FT_BEGIN_HEADER
    *
    * @output:
    *   ametrics ::
-   *     The replacement glyph metrics in font units.
+   *     The glyph metrics in font units.
    *
    */
   typedef FT_Error
@@ -264,7 +269,7 @@ FT_BEGIN_HEADER
    *
    *   get_glyph_metrics ::
    *     The function to get glyph metrics.  May be null if the font does not
-   *     provide overriding glyph metrics.
+   *     require it.
    *
    */
   typedef struct  FT_Incremental_FuncsRec_
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftlcdfil.h b/qtbase/src/3rdparty/freetype/include/freetype/ftlcdfil.h
index c6995f2ff7..c767c6cb48 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftlcdfil.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftlcdfil.h
@@ -5,7 +5,7 @@
  *   FreeType API for color filtering of subpixel bitmap glyphs
  *   (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -44,7 +44,7 @@ FT_BEGIN_HEADER
    *   API to control subpixel rendering.
    *
    * @description:
-   *   FreeType provides two alternative subpixel rendering technologies. 
+   *   FreeType provides two alternative subpixel rendering technologies.
    *   Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
    *   `ftoption.h` file, this enables ClearType-style rendering.
    *   Otherwise, Harmony LCD rendering is enabled.  These technologies are
@@ -55,13 +55,12 @@ FT_BEGIN_HEADER
    *   ClearType-style LCD rendering exploits the color-striped structure of
    *   LCD pixels, increasing the available resolution in the direction of
    *   the stripe (usually horizontal RGB) by a factor of~3.  Using the
-   *   subpixels coverages unfiltered can create severe color fringes
+   *   subpixel coverages unfiltered can create severe color fringes
    *   especially when rendering thin features.  Indeed, to produce
    *   black-on-white text, the nearby color subpixels must be dimmed
-   *   equally.
-   *
-   *   A good 5-tap FIR filter should be applied to subpixel coverages
-   *   regardless of pixel boundaries and should have these properties:
+   *   evenly.  Therefore, an equalizing 5-tap FIR filter should be applied
+   *   to subpixel coverages regardless of pixel boundaries and should have
+   *   these properties:
    *
    *   1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid
    *      any shifts in appearance.
@@ -84,7 +83,7 @@ FT_BEGIN_HEADER
    *   Harmony LCD rendering is suitable to panels with any regular subpixel
    *   structure, not just monitors with 3 color striped subpixels, as long
    *   as the color subpixels have fixed positions relative to the pixel
-   *   center.  In this case, each color channel is then rendered separately
+   *   center.  In this case, each color channel can be rendered separately
    *   after shifting the outline opposite to the subpixel shift so that the
    *   coverage maps are aligned.  This method is immune to color fringes
    *   because the shifts do not change integral coverage.
@@ -101,9 +100,9 @@ FT_BEGIN_HEADER
    *   clockwise.  Harmony with default LCD geometry is equivalent to
    *   ClearType with light filter.
    *
-   *   As a result of ClearType filtering or Harmony rendering, the
-   *   dimensions of LCD bitmaps can be either wider or taller than the
-   *   dimensions of the corresponding outline with regard to the pixel grid.
+   *   As a result of ClearType filtering or Harmony shifts, the resulting
+   *   dimensions of LCD bitmaps can be slightly wider or taller than the
+   *   dimensions the original outline with regard to the pixel grid.
    *   For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to
    *   the left, and 2~subpixels to the right.  The bitmap offset values are
    *   adjusted accordingly, so clients shouldn't need to modify their layout
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftlist.h b/qtbase/src/3rdparty/freetype/include/freetype/ftlist.h
index 4588922706..4dca2bf163 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftlist.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftlist.h
@@ -4,7 +4,7 @@
  *
  *   Generic list support for FreeType (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftlogging.h b/qtbase/src/3rdparty/freetype/include/freetype/ftlogging.h
new file mode 100644
index 0000000000..7213dc30a8
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftlogging.h
@@ -0,0 +1,184 @@
+/****************************************************************************
+ *
+ * ftlogging.h
+ *
+ *   Additional debugging APIs.
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef FTLOGGING_H_
+#define FTLOGGING_H_
+
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   debugging_apis
+   *
+   * @title:
+   *   External Debugging APIs
+   *
+   * @abstract:
+   *   Public APIs to control the `FT_DEBUG_LOGGING` macro.
+   *
+   * @description:
+   *   This section contains the declarations of public functions that
+   *   enables fine control of what the `FT_DEBUG_LOGGING` macro outputs.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Trace_Set_Level
+   *
+   * @description:
+   *   Change the levels of tracing components of FreeType at run time.
+   *
+   * @input:
+   *   tracing_level ::
+   *     New tracing value.
+   *
+   * @example:
+   *   The following call makes FreeType trace everything but the 'memory'
+   *   component.
+   *
+   *   ```
+   *   FT_Trace_Set_Level( "any:7 memory:0 );
+   *   ```
+   *
+   * @note:
+   *   This function does nothing if compilation option `FT_DEBUG_LOGGING`
+   *   isn't set.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+  FT_EXPORT( void )
+  FT_Trace_Set_Level( const char*  tracing_level );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Trace_Set_Default_Level
+   *
+   * @description:
+   *   Reset tracing value of FreeType's components to the default value
+   *   (i.e., to the value of the `FT2_DEBUG` environment value or to NULL
+   *   if `FT2_DEBUG` is not set).
+   *
+   * @note:
+   *   This function does nothing if compilation option `FT_DEBUG_LOGGING`
+   *   isn't set.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+  FT_EXPORT( void )
+  FT_Trace_Set_Default_Level( void );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   FT_Custom_Log_Handler
+   *
+   * @description:
+   *   A function typedef that is used to handle the logging of tracing and
+   *   debug messages on a file system.
+   *
+   * @input:
+   *   ft_component ::
+   *     The name of `FT_COMPONENT` from which the current debug or error
+   *     message is produced.
+   *
+   *   fmt ::
+   *     Actual debug or tracing message.
+   *
+   *   args::
+   *     Arguments of debug or tracing messages.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+  typedef void
+  (*FT_Custom_Log_Handler)( const char*  ft_component,
+                            const char*  fmt,
+                            va_list      args );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Set_Log_Handler
+   *
+   * @description:
+   *   A function to set a custom log handler.
+   *
+   * @input:
+   *   handler ::
+   *     New logging function.
+   *
+   * @note:
+   *   This function does nothing if compilation option `FT_DEBUG_LOGGING`
+   *   isn't set.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+  FT_EXPORT( void )
+  FT_Set_Log_Handler( FT_Custom_Log_Handler  handler );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Set_Default_Log_Handler
+   *
+   * @description:
+   *   A function to undo the effect of @FT_Set_Log_Handler, resetting the
+   *   log handler to FreeType's built-in version.
+   *
+   * @note:
+   *   This function does nothing if compilation option `FT_DEBUG_LOGGING`
+   *   isn't set.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+  FT_EXPORT( void )
+  FT_Set_Default_Log_Handler( void );
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* FTLOGGING_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftlzw.h b/qtbase/src/3rdparty/freetype/include/freetype/ftlzw.h
index ae46ad6021..3d7cfd52f7 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftlzw.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftlzw.h
@@ -4,7 +4,7 @@
  *
  *   LZW-compressed stream support.
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftmac.h b/qtbase/src/3rdparty/freetype/include/freetype/ftmac.h
index c9de981845..3dd61d0fe1 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftmac.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftmac.h
@@ -4,7 +4,7 @@
  *
  *   Additional Mac-specific API.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftmm.h b/qtbase/src/3rdparty/freetype/include/freetype/ftmm.h
index d8781a8296..c74ce618cb 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftmm.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftmm.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Multiple Master font interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -47,6 +47,9 @@ FT_BEGIN_HEADER
    *   MM fonts, others will work with all three types.  They are similar
    *   enough that a consistent interface makes sense.
    *
+   *   For Adobe MM fonts, macro @FT_IS_SFNT returns false.  For GX and
+   *   OpenType variation fonts, it returns true.
+   *
    */
 
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftmodapi.h b/qtbase/src/3rdparty/freetype/include/freetype/ftmodapi.h
index 3f7ae82bab..b78db724c7 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftmodapi.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftmodapi.h
@@ -4,7 +4,7 @@
  *
  *   FreeType modules public interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -45,10 +45,12 @@ FT_BEGIN_HEADER
    *
    * @description:
    *   The definitions below are used to manage modules within FreeType.
-   *   Modules can be added, upgraded, and removed at runtime.  Additionally,
-   *   some module properties can be controlled also.
+   *   Internal and external modules can be added, upgraded, and removed at
+   *   runtime.  For example, an alternative renderer or proprietary font
+   *   driver can be registered and prioritized.  Additionally, some module
+   *   properties can also be controlled.
    *
-   *   Here is a list of possible values of the `module_name` field in the
+   *   Here is a list of existing values of the `module_name` field in the
    *   @FT_Module_Class structure.
    *
    *   ```
@@ -86,6 +88,7 @@ FT_BEGIN_HEADER
    *   FT_Remove_Module
    *   FT_Add_Default_Modules
    *
+   *   FT_FACE_DRIVER_NAME
    *   FT_Property_Set
    *   FT_Property_Get
    *   FT_Set_Default_Properties
@@ -328,6 +331,27 @@ FT_BEGIN_HEADER
                     FT_Module   module );
 
 
+  /**************************************************************************
+   *
+   * @macro:
+   *   FT_FACE_DRIVER_NAME
+   *
+   * @description:
+   *   A macro that retrieves the name of a font driver from a face object.
+   *
+   * @note:
+   *   The font driver name is a valid `module_name` for @FT_Property_Set
+   *   and @FT_Property_Get.  This is not the same as @FT_Get_Font_Format.
+   *
+   * @since:
+   *   2.11
+   *
+   */
+#define FT_FACE_DRIVER_NAME( face )                                     \
+          ( ( *FT_REINTERPRET_CAST( FT_Module_Class**,                  \
+                                    ( face )->driver ) )->module_name )
+
+
   /**************************************************************************
    *
    * @function:
@@ -485,8 +509,7 @@ FT_BEGIN_HEADER
    *
    *   ```
    *     FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
-   *                         cff:no-stem-darkening=0 \
-   *                         autofitter:warping=1
+   *                         cff:no-stem-darkening=0
    *   ```
    *
    * @inout:
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftmoderr.h b/qtbase/src/3rdparty/freetype/include/freetype/ftmoderr.h
index f05fc53aa3..88d2917771 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftmoderr.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftmoderr.h
@@ -4,7 +4,7 @@
  *
  *   FreeType module error offsets (specification).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -171,6 +171,7 @@
   FT_MODERRDEF( Type42,   0x1400, "Type 42 module" )
   FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
   FT_MODERRDEF( GXvalid,  0x1600, "GX validation module" )
+  FT_MODERRDEF( Sdf,      0x1700, "Signed distance field raster module" )
 
 
 #ifdef FT_MODERR_END_LIST
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftotval.h b/qtbase/src/3rdparty/freetype/include/freetype/ftotval.h
index 9c00ad30b9..172fcf2402 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftotval.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftotval.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating OpenType tables (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftoutln.h b/qtbase/src/3rdparty/freetype/include/freetype/ftoutln.h
index 84e9b144c1..46ebf9371b 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftoutln.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftoutln.h
@@ -5,7 +5,7 @@
  *   Support for the FT_Outline type used to store glyph shapes of
  *   most scalable font formats (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -109,11 +109,13 @@ FT_BEGIN_HEADER
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   A contour that contains a single point only is represented by a 'move
-   *   to' operation followed by 'line to' to the same point.  In most cases,
-   *   it is best to filter this out before using the outline for stroking
-   *   purposes (otherwise it would result in a visible dot when round caps
-   *   are used).
+   *   Degenerate contours, segments, and Bezier arcs may be reported.  In
+   *   most cases, it is best to filter these out before using the outline
+   *   for stroking or other path modification purposes (which may cause
+   *   degenerate segments to become non-degenrate and visible, like when
+   *   stroke caps are used or the path is otherwise outset).  Some glyph
+   *   outlines may contain deliberate degenerate single points for mark
+   *   attachement.
    *
    *   Similarly, the function returns success for an empty outline also
    *   (doing nothing, this is, not calling any emitter); if necessary, you
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftparams.h b/qtbase/src/3rdparty/freetype/include/freetype/ftparams.h
index 55ea2a3870..72080f396a 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftparams.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftparams.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for possible FT_Parameter tags (specification only).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -112,6 +112,21 @@ FT_BEGIN_HEADER
           FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
 
 
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_PARAM_TAG_IGNORE_SBIX
+   *
+   * @description:
+   *   A tag for @FT_Parameter to make @FT_Open_Face ignore an 'sbix' table
+   *   while loading a font.  Use this if @FT_FACE_FLAG_SBIX is set and you
+   *   want to access the outline glyphs in the font.
+   *
+   */
+#define FT_PARAM_TAG_IGNORE_SBIX \
+          FT_MAKE_TAG( 'i', 's', 'b', 'x' )
+
+
   /**************************************************************************
    *
    * @enum:
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftpfr.h b/qtbase/src/3rdparty/freetype/include/freetype/ftpfr.h
index 9a5383f918..428e327061 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftpfr.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftpfr.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing PFR-specific data (specification only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftrender.h b/qtbase/src/3rdparty/freetype/include/freetype/ftrender.h
index 8007951b37..0fab3f8c2a 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftrender.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftrender.h
@@ -4,7 +4,7 @@
  *
  *   FreeType renderer modules public interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftsizes.h b/qtbase/src/3rdparty/freetype/include/freetype/ftsizes.h
index a8682a30fb..e30938d862 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftsizes.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftsizes.h
@@ -4,7 +4,7 @@
  *
  *   FreeType size objects management (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftsnames.h b/qtbase/src/3rdparty/freetype/include/freetype/ftsnames.h
index 729e6ab069..384096a585 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftsnames.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftsnames.h
@@ -7,7 +7,7 @@
  *
  *   This is _not_ used to retrieve glyph names!
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftstroke.h b/qtbase/src/3rdparty/freetype/include/freetype/ftstroke.h
index a759c94dde..12c006d3fb 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftstroke.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftstroke.h
@@ -4,7 +4,7 @@
  *
  *   FreeType path stroker (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftsynth.h b/qtbase/src/3rdparty/freetype/include/freetype/ftsynth.h
index bdb4c5753e..afc40b1d84 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftsynth.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftsynth.h
@@ -5,7 +5,7 @@
  *   FreeType synthesizing code for emboldening and slanting
  *   (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftsystem.h b/qtbase/src/3rdparty/freetype/include/freetype/ftsystem.h
index 22aead7140..5f8aec7b7c 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftsystem.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftsystem.h
@@ -4,7 +4,7 @@
  *
  *   FreeType low-level system interface definition (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/fttrigon.h b/qtbase/src/3rdparty/freetype/include/freetype/fttrigon.h
index 2ce6b324c9..4e8d871dec 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/fttrigon.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/fttrigon.h
@@ -4,7 +4,7 @@
  *
  *   FreeType trigonometric functions (specification).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/fttypes.h b/qtbase/src/3rdparty/freetype/include/freetype/fttypes.h
index aaeb9e8785..29f32fbb26 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/fttypes.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/fttypes.h
@@ -4,7 +4,7 @@
  *
  *   FreeType simple types definitions (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -413,7 +413,7 @@ FT_BEGIN_HEADER
   typedef struct  FT_Data_
   {
     const FT_Byte*  pointer;
-    FT_Int          length;
+    FT_UInt         length;
 
   } FT_Data;
 
@@ -479,18 +479,17 @@ FT_BEGIN_HEADER
    *
    * @description:
    *   This macro converts four-letter tags that are used to label TrueType
-   *   tables into an unsigned long, to be used within FreeType.
+   *   tables into an `FT_Tag` type, to be used within FreeType.
    *
    * @note:
    *   The produced values **must** be 32-bit integers.  Don't redefine this
    *   macro.
    */
-#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
-          (FT_Tag)                        \
-          ( ( (FT_ULong)_x1 << 24 ) |     \
-            ( (FT_ULong)_x2 << 16 ) |     \
-            ( (FT_ULong)_x3 <<  8 ) |     \
-              (FT_ULong)_x4         )
+#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 )                  \
+          ( ( FT_STATIC_BYTE_CAST( FT_Tag, _x1 ) << 24 ) | \
+            ( FT_STATIC_BYTE_CAST( FT_Tag, _x2 ) << 16 ) | \
+            ( FT_STATIC_BYTE_CAST( FT_Tag, _x3 ) <<  8 ) | \
+              FT_STATIC_BYTE_CAST( FT_Tag, _x4 )         )
 
 
   /*************************************************************************/
@@ -588,7 +587,7 @@ FT_BEGIN_HEADER
 
 
 #define FT_IS_EMPTY( list )  ( (list).head == 0 )
-#define FT_BOOL( x )  ( (FT_Bool)( (x) != 0 ) )
+#define FT_BOOL( x )         FT_STATIC_CAST( FT_Bool, (x) != 0 )
 
   /* concatenate C tokens */
 #define FT_ERR_XCAT( x, y )  x ## y
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ftwinfnt.h b/qtbase/src/3rdparty/freetype/include/freetype/ftwinfnt.h
index 786528c6ec..294f85ae0d 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ftwinfnt.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ftwinfnt.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing Windows fnt-specific data.
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -55,7 +55,7 @@ FT_BEGIN_HEADER
    *   FT_WinFNT_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec. 
+   *   A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec.
    *   Exact mapping tables for the various 'cpXXXX' encodings (except for
    *   'cp1361') can be found at 'ftp://ftp.unicode.org/Public/' in the
    *   `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory.  'cp1361' is roughly a
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/autohint.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/autohint.h
index 2a472e20b9..aedf48984d 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/autohint.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/autohint.h
@@ -4,7 +4,7 @@
  *
  *   High-level 'autohint' module-specific interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/cffotypes.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
index a316fd1f30..700f586c41 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/cffotypes.h
@@ -4,7 +4,7 @@
  *
  *   Basic OpenType/CFF object type definitions (specification).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/cfftypes.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
index f21167b1e5..23d26c1b34 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/cfftypes.h
@@ -5,7 +5,7 @@
  *   Basic OpenType/CFF type definitions and interface (specification
  *   only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
index 97c18d3a21..66fa13c3c5 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/compiler-macros.h
@@ -4,7 +4,7 @@
  *
  *   Compiler-specific macro definitions used internally by FreeType.
  *
- * Copyright (C) 2020 by
+ * Copyright (C) 2020-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -71,12 +71,18 @@ FT_BEGIN_HEADER
    */
 #define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
 
-#ifdef _WIN64
+#ifdef __UINTPTR_TYPE__
+  /*
+   * GCC and Clang both provide a `__UINTPTR_TYPE__` that can be used to
+   * avoid a dependency on `stdint.h`.
+   */
+#  define FT_UINT_TO_POINTER( x )  (void *)(__UINTPTR_TYPE__)(x)
+#elif defined( _WIN64 )
   /* only 64bit Windows uses the LLP64 data model, i.e., */
   /* 32-bit integers, 64-bit pointers.                   */
-#define FT_UINT_TO_POINTER( x )  (void *)(unsigned __int64)(x)
+#  define FT_UINT_TO_POINTER( x )  (void *)(unsigned __int64)(x)
 #else
-#define FT_UINT_TO_POINTER( x )  (void *)(unsigned long)(x)
+#  define FT_UINT_TO_POINTER( x )  (void *)(unsigned long)(x)
 #endif
 
   /*
@@ -216,79 +222,93 @@ FT_BEGIN_HEADER
 #define FT_EXPORT_VAR( x )  FT_FUNCTION_DECLARATION( x )
 #endif
 
-  /* When compiling FreeType as a DLL or DSO with hidden visibility,   */
-  /* some systems/compilers need a special attribute in front OR after */
-  /* the return type of function declarations.                         */
-  /*                                                                   */
-  /* Two macros are used within the FreeType source code to define     */
-  /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`.      */
-  /*                                                                   */
-  /* - `FT_EXPORT( return_type )`                                      */
-  /*                                                                   */
-  /*   is used in a function declaration, as in                        */
-  /*                                                                   */
-  /*   ```                                                             */
-  /*     FT_EXPORT( FT_Error )                                         */
-  /*     FT_Init_FreeType( FT_Library*  alibrary );                    */
-  /*   ```                                                             */
-  /*                                                                   */
-  /* - `FT_EXPORT_DEF( return_type )`                                  */
-  /*                                                                   */
-  /*   is used in a function definition, as in                         */
-  /*                                                                   */
-  /*   ```                                                             */
-  /*     FT_EXPORT_DEF( FT_Error )                                     */
-  /*     FT_Init_FreeType( FT_Library*  alibrary )                     */
-  /*     {                                                             */
-  /*       ... some code ...                                           */
-  /*       return FT_Err_Ok;                                           */
-  /*     }                                                             */
-  /*   ```                                                             */
-  /*                                                                   */
-  /* You can provide your own implementation of `FT_EXPORT` and        */
-  /* `FT_EXPORT_DEF` here if you want.                                 */
-  /*                                                                   */
-  /* To export a variable, use `FT_EXPORT_VAR`.                        */
-  /*                                                                   */
+  /*
+   * When compiling FreeType as a DLL or DSO with hidden visibility,
+   * some systems/compilers need a special attribute in front OR after
+   * the return type of function declarations.
+   *
+   * Two macros are used within the FreeType source code to define
+   * exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`.
+   *
+   * - `FT_EXPORT( return_type )`
+   *
+   *   is used in a function declaration, as in
+   *
+   *   ```
+   *     FT_EXPORT( FT_Error )
+   *     FT_Init_FreeType( FT_Library*  alibrary );
+   *   ```
+   *
+   * - `FT_EXPORT_DEF( return_type )`
+   *
+   *   is used in a function definition, as in
+   *
+   *   ```
+   *     FT_EXPORT_DEF( FT_Error )
+   *     FT_Init_FreeType( FT_Library*  alibrary )
+   *     {
+   *       ... some code ...
+   *       return FT_Err_Ok;
+   *     }
+   *   ```
+   *
+   * You can provide your own implementation of `FT_EXPORT` and
+   * `FT_EXPORT_DEF` here if you want.
+   *
+   * To export a variable, use `FT_EXPORT_VAR`.
+   */
 
   /* See `freetype/config/compiler_macros.h` for the `FT_EXPORT` definition */
 #define FT_EXPORT_DEF( x )  FT_FUNCTION_DEFINITION( x )
 
-  /* The following macros are needed to compile the library with a   */
-  /* C++ compiler and with 16bit compilers.                          */
-  /*                                                                 */
-
-  /* This is special.  Within C++, you must specify `extern "C"` for */
-  /* functions which are used via function pointers, and you also    */
-  /* must do that for structures which contain function pointers to  */
-  /* assure C linkage -- it's not possible to have (local) anonymous */
-  /* functions which are accessed by (global) function pointers.     */
-  /*                                                                 */
-  /*                                                                 */
-  /* FT_CALLBACK_DEF is used to _define_ a callback function,        */
-  /* located in the same source code file as the structure that uses */
-  /* it.                                                             */
-  /*                                                                 */
-  /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare   */
-  /* and define a callback function, respectively, in a similar way  */
-  /* as FT_BASE and FT_BASE_DEF work.                                */
-  /*                                                                 */
-  /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
-  /* contains pointers to callback functions.                        */
-  /*                                                                 */
-  /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable   */
-  /* that contains pointers to callback functions.                   */
-  /*                                                                 */
-  /*                                                                 */
-  /* Some 16bit compilers have to redefine these macros to insert    */
-  /* the infamous `_cdecl` or `__fastcall` declarations.             */
-  /*                                                                 */
+  /*
+   * The following macros are needed to compile the library with a
+   * C++ compiler and with 16bit compilers.
+   */
+
+  /*
+   * This is special.  Within C++, you must specify `extern "C"` for
+   * functions which are used via function pointers, and you also
+   * must do that for structures which contain function pointers to
+   * assure C linkage -- it's not possible to have (local) anonymous
+   * functions which are accessed by (global) function pointers.
+   *
+   *
+   * FT_CALLBACK_DEF is used to _define_ a callback function,
+   * located in the same source code file as the structure that uses
+   * it.  FT_COMPARE_DEF, in addition, ensures the `cdecl` calling
+   * convention on x86, required by the C library function `qsort`.
+   *
+   * FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare
+   * and define a callback function, respectively, in a similar way
+   * as FT_BASE and FT_BASE_DEF work.
+   *
+   * FT_CALLBACK_TABLE is used to _declare_ a constant variable that
+   * contains pointers to callback functions.
+   *
+   * FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable
+   * that contains pointers to callback functions.
+   *
+   *
+   * Some 16bit compilers have to redefine these macros to insert
+   * the infamous `_cdecl` or `__fastcall` declarations.
+   */
 #ifdef __cplusplus
 #define FT_CALLBACK_DEF( x )  extern "C"  x
 #else
 #define FT_CALLBACK_DEF( x )  static  x
 #endif
 
+#if defined( __GNUC__ ) && defined( __i386__ )
+#define FT_COMPARE_DEF( x )  FT_CALLBACK_DEF( x ) __attribute__(( cdecl ))
+#elif defined( _MSC_VER ) && defined( _M_IX86 )
+#define FT_COMPARE_DEF( x )  FT_CALLBACK_DEF( x ) __cdecl
+#elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1240
+#define FT_COMPARE_DEF( x )  FT_CALLBACK_DEF( x ) __watcall
+#else
+#define FT_COMPARE_DEF( x )  FT_CALLBACK_DEF( x )
+#endif
+
 #define FT_BASE_CALLBACK( x )      FT_FUNCTION_DECLARATION( x )
 #define FT_BASE_CALLBACK_DEF( x )  FT_FUNCTION_DEFINITION( x )
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftcalc.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
index c65307472f..e6a87db94e 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
@@ -4,7 +4,7 @@
  *
  *   Arithmetic computations (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -359,8 +359,8 @@ FT_BEGIN_HEADER
 
 #ifndef  FT_CONFIG_OPTION_NO_ASSEMBLER
 
-#if defined( __GNUC__ )                                          && \
-    ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) )
+#if defined( __clang__ ) || ( defined( __GNUC__ )                &&  \
+    ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) ) )
 
 #if FT_SIZEOF_INT == 4
 
@@ -370,12 +370,25 @@ FT_BEGIN_HEADER
 
 #define FT_MSB( x )  ( 31 - __builtin_clzl( x ) )
 
-#endif /* __GNUC__ */
+#endif
 
+#elif defined( _MSC_VER ) && _MSC_VER >= 1400
 
-#elif defined( _MSC_VER ) && ( _MSC_VER >= 1400 )
+#if defined( _WIN32_WCE )
 
-#if FT_SIZEOF_INT == 4
+#include <cmnintrin.h>
+#pragma intrinsic( _CountLeadingZeros )
+
+#define FT_MSB( x )  ( 31 - _CountLeadingZeros( x ) )
+
+#elif defined( _M_ARM64 ) || defined( _M_ARM )
+
+#include <intrin.h>
+#pragma intrinsic( _CountLeadingZeros )
+
+#define FT_MSB( x )  ( 31 - _CountLeadingZeros( x ) )
+
+#elif defined( _M_IX86 ) || defined( _M_AMD64 ) || defined( _M_IA64 )
 
 #include <intrin.h>
 #pragma intrinsic( _BitScanReverse )
@@ -391,15 +404,40 @@ FT_BEGIN_HEADER
     return (FT_Int32)where;
   }
 
-#define FT_MSB( x )  ( FT_MSB_i386( x ) )
+#define FT_MSB( x )  FT_MSB_i386( x )
 
 #endif
 
-#endif /* _MSC_VER */
+#elif defined( __WATCOMC__ ) && defined( __386__ )
 
+  extern __inline FT_Int32
+  FT_MSB_i386( FT_UInt32  x );
+
+#pragma aux FT_MSB_i386 =     \
+  "bsr eax, eax"              \
+  parm [eax] nomemory         \
+  value [eax]                 \
+  modify exact [eax] nomemory;
+
+#define FT_MSB( x )  FT_MSB_i386( x )
+
+#elif defined( __DECC ) || defined( __DECCXX )
+
+#include <builtins.h>
+
+#define FT_MSB( x )  (FT_Int)( 63 - _leadz( x ) )
+
+#elif defined( _CRAYC )
+
+#include <intrinsics.h>
+
+#define FT_MSB( x )  (FT_Int)( 31 - _leadz32( x ) )
+
+#endif /* FT_MSB macro definitions */
 
 #endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
 
+
 #ifndef FT_MSB
 
   FT_BASE( FT_Int )
@@ -487,7 +525,7 @@ FT_BEGIN_HEADER
 #define NEG_INT32( a )                                  \
           (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
 
-#ifdef FT_LONG64
+#ifdef FT_INT64
 
 #define ADD_INT64( a, b )                               \
           (FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) )
@@ -498,7 +536,7 @@ FT_BEGIN_HEADER
 #define NEG_INT64( a )                                  \
           (FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) )
 
-#endif /* FT_LONG64 */
+#endif /* FT_INT64 */
 
 
 FT_END_HEADER
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdebug.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
index df5357ad55..f05b1395cb 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
@@ -4,7 +4,7 @@
  *
  *   Debugging and logging component (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -31,9 +31,24 @@
 
 #include "compiler-macros.h"
 
+#ifdef FT_DEBUG_LOGGING
+#define DLG_STATIC
+#include <dlg/output.h>
+#include <dlg/dlg.h>
+
+#include <freetype/ftlogging.h>
+#endif /* FT_DEBUG_LOGGING */
+
 
 FT_BEGIN_HEADER
 
+  /* force the definition of FT_DEBUG_LEVEL_TRACE if FT_DEBUG_LOGGING is */
+  /* already defined.                                                    */
+  /*                                                                     */
+#ifdef FT_DEBUG_LOGGING
+#undef  FT_DEBUG_LEVEL_TRACE
+#define FT_DEBUG_LEVEL_TRACE
+#endif
 
   /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
   /* is already defined; this simplifies the following #ifdefs            */
@@ -82,21 +97,67 @@ FT_BEGIN_HEADER
    * Each component must define the macro FT_COMPONENT to a valid FT_Trace
    * value before using any TRACE macro.
    *
+   * To get consistent logging output, there should be no newline character
+   * (i.e., '\n') or a single trailing one in the message string of
+   * `FT_TRACEx` and `FT_ERROR`.
    */
 
-#ifdef FT_DEBUG_LEVEL_TRACE
 
-  /* we need two macros here to make cpp expand `FT_COMPONENT' */
-#define FT_TRACE_COMP( x )   FT_TRACE_COMP_( x )
-#define FT_TRACE_COMP_( x )  trace_ ## x
+  /*************************************************************************
+   *
+   * If FT_DEBUG_LOGGING is enabled, tracing messages are sent to dlg's API.
+   * If FT_DEBUG_LOGGING is disabled, tracing messages are sent to
+   * `FT_Message` (defined in ftdebug.c).
+   */
+#ifdef FT_DEBUG_LOGGING
+
+  /* we need two macros to convert the names of `FT_COMPONENT` to a string */
+#define FT_LOGGING_TAG( x )   FT_LOGGING_TAG_( x )
+#define FT_LOGGING_TAG_( x )  #x
 
-#define FT_TRACE( level, varformat )                                       \
+  /* we need two macros to convert the component and the trace level */
+  /* to a string that combines them                                  */
+#define FT_LOGGING_TAGX( x, y )   FT_LOGGING_TAGX_( x, y )
+#define FT_LOGGING_TAGX_( x, y )  #x ":" #y
+
+
+#define FT_LOG( level, varformat )                                         \
+          do                                                               \
+          {                                                                \
+            const char*  dlg_tag = FT_LOGGING_TAGX( FT_COMPONENT, level ); \
+                                                                           \
+                                                                           \
+            ft_add_tag( dlg_tag );                                         \
+            if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
+            {                                                              \
+              if ( custom_output_handler != NULL )                         \
+                FT_Logging_Callback varformat;                             \
+              else                                                         \
+                dlg_trace varformat;                                       \
+            }                                                              \
+            ft_remove_tag( dlg_tag );                                      \
+          } while( 0 )
+
+#else /* !FT_DEBUG_LOGGING */
+
+#define FT_LOG( level, varformat )                                         \
           do                                                               \
           {                                                                \
             if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
               FT_Message varformat;                                        \
           } while ( 0 )
 
+#endif /* !FT_DEBUG_LOGGING */
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+  /* we need two macros here to make cpp expand `FT_COMPONENT' */
+#define FT_TRACE_COMP( x )   FT_TRACE_COMP_( x )
+#define FT_TRACE_COMP_( x )  trace_ ## x
+
+#define FT_TRACE( level, varformat )  FT_LOG( level, varformat )
+
 #else /* !FT_DEBUG_LEVEL_TRACE */
 
 #define FT_TRACE( level, varformat )  do { } while ( 0 )      /* nothing */
@@ -204,7 +265,32 @@ FT_BEGIN_HEADER
 
 #ifdef FT_DEBUG_LEVEL_ERROR
 
-#define FT_ERROR( varformat )  FT_Message  varformat
+  /**************************************************************************
+   *
+   * If FT_DEBUG_LOGGING is enabled, error messages are sent to dlg's API.
+   * If FT_DEBUG_LOGGING is disabled, error messages are sent to `FT_Message`
+   * (defined in ftdebug.c).
+   *
+   */
+#ifdef FT_DEBUG_LOGGING
+
+#define FT_ERROR( varformat )                                      \
+          do                                                       \
+          {                                                        \
+            const char*  dlg_tag = FT_LOGGING_TAG( FT_COMPONENT ); \
+                                                                   \
+                                                                   \
+            ft_add_tag( dlg_tag );                                 \
+            dlg_trace varformat;                                   \
+            ft_remove_tag( dlg_tag );                              \
+          } while ( 0 )
+
+#else /* !FT_DEBUG_LOGGING */
+
+#define FT_ERROR( varformat )  FT_Message varformat
+
+#endif /* !FT_DEBUG_LOGGING */
+
 
 #else  /* !FT_DEBUG_LEVEL_ERROR */
 
@@ -277,6 +363,77 @@ FT_BEGIN_HEADER
   FT_BASE( void )
   ft_debug_init( void );
 
+
+#ifdef FT_DEBUG_LOGGING
+
+  /**************************************************************************
+   *
+   * 'dlg' uses output handlers to control how and where log messages are
+   * printed.  Therefore we need to define a default output handler for
+   * FreeType.
+   */
+  FT_BASE( void )
+  ft_log_handler( const struct dlg_origin*  origin,
+                  const char*               string,
+                  void*                     data );
+
+
+  /**************************************************************************
+   *
+   * 1. `ft_default_log_handler` stores the function pointer that is used
+   *    internally by FreeType to print logs to a file.
+   *
+   * 2. `custom_output_handler` stores the function pointer to the callback
+   *    function provided by the user.
+   *
+   * It is defined in `ftdebug.c`.
+   */
+  extern dlg_handler            ft_default_log_handler;
+  extern FT_Custom_Log_Handler  custom_output_handler;
+
+
+  /**************************************************************************
+   *
+   * If FT_DEBUG_LOGGING macro is enabled, FreeType needs to initialize and
+   * un-initialize `FILE*`.
+   *
+   * These functions are defined in `ftdebug.c`.
+   */
+  FT_BASE( void )
+  ft_logging_init( void );
+
+  FT_BASE( void )
+  ft_logging_deinit( void );
+
+
+  /**************************************************************************
+   *
+   * For printing the name of `FT_COMPONENT` along with the actual log we
+   * need to add a tag with the name of `FT_COMPONENT`.
+   *
+   * These functions are defined in `ftdebug.c`.
+   */
+  FT_BASE( void )
+  ft_add_tag( const char*  tag );
+
+  FT_BASE( void )
+  ft_remove_tag( const char*  tag );
+
+
+  /**************************************************************************
+   *
+   * A function to print log data using a custom callback logging function
+   * (which is set using `FT_Set_Log_Handler`).
+   *
+   * This function is defined in `ftdebug.c`.
+   */
+  FT_BASE( void )
+  FT_Logging_Callback( const char*  fmt,
+                       ... );
+
+#endif /* FT_DEBUG_LOGGING */
+
+
 FT_END_HEADER
 
 #endif /* FTDEBUG_H_ */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdrv.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
index 7f22710eae..9459a9a190 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftdrv.h
@@ -4,7 +4,7 @@
  *
  *   FreeType internal font driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
index 27b8659f7c..f73b6631c8 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph loader (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg
  *
  * This file is part of the FreeType project, and may only be used,
@@ -22,6 +22,7 @@
 
 #include <freetype/freetype.h>
 
+#include "compiler-macros.h"
 
 FT_BEGIN_HEADER
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftmemory.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
index ddb18b0512..10d753aa5e 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType memory management macros (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg
  *
  * This file is part of the FreeType project, and may only be used,
@@ -344,14 +344,13 @@ extern "C++"
 #define FT_RENEW_ARRAY( ptr, curcnt, newcnt )                           \
           FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
 
-#define FT_QNEW( ptr )                           \
-          FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
+#define FT_QNEW( ptr )  FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
 
-#define FT_QNEW_ARRAY( ptr, count )                          \
-          FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
+#define FT_QNEW_ARRAY( ptr, count )                           \
+          FT_MEM_SET_ERROR( FT_MEM_QNEW_ARRAY( ptr, count ) )
 
-#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt )                          \
-          FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
+#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt )                           \
+          FT_MEM_SET_ERROR( FT_MEM_QRENEW_ARRAY( ptr, curcnt, newcnt ) )
 
 
   FT_BASE( FT_Pointer )
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftobjs.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
index 25db2c494f..1c779ceaeb 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType private base classes (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -418,7 +418,8 @@ FT_BEGIN_HEADER
    *     initializing the glyph slot.
    */
 
-#define FT_GLYPH_OWN_BITMAP  0x1U
+#define FT_GLYPH_OWN_BITMAP    0x1U
+#define FT_GLYPH_OWN_GZIP_SVG  0x2U
 
   typedef struct  FT_Slot_InternalRec_
   {
@@ -673,7 +674,7 @@ FT_BEGIN_HEADER
 
 
   /* Set the metrics according to a size request. */
-  FT_BASE( void )
+  FT_BASE( FT_Error )
   FT_Request_Metrics( FT_Face          face,
                       FT_Size_Request  req );
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
index 81ec29151c..47373211cb 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftpsprop.h
@@ -4,7 +4,7 @@
  *
  *   Get and set properties of PostScript drivers (specification).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftrfork.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
index 1b7b25acbe..165e67f245 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftrfork.h
@@ -4,7 +4,7 @@
  *
  *   Embedded resource forks accessor (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Masatake YAMATO and Redhat K.K.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftserv.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftserv.h
index 6e1a9472da..78996d9c85 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftserv.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftserv.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType services (specification only).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftstream.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftstream.h
index e7d922260f..aa51fe5a87 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftstream.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftstream.h
@@ -4,7 +4,7 @@
  *
  *   Stream handling (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -196,9 +196,9 @@ FT_BEGIN_HEADER
                                        FT_BYTE_U32( p, 2,  8 ) | \
                                        FT_BYTE_U32( p, 3,  0 ) )
 
-#define FT_PEEK_OFF3( p )  FT_INT32( FT_BYTE_U32( p, 0, 16 ) | \
-                                     FT_BYTE_U32( p, 1,  8 ) | \
-                                     FT_BYTE_U32( p, 2,  0 ) )
+#define FT_PEEK_OFF3( p )  ( FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \
+                                       FT_BYTE_U32( p, 1, 16 ) | \
+                                       FT_BYTE_U32( p, 2,  8 ) ) >> 8 )
 
 #define FT_PEEK_UOFF3( p )  FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
                                        FT_BYTE_U32( p, 1,  8 ) | \
@@ -220,9 +220,9 @@ FT_BEGIN_HEADER
                                           FT_BYTE_U32( p, 1,  8 ) | \
                                           FT_BYTE_U32( p, 0,  0 ) )
 
-#define FT_PEEK_OFF3_LE( p )  FT_INT32( FT_BYTE_U32( p, 2, 16 ) | \
-                                        FT_BYTE_U32( p, 1,  8 ) | \
-                                        FT_BYTE_U32( p, 0,  0 ) )
+#define FT_PEEK_OFF3_LE( p )  ( FT_INT32( FT_BYTE_U32( p, 2, 24 ) | \
+                                          FT_BYTE_U32( p, 1, 16 ) | \
+                                          FT_BYTE_U32( p, 0,  8 ) ) >> 8 )
 
 #define FT_PEEK_UOFF3_LE( p )  FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
                                           FT_BYTE_U32( p, 1,  8 ) | \
@@ -305,11 +305,10 @@ FT_BEGIN_HEADER
 #else
 #define FT_GET_MACRO( func, type )        ( (type)func( stream ) )
 
-#define FT_GET_CHAR()       FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
-#define FT_GET_BYTE()       FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
+#define FT_GET_CHAR()       FT_GET_MACRO( FT_Stream_GetByte, FT_Char )
+#define FT_GET_BYTE()       FT_GET_MACRO( FT_Stream_GetByte, FT_Byte )
 #define FT_GET_SHORT()      FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
 #define FT_GET_USHORT()     FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
-#define FT_GET_OFF3()       FT_GET_MACRO( FT_Stream_GetUOffset, FT_Long )
 #define FT_GET_UOFF3()      FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong )
 #define FT_GET_LONG()       FT_GET_MACRO( FT_Stream_GetULong, FT_Long )
 #define FT_GET_ULONG()      FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
@@ -333,11 +332,10 @@ FT_BEGIN_HEADER
    * `FT_STREAM_POS'.  They use the full machinery to check whether a read is
    * valid.
    */
-#define FT_READ_BYTE( var )       FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
-#define FT_READ_CHAR( var )       FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
+#define FT_READ_BYTE( var )       FT_READ_MACRO( FT_Stream_ReadByte, FT_Byte, var )
+#define FT_READ_CHAR( var )       FT_READ_MACRO( FT_Stream_ReadByte, FT_Char, var )
 #define FT_READ_SHORT( var )      FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
 #define FT_READ_USHORT( var )     FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
-#define FT_READ_OFF3( var )       FT_READ_MACRO( FT_Stream_ReadUOffset, FT_Long, var )
 #define FT_READ_UOFF3( var )      FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var )
 #define FT_READ_LONG( var )       FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var )
 #define FT_READ_ULONG( var )      FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var )
@@ -457,8 +455,8 @@ FT_BEGIN_HEADER
 
 
   /* read a byte from an entered frame */
-  FT_BASE( FT_Char )
-  FT_Stream_GetChar( FT_Stream  stream );
+  FT_BASE( FT_Byte )
+  FT_Stream_GetByte( FT_Stream  stream );
 
   /* read a 16-bit big-endian unsigned integer from an entered frame */
   FT_BASE( FT_UShort )
@@ -482,8 +480,8 @@ FT_BEGIN_HEADER
 
 
   /* read a byte from a stream */
-  FT_BASE( FT_Char )
-  FT_Stream_ReadChar( FT_Stream  stream,
+  FT_BASE( FT_Byte )
+  FT_Stream_ReadByte( FT_Stream  stream,
                       FT_Error*  error );
 
   /* read a 16-bit big-endian unsigned integer from a stream */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/fttrace.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/fttrace.h
index 58bd77413c..43c6a8713b 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/fttrace.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/fttrace.h
@@ -4,7 +4,7 @@
  *
  *   Tracing handling (specification only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,6 +18,11 @@
 
   /* definitions of trace levels for FreeType 2 */
 
+  /* the maximum string length (if the argument to `FT_TRACE_DEF` */
+  /* gets used as a string) plus one charachter for ':' plus      */
+  /* another one for the trace level                              */
+#define FT_MAX_TRACE_LEVEL_LENGTH  (9 + 1 + 1)
+
   /* the first level must always be `trace_any' */
 FT_TRACE_DEF( any )
 
@@ -38,12 +43,17 @@ FT_TRACE_DEF( checksum )  /* bitmap checksum         (ftobjs.c)   */
 FT_TRACE_DEF( mm )        /* MM interface            (ftmm.c)     */
 FT_TRACE_DEF( psprops )   /* PS driver properties    (ftpsprop.c) */
 FT_TRACE_DEF( raccess )   /* resource fork accessor  (ftrfork.c)  */
+FT_TRACE_DEF( synth )     /* bold/slant synthesizer  (ftsynth.c)  */
+
+  /* rasterizers */
 FT_TRACE_DEF( raster )    /* monochrome rasterizer   (ftraster.c) */
 FT_TRACE_DEF( smooth )    /* anti-aliasing raster    (ftgrays.c)  */
-FT_TRACE_DEF( synth )     /* bold/slant synthesizer  (ftsynth.c)  */
 
-  /* Cache sub-system */
-FT_TRACE_DEF( cache )     /* cache sub-system        (ftcache.c, etc.) */
+  /* ot-svg module */
+FT_TRACE_DEF( otsvg )     /* OT-SVG renderer         (ftsvg.c)    */
+
+  /* cache sub-system */
+FT_TRACE_DEF( cache )     /* cache sub-system   (ftcache.c, etc.) */
 
   /* SFNT driver components */
 FT_TRACE_DEF( sfdriver )  /* SFNT font driver        (sfdriver.c) */
@@ -54,6 +64,7 @@ FT_TRACE_DEF( ttbdf )     /* TrueType embedded BDF   (ttbdf.c)    */
 FT_TRACE_DEF( ttcmap )    /* charmap handler         (ttcmap.c)   */
 FT_TRACE_DEF( ttcolr )    /* glyph layer table       (ttcolr.c)   */
 FT_TRACE_DEF( ttcpal )    /* color palette table     (ttcpal.c)   */
+FT_TRACE_DEF( ttsvg )     /* OpenType SVG table      (ttsvg.c)    */
 FT_TRACE_DEF( ttkern )    /* kerning handler         (ttkern.c)   */
 FT_TRACE_DEF( ttload )    /* basic TrueType tables   (ttload.c)   */
 FT_TRACE_DEF( ttmtx )     /* metrics-related tables  (ttmtx.c)    */
@@ -77,6 +88,7 @@ FT_TRACE_DEF( t1objs )
 FT_TRACE_DEF( t1parse )
 
   /* PostScript helper module `psaux' */
+FT_TRACE_DEF( afmparse )
 FT_TRACE_DEF( cffdecode )
 FT_TRACE_DEF( psconv )
 FT_TRACE_DEF( psobjs )
@@ -151,8 +163,10 @@ FT_TRACE_DEF( afglobal )
 FT_TRACE_DEF( afhints )
 FT_TRACE_DEF( afmodule )
 FT_TRACE_DEF( aflatin )
-FT_TRACE_DEF( aflatin2 )
 FT_TRACE_DEF( afshaper )
-FT_TRACE_DEF( afwarp )
+
+  /* SDF components */
+FT_TRACE_DEF( sdf )       /* signed distance raster for outlines (ftsdf.c) */
+FT_TRACE_DEF( bsdf )      /* signed distance raster for bitmaps (ftbsdf.c) */
 
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftvalid.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
index a5bc6c9b52..171c2cb6f5 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/ftvalid.h
@@ -4,7 +4,7 @@
  *
  *   FreeType validation support (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/psaux.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/psaux.h
index 8e0a262fd5..48ec1df963 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/psaux.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/psaux.h
@@ -5,7 +5,7 @@
  *   Auxiliary functions and data structures related to PostScript fonts
  *   (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/pshints.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/pshints.h
index 663e9d3488..5de83e4565 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/pshints.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/pshints.h
@@ -6,7 +6,7 @@
  *   recorders (specification only).  These are used to support native
  *   T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers.
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
index 81f5a06b62..06e3b531c8 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svbdf.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType BDF services (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
index 1d2dbb6a8e..1dea6bcda9 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcfftl.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType CFF tables loader service (specification).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcid.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
index bd49f3270a..acf9178d0a 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svcid.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType CID font services (specification).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * Derek Clegg and Michael Toftdal.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
index 6114d638af..a7280319c5 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType font format service (specification only).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
index f9443e40d6..489021d897 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgldict.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph dictionary services (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
index 83c2f26cee..59ae411b55 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svgxval.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svkern.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
index 13cfb32722..c567acad46 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svkern.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType Kerning service (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
index 2b30edaabe..7accdc46ff 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmetric.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType services for metrics variations (specification).
  *
- * Copyright (C) 2016-2020 by
+ * Copyright (C) 2016-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmm.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
index 5a807636a6..c6394890ac 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svmm.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType Multiple Masters and GX var services (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svotval.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
index 763fb2efbe..3c72d1f855 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svotval.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType OpenType validation service (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
index bdeba0785c..bde0ed3545 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpfr.h
@@ -4,7 +4,7 @@
  *
  *   Internal PFR service functions (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
index 8ef62c5f92..05f6291e13 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType PostScript name services (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svprop.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
index 8f755436a1..29c568640b 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svprop.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType property service (specification).
  *
- * Copyright (C) 2012-2020 by
+ * Copyright (C) 2012-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
index b4dcd80759..7d586587a5 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType PostScript charmap service (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
index 1e7276ff43..6e45f3272d 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType PostScript info service (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
index 39c8b5e19d..03938a562b 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType SFNT table loading service (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
index c18bb2336f..a0b1bbd2f3 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType TrueType/sfnt cmap extra information service.
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * Masatake YAMATO, Redhat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
index 7a17e4a755..f8396eb08c 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svtteng.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType TrueType engine query service (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
index 90a81dd40e..982630c0aa 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType TrueType glyph service.
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
index 8c915f5257..950f4a8824 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType Windows FNT/FONT service (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/sfnt.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/sfnt.h
index b4c12dbb26..c67b47e860 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/sfnt.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/sfnt.h
@@ -4,7 +4,7 @@
  *
  *   High-level 'sfnt' driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -311,6 +311,33 @@ FT_BEGIN_HEADER
                               TT_SBit_MetricsRec  *ametrics );
 
 
+  /**************************************************************************
+   *
+   * @functype:
+   *   TT_Load_Svg_Doc_Func
+   *
+   * @description:
+   *   Scan the SVG document list to find the document containing the glyph
+   *   that has the ID 'glyph*XXX*', where *XXX* is the value of
+   *   `glyph_index` as a decimal integer.
+   *
+   * @inout:
+   *   glyph ::
+   *     The glyph slot from which pointers to the SVG document list is to be
+   *     grabbed.  The results are stored back in the slot.
+   *
+   * @input:
+   *   glyph_index ::
+   *     The index of the glyph that is to be looked up.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   */
+  typedef FT_Error
+  (*TT_Load_Svg_Doc_Func)( FT_GlyphSlot  glyph,
+                           FT_UInt       glyph_index );
+
+
   /**************************************************************************
    *
    * @functype:
@@ -524,6 +551,170 @@ FT_BEGIN_HEADER
                              FT_LayerIterator*  iterator );
 
 
+  /**************************************************************************
+   *
+   * @functype:
+   *   TT_Get_Color_Glyph_Paint_Func
+   *
+   * @description:
+   *   Find the root @FT_OpaquePaint object for a given glyph ID.
+   *
+   * @input:
+   *   face ::
+   *     The target face object.
+   *
+   *   base_glyph ::
+   *     The glyph index the colored glyph layers are associated with.
+   *
+   * @output:
+   *   paint ::
+   *     The root @FT_OpaquePaint object.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  If no color glyph is found, or the root
+   *   paint could not be retrieved, value~0 gets returned.  In case of an
+   *   error, value~0 is returned also.
+   */
+  typedef FT_Bool
+  ( *TT_Get_Color_Glyph_Paint_Func )( TT_Face                   face,
+                                      FT_UInt                   base_glyph,
+                                      FT_Color_Root_Transform   root_transform,
+                                      FT_OpaquePaint           *paint );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   TT_Get_Color_Glyph_ClipBox_Func
+   *
+   * @description:
+   *   Search for a 'COLR' v1 clip box for the specified `base_glyph` and
+   *   fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information
+   *   if one is found.
+   *
+   * @input:
+   *   face ::
+   *     A handle to the parent face object.
+   *
+   *   base_glyph ::
+   *     The glyph index for which to retrieve the clip box.
+   *
+   * @output:
+   *   clip_box ::
+   *     The clip box for the requested `base_glyph` if one is found.  The
+   *     clip box is computed taking scale and transformations configured on
+   *     the @FT_Face into account.  @FT_ClipBox contains @FT_Vector values
+   *     in 26.6 format.
+   *
+   * @note:
+   *     To retrieve the clip box in font units, reset scale to units-per-em
+   *     and remove transforms configured using @FT_Set_Transform.
+   *
+   * @return:
+   *   Value~1 if a ClipBox is found.  If no clip box is found or an
+   *   error occured, value~0 is returned.
+   */
+  typedef FT_Bool
+  ( *TT_Get_Color_Glyph_ClipBox_Func )( TT_Face      face,
+                                        FT_UInt      base_glyph,
+                                        FT_ClipBox*  clip_box );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   TT_Get_Paint_Layers_Func
+   *
+   * @description:
+   *   Access the layers of a `PaintColrLayers` table.
+   *
+   * @input:
+   *   face ::
+   *     The target face object.
+   *
+   * @inout:
+   *   iterator ::
+   *     The @FT_LayerIterator from an @FT_PaintColrLayers object, for which
+   *     the layers are to be retrieved.  The internal state of the iterator
+   *     is incremented after one call to this function for retrieving one
+   *     layer.
+   *
+   * @output:
+   *   paint ::
+   *     The root @FT_OpaquePaint object referencing the actual paint table.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  Value~0 gets returned when the paint
+   *   object can not be retrieved or any other error occurs.
+   */
+  typedef FT_Bool
+  ( *TT_Get_Paint_Layers_Func )( TT_Face            face,
+                                 FT_LayerIterator*  iterator,
+                                 FT_OpaquePaint    *paint );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   TT_Get_Colorline_Stops_Func
+   *
+   * @description:
+   *   Get the gradient and solid fill information for a given glyph.
+   *
+   * @input:
+   *   face ::
+   *     The target face object.
+   *
+   * @inout:
+   *   iterator ::
+   *     An @FT_ColorStopIterator object.  For the first call you should set
+   *     `iterator->p` to `NULL`.  For all following calls, simply use the
+   *     same object again.
+   *
+   * @output:
+   *   color_stop ::
+   *     Color index and alpha value for the retrieved color stop.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  If there are no more color stops,
+   *   value~0 gets returned.  In case of an error, value~0 is returned
+   *   also.
+   */
+  typedef FT_Bool
+  ( *TT_Get_Colorline_Stops_Func )( TT_Face                face,
+                                    FT_ColorStop          *color_stop,
+                                    FT_ColorStopIterator*  iterator );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   TT_Get_Paint_Func
+   *
+   * @description:
+   *   Get the paint details for a given @FT_OpaquePaint object.
+   *
+   * @input:
+   *   face ::
+   *     The target face object.
+   *
+   *   opaque_paint ::
+   *     The @FT_OpaquePaint object.
+   *
+   * @output:
+   *   paint ::
+   *     An @FT_COLR_Paint object holding the details on `opaque_paint`.
+   *
+   * @return:
+   *   Value~1 if everything is OK.  Value~0 if no details can be found for
+   *   this paint or any other error occured.
+   */
+  typedef FT_Bool
+  ( *TT_Get_Paint_Func )( TT_Face         face,
+                          FT_OpaquePaint  opaque_paint,
+                          FT_COLR_Paint  *paint );
+
+
   /**************************************************************************
    *
    * @functype:
@@ -709,73 +900,83 @@ FT_BEGIN_HEADER
    */
   typedef struct  SFNT_Interface_
   {
-    TT_Loader_GotoTableFunc      goto_table;
+    TT_Loader_GotoTableFunc  goto_table;
 
-    TT_Init_Face_Func            init_face;
-    TT_Load_Face_Func            load_face;
-    TT_Done_Face_Func            done_face;
-    FT_Module_Requester          get_interface;
+    TT_Init_Face_Func    init_face;
+    TT_Load_Face_Func    load_face;
+    TT_Done_Face_Func    done_face;
+    FT_Module_Requester  get_interface;
 
-    TT_Load_Any_Func             load_any;
+    TT_Load_Any_Func  load_any;
 
     /* these functions are called by `load_face' but they can also  */
     /* be called from external modules, if there is a need to do so */
-    TT_Load_Table_Func           load_head;
-    TT_Load_Metrics_Func         load_hhea;
-    TT_Load_Table_Func           load_cmap;
-    TT_Load_Table_Func           load_maxp;
-    TT_Load_Table_Func           load_os2;
-    TT_Load_Table_Func           load_post;
+    TT_Load_Table_Func    load_head;
+    TT_Load_Metrics_Func  load_hhea;
+    TT_Load_Table_Func    load_cmap;
+    TT_Load_Table_Func    load_maxp;
+    TT_Load_Table_Func    load_os2;
+    TT_Load_Table_Func    load_post;
 
-    TT_Load_Table_Func           load_name;
-    TT_Free_Table_Func           free_name;
+    TT_Load_Table_Func  load_name;
+    TT_Free_Table_Func  free_name;
 
     /* this field was called `load_kerning' up to version 2.1.10 */
-    TT_Load_Table_Func           load_kern;
+    TT_Load_Table_Func  load_kern;
 
-    TT_Load_Table_Func           load_gasp;
-    TT_Load_Table_Func           load_pclt;
+    TT_Load_Table_Func  load_gasp;
+    TT_Load_Table_Func  load_pclt;
 
     /* see `ttload.h'; this field was called `load_bitmap_header' up to */
     /* version 2.1.10                                                   */
-    TT_Load_Table_Func           load_bhed;
+    TT_Load_Table_Func  load_bhed;
 
-    TT_Load_SBit_Image_Func      load_sbit_image;
+    TT_Load_SBit_Image_Func  load_sbit_image;
 
     /* see `ttpost.h' */
-    TT_Get_PS_Name_Func          get_psname;
-    TT_Free_Table_Func           free_psnames;
+    TT_Get_PS_Name_Func  get_psname;
+    TT_Free_Table_Func   free_psnames;
 
     /* starting here, the structure differs from version 2.1.7 */
 
     /* this field was introduced in version 2.1.8, named `get_psname' */
-    TT_Face_GetKerningFunc       get_kerning;
+    TT_Face_GetKerningFunc  get_kerning;
 
     /* new elements introduced after version 2.1.10 */
 
     /* load the font directory, i.e., the offset table and */
     /* the table directory                                 */
-    TT_Load_Table_Func           load_font_dir;
-    TT_Load_Metrics_Func         load_hmtx;
+    TT_Load_Table_Func    load_font_dir;
+    TT_Load_Metrics_Func  load_hmtx;
 
-    TT_Load_Table_Func           load_eblc;
-    TT_Free_Table_Func           free_eblc;
+    TT_Load_Table_Func  load_eblc;
+    TT_Free_Table_Func  free_eblc;
 
     TT_Set_SBit_Strike_Func      set_sbit_strike;
     TT_Load_Strike_Metrics_Func  load_strike_metrics;
 
-    TT_Load_Table_Func           load_cpal;
-    TT_Load_Table_Func           load_colr;
-    TT_Free_Table_Func           free_cpal;
-    TT_Free_Table_Func           free_colr;
-    TT_Set_Palette_Func          set_palette;
-    TT_Get_Colr_Layer_Func       get_colr_layer;
-    TT_Blend_Colr_Func           colr_blend;
-
-    TT_Get_Metrics_Func          get_metrics;
-
-    TT_Get_Name_Func             get_name;
-    TT_Get_Name_ID_Func          get_name_id;
+    TT_Load_Table_Func               load_cpal;
+    TT_Load_Table_Func               load_colr;
+    TT_Free_Table_Func               free_cpal;
+    TT_Free_Table_Func               free_colr;
+    TT_Set_Palette_Func              set_palette;
+    TT_Get_Colr_Layer_Func           get_colr_layer;
+    TT_Get_Color_Glyph_Paint_Func    get_colr_glyph_paint;
+    TT_Get_Color_Glyph_ClipBox_Func  get_color_glyph_clipbox;
+    TT_Get_Paint_Layers_Func         get_paint_layers;
+    TT_Get_Colorline_Stops_Func      get_colorline_stops;
+    TT_Get_Paint_Func                get_paint;
+    TT_Blend_Colr_Func               colr_blend;
+
+    TT_Get_Metrics_Func  get_metrics;
+
+    TT_Get_Name_Func     get_name;
+    TT_Get_Name_ID_Func  get_name_id;
+
+    /* OpenType SVG Support */
+    TT_Load_Table_Func    load_svg;
+    TT_Free_Table_Func    free_svg;
+    TT_Load_Svg_Doc_Func  load_svg_doc;
 
   } SFNT_Interface;
 
@@ -820,10 +1021,18 @@ FT_BEGIN_HEADER
           free_colr_,                    \
           set_palette_,                  \
           get_colr_layer_,               \
+          get_colr_glyph_paint_,         \
+          get_color_glyph_clipbox,       \
+          get_paint_layers_,             \
+          get_colorline_stops_,          \
+          get_paint_,                    \
           colr_blend_,                   \
           get_metrics_,                  \
           get_name_,                     \
-          get_name_id_ )                 \
+          get_name_id_,                  \
+          load_svg_,                     \
+          free_svg_,                     \
+          load_svg_doc_ )                \
   static const SFNT_Interface  class_ =  \
   {                                      \
     goto_table_,                         \
@@ -860,10 +1069,18 @@ FT_BEGIN_HEADER
     free_colr_,                          \
     set_palette_,                        \
     get_colr_layer_,                     \
+    get_colr_glyph_paint_,               \
+    get_color_glyph_clipbox,             \
+    get_paint_layers_,                   \
+    get_colorline_stops_,                \
+    get_paint_,                          \
     colr_blend_,                         \
     get_metrics_,                        \
     get_name_,                           \
-    get_name_id_                         \
+    get_name_id_,                        \
+    load_svg_,                           \
+    free_svg_,                           \
+    load_svg_doc_                        \
   };
 
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/svginterface.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/svginterface.h
new file mode 100644
index 0000000000..1b325e5e9d
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/svginterface.h
@@ -0,0 +1,46 @@
+/****************************************************************************
+ *
+ * svginterface.h
+ *
+ *   Interface of ot-svg module (specification only).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef SVGINTERFACE_H_
+#define SVGINTERFACE_H_
+
+#include <ft2build.h>
+#include <freetype/otsvg.h>
+
+
+FT_BEGIN_HEADER
+
+  typedef FT_Error
+  (*Preset_Bitmap_Func)( FT_Module     module,
+                         FT_GlyphSlot  slot,
+                         FT_Bool       cache );
+
+  typedef struct  SVG_Interface_
+  {
+    Preset_Bitmap_Func  preset_slot;
+
+  } SVG_Interface;
+
+  typedef SVG_Interface*  SVG_Service;
+
+FT_END_HEADER
+
+#endif /* SVGINTERFACE_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/t1types.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/t1types.h
index 6a0fe5e97d..b6a3de14d0 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/t1types.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/t1types.h
@@ -5,7 +5,7 @@
  *   Basic Type1/Type2 type definitions and interface (specification
  *   only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/tttypes.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/tttypes.h
index c36342c93a..df719387b5 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/tttypes.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/tttypes.h
@@ -5,7 +5,7 @@
  *   Basic SFNT/TrueType type definitions and interface (specification
  *   only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -1372,7 +1372,7 @@ FT_BEGIN_HEADER
    *
    *   num_locations ::
    *     The number of glyph locations in this TrueType file.  This should be
-   *     identical to the number of glyphs.  Ignored for Type 2 fonts.
+   *     one more than the number of glyphs.  Ignored for Type 2 fonts.
    *
    *   glyph_locations ::
    *     An array of longs.  These are offsets to glyph data within the
@@ -1390,8 +1390,8 @@ FT_BEGIN_HEADER
    *   hdmx_record_size ::
    *     The size of a single hdmx record.
    *
-   *   hdmx_record_sizes ::
-   *     An array holding the ppem sizes available in the 'hdmx' table.
+   *   hdmx_records ::
+   *     A array of pointers to the 'hdmx' table records sorted by ppem.
    *
    *   sbit_table ::
    *     A pointer to the font's embedded bitmap location table.
@@ -1598,14 +1598,14 @@ FT_BEGIN_HEADER
     FT_ULong              horz_metrics_size;
     FT_ULong              vert_metrics_size;
 
-    FT_ULong              num_locations; /* in broken TTF, gid > 0xFFFF */
+    FT_ULong              num_locations; /* up to 0xFFFF + 1 */
     FT_Byte*              glyph_locations;
 
     FT_Byte*              hdmx_table;
     FT_ULong              hdmx_table_size;
     FT_UInt               hdmx_record_count;
     FT_ULong              hdmx_record_size;
-    FT_Byte*              hdmx_record_sizes;
+    FT_Byte**             hdmx_records;
 
     FT_Byte*              sbit_table;
     FT_ULong              sbit_table_size;
@@ -1644,6 +1644,9 @@ FT_BEGIN_HEADER
     void*                 cpal;
     void*                 colr;
 
+    /* since 2.12 */
+    void*                 svg;
+
   } TT_FaceRec;
 
 
@@ -1734,7 +1737,7 @@ FT_BEGIN_HEADER
     FT_UInt          glyph_index;
 
     FT_Stream        stream;
-    FT_Int           byte_len;
+    FT_UInt          byte_len;
 
     FT_Short         n_contours;
     FT_BBox          bbox;
@@ -1769,6 +1772,9 @@ FT_BEGIN_HEADER
     /* since version 2.6.2 */
     FT_ListRec       composites;
 
+    /* since version 2.11.2 */
+    FT_Byte*         widthp;
+
   } TT_LoaderRec;
 
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/internal/wofftypes.h b/qtbase/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
index 1874a138a0..94804fa72f 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/internal/wofftypes.h
@@ -5,7 +5,7 @@
  *   Basic WOFF/WOFF2 type definitions and interface (specification
  *   only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -92,7 +92,7 @@ FT_BEGIN_HEADER
    */
   typedef struct  WOFF_TableRec_
   {
-    FT_ULong  Tag;           /* table ID                  */
+    FT_Tag    Tag;           /* table ID                  */
     FT_ULong  Offset;        /* table file offset         */
     FT_ULong  CompLength;    /* compressed table length   */
     FT_ULong  OrigLength;    /* uncompressed table length */
@@ -191,7 +191,7 @@ FT_BEGIN_HEADER
   typedef struct  WOFF2_TableRec_
   {
     FT_Byte   FlagByte;           /* table type and flags      */
-    FT_ULong  Tag;                /* table file offset         */
+    FT_Tag    Tag;                /* table file offset         */
     FT_ULong  dst_length;         /* uncompressed table length */
     FT_ULong  TransformLength;    /* transformed length        */
 
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/otsvg.h b/qtbase/src/3rdparty/freetype/include/freetype/otsvg.h
new file mode 100644
index 0000000000..2caadfdeeb
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/include/freetype/otsvg.h
@@ -0,0 +1,336 @@
+/****************************************************************************
+ *
+ * otsvg.h
+ *
+ *   Interface for OT-SVG support related things (specification).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef OTSVG_H_
+#define OTSVG_H_
+
+#include <freetype/freetype.h>
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   svg_fonts
+   *
+   * @title:
+   *   OpenType SVG Fonts
+   *
+   * @abstract:
+   *   OT-SVG API between FreeType and an external SVG rendering library.
+   *
+   * @description:
+   *   This section describes the four hooks necessary to render SVG
+   *   'documents' that are contained in an OpenType font's 'SVG~' table.
+   *
+   *   For more information on the implementation, see our standard hooks
+   *   based on 'librsvg' in the [FreeType Demo
+   *   Programs](https://gitlab.freedesktop.org/freetype/freetype-demos)
+   *   repository.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   SVG_Lib_Init_Func
+   *
+   * @description:
+   *   A callback that is called when the first OT-SVG glyph is rendered in
+   *   the lifetime of an @FT_Library object.  In a typical implementation,
+   *   one would want to allocate a structure and point the `data_pointer`
+   *   to it and perform any library initializations that might be needed.
+   *
+   * @inout:
+   *   data_pointer ::
+   *     The SVG rendering module stores a pointer variable that can be used
+   *     by clients to store any data that needs to be shared across
+   *     different hooks.  `data_pointer` is essentially a pointer to that
+   *     pointer such that it can be written to as well as read from.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef FT_Error
+  (*SVG_Lib_Init_Func)( FT_Pointer  *data_pointer );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   SVG_Lib_Free_Func
+   *
+   * @description:
+   *   A callback that is called when the `ot-svg` module is being freed.
+   *   It is only called if the init hook was called earlier.  This means
+   *   that neither the init nor the free hook is called if no OT-SVG glyph
+   *   is rendered.
+   *
+   *   In a typical implementation, one would want to free any state
+   *   structure that was allocated in the init hook and perform any
+   *   library-related closure that might be needed.
+   *
+   * @inout:
+   *   data_pointer ::
+   *     The SVG rendering module stores a pointer variable that can be used
+   *     by clients to store any data that needs to be shared across
+   *     different hooks.  `data_pointer` is essentially a pointer to that
+   *     pointer such that it can be written to as well as read from.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef void
+  (*SVG_Lib_Free_Func)( FT_Pointer  *data_pointer );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   SVG_Lib_Render_Func
+   *
+   * @description:
+   *   A callback that is called to render an OT-SVG glyph.  This callback
+   *   hook is called right after the preset hook @SVG_Lib_Preset_Slot_Func
+   *   has been called with `cache` set to `TRUE`.  The data necessary to
+   *   render is available through the handle @FT_SVG_Document, which is set
+   *   in the `other` field of @FT_GlyphSlotRec.
+   *
+   *   The render hook is expected to render the SVG glyph to the bitmap
+   *   buffer that is allocated already at `slot->bitmap.buffer`.  It also
+   *   sets the `num_grays` value as well as `slot->format`.
+   *
+   * @input:
+   *   slot ::
+   *     The slot to render.
+   *
+   * @inout:
+   *   data_pointer ::
+   *     The SVG rendering module stores a pointer variable that can be used
+   *     by clients to store any data that needs to be shared across
+   *     different hooks.  `data_pointer` is essentially a pointer to that
+   *     pointer such that it can be written to as well as read from.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef FT_Error
+  (*SVG_Lib_Render_Func)( FT_GlyphSlot  slot,
+                          FT_Pointer   *data_pointer );
+
+
+  /**************************************************************************
+   *
+   * @functype:
+   *   SVG_Lib_Preset_Slot_Func
+   *
+   * @description:
+   *   A callback that is called to preset the glyph slot.  It is called from
+   *   two places.
+   *
+   *   1. When `FT_Load_Glyph` needs to preset the glyph slot.
+   *
+   *   2. Right before the `svg` module calls the render callback hook.
+   *
+   *   When it is the former, the argument `cache` is set to `FALSE`.  When
+   *   it is the latter, the argument `cache` is set to `TRUE`.  This
+   *   distinction has been made because many calculations that are necessary
+   *   for presetting a glyph slot are the same needed later for the render
+   *   callback hook.  Thus, if `cache` is `TRUE`, the hook can _cache_ those
+   *   calculations in a memory block referenced by the state pointer.
+   *
+   *   This hook is expected to preset the slot by setting parameters such as
+   *   `bitmap_left`, `bitmap_top`, `width`, `rows`, `pitch`, and
+   *   `pixel_mode`.  It is also expected to set all the metrics for the slot
+   *   including the vertical advance if it is not already set.  Typically,
+   *   fonts have horizontal advances but not vertical ones.  If those are
+   *   available, they had already been set, otherwise they have to be
+   *   estimated and set manually.  The hook must take into account the
+   *   transformations that have been set, and translate the transformation
+   *   matrices into the SVG coordinate system, as the original matrix is
+   *   intended for the TTF/CFF coordinate system.
+   *
+   * @input:
+   *   slot ::
+   *     The glyph slot that has the SVG document loaded.
+   *
+   *   cache ::
+   *     See description.
+   *
+   * @inout:
+   *   data_pointer ::
+   *     The SVG rendering module stores a pointer variable that can be used
+   *     by clients to store any data that needs to be shared across
+   *     different hooks.  `data_pointer` is essentially a pointer to that
+   *     pointer such that it can be written to as well as read from.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef FT_Error
+  (*SVG_Lib_Preset_Slot_Func)( FT_GlyphSlot  slot,
+                               FT_Bool       cache,
+                               FT_Pointer   *state );
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   SVG_RendererHooks
+   *
+   * @description:
+   *   A structure that stores the four hooks needed to render OT-SVG glyphs
+   *   properly.  The structure is publicly used to set the hooks via the
+   *   @svg-hooks driver property.
+   *
+   *   The behavior of each hook is described in its documentation.  One
+   *   thing to note is that the preset hook and the render hook often need
+   *   to do the same operations; therefore, it's better to cache the
+   *   intermediate data in a state structure to avoid calculating it twice.
+   *   For example, in the preset hook one can draw the glyph on a recorder
+   *   surface and later create a bitmap surface from it in the render hook.
+   *
+   *   All four hooks must be non-NULL.
+   *
+   * @fields:
+   *   init_svg ::
+   *     The initialization hook.
+   *
+   *   free_svg ::
+   *     The cleanup hook.
+   *
+   *   render_hook ::
+   *     The render hook.
+   *
+   *   preset_slot ::
+   *     The preset hook.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef struct SVG_RendererHooks_
+  {
+    SVG_Lib_Init_Func    init_svg;
+    SVG_Lib_Free_Func    free_svg;
+    SVG_Lib_Render_Func  render_svg;
+
+    SVG_Lib_Preset_Slot_Func  preset_slot;
+
+  } SVG_RendererHooks;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_SVG_DocumentRec
+   *
+   * @description:
+   *   A structure that models one SVG document.
+   *
+   * @fields:
+   *   svg_document ::
+   *     A pointer to the SVG document.
+   *
+   *   svg_document_length ::
+   *     The length of `svg_document`.
+   *
+   *   metrics ::
+   *     A metrics object storing the size information.
+   *
+   *   units_per_EM ::
+   *     The size of the EM square.
+   *
+   *   start_glyph_id ::
+   *     The first glyph ID in the glyph range covered by this document.
+   *
+   *   end_glyph_id ::
+   *     The last glyph ID in the glyph range covered by this document.
+   *
+   *   transform ::
+   *     A 2x2 transformation matrix to apply to the glyph while rendering
+   *     it.
+   *
+   *   delta ::
+   *     The translation to apply to the glyph while rendering.
+   *
+   * @note:
+   *   When an @FT_GlyphSlot object `slot` is passed down to a renderer, the
+   *   renderer can only access the `metrics` and `units_per_EM` fields via
+   *   `slot->face`.  However, when @FT_Glyph_To_Bitmap sets up a dummy
+   *   object, it has no way to set a `face` object.  Thus, metrics
+   *   information and `units_per_EM` (which is necessary for OT-SVG) has to
+   *   be stored separately.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef struct  FT_SVG_DocumentRec_
+  {
+    FT_Byte*  svg_document;
+    FT_ULong  svg_document_length;
+
+    FT_Size_Metrics  metrics;
+    FT_UShort        units_per_EM;
+
+    FT_UShort  start_glyph_id;
+    FT_UShort  end_glyph_id;
+
+    FT_Matrix  transform;
+    FT_Vector  delta;
+
+  } FT_SVG_DocumentRec;
+
+
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_SVG_Document
+   *
+   * @description:
+   *   A handle to an @FT_SVG_DocumentRec object.
+   *
+   * @since:
+   *   2.12
+   */
+  typedef struct FT_SVG_DocumentRec_*  FT_SVG_Document;
+
+
+FT_END_HEADER
+
+#endif /* OTSVG_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/t1tables.h b/qtbase/src/3rdparty/freetype/include/freetype/t1tables.h
index 426e14024e..4068b204a9 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/t1tables.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/t1tables.h
@@ -5,7 +5,7 @@
  *   Basic Type 1/Type 2 tables definitions and interface (specification
  *   only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -360,7 +360,7 @@ FT_BEGIN_HEADER
 
     FT_UInt        num_subrs;
     FT_ULong       subrmap_offset;
-    FT_Int         sd_bytes;
+    FT_UInt        sd_bytes;
 
   } CID_FaceDictRec;
 
@@ -415,11 +415,11 @@ FT_BEGIN_HEADER
     FT_ULong        xuid[16];
 
     FT_ULong        cidmap_offset;
-    FT_Int          fd_bytes;
-    FT_Int          gd_bytes;
+    FT_UInt         fd_bytes;
+    FT_UInt         gd_bytes;
     FT_ULong        cid_count;
 
-    FT_Int          num_dicts;
+    FT_UInt         num_dicts;
     CID_FaceDict    font_dicts;
 
     FT_ULong        data_offset;
@@ -453,22 +453,22 @@ FT_BEGIN_HEADER
   /**************************************************************************
    *
    * @function:
-   *    FT_Has_PS_Glyph_Names
+   *   FT_Has_PS_Glyph_Names
    *
    * @description:
-   *    Return true if a given face provides reliable PostScript glyph names.
-   *    This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that
-   *    certain fonts (mostly TrueType) contain incorrect glyph name tables.
+   *   Return true if a given face provides reliable PostScript glyph names.
+   *   This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that
+   *   certain fonts (mostly TrueType) contain incorrect glyph name tables.
    *
-   *    When this function returns true, the caller is sure that the glyph
-   *    names returned by @FT_Get_Glyph_Name are reliable.
+   *   When this function returns true, the caller is sure that the glyph
+   *   names returned by @FT_Get_Glyph_Name are reliable.
    *
    * @input:
-   *    face ::
-   *      face handle
+   *   face ::
+   *     face handle
    *
    * @return:
-   *    Boolean.  True if glyph names are reliable.
+   *   Boolean.  True if glyph names are reliable.
    *
    */
   FT_EXPORT( FT_Int )
@@ -478,30 +478,40 @@ FT_BEGIN_HEADER
   /**************************************************************************
    *
    * @function:
-   *    FT_Get_PS_Font_Info
+   *   FT_Get_PS_Font_Info
    *
    * @description:
-   *    Retrieve the @PS_FontInfoRec structure corresponding to a given
-   *    PostScript font.
+   *   Retrieve the @PS_FontInfoRec structure corresponding to a given
+   *   PostScript font.
    *
    * @input:
-   *    face ::
-   *      PostScript face handle.
+   *   face ::
+   *     PostScript face handle.
    *
    * @output:
-   *    afont_info ::
-   *      Output font info structure pointer.
+   *   afont_info ::
+   *     A pointer to a @PS_FontInfoRec object.
    *
    * @return:
-   *    FreeType error code.  0~means success.
+   *   FreeType error code.  0~means success.
    *
    * @note:
-   *    String pointers within the @PS_FontInfoRec structure are owned by the
-   *    face and don't need to be freed by the caller.  Missing entries in
-   *    the font's FontInfo dictionary are represented by `NULL` pointers.
+   *   String pointers within the @PS_FontInfoRec structure are owned by the
+   *   face and don't need to be freed by the caller.  Missing entries in the
+   *   font's FontInfo dictionary are represented by `NULL` pointers.
+   *
+   *   The following font formats support this feature: 'Type~1', 'Type~42',
+   *   'CFF', 'CID~Type~1'.  For other font formats this function returns the
+   *   `FT_Err_Invalid_Argument` error code.
    *
-   *    If the font's format is not PostScript-based, this function will
-   *    return the `FT_Err_Invalid_Argument` error code.
+   * @example:
+   *   ```
+   *     PS_FontInfoRec  font_info;
+   *
+   *
+   *     error = FT_Get_PS_Font_Info( face, &font_info );
+   *     ...
+   *   ```
    *
    */
   FT_EXPORT( FT_Error )
@@ -512,29 +522,39 @@ FT_BEGIN_HEADER
   /**************************************************************************
    *
    * @function:
-   *    FT_Get_PS_Font_Private
+   *   FT_Get_PS_Font_Private
    *
    * @description:
-   *    Retrieve the @PS_PrivateRec structure corresponding to a given
-   *    PostScript font.
+   *   Retrieve the @PS_PrivateRec structure corresponding to a given
+   *   PostScript font.
    *
    * @input:
-   *    face ::
-   *      PostScript face handle.
+   *   face ::
+   *     PostScript face handle.
    *
    * @output:
-   *    afont_private ::
-   *      Output private dictionary structure pointer.
+   *   afont_private ::
+   *     A pointer to a @PS_PrivateRec object.
    *
    * @return:
-   *    FreeType error code.  0~means success.
+   *   FreeType error code.  0~means success.
    *
    * @note:
-   *    The string pointers within the @PS_PrivateRec structure are owned by
-   *    the face and don't need to be freed by the caller.
+   *   The string pointers within the @PS_PrivateRec structure are owned by
+   *   the face and don't need to be freed by the caller.
    *
-   *    If the font's format is not PostScript-based, this function returns
-   *    the `FT_Err_Invalid_Argument` error code.
+   *   Only the 'Type~1' font format supports this feature.  For other font
+   *   formats this function returns the `FT_Err_Invalid_Argument` error
+   *   code.
+   *
+   * @example:
+   *   ```
+   *     PS_PrivateRec  font_private;
+   *
+   *
+   *     error = FT_Get_PS_Font_Private( face, &font_private );
+   *     ...
+   *   ```
    *
    */
   FT_EXPORT( FT_Error )
@@ -693,67 +713,67 @@ FT_BEGIN_HEADER
   /**************************************************************************
    *
    * @function:
-   *    FT_Get_PS_Font_Value
+   *   FT_Get_PS_Font_Value
    *
    * @description:
-   *    Retrieve the value for the supplied key from a PostScript font.
+   *   Retrieve the value for the supplied key from a PostScript font.
    *
    * @input:
-   *    face ::
-   *      PostScript face handle.
+   *   face ::
+   *     PostScript face handle.
    *
-   *    key ::
-   *      An enumeration value representing the dictionary key to retrieve.
+   *   key ::
+   *     An enumeration value representing the dictionary key to retrieve.
    *
-   *    idx ::
-   *      For array values, this specifies the index to be returned.
+   *   idx ::
+   *     For array values, this specifies the index to be returned.
    *
-   *    value ::
-   *      A pointer to memory into which to write the value.
+   *   value ::
+   *     A pointer to memory into which to write the value.
    *
-   *    valen_len ::
-   *      The size, in bytes, of the memory supplied for the value.
+   *   valen_len ::
+   *     The size, in bytes, of the memory supplied for the value.
    *
    * @output:
-   *    value ::
-   *      The value matching the above key, if it exists.
+   *   value ::
+   *     The value matching the above key, if it exists.
    *
    * @return:
-   *    The amount of memory (in bytes) required to hold the requested value
-   *    (if it exists, -1 otherwise).
+   *   The amount of memory (in bytes) required to hold the requested value
+   *   (if it exists, -1 otherwise).
    *
    * @note:
-   *    The values returned are not pointers into the internal structures of
-   *    the face, but are 'fresh' copies, so that the memory containing them
-   *    belongs to the calling application.  This also enforces the
-   *    'read-only' nature of these values, i.e., this function cannot be
-   *    used to manipulate the face.
+   *   The values returned are not pointers into the internal structures of
+   *   the face, but are 'fresh' copies, so that the memory containing them
+   *   belongs to the calling application.  This also enforces the
+   *   'read-only' nature of these values, i.e., this function cannot be
+   *   used to manipulate the face.
    *
-   *    `value` is a void pointer because the values returned can be of
-   *    various types.
+   *   `value` is a void pointer because the values returned can be of
+   *   various types.
    *
-   *    If either `value` is `NULL` or `value_len` is too small, just the
-   *    required memory size for the requested entry is returned.
+   *   If either `value` is `NULL` or `value_len` is too small, just the
+   *   required memory size for the requested entry is returned.
    *
-   *    The `idx` parameter is used, not only to retrieve elements of, for
-   *    example, the FontMatrix or FontBBox, but also to retrieve name keys
-   *    from the CharStrings dictionary, and the charstrings themselves.  It
-   *    is ignored for atomic values.
+   *   The `idx` parameter is used, not only to retrieve elements of, for
+   *   example, the FontMatrix or FontBBox, but also to retrieve name keys
+   *   from the CharStrings dictionary, and the charstrings themselves.  It
+   *   is ignored for atomic values.
    *
-   *    `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000.  To
-   *    get the value as in the font stream, you need to divide by 65536000.0
-   *    (to remove the FT_Fixed scale, and the x1000 scale).
+   *   `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000.  To
+   *   get the value as in the font stream, you need to divide by 65536000.0
+   *   (to remove the FT_Fixed scale, and the x1000 scale).
    *
-   *    IMPORTANT: Only key/value pairs read by the FreeType interpreter can
-   *    be retrieved.  So, for example, PostScript procedures such as NP, ND,
-   *    and RD are not available.  Arbitrary keys are, obviously, not be
-   *    available either.
+   *   IMPORTANT: Only key/value pairs read by the FreeType interpreter can
+   *   be retrieved.  So, for example, PostScript procedures such as NP, ND,
+   *   and RD are not available.  Arbitrary keys are, obviously, not be
+   *   available either.
    *
-   *    If the font's format is not PostScript-based, this function returns
-   *    the `FT_Err_Invalid_Argument` error code.
+   *   If the font's format is not PostScript-based, this function returns
+   *   the `FT_Err_Invalid_Argument` error code.
    *
    * @since:
-   *    2.4.8
+   *   2.4.8
    *
    */
   FT_EXPORT( FT_Long )
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/ttnameid.h b/qtbase/src/3rdparty/freetype/include/freetype/ttnameid.h
index 2b2ed4c613..37b505a05b 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/ttnameid.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/ttnameid.h
@@ -4,7 +4,7 @@
  *
  *   TrueType name ID definitions (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -591,7 +591,7 @@ FT_BEGIN_HEADER
 #define TT_MS_LANGID_MALAY_MALAYSIA                    0x043E
 #define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM           0x083E
 #define TT_MS_LANGID_KAZAKH_KAZAKHSTAN                 0x043F
-#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/   0x0440
+#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic */  0x0440
 #define TT_MS_LANGID_KISWAHILI_KENYA                   0x0441
 #define TT_MS_LANGID_TURKMEN_TURKMENISTAN              0x0442
 #define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN            0x0443
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/tttables.h b/qtbase/src/3rdparty/freetype/include/freetype/tttables.h
index c8fa35ef8e..21664df7b3 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/tttables.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/tttables.h
@@ -5,7 +5,7 @@
  *   Basic SFNT/TrueType tables definitions and interface
  *   (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/include/freetype/tttags.h b/qtbase/src/3rdparty/freetype/include/freetype/tttags.h
index 3c9fbd59d7..8b807641b8 100644
--- a/qtbase/src/3rdparty/freetype/include/freetype/tttags.h
+++ b/qtbase/src/3rdparty/freetype/include/freetype/tttags.h
@@ -4,7 +4,7 @@
  *
  *   Tags for TrueType and OpenType tables (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -95,6 +95,7 @@ FT_BEGIN_HEADER
 #define TTAG_sbix  FT_MAKE_TAG( 's', 'b', 'i', 'x' )
 #define TTAG_sfnt  FT_MAKE_TAG( 's', 'f', 'n', 't' )
 #define TTAG_SING  FT_MAKE_TAG( 'S', 'I', 'N', 'G' )
+#define TTAG_SVG   FT_MAKE_TAG( 'S', 'V', 'G', ' ' )
 #define TTAG_trak  FT_MAKE_TAG( 't', 'r', 'a', 'k' )
 #define TTAG_true  FT_MAKE_TAG( 't', 'r', 'u', 'e' )
 #define TTAG_ttc   FT_MAKE_TAG( 't', 't', 'c', ' ' )
diff --git a/qtbase/src/3rdparty/freetype/include/ft2build.h b/qtbase/src/3rdparty/freetype/include/ft2build.h
index b4fd1f8c3e..2543ac435a 100644
--- a/qtbase/src/3rdparty/freetype/include/ft2build.h
+++ b/qtbase/src/3rdparty/freetype/include/ft2build.h
@@ -4,7 +4,7 @@
  *
  *   FreeType 2 build and setup macros.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/qt_attribution.json b/qtbase/src/3rdparty/freetype/qt_attribution.json
index 398a623d01..7ea21a6e7e 100644
--- a/qtbase/src/3rdparty/freetype/qt_attribution.json
+++ b/qtbase/src/3rdparty/freetype/qt_attribution.json
@@ -7,52 +7,82 @@
 
         "Description": "FreeType is a freely available software library to render fonts.",
         "Homepage": "http://www.freetype.org",
-        "Version": "2.10.4",
+        "Version": "2.12.1",
 
         "License": "Freetype Project License or GNU General Public License v2.0 only",
         "LicenseId": "FTL OR GPL-2.0",
         "LicenseFile": "LICENSE.txt",
-        "Copyright": "Copyright 2006-2020 by David Turner, Robert Wilhelm, and Werner Lemberg."
+        "Copyright": "Copyright (c) 2007-2014 Adobe Systems Incorporated
+Copyright (c) 2004-2022 Albert Chin-A-Young
+Copyright (c) 2018-2022 Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2000 Computing Research Labs, New Mexico State University
+Copyright (c) 2018-2022 David Turner, Robert Wilhelm, Dominik Rottsches, and Werner Lemberg
+Copyright (c) 2004-2022 David Turner, Robert Wilhelm, Werner Lemberg and George Williams
+Copyright (c) 2022 David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti
+Copyright (c) 2008-2022 David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya
+Copyright (c) 2003-2022 David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2005-2022 David Turner
+Copyright (c) 2007-2022 Derek Clegg and Michael Toftdal
+Copyright (c) 2007 Dmitry Timoshkov
+Copyright (c) 2001-2015 Francesco Zappa Nardelli
+Copyright (c) 2005, 2007, 2008, 2013 George Williams
+Copyright (c) 2013 Google, Inc. Google Author(s) Behdad Esfahbod
+Copyright (c) 2013-2022 Google, Inc.
+Copyright (c) 2003 Huw D M Davies for Codeweavers
+Copyright (c) 2010-2022 Joel Klinghed
+Copyright (c) 1996-2022 Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2003-2022 Masatake YAMATO and Redhat K.K.
+Copyright (c) 2004-2022 Masatake YAMATO, Redhat K.K, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2019-2022 Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2009-2022 Oran Agra and Mickey Gabel
+Copyright (c) 2007-2022 Rahul Bhalerao <rahul.bhalerao@redhat.com>
+Copyright (c) 2002-2022 Roberto Alameda
+Copyright (c) 2015-2022 Werner Lemberg
+Copyright (c) 2004-2022 suzuki toshiya, Masatake YAMATO, Red Hat K.K., David Turner, Robert Wilhelm, and Werner Lemberg"
     },
     {
         "Id": "freetype-zlib",
         "Name": "Freetype 2 - zlib",
         "QDocModule": "qtgui",
         "QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
+        "Path": "src/gzip",
 
         "Description": "FreeType is a freely available software library to render fonts.",
         "Homepage": "http://www.freetype.org",
         "License": "zlib License",
         "LicenseId": "Zlib",
         "LicenseFile": "ZLIB-LICENSE.txt",
-        "Copyright": "Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler"
+        "Copyright": "Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler"
     },
     {
         "Id": "freetype-bdf",
         "Name": "Freetype 2 - Bitmap Distribution Format (BDF) support",
         "QDocModule": "qtgui",
         "QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
+        "Path": "src/bdf",
 
         "Description": "FreeType is a freely available software library to render fonts.",
         "Homepage": "http://www.freetype.org",
         "License": "MIT License",
         "LicenseId": "MIT",
         "LicenseFile": "BDF-LICENSE.txt",
-        "Copyright": "Copyright (C) 2001-2002 by Francesco Zappa Nardelli
-Copyright 2000 Computing Research Labs, New Mexico State University
-Copyright 2001-2002, 2011 Francesco Zappa Nardelli"
+        "Copyright": "Copyright (c) 2000 Computing Research Labs, New Mexico State University
+Copyright (c) 2001-2014 Francesco Zappa Nardelli"
     },
     {
         "Id": "freetype-pcf",
         "Name": "Freetype 2 - Portable Compiled Format (PCF) support",
         "QDocModule": "qtgui",
         "QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
+        "Path": "src/pcf",
 
         "Description": "FreeType is a freely available software library to render fonts.",
         "Homepage": "http://www.freetype.org",
-        "License": "MIT License",
-        "LicenseId": "MIT",
+        "License": "MIT License and MIT Open Group variant",
+        "LicenseId": "MIT AND MIT-open-group",
         "LicenseFile": "PCF-LICENSE.txt",
-        "Copyright": "Copyright (C) 2000 by Francesco Zappa Nardelli"
+        "Copyright": "Copyright (c) 2001, 2012 David Turner, Robert Wilhelm, and Werner Lemberg
+Copyright (c) 2000-2014 Francesco Zappa Nardelli
+Copyright (c) 1990, 1994, 1998 The Open Group"
     }
 ]
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afblue.c b/qtbase/src/3rdparty/freetype/src/autofit/afblue.c
index 9ebffdd099..b986eb4a13 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afblue.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afblue.c
@@ -7,7 +7,7 @@
  *
  *   Auto-fitter data for blue strings (body).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afblue.cin b/qtbase/src/3rdparty/freetype/src/autofit/afblue.cin
index c6a697fee0..f7e27ad8e5 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afblue.cin
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afblue.cin
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter data for blue strings (body).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afblue.dat b/qtbase/src/3rdparty/freetype/src/autofit/afblue.dat
index b19b8df0f4..201acc4f6f 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afblue.dat
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afblue.dat
@@ -2,7 +2,7 @@
 //
 //   Auto-fitter data for blue strings.
 //
-// Copyright (C) 2013-2020 by
+// Copyright (C) 2013-2022 by
 // David Turner, Robert Wilhelm, and Werner Lemberg.
 //
 // This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afblue.h b/qtbase/src/3rdparty/freetype/src/autofit/afblue.h
index 486d663b6c..0e56abb94d 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afblue.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afblue.h
@@ -7,7 +7,7 @@
  *
  *   Auto-fitter data for blue strings (specification).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afblue.hin b/qtbase/src/3rdparty/freetype/src/autofit/afblue.hin
index 3957027091..f9fd5aa3b4 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afblue.hin
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afblue.hin
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter data for blue strings (specification).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afcjk.c b/qtbase/src/3rdparty/freetype/src/autofit/afcjk.c
index 3b340cd5ed..1853a17f5c 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afcjk.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afcjk.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for CJK writing system (body).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -37,11 +37,6 @@
 #include "aferrors.h"
 
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
   /**************************************************************************
    *
    * The macro FT_COMPONENT is used in trace mode.  It is an implicit
@@ -72,11 +67,11 @@
     AF_GlyphHintsRec  hints[1];
 
 
-    FT_TRACE5(( "\n"
-                "cjk standard widths computation (style `%s')\n"
-                "===================================================\n"
-                "\n",
+    FT_TRACE5(( "\n" ));
+    FT_TRACE5(( "cjk standard widths computation (style `%s')\n",
                 af_style_names[metrics->root.style_class->style] ));
+    FT_TRACE5(( "===================================================\n" ));
+    FT_TRACE5(( "\n" ));
 
     af_glyph_hints_init( hints, face->memory );
 
@@ -314,9 +309,9 @@
     /* style's entry in the `af_blue_stringset' array, computing its */
     /* extremum points (depending on the string properties)          */
 
-    FT_TRACE5(( "cjk blue zones computation\n"
-                "==========================\n"
-                "\n" ));
+    FT_TRACE5(( "cjk blue zones computation\n" ));
+    FT_TRACE5(( "==========================\n" ));
+    FT_TRACE5(( "\n" ));
 
 #ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
     shaper_buf = af_shaper_buf_create( face );
@@ -555,9 +550,8 @@
       if ( AF_CJK_IS_TOP_BLUE( bs ) )
         blue->flags |= AF_CJK_BLUE_TOP;
 
-      FT_TRACE5(( "    -> reference = %ld\n"
-                  "       overshoot = %ld\n",
-                  *blue_ref, *blue_shoot ));
+      FT_TRACE5(( "    -> reference = %ld\n", *blue_ref ));
+      FT_TRACE5(( "       overshoot = %ld\n", *blue_shoot ));
 
     } /* end for loop */
 
@@ -743,12 +737,12 @@
 
         blue->shoot.fit = blue->ref.fit - delta2;
 
-        FT_TRACE5(( ">> active cjk blue zone %c%d[%ld/%ld]:\n"
-                    "     ref:   cur=%.2f fit=%.2f\n"
-                    "     shoot: cur=%.2f fit=%.2f\n",
+        FT_TRACE5(( ">> active cjk blue zone %c%d[%ld/%ld]:\n",
                     ( dim == AF_DIMENSION_HORZ ) ? 'H' : 'V',
-                    nn, blue->ref.org, blue->shoot.org,
-                    blue->ref.cur / 64.0, blue->ref.fit / 64.0,
+                    nn, blue->ref.org, blue->shoot.org ));
+        FT_TRACE5(( "     ref:   cur=%.2f fit=%.2f\n",
+                    blue->ref.cur / 64.0, blue->ref.fit / 64.0 ));
+        FT_TRACE5(( "     shoot: cur=%.2f fit=%.2f\n",
                     blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
 
         blue->flags |= AF_CJK_BLUE_ACTIVE;
@@ -849,7 +843,7 @@
   {
     AF_AxisHints  axis          = &hints->axis[dim];
     AF_Segment    segments      = axis->segments;
-    AF_Segment    segment_limit = segments + axis->num_segments;
+    AF_Segment    segment_limit = FT_OFFSET( segments, axis->num_segments );
     AF_Direction  major_dir     = axis->major_dir;
     AF_Segment    seg1, seg2;
     FT_Pos        len_threshold;
@@ -1011,7 +1005,7 @@
     AF_CJKAxis    laxis  = &((AF_CJKMetrics)hints->metrics)->axis[dim];
 
     AF_Segment    segments      = axis->segments;
-    AF_Segment    segment_limit = segments + axis->num_segments;
+    AF_Segment    segment_limit = FT_OFFSET( segments, axis->num_segments );
     AF_Segment    seg;
 
     FT_Fixed      scale;
@@ -1159,7 +1153,7 @@
      */
     {
       AF_Edge  edges      = axis->edges;
-      AF_Edge  edge_limit = edges + axis->num_edges;
+      AF_Edge  edge_limit = FT_OFFSET( edges, axis->num_edges );
       AF_Edge  edge;
 
 
@@ -1297,7 +1291,7 @@
   {
     AF_AxisHints  axis       = &hints->axis[dim];
     AF_Edge       edge       = axis->edges;
-    AF_Edge       edge_limit = edge + axis->num_edges;
+    AF_Edge       edge_limit = FT_OFFSET( edge, axis->num_edges );
     AF_CJKAxis    cjk        = &metrics->axis[dim];
     FT_Fixed      scale      = cjk->scale;
     FT_Pos        best_dist0;  /* initial threshold */
@@ -1401,11 +1395,6 @@
     /* compute flags depending on render mode, etc. */
     mode = metrics->root.scaler.render_mode;
 
-#if 0 /* AF_CONFIG_OPTION_USE_WARPER */
-    if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
-      metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
-#endif
-
     scaler_flags = hints->scaler_flags;
     other_flags  = 0;
 
@@ -1434,12 +1423,6 @@
 
     scaler_flags |= AF_SCALER_FLAG_NO_ADVANCE;
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    /* get (global) warper flag */
-    if ( !metrics->root.globals->module->warping )
-      scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
-#endif
-
     hints->scaler_flags = scaler_flags;
     hints->other_flags  = other_flags;
 
@@ -1815,7 +1798,7 @@
   {
     AF_AxisHints  axis       = &hints->axis[dim];
     AF_Edge       edges      = axis->edges;
-    AF_Edge       edge_limit = edges + axis->num_edges;
+    AF_Edge       edge_limit = FT_OFFSET( edges, axis->num_edges );
     FT_PtrDist    n_edges;
     AF_Edge       edge;
     AF_Edge       anchor   = NULL;
@@ -2194,7 +2177,7 @@
   {
     AF_AxisHints  axis       = & hints->axis[dim];
     AF_Edge       edges      = axis->edges;
-    AF_Edge       edge_limit = edges + axis->num_edges;
+    AF_Edge       edge_limit = FT_OFFSET( edges, axis->num_edges );
     AF_Edge       edge;
     FT_Bool       snapping;
 
@@ -2322,25 +2305,6 @@
       if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
            ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) )   )
       {
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-        if ( dim == AF_DIMENSION_HORZ                                  &&
-             metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
-             AF_HINTS_DO_WARP( hints )                                 )
-        {
-          AF_WarperRec  warper;
-          FT_Fixed      scale;
-          FT_Pos        delta;
-
-
-          af_warper_compute( &warper, hints, (AF_Dimension)dim,
-                             &scale, &delta );
-          af_glyph_hints_scale_dim( hints, (AF_Dimension)dim,
-                                    scale, delta );
-          continue;
-        }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
         af_cjk_hint_edges( hints, (AF_Dimension)dim );
         af_cjk_align_edge_points( hints, (AF_Dimension)dim );
         af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afcjk.h b/qtbase/src/3rdparty/freetype/src/autofit/afcjk.h
index fd0f451aa8..bf948bcec0 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afcjk.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afcjk.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for CJK writing system (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afcover.h b/qtbase/src/3rdparty/freetype/src/autofit/afcover.h
index 03085ad07e..be71fe39de 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afcover.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afcover.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter coverages (specification only).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afdummy.c b/qtbase/src/3rdparty/freetype/src/autofit/afdummy.c
index 77d31df974..5fdbfcfd42 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afdummy.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afdummy.c
@@ -5,7 +5,7 @@
  *   Auto-fitter dummy routines to be used if no hinting should be
  *   performed (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afdummy.h b/qtbase/src/3rdparty/freetype/src/autofit/afdummy.h
index efd799e84b..4dddbd5215 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afdummy.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afdummy.h
@@ -5,7 +5,7 @@
  *   Auto-fitter dummy routines to be used if no hinting should be
  *   performed (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/aferrors.h b/qtbase/src/3rdparty/freetype/src/autofit/aferrors.h
index f90899944b..d31b1a9c88 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/aferrors.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/aferrors.h
@@ -4,7 +4,7 @@
  *
  *   Autofitter error codes (specification only).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afglobal.c b/qtbase/src/3rdparty/freetype/src/autofit/afglobal.c
index d5129423d5..87a3fbfb0f 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afglobal.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afglobal.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter routines to compute global hinting values (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -19,6 +19,7 @@
 #include "afglobal.h"
 #include "afranges.h"
 #include "afshaper.h"
+#include "afws-decl.h"
 #include <freetype/internal/ftdebug.h>
 
 
@@ -32,11 +33,6 @@
 #define FT_COMPONENT  afglobal
 
 
-  /* get writing system specific header files */
-#undef  WRITING_SYSTEM
-#define WRITING_SYSTEM( ws, WS )  /* empty */
-#include "afwrtsys.h"
-
 #include "aferrors.h"
 
 
@@ -74,7 +70,7 @@
   af_writing_system_classes[] =
   {
 
-#include "afwrtsys.h"
+#include "afws-iter.h"
 
     NULL  /* do not remove */
   };
@@ -285,10 +281,10 @@
 
 #ifdef FT_DEBUG_LEVEL_TRACE
 
-    FT_TRACE4(( "\n"
-                "style coverage\n"
-                "==============\n"
-                "\n" ));
+    FT_TRACE4(( "\n" ));
+    FT_TRACE4(( "style coverage\n" ));
+    FT_TRACE4(( "==============\n" ));
+    FT_TRACE4(( "\n" ));
 
     for ( ss = 0; af_style_classes[ss]; ss++ )
     {
@@ -341,11 +337,13 @@
 
     /* we allocate an AF_FaceGlobals structure together */
     /* with the glyph_styles array                      */
-    if ( FT_ALLOC( globals,
-                   sizeof ( *globals ) +
-                     (FT_ULong)face->num_glyphs * sizeof ( FT_UShort ) ) )
+    if ( FT_QALLOC( globals,
+                    sizeof ( *globals ) +
+                      (FT_ULong)face->num_glyphs * sizeof ( FT_UShort ) ) )
       goto Exit;
 
+    FT_ZERO( &globals->metrics );
+
     globals->face                      = face;
     globals->glyph_count               = face->num_glyphs;
     /* right after the globals structure come the glyph styles */
@@ -478,6 +476,10 @@
           {
             style = (AF_Style)( globals->glyph_styles[gindex] &
                                 AF_STYLE_UNASSIGNED           );
+            /* IMPORTANT: Clear the error code, see
+             * https://gitlab.freedesktop.org/freetype/freetype/-/issues/1063
+             */
+            error = FT_Err_Ok;
             goto Again;
           }
 
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afglobal.h b/qtbase/src/3rdparty/freetype/src/autofit/afglobal.h
index fecf7af977..f7ebf8d57a 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afglobal.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
  *   Auto-fitter routines to compute global hinting values
  *   (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afhints.c b/qtbase/src/3rdparty/freetype/src/autofit/afhints.c
index a8e00890ef..ae7d10528d 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afhints.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afhints.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -32,6 +32,104 @@
 #define FT_COMPONENT  afhints
 
 
+  FT_LOCAL_DEF( void )
+  af_sort_pos( FT_UInt  count,
+               FT_Pos*  table )
+  {
+    FT_UInt  i, j;
+    FT_Pos   swap;
+
+
+    for ( i = 1; i < count; i++ )
+    {
+      for ( j = i; j > 0; j-- )
+      {
+        if ( table[j] >= table[j - 1] )
+          break;
+
+        swap         = table[j];
+        table[j]     = table[j - 1];
+        table[j - 1] = swap;
+      }
+    }
+  }
+
+
+  FT_LOCAL_DEF( void )
+  af_sort_and_quantize_widths( FT_UInt*  count,
+                               AF_Width  table,
+                               FT_Pos    threshold )
+  {
+    FT_UInt      i, j;
+    FT_UInt      cur_idx;
+    FT_Pos       cur_val;
+    FT_Pos       sum;
+    AF_WidthRec  swap;
+
+
+    if ( *count == 1 )
+      return;
+
+    /* sort */
+    for ( i = 1; i < *count; i++ )
+    {
+      for ( j = i; j > 0; j-- )
+      {
+        if ( table[j].org >= table[j - 1].org )
+          break;
+
+        swap         = table[j];
+        table[j]     = table[j - 1];
+        table[j - 1] = swap;
+      }
+    }
+
+    cur_idx = 0;
+    cur_val = table[cur_idx].org;
+
+    /* compute and use mean values for clusters not larger than  */
+    /* `threshold'; this is very primitive and might not yield   */
+    /* the best result, but normally, using reference character  */
+    /* `o', `*count' is 2, so the code below is fully sufficient */
+    for ( i = 1; i < *count; i++ )
+    {
+      if ( table[i].org - cur_val > threshold ||
+           i == *count - 1                    )
+      {
+        sum = 0;
+
+        /* fix loop for end of array */
+        if ( table[i].org - cur_val <= threshold &&
+             i == *count - 1                     )
+          i++;
+
+        for ( j = cur_idx; j < i; j++ )
+        {
+          sum         += table[j].org;
+          table[j].org = 0;
+        }
+        table[cur_idx].org = sum / (FT_Pos)j;
+
+        if ( i < *count - 1 )
+        {
+          cur_idx = i + 1;
+          cur_val = table[cur_idx].org;
+        }
+      }
+    }
+
+    cur_idx = 1;
+
+    /* compress array to remove zero values */
+    for ( i = 1; i < *count; i++ )
+    {
+      if ( table[i].org )
+        table[cur_idx++] = table[i];
+    }
+
+    *count = cur_idx;
+  }
+
   /* Get new segment for given axis. */
 
   FT_LOCAL_DEF( FT_Error )
@@ -764,7 +862,7 @@
   {
     FT_Error   error   = FT_Err_Ok;
     AF_Point   points;
-    FT_UInt    old_max, new_max;
+    FT_Int     old_max, new_max;
     FT_Fixed   x_scale = hints->x_scale;
     FT_Fixed   y_scale = hints->y_scale;
     FT_Pos     x_delta = hints->x_delta;
@@ -781,8 +879,8 @@
     hints->axis[1].num_edges    = 0;
 
     /* first of all, reallocate the contours array if necessary */
-    new_max = (FT_UInt)outline->n_contours;
-    old_max = (FT_UInt)hints->max_contours;
+    new_max = outline->n_contours;
+    old_max = hints->max_contours;
 
     if ( new_max <= AF_CONTOURS_EMBEDDED )
     {
@@ -797,12 +895,12 @@
       if ( hints->contours == hints->embedded.contours )
         hints->contours = NULL;
 
-      new_max = ( new_max + 3 ) & ~3U; /* round up to a multiple of 4 */
+      new_max = ( new_max + 3 ) & ~3; /* round up to a multiple of 4 */
 
       if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )
         goto Exit;
 
-      hints->max_contours = (FT_Int)new_max;
+      hints->max_contours = new_max;
     }
 
     /*
@@ -810,8 +908,8 @@
      * note that we reserve two additional point positions, used to
      * hint metrics appropriately
      */
-    new_max = (FT_UInt)( outline->n_points + 2 );
-    old_max = (FT_UInt)hints->max_points;
+    new_max = outline->n_points + 2;
+    old_max = hints->max_points;
 
     if ( new_max <= AF_POINTS_EMBEDDED )
     {
@@ -826,12 +924,12 @@
       if ( hints->points == hints->embedded.points )
         hints->points = NULL;
 
-      new_max = ( new_max + 2 + 7 ) & ~7U; /* round up to a multiple of 8 */
+      new_max = ( new_max + 2 + 7 ) & ~7; /* round up to a multiple of 8 */
 
       if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) )
         goto Exit;
 
-      hints->max_points = (FT_Int)new_max;
+      hints->max_points = new_max;
     }
 
     hints->num_points   = outline->n_points;
@@ -855,9 +953,6 @@
     hints->x_delta = x_delta;
     hints->y_delta = y_delta;
 
-    hints->xmin_delta = 0;
-    hints->xmax_delta = 0;
-
     points = hints->points;
     if ( hints->num_points == 0 )
       goto Exit;
@@ -1221,7 +1316,7 @@
   {
     AF_AxisHints  axis          = & hints->axis[dim];
     AF_Segment    segments      = axis->segments;
-    AF_Segment    segment_limit = segments + axis->num_segments;
+    AF_Segment    segment_limit = FT_OFFSET( segments, axis->num_segments );
     AF_Segment    seg;
 
 
@@ -1298,7 +1393,7 @@
     AF_Point      point_limit = points + hints->num_points;
     AF_AxisHints  axis        = &hints->axis[dim];
     AF_Edge       edges       = axis->edges;
-    AF_Edge       edge_limit  = edges + axis->num_edges;
+    AF_Edge       edge_limit  = FT_OFFSET( edges, axis->num_edges );
     FT_UInt       touch_flag;
 
 
@@ -1688,33 +1783,4 @@
   }
 
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-
-  /* Apply (small) warp scale and warp delta for given dimension. */
-
-  FT_LOCAL_DEF( void )
-  af_glyph_hints_scale_dim( AF_GlyphHints  hints,
-                            AF_Dimension   dim,
-                            FT_Fixed       scale,
-                            FT_Pos         delta )
-  {
-    AF_Point  points       = hints->points;
-    AF_Point  points_limit = points + hints->num_points;
-    AF_Point  point;
-
-
-    if ( dim == AF_DIMENSION_HORZ )
-    {
-      for ( point = points; point < points_limit; point++ )
-        point->x = FT_MulFix( point->fx, scale ) + delta;
-    }
-    else
-    {
-      for ( point = points; point < points_limit; point++ )
-        point->y = FT_MulFix( point->fy, scale ) + delta;
-    }
-  }
-
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afhints.h b/qtbase/src/3rdparty/freetype/src/autofit/afhints.h
index 6397f098f0..96001cd80d 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afhints.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afhints.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -362,9 +362,6 @@ FT_BEGIN_HEADER
                                     /* implementations         */
     AF_StyleMetrics  metrics;
 
-    FT_Pos           xmin_delta;    /* used for warping */
-    FT_Pos           xmax_delta;
-
     /* Two arrays to avoid allocation penalty.            */
     /* The `embedded' structure must be the last element! */
     struct
@@ -408,10 +405,6 @@ FT_BEGIN_HEADER
 #define AF_HINTS_DO_ADVANCE( h )                                \
           !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_ADVANCE )
 
-#define AF_HINTS_DO_WARP( h )                                  \
-          !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_WARPER )
-
-
 
   FT_LOCAL( AF_Direction )
   af_direction_compute( FT_Pos  dx,
@@ -459,14 +452,6 @@ FT_BEGIN_HEADER
   af_glyph_hints_align_weak_points( AF_GlyphHints  hints,
                                     AF_Dimension   dim );
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-  FT_LOCAL( void )
-  af_glyph_hints_scale_dim( AF_GlyphHints  hints,
-                            AF_Dimension   dim,
-                            FT_Fixed       scale,
-                            FT_Pos         delta );
-#endif
-
   FT_LOCAL( void )
   af_glyph_hints_done( AF_GlyphHints  hints );
 
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afindic.c b/qtbase/src/3rdparty/freetype/src/autofit/afindic.c
index bc2837a26d..5bf0b5f945 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afindic.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afindic.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for Indic writing system (body).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,11 +27,6 @@
 #include "aferrors.h"
 
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
   static FT_Error
   af_indic_metrics_init( AF_CJKMetrics  metrics,
                          FT_Face        face )
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afindic.h b/qtbase/src/3rdparty/freetype/src/autofit/afindic.h
index 088b88b19d..59ae11a677 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afindic.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afindic.h
@@ -5,7 +5,7 @@
  *   Auto-fitter hinting routines for Indic writing system
  *   (specification).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/aflatin.c b/qtbase/src/3rdparty/freetype/src/autofit/aflatin.c
index 21ec02ebd2..bed0ccee08 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/aflatin.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/aflatin.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for latin writing system (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -24,11 +24,6 @@
 #include "aferrors.h"
 
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-#include "afwarp.h"
-#endif
-
-
   /**************************************************************************
    *
    * The macro FT_COMPONENT is used in trace mode.  It is an implicit
@@ -63,11 +58,11 @@
     AF_GlyphHintsRec  hints[1];
 
 
-    FT_TRACE5(( "\n"
-                "latin standard widths computation (style `%s')\n"
-                "=====================================================\n"
-                "\n",
+    FT_TRACE5(( "\n" ));
+    FT_TRACE5(( "latin standard widths computation (style `%s')\n",
                 af_style_names[metrics->root.style_class->style] ));
+    FT_TRACE5(( "=====================================================\n" ));
+    FT_TRACE5(( "\n" ));
 
     af_glyph_hints_init( hints, face->memory );
 
@@ -205,7 +200,7 @@
                                       (AF_Dimension)dim );
 
         seg   = axhints->segments;
-        limit = seg + axhints->num_segments;
+        limit = FT_OFFSET( seg, axhints->num_segments );
 
         for ( ; seg < limit; seg++ )
         {
@@ -350,9 +345,9 @@
     /* we walk over the blue character strings as specified in the */
     /* style's entry in the `af_blue_stringset' array              */
 
-    FT_TRACE5(( "latin blue zones computation\n"
-                "============================\n"
-                "\n" ));
+    FT_TRACE5(( "latin blue zones computation\n" ));
+    FT_TRACE5(( "============================\n" ));
+    FT_TRACE5(( "\n" ));
 
 #ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
     shaper_buf = af_shaper_buf_create( face );
@@ -976,9 +971,8 @@
       if ( AF_LATIN_IS_X_HEIGHT_BLUE( bs ) )
         blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
 
-      FT_TRACE5(( "    -> reference = %ld\n"
-                  "       overshoot = %ld\n",
-                  *blue_ref, *blue_shoot ));
+      FT_TRACE5(( "    -> reference = %ld\n", *blue_ref ));
+      FT_TRACE5(( "       overshoot = %ld\n", *blue_shoot ));
 
     } /* end for loop */
 
@@ -1275,29 +1269,28 @@
 
             if ( dist == 0 )
             {
-              FT_TRACE5((
-                "af_latin_metrics_scale_dim:"
-                " x height alignment (style `%s'):\n"
-                "                           "
-                " vertical scaling changed from %.5f to %.5f (by %ld%%)\n"
-                "\n",
-                af_style_names[metrics->root.style_class->style],
-                scale / 65536.0,
-                new_scale / 65536.0,
-                ( fitted - scaled ) * 100 / scaled ));
+              FT_TRACE5(( "af_latin_metrics_scale_dim:"
+                          " x height alignment (style `%s'):\n",
+                          af_style_names[metrics->root.style_class->style] ));
+              FT_TRACE5(( "                           "
+                          " vertical scaling changed"
+                          " from %.5f to %.5f (by %ld%%)\n",
+                          scale / 65536.0,
+                          new_scale / 65536.0,
+                          ( fitted - scaled ) * 100 / scaled ));
+              FT_TRACE5(( "\n" ));
 
               scale = new_scale;
             }
 #ifdef FT_DEBUG_LEVEL_TRACE
             else
             {
-              FT_TRACE5((
-                "af_latin_metrics_scale_dim:"
-                " x height alignment (style `%s'):\n"
-                "                           "
-                " excessive vertical scaling abandoned\n"
-                "\n",
-                af_style_names[metrics->root.style_class->style] ));
+              FT_TRACE5(( "af_latin_metrics_scale_dim:"
+                          " x height alignment (style `%s'):\n",
+                          af_style_names[metrics->root.style_class->style] ));
+              FT_TRACE5(( "                           "
+                          " excessive vertical scaling abandoned\n" ));
+              FT_TRACE5(( "\n" ));
             }
 #endif
           }
@@ -1346,9 +1339,11 @@
 
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( axis->extra_light )
-      FT_TRACE5(( "`%s' style is extra light (at current resolution)\n"
-                  "\n",
+    {
+      FT_TRACE5(( "`%s' style is extra light (at current resolution)\n",
                   af_style_names[metrics->root.style_class->style] ));
+      FT_TRACE5(( "\n" ));
+    }
 #endif
 
     if ( dim == AF_DIMENSION_VERT )
@@ -1473,13 +1468,13 @@
         AF_LatinBlue  blue = &axis->blues[nn];
 
 
-        FT_TRACE5(( "  reference %d: %ld scaled to %.2f%s\n"
-                    "  overshoot %d: %ld scaled to %.2f%s\n",
+        FT_TRACE5(( "  reference %d: %ld scaled to %.2f%s\n",
                     nn,
                     blue->ref.org,
                     blue->ref.fit / 64.0,
                     ( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
-                                                           : " (inactive)",
+                                                           : " (inactive)" ));
+        FT_TRACE5(( "  overshoot %d: %ld scaled to %.2f%s\n",
                     nn,
                     blue->shoot.org,
                     blue->shoot.fit / 64.0,
@@ -1847,6 +1842,31 @@
              ( FT_ABS( point->out_dir ) == major_dir ||
                point == point->prev                  ) )
         {
+          /*
+           * For efficiency, we restrict the number of segments to 1000,
+           * which is a heuristic value: it is very unlikely that a glyph
+           * with so many segments can be hinted in a sensible way.
+           * Reasons:
+           *
+           * - The glyph has really 1000 segments; this implies that it has
+           *   at least 2000 outline points.  Assuming 'normal' fonts that
+           *   have superfluous points optimized away, viewing such a glyph
+           *   only makes sense at large magnifications where hinting
+           *   isn't applied anyway.
+           *
+           * - We have a broken glyph.  Hinting doesn't make sense in this
+           *   case either.
+           */
+          if ( axis->num_segments > 1000 )
+          {
+            FT_TRACE0(( "af_latin_hints_compute_segments:"
+                        " more than 1000 segments in this glyph;\n" ));
+            FT_TRACE0(( "                                "
+                        " hinting is suppressed\n" ));
+            axis->num_segments = 0;
+            return FT_Err_Ok;
+          }
+
           /* this is the start of a new segment! */
           segment_dir = (AF_Direction)point->out_dir;
 
@@ -1969,7 +1989,7 @@
   {
     AF_AxisHints  axis          = &hints->axis[dim];
     AF_Segment    segments      = axis->segments;
-    AF_Segment    segment_limit = segments + axis->num_segments;
+    AF_Segment    segment_limit = FT_OFFSET( segments, axis->num_segments );
     FT_Pos        len_threshold, len_score, dist_score, max_width;
     AF_Segment    seg1, seg2;
 
@@ -2089,7 +2109,7 @@
       {
         if ( seg2->link != seg1 )
         {
-          seg1->link  = 0;
+          seg1->link  = NULL;
           seg1->serif = seg2->link;
         }
       }
@@ -2114,7 +2134,7 @@
     FT_Bool  top_to_bottom_hinting = 0;
 
     AF_Segment    segments      = axis->segments;
-    AF_Segment    segment_limit = segments + axis->num_segments;
+    AF_Segment    segment_limit = FT_OFFSET( segments, axis->num_segments );
     AF_Segment    seg;
 
 #if 0
@@ -2480,7 +2500,7 @@
   {
     AF_AxisHints  axis       = &hints->axis[AF_DIMENSION_VERT];
     AF_Edge       edge       = axis->edges;
-    AF_Edge       edge_limit = edge + axis->num_edges;
+    AF_Edge       edge_limit = FT_OFFSET( edge, axis->num_edges );
     AF_LatinAxis  latin      = &metrics->axis[AF_DIMENSION_VERT];
     FT_Fixed      scale      = latin->scale;
 
@@ -2611,11 +2631,6 @@
     /* compute flags depending on render mode, etc. */
     mode = metrics->root.scaler.render_mode;
 
-#if 0 /* #ifdef AF_CONFIG_OPTION_USE_WARPER */
-    if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
-      metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
-#endif
-
     scaler_flags = hints->scaler_flags;
     other_flags  = 0;
 
@@ -2653,12 +2668,6 @@
          ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0          )
       scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
 
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    /* get (global) warper flag */
-    if ( !metrics->root.globals->module->warping )
-      scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
-#endif
-
     hints->scaler_flags = scaler_flags;
     hints->other_flags  = other_flags;
 
@@ -2984,7 +2993,7 @@
   {
     AF_AxisHints  axis       = &hints->axis[dim];
     AF_Edge       edges      = axis->edges;
-    AF_Edge       edge_limit = edges + axis->num_edges;
+    AF_Edge       edge_limit = FT_OFFSET( edges, axis->num_edges );
     FT_PtrDist    n_edges;
     AF_Edge       edge;
     AF_Edge       anchor     = NULL;
@@ -3575,24 +3584,6 @@
     /* grid-fit the outline */
     for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
     {
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-      if ( dim == AF_DIMENSION_HORZ                                  &&
-           metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
-           AF_HINTS_DO_WARP( hints )                                 )
-      {
-        AF_WarperRec  warper;
-        FT_Fixed      scale;
-        FT_Pos        delta;
-
-
-        af_warper_compute( &warper, hints, (AF_Dimension)dim,
-                           &scale, &delta );
-        af_glyph_hints_scale_dim( hints, (AF_Dimension)dim,
-                                  scale, delta );
-        continue;
-      }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
-
       if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
            ( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) )   )
       {
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/aflatin.h b/qtbase/src/3rdparty/freetype/src/autofit/aflatin.h
index 62bc4c8d44..facc663450 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/aflatin.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/aflatin.h
@@ -5,7 +5,7 @@
  *   Auto-fitter hinting routines for latin writing system
  *   (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afloader.c b/qtbase/src/3rdparty/freetype/src/autofit/afloader.c
index c35d85c4cf..e55183a509 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afloader.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afloader.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter glyph loading routines (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -105,7 +105,6 @@
                               globals->stem_darkening_for_ppem;
 
     FT_Fixed  em_size  = af_intToFixed( face->units_per_EM );
-    FT_Fixed  em_ratio = FT_DivFix( af_intToFixed( 1000 ), em_size );
 
     FT_Matrix  scale_down_matrix = { 0x10000L, 0, 0, 0x10000L };
 
@@ -142,12 +141,11 @@
 
 
       darken_by_font_units_x =
-        af_intToFixed( af_loader_compute_darkening( loader,
-                                                    face,
-                                                    stdVW ) );
-      darken_x = FT_DivFix( FT_MulFix( darken_by_font_units_x,
-                                       size_metrics->x_scale ),
-                            em_ratio );
+         af_loader_compute_darkening( loader,
+                                      face,
+                                      stdVW ) ;
+      darken_x = FT_MulFix( darken_by_font_units_x,
+                            size_metrics->x_scale );
 
       globals->standard_vertical_width = stdVW;
       globals->stem_darkening_for_ppem = size_metrics->x_ppem;
@@ -161,12 +159,11 @@
 
 
       darken_by_font_units_y =
-        af_intToFixed( af_loader_compute_darkening( loader,
-                                                    face,
-                                                    stdHW ) );
-      darken_y = FT_DivFix( FT_MulFix( darken_by_font_units_y,
-                                       size_metrics->y_scale ),
-                            em_ratio );
+         af_loader_compute_darkening( loader,
+                                      face,
+                                      stdHW ) ;
+      darken_y = FT_MulFix( darken_by_font_units_y,
+                            size_metrics->y_scale );
 
       globals->standard_horizontal_width = stdHW;
       globals->stem_darkening_for_ppem   = size_metrics->x_ppem;
@@ -300,12 +297,6 @@
     if ( error )
       goto Exit;
 
-#ifdef FT_OPTION_AUTOFIT2
-    /* XXX: undocumented hook to activate the latin2 writing system. */
-    if ( load_flags & ( 1UL << 20 ) )
-      style_options = AF_STYLE_LTN2_DFLT;
-#endif
-
     /*
      * Glyphs (really code points) are assigned to scripts.  Script
      * analysis is done lazily: For each glyph that passes through here,
@@ -482,8 +473,8 @@
           FT_Pos  pp2x = loader->pp2.x;
 
 
-          loader->pp1.x = FT_PIX_ROUND( pp1x + hints->xmin_delta );
-          loader->pp2.x = FT_PIX_ROUND( pp2x + hints->xmax_delta );
+          loader->pp1.x = FT_PIX_ROUND( pp1x );
+          loader->pp2.x = FT_PIX_ROUND( pp2x );
 
           slot->lsb_delta = loader->pp1.x - pp1x;
           slot->rsb_delta = loader->pp2.x - pp2x;
@@ -594,7 +585,7 @@
    *
    * XXX: Currently a crude adaption of the original algorithm.  Do better?
    */
-  FT_LOCAL_DEF( FT_Int32 )
+  FT_LOCAL_DEF( FT_Fixed )
   af_loader_compute_darkening( AF_Loader  loader,
                                FT_Face    face,
                                FT_Pos     standard_width )
@@ -713,7 +704,7 @@
     }
 
     /* Convert darken_amount from per 1000 em to true character space. */
-    return af_fixedToInt( FT_DivFix( darken_amount, em_ratio ) );
+    return FT_DivFix( darken_amount, em_ratio );
   }
 
 
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afloader.h b/qtbase/src/3rdparty/freetype/src/autofit/afloader.h
index 97282371cd..b345e46395 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afloader.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afloader.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter glyph loading routines (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -75,7 +75,7 @@ FT_BEGIN_HEADER
                         FT_UInt    gindex,
                         FT_Int32   load_flags );
 
-  FT_LOCAL_DEF( FT_Int32 )
+  FT_LOCAL_DEF( FT_Fixed )
   af_loader_compute_darkening( AF_Loader  loader,
                                FT_Face    face,
                                FT_Pos     standard_width );
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afmodule.c b/qtbase/src/3rdparty/freetype/src/autofit/afmodule.c
index e16494460e..1b14ae682e 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afmodule.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afmodule.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter module implementation (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -48,7 +48,7 @@
   int  _af_debug_disable_blue_hints;
 
   /* we use a global object instead of a local one for debugging */
-  AF_GlyphHintsRec  _af_debug_hints_rec[1];
+  static AF_GlyphHintsRec  _af_debug_hints_rec[1];
 
   void*  _af_debug_hints = _af_debug_hints_rec;
 #endif
@@ -148,7 +148,7 @@
 
       if ( !af_style_classes[ss] )
       {
-        FT_TRACE0(( "af_property_set: Invalid value %d for property `%s'\n",
+        FT_TRACE2(( "af_property_set: Invalid value %d for property `%s'\n",
                     *fallback_script, property_name ));
         return FT_THROW( Invalid_Argument );
       }
@@ -190,35 +190,6 @@
 
       return error;
     }
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    else if ( !ft_strcmp( property_name, "warping" ) )
-    {
-#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
-      if ( value_is_string )
-      {
-        const char*  s = (const char*)value;
-        long         w = ft_strtol( s, NULL, 10 );
-
-
-        if ( w == 0 )
-          module->warping = 0;
-        else if ( w == 1 )
-          module->warping = 1;
-        else
-          return FT_THROW( Invalid_Argument );
-      }
-      else
-#endif
-      {
-        FT_Bool*  warping = (FT_Bool*)value;
-
-
-        module->warping = *warping;
-      }
-
-      return error;
-    }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
     else if ( !ft_strcmp( property_name, "darkening-parameters" ) )
     {
       FT_Int*  darken_params;
@@ -307,7 +278,7 @@
       return error;
     }
 
-    FT_TRACE0(( "af_property_set: missing property `%s'\n",
+    FT_TRACE2(( "af_property_set: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
@@ -322,9 +293,6 @@
     AF_Module  module         = (AF_Module)ft_module;
     FT_UInt    fallback_style = module->fallback_style;
     FT_UInt    default_script = module->default_script;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    FT_Bool    warping        = module->warping;
-#endif
 
 
     if ( !ft_strcmp( property_name, "glyph-to-script-map" ) )
@@ -371,17 +339,6 @@
 
       return error;
     }
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    else if ( !ft_strcmp( property_name, "warping" ) )
-    {
-      FT_Bool*  val = (FT_Bool*)value;
-
-
-      *val = warping;
-
-      return error;
-    }
-#endif /* AF_CONFIG_OPTION_USE_WARPER */
     else if ( !ft_strcmp( property_name, "darkening-parameters" ) )
     {
       FT_Int*  darken_params = module->darken_params;
@@ -410,7 +367,7 @@
       return error;
     }
 
-    FT_TRACE0(( "af_property_get: missing property `%s'\n",
+    FT_TRACE2(( "af_property_get: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
@@ -447,9 +404,6 @@
 
     module->fallback_style    = AF_STYLE_FALLBACK;
     module->default_script    = AF_SCRIPT_DEFAULT;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    module->warping           = 0;
-#endif
     module->no_stem_darkening = TRUE;
 
     module->darken_params[0]  = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afmodule.h b/qtbase/src/3rdparty/freetype/src/autofit/afmodule.h
index e8fe4a93aa..1d1bfaf544 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afmodule.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afmodule.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter module implementation (specification).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -37,9 +37,6 @@ FT_BEGIN_HEADER
 
     FT_UInt       fallback_style;
     FT_UInt       default_script;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
-    FT_Bool       warping;
-#endif
     FT_Bool       no_stem_darkening;
     FT_Int        darken_params[8];
 
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afranges.c b/qtbase/src/3rdparty/freetype/src/autofit/afranges.c
index c8ebf5e784..2de1991a57 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afranges.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afranges.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter Unicode script ranges (body).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afranges.h b/qtbase/src/3rdparty/freetype/src/autofit/afranges.h
index c2ffda4b0f..acd01faf68 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afranges.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afranges.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter Unicode script ranges (specification).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afscript.h b/qtbase/src/3rdparty/freetype/src/autofit/afscript.h
index 4cf9cc19f5..172b598069 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afscript.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afscript.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter scripts (specification only).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afshaper.c b/qtbase/src/3rdparty/freetype/src/autofit/afshaper.c
index bbf7b6b1f9..298480d864 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afshaper.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afshaper.c
@@ -4,7 +4,7 @@
  *
  *   HarfBuzz interface for accessing OpenType features (body).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -132,13 +132,24 @@
     /* Convert a HarfBuzz script tag into the corresponding OpenType */
     /* tag or tags -- some Indic scripts like Devanagari have an old */
     /* and a new set of features.                                    */
-    hb_ot_tags_from_script( script,
-                            &script_tags[0],
-                            &script_tags[1] );
+    {
+      unsigned int  tags_count = 3;
+      hb_tag_t      tags[3];
+
+
+      hb_ot_tags_from_script_and_language( script,
+                                           HB_LANGUAGE_INVALID,
+                                           &tags_count,
+                                           tags,
+                                           NULL,
+                                           NULL );
+      script_tags[0] = tags_count > 0 ? tags[0] : HB_TAG_NONE;
+      script_tags[1] = tags_count > 1 ? tags[1] : HB_TAG_NONE;
+      script_tags[2] = tags_count > 2 ? tags[2] : HB_TAG_NONE;
+    }
 
-    /* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */
-    /* as the second tag.  We change that to HB_TAG_NONE except for the  */
-    /* default script.                                                   */
+    /* If the second tag is HB_OT_TAG_DEFAULT_SCRIPT, change that to     */
+    /* HB_TAG_NONE except for the default script.                        */
     if ( default_script )
     {
       if ( script_tags[0] == HB_TAG_NONE )
@@ -157,9 +168,6 @@
       /* HarfBuzz maps them to `DFLT', which we don't want to handle here */
       if ( script_tags[0] == HB_OT_TAG_DEFAULT_SCRIPT )
         goto Exit;
-
-      if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT )
-        script_tags[1] = HB_TAG_NONE;
     }
 
     gsub_lookups = hb_set_create();
@@ -173,9 +181,9 @@
     if ( hb_set_is_empty( gsub_lookups ) )
       goto Exit; /* nothing to do */
 
-    FT_TRACE4(( "GSUB lookups (style `%s'):\n"
-                " ",
+    FT_TRACE4(( "GSUB lookups (style `%s'):\n",
                 af_style_names[style_class->style] ));
+    FT_TRACE4(( " " ));
 
 #ifdef FT_DEBUG_LEVEL_TRACE
     count = 0;
@@ -202,12 +210,13 @@
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( !count )
       FT_TRACE4(( " (none)" ));
-    FT_TRACE4(( "\n\n" ));
+    FT_TRACE4(( "\n" ));
+    FT_TRACE4(( "\n" ));
 #endif
 
-    FT_TRACE4(( "GPOS lookups (style `%s'):\n"
-                " ",
+    FT_TRACE4(( "GPOS lookups (style `%s'):\n",
                 af_style_names[style_class->style] ));
+    FT_TRACE4(( " " ));
 
     gpos_lookups = hb_set_create();
     hb_ot_layout_collect_lookups( face,
@@ -242,7 +251,8 @@
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( !count )
       FT_TRACE4(( " (none)" ));
-    FT_TRACE4(( "\n\n" ));
+    FT_TRACE4(( "\n" ));
+    FT_TRACE4(( "\n" ));
 #endif
 
     /*
@@ -353,8 +363,10 @@
     {
 #ifdef FT_DEBUG_LEVEL_TRACE
       if ( !( count % 10 ) )
-        FT_TRACE4(( "\n"
-                    "   " ));
+      {
+        FT_TRACE4(( "\n" ));
+        FT_TRACE4(( "   " ));
+      }
 
       FT_TRACE4(( " %d", idx ));
       count++;
@@ -376,9 +388,12 @@
 
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( !count )
-      FT_TRACE4(( "\n"
-                  "    (none)" ));
-    FT_TRACE4(( "\n\n" ));
+    {
+      FT_TRACE4(( "\n" ));
+      FT_TRACE4(( "    (none)" ));
+    }
+    FT_TRACE4(( "\n" ));
+    FT_TRACE4(( "\n" ));
 #endif
 
   Exit:
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afshaper.h b/qtbase/src/3rdparty/freetype/src/autofit/afshaper.h
index 138c27b32b..558f03bdef 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afshaper.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afshaper.h
@@ -4,7 +4,7 @@
  *
  *   HarfBuzz interface for accessing OpenType features (specification).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afstyles.h b/qtbase/src/3rdparty/freetype/src/autofit/afstyles.h
index 9113ec451e..9080b9fb65 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/afstyles.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afstyles.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter styles (specification only).
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -299,15 +299,6 @@
          AF_BLUE_STRINGSET_LATP,
          AF_COVERAGE_DEFAULT )
 
-#ifdef FT_OPTION_AUTOFIT2
-  STYLE( ltn2_dflt, LTN2_DFLT,
-         "Latin 2 default style",
-         AF_WRITING_SYSTEM_LATIN2,
-         AF_SCRIPT_LATN,
-         AF_BLUE_STRINGSET_LATN,
-         AF_COVERAGE_DEFAULT )
-#endif
-
   STYLE( lisu_dflt, LISU_DFLT,
          "Lisu default style",
          AF_WRITING_SYSTEM_LATIN,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/aftypes.h b/qtbase/src/3rdparty/freetype/src/autofit/aftypes.h
index 5f040c6b4b..754aad7ba4 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/aftypes.h
+++ b/qtbase/src/3rdparty/freetype/src/autofit/aftypes.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter types (specification only).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -92,63 +92,6 @@ extern void*  _af_debug_hints;
                                FT_Pos    threshold );
 
 
-  /*************************************************************************/
-  /*************************************************************************/
-  /*****                                                               *****/
-  /*****                   A N G L E   T Y P E S                       *****/
-  /*****                                                               *****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-  /*
-   * The auto-fitter doesn't need a very high angular accuracy;
-   * this allows us to speed up some computations considerably with a
-   * light Cordic algorithm (see afangles.c).
-   */
-
-  typedef FT_Int  AF_Angle;
-
-
-#define AF_ANGLE_PI   256
-#define AF_ANGLE_2PI  ( AF_ANGLE_PI * 2 )
-#define AF_ANGLE_PI2  ( AF_ANGLE_PI / 2 )
-#define AF_ANGLE_PI4  ( AF_ANGLE_PI / 4 )
-
-
-#if 0
-  /*
-   * compute the angle of a given 2-D vector
-   */
-  FT_LOCAL( AF_Angle )
-  af_angle_atan( FT_Pos  dx,
-                 FT_Pos  dy );
-
-
-  /*
-   * compute `angle2 - angle1'; the result is always within
-   * the range [-AF_ANGLE_PI .. AF_ANGLE_PI - 1]
-   */
-  FT_LOCAL( AF_Angle )
-  af_angle_diff( AF_Angle  angle1,
-                 AF_Angle  angle2 );
-#endif /* 0 */
-
-
-#define AF_ANGLE_DIFF( result, angle1, angle2 ) \
-  FT_BEGIN_STMNT                                \
-    AF_Angle  _delta = (angle2) - (angle1);     \
-                                                \
-                                                \
-    while ( _delta <= -AF_ANGLE_PI )            \
-      _delta += AF_ANGLE_2PI;                   \
-                                                \
-    while ( _delta > AF_ANGLE_PI )              \
-      _delta -= AF_ANGLE_2PI;                   \
-                                                \
-    result = _delta;                            \
-  FT_END_STMNT
-
-
   /*
    * opaque handle to glyph-specific hints -- see `afhints.h' for more
    * details
@@ -172,7 +115,6 @@ extern void*  _af_debug_hints;
 #define AF_SCALER_FLAG_NO_HORIZONTAL  1U /* disable horizontal hinting */
 #define AF_SCALER_FLAG_NO_VERTICAL    2U /* disable vertical hinting   */
 #define AF_SCALER_FLAG_NO_ADVANCE     4U /* disable advance hinting    */
-#define AF_SCALER_FLAG_NO_WARPER      8U /* disable warper             */
 
 
   typedef struct  AF_ScalerRec_
@@ -256,7 +198,6 @@ extern void*  _af_debug_hints;
    *   outline according to the results of the glyph analyzer.
    */
 
-#define AFWRTSYS_H_  /* don't load header files */
 #undef  WRITING_SYSTEM
 #define WRITING_SYSTEM( ws, WS )    \
           AF_WRITING_SYSTEM_ ## WS,
@@ -265,14 +206,12 @@ extern void*  _af_debug_hints;
   typedef enum  AF_WritingSystem_
   {
 
-#include "afwrtsys.h"
+#include "afws-iter.h"
 
     AF_WRITING_SYSTEM_MAX   /* do not remove */
 
   } AF_WritingSystem;
 
-#undef  AFWRTSYS_H_
-
 
   typedef struct  AF_WritingSystemClassRec_
   {
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afws-decl.h b/qtbase/src/3rdparty/freetype/src/autofit/afws-decl.h
new file mode 100644
index 0000000000..c93845ef95
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afws-decl.h
@@ -0,0 +1,33 @@
+/****************************************************************************
+ *
+ * afws-decl.h
+ *
+ *   Auto-fitter writing system declarations (specification only).
+ *
+ * Copyright (C) 2013-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef AFWS_DECL_H_
+#define AFWS_DECL_H_
+
+  /* Since preprocessor directives can't create other preprocessor */
+  /* directives, we have to include the header files manually.     */
+
+#include "afdummy.h"
+#include "aflatin.h"
+#include "afcjk.h"
+#include "afindic.h"
+
+#endif /* AFWS_DECL_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/afws-iter.h b/qtbase/src/3rdparty/freetype/src/autofit/afws-iter.h
new file mode 100644
index 0000000000..9cda3509bc
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/autofit/afws-iter.h
@@ -0,0 +1,31 @@
+/****************************************************************************
+ *
+ * afws-iter.h
+ *
+ *   Auto-fitter writing systems iterator (specification only).
+ *
+ * Copyright (C) 2013-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+  /* This header may be included multiple times. */
+  /* Define `WRITING_SYSTEM' as needed.          */
+
+
+  /* Add new writing systems here.  The arguments are the writing system */
+  /* name in lowercase and uppercase, respectively.                      */
+
+  WRITING_SYSTEM( dummy, DUMMY )
+  WRITING_SYSTEM( latin, LATIN )
+  WRITING_SYSTEM( cjk,   CJK   )
+  WRITING_SYSTEM( indic, INDIC )
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/autofit.c b/qtbase/src/3rdparty/freetype/src/autofit/autofit.c
index ef5e7f1452..3d78a9b335 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/autofit.c
+++ b/qtbase/src/3rdparty/freetype/src/autofit/autofit.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter module (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,7 +18,6 @@
 
 #define FT_MAKE_OPTION_SINGLE_OBJECT
 
-#include "afangles.c"
 #include "afblue.c"
 #include "afcjk.c"
 #include "afdummy.c"
@@ -26,12 +25,10 @@
 #include "afhints.c"
 #include "afindic.c"
 #include "aflatin.c"
-#include "aflatin2.c"
 #include "afloader.c"
 #include "afmodule.c"
 #include "afranges.c"
 #include "afshaper.c"
-#include "afwarp.c"
 
 
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/module.mk b/qtbase/src/3rdparty/freetype/src/autofit/module.mk
index c32781f478..1d7eda3043 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/autofit/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2003-2020 by
+# Copyright (C) 2003-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/autofit/rules.mk b/qtbase/src/3rdparty/freetype/src/autofit/rules.mk
index 553ddce6b7..11ef607177 100644
--- a/qtbase/src/3rdparty/freetype/src/autofit/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/autofit/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2003-2020 by
+# Copyright (C) 2003-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -28,8 +28,7 @@ AUTOF_COMPILE := $(CC) $(ANSIFLAGS)                              \
 
 # AUTOF driver sources (i.e., C files)
 #
-AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
-                 $(AUTOF_DIR)/afblue.c   \
+AUTOF_DRV_SRC := $(AUTOF_DIR)/afblue.c   \
                  $(AUTOF_DIR)/afcjk.c    \
                  $(AUTOF_DIR)/afdummy.c  \
                  $(AUTOF_DIR)/afglobal.c \
@@ -40,17 +39,17 @@ AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
                  $(AUTOF_DIR)/afmodule.c \
                  $(AUTOF_DIR)/afranges.c \
                  $(AUTOF_DIR)/afshaper.c \
-                 $(AUTOF_DIR)/afwarp.c
 
 # AUTOF driver headers
 #
-AUTOF_DRV_H := $(AUTOF_DRV_SRC:%c=%h)  \
-               $(AUTOF_DIR)/afcover.h  \
-               $(AUTOF_DIR)/aferrors.h \
-               $(AUTOF_DIR)/afscript.h \
-               $(AUTOF_DIR)/afstyles.h \
-               $(AUTOF_DIR)/aftypes.h  \
-               $(AUTOF_DIR)/afwrtsys.h
+AUTOF_DRV_H := $(AUTOF_DRV_SRC:%c=%h)   \
+               $(AUTOF_DIR)/afcover.h   \
+               $(AUTOF_DIR)/aferrors.h  \
+               $(AUTOF_DIR)/afscript.h  \
+               $(AUTOF_DIR)/afstyles.h  \
+               $(AUTOF_DIR)/aftypes.h   \
+               $(AUTOF_DIR)/afws-decl.h \
+               $(AUTOF_DIR)/afws-iter.h
 
 
 # AUTOF driver object(s)
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftadvanc.c b/qtbase/src/3rdparty/freetype/src/base/ftadvanc.c
index c689e6a15b..fc6b428817 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftadvanc.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftadvanc.c
@@ -4,7 +4,7 @@
  *
  *   Quick computation of advance widths (body).
  *
- * Copyright (C) 2008-2020 by
+ * Copyright (C) 2008-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftbase.c b/qtbase/src/3rdparty/freetype/src/base/ftbase.c
index bfbaffd64e..cd1056890f 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftbase.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftbase.c
@@ -4,7 +4,7 @@
  *
  *   Single object library component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftbase.h b/qtbase/src/3rdparty/freetype/src/base/ftbase.h
index 25afa9bc31..f873566f22 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftbase.h
+++ b/qtbase/src/3rdparty/freetype/src/base/ftbase.h
@@ -4,7 +4,7 @@
  *
  *   Private functions used in the `base' module (specification).
  *
- * Copyright (C) 2008-2020 by
+ * Copyright (C) 2008-2022 by
  * David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,6 +28,7 @@ FT_BEGIN_HEADER
 
   FT_DECLARE_GLYPH( ft_bitmap_glyph_class )
   FT_DECLARE_GLYPH( ft_outline_glyph_class )
+  FT_DECLARE_GLYPH( ft_svg_glyph_class )
 
 
 #ifdef FT_CONFIG_OPTION_MAC_FONTS
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftbbox.c b/qtbase/src/3rdparty/freetype/src/base/ftbbox.c
index 30a4eba0b3..30aedf780c 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftbbox.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftbbox.c
@@ -4,7 +4,7 @@
  *
  *   FreeType bbox computation (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftbdf.c b/qtbase/src/3rdparty/freetype/src/base/ftbdf.c
index fc374c6675..4f22113d7e 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftbdf.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftbdf.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing BDF-specific strings (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftbitmap.c b/qtbase/src/3rdparty/freetype/src/base/ftbitmap.c
index 584213ddcf..7825895ad6 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftbitmap.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility functions for bitmaps (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -112,10 +112,10 @@
       target_size = (FT_ULong)target_pitch * target->rows;
 
       if ( target_size != size )
-        (void)FT_QREALLOC( target->buffer, target_size, size );
+        FT_MEM_QREALLOC( target->buffer, target_size, size );
     }
     else
-      (void)FT_QALLOC( target->buffer, size );
+      FT_MEM_QALLOC( target->buffer, size );
 
     if ( !error )
     {
@@ -480,7 +480,7 @@
      * A gamma of 2.2 is fair to assume.  And then, we need to
      * undo the premultiplication too.
      *
-     *   https://accessibility.kde.org/hsl-adjusted.php
+     *   http://www.brucelindbloom.com/index.html?WorkingSpaceInfo.html#SideNotes
      *
      * We do the computation with integers only, applying a gamma of 2.0.
      * We guarantee 32-bit arithmetic to avoid overflow but the resulting
@@ -488,9 +488,9 @@
      *
      */
 
-    l = (  4732UL /* 0.0722 * 65536 */ * bgra[0] * bgra[0] +
-          46871UL /* 0.7152 * 65536 */ * bgra[1] * bgra[1] +
-          13933UL /* 0.2126 * 65536 */ * bgra[2] * bgra[2] ) >> 16;
+    l = (  4731UL /* 0.072186 * 65536 */ * bgra[0] * bgra[0] +
+          46868UL /* 0.715158 * 65536 */ * bgra[1] * bgra[1] +
+          13937UL /* 0.212656 * 65536 */ * bgra[2] * bgra[2] ) >> 16;
 
     /*
      * Final transparency can be determined as follows.
@@ -907,8 +907,8 @@
     final_rows  = ( final_ury - final_lly ) >> 6;
 
 #ifdef FT_DEBUG_LEVEL_TRACE
-    FT_TRACE5(( "FT_Bitmap_Blend:\n"
-                "  source bitmap: (%ld, %ld) -- (%ld, %ld); %d x %d\n",
+    FT_TRACE5(( "FT_Bitmap_Blend:\n" ));
+    FT_TRACE5(( "  source bitmap: (%ld, %ld) -- (%ld, %ld); %d x %d\n",
       source_llx / 64, source_lly / 64,
       source_urx / 64, source_ury / 64,
       source_->width, source_->rows ));
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftcalc.c b/qtbase/src/3rdparty/freetype/src/base/ftcalc.c
index b5258c85a1..6c1e7fbd45 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftcalc.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftcalc.c
@@ -4,7 +4,7 @@
  *
  *   Arithmetic computations (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -45,7 +45,7 @@
 
 /* we need to emulate a 64-bit data type if a real one isn't available */
 
-#ifndef FT_LONG64
+#ifndef FT_INT64
 
   typedef struct  FT_Int64_
   {
@@ -54,7 +54,7 @@
 
   } FT_Int64;
 
-#endif /* !FT_LONG64 */
+#endif /* !FT_INT64 */
 
 
   /**************************************************************************
@@ -79,7 +79,7 @@
   FT_END_STMNT
 
   /* The following three functions are available regardless of whether */
-  /* FT_LONG64 is defined.                                             */
+  /* FT_INT64 is defined.                                              */
 
   /* documentation is in freetype.h */
 
@@ -109,7 +109,7 @@
 
 #ifndef FT_MSB
 
-  FT_BASE_DEF ( FT_Int )
+  FT_BASE_DEF( FT_Int )
   FT_MSB( FT_UInt32 z )
   {
     FT_Int  shift = 0;
@@ -164,7 +164,7 @@
   }
 
 
-#ifdef FT_LONG64
+#ifdef FT_INT64
 
 
   /* documentation is in freetype.h */
@@ -272,7 +272,7 @@
   }
 
 
-#else /* !FT_LONG64 */
+#else /* !FT_INT64 */
 
 
   static void
@@ -651,7 +651,7 @@
   }
 
 
-#endif /* !FT_LONG64 */
+#endif /* !FT_INT64 */
 
 
   /* documentation is in ftglyph.h */
@@ -985,7 +985,7 @@
     /* we silently ignore overflow errors since such large values */
     /* lead to even more (harmless) rendering errors later on     */
 
-#ifdef FT_LONG64
+#ifdef FT_INT64
 
     FT_Int64  delta = SUB_INT64( MUL_INT64( in_x, out_y ),
                                  MUL_INT64( in_y, out_x ) );
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftcid.c b/qtbase/src/3rdparty/freetype/src/base/ftcid.c
index ce8a876adc..b882ca3de0 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftcid.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftcid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing CID font information.
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * Derek Clegg and Michael Toftdal.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftcolor.c b/qtbase/src/3rdparty/freetype/src/base/ftcolor.c
index a50d680096..0edf379b43 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftcolor.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftcolor.c
@@ -4,7 +4,7 @@
  *
  *   FreeType's glyph color management (body).
  *
- * Copyright (C) 2018-2020 by
+ * Copyright (C) 2018-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftdbgmem.c b/qtbase/src/3rdparty/freetype/src/base/ftdbgmem.c
index eb0d651607..1df83c404d 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftdbgmem.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
  *
  *   Memory debugger (body).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -302,46 +302,6 @@
   }
 
 
-  static FT_MemTable
-  ft_mem_table_new( FT_Memory  memory )
-  {
-    FT_MemTable  table;
-
-
-    table = (FT_MemTable)memory->alloc( memory, sizeof ( *table ) );
-    if ( !table )
-      goto Exit;
-
-    FT_ZERO( table );
-
-    table->size  = FT_MEM_SIZE_MIN;
-    table->nodes = 0;
-
-    table->memory = memory;
-
-    table->memory_user = memory->user;
-
-    table->alloc   = memory->alloc;
-    table->realloc = memory->realloc;
-    table->free    = memory->free;
-
-    table->buckets = (FT_MemNode *)
-                       memory->alloc(
-                         memory,
-                         table->size * (FT_Long)sizeof ( FT_MemNode ) );
-    if ( table->buckets )
-      FT_ARRAY_ZERO( table->buckets, table->size );
-    else
-    {
-      memory->free( memory, table );
-      table = NULL;
-    }
-
-  Exit:
-    return table;
-  }
-
-
   static void
   ft_mem_table_destroy( FT_MemTable  table )
   {
@@ -350,8 +310,6 @@
     FT_Long  leaks      = 0;
 
 
-    FT_DumpMemory( table->memory );
-
     /* remove all blocks from the table, revealing leaked ones */
     for ( i = 0; i < table->size; i++ )
     {
@@ -413,8 +371,6 @@
     printf( "FreeType: maximum memory footprint = %ld\n",
             table->alloc_max );
 
-    ft_mem_table_free( table, table );
-
     if ( leak_count > 0 )
       ft_mem_debug_panic(
         "FreeType: %ld bytes of memory leaked in %ld blocks\n",
@@ -821,17 +777,30 @@
   }
 
 
-  extern FT_Int
+  extern void
   ft_mem_debug_init( FT_Memory  memory )
   {
     FT_MemTable  table;
-    FT_Int       result = 0;
 
 
-    if ( ft_getenv( "FT2_DEBUG_MEMORY" ) )
+    if ( !ft_getenv( "FT2_DEBUG_MEMORY" ) )
+      return;
+
+    table = (FT_MemTable)memory->alloc( memory, sizeof ( *table ) );
+
+    if ( table )
     {
-      table = ft_mem_table_new( memory );
-      if ( table )
+      FT_ZERO( table );
+
+      table->memory      = memory;
+      table->memory_user = memory->user;
+      table->alloc       = memory->alloc;
+      table->realloc     = memory->realloc;
+      table->free        = memory->free;
+
+      ft_mem_table_resize( table );
+
+      if ( table->size )
       {
         const char*  p;
 
@@ -876,28 +845,31 @@
           if ( keep_alive > 0 )
             table->keep_alive = 1;
         }
-
-        result = 1;
       }
+      else
+        memory->free( memory, table );
     }
-    return result;
   }
 
 
   extern void
   ft_mem_debug_done( FT_Memory  memory )
   {
-    FT_MemTable  table = (FT_MemTable)memory->user;
+    if ( memory->free == ft_mem_debug_free )
+    {
+      FT_MemTable  table = (FT_MemTable)memory->user;
 
 
-    if ( table )
-    {
+      FT_DumpMemory( memory );
+
+      ft_mem_table_destroy( table );
+
       memory->free    = table->free;
       memory->realloc = table->realloc;
       memory->alloc   = table->alloc;
+      memory->user    = table->memory_user;
 
-      ft_mem_table_destroy( table );
-      memory->user = NULL;
+      memory->free( memory, table );
     }
   }
 
@@ -922,11 +894,9 @@
   extern void
   FT_DumpMemory( FT_Memory  memory )
   {
-    FT_MemTable  table = (FT_MemTable)memory->user;
-
-
-    if ( table )
+    if ( memory->free == ft_mem_debug_free )
     {
+      FT_MemTable    table = (FT_MemTable)memory->user;
       FT_MemSource*  bucket = table->sources;
       FT_MemSource*  limit  = bucket + FT_MEM_SOURCE_BUCKETS;
       FT_MemSource*  sources;
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftdebug.c b/qtbase/src/3rdparty/freetype/src/base/ftdebug.c
index 62cf680b01..648fff44ed 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftdebug.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftdebug.c
@@ -4,7 +4,7 @@
  *
  *   Debugging and logging component (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -42,7 +42,53 @@
 
 
 #include <freetype/freetype.h>
+#include <freetype/ftlogging.h>
 #include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+
+
+#ifdef FT_DEBUG_LOGGING
+
+  /**************************************************************************
+   *
+   * Variables used to control logging.
+   *
+   * 1. `ft_default_trace_level` stores the value of trace levels, which are
+   *    provided to FreeType using the `FT2_DEBUG` environment variable.
+   *
+   * 2. `ft_fileptr` stores the `FILE*` handle.
+   *
+   * 3. `ft_component` is a string that holds the name of `FT_COMPONENT`.
+   *
+   * 4. The flag `ft_component_flag` prints the name of `FT_COMPONENT` along
+   *    with the actual log message if set to true.
+   *
+   * 5. The flag `ft_timestamp_flag` prints time along with the actual log
+   *    message if set to ture.
+   *
+   * 6. `ft_have_newline_char` is used to differentiate between a log
+   *    message with and without a trailing newline character.
+   *
+   * 7. `ft_custom_trace_level` stores the custom trace level value, which
+   *    is provided by the user at run-time.
+   *
+   * We use `static` to avoid 'unused variable' warnings.
+   *
+   */
+  static const char*  ft_default_trace_level = NULL;
+  static FILE*        ft_fileptr             = NULL;
+  static const char*  ft_component           = NULL;
+  static FT_Bool      ft_component_flag      = FALSE;
+  static FT_Bool      ft_timestamp_flag      = FALSE;
+  static FT_Bool      ft_have_newline_char   = TRUE;
+  static const char*  ft_custom_trace_level  = NULL;
+
+  /* declared in ftdebug.h */
+
+  dlg_handler            ft_default_log_handler = NULL;
+  FT_Custom_Log_Handler  custom_output_handler  = NULL;
+
+#endif /* FT_DEBUG_LOGGING */
 
 
 #ifdef FT_DEBUG_LEVEL_ERROR
@@ -106,7 +152,6 @@
 #endif /* FT_DEBUG_LEVEL_ERROR */
 
 
-
 #ifdef FT_DEBUG_LEVEL_TRACE
 
   /* array of trace levels, initialized to 0; */
@@ -195,8 +240,17 @@
   FT_BASE_DEF( void )
   ft_debug_init( void )
   {
-    const char*  ft2_debug = ft_getenv( "FT2_DEBUG" );
+    const char*  ft2_debug = NULL;
+
 
+#ifdef FT_DEBUG_LOGGING
+    if ( ft_custom_trace_level != NULL )
+      ft2_debug = ft_custom_trace_level;
+    else
+      ft2_debug = ft_default_trace_level;
+#else
+    ft2_debug = ft_getenv( "FT2_DEBUG" );
+#endif
 
     if ( ft2_debug )
     {
@@ -210,6 +264,49 @@
         if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
           continue;
 
+#ifdef FT_DEBUG_LOGGING
+
+        /* check extra arguments for logging */
+        if ( *p == '-' )
+        {
+          const char*  r = ++p;
+
+
+          if ( *r == 'v' )
+          {
+            const char*  s = ++r;
+
+
+            ft_component_flag = TRUE;
+
+            if ( *s == 't' )
+            {
+              ft_timestamp_flag = TRUE;
+              p++;
+            }
+
+            p++;
+          }
+
+          else if ( *r == 't' )
+          {
+            const char*  s = ++r;
+
+
+            ft_timestamp_flag = TRUE;
+
+            if ( *s == 'v' )
+            {
+              ft_component_flag = TRUE;
+              p++;
+            }
+
+            p++;
+          }
+        }
+
+#endif /* FT_DEBUG_LOGGING */
+
         /* read toggle name, followed by ':' */
         q = p;
         while ( *p && *p != ':' )
@@ -311,8 +408,237 @@
     /* nothing */
   }
 
-
 #endif /* !FT_DEBUG_LEVEL_TRACE */
 
 
+#ifdef FT_DEBUG_LOGGING
+
+  /**************************************************************************
+   *
+   * Initialize and de-initialize 'dlg' library.
+   *
+   */
+
+  FT_BASE_DEF( void )
+  ft_logging_init( void )
+  {
+    ft_default_log_handler = ft_log_handler;
+    ft_default_trace_level = ft_getenv( "FT2_DEBUG" );
+
+    if ( ft_getenv( "FT_LOGGING_FILE" ) )
+      ft_fileptr = ft_fopen( ft_getenv( "FT_LOGGING_FILE" ), "w" );
+    else
+      ft_fileptr = stderr;
+
+    ft_debug_init();
+
+    /* Set the default output handler for 'dlg'. */
+    dlg_set_handler( ft_default_log_handler, NULL );
+  }
+
+
+  FT_BASE_DEF( void )
+  ft_logging_deinit( void )
+  {
+    if ( ft_fileptr != stderr )
+      ft_fclose( ft_fileptr );
+  }
+
+
+  /**************************************************************************
+   *
+   * An output log handler for FreeType.
+   *
+   */
+  FT_BASE_DEF( void )
+  ft_log_handler( const struct dlg_origin*  origin,
+                  const char*               string,
+                  void*                     data )
+  {
+    char         features_buf[128];
+    char*        bufp = features_buf;
+
+    FT_UNUSED( data );
+
+
+    if ( ft_have_newline_char )
+    {
+      const char*  features        = NULL;
+      size_t       features_length = 0;
+
+
+#define FEATURES_TIMESTAMP            "[%h:%m] "
+#define FEATURES_COMPONENT            "[%t] "
+#define FEATURES_TIMESTAMP_COMPONENT  "[%h:%m %t] "
+
+      if ( ft_timestamp_flag && ft_component_flag )
+      {
+        features        = FEATURES_TIMESTAMP_COMPONENT;
+        features_length = sizeof ( FEATURES_TIMESTAMP_COMPONENT );
+      }
+      else if ( ft_timestamp_flag )
+      {
+        features        = FEATURES_TIMESTAMP;
+        features_length = sizeof ( FEATURES_TIMESTAMP );
+      }
+      else if ( ft_component_flag )
+      {
+        features        = FEATURES_COMPONENT;
+        features_length = sizeof ( FEATURES_COMPONENT );
+      }
+
+      if ( ft_component_flag || ft_timestamp_flag )
+      {
+        ft_strncpy( features_buf, features, features_length );
+        bufp += features_length - 1;
+      }
+
+      if ( ft_component_flag )
+      {
+        size_t  tag_length = ft_strlen( *origin->tags );
+        size_t  i;
+
+
+        /* To vertically align tracing messages we compensate the */
+        /* different FT_COMPONENT string lengths by inserting an  */
+        /* appropriate amount of space characters.                */
+        for ( i = 0;
+              i < FT_MAX_TRACE_LEVEL_LENGTH - tag_length;
+              i++ )
+          *bufp++ = ' ';
+      }
+    }
+
+    /* Finally add the format string for the tracing message. */
+    *bufp++ = '%';
+    *bufp++ = 'c';
+    *bufp   = '\0';
+
+    dlg_generic_outputf_stream( ft_fileptr,
+                                (const char*)features_buf,
+                                origin,
+                                string,
+                                dlg_default_output_styles,
+                                true );
+
+    if ( ft_strrchr( string, '\n' ) )
+      ft_have_newline_char = TRUE;
+    else
+      ft_have_newline_char = FALSE;
+  }
+
+
+  /* documentation is in ftdebug.h */
+  FT_BASE_DEF( void )
+  ft_add_tag( const char*  tag )
+  {
+    ft_component = tag;
+
+    dlg_add_tag( tag, NULL );
+  }
+
+
+  /* documentation is in ftdebug.h */
+  FT_BASE_DEF( void )
+  ft_remove_tag( const char*  tag )
+  {
+    dlg_remove_tag( tag, NULL );
+  }
+
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Level( const char*  level )
+  {
+    ft_component_flag     = FALSE;
+    ft_timestamp_flag     = FALSE;
+    ft_custom_trace_level = level;
+
+    ft_debug_init();
+  }
+
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Default_Level( void )
+  {
+    ft_component_flag     = FALSE;
+    ft_timestamp_flag     = FALSE;
+    ft_custom_trace_level = NULL;
+
+    ft_debug_init();
+  }
+
+
+  /**************************************************************************
+   *
+   * Functions to handle a custom log handler.
+   *
+   */
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Log_Handler( FT_Custom_Log_Handler  handler )
+  {
+    custom_output_handler = handler;
+  }
+
+
+  /* documentation is in ftlogging.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Default_Log_Handler( void )
+  {
+    custom_output_handler = NULL;
+  }
+
+
+  /* documentation is in ftdebug.h */
+  FT_BASE_DEF( void )
+  FT_Logging_Callback( const char*  fmt,
+                       ... )
+  {
+    va_list  ap;
+
+
+    va_start( ap, fmt );
+    custom_output_handler( ft_component, fmt, ap );
+    va_end( ap );
+  }
+
+#else /* !FT_DEBUG_LOGGING */
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Level( const char*  level )
+  {
+    FT_UNUSED( level );
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_Trace_Set_Default_Level( void )
+  {
+    /* nothing */
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Log_Handler( FT_Custom_Log_Handler  handler )
+  {
+    FT_UNUSED( handler );
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_Set_Default_Log_Handler( void )
+  {
+    /* nothing */
+  }
+
+#endif /* !FT_DEBUG_LOGGING */
+
+
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/base/fterrors.c b/qtbase/src/3rdparty/freetype/src/base/fterrors.c
index eba9e76563..5846fefc91 100644
--- a/qtbase/src/3rdparty/freetype/src/base/fterrors.c
+++ b/qtbase/src/3rdparty/freetype/src/base/fterrors.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for error code handling.
  *
- * Copyright (C) 2018-2020 by
+ * Copyright (C) 2018-2022 by
  * Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftfntfmt.c b/qtbase/src/3rdparty/freetype/src/base/ftfntfmt.c
index a45317e797..e69c1e0684 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftfntfmt.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftfntfmt.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file for font formats (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftfstype.c b/qtbase/src/3rdparty/freetype/src/base/ftfstype.c
index bca548fc56..009d58c57d 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftfstype.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftfstype.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file to access FSType data (body).
  *
- * Copyright (C) 2008-2020 by
+ * Copyright (C) 2008-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftgasp.c b/qtbase/src/3rdparty/freetype/src/base/ftgasp.c
index eed05a3265..7567e3077a 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftgasp.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftgasp.c
@@ -4,7 +4,7 @@
  *
  *   Access of TrueType's `gasp' table (body).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftgloadr.c b/qtbase/src/3rdparty/freetype/src/base/ftgloadr.c
index 05fc7692bb..f05abdee81 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftgloadr.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftgloadr.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph loader (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftglyph.c b/qtbase/src/3rdparty/freetype/src/base/ftglyph.c
index 825eba2c4d..571dca1a96 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftglyph.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftglyph.c
@@ -4,7 +4,7 @@
  *
  *   FreeType convenience functions to handle glyphs (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -34,6 +34,7 @@
 #include <freetype/ftoutln.h>
 #include <freetype/ftbitmap.h>
 #include <freetype/internal/ftobjs.h>
+#include <freetype/otsvg.h>
 
 #include "ftbase.h"
 
@@ -277,6 +278,240 @@
   )
 
 
+#ifdef FT_CONFIG_OPTION_SVG
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****   FT_SvgGlyph support                                           ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  FT_CALLBACK_DEF( FT_Error )
+  ft_svg_glyph_init( FT_Glyph      svg_glyph,
+                     FT_GlyphSlot  slot )
+  {
+    FT_ULong         doc_length;
+    FT_SVG_Document  document;
+    FT_SvgGlyph      glyph = (FT_SvgGlyph)svg_glyph;
+
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = FT_GLYPH( glyph )->library->memory;
+
+
+    if ( slot->format != FT_GLYPH_FORMAT_SVG )
+    {
+      error = FT_THROW( Invalid_Glyph_Format );
+      goto Exit;
+    }
+
+    if ( slot->other == NULL )
+    {
+      error = FT_THROW( Invalid_Slot_Handle );
+      goto Exit;
+    }
+
+    document = (FT_SVG_Document)slot->other;
+
+    if ( document->svg_document_length == 0 )
+    {
+      error = FT_THROW( Invalid_Slot_Handle );
+      goto Exit;
+    }
+
+    /* allocate a new document */
+    doc_length = document->svg_document_length;
+    if ( FT_QALLOC( glyph->svg_document, doc_length ) )
+      goto Exit;
+    glyph->svg_document_length = doc_length;
+
+    glyph->glyph_index = slot->glyph_index;
+
+    glyph->metrics      = document->metrics;
+    glyph->units_per_EM = document->units_per_EM;
+
+    glyph->start_glyph_id = document->start_glyph_id;
+    glyph->end_glyph_id   = document->end_glyph_id;
+
+    glyph->transform = document->transform;
+    glyph->delta     = document->delta;
+
+    /* copy the document into glyph */
+    FT_MEM_COPY( glyph->svg_document, document->svg_document, doc_length );
+
+  Exit:
+    return error;
+  }
+
+
+  FT_CALLBACK_DEF( void )
+  ft_svg_glyph_done( FT_Glyph  svg_glyph )
+  {
+    FT_SvgGlyph  glyph  = (FT_SvgGlyph)svg_glyph;
+    FT_Memory    memory = svg_glyph->library->memory;
+
+
+    /* just free the memory */
+    FT_FREE( glyph->svg_document );
+  }
+
+
+  FT_CALLBACK_DEF( FT_Error )
+  ft_svg_glyph_copy( FT_Glyph  svg_source,
+                     FT_Glyph  svg_target )
+  {
+    FT_SvgGlyph  source = (FT_SvgGlyph)svg_source;
+    FT_SvgGlyph  target = (FT_SvgGlyph)svg_target;
+
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = FT_GLYPH( source )->library->memory;
+
+
+    if ( svg_source->format != FT_GLYPH_FORMAT_SVG )
+    {
+      error = FT_THROW( Invalid_Glyph_Format );
+      goto Exit;
+    }
+
+    if ( source->svg_document_length == 0 )
+    {
+      error = FT_THROW( Invalid_Slot_Handle );
+      goto Exit;
+    }
+
+    target->glyph_index = source->glyph_index;
+
+    target->svg_document_length = source->svg_document_length;
+
+    target->metrics      = source->metrics;
+    target->units_per_EM = source->units_per_EM;
+
+    target->start_glyph_id = source->start_glyph_id;
+    target->end_glyph_id   = source->end_glyph_id;
+
+    target->transform = source->transform;
+    target->delta     = source->delta;
+
+    /* allocate space for the SVG document */
+    if ( FT_QALLOC( target->svg_document, target->svg_document_length ) )
+      goto Exit;
+
+    /* copy the document */
+    FT_MEM_COPY( target->svg_document,
+                 source->svg_document,
+                 target->svg_document_length );
+
+  Exit:
+    return error;
+  }
+
+
+  FT_CALLBACK_DEF( void )
+  ft_svg_glyph_transform( FT_Glyph          svg_glyph,
+                          const FT_Matrix*  _matrix,
+                          const FT_Vector*  _delta )
+  {
+    FT_SvgGlyph  glyph  = (FT_SvgGlyph)svg_glyph;
+    FT_Matrix*   matrix = (FT_Matrix*)_matrix;
+    FT_Vector*   delta  = (FT_Vector*)_delta;
+
+    FT_Matrix  tmp_matrix;
+    FT_Vector  tmp_delta;
+
+    FT_Matrix  a, b;
+    FT_Pos     x, y;
+
+
+    if ( !matrix )
+    {
+      tmp_matrix.xx = 0x10000;
+      tmp_matrix.xy = 0;
+      tmp_matrix.yx = 0;
+      tmp_matrix.yy = 0x10000;
+
+      matrix = &tmp_matrix;
+    }
+
+    if ( !delta )
+    {
+      tmp_delta.x = 0;
+      tmp_delta.y = 0;
+
+      delta = &tmp_delta;
+    }
+
+    a = glyph->transform;
+    b = *matrix;
+    FT_Matrix_Multiply( &b, &a );
+
+    x = ADD_LONG( ADD_LONG( FT_MulFix( matrix->xx, glyph->delta.x ),
+                            FT_MulFix( matrix->xy, glyph->delta.y ) ),
+                  delta->x );
+    y = ADD_LONG( ADD_LONG( FT_MulFix( matrix->yx, glyph->delta.x ),
+                            FT_MulFix( matrix->yy, glyph->delta.y ) ),
+                  delta->y );
+
+    glyph->delta.x = x;
+    glyph->delta.y = y;
+
+    glyph->transform = a;
+  }
+
+
+  FT_CALLBACK_DEF( FT_Error )
+  ft_svg_glyph_prepare( FT_Glyph      svg_glyph,
+                        FT_GlyphSlot  slot )
+  {
+    FT_SvgGlyph  glyph = (FT_SvgGlyph)svg_glyph;
+
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = svg_glyph->library->memory;
+
+    FT_SVG_Document  document = NULL;
+
+
+    if ( FT_NEW( document ) )
+      return error;
+
+    document->svg_document        = glyph->svg_document;
+    document->svg_document_length = glyph->svg_document_length;
+
+    document->metrics      = glyph->metrics;
+    document->units_per_EM = glyph->units_per_EM;
+
+    document->start_glyph_id = glyph->start_glyph_id;
+    document->end_glyph_id   = glyph->end_glyph_id;
+
+    document->transform = glyph->transform;
+    document->delta     = glyph->delta;
+
+    slot->format      = FT_GLYPH_FORMAT_SVG;
+    slot->glyph_index = glyph->glyph_index;
+    slot->other       = document;
+
+    return error;
+  }
+
+
+  FT_DEFINE_GLYPH(
+    ft_svg_glyph_class,
+
+    sizeof ( FT_SvgGlyphRec ),
+    FT_GLYPH_FORMAT_SVG,
+
+    ft_svg_glyph_init,      /* FT_Glyph_InitFunc       glyph_init      */
+    ft_svg_glyph_done,      /* FT_Glyph_DoneFunc       glyph_done      */
+    ft_svg_glyph_copy,      /* FT_Glyph_CopyFunc       glyph_copy      */
+    ft_svg_glyph_transform, /* FT_Glyph_TransformFunc  glyph_transform */
+    NULL,                   /* FT_Glyph_GetBBoxFunc    glyph_bbox      */
+    ft_svg_glyph_prepare    /* FT_Glyph_PrepareFunc    glyph_prepare   */
+  )
+
+#endif /* FT_CONFIG_OPTION_SVG */
+
+
   /*************************************************************************/
   /*************************************************************************/
   /****                                                                 ****/
@@ -377,6 +612,12 @@
     else if ( format == FT_GLYPH_FORMAT_OUTLINE )
       clazz = &ft_outline_glyph_class;
 
+#ifdef FT_CONFIG_OPTION_SVG
+    /* if it is an SVG glyph */
+    else if ( format == FT_GLYPH_FORMAT_SVG )
+      clazz = &ft_svg_glyph_class;
+#endif
+
     else
     {
       /* try to find a renderer that supports the glyph image format */
@@ -453,9 +694,9 @@
   /* documentation is in ftglyph.h */
 
   FT_EXPORT_DEF( FT_Error )
-  FT_Glyph_Transform( FT_Glyph    glyph,
-                      FT_Matrix*  matrix,
-                      FT_Vector*  delta )
+  FT_Glyph_Transform( FT_Glyph          glyph,
+                      const FT_Matrix*  matrix,
+                      const FT_Vector*  delta )
   {
     FT_Error  error = FT_Err_Ok;
 
@@ -533,10 +774,10 @@
   /* documentation is in ftglyph.h */
 
   FT_EXPORT_DEF( FT_Error )
-  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
-                      FT_Render_Mode  render_mode,
-                      FT_Vector*      origin,
-                      FT_Bool         destroy )
+  FT_Glyph_To_Bitmap( FT_Glyph*         the_glyph,
+                      FT_Render_Mode    render_mode,
+                      const FT_Vector*  origin,
+                      FT_Bool           destroy )
   {
     FT_GlyphSlotRec           dummy;
     FT_GlyphSlot_InternalRec  dummy_internal;
@@ -585,7 +826,7 @@
 #if 1
     /* if `origin' is set, translate the glyph image */
     if ( origin )
-      FT_Glyph_Transform( glyph, 0, origin );
+      FT_Glyph_Transform( glyph, NULL, origin );
 #else
     FT_UNUSED( origin );
 #endif
@@ -595,6 +836,16 @@
     if ( !error )
       error = FT_Render_Glyph_Internal( glyph->library, &dummy, render_mode );
 
+#ifdef FT_CONFIG_OPTION_SVG
+    if ( clazz == &ft_svg_glyph_class )
+    {
+      FT_Memory  memory = library->memory;
+
+
+      FT_FREE( dummy.other );
+    }
+#endif
+
 #if 1
     if ( !destroy && origin )
     {
@@ -603,7 +854,7 @@
 
       v.x = -origin->x;
       v.y = -origin->y;
-      FT_Glyph_Transform( glyph, 0, &v );
+      FT_Glyph_Transform( glyph, NULL, &v );
     }
 #endif
 
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftgxval.c b/qtbase/src/3rdparty/freetype/src/base/ftgxval.c
index f04df14526..5598a11c6d 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftgxval.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftgxval.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Masatake YAMATO, Redhat K.K,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/base/fthash.c b/qtbase/src/3rdparty/freetype/src/base/fthash.c
index 449b03a5c1..313bbbb4b2 100644
--- a/qtbase/src/3rdparty/freetype/src/base/fthash.c
+++ b/qtbase/src/3rdparty/freetype/src/base/fthash.c
@@ -243,7 +243,7 @@
     nn = *bp;
     if ( !nn )
     {
-      if ( FT_NEW( nn ) )
+      if ( FT_QNEW( nn ) )
         goto Exit;
       *bp = nn;
 
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftinit.c b/qtbase/src/3rdparty/freetype/src/base/ftinit.c
index 0acc75e460..0f29a6017e 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftinit.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftinit.c
@@ -4,7 +4,7 @@
  *
  *   FreeType initialization layer (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -202,6 +202,10 @@
     FT_Memory  memory;
 
 
+#ifdef FT_DEBUG_LOGGING
+    ft_logging_init();
+#endif
+
     /* check of `alibrary' delayed to `FT_New_Library' */
 
     /* First of all, allocate a new system object -- this function is part */
@@ -248,6 +252,10 @@
     /* discard memory manager */
     FT_Done_Memory( memory );
 
+#ifdef FT_DEBUG_LOGGING
+    ft_logging_deinit();
+#endif
+
     return FT_Err_Ok;
   }
 
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftlcdfil.c b/qtbase/src/3rdparty/freetype/src/base/ftlcdfil.c
index 1e84dbc894..e72f6d668d 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftlcdfil.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftlcdfil.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for color filtering of subpixel bitmap glyphs (body).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -32,7 +32,7 @@
 
 
   /* add padding according to filter weights */
-  FT_BASE_DEF (void)
+  FT_BASE_DEF( void )
   ft_lcd_padding( FT_BBox*        cbox,
                   FT_GlyphSlot    slot,
                   FT_Render_Mode  mode )
@@ -357,7 +357,7 @@
 
   FT_EXPORT_DEF( FT_Error )
   FT_Library_SetLcdGeometry( FT_Library  library,
-                             FT_Vector*  sub )
+                             FT_Vector   sub[3] )
   {
     FT_UNUSED( library );
     FT_UNUSED( sub );
@@ -368,7 +368,7 @@
 #else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
 
   /* add padding to accommodate outline shifts */
-  FT_BASE_DEF (void)
+  FT_BASE_DEF( void )
   ft_lcd_padding( FT_BBox*        cbox,
                   FT_GlyphSlot    slot,
                   FT_Render_Mode  mode )
@@ -428,7 +428,7 @@
 
     ft_memcpy( library->lcd_geometry, sub, 3 * sizeof( FT_Vector ) );
 
-    return FT_THROW( Unimplemented_Feature );
+    return FT_Err_Ok;
   }
 
 #endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftmac.c b/qtbase/src/3rdparty/freetype/src/base/ftmac.c
index 55a631fd74..21f1894ad3 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftmac.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftmac.c
@@ -8,7 +8,7 @@
  * This file is for Mac OS X only; see builds/mac/ftoldmac.c for
  * classic platforms built by MPW.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -105,7 +105,7 @@
   /* Don't want warnings about our own use of deprecated functions. */
 #define FT_DEPRECATED_ATTRIBUTE
 
-#include FT_MAC_H
+#include <freetype/ftmac.h>
 
 #ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */
 #define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
@@ -314,7 +314,7 @@
                                     NULL, NULL, NULL ) )
       return ( OSType ) 0;
 
-    return ((FInfo *)(info.finderInfo))->fdType;
+    return ( (FInfo *)( info.finderInfo ) )->fdType;
   }
 
 
@@ -462,7 +462,7 @@
 
         if ( ps_name_len != 0 )
         {
-          ft_memcpy(ps_name, names[0] + 1, ps_name_len);
+          ft_memcpy( ps_name, names[0] + 1, ps_name_len );
           ps_name[ps_name_len] = 0;
         }
         if ( style->indexes[face_index] > 1 &&
@@ -560,7 +560,7 @@
     if ( lwfn_file_name[0] )
     {
       err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
-                                 buff, sizeof ( buff )  );
+                                 buff, sizeof ( buff ) );
       if ( !err )
         have_lwfn = 1;
     }
@@ -631,7 +631,7 @@
       old_total_size = total_size;
     }
 
-    if ( FT_ALLOC( buffer, (FT_Long)total_size ) )
+    if ( FT_QALLOC( buffer, (FT_Long)total_size ) )
       goto Error;
 
     /* Second pass: append all POST data to the buffer, add PFB fields. */
@@ -752,7 +752,7 @@
     if ( FT_MAC_RFORK_MAX_LEN < sfnt_size )
       return FT_THROW( Array_Too_Large );
 
-    if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
+    if ( FT_QALLOC( sfnt_data, (FT_Long)sfnt_size ) )
     {
       ReleaseResource( sfnt );
       return error;
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftmm.c b/qtbase/src/3rdparty/freetype/src/base/ftmm.c
index 9a702b9933..dbbd87c9b9 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftmm.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftmm.c
@@ -4,7 +4,7 @@
  *
  *   Multiple Master font support (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftobjs.c b/qtbase/src/3rdparty/freetype/src/base/ftobjs.c
index c060bbbc87..eeda69c3ed 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftobjs.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType private base classes (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -19,6 +19,7 @@
 #include <freetype/ftlist.h>
 #include <freetype/ftoutln.h>
 #include <freetype/ftfntfmt.h>
+#include <freetype/otsvg.h>
 
 #include <freetype/internal/ftvalid.h>
 #include <freetype/internal/ftobjs.h>
@@ -27,6 +28,7 @@
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/sfnt.h>          /* for SFNT_Load_Table_Func */
 #include <freetype/internal/psaux.h>         /* for PS_Driver            */
+#include <freetype/internal/svginterface.h>
 
 #include <freetype/tttables.h>
 #include <freetype/tttags.h>
@@ -78,6 +80,9 @@
 #pragma warning( pop )
 #endif
 
+  /* This array must stay in sync with the @FT_Pixel_Mode enumeration */
+  /* (in file `ftimage.h`).                                           */
+
   static const char* const  pixel_modes[] =
   {
     "none",
@@ -87,7 +92,8 @@
     "gray 4-bit bitmap",
     "LCD 8-bit bitmap",
     "vertical LCD 8-bit bitmap",
-    "BGRA 32-bit color image bitmap"
+    "BGRA 32-bit color image bitmap",
+    "SDF 8-bit bitmap"
   };
 
 #endif /* FT_DEBUG_LEVEL_TRACE */
@@ -193,6 +199,7 @@
     FT_Error   error;
     FT_Memory  memory;
     FT_Stream  stream = NULL;
+    FT_UInt    mode;
 
 
     *astream = NULL;
@@ -204,49 +211,56 @@
       return FT_THROW( Invalid_Argument );
 
     memory = library->memory;
+    mode   = args->flags &
+               ( FT_OPEN_MEMORY | FT_OPEN_STREAM | FT_OPEN_PATHNAME );
 
-    if ( FT_NEW( stream ) )
-      goto Exit;
-
-    stream->memory = memory;
-
-    if ( args->flags & FT_OPEN_MEMORY )
+    if ( mode == FT_OPEN_MEMORY )
     {
       /* create a memory-based stream */
+      if ( FT_NEW( stream ) )
+        goto Exit;
+
       FT_Stream_OpenMemory( stream,
                             (const FT_Byte*)args->memory_base,
                             (FT_ULong)args->memory_size );
+      stream->memory = memory;
     }
 
 #ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
 
-    else if ( args->flags & FT_OPEN_PATHNAME )
+    else if ( mode == FT_OPEN_PATHNAME )
     {
       /* create a normal system stream */
+      if ( FT_NEW( stream ) )
+        goto Exit;
+
+      stream->memory = memory;
       error = FT_Stream_Open( stream, args->pathname );
-      stream->pathname.pointer = args->pathname;
+      if ( error )
+        FT_FREE( stream );
     }
-    else if ( ( args->flags & FT_OPEN_STREAM ) && args->stream )
+    else if ( ( mode == FT_OPEN_STREAM ) && args->stream )
     {
       /* use an existing, user-provided stream */
 
       /* in this case, we do not need to allocate a new stream object */
       /* since the caller is responsible for closing it himself       */
-      FT_FREE( stream );
-      stream = args->stream;
+      stream         = args->stream;
+      stream->memory = memory;
+      error          = FT_Err_Ok;
     }
 
 #endif
 
     else
+    {
       error = FT_THROW( Invalid_Argument );
+      if ( ( args->flags & FT_OPEN_STREAM ) && args->stream )
+        FT_Stream_Close( args->stream );
+    }
 
-    if ( error )
-      FT_FREE( stream );
-    else
-      stream->memory = memory;  /* just to be certain */
-
-    *astream = stream;
+    if ( !error )
+      *astream       = stream;
 
   Exit:
     return error;
@@ -316,6 +330,19 @@
     if ( !error && clazz->init_slot )
       error = clazz->init_slot( slot );
 
+#ifdef FT_CONFIG_OPTION_SVG
+    /* if SVG table exists, allocate the space in `slot->other` */
+    if ( slot->face->face_flags & FT_FACE_FLAG_SVG )
+    {
+      FT_SVG_Document  document = NULL;
+
+
+      if ( FT_NEW( document ) )
+        goto Exit;
+      slot->other = document;
+    }
+#endif
+
   Exit:
     return error;
   }
@@ -360,7 +387,18 @@
     FT_Pos   width, height, pitch;
 
 
-    if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
+    if ( slot->format == FT_GLYPH_FORMAT_SVG )
+    {
+      FT_Module    module;
+      SVG_Service  svg_service;
+
+
+      module      = FT_Get_Module( slot->library, "ot-svg" );
+      svg_service = (SVG_Service)module->clazz->module_interface;
+
+      return (FT_Bool)svg_service->preset_slot( module, slot, FALSE );
+    }
+    else if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
       return 1;
 
     if ( origin )
@@ -523,7 +561,7 @@
     else
       slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
 
-    (void)FT_ALLOC( slot->bitmap.buffer, size );
+    FT_MEM_ALLOC( slot->bitmap.buffer, size );
     return error;
   }
 
@@ -535,6 +573,8 @@
     ft_glyphslot_free_bitmap( slot );
 
     /* clear all public fields in the glyph slot */
+    slot->glyph_index = 0;
+
     FT_ZERO( &slot->metrics );
     FT_ZERO( &slot->outline );
 
@@ -550,11 +590,32 @@
     slot->subglyphs     = NULL;
     slot->control_data  = NULL;
     slot->control_len   = 0;
-    slot->other         = NULL;
-    slot->format        = FT_GLYPH_FORMAT_NONE;
+
+#ifndef FT_CONFIG_OPTION_SVG
+    slot->other = NULL;
+#else
+    if ( !( slot->face->face_flags & FT_FACE_FLAG_SVG ) )
+      slot->other = NULL;
+    else
+    {
+      if ( slot->internal->flags & FT_GLYPH_OWN_GZIP_SVG )
+      {
+        FT_Memory        memory = slot->face->memory;
+        FT_SVG_Document  doc    = (FT_SVG_Document)slot->other;
+
+
+        FT_FREE( doc->svg_document );
+        slot->internal->load_flags &= ~FT_GLYPH_OWN_GZIP_SVG;
+      }
+    }
+#endif
+
+    slot->format = FT_GLYPH_FORMAT_NONE;
 
     slot->linearHoriAdvance = 0;
     slot->linearVertAdvance = 0;
+    slot->advance.x         = 0;
+    slot->advance.y         = 0;
     slot->lsb_delta         = 0;
     slot->rsb_delta         = 0;
   }
@@ -567,6 +628,23 @@
     FT_Driver_Class  clazz  = driver->clazz;
     FT_Memory        memory = driver->root.memory;
 
+#ifdef FT_CONFIG_OPTION_SVG
+    if ( slot->face->face_flags & FT_FACE_FLAG_SVG )
+    {
+      /* free memory in case SVG was there */
+      if ( slot->internal->flags & FT_GLYPH_OWN_GZIP_SVG )
+      {
+        FT_SVG_Document  doc = (FT_SVG_Document)slot->other;
+
+
+        FT_FREE( doc->svg_document );
+
+        slot->internal->flags &= ~FT_GLYPH_OWN_GZIP_SVG;
+      }
+
+      FT_FREE( slot->other );
+    }
+#endif
 
     if ( clazz->done_slot )
       clazz->done_slot( slot );
@@ -734,6 +812,29 @@
   }
 
 
+  /* documentation is in freetype.h */
+
+  FT_EXPORT_DEF( void )
+  FT_Get_Transform( FT_Face     face,
+                    FT_Matrix*  matrix,
+                    FT_Vector*  delta )
+  {
+    FT_Face_Internal  internal;
+
+
+    if ( !face )
+      return;
+
+    internal = face->internal;
+
+    if ( matrix )
+      *matrix = internal->transform_matrix;
+
+    if ( delta )
+      *delta = internal->transform_delta;
+  }
+
+
   static FT_Renderer
   ft_lookup_glyph_renderer( FT_GlyphSlot  slot );
 
@@ -819,6 +920,11 @@
     library = driver->root.library;
     hinter  = library->auto_hinter;
 
+    /* undefined scale means no scale */
+    if ( face->size->metrics.x_ppem == 0 ||
+         face->size->metrics.y_ppem == 0 )
+      load_flags |= FT_LOAD_NO_SCALE;
+
     /* resolve load flags dependencies */
 
     if ( load_flags & FT_LOAD_NO_RECURSE )
@@ -908,11 +1014,21 @@
       FT_AutoHinter_Interface  hinting;
 
 
-      /* try to load embedded bitmaps first if available            */
-      /*                                                            */
-      /* XXX: This is really a temporary hack that should disappear */
-      /*      promptly with FreeType 2.1!                           */
-      /*                                                            */
+      /* XXX: The use of the `FT_LOAD_XXX_ONLY` flags is not very */
+      /*      elegant.                                            */
+
+      /* try to load SVG documents if available */
+      if ( FT_HAS_SVG( face ) )
+      {
+        error = driver->clazz->load_glyph( slot, face->size,
+                                           glyph_index,
+                                           load_flags | FT_LOAD_SVG_ONLY );
+
+        if ( !error && slot->format == FT_GLYPH_FORMAT_SVG )
+          goto Load_Ok;
+      }
+
+      /* try to load embedded bitmaps if available */
       if ( FT_HAS_FIXED_SIZES( face )              &&
            ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
       {
@@ -1056,19 +1172,24 @@
 #ifdef FT_DEBUG_LEVEL_TRACE
     FT_TRACE5(( "FT_Load_Glyph: index %d, flags 0x%x\n",
                 glyph_index, load_flags ));
+    FT_TRACE5(( "  bitmap %dx%d %s, %s (mode %d)\n",
+                slot->bitmap.width,
+                slot->bitmap.rows,
+                slot->outline.points ?
+                  slot->bitmap.buffer ? "rendered"
+                                      : "preset"
+                                     :
+                  slot->internal->flags & FT_GLYPH_OWN_BITMAP ? "owned"
+                                                              : "unowned",
+                pixel_modes[slot->bitmap.pixel_mode],
+                slot->bitmap.pixel_mode ));
+    FT_TRACE5(( "\n" ));
     FT_TRACE5(( "  x advance: %f\n", slot->advance.x / 64.0 ));
     FT_TRACE5(( "  y advance: %f\n", slot->advance.y / 64.0 ));
     FT_TRACE5(( "  linear x advance: %f\n",
                 slot->linearHoriAdvance / 65536.0 ));
     FT_TRACE5(( "  linear y advance: %f\n",
                 slot->linearVertAdvance / 65536.0 ));
-    FT_TRACE5(( "\n" ));
-    FT_TRACE5(( "  bitmap %dx%d, %s (mode %d)\n",
-                slot->bitmap.width,
-                slot->bitmap.rows,
-                pixel_modes[slot->bitmap.pixel_mode],
-                slot->bitmap.pixel_mode ));
-    FT_TRACE5(( "\n" ));
 
     {
       FT_Glyph_Metrics*  metrics = &slot->metrics;
@@ -1553,7 +1674,6 @@
     FT_FREE( stream->base );
 
     stream->size  = 0;
-    stream->base  = NULL;
     stream->close = NULL;
   }
 
@@ -1782,7 +1902,7 @@
     if ( error )
       goto Exit;
 
-    if ( FT_ALLOC( sfnt_ps, (FT_Long)length ) )
+    if ( FT_QALLOC( sfnt_ps, (FT_Long)length ) )
       goto Exit;
 
     error = FT_Stream_Read( stream, (FT_Byte *)sfnt_ps, length );
@@ -1892,7 +2012,7 @@
       goto Exit;
     }
 
-    if ( FT_ALLOC( pfb_data, (FT_Long)pfb_len + 2 ) )
+    if ( FT_QALLOC( pfb_data, (FT_Long)pfb_len + 2 ) )
       goto Exit;
 
     pfb_data[0] = 0x80;
@@ -1956,7 +2076,7 @@
       {
         FT_TRACE3(( "    Write POST fragment #%d header (4-byte) to buffer"
                     " %p + 0x%08lx\n",
-                    i, pfb_data, pfb_lenpos ));
+                    i, (void*)pfb_data, pfb_lenpos ));
 
         if ( pfb_lenpos + 3 > pfb_len + 2 )
           goto Exit2;
@@ -1971,7 +2091,7 @@
 
         FT_TRACE3(( "    Write POST fragment #%d header (6-byte) to buffer"
                     " %p + 0x%08lx\n",
-                    i, pfb_data, pfb_pos ));
+                    i, (void*)pfb_data, pfb_pos ));
 
         if ( pfb_pos + 6 > pfb_len + 2 )
           goto Exit2;
@@ -1994,7 +2114,7 @@
 
       FT_TRACE3(( "    Load POST fragment #%d (%ld byte) to buffer"
                   " %p + 0x%08lx\n",
-                  i, rlen, pfb_data, pfb_pos ));
+                  i, rlen, (void*)pfb_data, pfb_pos ));
 
       error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen );
       if ( error )
@@ -2092,7 +2212,7 @@
     if ( error )
       goto Exit;
 
-    if ( FT_ALLOC( sfnt_data, rlen ) )
+    if ( FT_QALLOC( sfnt_data, rlen ) )
       return error;
     error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, (FT_ULong)rlen );
     if ( error ) {
@@ -2407,6 +2527,16 @@
 #endif
 
 
+    /* only use lower 31 bits together with sign bit */
+    if ( face_index > 0 )
+      face_index &= 0x7FFFFFFFL;
+    else
+    {
+      face_index  = -face_index;
+      face_index &= 0x7FFFFFFFL;
+      face_index  = -face_index;
+    }
+
 #ifdef FT_DEBUG_LEVEL_TRACE
     FT_TRACE3(( "FT_Open_Face: " ));
     if ( face_index < 0 )
@@ -2566,7 +2696,7 @@
     FT_TRACE4(( "FT_Open_Face: New face object, adding to list\n" ));
 
     /* add the face object to its driver's list */
-    if ( FT_NEW( node ) )
+    if ( FT_QNEW( node ) )
       goto Fail;
 
     node->data = face;
@@ -2681,10 +2811,10 @@
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( !error && face_index < 0 )
     {
-      FT_TRACE3(( "FT_Open_Face: The font has %ld face%s\n"
-                  "              and %ld named instance%s for face %ld\n",
+      FT_TRACE3(( "FT_Open_Face: The font has %ld face%s\n",
                   face->num_faces,
-                  face->num_faces == 1 ? "" : "s",
+                  face->num_faces == 1 ? "" : "s" ));
+      FT_TRACE3(( "              and %ld named instance%s for face %ld\n",
                   face->style_flags >> 16,
                   ( face->style_flags >> 16 ) == 1 ? "" : "s",
                   -face_index - 1 ));
@@ -2851,7 +2981,7 @@
     memory = face->memory;
 
     /* Allocate new size object and perform basic initialisation */
-    if ( FT_ALLOC( size, clazz->size_object_size ) || FT_NEW( node ) )
+    if ( FT_ALLOC( size, clazz->size_object_size ) || FT_QNEW( node ) )
       goto Exit;
 
     size->face = face;
@@ -3088,10 +3218,12 @@
   }
 
 
-  FT_BASE_DEF( void )
+  FT_BASE_DEF( FT_Error )
   FT_Request_Metrics( FT_Face          face,
                       FT_Size_Request  req )
   {
+    FT_Error  error = FT_Err_Ok;
+
     FT_Size_Metrics*  metrics;
 
 
@@ -3182,8 +3314,18 @@
         scaled_h = FT_MulFix( face->units_per_EM, metrics->y_scale );
       }
 
-      metrics->x_ppem = (FT_UShort)( ( scaled_w + 32 ) >> 6 );
-      metrics->y_ppem = (FT_UShort)( ( scaled_h + 32 ) >> 6 );
+      scaled_w = ( scaled_w + 32 ) >> 6;
+      scaled_h = ( scaled_h + 32 ) >> 6;
+      if ( scaled_w > (FT_Long)FT_USHORT_MAX ||
+           scaled_h > (FT_Long)FT_USHORT_MAX )
+      {
+        FT_ERROR(( "FT_Request_Metrics: Resulting ppem size too large\n" ));
+        error = FT_ERR( Invalid_Pixel_Size );
+        goto Exit;
+      }
+
+      metrics->x_ppem = (FT_UShort)scaled_w;
+      metrics->y_ppem = (FT_UShort)scaled_h;
 
       ft_recompute_scaled_metrics( face, metrics );
     }
@@ -3193,6 +3335,9 @@
       metrics->x_scale = 1L << 16;
       metrics->y_scale = 1L << 16;
     }
+
+  Exit:
+    return error;
   }
 
 
@@ -3256,7 +3401,7 @@
   FT_Request_Size( FT_Face          face,
                    FT_Size_Request  req )
   {
-    FT_Error         error = FT_Err_Ok;
+    FT_Error         error;
     FT_Driver_Class  clazz;
     FT_ULong         strike_index;
 
@@ -3264,6 +3409,9 @@
     if ( !face )
       return FT_THROW( Invalid_Face_Handle );
 
+    if ( !face->size )
+      return FT_THROW( Invalid_Size_Handle );
+
     if ( !req || req->width < 0 || req->height < 0 ||
          req->type >= FT_SIZE_REQUEST_TYPE_MAX )
       return FT_THROW( Invalid_Argument );
@@ -3292,13 +3440,15 @@
        */
       error = FT_Match_Size( face, req, 0, &strike_index );
       if ( error )
-        return error;
+        goto Exit;
 
       return FT_Select_Size( face, (FT_Int)strike_index );
     }
     else
     {
-      FT_Request_Metrics( face, req );
+      error = FT_Request_Metrics( face, req );
+      if ( error )
+        goto Exit;
 
       FT_TRACE5(( "FT_Request_Size:\n" ));
     }
@@ -3321,6 +3471,7 @@
     }
 #endif
 
+  Exit:
     return error;
   }
 
@@ -3645,9 +3796,9 @@
           FT_CharMap  last_charmap = face->charmaps[face->num_charmaps - 1];
 
 
-          if ( FT_RENEW_ARRAY( face->charmaps,
-                               face->num_charmaps,
-                               face->num_charmaps - 1 ) )
+          if ( FT_QRENEW_ARRAY( face->charmaps,
+                                face->num_charmaps,
+                                face->num_charmaps - 1 ) )
             return;
 
           /* remove it from our list of charmaps */
@@ -3679,7 +3830,7 @@
                FT_CharMap     charmap,
                FT_CMap       *acmap )
   {
-    FT_Error   error = FT_Err_Ok;
+    FT_Error   error;
     FT_Face    face;
     FT_Memory  memory;
     FT_CMap    cmap = NULL;
@@ -3704,9 +3855,9 @@
       }
 
       /* add it to our list of charmaps */
-      if ( FT_RENEW_ARRAY( face->charmaps,
-                           face->num_charmaps,
-                           face->num_charmaps + 1 ) )
+      if ( FT_QRENEW_ARRAY( face->charmaps,
+                            face->num_charmaps,
+                            face->num_charmaps + 1 ) )
         goto Fail;
 
       face->charmaps[face->num_charmaps++] = (FT_CharMap)cmap;
@@ -4400,7 +4551,7 @@
     FT_ListNode  node    = NULL;
 
 
-    if ( FT_NEW( node ) )
+    if ( FT_QNEW( node ) )
       goto Exit;
 
     {
@@ -4412,8 +4563,7 @@
       render->glyph_format = clazz->glyph_format;
 
       /* allocate raster object if needed */
-      if ( clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
-           clazz->raster_class->raster_new                )
+      if ( clazz->raster_class && clazz->raster_class->raster_new )
       {
         error = clazz->raster_class->raster_new( memory, &render->raster );
         if ( error )
@@ -4423,6 +4573,11 @@
         render->render        = clazz->render_glyph;
       }
 
+#ifdef FT_CONFIG_OPTION_SVG
+      if ( clazz->glyph_format == FT_GLYPH_FORMAT_SVG )
+        render->render = clazz->render_glyph;
+#endif
+
       /* add to list */
       node->data = module;
       FT_List_Add( &library->renderers, node );
@@ -4460,8 +4615,7 @@
 
 
       /* release raster object, if any */
-      if ( render->clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE &&
-           render->raster                                         )
+      if ( render->raster )
         render->clazz->raster_class->raster_done( render->raster );
 
       /* remove from list */
@@ -4556,9 +4710,6 @@
 
     switch ( slot->format )
     {
-    case FT_GLYPH_FORMAT_BITMAP:   /* already a bitmap, don't do anything */
-      break;
-
     default:
       if ( slot->internal->load_flags & FT_LOAD_COLOR )
       {
@@ -4646,7 +4797,7 @@
         else
           renderer = FT_Lookup_Renderer( library, slot->format, &node );
 
-        error = FT_ERR( Unimplemented_Feature );
+        error = FT_ERR( Cannot_Render_Glyph );
         while ( renderer )
         {
           error = renderer->render( renderer, slot, render_mode, NULL );
@@ -4662,6 +4813,11 @@
           /* format.                                               */
           renderer = FT_Lookup_Renderer( library, slot->format, &node );
         }
+
+        /* it is not an error if we cannot render a bitmap glyph */
+        if ( FT_ERR_EQ( error, Cannot_Render_Glyph ) &&
+             slot->format == FT_GLYPH_FORMAT_BITMAP  )
+          error = FT_Err_Ok;
       }
     }
 
@@ -4734,11 +4890,11 @@
 
     /* we use FT_TRACE7 in this block */
     if ( !error                               &&
-         ft_trace_levels[trace_checksum] >= 7 )
+         ft_trace_levels[trace_checksum] >= 7 &&
+         slot->bitmap.buffer                  )
     {
       if ( slot->bitmap.rows  < 128U &&
-           slot->bitmap.width < 128U &&
-           slot->bitmap.buffer       )
+           slot->bitmap.width < 128U )
       {
         int  rows  = (int)slot->bitmap.rows;
         int  width = (int)slot->bitmap.width;
@@ -5149,16 +5305,16 @@
 
     if ( cur == limit )
     {
-      FT_ERROR(( "%s: can't find module `%s'\n",
-                 func_name, module_name ));
+      FT_TRACE2(( "%s: can't find module `%s'\n",
+                  func_name, module_name ));
       return FT_THROW( Missing_Module );
     }
 
     /* check whether we have a service interface */
     if ( !cur[0]->clazz->get_interface )
     {
-      FT_ERROR(( "%s: module `%s' doesn't support properties\n",
-                 func_name, module_name ));
+      FT_TRACE2(( "%s: module `%s' doesn't support properties\n",
+                  func_name, module_name ));
       return FT_THROW( Unimplemented_Feature );
     }
 
@@ -5167,8 +5323,8 @@
                                               FT_SERVICE_ID_PROPERTIES );
     if ( !interface )
     {
-      FT_ERROR(( "%s: module `%s' doesn't support properties\n",
-                 func_name, module_name ));
+      FT_TRACE2(( "%s: module `%s' doesn't support properties\n",
+                  func_name, module_name ));
       return FT_THROW( Unimplemented_Feature );
     }
 
@@ -5181,8 +5337,8 @@
 
     if ( missing_func )
     {
-      FT_ERROR(( "%s: property service of module `%s' is broken\n",
-                 func_name, module_name ));
+      FT_TRACE2(( "%s: property service of module `%s' is broken\n",
+                  func_name, module_name ));
       return FT_THROW( Unimplemented_Feature );
     }
 
@@ -5292,10 +5448,12 @@
     if ( !memory || !alibrary )
       return FT_THROW( Invalid_Argument );
 
+#ifndef FT_DEBUG_LOGGING
 #ifdef FT_DEBUG_LEVEL_ERROR
     /* init debugging support */
     ft_debug_init();
-#endif
+#endif /* FT_DEBUG_LEVEL_ERROR */
+#endif /* !FT_DEBUG_LOGGING */
 
     /* first of all, allocate the library object */
     if ( FT_NEW( library ) )
@@ -5567,4 +5725,145 @@
   }
 
 
+  /* documentation is in freetype.h */
+
+  FT_EXPORT_DEF( FT_Bool )
+  FT_Get_Color_Glyph_Paint( FT_Face                  face,
+                            FT_UInt                  base_glyph,
+                            FT_Color_Root_Transform  root_transform,
+                            FT_OpaquePaint*          paint )
+  {
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !paint )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_colr_layer )
+      return sfnt->get_colr_glyph_paint( ttface,
+                                         base_glyph,
+                                         root_transform,
+                                         paint );
+    else
+      return 0;
+  }
+
+
+  /* documentation is in ftcolor.h */
+
+  FT_EXPORT_DEF( FT_Bool )
+  FT_Get_Color_Glyph_ClipBox( FT_Face      face,
+                              FT_UInt      base_glyph,
+                              FT_ClipBox*  clip_box )
+  {
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !clip_box )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_color_glyph_clipbox )
+      return sfnt->get_color_glyph_clipbox( ttface,
+                                            base_glyph,
+                                            clip_box );
+    else
+      return 0;
+  }
+
+
+  /* documentation is in freetype.h */
+
+  FT_EXPORT_DEF( FT_Bool )
+  FT_Get_Paint_Layers( FT_Face            face,
+                       FT_LayerIterator*  layer_iterator,
+                       FT_OpaquePaint*    paint )
+  {
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !paint || !layer_iterator )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_paint_layers )
+      return sfnt->get_paint_layers( ttface, layer_iterator, paint );
+    else
+      return 0;
+  }
+
+
+  /* documentation is in freetype.h */
+
+  FT_EXPORT_DEF( FT_Bool )
+  FT_Get_Paint( FT_Face face,
+                FT_OpaquePaint  opaque_paint,
+                FT_COLR_Paint*  paint )
+  {
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !paint )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_paint )
+      return sfnt->get_paint( ttface, opaque_paint, paint );
+    else
+      return 0;
+  }
+
+
+  /* documentation is in freetype.h */
+
+  FT_EXPORT_DEF( FT_Bool )
+  FT_Get_Colorline_Stops ( FT_Face                face,
+                           FT_ColorStop *         color_stop,
+                           FT_ColorStopIterator  *iterator )
+  {
+    TT_Face       ttface;
+    SFNT_Service  sfnt;
+
+
+    if ( !face || !color_stop || !iterator )
+      return 0;
+
+    if ( !FT_IS_SFNT( face ) )
+      return 0;
+
+    ttface = (TT_Face)face;
+    sfnt   = (SFNT_Service)ttface->sfnt;
+
+    if ( sfnt->get_colorline_stops )
+      return sfnt->get_colorline_stops ( ttface, color_stop, iterator );
+    else
+      return 0;
+  }
+
+
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftotval.c b/qtbase/src/3rdparty/freetype/src/base/ftotval.c
index 90a5dd617c..f336e96227 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftotval.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftotval.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating OpenType tables (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftoutln.c b/qtbase/src/3rdparty/freetype/src/base/ftoutln.c
index 311f098e3a..624df03ad8 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftoutln.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftoutln.c
@@ -4,7 +4,7 @@
  *
  *   FreeType outline management (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftpatent.c b/qtbase/src/3rdparty/freetype/src/base/ftpatent.c
index a02c636a65..353ed2b531 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftpatent.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftpatent.c
@@ -5,7 +5,7 @@
  *   FreeType API for checking patented TrueType bytecode instructions
  *   (body).  Obsolete, retained for backward compatibility.
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftpfr.c b/qtbase/src/3rdparty/freetype/src/base/ftpfr.c
index c656fcd9b9..9e748f06e6 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftpfr.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftpfr.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing PFR-specific data (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftpsprop.c b/qtbase/src/3rdparty/freetype/src/base/ftpsprop.c
index 8c29f50f6b..81fcee08f6 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftpsprop.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftpsprop.c
@@ -5,7 +5,7 @@
  *   Get and set properties of PostScript drivers (body).
  *   See `ftdriver.h' for available properties.
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -220,7 +220,7 @@
       return error;
     }
 
-    FT_TRACE0(( "ps_property_set: missing property `%s'\n",
+    FT_TRACE2(( "ps_property_set: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
@@ -275,7 +275,7 @@
       return error;
     }
 
-    FT_TRACE0(( "ps_property_get: missing property `%s'\n",
+    FT_TRACE2(( "ps_property_get: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftrfork.c b/qtbase/src/3rdparty/freetype/src/base/ftrfork.c
index f989be47f4..356998d3fa 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftrfork.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftrfork.c
@@ -4,7 +4,7 @@
  *
  *   Embedded resource forks accessor (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Masatake YAMATO and Redhat K.K.
  *
  * FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are
@@ -167,16 +167,11 @@
   }
 
 
-  static int
-  ft_raccess_sort_ref_by_id( FT_RFork_Ref*  a,
-                             FT_RFork_Ref*  b )
+  FT_COMPARE_DEF( int )
+  ft_raccess_sort_ref_by_id( const void*  a,
+                             const void*  b )
   {
-    if ( a->res_id < b->res_id )
-      return -1;
-    else if ( a->res_id > b->res_id )
-      return 1;
-    else
-      return 0;
+    return  ( (FT_RFork_Ref*)a )->res_id - ( (FT_RFork_Ref*)b )->res_id;
   }
 
 
@@ -256,7 +251,7 @@
         if ( error )
           return error;
 
-        if ( FT_NEW_ARRAY( ref, *count ) )
+        if ( FT_QNEW_ARRAY( ref, *count ) )
           return error;
 
         for ( j = 0; j < *count; j++ )
@@ -294,8 +289,7 @@
           ft_qsort( ref,
                     (size_t)*count,
                     sizeof ( FT_RFork_Ref ),
-                    ( int(*)(const void*,
-                             const void*) )ft_raccess_sort_ref_by_id );
+                    ft_raccess_sort_ref_by_id );
 
           FT_TRACE3(( "             -- sort resources by their ids --\n" ));
 
@@ -305,7 +299,7 @@
                         j, ref[j].res_id, ref[j].offset ));
         }
 
-        if ( FT_NEW_ARRAY( offsets_internal, *count ) )
+        if ( FT_QNEW_ARRAY( offsets_internal, *count ) )
           goto Exit;
 
         /* XXX: duplicated reference ID,
@@ -408,17 +402,17 @@
                                 FT_Long    *result_offset );
 
 
-  CONST_FT_RFORK_RULE_ARRAY_BEGIN(ft_raccess_guess_table,
-                                  ft_raccess_guess_rec)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_double,      apple_double)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(apple_single,      apple_single)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_ufs_export, darwin_ufs_export)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_newvfs,     darwin_newvfs)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(darwin_hfsplus,    darwin_hfsplus)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(vfat,              vfat)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_cap,         linux_cap)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_double,      linux_double)
-  CONST_FT_RFORK_RULE_ARRAY_ENTRY(linux_netatalk,    linux_netatalk)
+  CONST_FT_RFORK_RULE_ARRAY_BEGIN( ft_raccess_guess_table,
+                                                      ft_raccess_guess_rec )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( apple_double,      apple_double )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( apple_single,      apple_single )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( darwin_ufs_export, darwin_ufs_export )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( darwin_newvfs,     darwin_newvfs )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( darwin_hfsplus,    darwin_hfsplus )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( vfat,              vfat )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( linux_cap,         linux_cap )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( linux_double,      linux_double )
+  CONST_FT_RFORK_RULE_ARRAY_ENTRY( linux_netatalk,    linux_netatalk )
   CONST_FT_RFORK_RULE_ARRAY_END
 
 
@@ -608,7 +602,7 @@
     if ( base_file_len + 6 > FT_INT_MAX )
       return FT_THROW( Array_Too_Large );
 
-    if ( FT_ALLOC( newpath, base_file_len + 6 ) )
+    if ( FT_QALLOC( newpath, base_file_len + 6 ) )
       return error;
 
     FT_MEM_COPY( newpath, base_file_name, base_file_len );
@@ -644,7 +638,7 @@
     if ( base_file_len + 18 > FT_INT_MAX )
       return FT_THROW( Array_Too_Large );
 
-    if ( FT_ALLOC( newpath, base_file_len + 18 ) )
+    if ( FT_QALLOC( newpath, base_file_len + 18 ) )
       return error;
 
     FT_MEM_COPY( newpath, base_file_name, base_file_len );
@@ -874,13 +868,11 @@
     const char*  tmp;
     const char*  slash;
     size_t       new_length;
-    FT_Error     error = FT_Err_Ok;
-
-    FT_UNUSED( error );
+    FT_Error     error;
 
 
     new_length = ft_strlen( original_name ) + ft_strlen( insertion );
-    if ( FT_ALLOC( new_name, new_length + 1 ) )
+    if ( FT_QALLOC( new_name, new_length + 1 ) )
       return NULL;
 
     tmp = ft_strrchr( original_name, '/' );
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftsnames.c b/qtbase/src/3rdparty/freetype/src/base/ftsnames.c
index 8507f28d36..3bf20c389b 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftsnames.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftsnames.c
@@ -7,7 +7,7 @@
  *
  *   This is _not_ used to retrieve glyph names!
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -65,7 +65,7 @@
           FT_Stream  stream = face->stream;
 
 
-          if ( FT_NEW_ARRAY  ( entry->string, entry->stringLength ) ||
+          if ( FT_QNEW_ARRAY ( entry->string, entry->stringLength ) ||
                FT_STREAM_SEEK( entry->stringOffset )                ||
                FT_STREAM_READ( entry->string, entry->stringLength ) )
           {
@@ -121,7 +121,7 @@
           FT_Stream  stream = face->stream;
 
 
-          if ( FT_NEW_ARRAY  ( entry->string, entry->stringLength ) ||
+          if ( FT_QNEW_ARRAY ( entry->string, entry->stringLength ) ||
                FT_STREAM_SEEK( entry->stringOffset )                ||
                FT_STREAM_READ( entry->string, entry->stringLength ) )
           {
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftstream.c b/qtbase/src/3rdparty/freetype/src/base/ftstream.c
index d940254d8b..cc926565c3 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftstream.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftstream.c
@@ -4,7 +4,7 @@
  *
  *   I/O stream support (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -61,7 +61,7 @@
 
     if ( stream->read )
     {
-      if ( stream->read( stream, pos, 0, 0 ) )
+      if ( stream->read( stream, pos, NULL, 0 ) )
       {
         FT_ERROR(( "FT_Stream_Seek:"
                    " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
@@ -347,17 +347,17 @@
   }
 
 
-  FT_BASE_DEF( FT_Char )
-  FT_Stream_GetChar( FT_Stream  stream )
+  FT_BASE_DEF( FT_Byte )
+  FT_Stream_GetByte( FT_Stream  stream )
   {
-    FT_Char  result;
+    FT_Byte  result;
 
 
     FT_ASSERT( stream && stream->cursor );
 
     result = 0;
     if ( stream->cursor < stream->limit )
-      result = (FT_Char)*stream->cursor++;
+      result = *stream->cursor++;
 
     return result;
   }
@@ -455,8 +455,8 @@
   }
 
 
-  FT_BASE_DEF( FT_Char )
-  FT_Stream_ReadChar( FT_Stream  stream,
+  FT_BASE_DEF( FT_Byte )
+  FT_Stream_ReadByte( FT_Stream  stream,
                       FT_Error*  error )
   {
     FT_Byte  result = 0;
@@ -464,31 +464,32 @@
 
     FT_ASSERT( stream );
 
-    *error = FT_Err_Ok;
-
-    if ( stream->read )
+    if ( stream->pos < stream->size )
     {
-      if ( stream->read( stream, stream->pos, &result, 1L ) != 1L )
-        goto Fail;
-    }
-    else
-    {
-      if ( stream->pos < stream->size )
-        result = stream->base[stream->pos];
+      if ( stream->read )
+      {
+        if ( stream->read( stream, stream->pos, &result, 1L ) != 1L )
+          goto Fail;
+      }
       else
-        goto Fail;
+        result = stream->base[stream->pos];
     }
+    else
+      goto Fail;
+
     stream->pos++;
 
-    return (FT_Char)result;
+    *error = FT_Err_Ok;
+
+    return result;
 
   Fail:
     *error = FT_THROW( Invalid_Stream_Operation );
-    FT_ERROR(( "FT_Stream_ReadChar:"
+    FT_ERROR(( "FT_Stream_ReadByte:"
                " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
                stream->pos, stream->size ));
 
-    return 0;
+    return result;
   }
 
 
@@ -497,14 +498,12 @@
                         FT_Error*  error )
   {
     FT_Byte    reads[2];
-    FT_Byte*   p      = 0;
+    FT_Byte*   p;
     FT_UShort  result = 0;
 
 
     FT_ASSERT( stream );
 
-    *error = FT_Err_Ok;
-
     if ( stream->pos + 1 < stream->size )
     {
       if ( stream->read )
@@ -525,6 +524,8 @@
 
     stream->pos += 2;
 
+    *error = FT_Err_Ok;
+
     return result;
 
   Fail:
@@ -533,7 +534,7 @@
                " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
                stream->pos, stream->size ));
 
-    return 0;
+    return result;
   }
 
 
@@ -542,14 +543,12 @@
                           FT_Error*  error )
   {
     FT_Byte    reads[2];
-    FT_Byte*   p      = 0;
+    FT_Byte*   p;
     FT_UShort  result = 0;
 
 
     FT_ASSERT( stream );
 
-    *error = FT_Err_Ok;
-
     if ( stream->pos + 1 < stream->size )
     {
       if ( stream->read )
@@ -570,6 +569,8 @@
 
     stream->pos += 2;
 
+    *error = FT_Err_Ok;
+
     return result;
 
   Fail:
@@ -578,7 +579,7 @@
                " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
                stream->pos, stream->size ));
 
-    return 0;
+    return result;
   }
 
 
@@ -587,14 +588,12 @@
                          FT_Error*  error )
   {
     FT_Byte   reads[3];
-    FT_Byte*  p      = 0;
+    FT_Byte*  p;
     FT_ULong  result = 0;
 
 
     FT_ASSERT( stream );
 
-    *error = FT_Err_Ok;
-
     if ( stream->pos + 2 < stream->size )
     {
       if ( stream->read )
@@ -615,6 +614,8 @@
 
     stream->pos += 3;
 
+    *error = FT_Err_Ok;
+
     return result;
 
   Fail:
@@ -623,7 +624,7 @@
                " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
                stream->pos, stream->size ));
 
-    return 0;
+    return result;
   }
 
 
@@ -632,14 +633,12 @@
                        FT_Error*  error )
   {
     FT_Byte   reads[4];
-    FT_Byte*  p      = 0;
+    FT_Byte*  p;
     FT_ULong  result = 0;
 
 
     FT_ASSERT( stream );
 
-    *error = FT_Err_Ok;
-
     if ( stream->pos + 3 < stream->size )
     {
       if ( stream->read )
@@ -660,6 +659,8 @@
 
     stream->pos += 4;
 
+    *error = FT_Err_Ok;
+
     return result;
 
   Fail:
@@ -668,7 +669,7 @@
                " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
                stream->pos, stream->size ));
 
-    return 0;
+    return result;
   }
 
 
@@ -677,14 +678,12 @@
                          FT_Error*  error )
   {
     FT_Byte   reads[4];
-    FT_Byte*  p      = 0;
+    FT_Byte*  p;
     FT_ULong  result = 0;
 
 
     FT_ASSERT( stream );
 
-    *error = FT_Err_Ok;
-
     if ( stream->pos + 3 < stream->size )
     {
       if ( stream->read )
@@ -705,6 +704,8 @@
 
     stream->pos += 4;
 
+    *error = FT_Err_Ok;
+
     return result;
 
   Fail:
@@ -713,7 +714,7 @@
                " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
                stream->pos, stream->size ));
 
-    return 0;
+    return result;
   }
 
 
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftstroke.c b/qtbase/src/3rdparty/freetype/src/base/ftstroke.c
index 56f98e1d92..aa983f940f 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftstroke.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftstroke.c
@@ -4,7 +4,7 @@
  *
  *   FreeType path stroker (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -974,7 +974,8 @@
     FT_StrokeBorder  border = stroker->borders + side;
     FT_Angle         phi, theta, rotate;
     FT_Fixed         length;
-    FT_Vector        sigma, delta;
+    FT_Vector        sigma = { 0, 0 };
+    FT_Vector        delta;
     FT_Error         error = FT_Err_Ok;
     FT_Bool          intersect;          /* use intersection of lines? */
 
@@ -1048,7 +1049,7 @@
     {
       /* this is a mitered (pointed) or beveled (truncated) corner */
       FT_Fixed   radius = stroker->radius;
-      FT_Vector  sigma;
+      FT_Vector  sigma = { 0, 0 };
       FT_Angle   theta = 0, phi = 0;
       FT_Bool    bevel, fixed_bevel;
 
@@ -1528,7 +1529,8 @@
       stroker->angle_in = angle_out;
     }
 
-    stroker->center = *to;
+    stroker->center      = *to;
+    stroker->line_length = 0;
 
   Exit:
     return error;
@@ -1744,7 +1746,8 @@
       stroker->angle_in = angle_out;
     }
 
-    stroker->center = *to;
+    stroker->center      = *to;
+    stroker->line_length = 0;
 
   Exit:
     return error;
@@ -1897,13 +1900,9 @@
     }
     else
     {
-      FT_Angle  turn;
-      FT_Int    inside_side;
-
-
       /* close the path if needed */
-      if ( stroker->center.x != stroker->subpath_start.x ||
-           stroker->center.y != stroker->subpath_start.y )
+      if ( !FT_IS_SMALL( stroker->center.x - stroker->subpath_start.x ) ||
+           !FT_IS_SMALL( stroker->center.y - stroker->subpath_start.y ) )
       {
          error = FT_Stroker_LineTo( stroker, &stroker->subpath_start );
          if ( error )
@@ -1912,29 +1911,11 @@
 
       /* process the corner */
       stroker->angle_out = stroker->subpath_angle;
-      turn               = FT_Angle_Diff( stroker->angle_in,
-                                          stroker->angle_out );
-
-      /* no specific corner processing is required if the turn is 0 */
-      if ( turn != 0 )
-      {
-        /* when we turn to the right, the inside side is 0 */
-        /* otherwise, the inside side is 1 */
-        inside_side = ( turn < 0 );
 
-        error = ft_stroker_inside( stroker,
-                                   inside_side,
-                                   stroker->subpath_line_length );
-        if ( error )
-          goto Exit;
-
-        /* process the outside side */
-        error = ft_stroker_outside( stroker,
-                                    !inside_side,
-                                    stroker->subpath_line_length );
-        if ( error )
-          goto Exit;
-      }
+      error = ft_stroker_process_corner( stroker,
+                                         stroker->subpath_line_length );
+      if ( error )
+        goto Exit;
 
       /* then end our two subpaths */
       ft_stroke_border_close( stroker->borders + 0, FALSE );
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftsynth.c b/qtbase/src/3rdparty/freetype/src/base/ftsynth.c
index a9119e2b24..10bbe0dfda 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftsynth.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftsynth.c
@@ -4,7 +4,7 @@
  *
  *   FreeType synthesizing code for emboldening and slanting (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftsystem.c b/qtbase/src/3rdparty/freetype/src/base/ftsystem.c
index 3013cbda9d..d8826b2367 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftsystem.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftsystem.c
@@ -4,7 +4,7 @@
  *
  *   ANSI-specific FreeType low-level system interface (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -275,7 +275,7 @@
     stream->close = ft_ansi_stream_close;
 
     FT_TRACE1(( "FT_Stream_Open:" ));
-    FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
+    FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
                 filepathname, stream->size ));
 
     return FT_Err_Ok;
diff --git a/qtbase/src/3rdparty/freetype/src/base/fttrigon.c b/qtbase/src/3rdparty/freetype/src/base/fttrigon.c
index c6f027cf61..6964edb0f5 100644
--- a/qtbase/src/3rdparty/freetype/src/base/fttrigon.c
+++ b/qtbase/src/3rdparty/freetype/src/base/fttrigon.c
@@ -4,7 +4,7 @@
  *
  *   FreeType trigonometric functions (body).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,7 +53,7 @@
   };
 
 
-#ifdef FT_LONG64
+#ifdef FT_INT64
 
   /* multiply a given value by the CORDIC shrink factor */
   static FT_Fixed
@@ -76,7 +76,7 @@
     return s < 0 ? -val : val;
   }
 
-#else /* !FT_LONG64 */
+#else /* !FT_INT64 */
 
   /* multiply a given value by the CORDIC shrink factor */
   static FT_Fixed
@@ -125,7 +125,7 @@
     return s < 0 ? -val : val;
   }
 
-#endif /* !FT_LONG64 */
+#endif /* !FT_INT64 */
 
 
   /* undefined and never called for zero vector */
diff --git a/qtbase/src/3rdparty/freetype/src/base/fttype1.c b/qtbase/src/3rdparty/freetype/src/base/fttype1.c
index be60ed6ec5..de3d5a48bd 100644
--- a/qtbase/src/3rdparty/freetype/src/base/fttype1.c
+++ b/qtbase/src/3rdparty/freetype/src/base/fttype1.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file for PS names support (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftutil.c b/qtbase/src/3rdparty/freetype/src/base/ftutil.c
index d90cfbcd26..5a91382580 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftutil.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftutil.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file for memory and list management (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftver.rc b/qtbase/src/3rdparty/freetype/src/base/ftver.rc
index 0b92e9b899..eb6090ecc2 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftver.rc
+++ b/qtbase/src/3rdparty/freetype/src/base/ftver.rc
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType VERSIONINFO resource for Windows DLLs.                      */
 /*                                                                         */
-/*  Copyright (C) 2018-2020 by                                             */
+/*  Copyright (C) 2018-2022 by                                             */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -18,8 +18,8 @@
 
 #include<windows.h>
 
-#define FT_VERSION      2,10,4,0
-#define FT_VERSION_STR  "2.10.4"
+#define FT_VERSION      2,12,1,0
+#define FT_VERSION_STR  "2.12.1"
 
 VS_VERSION_INFO      VERSIONINFO
 FILEVERSION          FT_VERSION
@@ -45,7 +45,7 @@ BEGIN
       VALUE "FileVersion",      FT_VERSION_STR
       VALUE "ProductName",      "FreeType"
       VALUE "ProductVersion",   FT_VERSION_STR
-      VALUE "LegalCopyright",   "\251 2000-2020 The FreeType Project www.freetype.org. All rights reserved."
+      VALUE "LegalCopyright",   "\251 2000-2022 The FreeType Project www.freetype.org. All rights reserved."
       VALUE "InternalName",     "freetype"
       VALUE "OriginalFilename", FT_FILENAME
     END
diff --git a/qtbase/src/3rdparty/freetype/src/base/ftwinfnt.c b/qtbase/src/3rdparty/freetype/src/base/ftwinfnt.c
index 699dc3d700..193f7fa048 100644
--- a/qtbase/src/3rdparty/freetype/src/base/ftwinfnt.c
+++ b/qtbase/src/3rdparty/freetype/src/base/ftwinfnt.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing Windows FNT specific info (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/base/rules.mk b/qtbase/src/3rdparty/freetype/src/base/rules.mk
index 411c4c821f..9a224b14ed 100644
--- a/qtbase/src/3rdparty/freetype/src/base/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/base/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/bdf/README b/qtbase/src/3rdparty/freetype/src/bdf/README
index 996ac2d2aa..d7cb8c14ef 100644
--- a/qtbase/src/3rdparty/freetype/src/bdf/README
+++ b/qtbase/src/3rdparty/freetype/src/bdf/README
@@ -13,7 +13,7 @@ This code implements a BDF driver for the FreeType library, following the
 Adobe Specification V 2.2.  The specification of the BDF font format is
 available from Adobe's web site:
 
-  https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5005.BDF_Spec.pdf
+  https://adobe-type-tools.github.io/font-tech-notes/pdfs/5005.BDF_Spec.pdf
 
 Many good bitmap fonts in bdf format come with XFree86 (www.XFree86.org).
 They do not define vertical metrics, because the X Consortium BDF
@@ -23,6 +23,10 @@ specification has removed them.
 Encodings
 *********
 
+[This section is out of date, retained for historical reasons.  BDF
+ properties can be retrieved with `FT_Get_BDF_Property`, character set ID
+ values with `FT_Get_BDF_Charset_ID`.]
+
 The variety of encodings that accompanies bdf fonts appears to encompass the
 small set defined in freetype.h.  On the other hand, two properties that
 specify encoding and registry are usually defined in bdf fonts.
diff --git a/qtbase/src/3rdparty/freetype/src/bdf/bdfdrivr.c b/qtbase/src/3rdparty/freetype/src/bdf/bdfdrivr.c
index d29188b97b..eb73a7cf93 100644
--- a/qtbase/src/3rdparty/freetype/src/bdf/bdfdrivr.c
+++ b/qtbase/src/3rdparty/freetype/src/bdf/bdfdrivr.c
@@ -276,7 +276,7 @@ THE SOFTWARE.
       char*  s;
 
 
-      if ( FT_ALLOC( face->style_name, len ) )
+      if ( FT_QALLOC( face->style_name, len ) )
         return error;
 
       s = face->style_name;
@@ -442,7 +442,7 @@ THE SOFTWARE.
       bdfface->num_glyphs = (FT_Long)( font->glyphs_size + 1 );
 
       bdfface->num_fixed_sizes = 1;
-      if ( FT_NEW_ARRAY( bdfface->available_sizes, 1 ) )
+      if ( FT_NEW( bdfface->available_sizes ) )
         goto Exit;
 
       {
@@ -451,8 +451,6 @@ THE SOFTWARE.
         long             value;
 
 
-        FT_ZERO( bsize );
-
         /* sanity checks */
         if ( font->font_ascent > 0x7FFF || font->font_ascent < -0x7FFF )
         {
@@ -489,7 +487,7 @@ THE SOFTWARE.
         else
         {
           /* this is a heuristical value */
-          bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
+          bsize->width = ( bsize->height * 2 + 1 ) / 3;
         }
 
         prop = bdf_get_font_property( font, "POINT_SIZE" );
@@ -608,7 +606,7 @@ THE SOFTWARE.
         unsigned long  n;
 
 
-        if ( FT_NEW_ARRAY( face->en_table, font->glyphs_size ) )
+        if ( FT_QNEW_ARRAY( face->en_table, font->glyphs_size ) )
           goto Exit;
 
         face->default_glyph = 0;
diff --git a/qtbase/src/3rdparty/freetype/src/bdf/bdflib.c b/qtbase/src/3rdparty/freetype/src/bdf/bdflib.c
index a4ddb9a1d9..6603148a02 100644
--- a/qtbase/src/3rdparty/freetype/src/bdf/bdflib.c
+++ b/qtbase/src/3rdparty/freetype/src/bdf/bdflib.c
@@ -170,7 +170,7 @@
 
   /* An auxiliary macro to parse properties, to be used in conditionals. */
   /* It behaves like `strncmp' but also tests the following character    */
-  /* whether it is a whitespace or NULL.                                 */
+  /* whether it is a whitespace or null.                                 */
   /* `property' is a constant string of length `n' to compare with.      */
 #define _bdf_strncmp( name, property, n )      \
           ( ft_strncmp( name, property, n ) || \
@@ -185,12 +185,12 @@
                  "Added `FONT_ASCENT %hd'.\n"
 #define ACMSG2   "FONT_DESCENT property missing.  " \
                  "Added `FONT_DESCENT %hd'.\n"
-#define ACMSG3   "Font width != actual width.  Old: %hd New: %hd.\n"
+#define ACMSG3   "Font width != actual width.  Old: %d New: %d.\n"
 #define ACMSG4   "Font left bearing != actual left bearing.  " \
                  "Old: %hd New: %hd.\n"
 #define ACMSG5   "Font ascent != actual ascent.  Old: %hd New: %hd.\n"
-#define ACMSG6   "Font descent != actual descent.  Old: %hd New: %hd.\n"
-#define ACMSG7   "Font height != actual height. Old: %hd New: %hd.\n"
+#define ACMSG6   "Font descent != actual descent.  Old: %d New: %d.\n"
+#define ACMSG7   "Font height != actual height. Old: %d New: %d.\n"
 #define ACMSG8   "Glyph scalable width (SWIDTH) adjustments made.\n"
 #define ACMSG9   "SWIDTH field missing at line %ld.  Set automatically.\n"
 #define ACMSG10  "DWIDTH field missing at line %ld.  Set to glyph width.\n"
@@ -328,7 +328,7 @@
       else if ( newsize < oldsize || newsize > bigsize )
         newsize = bigsize;
 
-      if ( FT_RENEW_ARRAY( list->field, oldsize, newsize ) )
+      if ( FT_QRENEW_ARRAY( list->field, oldsize, newsize ) )
         goto Exit;
 
       list->size = newsize;
@@ -346,7 +346,7 @@
     unsigned long  i, u;
 
 
-    if ( list == 0 || list->used == 0 || n == 0 )
+    if ( list == NULL || list->used == 0 || n == 0 )
       return;
 
     if ( n >= list->used )
@@ -377,7 +377,7 @@
 
     *alen = 0;
 
-    if ( list == 0 || list->used == 0 )
+    if ( list == NULL || list->used == 0 )
       return 0;
 
     dp = list->field[0];
@@ -436,7 +436,7 @@
     /* In the original code, if the `separators' parameter is NULL or */
     /* empty, the list is split into individual bytes.  We don't need */
     /* this, so an error is signaled.                                 */
-    if ( separators == 0 || *separators == 0 )
+    if ( separators == NULL || *separators == 0 )
     {
       error = FT_THROW( Invalid_Argument );
       goto Exit;
@@ -504,7 +504,7 @@
     if ( final_empty )
       list->field[list->used++] = (char*)empty;
 
-    list->field[list->used] = 0;
+    list->field[list->used] = NULL;
 
   Exit:
     return error;
@@ -529,7 +529,7 @@
     FT_Error          error  = FT_Err_Ok;
 
 
-    if ( callback == 0 )
+    if ( callback == NULL )
     {
       error = FT_THROW( Invalid_Argument );
       goto Exit;
@@ -538,7 +538,7 @@
     /* initial size and allocation of the input buffer */
     buf_size = 1024;
 
-    if ( FT_NEW_ARRAY( buf, buf_size ) )
+    if ( FT_QALLOC( buf, buf_size ) )
       goto Exit;
 
     cb      = callback;
@@ -581,8 +581,14 @@
       /* or even resizing it                                       */
       if ( end >= avail )
       {
-        if ( bytes == 0 )  /* last line in file doesn't end in \r or \n */
-          break;           /* ignore it then exit                       */
+        if ( bytes == 0 )
+        {
+          /* last line in file doesn't end in \r or \n; */
+          /* ignore it then exit                        */
+          if ( lineno == 1 )
+            error = FT_THROW( Missing_Startfont_Field );
+          break;
+        }
 
         if ( start == 0 )
         {
@@ -593,16 +599,21 @@
 
           if ( buf_size >= 65536UL )  /* limit ourselves to 64KByte */
           {
-            FT_ERROR(( "_bdf_readstream: " ERRMSG6, lineno ));
-            error = FT_THROW( Invalid_Argument );
+            if ( lineno == 1 )
+              error = FT_THROW( Missing_Startfont_Field );
+            else
+            {
+              FT_ERROR(( "_bdf_readstream: " ERRMSG6, lineno ));
+              error = FT_THROW( Invalid_Argument );
+            }
             goto Exit;
           }
 
           new_size = buf_size * 2;
-          if ( FT_RENEW_ARRAY( buf, buf_size, new_size ) )
+          if ( FT_QREALLOC( buf, buf_size, new_size ) )
             goto Exit;
 
-          cursor   = (ptrdiff_t)buf_size;
+          cursor   = avail;
           buf_size = new_size;
         }
         else
@@ -612,7 +623,6 @@
           FT_MEM_MOVE( buf, buf + start, bytes );
 
           cursor = bytes;
-          avail -= bytes;
           start  = 0;
         }
         refill = 1;
@@ -697,7 +707,7 @@
     unsigned long  v;
 
 
-    if ( s == 0 || *s == 0 )
+    if ( s == NULL || *s == 0 )
       return 0;
 
     for ( v = 0; sbitset( ddigits, *s ); s++ )
@@ -722,7 +732,7 @@
     long  v, neg;
 
 
-    if ( s == 0 || *s == 0 )
+    if ( s == NULL || *s == 0 )
       return 0;
 
     /* Check for a minus sign. */
@@ -755,7 +765,7 @@
     unsigned short  v;
 
 
-    if ( s == 0 || *s == 0 )
+    if ( s == NULL || *s == 0 )
       return 0;
 
     for ( v = 0; sbitset( ddigits, *s ); s++ )
@@ -780,7 +790,7 @@
     short  v, neg;
 
 
-    if ( s == 0 || *s == 0 )
+    if ( s == NULL || *s == 0 )
       return 0;
 
     /* Check for a minus. */
@@ -807,7 +817,7 @@
 
 
   /* Routine to compare two glyphs by encoding so they can be sorted. */
-  static int
+  FT_COMPARE_DEF( int )
   by_encoding( const void*  a,
                const void*  b )
   {
@@ -844,25 +854,25 @@
     if ( ft_hash_str_lookup( name, &(font->proptbl) ) )
       goto Exit;
 
-    if ( FT_RENEW_ARRAY( font->user_props,
-                         font->nuser_props,
-                         font->nuser_props + 1 ) )
+    if ( FT_QRENEW_ARRAY( font->user_props,
+                          font->nuser_props,
+                          font->nuser_props + 1 ) )
       goto Exit;
 
     p = font->user_props + font->nuser_props;
-    FT_ZERO( p );
 
     n = ft_strlen( name ) + 1;
-    if ( n > FT_ULONG_MAX )
+    if ( n > FT_LONG_MAX )
       return FT_THROW( Invalid_Argument );
 
-    if ( FT_NEW_ARRAY( p->name, n ) )
+    if ( FT_QALLOC( p->name, n ) )
       goto Exit;
 
     FT_MEM_COPY( (char *)p->name, name, n );
 
-    p->format  = format;
-    p->builtin = 0;
+    p->format     = format;
+    p->builtin    = 0;
+    p->value.atom = NULL;  /* nothing is ever stored here */
 
     n = _num_bdf_properties + font->nuser_props;
 
@@ -884,7 +894,7 @@
     size_t*  propid;
 
 
-    if ( name == 0 || *name == 0 )
+    if ( name == NULL || *name == 0 )
       return 0;
 
     if ( ( propid = ft_hash_str_lookup( name, &(font->proptbl) ) ) == NULL )
@@ -942,15 +952,15 @@
     FT_Error   error  = FT_Err_Ok;
 
 
-    if ( FT_RENEW_ARRAY( font->comments,
-                         font->comments_len,
-                         font->comments_len + len + 1 ) )
+    if ( FT_QRENEW_ARRAY( font->comments,
+                          font->comments_len,
+                          font->comments_len + len + 1 ) )
       goto Exit;
 
     cp = font->comments + font->comments_len;
 
     FT_MEM_COPY( cp, comment, len );
-    cp[len] = '\n';
+    cp[len] = '\0';
 
     font->comments_len += len + 1;
 
@@ -975,7 +985,7 @@
     FT_UNUSED( lineno );        /* only used in debug mode */
 
 
-    if ( font == 0 || font->name == 0 || font->name[0] == 0 )
+    if ( font == NULL || font->name == NULL || font->name[0] == 0 )
     {
       error = FT_THROW( Invalid_Argument );
       goto Exit;
@@ -1159,21 +1169,11 @@
     /* Allocate another property if this is overflowing. */
     if ( font->props_used == font->props_size )
     {
-      if ( font->props_size == 0 )
-      {
-        if ( FT_NEW_ARRAY( font->props, 1 ) )
-          goto Exit;
-      }
-      else
-      {
-        if ( FT_RENEW_ARRAY( font->props,
-                             font->props_size,
-                             font->props_size + 1 ) )
-          goto Exit;
-      }
+      if ( FT_QRENEW_ARRAY( font->props,
+                            font->props_size,
+                            font->props_size + 1 ) )
+        goto Exit;
 
-      fp = font->props + font->props_size;
-      FT_ZERO( fp );
       font->props_size++;
     }
 
@@ -1191,8 +1191,8 @@
     switch ( prop->format )
     {
     case BDF_ATOM:
-      fp->value.atom = 0;
-      if ( value != 0 && value[0] )
+      fp->value.atom = NULL;
+      if ( value && value[0] )
       {
         if ( FT_STRDUP( fp->value.atom, value ) )
           goto Exit;
@@ -1314,15 +1314,18 @@
     /* Check for a comment. */
     if ( _bdf_strncmp( line, "COMMENT", 7 ) == 0 )
     {
-      linelen -= 7;
-
-      s = line + 7;
-      if ( *s != 0 )
+      if ( p->opts->keep_comments )
       {
-        s++;
-        linelen--;
+        linelen -= 7;
+
+        s = line + 7;
+        if ( *s != 0 )
+        {
+          s++;
+          linelen--;
+        }
+        error = _bdf_add_comment( p->font, s, linelen );
       }
-      error = _bdf_add_comment( p->font, s, linelen );
       goto Exit;
     }
 
@@ -1438,7 +1441,7 @@
         goto Exit;
       }
 
-      if ( FT_NEW_ARRAY( p->glyph_name, slen + 1 ) )
+      if ( FT_QALLOC( p->glyph_name, slen + 1 ) )
         goto Exit;
 
       FT_MEM_COPY( p->glyph_name, s, slen + 1 );
@@ -1506,7 +1509,7 @@
       {
         /* Unencoded glyph.  Check whether it should */
         /* be added or not.                          */
-        if ( p->opts->keep_unencoded != 0 )
+        if ( p->opts->keep_unencoded )
         {
           /* Allocate the next unencoded glyph. */
           if ( font->unencoded_used == font->unencoded_size )
@@ -1532,8 +1535,6 @@
           /* kept.                                                */
           FT_FREE( p->glyph_name );
         }
-
-        p->glyph_name = NULL;
       }
 
       /* Clear the flags that might be added when width and height are */
@@ -1619,20 +1620,20 @@
       if ( error )
         goto Exit;
 
-      glyph->swidth = (unsigned short)_bdf_atoul( p->list.field[1] );
+      glyph->swidth = _bdf_atous( p->list.field[1] );
       p->flags |= BDF_SWIDTH_;
 
       goto Exit;
     }
 
-    /* Expect the DWIDTH (scalable width) field next. */
+    /* Expect the DWIDTH (device width) field next. */
     if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 )
     {
       error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
-      glyph->dwidth = (unsigned short)_bdf_atoul( p->list.field[1] );
+      glyph->dwidth = _bdf_atous( p->list.field[1] );
 
       if ( !( p->flags & BDF_SWIDTH_ ) )
       {
@@ -1687,7 +1688,7 @@
 
       /* If the BDF_CORRECT_METRICS flag is set, then adjust the SWIDTH */
       /* value if necessary.                                            */
-      if ( p->opts->correct_metrics != 0 )
+      if ( p->opts->correct_metrics )
       {
         /* Determine the point size of the glyph. */
         unsigned short  sw = (unsigned short)FT_MulDiv(
@@ -1735,7 +1736,7 @@
       else
         glyph->bytes = (unsigned short)bitmap_size;
 
-      if ( FT_NEW_ARRAY( glyph->bitmap, glyph->bytes ) )
+      if ( FT_ALLOC( glyph->bitmap, glyph->bytes ) )
         goto Exit;
 
       p->row    = 0;
@@ -1894,7 +1895,7 @@
     /* comments before the STARTFONT line for some reason.                */
     if ( _bdf_strncmp( line, "COMMENT", 7 ) == 0 )
     {
-      if ( p->opts->keep_comments != 0 && p->font != 0 )
+      if ( p->opts->keep_comments && p->font )
       {
         linelen -= 7;
 
@@ -1904,13 +1905,8 @@
           s++;
           linelen--;
         }
-
         error = _bdf_add_comment( p->font, s, linelen );
-        if ( error )
-          goto Exit;
-        /* here font is not defined! */
       }
-
       goto Exit;
     }
 
@@ -1927,14 +1923,13 @@
       }
 
       p->flags = BDF_START_;
-      font = p->font = 0;
+      font = p->font = NULL;
 
       if ( FT_NEW( font ) )
         goto Exit;
       p->font = font;
 
       font->memory = p->memory;
-      p->memory    = 0;
 
       { /* setup */
         size_t           i;
@@ -1954,7 +1949,7 @@
         }
       }
 
-      if ( FT_ALLOC( p->font->internal, sizeof ( FT_HashRec ) ) )
+      if ( FT_QALLOC( p->font->internal, sizeof ( FT_HashRec ) ) )
         goto Exit;
       error = ft_hash_str_init( (FT_Hash)p->font->internal, memory );
       if ( error )
@@ -2055,7 +2050,7 @@
       /* Allowing multiple `FONT' lines (which is invalid) doesn't hurt... */
       FT_FREE( p->font->name );
 
-      if ( FT_NEW_ARRAY( p->font->name, slen + 1 ) )
+      if ( FT_QALLOC( p->font->name, slen + 1 ) )
         goto Exit;
       FT_MEM_COPY( p->font->name, s, slen + 1 );
 
@@ -2095,7 +2090,7 @@
         unsigned short bpp;
 
 
-        bpp = (unsigned short)_bdf_atos( p->list.field[4] );
+        bpp = _bdf_atous( p->list.field[4] );
 
         /* Only values 1, 2, 4, 8 are allowed for greymap fonts. */
         if ( bpp > 4 )
@@ -2174,34 +2169,32 @@
 
   FT_LOCAL_DEF( FT_Error )
   bdf_load_font( FT_Stream       stream,
-                 FT_Memory       extmemory,
+                 FT_Memory       memory,
                  bdf_options_t*  opts,
                  bdf_font_t*    *font )
   {
     unsigned long  lineno = 0; /* make compiler happy */
     _bdf_parse_t   *p     = NULL;
 
-    FT_Memory  memory = extmemory; /* needed for FT_NEW */
-    FT_Error   error  = FT_Err_Ok;
+    FT_Error  error = FT_Err_Ok;
 
 
     if ( FT_NEW( p ) )
       goto Exit;
 
-    memory    = NULL;
-    p->opts   = (bdf_options_t*)( ( opts != 0 ) ? opts : &_bdf_opts );
+    p->opts   = (bdf_options_t*)( opts ? opts : &_bdf_opts );
     p->minlb  = 32767;
     p->size   = stream->size;
-    p->memory = extmemory;  /* only during font creation */
+    p->memory = memory;  /* only during font creation */
 
-    _bdf_list_init( &p->list, extmemory );
+    _bdf_list_init( &p->list, memory );
 
     error = _bdf_readstream( stream, _bdf_parse_start,
                              (void *)p, &lineno );
     if ( error )
       goto Fail;
 
-    if ( p->font != 0 )
+    if ( p->font )
     {
       /* If the font is not proportional, set the font's monowidth */
       /* field to the width of the font bounding box.              */
@@ -2282,22 +2275,7 @@
       }
     }
 
-    if ( p->font != 0 )
-    {
-      /* Make sure the comments are NULL terminated if they exist. */
-      memory = p->font->memory;
-
-      if ( p->font->comments_len > 0 )
-      {
-        if ( FT_RENEW_ARRAY( p->font->comments,
-                             p->font->comments_len,
-                             p->font->comments_len + 1 ) )
-          goto Fail;
-
-        p->font->comments[p->font->comments_len] = 0;
-      }
-    }
-    else if ( !error )
+    if ( !p->font && !error )
       error = FT_THROW( Invalid_File_Format );
 
     *font = p->font;
@@ -2307,8 +2285,6 @@
     {
       _bdf_list_done( &p->list );
 
-      memory = extmemory;
-
       FT_FREE( p->glyph_name );
       FT_FREE( p );
     }
@@ -2318,8 +2294,6 @@
   Fail:
     bdf_free_font( p->font );
 
-    memory = extmemory;
-
     FT_FREE( p->font );
 
     goto Exit;
@@ -2335,7 +2309,7 @@
     FT_Memory        memory;
 
 
-    if ( font == 0 )
+    if ( font == NULL )
       return;
 
     memory = font->memory;
@@ -2385,11 +2359,7 @@
     /* Free up the user defined properties. */
     for ( prop = font->user_props, i = 0;
           i < font->nuser_props; i++, prop++ )
-    {
       FT_FREE( prop->name );
-      if ( prop->format == BDF_ATOM )
-        FT_FREE( prop->value.atom );
-    }
 
     FT_FREE( font->user_props );
 
@@ -2404,7 +2374,7 @@
     size_t*  propid;
 
 
-    if ( font == 0 || font->props_size == 0 || name == 0 || *name == 0 )
+    if ( font == NULL || font->props_size == 0 || name == NULL || *name == 0 )
       return 0;
 
     propid = ft_hash_str_lookup( name, (FT_Hash)font->internal );
diff --git a/qtbase/src/3rdparty/freetype/src/bzip2/ftbzip2.c b/qtbase/src/3rdparty/freetype/src/bzip2/ftbzip2.c
index 411c5d263b..ab2da7e62b 100644
--- a/qtbase/src/3rdparty/freetype/src/bzip2/ftbzip2.c
+++ b/qtbase/src/3rdparty/freetype/src/bzip2/ftbzip2.c
@@ -8,7 +8,7 @@
  * parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright (C) 2010-2020 by
+ * Copyright (C) 2010-2022 by
  * Joel Klinghed.
  *
  * based on `src/gzip/ftgzip.c'
@@ -57,8 +57,9 @@
   /* it is better to use FreeType memory routines instead of raw
      'malloc/free' */
 
-  typedef void *(* alloc_func)(void*, int, int);
-  typedef void (* free_func)(void*, void*);
+  typedef void* (*alloc_func)( void*, int, int );
+  typedef void  (*free_func) ( void*, void* );
+
 
   static void*
   ft_bzip2_alloc( FT_Memory  memory,
@@ -70,7 +71,7 @@
     FT_Pointer  p  = NULL;
 
 
-    (void)FT_ALLOC( p, sz );
+    FT_MEM_QALLOC( p, sz );
     return p;
   }
 
@@ -102,10 +103,11 @@
 
     FT_Byte    input[FT_BZIP2_BUFFER_SIZE];  /* input read buffer  */
 
-    FT_Byte    buffer[FT_BZIP2_BUFFER_SIZE]; /* output buffer      */
-    FT_ULong   pos;                          /* position in output */
+    FT_Byte    buffer[FT_BZIP2_BUFFER_SIZE]; /* output buffer          */
+    FT_ULong   pos;                          /* position in output     */
     FT_Byte*   cursor;
     FT_Byte*   limit;
+    FT_Bool    reset;                        /* reset before next read */
 
   } FT_BZip2FileRec, *FT_BZip2File;
 
@@ -153,6 +155,7 @@
     zip->limit  = zip->buffer + FT_BZIP2_BUFFER_SIZE;
     zip->cursor = zip->limit;
     zip->pos    = 0;
+    zip->reset  = 0;
 
     /* check .bz2 header */
     {
@@ -228,6 +231,7 @@
       zip->limit  = zip->buffer + FT_BZIP2_BUFFER_SIZE;
       zip->cursor = zip->limit;
       zip->pos    = 0;
+      zip->reset  = 0;
 
       BZ2_bzDecompressInit( bzstream, 0, 0 );
     }
@@ -302,18 +306,23 @@
 
       err = BZ2_bzDecompress( bzstream );
 
-      if ( err == BZ_STREAM_END )
-      {
-        zip->limit = (FT_Byte*)bzstream->next_out;
-        if ( zip->limit == zip->cursor )
-          error = FT_THROW( Invalid_Stream_Operation );
-        break;
-      }
-      else if ( err != BZ_OK )
+      if ( err != BZ_OK )
       {
-        zip->limit = zip->cursor;
-        error      = FT_THROW( Invalid_Stream_Operation );
-        break;
+        zip->reset = 1;
+
+        if ( err == BZ_STREAM_END )
+        {
+          zip->limit = (FT_Byte*)bzstream->next_out;
+          if ( zip->limit == zip->cursor )
+            error = FT_THROW( Invalid_Stream_Operation );
+          break;
+        }
+        else
+        {
+          zip->limit = zip->cursor;
+          error      = FT_THROW( Invalid_Stream_Operation );
+          break;
+        }
       }
     }
 
@@ -327,12 +336,13 @@
                              FT_ULong      count )
   {
     FT_Error  error = FT_Err_Ok;
-    FT_ULong  delta;
 
 
     for (;;)
     {
-      delta = (FT_ULong)( zip->limit - zip->cursor );
+      FT_ULong  delta = (FT_ULong)( zip->limit - zip->cursor );
+
+
       if ( delta >= count )
         delta = count;
 
@@ -362,9 +372,9 @@
     FT_Error  error;
 
 
-    /* Reset inflate stream if we're seeking backwards.        */
-    /* Yes, that is not too efficient, but it saves memory :-) */
-    if ( pos < zip->pos )
+    /* Reset inflate stream if seeking backwards or bzip reported an error. */
+    /* Yes, that is not too efficient, but it saves memory :-)              */
+    if ( pos < zip->pos || zip->reset )
     {
       error = ft_bzip2_file_reset( zip );
       if ( error )
@@ -494,7 +504,7 @@
 
     stream->size  = 0x7FFFFFFFL;  /* don't know the real size! */
     stream->pos   = 0;
-    stream->base  = 0;
+    stream->base  = NULL;
     stream->read  = ft_bzip2_stream_io;
     stream->close = ft_bzip2_stream_close;
 
diff --git a/qtbase/src/3rdparty/freetype/src/bzip2/rules.mk b/qtbase/src/3rdparty/freetype/src/bzip2/rules.mk
index eed0f4baa4..93a820c853 100644
--- a/qtbase/src/3rdparty/freetype/src/bzip2/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/bzip2/rules.mk
@@ -2,7 +2,7 @@
 # FreeType 2 BZIP2 support configuration rules
 #
 
-# Copyright (C) 2010-2020 by
+# Copyright (C) 2010-2022 by
 # Joel Klinghed.
 #
 # based on `src/lzw/rules.mk'
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcache.c b/qtbase/src/3rdparty/freetype/src/cache/ftcache.c
index e90f4639cb..e26b44a700 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcache.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcache.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType Caching sub-system (body only).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcbasic.c b/qtbase/src/3rdparty/freetype/src/cache/ftcbasic.c
index 43ea314d4a..635b17d074 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcbasic.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcbasic.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType basic cache interface (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,6 +26,7 @@
 #include "ftccback.h"
 #include "ftcerror.h"
 
+#undef  FT_COMPONENT
 #define FT_COMPONENT  cache
 
 
@@ -108,12 +109,16 @@
     if ( error || !face )
       return result;
 
+#ifdef FT_DEBUG_LEVEL_TRACE
     if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs )
+    {
       FT_TRACE1(( "ftc_basic_family_get_count:"
-                  " the number of glyphs in this face is %ld,\n"
-                  "                           "
-                  " which is too much and thus truncated\n",
+                  " the number of glyphs in this face is %ld,\n",
                   face->num_glyphs ));
+      FT_TRACE1(( "                           "
+                  " which is too much and thus truncated\n" ));
+    }
+#endif
 
     if ( !error )
       result = (FT_UInt)face->num_glyphs;
@@ -178,7 +183,8 @@
       if ( !error )
       {
         if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP  ||
-             face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
+             face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ||
+             face->glyph->format == FT_GLYPH_FORMAT_SVG     )
         {
           /* ok, copy it */
           FT_Glyph  glyph;
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftccache.c b/qtbase/src/3rdparty/freetype/src/cache/ftccache.c
index 1c8e0f3221..ab4ad2faa2 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftccache.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftccache.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType internal cache interface (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -90,15 +90,14 @@
   ftc_get_top_node_for_hash( FTC_Cache  cache,
                              FT_Offset  hash )
   {
-    FTC_Node*  pnode;
     FT_Offset  idx;
 
 
     idx = hash & cache->mask;
     if ( idx < cache->p )
       idx = hash & ( 2 * cache->mask + 1 );
-    pnode = cache->buckets + idx;
-    return pnode;
+
+    return cache->buckets + idx;
   }
 
 #endif /* !FTC_INLINE */
@@ -119,7 +118,7 @@
       FT_UFast  count = mask + p + 1;    /* number of buckets */
 
 
-      /* do we need to shrink the buckets array? */
+      /* do we need to expand the buckets array? */
       if ( cache->slack < 0 )
       {
         FTC_Node  new_list = NULL;
@@ -172,7 +171,7 @@
           cache->p = p + 1;
       }
 
-      /* do we need to expand the buckets array? */
+      /* do we need to shrink the buckets array? */
       else if ( cache->slack > (FT_Long)count * FTC_HASH_SUB_LOAD )
       {
         FT_UFast   old_index = p + mask;
@@ -189,7 +188,7 @@
 
 
           /* if we can't shrink the array, leave immediately */
-          if ( FT_RENEW_ARRAY( cache->buckets,
+          if ( FT_QRENEW_ARRAY( cache->buckets,
                                ( mask + 1 ) * 2, mask + 1 ) )
             break;
 
@@ -341,7 +340,7 @@
     cache->mask  = FTC_HASH_INITIAL_SIZE - 1;
     cache->slack = FTC_HASH_INITIAL_SIZE * FTC_HASH_MAX_LOAD;
 
-    (void)FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 );
+    FT_MEM_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 );
     return error;
   }
 
@@ -360,7 +359,7 @@
 
       for ( i = 0; i < count; i++ )
       {
-        FTC_Node  *pnode = cache->buckets + i, next, node = *pnode;
+        FTC_Node  node = cache->buckets[i], next;
 
 
         while ( node )
@@ -417,7 +416,7 @@
                  FTC_Node   node )
   {
     node->hash        = hash;
-    node->cache_index = (FT_UInt16)cache->index;
+    node->cache_index = (FT_UShort)cache->index;
     node->ref_count   = 0;
 
     ftc_node_hash_link( node, cache );
@@ -459,7 +458,7 @@
     {
       error = cache->clazz.node_new( &node, query, cache );
     }
-    FTC_CACHE_TRYLOOP_END( NULL );
+    FTC_CACHE_TRYLOOP_END( NULL )
 
     if ( error )
       node = NULL;
@@ -528,7 +527,7 @@
           goto NewNode;
         }
         else
-          pnode = &((*pnode)->link);
+          pnode = &(*pnode)->link;
       }
     }
 
@@ -571,8 +570,7 @@
     count = cache->p + cache->mask + 1;
     for ( i = 0; i < count; i++ )
     {
-      FTC_Node*  bucket = cache->buckets + i;
-      FTC_Node*  pnode  = bucket;
+      FTC_Node*  pnode = cache->buckets + i;
 
 
       for (;;)
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftccache.h b/qtbase/src/3rdparty/freetype/src/cache/ftccache.h
index 11698bb0e9..ae0ae8b172 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftccache.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftccache.h
@@ -4,7 +4,7 @@
  *
  *   FreeType internal cache interface (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -210,7 +210,7 @@ FT_BEGIN_HEADER
 #define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
   FT_BEGIN_STMNT                                                         \
     FTC_Node             *_bucket, *_pnode, _node;                       \
-    FTC_Cache             _cache   = FTC_CACHE(cache);                   \
+    FTC_Cache             _cache   = FTC_CACHE( cache );                 \
     FT_Offset             _hash    = (FT_Offset)(hash);                  \
     FTC_Node_CompareFunc  _nodcomp = (FTC_Node_CompareFunc)(nodecmp);    \
     FT_Bool               _list_changed = FALSE;                         \
@@ -251,7 +251,7 @@ FT_BEGIN_HEADER
           goto NewNode_;                                                 \
         }                                                                \
         else                                                             \
-          _pnode = &((*_pnode)->link);                                   \
+          _pnode = &(*_pnode)->link;                                     \
       }                                                                  \
     }                                                                    \
                                                                          \
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftccback.h b/qtbase/src/3rdparty/freetype/src/cache/ftccback.h
index 542acb1565..ba01af2e78 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftccback.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftccback.h
@@ -4,7 +4,7 @@
  *
  *   Callback functions of the caching sub-system (specification only).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftccmap.c b/qtbase/src/3rdparty/freetype/src/cache/ftccmap.c
index 468c008cf6..0ee1834e27 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftccmap.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftccmap.c
@@ -4,7 +4,7 @@
  *
  *   FreeType CharMap cache (body)
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -116,7 +116,7 @@
     FT_UInt        nn;
 
 
-    if ( !FT_NEW( node ) )
+    if ( !FT_QNEW( node ) )
     {
       node->face_id    = query->face_id;
       node->cmap_index = query->cmap_index;
@@ -273,12 +273,11 @@
     if ( error )
       goto Exit;
 
-    FT_ASSERT( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first ) <
-                FTC_CMAP_INDICES_MAX );
+    FT_ASSERT( char_code - FTC_CMAP_NODE( node )->first <
+               FTC_CMAP_INDICES_MAX );
 
     /* something rotten can happen with rogue clients */
-    if ( (FT_UInt)( char_code - FTC_CMAP_NODE( node )->first >=
-                    FTC_CMAP_INDICES_MAX ) )
+    if ( char_code - FTC_CMAP_NODE( node )->first >= FTC_CMAP_INDICES_MAX )
       return 0; /* XXX: should return appropriate error */
 
     gindex = FTC_CMAP_NODE( node )->indices[char_code -
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcerror.h b/qtbase/src/3rdparty/freetype/src/cache/ftcerror.h
index bedfd28371..44e74d36b4 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcerror.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcerror.h
@@ -4,7 +4,7 @@
  *
  *   Caching sub-system error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.c b/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.c
index 7f5438aad5..f826c8dd8e 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Glyph Image (FT_Glyph) cache (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.h b/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.h
index 5629545f3c..cbb8077739 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcglyph.h
@@ -4,7 +4,7 @@
  *
  *   FreeType abstract glyph cache (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -140,8 +140,8 @@ FT_BEGIN_HEADER
 
   } FTC_FamilyRec, *FTC_Family;
 
-#define  FTC_FAMILY(x)    ( (FTC_Family)(x) )
-#define  FTC_FAMILY_P(x)  ( (FTC_Family*)(x) )
+#define  FTC_FAMILY( x )    ( (FTC_Family)(x) )
+#define  FTC_FAMILY_P( x )  ( (FTC_Family*)(x) )
 
 
   typedef struct  FTC_GNodeRec_
@@ -245,7 +245,7 @@ FT_BEGIN_HEADER
 #define FTC_GCACHE_CLASS( x )  ((FTC_GCacheClass)(x))
 
 #define FTC_CACHE_GCACHE_CLASS( x ) \
-          FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
+          FTC_GCACHE_CLASS( FTC_CACHE( x )->org_class )
 #define FTC_CACHE_FAMILY_CLASS( x ) \
           ( (FTC_MruListClass)FTC_CACHE_GCACHE_CLASS( x )->family_class )
 
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcimage.c b/qtbase/src/3rdparty/freetype/src/cache/ftcimage.c
index 58ebad8c93..39ce61a511 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcimage.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcimage.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Image cache (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -64,7 +64,7 @@
     FTC_INode  inode  = NULL;
 
 
-    if ( !FT_NEW( inode ) )
+    if ( !FT_QNEW( inode ) )
     {
       FTC_GNode         gnode  = FTC_GNODE( inode );
       FTC_Family        family = gquery->family;
@@ -74,6 +74,7 @@
 
       /* initialize its inner fields */
       FTC_GNode_Init( gnode, gindex, family );
+      inode->glyph = NULL;
 
       /* we will now load the glyph image */
       error = clazz->family_load_glyph( family, gindex, cache,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcimage.h b/qtbase/src/3rdparty/freetype/src/cache/ftcimage.h
index a400788b3c..55270a436c 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcimage.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcimage.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Generic Image cache (specification)
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -51,8 +51,8 @@ FT_BEGIN_HEADER
   } FTC_INodeRec, *FTC_INode;
 
 #define FTC_INODE( x )         ( (FTC_INode)( x ) )
-#define FTC_INODE_GINDEX( x )  FTC_GNODE(x)->gindex
-#define FTC_INODE_FAMILY( x )  FTC_GNODE(x)->family
+#define FTC_INODE_GINDEX( x )  FTC_GNODE( x )->gindex
+#define FTC_INODE_FAMILY( x )  FTC_GNODE( x )->family
 
   typedef FT_Error
   (*FTC_IFamily_LoadGlyphFunc)( FTC_Family  family,
@@ -72,7 +72,7 @@ FT_BEGIN_HEADER
 #define FTC_IFAMILY_CLASS( x )  ((FTC_IFamilyClass)(x))
 
 #define FTC_CACHE_IFAMILY_CLASS( x ) \
-          FTC_IFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS(x)->family_class )
+          FTC_IFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS( x )->family_class )
 
 
   /* can be used as a @FTC_Node_FreeFunc */
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.c b/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.c
index 436d41f374..49f037aa73 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Cache Manager (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -357,7 +357,7 @@
   {
     FT_Error     error;
     FT_Memory    memory;
-    FTC_Manager  manager = 0;
+    FTC_Manager  manager = NULL;
 
 
     if ( !library )
@@ -368,7 +368,7 @@
 
     memory = library->memory;
 
-    if ( FT_NEW( manager ) )
+    if ( FT_QNEW( manager ) )
       goto Exit;
 
     if ( max_faces == 0 )
@@ -399,6 +399,10 @@
                       manager,
                       memory );
 
+    manager->nodes_list = NULL;
+    manager->num_nodes  = 0;
+    manager->num_caches = 0;
+
     *amanager = manager;
 
   Exit:
@@ -593,7 +597,7 @@
         goto Exit;
       }
 
-      if ( !FT_ALLOC( cache, clazz->cache_size ) )
+      if ( !FT_QALLOC( cache, clazz->cache_size ) )
       {
         cache->manager   = manager;
         cache->memory    = memory;
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.h b/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.h
index 6c6ec68545..5c67af30bc 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcmanag.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Cache Manager (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcmru.c b/qtbase/src/3rdparty/freetype/src/cache/ftcmru.c
index 8feed45f6b..6a14ae36e9 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcmru.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcmru.c
@@ -4,7 +4,7 @@
  *
  *   FreeType MRU support (body).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -262,6 +262,8 @@
       if ( list->clazz.node_done )
         list->clazz.node_done( node, list->data );
     }
+
+    /* zero new node in case of node_init failure */
     else if ( FT_ALLOC( node, list->clazz.node_size ) )
       goto Exit;
 
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcmru.h b/qtbase/src/3rdparty/freetype/src/cache/ftcmru.h
index ac4f9b126d..4fcadef477 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcmru.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcmru.h
@@ -4,7 +4,7 @@
  *
  *   Simple MRU list-cache (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.c b/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.c
index e0db930af8..4a8b1963eb 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.c
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.c
@@ -4,7 +4,7 @@
  *
  *   FreeType sbits manager (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -52,10 +52,8 @@
       pitch = -pitch;
 
     size = (FT_ULong)pitch * bitmap->rows;
-    if ( !size )
-      return FT_Err_Ok;
 
-    if ( !FT_ALLOC( sbit->buffer, size ) )
+    if ( !FT_QALLOC( sbit->buffer, size ) )
       FT_MEM_COPY( sbit->buffer, bitmap->buffer, size );
 
     return error;
@@ -108,13 +106,12 @@
     FT_Error          error;
     FTC_GNode         gnode  = FTC_GNODE( snode );
     FTC_Family        family = gnode->family;
-    FT_Memory         memory = manager->memory;
     FT_Face           face;
     FTC_SBit          sbit;
     FTC_SFamilyClass  clazz;
 
 
-    if ( (FT_UInt)(gindex - gnode->gindex) >= snode->count )
+    if ( gindex - gnode->gindex >= snode->count )
     {
       FT_ERROR(( "ftc_snode_load: invalid glyph index" ));
       return FT_THROW( Invalid_Argument );
@@ -123,8 +120,6 @@
     sbit  = snode->sbits + ( gindex - gnode->gindex );
     clazz = (FTC_SFamilyClass)family->clazz;
 
-    sbit->buffer = 0;
-
     error = clazz->family_load_glyph( family, gindex, manager, &face );
     if ( error )
       goto BadGlyph;
@@ -143,12 +138,13 @@
         goto BadGlyph;
       }
 
-      /* Check whether our values fit into 8-bit containers!    */
+      /* Check whether our values fit into 8/16-bit containers! */
       /* If this is not the case, our bitmap is too large       */
       /* and we will leave it as `missing' with sbit.buffer = 0 */
 
 #define CHECK_CHAR( d )  ( temp = (FT_Char)d, (FT_Int) temp == (FT_Int) d )
 #define CHECK_BYTE( d )  ( temp = (FT_Byte)d, (FT_UInt)temp == (FT_UInt)d )
+#define CHECK_SHRT( d )  ( temp = (FT_Short)d, (FT_Int)temp == (FT_Int) d )
 
       /* horizontal advance in pixels */
       xadvance = ( slot->advance.x + 32 ) >> 6;
@@ -156,7 +152,7 @@
 
       if ( !CHECK_BYTE( bitmap->rows  )     ||
            !CHECK_BYTE( bitmap->width )     ||
-           !CHECK_CHAR( bitmap->pitch )     ||
+           !CHECK_SHRT( bitmap->pitch )     ||
            !CHECK_CHAR( slot->bitmap_left ) ||
            !CHECK_CHAR( slot->bitmap_top  ) ||
            !CHECK_CHAR( xadvance )          ||
@@ -169,16 +165,25 @@
 
       sbit->width     = (FT_Byte)bitmap->width;
       sbit->height    = (FT_Byte)bitmap->rows;
-      sbit->pitch     = (FT_Char)bitmap->pitch;
+      sbit->pitch     = (FT_Short)bitmap->pitch;
       sbit->left      = (FT_Char)slot->bitmap_left;
       sbit->top       = (FT_Char)slot->bitmap_top;
       sbit->xadvance  = (FT_Char)xadvance;
       sbit->yadvance  = (FT_Char)yadvance;
       sbit->format    = (FT_Byte)bitmap->pixel_mode;
-      sbit->max_grays = (FT_Byte)(bitmap->num_grays - 1);
+      sbit->max_grays = (FT_Byte)( bitmap->num_grays - 1 );
 
-      /* copy the bitmap into a new buffer -- ignore error */
-      error = ftc_sbit_copy_bitmap( sbit, bitmap, memory );
+      if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
+      {
+        /* take the bitmap ownership */
+        sbit->buffer = bitmap->buffer;
+        slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
+      }
+      else
+      {
+        /* copy the bitmap into a new buffer -- ignore error */
+        error = ftc_sbit_copy_bitmap( sbit, bitmap, manager->memory );
+      }
 
       /* now, compute size */
       if ( asize )
@@ -228,7 +233,7 @@
       goto Exit;
     }
 
-    if ( !FT_NEW( snode ) )
+    if ( !FT_QNEW( snode ) )
     {
       FT_UInt  count, start;
 
@@ -243,7 +248,9 @@
       snode->count = count;
       for ( node_count = 0; node_count < count; node_count++ )
       {
-        snode->sbits[node_count].width = 255;
+        snode->sbits[node_count].width  = 255;
+        snode->sbits[node_count].height = 0;
+        snode->sbits[node_count].buffer = NULL;
       }
 
       error = ftc_snode_load( snode,
@@ -337,8 +344,8 @@
 
     if (list_changed)
       *list_changed = FALSE;
-    result = FT_BOOL( gnode->family == gquery->family                    &&
-                      (FT_UInt)( gindex - gnode->gindex ) < snode->count );
+    result = FT_BOOL( gnode->family == gquery->family       &&
+                      gindex - gnode->gindex < snode->count );
     if ( result )
     {
       /* check if we need to load the glyph bitmap now */
@@ -390,7 +397,7 @@
         {
           error = ftc_snode_load( snode, cache->manager, gindex, &size );
         }
-        FTC_CACHE_TRYLOOP_END( list_changed );
+        FTC_CACHE_TRYLOOP_END( list_changed )
 
         ftcsnode->ref_count--;  /* unlock the node */
 
diff --git a/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.h b/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.h
index 46f797e724..8f10070457 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.h
+++ b/qtbase/src/3rdparty/freetype/src/cache/ftcsbits.h
@@ -4,7 +4,7 @@
  *
  *   A small-bitmap cache (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -61,7 +61,7 @@ FT_BEGIN_HEADER
 
   typedef const FTC_SFamilyClassRec*  FTC_SFamilyClass;
 
-#define FTC_SFAMILY_CLASS( x )  ((FTC_SFamilyClass)(x))
+#define FTC_SFAMILY_CLASS( x )  ( (FTC_SFamilyClass)(x) )
 
 #define FTC_CACHE_SFAMILY_CLASS( x )  \
           FTC_SFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS( x )->family_class )
diff --git a/qtbase/src/3rdparty/freetype/src/cache/rules.mk b/qtbase/src/3rdparty/freetype/src/cache/rules.mk
index 4738b5153a..778e19e580 100644
--- a/qtbase/src/3rdparty/freetype/src/cache/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/cache/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2000-2020 by
+# Copyright (C) 2000-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cff.c b/qtbase/src/3rdparty/freetype/src/cff/cff.c
index 0fa6c87870..1ac0beb06a 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cff.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cff.c
@@ -4,7 +4,7 @@
  *
  *   FreeType OpenType driver component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffcmap.c b/qtbase/src/3rdparty/freetype/src/cff/cffcmap.c
index 6d16ed4226..2d667a7248 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffcmap.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffcmap.c
@@ -4,7 +4,7 @@
  *
  *   CFF character mapping table (cmap) support (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -81,7 +81,7 @@
 
     if ( char_code < 255 )
     {
-      FT_UInt  code = (FT_UInt)(char_code + 1);
+      FT_UInt  code = (FT_UInt)( char_code + 1 );
 
 
       for (;;)
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffcmap.h b/qtbase/src/3rdparty/freetype/src/cff/cffcmap.h
index 69fab8dc6c..2818d3c6fe 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffcmap.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffcmap.h
@@ -4,7 +4,7 @@
  *
  *   CFF character mapping table (cmap) support (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.c b/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.c
index 486ab24235..d945afdfe8 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.c
@@ -4,7 +4,7 @@
  *
  *   OpenType font driver implementation (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -345,8 +345,8 @@
       else
       {
         FT_ERROR(( "cff_get_glyph_name:"
-                   " cannot get glyph name from a CFF2 font\n"
-                   "                   "
+                   " cannot get glyph name from a CFF2 font\n" ));
+        FT_ERROR(( "                   "
                    " without the `psnames' module\n" ));
         error = FT_THROW( Missing_Module );
         goto Exit;
@@ -356,8 +356,8 @@
     if ( !font->psnames )
     {
       FT_ERROR(( "cff_get_glyph_name:"
-                 " cannot get glyph name from CFF & CEF fonts\n"
-                 "                   "
+                 " cannot get glyph name from CFF & CEF fonts\n" ));
+      FT_ERROR(( "                   "
                  " without the `psnames' module\n" ));
       error = FT_THROW( Missing_Module );
       goto Exit;
@@ -412,8 +412,8 @@
       else
       {
         FT_ERROR(( "cff_get_name_index:"
-                   " cannot get glyph index from a CFF2 font\n"
-                   "                   "
+                   " cannot get glyph index from a CFF2 font\n" ));
+        FT_ERROR(( "                   "
                    " without the `psnames' module\n" ));
         return 0;
       }
@@ -474,11 +474,11 @@
     if ( cff && !cff->font_info )
     {
       CFF_FontRecDict  dict      = &cff->top_font.font_dict;
-      PS_FontInfoRec  *font_info = NULL;
       FT_Memory        memory    = face->root.memory;
+      PS_FontInfoRec*  font_info = NULL;
 
 
-      if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )
+      if ( FT_QNEW( font_info ) )
         goto Fail;
 
       font_info->version     = cff_index_get_sid_string( cff,
@@ -515,15 +515,15 @@
     FT_Error  error = FT_Err_Ok;
 
 
-    if ( cff && cff->font_extra == NULL )
+    if ( cff && !cff->font_extra )
     {
       CFF_FontRecDict   dict       = &cff->top_font.font_dict;
-      PS_FontExtraRec*  font_extra = NULL;
       FT_Memory         memory     = face->root.memory;
+      PS_FontExtraRec*  font_extra = NULL;
       FT_String*        embedded_postscript;
 
 
-      if ( FT_ALLOC( font_extra, sizeof ( *font_extra ) ) )
+      if ( FT_QNEW( font_extra ) )
         goto Fail;
 
       font_extra->fs_type = 0U;
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.h b/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.h
index d198dd35cb..a312003be7 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffdrivr.h
@@ -4,7 +4,7 @@
  *
  *   High-level OpenType driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cfferrs.h b/qtbase/src/3rdparty/freetype/src/cff/cfferrs.h
index 5b00a3f0a2..90d32897c7 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cfferrs.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cfferrs.h
@@ -4,7 +4,7 @@
  *
  *   CFF error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffgload.c b/qtbase/src/3rdparty/freetype/src/cff/cffgload.c
index feee38a413..7586b886f1 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffgload.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffgload.c
@@ -4,7 +4,7 @@
  *
  *   OpenType Glyph Loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -29,6 +29,14 @@
 
 #include "cfferrs.h"
 
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#define IS_DEFAULT_INSTANCE( _face )             \
+          ( !( FT_IS_NAMED_INSTANCE( _face ) ||  \
+               FT_IS_VARIATION( _face )      ) )
+#else
+#define IS_DEFAULT_INSTANCE( _face )  1
+#endif
+
 
   /**************************************************************************
    *
@@ -59,7 +67,7 @@
 
 
       *pointer = (FT_Byte*)data.pointer;
-      *length  = (FT_ULong)data.length;
+      *length  = data.length;
 
       return error;
     }
@@ -67,7 +75,7 @@
 #endif /* FT_CONFIG_OPTION_INCREMENTAL */
 
     {
-      CFF_Font  cff = (CFF_Font)(face->extra.data);
+      CFF_Font  cff = (CFF_Font)( face->extra.data );
 
 
       return cff_index_access_element( &cff->charstrings_index, glyph_index,
@@ -94,7 +102,7 @@
 
 
       data.pointer = *pointer;
-      data.length  = (FT_Int)length;
+      data.length  = (FT_UInt)length;
 
       face->root.internal->incremental_interface->funcs->free_glyph_data(
         face->root.internal->incremental_interface->object, &data );
@@ -103,7 +111,7 @@
 #endif /* FT_CONFIG_OPTION_INCREMENTAL */
 
     {
-      CFF_Font  cff = (CFF_Font)(face->extra.data);
+      CFF_Font  cff = (CFF_Font)( face->extra.data );
 
 
       cff_index_forget_element( &cff->charstrings_index, pointer );
@@ -255,8 +263,8 @@
 
 
       if ( size->strike_index != 0xFFFFFFFFUL      &&
-           sfnt->load_eblc                         &&
-           ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
+           ( load_flags & FT_LOAD_NO_BITMAP ) == 0 &&
+           IS_DEFAULT_INSTANCE( size->root.face )  )
       {
         TT_SBit_MetricsRec  metrics;
 
@@ -346,6 +354,76 @@
     if ( load_flags & FT_LOAD_SBITS_ONLY )
       return FT_THROW( Invalid_Argument );
 
+#ifdef FT_CONFIG_OPTION_SVG
+    /* check for OT-SVG */
+    if ( ( load_flags & FT_LOAD_COLOR )     &&
+         ( (TT_Face)glyph->root.face )->svg )
+    {
+      /*
+       * We load the SVG document and try to grab the advances from the
+       * table.  For the bearings we rely on the presetting hook to do that.
+       */
+
+      FT_Short      dummy;
+      FT_UShort     advanceX;
+      FT_UShort     advanceY;
+      SFNT_Service  sfnt;
+
+
+      if ( size && (size->root.metrics.x_ppem < 1 ||
+                    size->root.metrics.y_ppem < 1 ) )
+      {
+        error = FT_THROW( Invalid_Size_Handle );
+        return error;
+      }
+
+      FT_TRACE3(( "Trying to load SVG glyph\n" ));
+
+      sfnt  = (SFNT_Service)((TT_Face)glyph->root.face)->sfnt;
+      error = sfnt->load_svg_doc( (FT_GlyphSlot)glyph, glyph_index );
+      if ( !error )
+      {
+        FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
+
+        glyph->root.format = FT_GLYPH_FORMAT_SVG;
+
+        /*
+         * If horizontal or vertical advances are not present in the table,
+         * this is a problem with the font since the standard requires them.
+         * However, we are graceful and calculate the values by ourselves
+         * for the vertical case.
+         */
+        sfnt->get_metrics( face,
+                           FALSE,
+                           glyph_index,
+                           &dummy,
+                           &advanceX );
+        sfnt->get_metrics( face,
+                           TRUE,
+                           glyph_index,
+                           &dummy,
+                           &advanceY );
+
+        advanceX =
+          (FT_UShort)FT_MulDiv( advanceX,
+                                glyph->root.face->size->metrics.x_ppem,
+                                glyph->root.face->units_per_EM );
+        advanceY =
+          (FT_UShort)FT_MulDiv( advanceY,
+                                glyph->root.face->size->metrics.y_ppem,
+                                glyph->root.face->units_per_EM );
+
+        glyph->root.metrics.horiAdvance = advanceX << 6;
+        glyph->root.metrics.vertAdvance = advanceY << 6;
+
+        return error;
+      }
+
+      FT_TRACE3(( "Failed to load SVG glyph\n" ));
+    }
+
+#endif /* FT_CONFIG_OPTION_SVG */
+
     /* if we have a CID subfont, use its matrix (which has already */
     /* been multiplied with the root matrix)                       */
 
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffgload.h b/qtbase/src/3rdparty/freetype/src/cff/cffgload.h
index 3b312f452e..33616b9684 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffgload.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffgload.h
@@ -4,7 +4,7 @@
  *
  *   OpenType Glyph Loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffload.c b/qtbase/src/3rdparty/freetype/src/cff/cffload.c
index 73d3eecd31..d6f8a1013d 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffload.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffload.c
@@ -4,7 +4,7 @@
  *
  *   OpenType and CFF data/program tables loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -356,9 +356,9 @@
 
       data_size = (FT_ULong)( idx->count + 1 ) * offsize;
 
-      if ( FT_NEW_ARRAY( idx->offsets, idx->count + 1 ) ||
-           FT_STREAM_SEEK( idx->start + idx->hdr_size ) ||
-           FT_FRAME_ENTER( data_size )                  )
+      if ( FT_QNEW_ARRAY( idx->offsets, idx->count + 1 ) ||
+           FT_STREAM_SEEK( idx->start + idx->hdr_size )  ||
+           FT_FRAME_ENTER( data_size )                   )
         goto Exit;
 
       poff   = idx->offsets;
@@ -400,7 +400,7 @@
 
   /* Allocate a table containing pointers to an index's elements. */
   /* The `pool' argument makes this function convert the index    */
-  /* entries to C-style strings (this is, NULL-terminated).       */
+  /* entries to C-style strings (this is, null-terminated).       */
   static FT_Error
   cff_index_get_pointers( CFF_Index   idx,
                           FT_Byte***  table,
@@ -427,7 +427,7 @@
     new_size = idx->data_size + idx->count;
 
     if ( idx->count > 0                                &&
-         !FT_NEW_ARRAY( tbl, idx->count + 1 )          &&
+         !FT_QNEW_ARRAY( tbl, idx->count + 1 )         &&
          ( !pool || !FT_ALLOC( new_bytes, new_size ) ) )
     {
       FT_ULong  n, cur_offset;
@@ -622,7 +622,7 @@
     FT_Byte*    bytes;
     FT_ULong    byte_len;
     FT_Error    error;
-    FT_String*  name = 0;
+    FT_String*  name = NULL;
 
 
     if ( !idx->stream )  /* CFF2 does not include a name index */
@@ -634,10 +634,9 @@
     if ( error )
       goto Exit;
 
-    if ( !FT_ALLOC( name, byte_len + 1 ) )
+    if ( !FT_QALLOC( name, byte_len + 1 ) )
     {
-      if ( byte_len )
-        FT_MEM_COPY( name, bytes, byte_len );
+      FT_MEM_COPY( name, bytes, byte_len );
       name[byte_len] = 0;
     }
     cff_index_forget_element( idx, &bytes );
@@ -772,8 +771,7 @@
 
     case 3:
       /* first, compare to the cache */
-      if ( (FT_UInt)( glyph_index - fdselect->cache_first ) <
-                        fdselect->cache_count )
+      if ( glyph_index - fdselect->cache_first < fdselect->cache_count )
       {
         fd = fdselect->cache_fd;
         break;
@@ -836,7 +834,6 @@
   {
     FT_Error   error   = FT_Err_Ok;
     FT_UInt    i;
-    FT_Long    j;
     FT_UShort  max_cid = 0;
 
 
@@ -854,9 +851,10 @@
 
     /* When multiple GIDs map to the same CID, we choose the lowest */
     /* GID.  This is not described in any spec, but it matches the  */
-    /* behaviour of recent Acroread versions.                       */
-    for ( j = (FT_Long)num_glyphs - 1; j >= 0; j-- )
-      charset->cids[charset->sids[j]] = (FT_UShort)j;
+    /* behaviour of recent Acroread versions.  The loop stops when  */
+    /* the unsigned index wraps around after reaching zero.         */
+    for ( i = num_glyphs - 1; i < num_glyphs; i-- )
+      charset->cids[charset->sids[i]] = (FT_UShort)i;
 
     charset->max_cid    = max_cid;
     charset->num_glyphs = num_glyphs;
@@ -932,7 +930,7 @@
         goto Exit;
 
       /* Allocate memory for sids. */
-      if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
+      if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) )
         goto Exit;
 
       /* assign the .notdef glyph */
@@ -1018,14 +1016,14 @@
       case 0:
         if ( num_glyphs > 229 )
         {
-          FT_ERROR(( "cff_charset_load: implicit charset larger than\n"
-                     "predefined charset (Adobe ISO-Latin)\n" ));
+          FT_ERROR(( "cff_charset_load: implicit charset larger than\n" ));
+          FT_ERROR(( "predefined charset (Adobe ISO-Latin)\n" ));
           error = FT_THROW( Invalid_File_Format );
           goto Exit;
         }
 
         /* Allocate memory for sids. */
-        if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
+        if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) )
           goto Exit;
 
         /* Copy the predefined charset into the allocated memory. */
@@ -1036,14 +1034,14 @@
       case 1:
         if ( num_glyphs > 166 )
         {
-          FT_ERROR(( "cff_charset_load: implicit charset larger than\n"
-                     "predefined charset (Adobe Expert)\n" ));
+          FT_ERROR(( "cff_charset_load: implicit charset larger than\n" ));
+          FT_ERROR(( "predefined charset (Adobe Expert)\n" ));
           error = FT_THROW( Invalid_File_Format );
           goto Exit;
         }
 
         /* Allocate memory for sids. */
-        if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
+        if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) )
           goto Exit;
 
         /* Copy the predefined charset into the allocated memory.     */
@@ -1054,14 +1052,14 @@
       case 2:
         if ( num_glyphs > 87 )
         {
-          FT_ERROR(( "cff_charset_load: implicit charset larger than\n"
-                     "predefined charset (Adobe Expert Subset)\n" ));
+          FT_ERROR(( "cff_charset_load: implicit charset larger than\n" ));
+          FT_ERROR(( "predefined charset (Adobe Expert Subset)\n" ));
           error = FT_THROW( Invalid_File_Format );
           goto Exit;
         }
 
         /* Allocate memory for sids. */
-        if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
+        if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) )
           goto Exit;
 
         /* Copy the predefined charset into the allocated memory.     */
@@ -1087,7 +1085,6 @@
       FT_FREE( charset->cids );
       charset->format = 0;
       charset->offset = 0;
-      charset->sids   = 0;
     }
 
     return error;
@@ -1141,6 +1138,8 @@
     {
       FT_UInt   vsOffset;
       FT_UInt   format;
+      FT_UInt   dataCount;
+      FT_UInt   regionCount;
       FT_ULong  regionListOffset;
 
 
@@ -1163,16 +1162,16 @@
       }
 
       /* read top level fields */
-      if ( FT_READ_ULONG( regionListOffset )   ||
-           FT_READ_USHORT( vstore->dataCount ) )
+      if ( FT_READ_ULONG( regionListOffset ) ||
+           FT_READ_USHORT( dataCount )       )
         goto Exit;
 
       /* make temporary copy of item variation data offsets; */
       /* we'll parse region list first, then come back       */
-      if ( FT_NEW_ARRAY( dataOffsetArray, vstore->dataCount ) )
+      if ( FT_QNEW_ARRAY( dataOffsetArray, dataCount ) )
         goto Exit;
 
-      for ( i = 0; i < vstore->dataCount; i++ )
+      for ( i = 0; i < dataCount; i++ )
       {
         if ( FT_READ_ULONG( dataOffsetArray[i] ) )
           goto Exit;
@@ -1181,20 +1180,24 @@
       /* parse regionList and axisLists */
       if ( FT_STREAM_SEEK( vsOffset + regionListOffset ) ||
            FT_READ_USHORT( vstore->axisCount )           ||
-           FT_READ_USHORT( vstore->regionCount )         )
+           FT_READ_USHORT( regionCount )                 )
         goto Exit;
 
-      if ( FT_NEW_ARRAY( vstore->varRegionList, vstore->regionCount ) )
+      vstore->regionCount = 0;
+      if ( FT_QNEW_ARRAY( vstore->varRegionList, regionCount ) )
         goto Exit;
 
-      for ( i = 0; i < vstore->regionCount; i++ )
+      for ( i = 0; i < regionCount; i++ )
       {
         CFF_VarRegion*  region = &vstore->varRegionList[i];
 
 
-        if ( FT_NEW_ARRAY( region->axisList, vstore->axisCount ) )
+        if ( FT_QNEW_ARRAY( region->axisList, vstore->axisCount ) )
           goto Exit;
 
+        /* keep track of how many axisList to deallocate on error */
+        vstore->regionCount++;
+
         for ( j = 0; j < vstore->axisCount; j++ )
         {
           CFF_AxisCoords*  axis = &region->axisList[j];
@@ -1214,10 +1217,11 @@
       }
 
       /* use dataOffsetArray now to parse varData items */
-      if ( FT_NEW_ARRAY( vstore->varData, vstore->dataCount ) )
+      vstore->dataCount = 0;
+      if ( FT_QNEW_ARRAY( vstore->varData, dataCount ) )
         goto Exit;
 
-      for ( i = 0; i < vstore->dataCount; i++ )
+      for ( i = 0; i < dataCount; i++ )
       {
         CFF_VarData*  data = &vstore->varData[i];
 
@@ -1236,9 +1240,12 @@
         if ( FT_READ_USHORT( data->regionIdxCount ) )
           goto Exit;
 
-        if ( FT_NEW_ARRAY( data->regionIndices, data->regionIdxCount ) )
+        if ( FT_QNEW_ARRAY( data->regionIndices, data->regionIdxCount ) )
           goto Exit;
 
+        /* keep track of how many regionIndices to deallocate on error */
+        vstore->dataCount++;
+
         for ( j = 0; j < data->regionIdxCount; j++ )
         {
           if ( FT_READ_USHORT( data->regionIndices[j] ) )
@@ -1322,9 +1329,9 @@
 
       /* increase or allocate `blend_stack' and reset `blend_top'; */
       /* prepare to append `numBlends' values to the buffer        */
-      if ( FT_REALLOC( subFont->blend_stack,
-                       subFont->blend_alloc,
-                       subFont->blend_alloc + size ) )
+      if ( FT_QREALLOC( subFont->blend_stack,
+                        subFont->blend_alloc,
+                        subFont->blend_alloc + size ) )
         goto Exit;
 
       subFont->blend_top    = subFont->blend_stack + subFont->blend_used;
@@ -1437,9 +1444,7 @@
 
     /* prepare buffer for the blend vector */
     len = varData->regionIdxCount + 1;    /* add 1 for default component */
-    if ( FT_REALLOC( blend->BV,
-                     blend->lenBV * sizeof( *blend->BV ),
-                     len * sizeof( *blend->BV ) ) )
+    if ( FT_QRENEW_ARRAY( blend->BV, blend->lenBV, len ) )
       goto Exit;
 
     blend->lenBV = len;
@@ -1456,10 +1461,8 @@
       if ( master == 0 )
       {
         blend->BV[master] = FT_FIXED_ONE;
-        FT_TRACE4(( "   build blend vector len %d\n"
-                    "   [ %f ",
-                    len,
-                    blend->BV[master] / 65536.0 ));
+        FT_TRACE4(( "   build blend vector len %d\n", len ));
+        FT_TRACE4(( "   [ %f ", blend->BV[master] / 65536.0 ));
         continue;
       }
 
@@ -1543,9 +1546,7 @@
     if ( lenNDV != 0 )
     {
       /* user has set a normalized vector */
-      if ( FT_REALLOC( blend->lastNDV,
-                       blend->lenNDV * sizeof ( *NDV ),
-                       lenNDV * sizeof ( *NDV ) ) )
+      if ( FT_QRENEW_ARRAY( blend->lastNDV, blend->lenNDV, lenNDV ) )
         goto Exit;
 
       FT_MEM_COPY( blend->lastNDV,
@@ -1827,7 +1828,8 @@
         /* Construct code to GID mapping from code to SID mapping */
         /* and charset.                                           */
 
-        encoding->count = 0;
+        encoding->offset = offset; /* used in cff_face_init */
+        encoding->count  = 0;
 
         error = cff_charset_compute_cids( charset, num_glyphs,
                                           stream->memory );
@@ -2363,8 +2365,8 @@
       if ( font->name_index.count > 1 )
       {
         FT_ERROR(( "cff_font_load:"
-                   " invalid CFF font with multiple subfonts\n"
-                   "              "
+                   " invalid CFF font with multiple subfonts\n" ));
+        FT_ERROR(( "              "
                    " in SFNT wrapper\n" ));
         error = FT_THROW( Invalid_File_Format );
         goto Exit;
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffload.h b/qtbase/src/3rdparty/freetype/src/cff/cffload.h
index fc998db2db..a3cc642b77 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffload.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffload.h
@@ -4,7 +4,7 @@
  *
  *   OpenType & CFF data/program tables loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffobjs.c b/qtbase/src/3rdparty/freetype/src/cff/cffobjs.c
index d555d52358..fa42accb65 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffobjs.c
@@ -4,7 +4,7 @@
  *
  *   OpenType objects manager (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -283,6 +283,8 @@
   cff_size_request( FT_Size          size,
                     FT_Size_Request  req )
   {
+    FT_Error  error;
+
     CFF_Size           cffsize = (CFF_Size)size;
     PSH_Globals_Funcs  funcs;
 
@@ -304,7 +306,9 @@
 
 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
 
-    FT_Request_Metrics( size->face, req );
+    error = FT_Request_Metrics( size->face, req );
+    if ( error )
+      goto Exit;
 
     funcs = cff_size_get_globals_funcs( cffsize );
 
@@ -345,7 +349,8 @@
       }
     }
 
-    return FT_Err_Ok;
+  Exit:
+    return error;
   }
 
 
@@ -406,9 +411,7 @@
     FT_String*  result;
 
 
-    (void)FT_STRDUP( result, source );
-
-    FT_UNUSED( error );
+    FT_MEM_STRDUP( result, source );
 
     return result;
   }
@@ -659,8 +662,8 @@
       if ( dict->cid_registry == 0xFFFFU && !psnames )
       {
         FT_ERROR(( "cff_face_init:"
-                   " cannot open CFF & CEF fonts\n"
-                   "              "
+                   " cannot open CFF & CEF fonts\n" ));
+        FT_ERROR(( "              "
                    " without the `psnames' module\n" ));
         error = FT_THROW( Missing_Module );
         goto Exit;
@@ -684,13 +687,13 @@
 
         /* In Multiple Master CFFs, two SIDs hold the Normalize Design  */
         /* Vector (NDV) and Convert Design Vector (CDV) charstrings,    */
-        /* which may contain NULL bytes in the middle of the data, too. */
+        /* which may contain null bytes in the middle of the data, too. */
         /* We thus access `cff->strings' directly.                      */
         for ( idx = 1; idx < cff->num_strings; idx++ )
         {
           FT_Byte*    s1    = cff->strings[idx - 1];
           FT_Byte*    s2    = cff->strings[idx];
-          FT_PtrDist  s1len = s2 - s1 - 1; /* without the final NULL byte */
+          FT_PtrDist  s1len = s2 - s1 - 1; /* without the final null byte */
           FT_PtrDist  l;
 
 
@@ -1049,11 +1052,11 @@
       {
         FT_CharMapRec  cmaprec;
         FT_CharMap     cmap;
-        FT_UInt        nn;
+        FT_Int         nn;
         CFF_Encoding   encoding = &cff->encoding;
 
 
-        for ( nn = 0; nn < (FT_UInt)cffface->num_charmaps; nn++ )
+        for ( nn = 0; nn < cffface->num_charmaps; nn++ )
         {
           cmap = cffface->charmaps[nn];
 
@@ -1078,7 +1081,7 @@
         cmaprec.encoding_id = TT_MS_ID_UNICODE_CS;
         cmaprec.encoding    = FT_ENCODING_UNICODE;
 
-        nn = (FT_UInt)cffface->num_charmaps;
+        nn = cffface->num_charmaps;
 
         error = FT_CMap_New( &cff_cmap_unicode_class_rec, NULL,
                              &cmaprec, NULL );
@@ -1089,7 +1092,7 @@
         error = FT_Err_Ok;
 
         /* if no Unicode charmap was previously selected, select this one */
-        if ( !cffface->charmap && nn != (FT_UInt)cffface->num_charmaps )
+        if ( !cffface->charmap && nn != cffface->num_charmaps )
           cffface->charmap = cffface->charmaps[nn];
 
       Skip_Unicode:
@@ -1174,11 +1177,7 @@
 
 
     /* set default property values, cf. `ftcffdrv.h' */
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
-    driver->hinting_engine = FT_HINTING_FREETYPE;
-#else
     driver->hinting_engine = FT_HINTING_ADOBE;
-#endif
 
     driver->no_stem_darkening = TRUE;
 
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffobjs.h b/qtbase/src/3rdparty/freetype/src/cff/cffobjs.h
index 845bd90941..d48c1cded9 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffobjs.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffobjs.h
@@ -4,7 +4,7 @@
  *
  *   OpenType objects manager (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffparse.c b/qtbase/src/3rdparty/freetype/src/cff/cffparse.c
index 69bcd5d957..2536a21866 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffparse.c
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffparse.c
@@ -4,7 +4,7 @@
  *
  *   CFF token stream parser (body)
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -62,7 +62,7 @@
     parser->num_axes    = num_axes;
 
     /* allocate the stack buffer */
-    if ( FT_NEW_ARRAY( parser->stack, stackSize ) )
+    if ( FT_QNEW_ARRAY( parser->stack, stackSize ) )
     {
       FT_FREE( parser->stack );
       goto Exit;
@@ -713,9 +713,10 @@
            ( max_scaling - min_scaling ) > 9 )
       {
         FT_TRACE1(( "cff_parse_font_matrix:"
-                    " strange scaling values (minimum %ld, maximum %ld),\n"
-                    "                      "
-                    " using default matrix\n", min_scaling, max_scaling ));
+                    " strange scaling values (minimum %ld, maximum %ld),\n",
+                    min_scaling, max_scaling ));
+        FT_TRACE1(( "                      "
+                    " using default matrix\n" ));
         goto Unlikely;
       }
 
@@ -1515,6 +1516,7 @@
 
               case cff_kind_fixed_thousand:
                 FT_TRACE4(( " %f\n", (double)val / 65536 / 1000 ));
+                break;
 
               default:
                 ; /* never reached */
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cffparse.h b/qtbase/src/3rdparty/freetype/src/cff/cffparse.h
index 6f3fbb37d6..55b6fe6e7c 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cffparse.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cffparse.h
@@ -4,7 +4,7 @@
  *
  *   CFF token stream parser (specification)
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/cfftoken.h b/qtbase/src/3rdparty/freetype/src/cff/cfftoken.h
index 4c6a53eec1..15237de9e5 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/cfftoken.h
+++ b/qtbase/src/3rdparty/freetype/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
  *
  *   CFF token definitions (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/module.mk b/qtbase/src/3rdparty/freetype/src/cff/module.mk
index bd728c6a34..eb1227175e 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/cff/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/cff/rules.mk b/qtbase/src/3rdparty/freetype/src/cff/rules.mk
index 70bb92d506..569a84c7cc 100644
--- a/qtbase/src/3rdparty/freetype/src/cff/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/cff/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/ciderrs.h b/qtbase/src/3rdparty/freetype/src/cid/ciderrs.h
index f698bb2293..d07da5a01d 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/ciderrs.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/ciderrs.h
@@ -4,7 +4,7 @@
  *
  *   CID error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidgload.c b/qtbase/src/3rdparty/freetype/src/cid/cidgload.c
index 54aa62f810..24d37d3295 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidgload.c
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidgload.c
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 Glyph Loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -63,7 +63,7 @@
 #endif
 
 
-    FT_TRACE1(( "cid_load_glyph: glyph index %d\n", glyph_index ));
+    FT_TRACE1(( "cid_load_glyph: glyph index %u\n", glyph_index ));
 
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
 
@@ -76,20 +76,17 @@
 
       error = inc->funcs->get_glyph_data( inc->object,
                                           glyph_index, &glyph_data );
-      if ( error )
+      if ( error || glyph_data.length < cid->fd_bytes )
         goto Exit;
 
       p         = (FT_Byte*)glyph_data.pointer;
-      fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
+      fd_select = cid_get_offset( &p, cid->fd_bytes );
 
-      if ( glyph_data.length != 0 )
-      {
-        glyph_length = (FT_ULong)( glyph_data.length - cid->fd_bytes );
-        (void)FT_ALLOC( charstring, glyph_length );
-        if ( !error )
-          ft_memcpy( charstring, glyph_data.pointer + cid->fd_bytes,
+      glyph_length = glyph_data.length - cid->fd_bytes;
+
+      if ( !FT_QALLOC( charstring, glyph_length ) )
+        FT_MEM_COPY( charstring, glyph_data.pointer + cid->fd_bytes,
                      glyph_length );
-      }
 
       inc->funcs->free_glyph_data( inc->object, &glyph_data );
 
@@ -104,7 +101,7 @@
     /* For ordinary fonts read the CID font dictionary index */
     /* and charstring offset from the CIDMap.                */
     {
-      FT_UInt   entry_len = (FT_UInt)( cid->fd_bytes + cid->gd_bytes );
+      FT_UInt   entry_len = cid->fd_bytes + cid->gd_bytes;
       FT_ULong  off1, off2;
 
 
@@ -114,15 +111,15 @@
         goto Exit;
 
       p         = (FT_Byte*)stream->cursor;
-      fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
-      off1      = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
+      fd_select = cid_get_offset( &p, cid->fd_bytes );
+      off1      = cid_get_offset( &p, cid->gd_bytes );
       p        += cid->fd_bytes;
-      off2      = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
+      off2      = cid_get_offset( &p, cid->gd_bytes );
       FT_FRAME_EXIT();
 
-      if ( fd_select >= (FT_ULong)cid->num_dicts ||
-           off2 > stream->size                   ||
-           off1 > off2                           )
+      if ( fd_select >= cid->num_dicts ||
+           off2 > stream->size         ||
+           off1 > off2                 )
       {
         FT_TRACE0(( "cid_load_glyph: invalid glyph stream offsets\n" ));
         error = FT_THROW( Invalid_Offset );
@@ -130,11 +127,10 @@
       }
 
       glyph_length = off2 - off1;
-      if ( glyph_length == 0 )
-        goto Exit;
-      if ( FT_ALLOC( charstring, glyph_length ) )
-        goto Exit;
-      if ( FT_STREAM_READ_AT( cid->data_offset + off1,
+
+      if ( glyph_length == 0                             ||
+           FT_QALLOC( charstring, glyph_length )         ||
+           FT_STREAM_READ_AT( cid->data_offset + off1,
                               charstring, glyph_length ) )
         goto Exit;
     }
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidgload.h b/qtbase/src/3rdparty/freetype/src/cid/cidgload.h
index da36e37e06..c06bb29d3d 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidgload.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidgload.h
@@ -4,7 +4,7 @@
  *
  *   OpenType Glyph Loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidload.c b/qtbase/src/3rdparty/freetype/src/cid/cidload.c
index bb9136a3df..fe8fa1abff 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidload.c
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidload.c
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 font loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -41,7 +41,7 @@
   /* read a single offset */
   FT_LOCAL_DEF( FT_ULong )
   cid_get_offset( FT_Byte*  *start,
-                  FT_Byte    offsize )
+                  FT_UInt    offsize )
   {
     FT_ULong  result;
     FT_Byte*  p = *start;
@@ -113,7 +113,7 @@
         CID_FaceDict  dict;
 
 
-        if ( parser->num_dict < 0 || parser->num_dict >= cid->num_dicts )
+        if ( parser->num_dict >= cid->num_dicts )
         {
           FT_ERROR(( "cid_load_keyword: invalid use of `%s'\n",
                      keyword->ident ));
@@ -164,7 +164,7 @@
     FT_Fixed      temp_scale;
 
 
-    if ( parser->num_dict >= 0 && parser->num_dict < face->cid.num_dicts )
+    if ( parser->num_dict < face->cid.num_dicts )
     {
       FT_Matrix*  matrix;
       FT_Vector*  offset;
@@ -244,11 +244,11 @@
     FT_Memory     memory = face->root.memory;
     FT_Stream     stream = parser->stream;
     FT_Error      error  = FT_Err_Ok;
-    FT_Long       num_dicts;
+    FT_Long       num_dicts, max_dicts;
 
 
     num_dicts = cid_parser_to_int( parser );
-    if ( num_dicts < 0 )
+    if ( num_dicts < 0 || num_dicts > FT_INT_MAX )
     {
       FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
       goto Exit;
@@ -272,18 +272,18 @@
      * need a `dup X' at the very beginning and a `put' at the end, so a
      * rough guess using 100 bytes as the minimum is justified.
      */
-    if ( (FT_ULong)num_dicts > stream->size / 100 )
+    max_dicts = (FT_Long)( stream->size / 100 );
+    if ( num_dicts > max_dicts )
     {
       FT_TRACE0(( "parse_fd_array: adjusting FDArray size"
                   " (from %ld to %ld)\n",
-                  num_dicts,
-                  stream->size / 100 ));
-      num_dicts = (FT_Long)( stream->size / 100 );
+                  num_dicts, max_dicts ));
+      num_dicts = max_dicts;
     }
 
     if ( !cid->font_dicts )
     {
-      FT_Int  n;
+      FT_UInt  n;
 
 
       if ( FT_NEW_ARRAY( cid->font_dicts, num_dicts ) )
@@ -322,7 +322,7 @@
     CID_FaceDict  dict;
 
 
-    if ( parser->num_dict >= 0 && parser->num_dict < face->cid.num_dicts )
+    if ( parser->num_dict < face->cid.num_dicts )
     {
       dict = face->cid.font_dicts + parser->num_dict;
 
@@ -345,7 +345,7 @@
                    CID_Parser*  parser )
   {
 #ifdef FT_DEBUG_LEVEL_TRACE
-    if ( parser->num_dict >= 0 && parser->num_dict < face->cid.num_dicts )
+    if ( parser->num_dict < face->cid.num_dicts )
     {
       T1_TokenRec  token;
       FT_UInt      len;
@@ -427,7 +427,7 @@
               parser->num_dict++;
 
 #ifdef FT_DEBUG_LEVEL_TRACE
-              FT_TRACE4(( " FontDict %d", parser->num_dict ));
+              FT_TRACE4(( " FontDict %u", parser->num_dict ));
               if ( parser->num_dict > face->cid.num_dicts )
                 FT_TRACE4(( " (ignored)" ));
               FT_TRACE4(( "\n" ));
@@ -517,7 +517,7 @@
     FT_Memory      memory = face->root.memory;
     FT_Stream      stream = face->cid_stream;
     FT_Error       error;
-    FT_Int         n;
+    FT_UInt        n;
     CID_Subrs      subr;
     FT_UInt        max_offsets = 0;
     FT_ULong*      offsets = NULL;
@@ -552,20 +552,20 @@
           goto Fail;
         }
 
-        if ( FT_RENEW_ARRAY( offsets, max_offsets, new_max ) )
+        if ( FT_QRENEW_ARRAY( offsets, max_offsets, new_max ) )
           goto Fail;
 
         max_offsets = new_max;
       }
 
       /* read the subrmap's offsets */
-      if ( FT_STREAM_SEEK( cid->data_offset + dict->subrmap_offset )     ||
-           FT_FRAME_ENTER( ( num_subrs + 1 ) * (FT_UInt)dict->sd_bytes ) )
+      if ( FT_STREAM_SEEK( cid->data_offset + dict->subrmap_offset ) ||
+           FT_FRAME_ENTER( ( num_subrs + 1 ) * dict->sd_bytes )      )
         goto Fail;
 
       p = (FT_Byte*)stream->cursor;
       for ( count = 0; count <= num_subrs; count++ )
-        offsets[count] = cid_get_offset( &p, (FT_Byte)dict->sd_bytes );
+        offsets[count] = cid_get_offset( &p, dict->sd_bytes );
 
       FT_FRAME_EXIT();
 
@@ -589,12 +589,12 @@
       /* allocate, and read them                     */
       data_len = offsets[num_subrs] - offsets[0];
 
-      if ( FT_NEW_ARRAY( subr->code, num_subrs + 1 ) ||
-           FT_ALLOC( subr->code[0], data_len )       )
+      if ( FT_QNEW_ARRAY( subr->code, num_subrs + 1 ) ||
+           FT_QALLOC( subr->code[0], data_len )       )
         goto Fail;
 
       if ( FT_STREAM_SEEK( cid->data_offset + offsets[0] ) ||
-           FT_STREAM_READ( subr->code[0], data_len )  )
+           FT_STREAM_READ( subr->code[0], data_len )       )
         goto Fail;
 
       /* set up pointers */
@@ -665,17 +665,18 @@
 
 
   static FT_Error
-  cid_hex_to_binary( FT_Byte*  data,
-                     FT_ULong  data_len,
-                     FT_ULong  offset,
-                     CID_Face  face )
+  cid_hex_to_binary( FT_Byte*   data,
+                     FT_ULong   data_len,
+                     FT_ULong   offset,
+                     CID_Face   face,
+                     FT_ULong*  data_written )
   {
     FT_Stream  stream = face->root.stream;
     FT_Error   error;
 
     FT_Byte    buffer[256];
     FT_Byte   *p, *plimit;
-    FT_Byte   *d, *dlimit;
+    FT_Byte   *d = data, *dlimit;
     FT_Byte    val;
 
     FT_Bool    upper_nibble, done;
@@ -684,7 +685,6 @@
     if ( FT_STREAM_SEEK( offset ) )
       goto Exit;
 
-    d      = data;
     dlimit = d + data_len;
     p      = buffer;
     plimit = p;
@@ -758,6 +758,7 @@
     error = FT_Err_Ok;
 
   Exit:
+    *data_written = (FT_ULong)( d - data );
     return error;
   }
 
@@ -770,12 +771,11 @@
     CID_Parser*  parser;
     FT_Memory    memory = face->root.memory;
     FT_Error     error;
-    FT_Int       n;
+    FT_UInt      n;
 
     CID_FaceInfo  cid = &face->cid;
 
     FT_ULong  binary_length;
-    FT_ULong  entry_len;
 
 
     cid_init_loader( &loader, face );
@@ -803,8 +803,8 @@
       if ( parser->binary_length >
              face->root.stream->size - parser->data_offset )
       {
-        FT_TRACE0(( "cid_face_open: adjusting length of binary data\n"
-                    "               (from %ld to %ld bytes)\n",
+        FT_TRACE0(( "cid_face_open: adjusting length of binary data\n" ));
+        FT_TRACE0(( "               (from %lu to %lu bytes)\n",
                     parser->binary_length,
                     face->root.stream->size - parser->data_offset ));
         parser->binary_length = face->root.stream->size -
@@ -812,15 +812,16 @@
       }
 
       /* we must convert the data section from hexadecimal to binary */
-      if ( FT_ALLOC( face->binary_data, parser->binary_length )    ||
+      if ( FT_QALLOC( face->binary_data, parser->binary_length )   ||
            FT_SET_ERROR( cid_hex_to_binary( face->binary_data,
                                             parser->binary_length,
                                             parser->data_offset,
-                                            face ) )               )
+                                            face,
+                                            &binary_length ) )     )
         goto Exit;
 
       FT_Stream_OpenMemory( face->cid_stream,
-                            face->binary_data, parser->binary_length );
+                            face->binary_data, binary_length );
       cid->data_offset = 0;
     }
     else
@@ -831,10 +832,10 @@
 
     /* sanity tests */
 
-    if ( cid->fd_bytes < 0 || cid->gd_bytes < 1 )
+    if ( cid->gd_bytes == 0 )
     {
       FT_ERROR(( "cid_face_open:"
-                 " Invalid `FDBytes' or `GDBytes' value\n" ));
+                 " Invalid `GDBytes' value\n" ));
       error = FT_THROW( Invalid_File_Format );
       goto Exit;
     }
@@ -843,15 +844,32 @@
     if ( cid->fd_bytes > 4 || cid->gd_bytes > 4 )
     {
       FT_ERROR(( "cid_face_open:"
-                 " Values of `FDBytes' or `GDBytes' larger than 4\n"
-                 "               "
+                 " Values of `FDBytes' or `GDBytes' larger than 4\n" ));
+      FT_ERROR(( "               "
                  " are not supported\n" ));
       error = FT_THROW( Invalid_File_Format );
       goto Exit;
     }
 
     binary_length = face->cid_stream->size - cid->data_offset;
-    entry_len     = (FT_ULong)( cid->fd_bytes + cid->gd_bytes );
+
+    if ( cid->cidmap_offset > binary_length )
+    {
+      FT_ERROR(( "cid_face_open: Invalid `CIDMapOffset' value\n" ));
+      error = FT_THROW( Invalid_File_Format );
+      goto Exit;
+    }
+
+    /* the initial pre-check prevents the multiplication overflow */
+    if ( cid->cid_count > FT_ULONG_MAX / 8                    ||
+         cid->cid_count * ( cid->fd_bytes + cid->gd_bytes ) >
+           binary_length - cid->cidmap_offset                 )
+    {
+      FT_ERROR(( "cid_face_open: Invalid `CIDCount' value\n" ));
+      error = FT_THROW( Invalid_File_Format );
+      goto Exit;
+    }
+
 
     for ( n = 0; n < cid->num_dicts; n++ )
     {
@@ -877,8 +895,7 @@
         dict->private_dict.blue_fuzz = 1;
       }
 
-      if ( dict->sd_bytes < 0                        ||
-           ( dict->num_subrs && dict->sd_bytes < 1 ) )
+      if ( dict->num_subrs && dict->sd_bytes == 0 )
       {
         FT_ERROR(( "cid_face_open: Invalid `SDBytes' value\n" ));
         error = FT_THROW( Invalid_File_Format );
@@ -901,11 +918,10 @@
         goto Exit;
       }
 
-      /* `num_subrs' is scanned as a signed integer */
-      if ( (FT_Int)dict->num_subrs < 0                                     ||
-           ( dict->sd_bytes                                              &&
-             dict->num_subrs > ( binary_length - dict->subrmap_offset ) /
-                                 (FT_UInt)dict->sd_bytes                 ) )
+      /* the initial pre-check prevents the multiplication overflow */
+      if ( dict->num_subrs > FT_UINT_MAX / 4      ||
+           dict->num_subrs * dict->sd_bytes >
+             binary_length - dict->subrmap_offset )
       {
         FT_ERROR(( "cid_face_open: Invalid `SubrCount' value\n" ));
         error = FT_THROW( Invalid_File_Format );
@@ -913,22 +929,6 @@
       }
     }
 
-    if ( cid->cidmap_offset > binary_length )
-    {
-      FT_ERROR(( "cid_face_open: Invalid `CIDMapOffset' value\n" ));
-      error = FT_THROW( Invalid_File_Format );
-      goto Exit;
-    }
-
-    if ( entry_len                                            &&
-         cid->cid_count >
-           ( binary_length - cid->cidmap_offset ) / entry_len )
-    {
-      FT_ERROR(( "cid_face_open: Invalid `CIDCount' value\n" ));
-      error = FT_THROW( Invalid_File_Format );
-      goto Exit;
-    }
-
     /* we can now safely proceed */
     error = cid_read_subrs( face );
 
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidload.h b/qtbase/src/3rdparty/freetype/src/cid/cidload.h
index 06fb9ef476..90ced9280b 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidload.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidload.h
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 font loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -37,7 +37,7 @@ FT_BEGIN_HEADER
 
   FT_LOCAL( FT_ULong )
   cid_get_offset( FT_Byte**  start,
-                  FT_Byte    offsize );
+                  FT_UInt    offsize );
 
   FT_LOCAL( FT_Error )
   cid_face_open( CID_Face  face,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidobjs.c b/qtbase/src/3rdparty/freetype/src/cid/cidobjs.c
index 04b295eb8f..c39de6369c 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidobjs.c
@@ -4,7 +4,7 @@
  *
  *   CID objects manager (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -157,10 +157,14 @@
   cid_size_request( FT_Size          size,
                     FT_Size_Request  req )
   {
+    FT_Error  error;
+
     PSH_Globals_Funcs  funcs;
 
 
-    FT_Request_Metrics( size->face, req );
+    error = FT_Request_Metrics( size->face, req );
+    if ( error )
+      goto Exit;
 
     funcs = cid_size_get_globals_funcs( (CID_Size)size );
 
@@ -170,7 +174,8 @@
                         size->metrics.y_scale,
                         0, 0 );
 
-    return FT_Err_Ok;
+  Exit:
+    return error;
   }
 
 
@@ -211,7 +216,7 @@
     /* release subrs */
     if ( face->subrs )
     {
-      FT_Int  n;
+      FT_UInt  n;
 
 
       for ( n = 0; n < cid->num_dicts; n++ )
@@ -479,11 +484,7 @@
 
 
     /* set default property values, cf. `ftt1drv.h' */
-#ifdef T1_CONFIG_OPTION_OLD_ENGINE
-    driver->hinting_engine = FT_HINTING_FREETYPE;
-#else
     driver->hinting_engine = FT_HINTING_ADOBE;
-#endif
 
     driver->no_stem_darkening = TRUE;
 
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidobjs.h b/qtbase/src/3rdparty/freetype/src/cid/cidobjs.h
index 6ae3061379..fd76a1cba5 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidobjs.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidobjs.h
@@ -4,7 +4,7 @@
  *
  *   CID objects manager (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidparse.c b/qtbase/src/3rdparty/freetype/src/cid/cidparse.c
index 1fc098b448..cfc820561f 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidparse.c
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidparse.c
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 parser (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -73,7 +73,11 @@
 
     /* first of all, check the font format in the header */
     if ( FT_FRAME_ENTER( 31 ) )
+    {
+      FT_TRACE2(( "  not a CID-keyed font\n" ));
+      error = FT_THROW( Unknown_File_Format );
       goto Exit;
+    }
 
     if ( ft_strncmp( (char *)stream->cursor,
                      "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )
@@ -181,7 +185,7 @@
     parser->root.base      = parser->postscript;
     parser->root.cursor    = parser->postscript;
     parser->root.limit     = parser->root.cursor + ps_len;
-    parser->num_dict       = -1;
+    parser->num_dict       = FT_UINT_MAX;
 
     /* Finally, we check whether `StartData' or `/sfnts' was real --  */
     /* it could be in a comment or string.  We also get the arguments */
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidparse.h b/qtbase/src/3rdparty/freetype/src/cid/cidparse.h
index 0b49bebf48..ba363f7803 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidparse.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidparse.h
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 parser (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -78,7 +78,7 @@ FT_BEGIN_HEADER
     FT_ULong      binary_length;
 
     CID_FaceInfo  cid;
-    FT_Int        num_dict;
+    FT_UInt       num_dict;
 
   } CID_Parser;
 
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidriver.c b/qtbase/src/3rdparty/freetype/src/cid/cidriver.c
index d08cea1d7e..a63c01064a 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidriver.c
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidriver.c
@@ -4,7 +4,7 @@
  *
  *   CID driver interface (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidriver.h b/qtbase/src/3rdparty/freetype/src/cid/cidriver.h
index 0fc8ed37bf..5073b7a8eb 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidriver.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidriver.h
@@ -4,7 +4,7 @@
  *
  *   High-level CID driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/cidtoken.h b/qtbase/src/3rdparty/freetype/src/cid/cidtoken.h
index e9f068bb50..7640137eac 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/cidtoken.h
+++ b/qtbase/src/3rdparty/freetype/src/cid/cidtoken.h
@@ -4,7 +4,7 @@
  *
  *   CID token definitions (specification only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/module.mk b/qtbase/src/3rdparty/freetype/src/cid/module.mk
index 9fb02235e6..d4beef80eb 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/cid/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/rules.mk b/qtbase/src/3rdparty/freetype/src/cid/rules.mk
index 94f663c80e..7ed85291f8 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/cid/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/cid/type1cid.c b/qtbase/src/3rdparty/freetype/src/cid/type1cid.c
index 082e8bfe5b..b32c261376 100644
--- a/qtbase/src/3rdparty/freetype/src/cid/type1cid.c
+++ b/qtbase/src/3rdparty/freetype/src/cid/type1cid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType OpenType driver component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/dlg/dlgwrap.c b/qtbase/src/3rdparty/freetype/src/dlg/dlgwrap.c
new file mode 100644
index 0000000000..b149b79483
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/dlg/dlgwrap.c
@@ -0,0 +1,32 @@
+/****************************************************************************
+ *
+ * dlgwrap.c
+ *
+ *   Wrapper file for the 'dlg' library (body only)
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+
+
+#ifdef FT_DEBUG_LOGGING
+#define DLG_STATIC
+#include "dlg.c"
+#else
+  /* ANSI C doesn't like empty source files */
+  typedef int  _dlg_dummy;
+#endif
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/dlg/rules.mk b/qtbase/src/3rdparty/freetype/src/dlg/rules.mk
new file mode 100644
index 0000000000..0afa5d7a09
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/dlg/rules.mk
@@ -0,0 +1,70 @@
+#
+# FreeType 2 dlg logging library configuration rules
+#
+
+
+# Copyright (C) 2020-2022 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# dlg logging library directory
+#
+DLG_DIR := $(SRC_DIR)/dlg
+
+
+# compilation flags for the library
+#
+DLG_COMPILE := $(CC) $(ANSIFLAGS)                            \
+                     $I$(subst /,$(COMPILER_SEP),$(DLG_DIR)) \
+                     $(INCLUDE_FLAGS)                        \
+                     $(FT_CFLAGS)
+
+
+# dlg logging library sources (i.e., C files)
+#
+DLG_SRC := $(DLG_DIR)/dlgwrap.c
+
+# dlg logging library headers
+#
+DLG_H := $(TOP_DIR)/include/dlg/dlg.h \
+         $(TOP_DIR)/include/dlg/output.h
+
+
+# dlg logging library object(s)
+#
+#   DLG_OBJ_M is used during `multi' builds
+#   DLG_OBJ_S is used during `single' builds
+#
+DLG_OBJ_M := $(DLG_SRC:$(DLG_DIR)/%.c=$(OBJ_DIR)/%.$O)
+DLG_OBJ_S := $(OBJ_DIR)/dlg.$O
+
+# dlg logging library source file for single build
+#
+DLG_SRC_S := $(DLG_DIR)/dlgwrap.c
+
+
+# dlg logging library - single object
+#
+$(DLG_OBJ_S): $(DLG_SRC_S) $(DLG_SRC) $(FREETYPE_H) $(DLG_H)
+	$(DLG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(DLG_SRC_S))
+
+
+# dlg logging library - multiple objects
+#
+$(OBJ_DIR)/%.$O: $(DLG_DIR)/%.c $(FREETYPE_H) $(DLG_H)
+	$(DLG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# update main object lists
+#
+DLG_OBJS_S += $(DLG_OBJ_S)
+DLG_OBJS_M += $(DLG_OBJ_M)
+
+
+# EOF
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/README b/qtbase/src/3rdparty/freetype/src/gxvalid/README
index 2a32bab204..921b3ac92e 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/README
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/README
@@ -518,7 +518,7 @@ gxvalid: TrueType GX validator
 
 ------------------------------------------------------------------------
 
-Copyright (C) 2004-2020 by
+Copyright (C) 2004-2022 by
 suzuki toshiya, Masatake YAMATO, Red hat K.K.,
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.c
index 683b8a6972..9f380337c9 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType validator for TrueTypeGX/AAT tables (body only).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.h
index ff2812da20..170fde3406 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvalid.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT table validation (specification only).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvbsln.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
index ac58d4615c..9784d18c5d 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvbsln.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT bsln table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
index ead0f24cd3..999cba4e4c 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common tables validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -46,16 +46,11 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  static int
-  gxv_compare_ushort_offset( FT_UShort*  a,
-                             FT_UShort*  b )
+  FT_COMPARE_DEF( int )
+  gxv_compare_ushort_offset( const void*  a,
+                             const void*  b )
   {
-    if ( *a < *b )
-      return -1;
-    else if ( *a > *b )
-      return 1;
-    else
-      return 0;
+    return  *(FT_UShort*)a - *(FT_UShort*)b;
   }
 
 
@@ -78,7 +73,7 @@
     buff[nmemb] = limit;
 
     ft_qsort( buff, ( nmemb + 1 ), sizeof ( FT_UShort ),
-              ( int(*)(const void*, const void*) )gxv_compare_ushort_offset );
+              gxv_compare_ushort_offset );
 
     if ( buff[nmemb] > limit )
       FT_INVALID_OFFSET;
@@ -111,13 +106,17 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  static int
-  gxv_compare_ulong_offset( FT_ULong*  a,
-                            FT_ULong*  b )
+  FT_COMPARE_DEF( int )
+  gxv_compare_ulong_offset( const void*  a,
+                            const void*  b )
   {
-    if ( *a < *b )
+    FT_ULong  a_ = *(FT_ULong*)a;
+    FT_ULong  b_ = *(FT_ULong*)b;
+
+
+    if ( a_ < b_ )
       return -1;
-    else if ( *a > *b )
+    else if ( a_ > b_ )
       return 1;
     else
       return 0;
@@ -143,7 +142,7 @@
     buff[nmemb] = limit;
 
     ft_qsort( buff, ( nmemb + 1 ), sizeof ( FT_ULong ),
-              ( int(*)(const void*, const void*) )gxv_compare_ulong_offset );
+              gxv_compare_ulong_offset );
 
     if ( buff[nmemb] > limit )
       FT_INVALID_OFFSET;
@@ -439,7 +438,7 @@
       GXV_LIMIT_CHECK( 2 );
       if ( p + 2 >= limit )     /* some fonts have too-short fmt0 array */
       {
-        GXV_TRACE(( "too short, glyphs %d - %d are missing\n",
+        GXV_TRACE(( "too short, glyphs %d - %ld are missing\n",
                     i, gxvalid->face->num_glyphs ));
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
         break;
@@ -534,7 +533,7 @@
 
       if ( lastGlyph < firstGlyph )
       {
-        GXV_TRACE(( "reverse ordered range specification at unit %d:",
+        GXV_TRACE(( "reverse ordered range specification at unit %d:"
                     " lastGlyph %d < firstGlyph %d ",
                     unit, lastGlyph, firstGlyph ));
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
@@ -605,7 +604,7 @@
 
       if ( lastGlyph < firstGlyph )
       {
-        GXV_TRACE(( "reverse ordered range specification at unit %d:",
+        GXV_TRACE(( "reverse ordered range specification at unit %d:"
                     " lastGlyph %d < firstGlyph %d ",
                     unit, lastGlyph, firstGlyph ));
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
@@ -825,7 +824,7 @@
     face = gxvalid->face;
     if ( face->num_glyphs < gid )
     {
-      GXV_TRACE(( " gxv_glyphid_check() gid overflow: num_glyphs %d < %d\n",
+      GXV_TRACE(( " gxv_glyphid_check() gid overflow: num_glyphs %ld < %d\n",
                   face->num_glyphs, gid ));
       GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
     }
@@ -1034,7 +1033,7 @@
     GXV_NAME_ENTER( "StateArray" );
 
     GXV_TRACE(( "parse %d bytes by stateSize=%d maxClassID=%d\n",
-                (int)(*length_p), stateSize, (int)(maxClassID) ));
+                (int)( *length_p ), stateSize, (int)maxClassID ));
 
     /*
      * 2 states are predefined and must be described in StateArray:
@@ -1419,7 +1418,7 @@
     GXV_NAME_ENTER( "XStateArray" );
 
     GXV_TRACE(( "parse % 3d bytes by stateSize=% 3d maxClassID=% 3d\n",
-                (int)(*length_p), stateSize, (int)(maxClassID) ));
+                (int)( *length_p ), (int)stateSize, (int)maxClassID ));
 
     /*
      * 2 states are predefined and must be described:
@@ -1493,9 +1492,11 @@
       state = (FT_UShort)( newState_idx / ( 1 + maxClassID ) );
       if ( 0 != ( newState_idx % ( 1 + maxClassID ) ) )
       {
-        FT_TRACE4(( "-> new state = %d (supposed)\n"
-                    "but newState index 0x%04x is not aligned to %d-classes\n",
-                    state, newState_idx,  1 + maxClassID ));
+        FT_TRACE4(( "-> new state = %d (supposed)\n",
+                    state ));
+        FT_TRACE4(( "but newState index 0x%04x"
+                    " is not aligned to %d-classes\n",
+                    newState_idx, 1 + maxClassID ));
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
       }
 
@@ -1581,10 +1582,10 @@
     stateArray = FT_NEXT_ULONG( p );
     entryTable = FT_NEXT_ULONG( p );
 
-    GXV_TRACE(( "nClasses =0x%08x\n", gxvalid->xstatetable.nClasses ));
-    GXV_TRACE(( "offset to classTable=0x%08x\n", classTable ));
-    GXV_TRACE(( "offset to stateArray=0x%08x\n", stateArray ));
-    GXV_TRACE(( "offset to entryTable=0x%08x\n", entryTable ));
+    GXV_TRACE(( "nClasses =0x%08lx\n", gxvalid->xstatetable.nClasses ));
+    GXV_TRACE(( "offset to classTable=0x%08lx\n", classTable ));
+    GXV_TRACE(( "offset to stateArray=0x%08lx\n", stateArray ));
+    GXV_TRACE(( "offset to entryTable=0x%08lx\n", entryTable ));
 
     if ( gxvalid->xstatetable.nClasses > 0xFFFFU )
       FT_INVALID_DATA;
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
index 59d149215c..794cf0a447 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvcommn.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common tables validation (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -61,8 +61,11 @@ FT_BEGIN_HEADER
 
 #undef GXV_LOAD_UNUSED_VARS /* debug purpose */
 
-#define IS_PARANOID_VALIDATION          ( gxvalid->root->level >= FT_VALIDATE_PARANOID )
-#define GXV_SET_ERR_IF_PARANOID( err )  { if ( IS_PARANOID_VALIDATION ) ( err ); }
+#define IS_PARANOID_VALIDATION                             \
+          ( gxvalid->root->level >= FT_VALIDATE_PARANOID )
+#define GXV_SET_ERR_IF_PARANOID( err )                              \
+          do { if ( IS_PARANOID_VALIDATION ) ( err ); } while ( 0 )
+
 
   /*************************************************************************/
   /*************************************************************************/
@@ -261,17 +264,17 @@ FT_BEGIN_HEADER
   } GXV_ValidatorRec;
 
 
-#define GXV_TABLE_DATA( tag, field )                           \
+#define GXV_TABLE_DATA( tag, field )                             \
         ( ( (GXV_ ## tag ## _Data)gxvalid->table_data )->field )
 
 #undef  FT_INVALID_
-#define FT_INVALID_( _error ) \
+#define FT_INVALID_( _error )                                     \
           ft_validator_error( gxvalid->root, FT_THROW( _error ) )
 
-#define GXV_LIMIT_CHECK( _count )                                     \
-          FT_BEGIN_STMNT                                              \
+#define GXV_LIMIT_CHECK( _count )                                       \
+          FT_BEGIN_STMNT                                                \
             if ( p + _count > ( limit? limit : gxvalid->root->limit ) ) \
-              FT_INVALID_TOO_SHORT;                                   \
+              FT_INVALID_TOO_SHORT;                                     \
           FT_END_STMNT
 
 
@@ -279,19 +282,19 @@ FT_BEGIN_HEADER
 
 #define GXV_INIT  gxvalid->debug_indent = 0
 
-#define GXV_NAME_ENTER( name )                             \
-          FT_BEGIN_STMNT                                   \
-            gxvalid->debug_indent += 2;                      \
-            FT_TRACE4(( "%*.s", gxvalid->debug_indent, 0 )); \
-            FT_TRACE4(( "%s table\n", name ));             \
+#define GXV_NAME_ENTER( name )                                \
+          FT_BEGIN_STMNT                                      \
+            gxvalid->debug_indent += 2;                       \
+            FT_TRACE4(( "%*.s", gxvalid->debug_indent, "" )); \
+            FT_TRACE4(( "%s table\n", name ));                \
           FT_END_STMNT
 
 #define GXV_EXIT  gxvalid->debug_indent -= 2
 
-#define GXV_TRACE( s )                                     \
-          FT_BEGIN_STMNT                                   \
-            FT_TRACE4(( "%*.s", gxvalid->debug_indent, 0 )); \
-            FT_TRACE4( s );                                \
+#define GXV_TRACE( s )                                        \
+          FT_BEGIN_STMNT                                      \
+            FT_TRACE4(( "%*.s", gxvalid->debug_indent, "" )); \
+            FT_TRACE4( s );                                   \
           FT_END_STMNT
 
 #else /* !FT_DEBUG_LEVEL_TRACE */
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxverror.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxverror.h
index 5d8f0b6806..8d2faac808 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxverror.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxverror.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT validation module error codes (specification only).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
index 400ec8a3fb..77200564ee 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT feat table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -90,7 +90,7 @@
 
     if ( feature >= gxv_feat_registry_length )
     {
-      GXV_TRACE(( "feature number %d is out of range %d\n",
+      GXV_TRACE(( "feature number %d is out of range %lu\n",
                   feature, gxv_feat_registry_length ));
       GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
       goto Exit;
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
index 435dcefb09..3deeb521dd 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfeat.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT feat table validation (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfgen.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
index fe05a6f3a1..57f11a8412 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvfgen.c
@@ -5,7 +5,7 @@
  *   Generate feature registry data for gxv `feat' validator.
  *   This program is derived from gxfeatreg.c in gxlayout.
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Masatake YAMATO and Redhat K.K.
  *
  * This file may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvjust.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvjust.c
index 3c7f1f9534..6af2c79c84 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvjust.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvjust.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT just table validation (body).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -78,7 +78,7 @@
       return;
 
     GXV_TRACE(( "just table includes too large %s"
-                " GID=%d > %d (in maxp)\n",
+                " GID=%d > %ld (in maxp)\n",
                 msg_tag, gid, gxvalid->face->num_glyphs ));
     GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
   }
@@ -140,7 +140,7 @@
     count = FT_NEXT_ULONG( p );
     for ( i = 0; i < count; i++ )
     {
-      GXV_TRACE(( "validating wdc pair %d/%d\n", i + 1, count ));
+      GXV_TRACE(( "validating wdc pair %lu/%lu\n", i + 1, count ));
       gxv_just_wdp_entry_validate( p, limit, gxvalid );
       p += gxvalid->subtable_length;
     }
@@ -206,7 +206,8 @@
     if ( lowerLimit >= upperLimit )
     {
       GXV_TRACE(( "just table includes invalid range spec:"
-                  " lowerLimit(%d) > upperLimit(%d)\n"     ));
+                  " lowerLimit(%ld) > upperLimit(%ld)\n",
+                  lowerLimit, upperLimit ));
       GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
     }
 
@@ -294,14 +295,14 @@
     gxvalid->subtable_length = (FT_ULong)( p - table );
 
     if ( variantsAxis != 0x64756374L ) /* 'duct' */
-      GXV_TRACE(( "variantsAxis 0x%08x is non default value",
+      GXV_TRACE(( "variantsAxis 0x%08lx is non default value",
                    variantsAxis ));
 
     if ( minimumLimit > noStretchValue )
-      GXV_TRACE(( "type4:minimumLimit 0x%08x > noStretchValue 0x%08x\n",
+      GXV_TRACE(( "type4:minimumLimit 0x%08lx > noStretchValue 0x%08lx\n",
                   minimumLimit, noStretchValue ));
     else if ( noStretchValue > maximumLimit )
-      GXV_TRACE(( "type4:noStretchValue 0x%08x > maximumLimit 0x%08x\n",
+      GXV_TRACE(( "type4:noStretchValue 0x%08lx > maximumLimit 0x%08lx\n",
                   noStretchValue, maximumLimit ));
     else if ( !IS_PARANOID_VALIDATION )
       return;
@@ -389,7 +390,7 @@
 
     GXV_LIMIT_CHECK( 4 );
     actionCount = FT_NEXT_ULONG( p );
-    GXV_TRACE(( "actionCount = %d\n", actionCount ));
+    GXV_TRACE(( "actionCount = %lu\n", actionCount ));
 
     for ( i = 0; i < actionCount; i++ )
     {
@@ -514,14 +515,14 @@
     coverage        = FT_NEXT_USHORT( p );
     subFeatureFlags = FT_NEXT_ULONG( p );
 
-    GXV_TRACE(( "  justClassTable: coverage = 0x%04x (%s) ", coverage ));
+    GXV_TRACE(( "  justClassTable: coverage = 0x%04x ", coverage ));
     if ( ( coverage & 0x4000 ) == 0  )
       GXV_TRACE(( "ascending\n" ));
     else
       GXV_TRACE(( "descending\n" ));
 
     if ( subFeatureFlags )
-      GXV_TRACE(( "  justClassTable: nonzero value (0x%08x)"
+      GXV_TRACE(( "  justClassTable: nonzero value (0x%08lx)"
                   " in unused subFeatureFlags\n", subFeatureFlags ));
 
     gxvalid->statetable.optdata               = NULL;
@@ -684,7 +685,7 @@
 
 
     /* Version 1.0 (always:2000) */
-    GXV_TRACE(( " (version = 0x%08x)\n", version ));
+    GXV_TRACE(( " (version = 0x%08lx)\n", version ));
     if ( version != 0x00010000UL )
       FT_INVALID_FORMAT;
 
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvkern.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvkern.c
index cc0b3dfcb4..f0804e37b9 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvkern.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvkern.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT kern table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -487,7 +487,7 @@
 
     if ( gxvalid->face->num_glyphs != glyphCount )
     {
-      GXV_TRACE(( "maxGID=%d, but glyphCount=%d\n",
+      GXV_TRACE(( "maxGID=%ld, but glyphCount=%d\n",
                   gxvalid->face->num_glyphs, glyphCount ));
       GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID );
     }
@@ -745,7 +745,7 @@
 #ifdef GXV_LOAD_TRACE_VARS
     FT_UShort  version = 0;    /* MS only: subtable version, unused */
 #endif
-    FT_ULong   length;         /* MS: 16bit, Apple: 32bit*/
+    FT_ULong   length;         /* MS: 16bit, Apple: 32bit */
     FT_UShort  coverage;
 #ifdef GXV_LOAD_TRACE_VARS
     FT_UShort  tupleIndex = 0; /* Apple only */
@@ -772,7 +772,7 @@
       tupleIndex = 0;
 #endif
       GXV_TRACE(( "Subtable version = %d\n", version ));
-      GXV_TRACE(( "Subtable length = %d\n", length ));
+      GXV_TRACE(( "Subtable length = %lu\n", length ));
       break;
 
     case KERN_DIALECT_APPLE:
@@ -783,7 +783,7 @@
 #ifdef GXV_LOAD_TRACE_VARS
       tupleIndex = 0;
 #endif
-      GXV_TRACE(( "Subtable length = %d\n", length ));
+      GXV_TRACE(( "Subtable length = %lu\n", length ));
 
       if ( KERN_IS_NEW( gxvalid ) )
       {
@@ -800,7 +800,7 @@
     default:
       length = u16[1];
       GXV_TRACE(( "cannot detect subtable dialect, "
-                  "just skip %d byte\n", length ));
+                  "just skip %lu byte\n", length ));
       goto Exit;
     }
 
@@ -884,7 +884,7 @@
 
     for ( i = 0; i < nTables; i++ )
     {
-      GXV_TRACE(( "validating subtable %d/%d\n", i, nTables ));
+      GXV_TRACE(( "validating subtable %d/%lu\n", i, nTables ));
       /* p should be 32bit-aligned? */
       gxv_kern_subtable_validate( p, 0, gxvalid );
       p += gxvalid->subtable_length;
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvlcar.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
index 82ac1907ab..be6e491f9f 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvlcar.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT lcar table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.c
index a467e87131..8c505dd23f 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType's TrueTypeGX/AAT validation module implementation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -62,7 +62,7 @@
     if ( error )
       goto Exit;
 
-    if ( FT_ALLOC( *table, *table_len ) )
+    if ( FT_QALLOC( *table, *table_len ) )
       goto Exit;
 
     error = FT_Load_Sfnt_Table( face, tag, 0, *table, table_len );
@@ -76,27 +76,31 @@
           FT_Byte* volatile  _sfnt          = NULL; \
           FT_ULong            len_ ## _sfnt = 0
 
-#define GXV_TABLE_LOAD( _sfnt )                                     \
-          if ( ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) && \
-               ( gx_flags & FT_VALIDATE_ ## _sfnt )            )    \
-          {                                                         \
-            error = gxv_load_table( face, TTAG_ ## _sfnt,           \
-                                    &_sfnt, &len_ ## _sfnt );       \
-            if ( error )                                            \
-              goto Exit;                                            \
-          }
-
-#define GXV_TABLE_VALIDATE( _sfnt )                                  \
-          if ( _sfnt )                                               \
-          {                                                          \
-            ft_validator_init( &valid, _sfnt, _sfnt + len_ ## _sfnt, \
-                               FT_VALIDATE_DEFAULT );                \
-            if ( ft_setjmp( valid.jump_buffer ) == 0 )               \
-              gxv_ ## _sfnt ## _validate( _sfnt, face, &valid );     \
-            error = valid.error;                                     \
-            if ( error )                                             \
-              goto Exit;                                             \
-          }
+#define GXV_TABLE_LOAD( _sfnt )                                       \
+          FT_BEGIN_STMNT                                              \
+            if ( ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) && \
+                 ( gx_flags & FT_VALIDATE_ ## _sfnt )            )    \
+            {                                                         \
+              error = gxv_load_table( face, TTAG_ ## _sfnt,           \
+                                      &_sfnt, &len_ ## _sfnt );       \
+              if ( error )                                            \
+                goto Exit;                                            \
+            }                                                         \
+          FT_END_STMNT
+
+#define GXV_TABLE_VALIDATE( _sfnt )                                    \
+          FT_BEGIN_STMNT                                               \
+            if ( _sfnt )                                               \
+            {                                                          \
+              ft_validator_init( &valid, _sfnt, _sfnt + len_ ## _sfnt, \
+                                 FT_VALIDATE_DEFAULT );                \
+              if ( ft_setjmp( valid.jump_buffer ) == 0 )               \
+                gxv_ ## _sfnt ## _validate( _sfnt, face, &valid );     \
+              error = valid.error;                                     \
+              if ( error )                                             \
+                goto Exit;                                             \
+            }                                                          \
+          FT_END_STMNT
 
 #define GXV_TABLE_SET( _sfnt )                                        \
           if ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count )        \
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.h
index f2982c96c2..1758d4c86e 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmod.h
@@ -5,7 +5,7 @@
  *   FreeType's TrueTypeGX/AAT validation module implementation
  *   (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.c
index aae7f01a89..01a77d6a5d 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT mort table validation (body).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -288,7 +288,7 @@
 
     for ( i = 0; i < nChains; i++ )
     {
-      GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
+      GXV_TRACE(( "validating chain %lu/%lu\n", i + 1, nChains ));
       GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
       gxv_mort_chain_validate( p, limit, gxvalid );
       p += gxvalid->subtable_length;
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.h
index 7237c58254..1a1d8961b5 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common definition for mort table (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort0.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
index d452c1ccaa..fa6c7368f7 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort0.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type0 (Indic Script Rearrangement) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort1.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
index d743f89f6e..170acee2c7 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort1.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type1 (Contextual Substitution) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort2.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
index 9e69e1269d..faf446741b 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort2.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type2 (Ligature Substitution) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -152,7 +152,7 @@
     GXV_32BIT_ALIGNMENT_VALIDATE( ligActionOffset );
     if ( p < lat_base )
     {
-      GXV_TRACE(( "too short offset 0x%04x: p < lat_base (%d byte rewind)\n",
+      GXV_TRACE(( "too short offset 0x%04x: p < lat_base (%ld byte rewind)\n",
                   ligActionOffset, lat_base - p ));
 
       /* FontValidator, ftxvalidator, ftxdumperfuser warn but continue */
@@ -160,7 +160,7 @@
     }
     else if ( lat_limit < p )
     {
-      GXV_TRACE(( "too large offset 0x%04x: lat_limit < p (%d byte overrun)\n",
+      GXV_TRACE(( "too large offset 0x%04x: lat_limit < p (%ld byte overrun)\n",
                   ligActionOffset, p - lat_limit ));
 
       /* FontValidator, ftxvalidator, ftxdumperfuser warn but continue */
@@ -187,17 +187,17 @@
       offset = lig_action & 0x3FFFFFFFUL;
       if ( offset * 2 < optdata->ligatureTable )
       {
-        GXV_TRACE(( "too short offset 0x%08x:"
-                    " 2 x offset < ligatureTable (%d byte rewind)\n",
+        GXV_TRACE(( "too short offset 0x%08lx:"
+                    " 2 x offset < ligatureTable (%lu byte rewind)\n",
                      offset, optdata->ligatureTable - offset * 2 ));
 
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
       } else if ( offset * 2 >
                   optdata->ligatureTable + optdata->ligatureTable_length )
       {
-        GXV_TRACE(( "too long offset 0x%08x:"
+        GXV_TRACE(( "too long offset 0x%08lx:"
                     " 2 x offset > ligatureTable + ligatureTable_length"
-                    " (%d byte overrun)\n",
+                    " (%lu byte overrun)\n",
                      offset,
                      optdata->ligatureTable + optdata->ligatureTable_length
                      - offset * 2 ));
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort4.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
index 4584d204cf..12555da82a 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort4.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type4 (Non-Contextual Glyph Substitution) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort5.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
index a15a24fe65..48caac4347 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmort5.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type5 (Contextual Glyph Insertion) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -63,7 +63,7 @@
     *GXV_mort_subtable_type5_StateOptRecData;
 
 
-  FT_LOCAL_DEF( void )
+  static void
   gxv_mort_subtable_type5_subtable_setup( FT_UShort      table_size,
                                           FT_UShort      classTable,
                                           FT_UShort      stateArray,
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
index 754d9f8bf1..4b848b1e10 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT morx table validation (body).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -84,7 +84,7 @@
       p += 4;
 #endif
 
-      GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
+      GXV_TRACE(( "validating chain subtable %d/%d (%lu bytes)\n",
                   i + 1, nSubtables, length ));
 
       type = coverage & 0x0007;
@@ -99,7 +99,7 @@
 
       func = fmt_funcs_table[type];
       if ( !func )
-        GXV_TRACE(( "morx type %d is reserved\n", type ));
+        GXV_TRACE(( "morx type %lu is reserved\n", type ));
 
       func( p, p + rest, gxvalid );
 
@@ -186,7 +186,7 @@
 
     for ( i = 0; i < nChains; i++ )
     {
-      GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
+      GXV_TRACE(( "validating chain %lu/%lu\n", i + 1, nChains ));
       GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
       gxv_morx_chain_validate( p, limit, gxvalid );
       p += gxvalid->subtable_length;
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.h b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
index f747b1d636..a849d573b3 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common definition for morx table (specification).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
index 5a42e552e2..7eb27d143e 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx0.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type0 (Indic Script Rearrangement) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
index 9f8b69067e..6ffbf151bb 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx1.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type1 (Contextual Substitution) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
index 98b5c49c26..eb79e9b408 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx2.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type2 (Ligature Substitution) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -72,11 +72,11 @@
     optdata->componentTable = FT_NEXT_ULONG( p );
     optdata->ligatureTable  = FT_NEXT_ULONG( p );
 
-    GXV_TRACE(( "offset to ligActionTable=0x%08x\n",
+    GXV_TRACE(( "offset to ligActionTable=0x%08lx\n",
                 optdata->ligActionTable ));
-    GXV_TRACE(( "offset to componentTable=0x%08x\n",
+    GXV_TRACE(( "offset to componentTable=0x%08lx\n",
                 optdata->componentTable ));
-    GXV_TRACE(( "offset to ligatureTable=0x%08x\n",
+    GXV_TRACE(( "offset to ligatureTable=0x%08lx\n",
                 optdata->ligatureTable ));
   }
 
@@ -116,19 +116,19 @@
 
     gxv_set_length_by_ulong_offset( o, l, buff, 6, table_size, gxvalid );
 
-    GXV_TRACE(( "classTable: offset=0x%08x length=0x%08x\n",
+    GXV_TRACE(( "classTable: offset=0x%08lx length=0x%08lx\n",
                 classTable, *classTable_length_p ));
-    GXV_TRACE(( "stateArray: offset=0x%08x length=0x%08x\n",
+    GXV_TRACE(( "stateArray: offset=0x%08lx length=0x%08lx\n",
                 stateArray, *stateArray_length_p ));
-    GXV_TRACE(( "entryTable: offset=0x%08x length=0x%08x\n",
+    GXV_TRACE(( "entryTable: offset=0x%08lx length=0x%08lx\n",
                 entryTable, *entryTable_length_p ));
-    GXV_TRACE(( "ligActionTable: offset=0x%08x length=0x%08x\n",
+    GXV_TRACE(( "ligActionTable: offset=0x%08lx length=0x%08lx\n",
                 optdata->ligActionTable,
                 optdata->ligActionTable_length ));
-    GXV_TRACE(( "componentTable: offset=0x%08x length=0x%08x\n",
+    GXV_TRACE(( "componentTable: offset=0x%08lx length=0x%08lx\n",
                 optdata->componentTable,
                 optdata->componentTable_length ));
-    GXV_TRACE(( "ligatureTable:  offset=0x%08x length=0x%08x\n",
+    GXV_TRACE(( "ligatureTable:  offset=0x%08lx length=0x%08lx\n",
                 optdata->ligatureTable,
                 optdata->ligatureTable_length ));
 
@@ -157,12 +157,12 @@
 
     if ( p < lat_base )
     {
-      GXV_TRACE(( "p < lat_base (%d byte rewind)\n", lat_base - p ));
+      GXV_TRACE(( "p < lat_base (%ld byte rewind)\n", lat_base - p ));
       FT_INVALID_OFFSET;
     }
     else if ( lat_limit < p )
     {
-      GXV_TRACE(( "lat_limit < p (%d byte overrun)\n", p - lat_limit ));
+      GXV_TRACE(( "lat_limit < p (%ld byte overrun)\n", p - lat_limit ));
       FT_INVALID_OFFSET;
     }
 
@@ -196,7 +196,7 @@
 
         GXV_TRACE(( "ligature action table includes"
                     " too negative offset moving all GID"
-                    " below defined range: 0x%04x\n",
+                    " below defined range: 0x%04lx\n",
                     offset & 0xFFFFU ));
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
       }
@@ -207,14 +207,14 @@
 
         GXV_TRACE(( "ligature action table includes"
                     " too large offset moving all GID"
-                    " over defined range: 0x%04x\n",
+                    " over defined range: 0x%04lx\n",
                     offset & 0xFFFFU ));
         GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
       }
 
       GXV_TRACE(( "ligature action table includes"
                   " invalid offset to add to 16-bit GID:"
-                  " 0x%08x\n", offset ));
+                  " 0x%08lx\n", offset ));
       GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET );
     }
   }
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
index 857e4d4eb8..30c602cb8a 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx4.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for "morx" type4 (Non-Contextual Glyph Substitution) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
index 7ceba077af..afdef05a89 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvmorx5.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type5 (Contextual Glyph Insertion) subtable.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvopbd.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
index a398fe0977..a6b04a4b17 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvopbd.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT opbd table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -188,7 +188,7 @@
 
 
     /* only 0x00010000 is defined (1996) */
-    GXV_TRACE(( "(version=0x%08x)\n", version ));
+    GXV_TRACE(( "(version=0x%08lx)\n", version ));
     if ( 0x00010000UL != version )
       FT_INVALID_FORMAT;
 
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvprop.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvprop.c
index bee8bab97b..bf1ed112fd 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvprop.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvprop.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT prop table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -283,7 +283,7 @@
     format      = FT_NEXT_USHORT( p );
     defaultProp = FT_NEXT_USHORT( p );
 
-    GXV_TRACE(( "  version 0x%08x\n", version ));
+    GXV_TRACE(( "  version 0x%08lx\n", version ));
     GXV_TRACE(( "  format  0x%04x\n", format ));
     GXV_TRACE(( "  defaultProp  0x%04x\n", defaultProp ));
 
@@ -309,7 +309,7 @@
     if ( format == 0 )
     {
       FT_TRACE3(( "(format 0, no per-glyph properties, "
-                  "remaining %d bytes are skipped)", limit - p ));
+                  "remaining %ld bytes are skipped)", limit - p ));
       goto Exit;
     }
 
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvtrak.c b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
index 58a631c9e5..93ac3e76a9 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/gxvtrak.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT trak table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -130,7 +130,7 @@
          p = table + j * ( 4 + 2 + 2 );
          t = FT_NEXT_LONG( p );
          if ( t == track )
-           GXV_TRACE(( "duplicated entries found for track value 0x%x\n",
+           GXV_TRACE(( "duplicated entries found for track value 0x%lx\n",
                         track ));
       }
     }
@@ -243,7 +243,7 @@
     vertOffset  = FT_NEXT_USHORT( p );
     reserved    = FT_NEXT_USHORT( p );
 
-    GXV_TRACE(( " (version = 0x%08x)\n", version ));
+    GXV_TRACE(( " (version = 0x%08lx)\n", version ));
     GXV_TRACE(( " (format = 0x%04x)\n", format ));
     GXV_TRACE(( " (horizOffset = 0x%04x)\n", horizOffset ));
     GXV_TRACE(( " (vertOffset = 0x%04x)\n", vertOffset ));
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/module.mk b/qtbase/src/3rdparty/freetype/src/gxvalid/module.mk
index e7d408df9d..7635587c39 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/module.mk
@@ -2,7 +2,7 @@
 # FreeType 2 gxvalid module definition
 #
 
-# Copyright (C) 2004-2020 by
+# Copyright (C) 2004-2022 by
 # suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
diff --git a/qtbase/src/3rdparty/freetype/src/gxvalid/rules.mk b/qtbase/src/3rdparty/freetype/src/gxvalid/rules.mk
index d55a4935e2..cc103b2704 100644
--- a/qtbase/src/3rdparty/freetype/src/gxvalid/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/gxvalid/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2004-2020 by
+# Copyright (C) 2004-2022 by
 # suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/README.freetype b/qtbase/src/3rdparty/freetype/src/gzip/README.freetype
new file mode 100644
index 0000000000..493b807198
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/README.freetype
@@ -0,0 +1,22 @@
+Name: zlib
+Short Name: zlib
+URL: http://zlib.net/
+Version: 1.2.12
+License: see `zlib.h`
+
+Description:
+"A massively spiffy yet delicately unobtrusive compression library."
+
+'zlib' is a free, general-purpose, legally unencumbered lossless
+data-compression library.  'zlib' implements the "deflate" compression
+algorithm described by RFC 1951, which combines the LZ77 (Lempel-Ziv)
+algorithm with Huffman coding.  zlib also implements the zlib (RFC 1950) and
+gzip (RFC 1952) wrapper formats.
+
+Local Modifications:
+The files in this directory have been prepared as follows.
+
+ - Take the unmodified source code files from the zlib distribution that are
+   included by `ftgzip.c`.
+ - Run zlib's `zlib2ansi` script on all `.c` files.
+ - Apply the diff file(s) in the `patches` folder.
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/adler32.c b/qtbase/src/3rdparty/freetype/src/gzip/adler32.c
index c53f9dd125..aa032e1ddf 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/adler32.c
+++ b/qtbase/src/3rdparty/freetype/src/gzip/adler32.c
@@ -1,48 +1,192 @@
 /* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2002 Mark Adler
+ * Copyright (C) 1995-2011, 2016 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 /* @(#) $Id$ */
 
-#include "zlib.h"
+#include "zutil.h"
 
-#define BASE 65521L /* largest prime smaller than 65536 */
+#ifndef Z_FREETYPE
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+#endif
+
+#define BASE 65521U     /* largest prime smaller than 65536 */
 #define NMAX 5552
 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
 
-#define DO1(buf,i)  {s1 += buf[i]; s2 += s1;}
+#define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}
 #define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
 #define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
 #define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
 #define DO16(buf)   DO8(buf,0); DO8(buf,8);
 
+/* use NO_DIVIDE if your processor does not do division in hardware --
+   try it both ways to see which is faster */
+#ifdef NO_DIVIDE
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+   (thank you to John Reiser for pointing this out) */
+#  define CHOP(a) \
+    do { \
+        unsigned long tmp = a >> 16; \
+        a &= 0xffffUL; \
+        a += (tmp << 4) - tmp; \
+    } while (0)
+#  define MOD28(a) \
+    do { \
+        CHOP(a); \
+        if (a >= BASE) a -= BASE; \
+    } while (0)
+#  define MOD(a) \
+    do { \
+        CHOP(a); \
+        MOD28(a); \
+    } while (0)
+#  define MOD63(a) \
+    do { /* this assumes a is not negative */ \
+        z_off64_t tmp = a >> 32; \
+        a &= 0xffffffffL; \
+        a += (tmp << 8) - (tmp << 5) + tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        if (a >= BASE) a -= BASE; \
+    } while (0)
+#else
+#  define MOD(a) a %= BASE
+#  define MOD28(a) a %= BASE
+#  define MOD63(a) a %= BASE
+#endif
+
 /* ========================================================================= */
-ZEXPORT(uLong) adler32( /* adler, buf, len) */
+uLong ZEXPORT adler32_z(
     uLong adler,
     const Bytef *buf,
-    uInt len )
+    z_size_t len)
 {
-    unsigned long s1 = adler & 0xffff;
-    unsigned long s2 = (adler >> 16) & 0xffff;
-    int k;
+    unsigned long sum2;
+    unsigned n;
+
+    /* split Adler-32 into component sums */
+    sum2 = (adler >> 16) & 0xffff;
+    adler &= 0xffff;
+
+    /* in case user likes doing a byte at a time, keep it fast */
+    if (len == 1) {
+        adler += buf[0];
+        if (adler >= BASE)
+            adler -= BASE;
+        sum2 += adler;
+        if (sum2 >= BASE)
+            sum2 -= BASE;
+        return adler | (sum2 << 16);
+    }
 
-    if (buf == Z_NULL) return 1L;
+    /* initial Adler-32 value (deferred check for len == 1 speed) */
+    if (buf == Z_NULL)
+        return 1L;
 
-    while (len > 0) {
-        k = len < NMAX ? len : NMAX;
-        len -= k;
-        while (k >= 16) {
+    /* in case short lengths are provided, keep it somewhat fast */
+    if (len < 16) {
+        while (len--) {
+            adler += *buf++;
+            sum2 += adler;
+        }
+        if (adler >= BASE)
+            adler -= BASE;
+        MOD28(sum2);            /* only added so many BASE's */
+        return adler | (sum2 << 16);
+    }
+
+    /* do length NMAX blocks -- requires just one modulo operation */
+    while (len >= NMAX) {
+        len -= NMAX;
+        n = NMAX / 16;          /* NMAX is divisible by 16 */
+        do {
+            DO16(buf);          /* 16 sums unrolled */
+            buf += 16;
+        } while (--n);
+        MOD(adler);
+        MOD(sum2);
+    }
+
+    /* do remaining bytes (less than NMAX, still just one modulo) */
+    if (len) {                  /* avoid modulos if none remaining */
+        while (len >= 16) {
+            len -= 16;
             DO16(buf);
             buf += 16;
-            k -= 16;
         }
-        if (k != 0) do {
-            s1 += *buf++;
-            s2 += s1;
-        } while (--k);
-        s1 %= BASE;
-        s2 %= BASE;
+        while (len--) {
+            adler += *buf++;
+            sum2 += adler;
+        }
+        MOD(adler);
+        MOD(sum2);
     }
-    return (s2 << 16) | s1;
+
+    /* return recombined sums */
+    return adler | (sum2 << 16);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT adler32(
+    uLong adler,
+    const Bytef *buf,
+    uInt len)
+{
+    return adler32_z(adler, buf, len);
+}
+
+#ifndef Z_FREETYPE
+
+/* ========================================================================= */
+local uLong adler32_combine_(
+    uLong adler1,
+    uLong adler2,
+    z_off64_t len2)
+{
+    unsigned long sum1;
+    unsigned long sum2;
+    unsigned rem;
+
+    /* for negative len, return invalid adler32 as a clue for debugging */
+    if (len2 < 0)
+        return 0xffffffffUL;
+
+    /* the derivation of this formula is left as an exercise for the reader */
+    MOD63(len2);                /* assumes len2 >= 0 */
+    rem = (unsigned)len2;
+    sum1 = adler1 & 0xffff;
+    sum2 = rem * sum1;
+    MOD(sum2);
+    sum1 += (adler2 & 0xffff) + BASE - 1;
+    sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
+    if (sum1 >= BASE) sum1 -= BASE;
+    if (sum1 >= BASE) sum1 -= BASE;
+    if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
+    if (sum2 >= BASE) sum2 -= BASE;
+    return sum1 | (sum2 << 16);
 }
+
+/* ========================================================================= */
+uLong ZEXPORT adler32_combine(
+    uLong adler1,
+    uLong adler2,
+    z_off_t len2)
+{
+    return adler32_combine_(adler1, adler2, len2);
+}
+
+uLong ZEXPORT adler32_combine64(
+    uLong adler1,
+    uLong adler2,
+    z_off64_t len2)
+{
+    return adler32_combine_(adler1, adler2, len2);
+}
+
+#endif  /* !Z_FREETYPE */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/crc32.c b/qtbase/src/3rdparty/freetype/src/gzip/crc32.c
new file mode 100644
index 0000000000..2ddc32d1fb
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/crc32.c
@@ -0,0 +1,1116 @@
+/* crc32.c -- compute the CRC-32 of a data stream
+ * Copyright (C) 1995-2022 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * This interleaved implementation of a CRC makes use of pipelined multiple
+ * arithmetic-logic units, commonly found in modern CPU cores. It is due to
+ * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution.
+ */
+
+/* @(#) $Id$ */
+
+/*
+  Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
+  protection on the static variables used to control the first-use generation
+  of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+  first call get_crc_table() to initialize the tables before allowing more than
+  one thread to use crc32().
+
+  MAKECRCH can be #defined to write out crc32.h. A main() routine is also
+  produced, so that this one source file can be compiled to an executable.
+ */
+
+#ifdef MAKECRCH
+#  include <stdio.h>
+#  ifndef DYNAMIC_CRC_TABLE
+#    define DYNAMIC_CRC_TABLE
+#  endif /* !DYNAMIC_CRC_TABLE */
+#endif /* MAKECRCH */
+
+#include "zutil.h"      /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */
+
+ /*
+  A CRC of a message is computed on N braids of words in the message, where
+  each word consists of W bytes (4 or 8). If N is 3, for example, then three
+  running sparse CRCs are calculated respectively on each braid, at these
+  indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ...
+  This is done starting at a word boundary, and continues until as many blocks
+  of N * W bytes as are available have been processed. The results are combined
+  into a single CRC at the end. For this code, N must be in the range 1..6 and
+  W must be 4 or 8. The upper limit on N can be increased if desired by adding
+  more #if blocks, extending the patterns apparent in the code. In addition,
+  crc32.h would need to be regenerated, if the maximum N value is increased.
+
+  N and W are chosen empirically by benchmarking the execution time on a given
+  processor. The choices for N and W below were based on testing on Intel Kaby
+  Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64
+  Octeon II processors. The Intel, AMD, and ARM processors were all fastest
+  with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4.
+  They were all tested with either gcc or clang, all using the -O3 optimization
+  level. Your mileage may vary.
+ */
+
+/* Define N */
+#ifdef Z_TESTN
+#  define N Z_TESTN
+#else
+#  define N 5
+#endif
+#if N < 1 || N > 6
+#  error N must be in 1..6
+#endif
+
+/*
+  z_crc_t must be at least 32 bits. z_word_t must be at least as long as
+  z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and
+  that bytes are eight bits.
+ */
+
+/*
+  Define W and the associated z_word_t type. If W is not defined, then a
+  braided calculation is not used, and the associated tables and code are not
+  compiled.
+ */
+#ifdef Z_TESTW
+#  if Z_TESTW-1 != -1
+#    define W Z_TESTW
+#  endif
+#else
+#  ifdef MAKECRCH
+#    define W 8         /* required for MAKECRCH */
+#  else
+#    if defined(__x86_64__) || defined(__aarch64__)
+#      define W 8
+#    else
+#      define W 4
+#    endif
+#  endif
+#endif
+#ifdef W
+#  if W == 8 && defined(Z_U8)
+     typedef Z_U8 z_word_t;
+#  elif defined(Z_U4)
+#    undef W
+#    define W 4
+     typedef Z_U4 z_word_t;
+#  else
+#    undef W
+#  endif
+#endif
+
+/* Local functions. */
+local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
+local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
+
+/* If available, use the ARM processor CRC32 instruction. */
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
+#  define ARMCRC32
+#endif
+
+#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
+/*
+  Swap the bytes in a z_word_t to convert between little and big endian. Any
+  self-respecting compiler will optimize this to a single machine byte-swap
+  instruction, if one is available. This assumes that word_t is either 32 bits
+  or 64 bits.
+ */
+local z_word_t byte_swap(
+    z_word_t word)
+{
+#  if W == 8
+    return
+        (word & 0xff00000000000000) >> 56 |
+        (word & 0xff000000000000) >> 40 |
+        (word & 0xff0000000000) >> 24 |
+        (word & 0xff00000000) >> 8 |
+        (word & 0xff000000) << 8 |
+        (word & 0xff0000) << 24 |
+        (word & 0xff00) << 40 |
+        (word & 0xff) << 56;
+#  else   /* W == 4 */
+    return
+        (word & 0xff000000) >> 24 |
+        (word & 0xff0000) >> 8 |
+        (word & 0xff00) << 8 |
+        (word & 0xff) << 24;
+#  endif
+}
+#endif
+
+/* CRC polynomial. */
+#define POLY 0xedb88320         /* p(x) reflected, with x^32 implied */
+
+#ifdef DYNAMIC_CRC_TABLE
+
+local z_crc_t FAR crc_table[256];
+local z_crc_t FAR x2n_table[32];
+local void make_crc_table OF((void));
+#ifdef W
+   local z_word_t FAR crc_big_table[256];
+   local z_crc_t FAR crc_braid_table[W][256];
+   local z_word_t FAR crc_braid_big_table[W][256];
+   local void braid OF((z_crc_t [][256], z_word_t [][256], int, int));
+#endif
+#ifdef MAKECRCH
+   local void write_table OF((FILE *, const z_crc_t FAR *, int));
+   local void write_table32hi OF((FILE *, const z_word_t FAR *, int));
+   local void write_table64 OF((FILE *, const z_word_t FAR *, int));
+#endif /* MAKECRCH */
+
+/*
+  Define a once() function depending on the availability of atomics. If this is
+  compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in
+  multiple threads, and if atomics are not available, then get_crc_table() must
+  be called to initialize the tables and must return before any threads are
+  allowed to compute or combine CRCs.
+ */
+
+/* Definition of once functionality. */
+typedef struct once_s once_t;
+local void once OF((once_t *, void (*)(void)));
+
+/* Check for the availability of atomics. */
+#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
+    !defined(__STDC_NO_ATOMICS__)
+
+#include <stdatomic.h>
+
+/* Structure for once(), which must be initialized with ONCE_INIT. */
+struct once_s {
+    atomic_flag begun;
+    atomic_int done;
+};
+#define ONCE_INIT {ATOMIC_FLAG_INIT, 0}
+
+/*
+  Run the provided init() function exactly once, even if multiple threads
+  invoke once() at the same time. The state must be a once_t initialized with
+  ONCE_INIT.
+ */
+local void once(state, init)
+    once_t *state;
+    void (*init)(void);
+{
+    if (!atomic_load(&state->done)) {
+        if (atomic_flag_test_and_set(&state->begun))
+            while (!atomic_load(&state->done))
+                ;
+        else {
+            init();
+            atomic_store(&state->done, 1);
+        }
+    }
+}
+
+#else   /* no atomics */
+
+/* Structure for once(), which must be initialized with ONCE_INIT. */
+struct once_s {
+    volatile int begun;
+    volatile int done;
+};
+#define ONCE_INIT {0, 0}
+
+/* Test and set. Alas, not atomic, but tries to minimize the period of
+   vulnerability. */
+local int test_and_set OF((int volatile *));
+local int test_and_set(
+    int volatile *flag)
+{
+    int was;
+
+    was = *flag;
+    *flag = 1;
+    return was;
+}
+
+/* Run the provided init() function once. This is not thread-safe. */
+local void once(state, init)
+    once_t *state;
+    void (*init)(void);
+{
+    if (!state->done) {
+        if (test_and_set(&state->begun))
+            while (!state->done)
+                ;
+        else {
+            init();
+            state->done = 1;
+        }
+    }
+}
+
+#endif
+
+/* State for once(). */
+local once_t made = ONCE_INIT;
+
+/*
+  Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
+  x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
+
+  Polynomials over GF(2) are represented in binary, one bit per coefficient,
+  with the lowest powers in the most significant bit. Then adding polynomials
+  is just exclusive-or, and multiplying a polynomial by x is a right shift by
+  one. If we call the above polynomial p, and represent a byte as the
+  polynomial q, also with the lowest power in the most significant bit (so the
+  byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p,
+  where a mod b means the remainder after dividing a by b.
+
+  This calculation is done using the shift-register method of multiplying and
+  taking the remainder. The register is initialized to zero, and for each
+  incoming bit, x^32 is added mod p to the register if the bit is a one (where
+  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x
+  (which is shifting right by one and adding x^32 mod p if the bit shifted out
+  is a one). We start with the highest power (least significant bit) of q and
+  repeat for all eight bits of q.
+
+  The table is simply the CRC of all possible eight bit values. This is all the
+  information needed to generate CRCs on data a byte at a time for all
+  combinations of CRC register values and incoming bytes.
+ */
+
+local void make_crc_table()
+{
+    unsigned i, j, n;
+    z_crc_t p;
+
+    /* initialize the CRC of bytes tables */
+    for (i = 0; i < 256; i++) {
+        p = i;
+        for (j = 0; j < 8; j++)
+            p = p & 1 ? (p >> 1) ^ POLY : p >> 1;
+        crc_table[i] = p;
+#ifdef W
+        crc_big_table[i] = byte_swap(p);
+#endif
+    }
+
+    /* initialize the x^2^n mod p(x) table */
+    p = (z_crc_t)1 << 30;         /* x^1 */
+    x2n_table[0] = p;
+    for (n = 1; n < 32; n++)
+        x2n_table[n] = p = multmodp(p, p);
+
+#ifdef W
+    /* initialize the braiding tables -- needs x2n_table[] */
+    braid(crc_braid_table, crc_braid_big_table, N, W);
+#endif
+
+#ifdef MAKECRCH
+    {
+        /*
+          The crc32.h header file contains tables for both 32-bit and 64-bit
+          z_word_t's, and so requires a 64-bit type be available. In that case,
+          z_word_t must be defined to be 64-bits. This code then also generates
+          and writes out the tables for the case that z_word_t is 32 bits.
+         */
+#if !defined(W) || W != 8
+#  error Need a 64-bit integer type in order to generate crc32.h.
+#endif
+        FILE *out;
+        int k, n;
+        z_crc_t ltl[8][256];
+        z_word_t big[8][256];
+
+        out = fopen("crc32.h", "w");
+        if (out == NULL) return;
+
+        /* write out little-endian CRC table to crc32.h */
+        fprintf(out,
+            "/* crc32.h -- tables for rapid CRC calculation\n"
+            " * Generated automatically by crc32.c\n */\n"
+            "\n"
+            "local const z_crc_t FAR crc_table[] = {\n"
+            "    ");
+        write_table(out, crc_table, 256);
+        fprintf(out,
+            "};\n");
+
+        /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */
+        fprintf(out,
+            "\n"
+            "#ifdef W\n"
+            "\n"
+            "#if W == 8\n"
+            "\n"
+            "local const z_word_t FAR crc_big_table[] = {\n"
+            "    ");
+        write_table64(out, crc_big_table, 256);
+        fprintf(out,
+            "};\n");
+
+        /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */
+        fprintf(out,
+            "\n"
+            "#else /* W == 4 */\n"
+            "\n"
+            "local const z_word_t FAR crc_big_table[] = {\n"
+            "    ");
+        write_table32hi(out, crc_big_table, 256);
+        fprintf(out,
+            "};\n"
+            "\n"
+            "#endif\n");
+
+        /* write out braid tables for each value of N */
+        for (n = 1; n <= 6; n++) {
+            fprintf(out,
+            "\n"
+            "#if N == %d\n", n);
+
+            /* compute braid tables for this N and 64-bit word_t */
+            braid(ltl, big, n, 8);
+
+            /* write out braid tables for 64-bit z_word_t to crc32.h */
+            fprintf(out,
+            "\n"
+            "#if W == 8\n"
+            "\n"
+            "local const z_crc_t FAR crc_braid_table[][256] = {\n");
+            for (k = 0; k < 8; k++) {
+                fprintf(out, "   {");
+                write_table(out, ltl[k], 256);
+                fprintf(out, "}%s", k < 7 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n"
+            "\n"
+            "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
+            for (k = 0; k < 8; k++) {
+                fprintf(out, "   {");
+                write_table64(out, big[k], 256);
+                fprintf(out, "}%s", k < 7 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n");
+
+            /* compute braid tables for this N and 32-bit word_t */
+            braid(ltl, big, n, 4);
+
+            /* write out braid tables for 32-bit z_word_t to crc32.h */
+            fprintf(out,
+            "\n"
+            "#else /* W == 4 */\n"
+            "\n"
+            "local const z_crc_t FAR crc_braid_table[][256] = {\n");
+            for (k = 0; k < 4; k++) {
+                fprintf(out, "   {");
+                write_table(out, ltl[k], 256);
+                fprintf(out, "}%s", k < 3 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n"
+            "\n"
+            "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
+            for (k = 0; k < 4; k++) {
+                fprintf(out, "   {");
+                write_table32hi(out, big[k], 256);
+                fprintf(out, "}%s", k < 3 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n"
+            "\n"
+            "#endif\n"
+            "\n"
+            "#endif\n");
+        }
+        fprintf(out,
+            "\n"
+            "#endif\n");
+
+        /* write out zeros operator table to crc32.h */
+        fprintf(out,
+            "\n"
+            "local const z_crc_t FAR x2n_table[] = {\n"
+            "    ");
+        write_table(out, x2n_table, 32);
+        fprintf(out,
+            "};\n");
+        fclose(out);
+    }
+#endif /* MAKECRCH */
+}
+
+#ifdef MAKECRCH
+
+/*
+   Write the 32-bit values in table[0..k-1] to out, five per line in
+   hexadecimal separated by commas.
+ */
+local void write_table(
+    FILE *out,
+    const z_crc_t FAR *table,
+    int k)
+{
+    int n;
+
+    for (n = 0; n < k; n++)
+        fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : "    ",
+                (unsigned long)(table[n]),
+                n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
+}
+
+/*
+   Write the high 32-bits of each value in table[0..k-1] to out, five per line
+   in hexadecimal separated by commas.
+ */
+local void write_table32hi(
+    FILE *out,
+    const z_word_t FAR *table,
+    int k)
+{
+    int n;
+
+    for (n = 0; n < k; n++)
+        fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : "    ",
+                (unsigned long)(table[n] >> 32),
+                n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
+}
+
+/*
+  Write the 64-bit values in table[0..k-1] to out, three per line in
+  hexadecimal separated by commas. This assumes that if there is a 64-bit
+  type, then there is also a long long integer type, and it is at least 64
+  bits. If not, then the type cast and format string can be adjusted
+  accordingly.
+ */
+local void write_table64(
+    FILE *out,
+    const z_word_t FAR *table,
+    int k)
+{
+    int n;
+
+    for (n = 0; n < k; n++)
+        fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : "    ",
+                (unsigned long long)(table[n]),
+                n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", "));
+}
+
+/* Actually do the deed. */
+int main()
+{
+    make_crc_table();
+    return 0;
+}
+
+#endif /* MAKECRCH */
+
+#ifdef W
+/*
+  Generate the little and big-endian braid tables for the given n and z_word_t
+  size w. Each array must have room for w blocks of 256 elements.
+ */
+local void braid(ltl, big, n, w)
+    z_crc_t ltl[][256];
+    z_word_t big[][256];
+    int n;
+    int w;
+{
+    int k;
+    z_crc_t i, p, q;
+    for (k = 0; k < w; k++) {
+        p = x2nmodp((n * w + 3 - k) << 3, 0);
+        ltl[k][0] = 0;
+        big[w - 1 - k][0] = 0;
+        for (i = 1; i < 256; i++) {
+            ltl[k][i] = q = multmodp(i << 24, p);
+            big[w - 1 - k][i] = byte_swap(q);
+        }
+    }
+}
+#endif
+
+#else /* !DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
+ * of x for combining CRC-32s, all made by make_crc_table().
+ */
+#include "crc32.h"
+#endif /* DYNAMIC_CRC_TABLE */
+
+/* ========================================================================
+ * Routines used for CRC calculation. Some are also required for the table
+ * generation above.
+ */
+
+/*
+  Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
+  reflected. For speed, this requires that a not be zero.
+ */
+local z_crc_t multmodp(
+    z_crc_t a,
+    z_crc_t b)
+{
+    z_crc_t m, p;
+
+    m = (z_crc_t)1 << 31;
+    p = 0;
+    for (;;) {
+        if (a & m) {
+            p ^= b;
+            if ((a & (m - 1)) == 0)
+                break;
+        }
+        m >>= 1;
+        b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
+    }
+    return p;
+}
+
+/*
+  Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
+  initialized.
+ */
+local z_crc_t x2nmodp(
+    z_off64_t n,
+    unsigned k)
+{
+    z_crc_t p;
+
+    p = (z_crc_t)1 << 31;           /* x^0 == 1 */
+    while (n) {
+        if (n & 1)
+            p = multmodp(x2n_table[k & 31], p);
+        n >>= 1;
+        k++;
+    }
+    return p;
+}
+
+/* =========================================================================
+ * This function can be used by asm versions of crc32(), and to force the
+ * generation of the CRC tables in a threaded application.
+ */
+const z_crc_t FAR * ZEXPORT get_crc_table()
+{
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+    return (const z_crc_t FAR *)crc_table;
+}
+
+/* =========================================================================
+ * Use ARM machine instructions if available. This will compute the CRC about
+ * ten times faster than the braided calculation. This code does not check for
+ * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will
+ * only be defined if the compilation specifies an ARM processor architecture
+ * that has the instructions. For example, compiling with -march=armv8.1-a or
+ * -march=armv8-a+crc, or -march=native if the compile machine has the crc32
+ * instructions.
+ */
+#ifdef ARMCRC32
+
+/*
+   Constants empirically determined to maximize speed. These values are from
+   measurements on a Cortex-A57. Your mileage may vary.
+ */
+#define Z_BATCH 3990                /* number of words in a batch */
+#define Z_BATCH_ZEROS 0xa10d3d0c    /* computed from Z_BATCH = 3990 */
+#define Z_BATCH_MIN 800             /* fewest words in a final batch */
+
+unsigned long ZEXPORT crc32_z(
+    unsigned long crc,
+    const unsigned char FAR *buf,
+    z_size_t len)
+{
+    z_crc_t val;
+    z_word_t crc1, crc2;
+    const z_word_t *word;
+    z_word_t val0, val1, val2;
+    z_size_t last, last2, i;
+    z_size_t num;
+
+    /* Return initial CRC, if requested. */
+    if (buf == Z_NULL) return 0;
+
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+
+    /* Pre-condition the CRC */
+    crc ^= 0xffffffff;
+
+    /* Compute the CRC up to a word boundary. */
+    while (len && ((z_size_t)buf & 7) != 0) {
+        len--;
+        val = *buf++;
+        __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
+    }
+
+    /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */
+    word = (z_word_t const *)buf;
+    num = len >> 3;
+    len &= 7;
+
+    /* Do three interleaved CRCs to realize the throughput of one crc32x
+       instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
+       CRCs are combined into a single CRC after each set of batches. */
+    while (num >= 3 * Z_BATCH) {
+        crc1 = 0;
+        crc2 = 0;
+        for (i = 0; i < Z_BATCH; i++) {
+            val0 = word[i];
+            val1 = word[i + Z_BATCH];
+            val2 = word[i + 2 * Z_BATCH];
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
+        }
+        word += 3 * Z_BATCH;
+        num -= 3 * Z_BATCH;
+        crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1;
+        crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2;
+    }
+
+    /* Do one last smaller batch with the remaining words, if there are enough
+       to pay for the combination of CRCs. */
+    last = num / 3;
+    if (last >= Z_BATCH_MIN) {
+        last2 = last << 1;
+        crc1 = 0;
+        crc2 = 0;
+        for (i = 0; i < last; i++) {
+            val0 = word[i];
+            val1 = word[i + last];
+            val2 = word[i + last2];
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
+        }
+        word += 3 * last;
+        num -= 3 * last;
+        val = x2nmodp(last, 6);
+        crc = multmodp(val, crc) ^ crc1;
+        crc = multmodp(val, crc) ^ crc2;
+    }
+
+    /* Compute the CRC on any remaining words. */
+    for (i = 0; i < num; i++) {
+        val0 = word[i];
+        __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+    }
+    word += num;
+
+    /* Complete the CRC on any remaining bytes. */
+    buf = (const unsigned char FAR *)word;
+    while (len) {
+        len--;
+        val = *buf++;
+        __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
+    }
+
+    /* Return the CRC, post-conditioned. */
+    return crc ^ 0xffffffff;
+}
+
+#else
+
+#ifdef W
+
+/*
+  Return the CRC of the W bytes in the word_t data, taking the
+  least-significant byte of the word as the first byte of data, without any pre
+  or post conditioning. This is used to combine the CRCs of each braid.
+ */
+local z_crc_t crc_word(
+    z_word_t data)
+{
+    int k;
+    for (k = 0; k < W; k++)
+        data = (data >> 8) ^ crc_table[data & 0xff];
+    return (z_crc_t)data;
+}
+
+local z_word_t crc_word_big(
+    z_word_t data)
+{
+    int k;
+    for (k = 0; k < W; k++)
+        data = (data << 8) ^
+            crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
+    return data;
+}
+
+#endif
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32_z(
+    unsigned long crc,
+    const unsigned char FAR *buf,
+    z_size_t len)
+{
+    /* Return initial CRC, if requested. */
+    if (buf == Z_NULL) return 0;
+
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+
+    /* Pre-condition the CRC */
+    crc ^= 0xffffffff;
+
+#ifdef W
+
+    /* If provided enough bytes, do a braided CRC calculation. */
+    if (len >= N * W + W - 1) {
+        z_size_t blks;
+        z_word_t const *words;
+        unsigned endian;
+        int k;
+
+        /* Compute the CRC up to a z_word_t boundary. */
+        while (len && ((z_size_t)buf & (W - 1)) != 0) {
+            len--;
+            crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        }
+
+        /* Compute the CRC on as many N z_word_t blocks as are available. */
+        blks = len / (N * W);
+        len -= blks * N * W;
+        words = (z_word_t const *)buf;
+
+        /* Do endian check at execution time instead of compile time, since ARM
+           processors can change the endianess at execution time. If the
+           compiler knows what the endianess will be, it can optimize out the
+           check and the unused branch. */
+        endian = 1;
+        if (*(unsigned char *)&endian) {
+            /* Little endian. */
+
+            z_crc_t crc0;
+            z_word_t word0;
+#if N > 1
+            z_crc_t crc1;
+            z_word_t word1;
+#if N > 2
+            z_crc_t crc2;
+            z_word_t word2;
+#if N > 3
+            z_crc_t crc3;
+            z_word_t word3;
+#if N > 4
+            z_crc_t crc4;
+            z_word_t word4;
+#if N > 5
+            z_crc_t crc5;
+            z_word_t word5;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /* Initialize the CRC for each braid. */
+            crc0 = crc;
+#if N > 1
+            crc1 = 0;
+#if N > 2
+            crc2 = 0;
+#if N > 3
+            crc3 = 0;
+#if N > 4
+            crc4 = 0;
+#if N > 5
+            crc5 = 0;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /*
+              Process the first blks-1 blocks, computing the CRCs on each braid
+              independently.
+             */
+            while (--blks) {
+                /* Load the word for each braid into registers. */
+                word0 = crc0 ^ words[0];
+#if N > 1
+                word1 = crc1 ^ words[1];
+#if N > 2
+                word2 = crc2 ^ words[2];
+#if N > 3
+                word3 = crc3 ^ words[3];
+#if N > 4
+                word4 = crc4 ^ words[4];
+#if N > 5
+                word5 = crc5 ^ words[5];
+#endif
+#endif
+#endif
+#endif
+#endif
+                words += N;
+
+                /* Compute and update the CRC for each word. The loop should
+                   get unrolled. */
+                crc0 = crc_braid_table[0][word0 & 0xff];
+#if N > 1
+                crc1 = crc_braid_table[0][word1 & 0xff];
+#if N > 2
+                crc2 = crc_braid_table[0][word2 & 0xff];
+#if N > 3
+                crc3 = crc_braid_table[0][word3 & 0xff];
+#if N > 4
+                crc4 = crc_braid_table[0][word4 & 0xff];
+#if N > 5
+                crc5 = crc_braid_table[0][word5 & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                for (k = 1; k < W; k++) {
+                    crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff];
+#if N > 1
+                    crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff];
+#if N > 2
+                    crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff];
+#if N > 3
+                    crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff];
+#if N > 4
+                    crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff];
+#if N > 5
+                    crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                }
+            }
+
+            /*
+              Process the last block, combining the CRCs of the N braids at the
+              same time.
+             */
+            crc = crc_word(crc0 ^ words[0]);
+#if N > 1
+            crc = crc_word(crc1 ^ words[1] ^ crc);
+#if N > 2
+            crc = crc_word(crc2 ^ words[2] ^ crc);
+#if N > 3
+            crc = crc_word(crc3 ^ words[3] ^ crc);
+#if N > 4
+            crc = crc_word(crc4 ^ words[4] ^ crc);
+#if N > 5
+            crc = crc_word(crc5 ^ words[5] ^ crc);
+#endif
+#endif
+#endif
+#endif
+#endif
+            words += N;
+        }
+        else {
+            /* Big endian. */
+
+            z_word_t crc0, word0, comb;
+#if N > 1
+            z_word_t crc1, word1;
+#if N > 2
+            z_word_t crc2, word2;
+#if N > 3
+            z_word_t crc3, word3;
+#if N > 4
+            z_word_t crc4, word4;
+#if N > 5
+            z_word_t crc5, word5;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /* Initialize the CRC for each braid. */
+            crc0 = byte_swap(crc);
+#if N > 1
+            crc1 = 0;
+#if N > 2
+            crc2 = 0;
+#if N > 3
+            crc3 = 0;
+#if N > 4
+            crc4 = 0;
+#if N > 5
+            crc5 = 0;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /*
+              Process the first blks-1 blocks, computing the CRCs on each braid
+              independently.
+             */
+            while (--blks) {
+                /* Load the word for each braid into registers. */
+                word0 = crc0 ^ words[0];
+#if N > 1
+                word1 = crc1 ^ words[1];
+#if N > 2
+                word2 = crc2 ^ words[2];
+#if N > 3
+                word3 = crc3 ^ words[3];
+#if N > 4
+                word4 = crc4 ^ words[4];
+#if N > 5
+                word5 = crc5 ^ words[5];
+#endif
+#endif
+#endif
+#endif
+#endif
+                words += N;
+
+                /* Compute and update the CRC for each word. The loop should
+                   get unrolled. */
+                crc0 = crc_braid_big_table[0][word0 & 0xff];
+#if N > 1
+                crc1 = crc_braid_big_table[0][word1 & 0xff];
+#if N > 2
+                crc2 = crc_braid_big_table[0][word2 & 0xff];
+#if N > 3
+                crc3 = crc_braid_big_table[0][word3 & 0xff];
+#if N > 4
+                crc4 = crc_braid_big_table[0][word4 & 0xff];
+#if N > 5
+                crc5 = crc_braid_big_table[0][word5 & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                for (k = 1; k < W; k++) {
+                    crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff];
+#if N > 1
+                    crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff];
+#if N > 2
+                    crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff];
+#if N > 3
+                    crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff];
+#if N > 4
+                    crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff];
+#if N > 5
+                    crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                }
+            }
+
+            /*
+              Process the last block, combining the CRCs of the N braids at the
+              same time.
+             */
+            comb = crc_word_big(crc0 ^ words[0]);
+#if N > 1
+            comb = crc_word_big(crc1 ^ words[1] ^ comb);
+#if N > 2
+            comb = crc_word_big(crc2 ^ words[2] ^ comb);
+#if N > 3
+            comb = crc_word_big(crc3 ^ words[3] ^ comb);
+#if N > 4
+            comb = crc_word_big(crc4 ^ words[4] ^ comb);
+#if N > 5
+            comb = crc_word_big(crc5 ^ words[5] ^ comb);
+#endif
+#endif
+#endif
+#endif
+#endif
+            words += N;
+            crc = byte_swap(comb);
+        }
+
+        /*
+          Update the pointer to the remaining bytes to process.
+         */
+        buf = (unsigned char const *)words;
+    }
+
+#endif /* W */
+
+    /* Complete the computation of the CRC on any remaining bytes. */
+    while (len >= 8) {
+        len -= 8;
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+    }
+    while (len) {
+        len--;
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+    }
+
+    /* Return the CRC, post-conditioned. */
+    return crc ^ 0xffffffff;
+}
+
+#endif
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(
+    unsigned long crc,
+    const unsigned char FAR *buf,
+    uInt len)
+{
+    return crc32_z(crc, buf, len);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine64(
+    uLong crc1,
+    uLong crc2,
+    z_off64_t len2)
+{
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+    return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine(
+    uLong crc1,
+    uLong crc2,
+    z_off_t len2)
+{
+    return crc32_combine64(crc1, crc2, len2);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine_gen64(
+    z_off64_t len2)
+{
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+    return x2nmodp(len2, 3);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine_gen(
+    z_off_t len2)
+{
+    return crc32_combine_gen64(len2);
+}
+
+/* ========================================================================= */
+uLong crc32_combine_op(
+    uLong crc1,
+    uLong crc2,
+    uLong op)
+{
+    return multmodp(op, crc1) ^ crc2;
+}
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/crc32.h b/qtbase/src/3rdparty/freetype/src/gzip/crc32.h
new file mode 100644
index 0000000000..137df68d61
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/crc32.h
@@ -0,0 +1,9446 @@
+/* crc32.h -- tables for rapid CRC calculation
+ * Generated automatically by crc32.c
+ */
+
+local const z_crc_t FAR crc_table[] = {
+    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+    0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+    0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+    0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+    0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+    0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+    0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+    0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+    0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+    0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+    0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+    0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+    0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+    0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+    0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+    0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+    0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+    0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+    0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+    0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+    0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+    0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+    0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+    0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+    0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+    0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+    0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+    0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+    0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+    0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+    0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+    0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+    0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+    0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+    0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+    0x2d02ef8d};
+
+#ifdef W
+
+#if W == 8
+
+local const z_word_t FAR crc_big_table[] = {
+    0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
+    0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
+    0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
+    0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
+    0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
+    0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
+    0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
+    0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
+    0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
+    0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
+    0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
+    0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
+    0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
+    0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
+    0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
+    0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
+    0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
+    0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
+    0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
+    0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
+    0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
+    0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
+    0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
+    0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
+    0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
+    0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
+    0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
+    0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
+    0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
+    0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
+    0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
+    0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
+    0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
+    0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
+    0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
+    0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
+    0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
+    0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
+    0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
+    0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
+    0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
+    0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
+    0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
+    0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
+    0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
+    0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
+    0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
+    0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
+    0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
+    0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
+    0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
+    0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
+    0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
+    0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
+    0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
+    0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
+    0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
+    0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
+    0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
+    0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
+    0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
+    0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
+    0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
+    0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
+    0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
+    0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
+    0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
+    0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
+    0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
+    0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
+    0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
+    0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
+    0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
+    0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
+    0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
+    0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
+    0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
+    0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
+    0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
+    0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
+    0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
+    0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
+    0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
+    0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
+    0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
+    0x8def022d00000000};
+
+#else /* W == 4 */
+
+local const z_word_t FAR crc_big_table[] = {
+    0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
+    0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
+    0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
+    0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
+    0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
+    0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
+    0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
+    0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
+    0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
+    0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
+    0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
+    0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
+    0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
+    0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
+    0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
+    0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
+    0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
+    0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
+    0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
+    0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
+    0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
+    0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
+    0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
+    0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
+    0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
+    0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
+    0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
+    0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
+    0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
+    0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
+    0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
+    0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
+    0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
+    0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
+    0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
+    0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
+    0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
+    0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
+    0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
+    0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
+    0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
+    0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
+    0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
+    0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
+    0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
+    0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
+    0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
+    0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
+    0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
+    0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
+    0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
+    0x8def022d};
+
+#endif
+
+#if N == 1
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
+    0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
+    0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
+    0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
+    0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
+    0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
+    0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
+    0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
+    0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
+    0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
+    0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
+    0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
+    0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
+    0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
+    0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
+    0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
+    0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
+    0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
+    0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
+    0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
+    0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
+    0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
+    0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
+    0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
+    0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
+    0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
+    0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
+    0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
+    0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
+    0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
+    0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
+    0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
+    0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
+    0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
+    0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
+    0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
+    0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
+    0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
+    0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
+    0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
+    0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
+    0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
+    0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
+    0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
+    0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
+    0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
+    0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
+    0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
+    0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
+    0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
+    0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
+    0x264b06e6},
+   {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
+    0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
+    0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
+    0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
+    0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
+    0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
+    0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
+    0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
+    0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
+    0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
+    0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
+    0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
+    0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
+    0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
+    0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
+    0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
+    0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
+    0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
+    0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
+    0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
+    0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
+    0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
+    0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
+    0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
+    0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
+    0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
+    0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
+    0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
+    0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
+    0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
+    0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
+    0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
+    0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
+    0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
+    0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
+    0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
+    0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
+    0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
+    0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
+    0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
+    0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
+    0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
+    0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
+    0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
+    0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
+    0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
+    0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
+    0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
+    0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
+    0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
+    0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
+    0x92364a30},
+   {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
+    0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
+    0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
+    0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
+    0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
+    0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
+    0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
+    0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
+    0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
+    0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
+    0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
+    0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
+    0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
+    0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
+    0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
+    0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
+    0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
+    0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
+    0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
+    0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
+    0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
+    0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
+    0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
+    0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
+    0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
+    0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
+    0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
+    0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
+    0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
+    0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
+    0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
+    0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
+    0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
+    0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
+    0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
+    0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
+    0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
+    0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
+    0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
+    0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
+    0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
+    0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
+    0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
+    0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
+    0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
+    0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
+    0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
+    0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
+    0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
+    0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
+    0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
+    0xe4c4abcc},
+   {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
+    0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
+    0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
+    0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
+    0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
+    0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
+    0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
+    0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
+    0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
+    0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
+    0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
+    0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
+    0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
+    0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
+    0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
+    0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
+    0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
+    0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
+    0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
+    0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
+    0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
+    0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
+    0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
+    0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
+    0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
+    0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
+    0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
+    0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
+    0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
+    0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
+    0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
+    0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
+    0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
+    0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
+    0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
+    0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
+    0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
+    0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
+    0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
+    0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
+    0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
+    0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
+    0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
+    0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
+    0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
+    0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
+    0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
+    0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
+    0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
+    0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
+    0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
+    0xca64c78c},
+   {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
+    0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
+    0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
+    0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
+    0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
+    0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
+    0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
+    0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
+    0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
+    0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
+    0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
+    0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
+    0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
+    0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
+    0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
+    0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
+    0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
+    0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
+    0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
+    0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
+    0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
+    0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
+    0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
+    0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
+    0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
+    0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
+    0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
+    0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
+    0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
+    0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
+    0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
+    0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
+    0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
+    0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
+    0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
+    0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
+    0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
+    0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
+    0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
+    0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
+    0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
+    0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
+    0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
+    0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
+    0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
+    0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
+    0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
+    0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
+    0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
+    0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
+    0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
+    0xde0506f1},
+   {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
+    0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
+    0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
+    0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
+    0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
+    0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
+    0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
+    0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
+    0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
+    0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
+    0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
+    0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
+    0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
+    0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
+    0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
+    0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
+    0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
+    0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
+    0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
+    0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
+    0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
+    0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
+    0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
+    0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
+    0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
+    0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
+    0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
+    0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
+    0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
+    0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
+    0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
+    0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
+    0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
+    0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
+    0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
+    0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
+    0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
+    0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
+    0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
+    0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
+    0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
+    0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
+    0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
+    0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
+    0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
+    0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
+    0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
+    0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
+    0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
+    0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
+    0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
+    0xbe9834ed},
+   {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
+    0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
+    0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
+    0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
+    0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
+    0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
+    0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
+    0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
+    0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
+    0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
+    0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
+    0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
+    0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
+    0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
+    0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
+    0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
+    0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
+    0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
+    0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
+    0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
+    0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
+    0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
+    0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
+    0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
+    0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
+    0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
+    0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
+    0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
+    0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
+    0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
+    0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
+    0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
+    0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
+    0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
+    0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
+    0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
+    0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
+    0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
+    0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
+    0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
+    0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
+    0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
+    0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
+    0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
+    0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
+    0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
+    0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
+    0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
+    0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
+    0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
+    0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
+    0x9324fd72},
+   {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+    0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+    0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+    0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+    0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+    0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+    0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+    0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+    0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+    0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+    0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+    0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+    0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+    0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+    0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+    0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+    0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+    0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+    0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+    0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+    0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+    0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+    0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+    0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+    0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+    0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+    0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+    0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+    0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+    0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+    0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+    0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+    0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+    0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+    0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+    0x2d02ef8d}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
+    0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
+    0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
+    0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
+    0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
+    0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
+    0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
+    0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
+    0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
+    0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
+    0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
+    0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
+    0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
+    0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
+    0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
+    0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
+    0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
+    0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
+    0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
+    0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
+    0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
+    0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
+    0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
+    0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
+    0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
+    0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
+    0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
+    0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
+    0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
+    0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
+    0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
+    0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
+    0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
+    0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
+    0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
+    0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
+    0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
+    0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
+    0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
+    0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
+    0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
+    0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
+    0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
+    0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
+    0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
+    0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
+    0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
+    0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
+    0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
+    0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
+    0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
+    0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
+    0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
+    0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
+    0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
+    0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
+    0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
+    0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
+    0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
+    0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
+    0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
+    0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
+    0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
+    0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
+    0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
+    0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
+    0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
+    0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
+    0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
+    0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
+    0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
+    0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
+    0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
+    0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
+    0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
+    0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
+    0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
+    0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
+    0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
+    0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
+    0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
+    0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
+    0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
+    0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
+    0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
+    0x8def022d00000000},
+   {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000,
+    0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000,
+    0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000,
+    0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000,
+    0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000,
+    0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000,
+    0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000,
+    0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000,
+    0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000,
+    0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000,
+    0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000,
+    0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000,
+    0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000,
+    0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000,
+    0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000,
+    0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000,
+    0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000,
+    0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000,
+    0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000,
+    0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000,
+    0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000,
+    0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000,
+    0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000,
+    0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000,
+    0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000,
+    0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000,
+    0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000,
+    0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000,
+    0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000,
+    0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000,
+    0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000,
+    0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000,
+    0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000,
+    0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000,
+    0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000,
+    0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000,
+    0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000,
+    0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000,
+    0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000,
+    0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000,
+    0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000,
+    0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000,
+    0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000,
+    0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000,
+    0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000,
+    0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000,
+    0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000,
+    0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000,
+    0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000,
+    0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000,
+    0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000,
+    0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000,
+    0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000,
+    0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000,
+    0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000,
+    0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000,
+    0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000,
+    0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000,
+    0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000,
+    0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000,
+    0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000,
+    0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000,
+    0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000,
+    0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000,
+    0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000,
+    0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000,
+    0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000,
+    0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000,
+    0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000,
+    0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000,
+    0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000,
+    0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000,
+    0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000,
+    0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000,
+    0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000,
+    0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000,
+    0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000,
+    0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000,
+    0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000,
+    0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000,
+    0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000,
+    0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000,
+    0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000,
+    0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000,
+    0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000,
+    0x72fd249300000000},
+   {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000,
+    0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000,
+    0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000,
+    0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000,
+    0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000,
+    0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000,
+    0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000,
+    0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000,
+    0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000,
+    0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000,
+    0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000,
+    0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000,
+    0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000,
+    0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000,
+    0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000,
+    0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000,
+    0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000,
+    0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000,
+    0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000,
+    0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000,
+    0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000,
+    0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000,
+    0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000,
+    0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000,
+    0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000,
+    0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000,
+    0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000,
+    0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000,
+    0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000,
+    0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000,
+    0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000,
+    0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000,
+    0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000,
+    0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000,
+    0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000,
+    0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000,
+    0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000,
+    0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000,
+    0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000,
+    0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000,
+    0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000,
+    0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000,
+    0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000,
+    0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000,
+    0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000,
+    0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000,
+    0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000,
+    0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000,
+    0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000,
+    0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000,
+    0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000,
+    0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000,
+    0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000,
+    0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000,
+    0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000,
+    0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000,
+    0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000,
+    0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000,
+    0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000,
+    0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000,
+    0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000,
+    0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000,
+    0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000,
+    0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000,
+    0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000,
+    0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000,
+    0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000,
+    0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000,
+    0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000,
+    0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000,
+    0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000,
+    0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000,
+    0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000,
+    0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000,
+    0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000,
+    0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000,
+    0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000,
+    0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000,
+    0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000,
+    0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000,
+    0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000,
+    0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000,
+    0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000,
+    0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000,
+    0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000,
+    0xed3498be00000000},
+   {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000,
+    0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000,
+    0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000,
+    0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000,
+    0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000,
+    0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000,
+    0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000,
+    0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000,
+    0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000,
+    0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000,
+    0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000,
+    0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000,
+    0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000,
+    0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000,
+    0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000,
+    0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000,
+    0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000,
+    0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000,
+    0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000,
+    0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000,
+    0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000,
+    0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000,
+    0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000,
+    0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000,
+    0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000,
+    0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000,
+    0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000,
+    0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000,
+    0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000,
+    0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000,
+    0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000,
+    0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000,
+    0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000,
+    0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000,
+    0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000,
+    0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000,
+    0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000,
+    0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000,
+    0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000,
+    0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000,
+    0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000,
+    0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000,
+    0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000,
+    0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000,
+    0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000,
+    0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000,
+    0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000,
+    0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000,
+    0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000,
+    0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000,
+    0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000,
+    0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000,
+    0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000,
+    0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000,
+    0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000,
+    0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000,
+    0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000,
+    0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000,
+    0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000,
+    0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000,
+    0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000,
+    0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000,
+    0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000,
+    0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000,
+    0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000,
+    0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000,
+    0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000,
+    0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000,
+    0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000,
+    0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000,
+    0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000,
+    0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000,
+    0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000,
+    0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000,
+    0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000,
+    0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000,
+    0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000,
+    0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000,
+    0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000,
+    0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000,
+    0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000,
+    0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000,
+    0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000,
+    0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000,
+    0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000,
+    0xf10605de00000000},
+   {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000,
+    0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000,
+    0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000,
+    0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000,
+    0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000,
+    0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000,
+    0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000,
+    0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000,
+    0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000,
+    0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000,
+    0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000,
+    0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000,
+    0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000,
+    0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000,
+    0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000,
+    0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000,
+    0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000,
+    0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000,
+    0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000,
+    0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000,
+    0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000,
+    0x572f712300000000, 0x4958f35800000000, 0xf971936500000000,
+    0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000,
+    0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000,
+    0x8813836800000000, 0x383ae35500000000, 0xe840431200000000,
+    0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000,
+    0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000,
+    0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000,
+    0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000,
+    0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000,
+    0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000,
+    0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000,
+    0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000,
+    0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000,
+    0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000,
+    0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000,
+    0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000,
+    0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000,
+    0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000,
+    0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000,
+    0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000,
+    0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000,
+    0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000,
+    0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000,
+    0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000,
+    0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000,
+    0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000,
+    0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000,
+    0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000,
+    0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000,
+    0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000,
+    0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000,
+    0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000,
+    0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000,
+    0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000,
+    0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000,
+    0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000,
+    0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000,
+    0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000,
+    0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000,
+    0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000,
+    0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000,
+    0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000,
+    0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000,
+    0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000,
+    0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000,
+    0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000,
+    0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000,
+    0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000,
+    0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000,
+    0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000,
+    0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000,
+    0x983485b900000000, 0x281de58400000000, 0xf86745c300000000,
+    0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000,
+    0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000,
+    0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000,
+    0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000,
+    0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000,
+    0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000,
+    0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000,
+    0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000,
+    0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000,
+    0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000,
+    0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000,
+    0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000,
+    0x8cc764ca00000000},
+   {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000,
+    0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000,
+    0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000,
+    0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000,
+    0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000,
+    0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000,
+    0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000,
+    0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000,
+    0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000,
+    0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000,
+    0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000,
+    0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000,
+    0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000,
+    0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000,
+    0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000,
+    0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000,
+    0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000,
+    0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000,
+    0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000,
+    0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000,
+    0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000,
+    0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000,
+    0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000,
+    0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000,
+    0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000,
+    0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000,
+    0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000,
+    0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000,
+    0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000,
+    0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000,
+    0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000,
+    0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000,
+    0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000,
+    0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000,
+    0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000,
+    0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000,
+    0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000,
+    0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000,
+    0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000,
+    0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000,
+    0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000,
+    0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000,
+    0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000,
+    0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000,
+    0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000,
+    0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000,
+    0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000,
+    0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000,
+    0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000,
+    0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000,
+    0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000,
+    0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000,
+    0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000,
+    0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000,
+    0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000,
+    0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000,
+    0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000,
+    0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000,
+    0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000,
+    0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000,
+    0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000,
+    0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000,
+    0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000,
+    0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000,
+    0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000,
+    0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000,
+    0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000,
+    0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000,
+    0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000,
+    0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000,
+    0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000,
+    0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000,
+    0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000,
+    0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000,
+    0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000,
+    0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000,
+    0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000,
+    0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000,
+    0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000,
+    0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000,
+    0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000,
+    0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000,
+    0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000,
+    0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000,
+    0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000,
+    0xccabc4e400000000},
+   {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000,
+    0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000,
+    0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000,
+    0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000,
+    0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000,
+    0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000,
+    0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000,
+    0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000,
+    0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000,
+    0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000,
+    0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000,
+    0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000,
+    0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000,
+    0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000,
+    0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000,
+    0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000,
+    0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000,
+    0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000,
+    0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000,
+    0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000,
+    0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000,
+    0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000,
+    0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000,
+    0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000,
+    0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000,
+    0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000,
+    0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000,
+    0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000,
+    0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000,
+    0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000,
+    0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000,
+    0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000,
+    0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000,
+    0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000,
+    0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000,
+    0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000,
+    0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000,
+    0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000,
+    0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000,
+    0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000,
+    0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000,
+    0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000,
+    0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000,
+    0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000,
+    0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000,
+    0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000,
+    0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000,
+    0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000,
+    0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000,
+    0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000,
+    0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000,
+    0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000,
+    0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000,
+    0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000,
+    0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000,
+    0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000,
+    0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000,
+    0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000,
+    0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000,
+    0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000,
+    0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000,
+    0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000,
+    0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000,
+    0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000,
+    0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000,
+    0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000,
+    0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000,
+    0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000,
+    0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000,
+    0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000,
+    0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000,
+    0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000,
+    0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000,
+    0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000,
+    0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000,
+    0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000,
+    0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000,
+    0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000,
+    0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000,
+    0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000,
+    0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000,
+    0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000,
+    0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000,
+    0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000,
+    0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000,
+    0x304a369200000000},
+   {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000,
+    0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000,
+    0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000,
+    0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000,
+    0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000,
+    0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000,
+    0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000,
+    0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000,
+    0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000,
+    0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000,
+    0x1923316900000000, 0x87239ba500000000, 0x566276f900000000,
+    0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000,
+    0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000,
+    0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000,
+    0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000,
+    0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000,
+    0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000,
+    0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000,
+    0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000,
+    0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000,
+    0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000,
+    0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000,
+    0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000,
+    0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000,
+    0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000,
+    0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000,
+    0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000,
+    0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000,
+    0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000,
+    0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000,
+    0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000,
+    0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000,
+    0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000,
+    0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000,
+    0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000,
+    0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000,
+    0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000,
+    0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000,
+    0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000,
+    0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000,
+    0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000,
+    0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000,
+    0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000,
+    0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000,
+    0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000,
+    0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000,
+    0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000,
+    0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000,
+    0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000,
+    0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000,
+    0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000,
+    0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000,
+    0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000,
+    0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000,
+    0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000,
+    0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000,
+    0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000,
+    0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000,
+    0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000,
+    0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000,
+    0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000,
+    0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000,
+    0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000,
+    0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000,
+    0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000,
+    0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000,
+    0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000,
+    0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000,
+    0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000,
+    0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000,
+    0x6171384400000000, 0xff71928800000000, 0xe678578200000000,
+    0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000,
+    0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000,
+    0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000,
+    0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000,
+    0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000,
+    0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000,
+    0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000,
+    0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000,
+    0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000,
+    0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000,
+    0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000,
+    0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000,
+    0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000,
+    0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000,
+    0xe6064b2600000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
+    0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
+    0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
+    0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
+    0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
+    0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
+    0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
+    0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
+    0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
+    0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
+    0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
+    0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
+    0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
+    0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
+    0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
+    0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
+    0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
+    0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
+    0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
+    0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
+    0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
+    0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
+    0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
+    0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
+    0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
+    0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
+    0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
+    0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
+    0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
+    0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
+    0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
+    0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
+    0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
+    0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
+    0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
+    0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
+    0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
+    0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
+    0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
+    0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
+    0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
+    0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
+    0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
+    0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
+    0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
+    0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
+    0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
+    0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
+    0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
+    0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
+    0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
+    0xde0506f1},
+   {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
+    0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
+    0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
+    0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
+    0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
+    0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
+    0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
+    0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
+    0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
+    0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
+    0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
+    0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
+    0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
+    0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
+    0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
+    0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
+    0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
+    0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
+    0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
+    0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
+    0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
+    0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
+    0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
+    0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
+    0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
+    0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
+    0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
+    0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
+    0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
+    0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
+    0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
+    0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
+    0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
+    0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
+    0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
+    0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
+    0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
+    0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
+    0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
+    0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
+    0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
+    0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
+    0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
+    0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
+    0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
+    0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
+    0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
+    0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
+    0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
+    0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
+    0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
+    0xbe9834ed},
+   {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
+    0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
+    0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
+    0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
+    0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
+    0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
+    0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
+    0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
+    0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
+    0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
+    0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
+    0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
+    0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
+    0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
+    0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
+    0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
+    0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
+    0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
+    0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
+    0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
+    0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
+    0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
+    0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
+    0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
+    0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
+    0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
+    0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
+    0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
+    0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
+    0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
+    0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
+    0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
+    0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
+    0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
+    0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
+    0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
+    0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
+    0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
+    0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
+    0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
+    0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
+    0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
+    0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
+    0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
+    0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
+    0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
+    0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
+    0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
+    0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
+    0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
+    0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
+    0x9324fd72},
+   {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+    0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+    0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+    0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+    0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+    0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+    0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+    0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+    0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+    0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+    0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+    0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+    0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+    0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+    0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+    0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+    0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+    0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+    0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+    0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+    0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+    0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+    0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+    0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+    0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+    0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+    0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+    0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+    0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+    0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+    0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+    0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+    0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+    0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+    0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+    0x2d02ef8d}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
+    0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
+    0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
+    0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
+    0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
+    0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
+    0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
+    0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
+    0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
+    0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
+    0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
+    0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
+    0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
+    0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
+    0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
+    0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
+    0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
+    0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
+    0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
+    0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
+    0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
+    0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
+    0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
+    0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
+    0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
+    0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
+    0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
+    0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
+    0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
+    0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
+    0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
+    0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
+    0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
+    0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
+    0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
+    0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
+    0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
+    0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
+    0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
+    0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
+    0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
+    0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
+    0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
+    0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
+    0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
+    0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
+    0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
+    0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
+    0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
+    0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
+    0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
+    0x8def022d},
+   {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64,
+    0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1,
+    0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e,
+    0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61,
+    0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82,
+    0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff,
+    0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7,
+    0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da,
+    0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139,
+    0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6,
+    0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89,
+    0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c,
+    0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0,
+    0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d,
+    0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a,
+    0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177,
+    0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de,
+    0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b,
+    0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824,
+    0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e,
+    0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad,
+    0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0,
+    0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d,
+    0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60,
+    0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83,
+    0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822,
+    0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d,
+    0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8,
+    0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171,
+    0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c,
+    0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b,
+    0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6,
+    0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca,
+    0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f,
+    0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430,
+    0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf,
+    0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c,
+    0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51,
+    0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9,
+    0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84,
+    0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67,
+    0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398,
+    0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7,
+    0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62,
+    0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e,
+    0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923,
+    0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4,
+    0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9,
+    0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070,
+    0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5,
+    0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a,
+    0x72fd2493},
+   {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907,
+    0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f,
+    0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a,
+    0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e,
+    0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512,
+    0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14,
+    0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b,
+    0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d,
+    0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731,
+    0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925,
+    0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620,
+    0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28,
+    0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70,
+    0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176,
+    0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d,
+    0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b,
+    0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b,
+    0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63,
+    0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266,
+    0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a,
+    0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446,
+    0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40,
+    0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557,
+    0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51,
+    0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d,
+    0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0,
+    0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5,
+    0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed,
+    0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd,
+    0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb,
+    0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0,
+    0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6,
+    0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de,
+    0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6,
+    0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3,
+    0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7,
+    0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb,
+    0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd,
+    0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92,
+    0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094,
+    0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598,
+    0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c,
+    0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489,
+    0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81,
+    0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9,
+    0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af,
+    0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4,
+    0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2,
+    0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2,
+    0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba,
+    0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf,
+    0xed3498be},
+   {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f,
+    0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d,
+    0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0,
+    0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42,
+    0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95,
+    0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2,
+    0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a,
+    0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d,
+    0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea,
+    0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748,
+    0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5,
+    0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27,
+    0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b,
+    0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac,
+    0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4,
+    0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3,
+    0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44,
+    0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6,
+    0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b,
+    0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329,
+    0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe,
+    0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9,
+    0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1,
+    0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6,
+    0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921,
+    0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555,
+    0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8,
+    0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a,
+    0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd,
+    0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a,
+    0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2,
+    0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5,
+    0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2,
+    0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330,
+    0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad,
+    0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f,
+    0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8,
+    0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef,
+    0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc,
+    0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb,
+    0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c,
+    0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e,
+    0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03,
+    0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1,
+    0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6,
+    0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1,
+    0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9,
+    0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e,
+    0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409,
+    0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb,
+    0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966,
+    0xf10605de}};
+
+#endif
+
+#endif
+
+#if N == 2
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
+    0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
+    0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
+    0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
+    0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
+    0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
+    0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
+    0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
+    0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
+    0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
+    0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
+    0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
+    0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
+    0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
+    0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
+    0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
+    0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
+    0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
+    0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
+    0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
+    0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
+    0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
+    0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
+    0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
+    0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
+    0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
+    0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
+    0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
+    0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
+    0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
+    0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
+    0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
+    0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
+    0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
+    0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
+    0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
+    0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
+    0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
+    0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
+    0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
+    0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
+    0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
+    0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
+    0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
+    0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
+    0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
+    0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
+    0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
+    0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
+    0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
+    0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
+    0x0d7139d7},
+   {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
+    0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
+    0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
+    0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
+    0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
+    0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
+    0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
+    0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
+    0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
+    0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
+    0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
+    0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
+    0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
+    0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
+    0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
+    0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
+    0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
+    0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
+    0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
+    0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
+    0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
+    0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
+    0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
+    0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
+    0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
+    0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
+    0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
+    0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
+    0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
+    0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
+    0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
+    0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
+    0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
+    0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
+    0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
+    0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
+    0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
+    0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
+    0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
+    0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
+    0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
+    0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
+    0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
+    0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
+    0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
+    0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
+    0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
+    0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
+    0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
+    0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
+    0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
+    0x1c53e98a},
+   {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
+    0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
+    0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
+    0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
+    0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
+    0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
+    0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
+    0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
+    0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
+    0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
+    0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
+    0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
+    0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
+    0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
+    0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
+    0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
+    0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
+    0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
+    0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
+    0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
+    0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
+    0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
+    0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
+    0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
+    0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
+    0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
+    0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
+    0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
+    0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
+    0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
+    0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
+    0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
+    0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
+    0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
+    0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
+    0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
+    0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
+    0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
+    0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
+    0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
+    0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
+    0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
+    0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
+    0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
+    0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
+    0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
+    0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
+    0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
+    0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
+    0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
+    0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
+    0x3f88e851},
+   {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
+    0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
+    0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
+    0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
+    0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
+    0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
+    0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
+    0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
+    0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
+    0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
+    0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
+    0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
+    0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
+    0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
+    0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
+    0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
+    0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
+    0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
+    0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
+    0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
+    0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
+    0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
+    0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
+    0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
+    0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
+    0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
+    0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
+    0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
+    0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
+    0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
+    0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
+    0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
+    0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
+    0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
+    0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
+    0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
+    0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
+    0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
+    0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
+    0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
+    0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
+    0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
+    0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
+    0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
+    0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
+    0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
+    0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
+    0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
+    0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
+    0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
+    0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
+    0x3dee8ca6},
+   {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
+    0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
+    0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
+    0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
+    0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
+    0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
+    0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
+    0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
+    0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
+    0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
+    0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
+    0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
+    0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
+    0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
+    0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
+    0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
+    0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
+    0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
+    0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
+    0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
+    0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
+    0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
+    0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
+    0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
+    0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
+    0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
+    0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
+    0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
+    0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
+    0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
+    0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
+    0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
+    0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
+    0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
+    0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
+    0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
+    0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
+    0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
+    0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
+    0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
+    0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
+    0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
+    0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
+    0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
+    0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
+    0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
+    0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
+    0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
+    0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
+    0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
+    0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
+    0x36197165},
+   {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
+    0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
+    0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
+    0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
+    0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
+    0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
+    0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
+    0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
+    0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
+    0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
+    0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
+    0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
+    0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
+    0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
+    0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
+    0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
+    0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
+    0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
+    0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
+    0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
+    0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
+    0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
+    0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
+    0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
+    0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
+    0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
+    0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
+    0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
+    0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
+    0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
+    0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
+    0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
+    0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
+    0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
+    0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
+    0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
+    0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
+    0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
+    0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
+    0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
+    0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
+    0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
+    0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
+    0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
+    0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
+    0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
+    0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
+    0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
+    0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
+    0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
+    0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
+    0x1a3b93aa},
+   {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
+    0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
+    0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
+    0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
+    0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
+    0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
+    0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
+    0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
+    0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
+    0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
+    0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
+    0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
+    0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
+    0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
+    0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
+    0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
+    0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
+    0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
+    0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
+    0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
+    0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
+    0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
+    0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
+    0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
+    0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
+    0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
+    0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
+    0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
+    0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
+    0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
+    0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
+    0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
+    0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
+    0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
+    0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
+    0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
+    0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
+    0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
+    0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
+    0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
+    0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
+    0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
+    0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
+    0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
+    0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
+    0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
+    0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
+    0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
+    0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
+    0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
+    0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
+    0xe147d714},
+   {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
+    0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
+    0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
+    0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
+    0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
+    0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
+    0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
+    0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
+    0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
+    0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
+    0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
+    0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
+    0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
+    0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
+    0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
+    0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
+    0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
+    0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
+    0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
+    0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
+    0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
+    0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
+    0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
+    0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
+    0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
+    0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
+    0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
+    0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
+    0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
+    0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
+    0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
+    0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
+    0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
+    0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
+    0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
+    0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
+    0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
+    0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
+    0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
+    0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
+    0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
+    0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
+    0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
+    0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
+    0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
+    0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
+    0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
+    0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
+    0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
+    0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
+    0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
+    0x494f0c4b}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000,
+    0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000,
+    0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000,
+    0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000,
+    0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000,
+    0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000,
+    0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000,
+    0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000,
+    0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000,
+    0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000,
+    0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000,
+    0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000,
+    0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000,
+    0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000,
+    0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000,
+    0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000,
+    0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000,
+    0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000,
+    0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000,
+    0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000,
+    0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000,
+    0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000,
+    0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000,
+    0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000,
+    0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000,
+    0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000,
+    0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000,
+    0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000,
+    0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000,
+    0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000,
+    0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000,
+    0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000,
+    0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000,
+    0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000,
+    0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000,
+    0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000,
+    0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000,
+    0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000,
+    0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000,
+    0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000,
+    0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000,
+    0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000,
+    0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000,
+    0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000,
+    0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000,
+    0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000,
+    0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000,
+    0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000,
+    0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000,
+    0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000,
+    0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000,
+    0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000,
+    0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000,
+    0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000,
+    0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000,
+    0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000,
+    0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000,
+    0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000,
+    0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000,
+    0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000,
+    0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000,
+    0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000,
+    0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000,
+    0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000,
+    0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000,
+    0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000,
+    0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000,
+    0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000,
+    0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000,
+    0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000,
+    0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000,
+    0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000,
+    0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000,
+    0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000,
+    0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000,
+    0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000,
+    0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000,
+    0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000,
+    0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000,
+    0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000,
+    0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000,
+    0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000,
+    0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000,
+    0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000,
+    0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000,
+    0x4b0c4f4900000000},
+   {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000,
+    0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000,
+    0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000,
+    0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000,
+    0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000,
+    0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000,
+    0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000,
+    0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000,
+    0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000,
+    0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000,
+    0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000,
+    0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000,
+    0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000,
+    0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000,
+    0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000,
+    0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000,
+    0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000,
+    0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000,
+    0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000,
+    0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000,
+    0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000,
+    0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000,
+    0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000,
+    0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000,
+    0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000,
+    0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000,
+    0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000,
+    0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000,
+    0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000,
+    0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000,
+    0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000,
+    0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000,
+    0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000,
+    0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000,
+    0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000,
+    0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000,
+    0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000,
+    0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000,
+    0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000,
+    0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000,
+    0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000,
+    0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000,
+    0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000,
+    0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000,
+    0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000,
+    0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000,
+    0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000,
+    0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000,
+    0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000,
+    0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000,
+    0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000,
+    0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000,
+    0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000,
+    0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000,
+    0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000,
+    0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000,
+    0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000,
+    0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000,
+    0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000,
+    0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000,
+    0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000,
+    0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000,
+    0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000,
+    0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000,
+    0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000,
+    0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000,
+    0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000,
+    0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000,
+    0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000,
+    0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000,
+    0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000,
+    0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000,
+    0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000,
+    0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000,
+    0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000,
+    0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000,
+    0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000,
+    0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000,
+    0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000,
+    0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000,
+    0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000,
+    0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000,
+    0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000,
+    0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000,
+    0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000,
+    0x14d747e100000000},
+   {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000,
+    0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000,
+    0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000,
+    0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000,
+    0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000,
+    0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000,
+    0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000,
+    0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000,
+    0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000,
+    0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000,
+    0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000,
+    0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000,
+    0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000,
+    0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000,
+    0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000,
+    0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000,
+    0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000,
+    0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000,
+    0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000,
+    0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000,
+    0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000,
+    0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000,
+    0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000,
+    0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000,
+    0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000,
+    0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000,
+    0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000,
+    0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000,
+    0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000,
+    0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000,
+    0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000,
+    0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000,
+    0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000,
+    0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000,
+    0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000,
+    0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000,
+    0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000,
+    0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000,
+    0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000,
+    0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000,
+    0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000,
+    0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000,
+    0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000,
+    0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000,
+    0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000,
+    0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000,
+    0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000,
+    0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000,
+    0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000,
+    0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000,
+    0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000,
+    0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000,
+    0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000,
+    0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000,
+    0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000,
+    0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000,
+    0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000,
+    0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000,
+    0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000,
+    0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000,
+    0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000,
+    0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000,
+    0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000,
+    0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000,
+    0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000,
+    0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000,
+    0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000,
+    0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000,
+    0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000,
+    0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000,
+    0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000,
+    0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000,
+    0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000,
+    0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000,
+    0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000,
+    0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000,
+    0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000,
+    0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000,
+    0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000,
+    0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000,
+    0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000,
+    0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000,
+    0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000,
+    0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000,
+    0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000,
+    0xaa933b1a00000000},
+   {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000,
+    0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000,
+    0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000,
+    0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000,
+    0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000,
+    0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000,
+    0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000,
+    0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000,
+    0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000,
+    0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000,
+    0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000,
+    0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000,
+    0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000,
+    0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000,
+    0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000,
+    0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000,
+    0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000,
+    0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000,
+    0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000,
+    0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000,
+    0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000,
+    0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000,
+    0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000,
+    0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000,
+    0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000,
+    0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000,
+    0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000,
+    0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000,
+    0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000,
+    0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000,
+    0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000,
+    0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000,
+    0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000,
+    0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000,
+    0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000,
+    0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000,
+    0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000,
+    0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000,
+    0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000,
+    0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000,
+    0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000,
+    0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000,
+    0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000,
+    0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000,
+    0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000,
+    0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000,
+    0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000,
+    0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000,
+    0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000,
+    0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000,
+    0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000,
+    0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000,
+    0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000,
+    0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000,
+    0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000,
+    0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000,
+    0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000,
+    0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000,
+    0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000,
+    0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000,
+    0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000,
+    0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000,
+    0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000,
+    0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000,
+    0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000,
+    0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000,
+    0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000,
+    0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000,
+    0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000,
+    0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000,
+    0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000,
+    0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000,
+    0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000,
+    0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000,
+    0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000,
+    0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000,
+    0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000,
+    0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000,
+    0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000,
+    0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000,
+    0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000,
+    0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000,
+    0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000,
+    0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000,
+    0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000,
+    0x6571193600000000},
+   {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000,
+    0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000,
+    0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000,
+    0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000,
+    0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000,
+    0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000,
+    0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000,
+    0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000,
+    0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000,
+    0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000,
+    0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000,
+    0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000,
+    0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000,
+    0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000,
+    0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000,
+    0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000,
+    0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000,
+    0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000,
+    0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000,
+    0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000,
+    0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000,
+    0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000,
+    0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000,
+    0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000,
+    0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000,
+    0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000,
+    0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000,
+    0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000,
+    0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000,
+    0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000,
+    0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000,
+    0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000,
+    0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000,
+    0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000,
+    0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000,
+    0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000,
+    0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000,
+    0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000,
+    0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000,
+    0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000,
+    0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000,
+    0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000,
+    0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000,
+    0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000,
+    0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000,
+    0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000,
+    0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000,
+    0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000,
+    0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000,
+    0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000,
+    0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000,
+    0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000,
+    0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000,
+    0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000,
+    0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000,
+    0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000,
+    0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000,
+    0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000,
+    0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000,
+    0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000,
+    0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000,
+    0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000,
+    0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000,
+    0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000,
+    0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000,
+    0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000,
+    0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000,
+    0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000,
+    0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000,
+    0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000,
+    0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000,
+    0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000,
+    0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000,
+    0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000,
+    0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000,
+    0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000,
+    0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000,
+    0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000,
+    0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000,
+    0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000,
+    0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000,
+    0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000,
+    0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000,
+    0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000,
+    0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000,
+    0xa68cee3d00000000},
+   {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000,
+    0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000,
+    0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000,
+    0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000,
+    0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000,
+    0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000,
+    0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000,
+    0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000,
+    0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000,
+    0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000,
+    0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000,
+    0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000,
+    0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000,
+    0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000,
+    0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000,
+    0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000,
+    0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000,
+    0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000,
+    0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000,
+    0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000,
+    0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000,
+    0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000,
+    0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000,
+    0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000,
+    0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000,
+    0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000,
+    0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000,
+    0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000,
+    0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000,
+    0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000,
+    0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000,
+    0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000,
+    0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000,
+    0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000,
+    0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000,
+    0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000,
+    0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000,
+    0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000,
+    0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000,
+    0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000,
+    0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000,
+    0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000,
+    0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000,
+    0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000,
+    0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000,
+    0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000,
+    0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000,
+    0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000,
+    0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000,
+    0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000,
+    0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000,
+    0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000,
+    0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000,
+    0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000,
+    0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000,
+    0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000,
+    0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000,
+    0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000,
+    0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000,
+    0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000,
+    0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000,
+    0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000,
+    0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000,
+    0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000,
+    0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000,
+    0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000,
+    0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000,
+    0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000,
+    0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000,
+    0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000,
+    0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000,
+    0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000,
+    0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000,
+    0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000,
+    0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000,
+    0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000,
+    0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000,
+    0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000,
+    0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000,
+    0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000,
+    0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000,
+    0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000,
+    0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000,
+    0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000,
+    0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000,
+    0x51e8883f00000000},
+   {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000,
+    0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000,
+    0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000,
+    0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000,
+    0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000,
+    0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000,
+    0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000,
+    0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000,
+    0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000,
+    0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000,
+    0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000,
+    0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000,
+    0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000,
+    0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000,
+    0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000,
+    0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000,
+    0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000,
+    0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000,
+    0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000,
+    0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000,
+    0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000,
+    0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000,
+    0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000,
+    0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000,
+    0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000,
+    0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000,
+    0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000,
+    0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000,
+    0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000,
+    0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000,
+    0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000,
+    0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000,
+    0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000,
+    0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000,
+    0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000,
+    0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000,
+    0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000,
+    0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000,
+    0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000,
+    0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000,
+    0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000,
+    0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000,
+    0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000,
+    0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000,
+    0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000,
+    0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000,
+    0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000,
+    0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000,
+    0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000,
+    0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000,
+    0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000,
+    0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000,
+    0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000,
+    0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000,
+    0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000,
+    0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000,
+    0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000,
+    0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000,
+    0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000,
+    0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000,
+    0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000,
+    0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000,
+    0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000,
+    0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000,
+    0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000,
+    0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000,
+    0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000,
+    0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000,
+    0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000,
+    0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000,
+    0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000,
+    0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000,
+    0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000,
+    0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000,
+    0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000,
+    0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000,
+    0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000,
+    0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000,
+    0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000,
+    0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000,
+    0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000,
+    0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000,
+    0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000,
+    0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000,
+    0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000,
+    0x8ae9531c00000000},
+   {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000,
+    0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000,
+    0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000,
+    0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000,
+    0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000,
+    0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000,
+    0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000,
+    0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000,
+    0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000,
+    0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000,
+    0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000,
+    0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000,
+    0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000,
+    0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000,
+    0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000,
+    0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000,
+    0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000,
+    0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000,
+    0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000,
+    0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000,
+    0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000,
+    0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000,
+    0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000,
+    0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000,
+    0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000,
+    0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000,
+    0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000,
+    0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000,
+    0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000,
+    0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000,
+    0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000,
+    0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000,
+    0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000,
+    0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000,
+    0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000,
+    0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000,
+    0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000,
+    0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000,
+    0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000,
+    0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000,
+    0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000,
+    0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000,
+    0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000,
+    0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000,
+    0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000,
+    0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000,
+    0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000,
+    0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000,
+    0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000,
+    0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000,
+    0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000,
+    0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000,
+    0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000,
+    0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000,
+    0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000,
+    0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000,
+    0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000,
+    0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000,
+    0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000,
+    0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000,
+    0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000,
+    0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000,
+    0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000,
+    0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000,
+    0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000,
+    0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000,
+    0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000,
+    0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000,
+    0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000,
+    0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000,
+    0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000,
+    0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000,
+    0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000,
+    0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000,
+    0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000,
+    0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000,
+    0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000,
+    0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000,
+    0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000,
+    0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000,
+    0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000,
+    0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000,
+    0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000,
+    0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000,
+    0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000,
+    0xd739710d00000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
+    0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
+    0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
+    0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
+    0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
+    0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
+    0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
+    0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
+    0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
+    0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
+    0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
+    0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
+    0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
+    0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
+    0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
+    0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
+    0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
+    0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
+    0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
+    0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
+    0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
+    0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
+    0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
+    0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
+    0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
+    0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
+    0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
+    0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
+    0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
+    0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
+    0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
+    0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
+    0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
+    0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
+    0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
+    0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
+    0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
+    0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
+    0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
+    0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
+    0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
+    0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
+    0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
+    0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
+    0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
+    0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
+    0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
+    0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
+    0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
+    0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
+    0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
+    0x264b06e6},
+   {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
+    0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
+    0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
+    0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
+    0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
+    0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
+    0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
+    0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
+    0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
+    0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
+    0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
+    0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
+    0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
+    0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
+    0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
+    0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
+    0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
+    0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
+    0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
+    0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
+    0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
+    0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
+    0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
+    0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
+    0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
+    0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
+    0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
+    0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
+    0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
+    0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
+    0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
+    0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
+    0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
+    0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
+    0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
+    0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
+    0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
+    0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
+    0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
+    0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
+    0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
+    0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
+    0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
+    0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
+    0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
+    0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
+    0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
+    0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
+    0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
+    0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
+    0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
+    0x92364a30},
+   {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
+    0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
+    0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
+    0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
+    0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
+    0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
+    0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
+    0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
+    0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
+    0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
+    0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
+    0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
+    0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
+    0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
+    0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
+    0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
+    0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
+    0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
+    0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
+    0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
+    0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
+    0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
+    0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
+    0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
+    0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
+    0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
+    0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
+    0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
+    0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
+    0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
+    0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
+    0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
+    0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
+    0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
+    0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
+    0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
+    0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
+    0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
+    0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
+    0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
+    0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
+    0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
+    0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
+    0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
+    0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
+    0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
+    0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
+    0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
+    0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
+    0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
+    0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
+    0xe4c4abcc},
+   {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
+    0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
+    0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
+    0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
+    0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
+    0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
+    0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
+    0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
+    0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
+    0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
+    0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
+    0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
+    0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
+    0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
+    0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
+    0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
+    0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
+    0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
+    0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
+    0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
+    0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
+    0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
+    0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
+    0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
+    0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
+    0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
+    0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
+    0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
+    0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
+    0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
+    0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
+    0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
+    0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
+    0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
+    0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
+    0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
+    0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
+    0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
+    0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
+    0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
+    0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
+    0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
+    0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
+    0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
+    0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
+    0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
+    0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
+    0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
+    0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
+    0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
+    0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
+    0xca64c78c}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5,
+    0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d,
+    0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf,
+    0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027,
+    0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050,
+    0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098,
+    0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb,
+    0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173,
+    0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104,
+    0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c,
+    0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e,
+    0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6,
+    0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358,
+    0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390,
+    0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312,
+    0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da,
+    0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd,
+    0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335,
+    0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387,
+    0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de,
+    0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9,
+    0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261,
+    0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283,
+    0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b,
+    0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c,
+    0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c,
+    0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e,
+    0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6,
+    0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1,
+    0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619,
+    0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b,
+    0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653,
+    0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785,
+    0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d,
+    0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf,
+    0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757,
+    0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720,
+    0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8,
+    0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593,
+    0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b,
+    0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c,
+    0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4,
+    0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506,
+    0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe,
+    0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428,
+    0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0,
+    0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462,
+    0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa,
+    0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd,
+    0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445,
+    0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7,
+    0x8cc764ca},
+   {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b,
+    0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27,
+    0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a,
+    0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285,
+    0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef,
+    0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf,
+    0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a,
+    0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a,
+    0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70,
+    0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf,
+    0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2,
+    0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e,
+    0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f,
+    0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f,
+    0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae,
+    0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe,
+    0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97,
+    0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b,
+    0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436,
+    0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e,
+    0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4,
+    0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4,
+    0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46,
+    0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716,
+    0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c,
+    0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5,
+    0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8,
+    0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774,
+    0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d,
+    0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d,
+    0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc,
+    0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec,
+    0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82,
+    0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e,
+    0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623,
+    0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c,
+    0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6,
+    0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6,
+    0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c,
+    0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c,
+    0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66,
+    0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9,
+    0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4,
+    0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978,
+    0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416,
+    0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946,
+    0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7,
+    0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7,
+    0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e,
+    0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32,
+    0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f,
+    0xccabc4e4},
+   {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4,
+    0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895,
+    0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50,
+    0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656,
+    0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154,
+    0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906,
+    0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258,
+    0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a,
+    0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08,
+    0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e,
+    0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb,
+    0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa,
+    0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44,
+    0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316,
+    0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0,
+    0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2,
+    0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7,
+    0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6,
+    0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73,
+    0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba,
+    0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8,
+    0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea,
+    0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b,
+    0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29,
+    0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b,
+    0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e,
+    0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb,
+    0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a,
+    0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef,
+    0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd,
+    0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b,
+    0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019,
+    0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3,
+    0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2,
+    0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417,
+    0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11,
+    0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13,
+    0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241,
+    0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b,
+    0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09,
+    0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b,
+    0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d,
+    0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8,
+    0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9,
+    0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003,
+    0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851,
+    0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7,
+    0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5,
+    0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190,
+    0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1,
+    0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134,
+    0x304a3692},
+   {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84,
+    0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f,
+    0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15,
+    0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2,
+    0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf,
+    0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7,
+    0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb,
+    0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3,
+    0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae,
+    0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749,
+    0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243,
+    0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8,
+    0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29,
+    0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61,
+    0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8,
+    0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0,
+    0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1,
+    0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a,
+    0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40,
+    0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e,
+    0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03,
+    0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b,
+    0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee,
+    0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6,
+    0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb,
+    0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f,
+    0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495,
+    0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e,
+    0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f,
+    0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067,
+    0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be,
+    0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6,
+    0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e,
+    0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5,
+    0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf,
+    0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958,
+    0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305,
+    0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d,
+    0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338,
+    0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370,
+    0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d,
+    0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca,
+    0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0,
+    0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b,
+    0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083,
+    0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb,
+    0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012,
+    0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a,
+    0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b,
+    0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0,
+    0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea,
+    0xe6064b26}};
+
+#endif
+
+#endif
+
+#if N == 3
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
+    0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
+    0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
+    0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
+    0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
+    0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
+    0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
+    0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
+    0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
+    0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
+    0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
+    0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
+    0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
+    0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
+    0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
+    0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
+    0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
+    0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
+    0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
+    0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
+    0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
+    0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
+    0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
+    0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
+    0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
+    0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
+    0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
+    0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
+    0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
+    0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
+    0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
+    0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
+    0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
+    0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
+    0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
+    0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
+    0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
+    0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
+    0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
+    0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
+    0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
+    0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
+    0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
+    0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
+    0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
+    0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
+    0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
+    0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
+    0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
+    0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
+    0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
+    0x09cd8551},
+   {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
+    0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
+    0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
+    0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
+    0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
+    0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
+    0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
+    0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
+    0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
+    0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
+    0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
+    0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
+    0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
+    0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
+    0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
+    0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
+    0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
+    0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
+    0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
+    0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
+    0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
+    0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
+    0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
+    0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
+    0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
+    0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
+    0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
+    0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
+    0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
+    0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
+    0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
+    0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
+    0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
+    0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
+    0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
+    0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
+    0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
+    0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
+    0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
+    0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
+    0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
+    0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
+    0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
+    0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
+    0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
+    0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
+    0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
+    0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
+    0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
+    0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
+    0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
+    0x7bc97a0c},
+   {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
+    0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
+    0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
+    0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
+    0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
+    0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
+    0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
+    0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
+    0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
+    0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
+    0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
+    0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
+    0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
+    0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
+    0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
+    0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
+    0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
+    0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
+    0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
+    0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
+    0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
+    0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
+    0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
+    0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
+    0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
+    0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
+    0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
+    0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
+    0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
+    0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
+    0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
+    0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
+    0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
+    0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
+    0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
+    0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
+    0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
+    0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
+    0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
+    0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
+    0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
+    0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
+    0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
+    0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
+    0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
+    0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
+    0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
+    0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
+    0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
+    0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
+    0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
+    0x7851a2ca},
+   {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
+    0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
+    0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
+    0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
+    0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
+    0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
+    0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
+    0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
+    0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
+    0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
+    0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
+    0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
+    0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
+    0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
+    0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
+    0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
+    0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
+    0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
+    0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
+    0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
+    0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
+    0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
+    0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
+    0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
+    0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
+    0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
+    0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
+    0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
+    0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
+    0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
+    0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
+    0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
+    0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
+    0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
+    0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
+    0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
+    0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
+    0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
+    0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
+    0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
+    0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
+    0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
+    0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
+    0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
+    0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
+    0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
+    0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
+    0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
+    0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
+    0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
+    0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
+    0x566b6848},
+   {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
+    0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
+    0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
+    0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
+    0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
+    0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
+    0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
+    0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
+    0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
+    0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
+    0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
+    0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
+    0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
+    0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
+    0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
+    0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
+    0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
+    0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
+    0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
+    0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
+    0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
+    0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
+    0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
+    0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
+    0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
+    0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
+    0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
+    0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
+    0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
+    0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
+    0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
+    0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
+    0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
+    0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
+    0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
+    0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
+    0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
+    0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
+    0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
+    0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
+    0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
+    0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
+    0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
+    0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
+    0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
+    0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
+    0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
+    0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
+    0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
+    0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
+    0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
+    0xd8ac6b35},
+   {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
+    0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
+    0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
+    0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
+    0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
+    0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
+    0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
+    0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
+    0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
+    0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
+    0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
+    0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
+    0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
+    0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
+    0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
+    0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
+    0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
+    0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
+    0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
+    0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
+    0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
+    0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
+    0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
+    0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
+    0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
+    0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
+    0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
+    0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
+    0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
+    0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
+    0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
+    0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
+    0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
+    0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
+    0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
+    0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
+    0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
+    0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
+    0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
+    0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
+    0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
+    0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
+    0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
+    0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
+    0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
+    0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
+    0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
+    0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
+    0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
+    0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
+    0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
+    0xa140efa8},
+   {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
+    0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
+    0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
+    0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
+    0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
+    0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
+    0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
+    0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
+    0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
+    0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
+    0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
+    0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
+    0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
+    0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
+    0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
+    0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
+    0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
+    0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
+    0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
+    0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
+    0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
+    0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
+    0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
+    0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
+    0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
+    0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
+    0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
+    0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
+    0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
+    0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
+    0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
+    0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
+    0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
+    0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
+    0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
+    0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
+    0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
+    0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
+    0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
+    0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
+    0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
+    0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
+    0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
+    0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
+    0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
+    0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
+    0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
+    0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
+    0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
+    0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
+    0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
+    0x917cd6a1},
+   {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
+    0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
+    0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
+    0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
+    0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
+    0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
+    0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
+    0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
+    0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
+    0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
+    0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
+    0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
+    0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
+    0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
+    0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
+    0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
+    0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
+    0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
+    0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
+    0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
+    0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
+    0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
+    0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
+    0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
+    0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
+    0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
+    0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
+    0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
+    0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
+    0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
+    0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
+    0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
+    0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
+    0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
+    0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
+    0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
+    0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
+    0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
+    0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
+    0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
+    0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
+    0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
+    0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
+    0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
+    0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
+    0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
+    0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
+    0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
+    0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
+    0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
+    0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
+    0x18ba364e}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000,
+    0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000,
+    0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000,
+    0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000,
+    0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000,
+    0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000,
+    0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000,
+    0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000,
+    0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000,
+    0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000,
+    0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000,
+    0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000,
+    0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000,
+    0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000,
+    0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000,
+    0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000,
+    0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000,
+    0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000,
+    0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000,
+    0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000,
+    0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000,
+    0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000,
+    0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000,
+    0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000,
+    0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000,
+    0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000,
+    0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000,
+    0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000,
+    0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000,
+    0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000,
+    0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000,
+    0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000,
+    0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000,
+    0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000,
+    0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000,
+    0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000,
+    0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000,
+    0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000,
+    0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000,
+    0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000,
+    0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000,
+    0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000,
+    0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000,
+    0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000,
+    0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000,
+    0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000,
+    0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000,
+    0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000,
+    0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000,
+    0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000,
+    0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000,
+    0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000,
+    0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000,
+    0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000,
+    0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000,
+    0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000,
+    0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000,
+    0x08eda52100000000, 0x4391370100000000, 0x005a918600000000,
+    0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000,
+    0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000,
+    0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000,
+    0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000,
+    0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000,
+    0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000,
+    0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000,
+    0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000,
+    0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000,
+    0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000,
+    0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000,
+    0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000,
+    0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000,
+    0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000,
+    0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000,
+    0x7b23114500000000, 0x305f836500000000, 0x739425e200000000,
+    0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000,
+    0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000,
+    0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000,
+    0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000,
+    0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000,
+    0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000,
+    0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000,
+    0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000,
+    0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000,
+    0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000,
+    0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000,
+    0x4e36ba1800000000},
+   {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000,
+    0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000,
+    0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000,
+    0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000,
+    0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000,
+    0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000,
+    0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000,
+    0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000,
+    0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000,
+    0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000,
+    0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000,
+    0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000,
+    0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000,
+    0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000,
+    0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000,
+    0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000,
+    0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000,
+    0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000,
+    0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000,
+    0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000,
+    0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000,
+    0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000,
+    0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000,
+    0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000,
+    0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000,
+    0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000,
+    0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000,
+    0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000,
+    0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000,
+    0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000,
+    0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000,
+    0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000,
+    0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000,
+    0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000,
+    0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000,
+    0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000,
+    0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000,
+    0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000,
+    0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000,
+    0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000,
+    0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000,
+    0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000,
+    0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000,
+    0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000,
+    0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000,
+    0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000,
+    0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000,
+    0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000,
+    0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000,
+    0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000,
+    0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000,
+    0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000,
+    0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000,
+    0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000,
+    0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000,
+    0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000,
+    0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000,
+    0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000,
+    0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000,
+    0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000,
+    0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000,
+    0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000,
+    0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000,
+    0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000,
+    0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000,
+    0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000,
+    0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000,
+    0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000,
+    0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000,
+    0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000,
+    0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000,
+    0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000,
+    0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000,
+    0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000,
+    0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000,
+    0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000,
+    0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000,
+    0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000,
+    0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000,
+    0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000,
+    0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000,
+    0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000,
+    0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000,
+    0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000,
+    0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000,
+    0xa1d67c9100000000},
+   {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000,
+    0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000,
+    0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000,
+    0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000,
+    0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000,
+    0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000,
+    0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000,
+    0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000,
+    0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000,
+    0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000,
+    0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000,
+    0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000,
+    0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000,
+    0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000,
+    0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000,
+    0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000,
+    0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000,
+    0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000,
+    0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000,
+    0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000,
+    0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000,
+    0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000,
+    0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000,
+    0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000,
+    0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000,
+    0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000,
+    0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000,
+    0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000,
+    0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000,
+    0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000,
+    0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000,
+    0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000,
+    0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000,
+    0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000,
+    0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000,
+    0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000,
+    0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000,
+    0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000,
+    0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000,
+    0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000,
+    0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000,
+    0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000,
+    0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000,
+    0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000,
+    0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000,
+    0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000,
+    0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000,
+    0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000,
+    0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000,
+    0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000,
+    0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000,
+    0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000,
+    0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000,
+    0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000,
+    0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000,
+    0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000,
+    0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000,
+    0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000,
+    0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000,
+    0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000,
+    0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000,
+    0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000,
+    0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000,
+    0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000,
+    0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000,
+    0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000,
+    0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000,
+    0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000,
+    0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000,
+    0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000,
+    0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000,
+    0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000,
+    0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000,
+    0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000,
+    0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000,
+    0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000,
+    0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000,
+    0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000,
+    0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000,
+    0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000,
+    0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000,
+    0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000,
+    0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000,
+    0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000,
+    0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000,
+    0xa8ef40a100000000},
+   {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000,
+    0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000,
+    0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000,
+    0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000,
+    0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000,
+    0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000,
+    0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000,
+    0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000,
+    0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000,
+    0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000,
+    0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000,
+    0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000,
+    0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000,
+    0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000,
+    0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000,
+    0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000,
+    0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000,
+    0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000,
+    0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000,
+    0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000,
+    0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000,
+    0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000,
+    0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000,
+    0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000,
+    0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000,
+    0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000,
+    0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000,
+    0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000,
+    0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000,
+    0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000,
+    0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000,
+    0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000,
+    0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000,
+    0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000,
+    0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000,
+    0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000,
+    0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000,
+    0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000,
+    0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000,
+    0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000,
+    0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000,
+    0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000,
+    0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000,
+    0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000,
+    0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000,
+    0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000,
+    0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000,
+    0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000,
+    0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000,
+    0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000,
+    0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000,
+    0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000,
+    0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000,
+    0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000,
+    0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000,
+    0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000,
+    0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000,
+    0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000,
+    0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000,
+    0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000,
+    0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000,
+    0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000,
+    0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000,
+    0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000,
+    0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000,
+    0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000,
+    0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000,
+    0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000,
+    0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000,
+    0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000,
+    0x933d017400000000, 0xd506661100000000, 0x46a022f000000000,
+    0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000,
+    0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000,
+    0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000,
+    0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000,
+    0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000,
+    0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000,
+    0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000,
+    0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000,
+    0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000,
+    0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000,
+    0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000,
+    0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000,
+    0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000,
+    0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000,
+    0x356bacd800000000},
+   {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000,
+    0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000,
+    0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000,
+    0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000,
+    0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000,
+    0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000,
+    0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000,
+    0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000,
+    0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000,
+    0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000,
+    0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000,
+    0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000,
+    0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000,
+    0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000,
+    0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000,
+    0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000,
+    0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000,
+    0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000,
+    0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000,
+    0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000,
+    0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000,
+    0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000,
+    0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000,
+    0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000,
+    0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000,
+    0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000,
+    0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000,
+    0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000,
+    0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000,
+    0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000,
+    0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000,
+    0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000,
+    0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000,
+    0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000,
+    0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000,
+    0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000,
+    0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000,
+    0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000,
+    0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000,
+    0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000,
+    0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000,
+    0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000,
+    0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000,
+    0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000,
+    0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000,
+    0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000,
+    0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000,
+    0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000,
+    0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000,
+    0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000,
+    0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000,
+    0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000,
+    0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000,
+    0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000,
+    0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000,
+    0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000,
+    0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000,
+    0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000,
+    0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000,
+    0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000,
+    0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000,
+    0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000,
+    0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000,
+    0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000,
+    0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000,
+    0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000,
+    0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000,
+    0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000,
+    0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000,
+    0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000,
+    0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000,
+    0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000,
+    0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000,
+    0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000,
+    0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000,
+    0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000,
+    0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000,
+    0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000,
+    0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000,
+    0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000,
+    0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000,
+    0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000,
+    0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000,
+    0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000,
+    0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000,
+    0x48686b5600000000},
+   {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000,
+    0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000,
+    0x805af17200000000, 0x403ed96500000000, 0x002643b900000000,
+    0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000,
+    0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000,
+    0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000,
+    0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000,
+    0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000,
+    0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000,
+    0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000,
+    0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000,
+    0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000,
+    0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000,
+    0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000,
+    0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000,
+    0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000,
+    0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000,
+    0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000,
+    0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000,
+    0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000,
+    0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000,
+    0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000,
+    0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000,
+    0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000,
+    0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000,
+    0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000,
+    0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000,
+    0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000,
+    0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000,
+    0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000,
+    0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000,
+    0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000,
+    0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000,
+    0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000,
+    0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000,
+    0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000,
+    0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000,
+    0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000,
+    0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000,
+    0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000,
+    0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000,
+    0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000,
+    0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000,
+    0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000,
+    0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000,
+    0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000,
+    0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000,
+    0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000,
+    0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000,
+    0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000,
+    0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000,
+    0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000,
+    0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000,
+    0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000,
+    0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000,
+    0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000,
+    0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000,
+    0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000,
+    0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000,
+    0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000,
+    0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000,
+    0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000,
+    0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000,
+    0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000,
+    0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000,
+    0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000,
+    0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000,
+    0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000,
+    0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000,
+    0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000,
+    0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000,
+    0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000,
+    0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000,
+    0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000,
+    0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000,
+    0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000,
+    0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000,
+    0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000,
+    0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000,
+    0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000,
+    0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000,
+    0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000,
+    0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000,
+    0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000,
+    0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000,
+    0xcaa2517800000000},
+   {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000,
+    0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000,
+    0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000,
+    0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000,
+    0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000,
+    0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000,
+    0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000,
+    0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000,
+    0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000,
+    0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000,
+    0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000,
+    0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000,
+    0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000,
+    0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000,
+    0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000,
+    0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000,
+    0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000,
+    0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000,
+    0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000,
+    0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000,
+    0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000,
+    0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000,
+    0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000,
+    0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000,
+    0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000,
+    0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000,
+    0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000,
+    0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000,
+    0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000,
+    0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000,
+    0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000,
+    0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000,
+    0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000,
+    0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000,
+    0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000,
+    0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000,
+    0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000,
+    0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000,
+    0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000,
+    0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000,
+    0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000,
+    0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000,
+    0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000,
+    0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000,
+    0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000,
+    0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000,
+    0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000,
+    0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000,
+    0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000,
+    0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000,
+    0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000,
+    0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000,
+    0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000,
+    0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000,
+    0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000,
+    0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000,
+    0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000,
+    0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000,
+    0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000,
+    0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000,
+    0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000,
+    0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000,
+    0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000,
+    0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000,
+    0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000,
+    0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000,
+    0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000,
+    0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000,
+    0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000,
+    0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000,
+    0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000,
+    0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000,
+    0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000,
+    0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000,
+    0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000,
+    0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000,
+    0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000,
+    0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000,
+    0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000,
+    0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000,
+    0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000,
+    0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000,
+    0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000,
+    0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000,
+    0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000,
+    0x0c7ac97b00000000},
+   {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000,
+    0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000,
+    0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000,
+    0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000,
+    0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000,
+    0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000,
+    0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000,
+    0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000,
+    0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000,
+    0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000,
+    0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000,
+    0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000,
+    0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000,
+    0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000,
+    0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000,
+    0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000,
+    0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000,
+    0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000,
+    0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000,
+    0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000,
+    0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000,
+    0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000,
+    0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000,
+    0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000,
+    0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000,
+    0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000,
+    0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000,
+    0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000,
+    0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000,
+    0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000,
+    0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000,
+    0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000,
+    0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000,
+    0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000,
+    0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000,
+    0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000,
+    0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000,
+    0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000,
+    0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000,
+    0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000,
+    0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000,
+    0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000,
+    0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000,
+    0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000,
+    0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000,
+    0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000,
+    0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000,
+    0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000,
+    0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000,
+    0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000,
+    0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000,
+    0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000,
+    0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000,
+    0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000,
+    0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000,
+    0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000,
+    0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000,
+    0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000,
+    0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000,
+    0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000,
+    0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000,
+    0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000,
+    0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000,
+    0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000,
+    0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000,
+    0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000,
+    0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000,
+    0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000,
+    0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000,
+    0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000,
+    0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000,
+    0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000,
+    0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000,
+    0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000,
+    0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000,
+    0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000,
+    0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000,
+    0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000,
+    0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000,
+    0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000,
+    0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000,
+    0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000,
+    0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000,
+    0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000,
+    0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000,
+    0x5185cd0900000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
+    0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
+    0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
+    0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
+    0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
+    0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
+    0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
+    0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
+    0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
+    0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
+    0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
+    0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
+    0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
+    0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
+    0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
+    0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
+    0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
+    0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
+    0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
+    0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
+    0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
+    0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
+    0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
+    0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
+    0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
+    0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
+    0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
+    0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
+    0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
+    0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
+    0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
+    0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
+    0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
+    0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
+    0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
+    0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
+    0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
+    0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
+    0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
+    0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
+    0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
+    0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
+    0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
+    0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
+    0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
+    0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
+    0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
+    0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
+    0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
+    0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
+    0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
+    0x36197165},
+   {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
+    0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
+    0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
+    0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
+    0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
+    0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
+    0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
+    0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
+    0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
+    0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
+    0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
+    0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
+    0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
+    0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
+    0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
+    0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
+    0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
+    0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
+    0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
+    0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
+    0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
+    0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
+    0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
+    0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
+    0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
+    0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
+    0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
+    0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
+    0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
+    0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
+    0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
+    0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
+    0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
+    0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
+    0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
+    0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
+    0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
+    0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
+    0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
+    0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
+    0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
+    0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
+    0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
+    0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
+    0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
+    0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
+    0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
+    0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
+    0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
+    0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
+    0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
+    0x1a3b93aa},
+   {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
+    0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
+    0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
+    0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
+    0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
+    0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
+    0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
+    0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
+    0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
+    0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
+    0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
+    0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
+    0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
+    0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
+    0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
+    0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
+    0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
+    0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
+    0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
+    0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
+    0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
+    0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
+    0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
+    0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
+    0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
+    0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
+    0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
+    0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
+    0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
+    0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
+    0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
+    0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
+    0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
+    0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
+    0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
+    0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
+    0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
+    0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
+    0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
+    0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
+    0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
+    0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
+    0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
+    0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
+    0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
+    0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
+    0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
+    0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
+    0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
+    0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
+    0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
+    0xe147d714},
+   {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
+    0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
+    0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
+    0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
+    0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
+    0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
+    0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
+    0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
+    0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
+    0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
+    0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
+    0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
+    0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
+    0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
+    0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
+    0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
+    0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
+    0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
+    0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
+    0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
+    0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
+    0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
+    0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
+    0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
+    0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
+    0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
+    0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
+    0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
+    0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
+    0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
+    0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
+    0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
+    0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
+    0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
+    0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
+    0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
+    0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
+    0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
+    0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
+    0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
+    0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
+    0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
+    0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
+    0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
+    0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
+    0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
+    0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
+    0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
+    0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
+    0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
+    0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
+    0x494f0c4b}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d,
+    0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac,
+    0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8,
+    0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95,
+    0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817,
+    0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d,
+    0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac,
+    0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6,
+    0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564,
+    0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39,
+    0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d,
+    0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac,
+    0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de,
+    0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594,
+    0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b,
+    0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01,
+    0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f,
+    0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de,
+    0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba,
+    0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65,
+    0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7,
+    0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad,
+    0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de,
+    0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294,
+    0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716,
+    0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71,
+    0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15,
+    0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4,
+    0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca,
+    0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280,
+    0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f,
+    0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15,
+    0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9,
+    0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748,
+    0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c,
+    0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971,
+    0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3,
+    0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9,
+    0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196,
+    0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc,
+    0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e,
+    0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03,
+    0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67,
+    0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296,
+    0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a,
+    0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170,
+    0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af,
+    0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5,
+    0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb,
+    0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a,
+    0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e,
+    0x4b0c4f49},
+   {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09,
+    0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc,
+    0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e,
+    0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc,
+    0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934,
+    0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2,
+    0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b,
+    0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad,
+    0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155,
+    0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187,
+    0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65,
+    0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390,
+    0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e,
+    0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378,
+    0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889,
+    0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f,
+    0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0,
+    0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145,
+    0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7,
+    0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a,
+    0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2,
+    0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924,
+    0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2,
+    0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514,
+    0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec,
+    0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709,
+    0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb,
+    0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e,
+    0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1,
+    0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227,
+    0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6,
+    0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030,
+    0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0,
+    0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55,
+    0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7,
+    0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165,
+    0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d,
+    0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b,
+    0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c,
+    0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a,
+    0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362,
+    0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0,
+    0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52,
+    0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7,
+    0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237,
+    0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1,
+    0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020,
+    0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6,
+    0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719,
+    0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec,
+    0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e,
+    0x14d747e1},
+   {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0,
+    0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b,
+    0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652,
+    0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437,
+    0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514,
+    0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265,
+    0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de,
+    0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af,
+    0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c,
+    0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9,
+    0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0,
+    0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b,
+    0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6,
+    0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7,
+    0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734,
+    0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045,
+    0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8,
+    0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303,
+    0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a,
+    0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9,
+    0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea,
+    0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b,
+    0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6,
+    0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7,
+    0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4,
+    0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6,
+    0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f,
+    0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054,
+    0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9,
+    0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8,
+    0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b,
+    0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a,
+    0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441,
+    0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a,
+    0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3,
+    0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6,
+    0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5,
+    0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94,
+    0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9,
+    0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288,
+    0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab,
+    0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce,
+    0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7,
+    0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c,
+    0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527,
+    0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256,
+    0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5,
+    0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4,
+    0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39,
+    0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2,
+    0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db,
+    0xaa933b1a},
+   {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603,
+    0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d,
+    0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9,
+    0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b,
+    0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a,
+    0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792,
+    0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4,
+    0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c,
+    0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d,
+    0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f,
+    0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb,
+    0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65,
+    0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330,
+    0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8,
+    0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da,
+    0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742,
+    0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f,
+    0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1,
+    0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5,
+    0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f,
+    0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e,
+    0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6,
+    0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8,
+    0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250,
+    0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021,
+    0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb,
+    0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f,
+    0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511,
+    0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c,
+    0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4,
+    0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886,
+    0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e,
+    0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b,
+    0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5,
+    0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791,
+    0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003,
+    0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272,
+    0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea,
+    0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc,
+    0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24,
+    0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55,
+    0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7,
+    0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3,
+    0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d,
+    0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548,
+    0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0,
+    0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2,
+    0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a,
+    0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47,
+    0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9,
+    0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad,
+    0x65711936}};
+
+#endif
+
+#endif
+
+#if N == 4
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a,
+    0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe,
+    0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b,
+    0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656,
+    0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd,
+    0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d,
+    0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7,
+    0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47,
+    0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac,
+    0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691,
+    0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404,
+    0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0,
+    0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4,
+    0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424,
+    0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5,
+    0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65,
+    0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67,
+    0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3,
+    0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626,
+    0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9,
+    0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222,
+    0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2,
+    0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a,
+    0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a,
+    0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1,
+    0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2,
+    0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077,
+    0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3,
+    0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1,
+    0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621,
+    0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0,
+    0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60,
+    0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0,
+    0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64,
+    0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1,
+    0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc,
+    0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027,
+    0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7,
+    0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9,
+    0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79,
+    0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292,
+    0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af,
+    0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a,
+    0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee,
+    0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e,
+    0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe,
+    0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f,
+    0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff,
+    0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd,
+    0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29,
+    0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc,
+    0xe3c45916},
+   {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344,
+    0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59,
+    0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e,
+    0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463,
+    0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98,
+    0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d,
+    0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3,
+    0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656,
+    0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad,
+    0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0,
+    0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397,
+    0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a,
+    0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2,
+    0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357,
+    0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8,
+    0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d,
+    0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696,
+    0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b,
+    0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc,
+    0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0,
+    0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b,
+    0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be,
+    0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811,
+    0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384,
+    0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f,
+    0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955,
+    0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362,
+    0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f,
+    0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94,
+    0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701,
+    0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe,
+    0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b,
+    0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1,
+    0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc,
+    0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b,
+    0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986,
+    0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d,
+    0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8,
+    0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4,
+    0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371,
+    0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a,
+    0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87,
+    0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0,
+    0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad,
+    0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527,
+    0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2,
+    0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d,
+    0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998,
+    0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73,
+    0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e,
+    0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59,
+    0xa7520488},
+   {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20,
+    0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09,
+    0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431,
+    0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a,
+    0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203,
+    0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b,
+    0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14,
+    0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c,
+    0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25,
+    0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e,
+    0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36,
+    0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f,
+    0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649,
+    0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961,
+    0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58,
+    0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170,
+    0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b,
+    0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742,
+    0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a,
+    0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55,
+    0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c,
+    0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64,
+    0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f,
+    0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77,
+    0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e,
+    0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a,
+    0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2,
+    0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b,
+    0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090,
+    0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8,
+    0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881,
+    0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9,
+    0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6,
+    0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f,
+    0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7,
+    0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c,
+    0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695,
+    0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd,
+    0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb,
+    0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3,
+    0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa,
+    0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1,
+    0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9,
+    0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0,
+    0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df,
+    0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7,
+    0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace,
+    0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6,
+    0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd,
+    0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4,
+    0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec,
+    0x3522e9e4},
+   {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1,
+    0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86,
+    0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b,
+    0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669,
+    0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7,
+    0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352,
+    0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03,
+    0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6,
+    0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38,
+    0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a,
+    0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7,
+    0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80,
+    0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7,
+    0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522,
+    0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d,
+    0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8,
+    0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103,
+    0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54,
+    0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9,
+    0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0,
+    0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e,
+    0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb,
+    0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1,
+    0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624,
+    0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea,
+    0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a,
+    0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37,
+    0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360,
+    0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab,
+    0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e,
+    0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741,
+    0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4,
+    0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334,
+    0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63,
+    0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de,
+    0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c,
+    0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942,
+    0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7,
+    0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131,
+    0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4,
+    0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a,
+    0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758,
+    0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5,
+    0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2,
+    0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32,
+    0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7,
+    0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8,
+    0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d,
+    0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6,
+    0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1,
+    0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c,
+    0x97411e28},
+   {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474,
+    0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5,
+    0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6,
+    0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7,
+    0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938,
+    0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051,
+    0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a,
+    0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3,
+    0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c,
+    0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d,
+    0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e,
+    0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf,
+    0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740,
+    0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29,
+    0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592,
+    0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb,
+    0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4,
+    0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365,
+    0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036,
+    0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7,
+    0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08,
+    0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561,
+    0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a,
+    0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663,
+    0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac,
+    0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d,
+    0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce,
+    0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f,
+    0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50,
+    0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639,
+    0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82,
+    0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb,
+    0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954,
+    0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5,
+    0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86,
+    0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7,
+    0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418,
+    0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71,
+    0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa,
+    0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93,
+    0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c,
+    0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d,
+    0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e,
+    0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df,
+    0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60,
+    0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309,
+    0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2,
+    0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db,
+    0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4,
+    0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45,
+    0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16,
+    0x93c7a00b},
+   {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45,
+    0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb,
+    0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d,
+    0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696,
+    0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf,
+    0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb,
+    0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028,
+    0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c,
+    0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65,
+    0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be,
+    0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038,
+    0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6,
+    0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15,
+    0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11,
+    0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d,
+    0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19,
+    0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05,
+    0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b,
+    0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d,
+    0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c,
+    0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35,
+    0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31,
+    0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068,
+    0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c,
+    0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25,
+    0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a,
+    0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac,
+    0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22,
+    0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e,
+    0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a,
+    0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36,
+    0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32,
+    0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84,
+    0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a,
+    0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c,
+    0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057,
+    0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e,
+    0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a,
+    0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc,
+    0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8,
+    0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1,
+    0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a,
+    0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec,
+    0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62,
+    0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4,
+    0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0,
+    0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc,
+    0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8,
+    0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4,
+    0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a,
+    0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc,
+    0xce5f968d},
+   {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de,
+    0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b,
+    0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d,
+    0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680,
+    0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4,
+    0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d,
+    0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde,
+    0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97,
+    0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3,
+    0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e,
+    0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678,
+    0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d,
+    0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723,
+    0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a,
+    0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0,
+    0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9,
+    0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85,
+    0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770,
+    0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56,
+    0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a,
+    0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e,
+    0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67,
+    0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785,
+    0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc,
+    0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788,
+    0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90,
+    0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6,
+    0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843,
+    0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f,
+    0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336,
+    0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac,
+    0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5,
+    0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68,
+    0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d,
+    0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb,
+    0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36,
+    0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72,
+    0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b,
+    0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b,
+    0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402,
+    0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446,
+    0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb,
+    0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed,
+    0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418,
+    0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95,
+    0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc,
+    0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946,
+    0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f,
+    0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233,
+    0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6,
+    0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0,
+    0x3e721277},
+   {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb,
+    0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9,
+    0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11,
+    0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d,
+    0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9,
+    0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c,
+    0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881,
+    0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274,
+    0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790,
+    0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc,
+    0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514,
+    0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56,
+    0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9,
+    0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c,
+    0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13,
+    0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6,
+    0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c,
+    0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e,
+    0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386,
+    0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376,
+    0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692,
+    0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67,
+    0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416,
+    0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3,
+    0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07,
+    0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd,
+    0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15,
+    0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457,
+    0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd,
+    0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28,
+    0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337,
+    0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2,
+    0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594,
+    0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6,
+    0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e,
+    0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52,
+    0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6,
+    0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143,
+    0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17,
+    0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2,
+    0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306,
+    0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a,
+    0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182,
+    0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0,
+    0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496,
+    0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63,
+    0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c,
+    0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89,
+    0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903,
+    0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041,
+    0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9,
+    0x1c65ace7}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000,
+    0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000,
+    0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000,
+    0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000,
+    0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000,
+    0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000,
+    0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000,
+    0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000,
+    0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000,
+    0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000,
+    0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000,
+    0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000,
+    0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000,
+    0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000,
+    0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000,
+    0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000,
+    0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000,
+    0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000,
+    0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000,
+    0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000,
+    0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000,
+    0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000,
+    0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000,
+    0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000,
+    0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000,
+    0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000,
+    0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000,
+    0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000,
+    0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000,
+    0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000,
+    0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000,
+    0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000,
+    0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000,
+    0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000,
+    0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000,
+    0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000,
+    0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000,
+    0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000,
+    0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000,
+    0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000,
+    0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000,
+    0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000,
+    0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000,
+    0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000,
+    0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000,
+    0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000,
+    0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000,
+    0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000,
+    0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000,
+    0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000,
+    0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000,
+    0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000,
+    0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000,
+    0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000,
+    0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000,
+    0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000,
+    0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000,
+    0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000,
+    0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000,
+    0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000,
+    0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000,
+    0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000,
+    0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000,
+    0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000,
+    0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000,
+    0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000,
+    0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000,
+    0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000,
+    0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000,
+    0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000,
+    0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000,
+    0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000,
+    0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000,
+    0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000,
+    0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000,
+    0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000,
+    0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000,
+    0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000,
+    0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000,
+    0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000,
+    0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000,
+    0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000,
+    0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000,
+    0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000,
+    0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000,
+    0xe7ac651c00000000},
+   {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000,
+    0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000,
+    0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000,
+    0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000,
+    0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000,
+    0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000,
+    0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000,
+    0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000,
+    0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000,
+    0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000,
+    0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000,
+    0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000,
+    0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000,
+    0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000,
+    0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000,
+    0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000,
+    0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000,
+    0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000,
+    0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000,
+    0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000,
+    0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000,
+    0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000,
+    0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000,
+    0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000,
+    0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000,
+    0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000,
+    0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000,
+    0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000,
+    0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000,
+    0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000,
+    0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000,
+    0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000,
+    0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000,
+    0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000,
+    0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000,
+    0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000,
+    0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000,
+    0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000,
+    0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000,
+    0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000,
+    0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000,
+    0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000,
+    0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000,
+    0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000,
+    0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000,
+    0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000,
+    0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000,
+    0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000,
+    0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000,
+    0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000,
+    0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000,
+    0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000,
+    0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000,
+    0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000,
+    0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000,
+    0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000,
+    0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000,
+    0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000,
+    0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000,
+    0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000,
+    0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000,
+    0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000,
+    0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000,
+    0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000,
+    0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000,
+    0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000,
+    0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000,
+    0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000,
+    0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000,
+    0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000,
+    0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000,
+    0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000,
+    0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000,
+    0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000,
+    0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000,
+    0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000,
+    0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000,
+    0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000,
+    0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000,
+    0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000,
+    0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000,
+    0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000,
+    0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000,
+    0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000,
+    0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000,
+    0x7712723e00000000},
+   {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000,
+    0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000,
+    0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000,
+    0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000,
+    0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000,
+    0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000,
+    0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000,
+    0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000,
+    0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000,
+    0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000,
+    0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000,
+    0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000,
+    0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000,
+    0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000,
+    0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000,
+    0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000,
+    0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000,
+    0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000,
+    0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000,
+    0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000,
+    0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000,
+    0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000,
+    0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000,
+    0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000,
+    0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000,
+    0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000,
+    0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000,
+    0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000,
+    0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000,
+    0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000,
+    0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000,
+    0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000,
+    0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000,
+    0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000,
+    0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000,
+    0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000,
+    0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000,
+    0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000,
+    0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000,
+    0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000,
+    0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000,
+    0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000,
+    0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000,
+    0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000,
+    0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000,
+    0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000,
+    0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000,
+    0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000,
+    0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000,
+    0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000,
+    0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000,
+    0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000,
+    0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000,
+    0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000,
+    0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000,
+    0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000,
+    0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000,
+    0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000,
+    0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000,
+    0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000,
+    0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000,
+    0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000,
+    0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000,
+    0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000,
+    0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000,
+    0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000,
+    0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000,
+    0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000,
+    0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000,
+    0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000,
+    0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000,
+    0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000,
+    0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000,
+    0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000,
+    0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000,
+    0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000,
+    0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000,
+    0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000,
+    0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000,
+    0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000,
+    0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000,
+    0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000,
+    0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000,
+    0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000,
+    0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000,
+    0x8d965fce00000000},
+   {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000,
+    0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000,
+    0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000,
+    0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000,
+    0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000,
+    0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000,
+    0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000,
+    0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000,
+    0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000,
+    0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000,
+    0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000,
+    0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000,
+    0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000,
+    0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000,
+    0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000,
+    0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000,
+    0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000,
+    0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000,
+    0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000,
+    0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000,
+    0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000,
+    0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000,
+    0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000,
+    0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000,
+    0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000,
+    0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000,
+    0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000,
+    0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000,
+    0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000,
+    0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000,
+    0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000,
+    0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000,
+    0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000,
+    0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000,
+    0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000,
+    0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000,
+    0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000,
+    0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000,
+    0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000,
+    0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000,
+    0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000,
+    0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000,
+    0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000,
+    0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000,
+    0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000,
+    0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000,
+    0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000,
+    0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000,
+    0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000,
+    0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000,
+    0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000,
+    0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000,
+    0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000,
+    0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000,
+    0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000,
+    0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000,
+    0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000,
+    0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000,
+    0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000,
+    0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000,
+    0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000,
+    0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000,
+    0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000,
+    0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000,
+    0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000,
+    0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000,
+    0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000,
+    0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000,
+    0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000,
+    0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000,
+    0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000,
+    0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000,
+    0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000,
+    0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000,
+    0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000,
+    0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000,
+    0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000,
+    0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000,
+    0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000,
+    0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000,
+    0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000,
+    0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000,
+    0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000,
+    0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000,
+    0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000,
+    0x0ba0c79300000000},
+   {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000,
+    0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000,
+    0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000,
+    0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000,
+    0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000,
+    0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000,
+    0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000,
+    0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000,
+    0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000,
+    0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000,
+    0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000,
+    0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000,
+    0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000,
+    0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000,
+    0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000,
+    0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000,
+    0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000,
+    0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000,
+    0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000,
+    0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000,
+    0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000,
+    0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000,
+    0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000,
+    0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000,
+    0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000,
+    0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000,
+    0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000,
+    0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000,
+    0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000,
+    0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000,
+    0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000,
+    0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000,
+    0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000,
+    0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000,
+    0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000,
+    0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000,
+    0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000,
+    0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000,
+    0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000,
+    0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000,
+    0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000,
+    0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000,
+    0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000,
+    0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000,
+    0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000,
+    0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000,
+    0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000,
+    0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000,
+    0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000,
+    0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000,
+    0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000,
+    0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000,
+    0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000,
+    0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000,
+    0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000,
+    0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000,
+    0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000,
+    0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000,
+    0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000,
+    0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000,
+    0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000,
+    0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000,
+    0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000,
+    0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000,
+    0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000,
+    0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000,
+    0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000,
+    0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000,
+    0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000,
+    0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000,
+    0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000,
+    0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000,
+    0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000,
+    0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000,
+    0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000,
+    0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000,
+    0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000,
+    0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000,
+    0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000,
+    0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000,
+    0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000,
+    0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000,
+    0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000,
+    0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000,
+    0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000,
+    0x281e419700000000},
+   {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000,
+    0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000,
+    0x304a428900000000, 0x38a922b500000000, 0x011e763800000000,
+    0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000,
+    0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000,
+    0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000,
+    0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000,
+    0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000,
+    0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000,
+    0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000,
+    0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000,
+    0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000,
+    0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000,
+    0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000,
+    0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000,
+    0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000,
+    0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000,
+    0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000,
+    0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000,
+    0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000,
+    0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000,
+    0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000,
+    0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000,
+    0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000,
+    0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000,
+    0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000,
+    0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000,
+    0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000,
+    0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000,
+    0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000,
+    0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000,
+    0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000,
+    0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000,
+    0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000,
+    0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000,
+    0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000,
+    0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000,
+    0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000,
+    0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000,
+    0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000,
+    0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000,
+    0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000,
+    0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000,
+    0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000,
+    0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000,
+    0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000,
+    0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000,
+    0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000,
+    0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000,
+    0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000,
+    0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000,
+    0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000,
+    0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000,
+    0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000,
+    0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000,
+    0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000,
+    0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000,
+    0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000,
+    0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000,
+    0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000,
+    0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000,
+    0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000,
+    0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000,
+    0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000,
+    0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000,
+    0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000,
+    0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000,
+    0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000,
+    0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000,
+    0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000,
+    0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000,
+    0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000,
+    0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000,
+    0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000,
+    0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000,
+    0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000,
+    0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000,
+    0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000,
+    0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000,
+    0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000,
+    0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000,
+    0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000,
+    0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000,
+    0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000,
+    0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000,
+    0xe4e9223500000000},
+   {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000,
+    0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000,
+    0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000,
+    0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000,
+    0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000,
+    0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000,
+    0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000,
+    0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000,
+    0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000,
+    0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000,
+    0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000,
+    0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000,
+    0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000,
+    0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000,
+    0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000,
+    0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000,
+    0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000,
+    0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000,
+    0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000,
+    0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000,
+    0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000,
+    0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000,
+    0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000,
+    0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000,
+    0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000,
+    0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000,
+    0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000,
+    0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000,
+    0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000,
+    0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000,
+    0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000,
+    0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000,
+    0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000,
+    0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000,
+    0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000,
+    0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000,
+    0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000,
+    0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000,
+    0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000,
+    0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000,
+    0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000,
+    0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000,
+    0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000,
+    0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000,
+    0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000,
+    0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000,
+    0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000,
+    0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000,
+    0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000,
+    0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000,
+    0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000,
+    0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000,
+    0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000,
+    0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000,
+    0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000,
+    0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000,
+    0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000,
+    0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000,
+    0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000,
+    0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000,
+    0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000,
+    0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000,
+    0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000,
+    0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000,
+    0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000,
+    0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000,
+    0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000,
+    0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000,
+    0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000,
+    0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000,
+    0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000,
+    0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000,
+    0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000,
+    0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000,
+    0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000,
+    0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000,
+    0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000,
+    0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000,
+    0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000,
+    0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000,
+    0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000,
+    0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000,
+    0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000,
+    0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000,
+    0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000,
+    0x880452a700000000},
+   {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000,
+    0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000,
+    0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000,
+    0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000,
+    0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000,
+    0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000,
+    0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000,
+    0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000,
+    0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000,
+    0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000,
+    0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000,
+    0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000,
+    0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000,
+    0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000,
+    0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000,
+    0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000,
+    0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000,
+    0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000,
+    0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000,
+    0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000,
+    0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000,
+    0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000,
+    0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000,
+    0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000,
+    0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000,
+    0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000,
+    0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000,
+    0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000,
+    0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000,
+    0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000,
+    0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000,
+    0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000,
+    0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000,
+    0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000,
+    0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000,
+    0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000,
+    0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000,
+    0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000,
+    0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000,
+    0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000,
+    0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000,
+    0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000,
+    0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000,
+    0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000,
+    0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000,
+    0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000,
+    0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000,
+    0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000,
+    0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000,
+    0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000,
+    0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000,
+    0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000,
+    0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000,
+    0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000,
+    0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000,
+    0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000,
+    0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000,
+    0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000,
+    0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000,
+    0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000,
+    0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000,
+    0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000,
+    0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000,
+    0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000,
+    0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000,
+    0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000,
+    0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000,
+    0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000,
+    0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000,
+    0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000,
+    0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000,
+    0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000,
+    0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000,
+    0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000,
+    0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000,
+    0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000,
+    0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000,
+    0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000,
+    0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000,
+    0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000,
+    0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000,
+    0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000,
+    0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000,
+    0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000,
+    0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000,
+    0x1659c4e300000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
+    0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
+    0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
+    0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
+    0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
+    0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
+    0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
+    0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
+    0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
+    0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
+    0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
+    0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
+    0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
+    0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
+    0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
+    0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
+    0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
+    0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
+    0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
+    0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
+    0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
+    0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
+    0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
+    0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
+    0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
+    0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
+    0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
+    0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
+    0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
+    0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
+    0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
+    0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
+    0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
+    0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
+    0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
+    0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
+    0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
+    0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
+    0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
+    0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
+    0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
+    0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
+    0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
+    0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
+    0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
+    0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
+    0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
+    0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
+    0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
+    0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
+    0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
+    0x0d7139d7},
+   {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
+    0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
+    0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
+    0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
+    0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
+    0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
+    0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
+    0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
+    0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
+    0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
+    0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
+    0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
+    0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
+    0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
+    0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
+    0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
+    0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
+    0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
+    0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
+    0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
+    0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
+    0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
+    0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
+    0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
+    0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
+    0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
+    0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
+    0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
+    0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
+    0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
+    0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
+    0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
+    0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
+    0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
+    0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
+    0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
+    0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
+    0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
+    0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
+    0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
+    0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
+    0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
+    0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
+    0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
+    0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
+    0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
+    0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
+    0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
+    0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
+    0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
+    0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
+    0x1c53e98a},
+   {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
+    0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
+    0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
+    0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
+    0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
+    0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
+    0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
+    0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
+    0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
+    0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
+    0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
+    0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
+    0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
+    0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
+    0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
+    0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
+    0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
+    0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
+    0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
+    0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
+    0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
+    0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
+    0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
+    0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
+    0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
+    0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
+    0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
+    0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
+    0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
+    0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
+    0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
+    0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
+    0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
+    0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
+    0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
+    0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
+    0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
+    0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
+    0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
+    0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
+    0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
+    0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
+    0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
+    0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
+    0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
+    0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
+    0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
+    0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
+    0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
+    0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
+    0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
+    0x3f88e851},
+   {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
+    0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
+    0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
+    0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
+    0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
+    0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
+    0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
+    0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
+    0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
+    0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
+    0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
+    0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
+    0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
+    0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
+    0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
+    0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
+    0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
+    0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
+    0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
+    0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
+    0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
+    0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
+    0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
+    0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
+    0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
+    0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
+    0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
+    0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
+    0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
+    0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
+    0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
+    0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
+    0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
+    0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
+    0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
+    0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
+    0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
+    0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
+    0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
+    0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
+    0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
+    0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
+    0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
+    0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
+    0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
+    0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
+    0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
+    0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
+    0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
+    0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
+    0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
+    0x3dee8ca6}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0,
+    0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587,
+    0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa,
+    0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09,
+    0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee,
+    0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3,
+    0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3,
+    0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce,
+    0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429,
+    0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda,
+    0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7,
+    0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0,
+    0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd,
+    0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0,
+    0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287,
+    0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a,
+    0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9,
+    0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e,
+    0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3,
+    0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3,
+    0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054,
+    0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49,
+    0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da,
+    0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7,
+    0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20,
+    0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d,
+    0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00,
+    0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347,
+    0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14,
+    0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209,
+    0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e,
+    0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33,
+    0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3,
+    0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194,
+    0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9,
+    0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a,
+    0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd,
+    0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0,
+    0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d,
+    0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460,
+    0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87,
+    0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674,
+    0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509,
+    0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e,
+    0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae,
+    0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3,
+    0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694,
+    0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989,
+    0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da,
+    0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d,
+    0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0,
+    0xa68cee3d},
+   {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19,
+    0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae,
+    0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb,
+    0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a,
+    0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55,
+    0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1,
+    0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c,
+    0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8,
+    0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7,
+    0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936,
+    0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453,
+    0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4,
+    0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941,
+    0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5,
+    0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93,
+    0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17,
+    0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e,
+    0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89,
+    0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec,
+    0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0,
+    0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf,
+    0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b,
+    0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b,
+    0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f,
+    0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0,
+    0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e,
+    0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b,
+    0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc,
+    0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5,
+    0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261,
+    0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637,
+    0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3,
+    0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57,
+    0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0,
+    0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85,
+    0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454,
+    0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b,
+    0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f,
+    0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423,
+    0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7,
+    0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8,
+    0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739,
+    0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c,
+    0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb,
+    0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f,
+    0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b,
+    0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd,
+    0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59,
+    0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070,
+    0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7,
+    0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2,
+    0x51e8883f},
+   {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a,
+    0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276,
+    0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed,
+    0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55,
+    0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b,
+    0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8,
+    0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320,
+    0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413,
+    0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd,
+    0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75,
+    0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee,
+    0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312,
+    0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca,
+    0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9,
+    0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad,
+    0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e,
+    0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504,
+    0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8,
+    0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63,
+    0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353,
+    0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d,
+    0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be,
+    0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae,
+    0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d,
+    0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943,
+    0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7,
+    0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c,
+    0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390,
+    0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a,
+    0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239,
+    0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d,
+    0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e,
+    0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c,
+    0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0,
+    0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b,
+    0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93,
+    0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d,
+    0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e,
+    0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c,
+    0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f,
+    0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1,
+    0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579,
+    0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2,
+    0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e,
+    0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c,
+    0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f,
+    0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b,
+    0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158,
+    0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2,
+    0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e,
+    0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5,
+    0x8ae9531c},
+   {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4,
+    0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd,
+    0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220,
+    0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf,
+    0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495,
+    0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def,
+    0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90,
+    0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea,
+    0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0,
+    0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f,
+    0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2,
+    0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab,
+    0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e,
+    0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754,
+    0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda,
+    0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0,
+    0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c,
+    0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215,
+    0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8,
+    0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910,
+    0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a,
+    0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30,
+    0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658,
+    0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22,
+    0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478,
+    0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2,
+    0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f,
+    0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606,
+    0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba,
+    0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0,
+    0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e,
+    0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034,
+    0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f,
+    0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996,
+    0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b,
+    0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84,
+    0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de,
+    0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4,
+    0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5,
+    0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f,
+    0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5,
+    0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a,
+    0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7,
+    0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce,
+    0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65,
+    0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f,
+    0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91,
+    0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb,
+    0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57,
+    0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e,
+    0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3,
+    0xd739710d}};
+
+#endif
+
+#endif
+
+#if N == 5
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df,
+    0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8,
+    0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef,
+    0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376,
+    0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201,
+    0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399,
+    0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372,
+    0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea,
+    0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d,
+    0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004,
+    0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353,
+    0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334,
+    0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a,
+    0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2,
+    0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a,
+    0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2,
+    0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b,
+    0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c,
+    0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b,
+    0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f,
+    0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338,
+    0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0,
+    0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6,
+    0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e,
+    0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319,
+    0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3,
+    0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4,
+    0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783,
+    0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a,
+    0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492,
+    0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a,
+    0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2,
+    0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496,
+    0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1,
+    0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6,
+    0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f,
+    0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548,
+    0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0,
+    0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741,
+    0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9,
+    0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae,
+    0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437,
+    0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760,
+    0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707,
+    0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433,
+    0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab,
+    0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703,
+    0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b,
+    0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412,
+    0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475,
+    0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722,
+    0xe9947565},
+   {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5,
+    0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22,
+    0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c,
+    0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed,
+    0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d,
+    0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1,
+    0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e,
+    0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32,
+    0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142,
+    0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93,
+    0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d,
+    0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a,
+    0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58,
+    0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14,
+    0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81,
+    0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd,
+    0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab,
+    0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c,
+    0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72,
+    0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f,
+    0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff,
+    0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3,
+    0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30,
+    0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c,
+    0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c,
+    0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558,
+    0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146,
+    0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581,
+    0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7,
+    0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab,
+    0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e,
+    0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272,
+    0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838,
+    0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff,
+    0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1,
+    0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330,
+    0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840,
+    0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c,
+    0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb,
+    0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7,
+    0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7,
+    0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616,
+    0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208,
+    0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf,
+    0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85,
+    0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9,
+    0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c,
+    0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10,
+    0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76,
+    0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1,
+    0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf,
+    0xf7d05006},
+   {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b,
+    0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774,
+    0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58,
+    0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a,
+    0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb,
+    0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952,
+    0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e,
+    0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7,
+    0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746,
+    0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14,
+    0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338,
+    0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907,
+    0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777,
+    0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de,
+    0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064,
+    0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd,
+    0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951,
+    0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e,
+    0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42,
+    0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b,
+    0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a,
+    0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3,
+    0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904,
+    0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad,
+    0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c,
+    0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d,
+    0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861,
+    0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e,
+    0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2,
+    0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b,
+    0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1,
+    0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78,
+    0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f,
+    0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40,
+    0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c,
+    0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e,
+    0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf,
+    0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166,
+    0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d,
+    0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4,
+    0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805,
+    0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157,
+    0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b,
+    0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644,
+    0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43,
+    0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea,
+    0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850,
+    0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9,
+    0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165,
+    0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a,
+    0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676,
+    0xb2075b94},
+   {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf,
+    0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61,
+    0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be,
+    0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd,
+    0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3,
+    0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063,
+    0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105,
+    0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5,
+    0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb,
+    0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8,
+    0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07,
+    0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9,
+    0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5,
+    0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515,
+    0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4,
+    0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014,
+    0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7,
+    0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269,
+    0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6,
+    0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af,
+    0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1,
+    0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111,
+    0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d,
+    0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad,
+    0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3,
+    0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75,
+    0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa,
+    0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74,
+    0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7,
+    0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477,
+    0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6,
+    0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176,
+    0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af,
+    0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71,
+    0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae,
+    0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd,
+    0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3,
+    0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073,
+    0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0,
+    0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400,
+    0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e,
+    0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d,
+    0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2,
+    0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c,
+    0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5,
+    0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505,
+    0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4,
+    0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004,
+    0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7,
+    0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279,
+    0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6,
+    0xba50bcb9},
+   {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897,
+    0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb,
+    0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2,
+    0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2,
+    0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372,
+    0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70,
+    0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92,
+    0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190,
+    0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40,
+    0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430,
+    0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759,
+    0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75,
+    0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2,
+    0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0,
+    0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7,
+    0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5,
+    0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39,
+    0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215,
+    0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c,
+    0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5,
+    0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625,
+    0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27,
+    0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c,
+    0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e,
+    0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee,
+    0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71,
+    0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18,
+    0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134,
+    0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8,
+    0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba,
+    0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd,
+    0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff,
+    0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a,
+    0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6,
+    0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf,
+    0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf,
+    0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f,
+    0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d,
+    0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d,
+    0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f,
+    0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af,
+    0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df,
+    0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6,
+    0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a,
+    0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef,
+    0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed,
+    0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa,
+    0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8,
+    0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624,
+    0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08,
+    0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861,
+    0x808abcf4},
+   {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2,
+    0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd,
+    0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76,
+    0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52,
+    0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e,
+    0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124,
+    0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147,
+    0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d,
+    0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31,
+    0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15,
+    0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae,
+    0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1,
+    0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d,
+    0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307,
+    0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9,
+    0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3,
+    0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084,
+    0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb,
+    0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850,
+    0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2,
+    0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe,
+    0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94,
+    0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261,
+    0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b,
+    0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917,
+    0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53,
+    0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8,
+    0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787,
+    0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0,
+    0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba,
+    0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404,
+    0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e,
+    0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af,
+    0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0,
+    0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b,
+    0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f,
+    0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543,
+    0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129,
+    0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627,
+    0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d,
+    0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51,
+    0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75,
+    0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce,
+    0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1,
+    0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760,
+    0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a,
+    0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4,
+    0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde,
+    0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089,
+    0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6,
+    0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d,
+    0xefdb3f95},
+   {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8,
+    0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7,
+    0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945,
+    0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9,
+    0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652,
+    0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc,
+    0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a,
+    0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4,
+    0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f,
+    0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3,
+    0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51,
+    0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e,
+    0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c,
+    0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362,
+    0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11,
+    0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff,
+    0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7,
+    0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8,
+    0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a,
+    0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690,
+    0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b,
+    0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5,
+    0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05,
+    0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb,
+    0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740,
+    0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f,
+    0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded,
+    0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2,
+    0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa,
+    0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714,
+    0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67,
+    0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89,
+    0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7,
+    0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8,
+    0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a,
+    0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6,
+    0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d,
+    0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3,
+    0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9,
+    0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57,
+    0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc,
+    0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540,
+    0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2,
+    0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd,
+    0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93,
+    0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d,
+    0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e,
+    0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0,
+    0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8,
+    0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7,
+    0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75,
+    0x0e2fbf43},
+   {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc,
+    0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a,
+    0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3,
+    0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7,
+    0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b,
+    0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154,
+    0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3,
+    0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc,
+    0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330,
+    0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264,
+    0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd,
+    0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b,
+    0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a,
+    0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175,
+    0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275,
+    0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a,
+    0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234,
+    0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2,
+    0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b,
+    0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a,
+    0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6,
+    0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189,
+    0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b,
+    0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204,
+    0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8,
+    0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226,
+    0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff,
+    0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219,
+    0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167,
+    0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258,
+    0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158,
+    0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267,
+    0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c,
+    0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da,
+    0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003,
+    0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157,
+    0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b,
+    0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4,
+    0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179,
+    0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246,
+    0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a,
+    0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de,
+    0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107,
+    0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1,
+    0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba,
+    0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285,
+    0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185,
+    0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba,
+    0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4,
+    0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322,
+    0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb,
+    0xf4377108}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000,
+    0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000,
+    0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000,
+    0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000,
+    0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000,
+    0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000,
+    0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000,
+    0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000,
+    0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000,
+    0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000,
+    0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000,
+    0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000,
+    0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000,
+    0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000,
+    0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000,
+    0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000,
+    0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000,
+    0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000,
+    0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000,
+    0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000,
+    0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000,
+    0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000,
+    0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000,
+    0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000,
+    0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000,
+    0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000,
+    0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000,
+    0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000,
+    0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000,
+    0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000,
+    0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000,
+    0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000,
+    0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000,
+    0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000,
+    0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000,
+    0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000,
+    0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000,
+    0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000,
+    0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000,
+    0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000,
+    0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000,
+    0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000,
+    0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000,
+    0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000,
+    0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000,
+    0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000,
+    0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000,
+    0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000,
+    0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000,
+    0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000,
+    0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000,
+    0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000,
+    0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000,
+    0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000,
+    0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000,
+    0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000,
+    0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000,
+    0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000,
+    0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000,
+    0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000,
+    0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000,
+    0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000,
+    0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000,
+    0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000,
+    0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000,
+    0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000,
+    0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000,
+    0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000,
+    0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000,
+    0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000,
+    0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000,
+    0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000,
+    0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000,
+    0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000,
+    0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000,
+    0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000,
+    0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000,
+    0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000,
+    0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000,
+    0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000,
+    0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000,
+    0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000,
+    0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000,
+    0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000,
+    0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000,
+    0x087137f400000000},
+   {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000,
+    0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000,
+    0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000,
+    0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000,
+    0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000,
+    0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000,
+    0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000,
+    0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000,
+    0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000,
+    0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000,
+    0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000,
+    0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000,
+    0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000,
+    0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000,
+    0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000,
+    0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000,
+    0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000,
+    0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000,
+    0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000,
+    0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000,
+    0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000,
+    0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000,
+    0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000,
+    0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000,
+    0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000,
+    0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000,
+    0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000,
+    0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000,
+    0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000,
+    0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000,
+    0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000,
+    0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000,
+    0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000,
+    0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000,
+    0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000,
+    0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000,
+    0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000,
+    0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000,
+    0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000,
+    0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000,
+    0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000,
+    0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000,
+    0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000,
+    0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000,
+    0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000,
+    0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000,
+    0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000,
+    0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000,
+    0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000,
+    0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000,
+    0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000,
+    0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000,
+    0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000,
+    0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000,
+    0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000,
+    0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000,
+    0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000,
+    0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000,
+    0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000,
+    0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000,
+    0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000,
+    0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000,
+    0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000,
+    0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000,
+    0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000,
+    0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000,
+    0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000,
+    0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000,
+    0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000,
+    0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000,
+    0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000,
+    0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000,
+    0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000,
+    0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000,
+    0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000,
+    0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000,
+    0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000,
+    0x1129fad400000000, 0x621116d400000000, 0x544094f000000000,
+    0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000,
+    0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000,
+    0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000,
+    0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000,
+    0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000,
+    0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000,
+    0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000,
+    0x43bf2f0e00000000},
+   {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000,
+    0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000,
+    0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000,
+    0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000,
+    0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000,
+    0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000,
+    0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000,
+    0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000,
+    0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000,
+    0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000,
+    0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000,
+    0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000,
+    0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000,
+    0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000,
+    0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000,
+    0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000,
+    0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000,
+    0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000,
+    0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000,
+    0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000,
+    0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000,
+    0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000,
+    0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000,
+    0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000,
+    0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000,
+    0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000,
+    0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000,
+    0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000,
+    0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000,
+    0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000,
+    0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000,
+    0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000,
+    0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000,
+    0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000,
+    0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000,
+    0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000,
+    0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000,
+    0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000,
+    0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000,
+    0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000,
+    0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000,
+    0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000,
+    0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000,
+    0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000,
+    0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000,
+    0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000,
+    0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000,
+    0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000,
+    0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000,
+    0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000,
+    0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000,
+    0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000,
+    0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000,
+    0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000,
+    0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000,
+    0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000,
+    0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000,
+    0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000,
+    0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000,
+    0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000,
+    0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000,
+    0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000,
+    0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000,
+    0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000,
+    0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000,
+    0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000,
+    0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000,
+    0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000,
+    0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000,
+    0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000,
+    0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000,
+    0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000,
+    0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000,
+    0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000,
+    0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000,
+    0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000,
+    0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000,
+    0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000,
+    0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000,
+    0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000,
+    0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000,
+    0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000,
+    0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000,
+    0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000,
+    0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000,
+    0x953fdbef00000000},
+   {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000,
+    0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000,
+    0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000,
+    0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000,
+    0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000,
+    0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000,
+    0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000,
+    0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000,
+    0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000,
+    0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000,
+    0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000,
+    0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000,
+    0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000,
+    0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000,
+    0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000,
+    0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000,
+    0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000,
+    0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000,
+    0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000,
+    0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000,
+    0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000,
+    0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000,
+    0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000,
+    0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000,
+    0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000,
+    0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000,
+    0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000,
+    0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000,
+    0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000,
+    0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000,
+    0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000,
+    0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000,
+    0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000,
+    0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000,
+    0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000,
+    0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000,
+    0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000,
+    0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000,
+    0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000,
+    0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000,
+    0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000,
+    0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000,
+    0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000,
+    0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000,
+    0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000,
+    0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000,
+    0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000,
+    0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000,
+    0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000,
+    0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000,
+    0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000,
+    0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000,
+    0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000,
+    0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000,
+    0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000,
+    0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000,
+    0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000,
+    0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000,
+    0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000,
+    0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000,
+    0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000,
+    0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000,
+    0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000,
+    0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000,
+    0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000,
+    0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000,
+    0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000,
+    0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000,
+    0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000,
+    0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000,
+    0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000,
+    0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000,
+    0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000,
+    0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000,
+    0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000,
+    0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000,
+    0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000,
+    0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000,
+    0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000,
+    0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000,
+    0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000,
+    0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000,
+    0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000,
+    0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000,
+    0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000,
+    0xf4bc8a8000000000},
+   {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000,
+    0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000,
+    0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000,
+    0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000,
+    0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000,
+    0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000,
+    0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000,
+    0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000,
+    0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000,
+    0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000,
+    0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000,
+    0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000,
+    0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000,
+    0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000,
+    0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000,
+    0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000,
+    0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000,
+    0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000,
+    0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000,
+    0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000,
+    0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000,
+    0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000,
+    0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000,
+    0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000,
+    0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000,
+    0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000,
+    0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000,
+    0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000,
+    0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000,
+    0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000,
+    0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000,
+    0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000,
+    0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000,
+    0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000,
+    0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000,
+    0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000,
+    0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000,
+    0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000,
+    0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000,
+    0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000,
+    0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000,
+    0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000,
+    0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000,
+    0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000,
+    0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000,
+    0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000,
+    0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000,
+    0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000,
+    0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000,
+    0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000,
+    0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000,
+    0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000,
+    0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000,
+    0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000,
+    0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000,
+    0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000,
+    0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000,
+    0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000,
+    0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000,
+    0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000,
+    0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000,
+    0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000,
+    0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000,
+    0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000,
+    0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000,
+    0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000,
+    0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000,
+    0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000,
+    0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000,
+    0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000,
+    0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000,
+    0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000,
+    0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000,
+    0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000,
+    0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000,
+    0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000,
+    0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000,
+    0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000,
+    0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000,
+    0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000,
+    0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000,
+    0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000,
+    0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000,
+    0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000,
+    0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000,
+    0xb9bc50ba00000000},
+   {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000,
+    0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000,
+    0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000,
+    0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000,
+    0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000,
+    0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000,
+    0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000,
+    0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000,
+    0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000,
+    0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000,
+    0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000,
+    0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000,
+    0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000,
+    0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000,
+    0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000,
+    0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000,
+    0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000,
+    0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000,
+    0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000,
+    0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000,
+    0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000,
+    0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000,
+    0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000,
+    0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000,
+    0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000,
+    0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000,
+    0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000,
+    0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000,
+    0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000,
+    0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000,
+    0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000,
+    0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000,
+    0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000,
+    0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000,
+    0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000,
+    0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000,
+    0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000,
+    0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000,
+    0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000,
+    0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000,
+    0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000,
+    0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000,
+    0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000,
+    0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000,
+    0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000,
+    0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000,
+    0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000,
+    0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000,
+    0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000,
+    0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000,
+    0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000,
+    0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000,
+    0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000,
+    0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000,
+    0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000,
+    0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000,
+    0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000,
+    0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000,
+    0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000,
+    0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000,
+    0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000,
+    0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000,
+    0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000,
+    0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000,
+    0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000,
+    0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000,
+    0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000,
+    0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000,
+    0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000,
+    0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000,
+    0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000,
+    0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000,
+    0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000,
+    0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000,
+    0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000,
+    0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000,
+    0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000,
+    0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000,
+    0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000,
+    0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000,
+    0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000,
+    0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000,
+    0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000,
+    0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000,
+    0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000,
+    0x945b07b200000000},
+   {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000,
+    0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000,
+    0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000,
+    0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000,
+    0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000,
+    0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000,
+    0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000,
+    0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000,
+    0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000,
+    0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000,
+    0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000,
+    0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000,
+    0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000,
+    0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000,
+    0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000,
+    0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000,
+    0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000,
+    0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000,
+    0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000,
+    0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000,
+    0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000,
+    0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000,
+    0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000,
+    0x149f066100000000, 0xef839db200000000, 0x468814fc00000000,
+    0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000,
+    0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000,
+    0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000,
+    0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000,
+    0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000,
+    0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000,
+    0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000,
+    0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000,
+    0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000,
+    0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000,
+    0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000,
+    0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000,
+    0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000,
+    0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000,
+    0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000,
+    0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000,
+    0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000,
+    0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000,
+    0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000,
+    0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000,
+    0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000,
+    0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000,
+    0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000,
+    0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000,
+    0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000,
+    0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000,
+    0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000,
+    0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000,
+    0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000,
+    0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000,
+    0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000,
+    0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000,
+    0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000,
+    0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000,
+    0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000,
+    0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000,
+    0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000,
+    0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000,
+    0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000,
+    0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000,
+    0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000,
+    0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000,
+    0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000,
+    0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000,
+    0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000,
+    0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000,
+    0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000,
+    0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000,
+    0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000,
+    0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000,
+    0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000,
+    0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000,
+    0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000,
+    0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000,
+    0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000,
+    0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000,
+    0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000,
+    0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000,
+    0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000,
+    0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000,
+    0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000,
+    0x0650d0f700000000},
+   {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000,
+    0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000,
+    0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000,
+    0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000,
+    0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000,
+    0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000,
+    0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000,
+    0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000,
+    0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000,
+    0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000,
+    0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000,
+    0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000,
+    0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000,
+    0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000,
+    0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000,
+    0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000,
+    0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000,
+    0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000,
+    0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000,
+    0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000,
+    0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000,
+    0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000,
+    0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000,
+    0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000,
+    0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000,
+    0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000,
+    0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000,
+    0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000,
+    0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000,
+    0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000,
+    0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000,
+    0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000,
+    0xc702c15700000000, 0x809085f800000000, 0x082039d200000000,
+    0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000,
+    0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000,
+    0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000,
+    0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000,
+    0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000,
+    0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000,
+    0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000,
+    0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000,
+    0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000,
+    0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000,
+    0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000,
+    0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000,
+    0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000,
+    0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000,
+    0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000,
+    0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000,
+    0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000,
+    0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000,
+    0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000,
+    0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000,
+    0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000,
+    0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000,
+    0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000,
+    0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000,
+    0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000,
+    0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000,
+    0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000,
+    0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000,
+    0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000,
+    0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000,
+    0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000,
+    0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000,
+    0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000,
+    0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000,
+    0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000,
+    0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000,
+    0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000,
+    0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000,
+    0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000,
+    0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000,
+    0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000,
+    0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000,
+    0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000,
+    0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000,
+    0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000,
+    0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000,
+    0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000,
+    0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000,
+    0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000,
+    0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000,
+    0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000,
+    0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000,
+    0x657594e900000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
+    0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
+    0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
+    0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
+    0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
+    0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
+    0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
+    0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
+    0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
+    0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
+    0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
+    0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
+    0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
+    0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
+    0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
+    0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
+    0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
+    0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
+    0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
+    0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
+    0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
+    0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
+    0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
+    0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
+    0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
+    0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
+    0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
+    0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
+    0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
+    0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
+    0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
+    0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
+    0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
+    0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
+    0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
+    0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
+    0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
+    0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
+    0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
+    0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
+    0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
+    0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
+    0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
+    0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
+    0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
+    0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
+    0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
+    0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
+    0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
+    0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
+    0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
+    0xd8ac6b35},
+   {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
+    0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
+    0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
+    0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
+    0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
+    0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
+    0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
+    0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
+    0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
+    0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
+    0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
+    0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
+    0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
+    0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
+    0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
+    0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
+    0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
+    0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
+    0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
+    0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
+    0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
+    0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
+    0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
+    0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
+    0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
+    0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
+    0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
+    0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
+    0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
+    0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
+    0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
+    0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
+    0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
+    0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
+    0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
+    0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
+    0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
+    0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
+    0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
+    0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
+    0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
+    0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
+    0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
+    0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
+    0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
+    0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
+    0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
+    0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
+    0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
+    0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
+    0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
+    0xa140efa8},
+   {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
+    0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
+    0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
+    0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
+    0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
+    0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
+    0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
+    0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
+    0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
+    0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
+    0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
+    0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
+    0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
+    0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
+    0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
+    0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
+    0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
+    0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
+    0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
+    0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
+    0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
+    0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
+    0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
+    0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
+    0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
+    0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
+    0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
+    0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
+    0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
+    0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
+    0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
+    0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
+    0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
+    0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
+    0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
+    0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
+    0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
+    0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
+    0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
+    0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
+    0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
+    0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
+    0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
+    0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
+    0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
+    0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
+    0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
+    0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
+    0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
+    0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
+    0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
+    0x917cd6a1},
+   {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
+    0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
+    0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
+    0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
+    0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
+    0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
+    0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
+    0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
+    0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
+    0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
+    0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
+    0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
+    0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
+    0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
+    0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
+    0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
+    0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
+    0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
+    0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
+    0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
+    0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
+    0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
+    0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
+    0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
+    0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
+    0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
+    0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
+    0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
+    0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
+    0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
+    0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
+    0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
+    0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
+    0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
+    0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
+    0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
+    0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
+    0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
+    0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
+    0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
+    0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
+    0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
+    0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
+    0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
+    0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
+    0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
+    0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
+    0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
+    0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
+    0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
+    0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
+    0x18ba364e}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873,
+    0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661,
+    0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441,
+    0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44,
+    0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1,
+    0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05,
+    0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa,
+    0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e,
+    0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb,
+    0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be,
+    0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e,
+    0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c,
+    0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d,
+    0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9,
+    0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f,
+    0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b,
+    0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39,
+    0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b,
+    0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b,
+    0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20,
+    0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595,
+    0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61,
+    0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0,
+    0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644,
+    0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1,
+    0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d,
+    0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d,
+    0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f,
+    0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad,
+    0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359,
+    0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f,
+    0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b,
+    0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7,
+    0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5,
+    0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5,
+    0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0,
+    0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65,
+    0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091,
+    0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633,
+    0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7,
+    0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272,
+    0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77,
+    0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57,
+    0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145,
+    0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9,
+    0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d,
+    0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb,
+    0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f,
+    0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad,
+    0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf,
+    0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f,
+    0x4e36ba18},
+   {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b,
+    0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8,
+    0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19,
+    0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4,
+    0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239,
+    0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd,
+    0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258,
+    0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc,
+    0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41,
+    0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c,
+    0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d,
+    0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e,
+    0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba,
+    0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e,
+    0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8,
+    0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c,
+    0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f,
+    0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c,
+    0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d,
+    0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d,
+    0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0,
+    0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014,
+    0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc,
+    0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628,
+    0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5,
+    0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941,
+    0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0,
+    0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53,
+    0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880,
+    0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264,
+    0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92,
+    0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776,
+    0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8,
+    0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b,
+    0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea,
+    0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837,
+    0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca,
+    0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e,
+    0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211,
+    0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5,
+    0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08,
+    0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5,
+    0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934,
+    0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7,
+    0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049,
+    0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad,
+    0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b,
+    0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf,
+    0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c,
+    0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f,
+    0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e,
+    0xa1d67c91},
+   {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9,
+    0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de,
+    0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94,
+    0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0,
+    0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a,
+    0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924,
+    0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052,
+    0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c,
+    0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6,
+    0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2,
+    0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8,
+    0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f,
+    0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d,
+    0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273,
+    0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30,
+    0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e,
+    0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7,
+    0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980,
+    0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca,
+    0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8,
+    0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62,
+    0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c,
+    0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c,
+    0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032,
+    0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798,
+    0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d,
+    0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07,
+    0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630,
+    0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389,
+    0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7,
+    0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4,
+    0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca,
+    0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55,
+    0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662,
+    0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828,
+    0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c,
+    0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6,
+    0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98,
+    0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3,
+    0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d,
+    0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037,
+    0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913,
+    0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759,
+    0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e,
+    0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1,
+    0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf,
+    0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c,
+    0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2,
+    0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b,
+    0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c,
+    0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276,
+    0xa8ef40a1},
+   {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e,
+    0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8,
+    0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819,
+    0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f,
+    0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d,
+    0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756,
+    0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0,
+    0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb,
+    0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9,
+    0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f,
+    0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e,
+    0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8,
+    0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835,
+    0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e,
+    0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62,
+    0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749,
+    0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b,
+    0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d,
+    0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc,
+    0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80,
+    0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2,
+    0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599,
+    0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05,
+    0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e,
+    0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c,
+    0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e,
+    0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef,
+    0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359,
+    0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b,
+    0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0,
+    0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc,
+    0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7,
+    0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f,
+    0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189,
+    0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568,
+    0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e,
+    0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c,
+    0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27,
+    0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794,
+    0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf,
+    0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d,
+    0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db,
+    0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a,
+    0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c,
+    0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544,
+    0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f,
+    0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013,
+    0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38,
+    0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea,
+    0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c,
+    0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd,
+    0x356bacd8}};
+
+#endif
+
+#endif
+
+#if N == 6
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370,
+    0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d,
+    0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69,
+    0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426,
+    0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3,
+    0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f,
+    0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c,
+    0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490,
+    0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155,
+    0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a,
+    0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e,
+    0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603,
+    0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349,
+    0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5,
+    0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50,
+    0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc,
+    0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b,
+    0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76,
+    0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862,
+    0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9,
+    0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c,
+    0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0,
+    0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937,
+    0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b,
+    0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e,
+    0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e,
+    0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a,
+    0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357,
+    0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0,
+    0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c,
+    0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9,
+    0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165,
+    0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766,
+    0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b,
+    0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f,
+    0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030,
+    0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5,
+    0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59,
+    0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63,
+    0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf,
+    0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a,
+    0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845,
+    0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51,
+    0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c,
+    0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f,
+    0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3,
+    0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46,
+    0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea,
+    0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d,
+    0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60,
+    0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74,
+    0x8568a0a8},
+   {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5,
+    0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf,
+    0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5,
+    0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba,
+    0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf,
+    0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f,
+    0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0,
+    0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450,
+    0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55,
+    0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a,
+    0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620,
+    0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a,
+    0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454,
+    0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4,
+    0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534,
+    0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584,
+    0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694,
+    0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e,
+    0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4,
+    0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1,
+    0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4,
+    0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164,
+    0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1,
+    0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911,
+    0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314,
+    0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c,
+    0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6,
+    0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec,
+    0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc,
+    0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c,
+    0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c,
+    0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c,
+    0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716,
+    0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c,
+    0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676,
+    0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879,
+    0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c,
+    0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc,
+    0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77,
+    0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7,
+    0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2,
+    0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd,
+    0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7,
+    0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad,
+    0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897,
+    0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827,
+    0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7,
+    0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947,
+    0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57,
+    0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d,
+    0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37,
+    0x0d907052},
+   {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d,
+    0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89,
+    0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31,
+    0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81,
+    0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e,
+    0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0,
+    0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f,
+    0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291,
+    0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e,
+    0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e,
+    0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936,
+    0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2,
+    0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13,
+    0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d,
+    0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f,
+    0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1,
+    0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a,
+    0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae,
+    0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516,
+    0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f,
+    0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20,
+    0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe,
+    0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28,
+    0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6,
+    0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419,
+    0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5,
+    0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d,
+    0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889,
+    0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412,
+    0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c,
+    0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e,
+    0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0,
+    0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02,
+    0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986,
+    0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e,
+    0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e,
+    0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221,
+    0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf,
+    0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913,
+    0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d,
+    0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622,
+    0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592,
+    0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a,
+    0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae,
+    0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c,
+    0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82,
+    0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20,
+    0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe,
+    0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025,
+    0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1,
+    0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719,
+    0xfd1a6c8a},
+   {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3,
+    0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb,
+    0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d,
+    0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb,
+    0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9,
+    0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156,
+    0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045,
+    0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa,
+    0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8,
+    0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e,
+    0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8,
+    0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0,
+    0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38,
+    0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87,
+    0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46,
+    0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9,
+    0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585,
+    0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d,
+    0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb,
+    0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531,
+    0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03,
+    0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc,
+    0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33,
+    0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c,
+    0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be,
+    0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d,
+    0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b,
+    0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303,
+    0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f,
+    0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0,
+    0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801,
+    0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe,
+    0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e,
+    0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346,
+    0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620,
+    0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776,
+    0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844,
+    0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb,
+    0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0,
+    0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f,
+    0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d,
+    0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b,
+    0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d,
+    0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75,
+    0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795,
+    0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a,
+    0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb,
+    0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354,
+    0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28,
+    0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30,
+    0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856,
+    0x7895f01a},
+   {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188,
+    0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33,
+    0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d,
+    0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445,
+    0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2,
+    0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058,
+    0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43,
+    0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9,
+    0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e,
+    0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06,
+    0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228,
+    0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93,
+    0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e,
+    0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4,
+    0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b,
+    0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371,
+    0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265,
+    0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede,
+    0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0,
+    0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f,
+    0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8,
+    0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32,
+    0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae,
+    0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544,
+    0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3,
+    0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f,
+    0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911,
+    0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa,
+    0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be,
+    0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54,
+    0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b,
+    0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1,
+    0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652,
+    0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9,
+    0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7,
+    0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f,
+    0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68,
+    0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782,
+    0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797,
+    0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d,
+    0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a,
+    0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2,
+    0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc,
+    0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647,
+    0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4,
+    0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e,
+    0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41,
+    0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab,
+    0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf,
+    0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904,
+    0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a,
+    0x9239b848},
+   {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad,
+    0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0,
+    0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40,
+    0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b,
+    0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d,
+    0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b,
+    0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb,
+    0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d,
+    0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b,
+    0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0,
+    0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840,
+    0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d,
+    0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b,
+    0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d,
+    0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6,
+    0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0,
+    0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580,
+    0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd,
+    0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d,
+    0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b,
+    0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d,
+    0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b,
+    0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6,
+    0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0,
+    0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6,
+    0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c,
+    0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c,
+    0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461,
+    0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841,
+    0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317,
+    0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac,
+    0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa,
+    0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7,
+    0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba,
+    0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a,
+    0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161,
+    0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777,
+    0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21,
+    0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a,
+    0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc,
+    0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da,
+    0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1,
+    0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01,
+    0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c,
+    0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241,
+    0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917,
+    0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac,
+    0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa,
+    0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da,
+    0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397,
+    0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537,
+    0xeb36d3cc},
+   {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b,
+    0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059,
+    0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251,
+    0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d,
+    0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9,
+    0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c,
+    0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41,
+    0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4,
+    0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10,
+    0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c,
+    0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54,
+    0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476,
+    0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8,
+    0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d,
+    0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92,
+    0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307,
+    0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad,
+    0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f,
+    0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87,
+    0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17,
+    0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3,
+    0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46,
+    0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197,
+    0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02,
+    0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6,
+    0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e,
+    0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96,
+    0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4,
+    0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e,
+    0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b,
+    0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934,
+    0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1,
+    0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7,
+    0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5,
+    0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd,
+    0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1,
+    0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475,
+    0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0,
+    0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155,
+    0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0,
+    0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304,
+    0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348,
+    0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140,
+    0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862,
+    0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14,
+    0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181,
+    0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e,
+    0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab,
+    0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01,
+    0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523,
+    0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b,
+    0x38e5f3c5},
+   {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06,
+    0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad,
+    0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509,
+    0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba,
+    0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414,
+    0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3,
+    0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733,
+    0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994,
+    0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a,
+    0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889,
+    0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d,
+    0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386,
+    0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621,
+    0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886,
+    0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e,
+    0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389,
+    0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f,
+    0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294,
+    0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30,
+    0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3,
+    0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d,
+    0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba,
+    0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a,
+    0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad,
+    0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03,
+    0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2,
+    0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306,
+    0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad,
+    0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b,
+    0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc,
+    0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914,
+    0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3,
+    0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435,
+    0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e,
+    0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a,
+    0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589,
+    0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27,
+    0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080,
+    0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21,
+    0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586,
+    0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28,
+    0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b,
+    0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f,
+    0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94,
+    0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12,
+    0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5,
+    0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d,
+    0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba,
+    0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c,
+    0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7,
+    0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103,
+    0x3d3101a2}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000,
+    0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000,
+    0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000,
+    0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000,
+    0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000,
+    0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000,
+    0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000,
+    0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000,
+    0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000,
+    0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000,
+    0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000,
+    0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000,
+    0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000,
+    0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000,
+    0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000,
+    0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000,
+    0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000,
+    0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000,
+    0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000,
+    0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000,
+    0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000,
+    0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000,
+    0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000,
+    0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000,
+    0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000,
+    0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000,
+    0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000,
+    0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000,
+    0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000,
+    0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000,
+    0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000,
+    0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000,
+    0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000,
+    0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000,
+    0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000,
+    0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000,
+    0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000,
+    0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000,
+    0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000,
+    0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000,
+    0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000,
+    0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000,
+    0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000,
+    0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000,
+    0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000,
+    0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000,
+    0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000,
+    0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000,
+    0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000,
+    0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000,
+    0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000,
+    0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000,
+    0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000,
+    0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000,
+    0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000,
+    0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000,
+    0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000,
+    0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000,
+    0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000,
+    0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000,
+    0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000,
+    0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000,
+    0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000,
+    0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000,
+    0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000,
+    0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000,
+    0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000,
+    0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000,
+    0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000,
+    0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000,
+    0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000,
+    0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000,
+    0x3688267d00000000, 0x9718319500000000, 0x35af787600000000,
+    0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000,
+    0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000,
+    0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000,
+    0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000,
+    0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000,
+    0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000,
+    0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000,
+    0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000,
+    0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000,
+    0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000,
+    0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000,
+    0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000,
+    0xa201313d00000000},
+   {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000,
+    0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000,
+    0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000,
+    0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000,
+    0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000,
+    0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000,
+    0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000,
+    0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000,
+    0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000,
+    0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000,
+    0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000,
+    0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000,
+    0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000,
+    0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000,
+    0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000,
+    0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000,
+    0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000,
+    0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000,
+    0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000,
+    0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000,
+    0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000,
+    0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000,
+    0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000,
+    0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000,
+    0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000,
+    0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000,
+    0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000,
+    0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000,
+    0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000,
+    0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000,
+    0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000,
+    0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000,
+    0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000,
+    0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000,
+    0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000,
+    0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000,
+    0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000,
+    0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000,
+    0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000,
+    0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000,
+    0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000,
+    0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000,
+    0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000,
+    0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000,
+    0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000,
+    0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000,
+    0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000,
+    0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000,
+    0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000,
+    0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000,
+    0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000,
+    0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000,
+    0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000,
+    0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000,
+    0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000,
+    0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000,
+    0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000,
+    0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000,
+    0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000,
+    0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000,
+    0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000,
+    0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000,
+    0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000,
+    0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000,
+    0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000,
+    0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000,
+    0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000,
+    0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000,
+    0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000,
+    0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000,
+    0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000,
+    0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000,
+    0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000,
+    0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000,
+    0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000,
+    0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000,
+    0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000,
+    0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000,
+    0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000,
+    0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000,
+    0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000,
+    0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000,
+    0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000,
+    0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000,
+    0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000,
+    0xc5f3e53800000000},
+   {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000,
+    0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000,
+    0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000,
+    0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000,
+    0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000,
+    0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000,
+    0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000,
+    0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000,
+    0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000,
+    0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000,
+    0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000,
+    0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000,
+    0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000,
+    0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000,
+    0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000,
+    0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000,
+    0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000,
+    0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000,
+    0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000,
+    0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000,
+    0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000,
+    0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000,
+    0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000,
+    0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000,
+    0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000,
+    0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000,
+    0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000,
+    0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000,
+    0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000,
+    0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000,
+    0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000,
+    0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000,
+    0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000,
+    0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000,
+    0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000,
+    0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000,
+    0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000,
+    0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000,
+    0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000,
+    0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000,
+    0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000,
+    0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000,
+    0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000,
+    0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000,
+    0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000,
+    0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000,
+    0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000,
+    0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000,
+    0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000,
+    0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000,
+    0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000,
+    0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000,
+    0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000,
+    0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000,
+    0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000,
+    0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000,
+    0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000,
+    0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000,
+    0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000,
+    0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000,
+    0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000,
+    0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000,
+    0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000,
+    0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000,
+    0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000,
+    0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000,
+    0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000,
+    0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000,
+    0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000,
+    0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000,
+    0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000,
+    0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000,
+    0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000,
+    0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000,
+    0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000,
+    0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000,
+    0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000,
+    0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000,
+    0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000,
+    0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000,
+    0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000,
+    0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000,
+    0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000,
+    0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000,
+    0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000,
+    0xccd336eb00000000},
+   {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000,
+    0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000,
+    0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000,
+    0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000,
+    0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000,
+    0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000,
+    0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000,
+    0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000,
+    0xb249204500000000, 0xd071086f00000000, 0x7639701100000000,
+    0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000,
+    0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000,
+    0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000,
+    0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000,
+    0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000,
+    0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000,
+    0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000,
+    0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000,
+    0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000,
+    0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000,
+    0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000,
+    0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000,
+    0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000,
+    0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000,
+    0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000,
+    0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000,
+    0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000,
+    0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000,
+    0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000,
+    0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000,
+    0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000,
+    0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000,
+    0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000,
+    0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000,
+    0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000,
+    0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000,
+    0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000,
+    0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000,
+    0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000,
+    0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000,
+    0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000,
+    0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000,
+    0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000,
+    0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000,
+    0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000,
+    0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000,
+    0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000,
+    0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000,
+    0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000,
+    0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000,
+    0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000,
+    0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000,
+    0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000,
+    0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000,
+    0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000,
+    0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000,
+    0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000,
+    0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000,
+    0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000,
+    0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000,
+    0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000,
+    0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000,
+    0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000,
+    0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000,
+    0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000,
+    0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000,
+    0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000,
+    0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000,
+    0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000,
+    0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000,
+    0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000,
+    0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000,
+    0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000,
+    0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000,
+    0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000,
+    0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000,
+    0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000,
+    0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000,
+    0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000,
+    0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000,
+    0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000,
+    0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000,
+    0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000,
+    0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000,
+    0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000,
+    0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000,
+    0x48b8399200000000},
+   {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000,
+    0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000,
+    0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000,
+    0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000,
+    0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000,
+    0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000,
+    0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000,
+    0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000,
+    0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000,
+    0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000,
+    0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000,
+    0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000,
+    0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000,
+    0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000,
+    0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000,
+    0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000,
+    0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000,
+    0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000,
+    0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000,
+    0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000,
+    0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000,
+    0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000,
+    0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000,
+    0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000,
+    0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000,
+    0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000,
+    0xb521428400000000, 0xf909d42700000000, 0x762efede00000000,
+    0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000,
+    0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000,
+    0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000,
+    0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000,
+    0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000,
+    0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000,
+    0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000,
+    0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000,
+    0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000,
+    0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000,
+    0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000,
+    0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000,
+    0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000,
+    0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000,
+    0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000,
+    0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000,
+    0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000,
+    0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000,
+    0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000,
+    0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000,
+    0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000,
+    0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000,
+    0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000,
+    0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000,
+    0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000,
+    0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000,
+    0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000,
+    0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000,
+    0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000,
+    0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000,
+    0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000,
+    0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000,
+    0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000,
+    0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000,
+    0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000,
+    0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000,
+    0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000,
+    0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000,
+    0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000,
+    0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000,
+    0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000,
+    0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000,
+    0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000,
+    0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000,
+    0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000,
+    0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000,
+    0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000,
+    0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000,
+    0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000,
+    0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000,
+    0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000,
+    0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000,
+    0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000,
+    0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000,
+    0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000,
+    0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000,
+    0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000,
+    0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000,
+    0x1af0957800000000},
+   {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000,
+    0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000,
+    0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000,
+    0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000,
+    0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000,
+    0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000,
+    0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000,
+    0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000,
+    0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000,
+    0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000,
+    0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000,
+    0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000,
+    0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000,
+    0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000,
+    0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000,
+    0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000,
+    0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000,
+    0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000,
+    0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000,
+    0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000,
+    0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000,
+    0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000,
+    0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000,
+    0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000,
+    0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000,
+    0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000,
+    0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000,
+    0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000,
+    0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000,
+    0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000,
+    0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000,
+    0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000,
+    0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000,
+    0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000,
+    0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000,
+    0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000,
+    0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000,
+    0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000,
+    0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000,
+    0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000,
+    0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000,
+    0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000,
+    0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000,
+    0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000,
+    0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000,
+    0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000,
+    0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000,
+    0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000,
+    0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000,
+    0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000,
+    0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000,
+    0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000,
+    0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000,
+    0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000,
+    0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000,
+    0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000,
+    0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000,
+    0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000,
+    0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000,
+    0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000,
+    0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000,
+    0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000,
+    0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000,
+    0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000,
+    0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000,
+    0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000,
+    0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000,
+    0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000,
+    0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000,
+    0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000,
+    0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000,
+    0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000,
+    0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000,
+    0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000,
+    0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000,
+    0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000,
+    0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000,
+    0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000,
+    0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000,
+    0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000,
+    0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000,
+    0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000,
+    0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000,
+    0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000,
+    0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000,
+    0x8a6c1afd00000000},
+   {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000,
+    0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000,
+    0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000,
+    0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000,
+    0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000,
+    0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000,
+    0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000,
+    0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000,
+    0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000,
+    0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000,
+    0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000,
+    0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000,
+    0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000,
+    0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000,
+    0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000,
+    0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000,
+    0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000,
+    0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000,
+    0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000,
+    0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000,
+    0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000,
+    0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000,
+    0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000,
+    0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000,
+    0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000,
+    0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000,
+    0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000,
+    0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000,
+    0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000,
+    0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000,
+    0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000,
+    0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000,
+    0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000,
+    0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000,
+    0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000,
+    0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000,
+    0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000,
+    0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000,
+    0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000,
+    0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000,
+    0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000,
+    0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000,
+    0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000,
+    0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000,
+    0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000,
+    0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000,
+    0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000,
+    0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000,
+    0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000,
+    0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000,
+    0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000,
+    0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000,
+    0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000,
+    0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000,
+    0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000,
+    0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000,
+    0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000,
+    0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000,
+    0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000,
+    0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000,
+    0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000,
+    0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000,
+    0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000,
+    0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000,
+    0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000,
+    0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000,
+    0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000,
+    0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000,
+    0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000,
+    0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000,
+    0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000,
+    0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000,
+    0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000,
+    0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000,
+    0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000,
+    0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000,
+    0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000,
+    0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000,
+    0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000,
+    0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000,
+    0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000,
+    0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000,
+    0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000,
+    0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000,
+    0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000,
+    0x5270900d00000000},
+   {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000,
+    0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000,
+    0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000,
+    0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000,
+    0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000,
+    0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000,
+    0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000,
+    0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000,
+    0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000,
+    0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000,
+    0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000,
+    0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000,
+    0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000,
+    0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000,
+    0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000,
+    0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000,
+    0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000,
+    0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000,
+    0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000,
+    0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000,
+    0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000,
+    0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000,
+    0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000,
+    0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000,
+    0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000,
+    0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000,
+    0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000,
+    0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000,
+    0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000,
+    0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000,
+    0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000,
+    0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000,
+    0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000,
+    0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000,
+    0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000,
+    0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000,
+    0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000,
+    0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000,
+    0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000,
+    0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000,
+    0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000,
+    0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000,
+    0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000,
+    0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000,
+    0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000,
+    0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000,
+    0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000,
+    0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000,
+    0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000,
+    0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000,
+    0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000,
+    0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000,
+    0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000,
+    0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000,
+    0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000,
+    0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000,
+    0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000,
+    0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000,
+    0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000,
+    0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000,
+    0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000,
+    0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000,
+    0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000,
+    0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000,
+    0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000,
+    0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000,
+    0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000,
+    0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000,
+    0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000,
+    0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000,
+    0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000,
+    0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000,
+    0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000,
+    0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000,
+    0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000,
+    0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000,
+    0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000,
+    0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000,
+    0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000,
+    0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000,
+    0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000,
+    0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000,
+    0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000,
+    0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000,
+    0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000,
+    0xa8a0688500000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
+    0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
+    0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
+    0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
+    0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
+    0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
+    0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
+    0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
+    0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
+    0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
+    0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
+    0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
+    0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
+    0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
+    0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
+    0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
+    0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
+    0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
+    0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
+    0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
+    0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
+    0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
+    0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
+    0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
+    0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
+    0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
+    0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
+    0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
+    0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
+    0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
+    0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
+    0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
+    0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
+    0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
+    0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
+    0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
+    0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
+    0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
+    0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
+    0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
+    0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
+    0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
+    0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
+    0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
+    0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
+    0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
+    0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
+    0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
+    0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
+    0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
+    0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
+    0x09cd8551},
+   {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
+    0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
+    0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
+    0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
+    0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
+    0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
+    0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
+    0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
+    0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
+    0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
+    0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
+    0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
+    0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
+    0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
+    0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
+    0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
+    0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
+    0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
+    0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
+    0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
+    0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
+    0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
+    0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
+    0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
+    0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
+    0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
+    0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
+    0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
+    0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
+    0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
+    0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
+    0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
+    0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
+    0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
+    0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
+    0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
+    0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
+    0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
+    0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
+    0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
+    0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
+    0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
+    0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
+    0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
+    0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
+    0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
+    0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
+    0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
+    0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
+    0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
+    0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
+    0x7bc97a0c},
+   {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
+    0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
+    0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
+    0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
+    0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
+    0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
+    0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
+    0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
+    0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
+    0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
+    0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
+    0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
+    0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
+    0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
+    0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
+    0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
+    0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
+    0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
+    0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
+    0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
+    0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
+    0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
+    0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
+    0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
+    0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
+    0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
+    0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
+    0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
+    0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
+    0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
+    0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
+    0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
+    0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
+    0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
+    0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
+    0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
+    0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
+    0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
+    0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
+    0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
+    0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
+    0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
+    0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
+    0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
+    0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
+    0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
+    0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
+    0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
+    0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
+    0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
+    0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
+    0x7851a2ca},
+   {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
+    0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
+    0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
+    0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
+    0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
+    0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
+    0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
+    0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
+    0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
+    0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
+    0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
+    0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
+    0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
+    0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
+    0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
+    0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
+    0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
+    0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
+    0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
+    0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
+    0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
+    0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
+    0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
+    0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
+    0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
+    0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
+    0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
+    0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
+    0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
+    0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
+    0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
+    0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
+    0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
+    0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
+    0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
+    0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
+    0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
+    0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
+    0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
+    0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
+    0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
+    0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
+    0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
+    0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
+    0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
+    0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
+    0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
+    0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
+    0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
+    0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
+    0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
+    0x566b6848}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912,
+    0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba,
+    0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3,
+    0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30,
+    0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e,
+    0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3,
+    0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73,
+    0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe,
+    0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0,
+    0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643,
+    0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a,
+    0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082,
+    0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4,
+    0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279,
+    0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735,
+    0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8,
+    0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad,
+    0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05,
+    0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c,
+    0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718,
+    0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46,
+    0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb,
+    0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc,
+    0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41,
+    0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f,
+    0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad,
+    0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4,
+    0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c,
+    0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779,
+    0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4,
+    0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8,
+    0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235,
+    0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7,
+    0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f,
+    0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476,
+    0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195,
+    0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb,
+    0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46,
+    0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622,
+    0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af,
+    0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1,
+    0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12,
+    0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b,
+    0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3,
+    0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51,
+    0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc,
+    0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90,
+    0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d,
+    0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708,
+    0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0,
+    0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9,
+    0x48686b56},
+   {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c,
+    0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae,
+    0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb,
+    0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90,
+    0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410,
+    0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b,
+    0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6,
+    0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed,
+    0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d,
+    0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036,
+    0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953,
+    0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1,
+    0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca,
+    0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781,
+    0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d,
+    0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416,
+    0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f,
+    0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd,
+    0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8,
+    0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b,
+    0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb,
+    0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0,
+    0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5,
+    0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e,
+    0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e,
+    0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558,
+    0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d,
+    0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf,
+    0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6,
+    0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad,
+    0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971,
+    0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a,
+    0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b,
+    0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969,
+    0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c,
+    0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57,
+    0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7,
+    0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c,
+    0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab,
+    0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0,
+    0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160,
+    0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b,
+    0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e,
+    0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac,
+    0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d,
+    0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546,
+    0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a,
+    0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1,
+    0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8,
+    0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a,
+    0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f,
+    0xcaa25178},
+   {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00,
+    0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b,
+    0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed,
+    0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777,
+    0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01,
+    0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a,
+    0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef,
+    0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74,
+    0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002,
+    0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498,
+    0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee,
+    0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75,
+    0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05,
+    0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e,
+    0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8,
+    0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73,
+    0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404,
+    0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f,
+    0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9,
+    0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71,
+    0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607,
+    0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c,
+    0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb,
+    0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470,
+    0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806,
+    0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790,
+    0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6,
+    0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d,
+    0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a,
+    0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991,
+    0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7,
+    0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c,
+    0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09,
+    0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92,
+    0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4,
+    0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e,
+    0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08,
+    0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593,
+    0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3,
+    0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778,
+    0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e,
+    0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94,
+    0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2,
+    0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079,
+    0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c,
+    0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497,
+    0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1,
+    0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a,
+    0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d,
+    0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396,
+    0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0,
+    0x0c7ac97b},
+   {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669,
+    0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853,
+    0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062,
+    0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527,
+    0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad,
+    0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545,
+    0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27,
+    0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf,
+    0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45,
+    0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800,
+    0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031,
+    0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b,
+    0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26,
+    0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce,
+    0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d,
+    0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5,
+    0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130,
+    0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a,
+    0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b,
+    0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480,
+    0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a,
+    0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2,
+    0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e,
+    0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996,
+    0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c,
+    0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc,
+    0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd,
+    0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7,
+    0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232,
+    0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da,
+    0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439,
+    0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1,
+    0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da,
+    0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0,
+    0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1,
+    0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94,
+    0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e,
+    0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6,
+    0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2,
+    0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a,
+    0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0,
+    0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95,
+    0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4,
+    0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e,
+    0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395,
+    0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d,
+    0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e,
+    0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676,
+    0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83,
+    0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9,
+    0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888,
+    0x5185cd09}};
+
+#endif
+
+#endif
+
+#endif
+
+local const z_crc_t FAR x2n_table[] = {
+    0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000,
+    0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467,
+    0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0,
+    0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169,
+    0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37,
+    0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a,
+    0xc40ba6d0, 0xc4e22c3c};
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/ftgzip.c b/qtbase/src/3rdparty/freetype/src/gzip/ftgzip.c
index de7d0fdd5b..34bbe4dafa 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/ftgzip.c
+++ b/qtbase/src/3rdparty/freetype/src/gzip/ftgzip.c
@@ -8,7 +8,7 @@
  * parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -69,10 +69,21 @@
   /*                                                                   */
   /* so that configuration with `FT_CONFIG_OPTION_SYSTEM_ZLIB' might   */
   /* include the wrong `zconf.h' file, leading to errors.              */
-#include "zlib.h"
 
-#undef  SLOW
-#define SLOW  1  /* we can't use asm-optimized sources here! */
+  /* `HAVE_HIDDEN` should be defined if                                 */
+  /*                                                                    */
+  /*   __attribute__((visibility("hidden")))                            */
+  /*                                                                    */
+  /* is supported by the compiler, which prevents internal symbols from */
+  /* being exported by the library.                                     */
+#if defined( __GNUC__ ) ||  defined( __clang__ )
+#define HAVE_HIDDEN  1
+#define ZEXPORT
+#define ZEXTERN      static
+#endif
+
+#define Z_SOLO      1
+#define Z_FREETYPE  1
 
 #if defined( _MSC_VER )      /* Visual C++ (and Intel C++)   */
   /* We disable the warning `conversion from XXX to YYY,     */
@@ -83,24 +94,23 @@
 #pragma warning( disable : 4244 )
 #endif /* _MSC_VER */
 
-  /* Urgh.  `inflate_mask' must not be declared twice -- C++ doesn't like
-     this.  We temporarily disable it and load all necessary header files. */
-#define NO_INFLATE_MASK
-#include "zutil.h"
-#include "inftrees.h"
-#include "infblock.h"
-#include "infcodes.h"
-#include "infutil.h"
-#undef  NO_INFLATE_MASK
-
-  /* infutil.c must be included before infcodes.c */
+#if defined( __GNUC__ )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#pragma GCC diagnostic ignored "-Wredundant-decls"
+#endif
+
 #include "zutil.c"
-#include "inftrees.c"
-#include "infutil.c"
-#include "infcodes.c"
-#include "infblock.c"
+#include "inffast.c"
 #include "inflate.c"
+#include "inftrees.c"
 #include "adler32.c"
+#include "crc32.c"
+
+#if defined( __GNUC__ )
+#pragma GCC diagnostic pop
+#endif
 
 #if defined( _MSC_VER )
 #pragma warning( pop )
@@ -121,43 +131,49 @@
      'malloc/free' */
 
   static voidpf
-  ft_gzip_alloc( FT_Memory  memory,
-                 uInt       items,
-                 uInt       size )
+  ft_gzip_alloc( voidpf  opaque,
+                 uInt    items,
+                 uInt    size )
   {
-    FT_ULong    sz = (FT_ULong)size * items;
+    FT_Memory   memory = (FT_Memory)opaque;
+    FT_ULong    sz     = (FT_ULong)size * items;
     FT_Error    error;
-    FT_Pointer  p  = NULL;
+    FT_Pointer  p      = NULL;
 
 
-    (void)FT_ALLOC( p, sz );
+    /* allocate and zero out */
+    FT_MEM_ALLOC( p, sz );
     return p;
   }
 
 
   static void
-  ft_gzip_free( FT_Memory  memory,
-                voidpf     address )
+  ft_gzip_free( voidpf  opaque,
+                voidpf  address )
   {
+    FT_Memory  memory = (FT_Memory)opaque;
+
+
     FT_MEM_FREE( address );
   }
 
 
 #if !defined( FT_CONFIG_OPTION_SYSTEM_ZLIB ) && !defined( USE_ZLIB_ZCALLOC )
 
-  local voidpf
+  voidpf ZLIB_INTERNAL
   zcalloc ( voidpf    opaque,
             unsigned  items,
             unsigned  size )
   {
-    return ft_gzip_alloc( (FT_Memory)opaque, items, size );
+    return ft_gzip_alloc( opaque, items, size );
   }
 
-  local void
+
+  void ZLIB_INTERNAL
   zcfree( voidpf  opaque,
           voidpf  ptr )
   {
-    ft_gzip_free( (FT_Memory)opaque, ptr );
+    ft_gzip_free( opaque, ptr );
   }
 
 #endif /* !SYSTEM_ZLIB && !USE_ZLIB_ZCALLOC */
@@ -304,8 +320,8 @@
     }
 
     /* initialize zlib -- there is no zlib header in the compressed stream */
-    zstream->zalloc = (alloc_func)ft_gzip_alloc;
-    zstream->zfree  = (free_func) ft_gzip_free;
+    zstream->zalloc = ft_gzip_alloc;
+    zstream->zfree  = ft_gzip_free;
     zstream->opaque = stream->memory;
 
     zstream->avail_in = 0;
@@ -462,12 +478,13 @@
                             FT_ULong     count )
   {
     FT_Error  error = FT_Err_Ok;
-    FT_ULong  delta;
 
 
     for (;;)
     {
-      delta = (FT_ULong)( zip->limit - zip->cursor );
+      FT_ULong  delta = (FT_ULong)( zip->limit - zip->cursor );
+
+
       if ( delta >= count )
         delta = count;
 
@@ -671,7 +688,7 @@
         FT_Byte*  zip_buff = NULL;
 
 
-        if ( !FT_ALLOC( zip_buff, zip_size ) )
+        if ( !FT_QALLOC( zip_buff, zip_size ) )
         {
           FT_ULong  count;
 
@@ -741,20 +758,11 @@
     stream.next_out  = output;
     stream.avail_out = (uInt)*output_len;
 
-    stream.zalloc = (alloc_func)ft_gzip_alloc;
-    stream.zfree  = (free_func) ft_gzip_free;
+    stream.zalloc = ft_gzip_alloc;
+    stream.zfree  = ft_gzip_free;
     stream.opaque = memory;
 
-    /* This is a temporary fix and will be removed once the internal
-     * copy of zlib is updated to the newest version. The `|32' flag
-     * is only supported in the new versions of zlib to enable gzip
-     * encoded header.
-     */
-#ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB
     err = inflateInit2( &stream, MAX_WBITS|32 );
-#else
-    err = inflateInit2( &stream, MAX_WBITS );
-#endif
 
     if ( err != Z_OK )
       return FT_THROW( Invalid_Argument );
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/ftzconf.h b/qtbase/src/3rdparty/freetype/src/gzip/ftzconf.h
index 3abf0ba03b..5e1d68a004 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/ftzconf.h
+++ b/qtbase/src/3rdparty/freetype/src/gzip/ftzconf.h
@@ -1,109 +1,255 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 /* @(#) $Id$ */
 
-#ifndef _ZCONF_H
-#define _ZCONF_H
+#ifndef ZCONF_H
+#define ZCONF_H
 
 /*
  * If you *really* need a unique prefix for all types and library functions,
  * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
  */
-#ifdef Z_PREFIX
-#  define deflateInit_         z_deflateInit_
-#  define deflate              z_deflate
-#  define deflateEnd           z_deflateEnd
-#  define inflateInit_         z_inflateInit_
-#  define inflate              z_inflate
-#  define inflateEnd           z_inflateEnd
-#  define deflateInit2_        z_deflateInit2_
-#  define deflateSetDictionary z_deflateSetDictionary
-#  define deflateCopy          z_deflateCopy
-#  define deflateReset         z_deflateReset
-#  define deflateParams        z_deflateParams
-#  define inflateInit2_        z_inflateInit2_
-#  define inflateSetDictionary z_inflateSetDictionary
-#  define inflateSync          z_inflateSync
-#  define inflateSyncPoint     z_inflateSyncPoint
-#  define inflateReset         z_inflateReset
-#  define compress             z_compress
-#  define compress2            z_compress2
-#  define uncompress           z_uncompress
-#  define adler32              z_adler32
-#  define crc32                z_crc32
-#  define get_crc_table        z_get_crc_table
-
-#  define Byte   z_Byte
-#  define uInt   z_uInt
-#  define uLong  z_uLong
-#  define Bytef  z_Bytef
-#  define charf  z_charf
-#  define intf   z_intf
-#  define uIntf  z_uIntf
-#  define uLongf z_uLongf
-#  define voidpf z_voidpf
-#  define voidp  z_voidp
-#endif
-
-#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-#  define WIN32
-#endif
-#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
-#  ifndef __32BIT__
-#    define __32BIT__
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
+
+/* all linked symbols and init macros */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_bits        z__tr_flush_bits
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  define adler32_z             z_adler32_z
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define crc32_z               z_crc32_z
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateGetDictionary  z_deflateGetDictionary
+#  define deflateInit           z_deflateInit
+#  define deflateInit2          z_deflateInit2
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzfread               z_gzfread
+#    define gzfwrite              z_gzfwrite
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzvprintf             z_gzvprintf
+#    define gzwrite               z_gzwrite
+#  endif
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit       z_inflateBackInit
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCodesUsed      z_inflateCodesUsed
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetDictionary  z_inflateGetDictionary
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit           z_inflateInit
+#  define inflateInit2          z_inflateInit2
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateResetKeep      z_inflateResetKeep
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflateValidate       z_inflateValidate
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#    define uncompress2           z_uncompress2
+#  endif
+#  define zError                z_zError
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
 #  endif
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
 #endif
+
 #if defined(__MSDOS__) && !defined(MSDOS)
 #  define MSDOS
 #endif
-
-/* WinCE doesn't have errno.h */
-#ifdef _WIN32_WCE
-#  define NO_ERRNO_H
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
 #endif
-
 
 /*
  * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
  * than 64k bytes at a time (needed on systems with 16-bit int).
  */
-#if defined(MSDOS) && !defined(__32BIT__)
+#ifdef SYS16BIT
 #  define MAXSEG_64K
 #endif
 #ifdef MSDOS
 #  define UNALIGNED_OK
 #endif
 
-#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32))  && !defined(STDC)
-#  define STDC
-#endif
-#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
+#ifdef __STDC_VERSION__
 #  ifndef STDC
 #    define STDC
 #  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
 #endif
 
 #ifndef STDC
 #  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-#    define const
+#    define const       /* note: need a more gentle solution here */
 #  endif
 #endif
 
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
-#  define NO_DUMMY_DECL
-#endif
-
-/* Old Borland C and LCC incorrectly complains about missing returns: */
-#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-#  define NEED_DUMMY_RETURN
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
 #endif
 
-#if defined(__LCC__)
-#  define  NEED_DUMMY_RETURN
+#ifdef Z_SOLO
+   typedef unsigned long z_size_t;
+#else
+#  define z_longlong long long
+#  if defined(NO_SIZE_T)
+     typedef unsigned NO_SIZE_T z_size_t;
+#  elif defined(STDC)
+#    include <stddef.h>
+     typedef size_t z_size_t;
+#  else
+     typedef unsigned long z_size_t;
+#  endif
+#  undef z_longlong
 #endif
 
 /* Maximum value for memLevel in deflateInit2 */
@@ -133,7 +279,7 @@
  Of course this will generally degrade compression (there's no free lunch).
 
    The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
  for small objects.
 */
 
@@ -147,75 +293,101 @@
 #  endif
 #endif
 
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
 /* The following definitions for FAR are needed only for MSDOS mixed
  * model programming (small or medium model with some far allocations).
  * This was tested only with MSC; for other MSDOS compilers you may have
  * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
  * just define FAR to be empty.
  */
-#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
-   /* MSC small or medium model */
-#  define SMALL_MEDIUM
-#  ifdef _MSC_VER
-#    define FAR _far
-#  else
-#    define FAR far
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
 #  endif
-#endif
-#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
-#  ifndef __32BIT__
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
 #    define SMALL_MEDIUM
-#    define FAR _far
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
 #  endif
 #endif
 
-/* Compile with -DZLIB_DLL for Windows DLL support */
-#if defined(ZLIB_DLL)
-#  if defined(_WINDOWS) || defined(WINDOWS)
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
 #    ifdef FAR
 #      undef FAR
 #    endif
 #    include <windows.h>
-#    define ZEXPORT(x)  x WINAPI
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
 #    ifdef WIN32
-#      define ZEXPORTVA(x)  x WINAPIV
+#      define ZEXPORTVA WINAPIV
 #    else
-#      define ZEXPORTVA(x)  x FAR _cdecl _export
+#      define ZEXPORTVA FAR CDECL
 #    endif
 #  endif
-#  if defined (__BORLANDC__)
-#    if (__BORLANDC__ >= 0x0500) && defined (WIN32)
-#      include <windows.h>
-#      define ZEXPORT(x) x __declspec(dllexport) WINAPI
-#      define ZEXPORTRVA(x)  x __declspec(dllexport) WINAPIV
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
 #    else
-#      if defined (_Windows) && defined (__DLL__)
-#        define ZEXPORT(x) x _export
-#        define ZEXPORTVA(x) x _export
-#      endif
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
 #    endif
 #  endif
 #endif
 
-
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
 #ifndef ZEXPORT
-#  define ZEXPORT(x)   static x
+#  define ZEXPORT
 #endif
 #ifndef ZEXPORTVA
-#  define ZEXPORTVA(x)   static x
-#endif
-#ifndef ZEXTERN
-#  define ZEXTERN(x) static x
-#endif
-#ifndef ZEXTERNDEF
-#  define ZEXTERNDEF(x)  static x
+#  define ZEXPORTVA
 #endif
 
 #ifndef FAR
-#   define FAR
+#  define FAR
 #endif
 
-#if !defined(MACOS) && !defined(TARGET_OS_MAC)
+#if !defined(__MACTYPES__)
 typedef unsigned char  Byte;  /* 8 bits */
 #endif
 typedef unsigned int   uInt;  /* 16 bits or more */
@@ -233,52 +405,130 @@ typedef uInt  FAR uIntf;
 typedef uLong FAR uLongf;
 
 #ifdef STDC
-   typedef void FAR *voidpf;
-   typedef void     *voidp;
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  elif (ULONG_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned long
+#  elif (USHRT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned short
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
 #else
-   typedef Byte FAR *voidpf;
-   typedef Byte     *voidp;
+   typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
 #endif
 
-#ifdef HAVE_UNISTD_H
-#  include <sys/types.h> /* for off_t */
-#  include <unistd.h>    /* for SEEK_* and off_t */
-#  define z_off_t  off_t
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
 #endif
-#ifndef SEEK_SET
+
+#ifdef STDC
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+#    include <stdarg.h>         /* for va_list */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  ifndef Z_SOLO
+#    include <stddef.h>         /* for wchar_t */
+#  endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
 #  define SEEK_SET        0       /* Seek from beginning of file.  */
 #  define SEEK_CUR        1       /* Seek from current position.  */
 #  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
 #endif
+
 #ifndef z_off_t
-#  define  z_off_t long
+#  define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
 #endif
 
 /* MVS linker does not support external names larger than 8 bytes */
 #if defined(__MVS__)
-#   pragma map(deflateInit_,"DEIN")
-#   pragma map(deflateInit2_,"DEIN2")
-#   pragma map(deflateEnd,"DEEND")
-#   pragma map(inflateInit_,"ININ")
-#   pragma map(inflateInit2_,"ININ2")
-#   pragma map(inflateEnd,"INEND")
-#   pragma map(inflateSync,"INSY")
-#   pragma map(inflateSetDictionary,"INSEDI")
-#   pragma map(inflate_blocks,"INBL")
-#   pragma map(inflate_blocks_new,"INBLNE")
-#   pragma map(inflate_blocks_free,"INBLFR")
-#   pragma map(inflate_blocks_reset,"INBLRE")
-#   pragma map(inflate_codes_free,"INCOFR")
-#   pragma map(inflate_codes,"INCO")
-#   pragma map(inflate_fast,"INFA")
-#   pragma map(inflate_flush,"INFLU")
-#   pragma map(inflate_mask,"INMA")
-#   pragma map(inflate_set_dictionary,"INSEDI2")
-#   pragma map(inflate_copyright,"INCOPY")
-#   pragma map(inflate_trees_bits,"INTRBI")
-#   pragma map(inflate_trees_dynamic,"INTRDY")
-#   pragma map(inflate_trees_fixed,"INTRFI")
-#   pragma map(inflate_trees_free,"INTRFR")
-#endif
-
-#endif /* _ZCONF_H */
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/gzguts.h b/qtbase/src/3rdparty/freetype/src/gzip/gzguts.h
new file mode 100644
index 0000000000..4f09a52a7a
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/gzguts.h
@@ -0,0 +1,219 @@
+/* gzguts.h -- zlib internal header definitions for gz* operations
+ * Copyright (C) 2004-2019 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifdef _LARGEFILE64_SOURCE
+#  ifndef _LARGEFILE_SOURCE
+#    define _LARGEFILE_SOURCE 1
+#  endif
+#  ifdef _FILE_OFFSET_BITS
+#    undef _FILE_OFFSET_BITS
+#  endif
+#endif
+
+#ifdef HAVE_HIDDEN
+#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+#  define ZLIB_INTERNAL
+#endif
+
+#include <stdio.h>
+#include "zlib.h"
+#ifdef STDC
+#  include <string.h>
+#  include <stdlib.h>
+#  include <limits.h>
+#endif
+
+#ifndef _POSIX_SOURCE
+#  define _POSIX_SOURCE
+#endif
+#include <fcntl.h>
+
+#ifdef _WIN32
+#  include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+#  include <io.h>
+#endif
+
+#if defined(_WIN32)
+#  define WIDECHAR
+#endif
+
+#ifdef WINAPI_FAMILY
+#  define open _open
+#  define read _read
+#  define write _write
+#  define close _close
+#endif
+
+#ifdef NO_DEFLATE       /* for compatibility with old definition */
+#  define NO_GZCOMPRESS
+#endif
+
+#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#if defined(__CYGWIN__)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#ifndef HAVE_VSNPRINTF
+#  ifdef MSDOS
+/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+   but for now we just assume it doesn't. */
+#    define NO_vsnprintf
+#  endif
+#  ifdef __TURBOC__
+#    define NO_vsnprintf
+#  endif
+#  ifdef WIN32
+/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+#    if !defined(vsnprintf) && !defined(NO_vsnprintf)
+#      if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
+#         define vsnprintf _vsnprintf
+#      endif
+#    endif
+#  endif
+#  ifdef __SASC
+#    define NO_vsnprintf
+#  endif
+#  ifdef VMS
+#    define NO_vsnprintf
+#  endif
+#  ifdef __OS400__
+#    define NO_vsnprintf
+#  endif
+#  ifdef __MVS__
+#    define NO_vsnprintf
+#  endif
+#endif
+
+/* unlike snprintf (which is required in C99), _snprintf does not guarantee
+   null termination of the result -- however this is only used in gzlib.c where
+   the result is assured to fit in the space provided */
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#  define snprintf _snprintf
+#endif
+
+#ifndef local
+#  define local static
+#endif
+/* since "static" is used to mean two completely different things in C, we
+   define "local" for the non-static meaning of "static", for readability
+   (compile with -Dlocal if your debugger can't find static symbols) */
+
+/* gz* functions always use library allocation functions */
+#ifndef STDC
+  extern voidp  malloc OF((uInt size));
+  extern void   free   OF((voidpf ptr));
+#endif
+
+/* get errno and strerror definition */
+#if defined UNDER_CE
+#  include <windows.h>
+#  define zstrerror() gz_strwinerror((DWORD)GetLastError())
+#else
+#  ifndef NO_STRERROR
+#    include <errno.h>
+#    define zstrerror() strerror(errno)
+#  else
+#    define zstrerror() "stdio error (consult errno)"
+#  endif
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
+    ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+    ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+    ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+    ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+#endif
+
+/* default memLevel */
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+
+/* default i/o buffer size -- double this for output when reading (this and
+   twice this must be able to fit in an unsigned type) */
+#define GZBUFSIZE 8192
+
+/* gzip modes, also provide a little integrity check on the passed structure */
+#define GZ_NONE 0
+#define GZ_READ 7247
+#define GZ_WRITE 31153
+#define GZ_APPEND 1     /* mode set to GZ_WRITE after the file is opened */
+
+/* values for gz_state how */
+#define LOOK 0      /* look for a gzip header */
+#define COPY__ 1    /* copy input directly */
+#define GZIP 2      /* decompress a gzip stream */
+
+/* internal gzip file state data structure */
+typedef struct {
+        /* exposed contents for gzgetc() macro */
+    struct gzFile_s x;      /* "x" for exposed */
+                            /* x.have: number of bytes available at x.next */
+                            /* x.next: next output data to deliver or write */
+                            /* x.pos: current position in uncompressed data */
+        /* used for both reading and writing */
+    int mode;               /* see gzip modes above */
+    int fd;                 /* file descriptor */
+    char *path;             /* path or fd for error messages */
+    unsigned size;          /* buffer size, zero if not allocated yet */
+    unsigned want;          /* requested buffer size, default is GZBUFSIZE */
+    unsigned char *in;      /* input buffer (double-sized when writing) */
+    unsigned char *out;     /* output buffer (double-sized when reading) */
+    int direct;             /* 0 if processing gzip, 1 if transparent */
+        /* just for reading */
+    int how;                /* 0: get header, 1: copy, 2: decompress */
+    z_off64_t start;        /* where the gzip data started, for rewinding */
+    int eof;                /* true if end of input file reached */
+    int past;               /* true if read requested past end */
+        /* just for writing */
+    int level;              /* compression level */
+    int strategy;           /* compression strategy */
+    int reset;              /* true if a reset is pending after a Z_FINISH */
+        /* seek request */
+    z_off64_t skip;         /* amount to skip (already rewound if backwards) */
+    int seek;               /* true if seek request pending */
+        /* error information */
+    int err;                /* error code */
+    char *msg;              /* error message */
+        /* zlib inflate or deflate stream */
+    z_stream strm;          /* stream structure in-place (not a pointer) */
+} gz_state;
+typedef gz_state FAR *gz_statep;
+
+/* shared functions */
+void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
+#if defined UNDER_CE
+char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
+#endif
+
+/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
+   value -- needed when comparing unsigned to z_off64_t, which is signed
+   (possible z_off64_t types off_t, off64_t, and long are all signed) */
+#ifdef INT_MAX
+#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
+#else
+unsigned ZLIB_INTERNAL gz_intmax OF((void));
+#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
+#endif
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/infback.c b/qtbase/src/3rdparty/freetype/src/gzip/infback.c
new file mode 100644
index 0000000000..5fb8c67941
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/infback.c
@@ -0,0 +1,641 @@
+/* infback.c -- inflate using a call-back interface
+ * Copyright (C) 1995-2022 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+   This code is largely copied from inflate.c.  Normally either infback.o or
+   inflate.o would be linked into an application--not both.  The interface
+   with inffast.c is retained so that optimized assembler-coded versions of
+   inflate_fast() can be used with either inflate.c or infback.c.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+
+/*
+   strm provides memory allocation functions in zalloc and zfree, or
+   Z_NULL to use the library memory allocation functions.
+
+   windowBits is in the range 8..15, and window is a user-supplied
+   window and output buffer that is 2**windowBits bytes.
+ */
+int ZEXPORT inflateBackInit_(
+    z_streamp strm,
+    int windowBits,
+    unsigned char FAR *window,
+    const char *version,
+    int stream_size)
+{
+    struct inflate_state FAR *state;
+
+    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+        stream_size != (int)(sizeof(z_stream)))
+        return Z_VERSION_ERROR;
+    if (strm == Z_NULL || window == Z_NULL ||
+        windowBits < 8 || windowBits > 15)
+        return Z_STREAM_ERROR;
+    strm->msg = Z_NULL;                 /* in case we return an error */
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+    strm->zfree = zcfree;
+#endif
+    state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+                                               sizeof(struct inflate_state));
+    if (state == Z_NULL) return Z_MEM_ERROR;
+    Tracev((stderr, "inflate: allocated\n"));
+    strm->state = (struct internal_state FAR *)state;
+    state->dmax = 32768U;
+    state->wbits = (uInt)windowBits;
+    state->wsize = 1U << windowBits;
+    state->window = window;
+    state->wnext = 0;
+    state->whave = 0;
+    return Z_OK;
+}
+
+/*
+   Return state with length and distance decoding tables and index sizes set to
+   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+   If BUILDFIXED is defined, then instead this routine builds the tables the
+   first time it's called, and returns those tables the first time and
+   thereafter.  This reduces the size of the code by about 2K bytes, in
+   exchange for a little execution time.  However, BUILDFIXED should not be
+   used for threaded applications, since the rewriting of the tables and virgin
+   may not be thread-safe.
+ */
+local void fixedtables(
+    struct inflate_state FAR *state)
+{
+#ifdef BUILDFIXED
+    static int virgin = 1;
+    static code *lenfix, *distfix;
+    static code fixed[544];
+
+    /* build fixed huffman tables if first call (may not be thread safe) */
+    if (virgin) {
+        unsigned sym, bits;
+        static code *next;
+
+        /* literal/length table */
+        sym = 0;
+        while (sym < 144) state->lens[sym++] = 8;
+        while (sym < 256) state->lens[sym++] = 9;
+        while (sym < 280) state->lens[sym++] = 7;
+        while (sym < 288) state->lens[sym++] = 8;
+        next = fixed;
+        lenfix = next;
+        bits = 9;
+        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+        /* distance table */
+        sym = 0;
+        while (sym < 32) state->lens[sym++] = 5;
+        distfix = next;
+        bits = 5;
+        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+        /* do this just once */
+        virgin = 0;
+    }
+#else /* !BUILDFIXED */
+#   include "inffixed.h"
+#endif /* BUILDFIXED */
+    state->lencode = lenfix;
+    state->lenbits = 9;
+    state->distcode = distfix;
+    state->distbits = 5;
+}
+
+/* Macros for inflateBack(): */
+
+/* Load returned state from inflate_fast() */
+#define LOAD() \
+    do { \
+        put = strm->next_out; \
+        left = strm->avail_out; \
+        next = strm->next_in; \
+        have = strm->avail_in; \
+        hold = state->hold; \
+        bits = state->bits; \
+    } while (0)
+
+/* Set state from registers for inflate_fast() */
+#define RESTORE() \
+    do { \
+        strm->next_out = put; \
+        strm->avail_out = left; \
+        strm->next_in = next; \
+        strm->avail_in = have; \
+        state->hold = hold; \
+        state->bits = bits; \
+    } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+    do { \
+        hold = 0; \
+        bits = 0; \
+    } while (0)
+
+/* Assure that some input is available.  If input is requested, but denied,
+   then return a Z_BUF_ERROR from inflateBack(). */
+#define PULL() \
+    do { \
+        if (have == 0) { \
+            have = in(in_desc, &next); \
+            if (have == 0) { \
+                next = Z_NULL; \
+                ret = Z_BUF_ERROR; \
+                goto inf_leave; \
+            } \
+        } \
+    } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflateBack()
+   with an error if there is no input available. */
+#define PULLBYTE() \
+    do { \
+        PULL(); \
+        have--; \
+        hold += (unsigned long)(*next++) << bits; \
+        bits += 8; \
+    } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator.  If there is
+   not enough available input to do that, then return from inflateBack() with
+   an error. */
+#define NEEDBITS(n) \
+    do { \
+        while (bits < (unsigned)(n)) \
+            PULLBYTE(); \
+    } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+    ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+    do { \
+        hold >>= (n); \
+        bits -= (unsigned)(n); \
+    } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+    do { \
+        hold >>= bits & 7; \
+        bits -= bits & 7; \
+    } while (0)
+
+/* Assure that some output space is available, by writing out the window
+   if it's full.  If the write fails, return from inflateBack() with a
+   Z_BUF_ERROR. */
+#define ROOM() \
+    do { \
+        if (left == 0) { \
+            put = state->window; \
+            left = state->wsize; \
+            state->whave = left; \
+            if (out(out_desc, put, left)) { \
+                ret = Z_BUF_ERROR; \
+                goto inf_leave; \
+            } \
+        } \
+    } while (0)
+
+/*
+   strm provides the memory allocation functions and window buffer on input,
+   and provides information on the unused input on return.  For Z_DATA_ERROR
+   returns, strm will also provide an error message.
+
+   in() and out() are the call-back input and output functions.  When
+   inflateBack() needs more input, it calls in().  When inflateBack() has
+   filled the window with output, or when it completes with data in the
+   window, it calls out() to write out the data.  The application must not
+   change the provided input until in() is called again or inflateBack()
+   returns.  The application must not change the window/output buffer until
+   inflateBack() returns.
+
+   in() and out() are called with a descriptor parameter provided in the
+   inflateBack() call.  This parameter can be a structure that provides the
+   information required to do the read or write, as well as accumulated
+   information on the input and output such as totals and check values.
+
+   in() should return zero on failure.  out() should return non-zero on
+   failure.  If either in() or out() fails, than inflateBack() returns a
+   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
+   was in() or out() that caused in the error.  Otherwise,  inflateBack()
+   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
+   error, or Z_MEM_ERROR if it could not allocate memory for the state.
+   inflateBack() can also return Z_STREAM_ERROR if the input parameters
+   are not correct, i.e. strm is Z_NULL or the state was not initialized.
+ */
+int ZEXPORT inflateBack(
+    z_streamp strm,
+    in_func in,
+    void FAR *in_desc,
+    out_func out,
+    void FAR *out_desc)
+{
+    struct inflate_state FAR *state;
+    z_const unsigned char FAR *next;    /* next input */
+    unsigned char FAR *put;     /* next output */
+    unsigned have, left;        /* available input and output */
+    unsigned long hold;         /* bit buffer */
+    unsigned bits;              /* bits in bit buffer */
+    unsigned copy;              /* number of stored or match bytes to copy */
+    unsigned char FAR *from;    /* where to copy match bytes from */
+    code here;                  /* current decoding table entry */
+    code last;                  /* parent table entry */
+    unsigned len;               /* length to copy for repeats, bits to drop */
+    int ret;                    /* return code */
+    static const unsigned short order[19] = /* permutation of code lengths */
+        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+    /* Check that the strm exists and that the state was initialized */
+    if (strm == Z_NULL || strm->state == Z_NULL)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* Reset the state */
+    strm->msg = Z_NULL;
+    state->mode = TYPE;
+    state->last = 0;
+    state->whave = 0;
+    next = strm->next_in;
+    have = next != Z_NULL ? strm->avail_in : 0;
+    hold = 0;
+    bits = 0;
+    put = state->window;
+    left = state->wsize;
+
+    /* Inflate until end of block marked as last */
+    for (;;)
+        switch (state->mode) {
+        case TYPE:
+            /* determine and dispatch block type */
+            if (state->last) {
+                BYTEBITS();
+                state->mode = DONE;
+                break;
+            }
+            NEEDBITS(3);
+            state->last = BITS(1);
+            DROPBITS(1);
+            switch (BITS(2)) {
+            case 0:                             /* stored block */
+                Tracev((stderr, "inflate:     stored block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = STORED;
+                break;
+            case 1:                             /* fixed block */
+                fixedtables(state);
+                Tracev((stderr, "inflate:     fixed codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = LEN;              /* decode codes */
+                break;
+            case 2:                             /* dynamic block */
+                Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = TABLE;
+                break;
+            case 3:
+                strm->msg = (char *)"invalid block type";
+                state->mode = BAD;
+            }
+            DROPBITS(2);
+            break;
+
+        case STORED:
+            /* get and verify stored block length */
+            BYTEBITS();                         /* go to byte boundary */
+            NEEDBITS(32);
+            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                strm->msg = (char *)"invalid stored block lengths";
+                state->mode = BAD;
+                break;
+            }
+            state->length = (unsigned)hold & 0xffff;
+            Tracev((stderr, "inflate:       stored length %u\n",
+                    state->length));
+            INITBITS();
+
+            /* copy stored block from input to output */
+            while (state->length != 0) {
+                copy = state->length;
+                PULL();
+                ROOM();
+                if (copy > have) copy = have;
+                if (copy > left) copy = left;
+                zmemcpy(put, next, copy);
+                have -= copy;
+                next += copy;
+                left -= copy;
+                put += copy;
+                state->length -= copy;
+            }
+            Tracev((stderr, "inflate:       stored end\n"));
+            state->mode = TYPE;
+            break;
+
+        case TABLE:
+            /* get dynamic table entries descriptor */
+            NEEDBITS(14);
+            state->nlen = BITS(5) + 257;
+            DROPBITS(5);
+            state->ndist = BITS(5) + 1;
+            DROPBITS(5);
+            state->ncode = BITS(4) + 4;
+            DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+            if (state->nlen > 286 || state->ndist > 30) {
+                strm->msg = (char *)"too many length or distance symbols";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracev((stderr, "inflate:       table sizes ok\n"));
+
+            /* get code length code lengths (not a typo) */
+            state->have = 0;
+            while (state->have < state->ncode) {
+                NEEDBITS(3);
+                state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                DROPBITS(3);
+            }
+            while (state->have < 19)
+                state->lens[order[state->have++]] = 0;
+            state->next = state->codes;
+            state->lencode = (code const FAR *)(state->next);
+            state->lenbits = 7;
+            ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid code lengths set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       code lengths ok\n"));
+
+            /* get length and distance code code lengths */
+            state->have = 0;
+            while (state->have < state->nlen + state->ndist) {
+                for (;;) {
+                    here = state->lencode[BITS(state->lenbits)];
+                    if ((unsigned)(here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                if (here.val < 16) {
+                    DROPBITS(here.bits);
+                    state->lens[state->have++] = here.val;
+                }
+                else {
+                    if (here.val == 16) {
+                        NEEDBITS(here.bits + 2);
+                        DROPBITS(here.bits);
+                        if (state->have == 0) {
+                            strm->msg = (char *)"invalid bit length repeat";
+                            state->mode = BAD;
+                            break;
+                        }
+                        len = (unsigned)(state->lens[state->have - 1]);
+                        copy = 3 + BITS(2);
+                        DROPBITS(2);
+                    }
+                    else if (here.val == 17) {
+                        NEEDBITS(here.bits + 3);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 3 + BITS(3);
+                        DROPBITS(3);
+                    }
+                    else {
+                        NEEDBITS(here.bits + 7);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 11 + BITS(7);
+                        DROPBITS(7);
+                    }
+                    if (state->have + copy > state->nlen + state->ndist) {
+                        strm->msg = (char *)"invalid bit length repeat";
+                        state->mode = BAD;
+                        break;
+                    }
+                    while (copy--)
+                        state->lens[state->have++] = (unsigned short)len;
+                }
+            }
+
+            /* handle error breaks in while */
+            if (state->mode == BAD) break;
+
+            /* check for end-of-block code (better have one) */
+            if (state->lens[256] == 0) {
+                strm->msg = (char *)"invalid code -- missing end-of-block";
+                state->mode = BAD;
+                break;
+            }
+
+            /* build code tables -- note: do not change the lenbits or distbits
+               values here (9 and 6) without reading the comments in inftrees.h
+               concerning the ENOUGH constants, which depend on those values */
+            state->next = state->codes;
+            state->lencode = (code const FAR *)(state->next);
+            state->lenbits = 9;
+            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid literal/lengths set";
+                state->mode = BAD;
+                break;
+            }
+            state->distcode = (code const FAR *)(state->next);
+            state->distbits = 6;
+            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                            &(state->next), &(state->distbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid distances set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       codes ok\n"));
+            state->mode = LEN;
+                /* fallthrough */
+
+        case LEN:
+            /* use inflate_fast() if we have enough input and output */
+            if (have >= 6 && left >= 258) {
+                RESTORE();
+                if (state->whave < state->wsize)
+                    state->whave = state->wsize - left;
+                inflate_fast(strm, state->wsize);
+                LOAD();
+                break;
+            }
+
+            /* get a literal, length, or end-of-block code */
+            for (;;) {
+                here = state->lencode[BITS(state->lenbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if (here.op && (here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->lencode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+            }
+            DROPBITS(here.bits);
+            state->length = (unsigned)here.val;
+
+            /* process literal */
+            if (here.op == 0) {
+                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                        "inflate:         literal '%c'\n" :
+                        "inflate:         literal 0x%02x\n", here.val));
+                ROOM();
+                *put++ = (unsigned char)(state->length);
+                left--;
+                state->mode = LEN;
+                break;
+            }
+
+            /* process end of block */
+            if (here.op & 32) {
+                Tracevv((stderr, "inflate:         end of block\n"));
+                state->mode = TYPE;
+                break;
+            }
+
+            /* invalid code */
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid literal/length code";
+                state->mode = BAD;
+                break;
+            }
+
+            /* length code -- get extra bits, if any */
+            state->extra = (unsigned)(here.op) & 15;
+            if (state->extra != 0) {
+                NEEDBITS(state->extra);
+                state->length += BITS(state->extra);
+                DROPBITS(state->extra);
+            }
+            Tracevv((stderr, "inflate:         length %u\n", state->length));
+
+            /* get distance code */
+            for (;;) {
+                here = state->distcode[BITS(state->distbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if ((here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->distcode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+            }
+            DROPBITS(here.bits);
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+            state->offset = (unsigned)here.val;
+
+            /* get distance extra bits, if any */
+            state->extra = (unsigned)(here.op) & 15;
+            if (state->extra != 0) {
+                NEEDBITS(state->extra);
+                state->offset += BITS(state->extra);
+                DROPBITS(state->extra);
+            }
+            if (state->offset > state->wsize - (state->whave < state->wsize ?
+                                                left : 0)) {
+                strm->msg = (char *)"invalid distance too far back";
+                state->mode = BAD;
+                break;
+            }
+            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+
+            /* copy match from window to output */
+            do {
+                ROOM();
+                copy = state->wsize - state->offset;
+                if (copy < left) {
+                    from = put + copy;
+                    copy = left - copy;
+                }
+                else {
+                    from = put - state->offset;
+                    copy = left;
+                }
+                if (copy > state->length) copy = state->length;
+                state->length -= copy;
+                left -= copy;
+                do {
+                    *put++ = *from++;
+                } while (--copy);
+            } while (state->length != 0);
+            break;
+
+        case DONE:
+            /* inflate stream terminated properly -- write leftover output */
+            ret = Z_STREAM_END;
+            if (left < state->wsize) {
+                if (out(out_desc, state->window, state->wsize - left))
+                    ret = Z_BUF_ERROR;
+            }
+            goto inf_leave;
+
+        case BAD:
+            ret = Z_DATA_ERROR;
+            goto inf_leave;
+
+        default:                /* can't happen, but makes compilers happy */
+            ret = Z_STREAM_ERROR;
+            goto inf_leave;
+        }
+
+    /* Return unused input */
+  inf_leave:
+    strm->next_in = next;
+    strm->avail_in = have;
+    return ret;
+}
+
+int ZEXPORT inflateBackEnd(
+    z_streamp strm)
+{
+    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+        return Z_STREAM_ERROR;
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+    Tracev((stderr, "inflate: end\n"));
+    return Z_OK;
+}
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inffast.c b/qtbase/src/3rdparty/freetype/src/gzip/inffast.c
new file mode 100644
index 0000000000..809737b13c
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inffast.c
@@ -0,0 +1,323 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2017 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef ASMINF
+#  pragma message("Assembler code may have bugs -- use at your own risk")
+#else
+
+/*
+   Decode literal, length, and distance codes and write out the resulting
+   literal and match bytes until either not enough input or output is
+   available, an end-of-block is encountered, or a data error is encountered.
+   When large enough input and output buffers are supplied to inflate(), for
+   example, a 16K input buffer and a 64K output buffer, more than 95% of the
+   inflate execution time is spent in this routine.
+
+   Entry assumptions:
+
+        state->mode == LEN
+        strm->avail_in >= 6
+        strm->avail_out >= 258
+        start >= strm->avail_out
+        state->bits < 8
+
+   On return, state->mode is one of:
+
+        LEN -- ran out of enough output space or enough available input
+        TYPE -- reached end of block code, inflate() to interpret next block
+        BAD -- error in block data
+
+   Notes:
+
+    - The maximum input bits used by a length/distance pair is 15 bits for the
+      length code, 5 bits for the length extra, 15 bits for the distance code,
+      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+      Therefore if strm->avail_in >= 6, then there is enough input to avoid
+      checking for available input while decoding.
+
+    - The maximum bytes that a single length/distance pair can output is 258
+      bytes, which is the maximum length that can be coded.  inflate_fast()
+      requires strm->avail_out >= 258 for each loop to avoid checking for
+      output space.
+ */
+void ZLIB_INTERNAL inflate_fast(
+    z_streamp strm,
+    unsigned start)
+{
+    struct inflate_state FAR *state;
+    z_const unsigned char FAR *in;      /* local strm->next_in */
+    z_const unsigned char FAR *last;    /* have enough input while in < last */
+    unsigned char FAR *out;     /* local strm->next_out */
+    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
+    unsigned char FAR *end;     /* while out < end, enough space available */
+#ifdef INFLATE_STRICT
+    unsigned dmax;              /* maximum distance from zlib header */
+#endif
+    unsigned wsize;             /* window size or zero if not using window */
+    unsigned whave;             /* valid bytes in the window */
+    unsigned wnext;             /* window write index */
+    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
+    unsigned long hold;         /* local strm->hold */
+    unsigned bits;              /* local strm->bits */
+    code const FAR *lcode;      /* local strm->lencode */
+    code const FAR *dcode;      /* local strm->distcode */
+    unsigned lmask;             /* mask for first level of length codes */
+    unsigned dmask;             /* mask for first level of distance codes */
+    code const *here;           /* retrieved table entry */
+    unsigned op;                /* code bits, operation, extra bits, or */
+                                /*  window position, window bytes to copy */
+    unsigned len;               /* match length, unused bytes */
+    unsigned dist;              /* match distance */
+    unsigned char FAR *from;    /* where to copy match from */
+
+    /* copy state to local variables */
+    state = (struct inflate_state FAR *)strm->state;
+    in = strm->next_in;
+    last = in + (strm->avail_in - 5);
+    out = strm->next_out;
+    beg = out - (start - strm->avail_out);
+    end = out + (strm->avail_out - 257);
+#ifdef INFLATE_STRICT
+    dmax = state->dmax;
+#endif
+    wsize = state->wsize;
+    whave = state->whave;
+    wnext = state->wnext;
+    window = state->window;
+    hold = state->hold;
+    bits = state->bits;
+    lcode = state->lencode;
+    dcode = state->distcode;
+    lmask = (1U << state->lenbits) - 1;
+    dmask = (1U << state->distbits) - 1;
+
+    /* decode literals and length/distances until end-of-block or not enough
+       input data or output space */
+    do {
+        if (bits < 15) {
+            hold += (unsigned long)(*in++) << bits;
+            bits += 8;
+            hold += (unsigned long)(*in++) << bits;
+            bits += 8;
+        }
+        here = lcode + (hold & lmask);
+      dolen:
+        op = (unsigned)(here->bits);
+        hold >>= op;
+        bits -= op;
+        op = (unsigned)(here->op);
+        if (op == 0) {                          /* literal */
+            Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
+                    "inflate:         literal '%c'\n" :
+                    "inflate:         literal 0x%02x\n", here->val));
+            *out++ = (unsigned char)(here->val);
+        }
+        else if (op & 16) {                     /* length base */
+            len = (unsigned)(here->val);
+            op &= 15;                           /* number of extra bits */
+            if (op) {
+                if (bits < op) {
+                    hold += (unsigned long)(*in++) << bits;
+                    bits += 8;
+                }
+                len += (unsigned)hold & ((1U << op) - 1);
+                hold >>= op;
+                bits -= op;
+            }
+            Tracevv((stderr, "inflate:         length %u\n", len));
+            if (bits < 15) {
+                hold += (unsigned long)(*in++) << bits;
+                bits += 8;
+                hold += (unsigned long)(*in++) << bits;
+                bits += 8;
+            }
+            here = dcode + (hold & dmask);
+          dodist:
+            op = (unsigned)(here->bits);
+            hold >>= op;
+            bits -= op;
+            op = (unsigned)(here->op);
+            if (op & 16) {                      /* distance base */
+                dist = (unsigned)(here->val);
+                op &= 15;                       /* number of extra bits */
+                if (bits < op) {
+                    hold += (unsigned long)(*in++) << bits;
+                    bits += 8;
+                    if (bits < op) {
+                        hold += (unsigned long)(*in++) << bits;
+                        bits += 8;
+                    }
+                }
+                dist += (unsigned)hold & ((1U << op) - 1);
+#ifdef INFLATE_STRICT
+                if (dist > dmax) {
+                    strm->msg = (char *)"invalid distance too far back";
+                    state->mode = BAD;
+                    break;
+                }
+#endif
+                hold >>= op;
+                bits -= op;
+                Tracevv((stderr, "inflate:         distance %u\n", dist));
+                op = (unsigned)(out - beg);     /* max distance in output */
+                if (dist > op) {                /* see if copy from window */
+                    op = dist - op;             /* distance back in window */
+                    if (op > whave) {
+                        if (state->sane) {
+                            strm->msg =
+                                (char *)"invalid distance too far back";
+                            state->mode = BAD;
+                            break;
+                        }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+                        if (len <= op - whave) {
+                            do {
+                                *out++ = 0;
+                            } while (--len);
+                            continue;
+                        }
+                        len -= op - whave;
+                        do {
+                            *out++ = 0;
+                        } while (--op > whave);
+                        if (op == 0) {
+                            from = out - dist;
+                            do {
+                                *out++ = *from++;
+                            } while (--len);
+                            continue;
+                        }
+#endif
+                    }
+                    from = window;
+                    if (wnext == 0) {           /* very common case */
+                        from += wsize - op;
+                        if (op < len) {         /* some from window */
+                            len -= op;
+                            do {
+                                *out++ = *from++;
+                            } while (--op);
+                            from = out - dist;  /* rest from output */
+                        }
+                    }
+                    else if (wnext < op) {      /* wrap around window */
+                        from += wsize + wnext - op;
+                        op -= wnext;
+                        if (op < len) {         /* some from end of window */
+                            len -= op;
+                            do {
+                                *out++ = *from++;
+                            } while (--op);
+                            from = window;
+                            if (wnext < len) {  /* some from start of window */
+                                op = wnext;
+                                len -= op;
+                                do {
+                                    *out++ = *from++;
+                                } while (--op);
+                                from = out - dist;      /* rest from output */
+                            }
+                        }
+                    }
+                    else {                      /* contiguous in window */
+                        from += wnext - op;
+                        if (op < len) {         /* some from window */
+                            len -= op;
+                            do {
+                                *out++ = *from++;
+                            } while (--op);
+                            from = out - dist;  /* rest from output */
+                        }
+                    }
+                    while (len > 2) {
+                        *out++ = *from++;
+                        *out++ = *from++;
+                        *out++ = *from++;
+                        len -= 3;
+                    }
+                    if (len) {
+                        *out++ = *from++;
+                        if (len > 1)
+                            *out++ = *from++;
+                    }
+                }
+                else {
+                    from = out - dist;          /* copy direct from output */
+                    do {                        /* minimum length is three */
+                        *out++ = *from++;
+                        *out++ = *from++;
+                        *out++ = *from++;
+                        len -= 3;
+                    } while (len > 2);
+                    if (len) {
+                        *out++ = *from++;
+                        if (len > 1)
+                            *out++ = *from++;
+                    }
+                }
+            }
+            else if ((op & 64) == 0) {          /* 2nd level distance code */
+                here = dcode + here->val + (hold & ((1U << op) - 1));
+                goto dodist;
+            }
+            else {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+        }
+        else if ((op & 64) == 0) {              /* 2nd level length code */
+            here = lcode + here->val + (hold & ((1U << op) - 1));
+            goto dolen;
+        }
+        else if (op & 32) {                     /* end-of-block */
+            Tracevv((stderr, "inflate:         end of block\n"));
+            state->mode = TYPE;
+            break;
+        }
+        else {
+            strm->msg = (char *)"invalid literal/length code";
+            state->mode = BAD;
+            break;
+        }
+    } while (in < last && out < end);
+
+    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+    len = bits >> 3;
+    in -= len;
+    bits -= len << 3;
+    hold &= (1U << bits) - 1;
+
+    /* update state and return */
+    strm->next_in = in;
+    strm->next_out = out;
+    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+    strm->avail_out = (unsigned)(out < end ?
+                                 257 + (end - out) : 257 - (out - end));
+    state->hold = hold;
+    state->bits = bits;
+    return;
+}
+
+/*
+   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+   - Using bit fields for code structure
+   - Different op definition to avoid & for extra bits (do & for table bits)
+   - Three separate decoding do-loops for direct, window, and wnext == 0
+   - Special case for distance > 1 copies to do overlapped load and store copy
+   - Explicit branch predictions (based on measured branch probabilities)
+   - Deferring match copy and interspersed it with decoding subsequent codes
+   - Swapping literal/length else
+   - Swapping window/direct else
+   - Larger unrolled copy loops (three is about right)
+   - Moving len -= 3 statement into middle of loop
+ */
+
+#endif /* !ASMINF */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inffast.h b/qtbase/src/3rdparty/freetype/src/gzip/inffast.h
new file mode 100644
index 0000000000..e5c1aa4ca8
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inffast.h
@@ -0,0 +1,11 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-2003, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inffixed.h b/qtbase/src/3rdparty/freetype/src/gzip/inffixed.h
index 4d4760ea00..d628327769 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/inffixed.h
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inffixed.h
@@ -1,151 +1,94 @@
-/* inffixed.h -- table for decoding fixed codes
- * Generated automatically by the maketree.c program
- */
+    /* inffixed.h -- table for decoding fixed codes
+     * Generated automatically by makefixed().
+     */
 
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
+    /* WARNING: this file should *not* be used by applications.
+       It is part of the implementation of this library and is
+       subject to change. Applications should only use zlib.h.
+     */
 
-local const uInt fixed_bl = 9;
-local const uInt fixed_bd = 5;
-local const inflate_huft fixed_tl[] = {
-    {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
-    {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
-    {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
-    {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
-    {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
-    {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
-    {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
-    {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
-    {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
-    {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
-    {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
-    {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
-    {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
-    {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
-    {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
-    {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
-    {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
-    {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
-    {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
-    {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
-    {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
-    {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
-    {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
-    {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
-    {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
-    {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
-    {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
-    {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
-    {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
-    {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
-    {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
-    {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
-    {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
-    {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
-    {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
-    {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
-    {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
-    {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
-    {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
-    {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
-    {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
-    {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
-    {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
-    {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
-    {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
-    {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
-    {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
-    {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
-    {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
-    {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
-    {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
-    {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
-    {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
-    {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
-    {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
-    {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
-    {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
-    {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
-    {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
-    {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
-    {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
-    {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
-    {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
-    {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
-    {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
-    {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
-    {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
-    {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
-    {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
-    {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
-    {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
-    {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
-    {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
-    {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
-    {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
-    {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
-    {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
-    {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
-    {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
-    {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
-    {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
-    {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
-    {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
-    {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
-    {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
-    {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
-    {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
-    {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
-    {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
-    {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
-    {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
-    {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
-    {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
-    {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
-    {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
-    {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
-    {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
-    {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
-    {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
-    {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
-    {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
-    {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
-    {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
-    {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
-    {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
-    {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
-    {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
-    {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
-    {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
-    {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
-    {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
-    {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
-    {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
-    {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
-    {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
-    {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
-    {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
-    {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
-    {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
-    {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
-    {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
-    {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
-    {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
-    {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
-    {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
-    {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
-    {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
-    {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
-  };
-local const inflate_huft fixed_td[] = {
-    {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
-    {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
-    {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
-    {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
-    {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
-    {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
-    {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
-    {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
-  };
+    static const code lenfix[512] = {
+        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
+        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
+        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
+        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
+        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
+        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
+        {0,9,255}
+    };
+
+    static const code distfix[32] = {
+        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+        {22,5,193},{64,5,0}
+    };
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inflate.c b/qtbase/src/3rdparty/freetype/src/gzip/inflate.c
index 95e2653662..5bf5b815e5 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/inflate.c
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inflate.c
@@ -1,283 +1,1610 @@
-/* inflate.c -- zlib interface to inflate modules
- * Copyright (C) 1995-2002 Mark Adler
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2022 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
+/*
+ * Change history:
+ *
+ * 1.2.beta0    24 Nov 2002
+ * - First version -- complete rewrite of inflate to simplify code, avoid
+ *   creation of window when not needed, minimize use of window when it is
+ *   needed, make inffast.c even faster, implement gzip decoding, and to
+ *   improve code readability and style over the previous zlib inflate code
+ *
+ * 1.2.beta1    25 Nov 2002
+ * - Use pointers for available input and output checking in inffast.c
+ * - Remove input and output counters in inffast.c
+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
+ * - Remove unnecessary second byte pull from length extra in inffast.c
+ * - Unroll direct copy to three copies per loop in inffast.c
+ *
+ * 1.2.beta2    4 Dec 2002
+ * - Change external routine names to reduce potential conflicts
+ * - Correct filename to inffixed.h for fixed tables in inflate.c
+ * - Make hbuf[] unsigned char to match parameter type in inflate.c
+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
+ *   to avoid negation problem on Alphas (64 bit) in inflate.c
+ *
+ * 1.2.beta3    22 Dec 2002
+ * - Add comments on state->bits assertion in inffast.c
+ * - Add comments on op field in inftrees.h
+ * - Fix bug in reuse of allocated window after inflateReset()
+ * - Remove bit fields--back to byte structure for speed
+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
+ * - Use local copies of stream next and avail values, as well as local bit
+ *   buffer and bit count in inflate()--for speed when inflate_fast() not used
+ *
+ * 1.2.beta4    1 Jan 2003
+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
+ * - Move a comment on output buffer sizes from inffast.c to inflate.c
+ * - Add comments in inffast.c to introduce the inflate_fast() routine
+ * - Rearrange window copies in inflate_fast() for speed and simplification
+ * - Unroll last copy for window match in inflate_fast()
+ * - Use local copies of window variables in inflate_fast() for speed
+ * - Pull out common wnext == 0 case for speed in inflate_fast()
+ * - Make op and len in inflate_fast() unsigned for consistency
+ * - Add FAR to lcode and dcode declarations in inflate_fast()
+ * - Simplified bad distance check in inflate_fast()
+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
+ *   source file infback.c to provide a call-back interface to inflate for
+ *   programs like gzip and unzip -- uses window as output buffer to avoid
+ *   window copying
+ *
+ * 1.2.beta5    1 Jan 2003
+ * - Improved inflateBack() interface to allow the caller to provide initial
+ *   input in strm.
+ * - Fixed stored blocks bug in inflateBack()
+ *
+ * 1.2.beta6    4 Jan 2003
+ * - Added comments in inffast.c on effectiveness of POSTINC
+ * - Typecasting all around to reduce compiler warnings
+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to
+ *   make compilers happy
+ * - Changed type of window in inflateBackInit() to unsigned char *
+ *
+ * 1.2.beta7    27 Jan 2003
+ * - Changed many types to unsigned or unsigned short to avoid warnings
+ * - Added inflateCopy() function
+ *
+ * 1.2.0        9 Mar 2003
+ * - Changed inflateBack() interface to provide separate opaque descriptors
+ *   for the in() and out() functions
+ * - Changed inflateBack() argument and in_func typedef to swap the length
+ *   and buffer address return values for the input function
+ * - Check next_in and next_out for Z_NULL on entry to inflate()
+ *
+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
+ */
+
 #include "zutil.h"
-#include "infblock.h"
-
-#define  DONE  INFLATE_DONE
-#define  BAD   INFLATE_BAD
-
-typedef enum {
-      METHOD,   /* waiting for method byte */
-      FLAG,     /* waiting for flag byte */
-      DICT4,    /* four dictionary check bytes to go */
-      DICT3,    /* three dictionary check bytes to go */
-      DICT2,    /* two dictionary check bytes to go */
-      DICT1,    /* one dictionary check byte to go */
-      DICT0,    /* waiting for inflateSetDictionary */
-      BLOCKS,   /* decompressing blocks */
-      CHECK4,   /* four check bytes to go */
-      CHECK3,   /* three check bytes to go */
-      CHECK2,   /* two check bytes to go */
-      CHECK1,   /* one check byte to go */
-      DONE,     /* finished check, done */
-      BAD}      /* got an error--stay here */
-inflate_mode;
-
-/* inflate private state */
-struct internal_state {
-
-  /* mode */
-  inflate_mode  mode;   /* current inflate mode */
-
-  /* mode dependent information */
-  union {
-    uInt method;        /* if FLAGS, method byte */
-    struct {
-      uLong was;                /* computed check value */
-      uLong need;               /* stream check value */
-    } check;            /* if CHECK, check values to compare */
-    uInt marker;        /* if BAD, inflateSync's marker bytes count */
-  } sub;        /* submode */
-
-  /* mode independent information */
-  int  nowrap;          /* flag for no wrapper */
-  uInt wbits;           /* log2(window size)  (8..15, defaults to 15) */
-  inflate_blocks_statef
-    *blocks;            /* current inflate_blocks state */
-
-};
-
-
-ZEXPORT(int) inflateReset( /* z) */
-z_streamp z )
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef MAKEFIXED
+#  ifndef BUILDFIXED
+#    define BUILDFIXED
+#  endif
+#endif
+
+/* function prototypes */
+local int inflateStateCheck OF((z_streamp strm));
+local void fixedtables OF((struct inflate_state FAR *state));
+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+                           unsigned copy));
+#ifdef BUILDFIXED
+   void makefixed OF((void));
+#endif
+#ifndef Z_FREETYPE
+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
+                              unsigned len));
+#endif
+
+local int inflateStateCheck(
+    z_streamp strm)
 {
-  if (z == Z_NULL || z->state == Z_NULL)
-    return Z_STREAM_ERROR;
-  z->total_in = z->total_out = 0;
-  z->msg = Z_NULL;
-  z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
-  inflate_blocks_reset(z->state->blocks, z, Z_NULL);
-  Tracev((stderr, "inflate: reset\n"));
-  return Z_OK;
+    struct inflate_state FAR *state;
+    if (strm == Z_NULL ||
+        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+        return 1;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state == Z_NULL || state->strm != strm ||
+        state->mode < HEAD || state->mode > SYNC)
+        return 1;
+    return 0;
 }
 
+int ZEXPORT inflateResetKeep(
+    z_streamp strm)
+{
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    strm->total_in = strm->total_out = state->total = 0;
+    strm->msg = Z_NULL;
+    if (state->wrap)        /* to support ill-conceived Java test suite */
+        strm->adler = state->wrap & 1;
+    state->mode = HEAD;
+    state->last = 0;
+    state->havedict = 0;
+    state->flags = -1;
+    state->dmax = 32768U;
+    state->head = Z_NULL;
+    state->hold = 0;
+    state->bits = 0;
+    state->lencode = state->distcode = state->next = state->codes;
+    state->sane = 1;
+    state->back = -1;
+    Tracev((stderr, "inflate: reset\n"));
+    return Z_OK;
+}
 
-ZEXPORT(int) inflateEnd( /* z) */
-z_streamp z )
+int ZEXPORT inflateReset(
+    z_streamp strm)
 {
-  if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
-    return Z_STREAM_ERROR;
-  if (z->state->blocks != Z_NULL)
-    inflate_blocks_free(z->state->blocks, z);
-  ZFREE(z, z->state);
-  z->state = Z_NULL;
-  Tracev((stderr, "inflate: end\n"));
-  return Z_OK;
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    state->wsize = 0;
+    state->whave = 0;
+    state->wnext = 0;
+    return inflateResetKeep(strm);
 }
 
+int ZEXPORT inflateReset2(
+    z_streamp strm,
+    int windowBits)
+{
+    int wrap;
+    struct inflate_state FAR *state;
+
+    /* get the state */
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* extract wrap request from windowBits parameter */
+    if (windowBits < 0) {
+        wrap = 0;
+        windowBits = -windowBits;
+    }
+    else {
+        wrap = (windowBits >> 4) + 5;
+#ifdef GUNZIP
+        if (windowBits < 48)
+            windowBits &= 15;
+#endif
+    }
+
+    /* set number of window bits, free window if different */
+    if (windowBits && (windowBits < 8 || windowBits > 15))
+        return Z_STREAM_ERROR;
+    if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+        ZFREE(strm, state->window);
+        state->window = Z_NULL;
+    }
+
+    /* update state and reset the rest of it */
+    state->wrap = wrap;
+    state->wbits = (unsigned)windowBits;
+    return inflateReset(strm);
+}
 
-ZEXPORT(int) inflateInit2_( /* z, w, version, stream_size) */
-z_streamp z,
-int w,
-const char *version,
-int stream_size )
+int ZEXPORT inflateInit2_(
+    z_streamp strm,
+    int windowBits,
+    const char *version,
+    int stream_size)
 {
-  if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
-      stream_size != sizeof(z_stream))
-      return Z_VERSION_ERROR;
-
-  /* initialize state */
-  if (z == Z_NULL)
-    return Z_STREAM_ERROR;
-  z->msg = Z_NULL;
-  if (z->zalloc == Z_NULL)
-  {
-    z->zalloc = zcalloc;
-    z->opaque = (voidpf)0;
-  }
-  if (z->zfree == Z_NULL) z->zfree = zcfree;
-  if ((z->state = (struct internal_state FAR *)
-       ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
-    return Z_MEM_ERROR;
-  z->state->blocks = Z_NULL;
-
-  /* handle undocumented nowrap option (no zlib header or check) */
-  z->state->nowrap = 0;
-  if (w < 0)
-  {
-    w = - w;
-    z->state->nowrap = 1;
-  }
-
-  /* set window size */
-  if (w < 8 || w > 15)
-  {
-    inflateEnd(z);
-    return Z_STREAM_ERROR;
-  }
-  z->state->wbits = (uInt)w;
-
-  /* create inflate_blocks state */
-  if ((z->state->blocks =
-      inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
-      == Z_NULL)
-  {
-    inflateEnd(z);
-    return Z_MEM_ERROR;
-  }
-  Tracev((stderr, "inflate: allocated\n"));
-
-  /* reset state */
-  inflateReset(z);
-  return Z_OK;
+    int ret;
+    struct inflate_state FAR *state;
+
+    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+        stream_size != (int)(sizeof(z_stream)))
+        return Z_VERSION_ERROR;
+    if (strm == Z_NULL) return Z_STREAM_ERROR;
+    strm->msg = Z_NULL;                 /* in case we return an error */
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
+    state = (struct inflate_state FAR *)
+            ZALLOC(strm, 1, sizeof(struct inflate_state));
+    if (state == Z_NULL) return Z_MEM_ERROR;
+    Tracev((stderr, "inflate: allocated\n"));
+    strm->state = (struct internal_state FAR *)state;
+    state->strm = strm;
+    state->window = Z_NULL;
+    state->mode = HEAD;     /* to pass state test in inflateReset2() */
+    ret = inflateReset2(strm, windowBits);
+    if (ret != Z_OK) {
+        ZFREE(strm, state);
+        strm->state = Z_NULL;
+    }
+    return ret;
 }
 
+int ZEXPORT inflateInit_(
+    z_streamp strm,
+    const char *version,
+    int stream_size)
+{
+    return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
 
+#ifndef Z_FREETYPE
 
-#undef  NEEDBYTE
-#define NEEDBYTE {if(z->avail_in==0)return r;r=f;}
+int ZEXPORT inflatePrime(
+    z_streamp strm,
+    int bits,
+    int value)
+{
+    struct inflate_state FAR *state;
 
-#undef  NEXTBYTE
-#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (bits < 0) {
+        state->hold = 0;
+        state->bits = 0;
+        return Z_OK;
+    }
+    if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
+    value &= (1L << bits) - 1;
+    state->hold += (unsigned)value << state->bits;
+    state->bits += (uInt)bits;
+    return Z_OK;
+}
 
+#endif  /* !Z_FREETYPE */
 
-ZEXPORT(int) inflate( /* z, f) */
-z_streamp z,
-int f )
+/*
+   Return state with length and distance decoding tables and index sizes set to
+   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+   If BUILDFIXED is defined, then instead this routine builds the tables the
+   first time it's called, and returns those tables the first time and
+   thereafter.  This reduces the size of the code by about 2K bytes, in
+   exchange for a little execution time.  However, BUILDFIXED should not be
+   used for threaded applications, since the rewriting of the tables and virgin
+   may not be thread-safe.
+ */
+local void fixedtables(
+    struct inflate_state FAR *state)
 {
-  int r;
-  uInt b;
-
-  if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
-    return Z_STREAM_ERROR;
-  f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
-  r = Z_BUF_ERROR;
-  while (1) switch (z->state->mode)
-  {
-    case METHOD:
-      NEEDBYTE
-      if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
-      {
-        z->state->mode = BAD;
-        z->msg = (char*)"unknown compression method";
-        z->state->sub.marker = 5;       /* can't try inflateSync */
-        break;
-      }
-      if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
-      {
-        z->state->mode = BAD;
-        z->msg = (char*)"invalid window size";
-        z->state->sub.marker = 5;       /* can't try inflateSync */
-        break;
-      }
-      z->state->mode = FLAG;
-      /* fall through */
-    case FLAG:
-      NEEDBYTE
-      b = NEXTBYTE;
-      if (((z->state->sub.method << 8) + b) % 31)
-      {
-        z->state->mode = BAD;
-        z->msg = (char*)"incorrect header check";
-        z->state->sub.marker = 5;       /* can't try inflateSync */
-        break;
-      }
-      Tracev((stderr, "inflate: zlib header ok\n"));
-      if (!(b & PRESET_DICT))
-      {
-        z->state->mode = BLOCKS;
-        break;
-      }
-      z->state->mode = DICT4;
-      /* fall through */
-    case DICT4:
-      NEEDBYTE
-      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
-      z->state->mode = DICT3;
-      /* fall through */
-    case DICT3:
-      NEEDBYTE
-      z->state->sub.check.need += (uLong)NEXTBYTE << 16;
-      z->state->mode = DICT2;
-      /* fall through */
-    case DICT2:
-      NEEDBYTE
-      z->state->sub.check.need += (uLong)NEXTBYTE << 8;
-      z->state->mode = DICT1;
-      /* fall through */
-    case DICT1:
-      NEEDBYTE
-      z->state->sub.check.need += (uLong)NEXTBYTE;
-      z->adler = z->state->sub.check.need;
-      z->state->mode = DICT0;
-      return Z_NEED_DICT;
-    case DICT0:
-      z->state->mode = BAD;
-      z->msg = (char*)"need dictionary";
-      z->state->sub.marker = 0;       /* can try inflateSync */
-      return Z_STREAM_ERROR;
-    case BLOCKS:
-      r = inflate_blocks(z->state->blocks, z, r);
-      if (r == Z_DATA_ERROR)
-      {
-        z->state->mode = BAD;
-        z->state->sub.marker = 0;       /* can try inflateSync */
-        break;
-      }
-      if (r == Z_OK)
-        r = f;
-      if (r != Z_STREAM_END)
-        return r;
-      r = f;
-      inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
-      if (z->state->nowrap)
-      {
-        z->state->mode = DONE;
-        break;
-      }
-      z->state->mode = CHECK4;
-      /* fall through */
-    case CHECK4:
-      NEEDBYTE
-      z->state->sub.check.need = (uLong)NEXTBYTE << 24;
-      z->state->mode = CHECK3;
-      /* fall through */
-    case CHECK3:
-      NEEDBYTE
-      z->state->sub.check.need += (uLong)NEXTBYTE << 16;
-      z->state->mode = CHECK2;
-      /* fall through */
-    case CHECK2:
-      NEEDBYTE
-      z->state->sub.check.need += (uLong)NEXTBYTE << 8;
-      z->state->mode = CHECK1;
-      /* fall through */
-    case CHECK1:
-      NEEDBYTE
-      z->state->sub.check.need += (uLong)NEXTBYTE;
-
-      if (z->state->sub.check.was != z->state->sub.check.need)
-      {
-        z->state->mode = BAD;
-        z->msg = (char*)"incorrect data check";
-        z->state->sub.marker = 5;       /* can't try inflateSync */
+#ifdef BUILDFIXED
+    static int virgin = 1;
+    static code *lenfix, *distfix;
+    static code fixed[544];
+
+    /* build fixed huffman tables if first call (may not be thread safe) */
+    if (virgin) {
+        unsigned sym, bits;
+        static code *next;
+
+        /* literal/length table */
+        sym = 0;
+        while (sym < 144) state->lens[sym++] = 8;
+        while (sym < 256) state->lens[sym++] = 9;
+        while (sym < 280) state->lens[sym++] = 7;
+        while (sym < 288) state->lens[sym++] = 8;
+        next = fixed;
+        lenfix = next;
+        bits = 9;
+        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+        /* distance table */
+        sym = 0;
+        while (sym < 32) state->lens[sym++] = 5;
+        distfix = next;
+        bits = 5;
+        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+        /* do this just once */
+        virgin = 0;
+    }
+#else /* !BUILDFIXED */
+#   include "inffixed.h"
+#endif /* BUILDFIXED */
+    state->lencode = lenfix;
+    state->lenbits = 9;
+    state->distcode = distfix;
+    state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
+   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
+   those tables to stdout, which would be piped to inffixed.h.  A small program
+   can simply call makefixed to do this:
+
+    void makefixed(void);
+
+    int main(void)
+    {
+        makefixed();
+        return 0;
+    }
+
+   Then that can be linked with zlib built with MAKEFIXED defined and run:
+
+    a.out > inffixed.h
+ */
+void makefixed()
+{
+    unsigned low, size;
+    struct inflate_state state;
+
+    fixedtables(&state);
+    puts("    /* inffixed.h -- table for decoding fixed codes");
+    puts("     * Generated automatically by makefixed().");
+    puts("     */");
+    puts("");
+    puts("    /* WARNING: this file should *not* be used by applications.");
+    puts("       It is part of the implementation of this library and is");
+    puts("       subject to change. Applications should only use zlib.h.");
+    puts("     */");
+    puts("");
+    size = 1U << 9;
+    printf("    static const code lenfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 7) == 0) printf("\n        ");
+        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+               state.lencode[low].bits, state.lencode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n    };");
+    size = 1U << 5;
+    printf("\n    static const code distfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 6) == 0) printf("\n        ");
+        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+               state.distcode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n    };");
+}
+#endif /* MAKEFIXED */
+
+/*
+   Update the window with the last wsize (normally 32K) bytes written before
+   returning.  If window does not exist yet, create it.  This is only called
+   when a window is already in use, or when output has been written during this
+   inflate call, but the end of the deflate stream has not been reached yet.
+   It is also called to create a window for dictionary data when a dictionary
+   is loaded.
+
+   Providing output buffers larger than 32K to inflate() should provide a speed
+   advantage, since only the last 32K of output is copied to the sliding window
+   upon return from inflate(), and since all distances after the first 32K of
+   output will fall in the output data, making match copies simpler and faster.
+   The advantage may be dependent on the size of the processor's data caches.
+ */
+local int updatewindow(
+    z_streamp strm,
+    const Bytef *end,
+    unsigned copy)
+{
+    struct inflate_state FAR *state;
+    unsigned dist;
+
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* if it hasn't been done already, allocate space for the window */
+    if (state->window == Z_NULL) {
+        state->window = (unsigned char FAR *)
+                        ZALLOC(strm, 1U << state->wbits,
+                               sizeof(unsigned char));
+        if (state->window == Z_NULL) return 1;
+    }
+
+    /* if window not in use yet, initialize */
+    if (state->wsize == 0) {
+        state->wsize = 1U << state->wbits;
+        state->wnext = 0;
+        state->whave = 0;
+    }
+
+    /* copy state->wsize or less output bytes into the circular window */
+    if (copy >= state->wsize) {
+        zmemcpy(state->window, end - state->wsize, state->wsize);
+        state->wnext = 0;
+        state->whave = state->wsize;
+    }
+    else {
+        dist = state->wsize - state->wnext;
+        if (dist > copy) dist = copy;
+        zmemcpy(state->window + state->wnext, end - copy, dist);
+        copy -= dist;
+        if (copy) {
+            zmemcpy(state->window, end - copy, copy);
+            state->wnext = copy;
+            state->whave = state->wsize;
+        }
+        else {
+            state->wnext += dist;
+            if (state->wnext == state->wsize) state->wnext = 0;
+            if (state->whave < state->wsize) state->whave += dist;
+        }
+    }
+    return 0;
+}
+
+/* Macros for inflate(): */
+
+/* check function to use adler32() for zlib or crc32() for gzip */
+#ifdef GUNZIP
+#  define UPDATE_CHECK(check, buf, len) \
+    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+#  define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
+#endif
+
+/* check macros for header crc */
+#ifdef GUNZIP
+#  define CRC2(check, word) \
+    do { \
+        hbuf[0] = (unsigned char)(word); \
+        hbuf[1] = (unsigned char)((word) >> 8); \
+        check = crc32(check, hbuf, 2); \
+    } while (0)
+
+#  define CRC4(check, word) \
+    do { \
+        hbuf[0] = (unsigned char)(word); \
+        hbuf[1] = (unsigned char)((word) >> 8); \
+        hbuf[2] = (unsigned char)((word) >> 16); \
+        hbuf[3] = (unsigned char)((word) >> 24); \
+        check = crc32(check, hbuf, 4); \
+    } while (0)
+#endif
+
+/* Load registers with state in inflate() for speed */
+#define LOAD() \
+    do { \
+        put = strm->next_out; \
+        left = strm->avail_out; \
+        next = strm->next_in; \
+        have = strm->avail_in; \
+        hold = state->hold; \
+        bits = state->bits; \
+    } while (0)
+
+/* Restore state from registers in inflate() */
+#define RESTORE() \
+    do { \
+        strm->next_out = put; \
+        strm->avail_out = left; \
+        strm->next_in = next; \
+        strm->avail_in = have; \
+        state->hold = hold; \
+        state->bits = bits; \
+    } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+    do { \
+        hold = 0; \
+        bits = 0; \
+    } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflate()
+   if there is no input available. */
+#define PULLBYTE() \
+    do { \
+        if (have == 0) goto inf_leave; \
+        have--; \
+        hold += (unsigned long)(*next++) << bits; \
+        bits += 8; \
+    } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator.  If there is
+   not enough available input to do that, then return from inflate(). */
+#define NEEDBITS(n) \
+    do { \
+        while (bits < (unsigned)(n)) \
+            PULLBYTE(); \
+    } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+    ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+    do { \
+        hold >>= (n); \
+        bits -= (unsigned)(n); \
+    } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+    do { \
+        hold >>= bits & 7; \
+        bits -= bits & 7; \
+    } while (0)
+
+/*
+   inflate() uses a state machine to process as much input data and generate as
+   much output data as possible before returning.  The state machine is
+   structured roughly as follows:
+
+    for (;;) switch (state) {
+    ...
+    case STATEn:
+        if (not enough input data or output space to make progress)
+            return;
+        ... make progress ...
+        state = STATEm;
         break;
-      }
-      Tracev((stderr, "inflate: zlib check ok\n"));
-      z->state->mode = DONE;
-      /* fall through */
-    case DONE:
-      return Z_STREAM_END;
-    case BAD:
-      return Z_DATA_ERROR;
-    default:
-      return Z_STREAM_ERROR;
-  }
-#ifdef NEED_DUMMY_RETURN
-  return Z_STREAM_ERROR;  /* Some dumb compilers complain without this */
+    ...
+    }
+
+   so when inflate() is called again, the same case is attempted again, and
+   if the appropriate resources are provided, the machine proceeds to the
+   next state.  The NEEDBITS() macro is usually the way the state evaluates
+   whether it can proceed or should return.  NEEDBITS() does the return if
+   the requested bits are not available.  The typical use of the BITS macros
+   is:
+
+        NEEDBITS(n);
+        ... do something with BITS(n) ...
+        DROPBITS(n);
+
+   where NEEDBITS(n) either returns from inflate() if there isn't enough
+   input left to load n bits into the accumulator, or it continues.  BITS(n)
+   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
+   the low n bits off the accumulator.  INITBITS() clears the accumulator
+   and sets the number of available bits to zero.  BYTEBITS() discards just
+   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
+   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
+
+   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
+   if there is no input available.  The decoding of variable length codes uses
+   PULLBYTE() directly in order to pull just enough bytes to decode the next
+   code, and no more.
+
+   Some states loop until they get enough input, making sure that enough
+   state information is maintained to continue the loop where it left off
+   if NEEDBITS() returns in the loop.  For example, want, need, and keep
+   would all have to actually be part of the saved state in case NEEDBITS()
+   returns:
+
+    case STATEw:
+        while (want < need) {
+            NEEDBITS(n);
+            keep[want++] = BITS(n);
+            DROPBITS(n);
+        }
+        state = STATEx;
+    case STATEx:
+
+   As shown above, if the next state is also the next case, then the break
+   is omitted.
+
+   A state may also return if there is not enough output space available to
+   complete that state.  Those states are copying stored data, writing a
+   literal byte, and copying a matching string.
+
+   When returning, a "goto inf_leave" is used to update the total counters,
+   update the check value, and determine whether any progress has been made
+   during that inflate() call in order to return the proper return code.
+   Progress is defined as a change in either strm->avail_in or strm->avail_out.
+   When there is a window, goto inf_leave will update the window with the last
+   output written.  If a goto inf_leave occurs in the middle of decompression
+   and there is no window currently, goto inf_leave will create one and copy
+   output to the window for the next call of inflate().
+
+   In this implementation, the flush parameter of inflate() only affects the
+   return code (per zlib.h).  inflate() always writes as much as possible to
+   strm->next_out, given the space available and the provided input--the effect
+   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
+   the allocation of and copying into a sliding window until necessary, which
+   provides the effect documented in zlib.h for Z_FINISH when the entire input
+   stream available.  So the only thing the flush parameter actually does is:
+   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
+   will return Z_BUF_ERROR if it has not reached the end of the stream.
+ */
+
+int ZEXPORT inflate(
+    z_streamp strm,
+    int flush)
+{
+    struct inflate_state FAR *state;
+    z_const unsigned char FAR *next;    /* next input */
+    unsigned char FAR *put;     /* next output */
+    unsigned have, left;        /* available input and output */
+    unsigned long hold;         /* bit buffer */
+    unsigned bits;              /* bits in bit buffer */
+    unsigned in, out;           /* save starting available input and output */
+    unsigned copy;              /* number of stored or match bytes to copy */
+    unsigned char FAR *from;    /* where to copy match bytes from */
+    code here;                  /* current decoding table entry */
+    code last;                  /* parent table entry */
+    unsigned len;               /* length to copy for repeats, bits to drop */
+    int ret;                    /* return code */
+#ifdef GUNZIP
+    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
 #endif
+    static const unsigned short order[19] = /* permutation of code lengths */
+        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+    if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
+        (strm->next_in == Z_NULL && strm->avail_in != 0))
+        return Z_STREAM_ERROR;
+
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
+    LOAD();
+    in = have;
+    out = left;
+    ret = Z_OK;
+    for (;;)
+        switch (state->mode) {
+        case HEAD:
+            if (state->wrap == 0) {
+                state->mode = TYPEDO;
+                break;
+            }
+            NEEDBITS(16);
+#ifdef GUNZIP
+            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
+                if (state->wbits == 0)
+                    state->wbits = 15;
+                state->check = crc32(0L, Z_NULL, 0);
+                CRC2(state->check, hold);
+                INITBITS();
+                state->mode = FLAGS;
+                break;
+            }
+            if (state->head != Z_NULL)
+                state->head->done = -1;
+            if (!(state->wrap & 1) ||   /* check if zlib header allowed */
+#else
+            if (
+#endif
+                ((BITS(8) << 8) + (hold >> 8)) % 31) {
+                strm->msg = (char *)"incorrect header check";
+                state->mode = BAD;
+                break;
+            }
+            if (BITS(4) != Z_DEFLATED) {
+                strm->msg = (char *)"unknown compression method";
+                state->mode = BAD;
+                break;
+            }
+            DROPBITS(4);
+            len = BITS(4) + 8;
+            if (state->wbits == 0)
+                state->wbits = len;
+            if (len > 15 || len > state->wbits) {
+                strm->msg = (char *)"invalid window size";
+                state->mode = BAD;
+                break;
+            }
+            state->dmax = 1U << len;
+            state->flags = 0;               /* indicate zlib header */
+            Tracev((stderr, "inflate:   zlib header ok\n"));
+            strm->adler = state->check = adler32(0L, Z_NULL, 0);
+            state->mode = hold & 0x200 ? DICTID : TYPE;
+            INITBITS();
+            break;
+#ifdef GUNZIP
+        case FLAGS:
+            NEEDBITS(16);
+            state->flags = (int)(hold);
+            if ((state->flags & 0xff) != Z_DEFLATED) {
+                strm->msg = (char *)"unknown compression method";
+                state->mode = BAD;
+                break;
+            }
+            if (state->flags & 0xe000) {
+                strm->msg = (char *)"unknown header flags set";
+                state->mode = BAD;
+                break;
+            }
+            if (state->head != Z_NULL)
+                state->head->text = (int)((hold >> 8) & 1);
+            if ((state->flags & 0x0200) && (state->wrap & 4))
+                CRC2(state->check, hold);
+            INITBITS();
+            state->mode = TIME;
+                /* fallthrough */
+        case TIME:
+            NEEDBITS(32);
+            if (state->head != Z_NULL)
+                state->head->time = hold;
+            if ((state->flags & 0x0200) && (state->wrap & 4))
+                CRC4(state->check, hold);
+            INITBITS();
+            state->mode = OS;
+                /* fallthrough */
+        case OS:
+            NEEDBITS(16);
+            if (state->head != Z_NULL) {
+                state->head->xflags = (int)(hold & 0xff);
+                state->head->os = (int)(hold >> 8);
+            }
+            if ((state->flags & 0x0200) && (state->wrap & 4))
+                CRC2(state->check, hold);
+            INITBITS();
+            state->mode = EXLEN;
+                /* fallthrough */
+        case EXLEN:
+            if (state->flags & 0x0400) {
+                NEEDBITS(16);
+                state->length = (unsigned)(hold);
+                if (state->head != Z_NULL)
+                    state->head->extra_len = (unsigned)hold;
+                if ((state->flags & 0x0200) && (state->wrap & 4))
+                    CRC2(state->check, hold);
+                INITBITS();
+            }
+            else if (state->head != Z_NULL)
+                state->head->extra = Z_NULL;
+            state->mode = EXTRA;
+                /* fallthrough */
+        case EXTRA:
+            if (state->flags & 0x0400) {
+                copy = state->length;
+                if (copy > have) copy = have;
+                if (copy) {
+                    if (state->head != Z_NULL &&
+                        state->head->extra != Z_NULL) {
+                        len = state->head->extra_len - state->length;
+                        zmemcpy(state->head->extra + len, next,
+                                len + copy > state->head->extra_max ?
+                                state->head->extra_max - len : copy);
+                    }
+                    if ((state->flags & 0x0200) && (state->wrap & 4))
+                        state->check = crc32(state->check, next, copy);
+                    have -= copy;
+                    next += copy;
+                    state->length -= copy;
+                }
+                if (state->length) goto inf_leave;
+            }
+            state->length = 0;
+            state->mode = NAME;
+                /* fallthrough */
+        case NAME:
+            if (state->flags & 0x0800) {
+                if (have == 0) goto inf_leave;
+                copy = 0;
+                do {
+                    len = (unsigned)(next[copy++]);
+                    if (state->head != Z_NULL &&
+                            state->head->name != Z_NULL &&
+                            state->length < state->head->name_max)
+                        state->head->name[state->length++] = (Bytef)len;
+                } while (len && copy < have);
+                if ((state->flags & 0x0200) && (state->wrap & 4))
+                    state->check = crc32(state->check, next, copy);
+                have -= copy;
+                next += copy;
+                if (len) goto inf_leave;
+            }
+            else if (state->head != Z_NULL)
+                state->head->name = Z_NULL;
+            state->length = 0;
+            state->mode = COMMENT;
+                /* fallthrough */
+        case COMMENT:
+            if (state->flags & 0x1000) {
+                if (have == 0) goto inf_leave;
+                copy = 0;
+                do {
+                    len = (unsigned)(next[copy++]);
+                    if (state->head != Z_NULL &&
+                            state->head->comment != Z_NULL &&
+                            state->length < state->head->comm_max)
+                        state->head->comment[state->length++] = (Bytef)len;
+                } while (len && copy < have);
+                if ((state->flags & 0x0200) && (state->wrap & 4))
+                    state->check = crc32(state->check, next, copy);
+                have -= copy;
+                next += copy;
+                if (len) goto inf_leave;
+            }
+            else if (state->head != Z_NULL)
+                state->head->comment = Z_NULL;
+            state->mode = HCRC;
+                /* fallthrough */
+        case HCRC:
+            if (state->flags & 0x0200) {
+                NEEDBITS(16);
+                if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
+                    strm->msg = (char *)"header crc mismatch";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+            }
+            if (state->head != Z_NULL) {
+                state->head->hcrc = (int)((state->flags >> 9) & 1);
+                state->head->done = 1;
+            }
+            strm->adler = state->check = crc32(0L, Z_NULL, 0);
+            state->mode = TYPE;
+            break;
+#endif
+        case DICTID:
+            NEEDBITS(32);
+            strm->adler = state->check = ZSWAP32(hold);
+            INITBITS();
+            state->mode = DICT;
+                /* fallthrough */
+        case DICT:
+            if (state->havedict == 0) {
+                RESTORE();
+                return Z_NEED_DICT;
+            }
+            strm->adler = state->check = adler32(0L, Z_NULL, 0);
+            state->mode = TYPE;
+                /* fallthrough */
+        case TYPE:
+            if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+                /* fallthrough */
+        case TYPEDO:
+            if (state->last) {
+                BYTEBITS();
+                state->mode = CHECK;
+                break;
+            }
+            NEEDBITS(3);
+            state->last = BITS(1);
+            DROPBITS(1);
+            switch (BITS(2)) {
+            case 0:                             /* stored block */
+                Tracev((stderr, "inflate:     stored block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = STORED;
+                break;
+            case 1:                             /* fixed block */
+                fixedtables(state);
+                Tracev((stderr, "inflate:     fixed codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = LEN_;             /* decode codes */
+                if (flush == Z_TREES) {
+                    DROPBITS(2);
+                    goto inf_leave;
+                }
+                break;
+            case 2:                             /* dynamic block */
+                Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = TABLE;
+                break;
+            case 3:
+                strm->msg = (char *)"invalid block type";
+                state->mode = BAD;
+            }
+            DROPBITS(2);
+            break;
+        case STORED:
+            BYTEBITS();                         /* go to byte boundary */
+            NEEDBITS(32);
+            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                strm->msg = (char *)"invalid stored block lengths";
+                state->mode = BAD;
+                break;
+            }
+            state->length = (unsigned)hold & 0xffff;
+            Tracev((stderr, "inflate:       stored length %u\n",
+                    state->length));
+            INITBITS();
+            state->mode = COPY_;
+            if (flush == Z_TREES) goto inf_leave;
+                /* fallthrough */
+        case COPY_:
+            state->mode = COPY;
+                /* fallthrough */
+        case COPY:
+            copy = state->length;
+            if (copy) {
+                if (copy > have) copy = have;
+                if (copy > left) copy = left;
+                if (copy == 0) goto inf_leave;
+                zmemcpy(put, next, copy);
+                have -= copy;
+                next += copy;
+                left -= copy;
+                put += copy;
+                state->length -= copy;
+                break;
+            }
+            Tracev((stderr, "inflate:       stored end\n"));
+            state->mode = TYPE;
+            break;
+        case TABLE:
+            NEEDBITS(14);
+            state->nlen = BITS(5) + 257;
+            DROPBITS(5);
+            state->ndist = BITS(5) + 1;
+            DROPBITS(5);
+            state->ncode = BITS(4) + 4;
+            DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+            if (state->nlen > 286 || state->ndist > 30) {
+                strm->msg = (char *)"too many length or distance symbols";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracev((stderr, "inflate:       table sizes ok\n"));
+            state->have = 0;
+            state->mode = LENLENS;
+                /* fallthrough */
+        case LENLENS:
+            while (state->have < state->ncode) {
+                NEEDBITS(3);
+                state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                DROPBITS(3);
+            }
+            while (state->have < 19)
+                state->lens[order[state->have++]] = 0;
+            state->next = state->codes;
+            state->lencode = (const code FAR *)(state->next);
+            state->lenbits = 7;
+            ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid code lengths set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       code lengths ok\n"));
+            state->have = 0;
+            state->mode = CODELENS;
+                /* fallthrough */
+        case CODELENS:
+            while (state->have < state->nlen + state->ndist) {
+                for (;;) {
+                    here = state->lencode[BITS(state->lenbits)];
+                    if ((unsigned)(here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                if (here.val < 16) {
+                    DROPBITS(here.bits);
+                    state->lens[state->have++] = here.val;
+                }
+                else {
+                    if (here.val == 16) {
+                        NEEDBITS(here.bits + 2);
+                        DROPBITS(here.bits);
+                        if (state->have == 0) {
+                            strm->msg = (char *)"invalid bit length repeat";
+                            state->mode = BAD;
+                            break;
+                        }
+                        len = state->lens[state->have - 1];
+                        copy = 3 + BITS(2);
+                        DROPBITS(2);
+                    }
+                    else if (here.val == 17) {
+                        NEEDBITS(here.bits + 3);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 3 + BITS(3);
+                        DROPBITS(3);
+                    }
+                    else {
+                        NEEDBITS(here.bits + 7);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 11 + BITS(7);
+                        DROPBITS(7);
+                    }
+                    if (state->have + copy > state->nlen + state->ndist) {
+                        strm->msg = (char *)"invalid bit length repeat";
+                        state->mode = BAD;
+                        break;
+                    }
+                    while (copy--)
+                        state->lens[state->have++] = (unsigned short)len;
+                }
+            }
+
+            /* handle error breaks in while */
+            if (state->mode == BAD) break;
+
+            /* check for end-of-block code (better have one) */
+            if (state->lens[256] == 0) {
+                strm->msg = (char *)"invalid code -- missing end-of-block";
+                state->mode = BAD;
+                break;
+            }
+
+            /* build code tables -- note: do not change the lenbits or distbits
+               values here (9 and 6) without reading the comments in inftrees.h
+               concerning the ENOUGH constants, which depend on those values */
+            state->next = state->codes;
+            state->lencode = (const code FAR *)(state->next);
+            state->lenbits = 9;
+            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid literal/lengths set";
+                state->mode = BAD;
+                break;
+            }
+            state->distcode = (const code FAR *)(state->next);
+            state->distbits = 6;
+            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                            &(state->next), &(state->distbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid distances set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       codes ok\n"));
+            state->mode = LEN_;
+            if (flush == Z_TREES) goto inf_leave;
+                /* fallthrough */
+        case LEN_:
+            state->mode = LEN;
+                /* fallthrough */
+        case LEN:
+            if (have >= 6 && left >= 258) {
+                RESTORE();
+                inflate_fast(strm, out);
+                LOAD();
+                if (state->mode == TYPE)
+                    state->back = -1;
+                break;
+            }
+            state->back = 0;
+            for (;;) {
+                here = state->lencode[BITS(state->lenbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if (here.op && (here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->lencode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+                state->back += last.bits;
+            }
+            DROPBITS(here.bits);
+            state->back += here.bits;
+            state->length = (unsigned)here.val;
+            if ((int)(here.op) == 0) {
+                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                        "inflate:         literal '%c'\n" :
+                        "inflate:         literal 0x%02x\n", here.val));
+                state->mode = LIT;
+                break;
+            }
+            if (here.op & 32) {
+                Tracevv((stderr, "inflate:         end of block\n"));
+                state->back = -1;
+                state->mode = TYPE;
+                break;
+            }
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid literal/length code";
+                state->mode = BAD;
+                break;
+            }
+            state->extra = (unsigned)(here.op) & 15;
+            state->mode = LENEXT;
+                /* fallthrough */
+        case LENEXT:
+            if (state->extra) {
+                NEEDBITS(state->extra);
+                state->length += BITS(state->extra);
+                DROPBITS(state->extra);
+                state->back += state->extra;
+            }
+            Tracevv((stderr, "inflate:         length %u\n", state->length));
+            state->was = state->length;
+            state->mode = DIST;
+                /* fallthrough */
+        case DIST:
+            for (;;) {
+                here = state->distcode[BITS(state->distbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if ((here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->distcode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+                state->back += last.bits;
+            }
+            DROPBITS(here.bits);
+            state->back += here.bits;
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+            state->offset = (unsigned)here.val;
+            state->extra = (unsigned)(here.op) & 15;
+            state->mode = DISTEXT;
+                /* fallthrough */
+        case DISTEXT:
+            if (state->extra) {
+                NEEDBITS(state->extra);
+                state->offset += BITS(state->extra);
+                DROPBITS(state->extra);
+                state->back += state->extra;
+            }
+#ifdef INFLATE_STRICT
+            if (state->offset > state->dmax) {
+                strm->msg = (char *)"invalid distance too far back";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+            state->mode = MATCH;
+                /* fallthrough */
+        case MATCH:
+            if (left == 0) goto inf_leave;
+            copy = out - left;
+            if (state->offset > copy) {         /* copy from window */
+                copy = state->offset - copy;
+                if (copy > state->whave) {
+                    if (state->sane) {
+                        strm->msg = (char *)"invalid distance too far back";
+                        state->mode = BAD;
+                        break;
+                    }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+                    Trace((stderr, "inflate.c too far\n"));
+                    copy -= state->whave;
+                    if (copy > state->length) copy = state->length;
+                    if (copy > left) copy = left;
+                    left -= copy;
+                    state->length -= copy;
+                    do {
+                        *put++ = 0;
+                    } while (--copy);
+                    if (state->length == 0) state->mode = LEN;
+                    break;
+#endif
+                }
+                if (copy > state->wnext) {
+                    copy -= state->wnext;
+                    from = state->window + (state->wsize - copy);
+                }
+                else
+                    from = state->window + (state->wnext - copy);
+                if (copy > state->length) copy = state->length;
+            }
+            else {                              /* copy from output */
+                from = put - state->offset;
+                copy = state->length;
+            }
+            if (copy > left) copy = left;
+            left -= copy;
+            state->length -= copy;
+            do {
+                *put++ = *from++;
+            } while (--copy);
+            if (state->length == 0) state->mode = LEN;
+            break;
+        case LIT:
+            if (left == 0) goto inf_leave;
+            *put++ = (unsigned char)(state->length);
+            left--;
+            state->mode = LEN;
+            break;
+        case CHECK:
+            if (state->wrap) {
+                NEEDBITS(32);
+                out -= left;
+                strm->total_out += out;
+                state->total += out;
+                if ((state->wrap & 4) && out)
+                    strm->adler = state->check =
+                        UPDATE_CHECK(state->check, put - out, out);
+                out = left;
+                if ((state->wrap & 4) && (
+#ifdef GUNZIP
+                     state->flags ? hold :
+#endif
+                     ZSWAP32(hold)) != state->check) {
+                    strm->msg = (char *)"incorrect data check";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+                Tracev((stderr, "inflate:   check matches trailer\n"));
+            }
+#ifdef GUNZIP
+            state->mode = LENGTH;
+                /* fallthrough */
+        case LENGTH:
+            if (state->wrap && state->flags) {
+                NEEDBITS(32);
+                if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
+                    strm->msg = (char *)"incorrect length check";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+                Tracev((stderr, "inflate:   length matches trailer\n"));
+            }
+#endif
+            state->mode = DONE;
+                /* fallthrough */
+        case DONE:
+            ret = Z_STREAM_END;
+            goto inf_leave;
+        case BAD:
+            ret = Z_DATA_ERROR;
+            goto inf_leave;
+        case MEM:
+            return Z_MEM_ERROR;
+        case SYNC:
+                /* fallthrough */
+        default:
+            return Z_STREAM_ERROR;
+        }
+
+    /*
+       Return from inflate(), updating the total counts and the check value.
+       If there was no progress during the inflate() call, return a buffer
+       error.  Call updatewindow() to create and/or update the window state.
+       Note: a memory error from inflate() is non-recoverable.
+     */
+  inf_leave:
+    RESTORE();
+    if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+            (state->mode < CHECK || flush != Z_FINISH)))
+        if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
+            state->mode = MEM;
+            return Z_MEM_ERROR;
+        }
+    in -= strm->avail_in;
+    out -= strm->avail_out;
+    strm->total_in += in;
+    strm->total_out += out;
+    state->total += out;
+    if ((state->wrap & 4) && out)
+        strm->adler = state->check =
+            UPDATE_CHECK(state->check, strm->next_out - out, out);
+    strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
+                      (state->mode == TYPE ? 128 : 0) +
+                      (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+        ret = Z_BUF_ERROR;
+    return ret;
+}
+
+int ZEXPORT inflateEnd(
+    z_streamp strm)
+{
+    struct inflate_state FAR *state;
+    if (inflateStateCheck(strm))
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->window != Z_NULL) ZFREE(strm, state->window);
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+    Tracev((stderr, "inflate: end\n"));
+    return Z_OK;
+}
+
+#ifndef Z_FREETYPE
+
+int ZEXPORT inflateGetDictionary(
+    z_streamp strm,
+    Bytef *dictionary,
+    uInt *dictLength)
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* copy dictionary */
+    if (state->whave && dictionary != Z_NULL) {
+        zmemcpy(dictionary, state->window + state->wnext,
+                state->whave - state->wnext);
+        zmemcpy(dictionary + state->whave - state->wnext,
+                state->window, state->wnext);
+    }
+    if (dictLength != Z_NULL)
+        *dictLength = state->whave;
+    return Z_OK;
+}
+
+int ZEXPORT inflateSetDictionary(
+    z_streamp strm,
+    const Bytef *dictionary,
+    uInt dictLength)
+{
+    struct inflate_state FAR *state;
+    unsigned long dictid;
+    int ret;
+
+    /* check state */
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->wrap != 0 && state->mode != DICT)
+        return Z_STREAM_ERROR;
+
+    /* check for correct dictionary identifier */
+    if (state->mode == DICT) {
+        dictid = adler32(0L, Z_NULL, 0);
+        dictid = adler32(dictid, dictionary, dictLength);
+        if (dictid != state->check)
+            return Z_DATA_ERROR;
+    }
+
+    /* copy dictionary to window using updatewindow(), which will amend the
+       existing dictionary if appropriate */
+    ret = updatewindow(strm, dictionary + dictLength, dictLength);
+    if (ret) {
+        state->mode = MEM;
+        return Z_MEM_ERROR;
+    }
+    state->havedict = 1;
+    Tracev((stderr, "inflate:   dictionary set\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateGetHeader(
+    z_streamp strm,
+    gz_headerp head)
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+    /* save header structure */
+    state->head = head;
+    head->done = 0;
+    return Z_OK;
+}
+
+/*
+   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
+   or when out of input.  When called, *have is the number of pattern bytes
+   found in order so far, in 0..3.  On return *have is updated to the new
+   state.  If on return *have equals four, then the pattern was found and the
+   return value is how many bytes were read including the last byte of the
+   pattern.  If *have is less than four, then the pattern has not been found
+   yet and the return value is len.  In the latter case, syncsearch() can be
+   called again with more data and the *have state.  *have is initialized to
+   zero for the first call.
+ */
+local unsigned syncsearch(
+    unsigned FAR *have,
+    const unsigned char FAR *buf,
+    unsigned len)
+{
+    unsigned got;
+    unsigned next;
+
+    got = *have;
+    next = 0;
+    while (next < len && got < 4) {
+        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+            got++;
+        else if (buf[next])
+            got = 0;
+        else
+            got = 4 - got;
+        next++;
+    }
+    *have = got;
+    return next;
+}
+
+int ZEXPORT inflateSync(
+    z_streamp strm)
+{
+    unsigned len;               /* number of bytes to look at or looked at */
+    int flags;                  /* temporary to save header status */
+    unsigned long in, out;      /* temporary to save total_in and total_out */
+    unsigned char buf[4];       /* to restore bit buffer to byte string */
+    struct inflate_state FAR *state;
+
+    /* check parameters */
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+    /* if first time, start search in bit buffer */
+    if (state->mode != SYNC) {
+        state->mode = SYNC;
+        state->hold <<= state->bits & 7;
+        state->bits -= state->bits & 7;
+        len = 0;
+        while (state->bits >= 8) {
+            buf[len++] = (unsigned char)(state->hold);
+            state->hold >>= 8;
+            state->bits -= 8;
+        }
+        state->have = 0;
+        syncsearch(&(state->have), buf, len);
+    }
+
+    /* search available input */
+    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+    strm->avail_in -= len;
+    strm->next_in += len;
+    strm->total_in += len;
+
+    /* return no joy or set up to restart inflate() on a new block */
+    if (state->have != 4) return Z_DATA_ERROR;
+    if (state->flags == -1)
+        state->wrap = 0;    /* if no header yet, treat as raw */
+    else
+        state->wrap &= ~4;  /* no point in computing a check value now */
+    flags = state->flags;
+    in = strm->total_in;  out = strm->total_out;
+    inflateReset(strm);
+    strm->total_in = in;  strm->total_out = out;
+    state->flags = flags;
+    state->mode = TYPE;
+    return Z_OK;
+}
+
+#endif  /* !Z_FREETYPE */
+
+/*
+   Returns true if inflate is currently at the end of a block generated by
+   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+   implementation to provide an additional safety check. PPP uses
+   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
+   block. When decompressing, PPP checks that at the end of input packet,
+   inflate is waiting for these length bytes.
+ */
+int ZEXPORT inflateSyncPoint(
+    z_streamp strm)
+{
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    return state->mode == STORED && state->bits == 0;
+}
+
+#ifndef Z_FREETYPE
+
+int ZEXPORT inflateCopy(
+    z_streamp dest,
+    z_streamp source)
+{
+    struct inflate_state FAR *state;
+    struct inflate_state FAR *copy;
+    unsigned char FAR *window;
+    unsigned wsize;
+
+    /* check input */
+    if (inflateStateCheck(source) || dest == Z_NULL)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)source->state;
+
+    /* allocate space */
+    copy = (struct inflate_state FAR *)
+           ZALLOC(source, 1, sizeof(struct inflate_state));
+    if (copy == Z_NULL) return Z_MEM_ERROR;
+    window = Z_NULL;
+    if (state->window != Z_NULL) {
+        window = (unsigned char FAR *)
+                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+        if (window == Z_NULL) {
+            ZFREE(source, copy);
+            return Z_MEM_ERROR;
+        }
+    }
+
+    /* copy state */
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+    zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+    copy->strm = dest;
+    if (state->lencode >= state->codes &&
+        state->lencode <= state->codes + ENOUGH - 1) {
+        copy->lencode = copy->codes + (state->lencode - state->codes);
+        copy->distcode = copy->codes + (state->distcode - state->codes);
+    }
+    copy->next = copy->codes + (state->next - state->codes);
+    if (window != Z_NULL) {
+        wsize = 1U << state->wbits;
+        zmemcpy(window, state->window, wsize);
+    }
+    copy->window = window;
+    dest->state = (struct internal_state FAR *)copy;
+    return Z_OK;
+}
+
+#endif  /* !Z_FREETYPE */
+
+int ZEXPORT inflateUndermine(
+    z_streamp strm,
+    int subvert)
+{
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+    state->sane = !subvert;
+    return Z_OK;
+#else
+    (void)subvert;
+    state->sane = 1;
+    return Z_DATA_ERROR;
+#endif
+}
+
+int ZEXPORT inflateValidate(
+    z_streamp strm,
+    int check)
+{
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (check && state->wrap)
+        state->wrap |= 4;
+    else
+        state->wrap &= ~4;
+    return Z_OK;
+}
+
+#ifndef Z_FREETYPE
+
+long ZEXPORT inflateMark(
+    z_streamp strm)
+{
+    struct inflate_state FAR *state;
+
+    if (inflateStateCheck(strm))
+        return -(1L << 16);
+    state = (struct inflate_state FAR *)strm->state;
+    return (long)(((unsigned long)((long)state->back)) << 16) +
+        (state->mode == COPY ? state->length :
+            (state->mode == MATCH ? state->was - state->length : 0));
+}
+
+unsigned long ZEXPORT inflateCodesUsed(
+    z_streamp strm)
+{
+    struct inflate_state FAR *state;
+    if (inflateStateCheck(strm)) return (unsigned long)-1;
+    state = (struct inflate_state FAR *)strm->state;
+    return (unsigned long)(state->next - state->codes);
 }
 
+#endif  /* !Z_FREETYPE */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inflate.h b/qtbase/src/3rdparty/freetype/src/gzip/inflate.h
new file mode 100644
index 0000000000..c6f5a52e16
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inflate.h
@@ -0,0 +1,131 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2019 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifndef INFLATE_H
+#define INFLATE_H
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in
+   the crc code when it is not needed.  For shared libraries, gzip decoding
+   should be left enabled. */
+#ifndef NO_GZIP
+#  define GUNZIP
+#endif
+
+/* Possible inflate modes between inflate() calls */
+typedef enum {
+    HEAD = 16180,   /* i: waiting for magic header */
+    FLAGS,      /* i: waiting for method and flags (gzip) */
+    TIME,       /* i: waiting for modification time (gzip) */
+    OS,         /* i: waiting for extra flags and operating system (gzip) */
+    EXLEN,      /* i: waiting for extra length (gzip) */
+    EXTRA,      /* i: waiting for extra bytes (gzip) */
+    NAME,       /* i: waiting for end of file name (gzip) */
+    COMMENT,    /* i: waiting for end of comment (gzip) */
+    HCRC,       /* i: waiting for header crc (gzip) */
+    DICTID,     /* i: waiting for dictionary check value */
+    DICT,       /* waiting for inflateSetDictionary() call */
+        TYPE,       /* i: waiting for type bits, including last-flag bit */
+        TYPEDO,     /* i: same, but skip check to exit inflate on new block */
+        STORED,     /* i: waiting for stored size (length and complement) */
+        COPY_,      /* i/o: same as COPY below, but only first time in */
+        COPY,       /* i/o: waiting for input or output to copy stored block */
+        TABLE,      /* i: waiting for dynamic block table lengths */
+        LENLENS,    /* i: waiting for code length code lengths */
+        CODELENS,   /* i: waiting for length/lit and distance code lengths */
+            LEN_,       /* i: same as LEN below, but only first time in */
+            LEN,        /* i: waiting for length/lit/eob code */
+            LENEXT,     /* i: waiting for length extra bits */
+            DIST,       /* i: waiting for distance code */
+            DISTEXT,    /* i: waiting for distance extra bits */
+            MATCH,      /* o: waiting for output space to copy string */
+            LIT,        /* o: waiting for output space to write literal */
+    CHECK,      /* i: waiting for 32-bit check value */
+    LENGTH,     /* i: waiting for 32-bit length (gzip) */
+    DONE,       /* finished check, done -- remain here until reset */
+    BAD,        /* got a data error -- remain here until reset */
+    MEM,        /* got an inflate() memory error -- remain here until reset */
+    SYNC        /* looking for synchronization bytes to restart inflate() */
+} inflate_mode;
+
+/*
+    State transitions between above modes -
+
+    (most modes can go to BAD or MEM on error -- not shown for clarity)
+
+    Process header:
+        HEAD -> (gzip) or (zlib) or (raw)
+        (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
+                  HCRC -> TYPE
+        (zlib) -> DICTID or TYPE
+        DICTID -> DICT -> TYPE
+        (raw) -> TYPEDO
+    Read deflate blocks:
+            TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
+            STORED -> COPY_ -> COPY -> TYPE
+            TABLE -> LENLENS -> CODELENS -> LEN_
+            LEN_ -> LEN
+    Read deflate codes in fixed or dynamic block:
+                LEN -> LENEXT or LIT or TYPE
+                LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+                LIT -> LEN
+    Process trailer:
+        CHECK -> LENGTH -> DONE
+ */
+
+/* State maintained between inflate() calls -- approximately 7K bytes, not
+   including the allocated sliding window, which is up to 32K bytes. */
+struct inflate_state {
+    z_streamp strm;             /* pointer back to this zlib stream */
+    inflate_mode mode;          /* current inflate mode */
+    int last;                   /* true if processing last block */
+    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip,
+                                   bit 2 true to validate check value */
+    int havedict;               /* true if dictionary provided */
+    int flags;                  /* gzip header method and flags, 0 if zlib, or
+                                   -1 if raw or no header yet */
+    unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
+    unsigned long check;        /* protected copy of check value */
+    unsigned long total;        /* protected copy of output count */
+    gz_headerp head;            /* where to save gzip header information */
+        /* sliding window */
+    unsigned wbits;             /* log base 2 of requested window size */
+    unsigned wsize;             /* window size or zero if not using window */
+    unsigned whave;             /* valid bytes in the window */
+    unsigned wnext;             /* window write index */
+    unsigned char FAR *window;  /* allocated sliding window, if needed */
+        /* bit accumulator */
+    unsigned long hold;         /* input bit accumulator */
+    unsigned bits;              /* number of bits in "in" */
+        /* for string and stored block copying */
+    unsigned length;            /* literal or length of data to copy */
+    unsigned offset;            /* distance back to copy string from */
+        /* for table and code decoding */
+    unsigned extra;             /* extra bits needed */
+        /* fixed and dynamic code tables */
+    code const FAR *lencode;    /* starting table for length/literal codes */
+    code const FAR *distcode;   /* starting table for distance codes */
+    unsigned lenbits;           /* index bits for lencode */
+    unsigned distbits;          /* index bits for distcode */
+        /* dynamic table building */
+    unsigned ncode;             /* number of code length code lengths */
+    unsigned nlen;              /* number of length code lengths */
+    unsigned ndist;             /* number of distance code lengths */
+    unsigned have;              /* number of code lengths in lens[] */
+    code FAR *next;             /* next available space in codes[] */
+    unsigned short lens[320];   /* temporary storage for code lengths */
+    unsigned short work[288];   /* work area for code table building */
+    code codes[ENOUGH];         /* space for code tables */
+    int sane;                   /* if false, allow invalid distance too far */
+    int back;                   /* bits back of last unprocessed length/lit */
+    unsigned was;               /* initial length of match */
+};
+
+#endif  /* INFLATE_H */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inftrees.c b/qtbase/src/3rdparty/freetype/src/gzip/inftrees.c
index 56f52b1701..0b58b29b1b 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/inftrees.c
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inftrees.c
@@ -1,20 +1,15 @@
 /* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2002 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 #include "zutil.h"
 #include "inftrees.h"
 
-#if !defined(BUILDFIXED) && !defined(STDC)
-#  define BUILDFIXED   /* non ANSI compilers may not accept inffixed.h */
-#endif
+#define MAXBITS 15
 
-
-#if 0
-local const char inflate_copyright[] =
-   " inflate 1.1.4 Copyright 1995-2002 Mark Adler ";
-#endif
+const char inflate_copyright[] =
+   " inflate 1.2.12 Copyright 1995-2022 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -22,447 +17,288 @@ local const char inflate_copyright[] =
   copyright string in the executable of your product.
  */
 
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-
-local int huft_build OF((
-    uIntf *,            /* code lengths in bits */
-    uInt,               /* number of codes */
-    uInt,               /* number of "simple" codes */
-    const uIntf *,      /* list of base values for non-simple codes */
-    const uIntf *,      /* list of extra bits for non-simple codes */
-    inflate_huft * FAR*,/* result: starting table */
-    uIntf *,            /* maximum lookup bits (returns actual) */
-    inflate_huft *,     /* space for trees */
-    uInt *,             /* hufts used in space */
-    uIntf * ));         /* space for values */
-
-/* Tables for deflate from PKZIP's appnote.txt. */
-local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
+/*
+   Build a set of tables to decode the provided canonical Huffman code.
+   The code lengths are lens[0..codes-1].  The result starts at *table,
+   whose indices are 0..2^bits-1.  work is a writable array of at least
+   lens shorts, which is used as a work area.  type is the type of code
+   to be generated, CODES, LENS, or DISTS.  On return, zero is success,
+   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
+   on return points to the next available entry's address.  bits is the
+   requested root table index bits, and on return it is the actual root
+   table index bits.  It will differ if the request is greater than the
+   longest code or if it is less than the shortest code.
+ */
+int ZLIB_INTERNAL inflate_table(
+    codetype type,
+    unsigned short FAR *lens,
+    unsigned codes,
+    code FAR * FAR *table,
+    unsigned FAR *bits,
+    unsigned short FAR *work)
+{
+    unsigned len;               /* a code's length in bits */
+    unsigned sym;               /* index of code symbols */
+    unsigned min, max;          /* minimum and maximum code lengths */
+    unsigned root;              /* number of index bits for root table */
+    unsigned curr;              /* number of index bits for current table */
+    unsigned drop;              /* code bits to drop for sub-table */
+    int left;                   /* number of prefix codes available */
+    unsigned used;              /* code entries in table used */
+    unsigned huff;              /* Huffman code */
+    unsigned incr;              /* for incrementing code, index */
+    unsigned fill;              /* index for replicating entries */
+    unsigned low;               /* low bits for current root entry */
+    unsigned mask;              /* mask for low root bits */
+    code here;                  /* table entry for duplication */
+    code FAR *next;             /* next available space in table */
+    const unsigned short FAR *base;     /* base value table to use */
+    const unsigned short FAR *extra;    /* extra bits table to use */
+    unsigned match;             /* use base and extra for symbol >= match */
+    unsigned short count[MAXBITS+1];    /* number of codes of each length */
+    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
+    static const unsigned short lbase[31] = { /* Length codes 257..285 base */
         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
-        /* see note #13 above about 258 */
-local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
-        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
-        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
-local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
+    static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202};
+    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
-        8193, 12289, 16385, 24577};
-local const uInt cpdext[30] = { /* Extra bits for distance codes */
-        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
-        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
-        12, 12, 13, 13};
-
-/*
-   Huffman code decoding is performed using a multi-level table lookup.
-   The fastest way to decode is to simply build a lookup table whose
-   size is determined by the longest code.  However, the time it takes
-   to build this table can also be a factor if the data being decoded
-   is not very long.  The most common codes are necessarily the
-   shortest codes, so those codes dominate the decoding time, and hence
-   the speed.  The idea is you can have a shorter table that decodes the
-   shorter, more probable codes, and then point to subsidiary tables for
-   the longer codes.  The time it costs to decode the longer codes is
-   then traded against the time it takes to make longer tables.
-
-   This results of this trade are in the variables lbits and dbits
-   below.  lbits is the number of bits the first level table for literal/
-   length codes can decode in one step, and dbits is the same thing for
-   the distance codes.  Subsequent tables are also less than or equal to
-   those sizes.  These values may be adjusted either when all of the
-   codes are shorter than that, in which case the longest code length in
-   bits is used, or when the shortest code is *longer* than the requested
-   table size, in which case the length of the shortest code in bits is
-   used.
-
-   There are two different values for the two tables, since they code a
-   different number of possibilities each.  The literal/length table
-   codes 286 possible values, or in a flat code, a little over eight
-   bits.  The distance table codes 30 possible values, or a little less
-   than five bits, flat.  The optimum values for speed end up being
-   about one bit more than those, so lbits is 8+1 and dbits is 5+1.
-   The optimum values may differ though from machine to machine, and
-   possibly even between compilers.  Your mileage may vary.
- */
-
-
-/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
-#define BMAX 15         /* maximum bit length of any code */
-
-local int huft_build( /* b, n, s, d, e, t, m, hp, hn, v) */
-uIntf *b,               /* code lengths in bits (all assumed <= BMAX) */
-uInt n,                 /* number of codes (assumed <= 288) */
-uInt s,                 /* number of simple-valued codes (0..s-1) */
-const uIntf *d,         /* list of base values for non-simple codes */
-const uIntf *e,         /* list of extra bits for non-simple codes */
-inflate_huft * FAR *t,  /* result: starting table */
-uIntf *m,               /* maximum lookup bits, returns actual */
-inflate_huft *hp,       /* space for trees */
-uInt *hn,               /* hufts used in space */
-uIntf *v                /* working area: values in order of bit length */
-/* Given a list of code lengths and a maximum table size, make a set of
-   tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
-   if the given code set is incomplete (the tables are still built in this
-   case), or Z_DATA_ERROR if the input is invalid. */
-)
-{
+        8193, 12289, 16385, 24577, 0, 0};
+    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+        28, 28, 29, 29, 64, 64};
+
+    /*
+       Process a set of code lengths to create a canonical Huffman code.  The
+       code lengths are lens[0..codes-1].  Each length corresponds to the
+       symbols 0..codes-1.  The Huffman code is generated by first sorting the
+       symbols by length from short to long, and retaining the symbol order
+       for codes with equal lengths.  Then the code starts with all zero bits
+       for the first code of the shortest length, and the codes are integer
+       increments for the same length, and zeros are appended as the length
+       increases.  For the deflate format, these bits are stored backwards
+       from their more natural integer increment ordering, and so when the
+       decoding tables are built in the large loop below, the integer codes
+       are incremented backwards.
+
+       This routine assumes, but does not check, that all of the entries in
+       lens[] are in the range 0..MAXBITS.  The caller must assure this.
+       1..MAXBITS is interpreted as that code length.  zero means that that
+       symbol does not occur in this code.
+
+       The codes are sorted by computing a count of codes for each length,
+       creating from that a table of starting indices for each length in the
+       sorted table, and then entering the symbols in order in the sorted
+       table.  The sorted table is work[], with that space being provided by
+       the caller.
+
+       The length counts are used for other purposes as well, i.e. finding
+       the minimum and maximum length codes, determining if there are any
+       codes at all, checking for a valid set of lengths, and looking ahead
+       at length counts to determine sub-table sizes when building the
+       decoding tables.
+     */
+
+    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+    for (len = 0; len <= MAXBITS; len++)
+        count[len] = 0;
+    for (sym = 0; sym < codes; sym++)
+        count[lens[sym]]++;
+
+    /* bound code lengths, force root to be within code lengths */
+    root = *bits;
+    for (max = MAXBITS; max >= 1; max--)
+        if (count[max] != 0) break;
+    if (root > max) root = max;
+    if (max == 0) {                     /* no symbols to code at all */
+        here.op = (unsigned char)64;    /* invalid code marker */
+        here.bits = (unsigned char)1;
+        here.val = (unsigned short)0;
+        *(*table)++ = here;             /* make a table to force an error */
+        *(*table)++ = here;
+        *bits = 1;
+        return 0;     /* no symbols, but wait for decoding to report error */
+    }
+    for (min = 1; min < max; min++)
+        if (count[min] != 0) break;
+    if (root < min) root = min;
+
+    /* check for an over-subscribed or incomplete set of lengths */
+    left = 1;
+    for (len = 1; len <= MAXBITS; len++) {
+        left <<= 1;
+        left -= count[len];
+        if (left < 0) return -1;        /* over-subscribed */
+    }
+    if (left > 0 && (type == CODES || max != 1))
+        return -1;                      /* incomplete set */
+
+    /* generate offsets into symbol table for each length for sorting */
+    offs[1] = 0;
+    for (len = 1; len < MAXBITS; len++)
+        offs[len + 1] = offs[len] + count[len];
+
+    /* sort symbols by length, by symbol order within each length */
+    for (sym = 0; sym < codes; sym++)
+        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+
+    /*
+       Create and fill in decoding tables.  In this loop, the table being
+       filled is at next and has curr index bits.  The code being used is huff
+       with length len.  That code is converted to an index by dropping drop
+       bits off of the bottom.  For codes where len is less than drop + curr,
+       those top drop + curr - len bits are incremented through all values to
+       fill the table with replicated entries.
+
+       root is the number of index bits for the root table.  When len exceeds
+       root, sub-tables are created pointed to by the root entry with an index
+       of the low root bits of huff.  This is saved in low to check for when a
+       new sub-table should be started.  drop is zero when the root table is
+       being filled, and drop is root when sub-tables are being filled.
+
+       When a new sub-table is needed, it is necessary to look ahead in the
+       code lengths to determine what size sub-table is needed.  The length
+       counts are used for this, and so count[] is decremented as codes are
+       entered in the tables.
+
+       used keeps track of how many table entries have been allocated from the
+       provided *table space.  It is checked for LENS and DIST tables against
+       the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+       the initial root table size constants.  See the comments in inftrees.h
+       for more information.
+
+       sym increments through all symbols, and the loop terminates when
+       all codes of length max, i.e. all codes, have been processed.  This
+       routine permits incomplete codes, so another loop after this one fills
+       in the rest of the decoding tables with invalid code markers.
+     */
+
+    /* set up for code type */
+    switch (type) {
+    case CODES:
+        base = extra = work;    /* dummy value--not used */
+        match = 20;
+        break;
+    case LENS:
+        base = lbase;
+        extra = lext;
+        match = 257;
+        break;
+    default:    /* DISTS */
+        base = dbase;
+        extra = dext;
+        match = 0;
+    }
 
-  uInt a;                       /* counter for codes of length k */
-  uInt c[BMAX+1];               /* bit length count table */
-  uInt f;                       /* i repeats in table every f entries */
-  int g;                        /* maximum code length */
-  int h;                        /* table level */
-  uInt i;                       /* counter, current code */
-  uInt j;                       /* counter */
-  int k;                        /* number of bits in current code */
-  int l;                        /* bits per table (returned in m) */
-  uInt mask;                    /* (1 << w) - 1, to avoid cc -O bug on HP */
-  uIntf *p;                     /* pointer into c[], b[], or v[] */
-  inflate_huft *q;              /* points to current table */
-  struct inflate_huft_s r;      /* table entry for structure assignment */
-  inflate_huft *u[BMAX];        /* table stack */
-  int w;                        /* bits before this table == (l * h) */
-  uInt x[BMAX+1];               /* bit offsets, then code stack */
-  uIntf *xp;                    /* pointer into x */
-  int y;                        /* number of dummy codes added */
-  uInt z;                       /* number of entries in current table */
-
-
-  /* Make compiler happy */
-  r.base = 0;
-
-  /* Generate counts for each bit length */
-  p = c;
-#define C0 *p++ = 0;
-#define C2 C0 C0 C0 C0
-#define C4 C2 C2 C2 C2
-  C4                            /* clear c[]--assume BMAX+1 is 16 */
-  p = b;  i = n;
-  do {
-    c[*p++]++;                  /* assume all entries <= BMAX */
-  } while (--i);
-  if (c[0] == n)                /* null input--all zero length codes */
-  {
-    *t = (inflate_huft *)Z_NULL;
-    *m = 0;
-    return Z_OK;
-  }
-
-
-  /* Find minimum and maximum length, bound *m by those */
-  l = *m;
-  for (j = 1; j <= BMAX; j++)
-    if (c[j])
-      break;
-  k = j;                        /* minimum code length */
-  if ((uInt)l < j)
-    l = j;
-  for (i = BMAX; i; i--)
-    if (c[i])
-      break;
-  g = i;                        /* maximum code length */
-  if ((uInt)l > i)
-    l = i;
-  *m = l;
-
-
-  /* Adjust last length count to fill out codes, if needed */
-  for (y = 1 << j; j < i; j++, y <<= 1)
-    if ((y -= c[j]) < 0)
-      return Z_DATA_ERROR;
-  if ((y -= c[i]) < 0)
-    return Z_DATA_ERROR;
-  c[i] += y;
-
-
-  /* Generate starting offsets into the value table for each length */
-  x[1] = j = 0;
-  p = c + 1;  xp = x + 2;
-  while (--i) {                 /* note that i == g from above */
-    *xp++ = (j += *p++);
-  }
-
-
-  /* Make a table of values in order of bit lengths */
-  p = b;  i = 0;
-  do {
-    if ((j = *p++) != 0)
-      v[x[j]++] = i;
-  } while (++i < n);
-  n = x[g];                     /* set n to length of v */
-
-
-  /* Generate the Huffman codes and for each, make the table entries */
-  x[0] = i = 0;                 /* first Huffman code is zero */
-  p = v;                        /* grab values in bit order */
-  h = -1;                       /* no tables yet--level -1 */
-  w = -l;                       /* bits decoded == (l * h) */
-  u[0] = (inflate_huft *)Z_NULL;        /* just to keep compilers happy */
-  q = (inflate_huft *)Z_NULL;   /* ditto */
-  z = 0;                        /* ditto */
-
-  /* go through the bit lengths (k already is bits in shortest code) */
-  for (; k <= g; k++)
-  {
-    a = c[k];
-    while (a--)
-    {
-      /* here i is the Huffman code of length k bits for value *p */
-      /* make tables up to required level */
-      while (k > w + l)
-      {
-        h++;
-        w += l;                 /* previous table always l bits */
-
-        /* compute minimum size table less than or equal to l bits */
-        z = g - w;
-        z = z > (uInt)l ? (uInt)l : z;        /* table size upper limit */
-        if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
-        {                       /* too few codes for k-w bit table */
-          f -= a + 1;           /* deduct codes from patterns left */
-          xp = c + k;
-          if (j < z)
-            while (++j < z)     /* try smaller tables up to z bits */
-            {
-              if ((f <<= 1) <= *++xp)
-                break;          /* enough codes to use up j bits */
-              f -= *xp;         /* else deduct codes from patterns */
-            }
+    /* initialize state for loop */
+    huff = 0;                   /* starting code */
+    sym = 0;                    /* starting code symbol */
+    len = min;                  /* starting code length */
+    next = *table;              /* current table to fill in */
+    curr = root;                /* current table index bits */
+    drop = 0;                   /* current bits to drop from code for index */
+    low = (unsigned)(-1);       /* trigger new sub-table when len > root */
+    used = 1U << root;          /* use root table entries */
+    mask = used - 1;            /* mask for comparing low */
+
+    /* check available table space */
+    if ((type == LENS && used > ENOUGH_LENS) ||
+        (type == DISTS && used > ENOUGH_DISTS))
+        return 1;
+
+    /* process all codes and make table entries */
+    for (;;) {
+        /* create table entry */
+        here.bits = (unsigned char)(len - drop);
+        if (work[sym] + 1U < match) {
+            here.op = (unsigned char)0;
+            here.val = work[sym];
         }
-        z = 1 << j;             /* table entries for j-bit table */
-
-        /* allocate new table */
-        if (*hn + z > MANY)     /* (note: doesn't matter for fixed) */
-          return Z_DATA_ERROR;  /* overflow of MANY */
-        u[h] = q = hp + *hn;
-        *hn += z;
-
-        /* connect to last table, if there is one */
-        if (h)
-        {
-          x[h] = i;             /* save pattern for backing up */
-          r.bits = (Byte)l;     /* bits to dump before this table */
-          r.exop = (Byte)j;     /* bits in this table */
-          j = i >> (w - l);
-          r.base = (uInt)(q - u[h-1] - j);   /* offset to this table */
-          u[h-1][j] = r;        /* connect to last table */
+        else if (work[sym] >= match) {
+            here.op = (unsigned char)(extra[work[sym] - match]);
+            here.val = base[work[sym] - match];
+        }
+        else {
+            here.op = (unsigned char)(32 + 64);         /* end of block */
+            here.val = 0;
         }
-        else
-          *t = q;               /* first table is returned result */
-      }
-
-      /* set up table entry in r */
-      r.bits = (Byte)(k - w);
-      if (p >= v + n)
-        r.exop = 128 + 64;      /* out of values--invalid code */
-      else if (*p < s)
-      {
-        r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
-        r.base = *p++;          /* simple code is just the value */
-      }
-      else
-      {
-        r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
-        r.base = d[*p++ - s];
-      }
-
-      /* fill code-like entries with r */
-      f = 1 << (k - w);
-      for (j = i >> w; j < z; j += f)
-        q[j] = r;
-
-      /* backwards increment the k-bit code i */
-      for (j = 1 << (k - 1); i & j; j >>= 1)
-        i ^= j;
-      i ^= j;
-
-      /* backup over finished tables */
-      mask = (1 << w) - 1;      /* needed on HP, cc -O bug */
-      while ((i & mask) != x[h])
-      {
-        h--;                    /* don't need to update q */
-        w -= l;
-        mask = (1 << w) - 1;
-      }
-    }
-  }
-
-
-  /* Return Z_BUF_ERROR if we were given an incomplete table */
-  return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
-}
 
+        /* replicate for those indices with low len bits equal to huff */
+        incr = 1U << (len - drop);
+        fill = 1U << curr;
+        min = fill;                 /* save offset to next table */
+        do {
+            fill -= incr;
+            next[(huff >> drop) + fill] = here;
+        } while (fill != 0);
+
+        /* backwards increment the len-bit code huff */
+        incr = 1U << (len - 1);
+        while (huff & incr)
+            incr >>= 1;
+        if (incr != 0) {
+            huff &= incr - 1;
+            huff += incr;
+        }
+        else
+            huff = 0;
 
-local int inflate_trees_bits( /* c, bb, tb, hp, z) */
-uIntf *c,               /* 19 code lengths */
-uIntf *bb,              /* bits tree desired/actual depth */
-inflate_huft * FAR *tb, /* bits tree result */
-inflate_huft *hp,       /* space for trees */
-z_streamp z             /* for messages */
-)
-{
-  int r;
-  uInt hn = 0;          /* hufts used in space */
-  uIntf *v;             /* work area for huft_build */
-
-  if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
-    return Z_MEM_ERROR;
-  r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
-                 tb, bb, hp, &hn, v);
-  if (r == Z_DATA_ERROR)
-    z->msg = (char*)"oversubscribed dynamic bit lengths tree";
-  else if (r == Z_BUF_ERROR || *bb == 0)
-  {
-    z->msg = (char*)"incomplete dynamic bit lengths tree";
-    r = Z_DATA_ERROR;
-  }
-  ZFREE(z, v);
-  return r;
-}
+        /* go to next symbol, update count, len */
+        sym++;
+        if (--(count[len]) == 0) {
+            if (len == max) break;
+            len = lens[work[sym]];
+        }
 
+        /* create new sub-table if needed */
+        if (len > root && (huff & mask) != low) {
+            /* if first time, transition to sub-tables */
+            if (drop == 0)
+                drop = root;
+
+            /* increment past last table */
+            next += min;            /* here min is 1 << curr */
+
+            /* determine length of next table */
+            curr = len - drop;
+            left = (int)(1 << curr);
+            while (curr + drop < max) {
+                left -= count[curr + drop];
+                if (left <= 0) break;
+                curr++;
+                left <<= 1;
+            }
 
-local int inflate_trees_dynamic( /* nl, nd, c, bl, bd, tl, td, hp, z) */
-uInt nl,                /* number of literal/length codes */
-uInt nd,                /* number of distance codes */
-uIntf *c,               /* that many (total) code lengths */
-uIntf *bl,              /* literal desired/actual bit depth */
-uIntf *bd,              /* distance desired/actual bit depth */
-inflate_huft * FAR *tl, /* literal/length tree result */
-inflate_huft * FAR *td, /* distance tree result */
-inflate_huft *hp,       /* space for trees */
-z_streamp z             /* for messages */
-)
-{
-  int r;
-  uInt hn = 0;          /* hufts used in space */
-  uIntf *v;             /* work area for huft_build */
-
-  /* allocate work area */
-  if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
-    return Z_MEM_ERROR;
-
-  /* build literal/length tree */
-  r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
-  if (r != Z_OK || *bl == 0)
-  {
-    if (r == Z_DATA_ERROR)
-      z->msg = (char*)"oversubscribed literal/length tree";
-    else if (r != Z_MEM_ERROR)
-    {
-      z->msg = (char*)"incomplete literal/length tree";
-      r = Z_DATA_ERROR;
-    }
-    ZFREE(z, v);
-    return r;
-  }
-
-  /* build distance tree */
-  r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
-  if (r != Z_OK || (*bd == 0 && nl > 257))
-  {
-    if (r == Z_DATA_ERROR)
-      z->msg = (char*)"oversubscribed distance tree";
-    else if (r == Z_BUF_ERROR) {
-#if 0
-    {
-#endif
-#ifdef PKZIP_BUG_WORKAROUND
-      r = Z_OK;
-    }
-#else
-      z->msg = (char*)"incomplete distance tree";
-      r = Z_DATA_ERROR;
-    }
-    else if (r != Z_MEM_ERROR)
-    {
-      z->msg = (char*)"empty distance tree with lengths";
-      r = Z_DATA_ERROR;
+            /* check for enough space */
+            used += 1U << curr;
+            if ((type == LENS && used > ENOUGH_LENS) ||
+                (type == DISTS && used > ENOUGH_DISTS))
+                return 1;
+
+            /* point entry in root table to sub-table */
+            low = huff & mask;
+            (*table)[low].op = (unsigned char)curr;
+            (*table)[low].bits = (unsigned char)root;
+            (*table)[low].val = (unsigned short)(next - *table);
+        }
     }
-    ZFREE(z, v);
-    return r;
-#endif
-  }
-
-  /* done */
-  ZFREE(z, v);
-  return Z_OK;
-}
 
-
-/* build fixed tables only once--keep them here */
-#ifdef BUILDFIXED
-local int fixed_built = 0;
-#define FIXEDH 544      /* number of hufts used by fixed tables */
-local inflate_huft fixed_mem[FIXEDH];
-local uInt fixed_bl;
-local uInt fixed_bd;
-local inflate_huft *fixed_tl;
-local inflate_huft *fixed_td;
-#else
-#include "inffixed.h"
-#endif
-
-
-local int inflate_trees_fixed( /* bl, bd, tl, td, z) */
-uIntf *bl,                      /* literal desired/actual bit depth */
-uIntf *bd,                      /* distance desired/actual bit depth */
-const inflate_huft * FAR *tl,   /* literal/length tree result */
-const inflate_huft * FAR *td,   /* distance tree result */
-z_streamp z                     /* for memory allocation */
-)
-{
-#ifdef BUILDFIXED
-  /* build fixed tables if not already */
-  if (!fixed_built)
-  {
-    int k;              /* temporary variable */
-    uInt f = 0;         /* number of hufts used in fixed_mem */
-    uIntf *c;           /* length list for huft_build */
-    uIntf *v;           /* work area for huft_build */
-
-    /* allocate memory */
-    if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
-      return Z_MEM_ERROR;
-    if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
-    {
-      ZFREE(z, c);
-      return Z_MEM_ERROR;
+    /* fill in remaining table entry if code is incomplete (guaranteed to have
+       at most one remaining entry, since if the code is incomplete, the
+       maximum code length that was allowed to get this far is one bit) */
+    if (huff != 0) {
+        here.op = (unsigned char)64;            /* invalid code marker */
+        here.bits = (unsigned char)(len - drop);
+        here.val = (unsigned short)0;
+        next[huff] = here;
     }
 
-    /* literal table */
-    for (k = 0; k < 144; k++)
-      c[k] = 8;
-    for (; k < 256; k++)
-      c[k] = 9;
-    for (; k < 280; k++)
-      c[k] = 7;
-    for (; k < 288; k++)
-      c[k] = 8;
-    fixed_bl = 9;
-    huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
-               fixed_mem, &f, v);
-
-    /* distance table */
-    for (k = 0; k < 30; k++)
-      c[k] = 5;
-    fixed_bd = 5;
-    huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
-               fixed_mem, &f, v);
-
-    /* done */
-    ZFREE(z, v);
-    ZFREE(z, c);
-    fixed_built = 1;
-  }
-#else
-  FT_UNUSED(z);
-#endif
-  *bl = fixed_bl;
-  *bd = fixed_bd;
-  *tl = fixed_tl;
-  *td = fixed_td;
-  return Z_OK;
+    /* set return parameters */
+    *table += used;
+    *bits = root;
+    return 0;
 }
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/inftrees.h b/qtbase/src/3rdparty/freetype/src/gzip/inftrees.h
index 07bf2aa0bf..c94eb78b5d 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/inftrees.h
+++ b/qtbase/src/3rdparty/freetype/src/gzip/inftrees.h
@@ -1,63 +1,67 @@
 /* inftrees.h -- header to use inftrees.c
- * Copyright (C) 1995-2002 Mark Adler
+ * Copyright (C) 1995-2005, 2010 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
+#ifndef INFTREES_H
+#define INFTREES_H
+
 /* WARNING: this file should *not* be used by applications. It is
    part of the implementation of the compression library and is
    subject to change. Applications should only use zlib.h.
  */
 
-/* Huffman code lookup table entry--this entry is four bytes for machines
-   that have 16-bit pointers (e.g. PC's in the small or medium model). */
-
-#ifndef _INFTREES_H
-#define _INFTREES_H
-
-typedef struct inflate_huft_s FAR inflate_huft;
-
-struct inflate_huft_s {
-  union {
-    struct {
-      Byte Exop;        /* number of extra bits or operation */
-      Byte Bits;        /* number of bits in this code or subcode */
-    } what;
-    uInt pad;           /* pad structure to a power of 2 (4 bytes for */
-  } word;               /*  16-bit, 8 bytes for 32-bit int's) */
-  uInt base;            /* literal, length base, distance base,
-                           or table offset */
-};
-
-/* Maximum size of dynamic tree.  The maximum found in a long but non-
-   exhaustive search was 1004 huft structures (850 for length/literals
-   and 154 for distances, the latter actually the result of an
-   exhaustive search).  The actual maximum is not known, but the
-   value below is more than safe. */
-#define MANY 1440
-
-local  int inflate_trees_bits OF((
-    uIntf *,                    /* 19 code lengths */
-    uIntf *,                    /* bits tree desired/actual depth */
-    inflate_huft * FAR *,       /* bits tree result */
-    inflate_huft *,             /* space for trees */
-    z_streamp));                /* for messages */
-
-local  int inflate_trees_dynamic OF((
-    uInt,                       /* number of literal/length codes */
-    uInt,                       /* number of distance codes */
-    uIntf *,                    /* that many (total) code lengths */
-    uIntf *,                    /* literal desired/actual bit depth */
-    uIntf *,                    /* distance desired/actual bit depth */
-    inflate_huft * FAR *,       /* literal/length tree result */
-    inflate_huft * FAR *,       /* distance tree result */
-    inflate_huft *,             /* space for trees */
-    z_streamp));                /* for messages */
-
-local  int inflate_trees_fixed OF((
-    uIntf *,                    /* literal desired/actual bit depth */
-    uIntf *,                    /* distance desired/actual bit depth */
-    const inflate_huft * FAR *, /* literal/length tree result */
-    const inflate_huft * FAR *, /* distance tree result */
-    z_streamp));                /* for memory allocation */
-
-#endif /* _INFTREES_H */
+/* Structure for decoding tables.  Each entry provides either the
+   information needed to do the operation requested by the code that
+   indexed that table entry, or it provides a pointer to another
+   table that indexes more bits of the code.  op indicates whether
+   the entry is a pointer to another table, a literal, a length or
+   distance, an end-of-block, or an invalid code.  For a table
+   pointer, the low four bits of op is the number of index bits of
+   that table.  For a length or distance, the low four bits of op
+   is the number of extra bits to get after the code.  bits is
+   the number of bits in this code or part of the code to drop off
+   of the bit buffer.  val is the actual byte to output in the case
+   of a literal, the base length or distance, or the offset from
+   the current table to the next table.  Each entry is four bytes. */
+typedef struct {
+    unsigned char op;           /* operation, extra bits, table bits */
+    unsigned char bits;         /* bits in this part of the code */
+    unsigned short val;         /* offset in table or code value */
+} code;
+
+/* op values as set by inflate_table():
+    00000000 - literal
+    0000tttt - table link, tttt != 0 is the number of table index bits
+    0001eeee - length or distance, eeee is the number of extra bits
+    01100000 - end of block
+    01000000 - invalid code
+ */
+
+/* Maximum size of the dynamic table.  The maximum number of code structures is
+   1444, which is the sum of 852 for literal/length codes and 592 for distance
+   codes.  These values were found by exhaustive searches using the program
+   examples/enough.c found in the zlib distribtution.  The arguments to that
+   program are the number of symbols, the initial root table size, and the
+   maximum bit length of a code.  "enough 286 9 15" for literal/length codes
+   returns returns 852, and "enough 30 6 15" for distance codes returns 592.
+   The initial root table size (9 or 6) is found in the fifth argument of the
+   inflate_table() calls in inflate.c and infback.c.  If the root table size is
+   changed, then these maximum sizes would be need to be recalculated and
+   updated. */
+#define ENOUGH_LENS 852
+#define ENOUGH_DISTS 592
+#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
+
+/* Type of code to build for inflate_table() */
+typedef enum {
+    CODES,
+    LENS,
+    DISTS
+} codetype;
+
+int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+                             unsigned codes, code FAR * FAR *table,
+                             unsigned FAR *bits, unsigned short FAR *work));
+
+#endif  /* INFTREES_H_ */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff b/qtbase/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff
new file mode 100644
index 0000000000..20d84293f3
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/gzip/patches/freetype-zlib.diff
@@ -0,0 +1,372 @@
+[zlib] Fix zlib sources for compilation with FreeType
+
+We must ensure that they do not issue compiler errors or warnings when they
+are compiled as part of `src/gzip/ftgzip.c`.
+
+* src/gzip/adler32.c: Do not define unused functions when `Z_FREETYPE`
+is set.
+
+* src/gzip/gzguts.h (COPY): Rename to...
+(COPY__): ... this since `COPY` and `COPY_` conflict with enum values,
+which have the same name in `zlib.h`.
+
+* src/gzip/inflate.c, src/gzip/adler32.c: Omit unused function
+declarations when `Z_FREETYPE` is defined.
+
+* src/gzip/zlib.h: Include `ftzconf.h` instead of `zconf.h` to avoid
+conflicts with system-installed headers.
+Omit unused function declarations when `Z_FREETYPE` is defined.
+
+* src/gzip/zutil.h: Use `ft_memxxx` functions instead of `memxxx`.
+Omit unused function declarations when `Z_FREETYPE` is defined.
+
+* src/gzip/inflate.h, src/gzip/inftrees.h: Add header guard macros to
+prevent compiler errors.
+
+diff --git a/src/gzip/adler32.c b/src/gzip/adler32.c
+index be5e8a247..aa032e1dd 100644
+--- a/src/gzip/adler32.c
++++ b/src/gzip/adler32.c
+@@ -7,7 +7,9 @@
+ 
+ #include "zutil.h"
+ 
++#ifndef Z_FREETYPE
+ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
++#endif
+ 
+ #define BASE 65521U     /* largest prime smaller than 65536 */
+ #define NMAX 5552
+@@ -139,6 +141,8 @@ uLong ZEXPORT adler32(
+     return adler32_z(adler, buf, len);
+ }
+ 
++#ifndef Z_FREETYPE
++
+ /* ========================================================================= */
+ local uLong adler32_combine_(
+     uLong adler1,
+@@ -184,3 +188,5 @@ uLong ZEXPORT adler32_combine64(
+ {
+     return adler32_combine_(adler1, adler2, len2);
+ }
++
++#endif  /* !Z_FREETYPE */
+diff --git a/src/gzip/gzguts.h b/src/gzip/gzguts.h
+index 57faf3716..4f09a52a7 100644
+--- a/src/gzip/gzguts.h
++++ b/src/gzip/gzguts.h
+@@ -163,7 +163,7 @@
+ 
+ /* values for gz_state how */
+ #define LOOK 0      /* look for a gzip header */
+-#define COPY 1      /* copy input directly */
++#define COPY__ 1    /* copy input directly */
+ #define GZIP 2      /* decompress a gzip stream */
+ 
+ /* internal gzip file state data structure */
+diff --git a/src/gzip/inflate.c b/src/gzip/inflate.c
+index 4375557b4..5bf5b815e 100644
+--- a/src/gzip/inflate.c
++++ b/src/gzip/inflate.c
+@@ -99,8 +99,10 @@ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+ #ifdef BUILDFIXED
+    void makefixed OF((void));
+ #endif
++#ifndef Z_FREETYPE
+ local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
+                               unsigned len));
++#endif
+ 
+ local int inflateStateCheck(
+     z_streamp strm)
+@@ -245,6 +247,8 @@ int ZEXPORT inflateInit_(
+     return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+ }
+ 
++#ifndef Z_FREETYPE
++
+ int ZEXPORT inflatePrime(
+     z_streamp strm,
+     int bits,
+@@ -266,6 +270,8 @@ int ZEXPORT inflatePrime(
+     return Z_OK;
+ }
+ 
++#endif  /* !Z_FREETYPE */
++
+ /*
+    Return state with length and distance decoding tables and index sizes set to
+    fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+@@ -1312,6 +1318,8 @@ int ZEXPORT inflateEnd(
+     return Z_OK;
+ }
+ 
++#ifndef Z_FREETYPE
++
+ int ZEXPORT inflateGetDictionary(
+     z_streamp strm,
+     Bytef *dictionary,
+@@ -1471,6 +1479,8 @@ int ZEXPORT inflateSync(
+     return Z_OK;
+ }
+ 
++#endif  /* !Z_FREETYPE */
++
+ /*
+    Returns true if inflate is currently at the end of a block generated by
+    Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+@@ -1489,6 +1499,8 @@ int ZEXPORT inflateSyncPoint(
+     return state->mode == STORED && state->bits == 0;
+ }
+ 
++#ifndef Z_FREETYPE
++
+ int ZEXPORT inflateCopy(
+     z_streamp dest,
+     z_streamp source)
+@@ -1536,6 +1548,8 @@ int ZEXPORT inflateCopy(
+     return Z_OK;
+ }
+ 
++#endif  /* !Z_FREETYPE */
++
+ int ZEXPORT inflateUndermine(
+     z_streamp strm,
+     int subvert)
+@@ -1569,6 +1583,8 @@ int ZEXPORT inflateValidate(
+     return Z_OK;
+ }
+ 
++#ifndef Z_FREETYPE
++
+ long ZEXPORT inflateMark(
+     z_streamp strm)
+ {
+@@ -1590,3 +1606,5 @@ unsigned long ZEXPORT inflateCodesUsed(
+     state = (struct inflate_state FAR *)strm->state;
+     return (unsigned long)(state->next - state->codes);
+ }
++
++#endif  /* !Z_FREETYPE */
+diff --git a/src/gzip/inflate.h b/src/gzip/inflate.h
+index f127b6b1f..c6f5a52e1 100644
+--- a/src/gzip/inflate.h
++++ b/src/gzip/inflate.h
+@@ -3,6 +3,9 @@
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
++#ifndef INFLATE_H
++#define INFLATE_H
++
+ /* WARNING: this file should *not* be used by applications. It is
+    part of the implementation of the compression library and is
+    subject to change. Applications should only use zlib.h.
+@@ -124,3 +127,5 @@ struct inflate_state {
+     int back;                   /* bits back of last unprocessed length/lit */
+     unsigned was;               /* initial length of match */
+ };
++
++#endif  /* INFLATE_H */
+diff --git a/src/gzip/inftrees.h b/src/gzip/inftrees.h
+index baa53a0b1..c94eb78b5 100644
+--- a/src/gzip/inftrees.h
++++ b/src/gzip/inftrees.h
+@@ -3,6 +3,9 @@
+  * For conditions of distribution and use, see copyright notice in zlib.h
+  */
+ 
++#ifndef INFTREES_H
++#define INFTREES_H
++
+ /* WARNING: this file should *not* be used by applications. It is
+    part of the implementation of the compression library and is
+    subject to change. Applications should only use zlib.h.
+@@ -60,3 +63,5 @@ typedef enum {
+ int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+                              unsigned codes, code FAR * FAR *table,
+                              unsigned FAR *bits, unsigned short FAR *work));
++
++#endif  /* INFTREES_H_ */
+diff --git a/src/gzip/zlib.h b/src/gzip/zlib.h
+index 4a98e38bf..d760140c2 100644
+--- a/src/gzip/zlib.h
++++ b/src/gzip/zlib.h
+@@ -31,7 +31,7 @@
+ #ifndef ZLIB_H
+ #define ZLIB_H
+ 
+-#include "zconf.h"
++#include "ftzconf.h"
+ 
+ #ifdef __cplusplus
+ extern "C" {
+@@ -211,6 +211,8 @@ typedef gz_header FAR *gz_headerp;
+ 
+ #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+ 
++#ifndef Z_FREETYPE
++
+ #define zlib_version zlibVersion()
+ /* for compatibility with versions < 1.0.2 */
+ 
+@@ -246,7 +248,6 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+    this will be done by deflate().
+ */
+ 
+-
+ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+ /*
+     deflate compresses as much data as possible, and stops when the input
+@@ -373,6 +374,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+    deallocated).
+ */
+ 
++#endif  /* !Z_FREETYPE */
+ 
+ /*
+ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+@@ -534,6 +536,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+     The following functions are needed only in some special applications.
+ */
+ 
++#ifndef Z_FREETYPE
++
+ /*
+ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                      int  level,
+@@ -956,6 +960,8 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+    destination.
+ */
+ 
++#endif  /* !Z_FREETYPE */
++
+ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+ /*
+      This function is equivalent to inflateEnd followed by inflateInit,
+@@ -980,6 +986,8 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+    the windowBits parameter is invalid.
+ */
+ 
++#ifndef Z_FREETYPE
++
+ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+                                      int bits,
+                                      int value));
+@@ -1069,6 +1077,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+    stream state was inconsistent.
+ */
+ 
++#endif  /* !Z_FREETYPE */
++
+ /*
+ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+                                         unsigned char FAR *window));
+@@ -1095,6 +1105,8 @@ typedef unsigned (*in_func) OF((void FAR *,
+                                 z_const unsigned char FAR * FAR *));
+ typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+ 
++#ifndef Z_FREETYPE
++
+ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+                                     in_func in, void FAR *in_desc,
+                                     out_func out, void FAR *out_desc));
+@@ -1214,6 +1226,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+      27-31: 0 (reserved)
+  */
+ 
++#endif  /* !Z_FREETYPE */
++
+ #ifndef Z_SOLO
+ 
+                         /* utility functions */
+@@ -1742,6 +1756,8 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
+      if (crc != original_crc) error();
+ */
+ 
++#ifndef Z_FREETYPE
++
+ ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
+                                   z_size_t len));
+ /*
+@@ -1822,6 +1838,19 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+                            ZLIB_VERSION, (int)sizeof(z_stream))
+ #endif
+ 
++#else  /* Z_FREETYPE */
++
++
++ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
++                                      const char *version, int stream_size));
++
++#  define inflateInit2(strm, windowBits) \
++          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
++                        (int)sizeof(z_stream))
++
++#endif  /* Z_FREETYPE */
++
++
+ #ifndef Z_SOLO
+ 
+ /* gzgetc() macro and its supporting function and exposed data structure.  Note
+@@ -1901,13 +1930,16 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+ 
+ #else /* Z_SOLO */
+ 
++#ifndef Z_FREETYPE
+    ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+    ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+    ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
++#endif
+ 
+ #endif /* !Z_SOLO */
+ 
+ /* undocumented functions */
++#ifndef Z_FREETYPE
+ ZEXTERN const char   * ZEXPORT zError           OF((int));
+ ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
+ ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
+@@ -1927,6 +1959,7 @@ ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+                                                   va_list va));
+ #  endif
+ #endif
++#endif  /* !Z_FREETYPE */
+ 
+ #ifdef __cplusplus
+ }
+diff --git a/src/gzip/zutil.h b/src/gzip/zutil.h
+index d9a20ae1b..14f0f1a85 100644
+--- a/src/gzip/zutil.h
++++ b/src/gzip/zutil.h
+@@ -188,6 +188,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+   #pragma warn -8066
+ #endif
+ 
++#ifndef Z_FREETYPE
++
+ /* provide prototypes for these when building zlib without LFS */
+ #if !defined(_WIN32) && \
+     (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
+@@ -195,6 +197,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+ #endif
+ 
++#endif  /* !Z_FREETYPE */
++
+         /* common defaults */
+ 
+ #ifndef OS_CODE
+@@ -226,9 +230,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+ #    define zmemcmp _fmemcmp
+ #    define zmemzero(dest, len) _fmemset(dest, 0, len)
+ #  else
+-#    define zmemcpy memcpy
+-#    define zmemcmp memcmp
+-#    define zmemzero(dest, len) memset(dest, 0, len)
++#    define zmemcpy ft_memcpy
++#    define zmemcmp ft_memcmp
++#    define zmemzero(dest, len) ft_memset(dest, 0, len)
+ #  endif
+ #else
+    void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/rules.mk b/qtbase/src/3rdparty/freetype/src/gzip/rules.mk
index 4ea823f8d3..10c8b41c7f 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/gzip/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2002-2020 by
+# Copyright (C) 2002-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -40,17 +40,17 @@ endif
 # unconditionally.
 #
 GZIP_DRV_SRCS := $(GZIP_DIR)/adler32.c  \
+                 $(GZIP_DIR)/crc32.c    \
+                 $(GZIP_DIR)/crc32.h    \
                  $(GZIP_DIR)/ftzconf.h  \
-                 $(GZIP_DIR)/infblock.c \
-                 $(GZIP_DIR)/infblock.h \
-                 $(GZIP_DIR)/infcodes.c \
-                 $(GZIP_DIR)/infcodes.h \
+                 $(GZIP_DIR)/infback.c  \
+                 $(GZIP_DIR)/inffast.c  \
+                 $(GZIP_DIR)/inffast.h  \
                  $(GZIP_DIR)/inffixed.h \
                  $(GZIP_DIR)/inflate.c  \
+                 $(GZIP_DIR)/inflate.h  \
                  $(GZIP_DIR)/inftrees.c \
                  $(GZIP_DIR)/inftrees.h \
-                 $(GZIP_DIR)/infutil.c  \
-                 $(GZIP_DIR)/infutil.h  \
                  $(GZIP_DIR)/zlib.h     \
                  $(GZIP_DIR)/zutil.c    \
                  $(GZIP_DIR)/zutil.h
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/zlib.h b/qtbase/src/3rdparty/freetype/src/gzip/zlib.h
index a4e82c6a02..d760140c2e 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/zlib.h
+++ b/qtbase/src/3rdparty/freetype/src/gzip/zlib.h
@@ -1,7 +1,7 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.1.4, March 11th, 2002
+  version 1.2.12, March 11th, 2022
 
-  Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
+  Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -24,12 +24,12 @@
 
 
   The data format used by the zlib library is described by RFCs (Request for
-  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
-  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
 */
 
-#ifndef _ZLIB_H
-#define _ZLIB_H
+#ifndef ZLIB_H
+#define ZLIB_H
 
 #include "ftzconf.h"
 
@@ -37,27 +37,45 @@
 extern "C" {
 #endif
 
-#define ZLIB_VERSION "1.1.4"
+#define ZLIB_VERSION "1.2.12"
+#define ZLIB_VERNUM 0x12c0
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 12
+#define ZLIB_VER_SUBREVISION 0
 
 /*
-     The 'zlib' compression library provides in-memory compression and
-  decompression functions, including integrity checks of the uncompressed
-  data.  This version of the library supports only one compression method
-  (deflation) but other algorithms will be added later and will have the same
-  stream interface.
-
-     Compression can be done in a single step if the buffers are large
-  enough (for example if an input file is mmap'ed), or can be done by
-  repeated calls of the compression function.  In the latter case, the
-  application must provide more input and/or consume the output
+    The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed data.
+  This version of the library supports only one compression method (deflation)
+  but other algorithms will be added later and will have the same stream
+  interface.
+
+    Compression can be done in a single step if the buffers are large enough,
+  or can be done by repeated calls of the compression function.  In the latter
+  case, the application must provide more input and/or consume the output
   (providing more output space) before each call.
 
-     The library also supports reading and writing files in gzip (.gz) format
-  with an interface similar to that of stdio.
+    The compressed data format used by default by the in-memory functions is
+  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+  around a deflate stream, which is itself documented in RFC 1951.
+
+    The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio using the functions that start
+  with "gz".  The gzip format is different from the zlib format.  gzip is a
+  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+    This library can optionally read and write gzip and raw deflate streams in
+  memory as well.
 
-     The library does not install any signal handler. The decoder checks
-  the consistency of the compressed data, so the library should never
-  crash even in case of corrupted input.
+    The zlib format was designed to be compact and fast for use in memory
+  and on communications channels.  The gzip format was designed for single-
+  file compression on file systems, has a larger header than zlib to maintain
+  directory information, and uses a different, slower check method than zlib.
+
+    The library does not install any signal handler.  The decoder checks
+  the consistency of the compressed data, so the library should never crash
+  even in the case of corrupted input.
 */
 
 typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
@@ -66,68 +84,95 @@ typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
 struct internal_state;
 
 typedef struct z_stream_s {
-    Bytef    *next_in;  /* next input byte */
+    z_const Bytef *next_in;     /* next input byte */
     uInt     avail_in;  /* number of bytes available at next_in */
-    uLong    total_in;  /* total nb of input bytes read so far */
+    uLong    total_in;  /* total number of input bytes read so far */
 
-    Bytef    *next_out; /* next output byte should be put there */
+    Bytef    *next_out; /* next output byte will go here */
     uInt     avail_out; /* remaining free space at next_out */
-    uLong    total_out; /* total nb of bytes output so far */
+    uLong    total_out; /* total number of bytes output so far */
 
-    char     *msg;      /* last error message, NULL if no error */
+    z_const char *msg;  /* last error message, NULL if no error */
     struct internal_state FAR *state; /* not visible by applications */
 
     alloc_func zalloc;  /* used to allocate the internal state */
     free_func  zfree;   /* used to free the internal state */
     voidpf     opaque;  /* private data object passed to zalloc and zfree */
 
-    int     data_type;  /* best guess about the data type: ascii or binary */
-    uLong   adler;      /* adler32 value of the uncompressed data */
+    int     data_type;  /* best guess about the data type: binary or text
+                           for deflate, or the decoding state for inflate */
+    uLong   adler;      /* Adler-32 or CRC-32 value of the uncompressed data */
     uLong   reserved;   /* reserved for future use */
 } z_stream;
 
 typedef z_stream FAR *z_streamp;
 
 /*
-   The application must update next_in and avail_in when avail_in has
-   dropped to zero. It must update next_out and avail_out when avail_out
-   has dropped to zero. The application must initialize zalloc, zfree and
-   opaque before calling the init function. All other fields are set by the
-   compression library and must not be updated by the application.
+     gzip header information passed to and from zlib routines.  See RFC 1952
+  for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+    int     text;       /* true if compressed data believed to be text */
+    uLong   time;       /* modification time */
+    int     xflags;     /* extra flags (not used when writing a gzip file) */
+    int     os;         /* operating system */
+    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
+    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
+    uInt    extra_max;  /* space at extra (only when reading header) */
+    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
+    uInt    name_max;   /* space at name (only when reading header) */
+    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
+    uInt    comm_max;   /* space at comment (only when reading header) */
+    int     hcrc;       /* true if there was or will be a header crc */
+    int     done;       /* true when done reading gzip header (not used
+                           when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
 
-   The opaque value provided by the application will be passed as the first
-   parameter for calls of zalloc and zfree. This can be useful for custom
-   memory management. The compression library attaches no meaning to the
+/*
+     The application must update next_in and avail_in when avail_in has dropped
+   to zero.  It must update next_out and avail_out when avail_out has dropped
+   to zero.  The application must initialize zalloc, zfree and opaque before
+   calling the init function.  All other fields are set by the compression
+   library and must not be updated by the application.
+
+     The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree.  This can be useful for custom
+   memory management.  The compression library attaches no meaning to the
    opaque value.
 
-   zalloc must return Z_NULL if there is not enough memory for the object.
+     zalloc must return Z_NULL if there is not enough memory for the object.
    If zlib is used in a multi-threaded application, zalloc and zfree must be
-   thread safe.
-
-   On 16-bit systems, the functions zalloc and zfree must be able to allocate
-   exactly 65536 bytes, but will not be required to allocate more than this
-   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
-   pointers returned by zalloc for objects of exactly 65536 bytes *must*
-   have their offset normalized to zero. The default allocation function
-   provided by this library ensures this (see zutil.c). To reduce memory
-   requirements and avoid any allocation of 64K objects, at the expense of
-   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
-
-   The fields total_in and total_out can be used for statistics or
-   progress reports. After compression, total_in holds the total size of
-   the uncompressed data and may be saved for use in the decompressor
-   (particularly if the decompressor wants to decompress everything in
-   a single step).
+   thread safe.  In that case, zlib is thread-safe.  When zalloc and zfree are
+   Z_NULL on entry to the initialization function, they are set to internal
+   routines that use the standard library functions malloc() and free().
+
+     On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this if
+   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
+   returned by zalloc for objects of exactly 65536 bytes *must* have their
+   offset normalized to zero.  The default allocation function provided by this
+   library ensures this (see zutil.c).  To reduce memory requirements and avoid
+   any allocation of 64K objects, at the expense of compression ratio, compile
+   the library with -DMAX_WBITS=14 (see zconf.h).
+
+     The fields total_in and total_out can be used for statistics or progress
+   reports.  After compression, total_in holds the total size of the
+   uncompressed data and may be saved for use by the decompressor (particularly
+   if the decompressor wants to decompress everything in a single step).
 */
 
                         /* constants */
 
 #define Z_NO_FLUSH      0
-#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
+#define Z_PARTIAL_FLUSH 1
 #define Z_SYNC_FLUSH    2
 #define Z_FULL_FLUSH    3
 #define Z_FINISH        4
-/* Allowed flush values; see deflate() below for details */
+#define Z_BLOCK         5
+#define Z_TREES         6
+/* Allowed flush values; see deflate() and inflate() below for details */
 
 #define Z_OK            0
 #define Z_STREAM_END    1
@@ -138,8 +183,8 @@ typedef z_stream FAR *z_streamp;
 #define Z_MEM_ERROR    (-4)
 #define Z_BUF_ERROR    (-5)
 #define Z_VERSION_ERROR (-6)
-/* Return codes for the compression/decompression functions. Negative
- * values are errors, positive values are used for special but normal events.
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
  */
 
 #define Z_NO_COMPRESSION         0
@@ -150,636 +195,1522 @@ typedef z_stream FAR *z_streamp;
 
 #define Z_FILTERED            1
 #define Z_HUFFMAN_ONLY        2
+#define Z_RLE                 3
+#define Z_FIXED               4
 #define Z_DEFAULT_STRATEGY    0
 /* compression strategy; see deflateInit2() below for details */
 
 #define Z_BINARY   0
-#define Z_ASCII    1
+#define Z_TEXT     1
+#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
 #define Z_UNKNOWN  2
-/* Possible values of the data_type field */
+/* Possible values of the data_type field for deflate() */
 
 #define Z_DEFLATED   8
 /* The deflate compression method (the only one supported in this version) */
 
 #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
 
+#ifndef Z_FREETYPE
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
 
                         /* basic functions */
 
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
 /* The application can compare zlibVersion and ZLIB_VERSION for consistency.
-   If the first character differs, the library code actually used is
-   not compatible with the zlib.h header file used by the application.
-   This check is automatically made by deflateInit and inflateInit.
+   If the first character differs, the library code actually used is not
+   compatible with the zlib.h header file used by the application.  This check
+   is automatically made by deflateInit and inflateInit.
  */
 
 /*
-ZEXTERN(int)  deflateInit OF((z_streamp strm, int level));
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
 
-     Initializes the internal stream state for compression. The fields
-   zalloc, zfree and opaque must be initialized before by the caller.
-   If zalloc and zfree are set to Z_NULL, deflateInit updates them to
-   use default allocation functions.
+     Initializes the internal stream state for compression.  The fields
+   zalloc, zfree and opaque must be initialized before by the caller.  If
+   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+   allocation functions.
 
      The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
-   1 gives best speed, 9 gives best compression, 0 gives no compression at
-   all (the input data is simply copied a block at a time).
-   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
-   compression (currently equivalent to level 6).
+   1 gives best speed, 9 gives best compression, 0 gives no compression at all
+   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
+   requests a default compromise between speed and compression (currently
+   equivalent to level 6).
 
-     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if level is not a valid compression level, or
    Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
-   with the version assumed by the caller (ZLIB_VERSION).
-   msg is set to null if there is no error message.  deflateInit does not
-   perform any compression: this will be done by deflate().
+   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
+   if there is no error message.  deflateInit does not perform any compression:
+   this will be done by deflate().
 */
 
-
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
 /*
     deflate compresses as much data as possible, and stops when the input
-  buffer becomes empty or the output buffer becomes full. It may introduce some
-  output latency (reading input without producing any output) except when
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
   forced to flush.
 
-    The detailed semantics are as follows. deflate performs one or both of the
+    The detailed semantics are as follows.  deflate performs one or both of the
   following actions:
 
   - Compress more input starting at next_in and update next_in and avail_in
-    accordingly. If not all input can be processed (because there is not
+    accordingly.  If not all input can be processed (because there is not
     enough room in the output buffer), next_in and avail_in are updated and
     processing will resume at this point for the next call of deflate().
 
-  - Provide more output starting at next_out and update next_out and avail_out
-    accordingly. This action is forced if the parameter flush is non zero.
+  - Generate more output starting at next_out and update next_out and avail_out
+    accordingly.  This action is forced if the parameter flush is non zero.
     Forcing flush frequently degrades the compression ratio, so this parameter
-    should be set only when necessary (in interactive applications).
-    Some output may be provided even if flush is not set.
-
-  Before the call of deflate(), the application should ensure that at least
-  one of the actions is possible, by providing more input and/or consuming
-  more output, and updating avail_in or avail_out accordingly; avail_out
-  should never be zero before the call. The application can consume the
-  compressed output when it wants, for example when the output buffer is full
-  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
-  and with zero avail_out, it must be called again after making room in the
-  output buffer because there might be more output pending.
+    should be set only when necessary.  Some output may be provided even if
+    flush is zero.
+
+    Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating avail_in or avail_out accordingly; avail_out should
+  never be zero before the call.  The application can consume the compressed
+  output when it wants, for example when the output buffer is full (avail_out
+  == 0), or after each call of deflate().  If deflate returns Z_OK and with
+  zero avail_out, it must be called again after making room in the output
+  buffer because there might be more output pending. See deflatePending(),
+  which can be used if desired to determine whether or not there is more ouput
+  in that case.
+
+    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+  decide how much data to accumulate before producing output, in order to
+  maximize compression.
 
     If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
   flushed to the output buffer and the output is aligned on a byte boundary, so
-  that the decompressor can get all input data available so far. (In particular
-  avail_in is zero after the call if enough output space has been provided
-  before the call.)  Flushing may degrade compression for some compression
-  algorithms and so it should be used only when necessary.
+  that the decompressor can get all input data available so far.  (In
+  particular avail_in is zero after the call if enough output space has been
+  provided before the call.) Flushing may degrade compression for some
+  compression algorithms and so it should be used only when necessary.  This
+  completes the current deflate block and follows it with an empty stored block
+  that is three bits plus filler bits to the next byte, followed by four bytes
+  (00 00 ff ff).
+
+    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+  output buffer, but the output is not aligned to a byte boundary.  All of the
+  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+  This completes the current deflate block and follows it with an empty fixed
+  codes block that is 10 bits long.  This assures that enough bytes are output
+  in order for the decompressor to finish the block before the empty fixed
+  codes block.
+
+    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+  seven bits of the current block are held to be written as the next byte after
+  the next deflate block is completed.  In this case, the decompressor may not
+  be provided enough bits at this point in order to complete decompression of
+  the data provided so far to the compressor.  It may need to wait for the next
+  block to be emitted.  This is for advanced applications that need to control
+  the emission of deflate blocks.
 
     If flush is set to Z_FULL_FLUSH, all output is flushed as with
   Z_SYNC_FLUSH, and the compression state is reset so that decompression can
   restart from this point if previous compressed data has been damaged or if
-  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
-  the compression.
+  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
+  compression.
 
     If deflate returns with avail_out == 0, this function must be called again
   with the same value of the flush parameter and more output space (updated
   avail_out), until the flush is complete (deflate returns with non-zero
-  avail_out).
+  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+  avail_out is greater than six to avoid repeated flush markers due to
+  avail_out == 0 on return.
 
     If the parameter flush is set to Z_FINISH, pending input is processed,
-  pending output is flushed and deflate returns with Z_STREAM_END if there
-  was enough output space; if deflate returns with Z_OK, this function must be
-  called again with Z_FINISH and more output space (updated avail_out) but no
-  more input data, until it returns with Z_STREAM_END or an error. After
-  deflate has returned Z_STREAM_END, the only possible operations on the
-  stream are deflateReset or deflateEnd.
-
-    Z_FINISH can be used immediately after deflateInit if all the compression
-  is to be done in a single step. In this case, avail_out must be at least
-  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
-  Z_STREAM_END, then it must be called again as described above.
-
-    deflate() sets strm->adler to the adler32 checksum of all input read
-  so far (that is, total_in bytes).
-
-    deflate() may update data_type if it can make a good guess about
-  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
-  binary. This field is only for information purposes and does not affect
-  the compression algorithm in any manner.
+  pending output is flushed and deflate returns with Z_STREAM_END if there was
+  enough output space.  If deflate returns with Z_OK or Z_BUF_ERROR, this
+  function must be called again with Z_FINISH and more output space (updated
+  avail_out) but no more input data, until it returns with Z_STREAM_END or an
+  error.  After deflate has returned Z_STREAM_END, the only possible operations
+  on the stream are deflateReset or deflateEnd.
+
+    Z_FINISH can be used in the first deflate call after deflateInit if all the
+  compression is to be done in a single step.  In order to complete in one
+  call, avail_out must be at least the value returned by deflateBound (see
+  below).  Then deflate is guaranteed to return Z_STREAM_END.  If not enough
+  output space is provided, deflate will not return Z_STREAM_END, and it must
+  be called again as described above.
+
+    deflate() sets strm->adler to the Adler-32 checksum of all input read
+  so far (that is, total_in bytes).  If a gzip stream is being generated, then
+  strm->adler will be the CRC-32 checksum of the input read so far.  (See
+  deflateInit2 below.)
+
+    deflate() may update strm->data_type if it can make a good guess about
+  the input data type (Z_BINARY or Z_TEXT).  If in doubt, the data is
+  considered binary.  This field is only for information purposes and does not
+  affect the compression algorithm in any manner.
 
     deflate() returns Z_OK if some progress has been made (more input
   processed or more output produced), Z_STREAM_END if all input has been
   consumed and all output has been produced (only when flush is set to
   Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
-  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
-  (for example avail_in or avail_out was zero).
+  if next_in or next_out was Z_NULL or the state was inadvertently written over
+  by the application), or Z_BUF_ERROR if no progress is possible (for example
+  avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not fatal, and
+  deflate() can be called again with more input and more output space to
+  continue compressing.
 */
 
 
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
 /*
      All dynamically allocated data structures for this stream are freed.
-   This function discards any unprocessed input and does not flush any
-   pending output.
+   This function discards any unprocessed input and does not flush any pending
+   output.
 
      deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
    stream state was inconsistent, Z_DATA_ERROR if the stream was freed
-   prematurely (some input or output was discarded). In the error case,
-   msg may be set but then points to a static string (which must not be
+   prematurely (some input or output was discarded).  In the error case, msg
+   may be set but then points to a static string (which must not be
    deallocated).
 */
 
+#endif  /* !Z_FREETYPE */
 
 /*
-ZEXTERN(int)  inflateInit OF((z_streamp strm));
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
 
-     Initializes the internal stream state for decompression. The fields
+     Initializes the internal stream state for decompression.  The fields
    next_in, avail_in, zalloc, zfree and opaque must be initialized before by
-   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
-   value depends on the compression method), inflateInit determines the
-   compression method from the zlib header and allocates all data structures
-   accordingly; otherwise the allocation will be deferred to the first call of
-   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
-   use default allocation functions.
+   the caller.  In the current version of inflate, the provided input is not
+   read or consumed.  The allocation of a sliding window will be deferred to
+   the first call of inflate (if the decompression does not complete on the
+   first call).  If zalloc and zfree are set to Z_NULL, inflateInit updates
+   them to use default allocation functions.
 
      inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
-   version assumed by the caller.  msg is set to null if there is no error
-   message. inflateInit does not perform any decompression apart from reading
-   the zlib header if present: this will be done by inflate().  (So next_in and
-   avail_in may be modified, but next_out and avail_out are unchanged.)
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit does not perform any decompression.
+   Actual decompression will be done by inflate().  So next_in, and avail_in,
+   next_out, and avail_out are unused and unchanged.  The current
+   implementation of inflateInit() does not process any header information --
+   that is deferred until inflate() is called.
 */
 
 
-ZEXTERN(int) inflate OF((z_streamp strm, int flush));
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
 /*
     inflate decompresses as much data as possible, and stops when the input
-  buffer becomes empty or the output buffer becomes full. It may some
-  introduce some output latency (reading input without producing any output)
-  except when forced to flush.
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
 
-  The detailed semantics are as follows. inflate performs one or both of the
+  The detailed semantics are as follows.  inflate performs one or both of the
   following actions:
 
   - Decompress more input starting at next_in and update next_in and avail_in
-    accordingly. If not all input can be processed (because there is not
-    enough room in the output buffer), next_in is updated and processing
-    will resume at this point for the next call of inflate().
-
-  - Provide more output starting at next_out and update next_out and avail_out
-    accordingly.  inflate() provides as much output as possible, until there
-    is no more input data or no more space in the output buffer (see below
-    about the flush parameter).
-
-  Before the call of inflate(), the application should ensure that at least
-  one of the actions is possible, by providing more input and/or consuming
-  more output, and updating the next_* and avail_* values accordingly.
-  The application can consume the uncompressed output when it wants, for
-  example when the output buffer is full (avail_out == 0), or after each
-  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
-  must be called again after making room in the output buffer because there
-  might be more output pending.
-
-    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
-  output as possible to the output buffer. The flushing behavior of inflate is
-  not specified for values of the flush parameter other than Z_SYNC_FLUSH
-  and Z_FINISH, but the current implementation actually flushes as much output
-  as possible anyway.
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), then next_in and avail_in are updated
+    accordingly, and processing will resume at this point for the next call of
+    inflate().
+
+  - Generate more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there is
+    no more input data or no more space in the output buffer (see below about
+    the flush parameter).
+
+    Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating the next_* and avail_* values accordingly.  If the
+  caller of inflate() does not provide both available input and available
+  output space, it is possible that there will be no progress made.  The
+  application can consume the uncompressed output when it wants, for example
+  when the output buffer is full (avail_out == 0), or after each call of
+  inflate().  If inflate returns Z_OK and with zero avail_out, it must be
+  called again after making room in the output buffer because there might be
+  more output pending.
+
+    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
+  output as possible to the output buffer.  Z_BLOCK requests that inflate()
+  stop if and when it gets to the next deflate block boundary.  When decoding
+  the zlib or gzip format, this will cause inflate() to return immediately
+  after the header and before the first block.  When doing a raw inflate,
+  inflate() will go ahead and process the first block, and will return when it
+  gets to the end of that block, or when it runs out of data.
+
+    The Z_BLOCK option assists in appending to or combining deflate streams.
+  To assist in this, on return inflate() always sets strm->data_type to the
+  number of unused bits in the last byte taken from strm->next_in, plus 64 if
+  inflate() is currently decoding the last block in the deflate stream, plus
+  128 if inflate() returned immediately after decoding an end-of-block code or
+  decoding the complete header up to just before the first byte of the deflate
+  stream.  The end-of-block will not be indicated until all of the uncompressed
+  data from that block has been written to strm->next_out.  The number of
+  unused bits may in general be greater than seven, except when bit 7 of
+  data_type is set, in which case the number of unused bits will be less than
+  eight.  data_type is set as noted here every time inflate() returns for all
+  flush options, and so can be used to determine the amount of currently
+  consumed input in bits.
+
+    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+  end of each deflate block header is reached, before any actual data in that
+  block is decoded.  This allows the caller to determine the length of the
+  deflate block header for later use in random access within a deflate block.
+  256 is added to the value of strm->data_type when inflate() returns
+  immediately after reaching the end of the deflate block header.
 
     inflate() should normally be called until it returns Z_STREAM_END or an
-  error. However if all decompression is to be performed in a single step
-  (a single call of inflate), the parameter flush should be set to
-  Z_FINISH. In this case all pending input is processed and all pending
-  output is flushed; avail_out must be large enough to hold all the
-  uncompressed data. (The size of the uncompressed data may have been saved
-  by the compressor for this purpose.) The next operation on this stream must
-  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
-  is never required, but can be used to inform inflate that a faster routine
-  may be used for the single inflate() call.
-
-     If a preset dictionary is needed at this point (see inflateSetDictionary
-  below), inflate sets strm-adler to the adler32 checksum of the
-  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise
-  it sets strm->adler to the adler32 checksum of all output produced
-  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
-  an error code as described below. At the end of the stream, inflate()
-  checks that its computed adler32 checksum is equal to that saved by the
-  compressor and returns Z_STREAM_END only if the checksum is correct.
+  error.  However if all decompression is to be performed in a single step (a
+  single call of inflate), the parameter flush should be set to Z_FINISH.  In
+  this case all pending input is processed and all pending output is flushed;
+  avail_out must be large enough to hold all of the uncompressed data for the
+  operation to complete.  (The size of the uncompressed data may have been
+  saved by the compressor for this purpose.)  The use of Z_FINISH is not
+  required to perform an inflation in one step.  However it may be used to
+  inform inflate that a faster approach can be used for the single inflate()
+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
+  stream completes, which reduces inflate's memory footprint.  If the stream
+  does not complete, either because not all of the stream is provided or not
+  enough output space is provided, then a sliding window will be allocated and
+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+  been used.
+
+     In this implementation, inflate() always flushes as much output as
+  possible to the output buffer, and always uses the faster approach on the
+  first call.  So the effects of the flush parameter in this implementation are
+  on the return value of inflate() as noted below, when inflate() returns early
+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+  memory for a sliding window when Z_FINISH is used.
+
+     If a preset dictionary is needed after this call (see inflateSetDictionary
+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+  strm->adler to the Adler-32 checksum of all output produced so far (that is,
+  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+  below.  At the end of the stream, inflate() checks that its computed Adler-32
+  checksum is equal to that saved by the compressor and returns Z_STREAM_END
+  only if the checksum is correct.
+
+    inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+  deflate data.  The header type is detected automatically, if requested when
+  initializing with inflateInit2().  Any information contained in the gzip
+  header is not retained unless inflateGetHeader() is used.  When processing
+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+  produced so far.  The CRC-32 is checked against the gzip trailer, as is the
+  uncompressed length, modulo 2^32.
 
     inflate() returns Z_OK if some progress has been made (more input processed
   or more output produced), Z_STREAM_END if the end of the compressed data has
   been reached and all uncompressed output has been produced, Z_NEED_DICT if a
   preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
-  corrupted (input stream not conforming to the zlib format or incorrect
-  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
-  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
-  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
-  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
-  case, the application may then call inflateSync to look for a good
-  compression block.
+  corrupted (input stream not conforming to the zlib format or incorrect check
+  value, in which case strm->msg points to a string with a more specific
+  error), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+  next_in or next_out was Z_NULL, or the state was inadvertently written over
+  by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR
+  if no progress was possible or if there was not enough room in the output
+  buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
+  inflate() can be called again with more input and more output space to
+  continue decompressing.  If Z_DATA_ERROR is returned, the application may
+  then call inflateSync() to look for a good compression block if a partial
+  recovery of the data is to be attempted.
 */
 
 
-ZEXTERN(int)  inflateEnd OF((z_streamp strm));
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
 /*
      All dynamically allocated data structures for this stream are freed.
-   This function discards any unprocessed input and does not flush any
-   pending output.
+   This function discards any unprocessed input and does not flush any pending
+   output.
 
-     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-   was inconsistent. In the error case, msg may be set but then points to a
-   static string (which must not be deallocated).
+     inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state
+   was inconsistent.
 */
 
+
                         /* Advanced functions */
 
 /*
     The following functions are needed only in some special applications.
 */
 
+#ifndef Z_FREETYPE
+
 /*
-ZEXTERN(int)  deflateInit2 OF((z_streamp strm,
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
                                      int  level,
                                      int  method,
                                      int  windowBits,
                                      int  memLevel,
                                      int  strategy));
 
-     This is another version of deflateInit with more compression options. The
-   fields next_in, zalloc, zfree and opaque must be initialized before by
-   the caller.
+     This is another version of deflateInit with more compression options.  The
+   fields zalloc, zfree and opaque must be initialized before by the caller.
 
-     The method parameter is the compression method. It must be Z_DEFLATED in
+     The method parameter is the compression method.  It must be Z_DEFLATED in
    this version of the library.
 
      The windowBits parameter is the base two logarithm of the window size
    (the size of the history buffer).  It should be in the range 8..15 for this
-   version of the library. Larger values of this parameter result in better
-   compression at the expense of memory usage. The default value is 15 if
+   version of the library.  Larger values of this parameter result in better
+   compression at the expense of memory usage.  The default value is 15 if
    deflateInit is used instead.
 
+     For the current implementation of deflate(), a windowBits value of 8 (a
+   window size of 256 bytes) is not supported.  As a result, a request for 8
+   will result in 9 (a 512-byte window).  In that case, providing 8 to
+   inflateInit2() will result in an error when the zlib header with 9 is
+   checked against the initialization of inflate().  The remedy is to not use 8
+   with deflateInit2() with this initialization, or at least in that case use 9
+   with inflateInit2().
+
+     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
+   determines the window size.  deflate() will then generate raw deflate data
+   with no zlib header or trailer, and will not compute a check value.
+
+     windowBits can also be greater than 15 for optional gzip encoding.  Add
+   16 to windowBits to write a simple gzip header and trailer around the
+   compressed data instead of a zlib wrapper.  The gzip header will have no
+   file name, no extra data, no comment, no modification time (set to zero), no
+   header crc, and the operating system will be set to the appropriate value,
+   if the operating system was determined at compile time.  If a gzip stream is
+   being written, strm->adler is a CRC-32 instead of an Adler-32.
+
+     For raw deflate or gzip encoding, a request for a 256-byte window is
+   rejected as invalid, since only the zlib header provides a means of
+   transmitting the window size to the decompressor.
+
      The memLevel parameter specifies how much memory should be allocated
-   for the internal compression state. memLevel=1 uses minimum memory but
-   is slow and reduces compression ratio; memLevel=9 uses maximum memory
-   for optimal speed. The default value is 8. See zconf.h for total memory
-   usage as a function of windowBits and memLevel.
+   for the internal compression state.  memLevel=1 uses minimum memory but is
+   slow and reduces compression ratio; memLevel=9 uses maximum memory for
+   optimal speed.  The default value is 8.  See zconf.h for total memory usage
+   as a function of windowBits and memLevel.
 
-     The strategy parameter is used to tune the compression algorithm. Use the
+     The strategy parameter is used to tune the compression algorithm.  Use the
    value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-   filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
-   string match).  Filtered data consists mostly of small values with a
-   somewhat random distribution. In this case, the compression algorithm is
-   tuned to compress them better. The effect of Z_FILTERED is to force more
-   Huffman coding and less string matching; it is somewhat intermediate
-   between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
-   the compression ratio but not the correctness of the compressed output even
-   if it is not set appropriately.
-
-      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
-   method). msg is set to null if there is no error message.  deflateInit2 does
-   not perform any compression: this will be done by deflate().
+   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match), or Z_RLE to limit match distances to one (run-length
+   encoding).  Filtered data consists mostly of small values with a somewhat
+   random distribution.  In this case, the compression algorithm is tuned to
+   compress them better.  The effect of Z_FILTERED is to force more Huffman
+   coding and less string matching; it is somewhat intermediate between
+   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
+   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
+   strategy parameter only affects the compression ratio but not the
+   correctness of the compressed output even if it is not set appropriately.
+   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+   decoder for special applications.
+
+     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
+   set to null if there is no error message.  deflateInit2 does not perform any
+   compression: this will be done by deflate().
 */
 
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
 /*
      Initializes the compression dictionary from the given byte sequence
-   without producing any compressed output. This function must be called
-   immediately after deflateInit, deflateInit2 or deflateReset, before any
-   call of deflate. The compressor and decompressor must use exactly the same
-   dictionary (see inflateSetDictionary).
+   without producing any compressed output.  When using the zlib format, this
+   function must be called immediately after deflateInit, deflateInit2 or
+   deflateReset, and before any call of deflate.  When doing raw deflate, this
+   function must be called either before any call of deflate, or immediately
+   after the completion of a deflate block, i.e. after all input has been
+   consumed and all output has been delivered when using any of the flush
+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
+   compressor and decompressor must use exactly the same dictionary (see
+   inflateSetDictionary).
 
      The dictionary should consist of strings (byte sequences) that are likely
    to be encountered later in the data to be compressed, with the most commonly
-   used strings preferably put towards the end of the dictionary. Using a
+   used strings preferably put towards the end of the dictionary.  Using a
    dictionary is most useful when the data to be compressed is short and can be
    predicted with good accuracy; the data can then be compressed better than
    with the default empty dictionary.
 
      Depending on the size of the compression data structures selected by
    deflateInit or deflateInit2, a part of the dictionary may in effect be
-   discarded, for example if the dictionary is larger than the window size in
-   deflate or deflate2. Thus the strings most likely to be useful should be
-   put at the end of the dictionary, not at the front.
+   discarded, for example if the dictionary is larger than the window size
+   provided in deflateInit or deflateInit2.  Thus the strings most likely to be
+   useful should be put at the end of the dictionary, not at the front.  In
+   addition, the current implementation of deflate will use at most the window
+   size minus 262 bytes of the provided dictionary.
 
-     Upon return of this function, strm->adler is set to the Adler32 value
+     Upon return of this function, strm->adler is set to the Adler-32 value
    of the dictionary; the decompressor may later use this value to determine
-   which dictionary has been used by the compressor. (The Adler32 value
+   which dictionary has been used by the compressor.  (The Adler-32 value
    applies to the whole dictionary even if only a subset of the dictionary is
-   actually used by the compressor.)
+   actually used by the compressor.) If a raw deflate was requested, then the
+   Adler-32 value is not computed and strm->adler is not set.
 
      deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
-   parameter is invalid (such as NULL dictionary) or the stream state is
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
    inconsistent (for example if deflate has already been called for this stream
-   or if the compression method is bsort). deflateSetDictionary does not
-   perform any compression: this will be done by deflate().
+   or if not at a block boundary for raw deflate).  deflateSetDictionary does
+   not perform any compression: this will be done by deflate().
 */
 
+ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by deflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If deflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     deflateGetDictionary() may return a length less than the window size, even
+   when more than the window size in input has been provided. It may return up
+   to 258 bytes less in that case, due to how zlib's implementation of deflate
+   manages the sliding window and lookahead for matches, where matches can be
+   up to 258 bytes long. If the application needs the last window-size bytes of
+   input, then that would need to be saved by the application outside of zlib.
+
+     deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+                                    z_streamp source));
 /*
      Sets the destination stream as a complete copy of the source stream.
 
      This function can be useful when several compression strategies will be
    tried, for example when there are several ways of pre-processing the input
-   data with a filter. The streams that will be discarded should then be freed
+   data with a filter.  The streams that will be discarded should then be freed
    by calling deflateEnd.  Note that deflateCopy duplicates the internal
-   compression state which can be quite large, so this strategy is slow and
-   can consume lots of memory.
+   compression state which can be quite large, so this strategy is slow and can
+   consume lots of memory.
 
      deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
    enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-   (such as zalloc being NULL). msg is left unchanged in both source and
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
    destination.
 */
 
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
 /*
-     This function is equivalent to deflateEnd followed by deflateInit,
-   but does not free and reallocate all the internal compression state.
-   The stream will keep the same compression level and any other attributes
-   that may have been set by deflateInit2.
+     This function is equivalent to deflateEnd followed by deflateInit, but
+   does not free and reallocate the internal compression state.  The stream
+   will leave the compression level and any other attributes that may have been
+   set unchanged.
 
-      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being NULL).
+     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
 */
 
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+                                      int level,
+                                      int strategy));
 /*
      Dynamically update the compression level and compression strategy.  The
-   interpretation of level and strategy is as in deflateInit2.  This can be
+   interpretation of level and strategy is as in deflateInit2().  This can be
    used to switch between compression and straight copy of the input data, or
-   to switch to a different kind of input data requiring a different
-   strategy. If the compression level is changed, the input available so far
-   is compressed with the old level (and may be flushed); the new level will
-   take effect only at the next call of deflate().
+   to switch to a different kind of input data requiring a different strategy.
+   If the compression approach (which is a function of the level) or the
+   strategy is changed, and if there have been any deflate() calls since the
+   state was initialized or reset, then the input available so far is
+   compressed with the old level and strategy using deflate(strm, Z_BLOCK).
+   There are three approaches for the compression levels 0, 1..3, and 4..9
+   respectively.  The new level and strategy will take effect at the next call
+   of deflate().
+
+     If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
+   not have enough output space to complete, then the parameter change will not
+   take effect.  In this case, deflateParams() can be called again with the
+   same parameters and more output space to try again.
+
+     In order to assure a change in the parameters on the first try, the
+   deflate stream should be flushed using deflate() with Z_BLOCK or other flush
+   request until strm.avail_out is not zero, before calling deflateParams().
+   Then no more input data should be provided before the deflateParams() call.
+   If this is done, the old level and strategy will be applied to the data
+   compressed before deflateParams(), and the new level and strategy will be
+   applied to the the data compressed after deflateParams().
+
+     deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream
+   state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if
+   there was not enough output space to complete the compression of the
+   available input data before a change in the strategy or approach.  Note that
+   in the case of a Z_BUF_ERROR, the parameters are not changed.  A return
+   value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be
+   retried with more output space.
+*/
 
-     Before the call of deflateParams, the stream state must be set as for
-   a call of deflate(), since the currently available input may have to
-   be compressed and flushed. In particular, strm->avail_out must be non-zero.
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+                                    int good_length,
+                                    int max_lazy,
+                                    int nice_length,
+                                    int max_chain));
+/*
+     Fine tune deflate's internal compression parameters.  This should only be
+   used by someone who understands the algorithm used by zlib's deflate for
+   searching for the best matching string, and even then only by the most
+   fanatic optimizer trying to squeeze out the last compressed bit for their
+   specific input data.  Read the deflate.c source code for the meaning of the
+   max_lazy, good_length, nice_length, and max_chain parameters.
+
+     deflateTune() can be called after deflateInit() or deflateInit2(), and
+   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
 
-     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
-   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
-   if strm->avail_out was zero.
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+                                       uLong sourceLen));
+/*
+     deflateBound() returns an upper bound on the compressed size after
+   deflation of sourceLen bytes.  It must be called after deflateInit() or
+   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
+   to allocate an output buffer for deflation in a single pass, and so would be
+   called before deflate().  If that first deflate() call is provided the
+   sourceLen input bytes, an output buffer allocated to the size returned by
+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+   to return Z_STREAM_END.  Note that it is possible for the compressed size to
+   be larger than the value returned by deflateBound() if flush options other
+   than Z_FINISH or Z_NO_FLUSH are used.
 */
 
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+                                       unsigned *pending,
+                                       int *bits));
+/*
+     deflatePending() returns the number of bytes and bits of output that have
+   been generated, but not yet provided in the available output.  The bytes not
+   provided would be due to the available output space having being consumed.
+   The number of bits of output not provided are between 0 and 7, where they
+   await more bits to join them in order to fill out a full byte.  If pending
+   or bits are Z_NULL, then those values are not set.
+
+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
 /*
-ZEXTERN(int)  inflateInit2 OF((z_streamp strm,
+     deflatePrime() inserts bits in the deflate output stream.  The intent
+   is that this function is used to start off the deflate output with the bits
+   leftover from a previous deflate stream when appending to it.  As such, this
+   function can only be used for raw deflate, and must be used before the first
+   deflate() call after a deflateInit2() or deflateReset().  bits must be less
+   than or equal to 16, and that many of the least significant bits of value
+   will be inserted in the output.
+
+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     deflateSetHeader() provides gzip header information for when a gzip
+   stream is requested by deflateInit2().  deflateSetHeader() may be called
+   after deflateInit2() or deflateReset() and before the first call of
+   deflate().  The text, time, os, extra field, name, and comment information
+   in the provided gz_header structure are written to the gzip header (xflag is
+   ignored -- the extra flags are set according to the compression level).  The
+   caller must assure that, if not Z_NULL, name and comment are terminated with
+   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+   available there.  If hcrc is true, a gzip header crc is included.  Note that
+   the current versions of the command-line version of gzip (up through version
+   1.3.x) do not support header crc's, and will report that it is a "multi-part
+   gzip file" and give up.
+
+     If deflateSetHeader is not used, the default gzip header has text false,
+   the time set to zero, and os set to 255, with no extra, name, or comment
+   fields.  The gzip header is returned to the default state by deflateReset().
+
+     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
                                      int  windowBits));
 
-     This is another version of inflateInit with an extra parameter. The
+     This is another version of inflateInit with an extra parameter.  The
    fields next_in, avail_in, zalloc, zfree and opaque must be initialized
    before by the caller.
 
      The windowBits parameter is the base two logarithm of the maximum window
    size (the size of the history buffer).  It should be in the range 8..15 for
-   this version of the library. The default value is 15 if inflateInit is used
-   instead. If a compressed stream with a larger window size is given as
-   input, inflate() will return with the error code Z_DATA_ERROR instead of
-   trying to allocate a larger window.
-
-      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
-   memLevel). msg is set to null if there is no error message.  inflateInit2
-   does not perform any decompression apart from reading the zlib header if
-   present: this will be done by inflate(). (So next_in and avail_in may be
-   modified, but next_out and avail_out are unchanged.)
+   this version of the library.  The default value is 15 if inflateInit is used
+   instead.  windowBits must be greater than or equal to the windowBits value
+   provided to deflateInit2() while compressing, or it must be equal to 15 if
+   deflateInit2() was not used.  If a compressed stream with a larger window
+   size is given as input, inflate() will return with the error code
+   Z_DATA_ERROR instead of trying to allocate a larger window.
+
+     windowBits can also be zero to request that inflate use the window size in
+   the zlib header of the compressed stream.
+
+     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
+   determines the window size.  inflate() will then process raw deflate data,
+   not looking for a zlib or gzip header, not generating a check value, and not
+   looking for any check values for comparison at the end of the stream.  This
+   is for use with other formats that use the deflate compressed data format
+   such as zip.  Those formats provide their own check values.  If a custom
+   format is developed using the raw deflate format for compressed data, it is
+   recommended that a check value such as an Adler-32 or a CRC-32 be applied to
+   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
+   most applications, the zlib format should be used as is.  Note that comments
+   above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+     windowBits can also be greater than 15 for optional gzip decoding.  Add
+   32 to windowBits to enable zlib and gzip decoding with automatic header
+   detection, or add 16 to decode only the gzip format (the zlib format will
+   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
+   CRC-32 instead of an Adler-32.  Unlike the gunzip utility and gzread() (see
+   below), inflate() will *not* automatically decode concatenated gzip members.
+   inflate() will return Z_STREAM_END at the end of the gzip member.  The state
+   would need to be reset to continue decoding a subsequent gzip member.  This
+   *must* be done if there is more data after a gzip member, in order for the
+   decompression to be compliant with the gzip standard (RFC 1952).
+
+     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit2 does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit2() does not process any header information -- that is
+   deferred until inflate() is called.
 */
 
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
 /*
      Initializes the decompression dictionary from the given uncompressed byte
-   sequence. This function must be called immediately after a call of inflate
-   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
-   can be determined from the Adler32 value returned by this call of
-   inflate. The compressor and decompressor must use exactly the same
-   dictionary (see deflateSetDictionary).
+   sequence.  This function must be called immediately after a call of inflate,
+   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
+   can be determined from the Adler-32 value returned by that call of inflate.
+   The compressor and decompressor must use exactly the same dictionary (see
+   deflateSetDictionary).  For raw inflate, this function can be called at any
+   time to set the dictionary.  If the provided dictionary is smaller than the
+   window and there is already data in the window, then the provided dictionary
+   will amend what's there.  The application must insure that the dictionary
+   that was used for compression is provided.
 
      inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
-   parameter is invalid (such as NULL dictionary) or the stream state is
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
    inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-   expected one (incorrect Adler32 value). inflateSetDictionary does not
+   expected one (incorrect Adler-32 value).  inflateSetDictionary does not
    perform any decompression: this will be done by subsequent calls of
    inflate().
 */
 
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by inflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If inflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
 /*
-    Skips invalid compressed data until a full flush point (see above the
-  description of deflate with Z_FULL_FLUSH) can be found, or until all
-  available input is skipped. No output is provided.
+     Skips invalid compressed data until a possible full flush point (see above
+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+   available input is skipped.  No output is provided.
+
+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+   All full flush points have this pattern, but not all occurrences of this
+   pattern are full flush points.
+
+     inflateSync returns Z_OK if a possible full flush point has been found,
+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+   In the success case, the application may save the current current value of
+   total_in which indicates where valid compressed data was found.  In the
+   error case, the application may repeatedly call inflateSync, providing more
+   input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
 
-    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
-  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
-  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
-  case, the application may save the current value of total_in which
-  indicates where valid compressed data was found. In the error case, the
-  application may repeatedly call inflateSync, providing more input each time,
-  until success or end of the input data.
+     This function can be useful when randomly accessing a large stream.  The
+   first pass through the stream can periodically record the inflate state,
+   allowing restarting inflate at those points when randomly accessing the
+   stream.
+
+     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
 */
 
-ZEXTERN(int)  inflateReset OF((z_streamp strm));
+#endif  /* !Z_FREETYPE */
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
 /*
      This function is equivalent to inflateEnd followed by inflateInit,
-   but does not free and reallocate all the internal decompression state.
-   The stream will keep attributes that may have been set by inflateInit2.
+   but does not free and reallocate the internal decompression state.  The
+   stream will keep attributes that may have been set by inflateInit2.
+
+     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+                                      int windowBits));
+/*
+     This function is the same as inflateReset, but it also permits changing
+   the wrap and window size requests.  The windowBits parameter is interpreted
+   the same as it is for inflateInit2.  If the window size is changed, then the
+   memory allocated for the window is freed, and the window will be reallocated
+   by inflate() if needed.
+
+     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+   the windowBits parameter is invalid.
+*/
+
+#ifndef Z_FREETYPE
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     This function inserts bits in the inflate input stream.  The intent is
+   that this function is used to start inflating at a bit position in the
+   middle of a byte.  The provided bits will be used before any bytes are used
+   from next_in.  This function should only be used with raw inflate, and
+   should be used before the first inflate() call after inflateInit2() or
+   inflateReset().  bits must be less than or equal to 16, and that many of the
+   least significant bits of value will be inserted in the input.
+
+     If bits is negative, then the input stream bit buffer is emptied.  Then
+   inflatePrime() can be called again to put bits in the buffer.  This is used
+   to clear out bits leftover after feeding inflate a block description prior
+   to feeding inflate codes.
+
+     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+     This function returns two values, one in the lower 16 bits of the return
+   value, and the other in the remaining upper bits, obtained by shifting the
+   return value down 16 bits.  If the upper value is -1 and the lower value is
+   zero, then inflate() is currently decoding information outside of a block.
+   If the upper value is -1 and the lower value is non-zero, then inflate is in
+   the middle of a stored block, with the lower value equaling the number of
+   bytes from the input remaining to copy.  If the upper value is not -1, then
+   it is the number of bits back from the current bit position in the input of
+   the code (literal or length/distance pair) currently being processed.  In
+   that case the lower value is the number of bytes already emitted for that
+   code.
+
+     A code is being processed if inflate is waiting for more input to complete
+   decoding of the code, or if it has completed decoding but is waiting for
+   more output space to write the literal or match data.
+
+     inflateMark() is used to mark locations in the input data for random
+   access, which may be at bit positions, and to note those cases where the
+   output of a code may span boundaries of random access blocks.  The current
+   location in the input stream can be determined from avail_in and data_type
+   as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+     inflateMark returns the value noted above, or -65536 if the provided
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     inflateGetHeader() requests that gzip header information be stored in the
+   provided gz_header structure.  inflateGetHeader() may be called after
+   inflateInit2() or inflateReset(), and before the first call of inflate().
+   As inflate() processes the gzip stream, head->done is zero until the header
+   is completed, at which time head->done is set to one.  If a zlib stream is
+   being decoded, then head->done is set to -1 to indicate that there will be
+   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
+   used to force inflate() to return immediately after header processing is
+   complete and before any actual data is decompressed.
+
+     The text, time, xflags, and os fields are filled in with the gzip header
+   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
+   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+   contains the maximum number of bytes to write to extra.  Once done is true,
+   extra_len contains the actual extra field length, and extra contains the
+   extra field, or that field truncated if extra_max is less than extra_len.
+   If name is not Z_NULL, then up to name_max characters are written there,
+   terminated with a zero unless the length is greater than name_max.  If
+   comment is not Z_NULL, then up to comm_max characters are written there,
+   terminated with a zero unless the length is greater than comm_max.  When any
+   of extra, name, or comment are not Z_NULL and the respective field is not
+   present in the header, then that field is set to Z_NULL to signal its
+   absence.  This allows the use of deflateSetHeader() with the returned
+   structure to duplicate the header.  However if those fields are set to
+   allocated memory, then the application will need to save those pointers
+   elsewhere so that they can be eventually freed.
+
+     If inflateGetHeader is not used, then the header information is simply
+   discarded.  The header is always checked for validity, including the header
+   CRC if present.  inflateReset() will reset the process to discard the header
+   information.  The application would need to call inflateGetHeader() again to
+   retrieve the header from the next gzip stream.
+
+     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+#endif  /* !Z_FREETYPE */
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+                                        unsigned char FAR *window));
+
+     Initialize the internal stream state for decompression using inflateBack()
+   calls.  The fields zalloc, zfree and opaque in strm must be initialized
+   before the call.  If zalloc and zfree are Z_NULL, then the default library-
+   derived memory allocation routines are used.  windowBits is the base two
+   logarithm of the window size, in the range 8..15.  window is a caller
+   supplied buffer of that size.  Except for special applications where it is
+   assured that deflate was used with small window sizes, windowBits must be 15
+   and a 32K byte window must be supplied to be able to decompress general
+   deflate streams.
+
+     See inflateBack() for the usage of these routines.
+
+     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+   allocated, or Z_VERSION_ERROR if the version of the library does not match
+   the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *,
+                                z_const unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
 
-      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being NULL).
+#ifndef Z_FREETYPE
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+                                    in_func in, void FAR *in_desc,
+                                    out_func out, void FAR *out_desc));
+/*
+     inflateBack() does a raw inflate with a single call using a call-back
+   interface for input and output.  This is potentially more efficient than
+   inflate() for file i/o applications, in that it avoids copying between the
+   output and the sliding window by simply making the window itself the output
+   buffer.  inflate() can be faster on modern CPUs when used with large
+   buffers.  inflateBack() trusts the application to not change the output
+   buffer passed by the output function, at least until inflateBack() returns.
+
+     inflateBackInit() must be called first to allocate the internal state
+   and to initialize the state with the user-provided window buffer.
+   inflateBack() may then be used multiple times to inflate a complete, raw
+   deflate stream with each call.  inflateBackEnd() is then called to free the
+   allocated state.
+
+     A raw deflate stream is one with no zlib or gzip header or trailer.
+   This routine would normally be used in a utility that reads zip or gzip
+   files and writes out uncompressed files.  The utility would decode the
+   header and process the trailer on its own, hence this routine expects only
+   the raw deflate stream to decompress.  This is different from the default
+   behavior of inflate(), which expects a zlib header and trailer around the
+   deflate stream.
+
+     inflateBack() uses two subroutines supplied by the caller that are then
+   called by inflateBack() for input and output.  inflateBack() calls those
+   routines until it reads a complete deflate stream and writes out all of the
+   uncompressed data, or until it encounters an error.  The function's
+   parameters and return types are defined above in the in_func and out_func
+   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
+   number of bytes of provided input, and a pointer to that input in buf.  If
+   there is no input available, in() must return zero -- buf is ignored in that
+   case -- and inflateBack() will return a buffer error.  inflateBack() will
+   call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].
+   out() should return zero on success, or non-zero on failure.  If out()
+   returns non-zero, inflateBack() will return with an error.  Neither in() nor
+   out() are permitted to change the contents of the window provided to
+   inflateBackInit(), which is also the buffer that out() uses to write from.
+   The length written by out() will be at most the window size.  Any non-zero
+   amount of input may be provided by in().
+
+     For convenience, inflateBack() can be provided input on the first call by
+   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
+   in() will be called.  Therefore strm->next_in must be initialized before
+   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
+   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
+   must also be initialized, and then if strm->avail_in is not zero, input will
+   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
+
+     The in_desc and out_desc parameters of inflateBack() is passed as the
+   first parameter of in() and out() respectively when they are called.  These
+   descriptors can be optionally used to pass any information that the caller-
+   supplied in() and out() functions need to do their job.
+
+     On return, inflateBack() will set strm->next_in and strm->avail_in to
+   pass back any unused input that was provided by the last in() call.  The
+   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+   if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+   in the deflate stream (in which case strm->msg is set to indicate the nature
+   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+   In the case of Z_BUF_ERROR, an input or output error can be distinguished
+   using strm->next_in which will be Z_NULL only if in() returned an error.  If
+   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+   non-zero.  (in() will always be called before out(), so strm->next_in is
+   assured to be defined if out() returns non-zero.)  Note that inflateBack()
+   cannot return Z_OK.
 */
 
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+     All memory allocated by inflateBackInit() is freed.
+
+     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+   state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+     1.0: size of uInt
+     3.2: size of uLong
+     5.4: size of voidpf (pointer)
+     7.6: size of z_off_t
+
+    Compiler, assembler, and debug options:
+     8: ZLIB_DEBUG
+     9: ASMV or ASMINF -- use ASM code
+     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+     11: 0 (reserved)
+
+    One-time table building (smaller code, but not thread-safe if true):
+     12: BUILDFIXED -- build static block decoding tables when needed
+     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+     14,15: 0 (reserved)
+
+    Library content (indicates missing functionality):
+     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+                          deflate code when not needed)
+     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+                    and decode gzip streams (to avoid linking crc code)
+     18-19: 0 (reserved)
+
+    Operation variations (changes in library functionality):
+     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+     21: FASTEST -- deflate algorithm with only one, lowest compression level
+     22,23: 0 (reserved)
+
+    The sprintf variant used by gzprintf (zero is best):
+     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+    Remainder:
+     27-31: 0 (reserved)
+ */
+
+#endif  /* !Z_FREETYPE */
+
+#ifndef Z_SOLO
 
                         /* utility functions */
 
 /*
-     The following utility functions are implemented on top of the
-   basic stream-oriented functions. To simplify the interface, some
-   default options are assumed (compression level and memory usage,
-   standard memory allocation functions). The source code of these
-   utility functions can easily be modified if you need special options.
+     The following utility functions are implemented on top of the basic
+   stream-oriented functions.  To simplify the interface, some default options
+   are assumed (compression level and memory usage, standard memory allocation
+   functions).  The source code of these utility functions can be modified if
+   you need special options.
 */
 
+ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
+                                 const Bytef *source, uLong sourceLen));
 /*
      Compresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be at least 0.1% larger than
-   sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
-   compressed buffer.
-     This function can be used to compress a whole file at once if the
-   input file is mmap'ed.
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed data.  compress() is equivalent to compress2() with a level
+   parameter of Z_DEFAULT_COMPRESSION.
+
      compress returns Z_OK if success, Z_MEM_ERROR if there was not
    enough memory, Z_BUF_ERROR if there was not enough room in the output
    buffer.
 */
 
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
+                                  const Bytef *source, uLong sourceLen,
+                                  int level));
 /*
-     Compresses the source buffer into the destination buffer. The level
+     Compresses the source buffer into the destination buffer.  The level
    parameter has the same meaning as in deflateInit.  sourceLen is the byte
-   length of the source buffer. Upon entry, destLen is the total size of the
-   destination buffer, which must be at least 0.1% larger than sourceLen plus
-   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
+   length of the source buffer.  Upon entry, destLen is the total size of the
+   destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed data.
 
      compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_BUF_ERROR if there was not enough room in the output buffer,
    Z_STREAM_ERROR if the level parameter is invalid.
 */
 
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+     compressBound() returns an upper bound on the compressed size after
+   compress() or compress2() on sourceLen bytes.  It would be used before a
+   compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+                                   const Bytef *source, uLong sourceLen));
 /*
      Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be large enough to hold the
-   entire uncompressed data. (The size of the uncompressed data must have
-   been saved previously by the compressor and transmitted to the decompressor
-   by some mechanism outside the scope of this compression library.)
-   Upon exit, destLen is the actual size of the compressed buffer.
-     This function can be used to decompress a whole file at once if the
-   input file is mmap'ed.
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be large enough to hold the entire
+   uncompressed data.  (The size of the uncompressed data must have been saved
+   previously by the compressor and transmitted to the decompressor by some
+   mechanism outside the scope of this compression library.) Upon exit, destLen
+   is the actual size of the uncompressed data.
 
      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
    enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted.
+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
+   the case where there is not enough room, uncompress() will fill the output
+   buffer with the uncompressed data up to that point.
+*/
+
+ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest,   uLongf *destLen,
+                                    const Bytef *source, uLong *sourceLen));
+/*
+     Same as uncompress, except that sourceLen is a pointer, where the
+   length of the source is *sourceLen.  On return, *sourceLen is the number of
+   source bytes consumed.
+*/
+
+                        /* gzip file access functions */
+
+/*
+     This library supports reading and writing files in gzip (.gz) format with
+   an interface similar to that of stdio, using the functions that start with
+   "gz".  The gzip format is different from the zlib format.  gzip is a gzip
+   wrapper, documented in RFC 1952, wrapped around a deflate stream.
 */
 
+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
 
 /*
-     Opens a gzip (.gz) file for reading or writing. The mode parameter
-   is as in fopen ("rb" or "wb") but can also include a compression level
-   ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
-   Huffman only compression as in "wb1h". (See the description
-   of deflateInit2 for more information about the strategy parameter.)
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+     Open the gzip (.gz) file at path for reading and decompressing, or
+   compressing and writing.  The mode parameter is as in fopen ("rb" or "wb")
+   but can also include a compression level ("wb9") or a strategy: 'f' for
+   filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h",
+   'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
+   as in "wb9F".  (See the description of deflateInit2 for more information
+   about the strategy parameter.)  'T' will request transparent writing or
+   appending with no compression and not using the gzip format.
+
+     "a" can be used instead of "w" to request that the gzip stream that will
+   be written be appended to the file.  "+" will result in an error, since
+   reading and writing to the same gzip file is not supported.  The addition of
+   "x" when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of "e" when
+   reading or writing will set the flag to close the file on an execve() call.
+
+     These functions, as well as gzip, will read and decode a sequence of gzip
+   streams in a file.  The append function of gzopen() can be used to create
+   such a file.  (Also see gzflush() for another way to do this.)  When
+   appending, gzopen does not test whether the file begins with a gzip stream,
+   nor does it look for the end of the gzip streams to begin appending.  gzopen
+   will simply append a gzip stream to the existing file.
 
      gzopen can be used to read a file which is not in gzip format; in this
-   case gzread will directly read from the file without decompression.
+   case gzread will directly read from the file without decompression.  When
+   reading, this will be detected automatically by looking for the magic two-
+   byte gzip header.
+
+     gzopen returns NULL if the file could not be opened, if there was
+   insufficient memory to allocate the gzFile state, or if an invalid mode was
+   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+   errno can be checked to determine if the reason gzopen failed was that the
+   file could not be opened.
+*/
 
-     gzopen returns NULL if the file could not be opened or if there was
-   insufficient memory to allocate the (de)compression state; errno
-   can be checked to distinguish the two cases (if errno is zero, the
-   zlib error is Z_MEM_ERROR).  */
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+     Associate a gzFile with the file descriptor fd.  File descriptors are
+   obtained from calls like open, dup, creat, pipe or fileno (if the file has
+   been previously opened with fopen).  The mode parameter is as in gzopen.
+
+     The next call of gzclose on the returned gzFile will also close the file
+   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+   mode);.  The duplicated descriptor should be saved to avoid a leak, since
+   gzdopen does not close fd if it fails.  If you are using fileno() to get the
+   file descriptor from a FILE *, then you will have to use dup() to avoid
+   double-close()ing the file descriptor.  Both gzclose() and fclose() will
+   close the associated file descriptor, so they need to have different file
+   descriptors.
+
+     gzdopen returns NULL if there was insufficient memory to allocate the
+   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+   provided, or '+' was provided), or if fd is -1.  The file descriptor is not
+   used until the next gz* read, write, seek, or close operation, so gzdopen
+   will not detect if fd is invalid (unless fd is -1).
+*/
 
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
 /*
-     gzdopen() associates a gzFile with the file descriptor fd.  File
-   descriptors are obtained from calls like open, dup, creat, pipe or
-   fileno (in the file has been previously opened with fopen).
-   The mode parameter is as in gzopen.
-     The next call of gzclose on the returned gzFile will also close the
-   file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
-   descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
-     gzdopen returns NULL if there was insufficient memory to allocate
-   the (de)compression state.
+     Set the internal buffer size used by this library's functions for file to
+   size.  The default buffer size is 8192 bytes.  This function must be called
+   after gzopen() or gzdopen(), and before any other calls that read or write
+   the file.  The buffer memory allocation is always deferred to the first read
+   or write.  Three times that size in buffer space is allocated.  A larger
+   buffer size of, for example, 64K or 128K bytes will noticeably increase the
+   speed of decompression (reading).
+
+     The new buffer size also affects the maximum length for gzprintf().
+
+     gzbuffer() returns 0 on success, or -1 on failure, such as being called
+   too late.
 */
 
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
 /*
-     Dynamically update the compression level or strategy. See the description
-   of deflateInit2 for the meaning of these parameters.
-     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
-   opened for writing.
+     Dynamically update the compression level and strategy for file.  See the
+   description of deflateInit2 for the meaning of these parameters. Previously
+   provided data is flushed before applying the parameter changes.
+
+     gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
+   opened for writing, Z_ERRNO if there is an error writing the flushed data,
+   or Z_MEM_ERROR if there is a memory allocation error.
 */
 
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
 /*
-     Reads the given number of uncompressed bytes from the compressed file.
-   If the input file was not in gzip format, gzread copies the given number
-   of bytes into the buffer.
-     gzread returns the number of uncompressed bytes actually read (0 for
-   end of file, -1 for error). */
+     Read and decompress up to len uncompressed bytes from file into buf.  If
+   the input file is not in gzip format, gzread copies the given number of
+   bytes into the buffer directly from the file.
+
+     After reaching the end of a gzip stream in the input, gzread will continue
+   to read, looking for another gzip stream.  Any number of gzip streams may be
+   concatenated in the input file, and will all be decompressed by gzread().
+   If something other than a gzip stream is encountered after a gzip stream,
+   that remaining trailing garbage is ignored (and no error is returned).
+
+     gzread can be used to read a gzip file that is being concurrently written.
+   Upon reaching the end of the input, gzread will return with the available
+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+   gzclearerr can be used to clear the end of file indicator in order to permit
+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
+   middle of a gzip stream.  Note that gzread does not return -1 in the event
+   of an incomplete gzip stream.  This error is deferred until gzclose(), which
+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+   stream.  Alternatively, gzerror can be used before gzclose to detect this
+   case.
+
+     gzread returns the number of uncompressed bytes actually read, less than
+   len for end of file, or -1 for error.  If len is too large to fit in an int,
+   then nothing is read, -1 is returned, and the error state is set to
+   Z_STREAM_ERROR.
+*/
 
+ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
+                                     gzFile file));
 /*
-     Writes the given number of uncompressed bytes into the compressed file.
-   gzwrite returns the number of uncompressed bytes actually written
-   (0 in case of error).
+     Read and decompress up to nitems items of size size from file into buf,
+   otherwise operating as gzread() does.  This duplicates the interface of
+   stdio's fread(), with size_t request and return types.  If the library
+   defines size_t, then z_size_t is identical to size_t.  If not, then z_size_t
+   is an unsigned integer type that can contain a pointer.
+
+     gzfread() returns the number of full items read of size size, or zero if
+   the end of the file was reached and a full item could not be read, or if
+   there was an error.  gzerror() must be consulted if zero is returned in
+   order to determine if there was an error.  If the multiplication of size and
+   nitems overflows, i.e. the product does not fit in a z_size_t, then nothing
+   is read, zero is returned, and the error state is set to Z_STREAM_ERROR.
+
+     In the event that the end of file is reached and only a partial item is
+   available at the end, i.e. the remaining uncompressed data length is not a
+   multiple of size, then the final partial item is nevetheless read into buf
+   and the end-of-file flag is set.  The length of the partial item read is not
+   provided, but could be inferred from the result of gztell().  This behavior
+   is the same as the behavior of fread() implementations in common libraries,
+   but it prevents the direct use of gzfread() to read a concurrently written
+   file, reseting and retrying on end-of-file, when size is not 1.
 */
 
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len));
 /*
-     Converts, formats, and writes the args to the compressed file under
-   control of the format string, as in fprintf. gzprintf returns the number of
-   uncompressed bytes actually written (0 in case of error).
+     Compress and write the len uncompressed bytes at buf to file. gzwrite
+   returns the number of uncompressed bytes written or 0 in case of error.
 */
 
+ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
+                                      z_size_t nitems, gzFile file));
 /*
-      Writes the given null-terminated string to the compressed file, excluding
+     Compress and write nitems items of size size from buf to file, duplicating
+   the interface of stdio's fwrite(), with size_t request and return types.  If
+   the library defines size_t, then z_size_t is identical to size_t.  If not,
+   then z_size_t is an unsigned integer type that can contain a pointer.
+
+     gzfwrite() returns the number of full items written of size size, or zero
+   if there was an error.  If the multiplication of size and nitems overflows,
+   i.e. the product does not fit in a z_size_t, then nothing is written, zero
+   is returned, and the error state is set to Z_STREAM_ERROR.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+     Convert, format, compress, and write the arguments (...) to file under
+   control of the string format, as in fprintf.  gzprintf returns the number of
+   uncompressed bytes actually written, or a negative zlib error code in case
+   of error.  The number of uncompressed bytes written is limited to 8191, or
+   one less than the buffer size given to gzbuffer().  The caller should assure
+   that this limit is not exceeded.  If it is exceeded, then gzprintf() will
+   return an error (0) with nothing written.  In this case, there may also be a
+   buffer overflow with unpredictable consequences, which is possible only if
+   zlib was compiled with the insecure functions sprintf() or vsprintf(),
+   because the secure snprintf() or vsnprintf() functions were not available.
+   This can be determined using zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+     Compress and write the given null-terminated string s to file, excluding
    the terminating null character.
-      gzputs returns the number of characters written, or -1 in case of error.
+
+     gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+     Read and decompress bytes from file into buf, until len-1 characters are
+   read, or until a newline character is read and transferred to buf, or an
+   end-of-file condition is encountered.  If any characters are read or if len
+   is one, the string is terminated with a null character.  If no characters
+   are read due to an end-of-file or len is less than one, then the buffer is
+   left untouched.
+
+     gzgets returns buf which is a null-terminated string, or it returns NULL
+   for end-of-file or in case of error.  If there was an error, the contents at
+   buf are indeterminate.
 */
 
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
 /*
-      Reads bytes from the compressed file until len-1 characters are read, or
-   a newline character is read and transferred to buf, or an end-of-file
-   condition is encountered.  The string is then terminated with a null
-   character.
-      gzgets returns buf, or Z_NULL in case of error.
+     Compress and write c, converted to an unsigned char, into file.  gzputc
+   returns the value that was written, or -1 in case of error.
 */
 
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
 /*
-      Writes c, converted to an unsigned char, into the compressed file.
-   gzputc returns the value that was written, or -1 in case of error.
+     Read and decompress one byte from file.  gzgetc returns this byte or -1
+   in case of end of file or error.  This is implemented as a macro for speed.
+   As such, it does not do all of the checking the other functions do.  I.e.
+   it does not check to see if file is NULL, nor whether the structure file
+   points to has been clobbered or not.
 */
 
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
 /*
-      Reads one byte from the compressed file. gzgetc returns this byte
-   or -1 in case of end of file or error.
+     Push c back onto the stream for file to be read as the first character on
+   the next read.  At least one character of push-back is always allowed.
+   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
+   fail if c is -1, and may fail if a character has been pushed but not read
+   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
+   output buffer size of pushed characters is allowed.  (See gzbuffer above.)
+   The pushed character will be discarded if the stream is repositioned with
+   gzseek() or gzrewind().
 */
 
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
 /*
-     Flushes all pending output into the compressed file. The parameter
-   flush is as in the deflate() function. The return value is the zlib
-   error number (see function gzerror below). gzflush returns Z_OK if
-   the flush parameter is Z_FINISH and all output could be flushed.
-     gzflush should be called only when strictly necessary because it can
-   degrade compression.
+     Flush all pending output to file.  The parameter flush is as in the
+   deflate() function.  The return value is the zlib error number (see function
+   gzerror below).  gzflush is only permitted when writing.
+
+     If the flush parameter is Z_FINISH, the remaining data is written and the
+   gzip stream is completed in the output.  If gzwrite() is called again, a new
+   gzip stream will be started in the output.  gzread() is able to read such
+   concatenated gzip streams.
+
+     gzflush should be called only when strictly necessary because it will
+   degrade compression if called too often.
 */
 
 /*
-      Sets the starting position for the next gzread or gzwrite on the
-   given compressed file. The offset represents a number of bytes in the
-   uncompressed data stream. The whence parameter is defined as in lseek(2);
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+                                   z_off_t offset, int whence));
+
+     Set the starting position to offset relative to whence for the next gzread
+   or gzwrite on file.  The offset represents a number of bytes in the
+   uncompressed data stream.  The whence parameter is defined as in lseek(2);
    the value SEEK_END is not supported.
+
      If the file is opened for reading, this function is emulated but can be
-   extremely slow. If the file is opened for writing, only forward seeks are
+   extremely slow.  If the file is opened for writing, only forward seeks are
    supported; gzseek then compresses a sequence of zeroes up to the new
    starting position.
 
-      gzseek returns the resulting offset location as measured in bytes from
+     gzseek returns the resulting offset location as measured in bytes from
    the beginning of the uncompressed stream, or -1 in case of error, in
    particular if the file is opened for writing and the new starting position
    would be before the current position.
 */
 
+ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
 /*
-     Rewinds the given file. This function is supported only for reading.
+     Rewind file. This function is supported only for reading.
 
-   gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
 */
 
 /*
-     Returns the starting position for the next gzread or gzwrite on the
-   given compressed file. This position represents a number of bytes in the
-   uncompressed data stream.
+ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
 
-   gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+     Return the starting position for the next gzread or gzwrite on file.
+   This position represents a number of bytes in the uncompressed data stream,
+   and is zero when starting, even if appending or reading a gzip stream from
+   the middle of a file using gzdopen().
+
+     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+     Return the current compressed (actual) read or write offset of file.  This
+   offset includes the count of bytes that precede the gzip stream, for example
+   when appending or when using gzdopen() for reading.  When reading, the
+   offset does not include as yet unused buffered input.  This information can
+   be used for a progress indicator.  On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+     Return true (1) if the end-of-file indicator for file has been set while
+   reading, false (0) otherwise.  Note that the end-of-file indicator is set
+   only if the read tried to go past the end of the input, but came up short.
+   Therefore, just like feof(), gzeof() may return false even if there is no
+   more data to read, in the event that the last read request was for the exact
+   number of bytes remaining in the input file.  This will happen if the input
+   file size is an exact multiple of the buffer size.
+
+     If gzeof() returns true, then the read functions will return no more data,
+   unless the end-of-file indicator is reset by gzclearerr() and the input file
+   has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+     Return true (1) if file is being copied directly while reading, or false
+   (0) if file is a gzip stream being decompressed.
+
+     If the input file is empty, gzdirect() will return true, since the input
+   does not contain a gzip stream.
+
+     If gzdirect() is used immediately after gzopen() or gzdopen() it will
+   cause buffers to be allocated to allow reading the file to determine if it
+   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
+   gzdirect().
+
+     When writing, gzdirect() returns true (1) if transparent writing was
+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
+   gzdirect() is not needed when writing.  Transparent writing must be
+   explicitly requested, so the application already knows the answer.  When
+   linking statically, using gzdirect() will include all of the zlib code for
+   gzip file reading and decompression, which may not be desired.)
 */
 
+ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
 /*
-     Returns 1 when EOF has previously been detected reading the given
-   input stream, otherwise zero.
+     Flush all pending output for file, if necessary, close file and
+   deallocate the (de)compression state.  Note that once file is closed, you
+   cannot call gzerror with file, since its structures have been deallocated.
+   gzclose must not be called more than once on the same file, just as free
+   must not be called more than once on the same allocation.
+
+     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+   last read ended in the middle of a gzip stream, or Z_OK on success.
 */
 
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
 /*
-     Flushes all pending output if necessary, closes the compressed file
-   and deallocates all the (de)compression state. The return value is the zlib
-   error number (see function gzerror below).
+     Same as gzclose(), but gzclose_r() is only for use when reading, and
+   gzclose_w() is only for use when writing or appending.  The advantage to
+   using these instead of gzclose() is that they avoid linking in zlib
+   compression or decompression code that is not used when only reading or only
+   writing respectively.  If gzclose() is used, then both compression and
+   decompression code will be included the application when linking to a static
+   zlib library.
 */
 
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
 /*
-     Returns the error message for the last error which occurred on the
-   given compressed file. errnum is set to zlib error number. If an
-   error occurred in the file system and not in the compression library,
-   errnum is set to Z_ERRNO and the application may consult errno
-   to get the exact error code.
+     Return the error message for the last error which occurred on file.
+   errnum is set to zlib error number.  If an error occurred in the file system
+   and not in the compression library, errnum is set to Z_ERRNO and the
+   application may consult errno to get the exact error code.
+
+     The application must not modify the returned string.  Future calls to
+   this function may invalidate the previously returned string.  If file is
+   closed, then the string previously returned by gzerror will no longer be
+   available.
+
+     gzerror() should be used to distinguish errors from end-of-file for those
+   functions above that do not distinguish those cases in their return values.
 */
 
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+     Clear the error and end-of-file flags for file.  This is analogous to the
+   clearerr() function in stdio.  This is useful for continuing to read a gzip
+   file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
                         /* checksum functions */
 
 /*
      These functions are not related to compression but are exported
-   anyway because they might be useful in applications using the
-   compression library.
+   anyway because they might be useful in applications using the compression
+   library.
 */
 
-ZEXTERN(uLong)  adler32 OF((uLong adler, const Bytef *buf, uInt len));
-
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
 /*
      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-   return the updated checksum. If buf is NULL, this function returns
-   the required initial value for the checksum.
-   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-   much faster. Usage example:
+   return the updated checksum. An Adler-32 value is in the range of a 32-bit
+   unsigned integer. If buf is Z_NULL, this function returns the required
+   initial value for the checksum.
+
+     An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
+   much faster.
+
+   Usage example:
 
      uLong adler = adler32(0L, Z_NULL, 0);
 
@@ -789,11 +1720,32 @@ ZEXTERN(uLong)  adler32 OF((uLong adler, const Bytef *buf, uInt len));
      if (adler != original_adler) error();
 */
 
+ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf,
+                                    z_size_t len));
+/*
+     Same as adler32(), but with a size_t length.
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+                                          z_off_t len2));
+
+     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
+   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
+   that the z_off_t type (like off_t) is a signed integer.  If len2 is
+   negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
 /*
-     Update a running crc with the bytes buf[0..len-1] and return the updated
-   crc. If buf is NULL, this function returns the required initial value
-   for the crc. Pre- and post-conditioning (one's complement) is performed
-   within this function so it shouldn't be done by the application.
+     Update a running CRC-32 with the bytes buf[0..len-1] and return the
+   updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer.
+   If buf is Z_NULL, this function returns the required initial value for the
+   crc. Pre- and post-conditioning (one's complement) is performed within this
+   function so it shouldn't be done by the application.
+
    Usage example:
 
      uLong crc = crc32(0L, Z_NULL, 0);
@@ -804,27 +1756,213 @@ ZEXTERN(uLong)  adler32 OF((uLong adler, const Bytef *buf, uInt len));
      if (crc != original_crc) error();
 */
 
+#ifndef Z_FREETYPE
+
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
+                                  z_size_t len));
+/*
+     Same as crc32(), but with a size_t length.
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+     Combine two CRC-32 check values into one.  For two sequences of bytes,
+   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
+   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+   len2.
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
+
+     Return the operator corresponding to length len2, to be used with
+   crc32_combine_op().
+*/
+
+ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
+/*
+     Give the same result as crc32_combine(), using op in place of len2. op is
+   is generated from len2 by crc32_combine_gen(). This will be faster than
+   crc32_combine() if the generated op is used more than once.
+*/
+
 
                         /* various hacks, don't look :) */
 
 /* deflateInit and inflateInit are macros to allow checking the zlib version
  * and the compiler's view of z_stream:
  */
-ZEXTERN(int)  inflateInit2_ OF((z_streamp strm, int  windowBits,
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+                                         unsigned char FAR *window,
+                                         const char *version,
+                                         int stream_size));
+#ifdef Z_PREFIX_SET
+#  define z_deflateInit(strm, level) \
+          deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define z_inflateInit(strm) \
+          inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+          deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                        (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define z_inflateInit2(strm, windowBits) \
+          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                        (int)sizeof(z_stream))
+#  define z_inflateBackInit(strm, windowBits, window) \
+          inflateBackInit_((strm), (windowBits), (window), \
+                           ZLIB_VERSION, (int)sizeof(z_stream))
+#else
+#  define deflateInit(strm, level) \
+          deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define inflateInit(strm) \
+          inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+          deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                        (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#  define inflateInit2(strm, windowBits) \
+          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                        (int)sizeof(z_stream))
+#  define inflateBackInit(strm, windowBits, window) \
+          inflateBackInit_((strm), (windowBits), (window), \
+                           ZLIB_VERSION, (int)sizeof(z_stream))
+#endif
+
+#else  /* Z_FREETYPE */
+
+
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
                                       const char *version, int stream_size));
-#define deflateInit(strm, level) \
-        deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit(strm) \
-        inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
-        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-                      (strategy),           ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
-        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
 
+#  define inflateInit2(strm, windowBits) \
+          inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                        (int)sizeof(z_stream))
+
+#endif  /* Z_FREETYPE */
+
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure.  Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously.  They can
+ * only be used by the gzgetc() macro.  You have been warned.
+ */
+struct gzFile_s {
+    unsigned have;
+    unsigned char *next;
+    z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#  define z_gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
+#else
+#  define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+#  ifdef Z_PREFIX_SET
+#    define z_gzopen z_gzopen64
+#    define z_gzseek z_gzseek64
+#    define z_gztell z_gztell64
+#    define z_gzoffset z_gzoffset64
+#    define z_adler32_combine z_adler32_combine64
+#    define z_crc32_combine z_crc32_combine64
+#    define z_crc32_combine_gen z_crc32_combine_gen64
+#  else
+#    define gzopen gzopen64
+#    define gzseek gzseek64
+#    define gztell gztell64
+#    define gzoffset gzoffset64
+#    define adler32_combine adler32_combine64
+#    define crc32_combine crc32_combine64
+#    define crc32_combine_gen crc32_combine_gen64
+#  endif
+#  ifndef Z_LARGE64
+     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
+#  endif
+#else
+   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+#ifndef Z_FREETYPE
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
+#endif
+
+#endif /* !Z_SOLO */
+
+/* undocumented functions */
+#ifndef Z_FREETYPE
+ZEXTERN const char   * ZEXPORT zError           OF((int));
+ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
+ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateValidate OF((z_streamp, int));
+ZEXTERN unsigned long  ZEXPORT inflateCodesUsed OF ((z_streamp));
+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
+                                            const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifndef Z_SOLO
+ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+                                                  const char *format,
+                                                  va_list va));
+#  endif
+#endif
+#endif  /* !Z_FREETYPE */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* _ZLIB_H */
+#endif /* ZLIB_H */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/zutil.c b/qtbase/src/3rdparty/freetype/src/gzip/zutil.c
index 7ad0c1f81b..a19ac2b96d 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/zutil.c
+++ b/qtbase/src/3rdparty/freetype/src/gzip/zutil.c
@@ -1,23 +1,155 @@
 /* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
+ * Copyright (C) 1995-2017 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 /* @(#) $Id$ */
 
 #include "zutil.h"
+#ifndef Z_SOLO
+#  include "gzguts.h"
+#endif
 
-#ifndef STDC
-extern void exit OF((int));
+z_const char * const z_errmsg[10] = {
+    (z_const char *)"need dictionary",     /* Z_NEED_DICT       2  */
+    (z_const char *)"stream end",          /* Z_STREAM_END      1  */
+    (z_const char *)"",                    /* Z_OK              0  */
+    (z_const char *)"file error",          /* Z_ERRNO         (-1) */
+    (z_const char *)"stream error",        /* Z_STREAM_ERROR  (-2) */
+    (z_const char *)"data error",          /* Z_DATA_ERROR    (-3) */
+    (z_const char *)"insufficient memory", /* Z_MEM_ERROR     (-4) */
+    (z_const char *)"buffer error",        /* Z_BUF_ERROR     (-5) */
+    (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
+    (z_const char *)""
+};
+
+
+const char * ZEXPORT zlibVersion()
+{
+    return ZLIB_VERSION;
+}
+
+uLong ZEXPORT zlibCompileFlags()
+{
+    uLong flags;
+
+    flags = 0;
+    switch ((int)(sizeof(uInt))) {
+    case 2:     break;
+    case 4:     flags += 1;     break;
+    case 8:     flags += 2;     break;
+    default:    flags += 3;
+    }
+    switch ((int)(sizeof(uLong))) {
+    case 2:     break;
+    case 4:     flags += 1 << 2;        break;
+    case 8:     flags += 2 << 2;        break;
+    default:    flags += 3 << 2;
+    }
+    switch ((int)(sizeof(voidpf))) {
+    case 2:     break;
+    case 4:     flags += 1 << 4;        break;
+    case 8:     flags += 2 << 4;        break;
+    default:    flags += 3 << 4;
+    }
+    switch ((int)(sizeof(z_off_t))) {
+    case 2:     break;
+    case 4:     flags += 1 << 6;        break;
+    case 8:     flags += 2 << 6;        break;
+    default:    flags += 3 << 6;
+    }
+#ifdef ZLIB_DEBUG
+    flags += 1 << 8;
+#endif
+#if defined(ASMV) || defined(ASMINF)
+    flags += 1 << 9;
+#endif
+#ifdef ZLIB_WINAPI
+    flags += 1 << 10;
+#endif
+#ifdef BUILDFIXED
+    flags += 1 << 12;
+#endif
+#ifdef DYNAMIC_CRC_TABLE
+    flags += 1 << 13;
+#endif
+#ifdef NO_GZCOMPRESS
+    flags += 1L << 16;
+#endif
+#ifdef NO_GZIP
+    flags += 1L << 17;
+#endif
+#ifdef PKZIP_BUG_WORKAROUND
+    flags += 1L << 20;
+#endif
+#ifdef FASTEST
+    flags += 1L << 21;
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifdef NO_vsnprintf
+    flags += 1L << 25;
+#    ifdef HAS_vsprintf_void
+    flags += 1L << 26;
+#    endif
+#  else
+#    ifdef HAS_vsnprintf_void
+    flags += 1L << 26;
+#    endif
+#  endif
+#else
+    flags += 1L << 24;
+#  ifdef NO_snprintf
+    flags += 1L << 25;
+#    ifdef HAS_sprintf_void
+    flags += 1L << 26;
+#    endif
+#  else
+#    ifdef HAS_snprintf_void
+    flags += 1L << 26;
+#    endif
+#  endif
+#endif
+    return flags;
+}
+
+#ifdef ZLIB_DEBUG
+#include <stdlib.h>
+#  ifndef verbose
+#    define verbose 0
+#  endif
+int ZLIB_INTERNAL z_verbose = verbose;
+
+void ZLIB_INTERNAL z_error (
+    char *m)
+{
+    fprintf(stderr, "%s\n", m);
+    exit(1);
+}
 #endif
 
+/* exported to allow conversion of error code to string for compress() and
+ * uncompress()
+ */
+const char * ZEXPORT zError(
+    int err)
+{
+    return ERR_MSG(err);
+}
+
+#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
+    /* The older Microsoft C Run-Time Library for Windows CE doesn't have
+     * errno.  We define it as a global variable to simplify porting.
+     * Its value is always 0 and should not be used.
+     */
+    int errno = 0;
+#endif
 
 #ifndef HAVE_MEMCPY
 
-void zmemcpy(dest, source, len)
-    Bytef* dest;
-    const Bytef* source;
-    uInt  len;
+void ZLIB_INTERNAL zmemcpy(
+    Bytef* dest,
+    const Bytef* source,
+    uInt  len)
 {
     if (len == 0) return;
     do {
@@ -25,10 +157,10 @@ void zmemcpy(dest, source, len)
     } while (--len != 0);
 }
 
-int zmemcmp(s1, s2, len)
-    const Bytef* s1;
-    const Bytef* s2;
-    uInt  len;
+int ZLIB_INTERNAL zmemcmp(
+    const Bytef* s1,
+    const Bytef* s2,
+    uInt  len)
 {
     uInt j;
 
@@ -38,9 +170,9 @@ int zmemcmp(s1, s2, len)
     return 0;
 }
 
-void zmemzero(dest, len)
-    Bytef* dest;
-    uInt  len;
+void ZLIB_INTERNAL zmemzero(
+    Bytef* dest,
+    uInt  len)
 {
     if (len == 0) return;
     do {
@@ -49,11 +181,13 @@ void zmemzero(dest, len)
 }
 #endif
 
-#if defined( MSDOS ) && defined( __TURBOC__ ) && !defined( MY_ZCALLOC )
-#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
-/* Small and medium model in Turbo C are for now limited to near allocation
- * with reduced MAX_WBITS and MAX_MEM_LEVEL
- */
+#ifndef Z_SOLO
+
+#ifdef SYS16BIT
+
+#ifdef __TURBOC__
+/* Turbo C in 16-bit mode */
+
 #  define MY_ZCALLOC
 
 /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
@@ -80,11 +214,13 @@ local ptr_table table[MAX_PTR];
  * a protected system like OS/2. Use Microsoft C instead.
  */
 
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
 {
-    voidpf buf = opaque; /* just to make some compilers happy */
+    voidpf buf;
     ulg bsize = (ulg)items*size;
 
+    (void)opaque;
+
     /* If we allocate less than 65520 bytes, we assume that farmalloc
      * will return a usable pointer which doesn't have to be normalized.
      */
@@ -104,9 +240,12 @@ voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
     return buf;
 }
 
-void  zcfree (voidpf opaque, voidpf ptr)
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
 {
     int n;
+
+    (void)opaque;
+
     if (*(ush*)&ptr != 0) { /* object < 64K */
         farfree(ptr);
         return;
@@ -122,14 +261,13 @@ void  zcfree (voidpf opaque, voidpf ptr)
         next_ptr--;
         return;
     }
-    ptr = opaque; /* just to make some compilers happy */
     Assert(0, "zcfree: ptr not found");
 }
-#endif
-#endif /* MSDOS && __TURBOC__ */
+
+#endif /* __TURBOC__ */
 
 
-#if defined(M_I86) && !defined(__32BIT__) && !defined( MY_ZCALLOC )
+#ifdef M_I86
 /* Microsoft C in 16-bit mode */
 
 #  define MY_ZCALLOC
@@ -139,43 +277,49 @@ void  zcfree (voidpf opaque, voidpf ptr)
 #  define _hfree   hfree
 #endif
 
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
 {
-    if (opaque) opaque = 0; /* to make compiler happy */
+    (void)opaque;
     return _halloc((long)items, size);
 }
 
-void  zcfree (voidpf opaque, voidpf ptr)
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
 {
-    if (opaque) opaque = 0; /* to make compiler happy */
+    (void)opaque;
     _hfree(ptr);
 }
 
-#endif /* MSC */
+#endif /* M_I86 */
+
+#endif /* SYS16BIT */
 
 
 #ifndef MY_ZCALLOC /* Any system without a special alloc function */
 
 #ifndef STDC
-extern voidp  ft_scalloc OF((uInt items, uInt size));
-extern void   ft_sfree   OF((voidpf ptr));
+extern voidp  malloc OF((uInt size));
+extern voidp  calloc OF((uInt items, uInt size));
+extern void   free   OF((voidpf ptr));
 #endif
 
-voidpf zcalloc (opaque, items, size)
-    voidpf opaque;
-    unsigned items;
-    unsigned size;
+voidpf ZLIB_INTERNAL zcalloc (
+    voidpf opaque,
+    unsigned items,
+    unsigned size)
 {
-    if (opaque) items += size - size; /* make compiler happy */
-    return (voidpf)ft_scalloc(items, size);
+    (void)opaque;
+    return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+                              (voidpf)calloc(items, size);
 }
 
-void  zcfree (opaque, ptr)
-    voidpf opaque;
-    voidpf ptr;
+void ZLIB_INTERNAL zcfree (
+    voidpf opaque,
+    voidpf ptr)
 {
-    ft_sfree(ptr);
-    if (opaque) return; /* make compiler happy */
+    (void)opaque;
+    free(ptr);
 }
 
 #endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/qtbase/src/3rdparty/freetype/src/gzip/zutil.h b/qtbase/src/3rdparty/freetype/src/gzip/zutil.h
index c9688cd9c0..14f0f1a85e 100644
--- a/qtbase/src/3rdparty/freetype/src/gzip/zutil.h
+++ b/qtbase/src/3rdparty/freetype/src/gzip/zutil.h
@@ -1,5 +1,5 @@
 /* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
+ * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -10,26 +10,31 @@
 
 /* @(#) $Id$ */
 
-#ifndef _Z_UTIL_H
-#define _Z_UTIL_H
+#ifndef ZUTIL_H
+#define ZUTIL_H
+
+#ifdef HAVE_HIDDEN
+#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+#  define ZLIB_INTERNAL
+#endif
 
 #include "zlib.h"
 
-#ifdef STDC
-#  include <stddef.h>
+#if defined(STDC) && !defined(Z_SOLO)
+#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
+#    include <stddef.h>
+#  endif
 #  include <string.h>
 #  include <stdlib.h>
 #endif
-#ifdef NO_ERRNO_H
-    extern int errno;
-#else
-#   include <errno.h>
-#endif
 
 #ifndef local
 #  define local static
 #endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+   define "local" for the non-static meaning of "static", for readability
+   (compile with -Dlocal if your debugger can't find static symbols) */
 
 typedef unsigned char  uch;
 typedef uch FAR uchf;
@@ -37,9 +42,24 @@ typedef unsigned short ush;
 typedef ush FAR ushf;
 typedef unsigned long  ulg;
 
+#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (ULONG_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned long
+#  elif (ULLONG_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned long long
+#  elif (UINT_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned
+#  endif
+#endif
+
+extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+/* (size given to avoid silly warnings with Visual C++) */
+
+#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
 
 #define ERR_RETURN(strm,err) \
-  return (strm->msg = (char*)ERR_MSG(err), (err))
+  return (strm->msg = ERR_MSG(err), (err))
 /* To be used only when the state is known to be valid */
 
         /* common constants */
@@ -69,90 +89,129 @@ typedef unsigned long  ulg;
 
         /* target dependencies */
 
-#ifdef MSDOS
+#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
 #  define OS_CODE  0x00
-#  if defined(__TURBOC__) || defined(__BORLANDC__)
-#    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
-       /* Allow compilation with ANSI keywords only enabled */
-       void _Cdecl farfree( void *block );
-       void *_Cdecl farmalloc( unsigned long nbytes );
-#    else
-#     include <alloc.h>
+#  ifndef Z_SOLO
+#    if defined(__TURBOC__) || defined(__BORLANDC__)
+#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
+         /* Allow compilation with ANSI keywords only enabled */
+         void _Cdecl farfree( void *block );
+         void *_Cdecl farmalloc( unsigned long nbytes );
+#      else
+#        include <alloc.h>
+#      endif
+#    else /* MSC or DJGPP */
+#      include <malloc.h>
 #    endif
-#  else /* MSC or DJGPP */
 #  endif
 #endif
 
-#ifdef OS2
-#  define OS_CODE  0x06
-#endif
-
-#ifdef WIN32 /* Window 95 & Windows NT */
-#  define OS_CODE  0x0b
+#ifdef AMIGA
+#  define OS_CODE  1
 #endif
 
 #if defined(VAXC) || defined(VMS)
-#  define OS_CODE  0x02
+#  define OS_CODE  2
 #  define F_OPEN(name, mode) \
-     ft_fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
+     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
 #endif
 
-#ifdef AMIGA
-#  define OS_CODE  0x01
+#ifdef __370__
+#  if __TARGET_LIB__ < 0x20000000
+#    define OS_CODE 4
+#  elif __TARGET_LIB__ < 0x40000000
+#    define OS_CODE 11
+#  else
+#    define OS_CODE 8
+#  endif
 #endif
 
 #if defined(ATARI) || defined(atarist)
-#  define OS_CODE  0x05
+#  define OS_CODE  5
+#endif
+
+#ifdef OS2
+#  define OS_CODE  6
+#  if defined(M_I86) && !defined(Z_SOLO)
+#    include <malloc.h>
+#  endif
 #endif
 
 #if defined(MACOS) || defined(TARGET_OS_MAC)
-#  define OS_CODE  0x07
-#  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-#    include <unix.h> /* for fdopen */
-#  else
-#    ifndef fdopen
-#      define fdopen(fd,mode) NULL /* No fdopen() */
+#  define OS_CODE  7
+#  ifndef Z_SOLO
+#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+#      include <unix.h> /* for fdopen */
+#    else
+#      ifndef fdopen
+#        define fdopen(fd,mode) NULL /* No fdopen() */
+#      endif
 #    endif
 #  endif
 #endif
 
-#ifdef __50SERIES /* Prime/PRIMOS */
-#  define OS_CODE  0x0F
+#ifdef __acorn
+#  define OS_CODE 13
+#endif
+
+#if defined(WIN32) && !defined(__CYGWIN__)
+#  define OS_CODE  10
+#endif
+
+#ifdef _BEOS_
+#  define OS_CODE  16
 #endif
 
-#ifdef TOPS20
-#  define OS_CODE  0x0a
+#ifdef __TOS_OS400__
+#  define OS_CODE 18
+#endif
+
+#ifdef __APPLE__
+#  define OS_CODE 19
 #endif
 
 #if defined(_BEOS_) || defined(RISCOS)
 #  define fdopen(fd,mode) NULL /* No fdopen() */
 #endif
 
-#if (defined(_MSC_VER) && (_MSC_VER > 600))
-#  define fdopen(fd,type)  _fdopen(fd,type)
+#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
+#  if defined(_WIN32_WCE)
+#    define fdopen(fd,mode) NULL /* No fdopen() */
+#  else
+#    define fdopen(fd,type)  _fdopen(fd,type)
+#  endif
 #endif
 
+#if defined(__BORLANDC__) && !defined(MSDOS)
+  #pragma warn -8004
+  #pragma warn -8008
+  #pragma warn -8066
+#endif
 
-        /* Common defaults */
+#ifndef Z_FREETYPE
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_WIN32) && \
+    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
+    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#endif
+
+#endif  /* !Z_FREETYPE */
+
+        /* common defaults */
 
 #ifndef OS_CODE
-#  define OS_CODE  0x03  /* assume Unix */
+#  define OS_CODE  3     /* assume Unix */
 #endif
 
 #ifndef F_OPEN
-#  define F_OPEN(name, mode) ft_fopen((name), (mode))
+#  define F_OPEN(name, mode) fopen((name), (mode))
 #endif
 
          /* functions */
 
-#ifdef HAVE_STRERROR
-   extern char *strerror OF((int));
-#  define zstrerror(errnum) strerror(errnum)
-#else
-#  define zstrerror(errnum) ""
-#endif
-
-#if defined(pyr)
+#if defined(pyr) || defined(Z_SOLO)
 #  define NO_MEMCPY
 #endif
 #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
@@ -176,16 +235,16 @@ typedef unsigned long  ulg;
 #    define zmemzero(dest, len) ft_memset(dest, 0, len)
 #  endif
 #else
-   extern void zmemcpy  OF((Bytef* dest, const Bytef* source, uInt len));
-   extern int  zmemcmp  OF((const Bytef* s1, const Bytef* s2, uInt len));
-   extern void zmemzero OF((Bytef* dest, uInt len));
+   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
+   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
+   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
 #endif
 
 /* Diagnostic functions */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
 #  include <stdio.h>
-   extern int z_verbose;
-   extern void z_error    OF((char *m));
+   extern int ZLIB_INTERNAL z_verbose;
+   extern void ZLIB_INTERNAL z_error OF((char *m));
 #  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
 #  define Trace(x) {if (z_verbose>=0) fprintf x ;}
 #  define Tracev(x) {if (z_verbose>0) fprintf x ;}
@@ -201,15 +260,19 @@ typedef unsigned long  ulg;
 #  define Tracecv(c,x)
 #endif
 
-
-typedef uLong (*check_func) OF((uLong check, const Bytef *buf,
-                                uInt len));
-local voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
-local void   zcfree  OF((voidpf opaque, voidpf ptr));
+#ifndef Z_SOLO
+   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
+                                    unsigned size));
+   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
+#endif
 
 #define ZALLOC(strm, items, size) \
            (*((strm)->zalloc))((strm)->opaque, (items), (size))
 #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
 #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
 
-#endif /* _Z_UTIL_H */
+/* Reverse the bytes in a 32-bit value */
+#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
+#endif /* ZUTIL_H */
diff --git a/qtbase/src/3rdparty/freetype/src/lzw/ftlzw.c b/qtbase/src/3rdparty/freetype/src/lzw/ftlzw.c
index ddb81e6e97..e12efcaa56 100644
--- a/qtbase/src/3rdparty/freetype/src/lzw/ftlzw.c
+++ b/qtbase/src/3rdparty/freetype/src/lzw/ftlzw.c
@@ -8,7 +8,7 @@
  * be used to parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * Albert Chin-A-Young.
  *
  * based on code in `src/gzip/ftgzip.c'
@@ -369,7 +369,7 @@
     FT_ZERO( stream );
     stream->memory = memory;
 
-    if ( !FT_NEW( zip ) )
+    if ( !FT_QNEW( zip ) )
     {
       error = ft_lzw_file_init( zip, stream, source );
       if ( error )
@@ -383,7 +383,7 @@
 
     stream->size  = 0x7FFFFFFFL;  /* don't know the real size! */
     stream->pos   = 0;
-    stream->base  = 0;
+    stream->base  = NULL;
     stream->read  = ft_lzw_stream_io;
     stream->close = ft_lzw_stream_close;
 
diff --git a/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.c b/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.c
index 884d2ec74e..aaa98be211 100644
--- a/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.c
+++ b/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.c
@@ -8,7 +8,7 @@
  * be used to parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -127,6 +127,7 @@
 
       new_size = new_size + ( new_size >> 1 ) + 4;
 
+      /* if relocating to heap */
       if ( state->stack == state->stack_0 )
       {
         state->stack = NULL;
@@ -142,9 +143,13 @@
           return -1;
       }
 
-      if ( FT_RENEW_ARRAY( state->stack, old_size, new_size ) )
+      if ( FT_QRENEW_ARRAY( state->stack, old_size, new_size ) )
         return -1;
 
+      /* if relocating to heap */
+      if ( old_size == 0 )
+        FT_MEM_COPY( state->stack, state->stack_0, FT_LZW_DEFAULT_STACK_SIZE );
+
       state->stack_size = new_size;
     }
     return 0;
diff --git a/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.h b/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.h
index d8768f7b47..86fccfe3be 100644
--- a/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.h
+++ b/qtbase/src/3rdparty/freetype/src/lzw/ftzopen.h
@@ -8,7 +8,7 @@
  * be used to parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/lzw/rules.mk b/qtbase/src/3rdparty/freetype/src/lzw/rules.mk
index 3468ee024d..d3aa1efadd 100644
--- a/qtbase/src/3rdparty/freetype/src/lzw/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/lzw/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2004-2020 by
+# Copyright (C) 2004-2022 by
 # Albert Chin-A-Young.
 #
 # based on `src/lzw/rules.mk'
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/module.mk b/qtbase/src/3rdparty/freetype/src/otvalid/module.mk
index 67b9820d84..1d08012e44 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2004-2020 by
+# Copyright (C) 2004-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.c
index d640209f68..f5344ca031 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType validator for OpenType tables (body only).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.h b/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.h
index 8208ff0112..6274858f51 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.h
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvalid.h
@@ -4,7 +4,7 @@
  *
  *   OpenType table validation (specification only).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvbase.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvbase.c
index 250ae98ab5..70de653b19 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvbase.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvbase.c
@@ -4,7 +4,7 @@
  *
  *   OpenType BASE table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.c
index faaa846871..b9873ff21b 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.c
@@ -4,7 +4,7 @@
  *
  *   OpenType common tables validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.h b/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.h
index f9926034a9..f1e4a6a9a6 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.h
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvcommn.h
@@ -4,7 +4,7 @@
  *
  *   OpenType common tables validation (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -105,10 +105,11 @@ FT_BEGIN_HEADER
                 FT_Byte*  pp = (FT_Byte*)_size ## _p;               \
                                                                     \
                                                                     \
-                FT_TRACE3(( "\n"                                    \
-                            "Invalid offset to optional table `%s'" \
-                            " set to zero.\n"                       \
-                            "\n", #_size ));                        \
+                FT_TRACE3(( "\n" ));                                \
+                FT_TRACE3(( "Invalid offset to optional table `%s'" \
+                            " set to zero.\n",                      \
+                            #_size ));                              \
+                FT_TRACE3(( "\n" ));                                \
                                                                     \
                 _size = pp[0] = pp[1] = 0;                          \
               }                                                     \
@@ -127,10 +128,11 @@ FT_BEGIN_HEADER
                 FT_Byte*  pp = (FT_Byte*)_size ## _p;               \
                                                                     \
                                                                     \
-                FT_TRACE3(( "\n"                                    \
-                            "Invalid offset to optional table `%s'" \
-                            " set to zero.\n"                       \
-                            "\n", #_size ));                        \
+                FT_TRACE3(( "\n" ));                                \
+                FT_TRACE3(( "Invalid offset to optional table `%s'" \
+                            " set to zero.\n",                      \
+                            #_size ));                              \
+                FT_TRACE3(( "\n" ));                                \
                                                                     \
                 _size = pp[0] = pp[1] = pp[2] = pp[3] = 0;          \
               }                                                     \
@@ -178,24 +180,24 @@ FT_BEGIN_HEADER
 #define OTV_ENTER                                                                \
           FT_BEGIN_STMNT                                                         \
             otvalid->debug_indent += 2;                                          \
-            FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 ));                     \
+            FT_TRACE4(( "%*.s", otvalid->debug_indent, "" ));                    \
             FT_TRACE4(( "%s table\n",                                            \
                         otvalid->debug_function_name[otvalid->nesting_level] )); \
           FT_END_STMNT
 
-#define OTV_NAME_ENTER( name )                               \
-          FT_BEGIN_STMNT                                     \
-            otvalid->debug_indent += 2;                      \
-            FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
-            FT_TRACE4(( "%s table\n", name ));               \
+#define OTV_NAME_ENTER( name )                                \
+          FT_BEGIN_STMNT                                      \
+            otvalid->debug_indent += 2;                       \
+            FT_TRACE4(( "%*.s", otvalid->debug_indent, "" )); \
+            FT_TRACE4(( "%s table\n", name ));                \
           FT_END_STMNT
 
 #define OTV_EXIT  otvalid->debug_indent -= 2
 
-#define OTV_TRACE( s )                                       \
-          FT_BEGIN_STMNT                                     \
-            FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
-            FT_TRACE4( s );                                  \
+#define OTV_TRACE( s )                                        \
+          FT_BEGIN_STMNT                                      \
+            FT_TRACE4(( "%*.s", otvalid->debug_indent, "" )); \
+            FT_TRACE4( s );                                   \
           FT_END_STMNT
 
 #else   /* !FT_DEBUG_LEVEL_TRACE */
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otverror.h b/qtbase/src/3rdparty/freetype/src/otvalid/otverror.h
index 979e9cbd9c..8c75c58299 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otverror.h
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otverror.h
@@ -4,7 +4,7 @@
  *
  *   OpenType validation module error codes (specification only).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvgdef.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvgdef.c
index 88874b8474..425335336d 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvgdef.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvgdef.c
@@ -4,7 +4,7 @@
  *
  *   OpenType GDEF table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.c
index 29d56f91e8..52e2cd1c22 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.c
@@ -4,7 +4,7 @@
  *
  *   OpenType GPOS table validation (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.h b/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.h
index 06a03a0e6c..85ef609160 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.h
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvgpos.h
@@ -4,7 +4,7 @@
  *
  *   OpenType GPOS table validator (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvgsub.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvgsub.c
index f0d563ba92..3b6dcbb7ae 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvgsub.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvgsub.c
@@ -4,7 +4,7 @@
  *
  *   OpenType GSUB table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvjstf.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvjstf.c
index 79de7b809d..0934716a5a 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvjstf.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvjstf.c
@@ -4,7 +4,7 @@
  *
  *   OpenType JSTF table validation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvmath.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvmath.c
index dfdeaaba7e..a59557b375 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvmath.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvmath.c
@@ -4,7 +4,7 @@
  *
  *   OpenType MATH table validation (body).
  *
- * Copyright (C) 2007-2020 by
+ * Copyright (C) 2007-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Written by George Williams.
@@ -141,7 +141,7 @@
     OTV_OPTIONAL_TABLE( DeviceTableOffset );
 
 
-    /* OTV_NAME_ENTER( "MathKern" );*/
+    /* OTV_NAME_ENTER( "MathKern" ); */
 
     OTV_LIMIT_CHECK( 2 );
 
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.c b/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.c
index 0188b27018..3fc2dbe504 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.c
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType's OpenType validation module implementation (body).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,7 +53,7 @@
     if ( error )
       goto Exit;
 
-    if ( FT_ALLOC( *table, *table_len ) )
+    if ( FT_QALLOC( *table, *table_len ) )
       goto Exit;
 
     error = FT_Load_Sfnt_Table( face, tag, 0, *table, table_len );
@@ -94,7 +94,7 @@
      */
     if ( face->num_glyphs > 0xFFFFL )
     {
-      FT_TRACE1(( "otv_validate: Invalid glyphs index (0x0000FFFF - 0x%08x) ",
+      FT_TRACE1(( "otv_validate: Invalid glyphs index (0x0000FFFF - 0x%08lx) ",
                   face->num_glyphs ));
       FT_TRACE1(( "are not handled by OpenType tables\n" ));
       num_glyphs = 0xFFFF;
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.h b/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.h
index efd6da035f..2f0bcd6e44 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.h
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/otvmod.h
@@ -5,7 +5,7 @@
  *   FreeType's OpenType validation module implementation
  *   (specification).
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/otvalid/rules.mk b/qtbase/src/3rdparty/freetype/src/otvalid/rules.mk
index 7f0169fd89..924d2b6bef 100644
--- a/qtbase/src/3rdparty/freetype/src/otvalid/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2004-2020 by
+# Copyright (C) 2004-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/pcf/pcfdrivr.c b/qtbase/src/3rdparty/freetype/src/pcf/pcfdrivr.c
index e9dd51752e..2a40af9e99 100644
--- a/qtbase/src/3rdparty/freetype/src/pcf/pcfdrivr.c
+++ b/qtbase/src/3rdparty/freetype/src/pcf/pcfdrivr.c
@@ -606,7 +606,7 @@ THE SOFTWARE.
         if ( prop->value.l > 0x7FFFFFFFL          ||
              prop->value.l < ( -1 - 0x7FFFFFFFL ) )
         {
-          FT_TRACE1(( "pcf_get_bdf_property:"
+          FT_TRACE2(( "pcf_get_bdf_property:"
                       " too large integer 0x%lx is truncated\n",
                       prop->value.l ));
         }
@@ -705,7 +705,7 @@ THE SOFTWARE.
 
 #endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
 
-    FT_TRACE0(( "pcf_property_set: missing property `%s'\n",
+    FT_TRACE2(( "pcf_property_set: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
@@ -743,7 +743,7 @@ THE SOFTWARE.
 
 #endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
 
-    FT_TRACE0(( "pcf_property_get: missing property `%s'\n",
+    FT_TRACE2(( "pcf_property_get: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
diff --git a/qtbase/src/3rdparty/freetype/src/pcf/pcfread.c b/qtbase/src/3rdparty/freetype/src/pcf/pcfread.c
index 8817682cdf..f167bcb8ae 100644
--- a/qtbase/src/3rdparty/freetype/src/pcf/pcfread.c
+++ b/qtbase/src/3rdparty/freetype/src/pcf/pcfread.c
@@ -127,7 +127,7 @@ THE SOFTWARE.
       toc->count = FT_MIN( stream->size >> 4, 9 );
     }
 
-    if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) )
+    if ( FT_QNEW_ARRAY( face->toc.tables, toc->count ) )
       return error;
 
     tables = face->toc.tables;
@@ -238,7 +238,7 @@ THE SOFTWARE.
       {
         for ( j = 0; j < sizeof ( tableNames ) / sizeof ( tableNames[0] );
               j++ )
-          if ( tables[i].type == (FT_UInt)( 1 << j ) )
+          if ( tables[i].type == 1UL << j )
             name = tableNames[j];
 
         FT_TRACE4(( "  %d: type=%s, format=0x%lX,"
@@ -501,8 +501,8 @@ THE SOFTWARE.
     if ( FT_READ_ULONG_LE( format ) )
       goto Bail;
 
-    FT_TRACE4(( "pcf_get_properties:\n"
-                "  format: 0x%lX (%s)\n",
+    FT_TRACE4(( "pcf_get_properties:\n" ));
+    FT_TRACE4(( "  format: 0x%lX (%s)\n",
                 format,
                 PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
 
@@ -540,7 +540,7 @@ THE SOFTWARE.
 
     face->nprops = (int)nprops;
 
-    if ( FT_NEW_ARRAY( props, nprops ) )
+    if ( FT_QNEW_ARRAY( props, nprops ) )
       goto Bail;
 
     for ( i = 0; i < nprops; i++ )
@@ -607,13 +607,13 @@ THE SOFTWARE.
     }
 
     /* allocate one more byte so that we have a final null byte */
-    if ( FT_NEW_ARRAY( strings, string_size + 1 ) )
+    if ( FT_QALLOC( strings, string_size + 1 )  ||
+         FT_STREAM_READ( strings, string_size ) )
       goto Bail;
 
-    error = FT_Stream_Read( stream, (FT_Byte*)strings, string_size );
-    if ( error )
-      goto Bail;
+    strings[string_size] = '\0';
 
+    /* zero out in case of failure */
     if ( FT_NEW_ARRAY( properties, nprops ) )
       goto Bail;
 
@@ -697,8 +697,8 @@ THE SOFTWARE.
     if ( FT_READ_ULONG_LE( format ) )
       goto Bail;
 
-    FT_TRACE4(( "pcf_get_metrics:\n"
-                "  format: 0x%lX (%s, %s)\n",
+    FT_TRACE4(( "pcf_get_metrics:\n" ));
+    FT_TRACE4(( "  format: 0x%lX (%s, %s)\n",
                 format,
                 PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB",
                 PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) ?
@@ -767,7 +767,7 @@ THE SOFTWARE.
 
     face->nmetrics = nmetrics + 1;
 
-    if ( FT_NEW_ARRAY( face->metrics, face->nmetrics ) )
+    if ( FT_QNEW_ARRAY( face->metrics, face->nmetrics ) )
       return error;
 
     /* we handle glyph index 0 later on */
@@ -840,17 +840,16 @@ THE SOFTWARE.
 
     FT_Stream_ExitFrame( stream );
 
-    FT_TRACE4(( "pcf_get_bitmaps:\n"
-                "  format: 0x%lX\n"
-                "          (%s, %s,\n"
-                "           padding=%d bit%s, scanning=%d bit%s)\n",
-                format,
+    FT_TRACE4(( "pcf_get_bitmaps:\n" ));
+    FT_TRACE4(( "  format: 0x%lX\n", format ));
+    FT_TRACE4(( "          (%s, %s,\n",
                 PCF_BYTE_ORDER( format ) == MSBFirst
                   ? "most significant byte first"
                   : "least significant byte first",
                 PCF_BIT_ORDER( format ) == MSBFirst
                   ? "most significant bit first"
-                  : "least significant bit first",
+                  : "least significant bit first" ));
+    FT_TRACE4(( "           padding=%d bit%s, scanning=%d bit%s)\n",
                 8 << PCF_GLYPH_PAD_INDEX( format ),
                 ( 8 << PCF_GLYPH_PAD_INDEX( format ) ) == 1 ? "" : "s",
                 8 << PCF_SCAN_UNIT_INDEX( format ),
@@ -1001,8 +1000,8 @@ THE SOFTWARE.
     if ( FT_READ_ULONG_LE( format ) )
       goto Bail;
 
-    FT_TRACE4(( "pcf_get_encodings:\n"
-                "  format: 0x%lX (%s)\n",
+    FT_TRACE4(( "pcf_get_encodings:\n" ));
+    FT_TRACE4(( "  format: 0x%lX (%s)\n",
                 format,
                 PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
 
@@ -1021,11 +1020,11 @@ THE SOFTWARE.
         goto Bail;
     }
 
-    FT_TRACE4(( "  firstCol 0x%X, lastCol 0x%X\n"
-                "  firstRow 0x%X, lastRow 0x%X\n"
-                "  defaultChar 0x%X\n",
-                enc->firstCol, enc->lastCol,
-                enc->firstRow, enc->lastRow,
+    FT_TRACE4(( "  firstCol 0x%X, lastCol 0x%X\n",
+                enc->firstCol, enc->lastCol ));
+    FT_TRACE4(( "  firstRow 0x%X, lastRow 0x%X\n",
+                enc->firstRow, enc->lastRow ));
+    FT_TRACE4(( "  defaultChar 0x%X\n",
                 enc->defaultChar ));
 
     /* sanity checks; we limit numbers of rows and columns to 256 */
@@ -1035,16 +1034,6 @@ THE SOFTWARE.
          enc->lastRow  > 0xFF         )
       return FT_THROW( Invalid_Table );
 
-    nencoding = (FT_ULong)( enc->lastCol - enc->firstCol + 1 ) *
-                (FT_ULong)( enc->lastRow - enc->firstRow + 1 );
-
-    if ( FT_NEW_ARRAY( enc->offset, nencoding ) )
-      goto Bail;
-
-    error = FT_Stream_EnterFrame( stream, 2 * nencoding );
-    if ( error )
-      goto Exit;
-
     FT_TRACE5(( "\n" ));
 
     defaultCharRow = enc->defaultChar >> 8;
@@ -1065,6 +1054,13 @@ THE SOFTWARE.
       defaultCharCol = enc->firstCol;
     }
 
+    nencoding = (FT_ULong)( enc->lastCol - enc->firstCol + 1 ) *
+                (FT_ULong)( enc->lastRow - enc->firstRow + 1 );
+
+    error = FT_Stream_EnterFrame( stream, 2 * nencoding );
+    if ( error )
+      goto Bail;
+
     /*
      * FreeType mandates that glyph index 0 is the `undefined glyph', which
      * PCF calls the `default character'.  However, FreeType needs glyph
@@ -1088,8 +1084,8 @@ THE SOFTWARE.
     if ( defaultCharEncodingOffset == 0xFFFF )
     {
       FT_TRACE0(( "pcf_get_encodings:"
-                  " No glyph for default character,\n"
-                  "                  "
+                  " No glyph for default character,\n" ));
+      FT_TRACE0(( "                  "
                   " setting it to the first glyph of the font\n" ));
       defaultCharEncodingOffset = 1;
     }
@@ -1100,8 +1096,8 @@ THE SOFTWARE.
       if ( defaultCharEncodingOffset >= face->nmetrics )
       {
         FT_TRACE0(( "pcf_get_encodings:"
-                    " Invalid glyph index for default character,\n"
-                    "                  "
+                    " Invalid glyph index for default character,\n" ));
+        FT_TRACE0(( "                  "
                     " setting it to the first glyph of the font\n" ));
         defaultCharEncodingOffset = 1;
       }
@@ -1110,6 +1106,9 @@ THE SOFTWARE.
     /* copy metrics of default character to index 0 */
     face->metrics[0] = face->metrics[defaultCharEncodingOffset];
 
+    if ( FT_QNEW_ARRAY( enc->offset, nencoding ) )
+      goto Bail;
+
     /* now loop over all values */
     offset = enc->offset;
     for ( i = enc->firstRow; i <= enc->lastRow; i++ )
@@ -1132,11 +1131,6 @@ THE SOFTWARE.
     }
     FT_Stream_ExitFrame( stream );
 
-    return error;
-
-  Exit:
-    FT_FREE( enc->offset );
-
   Bail:
     return error;
   }
@@ -1208,10 +1202,10 @@ THE SOFTWARE.
     if ( FT_READ_ULONG_LE( format ) )
       goto Bail;
 
-    FT_TRACE4(( "pcf_get_accel%s:\n"
-                "  format: 0x%lX (%s, %s)\n",
+    FT_TRACE4(( "pcf_get_accel%s:\n",
                 type == PCF_BDF_ACCELERATORS ? " (getting BDF accelerators)"
-                                             : "",
+                                             : "" ));
+    FT_TRACE4(( "  format: 0x%lX (%s, %s)\n",
                 format,
                 PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB",
                 PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) ?
@@ -1233,16 +1227,16 @@ THE SOFTWARE.
     }
 
     FT_TRACE5(( "  noOverlap=%s, constantMetrics=%s,"
-                " terminalFont=%s, constantWidth=%s\n"
-                "  inkInside=%s, inkMetrics=%s, drawDirection=%s\n"
-                "  fontAscent=%ld, fontDescent=%ld, maxOverlap=%ld\n",
+                " terminalFont=%s, constantWidth=%s\n",
                 accel->noOverlap ? "yes" : "no",
                 accel->constantMetrics ? "yes" : "no",
                 accel->terminalFont ? "yes" : "no",
-                accel->constantWidth ? "yes" : "no",
+                accel->constantWidth ? "yes" : "no" ));
+    FT_TRACE5(( "  inkInside=%s, inkMetrics=%s, drawDirection=%s\n",
                 accel->inkInside ? "yes" : "no",
                 accel->inkMetrics ? "yes" : "no",
-                accel->drawDirection ? "RTL" : "LTR",
+                accel->drawDirection ? "RTL" : "LTR" ));
+    FT_TRACE5(( "  fontAscent=%ld, fontDescent=%ld, maxOverlap=%ld\n",
                 accel->fontAscent,
                 accel->fontDescent,
                 accel->maxOverlap ));
@@ -1369,7 +1363,7 @@ THE SOFTWARE.
       char*  s;
 
 
-      if ( FT_ALLOC( face->style_name, len ) )
+      if ( FT_QALLOC( face->style_name, len ) )
         return error;
 
       s = face->style_name;
@@ -1533,7 +1527,7 @@ THE SOFTWARE.
           {
             l += ft_strlen( foundry_prop->value.atom ) + 1;
 
-            if ( FT_NEW_ARRAY( root->family_name, l ) )
+            if ( FT_QALLOC( root->family_name, l ) )
               goto Exit;
 
             ft_strcpy( root->family_name, foundry_prop->value.atom );
@@ -1542,7 +1536,7 @@ THE SOFTWARE.
           }
           else
           {
-            if ( FT_NEW_ARRAY( root->family_name, l ) )
+            if ( FT_QALLOC( root->family_name, l ) )
               goto Exit;
 
             ft_strcpy( root->family_name, prop->value.atom );
@@ -1566,7 +1560,7 @@ THE SOFTWARE.
       root->num_glyphs = (FT_Long)face->nmetrics;
 
       root->num_fixed_sizes = 1;
-      if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
+      if ( FT_NEW( root->available_sizes ) )
         goto Exit;
 
       {
@@ -1574,8 +1568,6 @@ THE SOFTWARE.
         FT_Short         resolution_x = 0, resolution_y = 0;
 
 
-        FT_ZERO( bsize );
-
         /* for simplicity, we take absolute values of integer properties */
 
 #if 0
@@ -1616,7 +1608,7 @@ THE SOFTWARE.
         else
         {
           /* this is a heuristical value */
-          bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
+          bsize->width = ( bsize->height * 2 + 1 ) / 3;
         }
 
         prop = pcf_find_property( face, "POINT_SIZE" );
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/module.mk b/qtbase/src/3rdparty/freetype/src/pfr/module.mk
index 762353dda2..570d400b1f 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/pfr/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2002-2020 by
+# Copyright (C) 2002-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfr.c b/qtbase/src/3rdparty/freetype/src/pfr/pfr.c
index 9264c77df2..1dd38f9393 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfr.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfr.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR driver component.
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.c b/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.c
index ebc7b84393..6fa2417dc1 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR cmap handling (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.h
index a6d920c30b..afde164f9b 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrcmap.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR cmap handling (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.c b/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.c
index b14320875a..2a753c583a 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR driver interface (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.h
index 7646b4d1bd..cfd749ab0e 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrdrivr.h
@@ -4,7 +4,7 @@
  *
  *   High-level Type PFR driver interface (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrerror.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrerror.h
index 33460ef4fd..98b8f2fd58 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrerror.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrerror.h
@@ -4,7 +4,7 @@
  *
  *   PFR error codes (specification only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.c b/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.c
index aa640c3b07..1b8d6cdecc 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR glyph loader (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.h
index f356b4c75b..af59296910 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrgload.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR glyph loader (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrload.c b/qtbase/src/3rdparty/freetype/src/pfr/pfrload.c
index a2832e55c7..6bf7979750 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrload.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR loader (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -565,7 +565,7 @@
     if ( phy_font->font_id )
       goto Exit;
 
-    if ( FT_ALLOC( phy_font->font_id, len + 1 ) )
+    if ( FT_QALLOC( phy_font->font_id, len + 1 ) )
       goto Exit;
 
     /* copy font ID name, and terminate it for safety */
@@ -601,7 +601,7 @@
 
     PFR_CHECK( count * 2 );
 
-    if ( FT_NEW_ARRAY( snaps, count ) )
+    if ( FT_QNEW_ARRAY( snaps, count ) )
       goto Exit;
 
     phy_font->vertical.stem_snaps = snaps;
@@ -761,7 +761,7 @@
 
     if ( ok )
     {
-      if ( FT_ALLOC( result, len + 1 ) )
+      if ( FT_QALLOC( result, len + 1 ) )
         goto Exit;
 
       FT_MEM_COPY( result, p, len );
@@ -953,7 +953,7 @@
 
       PFR_CHECK( count * 2 );
 
-      if ( FT_NEW_ARRAY( phy_font->blue_values, count ) )
+      if ( FT_QNEW_ARRAY( phy_font->blue_values, count ) )
         goto Fail;
 
       for ( n = 0; n < count; n++ )
@@ -993,7 +993,7 @@
 
       PFR_CHECK_SIZE( count * Size );
 
-      if ( FT_NEW_ARRAY( phy_font->chars, count ) )
+      if ( FT_QNEW_ARRAY( phy_font->chars, count ) )
         goto Fail;
 
       for ( n = 0; n < count; n++ )
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrload.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrload.h
index 7615b9ce14..5e0f451fa0 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrload.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrload.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR loader (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.c b/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.c
index 918e7fd496..5a6e3979d5 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR object methods (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -83,7 +83,11 @@
     /* load the header and check it */
     error = pfr_header_load( &face->header, stream );
     if ( error )
+    {
+      FT_TRACE2(( "  not a PFR font\n" ));
+      error = FT_THROW( Unknown_File_Format );
       goto Exit;
+    }
 
     if ( !pfr_header_check( &face->header ) )
     {
@@ -203,7 +207,7 @@
 
       pfrface->height = (FT_Short)( ( pfrface->units_per_EM * 12 ) / 10 );
       if ( pfrface->height < pfrface->ascender - pfrface->descender )
-        pfrface->height = (FT_Short)(pfrface->ascender - pfrface->descender);
+        pfrface->height = (FT_Short)( pfrface->ascender - pfrface->descender );
 
       if ( phy_font->num_strikes > 0 )
       {
@@ -213,7 +217,7 @@
         FT_Memory        memory = pfrface->stream->memory;
 
 
-        if ( FT_NEW_ARRAY( pfrface->available_sizes, count ) )
+        if ( FT_QNEW_ARRAY( pfrface->available_sizes, count ) )
           goto Exit;
 
         size   = pfrface->available_sizes;
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.h
index 808822f1c4..9ffc297d59 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrobjs.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR object methods (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.c b/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.c
index a6691e6d18..8b23fa156d 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.c
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR bitmap loader (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -310,8 +310,8 @@
       if ( lim > limit )
       {
         FT_TRACE0(( "pfr_lookup_bitmap_data:"
-                    " number of bitmap records too large,\n"
-                    "                       "
+                    " number of bitmap records too large,\n" ));
+        FT_TRACE0(( "                       "
                     " thus ignoring all bitmaps in this strike\n" ));
         *flags &= ~PFR_BITMAP_VALID_CHARCODES;
       }
@@ -328,8 +328,8 @@
           if ( (FT_Long)code <= prev_code )
           {
             FT_TRACE0(( "pfr_lookup_bitmap_data:"
-                        " bitmap records are not sorted,\n"
-                        "                       "
+                        " bitmap records are not sorted,\n" ));
+            FT_TRACE0(( "                       "
                         " thus ignoring all bitmaps in this strike\n" ));
             *flags &= ~PFR_BITMAP_VALID_CHARCODES;
             break;
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.h
index 8cb0de0d25..b948a3842f 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrsbit.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR bitmap loader (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/pfrtypes.h b/qtbase/src/3rdparty/freetype/src/pfr/pfrtypes.h
index 06fb82d51a..d9a0c78953 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/pfrtypes.h
+++ b/qtbase/src/3rdparty/freetype/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR data structures (specification only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -109,7 +109,7 @@ FT_BEGIN_HEADER
 #define PFR_BITMAP_2BYTE_SIZE      0x02U
 #define PFR_BITMAP_3BYTE_OFFSET    0x04U
 
-  /*not part of the specification but used for implementation */
+  /* not part of the specification but used for implementation */
 #define PFR_BITMAP_CHARCODES_VALIDATED  0x40U
 #define PFR_BITMAP_VALID_CHARCODES      0x80U
 
diff --git a/qtbase/src/3rdparty/freetype/src/pfr/rules.mk b/qtbase/src/3rdparty/freetype/src/pfr/rules.mk
index a1fe82baff..b5dffaaa26 100644
--- a/qtbase/src/3rdparty/freetype/src/pfr/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/pfr/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2002-2020 by
+# Copyright (C) 2002-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/afmparse.c b/qtbase/src/3rdparty/freetype/src/psaux/afmparse.c
index 2d6a0d9a12..bd86129f7e 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/afmparse.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/afmparse.c
@@ -4,7 +4,7 @@
  *
  *   AFM parser (body).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,6 +27,16 @@
 #include "psauxerr.h"
 
 
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  afmparse
+
+
   /**************************************************************************
    *
    * AFM_Stream
@@ -586,21 +596,39 @@
   static FT_Error
   afm_parse_track_kern( AFM_Parser  parser )
   {
-    AFM_FontInfo   fi = parser->FontInfo;
+    AFM_FontInfo   fi     = parser->FontInfo;
+    AFM_Stream     stream = parser->stream;
     AFM_TrackKern  tk;
-    char*          key;
-    FT_Offset      len;
-    int            n = -1;
-    FT_Int         tmp;
+
+    char*      key;
+    FT_Offset  len;
+    int        n = -1;
+    FT_Int     tmp;
 
 
     if ( afm_parser_read_int( parser, &tmp ) )
         goto Fail;
 
     if ( tmp < 0 )
+    {
+      FT_ERROR(( "afm_parse_track_kern: invalid number of track kerns\n" ));
       goto Fail;
+    }
 
     fi->NumTrackKern = (FT_UInt)tmp;
+    FT_TRACE3(( "afm_parse_track_kern: %u track kern%s expected\n",
+                fi->NumTrackKern,
+                fi->NumTrackKern == 1 ? "" : "s" ));
+
+    /* Rough sanity check: The minimum line length of the `TrackKern` */
+    /* command is 20 characters (including the EOL character).        */
+    if ( (FT_ULong)( stream->limit - stream->cursor ) / 20 <
+           fi->NumTrackKern )
+    {
+      FT_ERROR(( "afm_parse_track_kern:"
+                 " number of track kern entries exceeds stream size\n" ));
+      goto Fail;
+    }
 
     if ( fi->NumTrackKern )
     {
@@ -623,7 +651,10 @@
         n++;
 
         if ( n >= (int)fi->NumTrackKern )
-          goto Fail;
+          {
+            FT_ERROR(( "afm_parse_track_kern: too many track kern data\n" ));
+            goto Fail;
+          }
 
         tk = fi->TrackKerns + n;
 
@@ -633,7 +664,12 @@
         shared_vals[3].type = AFM_VALUE_TYPE_FIXED;
         shared_vals[4].type = AFM_VALUE_TYPE_FIXED;
         if ( afm_parser_read_vals( parser, shared_vals, 5 ) != 5 )
+        {
+          FT_ERROR(( "afm_parse_track_kern:"
+                     " insufficient number of parameters for entry %d\n",
+                     n ));
           goto Fail;
+        }
 
         tk->degree     = shared_vals[0].u.i;
         tk->min_ptsize = shared_vals[1].u.f;
@@ -646,7 +682,19 @@
       case AFM_TOKEN_ENDTRACKKERN:
       case AFM_TOKEN_ENDKERNDATA:
       case AFM_TOKEN_ENDFONTMETRICS:
-        fi->NumTrackKern = (FT_UInt)( n + 1 );
+        tmp = n + 1;
+        if ( (FT_UInt)tmp != fi->NumTrackKern )
+        {
+          FT_TRACE1(( "afm_parse_track_kern: %s%d track kern entr%s seen\n",
+                      tmp == 0 ? "" : "only ",
+                      tmp,
+                      tmp == 1 ? "y" : "ies" ));
+          fi->NumTrackKern = (FT_UInt)tmp;
+        }
+        else
+          FT_TRACE3(( "afm_parse_track_kern: %d track kern entr%s seen\n",
+                      tmp,
+                      tmp == 1 ? "y" : "ies" ));
         return FT_Err_Ok;
 
       case AFM_TOKEN_UNKNOWN:
@@ -667,7 +715,7 @@
 
 
   /* compare two kerning pairs */
-  FT_CALLBACK_DEF( int )
+  FT_COMPARE_DEF( int )
   afm_compare_kern_pairs( const void*  a,
                           const void*  b )
   {
@@ -690,7 +738,8 @@
   static FT_Error
   afm_parse_kern_pairs( AFM_Parser  parser )
   {
-    AFM_FontInfo  fi = parser->FontInfo;
+    AFM_FontInfo  fi     = parser->FontInfo;
+    AFM_Stream    stream = parser->stream;
     AFM_KernPair  kp;
     char*         key;
     FT_Offset     len;
@@ -702,9 +751,26 @@
       goto Fail;
 
     if ( tmp < 0 )
+    {
+      FT_ERROR(( "afm_parse_kern_pairs: invalid number of kern pairs\n" ));
       goto Fail;
+    }
 
     fi->NumKernPair = (FT_UInt)tmp;
+    FT_TRACE3(( "afm_parse_kern_pairs: %u kern pair%s expected\n",
+                fi->NumKernPair,
+                fi->NumKernPair == 1 ? "" : "s" ));
+
+    /* Rough sanity check: The minimum line length of the `KP`,    */
+    /* `KPH`,`KPX`, and `KPY` commands is 10 characters (including */
+    /* the EOL character).                                         */
+    if ( (FT_ULong)( stream->limit - stream->cursor ) / 10 <
+           fi->NumKernPair )
+    {
+      FT_ERROR(( "afm_parse_kern_pairs:"
+                 " number of kern pairs exceeds stream size\n" ));
+      goto Fail;
+    }
 
     if ( fi->NumKernPair )
     {
@@ -734,7 +800,10 @@
           n++;
 
           if ( n >= (int)fi->NumKernPair )
+          {
+            FT_ERROR(( "afm_parse_kern_pairs: too many kern pairs\n" ));
             goto Fail;
+          }
 
           kp = fi->KernPairs + n;
 
@@ -744,7 +813,12 @@
           shared_vals[3].type = AFM_VALUE_TYPE_INTEGER;
           r = afm_parser_read_vals( parser, shared_vals, 4 );
           if ( r < 3 )
+          {
+            FT_ERROR(( "afm_parse_kern_pairs:"
+                       " insufficient number of parameters for entry %d\n",
+                       n ));
             goto Fail;
+          }
 
           /* index values can't be negative */
           kp->index1 = shared_vals[0].u.u;
@@ -766,7 +840,20 @@
       case AFM_TOKEN_ENDKERNPAIRS:
       case AFM_TOKEN_ENDKERNDATA:
       case AFM_TOKEN_ENDFONTMETRICS:
-        fi->NumKernPair = (FT_UInt)( n + 1 );
+        tmp = n + 1;
+        if ( (FT_UInt)tmp != fi->NumKernPair )
+        {
+          FT_TRACE1(( "afm_parse_kern_pairs: %s%d kern pair%s seen\n",
+                      tmp == 0 ? "" : "only ",
+                      tmp,
+                      tmp == 1 ? "" : "s" ));
+          fi->NumKernPair = (FT_UInt)tmp;
+        }
+        else
+          FT_TRACE3(( "afm_parse_kern_pairs: %d kern pair%s seen\n",
+                      tmp,
+                      tmp == 1 ? "" : "s" ));
+
         ft_qsort( fi->KernPairs, fi->NumKernPair,
                   sizeof ( AFM_KernPairRec ),
                   afm_compare_kern_pairs );
@@ -792,22 +879,43 @@
     char*      key;
     FT_Offset  len;
 
+    int  have_trackkern = 0;
+    int  have_kernpairs = 0;
+
 
     while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 )
     {
       switch ( afm_tokenize( key, len ) )
       {
       case AFM_TOKEN_STARTTRACKKERN:
+        if ( have_trackkern )
+        {
+          FT_ERROR(( "afm_parse_kern_data:"
+                     " invalid second horizontal track kern section\n" ));
+          goto Fail;
+        }
+
         error = afm_parse_track_kern( parser );
         if ( error )
           return error;
+
+        have_trackkern = 1;
         break;
 
       case AFM_TOKEN_STARTKERNPAIRS:
       case AFM_TOKEN_STARTKERNPAIRS0:
+        if ( have_kernpairs )
+        {
+          FT_ERROR(( "afm_parse_kern_data:"
+                     " invalid second horizontal kern pair section\n" ));
+          goto Fail;
+        }
+
         error = afm_parse_kern_pairs( parser );
         if ( error )
           return error;
+
+        have_kernpairs = 1;
         break;
 
       case AFM_TOKEN_ENDKERNDATA:
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/afmparse.h b/qtbase/src/3rdparty/freetype/src/psaux/afmparse.h
index 16a3a3e902..eee49e3601 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/afmparse.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/afmparse.h
@@ -4,7 +4,7 @@
  *
  *   AFM parser (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.c b/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.c
index 3d2da1e03c..92139c93ad 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.c
@@ -4,7 +4,7 @@
  *
  *   PostScript CFF (Type 2) decoding routines (body).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -248,7 +248,7 @@
     else
 #endif /* FT_CONFIG_OPTION_INCREMENTAL */
     {
-      CFF_Font cff = (CFF_Font)(face->extra.data);
+      CFF_Font cff = (CFF_Font)( face->extra.data );
 
 
       bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar );
@@ -1871,7 +1871,7 @@
         case cff_op_put:
           {
             FT_Fixed  val = args[0];
-            FT_Int    idx = (FT_Int)( args[1] >> 16 );
+            FT_UInt   idx = (FT_UInt)( args[1] >> 16 );
 
 
             FT_TRACE4(( " put\n" ));
@@ -1880,20 +1880,20 @@
             /* didn't give a hard-coded size limit of the temporary */
             /* storage array; instead, an argument of the           */
             /* `MultipleMaster' operator set the size               */
-            if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
+            if ( idx < CFF_MAX_TRANS_ELEMENTS )
               decoder->buildchar[idx] = val;
           }
           break;
 
         case cff_op_get:
           {
-            FT_Int    idx = (FT_Int)( args[0] >> 16 );
+            FT_UInt   idx = (FT_UInt)( args[0] >> 16 );
             FT_Fixed  val = 0;
 
 
             FT_TRACE4(( " get\n" ));
 
-            if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
+            if ( idx < CFF_MAX_TRANS_ELEMENTS )
               val = decoder->buildchar[idx];
 
             args[0] = val;
@@ -1914,9 +1914,9 @@
           /* this operator was removed from the Type2 specification */
           /* in version 16-March-2000                               */
           {
-            FT_Int  reg_idx = (FT_Int)args[0];
-            FT_Int  idx     = (FT_Int)args[1];
-            FT_Int  count   = (FT_Int)args[2];
+            FT_UInt  reg_idx = (FT_UInt)args[0];
+            FT_UInt  idx     = (FT_UInt)args[1];
+            FT_UInt  count   = (FT_UInt)args[2];
 
 
             FT_TRACE4(( " load\n" ));
@@ -1924,11 +1924,11 @@
             /* since we currently don't handle interpolation of multiple */
             /* master fonts, we store a vector [1 0 0 ...] in the        */
             /* temporary storage array regardless of the Registry index  */
-            if ( reg_idx >= 0 && reg_idx <= 2             &&
-                 idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS &&
-                 count >= 0 && count <= num_axes          )
+            if ( reg_idx <= 2                 &&
+                 idx < CFF_MAX_TRANS_ELEMENTS &&
+                 count <= num_axes            )
             {
-              FT_Int  end, i;
+              FT_UInt  end, i;
 
 
               end = FT_MIN( idx + count, CFF_MAX_TRANS_ELEMENTS );
@@ -2153,7 +2153,7 @@
                                       decoder->locals_bias );
 
 
-            FT_TRACE4(( " callsubr (idx %d, entering level %d)\n",
+            FT_TRACE4(( " callsubr (idx %d, entering level %ld)\n",
                         idx,
                         zone - decoder->zones + 1 ));
 
@@ -2197,7 +2197,7 @@
                                       decoder->globals_bias );
 
 
-            FT_TRACE4(( " callgsubr (idx %d, entering level %d)\n",
+            FT_TRACE4(( " callgsubr (idx %d, entering level %ld)\n",
                         idx,
                         zone - decoder->zones + 1 ));
 
@@ -2236,7 +2236,7 @@
           break;
 
         case cff_op_return:
-          FT_TRACE4(( " return (leaving level %d)\n",
+          FT_TRACE4(( " return (leaving level %ld)\n",
                       decoder->zone - decoder->zones ));
 
           if ( decoder->zone <= decoder->zones )
@@ -2271,7 +2271,8 @@
 
     } /* while ip < limit */
 
-    FT_TRACE4(( "..end..\n\n" ));
+    FT_TRACE4(( "..end..\n" ));
+    FT_TRACE4(( "\n" ));
 
   Fail:
     return error;
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.h b/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.h
index 77a4962698..a9f6761824 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/cffdecode.h
@@ -4,7 +4,7 @@
  *
  *   PostScript CFF (Type 2) decoding routines (specification).
  *
- * Copyright (C) 2017-2020 by
+ * Copyright (C) 2017-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/module.mk b/qtbase/src/3rdparty/freetype/src/psaux/module.mk
index 651db01426..e52e987968 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/psaux/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psarrst.c b/qtbase/src/3rdparty/freetype/src/psaux/psarrst.c
index 8751d275fb..70313d283a 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psarrst.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psarrst.c
@@ -65,7 +65,6 @@
     arrstack->error     = error;
     arrstack->sizeItem  = sizeItem;
     arrstack->allocated = 0;
-    arrstack->chunk     = 10;    /* chunks of 10 items */
     arrstack->count     = 0;
     arrstack->totalSize = 0;
     arrstack->ptr       = NULL;
@@ -110,7 +109,7 @@
 
       FT_ASSERT( newSize > 0 );   /* avoid realloc with zero size */
 
-      if ( !FT_REALLOC( arrstack->ptr, arrstack->totalSize, newSize ) )
+      if ( !FT_QREALLOC( arrstack->ptr, arrstack->totalSize, newSize ) )
       {
         arrstack->allocated = numElements;
         arrstack->totalSize = newSize;
@@ -216,9 +215,9 @@
 
     if ( arrstack->count == arrstack->allocated )
     {
-      /* grow the buffer by one chunk */
+      /* increase the buffer size */
       if ( !cf2_arrstack_setNumElements(
-             arrstack, arrstack->allocated + arrstack->chunk ) )
+             arrstack, arrstack->allocated * 2 + 16 ) )
       {
         /* on error, ignore the push */
         return;
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psarrst.h b/qtbase/src/3rdparty/freetype/src/psaux/psarrst.h
index 098617b257..31e5330cc3 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psarrst.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psarrst.h
@@ -55,7 +55,6 @@ FT_BEGIN_HEADER
 
     size_t  sizeItem;       /* bytes per element             */
     size_t  allocated;      /* items allocated               */
-    size_t  chunk;          /* allocation increment in items */
     size_t  count;          /* number of elements allocated  */
     size_t  totalSize;      /* total bytes allocated         */
 
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psaux.c b/qtbase/src/3rdparty/freetype/src/psaux/psaux.c
index f4282222a6..2ac7949479 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psaux.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psaux.c
@@ -4,7 +4,7 @@
  *
  *   FreeType auxiliary PostScript driver component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psauxerr.h b/qtbase/src/3rdparty/freetype/src/psaux/psauxerr.h
index 8b9a958aec..1504b34ee5 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psauxerr.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psauxerr.h
@@ -4,7 +4,7 @@
  *
  *   PS auxiliary module error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.c b/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.c
index e73ba22451..113490abcd 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType auxiliary PostScript module implementation (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.h b/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.h
index a6bebe4b94..2d508edc2a 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psauxmod.h
@@ -4,7 +4,7 @@
  *
  *   FreeType auxiliary PostScript module implementation (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psblues.c b/qtbase/src/3rdparty/freetype/src/psaux/psblues.c
index 3878e9bde0..f9c864fea9 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psblues.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psblues.c
@@ -506,7 +506,8 @@
             /* guarantee minimum of 1 pixel overshoot */
             dsNew = FT_MIN(
                       cf2_fixedRound( bottomHintEdge->dsCoord ),
-                      blues->zone[i].dsFlatEdge - cf2_intToFixed( 1 ) );
+                      SUB_INT32( blues->zone[i].dsFlatEdge,
+                                 cf2_intToFixed( 1 ) ) );
           }
 
           else
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psconv.c b/qtbase/src/3rdparty/freetype/src/psaux/psconv.c
index 4cf5cd5d88..9b8c0d90c3 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psconv.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psconv.c
@@ -4,7 +4,7 @@
  *
  *   Some convenience conversions (body).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -535,11 +535,11 @@
 
       if ( r & 1 )
       {
-        *buffer = (FT_Byte)(*buffer + c);
+        *buffer = (FT_Byte)( *buffer + c );
         buffer++;
       }
       else
-        *buffer = (FT_Byte)(c << 4);
+        *buffer = (FT_Byte)( c << 4 );
 
       r++;
     }
@@ -572,8 +572,8 @@
     if ( p >= limit )
       return 0;
 
-    if ( n > (FT_UInt)(limit - p) )
-      n = (FT_UInt)(limit - p);
+    if ( n > (FT_UInt)( limit - p ) )
+      n = (FT_UInt)( limit - p );
 
     for ( r = 0; r < n; r++ )
     {
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psconv.h b/qtbase/src/3rdparty/freetype/src/psaux/psconv.h
index 833e827364..650d7c93b2 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psconv.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psconv.h
@@ -4,7 +4,7 @@
  *
  *   Some convenience conversions (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psft.c b/qtbase/src/3rdparty/freetype/src/psaux/psft.c
index 41c16542c1..ac72d8259c 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psft.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psft.c
@@ -742,13 +742,13 @@
     /* For ordinary fonts get the character data stored in the face record. */
     {
       glyph_data.pointer = type1->charstrings[glyph_index];
-      glyph_data.length  = (FT_Int)type1->charstrings_len[glyph_index];
+      glyph_data.length  = type1->charstrings_len[glyph_index];
     }
 
     if ( !error )
     {
       FT_Byte*  charstring_base = (FT_Byte*)glyph_data.pointer;
-      FT_ULong  charstring_len  = (FT_ULong)glyph_data.length;
+      FT_ULong  charstring_len  = glyph_data.length;
 
 
       FT_ASSERT( charstring_base + charstring_len >= charstring_base );
@@ -778,7 +778,7 @@
     face = (T1_Face)decoder->builder.face;
 
     data.pointer = buf->start;
-    data.length  = (FT_Int)( buf->end - buf->start );
+    data.length  = (FT_UInt)( buf->end - buf->start );
 
     if ( face->root.internal->incremental_interface )
       face->root.internal->incremental_interface->funcs->free_glyph_data(
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/pshints.c b/qtbase/src/3rdparty/freetype/src/psaux/pshints.c
index ce8cfca715..ad472c98df 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/pshints.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/pshints.c
@@ -412,6 +412,12 @@
     {
       FT_Bool  isPair = cf2_hint_isPair( &hintmap->edge[i] );
 
+      /* final amount to move edge or edge pair */
+      CF2_Fixed  move = 0;
+
+      CF2_Fixed  dsCoord_i;
+      CF2_Fixed  dsCoord_j;
+
 
       /* index of upper edge (same value for ghost hint) */
       j = isPair ? i + 1 : i;
@@ -422,11 +428,14 @@
       FT_ASSERT( cf2_hint_isLocked( &hintmap->edge[i] ) ==
                    cf2_hint_isLocked( &hintmap->edge[j] ) );
 
+      dsCoord_i = hintmap->edge[i].dsCoord;
+      dsCoord_j = hintmap->edge[j].dsCoord;
+
       if ( !cf2_hint_isLocked( &hintmap->edge[i] ) )
       {
         /* hint edge is not locked, we can adjust it */
-        CF2_Fixed  fracDown = cf2_fixedFraction( hintmap->edge[i].dsCoord );
-        CF2_Fixed  fracUp   = cf2_fixedFraction( hintmap->edge[j].dsCoord );
+        CF2_Fixed  fracDown = cf2_fixedFraction( dsCoord_i );
+        CF2_Fixed  fracUp   = cf2_fixedFraction( dsCoord_j );
 
         /* calculate all four possibilities; moves down are negative */
         CF2_Fixed  downMoveDown = 0 - fracDown;
@@ -443,9 +452,6 @@
         /* smallest move down */
         CF2_Fixed  moveDown = FT_MAX( downMoveDown, upMoveDown );
 
-        /* final amount to move edge or edge pair */
-        CF2_Fixed  move;
-
         CF2_Fixed  downMinCounter = CF2_MIN_COUNTER;
         CF2_Fixed  upMinCounter   = CF2_MIN_COUNTER;
         FT_Bool    saveEdge       = FALSE;
@@ -467,16 +473,14 @@
         /* is there room to move up?                                    */
         /* there is if we are at top of array or the next edge is at or */
         /* beyond proposed move up?                                     */
-        if ( j >= hintmap->count - 1                ||
+        if ( j >= hintmap->count - 1                         ||
              hintmap->edge[j + 1].dsCoord >=
-               ADD_INT32( hintmap->edge[j].dsCoord,
-                          moveUp + upMinCounter )   )
+               ADD_INT32( dsCoord_j, moveUp + upMinCounter ) )
         {
           /* there is room to move up; is there also room to move down? */
-          if ( i == 0                                   ||
+          if ( i == 0                                              ||
                hintmap->edge[i - 1].dsCoord <=
-                 ADD_INT32( hintmap->edge[i].dsCoord,
-                            moveDown - downMinCounter ) )
+                 ADD_INT32( dsCoord_i, moveDown - downMinCounter ) )
           {
             /* move smaller absolute amount */
             move = ( -moveDown < moveUp ) ? moveDown : moveUp;  /* optimum */
@@ -487,10 +491,9 @@
         else
         {
           /* is there room to move down? */
-          if ( i == 0                                   ||
+          if ( i == 0                                              ||
                hintmap->edge[i - 1].dsCoord <=
-                 ADD_INT32( hintmap->edge[i].dsCoord,
-                            moveDown - downMinCounter ) )
+                 ADD_INT32( dsCoord_i, moveDown - downMinCounter ) )
           {
             move     = moveDown;
             /* true if non-optimum move */
@@ -524,17 +527,21 @@
         }
 
         /* move the edge(s) */
-        hintmap->edge[i].dsCoord = ADD_INT32( hintmap->edge[i].dsCoord,
-                                              move );
+        hintmap->edge[i].dsCoord = ADD_INT32( dsCoord_i, move );
         if ( isPair )
-          hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord,
-                                                move );
+          hintmap->edge[j].dsCoord = ADD_INT32( dsCoord_j, move );
       }
 
-      /* assert there are no overlaps in device space */
+      /* assert there are no overlaps in device space;     */
+      /* ignore tests if there was overflow (that is, if   */
+      /* operands have the same sign but the sum does not) */
       FT_ASSERT( i == 0                                                   ||
+                 ( ( dsCoord_i ^ move ) >= 0                    &&
+                   ( dsCoord_i ^ hintmap->edge[i].dsCoord ) < 0 )         ||
                  hintmap->edge[i - 1].dsCoord <= hintmap->edge[i].dsCoord );
       FT_ASSERT( i < j                                                ||
+                 ( ( dsCoord_j ^ move ) >= 0                    &&
+                   ( dsCoord_j ^ hintmap->edge[j].dsCoord ) < 0 )     ||
                  hintmap->edge[i].dsCoord <= hintmap->edge[j].dsCoord );
 
       /* adjust the scales, avoiding divide by zero */
@@ -1022,10 +1029,17 @@
       }
     }
 
-    FT_TRACE6(( "%s\n", initialMap ? "flags: [p]air [g]host [t]op"
-                                     " [b]ottom [L]ocked [S]ynthetic\n"
-                                     "Initial hintmap"
-                                   : "Hints:" ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+    if ( initialMap )
+    {
+      FT_TRACE6(( "flags: [p]air [g]host [t]op"
+                  " [b]ottom [L]ocked [S]ynthetic\n" ));
+      FT_TRACE6(( "Initial hintmap" ));
+    }
+    else
+      FT_TRACE6(( "Hints:" ));
+#endif
+
     cf2_hintmap_dump( hintmap );
 
     /*
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psintrp.c b/qtbase/src/3rdparty/freetype/src/psaux/psintrp.c
index 519c694447..6c640eebd5 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psintrp.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psintrp.c
@@ -469,7 +469,7 @@
    */
   FT_LOCAL_DEF( void )
   cf2_interpT2CharString( CF2_Font              font,
-                          CF2_Buffer            buf,
+                          const CF2_Buffer      buf,
                           CF2_OutlineCallbacks  callbacks,
                           const FT_Vector*      translation,
                           FT_Bool               doingSeac,
@@ -1340,9 +1340,9 @@
                       if ( decoder->glyph_names == 0 )
 #endif /* FT_CONFIG_OPTION_INCREMENTAL */
                       {
-                        FT_ERROR((
-                          "cf2_interpT2CharString: (Type 1 seac)"
-                          " glyph names table not available in this font\n" ));
+                        FT_ERROR(( "cf2_interpT2CharString:\n" ));
+                        FT_ERROR(( "  (Type 1 seac) glyph names table"
+                                   " not available in this font\n" ));
                         lastError = FT_THROW( Invalid_Glyph_Format );
                         goto exit;
                       }
@@ -1368,9 +1368,9 @@
 
                     if ( bchar_index < 0 || achar_index < 0 )
                     {
-                      FT_ERROR((
-                        "cf2_interpT2CharString: (Type 1 seac)"
-                        " invalid seac character code arguments\n" ));
+                      FT_ERROR(( "cf2_interpT2CharString:\n" ));
+                      FT_ERROR(( "  (Type 1 seac) invalid"
+                                 " seac character code arguments\n" ));
                       lastError = FT_THROW( Invalid_Glyph_Format );
                       goto exit;
                     }
@@ -1670,7 +1670,13 @@
                      */
 
                     count = cf2_stack_count( opStack );
-                    FT_ASSERT( (CF2_UInt)arg_cnt <= count );
+                    if ( (CF2_UInt)arg_cnt > count )
+                    {
+                      FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+                                 " stack underflow\n" ));
+                      lastError = FT_THROW( Invalid_Glyph_Format );
+                      goto exit;
+                    }
 
                     opIdx += count - (CF2_UInt)arg_cnt;
 
@@ -1893,24 +1899,25 @@
                       /*     cvi( <idx> ) of BuildCharArray with  */
                       /*     WeightVector                         */
                       {
-                        FT_Int    idx;
-                        PS_Blend  blend = decoder->blend;
+                        FT_UInt   idx;
+                        PS_Blend  blend         = decoder->blend;
+                        FT_UInt   len_buildchar = decoder->len_buildchar;
 
 
                         if ( arg_cnt != 1 || !blend )
                           goto Unexpected_OtherSubr;
 
-                        idx = cf2_stack_popInt( opStack );
+                        idx = (FT_UInt)cf2_stack_popInt( opStack );
 
-                        if ( idx < 0                             ||
-                             (FT_UInt)idx + blend->num_designs >
-                               decoder->len_buildchar            )
+                        if ( len_buildchar < blend->num_designs       ||
+                             len_buildchar - blend->num_designs < idx )
                           goto Unexpected_OtherSubr;
 
-                        ft_memcpy( &decoder->buildchar[idx],
-                                   blend->weight_vector,
-                                   blend->num_designs *
-                                   sizeof ( blend->weight_vector[0] ) );
+                        if ( decoder->buildchar && blend->weight_vector )
+                          ft_memcpy( &decoder->buildchar[idx],
+                                     blend->weight_vector,
+                                     blend->num_designs *
+                                       sizeof ( blend->weight_vector[0] ) );
                       }
                       break;
 
@@ -2004,17 +2011,16 @@
                       /* <val> <idx> 2 24 callothersubr               */
                       /* ==> set BuildCharArray[cvi( <idx> )] = <val> */
                       {
-                        CF2_Int   idx;
+                        CF2_UInt  idx;
                         PS_Blend  blend = decoder->blend;
 
 
                         if ( arg_cnt != 2 || !blend )
                           goto Unexpected_OtherSubr;
 
-                        idx = cf2_stack_popInt( opStack );
+                        idx = (CF2_UInt)cf2_stack_popInt( opStack );
 
-                        if ( idx < 0                                ||
-                             (FT_UInt)idx >= decoder->len_buildchar )
+                        if ( idx >= decoder->len_buildchar )
                           goto Unexpected_OtherSubr;
 
                         decoder->buildchar[idx] =
@@ -2027,17 +2033,16 @@
                       /* ==> push BuildCharArray[cvi( idx )] */
                       /*     onto T1 stack                   */
                       {
-                        CF2_Int   idx;
+                        CF2_UInt  idx;
                         PS_Blend  blend = decoder->blend;
 
 
                         if ( arg_cnt != 1 || !blend )
                           goto Unexpected_OtherSubr;
 
-                        idx = cf2_stack_popInt( opStack );
+                        idx = (CF2_UInt)cf2_stack_popInt( opStack );
 
-                        if ( idx < 0                                ||
-                             (FT_UInt)idx >= decoder->len_buildchar )
+                        if ( idx >= decoder->len_buildchar )
                           goto Unexpected_OtherSubr;
 
                         cf2_stack_pushFixed( opStack,
@@ -2179,29 +2184,29 @@
                 case cf2_escPUT:
                   {
                     CF2_F16Dot16  val;
-                    CF2_Int       idx;
+                    CF2_UInt      idx;
 
 
                     FT_TRACE4(( " put\n" ));
 
-                    idx = cf2_stack_popInt( opStack );
+                    idx = (CF2_UInt)cf2_stack_popInt( opStack );
                     val = cf2_stack_popFixed( opStack );
 
-                    if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
+                    if ( idx < CF2_STORAGE_SIZE )
                       storage[idx] = val;
                   }
                   continue; /* do not clear the stack */
 
                 case cf2_escGET:
                   {
-                    CF2_Int  idx;
+                    CF2_UInt  idx;
 
 
                     FT_TRACE4(( " get\n" ));
 
-                    idx = cf2_stack_popInt( opStack );
+                    idx = (CF2_UInt)cf2_stack_popInt( opStack );
 
-                    if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
+                    if ( idx < CF2_STORAGE_SIZE )
                       cf2_stack_pushFixed( opStack, storage[idx] );
                   }
                   continue; /* do not clear the stack */
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psintrp.h b/qtbase/src/3rdparty/freetype/src/psaux/psintrp.h
index 669c09c0ae..d8b9342ecb 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psintrp.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psintrp.h
@@ -65,7 +65,7 @@ FT_BEGIN_HEADER
 
   FT_LOCAL( void )
   cf2_interpT2CharString( CF2_Font              font,
-                          CF2_Buffer            charstring,
+                          const CF2_Buffer      buf,
                           CF2_OutlineCallbacks  callbacks,
                           const FT_Vector*      translation,
                           FT_Bool               doingSeac,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psobjs.c b/qtbase/src/3rdparty/freetype/src/psaux/psobjs.c
index defc4d4fce..371e538020 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
  *
  *   Auxiliary functions for PostScript fonts (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -99,45 +99,31 @@
   }
 
 
-  static void
-  shift_elements( PS_Table  table,
-                  FT_Byte*  old_base )
-  {
-    FT_PtrDist  delta  = table->block - old_base;
-    FT_Byte**   offset = table->elements;
-    FT_Byte**   limit  = offset + table->max_elems;
-
-
-    for ( ; offset < limit; offset++ )
-    {
-      if ( offset[0] )
-        offset[0] += delta;
-    }
-  }
-
-
   static FT_Error
-  reallocate_t1_table( PS_Table   table,
-                       FT_Offset  new_size )
+  ps_table_realloc( PS_Table   table,
+                    FT_Offset  new_size )
   {
     FT_Memory  memory   = table->memory;
     FT_Byte*   old_base = table->block;
     FT_Error   error;
 
 
-    /* allocate new base block */
-    if ( FT_ALLOC( table->block, new_size ) )
-    {
-      table->block = old_base;
+    /* (re)allocate the base block */
+    if ( FT_REALLOC( table->block, table->capacity, new_size ) )
       return error;
-    }
 
-    /* copy elements and shift offsets */
-    if ( old_base )
+    /* rebase offsets if necessary */
+    if ( old_base && table->block != old_base )
     {
-      FT_MEM_COPY( table->block, old_base, table->capacity );
-      shift_elements( table, old_base );
-      FT_FREE( old_base );
+      FT_Byte**   offset = table->elements;
+      FT_Byte**   limit  = offset + table->max_elems;
+
+
+      for ( ; offset < limit; offset++ )
+      {
+        if ( *offset )
+          *offset = table->block + ( *offset - old_base );
+      }
     }
 
     table->capacity = new_size;
@@ -204,7 +190,7 @@
         new_size  = FT_PAD_CEIL( new_size, 1024 );
       }
 
-      error = reallocate_t1_table( table, new_size );
+      error = ps_table_realloc( table, new_size );
       if ( error )
         return error;
 
@@ -234,32 +220,12 @@
    * @InOut:
    *   table ::
    *     The target table.
-   *
-   * @Note:
-   *   This function does NOT release the heap's memory block.  It is up
-   *   to the caller to clean it, or reference it in its own structures.
    */
   FT_LOCAL_DEF( void )
   ps_table_done( PS_Table  table )
   {
-    FT_Memory  memory = table->memory;
-    FT_Error   error;
-    FT_Byte*   old_base = table->block;
-
-
-    /* should never fail, because rec.cursor <= rec.size */
-    if ( !old_base )
-      return;
-
-    if ( FT_ALLOC( table->block, table->cursor ) )
-      return;
-    FT_MEM_COPY( table->block, old_base, table->cursor );
-    shift_elements( table, old_base );
-
-    table->capacity = table->cursor;
-    FT_FREE( old_base );
-
-    FT_UNUSED( error );
+    /* no problem if shrinking fails */
+    ps_table_realloc( table, table->cursor );
   }
 
 
@@ -552,7 +518,7 @@
 
     if ( *cur == '<' )                              /* <...> */
     {
-      if ( cur + 1 < limit && *(cur + 1) == '<' )   /* << */
+      if ( cur + 1 < limit && *( cur + 1 ) == '<' ) /* << */
       {
         cur++;
         cur++;
@@ -595,10 +561,10 @@
     if ( cur < limit && cur == parser->cursor )
     {
       FT_ERROR(( "ps_parser_skip_PS_token:"
-                 " current token is `%c' which is self-delimiting\n"
-                 "                        "
-                 " but invalid at this point\n",
+                 " current token is `%c' which is self-delimiting\n",
                  *cur ));
+      FT_ERROR(( "                        "
+                 " but invalid at this point\n" ));
 
       error = FT_THROW( Invalid_File_Format );
     }
@@ -979,7 +945,7 @@
     }
 
     len = (FT_UInt)( cur - *cursor );
-    if ( cur >= limit || FT_ALLOC( result, len + 1 ) )
+    if ( cur >= limit || FT_QALLOC( result, len + 1 ) )
       return 0;
 
     /* now copy the string */
@@ -1098,7 +1064,6 @@
     {
       FT_Byte*    q      = (FT_Byte*)objects[idx] + field->offset;
       FT_Long     val;
-      FT_String*  string = NULL;
 
 
       skip_spaces( &cur, limit );
@@ -1148,8 +1113,9 @@
       case T1_FIELD_TYPE_STRING:
       case T1_FIELD_TYPE_KEY:
         {
-          FT_Memory  memory = parser->memory;
-          FT_UInt    len    = (FT_UInt)( limit - cur );
+          FT_Memory   memory = parser->memory;
+          FT_UInt     len    = (FT_UInt)( limit - cur );
+          FT_String*  string = NULL;
 
 
           if ( cur >= limit )
@@ -1175,8 +1141,8 @@
           else
           {
             FT_ERROR(( "ps_parser_load_field:"
-                       " expected a name or string\n"
-                       "                     "
+                       " expected a name or string\n" ));
+            FT_ERROR(( "                     "
                        " but found token of type %d instead\n",
                        token.type ));
             error = FT_THROW( Invalid_File_Format );
@@ -1190,10 +1156,9 @@
             FT_TRACE0(( "ps_parser_load_field: overwriting field %s\n",
                         field->ident ));
             FT_FREE( *(FT_String**)q );
-            *(FT_String**)q = NULL;
           }
 
-          if ( FT_ALLOC( string, len + 1 ) )
+          if ( FT_QALLOC( string, len + 1 ) )
             goto Exit;
 
           FT_MEM_COPY( string, cur, len );
@@ -1248,7 +1213,7 @@
           FT_UInt    i;
 
 
-          if ( FT_NEW_ARRAY( temp, max_objects * 4 ) )
+          if ( FT_QNEW_ARRAY( temp, max_objects * 4 ) )
             goto Exit;
 
           for ( i = 0; i < 4; i++ )
@@ -1258,14 +1223,14 @@
             if ( result < 0 || (FT_UInt)result < max_objects )
             {
               FT_ERROR(( "ps_parser_load_field:"
-                         " expected %d integer%s in the %s subarray\n"
-                         "                     "
-                         " of /FontBBox in the /Blend dictionary\n",
+                         " expected %d integer%s in the %s subarray\n",
                          max_objects, max_objects > 1 ? "s" : "",
                          i == 0 ? "first"
                                 : ( i == 1 ? "second"
                                            : ( i == 2 ? "third"
                                                       : "fourth" ) ) ));
+              FT_ERROR(( "                     "
+                         " of /FontBBox in the /Blend dictionary\n" ));
               error = FT_THROW( Invalid_File_Format );
 
               FT_FREE( temp );
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psobjs.h b/qtbase/src/3rdparty/freetype/src/psaux/psobjs.h
index fdad672b6d..f01d4bd503 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psobjs.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psobjs.h
@@ -4,7 +4,7 @@
  *
  *   Auxiliary functions for PostScript fonts (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/psstack.c b/qtbase/src/3rdparty/freetype/src/psaux/psstack.c
index 7ae5256ef1..797486588a 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/psstack.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/psstack.c
@@ -54,20 +54,18 @@
                   FT_Error*  e,
                   FT_UInt    stackSize )
   {
-    FT_Error  error = FT_Err_Ok;     /* for FT_NEW */
-
+    FT_Error   error;        /* for FT_QNEW */
     CF2_Stack  stack = NULL;
 
 
-    if ( FT_NEW( stack ) )
+    if ( FT_QNEW( stack ) )
       return NULL;
 
-    /* initialize the structure; FT_NEW zeroes it */
     stack->memory = memory;
     stack->error  = e;
 
     /* allocate the stack buffer */
-    if ( FT_NEW_ARRAY( stack->buffer, stackSize ) )
+    if ( FT_QNEW_ARRAY( stack->buffer, stackSize ) )
     {
       FT_FREE( stack );
       return NULL;
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/rules.mk b/qtbase/src/3rdparty/freetype/src/psaux/rules.mk
index f49aecbc79..d20ff3e639 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/psaux/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.c b/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.c
index e21e93ca26..f297ce75e1 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 character map support (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.h b/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.h
index 031796510f..460d91f590 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/t1cmap.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 character map support (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/t1decode.c b/qtbase/src/3rdparty/freetype/src/psaux/t1decode.c
index 2ed27ca19e..1cdf436fa7 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/t1decode.c
+++ b/qtbase/src/3rdparty/freetype/src/psaux/t1decode.c
@@ -4,7 +4,7 @@
  *
  *   PostScript Type 1 decoding routines (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,8 +27,11 @@
 
 #include "psauxerr.h"
 
+
 /* ensure proper sign extension */
-#define Fix2Int( f )  ( (FT_Int)(FT_Short)( (f) >> 16 ) )
+#define Fix2Int( f )   ( (FT_Int) (FT_Short)( (f) >> 16 ) )
+#define Fix2UInt( f )  ( (FT_UInt)(FT_Short)( (f) >> 16 ) )
+
 
   /**************************************************************************
    *
@@ -517,7 +520,7 @@
 #ifdef FT_DEBUG_LEVEL_TRACE
       if ( bol )
       {
-        FT_TRACE5(( " (%d)", decoder->top - decoder->stack ));
+        FT_TRACE5(( " (%ld)", decoder->top - decoder->stack ));
         bol = FALSE;
       }
 #endif
@@ -1025,16 +1028,16 @@
           /* <val> <idx> 2 24 callothersubr               */
           /* ==> set BuildCharArray[cvi( <idx> )] = <val> */
           {
-            FT_Int    idx;
+            FT_UInt   idx;
             PS_Blend  blend = decoder->blend;
 
 
             if ( arg_cnt != 2 || !blend )
               goto Unexpected_OtherSubr;
 
-            idx = Fix2Int( top[1] );
+            idx = Fix2UInt( top[1] );
 
-            if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
+            if ( idx >= decoder->len_buildchar )
               goto Unexpected_OtherSubr;
 
             decoder->buildchar[idx] = top[0];
@@ -1046,16 +1049,16 @@
           /* ==> push BuildCharArray[cvi( idx )] */
           /*     onto T1 stack                   */
           {
-            FT_Int    idx;
+            FT_UInt   idx;
             PS_Blend  blend = decoder->blend;
 
 
             if ( arg_cnt != 1 || !blend )
               goto Unexpected_OtherSubr;
 
-            idx = Fix2Int( top[0] );
+            idx = Fix2UInt( top[0] );
 
-            if ( idx < 0 || (FT_UInt) idx >= decoder->len_buildchar )
+            if ( idx >= decoder->len_buildchar )
               goto Unexpected_OtherSubr;
 
             top[0] = decoder->buildchar[idx];
@@ -1162,9 +1165,9 @@
           if ( top - decoder->stack != num_args )
             FT_TRACE0(( "t1_decoder_parse_charstrings:"
                         " too much operands on the stack"
-                        " (seen %d, expected %d)\n",
+                        " (seen %ld, expected %d)\n",
                         top - decoder->stack, num_args ));
-            break;
+          break;
         }
 
 #endif /* FT_DEBUG_LEVEL_TRACE */
@@ -1209,7 +1212,7 @@
             FT_TRACE4(( "BuildCharArray = [ " ));
 
             for ( i = 0; i < decoder->len_buildchar; i++ )
-              FT_TRACE4(( "%d ", decoder->buildchar[i] ));
+              FT_TRACE4(( "%ld ", decoder->buildchar[i] ));
 
             FT_TRACE4(( "]\n" ));
           }
@@ -1650,7 +1653,8 @@
 
     } /* while ip < limit */
 
-    FT_TRACE4(( "..end..\n\n" ));
+    FT_TRACE4(( "..end..\n" ));
+    FT_TRACE4(( "\n" ));
 
   Fail:
     return error;
@@ -2070,7 +2074,8 @@
 
     } /* while ip < limit */
 
-    FT_TRACE4(( "..end..\n\n" ));
+    FT_TRACE4(( "..end..\n" ));
+    FT_TRACE4(( "\n" ));
 
   No_Width:
     FT_ERROR(( "t1_decoder_parse_metrics:"
diff --git a/qtbase/src/3rdparty/freetype/src/psaux/t1decode.h b/qtbase/src/3rdparty/freetype/src/psaux/t1decode.h
index b793504ac6..d60d61c904 100644
--- a/qtbase/src/3rdparty/freetype/src/psaux/t1decode.h
+++ b/qtbase/src/3rdparty/freetype/src/psaux/t1decode.h
@@ -4,7 +4,7 @@
  *
  *   PostScript Type 1 decoding routines (specification).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/module.mk b/qtbase/src/3rdparty/freetype/src/pshinter/module.mk
index b440d2e76a..bdb05c10ee 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.c b/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.c
index 920b9a74b5..dca539766f 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.c
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.c
@@ -4,7 +4,7 @@
  *
  *   PostScript hinting algorithm (body).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
@@ -182,13 +182,13 @@
     count = hints->num_hints;
 
     /* allocate our tables */
-    if ( FT_NEW_ARRAY( table->sort,  2 * count     ) ||
-         FT_NEW_ARRAY( table->hints,     count     ) ||
-         FT_NEW_ARRAY( table->zones, 2 * count + 1 ) )
+    if ( FT_QNEW_ARRAY( table->sort,  2 * count     ) ||
+         FT_QNEW_ARRAY( table->hints,     count     ) ||
+         FT_QNEW_ARRAY( table->zones, 2 * count + 1 ) )
       goto Exit;
 
     table->max_hints   = count;
-    table->sort_global = table->sort + count;
+    table->sort_global = FT_OFFSET( table->sort, count );
     table->num_hints   = 0;
     table->num_zones   = 0;
     table->zone        = NULL;
@@ -305,17 +305,18 @@
     /* now, sort the hints; they are guaranteed to not overlap */
     /* so we can compare their "org_pos" field directly        */
     {
-      FT_Int     i1, i2;
+      FT_UInt    i1, i2;
       PSH_Hint   hint1, hint2;
       PSH_Hint*  sort = table->sort;
 
 
       /* a simple bubble sort will do, since in 99% of cases, the hints */
       /* will be already sorted -- and the sort will be linear          */
-      for ( i1 = 1; i1 < (FT_Int)count; i1++ )
+      for ( i1 = 1; i1 < count; i1++ )
       {
         hint1 = sort[i1];
-        for ( i2 = i1 - 1; i2 >= 0; i2-- )
+        /* this loop stops when i2 wraps around after reaching 0 */
+        for ( i2 = i1 - 1; i2 < i1; i2-- )
         {
           hint2 = sort[i2];
 
@@ -869,7 +870,7 @@
       return;
     }
 
-#endif /* DEBUG_HINTER*/
+#endif /* DEBUG_HINTER */
 
     hint  = table->hints;
     count = table->max_hints;
@@ -1049,12 +1050,12 @@
   }
 
 
-  static int
+  static PSH_Dir
   psh_compute_dir( FT_Pos  dx,
                    FT_Pos  dy )
   {
-    FT_Pos  ax, ay;
-    int     result = PSH_DIR_NONE;
+    FT_Pos   ax, ay;
+    PSH_Dir  result = PSH_DIR_NONE;
 
 
     ax = FT_ABS( dx );
@@ -1166,8 +1167,8 @@
     memory = glyph->memory = globals->memory;
 
     /* allocate and setup points + contours arrays */
-    if ( FT_NEW_ARRAY( glyph->points,   outline->n_points   ) ||
-         FT_NEW_ARRAY( glyph->contours, outline->n_contours ) )
+    if ( FT_QNEW_ARRAY( glyph->points,   outline->n_points   ) ||
+         FT_QNEW_ARRAY( glyph->contours, outline->n_contours ) )
       goto Exit;
 
     glyph->num_points   = (FT_UInt)outline->n_points;
@@ -1227,28 +1228,29 @@
         FT_Pos  dxi, dyi, dxo, dyo;
 
 
+        point->flags = 0;
         if ( !( outline->tags[n] & FT_CURVE_TAG_ON ) )
-          point->flags = PSH_POINT_OFF;
+          psh_point_set_off( point );
 
         dxi = vec[n].x - vec[n_prev].x;
         dyi = vec[n].y - vec[n_prev].y;
 
-        point->dir_in = (FT_Char)psh_compute_dir( dxi, dyi );
+        point->dir_in = psh_compute_dir( dxi, dyi );
 
         dxo = vec[n_next].x - vec[n].x;
         dyo = vec[n_next].y - vec[n].y;
 
-        point->dir_out = (FT_Char)psh_compute_dir( dxo, dyo );
+        point->dir_out = psh_compute_dir( dxo, dyo );
 
         /* detect smooth points */
-        if ( point->flags & PSH_POINT_OFF )
-          point->flags |= PSH_POINT_SMOOTH;
+        if ( psh_point_is_off( point ) )
+          psh_point_set_smooth( point );
 
         else if ( point->dir_in == point->dir_out )
         {
           if ( point->dir_out != PSH_DIR_NONE           ||
                psh_corner_is_flat( dxi, dyi, dxo, dyo ) )
-            point->flags |= PSH_POINT_SMOOTH;
+            psh_point_set_smooth( point );
         }
       }
     }
@@ -1403,16 +1405,13 @@
   }
 
 
-  /* major_dir is the direction for points on the bottom/left of the stem; */
-  /* Points on the top/right of the stem will have a direction of          */
-  /* -major_dir.                                                           */
-
+  /* the min and max are based on contour orientation and fill rule */
   static void
   psh_hint_table_find_strong_points( PSH_Hint_Table  table,
                                      PSH_Point       point,
                                      FT_UInt         count,
                                      FT_Int          threshold,
-                                     FT_Int          major_dir )
+                                     PSH_Dir         major_dir )
   {
     PSH_Hint*  sort      = table->sort;
     FT_UInt    num_hints = table->num_hints;
@@ -1420,59 +1419,53 @@
 
     for ( ; count > 0; count--, point++ )
     {
-      FT_Int  point_dir = 0;
-      FT_Pos  org_u     = point->org_u;
+      PSH_Dir  point_dir;
+      FT_Pos   org_u = point->org_u;
 
 
       if ( psh_point_is_strong( point ) )
         continue;
 
-      if ( PSH_DIR_COMPARE( point->dir_in, major_dir ) )
-        point_dir = point->dir_in;
-
-      else if ( PSH_DIR_COMPARE( point->dir_out, major_dir ) )
-        point_dir = point->dir_out;
+      point_dir =
+        (PSH_Dir)( ( point->dir_in | point->dir_out ) & major_dir );
 
-      if ( point_dir )
+      if ( point_dir & ( PSH_DIR_DOWN | PSH_DIR_RIGHT ) )
       {
-        if ( point_dir == major_dir )
-        {
-          FT_UInt  nn;
+        FT_UInt  nn;
 
 
-          for ( nn = 0; nn < num_hints; nn++ )
-          {
-            PSH_Hint  hint = sort[nn];
-            FT_Pos    d    = org_u - hint->org_pos;
+        for ( nn = 0; nn < num_hints; nn++ )
+        {
+          PSH_Hint  hint = sort[nn];
+          FT_Pos    d    = org_u - hint->org_pos;
 
 
-            if ( d < threshold && -d < threshold )
-            {
-              psh_point_set_strong( point );
-              point->flags2 |= PSH_POINT_EDGE_MIN;
-              point->hint    = hint;
-              break;
-            }
+          if ( d < threshold && -d < threshold )
+          {
+            psh_point_set_strong( point );
+            point->flags2 |= PSH_POINT_EDGE_MIN;
+            point->hint    = hint;
+            break;
           }
         }
-        else if ( point_dir == -major_dir )
-        {
-          FT_UInt  nn;
+      }
+      else if ( point_dir & ( PSH_DIR_UP | PSH_DIR_LEFT ) )
+      {
+        FT_UInt  nn;
 
 
-          for ( nn = 0; nn < num_hints; nn++ )
-          {
-            PSH_Hint  hint = sort[nn];
-            FT_Pos    d    = org_u - hint->org_pos - hint->org_len;
+        for ( nn = 0; nn < num_hints; nn++ )
+        {
+          PSH_Hint  hint = sort[nn];
+          FT_Pos    d    = org_u - hint->org_pos - hint->org_len;
 
 
-            if ( d < threshold && -d < threshold )
-            {
-              psh_point_set_strong( point );
-              point->flags2 |= PSH_POINT_EDGE_MAX;
-              point->hint    = hint;
-              break;
-            }
+          if ( d < threshold && -d < threshold )
+          {
+            psh_point_set_strong( point );
+            point->flags2 |= PSH_POINT_EDGE_MAX;
+            point->hint    = hint;
+            break;
           }
         }
       }
@@ -1555,8 +1548,9 @@
   /* the accepted shift for strong points in fractional pixels */
 #define PSH_STRONG_THRESHOLD  32
 
-  /* the maximum shift value in font units */
-#define PSH_STRONG_THRESHOLD_MAXIMUM  30
+  /* the maximum shift value in font units tuned to distinguish */
+  /* between stems and serifs in URW+ font collection           */
+#define PSH_STRONG_THRESHOLD_MAXIMUM  12
 
 
   /* find strong points in a glyph */
@@ -1571,7 +1565,7 @@
     PS_Mask         mask      = table->hint_masks->masks;
     FT_UInt         num_masks = table->hint_masks->num_masks;
     FT_UInt         first     = 0;
-    FT_Int          major_dir = ( dimension == 0 ) ? PSH_DIR_VERTICAL
+    PSH_Dir         major_dir = ( dimension == 0 ) ? PSH_DIR_VERTICAL
                                                    : PSH_DIR_HORIZONTAL;
     PSH_Dimension   dim       = &glyph->globals->dimension[dimension];
     FT_Fixed        scale     = dim->scale_mult;
@@ -1656,8 +1650,8 @@
 
 
       /* check tangents */
-      if ( !PSH_DIR_COMPARE( point->dir_in,  PSH_DIR_HORIZONTAL ) &&
-           !PSH_DIR_COMPARE( point->dir_out, PSH_DIR_HORIZONTAL ) )
+      if ( !( point->dir_in  & PSH_DIR_HORIZONTAL ) &&
+           !( point->dir_out & PSH_DIR_HORIZONTAL ) )
         continue;
 
       /* skip strong points */
@@ -1805,7 +1799,7 @@
       FT_Error  error;
 
 
-      if ( FT_NEW_ARRAY( strongs, num_strongs ) )
+      if ( FT_QNEW_ARRAY( strongs, num_strongs ) )
         return;
     }
 
@@ -2118,14 +2112,17 @@
       FT_Fixed  old_x_scale = x_scale;
       FT_Fixed  old_y_scale = y_scale;
 
-      FT_Fixed  scaled;
-      FT_Fixed  fitted;
+      FT_Fixed  scaled = 0;
+      FT_Fixed  fitted = 0;
 
       FT_Bool  rescale = FALSE;
 
 
-      scaled = FT_MulFix( globals->blues.normal_top.zones->org_ref, y_scale );
-      fitted = FT_PIX_ROUND( scaled );
+      if ( globals->blues.normal_top.count )
+      {
+        scaled = FT_MulFix( globals->blues.normal_top.zones->org_ref, y_scale );
+        fitted = FT_PIX_ROUND( scaled );
+      }
 
       if ( fitted != 0 && scaled != fitted )
       {
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.h b/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.h
index 5367a5d164..ab978bf6d0 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.h
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshalgo.h
@@ -4,7 +4,7 @@
  *
  *   PostScript hinting algorithm (specification).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -93,21 +93,17 @@ FT_BEGIN_HEADER
   typedef struct PSH_PointRec_*    PSH_Point;
   typedef struct PSH_ContourRec_*  PSH_Contour;
 
-  enum
+  typedef enum PSH_Dir_
   {
-    PSH_DIR_NONE  =  4,
-    PSH_DIR_UP    = -1,
-    PSH_DIR_DOWN  =  1,
-    PSH_DIR_LEFT  = -2,
-    PSH_DIR_RIGHT =  2
-  };
+    PSH_DIR_NONE       = 0,
+    PSH_DIR_UP         = 1,
+    PSH_DIR_DOWN       = 2,
+    PSH_DIR_VERTICAL   = 1 | 2,
+    PSH_DIR_LEFT       = 4,
+    PSH_DIR_RIGHT      = 8,
+    PSH_DIR_HORIZONTAL = 4 | 8
 
-#define PSH_DIR_HORIZONTAL  2
-#define PSH_DIR_VERTICAL    1
-
-#define PSH_DIR_COMPARE( d1, d2 )   ( (d1) == (d2) || (d1) == -(d2) )
-#define PSH_DIR_IS_HORIZONTAL( d )  PSH_DIR_COMPARE( d, PSH_DIR_HORIZONTAL )
-#define PSH_DIR_IS_VERTICAL( d )    PSH_DIR_COMPARE( d, PSH_DIR_VERTICAL )
+  } PSH_Dir;
 
 
   /* the following bit-flags are computed once by the glyph */
@@ -160,8 +156,8 @@ FT_BEGIN_HEADER
     PSH_Contour  contour;
     FT_UInt      flags;
     FT_UInt      flags2;
-    FT_Char      dir_in;
-    FT_Char      dir_out;
+    PSH_Dir      dir_in;
+    PSH_Dir      dir_out;
     PSH_Hint     hint;
     FT_Pos       org_u;
     FT_Pos       org_v;
@@ -199,10 +195,6 @@ FT_BEGIN_HEADER
     PSH_Globals        globals;
     PSH_Hint_TableRec  hint_tables[2];
 
-    FT_Bool            vertical;
-    FT_Int             major_dir;
-    FT_Int             minor_dir;
-
     FT_Bool            do_horz_hints;
     FT_Bool            do_vert_hints;
     FT_Bool            do_horz_snapping;
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.c b/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.c
index cdc1c3af0e..887ea8d9c1 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.c
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.c
@@ -5,7 +5,7 @@
  *   PostScript hinter global hinting management (body).
  *   Inspired by the new auto-hinter module.
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
@@ -650,7 +650,7 @@
     FT_Error     error;
 
 
-    if ( !FT_NEW( globals ) )
+    if ( !FT_QNEW( globals ) )
     {
       FT_UInt    count;
       FT_Short*  read;
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.h b/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.h
index 8181324e5e..47247f969e 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.h
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshglob.h
@@ -4,7 +4,7 @@
  *
  *   PostScript hinter global hinting management.
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshinter.c b/qtbase/src/3rdparty/freetype/src/pshinter/pshinter.c
index 3cca0ad7c2..22315685f9 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshinter.c
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshinter.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PostScript Hinting module
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.c b/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.c
index e0abd386f9..a74a4fe99f 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.c
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PostScript hinter module implementation (body).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.h b/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.h
index 2a6eb1c469..cdf95b7c20 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.h
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshmod.h
@@ -4,7 +4,7 @@
  *
  *   PostScript hinter module interface (specification).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshnterr.h b/qtbase/src/3rdparty/freetype/src/pshinter/pshnterr.h
index d67955c410..789afb5990 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshnterr.h
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshnterr.h
@@ -4,7 +4,7 @@
  *
  *   PS Hinter error codes (specification only).
  *
- * Copyright (C) 2003-2020 by
+ * Copyright (C) 2003-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.c b/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.c
index bddccf2a6e..2a5cffbada 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.c
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PostScript hints recorder (body).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -63,16 +63,14 @@
   {
     FT_UInt   old_max = table->max_hints;
     FT_UInt   new_max = count;
-    FT_Error  error   = FT_Err_Ok;
+    FT_Error  error;
 
 
-    if ( new_max > old_max )
-    {
-      /* try to grow the table */
-      new_max = FT_PAD_CEIL( new_max, 8 );
-      if ( !FT_RENEW_ARRAY( table->hints, old_max, new_max ) )
-        table->max_hints = new_max;
-    }
+    /* try to grow the table */
+    new_max = FT_PAD_CEIL( new_max, 8 );
+    if ( !FT_QRENEW_ARRAY( table->hints, old_max, new_max ) )
+      table->max_hints = new_max;
+
     return error;
   }
 
@@ -90,17 +88,14 @@
     count = table->num_hints;
     count++;
 
-    if ( count >= table->max_hints )
+    if ( count > table->max_hints )
     {
       error = ps_hint_table_ensure( table, count, memory );
       if ( error )
         goto Exit;
     }
 
-    hint        = table->hints + count - 1;
-    hint->pos   = 0;
-    hint->len   = 0;
-    hint->flags = 0;
+    hint = table->hints + count - 1;  /* initialized upstream */
 
     table->num_hints = count;
 
@@ -136,14 +131,15 @@
                   FT_UInt    count,
                   FT_Memory  memory )
   {
-    FT_UInt   old_max = ( mask->max_bits + 7 ) >> 3;
-    FT_UInt   new_max = ( count          + 7 ) >> 3;
+    FT_UInt   old_max = mask->max_bits >> 3;
+    FT_UInt   new_max = ( count + 7 ) >> 3;
     FT_Error  error   = FT_Err_Ok;
 
 
     if ( new_max > old_max )
     {
       new_max = FT_PAD_CEIL( new_max, 8 );
+      /* added bytes are zeroed here */
       if ( !FT_RENEW_ARRAY( mask->bytes, old_max, new_max ) )
         mask->max_bits = new_max * 8;
     }
@@ -154,31 +150,15 @@
   /* test a bit value in a given mask */
   static FT_Int
   ps_mask_test_bit( PS_Mask  mask,
-                    FT_Int   idx )
+                    FT_UInt  idx )
   {
-    if ( (FT_UInt)idx >= mask->num_bits )
+    if ( idx >= mask->num_bits )
       return 0;
 
     return mask->bytes[idx >> 3] & ( 0x80 >> ( idx & 7 ) );
   }
 
 
-  /* clear a given bit */
-  static void
-  ps_mask_clear_bit( PS_Mask  mask,
-                     FT_UInt  idx )
-  {
-    FT_Byte*  p;
-
-
-    if ( idx >= mask->num_bits )
-      return;
-
-    p    = mask->bytes + ( idx >> 3 );
-    p[0] = (FT_Byte)( p[0] & ~( 0x80 >> ( idx & 7 ) ) );
-  }
-
-
   /* set a given bit, possibly grow the mask */
   static FT_Error
   ps_mask_set_bit( PS_Mask    mask,
@@ -269,6 +249,10 @@
     mask             = table->masks + count - 1;
     mask->num_bits   = 0;
     mask->end_point  = 0;
+    /* reused mask must be cleared */
+    if ( mask->max_bits )
+      FT_MEM_ZERO( mask->bytes, mask->max_bits >> 3 );
+
     table->num_masks = count;
 
   Exit:
@@ -426,7 +410,7 @@
       PS_Mask  mask2  = table->masks + index2;
       FT_UInt  count1 = mask1->num_bits;
       FT_UInt  count2 = mask2->num_bits;
-      FT_Int   delta;
+      FT_UInt  delta;
 
 
       if ( count2 > 0 )
@@ -437,15 +421,14 @@
 
 
         /* if "count2" is greater than "count1", we need to grow the */
-        /* first bitset, and clear the highest bits                  */
+        /* first bitset                                              */
         if ( count2 > count1 )
         {
           error = ps_mask_ensure( mask1, count2, memory );
           if ( error )
             goto Exit;
 
-          for ( pos = count1; pos < count2; pos++ )
-            ps_mask_clear_bit( mask1, pos );
+          mask1->num_bits = count2;
         }
 
         /* merge (unite) the bitsets */
@@ -467,7 +450,7 @@
       mask2->end_point = 0;
 
       /* number of masks to move */
-      delta = (FT_Int)( table->num_masks - 1 - index2 );
+      delta = table->num_masks - 1 - index2;
       if ( delta > 0 )
       {
         /* move to end of table for reuse */
@@ -476,7 +459,7 @@
 
         ft_memmove( mask2,
                     mask2 + 1,
-                    (FT_UInt)delta * sizeof ( PS_MaskRec ) );
+                    delta * sizeof ( PS_MaskRec ) );
 
         mask2[delta] = dummy;
       }
@@ -499,23 +482,18 @@
   ps_mask_table_merge_all( PS_Mask_Table  table,
                            FT_Memory      memory )
   {
-    FT_Int    index1, index2;
+    FT_UInt   index1, index2;
     FT_Error  error = FT_Err_Ok;
 
 
-    /* both loops go down to 0, thus FT_Int for index1 and index2 */
-    for ( index1 = (FT_Int)table->num_masks - 1; index1 > 0; index1-- )
+    /* the loops stop when unsigned indices wrap around after 0 */
+    for ( index1 = table->num_masks - 1; index1 < table->num_masks; index1-- )
     {
-      for ( index2 = index1 - 1; index2 >= 0; index2-- )
+      for ( index2 = index1 - 1; index2 < index1; index2-- )
       {
-        if ( ps_mask_table_test_intersect( table,
-                                           (FT_UInt)index1,
-                                           (FT_UInt)index2 ) )
+        if ( ps_mask_table_test_intersect( table, index1, index2 ) )
         {
-          error = ps_mask_table_merge( table,
-                                       (FT_UInt)index2,
-                                       (FT_UInt)index1,
-                                       memory );
+          error = ps_mask_table_merge( table, index2, index1, memory );
           if ( error )
             goto Exit;
 
@@ -652,7 +630,7 @@
                            FT_Int        pos,
                            FT_Int        len,
                            FT_Memory     memory,
-                           FT_Int       *aindex )
+                           FT_UInt      *aindex )
   {
     FT_Error  error = FT_Err_Ok;
     FT_UInt   flags = 0;
@@ -670,9 +648,6 @@
       len = 0;
     }
 
-    if ( aindex )
-      *aindex = -1;
-
     /* now, lookup stem in the current hints table */
     {
       PS_Mask  mask;
@@ -709,7 +684,7 @@
         goto Exit;
 
       if ( aindex )
-        *aindex = (FT_Int)idx;
+        *aindex = idx;
     }
 
   Exit:
@@ -720,9 +695,9 @@
   /* add a "hstem3/vstem3" counter to our dimension table */
   static FT_Error
   ps_dimension_add_counter( PS_Dimension  dim,
-                            FT_Int        hint1,
-                            FT_Int        hint2,
-                            FT_Int        hint3,
+                            FT_UInt       hint1,
+                            FT_UInt       hint2,
+                            FT_UInt       hint3,
                             FT_Memory     memory )
   {
     FT_Error  error   = FT_Err_Ok;
@@ -749,26 +724,17 @@
     }
 
     /* now, set the bits for our hints in the counter mask */
-    if ( hint1 >= 0 )
-    {
-      error = ps_mask_set_bit( counter, (FT_UInt)hint1, memory );
-      if ( error )
-        goto Exit;
-    }
+    error = ps_mask_set_bit( counter, hint1, memory );
+    if ( error )
+      goto Exit;
 
-    if ( hint2 >= 0 )
-    {
-      error = ps_mask_set_bit( counter, (FT_UInt)hint2, memory );
-      if ( error )
-        goto Exit;
-    }
+    error = ps_mask_set_bit( counter, hint2, memory );
+    if ( error )
+      goto Exit;
 
-    if ( hint3 >= 0 )
-    {
-      error = ps_mask_set_bit( counter, (FT_UInt)hint3, memory );
-      if ( error )
-        goto Exit;
-    }
+    error = ps_mask_set_bit( counter, hint3, memory );
+    if ( error )
+      goto Exit;
 
   Exit:
     return error;
@@ -897,7 +863,7 @@
       PS_Dimension  dim;
       FT_Memory     memory = hints->memory;
       FT_Int        count;
-      FT_Int        idx[3];
+      FT_UInt       idx[3];
 
 
       /* limit "dimension" to 0..1 */
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.h b/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.h
index b13c7be13c..a0d37979cc 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.h
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/pshrec.h
@@ -4,7 +4,7 @@
  *
  *   Postscript (Type1/Type2) hints recorder (specification).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/pshinter/rules.mk b/qtbase/src/3rdparty/freetype/src/pshinter/rules.mk
index c845c255cd..ee5968048b 100644
--- a/qtbase/src/3rdparty/freetype/src/pshinter/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2001-2020 by
+# Copyright (C) 2001-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/module.mk b/qtbase/src/3rdparty/freetype/src/psnames/module.mk
index 675bb37131..4bd2ee6248 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/psnames/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/psmodule.c b/qtbase/src/3rdparty/freetype/src/psnames/psmodule.c
index b38f9d3b1c..e7d51e950e 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/psmodule.c
+++ b/qtbase/src/3rdparty/freetype/src/psnames/psmodule.c
@@ -4,7 +4,7 @@
  *
  *   psnames module implementation (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -155,31 +155,30 @@
     /* Look for a non-initial dot in the glyph name in order to */
     /* find variants like `A.swash', `e.final', etc.            */
     {
-      const char*  p   = glyph_name;
-      const char*  dot = NULL;
+      FT_UInt32    value = 0;
+      const char*  p     = glyph_name;
+
 
+      for ( ; *p && *p != '.'; p++ )
+        ;
 
-      for ( ; *p; p++ )
+      /* now look up the glyph in the Adobe Glyph List;      */
+      /* `.notdef', `.null' and the empty name are short cut */
+      if ( p > glyph_name )
       {
-        if ( *p == '.' && p > glyph_name )
-        {
-          dot = p;
-          break;
-        }
+        value = (FT_UInt32)ft_get_adobe_glyph_index( glyph_name, p );
+
+        if ( *p == '.' )
+          value |= (FT_UInt32)VARIANT_BIT;
       }
 
-      /* now look up the glyph in the Adobe Glyph List */
-      if ( !dot )
-        return (FT_UInt32)ft_get_adobe_glyph_index( glyph_name, p );
-      else
-        return (FT_UInt32)( ft_get_adobe_glyph_index( glyph_name, dot ) |
-                            VARIANT_BIT );
+      return value;
     }
   }
 
 
   /* ft_qsort callback to sort the unicode map */
-  FT_CALLBACK_DEF( int )
+  FT_COMPARE_DEF( int )
   compare_uni_maps( const void*  a,
                     const void*  b )
   {
@@ -326,9 +325,8 @@
 
     /* we first allocate the table */
     table->num_maps = 0;
-    table->maps     = NULL;
 
-    if ( !FT_NEW_ARRAY( table->maps, num_glyphs + EXTRA_GLYPH_LIST_SIZE ) )
+    if ( !FT_QNEW_ARRAY( table->maps, num_glyphs + EXTRA_GLYPH_LIST_SIZE ) )
     {
       FT_UInt     n;
       FT_UInt     count;
@@ -343,7 +341,7 @@
         const char*  gname = get_glyph_name( glyph_data, n );
 
 
-        if ( gname )
+        if ( gname && *gname )
         {
           ps_check_extra_glyph_name( gname, n,
                                      extra_glyphs, extra_glyph_list_states );
@@ -391,9 +389,9 @@
         /* Reallocate if the number of used entries is much smaller. */
         if ( count < num_glyphs / 2 )
         {
-          (void)FT_RENEW_ARRAY( table->maps,
-                                num_glyphs + EXTRA_GLYPH_LIST_SIZE,
-                                count );
+          FT_MEM_QRENEW_ARRAY( table->maps,
+                               num_glyphs + EXTRA_GLYPH_LIST_SIZE,
+                               count );
           error = FT_Err_Ok;
         }
 
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/psmodule.h b/qtbase/src/3rdparty/freetype/src/psnames/psmodule.h
index c85a9ecad7..ff3eda564c 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/psmodule.h
+++ b/qtbase/src/3rdparty/freetype/src/psnames/psmodule.h
@@ -4,7 +4,7 @@
  *
  *   High-level psnames module interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/psnamerr.h b/qtbase/src/3rdparty/freetype/src/psnames/psnamerr.h
index 154c701d04..ae56620275 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/psnamerr.h
+++ b/qtbase/src/3rdparty/freetype/src/psnames/psnamerr.h
@@ -4,7 +4,7 @@
  *
  *   PS names module error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/psnames.c b/qtbase/src/3rdparty/freetype/src/psnames/psnames.c
index cff36851ba..c844a317fd 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/psnames.c
+++ b/qtbase/src/3rdparty/freetype/src/psnames/psnames.c
@@ -4,7 +4,7 @@
  *
  *   FreeType psnames module component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/pstables.h b/qtbase/src/3rdparty/freetype/src/psnames/pstables.h
index c215f16ffc..d28d580b9c 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/pstables.h
+++ b/qtbase/src/3rdparty/freetype/src/psnames/pstables.h
@@ -4,7 +4,7 @@
  *
  *   PostScript glyph names.
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/psnames/rules.mk b/qtbase/src/3rdparty/freetype/src/psnames/rules.mk
index 14cdda3ad1..3768e2f1d8 100644
--- a/qtbase/src/3rdparty/freetype/src/psnames/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/psnames/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/raster/ftmisc.h b/qtbase/src/3rdparty/freetype/src/raster/ftmisc.h
index 6efe4a9a5a..75fb5f8437 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/ftmisc.h
+++ b/qtbase/src/3rdparty/freetype/src/raster/ftmisc.h
@@ -5,7 +5,7 @@
  *   Miscellaneous macros for stand-alone rasterizer (specification
  *   only).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
@@ -47,11 +47,8 @@
   typedef signed long    FT_F26Dot6;
   typedef int            FT_Error;
 
-#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
-          ( ( (FT_ULong)_x1 << 24 ) |     \
-            ( (FT_ULong)_x2 << 16 ) |     \
-            ( (FT_ULong)_x3 <<  8 ) |     \
-              (FT_ULong)_x4         )
+
+#define FT_STATIC_BYTE_CAST( type, var )  (type)(FT_Byte)(var)
 
 
   /* from include/freetype/ftsystem.h */
diff --git a/qtbase/src/3rdparty/freetype/src/raster/ftraster.c b/qtbase/src/3rdparty/freetype/src/raster/ftraster.c
index 9f0a7976fa..68b0e1fdd9 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/ftraster.c
+++ b/qtbase/src/3rdparty/freetype/src/raster/ftraster.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -149,9 +149,6 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  /* define DEBUG_RASTER if you want to compile a debugging version */
-/* #define DEBUG_RASTER */
-
 
   /*************************************************************************/
   /*************************************************************************/
@@ -200,12 +197,13 @@
 #define FT_THROW( e )  FT_ERR_CAT( Raster_Err_, e )
 #endif
 
-#define Raster_Err_None          0
-#define Raster_Err_Not_Ini      -1
-#define Raster_Err_Overflow     -2
-#define Raster_Err_Neg_Height   -3
-#define Raster_Err_Invalid      -4
-#define Raster_Err_Unsupported  -5
+#define Raster_Err_Ok                       0
+#define Raster_Err_Invalid_Outline         -1
+#define Raster_Err_Cannot_Render_Glyph     -2
+#define Raster_Err_Invalid_Argument        -3
+#define Raster_Err_Raster_Overflow         -4
+#define Raster_Err_Raster_Uninitialized    -5
+#define Raster_Err_Raster_Negative_Height  -6
 
 #define ft_memset  memset
 
@@ -230,13 +228,6 @@
 
 #include "rasterrs.h"
 
-#define Raster_Err_None         FT_Err_Ok
-#define Raster_Err_Not_Ini      Raster_Err_Raster_Uninitialized
-#define Raster_Err_Overflow     Raster_Err_Raster_Overflow
-#define Raster_Err_Neg_Height   Raster_Err_Raster_Negative_Height
-#define Raster_Err_Invalid      Raster_Err_Invalid_Outline
-#define Raster_Err_Unsupported  Raster_Err_Cannot_Render_Glyph
-
 
 #endif /* !STANDALONE_ */
 
@@ -375,16 +366,6 @@
   typedef PProfile*  PProfileList;
 
 
-  /* Simple record used to implement a stack of bands, required */
-  /* by the sub-banding mechanism                               */
-  typedef struct  black_TBand_
-  {
-    Short  y_min;   /* band's minimum */
-    Short  y_max;   /* band's maximum */
-
-  } black_TBand;
-
-
 #define AlignProfileSize \
   ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( Long ) )
 
@@ -426,8 +407,8 @@
 
   /* prototypes used for sweep function dispatch */
   typedef void
-  Function_Sweep_Init( RAS_ARGS Short*  min,
-                                Short*  max );
+  Function_Sweep_Init( RAS_ARGS Short  min,
+                                Short  max );
 
   typedef void
   Function_Sweep_Span( RAS_ARGS Short       y,
@@ -492,10 +473,11 @@
 
     Int         numTurns;           /* number of Y-turns in outline        */
 
-    TPoint*     arc;                /* current Bezier arc pointer          */
+    Byte        dropOutControl;     /* current drop_out control method     */
 
     UShort      bWidth;             /* target bitmap width                 */
     PByte       bOrigin;            /* target bitmap bottom-left origin    */
+    PByte       bLine;              /* target bitmap current line          */
 
     Long        lastX, lastY;
     Long        minY, maxY;
@@ -517,9 +499,6 @@
     FT_Bitmap   target;             /* description of target bit/pixmap    */
     FT_Outline  outline;
 
-    Long        traceOfs;           /* current offset in target bitmap     */
-    Short       traceIncr;          /* sweep's increment in target bitmap  */
-
     /* dispatch variables */
 
     Function_Sweep_Init*  Proc_Sweep_Init;
@@ -527,18 +506,6 @@
     Function_Sweep_Span*  Proc_Sweep_Drop;
     Function_Sweep_Step*  Proc_Sweep_Step;
 
-    Byte        dropOutControl;     /* current drop_out control method     */
-
-    Bool        second_pass;        /* indicates whether a horizontal pass */
-                                    /* should be performed to control      */
-                                    /* drop-out accurately when calling    */
-                                    /* Render_Glyph.                       */
-
-    TPoint      arcs[3 * MaxBezier + 1]; /* The Bezier stack               */
-
-    black_TBand  band_stack[16];    /* band stack used for sub-banding     */
-    Int          band_top;          /* band stack top                      */
-
   };
 
 
@@ -660,7 +627,7 @@
 
     if ( ras.top >= ras.maxBuff )
     {
-      ras.error = FT_THROW( Overflow );
+      ras.error = FT_THROW( Raster_Overflow );
       return FAILURE;
     }
 
@@ -689,7 +656,7 @@
 
     default:
       FT_ERROR(( "New_Profile: invalid profile direction\n" ));
-      ras.error = FT_THROW( Invalid );
+      ras.error = FT_THROW( Invalid_Outline );
       return FAILURE;
     }
 
@@ -731,7 +698,7 @@
     if ( h < 0 )
     {
       FT_ERROR(( "End_Profile: negative height encountered\n" ));
-      ras.error = FT_THROW( Neg_Height );
+      ras.error = FT_THROW( Raster_Negative_Height );
       return FAILURE;
     }
 
@@ -767,7 +734,7 @@
     if ( ras.top >= ras.maxBuff )
     {
       FT_TRACE1(( "overflow in End_Profile\n" ));
-      ras.error = FT_THROW( Overflow );
+      ras.error = FT_THROW( Raster_Overflow );
       return FAILURE;
     }
 
@@ -822,7 +789,7 @@
       ras.maxBuff--;
       if ( ras.maxBuff <= ras.top )
       {
-        ras.error = FT_THROW( Overflow );
+        ras.error = FT_THROW( Raster_Overflow );
         return FAILURE;
       }
       ras.numTurns++;
@@ -1086,7 +1053,7 @@
     size = e2 - e1 + 1;
     if ( ras.top + size >= ras.maxBuff )
     {
-      ras.error = FT_THROW( Overflow );
+      ras.error = FT_THROW( Raster_Overflow );
       return FAILURE;
     }
 
@@ -1209,6 +1176,7 @@
    */
   static Bool
   Bezier_Up( RAS_ARGS Int        degree,
+                      TPoint*    arc,
                       TSplitter  splitter,
                       Long       miny,
                       Long       maxy )
@@ -1216,13 +1184,11 @@
     Long   y1, y2, e, e2, e0;
     Short  f1;
 
-    TPoint*  arc;
     TPoint*  start_arc;
 
     PLong top;
 
 
-    arc = ras.arc;
     y1  = arc[degree].y;
     y2  = arc[0].y;
     top = ras.top;
@@ -1271,7 +1237,7 @@
     if ( ( top + TRUNC( e2 - e ) + 1 ) >= ras.maxBuff )
     {
       ras.top   = top;
-      ras.error = FT_THROW( Overflow );
+      ras.error = FT_THROW( Raster_Overflow );
       return FAILURE;
     }
 
@@ -1314,7 +1280,6 @@
 
   Fin:
     ras.top  = top;
-    ras.arc -= degree;
     return SUCCESS;
   }
 
@@ -1346,11 +1311,11 @@
    */
   static Bool
   Bezier_Down( RAS_ARGS Int        degree,
+                        TPoint*    arc,
                         TSplitter  splitter,
                         Long       miny,
                         Long       maxy )
   {
-    TPoint*  arc = ras.arc;
     Bool     result, fresh;
 
 
@@ -1362,7 +1327,7 @@
 
     fresh = ras.fresh;
 
-    result = Bezier_Up( RAS_VARS degree, splitter, -maxy, -miny );
+    result = Bezier_Up( RAS_VARS degree, arc, splitter, -maxy, -miny );
 
     if ( fresh && !ras.fresh )
       ras.cProfile->start = -ras.cProfile->start;
@@ -1503,22 +1468,24 @@
   {
     Long     y1, y2, y3, x3, ymin, ymax;
     TStates  state_bez;
+    TPoint   arcs[2 * MaxBezier + 1]; /* The Bezier stack           */
+    TPoint*  arc;                     /* current Bezier arc pointer */
 
 
-    ras.arc      = ras.arcs;
-    ras.arc[2].x = ras.lastX;
-    ras.arc[2].y = ras.lastY;
-    ras.arc[1].x = cx;
-    ras.arc[1].y = cy;
-    ras.arc[0].x = x;
-    ras.arc[0].y = y;
+    arc      = arcs;
+    arc[2].x = ras.lastX;
+    arc[2].y = ras.lastY;
+    arc[1].x = cx;
+    arc[1].y = cy;
+    arc[0].x = x;
+    arc[0].y = y;
 
     do
     {
-      y1 = ras.arc[2].y;
-      y2 = ras.arc[1].y;
-      y3 = ras.arc[0].y;
-      x3 = ras.arc[0].x;
+      y1 = arc[2].y;
+      y2 = arc[1].y;
+      y3 = arc[0].y;
+      x3 = arc[0].x;
 
       /* first, categorize the Bezier arc */
 
@@ -1536,13 +1503,13 @@
       if ( y2 < ymin || y2 > ymax )
       {
         /* this arc has no given direction, split it! */
-        Split_Conic( ras.arc );
-        ras.arc += 2;
+        Split_Conic( arc );
+        arc += 2;
       }
       else if ( y1 == y3 )
       {
         /* this arc is flat, ignore it and pop it from the Bezier stack */
-        ras.arc -= 2;
+        arc -= 2;
       }
       else
       {
@@ -1569,15 +1536,18 @@
         /* now call the appropriate routine */
         if ( state_bez == Ascending_State )
         {
-          if ( Bezier_Up( RAS_VARS 2, Split_Conic, ras.minY, ras.maxY ) )
+          if ( Bezier_Up( RAS_VARS 2, arc, Split_Conic,
+                                   ras.minY, ras.maxY ) )
             goto Fail;
         }
         else
-          if ( Bezier_Down( RAS_VARS 2, Split_Conic, ras.minY, ras.maxY ) )
+          if ( Bezier_Down( RAS_VARS 2, arc, Split_Conic,
+                                     ras.minY, ras.maxY ) )
             goto Fail;
+        arc -= 2;
       }
 
-    } while ( ras.arc >= ras.arcs );
+    } while ( arc >= arcs );
 
     ras.lastX = x3;
     ras.lastY = y3;
@@ -1632,25 +1602,27 @@
   {
     Long     y1, y2, y3, y4, x4, ymin1, ymax1, ymin2, ymax2;
     TStates  state_bez;
+    TPoint   arcs[3 * MaxBezier + 1]; /* The Bezier stack           */
+    TPoint*  arc;                     /* current Bezier arc pointer */
 
 
-    ras.arc      = ras.arcs;
-    ras.arc[3].x = ras.lastX;
-    ras.arc[3].y = ras.lastY;
-    ras.arc[2].x = cx1;
-    ras.arc[2].y = cy1;
-    ras.arc[1].x = cx2;
-    ras.arc[1].y = cy2;
-    ras.arc[0].x = x;
-    ras.arc[0].y = y;
+    arc      = arcs;
+    arc[3].x = ras.lastX;
+    arc[3].y = ras.lastY;
+    arc[2].x = cx1;
+    arc[2].y = cy1;
+    arc[1].x = cx2;
+    arc[1].y = cy2;
+    arc[0].x = x;
+    arc[0].y = y;
 
     do
     {
-      y1 = ras.arc[3].y;
-      y2 = ras.arc[2].y;
-      y3 = ras.arc[1].y;
-      y4 = ras.arc[0].y;
-      x4 = ras.arc[0].x;
+      y1 = arc[3].y;
+      y2 = arc[2].y;
+      y3 = arc[1].y;
+      y4 = arc[0].y;
+      x4 = arc[0].x;
 
       /* first, categorize the Bezier arc */
 
@@ -1679,13 +1651,13 @@
       if ( ymin2 < ymin1 || ymax2 > ymax1 )
       {
         /* this arc has no given direction, split it! */
-        Split_Cubic( ras.arc );
-        ras.arc += 3;
+        Split_Cubic( arc );
+        arc += 3;
       }
       else if ( y1 == y4 )
       {
         /* this arc is flat, ignore it and pop it from the Bezier stack */
-        ras.arc -= 3;
+        arc -= 3;
       }
       else
       {
@@ -1711,15 +1683,18 @@
         /* compute intersections */
         if ( state_bez == Ascending_State )
         {
-          if ( Bezier_Up( RAS_VARS 3, Split_Cubic, ras.minY, ras.maxY ) )
+          if ( Bezier_Up( RAS_VARS 3, arc, Split_Cubic,
+                                   ras.minY, ras.maxY ) )
             goto Fail;
         }
         else
-          if ( Bezier_Down( RAS_VARS 3, Split_Cubic, ras.minY, ras.maxY ) )
+          if ( Bezier_Down( RAS_VARS 3, arc, Split_Cubic,
+                                     ras.minY, ras.maxY ) )
             goto Fail;
+        arc -= 3;
       }
 
-    } while ( ras.arc >= ras.arcs );
+    } while ( arc >= arcs );
 
     ras.lastX = x4;
     ras.lastY = y4;
@@ -1967,7 +1942,7 @@
     return SUCCESS;
 
   Invalid_Outline:
-    ras.error = FT_THROW( Invalid );
+    ras.error = FT_THROW( Invalid_Outline );
 
   Fail:
     return FAILURE;
@@ -2120,8 +2095,8 @@
    *   Removes an old profile from a linked list.
    */
   static void
-  DelOld( PProfileList  list,
-          PProfile      profile )
+  DelOld( PProfileList    list,
+          const PProfile  profile )
   {
     PProfile  *old, current;
 
@@ -2214,16 +2189,13 @@
    */
 
   static void
-  Vertical_Sweep_Init( RAS_ARGS Short*  min,
-                                Short*  max )
+  Vertical_Sweep_Init( RAS_ARGS Short  min,
+                                Short  max )
   {
-    Long  pitch = ras.target.pitch;
-
     FT_UNUSED( max );
 
 
-    ras.traceIncr = (Short)-pitch;
-    ras.traceOfs  = -*min * pitch;
+    ras.bLine = ras.bOrigin - min * ras.target.pitch;
   }
 
 
@@ -2234,8 +2206,7 @@
                                 PProfile    left,
                                 PProfile    right )
   {
-    Long   e1, e2;
-    Byte*  target;
+    Long  e1, e2;
 
     Int  dropOutControl = left->flags & 7;
 
@@ -2268,6 +2239,8 @@
 
     if ( e2 >= 0 && e1 < ras.bWidth )
     {
+      Byte*  target;
+
       Int   c1, c2;
       Byte  f1, f2;
 
@@ -2285,7 +2258,7 @@
       f1 = (Byte)  ( 0xFF >> ( e1 & 7 ) );
       f2 = (Byte) ~( 0x7F >> ( e2 & 7 ) );
 
-      target = ras.bOrigin + ras.traceOfs + c1;
+      target = ras.bLine + c1;
       c2 -= c1;
 
       if ( c2 > 0 )
@@ -2296,7 +2269,7 @@
         /* This is due to the fact that, in the vast majority of cases,  */
         /* the span length in bytes is relatively small.                 */
         while ( --c2 > 0 )
-          *(++target) = 0xFF;
+          *( ++target ) = 0xFF;
 
         target[1] |= f2;
       }
@@ -2437,8 +2410,8 @@
         c1 = (Short)( e1 >> 3 );
         f1 = (Short)( e1 &  7 );
 
-        if ( e1 >= 0 && e1 < ras.bWidth                      &&
-             ras.bOrigin[ras.traceOfs + c1] & ( 0x80 >> f1 ) )
+        if ( e1 >= 0 && e1 < ras.bWidth     &&
+             ras.bLine[c1] & ( 0x80 >> f1 ) )
           goto Exit;
       }
       else
@@ -2454,7 +2427,7 @@
       c1 = (Short)( e1 >> 3 );
       f1 = (Short)( e1 & 7 );
 
-      ras.bOrigin[ras.traceOfs + c1] |= (char)( 0x80 >> f1 );
+      ras.bLine[c1] |= (char)( 0x80 >> f1 );
     }
 
   Exit:
@@ -2465,7 +2438,7 @@
   static void
   Vertical_Sweep_Step( RAS_ARG )
   {
-    ras.traceOfs += ras.traceIncr;
+    ras.bLine -= ras.target.pitch;
   }
 
 
@@ -2479,8 +2452,8 @@
    */
 
   static void
-  Horizontal_Sweep_Init( RAS_ARGS Short*  min,
-                                  Short*  max )
+  Horizontal_Sweep_Init( RAS_ARGS Short  min,
+                                  Short  max )
   {
     /* nothing, really */
     FT_UNUSED_RASTER;
@@ -2744,13 +2717,13 @@
     /* check the Y-turns */
     if ( ras.numTurns == 0 )
     {
-      ras.error = FT_THROW( Invalid );
+      ras.error = FT_THROW( Invalid_Outline );
       return FAILURE;
     }
 
     /* now initialize the sweep */
 
-    ras.Proc_Sweep_Init( RAS_VARS &min_Y, &max_Y );
+    ras.Proc_Sweep_Init( RAS_VARS min_Y, max_Y );
 
     /* then compute the distance of each profile from min_Y */
 
@@ -2977,11 +2950,11 @@
   FT_Outline_Get_CBox( const FT_Outline*  outline,
                        FT_BBox           *acbox )
   {
-    Long  xMin, yMin, xMax, yMax;
-
-
     if ( outline && acbox )
     {
+      Long  xMin, yMin, xMax, yMax;
+
+
       if ( outline->n_points == 0 )
       {
         xMin = 0;
@@ -3039,63 +3012,54 @@
    *   Renderer error code.
    */
   static int
-  Render_Single_Pass( RAS_ARGS Bool  flipped )
+  Render_Single_Pass( RAS_ARGS Bool  flipped,
+                               Int   y_min,
+                               Int   y_max )
   {
-    Short  i, j, k;
+    Int  y_mid;
+    Int  band_top = 0;
+    Int  band_stack[32];  /* enough to bisect 32-bit int bands */
 
 
-    while ( ras.band_top >= 0 )
+    while ( 1 )
     {
-      ras.maxY = (Long)ras.band_stack[ras.band_top].y_max * ras.precision;
-      ras.minY = (Long)ras.band_stack[ras.band_top].y_min * ras.precision;
+      ras.minY = (Long)y_min * ras.precision;
+      ras.maxY = (Long)y_max * ras.precision;
 
       ras.top = ras.buff;
 
-      ras.error = Raster_Err_None;
+      ras.error = Raster_Err_Ok;
 
       if ( Convert_Glyph( RAS_VARS flipped ) )
       {
-        if ( ras.error != Raster_Err_Overflow )
-          return FAILURE;
-
-        ras.error = Raster_Err_None;
+        if ( ras.error != Raster_Err_Raster_Overflow )
+          return ras.error;
 
         /* sub-banding */
 
-#ifdef DEBUG_RASTER
-        ClearBand( RAS_VARS TRUNC( ras.minY ), TRUNC( ras.maxY ) );
-#endif
+        if ( y_min == y_max )
+          return ras.error;  /* still Raster_Overflow */
 
-        i = ras.band_stack[ras.band_top].y_min;
-        j = ras.band_stack[ras.band_top].y_max;
+        y_mid = ( y_min + y_max ) >> 1;
 
-        k = (Short)( ( i + j ) / 2 );
-
-        if ( ras.band_top >= 7 || k < i )
-        {
-          ras.band_top = 0;
-          ras.error    = FT_THROW( Invalid );
-
-          return ras.error;
-        }
-
-        ras.band_stack[ras.band_top + 1].y_min = k;
-        ras.band_stack[ras.band_top + 1].y_max = j;
-
-        ras.band_stack[ras.band_top].y_max = (Short)( k - 1 );
-
-        ras.band_top++;
+        band_stack[band_top++] = y_min;
+        y_min                  = y_mid + 1;
       }
       else
       {
         if ( ras.fProfile )
           if ( Draw_Sweep( RAS_VAR ) )
              return ras.error;
-        ras.band_top--;
+
+        if ( --band_top < 0 )
+          break;
+
+        y_max = y_min - 1;
+        y_min = band_stack[band_top];
       }
     }
 
-    return SUCCESS;
+    return Raster_Err_Ok;
   }
 
 
@@ -3132,9 +3096,6 @@
         ras.dropOutControl += 1;
     }
 
-    ras.second_pass = (Bool)( !( ras.outline.flags      &
-                                 FT_OUTLINE_SINGLE_PASS ) );
-
     /* Vertical Sweep */
     FT_TRACE7(( "Vertical pass (ftraster)\n" ));
 
@@ -3143,21 +3104,18 @@
     ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
     ras.Proc_Sweep_Step = Vertical_Sweep_Step;
 
-    ras.band_top            = 0;
-    ras.band_stack[0].y_min = 0;
-    ras.band_stack[0].y_max = (Short)( ras.target.rows - 1 );
-
     ras.bWidth  = (UShort)ras.target.width;
     ras.bOrigin = (Byte*)ras.target.buffer;
 
     if ( ras.target.pitch > 0 )
       ras.bOrigin += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
 
-    if ( ( error = Render_Single_Pass( RAS_VARS 0 ) ) != 0 )
+    error = Render_Single_Pass( RAS_VARS 0, 0, (Int)ras.target.rows - 1 );
+    if ( error )
       return error;
 
     /* Horizontal Sweep */
-    if ( ras.second_pass && ras.dropOutControl != 2 )
+    if ( !( ras.outline.flags & FT_OUTLINE_SINGLE_PASS ) )
     {
       FT_TRACE7(( "Horizontal pass (ftraster)\n" ));
 
@@ -3166,22 +3124,12 @@
       ras.Proc_Sweep_Drop = Horizontal_Sweep_Drop;
       ras.Proc_Sweep_Step = Horizontal_Sweep_Step;
 
-      ras.band_top            = 0;
-      ras.band_stack[0].y_min = 0;
-      ras.band_stack[0].y_max = (Short)( ras.target.width - 1 );
-
-      if ( ( error = Render_Single_Pass( RAS_VARS 1 ) ) != 0 )
+      error = Render_Single_Pass( RAS_VARS 1, 0, (Int)ras.target.width - 1 );
+      if ( error )
         return error;
     }
 
-    return Raster_Err_None;
-  }
-
-
-  static void
-  ft_black_init( black_PRaster  raster )
-  {
-    FT_UNUSED( raster );
+    return Raster_Err_Ok;
   }
 
 
@@ -3202,7 +3150,6 @@
 
      *araster = (FT_Raster)&the_raster;
      FT_ZERO( &the_raster );
-     ft_black_init( &the_raster );
 
      return 0;
   }
@@ -3227,14 +3174,10 @@
     black_PRaster  raster = NULL;
 
 
-    *araster = 0;
     if ( !FT_NEW( raster ) )
-    {
       raster->memory = memory;
-      ft_black_init( raster );
 
-      *araster = raster;
-    }
+    *araster = raster;
 
     return error;
   }
@@ -3292,38 +3235,36 @@
 
 
     if ( !raster )
-      return FT_THROW( Not_Ini );
+      return FT_THROW( Raster_Uninitialized );
 
     if ( !outline )
-      return FT_THROW( Invalid );
+      return FT_THROW( Invalid_Outline );
 
     /* return immediately if the outline is empty */
     if ( outline->n_points == 0 || outline->n_contours <= 0 )
-      return Raster_Err_None;
+      return Raster_Err_Ok;
 
     if ( !outline->contours || !outline->points )
-      return FT_THROW( Invalid );
+      return FT_THROW( Invalid_Outline );
 
     if ( outline->n_points !=
            outline->contours[outline->n_contours - 1] + 1 )
-      return FT_THROW( Invalid );
+      return FT_THROW( Invalid_Outline );
 
     /* this version of the raster does not support direct rendering, sorry */
-    if ( params->flags & FT_RASTER_FLAG_DIRECT )
-      return FT_THROW( Unsupported );
-
-    if ( params->flags & FT_RASTER_FLAG_AA )
-      return FT_THROW( Unsupported );
+    if ( params->flags & FT_RASTER_FLAG_DIRECT ||
+         params->flags & FT_RASTER_FLAG_AA     )
+      return FT_THROW( Cannot_Render_Glyph );
 
     if ( !target_map )
-      return FT_THROW( Invalid );
+      return FT_THROW( Invalid_Argument );
 
     /* nothing to do */
     if ( !target_map->width || !target_map->rows )
-      return Raster_Err_None;
+      return Raster_Err_Ok;
 
     if ( !target_map->buffer )
-      return FT_THROW( Invalid );
+      return FT_THROW( Invalid_Argument );
 
     ras.outline = *outline;
     ras.target  = *target_map;
diff --git a/qtbase/src/3rdparty/freetype/src/raster/ftraster.h b/qtbase/src/3rdparty/freetype/src/raster/ftraster.h
index 1b2ee3c016..e9ece8cf0b 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/ftraster.h
+++ b/qtbase/src/3rdparty/freetype/src/raster/ftraster.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
diff --git a/qtbase/src/3rdparty/freetype/src/raster/ftrend1.c b/qtbase/src/3rdparty/freetype/src/raster/ftrend1.c
index 57fed9bc14..f319f03d9c 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/ftrend1.c
+++ b/qtbase/src/3rdparty/freetype/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer interface (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/raster/ftrend1.h b/qtbase/src/3rdparty/freetype/src/raster/ftrend1.h
index 3f6be53675..14ec336b11 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/ftrend1.h
+++ b/qtbase/src/3rdparty/freetype/src/raster/ftrend1.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/raster/module.mk b/qtbase/src/3rdparty/freetype/src/raster/module.mk
index 3600732b16..b56a4902ba 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/raster/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/raster/raster.c b/qtbase/src/3rdparty/freetype/src/raster/raster.c
index cd37943bf6..324cc5661c 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/raster.c
+++ b/qtbase/src/3rdparty/freetype/src/raster/raster.c
@@ -4,7 +4,7 @@
  *
  *   FreeType monochrome rasterer module component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/raster/rasterrs.h b/qtbase/src/3rdparty/freetype/src/raster/rasterrs.h
index a29651a6c5..8b1ebf07a3 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/rasterrs.h
+++ b/qtbase/src/3rdparty/freetype/src/raster/rasterrs.h
@@ -4,7 +4,7 @@
  *
  *   monochrome renderer error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/raster/rules.mk b/qtbase/src/3rdparty/freetype/src/raster/rules.mk
index 3e949d7741..0cf3b4bff5 100644
--- a/qtbase/src/3rdparty/freetype/src/raster/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/raster/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftbsdf.c b/qtbase/src/3rdparty/freetype/src/sdf/ftbsdf.c
new file mode 100644
index 0000000000..1328ac4988
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftbsdf.c
@@ -0,0 +1,1347 @@
+/****************************************************************************
+ *
+ * ftbsdf.c
+ *
+ *   Signed Distance Field support for bitmap fonts (body only).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftmemory.h>
+#include <freetype/fttrigon.h>
+
+#include "ftsdf.h"
+#include "ftsdferrs.h"
+#include "ftsdfcommon.h"
+
+
+  /**************************************************************************
+   *
+   * A brief technical overview of how the BSDF rasterizer works
+   * -----------------------------------------------------------
+   *
+   * [Notes]:
+   *   * SDF stands for Signed Distance Field everywhere.
+   *
+   *   * BSDF stands for Bitmap to Signed Distance Field rasterizer.
+   *
+   *   * This renderer converts rasterized bitmaps to SDF.  There is another
+   *     renderer called 'sdf', which generates SDF directly from outlines;
+   *     see file `ftsdf.c` for more.
+   *
+   *   * The idea of generating SDF from bitmaps is taken from two research
+   *     papers, where one is dependent on the other:
+   *
+   *     - Per-Erik Danielsson: Euclidean Distance Mapping
+   *       http://webstaff.itn.liu.se/~stegu/JFA/Danielsson.pdf
+   *
+   *       From this paper we use the eight-point sequential Euclidean
+   *       distance mapping (8SED).  This is the heart of the process used
+   *       in this rasterizer.
+   *
+   *     - Stefan Gustavson, Robin Strand: Anti-aliased Euclidean distance transform.
+   *       http://weber.itn.liu.se/~stegu/aadist/edtaa_preprint.pdf
+   *
+   *       The original 8SED algorithm discards the pixels' alpha values,
+   *       which can contain information about the actual outline of the
+   *       glyph.  This paper takes advantage of those alpha values and
+   *       approximates outline pretty accurately.
+   *
+   *   * This rasterizer also works for monochrome bitmaps.  However, the
+   *     result is not as accurate since we don't have any way to
+   *     approximate outlines from binary bitmaps.
+   *
+   * ========================================================================
+   *
+   * Generating SDF from bitmap is done in several steps.
+   *
+   * (1) The only information we have is the bitmap itself.  It can
+   *     be monochrome or anti-aliased.  If it is anti-aliased, pixel values
+   *     are nothing but coverage values.  These coverage values can be used
+   *     to extract information about the outline of the image.  For
+   *     example, if the pixel's alpha value is 0.5, then we can safely
+   *     assume that the outline passes through the center of the pixel.
+   *
+   * (2) Find edge pixels in the bitmap (see `bsdf_is_edge` for more).  For
+   *     all edge pixels we use the Anti-aliased Euclidean distance
+   *     transform algorithm and compute approximate edge distances (see
+   *     `compute_edge_distance` and/or the second paper for more).
+   *
+   * (3) Now that we have computed approximate distances for edge pixels we
+   *     use the 8SED algorithm to basically sweep the entire bitmap and
+   *     compute distances for the rest of the pixels.  (Since the algorithm
+   *     is pretty convoluted it is only explained briefly in a comment to
+   *     function `edt8`.  To see the actual algorithm refer to the first
+   *     paper.)
+   *
+   * (4) Finally, compute the sign for each pixel.  This is done in function
+   *     `finalize_sdf`.  The basic idea is that if a pixel's original
+   *     alpha/coverage value is greater than 0.5 then it is 'inside' (and
+   *     'outside' otherwise).
+   *
+   * Pseudo Code:
+   *
+   * ```
+   * b  = source bitmap;
+   * t  = target bitmap;
+   * dm = list of distances; // dimension equal to b
+   *
+   * foreach grid_point (x, y) in b:
+   * {
+   *   if (is_edge(x, y)):
+   *     dm = approximate_edge_distance(b, x, y);
+   *
+   *   // do the 8SED on the distances
+   *   edt8(dm);
+   *
+   *   // determine the signs
+   *   determine_signs(dm):
+   *
+   *   // copy SDF data to the target bitmap
+   *   copy(dm to t);
+   * }
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  bsdf
+
+
+  /**************************************************************************
+   *
+   * useful macros
+   *
+   */
+
+#define ONE  65536 /* 1 in 16.16 */
+
+
+  /**************************************************************************
+   *
+   * structs
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   BSDF_TRaster
+   *
+   * @Description:
+   *   This struct is used in place of @FT_Raster and is stored within the
+   *   internal FreeType renderer struct.  While rasterizing this is passed
+   *   to the @FT_Raster_RenderFunc function, which then can be used however
+   *   we want.
+   *
+   * @Fields:
+   *   memory ::
+   *     Used internally to allocate intermediate memory while raterizing.
+   *
+   */
+  typedef struct  BSDF_TRaster_
+  {
+    FT_Memory  memory;
+
+  } BSDF_TRaster, *BSDF_PRaster;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   ED
+   *
+   * @Description:
+   *   Euclidean distance.  It gets used for Euclidean distance transforms;
+   *   it can also be interpreted as an edge distance.
+   *
+   * @Fields:
+   *   dist ::
+   *     Vector length of the `prox` parameter.  Can be squared or absolute
+   *     depending on the `USE_SQUARED_DISTANCES` macro defined in file
+   *     `ftsdfcommon.h`.
+   *
+   *   prox ::
+   *     Vector to the nearest edge.  Can also be interpreted as shortest
+   *     distance of a point.
+   *
+   *   alpha ::
+   *     Alpha value of the original bitmap from which we generate SDF.
+   *     Needed for computing the gradient and determining the proper sign
+   *     of a pixel.
+   *
+   */
+  typedef struct  ED_
+  {
+    FT_16D16      dist;
+    FT_16D16_Vec  prox;
+    FT_Byte       alpha;
+
+  } ED;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   BSDF_Worker
+   *
+   * @Description:
+   *   A convenience struct that is passed to functions while generating
+   *   SDF; most of those functions require the same parameters.
+   *
+   * @Fields:
+   *   distance_map ::
+   *     A one-dimensional array that gets interpreted as two-dimensional
+   *     one.  It contains the Euclidean distances of all points of the
+   *     bitmap.
+   *
+   *   width ::
+   *     Width of the above `distance_map`.
+   *
+   *   rows ::
+   *     Number of rows in the above `distance_map`.
+   *
+   *   params ::
+   *     Internal parameters and properties required by the rasterizer.  See
+   *     file `ftsdf.h` for more.
+   *
+   */
+  typedef struct  BSDF_Worker_
+  {
+    ED*  distance_map;
+
+    FT_Int  width;
+    FT_Int  rows;
+
+    SDF_Raster_Params  params;
+
+  } BSDF_Worker;
+
+
+  /**************************************************************************
+   *
+   * initializer
+   *
+   */
+
+  static const ED  zero_ed = { 0, { 0, 0 }, 0 };
+
+
+  /**************************************************************************
+   *
+   * rasterizer functions
+   *
+   */
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   bsdf_is_edge
+   *
+   * @Description:
+   *   Check whether a pixel is an edge pixel, i.e., whether it is
+   *   surrounded by a completely black pixel (zero alpha), and the current
+   *   pixel is not a completely black pixel.
+   *
+   * @Input:
+   *   dm ::
+   *     Array of distances.  The parameter must point to the current
+   *     pixel, i.e., the pixel that is to be checked for being an edge.
+   *
+   *   x ::
+   *     The x position of the current pixel.
+   *
+   *   y ::
+   *     The y position of the current pixel.
+   *
+   *   w ::
+   *     Width of the bitmap.
+   *
+   *   r ::
+   *     Number of rows in the bitmap.
+   *
+   * @Return:
+   *   1~if the current pixel is an edge pixel, 0~otherwise.
+   *
+   */
+
+#ifdef CHECK_NEIGHBOR
+#undef CHECK_NEIGHBOR
+#endif
+
+#define CHECK_NEIGHBOR( x_offset, y_offset )              \
+          do                                              \
+          {                                               \
+            if ( x + x_offset >= 0 && x + x_offset < w && \
+                 y + y_offset >= 0 && y + y_offset < r )  \
+            {                                             \
+              num_neighbors++;                            \
+                                                          \
+              to_check = dm + y_offset * w + x_offset;    \
+              if ( to_check->alpha == 0 )                 \
+              {                                           \
+                is_edge = 1;                              \
+                goto Done;                                \
+              }                                           \
+            }                                             \
+          } while ( 0 )
+
+  static FT_Bool
+  bsdf_is_edge( ED*     dm,   /* distance map              */
+                FT_Int  x,    /* x index of point to check */
+                FT_Int  y,    /* y index of point to check */
+                FT_Int  w,    /* width                     */
+                FT_Int  r )   /* rows                      */
+  {
+    FT_Bool  is_edge       = 0;
+    ED*      to_check      = NULL;
+    FT_Int   num_neighbors = 0;
+
+
+    if ( dm->alpha == 0 )
+      goto Done;
+
+    if ( dm->alpha > 0 && dm->alpha < 255 )
+    {
+      is_edge = 1;
+      goto Done;
+    }
+
+    /* up */
+    CHECK_NEIGHBOR(  0, -1 );
+
+    /* down */
+    CHECK_NEIGHBOR(  0,  1 );
+
+    /* left */
+    CHECK_NEIGHBOR( -1,  0 );
+
+    /* right */
+    CHECK_NEIGHBOR(  1,  0 );
+
+    /* up left */
+    CHECK_NEIGHBOR( -1, -1 );
+
+    /* up right */
+    CHECK_NEIGHBOR(  1, -1 );
+
+    /* down left */
+    CHECK_NEIGHBOR( -1,  1 );
+
+    /* down right */
+    CHECK_NEIGHBOR(  1,  1 );
+
+    if ( num_neighbors != 8 )
+      is_edge = 1;
+
+  Done:
+    return is_edge;
+  }
+
+#undef CHECK_NEIGHBOR
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   compute_edge_distance
+   *
+   * @Description:
+   *   Approximate the outline and compute the distance from `current`
+   *   to the approximated outline.
+   *
+   * @Input:
+   *   current ::
+   *     Array of Euclidean distances.  `current` must point to the position
+   *     for which the distance is to be caculated.  We treat this array as
+   *     a two-dimensional array mapped to a one-dimensional array.
+   *
+   *   x ::
+   *     The x coordinate of the `current` parameter in the array.
+   *
+   *   y ::
+   *     The y coordinate of the `current` parameter in the array.
+   *
+   *   w ::
+   *     The width of the distances array.
+   *
+   *   r ::
+   *     Number of rows in the distances array.
+   *
+   * @Return:
+   *   A vector pointing to the approximate edge distance.
+   *
+   * @Note:
+   *   This is a computationally expensive function.  Try to reduce the
+   *   number of calls to this function.  Moreover, this must only be used
+   *   for edge pixel positions.
+   *
+   */
+  static FT_16D16_Vec
+  compute_edge_distance( ED*     current,
+                         FT_Int  x,
+                         FT_Int  y,
+                         FT_Int  w,
+                         FT_Int  r )
+  {
+    /*
+     * This function, based on the paper presented by Stefan Gustavson and
+     * Robin Strand, gets used to approximate edge distances from
+     * anti-aliased bitmaps.
+     *
+     * The algorithm is as follows.
+     *
+     * (1) In anti-aliased images, the pixel's alpha value is the coverage
+     *     of the pixel by the outline.  For example, if the alpha value is
+     *     0.5f we can assume that the outline passes through the center of
+     *     the pixel.
+     *
+     * (2) For this reason we can use that alpha value to approximate the real
+     *     distance of the pixel to edge pretty accurately.  A simple
+     *     approximation is `(0.5f - alpha)`, assuming that the outline is
+     *     parallel to the x or y~axis.  However, in this algorithm we use a
+     *     different approximation which is quite accurate even for
+     *     non-axis-aligned edges.
+     *
+     * (3) The only remaining piece of information that we cannot
+     *     approximate directly from the alpha is the direction of the edge.
+     *     This is where we use Sobel's operator to compute the gradient of
+     *     the pixel.  The gradient give us a pretty good approximation of
+     *     the edge direction.  We use a 3x3 kernel filter to compute the
+     *     gradient.
+     *
+     * (4) After the above two steps we have both the direction and the
+     *     distance to the edge which is used to generate the Signed
+     *     Distance Field.
+     *
+     * References:
+     *
+     * - Anti-Aliased Euclidean Distance Transform:
+     *     http://weber.itn.liu.se/~stegu/aadist/edtaa_preprint.pdf
+     * - Sobel Operator:
+     *     https://en.wikipedia.org/wiki/Sobel_operator
+     */
+
+    FT_16D16_Vec  g = { 0, 0 };
+    FT_16D16      dist, current_alpha;
+    FT_16D16      a1, temp;
+    FT_16D16      gx, gy;
+    FT_16D16      alphas[9];
+
+
+    /* Since our spread cannot be 0, this condition */
+    /* can never be true.                           */
+    if ( x <= 0 || x >= w - 1 ||
+         y <= 0 || y >= r - 1 )
+      return g;
+
+    /* initialize the alphas */
+    alphas[0] = 256 * (FT_16D16)current[-w - 1].alpha;
+    alphas[1] = 256 * (FT_16D16)current[-w    ].alpha;
+    alphas[2] = 256 * (FT_16D16)current[-w + 1].alpha;
+    alphas[3] = 256 * (FT_16D16)current[    -1].alpha;
+    alphas[4] = 256 * (FT_16D16)current[     0].alpha;
+    alphas[5] = 256 * (FT_16D16)current[     1].alpha;
+    alphas[6] = 256 * (FT_16D16)current[ w - 1].alpha;
+    alphas[7] = 256 * (FT_16D16)current[ w    ].alpha;
+    alphas[8] = 256 * (FT_16D16)current[ w + 1].alpha;
+
+    current_alpha = alphas[4];
+
+    /* Compute the gradient using the Sobel operator. */
+    /* In this case we use the following 3x3 filters: */
+    /*                                                */
+    /* For x: |   -1     0   -1    |                  */
+    /*        | -root(2) 0 root(2) |                  */
+    /*        |    -1    0    1    |                  */
+    /*                                                */
+    /* For y: |   -1 -root(2) -1   |                  */
+    /*        |    0    0      0   |                  */
+    /*        |    1  root(2)  1   |                  */
+    /*                                                */
+    /* [Note]: 92681 is root(2) in 16.16 format.      */
+    g.x = -alphas[0] -
+           FT_MulFix( alphas[3], 92681 ) -
+           alphas[6] +
+           alphas[2] +
+           FT_MulFix( alphas[5], 92681 ) +
+           alphas[8];
+
+    g.y = -alphas[0] -
+           FT_MulFix( alphas[1], 92681 ) -
+           alphas[2] +
+           alphas[6] +
+           FT_MulFix( alphas[7], 92681 ) +
+           alphas[8];
+
+    FT_Vector_NormLen( &g );
+
+    /* The gradient gives us the direction of the    */
+    /* edge for the current pixel.  Once we have the */
+    /* approximate direction of the edge, we can     */
+    /* approximate the edge distance much better.    */
+
+    if ( g.x == 0 || g.y == 0 )
+      dist = ONE / 2 - alphas[4];
+    else
+    {
+      gx = g.x;
+      gy = g.y;
+
+      gx = FT_ABS( gx );
+      gy = FT_ABS( gy );
+
+      if ( gx < gy )
+      {
+        temp = gx;
+        gx   = gy;
+        gy   = temp;
+      }
+
+      a1 = FT_DivFix( gy, gx ) / 2;
+
+      if ( current_alpha < a1 )
+        dist = ( gx + gy ) / 2 -
+               square_root( 2 * FT_MulFix( gx,
+                                           FT_MulFix( gy,
+                                                      current_alpha ) ) );
+
+      else if ( current_alpha < ( ONE - a1 ) )
+        dist = FT_MulFix( ONE / 2 - current_alpha, gx );
+
+      else
+        dist = -( gx + gy ) / 2 +
+               square_root( 2 * FT_MulFix( gx,
+                                           FT_MulFix( gy,
+                                                      ONE - current_alpha ) ) );
+    }
+
+    g.x = FT_MulFix( g.x, dist );
+    g.y = FT_MulFix( g.y, dist );
+
+    return g;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   bsdf_approximate_edge
+   *
+   * @Description:
+   *   Loops over all the pixels and call `compute_edge_distance` only for
+   *   edge pixels.  This maked the process a lot faster since
+   *   `compute_edge_distance` uses functions such as `FT_Vector_NormLen',
+   *   which are quite slow.
+   *
+   * @InOut:
+   *   worker ::
+   *     Contains the distance map as well as all the relevant parameters
+   *     required by the function.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   * @Note:
+   *   The function directly manipulates `worker->distance_map`.
+   *
+   */
+  static FT_Error
+  bsdf_approximate_edge( BSDF_Worker*  worker )
+  {
+    FT_Error  error = FT_Err_Ok;
+    FT_Int    i, j;
+    FT_Int    index;
+    ED*       ed;
+
+
+    if ( !worker || !worker->distance_map )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    ed = worker->distance_map;
+
+    for ( j = 0; j < worker->rows; j++ )
+    {
+      for ( i = 0; i < worker->width; i++ )
+      {
+        index = j * worker->width + i;
+
+        if ( bsdf_is_edge( worker->distance_map + index,
+                           i, j,
+                           worker->width,
+                           worker->rows ) )
+        {
+          /* approximate the edge distance for edge pixels */
+          ed[index].prox = compute_edge_distance( ed + index,
+                                                  i, j,
+                                                  worker->width,
+                                                  worker->rows );
+          ed[index].dist = VECTOR_LENGTH_16D16( ed[index].prox );
+        }
+        else
+        {
+          /* for non-edge pixels assign far away distances */
+          ed[index].dist   = 400 * ONE;
+          ed[index].prox.x = 200 * ONE;
+          ed[index].prox.y = 200 * ONE;
+        }
+      }
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   bsdf_init_distance_map
+   *
+   * @Description:
+   *   Initialize the distance map according to the '8-point sequential
+   *   Euclidean distance mapping' (8SED) algorithm.  Basically it copies
+   *   the `source` bitmap alpha values to the `distance_map->alpha`
+   *   parameter of `worker`.
+   *
+   * @Input:
+   *   source ::
+   *     Source bitmap to copy the data from.
+   *
+   * @Output:
+   *   worker ::
+   *     Target distance map to copy the data to.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  bsdf_init_distance_map( const FT_Bitmap*  source,
+                          BSDF_Worker*      worker )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+    FT_Int    x_diff, y_diff;
+    FT_Int    t_i, t_j, s_i, s_j;
+    FT_Byte*  s;
+    ED*       t;
+
+
+    /* again check the parameters (probably unnecessary) */
+    if ( !source || !worker )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* Because of the way we convert a bitmap to SDF, */
+    /* i.e., aligning the source to the center of the */
+    /* target, the target's width and rows must be    */
+    /* checked before copying.                        */
+    if ( worker->width < (FT_Int)source->width ||
+         worker->rows  < (FT_Int)source->rows  )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* check pixel mode */
+    if ( source->pixel_mode == FT_PIXEL_MODE_NONE )
+    {
+      FT_ERROR(( "bsdf_copy_source_to_target:"
+                 " Invalid pixel mode of source bitmap" ));
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+    if ( source->pixel_mode == FT_PIXEL_MODE_MONO )
+    {
+      FT_TRACE0(( "bsdf_copy_source_to_target:"
+                  " The `bsdf' renderer can convert monochrome\n" ));
+      FT_TRACE0(( "                           "
+                  " bitmaps to SDF but the results are not perfect\n" ));
+      FT_TRACE0(( "                           "
+                  " because there is no way to approximate actual\n" ));
+      FT_TRACE0(( "                           "
+                  " outlines from monochrome bitmaps.  Consider\n" ));
+      FT_TRACE0(( "                           "
+                  " using an anti-aliased bitmap instead.\n" ));
+    }
+#endif
+
+    /* Calculate the width and row differences */
+    /* between target and source.              */
+    x_diff = worker->width - (int)source->width;
+    y_diff = worker->rows - (int)source->rows;
+
+    x_diff /= 2;
+    y_diff /= 2;
+
+    t = (ED*)worker->distance_map;
+    s = source->buffer;
+
+    /* For now we only support pixel mode `FT_PIXEL_MODE_MONO`  */
+    /* and `FT_PIXEL_MODE_GRAY`.  More will be added later.     */
+    /*                                                          */
+    /* [NOTE]: We can also use @FT_Bitmap_Convert to convert    */
+    /*         bitmap to 8bpp.  To avoid extra allocation and   */
+    /*         since the target bitmap can be 16bpp we manually */
+    /*         convert the source bitmap to the desired bpp.    */
+
+    switch ( source->pixel_mode )
+    {
+    case FT_PIXEL_MODE_MONO:
+      {
+        FT_Int  t_width = worker->width;
+        FT_Int  t_rows  = worker->rows;
+        FT_Int  s_width = (int)source->width;
+        FT_Int  s_rows  = (int)source->rows;
+
+
+        for ( t_j = 0; t_j < t_rows; t_j++ )
+        {
+          for ( t_i = 0; t_i < t_width; t_i++ )
+          {
+            FT_Int   t_index = t_j * t_width + t_i;
+            FT_Int   s_index;
+            FT_Int   div, mod;
+            FT_Byte  pixel, byte;
+
+
+            t[t_index] = zero_ed;
+
+            s_i = t_i - x_diff;
+            s_j = t_j - y_diff;
+
+            /* Assign 0 to padding similar to */
+            /* the source bitmap.             */
+            if ( s_i < 0 || s_i >= s_width ||
+                 s_j < 0 || s_j >= s_rows  )
+              continue;
+
+            if ( worker->params.flip_y )
+              s_index = ( s_rows - s_j - 1 ) * source->pitch;
+            else
+              s_index = s_j * source->pitch;
+
+            div = s_index + s_i / 8;
+            mod = 7 - s_i % 8;
+
+            pixel = s[div];
+            byte  = (FT_Byte)( 1 << mod );
+
+            t[t_index].alpha = pixel & byte ? 255 : 0;
+          }
+        }
+      }
+      break;
+
+    case FT_PIXEL_MODE_GRAY:
+      {
+        FT_Int  t_width = worker->width;
+        FT_Int  t_rows  = worker->rows;
+        FT_Int  s_width = (int)source->width;
+        FT_Int  s_rows  = (int)source->rows;
+
+
+        /* loop over all pixels and assign pixel values from source */
+        for ( t_j = 0; t_j < t_rows; t_j++ )
+        {
+          for ( t_i = 0; t_i < t_width; t_i++ )
+          {
+            FT_Int  t_index = t_j * t_width + t_i;
+            FT_Int  s_index;
+
+
+            t[t_index] = zero_ed;
+
+            s_i = t_i - x_diff;
+            s_j = t_j - y_diff;
+
+            /* Assign 0 to padding similar to */
+            /* the source bitmap.             */
+            if ( s_i < 0 || s_i >= s_width ||
+                 s_j < 0 || s_j >= s_rows  )
+              continue;
+
+            if ( worker->params.flip_y )
+              s_index = ( s_rows - s_j - 1 ) * s_width + s_i;
+            else
+              s_index = s_j * s_width + s_i;
+
+            /* simply copy the alpha values */
+            t[t_index].alpha = s[s_index];
+          }
+        }
+      }
+      break;
+
+    default:
+      FT_ERROR(( "bsdf_copy_source_to_target:"
+                 " unsopported pixel mode of source bitmap\n" ));
+
+      error = FT_THROW( Unimplemented_Feature );
+      break;
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   compare_neighbor
+   *
+   * @Description:
+   *   Compare neighbor pixel (which is defined by the offset) and update
+   *   `current` distance if the new distance is shorter than the original.
+   *
+   * @Input:
+   *   x_offset ::
+   *     X offset of the neighbor to be checked.  The offset is relative to
+   *     the `current`.
+   *
+   *   y_offset ::
+   *     Y offset of the neighbor to be checked.  The offset is relative to
+   *     the `current`.
+   *
+   *   width ::
+   *     Width of the `current` array.
+   *
+   * @InOut:
+   *   current ::
+   *     Pointer into array of distances.  This parameter must point to the
+   *     position whose neighbor is to be checked.  The array is treated as
+   *     a two-dimensional array.
+   *
+   */
+  static void
+  compare_neighbor( ED*     current,
+                    FT_Int  x_offset,
+                    FT_Int  y_offset,
+                    FT_Int  width )
+  {
+    ED*           to_check;
+    FT_16D16      dist;
+    FT_16D16_Vec  dist_vec;
+
+
+    to_check = current + ( y_offset * width ) + x_offset;
+
+    /*
+     * While checking for the nearest point we first approximate the
+     * distance of `current` by adding the deviation (which is sqrt(2) at
+     * most).  Only if the new value is less than the current value we
+     * calculate the actual distances using `FT_Vector_Length`.  This last
+     * step can be omitted by using squared distances.
+     */
+
+    /*
+     * Approximate the distance.  We subtract 1 to avoid precision errors,
+     * which could happen because the two directions can be opposite.
+     */
+    dist = to_check->dist - ONE;
+
+    if ( dist < current->dist )
+    {
+      dist_vec = to_check->prox;
+
+      dist_vec.x += x_offset * ONE;
+      dist_vec.y += y_offset * ONE;
+      dist = VECTOR_LENGTH_16D16( dist_vec );
+
+      if ( dist < current->dist )
+      {
+        current->dist = dist;
+        current->prox = dist_vec;
+      }
+    }
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   first_pass
+   *
+   * @Description:
+   *   First pass of the 8SED algorithm.  Loop over the bitmap from top to
+   *   bottom and scan each row left to right, updating the distances in
+   *   `worker->distance_map`.
+   *
+   * @InOut:
+   *   worker::
+   *     Contains all the relevant parameters.
+   *
+   */
+  static void
+  first_pass( BSDF_Worker*  worker )
+  {
+    FT_Int  i, j; /* iterators    */
+    FT_Int  w, r; /* width, rows  */
+    ED*     dm;   /* distance map */
+
+
+    dm = worker->distance_map;
+    w  = worker->width;
+    r  = worker->rows;
+
+    /* Start scanning from top to bottom and sweep each    */
+    /* row back and forth comparing the distances of the   */
+    /* neighborhood.  Leave the first row as it has no top */
+    /* neighbor; it will be covered in the second scan of  */
+    /* the image (from bottom to top).                     */
+    for ( j = 1; j < r; j++ )
+    {
+      FT_Int  index;
+      ED*     current;
+
+
+      /* Forward pass of rows (left -> right).  Leave the first  */
+      /* column, which gets covered in the backward pass.        */
+      for ( i = 1; i < w - 1; i++ )
+      {
+        index   = j * w + i;
+        current = dm + index;
+
+        /* left-up */
+        compare_neighbor( current, -1, -1, w );
+        /* up */
+        compare_neighbor( current,  0, -1, w );
+        /* up-right */
+        compare_neighbor( current,  1, -1, w );
+        /* left */
+        compare_neighbor( current, -1,  0, w );
+      }
+
+      /* Backward pass of rows (right -> left).  Leave the last */
+      /* column, which was already covered in the forward pass. */
+      for ( i = w - 2; i >= 0; i-- )
+      {
+        index   = j * w + i;
+        current = dm + index;
+
+        /* right */
+        compare_neighbor( current, 1, 0, w );
+      }
+    }
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   second_pass
+   *
+   * @Description:
+   *   Second pass of the 8SED algorithm.  Loop over the bitmap from bottom
+   *   to top and scan each row left to right, updating the distances in
+   *   `worker->distance_map`.
+   *
+   * @InOut:
+   *   worker::
+   *     Contains all the relevant parameters.
+   *
+   */
+  static void
+  second_pass( BSDF_Worker*  worker )
+  {
+    FT_Int  i, j; /* iterators    */
+    FT_Int  w, r; /* width, rows  */
+    ED*     dm;   /* distance map */
+
+
+    dm = worker->distance_map;
+    w  = worker->width;
+    r  = worker->rows;
+
+    /* Start scanning from bottom to top and sweep each    */
+    /* row back and forth comparing the distances of the   */
+    /* neighborhood.  Leave the last row as it has no down */
+    /* neighbor; it is already covered in the first scan   */
+    /* of the image (from top to bottom).                  */
+    for ( j = r - 2; j >= 0; j-- )
+    {
+      FT_Int  index;
+      ED*     current;
+
+
+      /* Forward pass of rows (left -> right).  Leave the first */
+      /* column, which gets covered in the backward pass.       */
+      for ( i = 1; i < w - 1; i++ )
+      {
+        index   = j * w + i;
+        current = dm + index;
+
+        /* left-up */
+        compare_neighbor( current, -1, 1, w );
+        /* up */
+        compare_neighbor( current,  0, 1, w );
+        /* up-right */
+        compare_neighbor( current,  1, 1, w );
+        /* left */
+        compare_neighbor( current, -1, 0, w );
+      }
+
+      /* Backward pass of rows (right -> left).  Leave the last */
+      /* column, which was already covered in the forward pass. */
+      for ( i = w - 2; i >= 0; i-- )
+      {
+        index   = j * w + i;
+        current = dm + index;
+
+        /* right */
+        compare_neighbor( current, 1, 0, w );
+      }
+    }
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   edt8
+   *
+   * @Description:
+   *   Compute the distance map of the a bitmap.  Execute both first and
+   *   second pass of the 8SED algorithm.
+   *
+   * @InOut:
+   *   worker::
+   *     Contains all the relevant parameters.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  edt8( BSDF_Worker*  worker )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+
+    if ( !worker || !worker->distance_map )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* first scan of the image */
+    first_pass( worker );
+
+    /* second scan of the image */
+    second_pass( worker );
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   finalize_sdf
+   *
+   * @Description:
+   *   Copy the SDF data from `worker->distance_map` to the `target` bitmap.
+   *   Also transform the data to output format, (which is 6.10 fixed-point
+   *   format at the moment).
+   *
+   * @Input:
+   *   worker ::
+   *     Contains source distance map and other SDF data.
+   *
+   * @Output:
+   *   target ::
+   *     Target bitmap to which the SDF data is copied to.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  finalize_sdf( BSDF_Worker*      worker,
+                const FT_Bitmap*  target )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+    FT_Int  w, r;
+    FT_Int  i, j;
+
+    FT_SDFFormat*  t_buffer;
+    FT_16D16       sp_sq, spread;
+
+
+    if ( !worker || !target )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    w        = (int)target->width;
+    r        = (int)target->rows;
+    t_buffer = (FT_SDFFormat*)target->buffer;
+
+    if ( w != worker->width ||
+         r != worker->rows  )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    spread = FT_INT_16D16( worker->params.spread );
+
+#if USE_SQUARED_DISTANCES
+    sp_sq = FT_INT_16D16( worker->params.spread *
+                          worker->params.spread );
+#else
+    sp_sq = FT_INT_16D16( worker->params.spread );
+#endif
+
+    for ( j = 0; j < r; j++ )
+    {
+      for ( i = 0; i < w; i++ )
+      {
+        FT_Int        index;
+        FT_16D16      dist;
+        FT_SDFFormat  final_dist;
+        FT_Char       sign;
+
+
+        index = j * w + i;
+        dist  = worker->distance_map[index].dist;
+
+        if ( dist < 0 || dist > sp_sq )
+          dist = sp_sq;
+
+#if USE_SQUARED_DISTANCES
+        dist = square_root( dist );
+#endif
+
+        /* We assume that if the pixel is inside a contour */
+        /* its coverage value must be > 127.               */
+        sign = worker->distance_map[index].alpha < 127 ? -1 : 1;
+
+        /* flip the sign according to the property */
+        if ( worker->params.flip_sign )
+          sign = -sign;
+
+        /* concatenate from 16.16 to appropriate format */
+        final_dist = map_fixed_to_sdf( dist * sign, spread );
+
+        t_buffer[index] = final_dist;
+      }
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * interface functions
+   *
+   */
+
+  /* called when adding a new module through @FT_Add_Module */
+  static FT_Error
+  bsdf_raster_new( FT_Memory      memory,
+                   BSDF_PRaster*  araster )
+  {
+    FT_Error      error;
+    BSDF_PRaster  raster = NULL;
+
+
+    if ( !FT_NEW( raster ) )
+      raster->memory = memory;
+
+    *araster = raster;
+
+    return error;
+  }
+
+
+  /* unused */
+  static void
+  bsdf_raster_reset( FT_Raster       raster,
+                     unsigned char*  pool_base,
+                     unsigned long   pool_size )
+  {
+    FT_UNUSED( raster );
+    FT_UNUSED( pool_base );
+    FT_UNUSED( pool_size );
+  }
+
+
+  /* unused */
+  static FT_Error
+  bsdf_raster_set_mode( FT_Raster      raster,
+                        unsigned long  mode,
+                        void*          args )
+  {
+    FT_UNUSED( raster );
+    FT_UNUSED( mode );
+    FT_UNUSED( args );
+
+    return FT_Err_Ok;
+  }
+
+
+  /* called while rendering through @FT_Render_Glyph */
+  static FT_Error
+  bsdf_raster_render( FT_Raster                raster,
+                      const FT_Raster_Params*  params )
+  {
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = NULL;
+
+    const FT_Bitmap*  source = NULL;
+    const FT_Bitmap*  target = NULL;
+
+    BSDF_TRaster*  bsdf_raster = (BSDF_TRaster*)raster;
+    BSDF_Worker    worker;
+
+    const SDF_Raster_Params*  sdf_params = (const SDF_Raster_Params*)params;
+
+
+    worker.distance_map = NULL;
+
+    /* check for valid parameters */
+    if ( !raster || !params )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* check whether the flag is set */
+    if ( sdf_params->root.flags != FT_RASTER_FLAG_SDF )
+    {
+      error = FT_THROW( Raster_Corrupted );
+      goto Exit;
+    }
+
+    source = (const FT_Bitmap*)sdf_params->root.source;
+    target = (const FT_Bitmap*)sdf_params->root.target;
+
+    /* check source and target bitmap */
+    if ( !source || !target )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    memory = bsdf_raster->memory;
+    if ( !memory )
+    {
+      FT_TRACE0(( "bsdf_raster_render: Raster not set up properly,\n" ));
+      FT_TRACE0(( "                    unable to find memory handle.\n" ));
+
+      error = FT_THROW( Invalid_Handle );
+      goto Exit;
+    }
+
+    /* check whether spread is set properly */
+    if ( sdf_params->spread > MAX_SPREAD ||
+         sdf_params->spread < MIN_SPREAD )
+    {
+      FT_TRACE0(( "bsdf_raster_render:"
+                  " The `spread' field of `SDF_Raster_Params'\n" ));
+      FT_TRACE0(( "                   "
+                  " is invalid; the value of this field must be\n" ));
+      FT_TRACE0(( "                   "
+                  " within [%d, %d].\n",
+                  MIN_SPREAD, MAX_SPREAD ));
+      FT_TRACE0(( "                   "
+                  " Also, you must pass `SDF_Raster_Params'\n" ));
+      FT_TRACE0(( "                   "
+                  " instead of the default `FT_Raster_Params'\n" ));
+      FT_TRACE0(( "                   "
+                  " while calling this function and set the fields\n" ));
+      FT_TRACE0(( "                   "
+                  " accordingly.\n" ));
+
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* set up the worker */
+
+    /* allocate the distance map */
+    if ( FT_QALLOC_MULT( worker.distance_map, target->rows,
+                         target->width * sizeof ( *worker.distance_map ) ) )
+      goto Exit;
+
+    worker.width  = (int)target->width;
+    worker.rows   = (int)target->rows;
+    worker.params = *sdf_params;
+
+    FT_CALL( bsdf_init_distance_map( source, &worker ) );
+    FT_CALL( bsdf_approximate_edge( &worker ) );
+    FT_CALL( edt8( &worker ) );
+    FT_CALL( finalize_sdf( &worker, target ) );
+
+    FT_TRACE0(( "bsdf_raster_render: Total memory used = %ld\n",
+                worker.width * worker.rows *
+                  (long)sizeof ( *worker.distance_map ) ));
+
+  Exit:
+    if ( worker.distance_map )
+      FT_FREE( worker.distance_map );
+
+    return error;
+  }
+
+
+  /* called while deleting `FT_Library` only if the module is added */
+  static void
+  bsdf_raster_done( FT_Raster  raster )
+  {
+    FT_Memory  memory = (FT_Memory)((BSDF_TRaster*)raster)->memory;
+
+
+    FT_FREE( raster );
+  }
+
+
+  FT_DEFINE_RASTER_FUNCS(
+    ft_bitmap_sdf_raster,
+
+    FT_GLYPH_FORMAT_BITMAP,
+
+    (FT_Raster_New_Func)     bsdf_raster_new,       /* raster_new      */
+    (FT_Raster_Reset_Func)   bsdf_raster_reset,     /* raster_reset    */
+    (FT_Raster_Set_Mode_Func)bsdf_raster_set_mode,  /* raster_set_mode */
+    (FT_Raster_Render_Func)  bsdf_raster_render,    /* raster_render   */
+    (FT_Raster_Done_Func)    bsdf_raster_done       /* raster_done     */
+  )
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdf.c b/qtbase/src/3rdparty/freetype/src/sdf/ftsdf.c
new file mode 100644
index 0000000000..ffac8bf465
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdf.c
@@ -0,0 +1,3925 @@
+/****************************************************************************
+ *
+ * ftsdf.c
+ *
+ *   Signed Distance Field support for outline fonts (body).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/ftoutln.h>
+#include <freetype/fttrigon.h>
+#include <freetype/ftbitmap.h>
+#include "ftsdf.h"
+
+#include "ftsdferrs.h"
+
+
+  /**************************************************************************
+   *
+   * A brief technical overview of how the SDF rasterizer works
+   * ----------------------------------------------------------
+   *
+   * [Notes]:
+   *   * SDF stands for Signed Distance Field everywhere.
+   *
+   *   * This renderer generates SDF directly from outlines.  There is
+   *     another renderer called 'bsdf', which converts bitmaps to SDF; see
+   *     file `ftbsdf.c` for more.
+   *
+   *   * The basic idea of generating the SDF is taken from Viktor Chlumsky's
+   *     research paper.  The paper explains both single and multi-channel
+   *     SDF, however, this implementation only generates single-channel SDF.
+   *
+   *       Chlumsky, Viktor: Shape Decomposition for Multi-channel Distance
+   *       Fields.  Master's thesis.  Czech Technical University in Prague,
+   *       Faculty of InformationTechnology, 2015.
+   *
+   *     For more information: https://github.com/Chlumsky/msdfgen
+   *
+   * ========================================================================
+   *
+   * Generating SDF from outlines is pretty straightforward.
+   *
+   * (1) We have a set of contours that make the outline of a shape/glyph.
+   *     Each contour comprises of several edges, with three types of edges.
+   *
+   *     * line segments
+   *     * conic Bezier curves
+   *     * cubic Bezier curves
+   *
+   * (2) Apart from the outlines we also have a two-dimensional grid, namely
+   *     the bitmap that is used to represent the final SDF data.
+   *
+   * (3) In order to generate SDF, our task is to find shortest signed
+   *     distance from each grid point to the outline.  The 'signed
+   *     distance' means that if the grid point is filled by any contour
+   *     then its sign is positive, otherwise it is negative.  The pseudo
+   *     code is as follows.
+   *
+   *     ```
+   *     foreach grid_point (x, y):
+   *     {
+   *       int min_dist = INT_MAX;
+   *
+   *       foreach contour in outline:
+   *       {
+   *         foreach edge in contour:
+   *         {
+   *           // get shortest distance from point (x, y) to the edge
+   *           d = get_min_dist(x, y, edge);
+   *
+   *           if (d < min_dist)
+   *             min_dist = d;
+   *         }
+   *
+   *         bitmap[x, y] = min_dist;
+   *       }
+   *     }
+   *     ```
+   *
+   * (4) After running this algorithm the bitmap contains information about
+   *     the shortest distance from each point to the outline of the shape.
+   *     Of course, while this is the most straightforward way of generating
+   *     SDF, we use various optimizations in our implementation.  See the
+   *     `sdf_generate_*' functions in this file for all details.
+   *
+   *     The optimization currently used by default is subdivision; see
+   *     function `sdf_generate_subdivision` for more.
+   *
+   *     Also, to see how we compute the shortest distance from a point to
+   *     each type of edge, check out the `get_min_distance_*' functions.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  sdf
+
+
+  /**************************************************************************
+   *
+   * definitions
+   *
+   */
+
+  /*
+   * If set to 1, the rasterizer uses Newton-Raphson's method for finding
+   * the shortest distance from a point to a conic curve.
+   *
+   * If set to 0, an analytical method gets used instead, which computes the
+   * roots of a cubic polynomial to find the shortest distance.  However,
+   * the analytical method can currently underflow; we thus use Newton's
+   * method by default.
+   */
+#ifndef USE_NEWTON_FOR_CONIC
+#define USE_NEWTON_FOR_CONIC  1
+#endif
+
+  /*
+   * The number of intervals a Bezier curve gets sampled and checked to find
+   * the shortest distance.
+   */
+#define MAX_NEWTON_DIVISIONS  4
+
+  /*
+   * The number of steps of Newton's iterations in each interval of the
+   * Bezier curve.  Basically, we run Newton's approximation
+   *
+   *   x -= Q(t) / Q'(t)
+   *
+   * for each division to get the shortest distance.
+   */
+#define MAX_NEWTON_STEPS  4
+
+  /*
+   * The epsilon distance (in 16.16 fractional units) used for corner
+   * resolving.  If the difference of two distances is less than this value
+   * they will be checked for a corner if they are ambiguous.
+   */
+#define CORNER_CHECK_EPSILON  32
+
+#if 0
+  /*
+   * Coarse grid dimension.  Will probably be removed in the future because
+   * coarse grid optimization is the slowest algorithm.
+   */
+#define CG_DIMEN  8
+#endif
+
+
+  /**************************************************************************
+   *
+   * macros
+   *
+   */
+
+#define MUL_26D6( a, b )  ( ( ( a ) * ( b ) ) / 64 )
+#define VEC_26D6_DOT( p, q )  ( MUL_26D6( p.x, q.x ) + \
+                                MUL_26D6( p.y, q.y ) )
+
+
+  /**************************************************************************
+   *
+   * structures and enums
+   *
+   */
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   SDF_TRaster
+   *
+   * @Description:
+   *   This struct is used in place of @FT_Raster and is stored within the
+   *   internal FreeType renderer struct.  While rasterizing it is passed to
+   *   the @FT_Raster_RenderFunc function, which then can be used however we
+   *   want.
+   *
+   * @Fields:
+   *   memory ::
+   *     Used internally to allocate intermediate memory while raterizing.
+   *
+   */
+  typedef struct  SDF_TRaster_
+  {
+    FT_Memory  memory;
+
+  } SDF_TRaster, *SDF_PRaster;
+
+
+  /**************************************************************************
+   *
+   * @Enum:
+   *   SDF_Edge_Type
+   *
+   * @Description:
+   *   Enumeration of all curve types present in fonts.
+   *
+   * @Fields:
+   *   SDF_EDGE_UNDEFINED ::
+   *     Undefined edge, simply used to initialize and detect errors.
+   *
+   *   SDF_EDGE_LINE ::
+   *     Line segment with start and end point.
+   *
+   *   SDF_EDGE_CONIC ::
+   *     A conic/quadratic Bezier curve with start, end, and one control
+   *     point.
+   *
+   *   SDF_EDGE_CUBIC ::
+   *     A cubic Bezier curve with start, end, and two control points.
+   *
+   */
+  typedef enum  SDF_Edge_Type_
+  {
+    SDF_EDGE_UNDEFINED = 0,
+    SDF_EDGE_LINE      = 1,
+    SDF_EDGE_CONIC     = 2,
+    SDF_EDGE_CUBIC     = 3
+
+  } SDF_Edge_Type;
+
+
+  /**************************************************************************
+   *
+   * @Enum:
+   *   SDF_Contour_Orientation
+   *
+   * @Description:
+   *   Enumeration of all orientation values of a contour.  We determine the
+   *   orientation by calculating the area covered by a contour.  Contrary
+   *   to values returned by @FT_Outline_Get_Orientation,
+   *   `SDF_Contour_Orientation` is independent of the fill rule, which can
+   *   be different for different font formats.
+   *
+   * @Fields:
+   *   SDF_ORIENTATION_NONE ::
+   *     Undefined orientation, used for initialization and error detection.
+   *
+   *   SDF_ORIENTATION_CW ::
+   *     Clockwise orientation (positive area covered).
+   *
+   *   SDF_ORIENTATION_CCW ::
+   *     Counter-clockwise orientation (negative area covered).
+   *
+   * @Note:
+   *   See @FT_Outline_Get_Orientation for more details.
+   *
+   */
+  typedef enum  SDF_Contour_Orientation_
+  {
+    SDF_ORIENTATION_NONE = 0,
+    SDF_ORIENTATION_CW   = 1,
+    SDF_ORIENTATION_CCW  = 2
+
+  } SDF_Contour_Orientation;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   SDF_Edge
+   *
+   * @Description:
+   *   Represent an edge of a contour.
+   *
+   * @Fields:
+   *   start_pos ::
+   *     Start position of an edge.  Valid for all types of edges.
+   *
+   *   end_pos ::
+   *     Etart position of an edge.  Valid for all types of edges.
+   *
+   *   control_a ::
+   *     A control point of the edge.  Valid only for `SDF_EDGE_CONIC`
+   *     and `SDF_EDGE_CUBIC`.
+   *
+   *   control_b ::
+   *     Another control point of the edge.  Valid only for
+   *     `SDF_EDGE_CONIC`.
+   *
+   *   edge_type ::
+   *     Type of the edge, see @SDF_Edge_Type for all possible edge types.
+   *
+   *   next ::
+   *     Used to create a singly linked list, which can be interpreted
+   *     as a contour.
+   *
+   */
+  typedef struct  SDF_Edge_
+  {
+    FT_26D6_Vec  start_pos;
+    FT_26D6_Vec  end_pos;
+    FT_26D6_Vec  control_a;
+    FT_26D6_Vec  control_b;
+
+    SDF_Edge_Type  edge_type;
+
+    struct SDF_Edge_*  next;
+
+  } SDF_Edge;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   SDF_Contour
+   *
+   * @Description:
+   *   Represent a complete contour, which contains a list of edges.
+   *
+   * @Fields:
+   *   last_pos ::
+   *     Contains the value of `end_pos' of the last edge in the list of
+   *     edges.  Useful while decomposing the outline with
+   *     @FT_Outline_Decompose.
+   *
+   *   edges ::
+   *     Linked list of all the edges that make the contour.
+   *
+   *   next ::
+   *     Used to create a singly linked list, which can be interpreted as a
+   *     complete shape or @FT_Outline.
+   *
+   */
+  typedef struct  SDF_Contour_
+  {
+    FT_26D6_Vec  last_pos;
+    SDF_Edge*    edges;
+
+    struct SDF_Contour_*  next;
+
+  } SDF_Contour;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   SDF_Shape
+   *
+   * @Description:
+   *   Represent a complete shape, which is the decomposition of
+   *   @FT_Outline.
+   *
+   * @Fields:
+   *   memory ::
+   *     Used internally to allocate memory.
+   *
+   *   contours ::
+   *     Linked list of all the contours that make the shape.
+   *
+   */
+  typedef struct  SDF_Shape_
+  {
+    FT_Memory     memory;
+    SDF_Contour*  contours;
+
+  } SDF_Shape;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   SDF_Signed_Distance
+   *
+   * @Description:
+   *   Represent signed distance of a point, i.e., the distance of the edge
+   *   nearest to the point.
+   *
+   * @Fields:
+   *   distance ::
+   *     Distance of the point from the nearest edge.  Can be squared or
+   *     absolute depending on the `USE_SQUARED_DISTANCES` macro defined in
+   *     file `ftsdfcommon.h`.
+   *
+   *   cross ::
+   *     Cross product of the shortest distance vector (i.e., the vector
+   *     from the point to the nearest edge) and the direction of the edge
+   *     at the nearest point.  This is used to resolve ambiguities of
+   *     `sign`.
+   *
+   *   sign ::
+   *     A value used to indicate whether the distance vector is outside or
+   *     inside the contour corresponding to the edge.
+   *
+   * @Note:
+   *   `sign` may or may not be correct, therefore it must be checked
+   *   properly in case there is an ambiguity.
+   *
+   */
+  typedef struct SDF_Signed_Distance_
+  {
+    FT_16D16  distance;
+    FT_16D16  cross;
+    FT_Char   sign;
+
+  } SDF_Signed_Distance;
+
+
+  /**************************************************************************
+   *
+   * @Struct:
+   *   SDF_Params
+   *
+   * @Description:
+   *   Yet another internal parameters required by the rasterizer.
+   *
+   * @Fields:
+   *   orientation ::
+   *     This is not the @SDF_Contour_Orientation value but @FT_Orientation,
+   *     which determines whether clockwise-oriented outlines are to be
+   *     filled or counter-clockwise-oriented ones.
+   *
+   *   flip_sign ::
+   *     If set to true, flip the sign.  By default the points filled by the
+   *     outline are positive.
+   *
+   *   flip_y ::
+   *     If set to true the output bitmap is upside-down.  Can be useful
+   *     because OpenGL and DirectX use different coordinate systems for
+   *     textures.
+   *
+   *   overload_sign ::
+   *     In the subdivision and bounding box optimization, the default
+   *     outside sign is taken as -1.  This parameter can be used to modify
+   *     that behaviour.  For example, while generating SDF for a single
+   *     counter-clockwise contour, the outside sign should be 1.
+   *
+   */
+  typedef struct SDF_Params_
+  {
+    FT_Orientation  orientation;
+    FT_Bool         flip_sign;
+    FT_Bool         flip_y;
+
+    FT_Int  overload_sign;
+
+  } SDF_Params;
+
+
+  /**************************************************************************
+   *
+   * constants, initializer, and destructor
+   *
+   */
+
+  static
+  const FT_Vector  zero_vector = { 0, 0 };
+
+  static
+  const SDF_Edge  null_edge = { { 0, 0 }, { 0, 0 },
+                                { 0, 0 }, { 0, 0 },
+                                SDF_EDGE_UNDEFINED, NULL };
+
+  static
+  const SDF_Contour  null_contour = { { 0, 0 }, NULL, NULL };
+
+  static
+  const SDF_Shape  null_shape = { NULL, NULL };
+
+  static
+  const SDF_Signed_Distance  max_sdf = { INT_MAX, 0, 0 };
+
+
+  /* Create a new @SDF_Edge on the heap and assigns the `edge` */
+  /* pointer to the newly allocated memory.                    */
+  static FT_Error
+  sdf_edge_new( FT_Memory   memory,
+                SDF_Edge**  edge )
+  {
+    FT_Error   error = FT_Err_Ok;
+    SDF_Edge*  ptr   = NULL;
+
+
+    if ( !memory || !edge )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( !FT_QNEW( ptr ) )
+    {
+      *ptr = null_edge;
+      *edge = ptr;
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* Free the allocated `edge` variable. */
+  static void
+  sdf_edge_done( FT_Memory   memory,
+                 SDF_Edge**  edge )
+  {
+    if ( !memory || !edge || !*edge )
+      return;
+
+    FT_FREE( *edge );
+  }
+
+
+  /* Create a new @SDF_Contour on the heap and assign     */
+  /* the `contour` pointer to the newly allocated memory. */
+  static FT_Error
+  sdf_contour_new( FT_Memory      memory,
+                   SDF_Contour**  contour )
+  {
+    FT_Error      error = FT_Err_Ok;
+    SDF_Contour*  ptr   = NULL;
+
+
+    if ( !memory || !contour )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( !FT_QNEW( ptr ) )
+    {
+      *ptr     = null_contour;
+      *contour = ptr;
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* Free the allocated `contour` variable. */
+  /* Also free the list of edges.           */
+  static void
+  sdf_contour_done( FT_Memory      memory,
+                    SDF_Contour**  contour )
+  {
+    SDF_Edge*  edges;
+    SDF_Edge*  temp;
+
+
+    if ( !memory || !contour || !*contour )
+      return;
+
+    edges = (*contour)->edges;
+
+    /* release all edges */
+    while ( edges )
+    {
+      temp  = edges;
+      edges = edges->next;
+
+      sdf_edge_done( memory, &temp );
+    }
+
+    FT_FREE( *contour );
+  }
+
+
+  /* Create a new @SDF_Shape on the heap and assign     */
+  /* the `shape` pointer to the newly allocated memory. */
+  static FT_Error
+  sdf_shape_new( FT_Memory    memory,
+                 SDF_Shape**  shape )
+  {
+    FT_Error    error = FT_Err_Ok;
+    SDF_Shape*  ptr   = NULL;
+
+
+    if ( !memory || !shape )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( !FT_QNEW( ptr ) )
+    {
+      *ptr        = null_shape;
+      ptr->memory = memory;
+      *shape      = ptr;
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* Free the allocated `shape` variable. */
+  /* Also free the list of contours.      */
+  static void
+  sdf_shape_done( SDF_Shape**  shape )
+  {
+    FT_Memory     memory;
+    SDF_Contour*  contours;
+    SDF_Contour*  temp;
+
+
+    if ( !shape || !*shape )
+      return;
+
+    memory   = (*shape)->memory;
+    contours = (*shape)->contours;
+
+    if ( !memory )
+      return;
+
+    /* release all contours */
+    while ( contours )
+    {
+      temp     = contours;
+      contours = contours->next;
+
+      sdf_contour_done( memory, &temp );
+    }
+
+    /* release the allocated shape struct  */
+    FT_FREE( *shape );
+  }
+
+
+  /**************************************************************************
+   *
+   * shape decomposition functions
+   *
+   */
+
+  /* This function is called when starting a new contour at `to`, */
+  /* which gets added to the shape's list.                        */
+  static FT_Error
+  sdf_move_to( const FT_26D6_Vec* to,
+               void*              user )
+  {
+    SDF_Shape*    shape   = ( SDF_Shape* )user;
+    SDF_Contour*  contour = NULL;
+
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = shape->memory;
+
+
+    if ( !to || !user )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    FT_CALL( sdf_contour_new( memory, &contour ) );
+
+    contour->last_pos = *to;
+    contour->next     = shape->contours;
+    shape->contours   = contour;
+
+  Exit:
+    return error;
+  }
+
+
+  /* This function is called when there is a line in the      */
+  /* contour.  The line starts at the previous edge point and */
+  /* stops at `to`.                                           */
+  static FT_Error
+  sdf_line_to( const FT_26D6_Vec*  to,
+               void*               user )
+  {
+    SDF_Shape*    shape    = ( SDF_Shape* )user;
+    SDF_Edge*     edge     = NULL;
+    SDF_Contour*  contour  = NULL;
+
+    FT_Error      error    = FT_Err_Ok;
+    FT_Memory     memory   = shape->memory;
+
+
+    if ( !to || !user )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    contour = shape->contours;
+
+    if ( contour->last_pos.x == to->x &&
+         contour->last_pos.y == to->y )
+      goto Exit;
+
+    FT_CALL( sdf_edge_new( memory, &edge ) );
+
+    edge->edge_type = SDF_EDGE_LINE;
+    edge->start_pos = contour->last_pos;
+    edge->end_pos   = *to;
+
+    edge->next        = contour->edges;
+    contour->edges    = edge;
+    contour->last_pos = *to;
+
+  Exit:
+    return error;
+  }
+
+
+  /* This function is called when there is a conic Bezier curve   */
+  /* in the contour.  The curve starts at the previous edge point */
+  /* and stops at `to`, with control point `control_1`.           */
+  static FT_Error
+  sdf_conic_to( const FT_26D6_Vec*  control_1,
+                const FT_26D6_Vec*  to,
+                void*               user )
+  {
+    SDF_Shape*    shape    = ( SDF_Shape* )user;
+    SDF_Edge*     edge     = NULL;
+    SDF_Contour*  contour  = NULL;
+
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = shape->memory;
+
+
+    if ( !control_1 || !to || !user )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    contour = shape->contours;
+
+    /* If the control point coincides with any of the end points */
+    /* then it is a line and should be treated as one to avoid   */
+    /* unnecessary complexity later in the algorithm.            */
+    if ( ( contour->last_pos.x == control_1->x &&
+           contour->last_pos.y == control_1->y ) ||
+         ( control_1->x == to->x &&
+           control_1->y == to->y )               )
+    {
+      sdf_line_to( to, user );
+      goto Exit;
+    }
+
+    FT_CALL( sdf_edge_new( memory, &edge ) );
+
+    edge->edge_type = SDF_EDGE_CONIC;
+    edge->start_pos = contour->last_pos;
+    edge->control_a = *control_1;
+    edge->end_pos   = *to;
+
+    edge->next        = contour->edges;
+    contour->edges    = edge;
+    contour->last_pos = *to;
+
+  Exit:
+    return error;
+  }
+
+
+  /* This function is called when there is a cubic Bezier curve   */
+  /* in the contour.  The curve starts at the previous edge point */
+  /* and stops at `to`, with two control points `control_1` and   */
+  /* `control_2`.                                                 */
+  static FT_Error
+  sdf_cubic_to( const FT_26D6_Vec*  control_1,
+                const FT_26D6_Vec*  control_2,
+                const FT_26D6_Vec*  to,
+                void*               user )
+  {
+    SDF_Shape*    shape   = ( SDF_Shape* )user;
+    SDF_Edge*     edge    = NULL;
+    SDF_Contour*  contour = NULL;
+
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = shape->memory;
+
+
+    if ( !control_2 || !control_1 || !to || !user )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    contour = shape->contours;
+
+    FT_CALL( sdf_edge_new( memory, &edge ) );
+
+    edge->edge_type = SDF_EDGE_CUBIC;
+    edge->start_pos = contour->last_pos;
+    edge->control_a = *control_1;
+    edge->control_b = *control_2;
+    edge->end_pos   = *to;
+
+    edge->next        = contour->edges;
+    contour->edges    = edge;
+    contour->last_pos = *to;
+
+  Exit:
+    return error;
+  }
+
+
+  /* Construct the structure to hold all four outline */
+  /* decomposition functions.                         */
+  FT_DEFINE_OUTLINE_FUNCS(
+    sdf_decompose_funcs,
+
+    (FT_Outline_MoveTo_Func) sdf_move_to,   /* move_to  */
+    (FT_Outline_LineTo_Func) sdf_line_to,   /* line_to  */
+    (FT_Outline_ConicTo_Func)sdf_conic_to,  /* conic_to */
+    (FT_Outline_CubicTo_Func)sdf_cubic_to,  /* cubic_to */
+
+    0,                                      /* shift    */
+    0                                       /* delta    */
+  )
+
+
+  /* Decompose `outline` and put it into the `shape` structure.  */
+  static FT_Error
+  sdf_outline_decompose( FT_Outline*  outline,
+                         SDF_Shape*   shape )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+
+    if ( !outline || !shape )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    error = FT_Outline_Decompose( outline,
+                                  &sdf_decompose_funcs,
+                                  (void*)shape );
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * utility functions
+   *
+   */
+
+  /* Return the control box of an edge.  The control box is a rectangle */
+  /* in which all the control points can fit tightly.                   */
+  static FT_CBox
+  get_control_box( SDF_Edge  edge )
+  {
+    FT_CBox  cbox   = { 0, 0, 0, 0 };
+    FT_Bool  is_set = 0;
+
+
+    switch ( edge.edge_type )
+    {
+    case SDF_EDGE_CUBIC:
+      cbox.xMin = edge.control_b.x;
+      cbox.xMax = edge.control_b.x;
+      cbox.yMin = edge.control_b.y;
+      cbox.yMax = edge.control_b.y;
+
+      is_set = 1;
+      /* fall through */
+
+    case SDF_EDGE_CONIC:
+      if ( is_set )
+      {
+        cbox.xMin = edge.control_a.x < cbox.xMin
+                    ? edge.control_a.x
+                    : cbox.xMin;
+        cbox.xMax = edge.control_a.x > cbox.xMax
+                    ? edge.control_a.x
+                    : cbox.xMax;
+
+        cbox.yMin = edge.control_a.y < cbox.yMin
+                    ? edge.control_a.y
+                    : cbox.yMin;
+        cbox.yMax = edge.control_a.y > cbox.yMax
+                    ? edge.control_a.y
+                    : cbox.yMax;
+      }
+      else
+      {
+        cbox.xMin = edge.control_a.x;
+        cbox.xMax = edge.control_a.x;
+        cbox.yMin = edge.control_a.y;
+        cbox.yMax = edge.control_a.y;
+
+        is_set = 1;
+      }
+      /* fall through */
+
+    case SDF_EDGE_LINE:
+      if ( is_set )
+      {
+        cbox.xMin = edge.start_pos.x < cbox.xMin
+                    ? edge.start_pos.x
+                    : cbox.xMin;
+        cbox.xMax = edge.start_pos.x > cbox.xMax
+                    ? edge.start_pos.x
+                    : cbox.xMax;
+
+        cbox.yMin = edge.start_pos.y < cbox.yMin
+                    ? edge.start_pos.y
+                    : cbox.yMin;
+        cbox.yMax = edge.start_pos.y > cbox.yMax
+                    ? edge.start_pos.y
+                    : cbox.yMax;
+      }
+      else
+      {
+        cbox.xMin = edge.start_pos.x;
+        cbox.xMax = edge.start_pos.x;
+        cbox.yMin = edge.start_pos.y;
+        cbox.yMax = edge.start_pos.y;
+      }
+
+      cbox.xMin = edge.end_pos.x < cbox.xMin
+                  ? edge.end_pos.x
+                  : cbox.xMin;
+      cbox.xMax = edge.end_pos.x > cbox.xMax
+                  ? edge.end_pos.x
+                  : cbox.xMax;
+
+      cbox.yMin = edge.end_pos.y < cbox.yMin
+                  ? edge.end_pos.y
+                  : cbox.yMin;
+      cbox.yMax = edge.end_pos.y > cbox.yMax
+                  ? edge.end_pos.y
+                  : cbox.yMax;
+
+      break;
+
+    default:
+      break;
+    }
+
+    return cbox;
+  }
+
+
+  /* Return orientation of a single contour.                    */
+  /* Note that the orientation is independent of the fill rule! */
+  /* So, for TTF a clockwise-oriented contour has to be filled  */
+  /* and the opposite for OTF fonts.                            */
+  static SDF_Contour_Orientation
+  get_contour_orientation ( SDF_Contour*  contour )
+  {
+    SDF_Edge*  head = NULL;
+    FT_26D6    area = 0;
+
+
+    /* return none if invalid parameters */
+    if ( !contour || !contour->edges )
+      return SDF_ORIENTATION_NONE;
+
+    head = contour->edges;
+
+    /* Calculate the area of the control box for all edges. */
+    while ( head )
+    {
+      switch ( head->edge_type )
+      {
+      case SDF_EDGE_LINE:
+        area += MUL_26D6( ( head->end_pos.x - head->start_pos.x ),
+                          ( head->end_pos.y + head->start_pos.y ) );
+        break;
+
+      case SDF_EDGE_CONIC:
+        area += MUL_26D6( head->control_a.x - head->start_pos.x,
+                          head->control_a.y + head->start_pos.y );
+        area += MUL_26D6( head->end_pos.x - head->control_a.x,
+                          head->end_pos.y + head->control_a.y );
+        break;
+
+      case SDF_EDGE_CUBIC:
+        area += MUL_26D6( head->control_a.x - head->start_pos.x,
+                          head->control_a.y + head->start_pos.y );
+        area += MUL_26D6( head->control_b.x - head->control_a.x,
+                          head->control_b.y + head->control_a.y );
+        area += MUL_26D6( head->end_pos.x - head->control_b.x,
+                          head->end_pos.y + head->control_b.y );
+        break;
+
+      default:
+        return SDF_ORIENTATION_NONE;
+      }
+
+      head = head->next;
+    }
+
+    /* Clockwise contours cover a positive area, and counter-clockwise */
+    /* contours cover a negative area.                                 */
+    if ( area > 0 )
+      return SDF_ORIENTATION_CW;
+    else
+      return SDF_ORIENTATION_CCW;
+  }
+
+
+  /* This function is exactly the same as the one */
+  /* in the smooth renderer.  It splits a conic   */
+  /* into two conics exactly half way at t = 0.5. */
+  static void
+  split_conic( FT_26D6_Vec*  base )
+  {
+    FT_26D6  a, b;
+
+
+    base[4].x = base[2].x;
+    a         = base[0].x + base[1].x;
+    b         = base[1].x + base[2].x;
+    base[3].x = b / 2;
+    base[2].x = ( a + b ) / 4;
+    base[1].x = a / 2;
+
+    base[4].y = base[2].y;
+    a         = base[0].y + base[1].y;
+    b         = base[1].y + base[2].y;
+    base[3].y = b / 2;
+    base[2].y = ( a + b ) / 4;
+    base[1].y = a / 2;
+  }
+
+
+  /* This function is exactly the same as the one */
+  /* in the smooth renderer.  It splits a cubic   */
+  /* into two cubics exactly half way at t = 0.5. */
+  static void
+  split_cubic( FT_26D6_Vec*  base )
+  {
+    FT_26D6  a, b, c;
+
+
+    base[6].x = base[3].x;
+    a         = base[0].x + base[1].x;
+    b         = base[1].x + base[2].x;
+    c         = base[2].x + base[3].x;
+    base[5].x = c / 2;
+    c        += b;
+    base[4].x = c / 4;
+    base[1].x = a / 2;
+    a        += b;
+    base[2].x = a / 4;
+    base[3].x = ( a + c ) / 8;
+
+    base[6].y = base[3].y;
+    a         = base[0].y + base[1].y;
+    b         = base[1].y + base[2].y;
+    c         = base[2].y + base[3].y;
+    base[5].y = c / 2;
+    c        += b;
+    base[4].y = c / 4;
+    base[1].y = a / 2;
+    a        += b;
+    base[2].y = a / 4;
+    base[3].y = ( a + c ) / 8;
+  }
+
+
+  /* Split a conic Bezier curve into a number of lines */
+  /* and add them to `out'.                            */
+  /*                                                   */
+  /* This function uses recursion; we thus need        */
+  /* parameter `max_splits' for stopping.              */
+  static FT_Error
+  split_sdf_conic( FT_Memory     memory,
+                   FT_26D6_Vec*  control_points,
+                   FT_UInt       max_splits,
+                   SDF_Edge**    out )
+  {
+    FT_Error     error = FT_Err_Ok;
+    FT_26D6_Vec  cpos[5];
+    SDF_Edge*    left,*  right;
+
+
+    if ( !memory || !out  )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* split conic outline */
+    cpos[0] = control_points[0];
+    cpos[1] = control_points[1];
+    cpos[2] = control_points[2];
+
+    split_conic( cpos );
+
+    /* If max number of splits is done */
+    /* then stop and add the lines to  */
+    /* the list.                       */
+    if ( max_splits <= 2 )
+      goto Append;
+
+    /* Otherwise keep splitting. */
+    FT_CALL( split_sdf_conic( memory, &cpos[0], max_splits / 2, out ) );
+    FT_CALL( split_sdf_conic( memory, &cpos[2], max_splits / 2, out ) );
+
+    /* [NOTE]: This is not an efficient way of   */
+    /* splitting the curve.  Check the deviation */
+    /* instead and stop if the deviation is less */
+    /* than a pixel.                             */
+
+    goto Exit;
+
+  Append:
+    /* Do allocation and add the lines to the list. */
+
+    FT_CALL( sdf_edge_new( memory, &left ) );
+    FT_CALL( sdf_edge_new( memory, &right ) );
+
+    left->start_pos  = cpos[0];
+    left->end_pos    = cpos[2];
+    left->edge_type  = SDF_EDGE_LINE;
+
+    right->start_pos = cpos[2];
+    right->end_pos   = cpos[4];
+    right->edge_type = SDF_EDGE_LINE;
+
+    left->next  = right;
+    right->next = (*out);
+    *out        = left;
+
+  Exit:
+    return error;
+  }
+
+
+  /* Split a cubic Bezier curve into a number of lines */
+  /* and add them to `out`.                            */
+  /*                                                   */
+  /* This function uses recursion; we thus need        */
+  /* parameter `max_splits' for stopping.              */
+  static FT_Error
+  split_sdf_cubic( FT_Memory     memory,
+                   FT_26D6_Vec*  control_points,
+                   FT_UInt       max_splits,
+                   SDF_Edge**    out )
+  {
+    FT_Error       error = FT_Err_Ok;
+    FT_26D6_Vec    cpos[7];
+    SDF_Edge*      left, *right;
+    const FT_26D6  threshold = ONE_PIXEL / 4;
+
+
+    if ( !memory || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* split the cubic */
+    cpos[0] = control_points[0];
+    cpos[1] = control_points[1];
+    cpos[2] = control_points[2];
+    cpos[3] = control_points[3];
+
+    /* If the segment is flat enough we won't get any benefit by */
+    /* splitting it further, so we can just stop splitting.      */
+    /*                                                           */
+    /* Check the deviation of the Bezier curve and stop if it is */
+    /* smaller than the pre-defined `threshold` value.           */
+    if ( FT_ABS( 2 * cpos[0].x - 3 * cpos[1].x + cpos[3].x ) < threshold &&
+         FT_ABS( 2 * cpos[0].y - 3 * cpos[1].y + cpos[3].y ) < threshold &&
+         FT_ABS( cpos[0].x - 3 * cpos[2].x + 2 * cpos[3].x ) < threshold &&
+         FT_ABS( cpos[0].y - 3 * cpos[2].y + 2 * cpos[3].y ) < threshold )
+    {
+      split_cubic( cpos );
+      goto Append;
+    }
+
+    split_cubic( cpos );
+
+    /* If max number of splits is done */
+    /* then stop and add the lines to  */
+    /* the list.                       */
+    if ( max_splits <= 2 )
+      goto Append;
+
+    /* Otherwise keep splitting. */
+    FT_CALL( split_sdf_cubic( memory, &cpos[0], max_splits / 2, out ) );
+    FT_CALL( split_sdf_cubic( memory, &cpos[3], max_splits / 2, out ) );
+
+    /* [NOTE]: This is not an efficient way of   */
+    /* splitting the curve.  Check the deviation */
+    /* instead and stop if the deviation is less */
+    /* than a pixel.                             */
+
+    goto Exit;
+
+  Append:
+    /* Do allocation and add the lines to the list. */
+
+    FT_CALL( sdf_edge_new( memory, &left) );
+    FT_CALL( sdf_edge_new( memory, &right) );
+
+    left->start_pos  = cpos[0];
+    left->end_pos    = cpos[3];
+    left->edge_type  = SDF_EDGE_LINE;
+
+    right->start_pos = cpos[3];
+    right->end_pos   = cpos[6];
+    right->edge_type = SDF_EDGE_LINE;
+
+    left->next  = right;
+    right->next = (*out);
+    *out        = left;
+
+  Exit:
+    return error;
+  }
+
+
+  /* Subdivide an entire shape into line segments */
+  /* such that it doesn't look visually different */
+  /* from the original curve.                     */
+  static FT_Error
+  split_sdf_shape( SDF_Shape*  shape )
+  {
+    FT_Error   error = FT_Err_Ok;
+    FT_Memory  memory;
+
+    SDF_Contour*  contours;
+    SDF_Contour*  new_contours = NULL;
+
+
+    if ( !shape || !shape->memory )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    contours = shape->contours;
+    memory   = shape->memory;
+
+    /* for each contour */
+    while ( contours )
+    {
+      SDF_Edge*  edges     = contours->edges;
+      SDF_Edge*  new_edges = NULL;
+
+      SDF_Contour*  tempc;
+
+
+      /* for each edge */
+      while ( edges )
+      {
+        SDF_Edge*  edge = edges;
+        SDF_Edge*  temp;
+
+        switch ( edge->edge_type )
+        {
+        case SDF_EDGE_LINE:
+          /* Just create a duplicate edge in case     */
+          /* it is a line.  We can use the same edge. */
+          FT_CALL( sdf_edge_new( memory, &temp ) );
+
+          ft_memcpy( temp, edge, sizeof ( *edge ) );
+
+          temp->next = new_edges;
+          new_edges  = temp;
+          break;
+
+        case SDF_EDGE_CONIC:
+          /* Subdivide the curve and add it to the list. */
+          {
+            FT_26D6_Vec  ctrls[3];
+            FT_26D6      dx, dy;
+            FT_UInt      num_splits;
+
+
+            ctrls[0] = edge->start_pos;
+            ctrls[1] = edge->control_a;
+            ctrls[2] = edge->end_pos;
+
+            dx = FT_ABS( ctrls[2].x + ctrls[0].x - 2 * ctrls[1].x );
+            dy = FT_ABS( ctrls[2].y + ctrls[0].y - 2 * ctrls[1].y );
+            if ( dx < dy )
+              dx = dy;
+
+            /* Calculate the number of necessary bisections.  Each      */
+            /* bisection causes a four-fold reduction of the deviation, */
+            /* hence we bisect the Bezier curve until the deviation     */
+            /* becomes less than 1/8th of a pixel.  For more details    */
+            /* check file `ftgrays.c`.                                  */
+            num_splits = 1;
+            while ( dx > ONE_PIXEL / 8 )
+            {
+              dx         >>= 2;
+              num_splits <<= 1;
+            }
+
+            error = split_sdf_conic( memory, ctrls, num_splits, &new_edges );
+          }
+          break;
+
+        case SDF_EDGE_CUBIC:
+          /* Subdivide the curve and add it to the list. */
+          {
+            FT_26D6_Vec  ctrls[4];
+
+
+            ctrls[0] = edge->start_pos;
+            ctrls[1] = edge->control_a;
+            ctrls[2] = edge->control_b;
+            ctrls[3] = edge->end_pos;
+
+            error = split_sdf_cubic( memory, ctrls, 32, &new_edges );
+          }
+          break;
+
+        default:
+          error = FT_THROW( Invalid_Argument );
+        }
+
+        if ( error != FT_Err_Ok )
+          goto Exit;
+
+        edges = edges->next;
+      }
+
+      /* add to the contours list */
+      FT_CALL( sdf_contour_new( memory, &tempc ) );
+
+      tempc->next  = new_contours;
+      tempc->edges = new_edges;
+      new_contours = tempc;
+      new_edges    = NULL;
+
+      /* deallocate the contour */
+      tempc    = contours;
+      contours = contours->next;
+
+      sdf_contour_done( memory, &tempc );
+    }
+
+    shape->contours = new_contours;
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * for debugging
+   *
+   */
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+  static void
+  sdf_shape_dump( SDF_Shape*  shape )
+  {
+    FT_UInt  num_contours = 0;
+
+    FT_UInt  total_edges = 0;
+    FT_UInt  total_lines = 0;
+    FT_UInt  total_conic = 0;
+    FT_UInt  total_cubic = 0;
+
+    SDF_Contour*  contour_list;
+
+
+    if ( !shape )
+    {
+      FT_TRACE5(( "sdf_shape_dump: null shape\n" ));
+      return;
+    }
+
+    contour_list = shape->contours;
+
+    FT_TRACE5(( "sdf_shape_dump (values are in 26.6 format):\n" ));
+
+    while ( contour_list )
+    {
+      FT_UInt       num_edges = 0;
+      SDF_Edge*     edge_list;
+      SDF_Contour*  contour = contour_list;
+
+
+      FT_TRACE5(( "  Contour %d\n", num_contours ));
+
+      edge_list = contour->edges;
+
+      while ( edge_list )
+      {
+        SDF_Edge*  edge = edge_list;
+
+
+        FT_TRACE5(( "  %3d: ", num_edges ));
+
+        switch ( edge->edge_type )
+        {
+        case SDF_EDGE_LINE:
+          FT_TRACE5(( "Line:  (%ld, %ld) -- (%ld, %ld)\n",
+                      edge->start_pos.x, edge->start_pos.y,
+                      edge->end_pos.x, edge->end_pos.y ));
+          total_lines++;
+          break;
+
+        case SDF_EDGE_CONIC:
+          FT_TRACE5(( "Conic: (%ld, %ld) .. (%ld, %ld) .. (%ld, %ld)\n",
+                      edge->start_pos.x, edge->start_pos.y,
+                      edge->control_a.x, edge->control_a.y,
+                      edge->end_pos.x, edge->end_pos.y ));
+          total_conic++;
+          break;
+
+        case SDF_EDGE_CUBIC:
+          FT_TRACE5(( "Cubic: (%ld, %ld) .. (%ld, %ld)"
+                      " .. (%ld, %ld) .. (%ld %ld)\n",
+                      edge->start_pos.x, edge->start_pos.y,
+                      edge->control_a.x, edge->control_a.y,
+                      edge->control_b.x, edge->control_b.y,
+                      edge->end_pos.x, edge->end_pos.y ));
+          total_cubic++;
+          break;
+
+        default:
+          break;
+        }
+
+        num_edges++;
+        total_edges++;
+        edge_list = edge_list->next;
+      }
+
+      num_contours++;
+      contour_list = contour_list->next;
+    }
+
+    FT_TRACE5(( "\n" ));
+    FT_TRACE5(( "  total number of contours = %d\n", num_contours ));
+    FT_TRACE5(( "  total number of edges    = %d\n", total_edges ));
+    FT_TRACE5(( "    |__lines = %d\n", total_lines ));
+    FT_TRACE5(( "    |__conic = %d\n", total_conic ));
+    FT_TRACE5(( "    |__cubic = %d\n", total_cubic ));
+  }
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
+  /**************************************************************************
+   *
+   * math functions
+   *
+   */
+
+#if !USE_NEWTON_FOR_CONIC
+
+  /* [NOTE]: All the functions below down until rasterizer */
+  /*         can be avoided if we decide to subdivide the  */
+  /*         curve into lines.                             */
+
+  /* This function uses Newton's iteration to find */
+  /* the cube root of a fixed-point integer.       */
+  static FT_16D16
+  cube_root( FT_16D16  val )
+  {
+    /* [IMPORTANT]: This function is not good as it may */
+    /* not break, so use a lookup table instead.  Or we */
+    /* can use an algorithm similar to `square_root`.   */
+
+    FT_Int  v, g, c;
+
+
+    if ( val == 0                  ||
+         val == -FT_INT_16D16( 1 ) ||
+         val ==  FT_INT_16D16( 1 ) )
+      return val;
+
+    v = val < 0 ? -val : val;
+    g = square_root( v );
+    c = 0;
+
+    while ( 1 )
+    {
+      c = FT_MulFix( FT_MulFix( g, g ), g ) - v;
+      c = FT_DivFix( c, 3 * FT_MulFix( g, g ) );
+
+      g -= c;
+
+      if ( ( c < 0 ? -c : c ) < 30 )
+        break;
+    }
+
+    return val < 0 ? -g : g;
+  }
+
+
+  /* Calculate the perpendicular by using '1 - base^2'. */
+  /* Then use arctan to compute the angle.              */
+  static FT_16D16
+  arc_cos( FT_16D16  val )
+  {
+    FT_16D16  p;
+    FT_16D16  b   = val;
+    FT_16D16  one = FT_INT_16D16( 1 );
+
+
+    if ( b > one )
+      b = one;
+    if ( b < -one )
+      b = -one;
+
+    p = one - FT_MulFix( b, b );
+    p = square_root( p );
+
+    return FT_Atan2( b, p );
+  }
+
+
+  /* Compute roots of a quadratic polynomial, assign them to `out`, */
+  /* and return number of real roots.                               */
+  /*                                                                */
+  /* The procedure can be found at                                  */
+  /*                                                                */
+  /*   https://mathworld.wolfram.com/QuadraticFormula.html          */
+  static FT_UShort
+  solve_quadratic_equation( FT_26D6   a,
+                            FT_26D6   b,
+                            FT_26D6   c,
+                            FT_16D16  out[2] )
+  {
+    FT_16D16  discriminant = 0;
+
+
+    a = FT_26D6_16D16( a );
+    b = FT_26D6_16D16( b );
+    c = FT_26D6_16D16( c );
+
+    if ( a == 0 )
+    {
+      if ( b == 0 )
+        return 0;
+      else
+      {
+        out[0] = FT_DivFix( -c, b );
+
+        return 1;
+      }
+    }
+
+    discriminant = FT_MulFix( b, b ) - 4 * FT_MulFix( a, c );
+
+    if ( discriminant < 0 )
+      return 0;
+    else if ( discriminant == 0 )
+    {
+      out[0] = FT_DivFix( -b, 2 * a );
+
+      return 1;
+    }
+    else
+    {
+      discriminant = square_root( discriminant );
+
+      out[0] = FT_DivFix( -b + discriminant, 2 * a );
+      out[1] = FT_DivFix( -b - discriminant, 2 * a );
+
+      return 2;
+    }
+  }
+
+
+  /* Compute roots of a cubic polynomial, assign them to `out`, */
+  /* and return number of real roots.                           */
+  /*                                                            */
+  /* The procedure can be found at                              */
+  /*                                                            */
+  /*   https://mathworld.wolfram.com/CubicFormula.html          */
+  static FT_UShort
+  solve_cubic_equation( FT_26D6   a,
+                        FT_26D6   b,
+                        FT_26D6   c,
+                        FT_26D6   d,
+                        FT_16D16  out[3] )
+  {
+    FT_16D16  q = 0;      /* intermediate */
+    FT_16D16  r = 0;      /* intermediate */
+
+    FT_16D16  a2 = b;     /* x^2 coefficients */
+    FT_16D16  a1 = c;     /* x coefficients   */
+    FT_16D16  a0 = d;     /* constant         */
+
+    FT_16D16  q3   = 0;
+    FT_16D16  r2   = 0;
+    FT_16D16  a23  = 0;
+    FT_16D16  a22  = 0;
+    FT_16D16  a1x2 = 0;
+
+
+    /* cutoff value for `a` to be a cubic, otherwise solve quadratic */
+    if ( a == 0 || FT_ABS( a ) < 16 )
+      return solve_quadratic_equation( b, c, d, out );
+
+    if ( d == 0 )
+    {
+      out[0] = 0;
+
+      return solve_quadratic_equation( a, b, c, out + 1 ) + 1;
+    }
+
+    /* normalize the coefficients; this also makes them 16.16 */
+    a2 = FT_DivFix( a2, a );
+    a1 = FT_DivFix( a1, a );
+    a0 = FT_DivFix( a0, a );
+
+    /* compute intermediates */
+    a1x2 = FT_MulFix( a1, a2 );
+    a22  = FT_MulFix( a2, a2 );
+    a23  = FT_MulFix( a22, a2 );
+
+    q = ( 3 * a1 - a22 ) / 9;
+    r = ( 9 * a1x2 - 27 * a0 - 2 * a23 ) / 54;
+
+    /* [BUG]: `q3` and `r2` still cause underflow. */
+
+    q3 = FT_MulFix( q, q );
+    q3 = FT_MulFix( q3, q );
+
+    r2 = FT_MulFix( r, r );
+
+    if ( q3 < 0 && r2 < -q3 )
+    {
+      FT_16D16  t = 0;
+
+
+      q3 = square_root( -q3 );
+      t  = FT_DivFix( r, q3 );
+
+      if ( t > ( 1 << 16 ) )
+        t =  ( 1 << 16 );
+      if ( t < -( 1 << 16 ) )
+        t = -( 1 << 16 );
+
+      t   = arc_cos( t );
+      a2 /= 3;
+      q   = 2 * square_root( -q );
+
+      out[0] = FT_MulFix( q, FT_Cos( t / 3 ) ) - a2;
+      out[1] = FT_MulFix( q, FT_Cos( ( t + FT_ANGLE_PI * 2 ) / 3 ) ) - a2;
+      out[2] = FT_MulFix( q, FT_Cos( ( t + FT_ANGLE_PI * 4 ) / 3 ) ) - a2;
+
+      return 3;
+    }
+
+    else if ( r2 == -q3 )
+    {
+      FT_16D16  s = 0;
+
+
+      s   = cube_root( r );
+      a2 /= -3;
+
+      out[0] = a2 + ( 2 * s );
+      out[1] = a2 - s;
+
+      return 2;
+    }
+
+    else
+    {
+      FT_16D16  s    = 0;
+      FT_16D16  t    = 0;
+      FT_16D16  dis  = 0;
+
+
+      if ( q3 == 0 )
+        dis = FT_ABS( r );
+      else
+        dis = square_root( q3 + r2 );
+
+      s = cube_root( r + dis );
+      t = cube_root( r - dis );
+      a2 /= -3;
+      out[0] = ( a2 + ( s + t ) );
+
+      return 1;
+    }
+  }
+
+#endif /* !USE_NEWTON_FOR_CONIC */
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /**                                                                     **/
+  /**  RASTERIZER                                                         **/
+  /**                                                                     **/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   resolve_corner
+   *
+   * @Description:
+   *   At some places on the grid two edges can give opposite directions;
+   *   this happens when the closest point is on one of the endpoint.  In
+   *   that case we need to check the proper sign.
+   *
+   *   This can be visualized by an example:
+   *
+   *   ```
+   *                x
+   *
+   *                   o
+   *                  ^ \
+   *                 /   \
+   *                /     \
+   *           (a) /       \  (b)
+   *              /         \
+   *             /           \
+   *            /             v
+   *   ```
+   *
+   *   Suppose `x` is the point whose shortest distance from an arbitrary
+   *   contour we want to find out.  It is clear that `o` is the nearest
+   *   point on the contour.  Now to determine the sign we do a cross
+   *   product of the shortest distance vector and the edge direction, i.e.,
+   *
+   *   ```
+   *   => sign = cross(x - o, direction(a))
+   *   ```
+   *
+   *   Using the right hand thumb rule we can see that the sign will be
+   *   positive.
+   *
+   *   If we use `b', however, we have
+   *
+   *   ```
+   *   => sign = cross(x - o, direction(b))
+   *   ```
+   *
+   *   In this case the sign will be negative.  To determine the correct
+   *   sign we thus divide the plane in two halves and check which plane the
+   *   point lies in.
+   *
+   *   ```
+   *                   |
+   *                x  |
+   *                   |
+   *                   o
+   *                  ^|\
+   *                 / | \
+   *                /  |  \
+   *           (a) /   |   \  (b)
+   *              /    |    \
+   *             /           \
+   *            /             v
+   *   ```
+   *
+   *   We can see that `x` lies in the plane of `a`, so we take the sign
+   *   determined by `a`.  This test can be easily done by calculating the
+   *   orthogonality and taking the greater one.
+   *
+   *   The orthogonality is simply the sinus of the two vectors (i.e.,
+   *   x - o) and the corresponding direction.  We efficiently pre-compute
+   *   the orthogonality with the corresponding `get_min_distance_*`
+   *   functions.
+   *
+   * @Input:
+   *   sdf1 ::
+   *     First signed distance (can be any of `a` or `b`).
+   *
+   *   sdf1 ::
+   *     Second signed distance (can be any of `a` or `b`).
+   *
+   * @Return:
+   *   The correct signed distance, which is computed by using the above
+   *   algorithm.
+   *
+   * @Note:
+   *   The function does not care about the actual distance, it simply
+   *   returns the signed distance which has a larger cross product.  As a
+   *   consequence, this function should not be used if the two distances
+   *   are fairly apart.  In that case simply use the signed distance with
+   *   a shorter absolute distance.
+   *
+   */
+  static SDF_Signed_Distance
+  resolve_corner( SDF_Signed_Distance  sdf1,
+                  SDF_Signed_Distance  sdf2 )
+  {
+    return FT_ABS( sdf1.cross ) > FT_ABS( sdf2.cross ) ? sdf1 : sdf2;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   get_min_distance_line
+   *
+   * @Description:
+   *   Find the shortest distance from the `line` segment to a given `point`
+   *   and assign it to `out`.  Use it for line segments only.
+   *
+   * @Input:
+   *   line ::
+   *     The line segment to which the shortest distance is to be computed.
+   *
+   *   point ::
+   *     Point from which the shortest distance is to be computed.
+   *
+   * @Output:
+   *   out ::
+   *     Signed distance from `point` to `line`.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   * @Note:
+   *   The `line' parameter must have an edge type of `SDF_EDGE_LINE`.
+   *
+   */
+  static FT_Error
+  get_min_distance_line( SDF_Edge*             line,
+                         FT_26D6_Vec           point,
+                         SDF_Signed_Distance*  out )
+  {
+    /*
+     * In order to calculate the shortest distance from a point to
+     * a line segment, we do the following.  Let's assume that
+     *
+     * ```
+     * a = start point of the line segment
+     * b = end point of the line segment
+     * p = point from which shortest distance is to be calculated
+     * ```
+     *
+     * (1) Write the parametric equation of the line.
+     *
+     *     ```
+     *     point_on_line = a + (b - a) * t   (t is the factor)
+     *     ```
+     *
+     * (2) Find the projection of point `p` on the line.  The projection
+     *     will be perpendicular to the line, which allows us to get the
+     *     solution by making the dot product zero.
+     *
+     *     ```
+     *     (point_on_line - a) . (p - point_on_line) = 0
+     *
+     *                (point_on_line)
+     *      (a) x-------o----------------x (b)
+     *                |_|
+     *                  |
+     *                  |
+     *                 (p)
+     *     ```
+     *
+     * (3) Simplification of the above equation yields the factor of
+     *     `point_on_line`:
+     *
+     *     ```
+     *     t = ((p - a) . (b - a)) / |b - a|^2
+     *     ```
+     *
+     * (4) We clamp factor `t` between [0.0f, 1.0f] because `point_on_line`
+     *     can be outside of the line segment:
+     *
+     *     ```
+     *                                          (point_on_line)
+     *     (a) x------------------------x (b) -----o---
+     *                                           |_|
+     *                                             |
+     *                                             |
+     *                                            (p)
+     *     ```
+     *
+     * (5) Finally, the distance we are interested in is
+     *
+     *     ```
+     *     |point_on_line - p|
+     *     ```
+     */
+
+    FT_Error  error = FT_Err_Ok;
+
+    FT_Vector  a;                   /* start position */
+    FT_Vector  b;                   /* end position   */
+    FT_Vector  p;                   /* current point  */
+
+    FT_26D6_Vec  line_segment;      /* `b` - `a` */
+    FT_26D6_Vec  p_sub_a;           /* `p` - `a` */
+
+    FT_26D6   sq_line_length;       /* squared length of `line_segment` */
+    FT_16D16  factor;               /* factor of the nearest point      */
+    FT_26D6   cross;                /* used to determine sign           */
+
+    FT_16D16_Vec  nearest_point;    /* `point_on_line`       */
+    FT_16D16_Vec  nearest_vector;   /* `p` - `nearest_point` */
+
+
+    if ( !line || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( line->edge_type != SDF_EDGE_LINE )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    a = line->start_pos;
+    b = line->end_pos;
+    p = point;
+
+    line_segment.x = b.x - a.x;
+    line_segment.y = b.y - a.y;
+
+    p_sub_a.x = p.x - a.x;
+    p_sub_a.y = p.y - a.y;
+
+    sq_line_length = ( line_segment.x * line_segment.x ) / 64 +
+                     ( line_segment.y * line_segment.y ) / 64;
+
+    /* currently factor is 26.6 */
+    factor = ( p_sub_a.x * line_segment.x ) / 64 +
+             ( p_sub_a.y * line_segment.y ) / 64;
+
+    /* now factor is 16.16 */
+    factor = FT_DivFix( factor, sq_line_length );
+
+    /* clamp the factor between 0.0 and 1.0 in fixed point */
+    if ( factor > FT_INT_16D16( 1 ) )
+      factor = FT_INT_16D16( 1 );
+    if ( factor < 0 )
+      factor = 0;
+
+    nearest_point.x = FT_MulFix( FT_26D6_16D16( line_segment.x ),
+                                 factor );
+    nearest_point.y = FT_MulFix( FT_26D6_16D16( line_segment.y ),
+                                 factor );
+
+    nearest_point.x = FT_26D6_16D16( a.x ) + nearest_point.x;
+    nearest_point.y = FT_26D6_16D16( a.y ) + nearest_point.y;
+
+    nearest_vector.x = nearest_point.x - FT_26D6_16D16( p.x );
+    nearest_vector.y = nearest_point.y - FT_26D6_16D16( p.y );
+
+    cross = FT_MulFix( nearest_vector.x, line_segment.y ) -
+            FT_MulFix( nearest_vector.y, line_segment.x );
+
+    /* assign the output */
+    out->sign     = cross < 0 ? 1 : -1;
+    out->distance = VECTOR_LENGTH_16D16( nearest_vector );
+
+    /* Instead of finding `cross` for checking corner we */
+    /* directly set it here.  This is more efficient     */
+    /* because if the distance is perpendicular we can   */
+    /* directly set it to 1.                             */
+    if ( factor != 0 && factor != FT_INT_16D16( 1 ) )
+      out->cross = FT_INT_16D16( 1 );
+    else
+    {
+      /* [OPTIMIZATION]: Pre-compute this direction. */
+      /* If not perpendicular then compute `cross`.  */
+      FT_Vector_NormLen( &line_segment );
+      FT_Vector_NormLen( &nearest_vector );
+
+      out->cross = FT_MulFix( line_segment.x, nearest_vector.y ) -
+                   FT_MulFix( line_segment.y, nearest_vector.x );
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   get_min_distance_conic
+   *
+   * @Description:
+   *   Find the shortest distance from the `conic` Bezier curve to a given
+   *   `point` and assign it to `out`.  Use it for conic/quadratic curves
+   *   only.
+   *
+   * @Input:
+   *   conic ::
+   *     The conic Bezier curve to which the shortest distance is to be
+   *     computed.
+   *
+   *   point ::
+   *     Point from which the shortest distance is to be computed.
+   *
+   * @Output:
+   *   out ::
+   *     Signed distance from `point` to `conic`.
+   *
+   * @Return:
+   *     FreeType error, 0 means success.
+   *
+   * @Note:
+   *   The `conic` parameter must have an edge type of `SDF_EDGE_CONIC`.
+   *
+   */
+
+#if !USE_NEWTON_FOR_CONIC
+
+  /*
+   * The function uses an analytical method to find the shortest distance
+   * which is faster than the Newton-Raphson method, but has underflows at
+   * the moment.  Use Newton's method if you can see artifacts in the SDF.
+   */
+  static FT_Error
+  get_min_distance_conic( SDF_Edge*             conic,
+                          FT_26D6_Vec           point,
+                          SDF_Signed_Distance*  out )
+  {
+    /*
+     * The procedure to find the shortest distance from a point to a
+     * quadratic Bezier curve is similar to the line segment algorithm.  The
+     * shortest distance is perpendicular to the Bezier curve; the only
+     * difference from line is that there can be more than one
+     * perpendicular, and we also have to check the endpoints, because the
+     * perpendicular may not be the shortest.
+     *
+     * Let's assume that
+     * ```
+     * p0 = first endpoint
+     * p1 = control point
+     * p2 = second endpoint
+     * p  = point from which shortest distance is to be calculated
+     * ```
+     *
+     * (1) The equation of a quadratic Bezier curve can be written as
+     *
+     *     ```
+     *     B(t) = (1 - t)^2 * p0 + 2(1 - t)t * p1 + t^2 * p2
+     *     ```
+     *
+     *     with `t` a factor in the range [0.0f, 1.0f].  This equation can
+     *     be rewritten as
+     *
+     *     ```
+     *     B(t) = t^2 * (p0 - 2p1 + p2) + 2t * (p1 - p0) + p0
+     *     ```
+     *
+     *     With
+     *
+     *     ```
+     *     A = p0 - 2p1 + p2
+     *     B = p1 - p0
+     *     ```
+     *
+     *     we have
+     *
+     *     ```
+     *     B(t) = t^2 * A + 2t * B + p0
+     *     ```
+     *
+     * (2) The derivative of the last equation above is
+     *
+     *     ```
+     *     B'(t) = 2 *(tA + B)
+     *     ```
+     *
+     * (3) To find the shortest distance from `p` to `B(t)` we find the
+     *     point on the curve at which the shortest distance vector (i.e.,
+     *     `B(t) - p`) and the direction (i.e., `B'(t)`) make 90 degrees.
+     *     In other words, we make the dot product zero.
+     *
+     *     ```
+     *     (B(t) - p) . (B'(t)) = 0
+     *     (t^2 * A + 2t * B + p0 - p) . (2 * (tA + B)) = 0
+     *     ```
+     *
+     *     After simplifying we get a cubic equation
+     *
+     *     ```
+     *     at^3 + bt^2 + ct + d = 0
+     *     ```
+     *
+     *     with
+     *
+     *     ```
+     *     a = A.A
+     *     b = 3A.B
+     *     c = 2B.B + A.p0 - A.p
+     *     d = p0.B - p.B
+     *     ```
+     *
+     * (4) Now the roots of the equation can be computed using 'Cardano's
+     *     Cubic formula'; we clamp the roots in the range [0.0f, 1.0f].
+     *
+     * [note]: `B` and `B(t)` are different in the above equations.
+     */
+
+    FT_Error  error = FT_Err_Ok;
+
+    FT_26D6_Vec  aA, bB;         /* A, B in the above comment             */
+    FT_26D6_Vec  nearest_point;  /* point on curve nearest to `point`     */
+    FT_26D6_Vec  direction;      /* direction of curve at `nearest_point` */
+
+    FT_26D6_Vec  p0, p1, p2;     /* control points of a conic curve       */
+    FT_26D6_Vec  p;              /* `point` to which shortest distance    */
+
+    FT_26D6  a, b, c, d;         /* cubic coefficients                    */
+
+    FT_16D16  roots[3] = { 0, 0, 0 };    /* real roots of the cubic eq.   */
+    FT_16D16  min_factor;                /* factor at `nearest_point`     */
+    FT_16D16  cross;                     /* to determine the sign         */
+    FT_16D16  min      = FT_INT_MAX;     /* shortest squared distance     */
+
+    FT_UShort  num_roots;                /* number of real roots of cubic */
+    FT_UShort  i;
+
+
+    if ( !conic || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( conic->edge_type != SDF_EDGE_CONIC )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    p0 = conic->start_pos;
+    p1 = conic->control_a;
+    p2 = conic->end_pos;
+    p  = point;
+
+    /* compute substitution coefficients */
+    aA.x = p0.x - 2 * p1.x + p2.x;
+    aA.y = p0.y - 2 * p1.y + p2.y;
+
+    bB.x = p1.x - p0.x;
+    bB.y = p1.y - p0.y;
+
+    /* compute cubic coefficients */
+    a = VEC_26D6_DOT( aA, aA );
+
+    b = 3 * VEC_26D6_DOT( aA, bB );
+
+    c = 2 * VEC_26D6_DOT( bB, bB ) +
+            VEC_26D6_DOT( aA, p0 ) -
+            VEC_26D6_DOT( aA, p );
+
+    d = VEC_26D6_DOT( p0, bB ) -
+        VEC_26D6_DOT( p, bB );
+
+    /* find the roots */
+    num_roots = solve_cubic_equation( a, b, c, d, roots );
+
+    if ( num_roots == 0 )
+    {
+      roots[0]  = 0;
+      roots[1]  = FT_INT_16D16( 1 );
+      num_roots = 2;
+    }
+
+    /* [OPTIMIZATION]: Check the roots, clamp them and discard */
+    /*                 duplicate roots.                        */
+
+    /* convert these values to 16.16 for further computation */
+    aA.x = FT_26D6_16D16( aA.x );
+    aA.y = FT_26D6_16D16( aA.y );
+
+    bB.x = FT_26D6_16D16( bB.x );
+    bB.y = FT_26D6_16D16( bB.y );
+
+    p0.x = FT_26D6_16D16( p0.x );
+    p0.y = FT_26D6_16D16( p0.y );
+
+    p.x = FT_26D6_16D16( p.x );
+    p.y = FT_26D6_16D16( p.y );
+
+    for ( i = 0; i < num_roots; i++ )
+    {
+      FT_16D16  t    = roots[i];
+      FT_16D16  t2   = 0;
+      FT_16D16  dist = 0;
+
+      FT_16D16_Vec  curve_point;
+      FT_16D16_Vec  dist_vector;
+
+      /*
+       * Ideally we should discard the roots which are outside the range
+       * [0.0, 1.0] and check the endpoints of the Bezier curve, but Behdad
+       * Esfahbod proved the following lemma.
+       *
+       * Lemma:
+       *
+       * (1) If the closest point on the curve [0, 1] is to the endpoint at
+       *     `t` = 1 and the cubic has no real roots at `t` = 1 then the
+       *     cubic must have a real root at some `t` > 1.
+       *
+       * (2) Similarly, if the closest point on the curve [0, 1] is to the
+       *     endpoint at `t` = 0 and the cubic has no real roots at `t` = 0
+       *     then the cubic must have a real root at some `t` < 0.
+       *
+       * Now because of this lemma we only need to clamp the roots and that
+       * will take care of the endpoints.
+       *
+       * For more details see
+       *
+       *   https://lists.nongnu.org/archive/html/freetype-devel/2020-06/msg00147.html
+       */
+
+      if ( t < 0 )
+        t = 0;
+      if ( t > FT_INT_16D16( 1 ) )
+        t = FT_INT_16D16( 1 );
+
+      t2 = FT_MulFix( t, t );
+
+      /* B(t) = t^2 * A + 2t * B + p0 - p */
+      curve_point.x = FT_MulFix( aA.x, t2 ) +
+                      2 * FT_MulFix( bB.x, t ) + p0.x;
+      curve_point.y = FT_MulFix( aA.y, t2 ) +
+                      2 * FT_MulFix( bB.y, t ) + p0.y;
+
+      /* `curve_point` - `p` */
+      dist_vector.x = curve_point.x - p.x;
+      dist_vector.y = curve_point.y - p.y;
+
+      dist = VECTOR_LENGTH_16D16( dist_vector );
+
+      if ( dist < min )
+      {
+        min           = dist;
+        nearest_point = curve_point;
+        min_factor    = t;
+      }
+    }
+
+    /* B'(t) = 2 * (tA + B) */
+    direction.x = 2 * FT_MulFix( aA.x, min_factor ) + 2 * bB.x;
+    direction.y = 2 * FT_MulFix( aA.y, min_factor ) + 2 * bB.y;
+
+    /* determine the sign */
+    cross = FT_MulFix( nearest_point.x - p.x, direction.y ) -
+            FT_MulFix( nearest_point.y - p.y, direction.x );
+
+    /* assign the values */
+    out->distance = min;
+    out->sign     = cross < 0 ? 1 : -1;
+
+    if ( min_factor != 0 && min_factor != FT_INT_16D16( 1 ) )
+      out->cross = FT_INT_16D16( 1 );   /* the two are perpendicular */
+    else
+    {
+      /* convert to nearest vector */
+      nearest_point.x -= FT_26D6_16D16( p.x );
+      nearest_point.y -= FT_26D6_16D16( p.y );
+
+      /* compute `cross` if not perpendicular */
+      FT_Vector_NormLen( &direction );
+      FT_Vector_NormLen( &nearest_point );
+
+      out->cross = FT_MulFix( direction.x, nearest_point.y ) -
+                   FT_MulFix( direction.y, nearest_point.x );
+    }
+
+  Exit:
+    return error;
+  }
+
+#else /* USE_NEWTON_FOR_CONIC */
+
+  /*
+   * The function uses Newton's approximation to find the shortest distance,
+   * which is a bit slower than the analytical method but doesn't cause
+   * underflow.
+   */
+  static FT_Error
+  get_min_distance_conic( SDF_Edge*             conic,
+                          FT_26D6_Vec           point,
+                          SDF_Signed_Distance*  out )
+  {
+    /*
+     * This method uses Newton-Raphson's approximation to find the shortest
+     * distance from a point to a conic curve.  It does not involve solving
+     * any cubic equation, that is why there is no risk of underflow.
+     *
+     * Let's assume that
+     *
+     * ```
+     * p0 = first endpoint
+     * p1 = control point
+     * p3 = second endpoint
+     * p  = point from which shortest distance is to be calculated
+     * ```
+     *
+     * (1) The equation of a quadratic Bezier curve can be written as
+     *
+     *     ```
+     *     B(t) = (1 - t)^2 * p0 + 2(1 - t)t * p1 + t^2 * p2
+     *     ```
+     *
+     *     with `t` the factor in the range [0.0f, 1.0f].  The above
+     *     equation can be rewritten as
+     *
+     *     ```
+     *     B(t) = t^2 * (p0 - 2p1 + p2) + 2t * (p1 - p0) + p0
+     *     ```
+     *
+     *     With
+     *
+     *     ```
+     *     A = p0 - 2p1 + p2
+     *     B = 2 * (p1 - p0)
+     *     ```
+     *
+     *     we have
+     *
+     *     ```
+     *     B(t) = t^2 * A + t * B + p0
+     *     ```
+     *
+     * (2) The derivative of the above equation is
+     *
+     *     ```
+     *     B'(t) = 2t * A + B
+     *     ```
+     *
+     * (3) The second derivative of the above equation is
+     *
+     *     ```
+     *     B''(t) = 2A
+     *     ```
+     *
+     * (4) The equation `P(t)` of the distance from point `p` to the curve
+     *     can be written as
+     *
+     *     ```
+     *     P(t) = t^2 * A + t^2 * B + p0 - p
+     *     ```
+     *
+     *     With
+     *
+     *     ```
+     *     C = p0 - p
+     *     ```
+     *
+     *     we have
+     *
+     *     ```
+     *     P(t) = t^2 * A + t * B + C
+     *     ```
+     *
+     * (5) Finally, the equation of the angle between `B(t)` and `P(t)` can
+     *     be written as
+     *
+     *     ```
+     *     Q(t) = P(t) . B'(t)
+     *     ```
+     *
+     * (6) Our task is to find a value of `t` such that the above equation
+     *     `Q(t)` becomes zero, this is, the point-to-curve vector makes
+     *     90~degrees with the curve.  We solve this with the Newton-Raphson
+     *     method.
+     *
+     * (7) We first assume an arbitary value of factor `t`, which we then
+     *     improve.
+     *
+     *     ```
+     *     t := Q(t) / Q'(t)
+     *     ```
+     *
+     *     Putting the value of `Q(t)` from the above equation gives
+     *
+     *     ```
+     *     t := P(t) . B'(t) / derivative(P(t) . B'(t))
+     *     t := P(t) . B'(t) /
+     *            (P'(t) . B'(t) + P(t) . B''(t))
+     *     ```
+     *
+     *     Note that `P'(t)` is the same as `B'(t)` because the constant is
+     *     gone due to the derivative.
+     *
+     * (8) Finally we get the equation to improve the factor as
+     *
+     *     ```
+     *     t := P(t) . B'(t) /
+     *            (B'(t) . B'(t) + P(t) . B''(t))
+     *     ```
+     *
+     * [note]: `B` and `B(t)` are different in the above equations.
+     */
+
+    FT_Error  error = FT_Err_Ok;
+
+    FT_26D6_Vec  aA, bB, cC;     /* A, B, C in the above comment          */
+    FT_26D6_Vec  nearest_point;  /* point on curve nearest to `point`     */
+    FT_26D6_Vec  direction;      /* direction of curve at `nearest_point` */
+
+    FT_26D6_Vec  p0, p1, p2;     /* control points of a conic curve       */
+    FT_26D6_Vec  p;              /* `point` to which shortest distance    */
+
+    FT_16D16  min_factor = 0;            /* factor at `nearest_point'     */
+    FT_16D16  cross;                     /* to determine the sign         */
+    FT_16D16  min        = FT_INT_MAX;   /* shortest squared distance     */
+
+    FT_UShort  iterations;
+    FT_UShort  steps;
+
+
+    if ( !conic || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( conic->edge_type != SDF_EDGE_CONIC )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    p0 = conic->start_pos;
+    p1 = conic->control_a;
+    p2 = conic->end_pos;
+    p  = point;
+
+    /* compute substitution coefficients */
+    aA.x = p0.x - 2 * p1.x + p2.x;
+    aA.y = p0.y - 2 * p1.y + p2.y;
+
+    bB.x = 2 * ( p1.x - p0.x );
+    bB.y = 2 * ( p1.y - p0.y );
+
+    cC.x = p0.x;
+    cC.y = p0.y;
+
+    /* do Newton's iterations */
+    for ( iterations = 0; iterations <= MAX_NEWTON_DIVISIONS; iterations++ )
+    {
+      FT_16D16  factor = FT_INT_16D16( iterations ) / MAX_NEWTON_DIVISIONS;
+      FT_16D16  factor2;
+      FT_16D16  length;
+
+      FT_16D16_Vec  curve_point; /* point on the curve  */
+      FT_16D16_Vec  dist_vector; /* `curve_point` - `p` */
+
+      FT_26D6_Vec  d1;           /* first  derivative   */
+      FT_26D6_Vec  d2;           /* second derivative   */
+
+      FT_16D16  temp1;
+      FT_16D16  temp2;
+
+
+      for ( steps = 0; steps < MAX_NEWTON_STEPS; steps++ )
+      {
+        factor2 = FT_MulFix( factor, factor );
+
+        /* B(t) = t^2 * A + t * B + p0 */
+        curve_point.x = FT_MulFix( aA.x, factor2 ) +
+                        FT_MulFix( bB.x, factor ) + cC.x;
+        curve_point.y = FT_MulFix( aA.y, factor2 ) +
+                        FT_MulFix( bB.y, factor ) + cC.y;
+
+        /* convert to 16.16 */
+        curve_point.x = FT_26D6_16D16( curve_point.x );
+        curve_point.y = FT_26D6_16D16( curve_point.y );
+
+        /* P(t) in the comment */
+        dist_vector.x = curve_point.x - FT_26D6_16D16( p.x );
+        dist_vector.y = curve_point.y - FT_26D6_16D16( p.y );
+
+        length = VECTOR_LENGTH_16D16( dist_vector );
+
+        if ( length < min )
+        {
+          min           = length;
+          min_factor    = factor;
+          nearest_point = curve_point;
+        }
+
+        /* This is Newton's approximation.          */
+        /*                                          */
+        /*   t := P(t) . B'(t) /                    */
+        /*          (B'(t) . B'(t) + P(t) . B''(t)) */
+
+        /* B'(t) = 2tA + B */
+        d1.x = FT_MulFix( aA.x, 2 * factor ) + bB.x;
+        d1.y = FT_MulFix( aA.y, 2 * factor ) + bB.y;
+
+        /* B''(t) = 2A */
+        d2.x = 2 * aA.x;
+        d2.y = 2 * aA.y;
+
+        dist_vector.x /= 1024;
+        dist_vector.y /= 1024;
+
+        /* temp1 = P(t) . B'(t) */
+        temp1 = VEC_26D6_DOT( dist_vector, d1 );
+
+        /* temp2 = B'(t) . B'(t) + P(t) . B''(t) */
+        temp2 = VEC_26D6_DOT( d1, d1 ) +
+                VEC_26D6_DOT( dist_vector, d2 );
+
+        factor -= FT_DivFix( temp1, temp2 );
+
+        if ( factor < 0 || factor > FT_INT_16D16( 1 ) )
+          break;
+      }
+    }
+
+    /* B'(t) = 2t * A + B */
+    direction.x = 2 * FT_MulFix( aA.x, min_factor ) + bB.x;
+    direction.y = 2 * FT_MulFix( aA.y, min_factor ) + bB.y;
+
+    /* determine the sign */
+    cross = FT_MulFix( nearest_point.x - FT_26D6_16D16( p.x ),
+                       direction.y )                           -
+            FT_MulFix( nearest_point.y - FT_26D6_16D16( p.y ),
+                       direction.x );
+
+    /* assign the values */
+    out->distance = min;
+    out->sign     = cross < 0 ? 1 : -1;
+
+    if ( min_factor != 0 && min_factor != FT_INT_16D16( 1 ) )
+      out->cross = FT_INT_16D16( 1 );   /* the two are perpendicular */
+    else
+    {
+      /* convert to nearest vector */
+      nearest_point.x -= FT_26D6_16D16( p.x );
+      nearest_point.y -= FT_26D6_16D16( p.y );
+
+      /* compute `cross` if not perpendicular */
+      FT_Vector_NormLen( &direction );
+      FT_Vector_NormLen( &nearest_point );
+
+      out->cross = FT_MulFix( direction.x, nearest_point.y ) -
+                   FT_MulFix( direction.y, nearest_point.x );
+    }
+
+  Exit:
+    return error;
+  }
+
+
+#endif /* USE_NEWTON_FOR_CONIC */
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   get_min_distance_cubic
+   *
+   * @Description:
+   *   Find the shortest distance from the `cubic` Bezier curve to a given
+   *   `point` and assigns it to `out`.  Use it for cubic curves only.
+   *
+   * @Input:
+   *   cubic ::
+   *     The cubic Bezier curve to which the shortest distance is to be
+   *     computed.
+   *
+   *   point ::
+   *     Point from which the shortest distance is to be computed.
+   *
+   * @Output:
+   *   out ::
+   *     Signed distance from `point` to `cubic`.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   * @Note:
+   *   The function uses Newton's approximation to find the shortest
+   *   distance.  Another way would be to divide the cubic into conic or
+   *   subdivide the curve into lines, but that is not implemented.
+   *
+   *   The `cubic` parameter must have an edge type of `SDF_EDGE_CUBIC`.
+   *
+   */
+  static FT_Error
+  get_min_distance_cubic( SDF_Edge*             cubic,
+                          FT_26D6_Vec           point,
+                          SDF_Signed_Distance*  out )
+  {
+    /*
+     * The procedure to find the shortest distance from a point to a cubic
+     * Bezier curve is similar to quadratic curve algorithm.  The only
+     * difference is that while calculating factor `t`, instead of a cubic
+     * polynomial equation we have to find the roots of a 5th degree
+     * polynomial equation.  Solving this would require a significant amount
+     * of time, and still the results may not be accurate.  We are thus
+     * going to directly approximate the value of `t` using the Newton-Raphson
+     * method.
+     *
+     * Let's assume that
+     *
+     * ```
+     * p0 = first endpoint
+     * p1 = first control point
+     * p2 = second control point
+     * p3 = second endpoint
+     * p  = point from which shortest distance is to be calculated
+     * ```
+     *
+     * (1) The equation of a cubic Bezier curve can be written as
+     *
+     *     ```
+     *     B(t) = (1 - t)^3 * p0 + 3(1 - t)^2 t * p1 +
+     *              3(1 - t)t^2 * p2 + t^3 * p3
+     *     ```
+     *
+     *     The equation can be expanded and written as
+     *
+     *     ```
+     *     B(t) = t^3 * (-p0 + 3p1 - 3p2 + p3) +
+     *              3t^2 * (p0 - 2p1 + p2) + 3t * (-p0 + p1) + p0
+     *     ```
+     *
+     *     With
+     *
+     *     ```
+     *     A = -p0 + 3p1 - 3p2 + p3
+     *     B = 3(p0 - 2p1 + p2)
+     *     C = 3(-p0 + p1)
+     *     ```
+     *
+     *     we have
+     *
+     *     ```
+     *     B(t) = t^3 * A + t^2 * B + t * C + p0
+     *     ```
+     *
+     * (2) The derivative of the above equation is
+     *
+     *     ```
+     *     B'(t) = 3t^2 * A + 2t * B + C
+     *     ```
+     *
+     * (3) The second derivative of the above equation is
+     *
+     *     ```
+     *     B''(t) = 6t * A + 2B
+     *     ```
+     *
+     * (4) The equation `P(t)` of the distance from point `p` to the curve
+     *     can be written as
+     *
+     *     ```
+     *     P(t) = t^3 * A + t^2 * B + t * C + p0 - p
+     *     ```
+     *
+     *     With
+     *
+     *     ```
+     *     D = p0 - p
+     *     ```
+     *
+     *     we have
+     *
+     *     ```
+     *     P(t) = t^3 * A + t^2 * B + t * C + D
+     *     ```
+     *
+     * (5) Finally the equation of the angle between `B(t)` and `P(t)` can
+     *     be written as
+     *
+     *     ```
+     *     Q(t) = P(t) . B'(t)
+     *     ```
+     *
+     * (6) Our task is to find a value of `t` such that the above equation
+     *     `Q(t)` becomes zero, this is, the point-to-curve vector makes
+     *     90~degree with curve.  We solve this with the Newton-Raphson
+     *     method.
+     *
+     * (7) We first assume an arbitary value of factor `t`, which we then
+     *     improve.
+     *
+     *     ```
+     *     t := Q(t) / Q'(t)
+     *     ```
+     *
+     *     Putting the value of `Q(t)` from the above equation gives
+     *
+     *     ```
+     *     t := P(t) . B'(t) / derivative(P(t) . B'(t))
+     *     t := P(t) . B'(t) /
+     *            (P'(t) . B'(t) + P(t) . B''(t))
+     *     ```
+     *
+     *     Note that `P'(t)` is the same as `B'(t)` because the constant is
+     *     gone due to the derivative.
+     *
+     * (8) Finally we get the equation to improve the factor as
+     *
+     *     ```
+     *     t := P(t) . B'(t) /
+     *            (B'(t) . B'( t ) + P(t) . B''(t))
+     *     ```
+     *
+     * [note]: `B` and `B(t)` are different in the above equations.
+     */
+
+    FT_Error  error = FT_Err_Ok;
+
+    FT_26D6_Vec   aA, bB, cC, dD; /* A, B, C in the above comment          */
+    FT_16D16_Vec  nearest_point;  /* point on curve nearest to `point`     */
+    FT_16D16_Vec  direction;      /* direction of curve at `nearest_point` */
+
+    FT_26D6_Vec  p0, p1, p2, p3;  /* control points of a cubic curve       */
+    FT_26D6_Vec  p;               /* `point` to which shortest distance    */
+
+    FT_16D16  min_factor    = 0;            /* factor at shortest distance */
+    FT_16D16  min_factor_sq = 0;            /* factor at shortest distance */
+    FT_16D16  cross;                        /* to determine the sign       */
+    FT_16D16  min           = FT_INT_MAX;   /* shortest distance           */
+
+    FT_UShort  iterations;
+    FT_UShort  steps;
+
+
+    if ( !cubic || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( cubic->edge_type != SDF_EDGE_CUBIC )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    p0 = cubic->start_pos;
+    p1 = cubic->control_a;
+    p2 = cubic->control_b;
+    p3 = cubic->end_pos;
+    p  = point;
+
+    /* compute substitution coefficients */
+    aA.x = -p0.x + 3 * ( p1.x - p2.x ) + p3.x;
+    aA.y = -p0.y + 3 * ( p1.y - p2.y ) + p3.y;
+
+    bB.x = 3 * ( p0.x - 2 * p1.x + p2.x );
+    bB.y = 3 * ( p0.y - 2 * p1.y + p2.y );
+
+    cC.x = 3 * ( p1.x - p0.x );
+    cC.y = 3 * ( p1.y - p0.y );
+
+    dD.x = p0.x;
+    dD.y = p0.y;
+
+    for ( iterations = 0; iterations <= MAX_NEWTON_DIVISIONS; iterations++ )
+    {
+      FT_16D16  factor  = FT_INT_16D16( iterations ) / MAX_NEWTON_DIVISIONS;
+
+      FT_16D16  factor2;         /* factor^2            */
+      FT_16D16  factor3;         /* factor^3            */
+      FT_16D16  length;
+
+      FT_16D16_Vec  curve_point; /* point on the curve  */
+      FT_16D16_Vec  dist_vector; /* `curve_point' - `p' */
+
+      FT_26D6_Vec  d1;           /* first  derivative   */
+      FT_26D6_Vec  d2;           /* second derivative   */
+
+      FT_16D16  temp1;
+      FT_16D16  temp2;
+
+
+      for ( steps = 0; steps < MAX_NEWTON_STEPS; steps++ )
+      {
+        factor2 = FT_MulFix( factor, factor );
+        factor3 = FT_MulFix( factor2, factor );
+
+        /* B(t) = t^3 * A + t^2 * B + t * C + D */
+        curve_point.x = FT_MulFix( aA.x, factor3 ) +
+                        FT_MulFix( bB.x, factor2 ) +
+                        FT_MulFix( cC.x, factor ) + dD.x;
+        curve_point.y = FT_MulFix( aA.y, factor3 ) +
+                        FT_MulFix( bB.y, factor2 ) +
+                        FT_MulFix( cC.y, factor ) + dD.y;
+
+        /* convert to 16.16 */
+        curve_point.x = FT_26D6_16D16( curve_point.x );
+        curve_point.y = FT_26D6_16D16( curve_point.y );
+
+        /* P(t) in the comment */
+        dist_vector.x = curve_point.x - FT_26D6_16D16( p.x );
+        dist_vector.y = curve_point.y - FT_26D6_16D16( p.y );
+
+        length = VECTOR_LENGTH_16D16( dist_vector );
+
+        if ( length < min )
+        {
+          min           = length;
+          min_factor    = factor;
+          min_factor_sq = factor2;
+          nearest_point = curve_point;
+        }
+
+        /* This the Newton's approximation.         */
+        /*                                          */
+        /*   t := P(t) . B'(t) /                    */
+        /*          (B'(t) . B'(t) + P(t) . B''(t)) */
+
+        /* B'(t) = 3t^2 * A + 2t * B + C */
+        d1.x = FT_MulFix( aA.x, 3 * factor2 ) +
+               FT_MulFix( bB.x, 2 * factor ) + cC.x;
+        d1.y = FT_MulFix( aA.y, 3 * factor2 ) +
+               FT_MulFix( bB.y, 2 * factor ) + cC.y;
+
+        /* B''(t) = 6t * A + 2B */
+        d2.x = FT_MulFix( aA.x, 6 * factor ) + 2 * bB.x;
+        d2.y = FT_MulFix( aA.y, 6 * factor ) + 2 * bB.y;
+
+        dist_vector.x /= 1024;
+        dist_vector.y /= 1024;
+
+        /* temp1 = P(t) . B'(t) */
+        temp1 = VEC_26D6_DOT( dist_vector, d1 );
+
+        /* temp2 = B'(t) . B'(t) + P(t) . B''(t) */
+        temp2 = VEC_26D6_DOT( d1, d1 ) +
+                VEC_26D6_DOT( dist_vector, d2 );
+
+        factor -= FT_DivFix( temp1, temp2 );
+
+        if ( factor < 0 || factor > FT_INT_16D16( 1 ) )
+          break;
+      }
+    }
+
+    /* B'(t) = 3t^2 * A + 2t * B + C */
+    direction.x = FT_MulFix( aA.x, 3 * min_factor_sq ) +
+                  FT_MulFix( bB.x, 2 * min_factor ) + cC.x;
+    direction.y = FT_MulFix( aA.y, 3 * min_factor_sq ) +
+                  FT_MulFix( bB.y, 2 * min_factor ) + cC.y;
+
+    /* determine the sign */
+    cross = FT_MulFix( nearest_point.x - FT_26D6_16D16( p.x ),
+                       direction.y )                           -
+            FT_MulFix( nearest_point.y - FT_26D6_16D16( p.y ),
+                       direction.x );
+
+    /* assign the values */
+    out->distance = min;
+    out->sign     = cross < 0 ? 1 : -1;
+
+    if ( min_factor != 0 && min_factor != FT_INT_16D16( 1 ) )
+      out->cross = FT_INT_16D16( 1 );   /* the two are perpendicular */
+    else
+    {
+      /* convert to nearest vector */
+      nearest_point.x -= FT_26D6_16D16( p.x );
+      nearest_point.y -= FT_26D6_16D16( p.y );
+
+      /* compute `cross` if not perpendicular */
+      FT_Vector_NormLen( &direction );
+      FT_Vector_NormLen( &nearest_point );
+
+      out->cross = FT_MulFix( direction.x, nearest_point.y ) -
+                   FT_MulFix( direction.y, nearest_point.x );
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   sdf_edge_get_min_distance
+   *
+   * @Description:
+   *   Find shortest distance from `point` to any type of `edge`.  It checks
+   *   the edge type and then calls the relevant `get_min_distance_*`
+   *   function.
+   *
+   * @Input:
+   *   edge ::
+   *     An edge to which the shortest distance is to be computed.
+   *
+   *   point ::
+   *     Point from which the shortest distance is to be computed.
+   *
+   * @Output:
+   *   out ::
+   *     Signed distance from `point` to `edge`.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  sdf_edge_get_min_distance( SDF_Edge*             edge,
+                             FT_26D6_Vec           point,
+                             SDF_Signed_Distance*  out )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+
+    if ( !edge || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* edge-specific distance calculation */
+    switch ( edge->edge_type )
+    {
+    case SDF_EDGE_LINE:
+      get_min_distance_line( edge, point, out );
+      break;
+
+    case SDF_EDGE_CONIC:
+      get_min_distance_conic( edge, point, out );
+      break;
+
+    case SDF_EDGE_CUBIC:
+      get_min_distance_cubic( edge, point, out );
+      break;
+
+    default:
+      error = FT_THROW( Invalid_Argument );
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* `sdf_generate' is not used at the moment */
+#if 0
+
+  #error "DO NOT USE THIS!"
+  #error "The function still outputs 16-bit data, which might cause memory"
+  #error "corruption.  If required I will add this later."
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   sdf_contour_get_min_distance
+   *
+   * @Description:
+   *   Iterate over all edges that make up the contour, find the shortest
+   *   distance from a point to this contour, and assigns result to `out`.
+   *
+   * @Input:
+   *   contour ::
+   *     A contour to which the shortest distance is to be computed.
+   *
+   *   point ::
+   *     Point from which the shortest distance is to be computed.
+   *
+   * @Output:
+   *   out ::
+   *     Signed distance from the `point' to the `contour'.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   * @Note:
+   *   The function does not return a signed distance for each edge which
+   *   makes up the contour, it simply returns the shortest of all the
+   *   edges.
+   *
+   */
+  static FT_Error
+  sdf_contour_get_min_distance( SDF_Contour*          contour,
+                                FT_26D6_Vec           point,
+                                SDF_Signed_Distance*  out )
+  {
+    FT_Error             error    = FT_Err_Ok;
+    SDF_Signed_Distance  min_dist = max_sdf;
+    SDF_Edge*            edge_list;
+
+
+    if ( !contour || !out )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    edge_list = contour->edges;
+
+    /* iterate over all the edges manually */
+    while ( edge_list )
+    {
+      SDF_Signed_Distance  current_dist = max_sdf;
+      FT_16D16             diff;
+
+
+      FT_CALL( sdf_edge_get_min_distance( edge_list,
+                                          point,
+                                          &current_dist ) );
+
+      if ( current_dist.distance >= 0 )
+      {
+        diff = current_dist.distance - min_dist.distance;
+
+
+        if ( FT_ABS( diff ) < CORNER_CHECK_EPSILON )
+          min_dist = resolve_corner( min_dist, current_dist );
+        else if ( diff < 0 )
+          min_dist = current_dist;
+      }
+      else
+        FT_TRACE0(( "sdf_contour_get_min_distance: Overflow.\n" ));
+
+      edge_list = edge_list->next;
+    }
+
+    *out = min_dist;
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   sdf_generate
+   *
+   * @Description:
+   *   This is the main function that is responsible for generating signed
+   *   distance fields.  The function does not align or compute the size of
+   *   `bitmap`; therefore the calling application must set up `bitmap`
+   *   properly and transform the `shape' appropriately in advance.
+   *
+   *   Currently we check all pixels against all contours and all edges.
+   *
+   * @Input:
+   *   internal_params ::
+   *     Internal parameters and properties required by the rasterizer.  See
+   *     @SDF_Params for more.
+   *
+   *   shape ::
+   *     A complete shape which is used to generate SDF.
+   *
+   *   spread ::
+   *     Maximum distances to be allowed in the output bitmap.
+   *
+   * @Output:
+   *   bitmap ::
+   *     The output bitmap which will contain the SDF information.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  sdf_generate( const SDF_Params  internal_params,
+                const SDF_Shape*  shape,
+                FT_UInt           spread,
+                const FT_Bitmap*  bitmap )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+    FT_UInt  width = 0;
+    FT_UInt  rows  = 0;
+    FT_UInt  x     = 0;   /* used to loop in x direction, i.e., width     */
+    FT_UInt  y     = 0;   /* used to loop in y direction, i.e., rows      */
+    FT_UInt  sp_sq = 0;   /* `spread` [* `spread`] as a 16.16 fixed value */
+
+    FT_Short*  buffer;
+
+
+    if ( !shape || !bitmap )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( spread < MIN_SPREAD || spread > MAX_SPREAD )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    width  = bitmap->width;
+    rows   = bitmap->rows;
+    buffer = (FT_Short*)bitmap->buffer;
+
+    if ( USE_SQUARED_DISTANCES )
+      sp_sq = FT_INT_16D16( spread * spread );
+    else
+      sp_sq = FT_INT_16D16( spread );
+
+    if ( width == 0 || rows == 0 )
+    {
+      FT_TRACE0(( "sdf_generate:"
+                  " Cannot render glyph with width/height == 0\n" ));
+      FT_TRACE0(( "             "
+                  " (width, height provided [%d, %d])\n",
+                  width, rows ));
+
+      error = FT_THROW( Cannot_Render_Glyph );
+      goto Exit;
+    }
+
+    /* loop over all rows */
+    for ( y = 0; y < rows; y++ )
+    {
+      /* loop over all pixels of a row */
+      for ( x = 0; x < width; x++ )
+      {
+        /* `grid_point` is the current pixel position; */
+        /* our task is to find the shortest distance   */
+        /* from this point to the entire shape.        */
+        FT_26D6_Vec          grid_point = zero_vector;
+        SDF_Signed_Distance  min_dist   = max_sdf;
+        SDF_Contour*         contour_list;
+
+        FT_UInt   index;
+        FT_Short  value;
+
+
+        grid_point.x = FT_INT_26D6( x );
+        grid_point.y = FT_INT_26D6( y );
+
+        /* This `grid_point' is at the corner, but we */
+        /* use the center of the pixel.               */
+        grid_point.x += FT_INT_26D6( 1 ) / 2;
+        grid_point.y += FT_INT_26D6( 1 ) / 2;
+
+        contour_list = shape->contours;
+
+        /* iterate over all contours manually */
+        while ( contour_list )
+        {
+          SDF_Signed_Distance  current_dist = max_sdf;
+
+
+          FT_CALL( sdf_contour_get_min_distance( contour_list,
+                                                 grid_point,
+                                                 &current_dist ) );
+
+          if ( current_dist.distance < min_dist.distance )
+            min_dist = current_dist;
+
+          contour_list = contour_list->next;
+        }
+
+        /* [OPTIMIZATION]: if (min_dist > sp_sq) then simply clamp  */
+        /*                 the value to spread to avoid square_root */
+
+        /* clamp the values to spread */
+        if ( min_dist.distance > sp_sq )
+          min_dist.distance = sp_sq;
+
+        /* square_root the values and fit in a 6.10 fixed point */
+        if ( USE_SQUARED_DISTANCES )
+          min_dist.distance = square_root( min_dist.distance );
+
+        if ( internal_params.orientation == FT_ORIENTATION_FILL_LEFT )
+          min_dist.sign = -min_dist.sign;
+        if ( internal_params.flip_sign )
+          min_dist.sign = -min_dist.sign;
+
+        min_dist.distance /= 64; /* convert from 16.16 to 22.10 */
+
+        value  = min_dist.distance & 0x0000FFFF; /* truncate to 6.10 */
+        value *= min_dist.sign;
+
+        if ( internal_params.flip_y )
+          index = y * width + x;
+        else
+          index = ( rows - y - 1 ) * width + x;
+
+        buffer[index] = value;
+      }
+    }
+
+  Exit:
+    return error;
+  }
+
+#endif /* 0 */
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   sdf_generate_bounding_box
+   *
+   * @Description:
+   *   This function does basically the same thing as `sdf_generate` above
+   *   but more efficiently.
+   *
+   *   Instead of checking all pixels against all edges, we loop over all
+   *   edges and only check pixels around the control box of the edge; the
+   *   control box is increased by the spread in all directions.  Anything
+   *   outside of the control box that exceeds `spread` doesn't need to be
+   *   computed.
+   *
+   *   Lastly, to determine the sign of unchecked pixels, we do a single
+   *   pass of all rows starting with a '+' sign and flipping when we come
+   *   across a '-' sign and continue.  This also eliminates the possibility
+   *   of overflow because we only check the proximity of the curve.
+   *   Therefore we can use squared distanced safely.
+   *
+   * @Input:
+   *   internal_params ::
+   *     Internal parameters and properties required by the rasterizer.
+   *     See @SDF_Params for more.
+   *
+   *   shape ::
+   *     A complete shape which is used to generate SDF.
+   *
+   *   spread ::
+   *     Maximum distances to be allowed in the output bitmap.
+   *
+   * @Output:
+   *   bitmap ::
+   *     The output bitmap which will contain the SDF information.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  sdf_generate_bounding_box( const SDF_Params  internal_params,
+                             const SDF_Shape*  shape,
+                             FT_UInt           spread,
+                             const FT_Bitmap*  bitmap )
+  {
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = NULL;
+
+    FT_Int  width, rows, i, j;
+    FT_Int  sp_sq;            /* max value to check   */
+
+    SDF_Contour*   contours;  /* list of all contours */
+    FT_SDFFormat*  buffer;    /* the bitmap buffer    */
+
+    /* This buffer has the same size in indices as the    */
+    /* bitmap buffer.  When we check a pixel position for */
+    /* a shortest distance we keep it in this buffer.     */
+    /* This way we can find out which pixel is set,       */
+    /* and also determine the signs properly.             */
+    SDF_Signed_Distance*  dists = NULL;
+
+    const FT_16D16  fixed_spread = FT_INT_16D16( spread );
+
+
+    if ( !shape || !bitmap )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( spread < MIN_SPREAD || spread > MAX_SPREAD )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    memory = shape->memory;
+    if ( !memory )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( FT_ALLOC( dists,
+                   bitmap->width * bitmap->rows * sizeof ( *dists ) ) )
+      goto Exit;
+
+    contours = shape->contours;
+    width    = (FT_Int)bitmap->width;
+    rows     = (FT_Int)bitmap->rows;
+    buffer   = (FT_SDFFormat*)bitmap->buffer;
+
+    if ( USE_SQUARED_DISTANCES )
+      sp_sq = FT_INT_16D16( (FT_Int)( spread * spread ) );
+    else
+      sp_sq = fixed_spread;
+
+    if ( width == 0 || rows == 0 )
+    {
+      FT_TRACE0(( "sdf_generate:"
+                  " Cannot render glyph with width/height == 0\n" ));
+      FT_TRACE0(( "             "
+                  " (width, height provided [%d, %d])", width, rows ));
+
+      error = FT_THROW( Cannot_Render_Glyph );
+      goto Exit;
+    }
+
+    /* loop over all contours */
+    while ( contours )
+    {
+      SDF_Edge*  edges = contours->edges;
+
+
+      /* loop over all edges */
+      while ( edges )
+      {
+        FT_CBox  cbox;
+        FT_Int   x, y;
+
+
+        /* get the control box and increase it by `spread' */
+        cbox = get_control_box( *edges );
+
+        cbox.xMin = ( cbox.xMin - 63 ) / 64 - ( FT_Pos )spread;
+        cbox.xMax = ( cbox.xMax + 63 ) / 64 + ( FT_Pos )spread;
+        cbox.yMin = ( cbox.yMin - 63 ) / 64 - ( FT_Pos )spread;
+        cbox.yMax = ( cbox.yMax + 63 ) / 64 + ( FT_Pos )spread;
+
+        /* now loop over the pixels in the control box. */
+        for ( y = cbox.yMin; y < cbox.yMax; y++ )
+        {
+          for ( x = cbox.xMin; x < cbox.xMax; x++ )
+          {
+            FT_26D6_Vec          grid_point = zero_vector;
+            SDF_Signed_Distance  dist       = max_sdf;
+            FT_UInt              index      = 0;
+            FT_16D16             diff       = 0;
+
+
+            if ( x < 0 || x >= width )
+              continue;
+            if ( y < 0 || y >= rows )
+              continue;
+
+            grid_point.x = FT_INT_26D6( x );
+            grid_point.y = FT_INT_26D6( y );
+
+            /* This `grid_point` is at the corner, but we */
+            /* use the center of the pixel.               */
+            grid_point.x += FT_INT_26D6( 1 ) / 2;
+            grid_point.y += FT_INT_26D6( 1 ) / 2;
+
+            FT_CALL( sdf_edge_get_min_distance( edges,
+                                                grid_point,
+                                                &dist ) );
+
+            if ( internal_params.orientation == FT_ORIENTATION_FILL_LEFT )
+              dist.sign = -dist.sign;
+
+            /* ignore if the distance is greater than spread;       */
+            /* otherwise it creates artifacts due to the wrong sign */
+            if ( dist.distance > sp_sq )
+              continue;
+
+            /* take the square root of the distance if required */
+            if ( USE_SQUARED_DISTANCES )
+              dist.distance = square_root( dist.distance );
+
+            if ( internal_params.flip_y )
+              index = (FT_UInt)( y * width + x );
+            else
+              index = (FT_UInt)( ( rows - y - 1 ) * width + x );
+
+            /* check whether the pixel is set or not */
+            if ( dists[index].sign == 0 )
+              dists[index] = dist;
+            else
+            {
+              diff = FT_ABS( dists[index].distance - dist.distance );
+
+              if ( diff <= CORNER_CHECK_EPSILON )
+                dists[index] = resolve_corner( dists[index], dist );
+              else if ( dists[index].distance > dist.distance )
+                dists[index] = dist;
+            }
+          }
+        }
+
+        edges = edges->next;
+      }
+
+      contours = contours->next;
+    }
+
+    /* final pass */
+    for ( j = 0; j < rows; j++ )
+    {
+      /* We assume the starting pixel of each row is outside. */
+      FT_Char  current_sign = -1;
+      FT_UInt  index;
+
+
+      if ( internal_params.overload_sign != 0 )
+        current_sign = internal_params.overload_sign < 0 ? -1 : 1;
+
+      for ( i = 0; i < width; i++ )
+      {
+        index = (FT_UInt)( j * width + i );
+
+        /* if the pixel is not set                     */
+        /* its shortest distance is more than `spread` */
+        if ( dists[index].sign == 0 )
+          dists[index].distance = fixed_spread;
+        else
+          current_sign = dists[index].sign;
+
+        /* clamp the values */
+        if ( dists[index].distance > fixed_spread )
+          dists[index].distance = fixed_spread;
+
+        /* flip sign if required */
+        dists[index].distance *= internal_params.flip_sign ? -current_sign
+                                                           :  current_sign;
+
+        /* concatenate to appropriate format */
+        buffer[index] = map_fixed_to_sdf( dists[index].distance,
+                                          fixed_spread );
+      }
+    }
+
+  Exit:
+    FT_FREE( dists );
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   sdf_generate_subdivision
+   *
+   * @Description:
+   *   Subdivide the shape into a number of straight lines, then use the
+   *   above `sdf_generate_bounding_box` function to generate the SDF.
+   *
+   *   Note: After calling this function `shape` no longer has the original
+   *         edges, it only contains lines.
+   *
+   * @Input:
+   *   internal_params ::
+   *     Internal parameters and properties required by the rasterizer.
+   *     See @SDF_Params for more.
+   *
+   *   shape ::
+   *     A complete shape which is used to generate SDF.
+   *
+   *   spread ::
+   *     Maximum distances to be allowed inthe output bitmap.
+   *
+   * @Output:
+   *   bitmap ::
+   *     The output bitmap which will contain the SDF information.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   */
+  static FT_Error
+  sdf_generate_subdivision( const SDF_Params  internal_params,
+                            SDF_Shape*        shape,
+                            FT_UInt           spread,
+                            const FT_Bitmap*  bitmap )
+  {
+    /*
+     * Thanks to Alexei for providing the idea of this optimization.
+     *
+     * We take advantage of two facts.
+     *
+     * (1) Computing the shortest distance from a point to a line segment is
+     *     very fast.
+     * (2) We don't have to compute the shortest distance for the entire
+     *     two-dimensional grid.
+     *
+     * Both ideas lead to the following optimization.
+     *
+     * (1) Split the outlines into a number of line segments.
+     *
+     * (2) For each line segment, only process its neighborhood.
+     *
+     * (3) Compute the closest distance to the line only for neighborhood
+     *     grid points.
+     *
+     * This greatly reduces the number of grid points to check.
+     */
+
+    FT_Error  error = FT_Err_Ok;
+
+
+    FT_CALL( split_sdf_shape( shape ) );
+    FT_CALL( sdf_generate_bounding_box( internal_params,
+                                        shape, spread, bitmap ) );
+
+  Exit:
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * @Function:
+   *   sdf_generate_with_overlaps
+   *
+   * @Description:
+   *   This function can be used to generate SDF for glyphs with overlapping
+   *   contours.  The function generates SDF for contours separately on
+   *   separate bitmaps (to generate SDF it uses
+   *   `sdf_generate_subdivision`).  At the end it simply combines all the
+   *   SDF into the output bitmap; this fixes all the signs and removes
+   *   overlaps.
+   *
+   * @Input:
+   *   internal_params ::
+   *     Internal parameters and properties required by the rasterizer.  See
+   *     @SDF_Params for more.
+   *
+   *   shape ::
+   *     A complete shape which is used to generate SDF.
+   *
+   *   spread ::
+   *     Maximum distances to be allowed in the output bitmap.
+   *
+   * @Output:
+   *   bitmap ::
+   *     The output bitmap which will contain the SDF information.
+   *
+   * @Return:
+   *   FreeType error, 0 means success.
+   *
+   * @Note:
+   *   The function cannot generate a proper SDF for glyphs with
+   *   self-intersecting contours because we cannot separate them into two
+   *   separate bitmaps.  In case of self-intersecting contours it is
+   *   necessary to remove the overlaps before generating the SDF.
+   *
+   */
+  static FT_Error
+  sdf_generate_with_overlaps( SDF_Params        internal_params,
+                              SDF_Shape*        shape,
+                              FT_UInt           spread,
+                              const FT_Bitmap*  bitmap )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+    FT_Int      num_contours;        /* total number of contours      */
+    FT_Int      i, j;                /* iterators                     */
+    FT_Int      width, rows;         /* width and rows of the bitmap  */
+    FT_Bitmap*  bitmaps;             /* separate bitmaps for contours */
+
+    SDF_Contour*  contour;           /* temporary variable to iterate */
+    SDF_Contour*  temp_contour;      /* temporary contour             */
+    SDF_Contour*  head;              /* head of the contour list      */
+    SDF_Shape     temp_shape;        /* temporary shape               */
+
+    FT_Memory      memory;           /* to allocate memory            */
+    FT_SDFFormat*  t;                /* target bitmap buffer          */
+    FT_Bool        flip_sign;        /* flip sign?                    */
+
+    /* orientation of all the separate contours */
+    SDF_Contour_Orientation*  orientations;
+
+
+    bitmaps      = NULL;
+    orientations = NULL;
+    head         = NULL;
+
+    if ( !shape || !bitmap || !shape->memory )
+      return FT_THROW( Invalid_Argument );
+
+    /* Disable `flip_sign` to avoid extra complication */
+    /* during the combination phase.                   */
+    flip_sign                 = internal_params.flip_sign;
+    internal_params.flip_sign = 0;
+
+    contour           = shape->contours;
+    memory            = shape->memory;
+    temp_shape.memory = memory;
+    width             = (FT_Int)bitmap->width;
+    rows              = (FT_Int)bitmap->rows;
+    num_contours      = 0;
+
+    /* find the number of contours in the shape */
+    while ( contour )
+    {
+      num_contours++;
+      contour = contour->next;
+    }
+
+    /* allocate the bitmaps to generate SDF for separate contours */
+    if ( FT_ALLOC( bitmaps,
+                   (FT_UInt)num_contours * sizeof ( *bitmaps ) ) )
+      goto Exit;
+
+    /* allocate array to hold orientation for all contours */
+    if ( FT_ALLOC( orientations,
+                   (FT_UInt)num_contours * sizeof ( *orientations ) ) )
+      goto Exit;
+
+    contour = shape->contours;
+
+    /* Iterate over all contours and generate SDF separately. */
+    for ( i = 0; i < num_contours; i++ )
+    {
+      /* initialize the corresponding bitmap */
+      FT_Bitmap_Init( &bitmaps[i] );
+
+      bitmaps[i].width      = bitmap->width;
+      bitmaps[i].rows       = bitmap->rows;
+      bitmaps[i].pitch      = bitmap->pitch;
+      bitmaps[i].num_grays  = bitmap->num_grays;
+      bitmaps[i].pixel_mode = bitmap->pixel_mode;
+
+      /* allocate memory for the buffer */
+      if ( FT_ALLOC( bitmaps[i].buffer,
+                     bitmap->rows * (FT_UInt)bitmap->pitch ) )
+        goto Exit;
+
+      /* determine the orientation */
+      orientations[i] = get_contour_orientation( contour );
+
+      /* The `overload_sign` property is specific to  */
+      /* `sdf_generate_bounding_box`.  This basically */
+      /* overloads the default sign of the outside    */
+      /* pixels, which is necessary for               */
+      /* counter-clockwise contours.                  */
+      if ( orientations[i] == SDF_ORIENTATION_CCW                   &&
+           internal_params.orientation == FT_ORIENTATION_FILL_RIGHT )
+        internal_params.overload_sign = 1;
+      else if ( orientations[i] == SDF_ORIENTATION_CW                   &&
+                internal_params.orientation == FT_ORIENTATION_FILL_LEFT )
+        internal_params.overload_sign = 1;
+      else
+        internal_params.overload_sign = 0;
+
+      /* Make `contour->next` NULL so that there is   */
+      /* one contour in the list.  Also hold the next */
+      /* contour in a temporary variable so as to     */
+      /* restore the original value.                  */
+      temp_contour  = contour->next;
+      contour->next = NULL;
+
+      /* Use `temp_shape` to hold the new contour. */
+      /* Now, `temp_shape` has only one contour.   */
+      temp_shape.contours = contour;
+
+      /* finally generate the SDF */
+      FT_CALL( sdf_generate_subdivision( internal_params,
+                                         &temp_shape,
+                                         spread,
+                                         &bitmaps[i] ) );
+
+      /* Restore the original `next` variable. */
+      contour->next = temp_contour;
+
+      /* Since `split_sdf_shape` deallocated the original */
+      /* contours list we need to assign the new value to */
+      /* the shape's contour.                             */
+      temp_shape.contours->next = head;
+      head                      = temp_shape.contours;
+
+      /* Simply flip the orientation in case of post-script fonts */
+      /* so as to avoid modificatons in the combining phase.      */
+      if ( internal_params.orientation == FT_ORIENTATION_FILL_LEFT )
+      {
+        if ( orientations[i] == SDF_ORIENTATION_CW )
+          orientations[i] = SDF_ORIENTATION_CCW;
+        else if ( orientations[i] == SDF_ORIENTATION_CCW )
+          orientations[i] = SDF_ORIENTATION_CW;
+      }
+
+      contour = contour->next;
+    }
+
+    /* assign the new contour list to `shape->contours` */
+    shape->contours = head;
+
+    /* cast the output bitmap buffer */
+    t = (FT_SDFFormat*)bitmap->buffer;
+
+    /* Iterate over all pixels and combine all separate    */
+    /* contours.  These are the rules for combining:       */
+    /*                                                     */
+    /* (1) For all clockwise contours, compute the largest */
+    /*     value.  Name this as `val_c`.                   */
+    /* (2) For all counter-clockwise contours, compute the */
+    /*     smallest value.  Name this as `val_ac`.         */
+    /* (3) Now, finally use the smaller value of `val_c'   */
+    /*     and `val_ac'.                                   */
+    for ( j = 0; j < rows; j++ )
+    {
+      for ( i = 0; i < width; i++ )
+      {
+        FT_Int  id = j * width + i;       /* index of current pixel    */
+        FT_Int  c;                        /* contour iterator          */
+
+        FT_SDFFormat  val_c  = 0;         /* max clockwise value       */
+        FT_SDFFormat  val_ac = UCHAR_MAX; /* min counter-clockwise val */
+
+
+        /* iterate through all the contours */
+        for ( c = 0; c < num_contours; c++ )
+        {
+          /* current contour value */
+          FT_SDFFormat  temp = ( (FT_SDFFormat*)bitmaps[c].buffer )[id];
+
+
+          if ( orientations[c] == SDF_ORIENTATION_CW )
+            val_c = FT_MAX( val_c, temp );   /* clockwise         */
+          else
+            val_ac = FT_MIN( val_ac, temp ); /* counter-clockwise */
+        }
+
+        /* Finally find the smaller of the two and assign to output. */
+        /* Also apply `flip_sign` if set.                            */
+        t[id] = FT_MIN( val_c, val_ac );
+
+        if ( flip_sign )
+          t[id] = invert_sign( t[id] );
+      }
+    }
+
+  Exit:
+    /* deallocate orientations array */
+    if ( orientations )
+      FT_FREE( orientations );
+
+    /* deallocate temporary bitmaps */
+    if ( bitmaps )
+    {
+      if ( num_contours == 0 )
+        error = FT_THROW( Raster_Corrupted );
+      else
+      {
+        for ( i = 0; i < num_contours; i++ )
+          FT_FREE( bitmaps[i].buffer );
+
+        FT_FREE( bitmaps );
+      }
+    }
+
+    /* restore the `flip_sign` property */
+    internal_params.flip_sign = flip_sign;
+
+    return error;
+  }
+
+
+  /**************************************************************************
+   *
+   * interface functions
+   *
+   */
+
+  static FT_Error
+  sdf_raster_new( FT_Memory     memory,
+                  SDF_PRaster*  araster )
+  {
+    FT_Error     error;
+    SDF_PRaster  raster = NULL;
+
+
+    if ( !FT_NEW( raster ) )
+      raster->memory = memory;
+
+    *araster = raster;
+
+   return error;
+  }
+
+
+  static void
+  sdf_raster_reset( FT_Raster       raster,
+                    unsigned char*  pool_base,
+                    unsigned long   pool_size )
+  {
+    FT_UNUSED( raster );
+    FT_UNUSED( pool_base );
+    FT_UNUSED( pool_size );
+  }
+
+
+  static FT_Error
+  sdf_raster_set_mode( FT_Raster      raster,
+                       unsigned long  mode,
+                       void*          args )
+  {
+    FT_UNUSED( raster );
+    FT_UNUSED( mode );
+    FT_UNUSED( args );
+
+    return FT_Err_Ok;
+  }
+
+
+  static FT_Error
+  sdf_raster_render( FT_Raster                raster,
+                     const FT_Raster_Params*  params )
+  {
+    FT_Error                  error      = FT_Err_Ok;
+    SDF_TRaster*              sdf_raster = (SDF_TRaster*)raster;
+    FT_Outline*               outline    = NULL;
+    const SDF_Raster_Params*  sdf_params = (const SDF_Raster_Params*)params;
+
+    FT_Memory   memory = NULL;
+    SDF_Shape*  shape  = NULL;
+    SDF_Params  internal_params;
+
+
+    /* check for valid arguments */
+    if ( !sdf_raster || !sdf_params )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    outline = (FT_Outline*)sdf_params->root.source;
+
+    /* check whether outline is valid */
+    if ( !outline )
+    {
+      error = FT_THROW( Invalid_Outline );
+      goto Exit;
+    }
+
+    /* if the outline is empty, return */
+    if ( outline->n_points <= 0 || outline->n_contours <= 0 )
+      goto Exit;
+
+    /* check whether the outline has valid fields */
+    if ( !outline->contours || !outline->points )
+    {
+      error = FT_THROW( Invalid_Outline );
+      goto Exit;
+    }
+
+    /* check whether spread is set properly */
+    if ( sdf_params->spread > MAX_SPREAD ||
+         sdf_params->spread < MIN_SPREAD )
+    {
+      FT_TRACE0(( "sdf_raster_render:"
+                  " The `spread' field of `SDF_Raster_Params' is invalid,\n" ));
+      FT_TRACE0(( "                  "
+                  " the value of this field must be within [%d, %d].\n",
+                  MIN_SPREAD, MAX_SPREAD ));
+      FT_TRACE0(( "                  "
+                  " Also, you must pass `SDF_Raster_Params' instead of\n" ));
+      FT_TRACE0(( "                  "
+                  " the default `FT_Raster_Params' while calling\n" ));
+      FT_TRACE0(( "                  "
+                  " this function and set the fields properly.\n" ));
+
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    memory = sdf_raster->memory;
+    if ( !memory )
+    {
+      FT_TRACE0(( "sdf_raster_render:"
+                  " Raster not setup properly,\n" ));
+      FT_TRACE0(( "                  "
+                  " unable to find memory handle.\n" ));
+
+      error = FT_THROW( Invalid_Handle );
+      goto Exit;
+    }
+
+    /* set up the parameters */
+    internal_params.orientation   = FT_Outline_Get_Orientation( outline );
+    internal_params.flip_sign     = sdf_params->flip_sign;
+    internal_params.flip_y        = sdf_params->flip_y;
+    internal_params.overload_sign = 0;
+
+    FT_CALL( sdf_shape_new( memory, &shape ) );
+
+    FT_CALL( sdf_outline_decompose( outline, shape ) );
+
+    if ( sdf_params->overlaps )
+      FT_CALL( sdf_generate_with_overlaps( internal_params,
+                                           shape, sdf_params->spread,
+                                           sdf_params->root.target ) );
+    else
+      FT_CALL( sdf_generate_subdivision( internal_params,
+                                         shape, sdf_params->spread,
+                                         sdf_params->root.target ) );
+
+    if ( shape )
+      sdf_shape_done( &shape );
+
+  Exit:
+    return error;
+  }
+
+
+  static void
+  sdf_raster_done( FT_Raster  raster )
+  {
+    FT_Memory  memory = (FT_Memory)((SDF_TRaster*)raster)->memory;
+
+
+    FT_FREE( raster );
+  }
+
+
+  FT_DEFINE_RASTER_FUNCS(
+    ft_sdf_raster,
+
+    FT_GLYPH_FORMAT_OUTLINE,
+
+    (FT_Raster_New_Func)     sdf_raster_new,       /* raster_new      */
+    (FT_Raster_Reset_Func)   sdf_raster_reset,     /* raster_reset    */
+    (FT_Raster_Set_Mode_Func)sdf_raster_set_mode,  /* raster_set_mode */
+    (FT_Raster_Render_Func)  sdf_raster_render,    /* raster_render   */
+    (FT_Raster_Done_Func)    sdf_raster_done       /* raster_done     */
+  )
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdf.h b/qtbase/src/3rdparty/freetype/src/sdf/ftsdf.h
new file mode 100644
index 0000000000..5f6b3f52aa
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdf.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+ *
+ * ftsdf.h
+ *
+ *   Signed Distance Field support (specification).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef FTSDF_H_
+#define FTSDF_H_
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include <freetype/ftimage.h>
+
+/* common properties and function */
+#include "ftsdfcommon.h"
+
+FT_BEGIN_HEADER
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   SDF_Raster_Params
+   *
+   * @description:
+   *   This struct must be passed to the raster render function
+   *   @FT_Raster_RenderFunc instead of @FT_Raster_Params because the
+   *   rasterizer requires some additional information to render properly.
+   *
+   * @fields:
+   *   root ::
+   *     The native raster parameters structure.
+   *
+   *   spread ::
+   *     This is an essential parameter/property required by the renderer.
+   *     `spread` defines the maximum unsigned value that is present in the
+   *     final SDF output.  For the default value check file
+   *     `ftsdfcommon.h`.
+   *
+   *   flip_sign ::
+   *     By default positive values indicate positions inside of contours,
+   *     i.e., filled by a contour.  If this property is true then that
+   *     output will be the opposite of the default, i.e., negative values
+   *     indicate positions inside of contours.
+   *
+   *   flip_y ::
+   *     Setting this parameter to true maked the output image flipped
+   *     along the y-axis.
+   *
+   *   overlaps ::
+   *     Set this to true to generate SDF for glyphs having overlapping
+   *     contours.  The overlapping support is limited to glyphs that do not
+   *     have self-intersecting contours.  Also, removing overlaps require a
+   *     considerable amount of extra memory; additionally, it will not work
+   *     if generating SDF from bitmap.
+   *
+   * @note:
+   *   All properties are valid for both the 'sdf' and 'bsdf' renderers; the
+   *   exception is `overlaps`, which gets ignored by the 'bsdf' renderer.
+   *
+   */
+  typedef struct  SDF_Raster_Params_
+  {
+    FT_Raster_Params  root;
+    FT_UInt           spread;
+    FT_Bool           flip_sign;
+    FT_Bool           flip_y;
+    FT_Bool           overlaps;
+
+  } SDF_Raster_Params;
+
+
+  /* rasterizer to convert outline to SDF */
+  FT_EXPORT_VAR( const FT_Raster_Funcs )  ft_sdf_raster;
+
+  /* rasterizer to convert bitmap to SDF */
+  FT_EXPORT_VAR( const FT_Raster_Funcs )  ft_bitmap_sdf_raster;
+
+FT_END_HEADER
+
+#endif /* FTSDF_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdfcommon.c b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfcommon.c
new file mode 100644
index 0000000000..072a36ea6c
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfcommon.c
@@ -0,0 +1,147 @@
+/****************************************************************************
+ *
+ * ftsdfcommon.c
+ *
+ *   Auxiliary data for Signed Distance Field support (body).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include "ftsdf.h"
+#include "ftsdfcommon.h"
+
+
+  /**************************************************************************
+   *
+   * common functions
+   *
+   */
+
+  /*
+   * Original algorithm:
+   *
+   *   https://github.com/chmike/fpsqrt
+   *
+   * Use this to compute the square root of a 16.16 fixed point number.
+   */
+  FT_LOCAL_DEF( FT_16D16 )
+  square_root( FT_16D16  val )
+  {
+    FT_ULong  t, q, b, r;
+
+
+    r = (FT_ULong)val;
+    b = 0x40000000L;
+    q = 0;
+
+    while ( b > 0x40L )
+    {
+      t = q + b;
+
+      if ( r >= t )
+      {
+        r -= t;
+        q  = t + b;
+      }
+
+      r <<= 1;
+      b >>= 1;
+    }
+
+    q >>= 8;
+
+    return (FT_16D16)q;
+  }
+
+
+  /**************************************************************************
+   *
+   * format and sign manipulating functions
+   *
+   */
+
+  /*
+   * Convert 16.16 fixed point values to the desired output format.
+   * In this case we reduce 16.16 fixed point values to normalized
+   * 8-bit values.
+   *
+   * The `max_value` in the parameter is the maximum value in the
+   * distance field map and is equal to the spread.  We normalize
+   * the distances using this value instead of computing the maximum
+   * value for the entire bitmap.
+   *
+   * You can use this function to map the 16.16 signed values to any
+   * format required.  Do note that the output buffer is 8-bit, so only
+   * use an 8-bit format for `FT_SDFFormat`, or increase the buffer size in
+   * `ftsdfrend.c`.
+   */
+  FT_LOCAL_DEF( FT_SDFFormat )
+  map_fixed_to_sdf( FT_16D16  dist,
+                    FT_16D16  max_value )
+  {
+    FT_SDFFormat  out;
+    FT_16D16      udist;
+
+
+    /* normalize the distance values */
+    dist = FT_DivFix( dist, max_value );
+
+    udist = dist < 0 ? -dist : dist;
+
+    /* Reduce the distance values to 8 bits.                   */
+    /*                                                         */
+    /* Since +1/-1 in 16.16 takes the 16th bit, we right-shift */
+    /* the number by 9 to make it fit into the 7-bit range.    */
+    /*                                                         */
+    /* One bit is reserved for the sign.                       */
+    udist >>= 9;
+
+    /* Since `char` can only store a maximum positive value    */
+    /* of 127 we need to make sure it does not wrap around and */
+    /* give a negative value.                                  */
+    if ( dist > 0 && udist > 127 )
+      udist = 127;
+    if ( dist < 0 && udist > 128 )
+      udist = 128;
+
+    /* Output the data; negative values are from [0, 127] and positive    */
+    /* from [128, 255].  One important thing is that negative values      */
+    /* are inverted here, that means [0, 128] maps to [-128, 0] linearly. */
+    /* More on that in `freetype.h` near the documentation of             */
+    /* `FT_RENDER_MODE_SDF`.                                              */
+    out = dist < 0 ? 128 - (FT_SDFFormat)udist
+                   : (FT_SDFFormat)udist + 128;
+
+    return out;
+  }
+
+
+  /*
+   * Invert the signed distance packed into the corresponding format.
+   * So if the values are negative they will become positive in the
+   * chosen format.
+   *
+   * [Note]: This function should only be used after converting the
+   *         16.16 signed distance values to `FT_SDFFormat`.  If that
+   *         conversion has not been done, then simply invert the sign
+   *         and use the above function to pack the values.
+   */
+  FT_LOCAL_DEF( FT_SDFFormat )
+  invert_sign( FT_SDFFormat  dist )
+  {
+    return 255 - dist;
+  }
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdfcommon.h b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfcommon.h
new file mode 100644
index 0000000000..af4490bbca
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfcommon.h
@@ -0,0 +1,141 @@
+/****************************************************************************
+ *
+ * ftsdfcommon.h
+ *
+ *   Auxiliary data for Signed Distance Field support (specification).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+  /****************************************************
+   *
+   * This file contains common functions and properties
+   * for both the 'sdf' and 'bsdf' renderers.
+   *
+   */
+
+#ifndef FTSDFCOMMON_H_
+#define FTSDFCOMMON_H_
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include <freetype/internal/ftobjs.h>
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * default values (cannot be set individually for each renderer)
+   *
+   */
+
+  /* default spread value */
+#define DEFAULT_SPREAD  8
+  /* minimum spread supported by the renderer */
+#define MIN_SPREAD      2
+  /* maximum spread supported by the renderer */
+#define MAX_SPREAD      32
+  /* pixel size in 26.6 */
+#define ONE_PIXEL       ( 1 << 6 )
+
+
+  /**************************************************************************
+   *
+   * common definitions (cannot be set individually for each renderer)
+   *
+   */
+
+  /* If this macro is set to 1 the rasterizer uses squared distances for */
+  /* computation.  It can greatly improve the performance but there is a */
+  /* chance of overflow and artifacts.  You can safely use it up to a    */
+  /* pixel size of 128.                                                  */
+#ifndef USE_SQUARED_DISTANCES
+#define USE_SQUARED_DISTANCES  0
+#endif
+
+
+  /**************************************************************************
+   *
+   * common macros
+   *
+   */
+
+  /* convert int to 26.6 fixed-point   */
+#define FT_INT_26D6( x )   ( x * 64 )
+  /* convert int to 16.16 fixed-point  */
+#define FT_INT_16D16( x )  ( x * 65536 )
+  /* convert 26.6 to 16.16 fixed-point */
+#define FT_26D6_16D16( x ) ( x * 1024 )
+
+
+  /* Convenience macro to call a function; it  */
+  /* jumps to label `Exit` if an error occurs. */
+#define FT_CALL( x ) do                          \
+                     {                           \
+                       error = ( x );            \
+                       if ( error != FT_Err_Ok ) \
+                         goto Exit;              \
+                     } while ( 0 )
+
+
+  /*
+   * The macro `VECTOR_LENGTH_16D16` computes either squared distances or
+   * actual distances, depending on the value of `USE_SQUARED_DISTANCES`.
+   *
+   * By using squared distances the performance can be greatly improved but
+   * there is a risk of overflow.
+   */
+#if USE_SQUARED_DISTANCES
+#define VECTOR_LENGTH_16D16( v )  ( FT_MulFix( v.x, v.x ) + \
+                                    FT_MulFix( v.y, v.y ) )
+#else
+#define VECTOR_LENGTH_16D16( v )  FT_Vector_Length( &v )
+#endif
+
+
+  /**************************************************************************
+   *
+   * common typedefs
+   *
+   */
+
+  typedef FT_Vector FT_26D6_Vec;   /* with 26.6 fixed-point components  */
+  typedef FT_Vector FT_16D16_Vec;  /* with 16.16 fixed-point components */
+
+  typedef FT_Fixed  FT_16D16;      /* 16.16 fixed-point representation  */
+  typedef FT_Fixed  FT_26D6;       /* 26.6 fixed-point representation   */
+  typedef FT_Byte   FT_SDFFormat;  /* format to represent SDF data      */
+
+  typedef FT_BBox   FT_CBox;       /* control box of a curve            */
+
+
+  FT_LOCAL( FT_16D16 )
+  square_root( FT_16D16  val );
+
+  FT_LOCAL( FT_SDFFormat )
+  map_fixed_to_sdf( FT_16D16  dist,
+                    FT_16D16  max_value );
+
+  FT_LOCAL( FT_SDFFormat )
+  invert_sign( FT_SDFFormat  dist );
+
+
+FT_END_HEADER
+
+#endif /* FTSDFCOMMON_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdferrs.h b/qtbase/src/3rdparty/freetype/src/sdf/ftsdferrs.h
new file mode 100644
index 0000000000..b28867609a
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdferrs.h
@@ -0,0 +1,37 @@
+/****************************************************************************
+ *
+ * ftsdferrs.h
+ *
+ *   Signed Distance Field error codes (specification only).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef FTSDFERRS_H_
+#define FTSDFERRS_H_
+
+#include <freetype/ftmoderr.h>
+
+#undef FTERRORS_H_
+
+#undef  FT_ERR_PREFIX
+#define FT_ERR_PREFIX  Sdf_Err_
+#define FT_ERR_BASE    FT_Mod_Err_Sdf
+
+#include <freetype/fterrors.h>
+
+#endif /* FTSDFERRS_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdfrend.c b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfrend.c
new file mode 100644
index 0000000000..b0213a40d3
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfrend.c
@@ -0,0 +1,604 @@
+/****************************************************************************
+ *
+ * ftsdfrend.c
+ *
+ *   Signed Distance Field renderer interface (body).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/services/svprop.h>
+#include <freetype/ftoutln.h>
+#include <freetype/ftbitmap.h>
+#include "ftsdfrend.h"
+#include "ftsdf.h"
+
+#include "ftsdferrs.h"
+
+
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  sdf
+
+
+  /**************************************************************************
+   *
+   * macros and default property values
+   *
+   */
+#define SDF_RENDERER( rend )  ( (SDF_Renderer)rend )
+
+
+  /**************************************************************************
+   *
+   * for setting properties
+   *
+   */
+
+  /* property setter function */
+  static FT_Error
+  sdf_property_set( FT_Module    module,
+                    const char*  property_name,
+                    const void*  value,
+                    FT_Bool      value_is_string )
+  {
+    FT_Error      error  = FT_Err_Ok;
+    SDF_Renderer  render = SDF_RENDERER( FT_RENDERER( module ) );
+
+    FT_UNUSED( value_is_string );
+
+
+    if ( ft_strcmp( property_name, "spread" ) == 0 )
+    {
+      FT_Int  val = *(const FT_Int*)value;
+
+
+      if ( val > MAX_SPREAD || val < MIN_SPREAD )
+      {
+        FT_TRACE0(( "[sdf] sdf_property_set:"
+                    " the `spread' property can have a value\n" ));
+        FT_TRACE0(( "                       "
+                    " within range [%d, %d] (value provided: %d)\n",
+                    MIN_SPREAD, MAX_SPREAD, val ));
+
+        error = FT_THROW( Invalid_Argument );
+        goto Exit;
+      }
+
+      render->spread = (FT_UInt)val;
+      FT_TRACE7(( "[sdf] sdf_property_set:"
+                  " updated property `spread' to %d\n", val ));
+    }
+
+    else if ( ft_strcmp( property_name, "flip_sign" ) == 0 )
+    {
+      FT_Int  val = *(const FT_Int*)value;
+
+
+      render->flip_sign = val ? 1 : 0;
+      FT_TRACE7(( "[sdf] sdf_property_set:"
+                  " updated property `flip_sign' to %d\n", val ));
+    }
+
+    else if ( ft_strcmp( property_name, "flip_y" ) == 0 )
+    {
+      FT_Int  val = *(const FT_Int*)value;
+
+
+      render->flip_y = val ? 1 : 0;
+      FT_TRACE7(( "[sdf] sdf_property_set:"
+                  " updated property `flip_y' to %d\n", val ));
+    }
+
+    else if ( ft_strcmp( property_name, "overlaps" ) == 0 )
+    {
+      FT_Bool  val = *(const FT_Bool*)value;
+
+
+      render->overlaps = val;
+      FT_TRACE7(( "[sdf] sdf_property_set:"
+                  " updated property `overlaps' to %d\n", val ));
+    }
+
+    else
+    {
+      FT_TRACE0(( "[sdf] sdf_property_set:"
+                  " missing property `%s'\n", property_name ));
+      error = FT_THROW( Missing_Property );
+    }
+
+  Exit:
+    return error;
+  }
+
+
+  /* property getter function */
+  static FT_Error
+  sdf_property_get( FT_Module    module,
+                    const char*  property_name,
+                    void*        value )
+  {
+    FT_Error      error  = FT_Err_Ok;
+    SDF_Renderer  render = SDF_RENDERER( FT_RENDERER( module ) );
+
+
+    if ( ft_strcmp( property_name, "spread" ) == 0 )
+    {
+      FT_UInt*  val = (FT_UInt*)value;
+
+
+      *val = render->spread;
+    }
+
+    else if ( ft_strcmp( property_name, "flip_sign" ) == 0 )
+    {
+      FT_Int*  val = (FT_Int*)value;
+
+
+      *val = render->flip_sign;
+    }
+
+    else if ( ft_strcmp( property_name, "flip_y" ) == 0 )
+    {
+      FT_Int*  val = (FT_Int*)value;
+
+
+      *val = render->flip_y;
+    }
+
+    else if ( ft_strcmp( property_name, "overlaps" ) == 0 )
+    {
+      FT_Int*  val = (FT_Int*)value;
+
+
+      *val = render->overlaps;
+    }
+
+    else
+    {
+      FT_TRACE0(( "[sdf] sdf_property_get:"
+                  " missing property `%s'\n", property_name ));
+      error = FT_THROW( Missing_Property );
+    }
+
+    return error;
+  }
+
+
+  FT_DEFINE_SERVICE_PROPERTIESREC(
+    sdf_service_properties,
+
+    (FT_Properties_SetFunc)sdf_property_set,        /* set_property */
+    (FT_Properties_GetFunc)sdf_property_get )       /* get_property */
+
+
+  FT_DEFINE_SERVICEDESCREC1(
+    sdf_services,
+
+    FT_SERVICE_ID_PROPERTIES, &sdf_service_properties )
+
+
+  static FT_Module_Interface
+  ft_sdf_requester( FT_Renderer  render,
+                    const char*  module_interface )
+  {
+    FT_UNUSED( render );
+
+    return ft_service_list_lookup( sdf_services, module_interface );
+  }
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /**                                                                     **/
+  /**  OUTLINE TO SDF CONVERTER                                           **/
+  /**                                                                     **/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /**************************************************************************
+   *
+   * interface functions
+   *
+   */
+
+  static FT_Error
+  ft_sdf_init( FT_Renderer  render )
+  {
+    SDF_Renderer  sdf_render = SDF_RENDERER( render );
+
+
+    sdf_render->spread    = DEFAULT_SPREAD;
+    sdf_render->flip_sign = 0;
+    sdf_render->flip_y    = 0;
+    sdf_render->overlaps  = 0;
+
+    return FT_Err_Ok;
+  }
+
+
+  static void
+  ft_sdf_done( FT_Renderer  render )
+  {
+    FT_UNUSED( render );
+  }
+
+
+  /* generate signed distance field from a glyph's slot image */
+  static FT_Error
+  ft_sdf_render( FT_Renderer       module,
+                 FT_GlyphSlot      slot,
+                 FT_Render_Mode    mode,
+                 const FT_Vector*  origin )
+  {
+    FT_Error     error   = FT_Err_Ok;
+    FT_Outline*  outline = &slot->outline;
+    FT_Bitmap*   bitmap  = &slot->bitmap;
+    FT_Memory    memory  = NULL;
+    FT_Renderer  render  = NULL;
+
+    FT_Pos  x_shift = 0;
+    FT_Pos  y_shift = 0;
+
+    FT_Pos  x_pad = 0;
+    FT_Pos  y_pad = 0;
+
+    SDF_Raster_Params  params;
+    SDF_Renderer       sdf_module = SDF_RENDERER( module );
+
+
+    render = &sdf_module->root;
+    memory = render->root.memory;
+
+    /* check whether slot format is correct before rendering */
+    if ( slot->format != render->glyph_format )
+    {
+      error = FT_THROW( Invalid_Glyph_Format );
+      goto Exit;
+    }
+
+    /* check whether render mode is correct */
+    if ( mode != FT_RENDER_MODE_SDF )
+    {
+      error = FT_THROW( Cannot_Render_Glyph );
+      goto Exit;
+    }
+
+    /* deallocate the previously allocated bitmap */
+    if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
+    {
+      FT_FREE( bitmap->buffer );
+      slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
+    }
+
+    /* preset the bitmap using the glyph's outline;         */
+    /* the sdf bitmap is similar to an anti-aliased bitmap  */
+    /* with a slightly bigger size and different pixel mode */
+    if ( ft_glyphslot_preset_bitmap( slot, FT_RENDER_MODE_NORMAL, origin ) )
+    {
+      error = FT_THROW( Raster_Overflow );
+      goto Exit;
+    }
+
+    /* nothing to render */
+    if ( !bitmap->rows || !bitmap->pitch )
+      return FT_Err_Ok;
+
+    /* the padding will simply be equal to the `spread' */
+    x_pad = sdf_module->spread;
+    y_pad = sdf_module->spread;
+
+    /* apply the padding; will be in all the directions */
+    bitmap->rows  += y_pad * 2;
+    bitmap->width += x_pad * 2;
+
+    /* ignore the pitch, pixel mode and set custom */
+    bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
+    bitmap->pitch      = (int)( bitmap->width );
+    bitmap->num_grays  = 255;
+
+    /* allocate new buffer */
+    if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
+      goto Exit;
+
+    slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
+
+    slot->bitmap_top  += y_pad;
+    slot->bitmap_left -= x_pad;
+
+    x_shift  = 64 * -slot->bitmap_left;
+    y_shift  = 64 * -slot->bitmap_top;
+    y_shift += 64 * (FT_Int)bitmap->rows;
+
+    if ( origin )
+    {
+      x_shift += origin->x;
+      y_shift += origin->y;
+    }
+
+    /* translate outline to render it into the bitmap */
+    if ( x_shift || y_shift )
+      FT_Outline_Translate( outline, x_shift, y_shift );
+
+    /* set up parameters */
+    params.root.target = bitmap;
+    params.root.source = outline;
+    params.root.flags  = FT_RASTER_FLAG_SDF;
+    params.spread      = sdf_module->spread;
+    params.flip_sign   = sdf_module->flip_sign;
+    params.flip_y      = sdf_module->flip_y;
+    params.overlaps    = sdf_module->overlaps;
+
+    /* render the outline */
+    error = render->raster_render( render->raster,
+                                   (const FT_Raster_Params*)&params );
+
+    /* transform the outline back to the original state */
+    if ( x_shift || y_shift )
+      FT_Outline_Translate( outline, -x_shift, -y_shift );
+
+  Exit:
+    if ( !error )
+    {
+      /* the glyph is successfully rendered to a bitmap */
+      slot->format = FT_GLYPH_FORMAT_BITMAP;
+    }
+    else if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
+    {
+      FT_FREE( bitmap->buffer );
+      slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
+    }
+
+    return error;
+  }
+
+
+  /* transform the glyph using matrix and/or delta */
+  static FT_Error
+  ft_sdf_transform( FT_Renderer       render,
+                    FT_GlyphSlot      slot,
+                    const FT_Matrix*  matrix,
+                    const FT_Vector*  delta )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+
+    if ( slot->format != render->glyph_format )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    if ( matrix )
+      FT_Outline_Transform( &slot->outline, matrix );
+
+    if ( delta )
+      FT_Outline_Translate( &slot->outline, delta->x, delta->y );
+
+  Exit:
+    return error;
+  }
+
+
+  /* return the control box of a glyph's outline */
+  static void
+  ft_sdf_get_cbox( FT_Renderer   render,
+                   FT_GlyphSlot  slot,
+                   FT_BBox*      cbox )
+  {
+    FT_ZERO( cbox );
+
+    if ( slot->format == render->glyph_format )
+      FT_Outline_Get_CBox( &slot->outline, cbox );
+  }
+
+
+  /* set render specific modes or attributes */
+  static FT_Error
+  ft_sdf_set_mode( FT_Renderer  render,
+                   FT_ULong     mode_tag,
+                   FT_Pointer   data )
+  {
+    /* pass it to the rasterizer */
+    return render->clazz->raster_class->raster_set_mode( render->raster,
+                                                         mode_tag,
+                                                         data );
+  }
+
+
+  FT_DEFINE_RENDERER(
+    ft_sdf_renderer_class,
+
+    FT_MODULE_RENDERER,
+    sizeof ( SDF_Renderer_Module ),
+
+    "sdf",
+    0x10000L,
+    0x20000L,
+
+    NULL,
+
+    (FT_Module_Constructor)ft_sdf_init,
+    (FT_Module_Destructor) ft_sdf_done,
+    (FT_Module_Requester)  ft_sdf_requester,
+
+    FT_GLYPH_FORMAT_OUTLINE,
+
+    (FT_Renderer_RenderFunc)   ft_sdf_render,     /* render_glyph    */
+    (FT_Renderer_TransformFunc)ft_sdf_transform,  /* transform_glyph */
+    (FT_Renderer_GetCBoxFunc)  ft_sdf_get_cbox,   /* get_glyph_cbox  */
+    (FT_Renderer_SetModeFunc)  ft_sdf_set_mode,   /* set_mode        */
+
+    (FT_Raster_Funcs*)&ft_sdf_raster              /* raster_class    */
+  )
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /**                                                                     **/
+  /**  BITMAP TO SDF CONVERTER                                            **/
+  /**                                                                     **/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* generate signed distance field from glyph's bitmap */
+  static FT_Error
+  ft_bsdf_render( FT_Renderer       module,
+                  FT_GlyphSlot      slot,
+                  FT_Render_Mode    mode,
+                  const FT_Vector*  origin )
+  {
+    FT_Error   error  = FT_Err_Ok;
+    FT_Memory  memory = NULL;
+
+    FT_Bitmap*   bitmap  = &slot->bitmap;
+    FT_Renderer  render  = NULL;
+    FT_Bitmap    target;
+
+    FT_Pos  x_pad = 0;
+    FT_Pos  y_pad = 0;
+
+    SDF_Raster_Params  params;
+    SDF_Renderer       sdf_module = SDF_RENDERER( module );
+
+
+    /* initialize the bitmap in case any error occurs */
+    FT_Bitmap_Init( &target );
+
+    render = &sdf_module->root;
+    memory = render->root.memory;
+
+    /* check whether slot format is correct before rendering */
+    if ( slot->format != render->glyph_format )
+    {
+      error = FT_THROW( Invalid_Glyph_Format );
+      goto Exit;
+    }
+
+    /* check whether render mode is correct */
+    if ( mode != FT_RENDER_MODE_SDF )
+    {
+      error = FT_THROW( Cannot_Render_Glyph );
+      goto Exit;
+    }
+
+    if ( origin )
+    {
+      FT_ERROR(( "ft_bsdf_render: can't translate the bitmap\n" ));
+
+      error = FT_THROW( Unimplemented_Feature );
+      goto Exit;
+    }
+
+    /* Do not generate SDF if the bitmap is not owned by the       */
+    /* glyph: it might be that the source buffer is already freed. */
+    if ( !( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) )
+    {
+      FT_ERROR(( "ft_bsdf_render: can't generate SDF from"
+                 " unowned source bitmap\n" ));
+
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    /* nothing to render */
+    if ( !bitmap->rows || !bitmap->pitch )
+      return FT_Err_Ok;
+
+    FT_Bitmap_New( &target );
+
+    /* padding will simply be equal to `spread` */
+    x_pad = sdf_module->spread;
+    y_pad = sdf_module->spread;
+
+    /* apply padding, which extends to all directions */
+    target.rows  = bitmap->rows  + y_pad * 2;
+    target.width = bitmap->width + x_pad * 2;
+
+    /* set up the target bitmap */
+    target.pixel_mode = FT_PIXEL_MODE_GRAY;
+    target.pitch      = (int)( target.width );
+    target.num_grays  = 255;
+
+    if ( FT_ALLOC_MULT( target.buffer, target.rows, target.pitch ) )
+      goto Exit;
+
+    /* set up parameters */
+    params.root.target = &target;
+    params.root.source = bitmap;
+    params.root.flags  = FT_RASTER_FLAG_SDF;
+    params.spread      = sdf_module->spread;
+    params.flip_sign   = sdf_module->flip_sign;
+    params.flip_y      = sdf_module->flip_y;
+
+    error = render->raster_render( render->raster,
+                                   (const FT_Raster_Params*)&params );
+
+  Exit:
+    if ( !error )
+    {
+      /* the glyph is successfully converted to a SDF */
+      if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
+      {
+        FT_FREE( bitmap->buffer );
+        slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
+      }
+
+      slot->bitmap           = target;
+      slot->bitmap_top      += y_pad;
+      slot->bitmap_left     -= x_pad;
+      slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
+    }
+    else if ( target.buffer )
+      FT_FREE( target.buffer );
+
+    return error;
+  }
+
+
+  FT_DEFINE_RENDERER(
+    ft_bitmap_sdf_renderer_class,
+
+    FT_MODULE_RENDERER,
+    sizeof ( SDF_Renderer_Module ),
+
+    "bsdf",
+    0x10000L,
+    0x20000L,
+
+    NULL,
+
+    (FT_Module_Constructor)ft_sdf_init,
+    (FT_Module_Destructor) ft_sdf_done,
+    (FT_Module_Requester)  ft_sdf_requester,
+
+    FT_GLYPH_FORMAT_BITMAP,
+
+    (FT_Renderer_RenderFunc)   ft_bsdf_render,    /* render_glyph    */
+    (FT_Renderer_TransformFunc)ft_sdf_transform,  /* transform_glyph */
+    (FT_Renderer_GetCBoxFunc)  ft_sdf_get_cbox,   /* get_glyph_cbox  */
+    (FT_Renderer_SetModeFunc)  ft_sdf_set_mode,   /* set_mode        */
+
+    (FT_Raster_Funcs*)&ft_bitmap_sdf_raster       /* raster_class    */
+  )
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/ftsdfrend.h b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfrend.h
new file mode 100644
index 0000000000..cdb9c5f02f
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/ftsdfrend.h
@@ -0,0 +1,118 @@
+/****************************************************************************
+ *
+ * ftsdfrend.h
+ *
+ *   Signed Distance Field renderer interface (specification).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#ifndef FTSDFREND_H_
+#define FTSDFREND_H_
+
+#include <freetype/ftrender.h>
+#include <freetype/ftmodapi.h>
+#include <freetype/internal/ftobjs.h>
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   SDF_Renderer_Module
+   *
+   * @description:
+   *   This struct extends the native renderer struct `FT_RendererRec`.  It
+   *   is basically used to store various parameters required by the
+   *   renderer and some additional parameters that can be used to tweak the
+   *   output of the renderer.
+   *
+   * @fields:
+   *   root ::
+   *     The native rendere struct.
+   *
+   *   spread ::
+   *     This is an essential parameter/property required by the renderer.
+   *     `spread` defines the maximum unsigned value that is present in the
+   *     final SDF output.  For the default value check file
+   *     `ftsdfcommon.h`.
+   *
+   *   flip_sign ::
+   *     By default positive values indicate positions inside of contours,
+   *     i.e., filled by a contour.  If this property is true then that
+   *     output will be the opposite of the default, i.e., negative values
+   *     indicate positions inside of contours.
+   *
+   *   flip_y ::
+   *     Setting this parameter to true makes the output image flipped
+   *     along the y-axis.
+   *
+   *   overlaps ::
+   *     Set this to true to generate SDF for glyphs having overlapping
+   *     contours.  The overlapping support is limited to glyphs that do not
+   *     have self-intersecting contours.  Also, removing overlaps require a
+   *     considerable amount of extra memory; additionally, it will not work
+   *     if generating SDF from bitmap.
+   *
+   * @note:
+   *   All properties except `overlaps` are valid for both the 'sdf' and
+   *   'bsdf' renderers.
+   *
+   */
+  typedef struct  SDF_Renderer_Module_
+  {
+    FT_RendererRec  root;
+    FT_UInt         spread;
+    FT_Bool         flip_sign;
+    FT_Bool         flip_y;
+    FT_Bool         overlaps;
+
+  } SDF_Renderer_Module, *SDF_Renderer;
+
+
+  /**************************************************************************
+   *
+   * @renderer:
+   *   ft_sdf_renderer_class
+   *
+   * @description:
+   *   Renderer to convert @FT_Outline to signed distance fields.
+   *
+   */
+  FT_DECLARE_RENDERER( ft_sdf_renderer_class )
+
+
+  /**************************************************************************
+   *
+   * @renderer:
+   *   ft_bitmap_sdf_renderer_class
+   *
+   * @description:
+   *   This is not exactly a renderer; it is just a converter that
+   *   transforms bitmaps to signed distance fields.
+   *
+   * @note:
+   *   This is not a separate module, it is part of the 'sdf' module.
+   *
+   */
+  FT_DECLARE_RENDERER( ft_bitmap_sdf_renderer_class )
+
+
+FT_END_HEADER
+
+#endif /* FTSDFREND_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/module.mk b/qtbase/src/3rdparty/freetype/src/sdf/module.mk
new file mode 100644
index 0000000000..772bc48bf7
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/module.mk
@@ -0,0 +1,29 @@
+#
+# FreeType 2 Signed Distance Field module definition
+#
+
+
+# Copyright (C) 2020-2022 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+FTMODULE_H_COMMANDS += SDF_RENDERER
+FTMODULE_H_COMMANDS += BSDF_RENDERER
+
+define SDF_RENDERER
+$(OPEN_DRIVER) FT_Renderer_Class, ft_sdf_renderer_class $(CLOSE_DRIVER)
+$(ECHO_DRIVER)sdf       $(ECHO_DRIVER_DESC)signed distance field renderer$(ECHO_DRIVER_DONE)
+endef
+
+define BSDF_RENDERER
+$(OPEN_DRIVER) FT_Renderer_Class, ft_bitmap_sdf_renderer_class $(CLOSE_DRIVER)
+$(ECHO_DRIVER)bsdf      $(ECHO_DRIVER_DESC)bitmap to signed distance field converter$(ECHO_DRIVER_DONE)
+endef
+
+#EOF
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/rules.mk b/qtbase/src/3rdparty/freetype/src/sdf/rules.mk
new file mode 100644
index 0000000000..5239d643ff
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/rules.mk
@@ -0,0 +1,78 @@
+#
+# FreeType 2 Signed Distance Field driver configuration rules
+#
+
+
+# Copyright (C) 2020-2022 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# sdf driver directory
+#
+SDF_DIR := $(SRC_DIR)/sdf
+
+
+# compilation flags for the driver
+#
+SDF_COMPILE := $(CC) $(ANSIFLAGS)                            \
+                     $I$(subst /,$(COMPILER_SEP),$(SDF_DIR)) \
+                     $(INCLUDE_FLAGS)                        \
+                     $(FT_CFLAGS)
+
+
+# sdf driver sources (i.e., C files)
+#
+SDF_DRV_SRC := $(SDF_DIR)/ftsdfrend.c   \
+               $(SDF_DIR)/ftsdf.c       \
+               $(SDF_DIR)/ftbsdf.c      \
+               $(SDF_DIR)/ftsdfcommon.c
+
+
+# sdf driver headers
+#
+SDF_DRV_H := $(SDF_DIR)/ftsdfrend.h   \
+             $(SDF_DIR)/ftsdf.h       \
+             $(SDF_DIR)/ftsdferrs.h   \
+             $(SDF_DIR)/ftsdfcommon.h
+
+
+# sdf driver object(s)
+#
+#   SDF_DRV_OBJ_M is used during `multi' builds.
+#   SDF_DRV_OBJ_S is used during `single' builds.
+#
+SDF_DRV_OBJ_M := $(SDF_DRV_SRC:$(SDF_DIR)/%.c=$(OBJ_DIR)/%.$O)
+SDF_DRV_OBJ_S := $(OBJ_DIR)/sdf.$O
+
+
+# sdf driver source file for single build
+#
+SDF_DRV_SRC_S := $(SDF_DIR)/sdf.c
+
+
+# sdf driver - single object
+#
+$(SDF_DRV_OBJ_S): $(SDF_DRV_SRC_S) $(SDF_DRV_SRC) \
+                  $(FREETYPE_H) $(SDF_DRV_H)
+	$(SDF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SDF_DRV_SRC_S))
+
+
+# sdf driver - multiple objects
+#
+$(OBJ_DIR)/%.$O: $(SDF_DIR)/%.c $(FREETYPE_H) $(SDF_DRV_H)
+	$(SDF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# update main driver list
+#
+DRV_OBJS_S += $(SDF_DRV_OBJ_S)
+DRV_OBJS_M += $(SDF_DRV_OBJ_M)
+
+
+# EOF
diff --git a/qtbase/src/3rdparty/freetype/src/sdf/sdf.c b/qtbase/src/3rdparty/freetype/src/sdf/sdf.c
new file mode 100644
index 0000000000..297ba9ab02
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sdf/sdf.c
@@ -0,0 +1,29 @@
+/****************************************************************************
+ *
+ * sdf.c
+ *
+ *   FreeType Signed Distance Field renderer module component (body only).
+ *
+ * Copyright (C) 2020-2022 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * Written by Anuj Verma.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+#define FT_MAKE_OPTION_SINGLE_OBJECT
+
+#include "ftsdfrend.c"
+#include "ftsdfcommon.c"
+#include "ftbsdf.c"
+#include "ftsdf.c"
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/module.mk b/qtbase/src/3rdparty/freetype/src/sfnt/module.mk
index 0f459d8421..dbdde1564e 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.c b/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.c
index 1bd3a7eeb5..0ce4bdb6b5 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.c
@@ -4,7 +4,7 @@
  *
  *   PNG Bitmap glyph support.
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * Google, Inc.
  * Written by Stuart Gill and Behdad Esfahbod.
  *
@@ -72,7 +72,6 @@
         ( ( __clang_major__ >= 4 )                               ||       \
         ( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \
     defined( __OPTIMIZE__ )                                            && \
-    !defined( __EMSCRIPTEN__ )                                         && \
     defined( __SSE__ )                                                 && \
     __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
 
@@ -271,7 +270,10 @@
 
     int         bitdepth, color_type, interlace;
     FT_Int      i;
-    png_byte*  *rows = NULL; /* pacify compiler */
+
+    /* `rows` gets modified within a 'setjmp' scope; */
+    /* we thus need the `volatile` keyword.          */
+    png_byte* *volatile  rows = NULL;
 
 
     if ( x_offset < 0 ||
@@ -365,7 +367,7 @@
     }
 
     /* transform transparency to alpha */
-    if ( png_get_valid(png, info, PNG_INFO_tRNS ) )
+    if ( png_get_valid( png, info, PNG_INFO_tRNS ) )
       png_set_tRNS_to_alpha( png );
 
     if ( bitdepth == 16 )
@@ -385,7 +387,7 @@
     png_set_filler( png, 0xFF, PNG_FILLER_AFTER );
 
     /* recheck header after setting EXPAND options */
-    png_read_update_info(png, info );
+    png_read_update_info( png, info );
     png_get_IHDR( png, info,
                   &imgWidth, &imgHeight,
                   &bitdepth, &color_type, &interlace,
@@ -428,7 +430,7 @@
         goto DestroyExit;
     }
 
-    if ( FT_NEW_ARRAY( rows, imgHeight ) )
+    if ( FT_QNEW_ARRAY( rows, imgHeight ) )
     {
       error = FT_THROW( Out_Of_Memory );
       goto DestroyExit;
@@ -439,11 +441,11 @@
 
     png_read_image( png, rows );
 
-    FT_FREE( rows );
-
     png_read_end( png, info );
 
   DestroyExit:
+    /* even if reading fails with longjmp, rows must be freed */
+    FT_FREE( rows );
     png_destroy_read_struct( &png, &info, NULL );
     FT_Stream_Close( &stream );
 
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.h b/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.h
index 2d6e83d69b..36d749c3c3 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/pngshim.h
@@ -4,7 +4,7 @@
  *
  *   PNG Bitmap glyph support.
  *
- * Copyright (C) 2013-2020 by
+ * Copyright (C) 2013-2022 by
  * Google, Inc.
  * Written by Stuart Gill and Behdad Esfahbod.
  *
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/rules.mk b/qtbase/src/3rdparty/freetype/src/sfnt/rules.mk
index f56ef060ed..ac4b571226 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -36,6 +36,7 @@ SFNT_DRV_SRC := $(SFNT_DIR)/pngshim.c   \
                 $(SFNT_DIR)/ttbdf.c     \
                 $(SFNT_DIR)/ttcmap.c    \
                 $(SFNT_DIR)/ttcolr.c    \
+                $(SFNT_DIR)/ttsvg.c     \
                 $(SFNT_DIR)/ttcpal.c    \
                 $(SFNT_DIR)/ttkern.c    \
                 $(SFNT_DIR)/ttload.c    \
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.c b/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.c
index 0460339a74..cc121e5790 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.c
@@ -4,7 +4,7 @@
  *
  *   High-level SFNT driver interface (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -36,6 +36,10 @@
 #include "ttcpal.h"
 #endif
 
+#ifdef FT_CONFIG_OPTION_SVG
+#include "ttsvg.h"
+#endif
+
 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
 #include "ttpost.h"
 #endif
@@ -491,17 +495,15 @@
                   char_type_func  char_type,
                   FT_Bool         report_invalid_characters )
   {
-    FT_Error  error = FT_Err_Ok;
+    FT_Error  error;
 
     char*       result = NULL;
     FT_String*  r;
     FT_Char*    p;
     FT_UInt     len;
 
-    FT_UNUSED( error );
-
 
-    if ( FT_ALLOC( result, entry->stringLength / 2 + 1 ) )
+    if ( FT_QALLOC( result, entry->stringLength / 2 + 1 ) )
       return NULL;
 
     if ( FT_STREAM_SEEK( entry->stringOffset ) ||
@@ -550,17 +552,15 @@
                     char_type_func  char_type,
                     FT_Bool         report_invalid_characters )
   {
-    FT_Error  error = FT_Err_Ok;
+    FT_Error  error;
 
     char*       result = NULL;
     FT_String*  r;
     FT_Char*    p;
     FT_UInt     len;
 
-    FT_UNUSED( error );
 
-
-    if ( FT_ALLOC( result, entry->stringLength + 1 ) )
+    if ( FT_QALLOC( result, entry->stringLength + 1 ) )
       return NULL;
 
     if ( FT_STREAM_SEEK( entry->stringOffset ) ||
@@ -868,8 +868,8 @@
         result[len] = '\0';
 
         FT_TRACE0(( "sfnt_get_var_ps_name:"
-                    " Shortening variation PS name prefix\n"
-                    "                     "
+                    " Shortening variation PS name prefix\n" ));
+        FT_TRACE0(( "                     "
                     " to %d characters\n", len ));
       }
 
@@ -920,16 +920,16 @@
         if ( !subfamily_name )
         {
           FT_TRACE1(( "sfnt_get_var_ps_name:"
-                      " can't construct named instance PS name;\n"
-                      "                     "
+                      " can't construct named instance PS name;\n" ));
+          FT_TRACE1(( "                     "
                       " trying to construct normal instance PS name\n" ));
           goto construct_instance_name;
         }
 
         /* after the prefix we have character `-' followed by the   */
         /* subfamily name (using only characters a-z, A-Z, and 0-9) */
-        if ( FT_ALLOC( result, face->var_postscript_prefix_len +
-                               1 + ft_strlen( subfamily_name ) + 1 ) )
+        if ( FT_QALLOC( result, face->var_postscript_prefix_len +
+                                1 + ft_strlen( subfamily_name ) + 1 ) )
           return NULL;
 
         ft_strcpy( result, face->var_postscript_prefix );
@@ -957,9 +957,9 @@
     construct_instance_name:
       axis = mm_var->axis;
 
-      if ( FT_ALLOC( result,
-                     face->var_postscript_prefix_len +
-                       num_coords * MAX_VALUE_DESCRIPTOR_LEN + 1 ) )
+      if ( FT_QALLOC( result,
+                      face->var_postscript_prefix_len +
+                        num_coords * MAX_VALUE_DESCRIPTOR_LEN + 1 ) )
         return NULL;
 
       p = result;
@@ -993,6 +993,7 @@
         if ( t != ' ' && ft_isalnum( t ) )
           *p++ = t;
       }
+      *p++ = '\0';
     }
 
   check_length:
@@ -1213,6 +1214,14 @@
 #define PUT_COLOR_LAYERS( a )  NULL
 #endif
 
+#ifdef FT_CONFIG_OPTION_SVG
+#define PUT_SVG_SUPPORT( a )  a
+#else
+#define PUT_SVG_SUPPORT( a )  NULL
+#endif
+
+#define PUT_COLOR_LAYERS_V1( a )  PUT_COLOR_LAYERS( a )
+
 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
 #define PUT_PS_NAMES( a )  a
 #else
@@ -1271,9 +1280,9 @@
                             /* TT_Free_Table_Func      free_eblc       */
 
     PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike     ),
-                   /* TT_Set_SBit_Strike_Func      set_sbit_strike     */
+                  /* TT_Set_SBit_Strike_Func      set_sbit_strike      */
     PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ),
-                   /* TT_Load_Strike_Metrics_Func  load_strike_metrics */
+                  /* TT_Load_Strike_Metrics_Func  load_strike_metrics  */
 
     PUT_COLOR_LAYERS( tt_face_load_cpal ),
                             /* TT_Load_Table_Func      load_cpal       */
@@ -1287,13 +1296,32 @@
                             /* TT_Set_Palette_Func     set_palette     */
     PUT_COLOR_LAYERS( tt_face_get_colr_layer ),
                             /* TT_Get_Colr_Layer_Func  get_colr_layer  */
+
+    PUT_COLOR_LAYERS_V1( tt_face_get_colr_glyph_paint ),
+              /* TT_Get_Color_Glyph_Paint_Func    get_colr_glyph_paint */
+    PUT_COLOR_LAYERS_V1( tt_face_get_color_glyph_clipbox ),
+              /* TT_Get_Color_Glyph_ClipBox_Func  get_clipbox          */
+    PUT_COLOR_LAYERS_V1( tt_face_get_paint_layers ),
+              /* TT_Get_Paint_Layers_Func         get_paint_layers     */
+    PUT_COLOR_LAYERS_V1( tt_face_get_colorline_stops ),
+              /* TT_Get_Paint                     get_paint            */
+    PUT_COLOR_LAYERS_V1( tt_face_get_paint ),
+              /* TT_Get_Colorline_Stops_Func      get_colorline_stops  */
+
     PUT_COLOR_LAYERS( tt_face_colr_blend_layer ),
                             /* TT_Blend_Colr_Func      colr_blend      */
 
     tt_face_get_metrics,    /* TT_Get_Metrics_Func     get_metrics     */
 
     tt_face_get_name,       /* TT_Get_Name_Func        get_name        */
-    sfnt_get_name_id        /* TT_Get_Name_ID_Func     get_name_id     */
+    sfnt_get_name_id,       /* TT_Get_Name_ID_Func     get_name_id     */
+
+    PUT_SVG_SUPPORT( tt_face_load_svg ),
+                            /* TT_Load_Table_Func      load_svg        */
+    PUT_SVG_SUPPORT( tt_face_free_svg ),
+                            /* TT_Free_Table_Func      free_svg        */
+    PUT_SVG_SUPPORT( tt_face_load_svg_doc )
+                            /* TT_Load_Svg_Doc_Func    load_svg_doc    */
   )
 
 
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.h b/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.h
index 1ac2706325..6a2e3e9c7b 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
  *
  *   High-level SFNT driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sferrors.h b/qtbase/src/3rdparty/freetype/src/sfnt/sferrors.h
index 55c3e76b66..99ef3f9fce 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sferrors.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
  *
  *   SFNT error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfnt.c b/qtbase/src/3rdparty/freetype/src/sfnt/sfnt.c
index 471239ff0b..9b3ceaedc0 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfnt.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfnt.c
@@ -4,7 +4,7 @@
  *
  *   Single object library component.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,6 +27,7 @@
 #include "ttcmap.c"
 #include "ttcolr.c"
 #include "ttcpal.c"
+#include "ttsvg.c"
 
 #include "ttkern.c"
 #include "ttload.c"
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.c b/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.c
index 39460be2e6..a0da984e7a 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.c
@@ -4,7 +4,7 @@
  *
  *   SFNT object management (base).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -65,7 +65,7 @@
 
     len = (FT_UInt)entry->stringLength / 2;
 
-    if ( FT_NEW_ARRAY( string, len + 1 ) )
+    if ( FT_QNEW_ARRAY( string, len + 1 ) )
       return NULL;
 
     for ( n = 0; n < len; n++ )
@@ -100,7 +100,7 @@
 
     len = (FT_UInt)entry->stringLength;
 
-    if ( FT_NEW_ARRAY( string, len + 1 ) )
+    if ( FT_QNEW_ARRAY( string, len + 1 ) )
       return NULL;
 
     for ( n = 0; n < len; n++ )
@@ -360,17 +360,27 @@
       FT_FRAME_END
     };
 
+#ifndef FT_CONFIG_OPTION_USE_BROTLI
+    FT_UNUSED( face_instance_index );
+    FT_UNUSED( woff2_num_faces );
+#endif
+
 
     face->ttc_header.tag     = 0;
     face->ttc_header.version = 0;
     face->ttc_header.count   = 0;
 
+#if defined( FT_CONFIG_OPTION_USE_ZLIB )   || \
+    defined( FT_CONFIG_OPTION_USE_BROTLI )
   retry:
+#endif
+
     offset = FT_STREAM_POS();
 
     if ( FT_READ_ULONG( tag ) )
       return error;
 
+#ifdef FT_CONFIG_OPTION_USE_ZLIB
     if ( tag == TTAG_wOFF )
     {
       FT_TRACE2(( "sfnt_open_font: file is a WOFF; synthesizing SFNT\n" ));
@@ -386,7 +396,9 @@
       stream = face->root.stream;
       goto retry;
     }
+#endif
 
+#ifdef FT_CONFIG_OPTION_USE_BROTLI
     if ( tag == TTAG_wOF2 )
     {
       FT_TRACE2(( "sfnt_open_font: file is a WOFF2; synthesizing SFNT\n" ));
@@ -405,6 +417,7 @@
       stream = face->root.stream;
       goto retry;
     }
+#endif
 
     if ( tag != 0x00010000UL &&
          tag != TTAG_ttcf    &&
@@ -446,7 +459,7 @@
         return FT_THROW( Array_Too_Large );
 
       /* now read the offsets of each font in the file */
-      if ( FT_NEW_ARRAY( face->ttc_header.offsets, face->ttc_header.count ) )
+      if ( FT_QNEW_ARRAY( face->ttc_header.offsets, face->ttc_header.count ) )
         return error;
 
       if ( FT_FRAME_ENTER( face->ttc_header.count * 4L ) )
@@ -464,7 +477,7 @@
       face->ttc_header.version = 1 << 16;
       face->ttc_header.count   = 1;
 
-      if ( FT_NEW( face->ttc_header.offsets ) )
+      if ( FT_QNEW( face->ttc_header.offsets ) )
         return error;
 
       face->ttc_header.offsets[0] = offset;
@@ -553,7 +566,7 @@
     face_index = FT_ABS( face_instance_index ) & 0xFFFF;
 
     /* value -(N+1) requests information on index N */
-    if ( face_instance_index < 0 )
+    if ( face_instance_index < 0 && face_index > 0 )
       face_index--;
 
     if ( face_index >= face->ttc_header.count )
@@ -643,8 +656,8 @@
        */
 
       if ( ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) &&
-           !( FT_ALLOC( default_values, num_axes * 4 )  ||
-              FT_ALLOC( instance_values, num_axes * 4 ) )      )
+           !( FT_QALLOC(  default_values, num_axes * 4 ) ||
+              FT_QALLOC( instance_values, num_axes * 4 ) )     )
       {
         /* the current stream position is 16 bytes after the table start */
         FT_ULong  array_start = FT_STREAM_POS() - 16 + offset;
@@ -771,17 +784,23 @@
                   FT_Int         num_params,
                   FT_Parameter*  params )
   {
-    FT_Error      error;
+    FT_Error  error;
 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
-    FT_Error      psnames_error;
+    FT_Error  psnames_error;
 #endif
-    FT_Bool       has_outline;
-    FT_Bool       is_apple_sbit;
-    FT_Bool       is_apple_sbix;
-    FT_Bool       has_CBLC;
-    FT_Bool       has_CBDT;
-    FT_Bool       ignore_typographic_family    = FALSE;
-    FT_Bool       ignore_typographic_subfamily = FALSE;
+
+    FT_Bool  has_outline;
+    FT_Bool  is_apple_sbit;
+
+    FT_Bool  has_CBLC;
+    FT_Bool  has_CBDT;
+    FT_Bool  has_EBLC;
+    FT_Bool  has_bloc;
+    FT_Bool  has_sbix;
+
+    FT_Bool  ignore_typographic_family    = FALSE;
+    FT_Bool  ignore_typographic_subfamily = FALSE;
+    FT_Bool  ignore_sbix                  = FALSE;
 
     SFNT_Service  sfnt = (SFNT_Service)face->sfnt;
 
@@ -800,6 +819,8 @@
           ignore_typographic_family = TRUE;
         else if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY )
           ignore_typographic_subfamily = TRUE;
+        else if ( params[i].tag == FT_PARAM_TAG_IGNORE_SBIX )
+          ignore_sbix = TRUE;
       }
     }
 
@@ -820,7 +841,8 @@
     /* it doesn't contain outlines.                                */
     /*                                                             */
 
-    FT_TRACE2(( "sfnt_load_face: %p\n\n", (void *)face ));
+    FT_TRACE2(( "sfnt_load_face: %p\n", (void *)face ));
+    FT_TRACE2(( "\n" ));
 
     /* do we have outlines in there? */
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
@@ -834,14 +856,17 @@
                            tt_face_lookup_table( face, TTAG_CFF2 ) );
 #endif
 
-    is_apple_sbit = 0;
-    is_apple_sbix = !face->goto_table( face, TTAG_sbix, stream, 0 );
+    /* check which sbit formats are present */
+    has_CBLC = !face->goto_table( face, TTAG_CBLC, stream, 0 );
+    has_CBDT = !face->goto_table( face, TTAG_CBDT, stream, 0 );
+    has_EBLC = !face->goto_table( face, TTAG_EBLC, stream, 0 );
+    has_bloc = !face->goto_table( face, TTAG_bloc, stream, 0 );
+    has_sbix = !face->goto_table( face, TTAG_sbix, stream, 0 );
+
+    is_apple_sbit = FALSE;
 
-    /* Apple 'sbix' color bitmaps are rendered scaled and then the 'glyf'
-     * outline rendered on top.  We don't support that yet, so just ignore
-     * the 'glyf' outline and advertise it as a bitmap-only font. */
-    if ( is_apple_sbix )
-      has_outline = FALSE;
+    if ( ignore_sbix )
+      has_sbix = FALSE;
 
     /* if this font doesn't contain outlines, we try to load */
     /* a `bhed' table                                        */
@@ -853,16 +878,13 @@
 
     /* load the font header (`head' table) if this isn't an Apple */
     /* sbit font file                                             */
-    if ( !is_apple_sbit || is_apple_sbix )
+    if ( !is_apple_sbit || has_sbix )
     {
       LOAD_( head );
       if ( error )
         goto Exit;
     }
 
-    has_CBLC = !face->goto_table( face, TTAG_CBLC, stream, 0 );
-    has_CBDT = !face->goto_table( face, TTAG_CBDT, stream, 0 );
-
     /* Ignore outlines for CBLC/CBDT fonts. */
     if ( has_CBLC || has_CBDT )
       has_outline = FALSE;
@@ -972,7 +994,11 @@
     /* the optional tables */
 
     /* embedded bitmap support */
-    if ( sfnt->load_eblc )
+    /* TODO: Replace this clumsy check for all possible sbit tables     */
+    /*       with something better (for example, by passing a parameter */
+    /*       to suppress 'sbix' loading).                               */
+    if ( sfnt->load_eblc                                  &&
+         ( has_CBLC || has_EBLC || has_bloc || has_sbix ) )
       LOAD_( eblc );
 
     /* colored glyph support */
@@ -982,6 +1008,10 @@
       LOAD_( colr );
     }
 
+    /* OpenType-SVG glyph support */
+    if ( sfnt->load_svg )
+      LOAD_( svg );
+
     /* consider the pclt, kerning, and gasp tables as optional */
     LOAD_( pclt );
     LOAD_( gasp );
@@ -1036,11 +1066,19 @@
        */
       if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_CBLC ||
            face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX ||
-           face->colr                                       )
+           face->colr                                       ||
+           face->svg                                        )
         flags |= FT_FACE_FLAG_COLOR;      /* color glyphs */
 
       if ( has_outline == TRUE )
-        flags |= FT_FACE_FLAG_SCALABLE;   /* scalable outlines */
+      {
+        /* by default (and for backward compatibility) we handle */
+        /* fonts with an 'sbix' table as bitmap-only             */
+        if ( has_sbix )
+          flags |= FT_FACE_FLAG_SBIX;     /* with 'sbix' bitmaps */
+        else
+          flags |= FT_FACE_FLAG_SCALABLE; /* scalable outlines */
+      }
 
       /* The sfnt driver only supports bitmap fonts natively, thus we */
       /* don't set FT_FACE_FLAG_HINTER.                               */
@@ -1149,9 +1187,10 @@
         }
 
         /* synthesize Unicode charmap if one is missing */
-        if ( !has_unicode )
+        if ( !has_unicode                                &&
+             root->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
         {
-          FT_CharMapRec cmaprec;
+          FT_CharMapRec  cmaprec;
 
 
           cmaprec.face        = root;
@@ -1207,7 +1246,7 @@
           /* of `FT_Face', we map `available_sizes' indices to strike    */
           /* indices                                                     */
           if ( FT_NEW_ARRAY( root->available_sizes, count ) ||
-               FT_NEW_ARRAY( sbit_strike_map, count ) )
+               FT_QNEW_ARRAY( sbit_strike_map, count ) )
             goto Exit;
 
           bsize_idx = 0;
@@ -1236,7 +1275,7 @@
           }
 
           /* reduce array size to the actually used elements */
-          (void)FT_RENEW_ARRAY( sbit_strike_map, count, bsize_idx );
+          FT_MEM_QRENEW_ARRAY( sbit_strike_map, count, bsize_idx );
 
           /* from now on, all strike indices are mapped */
           /* using `sbit_strike_map'                    */
@@ -1262,7 +1301,8 @@
        *
        * Set up metrics.
        */
-      if ( FT_IS_SCALABLE( root ) )
+      if ( FT_IS_SCALABLE( root ) ||
+           FT_HAS_SBIX( root )    )
       {
         /* XXX What about if outline header is missing */
         /*     (e.g. sfnt wrapped bitmap)?             */
@@ -1401,6 +1441,12 @@
         sfnt->free_cpal( face );
         sfnt->free_colr( face );
       }
+
+#ifdef FT_CONFIG_OPTION_SVG
+      /* free SVG data */
+      if ( sfnt->free_svg )
+        sfnt->free_svg( face );
+#endif
     }
 
 #ifdef TT_CONFIG_OPTION_BDF
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.h b/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.h
index e8e3042083..1d99bfede4 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfobjs.h
@@ -4,7 +4,7 @@
  *
  *   SFNT object management (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.c b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.c
index f0a32e1e06..0e8ec3fa93 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.c
@@ -4,7 +4,7 @@
  *
  *   WOFF format management (base).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -23,6 +23,9 @@
 #include <freetype/ftgzip.h>
 
 
+#ifdef FT_CONFIG_OPTION_USE_ZLIB
+
+
   /**************************************************************************
    *
    * The macro FT_COMPONENT is used in trace mode.  It is an implicit
@@ -61,12 +64,11 @@
     FT_FREE( stream->base );
 
     stream->size  = 0;
-    stream->base  = NULL;
     stream->close = NULL;
   }
 
 
-  FT_CALLBACK_DEF( int )
+  FT_COMPARE_DEF( int )
   compare_offsets( const void*  a,
                    const void*  b )
   {
@@ -109,7 +111,7 @@
     FT_ULong        sfnt_offset;
 
     FT_Int          nn;
-    FT_ULong        old_tag = 0;
+    FT_Tag          old_tag = 0;
 
     static const FT_Frame_Field  woff_header_fields[] =
     {
@@ -160,8 +162,8 @@
     }
 
     /* Don't trust `totalSfntSize' before thorough checks. */
-    if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
-         FT_NEW( sfnt_stream )                         )
+    if ( FT_QALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
+         FT_NEW( sfnt_stream )                          )
       goto Exit;
 
     sfnt_header = sfnt;
@@ -198,9 +200,9 @@
          FT_NEW_ARRAY( indices, woff.num_tables ) )
       goto Exit;
 
-    FT_TRACE2(( "\n"
-                "  tag    offset    compLen  origLen  checksum\n"
-                "  -------------------------------------------\n" ));
+    FT_TRACE2(( "\n" ));
+    FT_TRACE2(( "  tag    offset    compLen  origLen  checksum\n" ));
+    FT_TRACE2(( "  -------------------------------------------\n" ));
 
     if ( FT_FRAME_ENTER( 20L * woff.num_tables ) )
       goto Exit;
@@ -360,8 +362,6 @@
       }
       else
       {
-#ifdef FT_CONFIG_OPTION_USE_ZLIB
-
         /* Uncompress with zlib. */
         FT_ULong  output_len = table->OrigLength;
 
@@ -377,13 +377,6 @@
           error = FT_THROW( Invalid_Table );
           goto Exit1;
         }
-
-#else /* !FT_CONFIG_OPTION_USE_ZLIB */
-
-        error = FT_THROW( Unimplemented_Feature );
-        goto Exit1;
-
-#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
       }
 
       FT_FRAME_EXIT();
@@ -433,5 +426,12 @@
 #undef WRITE_USHORT
 #undef WRITE_ULONG
 
+#else /* !FT_CONFIG_OPTION_USE_ZLIB */
+
+  /* ANSI C doesn't like empty source files */
+  typedef int  _sfwoff_dummy;
+
+#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
+
 
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.h b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.h
index d177ab1160..5866a16194 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff.h
@@ -4,7 +4,7 @@
  *
  *   WOFFF format management (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,12 +26,15 @@
 
 FT_BEGIN_HEADER
 
+#ifdef FT_CONFIG_OPTION_USE_ZLIB
 
   FT_LOCAL( FT_Error )
   woff_open_font( FT_Stream  stream,
                   TT_Face    face );
 
 
+#endif
+
 FT_END_HEADER
 
 #endif /* SFWOFF_H_ */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.c b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.c
index 5c8202f823..b2855b8e72 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.c
@@ -4,7 +4,7 @@
  *
  *   WOFF2 format management (base).
  *
- * Copyright (C) 2019-2020 by
+ * Copyright (C) 2019-2022 by
  * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,8 +26,6 @@
 
 #include <brotli/decode.h>
 
-#endif
-
 
   /**************************************************************************
    *
@@ -86,6 +84,8 @@
 #define BBOX_STREAM         5
 #define INSTRUCTION_STREAM  6
 
+#define HAVE_OVERLAP_SIMPLE_BITMAP  0x1
+
 
   static void
   stream_close( FT_Stream  stream )
@@ -96,20 +96,19 @@
     FT_FREE( stream->base );
 
     stream->size  = 0;
-    stream->base  = NULL;
     stream->close = NULL;
   }
 
 
-  FT_CALLBACK_DEF( int )
+  FT_COMPARE_DEF( int )
   compare_tags( const void*  a,
                 const void*  b )
   {
     WOFF2_Table  table1 = *(WOFF2_Table*)a;
     WOFF2_Table  table2 = *(WOFF2_Table*)b;
 
-    FT_ULong  tag1 = table1->Tag;
-    FT_ULong  tag2 = table2->Tag;
+    FT_Tag  tag1 = table1->Tag;
+    FT_Tag  tag2 = table2->Tag;
 
 
     if ( tag1 > tag2 )
@@ -316,8 +315,6 @@
                     const FT_Byte*  src,
                     FT_ULong        src_size )
   {
-#ifdef FT_CONFIG_OPTION_USE_BROTLI
-
     /* this cast is only of importance on 32bit systems; */
     /* we don't validate it                              */
     FT_Offset            uncompressed_size = (FT_Offset)dst_size;
@@ -338,20 +335,13 @@
 
     FT_TRACE2(( "woff2_decompress: Brotli stream decompressed.\n" ));
     return FT_Err_Ok;
-
-#else /* !FT_CONFIG_OPTION_USE_BROTLI */
-
-    FT_ERROR(( "woff2_decompress: Brotli support not available.\n" ));
-    return FT_THROW( Unimplemented_Feature );
-
-#endif /* !FT_CONFIG_OPTION_USE_BROTLI */
   }
 
 
   static WOFF2_Table
   find_table( WOFF2_Table*  tables,
               FT_UShort     num_tables,
-              FT_ULong      tag )
+              FT_Tag        tag )
   {
     FT_Int  i;
 
@@ -534,6 +524,7 @@
                 const WOFF2_Point  points,
                 FT_UShort          n_contours,
                 FT_UShort          instruction_len,
+                FT_Bool            have_overlap,
                 FT_Byte*           dst,
                 FT_ULong           dst_size,
                 FT_ULong*          glyph_size )
@@ -561,6 +552,9 @@
       FT_Int   dy   = point.y - last_y;
 
 
+      if ( i == 0 && have_overlap )
+        flag |= GLYF_OVERLAP_SIMPLE;
+
       if ( dx == 0 )
         flag |= GLYF_THIS_X_IS_SAME;
       else if ( dx > -256 && dx < 256 )
@@ -790,7 +784,7 @@
       goto Fail;
 
     loca_buf_size = loca_values_size * offset_size;
-    if ( FT_NEW_ARRAY( loca_buf, loca_buf_size ) )
+    if ( FT_QNEW_ARRAY( loca_buf, loca_buf_size ) )
       goto Fail;
 
     dst = loca_buf;
@@ -845,15 +839,18 @@
 
     FT_UInt  num_substreams = 7;
 
+    FT_UShort  option_flags;
     FT_UShort  num_glyphs;
     FT_UShort  index_format;
     FT_ULong   expected_loca_length;
     FT_UInt    offset;
     FT_UInt    i;
     FT_ULong   points_size;
-    FT_ULong   bitmap_length;
     FT_ULong   glyph_buf_size;
     FT_ULong   bbox_bitmap_offset;
+    FT_ULong   bbox_bitmap_length;
+    FT_ULong   overlap_bitmap_offset = 0;
+    FT_ULong   overlap_bitmap_length = 0;
 
     const FT_ULong  glyf_start  = *out_offset;
     FT_ULong        dest_offset = *out_offset;
@@ -869,15 +866,17 @@
     if ( FT_NEW_ARRAY( substreams, num_substreams ) )
       goto Fail;
 
-    if ( FT_STREAM_SKIP( 4 ) )
+    if ( FT_STREAM_SKIP( 2 ) )
+      goto Fail;
+    if ( FT_READ_USHORT( option_flags ) )
       goto Fail;
     if ( FT_READ_USHORT( num_glyphs ) )
       goto Fail;
     if ( FT_READ_USHORT( index_format ) )
       goto Fail;
 
-    FT_TRACE4(( "num_glyphs = %u; index_format = %u\n",
-                num_glyphs, index_format ));
+    FT_TRACE4(( "option_flags = %u; num_glyphs = %u; index_format = %u\n",
+                option_flags, num_glyphs, index_format ));
 
     info->num_glyphs = num_glyphs;
 
@@ -890,7 +889,7 @@
     if ( info->loca_table->dst_length != expected_loca_length )
       goto Fail;
 
-    offset = ( 2 + num_substreams ) * 4;
+    offset = 2 + 2 + 2 + 2 + ( num_substreams * 4 );
     if ( offset > info->glyf_table->TransformLength )
       goto Fail;
 
@@ -913,6 +912,20 @@
       offset += substream_size;
     }
 
+    if ( option_flags & HAVE_OVERLAP_SIMPLE_BITMAP )
+    {
+      /* Size of overlapBitmap = floor((numGlyphs + 7) / 8) */
+      overlap_bitmap_length = ( num_glyphs + 7U ) >> 3;
+      if ( overlap_bitmap_length > info->glyf_table->TransformLength - offset )
+        goto Fail;
+
+      overlap_bitmap_offset = pos + offset;
+
+      FT_TRACE5(( "  Overlap bitmap: offset = %lu; size = %lu;\n",
+                  overlap_bitmap_offset, overlap_bitmap_length ));
+      offset += overlap_bitmap_length;
+    }
+
     if ( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) )
       goto Fail;
 
@@ -920,8 +933,9 @@
     bbox_bitmap_offset = substreams[BBOX_STREAM].offset;
 
     /* Size of bboxBitmap = 4 * floor((numGlyphs + 31) / 32) */
-    bitmap_length                   = ( ( num_glyphs + 31U ) >> 5 ) << 2;
-    substreams[BBOX_STREAM].offset += bitmap_length;
+    bbox_bitmap_length              = ( ( num_glyphs + 31U ) >> 5 ) << 2;
+    /* bboxStreamSize is the combined size of bboxBitmap and bboxStream. */
+    substreams[BBOX_STREAM].offset += bbox_bitmap_length;
 
     glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF;
     if ( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) )
@@ -959,7 +973,7 @@
         /* composite glyph */
         FT_Bool    have_instructions = FALSE;
         FT_UShort  instruction_size  = 0;
-        FT_ULong   composite_size;
+        FT_ULong   composite_size    = 0;
         FT_ULong   size_needed;
         FT_Byte*   pointer           = NULL;
 
@@ -1037,8 +1051,11 @@
         FT_ULong   flag_size;
         FT_ULong   triplet_size;
         FT_ULong   triplet_bytes_used;
-        FT_Byte*   flags_buf   = NULL;
-        FT_Byte*   triplet_buf = NULL;
+        FT_Bool    have_overlap  = FALSE;
+        FT_Byte    overlap_bitmap;
+        FT_ULong   overlap_offset;
+        FT_Byte*   flags_buf     = NULL;
+        FT_Byte*   triplet_buf   = NULL;
         FT_UShort  instruction_size;
         FT_ULong   size_needed;
         FT_Int     end_point;
@@ -1047,6 +1064,17 @@
         FT_Byte*   pointer = NULL;
 
 
+        /* Set `have_overlap`. */
+        if ( overlap_bitmap_offset )
+        {
+          overlap_offset = overlap_bitmap_offset + ( i >> 3 );
+          if ( FT_STREAM_SEEK( overlap_offset ) ||
+               FT_READ_BYTE( overlap_bitmap )   )
+            goto Fail;
+          if ( overlap_bitmap & ( 0x80 >> ( i & 7 ) ) )
+            have_overlap = TRUE;
+        }
+
         if ( FT_NEW_ARRAY( n_points_arr, n_contours ) )
           goto Fail;
 
@@ -1167,6 +1195,7 @@
                            points,
                            n_contours,
                            instruction_size,
+                           have_overlap,
                            glyph_buf,
                            glyph_buf_size,
                            &glyph_size ) )
@@ -1852,11 +1881,10 @@
          FT_NEW_ARRAY( indices, woff2.num_tables ) )
       goto Exit;
 
-    FT_TRACE2((
-      "\n"
-      "  tag    flags    transform  origLen   transformLen   offset\n"
-      "  -----------------------------------------------------------\n" ));
-   /* "  XXXX  XXXXXXXX  XXXXXXXX   XXXXXXXX    XXXXXXXX    XXXXXXXX" */
+    FT_TRACE2(( "\n" ));
+    FT_TRACE2(( "  tag    flags    transform  origLen   transformLen   offset\n" ));
+    FT_TRACE2(( "  -----------------------------------------------------------\n" ));
+             /* "  XXXX  XXXXXXXX  XXXXXXXX   XXXXXXXX    XXXXXXXX    XXXXXXXX" */
 
     for ( nn = 0; nn < woff2.num_tables; nn++ )
     {
@@ -2076,7 +2104,7 @@
         error = FT_THROW( Invalid_Table );
         goto Exit;
       }
-      file_offset = ROUND4(woff2.metaOffset + woff2.metaLength);
+      file_offset = ROUND4( woff2.metaOffset + woff2.metaLength );
     }
 
     if ( woff2.privOffset )
@@ -2086,7 +2114,7 @@
         error = FT_THROW( Invalid_Table );
         goto Exit;
       }
-      file_offset = ROUND4(woff2.privOffset + woff2.privLength);
+      file_offset = ROUND4( woff2.privOffset + woff2.privLength );
     }
 
     if ( file_offset != ( ROUND4( woff2.length ) ) )
@@ -2098,7 +2126,7 @@
     /* Validate requested face index. */
     *num_faces = woff2.num_fonts;
     /* value -(N+1) requests information on index N */
-    if ( *face_instance_index < 0 )
+    if ( *face_instance_index < 0 && face_index > 0 )
       face_index--;
 
     if ( face_index >= woff2.num_fonts )
@@ -2119,8 +2147,8 @@
 
 
       /* Create a temporary array. */
-      if ( FT_NEW_ARRAY( temp_indices,
-                         ttc_font->num_tables ) )
+      if ( FT_QNEW_ARRAY( temp_indices,
+                          ttc_font->num_tables ) )
         goto Exit;
 
       FT_TRACE4(( "Storing tables for TTC face index %d.\n", face_index ));
@@ -2128,9 +2156,9 @@
         temp_indices[nn] = indices[ttc_font->table_indices[nn]];
 
       /* Resize array to required size. */
-      if ( FT_RENEW_ARRAY( indices,
-                           woff2.num_tables,
-                           ttc_font->num_tables ) )
+      if ( FT_QRENEW_ARRAY( indices,
+                            woff2.num_tables,
+                            ttc_font->num_tables ) )
         goto Exit;
 
       for ( nn = 0; nn < ttc_font->num_tables; nn++ )
@@ -2170,8 +2198,8 @@
     }
 
     /* Write sfnt header. */
-    if ( FT_ALLOC( sfnt, sfnt_size ) ||
-         FT_NEW( sfnt_stream )       )
+    if ( FT_QALLOC( sfnt, sfnt_size ) ||
+         FT_NEW( sfnt_stream )        )
       goto Exit;
 
     sfnt_header = sfnt;
@@ -2209,6 +2237,25 @@
               sizeof ( WOFF2_Table ),
               compare_tags );
 
+    /* reject fonts that have multiple tables with the same tag */
+    for ( nn = 1; nn < woff2.num_tables; nn++ )
+    {
+      FT_Tag  tag = indices[nn]->Tag;
+
+
+      if ( tag == indices[nn - 1]->Tag )
+      {
+        FT_ERROR(( "woff2_open_font:"
+                   " multiple tables with tag `%c%c%c%c'.\n",
+                   (FT_Char)( tag >> 24 ),
+                   (FT_Char)( tag >> 16 ),
+                   (FT_Char)( tag >> 8  ),
+                   (FT_Char)( tag       ) ));
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+    }
+
     if ( woff2.uncompressed_size < 1 )
     {
       error = FT_THROW( Invalid_Table );
@@ -2223,8 +2270,8 @@
     }
 
     /* Allocate memory for uncompressed table data. */
-    if ( FT_ALLOC( uncompressed_buf, woff2.uncompressed_size ) ||
-         FT_FRAME_ENTER( woff2.totalCompressedSize )           )
+    if ( FT_QALLOC( uncompressed_buf, woff2.uncompressed_size ) ||
+         FT_FRAME_ENTER( woff2.totalCompressedSize )            )
       goto Exit;
 
     /* Uncompress the stream. */
@@ -2333,5 +2380,12 @@
 #undef BBOX_STREAM
 #undef INSTRUCTION_STREAM
 
+#else /* !FT_CONFIG_OPTION_USE_BROTLI */
+
+  /* ANSI C doesn't like empty source files */
+  typedef int  _sfwoff2_dummy;
+
+#endif /* !FT_CONFIG_OPTION_USE_BROTLI */
+
 
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.h b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.h
index 798f66bd0a..e84982ed9c 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/sfwoff2.h
@@ -4,7 +4,7 @@
  *
  *   WOFFF2 format management (specification).
  *
- * Copyright (C) 2019-2020 by
+ * Copyright (C) 2019-2022 by
  * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,6 +26,7 @@
 
 FT_BEGIN_HEADER
 
+#ifdef FT_CONFIG_OPTION_USE_BROTLI
 
   /* Leave the first byte open to store `flag_byte'. */
 #define WOFF2_FLAGS_TRANSFORM   1 << 8
@@ -55,6 +56,7 @@ FT_BEGIN_HEADER
 #define GLYF_REPEAT          1 << 3
 #define GLYF_THIS_X_IS_SAME  1 << 4
 #define GLYF_THIS_Y_IS_SAME  1 << 5
+#define GLYF_OVERLAP_SIMPLE  1 << 6
 
   /* Other constants */
 #define CONTOUR_OFFSET_END_POINT  10
@@ -66,6 +68,7 @@ FT_BEGIN_HEADER
                    FT_Int*    face_index,
                    FT_Long*   num_faces );
 
+#endif /* FT_CONFIG_OPTION_USE_BROTLI */
 
 FT_END_HEADER
 
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.c
index a287d3afc4..4d2faf2385 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded BDF properties (body).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.h
index e60c01cb8b..b7b11c9bec 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttbdf.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded BDF properties (specification).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.c
index 556a712199..bfeabacb7d 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.c
@@ -4,7 +4,7 @@
  *
  *   TrueType character mapping table (cmap) support (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -465,7 +465,7 @@
     if ( subheader )
     {
       FT_Byte*  p   = subheader;
-      FT_UInt   idx = (FT_UInt)(char_code & 0xFF);
+      FT_UInt   idx = (FT_UInt)( char_code & 0xFF );
       FT_UInt   start, count;
       FT_Int    delta;
       FT_UInt   offset;
@@ -916,6 +916,16 @@
       length = (FT_UInt)( valid->limit - table );
     }
 
+    /* it also happens that the `length' field is too small; */
+    /* this is easy to correct                               */
+    if ( length < (FT_UInt)( valid->limit - table ) )
+    {
+      if ( valid->level >= FT_VALIDATE_PARANOID )
+        FT_INVALID_DATA;
+
+      length = (FT_UInt)( valid->limit - table );
+    }
+
     if ( length < 16 )
       FT_INVALID_TOO_SHORT;
 
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.h
index c7d7c21d2c..b10860b345 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcmap.h
@@ -4,7 +4,7 @@
  *
  *   TrueType character mapping table (cmap) support (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcmapc.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttcmapc.h
index 2e4ce5075b..6822a9cd6b 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcmapc.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcmapc.h
@@ -4,7 +4,7 @@
  *
  *   TT CMAP classes definitions (specification only).
  *
- * Copyright (C) 2009-2020 by
+ * Copyright (C) 2009-2022 by
  * Oran Agra and Mickey Gabel.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.c
index 9025e356ce..d54231fd64 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.c
@@ -4,8 +4,8 @@
  *
  *   TrueType and OpenType colored glyph layer support (body).
  *
- * Copyright (C) 2018-2020 by
- * David Turner, Robert Wilhelm, and Werner Lemberg.
+ * Copyright (C) 2018-2022 by
+ * David Turner, Robert Wilhelm, Dominik Röttsches, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
  *
@@ -27,10 +27,12 @@
    */
 
 
+#include <freetype/internal/ftcalc.h>
 #include <freetype/internal/ftdebug.h>
 #include <freetype/internal/ftstream.h>
 #include <freetype/tttags.h>
 #include <freetype/ftcolor.h>
+#include <freetype/config/integer-types.h>
 
 
 #ifdef TT_CONFIG_OPTION_COLOR_LAYERS
@@ -39,12 +41,27 @@
 
 
   /* NOTE: These are the table sizes calculated through the specs. */
-#define BASE_GLYPH_SIZE            6U
-#define LAYER_SIZE                 4U
-#define COLR_HEADER_SIZE          14U
+#define BASE_GLYPH_SIZE                   6U
+#define BASE_GLYPH_PAINT_RECORD_SIZE      6U
+#define LAYER_V1_LIST_PAINT_OFFSET_SIZE   4U
+#define LAYER_V1_LIST_NUM_LAYERS_SIZE     4U
+#define COLOR_STOP_SIZE                   6U
+#define LAYER_SIZE                        4U
+#define COLR_HEADER_SIZE                 14U
 
 
-  typedef struct BaseGlyphRecord_
+  typedef enum  FT_PaintFormat_Internal_
+  {
+    FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER         = 18,
+    FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM        = 20,
+    FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER = 22,
+    FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER        = 26,
+    FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER          = 30
+
+  } FT_PaintFormat_Internal;
+
+
+  typedef struct  BaseGlyphRecord_
   {
     FT_UShort  gid;
     FT_UShort  first_layer_index;
@@ -53,7 +70,16 @@
   } BaseGlyphRecord;
 
 
-  typedef struct Colr_
+  typedef struct  BaseGlyphV1Record_
+  {
+    FT_UShort  gid;
+    /* Offset from start of BaseGlyphV1List, i.e., from base_glyphs_v1. */
+    FT_ULong   paint_offset;
+
+  } BaseGlyphV1Record;
+
+
+  typedef struct  Colr_
   {
     FT_UShort  version;
     FT_UShort  num_base_glyphs;
@@ -62,7 +88,23 @@
     FT_Byte*  base_glyphs;
     FT_Byte*  layers;
 
-    /* The memory which backs up the `COLR' table. */
+    FT_ULong  num_base_glyphs_v1;
+    /* Points at beginning of BaseGlyphV1List. */
+    FT_Byte*  base_glyphs_v1;
+
+    FT_ULong  num_layers_v1;
+    FT_Byte*  layers_v1;
+
+    FT_Byte*  clip_list;
+
+    /*
+     * Paint tables start at the minimum of the end of the LayerList and the
+     * end of the BaseGlyphList.  Record this location in a field here for
+     * safety checks when accessing paint tables.
+     */
+    FT_Byte*  paints_start_v1;
+
+    /* The memory that backs up the `COLR' table. */
     void*     table;
     FT_ULong  table_size;
 
@@ -88,10 +130,14 @@
 
     FT_Byte*  table = NULL;
     FT_Byte*  p     = NULL;
+    /* Needed for reading array lengths in referenced tables. */
+    FT_Byte*  p1    = NULL;
 
     Colr*  colr = NULL;
 
     FT_ULong  base_glyph_offset, layer_offset;
+    FT_ULong  base_glyphs_offset_v1, num_base_glyphs_v1;
+    FT_ULong  layer_offset_v1, num_layers_v1, clip_list_offset;
     FT_ULong  table_size;
 
 
@@ -115,7 +161,7 @@
       goto NoColr;
 
     colr->version = FT_NEXT_USHORT( p );
-    if ( colr->version != 0 )
+    if ( colr->version != 0 && colr->version != 1 )
       goto InvalidTable;
 
     colr->num_base_glyphs = FT_NEXT_USHORT( p );
@@ -135,6 +181,66 @@
     if ( colr->num_layers * LAYER_SIZE > table_size - layer_offset )
       goto InvalidTable;
 
+    if ( colr->version == 1 )
+    {
+      base_glyphs_offset_v1 = FT_NEXT_ULONG( p );
+
+      if ( base_glyphs_offset_v1 >= table_size )
+        goto InvalidTable;
+
+      p1                 = (FT_Byte*)( table + base_glyphs_offset_v1 );
+      num_base_glyphs_v1 = FT_PEEK_ULONG( p1 );
+
+      if ( num_base_glyphs_v1 * BASE_GLYPH_PAINT_RECORD_SIZE >
+             table_size - base_glyphs_offset_v1 )
+        goto InvalidTable;
+
+      colr->num_base_glyphs_v1 = num_base_glyphs_v1;
+      colr->base_glyphs_v1     = p1;
+
+      layer_offset_v1 = FT_NEXT_ULONG( p );
+
+      if ( layer_offset_v1 >= table_size )
+        goto InvalidTable;
+
+      if ( layer_offset_v1 )
+      {
+        p1            = (FT_Byte*)( table + layer_offset_v1 );
+        num_layers_v1 = FT_PEEK_ULONG( p1 );
+
+        if ( num_layers_v1 * LAYER_V1_LIST_PAINT_OFFSET_SIZE >
+               table_size - layer_offset_v1 )
+          goto InvalidTable;
+
+        colr->num_layers_v1 = num_layers_v1;
+        colr->layers_v1     = p1;
+
+        colr->paints_start_v1 =
+            FT_MIN( colr->base_glyphs_v1 +
+                    colr->num_base_glyphs_v1 * BASE_GLYPH_PAINT_RECORD_SIZE,
+                    colr->layers_v1 +
+                    colr->num_layers_v1 * LAYER_V1_LIST_PAINT_OFFSET_SIZE );
+      }
+      else
+      {
+        colr->num_layers_v1   = 0;
+        colr->layers_v1       = 0;
+        colr->paints_start_v1 =
+          colr->base_glyphs_v1 +
+          colr->num_base_glyphs_v1 * BASE_GLYPH_PAINT_RECORD_SIZE;
+      }
+
+      clip_list_offset = FT_NEXT_ULONG( p );
+
+      if ( clip_list_offset >= table_size )
+        goto InvalidTable;
+
+      if ( clip_list_offset )
+        colr->clip_list = (FT_Byte*)( table + clip_list_offset );
+      else
+        colr->clip_list = 0;
+    }
+
     colr->base_glyphs = (FT_Byte*)( table + base_glyph_offset );
     colr->layers      = (FT_Byte*)( table + layer_offset      );
     colr->table       = table;
@@ -174,17 +280,17 @@
 
   static FT_Bool
   find_base_glyph_record( FT_Byte*          base_glyph_begin,
-                          FT_Int            num_base_glyph,
+                          FT_UInt           num_base_glyph,
                           FT_UInt           glyph_id,
                           BaseGlyphRecord*  record )
   {
-    FT_Int  min = 0;
-    FT_Int  max = num_base_glyph - 1;
+    FT_UInt  min = 0;
+    FT_UInt  max = num_base_glyph;
 
 
-    while ( min <= max )
+    while ( min < max )
     {
-      FT_Int    mid = min + ( max - min ) / 2;
+      FT_UInt   mid = min + ( max - min ) / 2;
       FT_Byte*  p   = base_glyph_begin + mid * BASE_GLYPH_SIZE;
 
       FT_UShort  gid = FT_NEXT_USHORT( p );
@@ -193,7 +299,7 @@
       if ( gid < glyph_id )
         min = mid + 1;
       else if (gid > glyph_id )
-        max = mid - 1;
+        max = mid;
       else
       {
         record->gid               = gid;
@@ -265,6 +371,778 @@
   }
 
 
+  static FT_Bool
+  read_color_line( FT_Byte*      color_line_p,
+                   FT_ColorLine  *colorline )
+  {
+    FT_Byte*        p = color_line_p;
+    FT_PaintExtend  paint_extend;
+
+
+    paint_extend = (FT_PaintExtend)FT_NEXT_BYTE( p );
+    if ( paint_extend > FT_COLR_PAINT_EXTEND_REFLECT )
+      return 0;
+
+    colorline->extend = paint_extend;
+
+    colorline->color_stop_iterator.num_color_stops    = FT_NEXT_USHORT( p );
+    colorline->color_stop_iterator.p                  = p;
+    colorline->color_stop_iterator.current_color_stop = 0;
+
+    return 1;
+  }
+
+
+  /*
+   * Read a paint offset for `FT_Paint*` objects that have them and check
+   * whether it is within reasonable limits within the font and the COLR
+   * table.
+   *
+   * Return 1 on success, 0 on failure.
+   */
+  static FT_Bool
+  get_child_table_pointer ( Colr*      colr,
+                            FT_Byte*   paint_base,
+                            FT_Byte**  p,
+                            FT_Byte**  child_table_pointer )
+  {
+    FT_UInt32  paint_offset;
+    FT_Byte*   child_table_p;
+
+
+    if ( !child_table_pointer )
+      return 0;
+
+    paint_offset = FT_NEXT_UOFF3( *p );
+    if ( !paint_offset )
+      return 0;
+
+    child_table_p = (FT_Byte*)( paint_base + paint_offset );
+
+    if ( child_table_p < colr->paints_start_v1                         ||
+         child_table_p >= ( (FT_Byte*)colr->table + colr->table_size ) )
+      return 0;
+
+    *child_table_pointer = child_table_p;
+    return 1;
+  }
+
+
+  static FT_Bool
+  read_paint( Colr*           colr,
+              FT_Byte*        p,
+              FT_COLR_Paint*  apaint )
+  {
+    FT_Byte*  paint_base     = p;
+    FT_Byte*  child_table_p  = NULL;
+
+
+    if ( !p || !colr || !colr->table )
+      return 0;
+
+    if ( p < colr->paints_start_v1                         ||
+         p >= ( (FT_Byte*)colr->table + colr->table_size ) )
+      return 0;
+
+    apaint->format = (FT_PaintFormat)FT_NEXT_BYTE( p );
+
+    if ( apaint->format >= FT_COLR_PAINT_FORMAT_MAX )
+      return 0;
+
+    if ( apaint->format == FT_COLR_PAINTFORMAT_COLR_LAYERS )
+    {
+      /* Initialize layer iterator/ */
+      FT_Byte    num_layers;
+      FT_UInt32  first_layer_index;
+
+
+      num_layers = FT_NEXT_BYTE( p );
+      if ( num_layers > colr->num_layers_v1 )
+        return 0;
+
+      first_layer_index = FT_NEXT_ULONG( p );
+      if ( first_layer_index + num_layers > colr->num_layers_v1 )
+        return 0;
+
+      apaint->u.colr_layers.layer_iterator.num_layers = num_layers;
+      apaint->u.colr_layers.layer_iterator.layer      = 0;
+      /* TODO: Check whether pointer is outside colr? */
+      apaint->u.colr_layers.layer_iterator.p =
+        colr->layers_v1 +
+        LAYER_V1_LIST_NUM_LAYERS_SIZE +
+        LAYER_V1_LIST_PAINT_OFFSET_SIZE * first_layer_index;
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_SOLID )
+    {
+      apaint->u.solid.color.palette_index = FT_NEXT_USHORT( p );
+      apaint->u.solid.color.alpha         = FT_NEXT_SHORT( p );
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_COLR_GLYPH )
+    {
+      apaint->u.colr_glyph.glyphID = FT_NEXT_USHORT( p );
+
+      return 1;
+    }
+
+    /*
+     * Grouped below here are all paint formats that have an offset to a
+     * child paint table as the first entry (for example, a color line or a
+     * child paint table).  Retrieve that and determine whether that paint
+     * offset is valid first.
+     */
+
+    if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) )
+      return 0;
+
+    if ( apaint->format == FT_COLR_PAINTFORMAT_LINEAR_GRADIENT )
+    {
+      if ( !read_color_line( child_table_p,
+                             &apaint->u.linear_gradient.colorline ) )
+        return 0;
+
+      /*
+       * In order to support variations expose these as FT_Fixed 16.16 values so
+       * that we can support fractional values after interpolation.
+       */
+      apaint->u.linear_gradient.p0.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.linear_gradient.p0.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.linear_gradient.p1.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.linear_gradient.p1.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.linear_gradient.p2.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.linear_gradient.p2.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_RADIAL_GRADIENT )
+    {
+      FT_Pos  tmp;
+
+
+      if ( !read_color_line( child_table_p,
+                             &apaint->u.radial_gradient.colorline ) )
+        return 0;
+
+      /* In the OpenType specification, `r0` and `r1` are defined as   */
+      /* `UFWORD`.  Since FreeType doesn't have a corresponding 16.16  */
+      /* format we convert to `FWORD` and replace negative values with */
+      /* (32bit) `FT_INT_MAX`.                                         */
+
+      apaint->u.radial_gradient.c0.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.radial_gradient.c0.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      tmp                          = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.radial_gradient.r0 = tmp < 0 ? FT_INT_MAX : tmp;
+
+      apaint->u.radial_gradient.c1.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.radial_gradient.c1.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      tmp                          = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.radial_gradient.r1 = tmp < 0 ? FT_INT_MAX : tmp;
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_SWEEP_GRADIENT )
+    {
+      if ( !read_color_line( child_table_p,
+                             &apaint->u.sweep_gradient.colorline ) )
+        return 0;
+
+      apaint->u.sweep_gradient.center.x =
+          INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.sweep_gradient.center.y =
+          INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      apaint->u.sweep_gradient.start_angle =
+          F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.sweep_gradient.end_angle =
+          F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      return 1;
+    }
+
+    if ( apaint->format == FT_COLR_PAINTFORMAT_GLYPH )
+    {
+      apaint->u.glyph.paint.p                     = child_table_p;
+      apaint->u.glyph.paint.insert_root_transform = 0;
+      apaint->u.glyph.glyphID                     = FT_NEXT_USHORT( p );
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSFORM )
+    {
+      apaint->u.transform.paint.p                     = child_table_p;
+      apaint->u.transform.paint.insert_root_transform = 0;
+
+      if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) )
+         return 0;
+
+      p = child_table_p;
+
+      /*
+       * The following matrix coefficients are encoded as
+       * OpenType 16.16 fixed-point values.
+       */
+      apaint->u.transform.affine.xx = FT_NEXT_LONG( p );
+      apaint->u.transform.affine.yx = FT_NEXT_LONG( p );
+      apaint->u.transform.affine.xy = FT_NEXT_LONG( p );
+      apaint->u.transform.affine.yy = FT_NEXT_LONG( p );
+      apaint->u.transform.affine.dx = FT_NEXT_LONG( p );
+      apaint->u.transform.affine.dy = FT_NEXT_LONG( p );
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSLATE )
+    {
+      apaint->u.translate.paint.p                     = child_table_p;
+      apaint->u.translate.paint.insert_root_transform = 0;
+
+      apaint->u.translate.dx = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.translate.dy = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      return 1;
+    }
+
+    else if ( apaint->format ==
+                FT_COLR_PAINTFORMAT_SCALE                         ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER         ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM        ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER )
+    {
+      apaint->u.scale.paint.p                     = child_table_p;
+      apaint->u.scale.paint.insert_root_transform = 0;
+
+      /* All scale paints get at least one scale value. */
+      apaint->u.scale.scale_x = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      /* Non-uniform ones read an extra y value. */
+      if ( apaint->format ==
+             FT_COLR_PAINTFORMAT_SCALE                 ||
+           (FT_PaintFormat_Internal)apaint->format ==
+             FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER )
+        apaint->u.scale.scale_y = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+      else
+        apaint->u.scale.scale_y = apaint->u.scale.scale_x;
+
+      /* Scale paints that have a center read center coordinates, */
+      /* otherwise the center is (0,0).                           */
+      if ( (FT_PaintFormat_Internal)apaint->format ==
+             FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER         ||
+           (FT_PaintFormat_Internal)apaint->format ==
+             FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER )
+      {
+        apaint->u.scale.center_x = INT_TO_FIXED( FT_NEXT_SHORT ( p ) );
+        apaint->u.scale.center_y = INT_TO_FIXED( FT_NEXT_SHORT ( p ) );
+      }
+      else
+      {
+        apaint->u.scale.center_x = 0;
+        apaint->u.scale.center_y = 0;
+      }
+
+      /* FT 'COLR' v1 API output format always returns fully defined */
+      /* structs; we thus set the format to the public API value.    */
+      apaint->format = FT_COLR_PAINTFORMAT_SCALE;
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_ROTATE ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER )
+    {
+      apaint->u.rotate.paint.p                     = child_table_p;
+      apaint->u.rotate.paint.insert_root_transform = 0;
+
+      apaint->u.rotate.angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      if ( (FT_PaintFormat_Internal)apaint->format ==
+           FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER )
+      {
+        apaint->u.rotate.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+        apaint->u.rotate.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      }
+      else
+      {
+        apaint->u.rotate.center_x = 0;
+        apaint->u.rotate.center_y = 0;
+      }
+
+      apaint->format = FT_COLR_PAINTFORMAT_ROTATE;
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW ||
+              (FT_PaintFormat_Internal)apaint->format ==
+                FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
+    {
+      apaint->u.skew.paint.p                     = child_table_p;
+      apaint->u.skew.paint.insert_root_transform = 0;
+
+      apaint->u.skew.x_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+      apaint->u.skew.y_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) );
+
+      if ( (FT_PaintFormat_Internal)apaint->format ==
+           FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER )
+      {
+        apaint->u.skew.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+        apaint->u.skew.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) );
+      }
+      else
+      {
+        apaint->u.skew.center_x = 0;
+        apaint->u.skew.center_y = 0;
+      }
+
+      apaint->format = FT_COLR_PAINTFORMAT_SKEW;
+
+      return 1;
+    }
+
+    else if ( apaint->format == FT_COLR_PAINTFORMAT_COMPOSITE )
+    {
+      FT_UInt  composite_mode;
+
+
+      apaint->u.composite.source_paint.p                     = child_table_p;
+      apaint->u.composite.source_paint.insert_root_transform = 0;
+
+      composite_mode = FT_NEXT_BYTE( p );
+      if ( composite_mode >= FT_COLR_COMPOSITE_MAX )
+        return 0;
+
+      apaint->u.composite.composite_mode = (FT_Composite_Mode)composite_mode;
+
+      if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) )
+         return 0;
+
+      apaint->u.composite.backdrop_paint.p =
+        child_table_p;
+      apaint->u.composite.backdrop_paint.insert_root_transform =
+        0;
+
+      return 1;
+    }
+
+    return 0;
+  }
+
+
+  static FT_Bool
+  find_base_glyph_v1_record( FT_Byte *           base_glyph_begin,
+                             FT_UInt             num_base_glyph,
+                             FT_UInt             glyph_id,
+                             BaseGlyphV1Record  *record )
+  {
+    FT_UInt  min = 0;
+    FT_UInt  max = num_base_glyph;
+
+
+    while ( min < max )
+    {
+      FT_UInt  mid = min + ( max - min ) / 2;
+
+      /*
+       * `base_glyph_begin` is the beginning of `BaseGlyphV1List`;
+       * skip `numBaseGlyphV1Records` by adding 4 to start binary search
+       * in the array of `BaseGlyphV1Record`.
+       */
+      FT_Byte  *p = base_glyph_begin + 4 + mid * BASE_GLYPH_PAINT_RECORD_SIZE;
+
+      FT_UShort  gid = FT_NEXT_USHORT( p );
+
+
+      if ( gid < glyph_id )
+        min = mid + 1;
+      else if (gid > glyph_id )
+        max = mid;
+      else
+      {
+        record->gid          = gid;
+        record->paint_offset = FT_NEXT_ULONG ( p );
+        return 1;
+      }
+    }
+
+    return 0;
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  tt_face_get_colr_glyph_paint( TT_Face                  face,
+                                FT_UInt                  base_glyph,
+                                FT_Color_Root_Transform  root_transform,
+                                FT_OpaquePaint*          opaque_paint )
+  {
+    Colr*              colr = (Colr*)face->colr;
+    BaseGlyphV1Record  base_glyph_v1_record;
+    FT_Byte*           p;
+
+    if ( !colr || !colr->table )
+      return 0;
+
+    if ( colr->version < 1 || !colr->num_base_glyphs_v1 ||
+         !colr->base_glyphs_v1 )
+      return 0;
+
+    if ( opaque_paint->p )
+      return 0;
+
+    if ( !find_base_glyph_v1_record( colr->base_glyphs_v1,
+                                     colr->num_base_glyphs_v1,
+                                     base_glyph,
+                                     &base_glyph_v1_record ) )
+      return 0;
+
+    if ( !base_glyph_v1_record.paint_offset                   ||
+         base_glyph_v1_record.paint_offset > colr->table_size )
+      return 0;
+
+    p = (FT_Byte*)( colr->base_glyphs_v1 +
+                    base_glyph_v1_record.paint_offset );
+    if ( p >= ( (FT_Byte*)colr->table + colr->table_size ) )
+      return 0;
+
+    opaque_paint->p = p;
+
+    if ( root_transform == FT_COLOR_INCLUDE_ROOT_TRANSFORM )
+      opaque_paint->insert_root_transform = 1;
+    else
+      opaque_paint->insert_root_transform = 0;
+
+    return 1;
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  tt_face_get_color_glyph_clipbox( TT_Face      face,
+                                   FT_UInt      base_glyph,
+                                   FT_ClipBox*  clip_box )
+  {
+    Colr*  colr;
+
+    FT_Byte  *p, *p1, *clip_base, *limit;
+
+    FT_Byte    clip_list_format;
+    FT_ULong   num_clip_boxes, i;
+    FT_UShort  gid_start, gid_end;
+    FT_UInt32  clip_box_offset;
+    FT_Byte    format;
+
+    const FT_Byte  num_corners = 4;
+    FT_Vector      corners[4];
+    FT_Byte        j;
+    FT_BBox        font_clip_box;
+
+
+    colr = (Colr*)face->colr;
+    if ( !colr )
+      return 0;
+
+    if ( !colr->clip_list )
+      return 0;
+
+    p = colr->clip_list;
+
+    /* Limit points to the first byte after the end of the color table.    */
+    /* Thus, in subsequent limit checks below we need to check whether the */
+    /* read pointer is strictly greater than a position offset by certain  */
+    /* field sizes to the left of that position.                           */
+    limit = (FT_Byte*)colr->table + colr->table_size;
+
+    /* Check whether we can extract one `uint8` and one `uint32`. */
+    if ( p > limit - ( 1 + 4 ) )
+      return 0;
+
+    clip_base        = p;
+    clip_list_format = FT_NEXT_BYTE ( p );
+
+    /* Format byte used here to be able to upgrade ClipList for >16bit */
+    /* glyph ids; for now we can expect it to be 0.                    */
+    if ( !( clip_list_format == 1 ) )
+      return 0;
+
+    num_clip_boxes = FT_NEXT_ULONG( p );
+
+    /* Check whether we can extract two `uint16` and one `Offset24`, */
+    /* `num_clip_boxes` times.                                       */
+    if ( colr->table_size / ( 2 + 2 + 3 ) < num_clip_boxes ||
+         p > limit - ( 2 + 2 + 3 ) * num_clip_boxes        )
+      return 0;
+
+    for ( i = 0; i < num_clip_boxes; ++i )
+    {
+      gid_start       = FT_NEXT_USHORT( p );
+      gid_end         = FT_NEXT_USHORT( p );
+      clip_box_offset = FT_NEXT_UOFF3( p );
+
+      if ( base_glyph >= gid_start && base_glyph <= gid_end )
+      {
+        p1 = (FT_Byte*)( clip_base + clip_box_offset );
+
+        /* Check whether we can extract one `uint8`. */
+        if ( p1 > limit - 1 )
+          return 0;
+
+        format = FT_NEXT_BYTE( p1 );
+
+        if ( format > 1 )
+          return 0;
+
+        /* Check whether we can extract four `FWORD`. */
+        if ( p1 > limit - ( 2 + 2 + 2 + 2 ) )
+          return 0;
+
+        /* `face->root.size->metrics.x_scale` and `y_scale` are factors   */
+        /* that scale a font unit value in integers to a 26.6 fixed value */
+        /* according to the requested size, see for example               */
+        /* `ft_recompute_scaled_metrics`.                                 */
+        font_clip_box.xMin = FT_MulFix( FT_NEXT_SHORT( p1 ),
+                                        face->root.size->metrics.x_scale );
+        font_clip_box.yMin = FT_MulFix( FT_NEXT_SHORT( p1 ),
+                                        face->root.size->metrics.x_scale );
+        font_clip_box.xMax = FT_MulFix( FT_NEXT_SHORT( p1 ),
+                                        face->root.size->metrics.x_scale );
+        font_clip_box.yMax = FT_MulFix( FT_NEXT_SHORT( p1 ),
+                                        face->root.size->metrics.x_scale );
+
+        /* Make 4 corner points (xMin, yMin), (xMax, yMax) and transform */
+        /* them.  If we we would only transform two corner points and    */
+        /* span a rectangle based on those, the rectangle may become too */
+        /* small to cover the glyph.                                     */
+        corners[0].x = font_clip_box.xMin;
+        corners[1].x = font_clip_box.xMin;
+        corners[2].x = font_clip_box.xMax;
+        corners[3].x = font_clip_box.xMax;
+
+        corners[0].y = font_clip_box.yMin;
+        corners[1].y = font_clip_box.yMax;
+        corners[2].y = font_clip_box.yMax;
+        corners[3].y = font_clip_box.yMin;
+
+        for ( j = 0; j < num_corners; ++j )
+        {
+          if ( face->root.internal->transform_flags & 1 )
+            FT_Vector_Transform( &corners[j],
+                                 &face->root.internal->transform_matrix );
+
+          if ( face->root.internal->transform_flags & 2 )
+          {
+            corners[j].x += face->root.internal->transform_delta.x;
+            corners[j].y += face->root.internal->transform_delta.y;
+          }
+        }
+
+        clip_box->bottom_left  = corners[0];
+        clip_box->top_left     = corners[1];
+        clip_box->top_right    = corners[2];
+        clip_box->bottom_right = corners[3];
+
+        return 1;
+      }
+    }
+
+    return 0;
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  tt_face_get_paint_layers( TT_Face            face,
+                            FT_LayerIterator*  iterator,
+                            FT_OpaquePaint*    opaque_paint )
+  {
+    FT_Byte*   p             = NULL;
+    FT_Byte*   p_first_layer = NULL;
+    FT_Byte*   p_paint       = NULL;
+    FT_UInt32  paint_offset;
+
+    Colr*  colr;
+
+
+    if ( iterator->layer == iterator->num_layers )
+      return 0;
+
+    colr = (Colr*)face->colr;
+    if ( !colr )
+      return 0;
+
+    /*
+     * We have an iterator pointing at a paint offset as part of the
+     * `paintOffset` array in `LayerV1List`.
+     */
+    p = iterator->p;
+
+    /*
+     * First ensure that p is within COLRv1.
+     */
+    if ( p < colr->layers_v1                               ||
+         p >= ( (FT_Byte*)colr->table + colr->table_size ) )
+      return 0;
+
+    /*
+     * Do a cursor sanity check of the iterator.  Counting backwards from
+     * where it stands, we need to end up at a position after the beginning
+     * of the `LayerV1List` table and not after the end of the
+     * `LayerV1List`.
+     */
+    p_first_layer = p -
+                      iterator->layer * LAYER_V1_LIST_PAINT_OFFSET_SIZE -
+                      LAYER_V1_LIST_NUM_LAYERS_SIZE;
+    if ( p_first_layer < (FT_Byte*)colr->layers_v1 )
+      return 0;
+    if ( p_first_layer >= (FT_Byte*)(
+           colr->layers_v1 + LAYER_V1_LIST_NUM_LAYERS_SIZE +
+           colr->num_layers_v1 * LAYER_V1_LIST_PAINT_OFFSET_SIZE ) )
+      return 0;
+
+    paint_offset =
+      FT_NEXT_ULONG( p );
+    opaque_paint->insert_root_transform =
+      0;
+
+    p_paint = (FT_Byte*)( colr->layers_v1 + paint_offset );
+
+    if ( p_paint < colr->paints_start_v1                         ||
+         p_paint >= ( (FT_Byte*)colr->table + colr->table_size ) )
+      return 0;
+
+    opaque_paint->p = p_paint;
+
+    iterator->p = p;
+
+    iterator->layer++;
+
+    return 1;
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  tt_face_get_colorline_stops( TT_Face                face,
+                               FT_ColorStop*          color_stop,
+                               FT_ColorStopIterator  *iterator )
+  {
+    Colr*  colr = (Colr*)face->colr;
+
+    FT_Byte*  p;
+
+
+    if ( !colr || !colr->table )
+      return 0;
+
+    if ( iterator->current_color_stop >= iterator->num_color_stops )
+      return 0;
+
+    if ( iterator->p +
+           ( ( iterator->num_color_stops - iterator->current_color_stop ) *
+             COLOR_STOP_SIZE ) >
+         ( (FT_Byte *)colr->table + colr->table_size ) )
+      return 0;
+
+    /* Iterator points at first `ColorStop` of `ColorLine`. */
+    p = iterator->p;
+
+    color_stop->stop_offset = FT_NEXT_SHORT( p );
+
+    color_stop->color.palette_index = FT_NEXT_USHORT( p );
+
+    color_stop->color.alpha = FT_NEXT_SHORT( p );
+
+    iterator->p = p;
+    iterator->current_color_stop++;
+
+    return 1;
+  }
+
+
+  FT_LOCAL_DEF( FT_Bool )
+  tt_face_get_paint( TT_Face         face,
+                     FT_OpaquePaint  opaque_paint,
+                     FT_COLR_Paint*  paint )
+  {
+    Colr*           colr = (Colr*)face->colr;
+    FT_OpaquePaint  next_paint;
+    FT_Matrix       ft_root_scale;
+
+    if ( !colr || !colr->base_glyphs_v1 || !colr->table )
+      return 0;
+
+    if ( opaque_paint.insert_root_transform )
+    {
+      /* 'COLR' v1 glyph information is returned in unscaled coordinates,
+       * i.e., `FT_Size` is not applied or multiplied into the values.  When
+       * client applications draw color glyphs, they can request to include
+       * a top-level transform, which includes the active `x_scale` and
+       * `y_scale` information for scaling the glyph, as well the additional
+       * transform and translate configured through `FT_Set_Transform`.
+       * This allows client applications to apply this top-level transform
+       * to the graphics context first and only once, then have gradient and
+       * contour scaling applied correctly when performing the additional
+       * drawing operations for subsequenct paints.  Prepare this initial
+       * transform here.
+       */
+      paint->format = FT_COLR_PAINTFORMAT_TRANSFORM;
+
+      next_paint.p                     = opaque_paint.p;
+      next_paint.insert_root_transform = 0;
+      paint->u.transform.paint         = next_paint;
+
+      /* `x_scale` and `y_scale` are in 26.6 format, representing the scale
+       * factor to get from font units to requested size.  However, expected
+       * return values are in 16.16, so we shift accordingly with rounding.
+       */
+      ft_root_scale.xx = ( face->root.size->metrics.x_scale + 32 ) >> 6;
+      ft_root_scale.xy = 0;
+      ft_root_scale.yx = 0;
+      ft_root_scale.yy = ( face->root.size->metrics.y_scale + 32 ) >> 6;
+
+      if ( face->root.internal->transform_flags & 1 )
+        FT_Matrix_Multiply( &face->root.internal->transform_matrix,
+                            &ft_root_scale );
+
+      paint->u.transform.affine.xx = ft_root_scale.xx;
+      paint->u.transform.affine.xy = ft_root_scale.xy;
+      paint->u.transform.affine.yx = ft_root_scale.yx;
+      paint->u.transform.affine.yy = ft_root_scale.yy;
+
+      /* The translation is specified in 26.6 format and, according to the
+       * documentation of `FT_Set_Translate`, is performed on the character
+       * size given in the last call to `FT_Set_Char_Size`.  The
+       * 'PaintTransform' paint table's `FT_Affine23` format expects
+       * values in 16.16 format, thus we need to shift by 10 bits.
+       */
+      if ( face->root.internal->transform_flags & 2 )
+      {
+        paint->u.transform.affine.dx =
+          face->root.internal->transform_delta.x * ( 1 << 10 );
+        paint->u.transform.affine.dy =
+          face->root.internal->transform_delta.y * ( 1 << 10 );
+      }
+      else
+      {
+        paint->u.transform.affine.dx = 0;
+        paint->u.transform.affine.dy = 0;
+      }
+
+      return 1;
+    }
+
+    return read_paint( colr, opaque_paint.p, paint );
+  }
+
+
   FT_LOCAL_DEF( FT_Error )
   tt_face_colr_blend_layer( TT_Face       face,
                             FT_UInt       color_index,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.h
index 6412162669..4200cb2976 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcolr.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType colored glyph layer support (specification).
  *
- * Copyright (C) 2018-2020 by
+ * Copyright (C) 2018-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -42,6 +42,32 @@ FT_BEGIN_HEADER
                           FT_UInt           *acolor_index,
                           FT_LayerIterator*  iterator );
 
+  FT_LOCAL( FT_Bool )
+  tt_face_get_colr_glyph_paint( TT_Face                  face,
+                                FT_UInt                  base_glyph,
+                                FT_Color_Root_Transform  root_transform,
+                                FT_OpaquePaint*          paint );
+
+  FT_LOCAL( FT_Bool )
+  tt_face_get_color_glyph_clipbox( TT_Face      face,
+                                   FT_UInt      base_glyph,
+                                   FT_ClipBox*  clip_box );
+
+  FT_LOCAL( FT_Bool )
+  tt_face_get_paint_layers( TT_Face            face,
+                            FT_LayerIterator*  iterator,
+                            FT_OpaquePaint*    paint );
+
+  FT_LOCAL( FT_Bool )
+  tt_face_get_colorline_stops( TT_Face                face,
+                               FT_ColorStop*          color_stop,
+                               FT_ColorStopIterator*  iterator );
+
+  FT_LOCAL( FT_Bool )
+  tt_face_get_paint( TT_Face         face,
+                     FT_OpaquePaint  opaque_paint,
+                     FT_COLR_Paint*  paint );
+
   FT_LOCAL( FT_Error )
   tt_face_colr_blend_layer( TT_Face       face,
                             FT_UInt       color_index,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.c
index 9c514bafe5..9ae535cbda 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType color palette support (body).
  *
- * Copyright (C) 2018-2020 by
+ * Copyright (C) 2018-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.h
index b544be696a..4717d224fc 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttcpal.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType color palette support (specification).
  *
- * Copyright (C) 2018-2020 by
+ * Copyright (C) 2018-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.c
index d4a70c7855..ca1c509406 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.c
@@ -5,7 +5,7 @@
  *   Load the basic TrueType kerning table.  This doesn't handle
  *   kerning data within the GPOS table at the moment.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -94,7 +94,7 @@
 
       p_next = p;
 
-      p += 2; /* skip version */
+      p       += 2; /* skip version */
       length   = FT_NEXT_USHORT( p );
       coverage = FT_NEXT_USHORT( p );
 
@@ -144,7 +144,7 @@
 
 
           cur_pair = FT_NEXT_ULONG( p );
-          if ( cur_pair <= old_pair )
+          if ( cur_pair < old_pair )
             break;
 
           p += 2;
@@ -187,11 +187,18 @@
                        FT_UInt  left_glyph,
                        FT_UInt  right_glyph )
   {
-    FT_Int    result = 0;
-    FT_UInt   count, mask;
-    FT_Byte*  p       = face->kern_table;
-    FT_Byte*  p_limit = p + face->kern_table_size;
+    FT_Int   result = 0;
+    FT_UInt  count, mask;
 
+    FT_Byte*  p;
+    FT_Byte*  p_limit;
+
+
+    if ( !face->kern_table )
+      return result;
+
+    p       = face->kern_table;
+    p_limit = p + face->kern_table_size;
 
     p   += 4;
     mask = 0x0001;
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.h
index f44b5bdeb0..f063558313 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttkern.h
@@ -5,7 +5,7 @@
  *   Load the basic TrueType kerning table.  This doesn't handle
  *   kerning data within the GPOS table at the moment.
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttload.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttload.c
index 4b46f41357..c83bd197fe 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttload.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttload.c
@@ -5,7 +5,7 @@
  *   Load the basic TrueType tables, i.e., tables that can be either in
  *   TTF or OTF fonts (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -205,7 +205,6 @@
 
       if ( FT_STREAM_READ_FIELDS( table_dir_entry_fields, &table ) )
       {
-        nn--;
         FT_TRACE2(( "check_table_dir:"
                     " can read only %d table%s in font (instead of %d)\n",
                     nn, nn == 1 ? "" : "s", sfnt->num_tables ));
@@ -416,9 +415,9 @@
          FT_FRAME_ENTER( sfnt.num_tables * 16L ) )
       goto Exit;
 
-    FT_TRACE2(( "\n"
-                "  tag    offset    length   checksum\n"
-                "  ----------------------------------\n" ));
+    FT_TRACE2(( "\n" ));
+    FT_TRACE2(( "  tag    offset    length   checksum\n" ));
+    FT_TRACE2(( "  ----------------------------------\n" ));
 
     valid_entries = 0;
     for ( nn = 0; nn < sfnt.num_tables; nn++ )
@@ -505,7 +504,8 @@
 
     FT_FRAME_EXIT();
 
-    FT_TRACE2(( "table directory loaded\n\n" ));
+    FT_TRACE2(( "table directory loaded\n" ));
+    FT_TRACE2(( "\n" ));
 
   Exit:
     return error;
@@ -794,8 +794,8 @@
       if ( maxProfile->maxTwilightPoints > ( 0xFFFFU - 4 ) )
       {
         FT_TRACE0(( "tt_face_load_maxp:"
-                    " too much twilight points in `maxp' table;\n"
-                    "                  "
+                    " too much twilight points in `maxp' table;\n" ));
+        FT_TRACE0(( "                  "
                     " some glyphs might be rendered incorrectly\n" ));
 
         maxProfile->maxTwilightPoints = 0xFFFFU - 4;
@@ -836,6 +836,8 @@
     FT_ULong      table_pos, table_len;
     FT_ULong      storage_start, storage_limit;
     TT_NameTable  table;
+    TT_Name       names    = NULL;
+    TT_LangTag    langTags = NULL;
 
     static const FT_Frame_Field  name_table_fields[] =
     {
@@ -916,13 +918,13 @@
       storage_start += 2 + 4 * table->numLangTagRecords;
 
       /* allocate language tag records array */
-      if ( FT_NEW_ARRAY( table->langTags, table->numLangTagRecords ) ||
-           FT_FRAME_ENTER( table->numLangTagRecords * 4 )            )
+      if ( FT_QNEW_ARRAY( langTags, table->numLangTagRecords ) ||
+           FT_FRAME_ENTER( table->numLangTagRecords * 4 )      )
         goto Exit;
 
       /* load language tags */
       {
-        TT_LangTag  entry = table->langTags;
+        TT_LangTag  entry = langTags;
         TT_LangTag  limit = FT_OFFSET( entry, table->numLangTagRecords );
 
 
@@ -938,7 +940,13 @@
             /* invalid entry; ignore it */
             entry->stringLength = 0;
           }
+
+          /* mark the string as not yet loaded */
+          entry->string = NULL;
         }
+
+        table->langTags = langTags;
+        langTags        = NULL;
       }
 
       FT_FRAME_EXIT();
@@ -947,14 +955,15 @@
     }
 
     /* allocate name records array */
-    if ( FT_NEW_ARRAY( table->names, table->numNameRecords ) ||
-         FT_FRAME_ENTER( table->numNameRecords * 12 )        )
+    if ( FT_QNEW_ARRAY( names, table->numNameRecords ) ||
+         FT_FRAME_ENTER( table->numNameRecords * 12 )  )
       goto Exit;
 
     /* load name records */
     {
-      TT_Name  entry = table->names;
+      TT_Name  entry = names;
       FT_UInt  count = table->numNameRecords;
+      FT_UInt  valid = 0;
 
 
       for ( ; count > 0; count-- )
@@ -987,15 +996,20 @@
           }
         }
 
+        /* mark the string as not yet converted */
+        entry->string = NULL;
+
+        valid++;
         entry++;
       }
 
       /* reduce array size to the actually used elements */
-      count = (FT_UInt)( entry - table->names );
-      (void)FT_RENEW_ARRAY( table->names,
-                            table->numNameRecords,
-                            count );
-      table->numNameRecords = count;
+      FT_MEM_QRENEW_ARRAY( names,
+                           table->numNameRecords,
+                           valid );
+      table->names          = names;
+      names                 = NULL;
+      table->numNameRecords = valid;
     }
 
     FT_FRAME_EXIT();
@@ -1004,6 +1018,8 @@
     face->num_names = (FT_UShort)table->numNameRecords;
 
   Exit:
+    FT_FREE( names );
+    FT_FREE( langTags );
     return error;
   }
 
@@ -1311,6 +1327,12 @@
     if ( FT_STREAM_READ_FIELDS( post_fields, post ) )
       return error;
 
+    if ( post->FormatType != 0x00030000L &&
+         post->FormatType != 0x00025000L &&
+         post->FormatType != 0x00020000L &&
+         post->FormatType != 0x00010000L )
+      return FT_THROW( Invalid_Post_Table_Format );
+
     /* we don't load the glyph names, we do that in another */
     /* module (ttpost).                                     */
 
@@ -1410,8 +1432,8 @@
     FT_Error   error;
     FT_Memory  memory = stream->memory;
 
-    FT_UInt        j,num_ranges;
-    TT_GaspRange   gaspranges = NULL;
+    FT_UShort      j, num_ranges;
+    TT_GaspRange   gasp_ranges = NULL;
 
 
     /* the gasp table is optional */
@@ -1422,8 +1444,8 @@
     if ( FT_FRAME_ENTER( 4L ) )
       goto Exit;
 
-    face->gasp.version   = FT_GET_USHORT();
-    face->gasp.numRanges = FT_GET_USHORT();
+    face->gasp.version = FT_GET_USHORT();
+    num_ranges         = FT_GET_USHORT();
 
     FT_FRAME_EXIT();
 
@@ -1435,29 +1457,31 @@
       goto Exit;
     }
 
-    num_ranges = face->gasp.numRanges;
-    FT_TRACE3(( "numRanges: %u\n", num_ranges ));
+    FT_TRACE3(( "numRanges: %hu\n", num_ranges ));
 
-    if ( FT_QNEW_ARRAY( face->gasp.gaspRanges, num_ranges ) ||
-         FT_FRAME_ENTER( num_ranges * 4L )                  )
+    if ( FT_QNEW_ARRAY( gasp_ranges, num_ranges ) ||
+         FT_FRAME_ENTER( num_ranges * 4L )        )
       goto Exit;
 
-    gaspranges = face->gasp.gaspRanges;
-
     for ( j = 0; j < num_ranges; j++ )
     {
-      gaspranges[j].maxPPEM  = FT_GET_USHORT();
-      gaspranges[j].gaspFlag = FT_GET_USHORT();
+      gasp_ranges[j].maxPPEM  = FT_GET_USHORT();
+      gasp_ranges[j].gaspFlag = FT_GET_USHORT();
 
       FT_TRACE3(( "gaspRange %d: rangeMaxPPEM %5d, rangeGaspBehavior 0x%x\n",
                   j,
-                  gaspranges[j].maxPPEM,
-                  gaspranges[j].gaspFlag ));
+                  gasp_ranges[j].maxPPEM,
+                  gasp_ranges[j].gaspFlag ));
     }
 
+    face->gasp.gaspRanges = gasp_ranges;
+    gasp_ranges           = NULL;
+    face->gasp.numRanges  = num_ranges;
+
     FT_FRAME_EXIT();
 
   Exit:
+    FT_FREE( gasp_ranges );
     return error;
   }
 
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttload.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttload.h
index 4e53d8b782..5368971c31 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttload.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttload.h
@@ -5,7 +5,7 @@
  *   Load the basic TrueType tables, i.e., tables that can be either in
  *   TTF or OTF fonts (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.c
index 021123336e..88377327c6 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.c
@@ -4,7 +4,7 @@
  *
  *   Load the metrics tables common to TTF and OTF fonts (body).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.h
index dba65ca9ba..1e45b949a5 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttmtx.h
@@ -4,7 +4,7 @@
  *
  *   Load the metrics tables common to TTF and OTF fonts (specification).
  *
- * Copyright (C) 2006-2020 by
+ * Copyright (C) 2006-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.c
index e93a4bf1b1..1a885a15c5 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.c
@@ -5,7 +5,7 @@
  *   PostScript name table processing for TrueType and OpenType fonts
  *   (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -158,7 +158,7 @@
   static FT_Error
   load_format_20( TT_Face    face,
                   FT_Stream  stream,
-                  FT_ULong   post_limit )
+                  FT_ULong   post_len )
   {
     FT_Memory   memory = stream->memory;
     FT_Error    error;
@@ -168,6 +168,7 @@
 
     FT_UShort*  glyph_indices = NULL;
     FT_Char**   name_strings  = NULL;
+    FT_Byte*    strings       = NULL;
 
 
     if ( FT_READ_USHORT( num_glyphs ) )
@@ -179,7 +180,8 @@
     /* There already exist fonts which have more than 32768 glyph names */
     /* in this table, so the test for this threshold has been dropped.  */
 
-    if ( num_glyphs > face->max_profile.numGlyphs )
+    if ( num_glyphs > face->max_profile.numGlyphs  ||
+         (FT_ULong)num_glyphs * 2UL > post_len - 2 )
     {
       error = FT_THROW( Invalid_File_Format );
       goto Exit;
@@ -190,7 +192,7 @@
       FT_Int  n;
 
 
-      if ( FT_NEW_ARRAY ( glyph_indices, num_glyphs ) ||
+      if ( FT_QNEW_ARRAY( glyph_indices, num_glyphs ) ||
            FT_FRAME_ENTER( num_glyphs * 2L )          )
         goto Fail;
 
@@ -223,60 +225,56 @@
     }
 
     /* now load the name strings */
+    if ( num_names )
     {
       FT_UShort  n;
+      FT_ULong   p;
 
 
-      if ( FT_NEW_ARRAY( name_strings, num_names ) )
+      post_len -= (FT_ULong)num_glyphs * 2UL + 2;
+
+      if ( FT_QALLOC( strings, post_len + 1 )       ||
+           FT_STREAM_READ( strings, post_len )      ||
+           FT_QNEW_ARRAY( name_strings, num_names ) )
         goto Fail;
 
-      for ( n = 0; n < num_names; n++ )
+      /* convert from Pascal- to C-strings and set pointers */
+      for ( p = 0, n = 0; p < post_len && n < num_names; n++ )
       {
-        FT_UInt  len;
+        FT_UInt  len = strings[p];
 
 
-        if ( FT_STREAM_POS() >= post_limit )
-          break;
-        else
+        if ( len > 63U )
         {
-          FT_TRACE6(( "load_format_20: %ld byte left in post table\n",
-                      post_limit - FT_STREAM_POS() ));
-
-          if ( FT_READ_BYTE( len ) )
-            goto Fail1;
-        }
-
-        if ( len > post_limit                   ||
-             FT_STREAM_POS() > post_limit - len )
-        {
-          FT_Int  d = (FT_Int)post_limit - (FT_Int)FT_STREAM_POS();
-
-
-          FT_ERROR(( "load_format_20:"
-                     " exceeding string length (%d),"
-                     " truncating at end of post table (%d byte left)\n",
-                     len, d ));
-          len = (FT_UInt)FT_MAX( 0, d );
+          error = FT_THROW( Invalid_File_Format );
+          goto Fail;
         }
 
-        if ( FT_NEW_ARRAY( name_strings[n], len + 1 ) ||
-             FT_STREAM_READ( name_strings[n], len   ) )
-          goto Fail1;
-
-        name_strings[n][len] = '\0';
+        strings[p]      = 0;
+        name_strings[n] = (FT_Char*)strings + p + 1;
+        p              += len + 1;
       }
+      strings[post_len] = 0;
 
+      /* deal with missing or insufficient string data */
       if ( n < num_names )
       {
+        if ( post_len == 0 )
+        {
+          /* fake empty string */
+          if ( FT_QREALLOC( strings, 1, 2 ) )
+            goto Fail;
+
+          post_len          = 1;
+          strings[post_len] = 0;
+        }
+
         FT_ERROR(( "load_format_20:"
                    " all entries in post table are already parsed,"
                    " using NULL names for gid %d - %d\n",
                     n, num_names - 1 ));
         for ( ; n < num_names; n++ )
-          if ( FT_NEW_ARRAY( name_strings[n], 1 ) )
-            goto Fail1;
-          else
-            name_strings[n][0] = '\0';
+          name_strings[n] = (FT_Char*)strings + post_len;
       }
     }
 
@@ -292,17 +290,9 @@
     }
     return FT_Err_Ok;
 
-  Fail1:
-    {
-      FT_UShort  n;
-
-
-      for ( n = 0; n < num_names; n++ )
-        FT_FREE( name_strings[n] );
-    }
-
   Fail:
     FT_FREE( name_strings );
+    FT_FREE( strings );
     FT_FREE( glyph_indices );
 
   Exit:
@@ -313,7 +303,7 @@
   static FT_Error
   load_format_25( TT_Face    face,
                   FT_Stream  stream,
-                  FT_ULong   post_limit )
+                  FT_ULong   post_len )
   {
     FT_Memory  memory = stream->memory;
     FT_Error   error;
@@ -321,7 +311,7 @@
     FT_Int     num_glyphs;
     FT_Char*   offset_table = NULL;
 
-    FT_UNUSED( post_limit );
+    FT_UNUSED( post_len );
 
 
     if ( FT_READ_USHORT( num_glyphs ) )
@@ -336,7 +326,7 @@
       goto Exit;
     }
 
-    if ( FT_NEW_ARRAY( offset_table, num_glyphs )   ||
+    if ( FT_QNEW_ARRAY( offset_table, num_glyphs )  ||
          FT_STREAM_READ( offset_table, num_glyphs ) )
       goto Fail;
 
@@ -384,7 +374,6 @@
     FT_Error   error;
     FT_Fixed   format;
     FT_ULong   post_len;
-    FT_ULong   post_limit;
 
 
     /* get a stream for the face's resource */
@@ -395,8 +384,6 @@
     if ( error )
       goto Exit;
 
-    post_limit = FT_STREAM_POS() + post_len;
-
     format = face->postscript.FormatType;
 
     /* go to beginning of subtable */
@@ -404,10 +391,10 @@
       goto Exit;
 
     /* now read postscript table */
-    if ( format == 0x00020000L )
-      error = load_format_20( face, stream, post_limit );
-    else if ( format == 0x00025000L )
-      error = load_format_25( face, stream, post_limit );
+    if ( format == 0x00020000L && post_len >= 34 )
+      error = load_format_20( face, stream, post_len - 32 );
+    else if ( format == 0x00025000L && post_len >= 34 )
+      error = load_format_25( face, stream, post_len - 32 );
     else
       error = FT_THROW( Invalid_File_Format );
 
@@ -433,17 +420,19 @@
       if ( format == 0x00020000L )
       {
         TT_Post_20  table = &names->names.format_20;
-        FT_UShort   n;
 
 
         FT_FREE( table->glyph_indices );
         table->num_glyphs = 0;
 
-        for ( n = 0; n < table->num_names; n++ )
-          FT_FREE( table->glyph_names[n] );
+        if ( table->num_names )
+        {
+          table->glyph_names[0]--;
+          FT_FREE( table->glyph_names[0] );
 
-        FT_FREE( table->glyph_names );
-        table->num_names = 0;
+          FT_FREE( table->glyph_names );
+          table->num_names = 0;
+        }
       }
       else if ( format == 0x00025000L )
       {
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.h
index 94c7d16800..bf9342a9f5 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttpost.h
@@ -5,7 +5,7 @@
  *   PostScript name table processing for TrueType and OpenType fonts
  *   (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.c
index 9dd4419710..bf73d04e54 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded bitmap support (body).
  *
- * Copyright (C) 2005-2020 by
+ * Copyright (C) 2005-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Copyright 2013 by Google, Inc.
@@ -172,13 +172,8 @@
           goto Exit;
         }
 
-        /* we currently don't support bit 1; however, it is better to */
-        /* draw at least something...                                 */
         if ( flags == 3 )
-          FT_TRACE1(( "tt_face_load_sbit_strikes:"
-                      " sbix overlay not supported yet\n"
-                      "                          "
-                      " expect bad rendering results\n" ));
+          face->root.face_flags |= FT_FACE_FLAG_SBIX_OVERLAY;
 
         /*
          * Count the number of strikes available in the table.  We are a bit
@@ -240,8 +235,8 @@
     if ( !face->ebdt_size )
     {
       FT_TRACE2(( "tt_face_load_sbit_strikes:"
-                  " no embedded bitmap data table found;\n"
-                  "                          "
+                  " no embedded bitmap data table found;\n" ));
+      FT_TRACE2(( "                          "
                   " resetting number of strikes to zero\n" ));
       face->sbit_num_strikes = 0;
     }
@@ -345,8 +340,8 @@
           if ( metrics->ascender == 0 )
           {
             FT_TRACE2(( "tt_face_load_strike_metrics:"
-                        " sanitizing invalid ascender and descender\n"
-                        "                            "
+                        " sanitizing invalid ascender and descender\n" ));
+            FT_TRACE2(( "                            "
                         " values for strike %ld (%dppem, %dppem)\n",
                         strike_index,
                         metrics->x_ppem, metrics->y_ppem ));
@@ -374,8 +369,8 @@
         if ( metrics->height == 0 )
         {
           FT_TRACE2(( "tt_face_load_strike_metrics:"
-                      " sanitizing invalid height value\n"
-                      "                            "
+                      " sanitizing invalid height value\n" ));
+          FT_TRACE2(( "                            "
                       " for strike (%d, %d)\n",
                       metrics->x_ppem, metrics->y_ppem ));
           metrics->height    = metrics->y_ppem * 64;
@@ -726,6 +721,9 @@
     pitch      = bitmap->pitch;
     line       = bitmap->buffer;
 
+    if ( !line )
+      goto Exit;
+
     width  = decoder->metrics->width;
     height = decoder->metrics->height;
 
@@ -1573,17 +1571,34 @@
 
     if ( !error )
     {
-      FT_Short   abearing;
+      FT_Short   abearing; /* not used here */
       FT_UShort  aadvance;
 
 
       tt_face_get_metrics( face, FALSE, glyph_index, &abearing, &aadvance );
 
       metrics->horiBearingX = (FT_Short)originOffsetX;
-      metrics->horiBearingY = (FT_Short)( -originOffsetY + metrics->height );
+      metrics->vertBearingX = (FT_Short)originOffsetX;
+
+      metrics->horiBearingY = (FT_Short)( originOffsetY + metrics->height );
+      metrics->vertBearingY = (FT_Short)originOffsetY;
+
       metrics->horiAdvance  = (FT_UShort)( aadvance *
                                            face->root.size->metrics.x_ppem /
                                            face->header.Units_Per_EM );
+
+      if ( face->vertical_info )
+        tt_face_get_metrics( face, TRUE, glyph_index, &abearing, &aadvance );
+      else if ( face->os2.version != 0xFFFFU )
+        aadvance = (FT_UShort)FT_ABS( face->os2.sTypoAscender -
+                                      face->os2.sTypoDescender );
+      else
+        aadvance = (FT_UShort)FT_ABS( face->horizontal.Ascender -
+                                      face->horizontal.Descender );
+
+      metrics->vertAdvance  = (FT_UShort)( aadvance *
+                                           face->root.size->metrics.x_ppem /
+                                           face->header.Units_Per_EM );
     }
 
     return error;
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.h
index b867e43a61..c967bffba3 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttsbit.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded bitmap support (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttsvg.c b/qtbase/src/3rdparty/freetype/src/sfnt/ttsvg.c
new file mode 100644
index 0000000000..69277da577
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttsvg.c
@@ -0,0 +1,403 @@
+/****************************************************************************
+ *
+ * ttsvg.c
+ *
+ *   OpenType SVG Color (specification).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+
+  /**************************************************************************
+   *
+   * 'SVG' table specification:
+   *
+   *    https://docs.microsoft.com/en-us/typography/opentype/spec/svg
+   *
+   */
+
+#include <ft2build.h>
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/internal/ftdebug.h>
+#include <freetype/tttags.h>
+#include <freetype/ftgzip.h>
+#include <freetype/otsvg.h>
+
+
+#ifdef FT_CONFIG_OPTION_SVG
+
+#include "ttsvg.h"
+
+
+  /* NOTE: These table sizes are given by the specification. */
+#define SVG_TABLE_HEADER_SIZE           (10U)
+#define SVG_DOCUMENT_RECORD_SIZE        (12U)
+#define SVG_DOCUMENT_LIST_MINIMUM_SIZE  (2U + SVG_DOCUMENT_RECORD_SIZE)
+#define SVG_MINIMUM_SIZE                (SVG_TABLE_HEADER_SIZE +        \
+                                         SVG_DOCUMENT_LIST_MINIMUM_SIZE)
+
+
+  typedef struct  Svg_
+  {
+    FT_UShort  version;                 /* table version (starting at 0)  */
+    FT_UShort  num_entries;             /* number of SVG document records */
+
+    FT_Byte*  svg_doc_list;  /* pointer to the start of SVG Document List */
+
+    void*     table;                          /* memory that backs up SVG */
+    FT_ULong  table_size;
+
+  } Svg;
+
+
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, usued to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  ttsvg
+
+
+  FT_LOCAL_DEF( FT_Error )
+  tt_face_load_svg( TT_Face    face,
+                    FT_Stream  stream )
+  {
+    FT_Error   error;
+    FT_Memory  memory = face->root.memory;
+
+    FT_ULong  table_size;
+    FT_Byte*  table = NULL;
+    FT_Byte*  p     = NULL;
+    Svg*      svg   = NULL;
+    FT_ULong  offsetToSVGDocumentList;
+
+
+    error = face->goto_table( face, TTAG_SVG, stream, &table_size );
+    if ( error )
+      goto NoSVG;
+
+    if ( table_size < SVG_MINIMUM_SIZE )
+      goto InvalidTable;
+
+    if ( FT_FRAME_EXTRACT( table_size, table ) )
+      goto NoSVG;
+
+    /* Allocate memory for the SVG object */
+    if ( FT_NEW( svg ) )
+      goto NoSVG;
+
+    p                       = table;
+    svg->version            = FT_NEXT_USHORT( p );
+    offsetToSVGDocumentList = FT_NEXT_ULONG( p );
+
+    if ( offsetToSVGDocumentList < SVG_TABLE_HEADER_SIZE            ||
+         offsetToSVGDocumentList > table_size -
+                                     SVG_DOCUMENT_LIST_MINIMUM_SIZE )
+      goto InvalidTable;
+
+    svg->svg_doc_list = (FT_Byte*)( table + offsetToSVGDocumentList );
+
+    p                = svg->svg_doc_list;
+    svg->num_entries = FT_NEXT_USHORT( p );
+
+    FT_TRACE3(( "version: %d\n", svg->version ));
+    FT_TRACE3(( "number of entries: %d\n", svg->num_entries ));
+
+    if ( offsetToSVGDocumentList +
+           svg->num_entries * SVG_DOCUMENT_RECORD_SIZE > table_size )
+      goto InvalidTable;
+
+    svg->table      = table;
+    svg->table_size = table_size;
+
+    face->svg              = svg;
+    face->root.face_flags |= FT_FACE_FLAG_SVG;
+
+    return FT_Err_Ok;
+
+  InvalidTable:
+    error = FT_THROW( Invalid_Table );
+
+  NoSVG:
+    FT_FRAME_RELEASE( table );
+    FT_FREE( svg );
+    face->svg = NULL;
+
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( void )
+  tt_face_free_svg( TT_Face  face )
+  {
+    FT_Memory  memory = face->root.memory;
+    FT_Stream  stream = face->root.stream;
+
+    Svg*  svg = (Svg*)face->svg;
+
+
+    if ( svg )
+    {
+      FT_FRAME_RELEASE( svg->table );
+      FT_FREE( svg );
+    }
+  }
+
+
+  typedef struct  Svg_doc_
+  {
+    FT_UShort  start_glyph_id;
+    FT_UShort  end_glyph_id;
+
+    FT_ULong  offset;
+    FT_ULong  length;
+
+  } Svg_doc;
+
+
+  static Svg_doc
+  extract_svg_doc( FT_Byte*  stream )
+  {
+    Svg_doc  doc;
+
+
+    doc.start_glyph_id = FT_NEXT_USHORT( stream );
+    doc.end_glyph_id   = FT_NEXT_USHORT( stream );
+
+    doc.offset = FT_NEXT_ULONG( stream );
+    doc.length = FT_NEXT_ULONG( stream );
+
+    return doc;
+  }
+
+
+  static FT_Int
+  compare_svg_doc( Svg_doc  doc,
+                   FT_UInt  glyph_index )
+  {
+    if ( glyph_index < doc.start_glyph_id )
+      return -1;
+    else if ( glyph_index > doc.end_glyph_id )
+      return 1;
+    else
+      return 0;
+  }
+
+
+  static FT_Error
+  find_doc( FT_Byte*    stream,
+            FT_UShort   num_entries,
+            FT_UInt     glyph_index,
+            FT_ULong   *doc_offset,
+            FT_ULong   *doc_length,
+            FT_UShort  *start_glyph,
+            FT_UShort  *end_glyph )
+  {
+    FT_Error  error;
+
+    Svg_doc  start_doc;
+    Svg_doc  mid_doc;
+    Svg_doc  end_doc;
+
+    FT_Bool  found = FALSE;
+    FT_UInt  i     = 0;
+
+    FT_UInt  start_index = 0;
+    FT_UInt  end_index   = num_entries - 1;
+    FT_Int   comp_res;
+
+
+    /* search algorithm */
+    if ( num_entries == 0 )
+    {
+      error = FT_THROW( Invalid_Table );
+      return error;
+    }
+
+    start_doc = extract_svg_doc( stream + start_index * 12 );
+    end_doc   = extract_svg_doc( stream + end_index * 12 );
+
+    if ( ( compare_svg_doc( start_doc, glyph_index ) == -1 ) ||
+         ( compare_svg_doc( end_doc, glyph_index ) == 1 )    )
+    {
+      error = FT_THROW( Invalid_Glyph_Index );
+      return error;
+    }
+
+    while ( start_index <= end_index )
+    {
+      i        = ( start_index + end_index ) / 2;
+      mid_doc  = extract_svg_doc( stream + i * 12 );
+      comp_res = compare_svg_doc( mid_doc, glyph_index );
+
+      if ( comp_res == 1 )
+      {
+        start_index = i + 1;
+        start_doc   = extract_svg_doc( stream + start_index * 4 );
+      }
+      else if ( comp_res == -1 )
+      {
+        end_index = i - 1;
+        end_doc   = extract_svg_doc( stream + end_index * 4 );
+      }
+      else
+      {
+        found = TRUE;
+        break;
+      }
+    }
+    /* search algorithm end */
+
+    if ( found != TRUE )
+    {
+      FT_TRACE5(( "SVG glyph not found\n" ));
+      error = FT_THROW( Invalid_Glyph_Index );
+    }
+    else
+    {
+      *doc_offset = mid_doc.offset;
+      *doc_length = mid_doc.length;
+
+      *start_glyph = mid_doc.start_glyph_id;
+      *end_glyph   = mid_doc.end_glyph_id;
+
+      error = FT_Err_Ok;
+    }
+
+    return error;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  tt_face_load_svg_doc( FT_GlyphSlot  glyph,
+                        FT_UInt       glyph_index )
+  {
+    FT_Byte*   doc_list;        /* pointer to the SVG doc list         */
+    FT_UShort  num_entries;     /* total number of entries in doc list */
+    FT_ULong   doc_offset;
+    FT_ULong   doc_length;
+
+    FT_UShort  start_glyph_id;
+    FT_UShort  end_glyph_id;
+
+    FT_Error   error  = FT_Err_Ok;
+    TT_Face    face   = (TT_Face)glyph->face;
+    FT_Memory  memory = face->root.memory;
+    Svg*       svg    = (Svg*)face->svg;
+
+    FT_SVG_Document  svg_document = (FT_SVG_Document)glyph->other;
+
+
+    FT_ASSERT( !( svg == NULL ) );
+
+    doc_list    = svg->svg_doc_list;
+    num_entries = FT_NEXT_USHORT( doc_list );
+
+    error = find_doc( doc_list, num_entries, glyph_index,
+                                &doc_offset, &doc_length,
+                                &start_glyph_id, &end_glyph_id );
+    if ( error != FT_Err_Ok )
+      goto Exit;
+
+    doc_list = svg->svg_doc_list;      /* reset, so we can use it again */
+    doc_list = (FT_Byte*)( doc_list + doc_offset );
+
+    if ( ( doc_list[0] == 0x1F ) && ( doc_list[1] == 0x8B )
+                                 && ( doc_list[2] == 0x08 ) )
+    {
+#ifdef FT_CONFIG_OPTION_USE_ZLIB
+
+      FT_ULong  uncomp_size;
+      FT_Byte*  uncomp_buffer = NULL;
+
+
+      /*
+       * Get the size of the original document.  This helps in allotting the
+       * buffer to accommodate the uncompressed version.  The last 4 bytes
+       * of the compressed document are equal to the original size modulo
+       * 2^32.  Since the size of SVG documents is less than 2^32 bytes we
+       * can use this accurately.  The four bytes are stored in
+       * little-endian format.
+       */
+      FT_TRACE4(( "SVG document is GZIP compressed\n" ));
+      uncomp_size = (FT_ULong)doc_list[doc_length - 1] << 24 |
+                    (FT_ULong)doc_list[doc_length - 2] << 16 |
+                    (FT_ULong)doc_list[doc_length - 3] << 8  |
+                    (FT_ULong)doc_list[doc_length - 4];
+
+      if ( FT_QALLOC( uncomp_buffer, uncomp_size ) )
+        goto Exit;
+
+      error = FT_Gzip_Uncompress( memory,
+                                  uncomp_buffer,
+                                  &uncomp_size,
+                                  doc_list,
+                                  doc_length );
+      if ( error )
+      {
+        FT_FREE( uncomp_buffer );
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+
+      glyph->internal->flags |= FT_GLYPH_OWN_GZIP_SVG;
+
+      doc_list   = uncomp_buffer;
+      doc_length = uncomp_size;
+
+#else /* !FT_CONFIG_OPTION_USE_ZLIB */
+
+      error = FT_THROW( Unimplemented_Feature );
+      goto Exit;
+
+#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
+    }
+
+    svg_document->svg_document        = doc_list;
+    svg_document->svg_document_length = doc_length;
+
+    svg_document->metrics      = glyph->face->size->metrics;
+    svg_document->units_per_EM = glyph->face->units_per_EM;
+
+    svg_document->start_glyph_id = start_glyph_id;
+    svg_document->end_glyph_id   = end_glyph_id;
+
+    svg_document->transform.xx = 0x10000;
+    svg_document->transform.xy = 0;
+    svg_document->transform.yx = 0;
+    svg_document->transform.yy = 0x10000;
+
+    svg_document->delta.x = 0;
+    svg_document->delta.y = 0;
+
+    FT_TRACE5(( "start_glyph_id: %d\n", start_glyph_id ));
+    FT_TRACE5(( "end_glyph_id:   %d\n", end_glyph_id ));
+    FT_TRACE5(( "svg_document:\n" ));
+    FT_TRACE5(( " %.*s\n", (FT_UInt)doc_length, doc_list ));
+
+    glyph->other = svg_document;
+
+  Exit:
+    return error;
+  }
+
+#else /* !FT_CONFIG_OPTION_SVG */
+
+  /* ANSI C doesn't like empty source files */
+  typedef int  _tt_svg_dummy;
+
+#endif /* !FT_CONFIG_OPTION_SVG */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/ttsvg.h b/qtbase/src/3rdparty/freetype/src/sfnt/ttsvg.h
new file mode 100644
index 0000000000..7c234fd524
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/ttsvg.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+ *
+ * ttsvg.h
+ *
+ *   OpenType SVG Color (specification).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#ifndef TTSVG_H_
+#define TTSVG_H_
+
+#include <freetype/internal/ftstream.h>
+#include <freetype/internal/tttypes.h>
+
+
+FT_BEGIN_HEADER
+
+  FT_LOCAL( FT_Error )
+  tt_face_load_svg( TT_Face    face,
+                    FT_Stream  stream );
+
+  FT_LOCAL( void )
+  tt_face_free_svg( TT_Face  face );
+
+  FT_LOCAL( FT_Error )
+  tt_face_load_svg_doc( FT_GlyphSlot  glyph,
+                        FT_UInt       glyph_index );
+
+FT_END_HEADER
+
+#endif /* TTSVG_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.c b/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.c
index fd9f2e6c5d..7d79fef39a 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.c
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.c
@@ -4,7 +4,7 @@
  *
  *   WOFF2 Font table tags (base).
  *
- * Copyright (C) 2019-2020 by
+ * Copyright (C) 2019-2022 by
  * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -17,6 +17,9 @@
 
 
 #include <freetype/tttags.h>
+
+#ifdef FT_CONFIG_OPTION_USE_BROTLI
+
 #include "woff2tags.h"
 
   /*
@@ -28,10 +31,10 @@
    *
    * for details.
    */
-  FT_LOCAL_DEF( FT_ULong )
+  FT_LOCAL_DEF( FT_Tag )
   woff2_known_tags( FT_Byte  index )
   {
-    const FT_ULong  known_tags[63] =
+    static const FT_Tag  known_tags[63] =
     {
       FT_MAKE_TAG('c', 'm', 'a', 'p'),  /*  0  */
       FT_MAKE_TAG('h', 'e', 'a', 'd'),  /*  1  */
@@ -105,5 +108,12 @@
     return known_tags[index];
   }
 
+#else /* !FT_CONFIG_OPTION_USE_BROTLI */
+
+  /* ANSI C doesn't like empty source files */
+  typedef int  _woff2tags_dummy;
+
+#endif /* !FT_CONFIG_OPTION_USE_BROTLI */
+
 
 /* END */
diff --git a/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.h b/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.h
index c437c77aa1..05df85aba0 100644
--- a/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.h
+++ b/qtbase/src/3rdparty/freetype/src/sfnt/woff2tags.h
@@ -2,9 +2,9 @@
  *
  * woff2tags.h
  *
- *   WOFFF2 Font table tags (specification).
+ *   WOFF2 Font table tags (specification).
  *
- * Copyright (C) 2019-2020 by
+ * Copyright (C) 2019-2022 by
  * Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,10 +26,12 @@
 
 FT_BEGIN_HEADER
 
+#ifdef FT_CONFIG_OPTION_USE_BROTLI
 
-  FT_LOCAL( FT_ULong )
+  FT_LOCAL( FT_Tag )
   woff2_known_tags( FT_Byte  index );
 
+#endif
 
 FT_END_HEADER
 
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.c b/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.c
index 681900fd40..622035aa79 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.c
+++ b/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.c
@@ -4,7 +4,7 @@
  *
  *   A new `perfect' anti-aliasing renderer (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -149,14 +149,10 @@
 #define FT_INT_MAX    INT_MAX
 #define FT_ULONG_MAX  ULONG_MAX
 
-#define ADD_LONG( a, b )                                    \
-          (long)( (unsigned long)(a) + (unsigned long)(b) )
-#define SUB_LONG( a, b )                                    \
-          (long)( (unsigned long)(a) - (unsigned long)(b) )
-#define MUL_LONG( a, b )                                    \
-          (long)( (unsigned long)(a) * (unsigned long)(b) )
-#define NEG_LONG( a )                                       \
-          (long)( -(unsigned long)(a) )
+#define ADD_INT( a, b )                                  \
+          (int)( (unsigned int)(a) + (unsigned int)(b) )
+
+#define FT_STATIC_BYTE_CAST( type, var )  (type)(unsigned char)(var)
 
 
 #define ft_memset   memset
@@ -168,10 +164,11 @@
 typedef ptrdiff_t  FT_PtrDist;
 
 
-#define ErrRaster_Invalid_Mode      -2
-#define ErrRaster_Invalid_Outline   -1
-#define ErrRaster_Invalid_Argument  -3
-#define ErrRaster_Memory_Overflow   -4
+#define Smooth_Err_Ok                    0
+#define Smooth_Err_Invalid_Outline      -1
+#define Smooth_Err_Cannot_Render_Glyph  -2
+#define Smooth_Err_Invalid_Argument     -3
+#define Smooth_Err_Raster_Overflow      -4
 
 #define FT_BEGIN_HEADER
 #define FT_END_HEADER
@@ -229,23 +226,26 @@ typedef ptrdiff_t  FT_PtrDist;
 #define FT_ERROR( varformat )   FT_Message varformat
 #endif
 
-#define FT_THROW( e )                               \
-          ( FT_Throw( FT_ERR_CAT( ErrRaster_, e ),  \
-                      __LINE__,                     \
-                      __FILE__ )                  | \
-            FT_ERR_CAT( ErrRaster_, e )           )
+#define FT_THROW( e )                                \
+          ( FT_Throw( FT_ERR_CAT( Smooth_Err_, e ),  \
+                      __LINE__,                      \
+                      __FILE__ )                   | \
+            FT_ERR_CAT( Smooth_Err_, e )           )
 
 #else /* !FT_DEBUG_LEVEL_TRACE */
 
 #define FT_TRACE5( x )  do { } while ( 0 )     /* nothing */
 #define FT_TRACE7( x )  do { } while ( 0 )     /* nothing */
 #define FT_ERROR( x )   do { } while ( 0 )     /* nothing */
-#define FT_THROW( e )   FT_ERR_CAT( ErrRaster_, e )
-
+#define FT_THROW( e )   FT_ERR_CAT( Smooth_Err_, e )
 
 #endif /* !FT_DEBUG_LEVEL_TRACE */
 
 
+#define FT_Trace_Enable()   do { } while ( 0 )  /* nothing */
+#define FT_Trace_Disable()  do { } while ( 0 )  /* nothing */
+
+
 #define FT_DEFINE_OUTLINE_FUNCS( class_,               \
                                  move_to_, line_to_,   \
                                  conic_to_, cubic_to_, \
@@ -278,6 +278,8 @@ typedef ptrdiff_t  FT_PtrDist;
 #else /* !STANDALONE_ */
 
 
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
 #include "ftgrays.h"
 #include <freetype/internal/ftobjs.h>
 #include <freetype/internal/ftdebug.h>
@@ -286,10 +288,6 @@ typedef ptrdiff_t  FT_PtrDist;
 
 #include "ftsmerrs.h"
 
-#define Smooth_Err_Invalid_Mode     Smooth_Err_Cannot_Render_Glyph
-#define Smooth_Err_Memory_Overflow  Smooth_Err_Out_Of_Memory
-#define ErrRaster_Memory_Overflow   Smooth_Err_Out_Of_Memory
-
 
 #endif /* !STANDALONE_ */
 
@@ -335,7 +333,9 @@ typedef ptrdiff_t  FT_PtrDist;
 #define PIXEL_BITS  8
 
 #define ONE_PIXEL       ( 1 << PIXEL_BITS )
+#undef TRUNC
 #define TRUNC( x )      (TCoord)( (x) >> PIXEL_BITS )
+#undef FRACT
 #define FRACT( x )      (TCoord)( (x) & ( ONE_PIXEL - 1 ) )
 
 #if PIXEL_BITS >= 6
@@ -362,7 +362,7 @@ typedef ptrdiff_t  FT_PtrDist;
     }                                                              \
   FT_END_STMNT
 
-#ifdef  __arm__
+#if defined( __GNUC__ ) && __GNUC__ < 7 && defined( __arm__ )
   /* Work around a bug specific to GCC which make the compiler fail to */
   /* optimize a division and modulo operation on the same parameters   */
   /* into a single call to `__aeabi_idivmod'.  See                     */
@@ -382,14 +382,58 @@ typedef ptrdiff_t  FT_PtrDist;
 #endif /* __arm__ */
 
 
-  /* These macros speed up repetitive divisions by replacing them */
-  /* with multiplications and right shifts.                       */
-#define FT_UDIVPREP( c, b )                                        \
-  long  b ## _r = c ? (long)( FT_ULONG_MAX >> PIXEL_BITS ) / ( b ) \
-                    : 0
-#define FT_UDIV( a, b )                                                \
-  (TCoord)( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >>   \
-            ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
+  /* Calculating coverages for a slanted line requires a division each */
+  /* time the line crosses from cell to cell.  These macros speed up   */
+  /* the repetitive divisions by replacing them with multiplications   */
+  /* and right shifts so that at most two divisions are performed for  */
+  /* each slanted line.  Nevertheless, these divisions are noticeable  */
+  /* in the overall performance because flattened curves produce a     */
+  /* very large number of slanted lines.                               */
+  /*                                                                   */
+  /* The division results here are always within ONE_PIXEL.  Therefore */
+  /* the shift magnitude should be at least PIXEL_BITS wider than the  */
+  /* divisors to provide sufficient accuracy of the multiply-shift.    */
+  /* It should not exceed (64 - PIXEL_BITS) to prevent overflowing and */
+  /* leave enough room for 64-bit unsigned multiplication however.     */
+#define FT_UDIVPREP( c, b )                                \
+  FT_Int64  b ## _r = c ? (FT_Int64)0xFFFFFFFF / ( b ) : 0
+#define FT_UDIV( a, b )                                           \
+  (TCoord)( ( (FT_UInt64)( a ) * (FT_UInt64)( b ## _r ) ) >> 32 )
+
+
+  /* Scale area and apply fill rule to calculate the coverage byte. */
+  /* The top fill bit is used for the non-zero rule. The eighth     */
+  /* fill bit is used for the even-odd rule.  The higher coverage   */
+  /* bytes are either clamped for the non-zero-rule or discarded    */
+  /* later for the even-odd rule.                                   */
+#define FT_FILL_RULE( coverage, area, fill )                \
+  FT_BEGIN_STMNT                                            \
+    coverage = (int)( area >> ( PIXEL_BITS * 2 + 1 - 8 ) ); \
+    if ( coverage & fill )                                  \
+      coverage = ~coverage;                                 \
+    if ( coverage > 255 && fill & INT_MIN )                 \
+      coverage = 255;                                       \
+  FT_END_STMNT
+
+
+  /* It is faster to write small spans byte-by-byte than calling     */
+  /* `memset'.  This is mainly due to the cost of the function call. */
+#define FT_GRAY_SET( d, s, count )                          \
+  FT_BEGIN_STMNT                                            \
+    unsigned char* q = d;                                   \
+    switch ( count )                                        \
+    {                                                       \
+      case 7: *q++ = (unsigned char)s; /* fall through */   \
+      case 6: *q++ = (unsigned char)s; /* fall through */   \
+      case 5: *q++ = (unsigned char)s; /* fall through */   \
+      case 4: *q++ = (unsigned char)s; /* fall through */   \
+      case 3: *q++ = (unsigned char)s; /* fall through */   \
+      case 2: *q++ = (unsigned char)s; /* fall through */   \
+      case 1: *q   = (unsigned char)s; /* fall through */   \
+      case 0: break;                                        \
+      default: FT_MEM_SET( d, s, count );                   \
+    }                                                       \
+  FT_END_STMNT
 
 
   /**************************************************************************
@@ -432,7 +476,7 @@ typedef ptrdiff_t  FT_PtrDist;
 #endif
 
   /* FT_Span buffer size for direct rendering only */
-#define FT_MAX_GRAY_SPANS  10
+#define FT_MAX_GRAY_SPANS  16
 
 
 #if defined( _MSC_VER )      /* Visual C++ (and Intel C++) */
@@ -447,28 +491,24 @@ typedef ptrdiff_t  FT_PtrDist;
   {
     ft_jmp_buf  jump_buffer;
 
-    TCoord  ex, ey;
-    TCoord  min_ex, max_ex;
+    TCoord  min_ex, max_ex;  /* min and max integer pixel coordinates */
     TCoord  min_ey, max_ey;
+    TCoord  count_ey;        /* same as (max_ey - min_ey) */
 
-    TArea   area;
-    TCoord  cover;
-    int     invalid;
+    PCell       cell;        /* current cell                             */
+    PCell       cell_free;   /* call allocation next free slot           */
+    PCell       cell_null;   /* last cell, used as dumpster and limit    */
 
-    PCell*      ycells;
-    PCell       cells;
-    FT_PtrDist  max_cells;
-    FT_PtrDist  num_cells;
+    PCell*      ycells;      /* array of cell linked-lists; one per      */
+                             /* vertical coordinate in the current band  */
 
-    TPos    x,  y;
+    TPos        x,  y;       /* last point position */
 
-    FT_Outline  outline;
-    TPixmap     target;
+    FT_Outline  outline;     /* input outline */
+    TPixmap     target;      /* target pixmap */
 
     FT_Raster_Span_Func  render_span;
     void*                render_span_data;
-    FT_Span              spans[FT_MAX_GRAY_SPANS];
-    int                  num_spans;
 
   } gray_TWorker, *gray_PWorker;
 
@@ -476,17 +516,25 @@ typedef ptrdiff_t  FT_PtrDist;
 #pragma warning( pop )
 #endif
 
-
 #ifndef FT_STATIC_RASTER
 #define ras  (*worker)
 #else
   static gray_TWorker  ras;
 #endif
 
+  /* The |x| value of the null cell.  Must be the largest possible */
+  /* integer value stored in a `TCell.x` field.                    */
+#define CELL_MAX_X_VALUE    INT_MAX
+
+
+#define FT_INTEGRATE( ras, a, b )                                       \
+          ras.cell->cover = ADD_INT( ras.cell->cover, a ),              \
+          ras.cell->area  = ADD_INT( ras.cell->area, (a) * (TArea)(b) )
+
 
   typedef struct gray_TRaster_
   {
-    void*         memory;
+    void*  memory;
 
   } gray_TRaster, *gray_PRaster;
 
@@ -508,7 +556,7 @@ typedef ptrdiff_t  FT_PtrDist;
 
       printf( "%3d:", y );
 
-      for ( ; cell != NULL; cell = cell->next )
+      for ( ; cell != ras.cell_null; cell = cell->next )
         printf( " (%3d, c:%4d, a:%6d)",
                 cell->x, cell->cover, cell->area );
       printf( "\n" );
@@ -520,81 +568,67 @@ typedef ptrdiff_t  FT_PtrDist;
 
   /**************************************************************************
    *
-   * Record the current cell in the linked list.
+   * Set the current cell to a new position.
    */
   static void
-  gray_record_cell( RAS_ARG )
+  gray_set_cell( RAS_ARG_ TCoord  ex,
+                          TCoord  ey )
   {
-    PCell  *pcell, cell;
-    TCoord  x = ras.ex;
-
+    /* Move the cell pointer to a new position in the linked list. We use  */
+    /* a dumpster null cell for everything outside of the clipping region  */
+    /* during the render phase.  This means that:                          */
+    /*                                                                     */
+    /* . the new vertical position must be within min_ey..max_ey-1.        */
+    /* . the new horizontal position must be strictly less than max_ex     */
+    /*                                                                     */
+    /* Note that if a cell is to the left of the clipping region, it is    */
+    /* actually set to the (min_ex-1) horizontal position.                 */
 
-    pcell = &ras.ycells[ras.ey - ras.min_ey];
-    while ( ( cell = *pcell ) )
-    {
-      if ( cell->x > x )
-        break;
+    TCoord  ey_index = ey - ras.min_ey;
 
-      if ( cell->x == x )
-        goto Found;
 
-      pcell = &cell->next;
-    }
+    if ( ey_index < 0 || ey_index >= ras.count_ey || ex >= ras.max_ex )
+      ras.cell = ras.cell_null;
+    else
+    {
+      PCell*  pcell = ras.ycells + ey_index;
+      PCell   cell;
 
-    if ( ras.num_cells >= ras.max_cells )
-      ft_longjmp( ras.jump_buffer, 1 );
 
-    /* insert new cell */
-    cell        = ras.cells + ras.num_cells++;
-    cell->x     = x;
-    cell->area  = ras.area;
-    cell->cover = ras.cover;
+      ex = FT_MAX( ex, ras.min_ex - 1 );
 
-    cell->next  = *pcell;
-    *pcell      = cell;
+      while ( 1 )
+      {
+        cell = *pcell;
 
-    return;
+        if ( cell->x > ex )
+          break;
 
-  Found:
-    /* update old cell */
-    cell->area  += ras.area;
-    cell->cover += ras.cover;
-  }
+        if ( cell->x == ex )
+          goto Found;
 
+        pcell = &cell->next;
+      }
 
-  /**************************************************************************
-   *
-   * Set the current cell to a new position.
-   */
-  static void
-  gray_set_cell( RAS_ARG_ TCoord  ex,
-                          TCoord  ey )
-  {
-    /* Move the cell pointer to a new position.  We set the `invalid'      */
-    /* flag to indicate that the cell isn't part of those we're interested */
-    /* in during the render phase.  This means that:                       */
-    /*                                                                     */
-    /* . the new vertical position must be within min_ey..max_ey-1.        */
-    /* . the new horizontal position must be strictly less than max_ex     */
-    /*                                                                     */
-    /* Note that if a cell is to the left of the clipping region, it is    */
-    /* actually set to the (min_ex-1) horizontal position.                 */
+      /* insert new cell */
+      cell = ras.cell_free++;
+      if ( cell >= ras.cell_null )
+        ft_longjmp( ras.jump_buffer, 1 );
 
-    /* record the current one if it is valid and substantial */
-    if ( !ras.invalid && ( ras.area || ras.cover ) )
-      gray_record_cell( RAS_VAR );
+      cell->x     = ex;
+      cell->area  = 0;
+      cell->cover = 0;
 
-    ras.area  = 0;
-    ras.cover = 0;
-    ras.ex    = FT_MAX( ex, ras.min_ex - 1 );
-    ras.ey    = ey;
+      cell->next  = *pcell;
+      *pcell      = cell;
 
-    ras.invalid = ( ey >= ras.max_ey || ey < ras.min_ey ||
-                    ex >= ras.max_ex );
+    Found:
+      ras.cell = cell;
+    }
   }
 
 
-#ifndef FT_LONG64
+#ifndef FT_INT64
 
   /**************************************************************************
    *
@@ -622,8 +656,8 @@ typedef ptrdiff_t  FT_PtrDist;
       return;
     }
 
-    fx1   = FRACT( x1 );
-    fx2   = FRACT( x2 );
+    fx1 = FRACT( x1 );
+    fx2 = FRACT( x2 );
 
     /* everything is located in a single cell.  That is easy! */
     /*                                                        */
@@ -655,10 +689,9 @@ typedef ptrdiff_t  FT_PtrDist;
     /* XXX: y-delta and x-delta below should be related.            */
     FT_DIV_MOD( TCoord, p, dx, delta, mod );
 
-    ras.area  += (TArea)( ( fx1 + first ) * delta );
-    ras.cover += delta;
-    y1        += delta;
-    ex1       += incr;
+    FT_INTEGRATE( ras, delta, fx1 + first );
+    y1  += delta;
+    ex1 += incr;
     gray_set_cell( RAS_VAR_ ex1, ey );
 
     if ( ex1 != ex2 )
@@ -679,10 +712,9 @@ typedef ptrdiff_t  FT_PtrDist;
           delta++;
         }
 
-        ras.area  += (TArea)( ONE_PIXEL * delta );
-        ras.cover += delta;
-        y1        += delta;
-        ex1       += incr;
+        FT_INTEGRATE( ras, delta, ONE_PIXEL );
+        y1  += delta;
+        ex1 += incr;
         gray_set_cell( RAS_VAR_ ex1, ey );
       } while ( ex1 != ex2 );
     }
@@ -690,10 +722,7 @@ typedef ptrdiff_t  FT_PtrDist;
     fx1 = ONE_PIXEL - first;
 
   End:
-    dy = y2 - y1;
-
-    ras.area  += (TArea)( ( fx1 + fx2 ) * dy );
-    ras.cover += dy;
+    FT_INTEGRATE( ras, y2 - y1, fx1 + fx2 );
   }
 
 
@@ -736,7 +765,6 @@ typedef ptrdiff_t  FT_PtrDist;
     {
       TCoord  ex     = TRUNC( ras.x );
       TCoord  two_fx = FRACT( ras.x ) << 1;
-      TArea   area;
 
 
       if ( dy > 0)
@@ -750,27 +778,23 @@ typedef ptrdiff_t  FT_PtrDist;
         incr  = -1;
       }
 
-      delta      = first - fy1;
-      ras.area  += (TArea)two_fx * delta;
-      ras.cover += delta;
-      ey1       += incr;
+      delta = first - fy1;
+      FT_INTEGRATE( ras, delta, two_fx);
+      ey1 += incr;
 
       gray_set_cell( RAS_VAR_ ex, ey1 );
 
       delta = first + first - ONE_PIXEL;
-      area  = (TArea)two_fx * delta;
       while ( ey1 != ey2 )
       {
-        ras.area  += area;
-        ras.cover += delta;
-        ey1       += incr;
+        FT_INTEGRATE( ras, delta, two_fx);
+        ey1 += incr;
 
         gray_set_cell( RAS_VAR_ ex, ey1 );
       }
 
-      delta      = fy2 - ONE_PIXEL + first;
-      ras.area  += (TArea)two_fx * delta;
-      ras.cover += delta;
+      delta = fy2 - ONE_PIXEL + first;
+      FT_INTEGRATE( ras, delta, two_fx);
 
       goto End;
     }
@@ -883,8 +907,7 @@ typedef ptrdiff_t  FT_PtrDist;
         do
         {
           fy2 = ONE_PIXEL;
-          ras.cover += ( fy2 - fy1 );
-          ras.area  += ( fy2 - fy1 ) * fx1 * 2;
+          FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 );
           fy1 = 0;
           ey1++;
           gray_set_cell( RAS_VAR_ ex1, ey1 );
@@ -893,8 +916,7 @@ typedef ptrdiff_t  FT_PtrDist;
         do
         {
           fy2 = 0;
-          ras.cover += ( fy2 - fy1 );
-          ras.area  += ( fy2 - fy1 ) * fx1 * 2;
+          FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 );
           fy1 = ONE_PIXEL;
           ey1--;
           gray_set_cell( RAS_VAR_ ex1, ey1 );
@@ -902,7 +924,7 @@ typedef ptrdiff_t  FT_PtrDist;
     }
     else                                  /* any other line */
     {
-      TPos  prod = dx * (TPos)fy1 - dy * (TPos)fx1;
+      FT_Int64  prod = dx * (FT_Int64)fy1 - dy * (FT_Int64)fx1;
       FT_UDIVPREP( ex1 != ex2, dx );
       FT_UDIVPREP( ey1 != ey2, dy );
 
@@ -912,72 +934,308 @@ typedef ptrdiff_t  FT_PtrDist;
       /* also easily updated when moving from one cell to the next.  */
       do
       {
-        if      ( prod                                   <= 0 &&
-                  prod - dx * ONE_PIXEL                  >  0 ) /* left */
+        if      ( prod - dx * ONE_PIXEL                  >  0 &&
+                  prod                                   <= 0 ) /* left */
         {
           fx2 = 0;
           fy2 = FT_UDIV( -prod, -dx );
           prod -= dy * ONE_PIXEL;
-          ras.cover += ( fy2 - fy1 );
-          ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
+          FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
           fx1 = ONE_PIXEL;
           fy1 = fy2;
           ex1--;
         }
-        else if ( prod - dx * ONE_PIXEL                  <= 0 &&
-                  prod - dx * ONE_PIXEL + dy * ONE_PIXEL >  0 ) /* up */
+        else if ( prod - dx * ONE_PIXEL + dy * ONE_PIXEL >  0 &&
+                  prod - dx * ONE_PIXEL                  <= 0 ) /* up */
         {
           prod -= dx * ONE_PIXEL;
           fx2 = FT_UDIV( -prod, dy );
           fy2 = ONE_PIXEL;
-          ras.cover += ( fy2 - fy1 );
-          ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
+          FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
           fx1 = fx2;
           fy1 = 0;
           ey1++;
         }
-        else if ( prod - dx * ONE_PIXEL + dy * ONE_PIXEL <= 0 &&
-                  prod                  + dy * ONE_PIXEL >= 0 ) /* right */
+        else if ( prod                  + dy * ONE_PIXEL >= 0 &&
+                  prod - dx * ONE_PIXEL + dy * ONE_PIXEL <= 0 ) /* right */
         {
           prod += dy * ONE_PIXEL;
           fx2 = ONE_PIXEL;
           fy2 = FT_UDIV( prod, dx );
-          ras.cover += ( fy2 - fy1 );
-          ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
+          FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
           fx1 = 0;
           fy1 = fy2;
           ex1++;
         }
-        else /* ( prod                  + dy * ONE_PIXEL <  0 &&
-                  prod                                   >  0 )    down */
+        else /* ( prod                                   >  0 &&
+                  prod                  + dy * ONE_PIXEL <  0 )    down */
         {
           fx2 = FT_UDIV( prod, -dy );
           fy2 = 0;
           prod += dx * ONE_PIXEL;
-          ras.cover += ( fy2 - fy1 );
-          ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
+          FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
           fx1 = fx2;
           fy1 = ONE_PIXEL;
           ey1--;
         }
 
         gray_set_cell( RAS_VAR_ ex1, ey1 );
+
       } while ( ex1 != ex2 || ey1 != ey2 );
     }
 
     fx2 = FRACT( to_x );
     fy2 = FRACT( to_y );
 
-    ras.cover += ( fy2 - fy1 );
-    ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
+    FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
 
   End:
-    ras.x       = to_x;
-    ras.y       = to_y;
+    ras.x = to_x;
+    ras.y = to_y;
   }
 
 #endif
 
+  /*
+   * Benchmarking shows that using DDA to flatten the quadratic Bézier arcs
+   * is slightly faster in the following cases:
+   *
+   *   - When the host CPU is 64-bit.
+   *   - When SSE2 SIMD registers and instructions are available (even on
+   *     x86).
+   *
+   * For other cases, using binary splits is actually slightly faster.
+   */
+#if defined( __SSE2__ )                          || \
+    defined( __x86_64__ )                        || \
+    defined( _M_AMD64 )                          || \
+    ( defined( _M_IX86_FP ) && _M_IX86_FP >= 2 )
+#  define FT_SSE2 1
+#else
+#  define FT_SSE2 0
+#endif
+
+#if FT_SSE2                || \
+    defined( __aarch64__ ) || \
+    defined( _M_ARM64 )
+#  define BEZIER_USE_DDA  1
+#else
+#  define BEZIER_USE_DDA  0
+#endif
+
+  /*
+   * For now, the code that depends on `BEZIER_USE_DDA` requires `FT_Int64`
+   * to be defined.  If `FT_INT64` is not defined, meaning there is no
+   * 64-bit type available, disable it to avoid compilation errors.  See for
+   * example https://gitlab.freedesktop.org/freetype/freetype/-/issues/1071.
+   */
+#if !defined( FT_INT64 )
+#  undef BEZIER_USE_DDA
+#  define BEZIER_USE_DDA  0
+#endif
+
+#if BEZIER_USE_DDA
+
+#if FT_SSE2
+#  include <emmintrin.h>
+#endif
+
+#define LEFT_SHIFT( a, b )  (FT_Int64)( (FT_UInt64)(a) << (b) )
+
+
+  static void
+  gray_render_conic( RAS_ARG_ const FT_Vector*  control,
+                              const FT_Vector*  to )
+  {
+    FT_Vector  p0, p1, p2;
+    TPos       ax, ay, bx, by, dx, dy;
+    int        shift;
+
+    FT_Int64  rx, ry;
+    FT_Int64  qx, qy;
+    FT_Int64  px, py;
+
+    FT_UInt  count;
+
+
+    p0.x = ras.x;
+    p0.y = ras.y;
+    p1.x = UPSCALE( control->x );
+    p1.y = UPSCALE( control->y );
+    p2.x = UPSCALE( to->x );
+    p2.y = UPSCALE( to->y );
+
+    /* short-cut the arc that crosses the current band */
+    if ( ( TRUNC( p0.y ) >= ras.max_ey &&
+           TRUNC( p1.y ) >= ras.max_ey &&
+           TRUNC( p2.y ) >= ras.max_ey ) ||
+         ( TRUNC( p0.y ) <  ras.min_ey &&
+           TRUNC( p1.y ) <  ras.min_ey &&
+           TRUNC( p2.y ) <  ras.min_ey ) )
+    {
+      ras.x = p2.x;
+      ras.y = p2.y;
+      return;
+    }
+
+    bx = p1.x - p0.x;
+    by = p1.y - p0.y;
+    ax = p2.x - p1.x - bx;  /* p0.x + p2.x - 2 * p1.x */
+    ay = p2.y - p1.y - by;  /* p0.y + p2.y - 2 * p1.y */
+
+    dx = FT_ABS( ax );
+    dy = FT_ABS( ay );
+    if ( dx < dy )
+      dx = dy;
+
+    if ( dx <= ONE_PIXEL / 4 )
+    {
+      gray_render_line( RAS_VAR_ p2.x, p2.y );
+      return;
+    }
+
+    /* We can calculate the number of necessary bisections because  */
+    /* each bisection predictably reduces deviation exactly 4-fold. */
+    /* Even 32-bit deviation would vanish after 16 bisections.      */
+    shift = 0;
+    do
+    {
+      dx   >>= 2;
+      shift += 1;
+
+    } while ( dx > ONE_PIXEL / 4 );
+
+    /*
+     * The (P0,P1,P2) arc equation, for t in [0,1] range:
+     *
+     * P(t) = P0*(1-t)^2 + P1*2*t*(1-t) + P2*t^2
+     *
+     * P(t) = P0 + 2*(P1-P0)*t + (P0+P2-2*P1)*t^2
+     *      = P0 + 2*B*t + A*t^2
+     *
+     *    for A = P0 + P2 - 2*P1
+     *    and B = P1 - P0
+     *
+     * Let's consider the difference when advancing by a small
+     * parameter h:
+     *
+     *    Q(h,t) = P(t+h) - P(t) = 2*B*h + A*h^2 + 2*A*h*t
+     *
+     * And then its own difference:
+     *
+     *    R(h,t) = Q(h,t+h) - Q(h,t) = 2*A*h*h = R (constant)
+     *
+     * Since R is always a constant, it is possible to compute
+     * successive positions with:
+     *
+     *     P = P0
+     *     Q = Q(h,0) = 2*B*h + A*h*h
+     *     R = 2*A*h*h
+     *
+     *   loop:
+     *     P += Q
+     *     Q += R
+     *     EMIT(P)
+     *
+     * To ensure accurate results, perform computations on 64-bit
+     * values, after scaling them by 2^32.
+     *
+     *           h = 1 / 2^N
+     *
+     *     R << 32 = 2 * A << (32 - N - N)
+     *             = A << (33 - 2*N)
+     *
+     *     Q << 32 = (2 * B << (32 - N)) + (A << (32 - N - N))
+     *             = (B << (33 - N)) + (A << (32 - 2*N))
+     */
+
+#if FT_SSE2
+    /* Experience shows that for small shift values, */
+    /* SSE2 is actually slower.                      */
+    if ( shift > 2 )
+    {
+      union
+      {
+        struct { FT_Int64  ax, ay, bx, by; }  i;
+        struct { __m128i  a, b; }  vec;
+
+      } u;
+
+      union
+      {
+        struct { FT_Int32  px_lo, px_hi, py_lo, py_hi; }  i;
+        __m128i  vec;
+
+      } v;
+
+      __m128i  a, b;
+      __m128i  r, q, q2;
+      __m128i  p;
+
+
+      u.i.ax = ax;
+      u.i.ay = ay;
+      u.i.bx = bx;
+      u.i.by = by;
+
+      a = _mm_load_si128( &u.vec.a );
+      b = _mm_load_si128( &u.vec.b );
+
+      r  = _mm_slli_epi64( a, 33 - 2 * shift );
+      q  = _mm_slli_epi64( b, 33 - shift );
+      q2 = _mm_slli_epi64( a, 32 - 2 * shift );
+
+      q = _mm_add_epi64( q2, q );
+
+      v.i.px_lo = 0;
+      v.i.px_hi = p0.x;
+      v.i.py_lo = 0;
+      v.i.py_hi = p0.y;
+
+      p = _mm_load_si128( &v.vec );
+
+      for ( count = 1U << shift; count > 0; count-- )
+      {
+        p = _mm_add_epi64( p, q );
+        q = _mm_add_epi64( q, r );
+
+        _mm_store_si128( &v.vec, p );
+
+        gray_render_line( RAS_VAR_ v.i.px_hi, v.i.py_hi );
+      }
+
+      return;
+    }
+#endif  /* FT_SSE2 */
+
+    rx = LEFT_SHIFT( ax, 33 - 2 * shift );
+    ry = LEFT_SHIFT( ay, 33 - 2 * shift );
+
+    qx = LEFT_SHIFT( bx, 33 - shift ) + LEFT_SHIFT( ax, 32 - 2 * shift );
+    qy = LEFT_SHIFT( by, 33 - shift ) + LEFT_SHIFT( ay, 32 - 2 * shift );
+
+    px = LEFT_SHIFT( p0.x, 32 );
+    py = LEFT_SHIFT( p0.y, 32 );
+
+    for ( count = 1U << shift; count > 0; count-- )
+    {
+      px += qx;
+      py += qy;
+      qx += rx;
+      qy += ry;
+
+      gray_render_line( RAS_VAR_ (FT_Pos)( px >> 32 ),
+                                 (FT_Pos)( py >> 32 ) );
+    }
+  }
+
+#else  /* !BEZIER_USE_DDA */
+
+  /*
+   * Note that multiple attempts to speed up the function below
+   * with SSE2 intrinsics, using various data layouts, have turned
+   * out to be slower than the non-SIMD code below.
+   */
   static void
   gray_split_conic( FT_Vector*  base )
   {
@@ -1007,7 +1265,7 @@ typedef ptrdiff_t  FT_PtrDist;
     FT_Vector   bez_stack[16 * 2 + 1];  /* enough to accommodate bisections */
     FT_Vector*  arc = bez_stack;
     TPos        dx, dy;
-    int         draw, split;
+    int         draw;
 
 
     arc[0].x = UPSCALE( to->x );
@@ -1050,7 +1308,9 @@ typedef ptrdiff_t  FT_PtrDist;
     /* many times as there are trailing zeros in the counter.         */
     do
     {
-      split = draw & ( -draw );  /* isolate the rightmost 1-bit */
+      int  split = draw & ( -draw );  /* isolate the rightmost 1-bit */
+
+
       while ( ( split >>= 1 ) )
       {
         gray_split_conic( arc );
@@ -1063,7 +1323,17 @@ typedef ptrdiff_t  FT_PtrDist;
     } while ( --draw );
   }
 
+#endif  /* !BEZIER_USE_DDA */
 
+
+  /*
+   * For cubic Bézier, binary splits are still faster than DDA
+   * because the splits are adaptive to how quickly each sub-arc
+   * approaches their chord trisection points.
+   *
+   * It might be useful to experiment with SSE2 to speed up
+   * `gray_split_cubic`, though.
+   */
   static void
   gray_split_cubic( FT_Vector*  base )
   {
@@ -1205,125 +1475,133 @@ typedef ptrdiff_t  FT_PtrDist;
 
 
   static void
-  gray_hline( RAS_ARG_ TCoord  x,
-                       TCoord  y,
-                       TArea   coverage,
-                       TCoord  acount )
+  gray_sweep( RAS_ARG )
   {
-    /* scale the coverage from 0..(ONE_PIXEL*ONE_PIXEL*2) to 0..256  */
-    coverage >>= PIXEL_BITS * 2 + 1 - 8;
+    int  fill = ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL ) ? 0x100
+                                                                 : INT_MIN;
+    int  coverage;
+    int  y;
 
-    /* compute the line's coverage depending on the outline fill rule */
-    if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
-    {
-      coverage &= 511;
 
-      if ( coverage >= 256 )
-        coverage = 511 - coverage;
-    }
-    else  /* default non-zero winding rule */
+    for ( y = ras.min_ey; y < ras.max_ey; y++ )
     {
-      if ( coverage < 0 )
-        coverage = ~coverage;  /* the same as -coverage - 1 */
+      PCell   cell  = ras.ycells[y - ras.min_ey];
+      TCoord  x     = ras.min_ex;
+      TArea   cover = 0;
 
-      if ( coverage >= 256 )
-        coverage = 255;
-    }
+      unsigned char*  line = ras.target.origin - ras.target.pitch * y;
 
-    if ( ras.num_spans >= 0 )  /* for FT_RASTER_FLAG_DIRECT only */
-    {
-      FT_Span*  span = ras.spans + ras.num_spans++;
+
+      for ( ; cell != ras.cell_null; cell = cell->next )
+      {
+        TArea  area;
 
 
-      span->x        = (short)x;
-      span->len      = (unsigned short)acount;
-      span->coverage = (unsigned char)coverage;
+        if ( cover != 0 && cell->x > x )
+        {
+          FT_FILL_RULE( coverage, cover, fill );
+          FT_GRAY_SET( line + x, coverage, cell->x - x );
+        }
 
-      if ( ras.num_spans == FT_MAX_GRAY_SPANS )
-      {
-        /* flush the span buffer and reset the count */
-        ras.render_span( y, ras.num_spans, ras.spans, ras.render_span_data );
-        ras.num_spans = 0;
-      }
-    }
-    else
-    {
-      unsigned char*  q = ras.target.origin - ras.target.pitch * y + x;
-      unsigned char   c = (unsigned char)coverage;
+        cover += (TArea)cell->cover * ( ONE_PIXEL * 2 );
+        area   = cover - cell->area;
 
+        if ( area != 0 && cell->x >= ras.min_ex )
+        {
+          FT_FILL_RULE( coverage, area, fill );
+          line[cell->x] = (unsigned char)coverage;
+        }
+
+        x = cell->x + 1;
+      }
 
-      /* For small-spans it is faster to do it by ourselves than
-       * calling `memset'.  This is mainly due to the cost of the
-       * function call.
-       */
-      switch ( acount )
+      if ( cover != 0 )  /* only if cropped */
       {
-      case 7:
-        *q++ = c;
-        /* fall through */
-      case 6:
-        *q++ = c;
-        /* fall through */
-      case 5:
-        *q++ = c;
-        /* fall through */
-      case 4:
-        *q++ = c;
-        /* fall through */
-      case 3:
-        *q++ = c;
-        /* fall through */
-      case 2:
-        *q++ = c;
-        /* fall through */
-      case 1:
-        *q = c;
-        /* fall through */
-      case 0:
-        break;
-      default:
-        FT_MEM_SET( q, c, acount );
+        FT_FILL_RULE( coverage, cover, fill );
+        FT_GRAY_SET( line + x, coverage, ras.max_ex - x );
       }
     }
   }
 
 
   static void
-  gray_sweep( RAS_ARG )
+  gray_sweep_direct( RAS_ARG )
   {
+    int  fill = ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL ) ? 0x100
+                                                                 : INT_MIN;
+    int  coverage;
     int  y;
 
+    FT_Span  span[FT_MAX_GRAY_SPANS];
+    int      n = 0;
+
 
     for ( y = ras.min_ey; y < ras.max_ey; y++ )
     {
       PCell   cell  = ras.ycells[y - ras.min_ey];
       TCoord  x     = ras.min_ex;
       TArea   cover = 0;
-      TArea   area;
 
 
-      for ( ; cell != NULL; cell = cell->next )
+      for ( ; cell != ras.cell_null; cell = cell->next )
       {
+        TArea  area;
+
+
         if ( cover != 0 && cell->x > x )
-          gray_hline( RAS_VAR_ x, y, cover, cell->x - x );
+        {
+          FT_FILL_RULE( coverage, cover, fill );
+
+          span[n].coverage = (unsigned char)coverage;
+          span[n].x        = (short)x;
+          span[n].len      = (unsigned short)( cell->x - x );
+
+          if ( ++n == FT_MAX_GRAY_SPANS )
+          {
+            /* flush the span buffer and reset the count */
+            ras.render_span( y, n, span, ras.render_span_data );
+            n = 0;
+          }
+        }
 
         cover += (TArea)cell->cover * ( ONE_PIXEL * 2 );
         area   = cover - cell->area;
 
         if ( area != 0 && cell->x >= ras.min_ex )
-          gray_hline( RAS_VAR_ cell->x, y, area, 1 );
+        {
+          FT_FILL_RULE( coverage, area, fill );
+
+          span[n].coverage = (unsigned char)coverage;
+          span[n].x        = (short)cell->x;
+          span[n].len      = 1;
+
+          if ( ++n == FT_MAX_GRAY_SPANS )
+          {
+            /* flush the span buffer and reset the count */
+            ras.render_span( y, n, span, ras.render_span_data );
+            n = 0;
+          }
+        }
 
         x = cell->x + 1;
       }
 
-      if ( cover != 0 )
-        gray_hline( RAS_VAR_ x, y, cover, ras.max_ex - x );
+      if ( cover != 0 )  /* only if cropped */
+      {
+        FT_FILL_RULE( coverage, cover, fill );
+
+        span[n].coverage = (unsigned char)coverage;
+        span[n].x        = (short)x;
+        span[n].len      = (unsigned short)( ras.max_ex - x );
+
+        ++n;
+      }
 
-      if ( ras.num_spans > 0 )  /* for FT_RASTER_FLAG_DIRECT only */
+      if ( n )
       {
         /* flush the span buffer and reset the count */
-        ras.render_span( y, ras.num_spans, ras.spans, ras.render_span_data );
-        ras.num_spans = 0;
+        ras.render_span( y, n, span, ras.render_span_data );
+        n = 0;
       }
     }
   }
@@ -1604,7 +1882,7 @@ typedef ptrdiff_t  FT_PtrDist;
     }
 
     FT_TRACE5(( "FT_Outline_Decompose: Done\n", n ));
-    return 0;
+    return Smooth_Err_Ok;
 
   Exit:
     FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error ));
@@ -1645,18 +1923,15 @@ typedef ptrdiff_t  FT_PtrDist;
       if ( continued )
         FT_Trace_Enable();
 
-      if ( !ras.invalid )
-        gray_record_cell( RAS_VAR );
-
-      FT_TRACE7(( "band [%d..%d]: %ld cell%s\n",
+      FT_TRACE7(( "band [%d..%d]: %ld cell%s remaining/\n",
                   ras.min_ey,
                   ras.max_ey,
-                  ras.num_cells,
-                  ras.num_cells == 1 ? "" : "s" ));
+                  ras.cell_null - ras.cell_free,
+                  ras.cell_null - ras.cell_free == 1 ? "" : "s" ));
     }
     else
     {
-      error = FT_THROW( Memory_Overflow );
+      error = FT_THROW( Raster_Overflow );
 
       FT_TRACE7(( "band [%d..%d]: to be bisected\n",
                   ras.min_ey, ras.max_ey ));
@@ -1682,7 +1957,16 @@ typedef ptrdiff_t  FT_PtrDist;
     int  continued = 0;
 
 
+    /* Initialize the null cell at the end of the poll. */
+    ras.cell_null        = buffer + FT_MAX_GRAY_POOL - 1;
+    ras.cell_null->x     = CELL_MAX_X_VALUE;
+    ras.cell_null->area  = 0;
+    ras.cell_null->cover = 0;
+    ras.cell_null->next  = NULL;
+
     /* set up vertical bands */
+    ras.ycells     = (PCell*)buffer;
+
     if ( height > n )
     {
       /* two divisions rounded up */
@@ -1690,13 +1974,6 @@ typedef ptrdiff_t  FT_PtrDist;
       height  = ( height + n - 1 ) / n;
     }
 
-    /* memory management */
-    n = ( height * sizeof ( PCell ) + sizeof ( TCell ) - 1 ) / sizeof ( TCell );
-
-    ras.cells     = buffer + n;
-    ras.max_cells = (FT_PtrDist)( FT_MAX_GRAY_POOL - n );
-    ras.ycells    = (PCell*)buffer;
-
     for ( y = yMin; y < yMax; )
     {
       ras.min_ey = y;
@@ -1710,27 +1987,37 @@ typedef ptrdiff_t  FT_PtrDist;
       do
       {
         TCoord  width = band[0] - band[1];
+        TCoord  w;
         int     error;
 
 
-        FT_MEM_ZERO( ras.ycells, height * sizeof ( PCell ) );
+        for ( w = 0; w < width; ++w )
+          ras.ycells[w] = ras.cell_null;
 
-        ras.num_cells = 0;
-        ras.invalid   = 1;
+        /* memory management: skip ycells */
+        n = ( (size_t)width * sizeof ( PCell ) + sizeof ( TCell ) - 1 ) /
+              sizeof ( TCell );
+
+        ras.cell_free = buffer + n;
+        ras.cell      = ras.cell_null;
         ras.min_ey    = band[1];
         ras.max_ey    = band[0];
+        ras.count_ey  = width;
 
         error     = gray_convert_glyph_inner( RAS_VAR, continued );
         continued = 1;
 
         if ( !error )
         {
-          gray_sweep( RAS_VAR );
+          if ( ras.render_span )  /* for FT_RASTER_FLAG_DIRECT only */
+            gray_sweep_direct( RAS_VAR );
+          else
+            gray_sweep( RAS_VAR );
           band--;
           continue;
         }
-        else if ( error != ErrRaster_Memory_Overflow )
-          return 1;
+        else if ( error != Smooth_Err_Raster_Overflow )
+          return error;
 
         /* render pool overflow; we will reduce the render band by half */
         width >>= 1;
@@ -1739,7 +2026,7 @@ typedef ptrdiff_t  FT_PtrDist;
         if ( width == 0 )
         {
           FT_TRACE7(( "gray_convert_glyph: rotten glyph\n" ));
-          return 1;
+          return FT_THROW( Raster_Overflow );
         }
 
         band++;
@@ -1748,7 +2035,7 @@ typedef ptrdiff_t  FT_PtrDist;
       } while ( band >= bands );
     }
 
-    return 0;
+    return Smooth_Err_Ok;
   }
 
 
@@ -1769,14 +2056,14 @@ typedef ptrdiff_t  FT_PtrDist;
 
     /* this version does not support monochrome rendering */
     if ( !( params->flags & FT_RASTER_FLAG_AA ) )
-      return FT_THROW( Invalid_Mode );
+      return FT_THROW( Cannot_Render_Glyph );
 
     if ( !outline )
       return FT_THROW( Invalid_Outline );
 
     /* return immediately if the outline is empty */
     if ( outline->n_points == 0 || outline->n_contours <= 0 )
-      return 0;
+      return Smooth_Err_Ok;
 
     if ( !outline->contours || !outline->points )
       return FT_THROW( Invalid_Outline );
@@ -1790,11 +2077,10 @@ typedef ptrdiff_t  FT_PtrDist;
     if ( params->flags & FT_RASTER_FLAG_DIRECT )
     {
       if ( !params->gray_spans )
-        return 0;
+        return Smooth_Err_Ok;
 
       ras.render_span      = (FT_Raster_Span_Func)params->gray_spans;
       ras.render_span_data = params->user;
-      ras.num_spans        = 0;
 
       ras.min_ex = params->clip_box.xMin;
       ras.min_ey = params->clip_box.yMin;
@@ -1809,7 +2095,7 @@ typedef ptrdiff_t  FT_PtrDist;
 
       /* nothing to do */
       if ( !target_map->width || !target_map->rows )
-        return 0;
+        return Smooth_Err_Ok;
 
       if ( !target_map->buffer )
         return FT_THROW( Invalid_Argument );
@@ -1824,7 +2110,6 @@ typedef ptrdiff_t  FT_PtrDist;
 
       ras.render_span      = (FT_Raster_Span_Func)NULL;
       ras.render_span_data = NULL;
-      ras.num_spans        = -1;  /* invalid */
 
       ras.min_ex = 0;
       ras.min_ey = 0;
@@ -1834,7 +2119,7 @@ typedef ptrdiff_t  FT_PtrDist;
 
     /* exit if nothing to do */
     if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey )
-      return 0;
+      return Smooth_Err_Ok;
 
     return gray_convert_glyph( RAS_VAR );
   }
@@ -1871,19 +2156,17 @@ typedef ptrdiff_t  FT_PtrDist;
 #else /* !STANDALONE_ */
 
   static int
-  gray_raster_new( FT_Memory   memory,
-                   FT_Raster*  araster )
+  gray_raster_new( FT_Memory      memory,
+                   gray_PRaster*  araster )
   {
     FT_Error      error;
     gray_PRaster  raster = NULL;
 
 
-    *araster = 0;
-    if ( !FT_ALLOC( raster, sizeof ( gray_TRaster ) ) )
-    {
+    if ( !FT_NEW( raster ) )
       raster->memory = memory;
-      *araster       = (FT_Raster)raster;
-    }
+
+    *araster = raster;
 
     return error;
   }
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.h b/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.h
index caba632833..13bf2baaa2 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.h
+++ b/qtbase/src/3rdparty/freetype/src/smooth/ftgrays.h
@@ -4,7 +4,7 @@
  *
  *   FreeType smooth renderer declaration
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/ftsmerrs.h b/qtbase/src/3rdparty/freetype/src/smooth/ftsmerrs.h
index e93f3df9b3..7bc6077988 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/ftsmerrs.h
+++ b/qtbase/src/3rdparty/freetype/src/smooth/ftsmerrs.h
@@ -4,7 +4,7 @@
  *
  *   smooth renderer error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.c b/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.c
index 5d66bd6fc4..df227c3758 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.c
+++ b/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.c
@@ -4,7 +4,7 @@
  *
  *   Anti-aliasing renderer interface (body).
  *
- * Copyright (C) 2000-2020 by
+ * Copyright (C) 2000-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.h b/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.h
index 22a88d54ec..87f09faea4 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.h
+++ b/qtbase/src/3rdparty/freetype/src/smooth/ftsmooth.h
@@ -4,7 +4,7 @@
  *
  *   Anti-aliasing renderer interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/module.mk b/qtbase/src/3rdparty/freetype/src/smooth/module.mk
index 9b1507f1e0..7623551327 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/smooth/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/rules.mk b/qtbase/src/3rdparty/freetype/src/smooth/rules.mk
index b08056fac5..d5109313f9 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/smooth/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/smooth/smooth.c b/qtbase/src/3rdparty/freetype/src/smooth/smooth.c
index 04b531c087..f341e8f252 100644
--- a/qtbase/src/3rdparty/freetype/src/smooth/smooth.c
+++ b/qtbase/src/3rdparty/freetype/src/smooth/smooth.c
@@ -4,7 +4,7 @@
  *
  *   FreeType anti-aliasing rasterer module component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/svg/ftsvg.c b/qtbase/src/3rdparty/freetype/src/svg/ftsvg.c
new file mode 100644
index 0000000000..55c50718f3
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/svg/ftsvg.c
@@ -0,0 +1,350 @@
+/****************************************************************************
+ *
+ * ftsvg.c
+ *
+ *   The FreeType SVG renderer interface (body).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#include <freetype/internal/ftdebug.h>
+#include <freetype/internal/ftserv.h>
+#include <freetype/internal/services/svprop.h>
+#include <freetype/otsvg.h>
+#include <freetype/internal/svginterface.h>
+#include <freetype/ftbbox.h>
+
+#include "ftsvg.h"
+#include "svgtypes.h"
+
+
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, usued to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  otsvg
+
+
+#ifdef FT_CONFIG_OPTION_SVG
+
+  /* ft_svg_init */
+  static FT_Error
+  ft_svg_init( SVG_Renderer  svg_module )
+  {
+    FT_Error  error = FT_Err_Ok;
+
+
+    svg_module->loaded    = FALSE;
+    svg_module->hooks_set = FALSE;
+
+    return error;
+  }
+
+
+  static void
+  ft_svg_done( SVG_Renderer  svg_module )
+  {
+    if ( svg_module->loaded    == TRUE &&
+         svg_module->hooks_set == TRUE )
+      svg_module->hooks.free_svg( &svg_module->state );
+
+    svg_module->loaded = FALSE;
+  }
+
+
+  static FT_Error
+  ft_svg_preset_slot( FT_Module     module,
+                      FT_GlyphSlot  slot,
+                      FT_Bool       cache )
+  {
+    SVG_Renderer       svg_renderer = (SVG_Renderer)module;
+    SVG_RendererHooks  hooks        = svg_renderer->hooks;
+
+
+    if ( svg_renderer->hooks_set == FALSE )
+    {
+      FT_TRACE1(( "Hooks are NOT set.  Can't render OT-SVG glyphs\n" ));
+      return FT_THROW( Missing_SVG_Hooks );
+    }
+
+    if ( svg_renderer->loaded == FALSE )
+    {
+      FT_TRACE3(( "ft_svg_preset_slot: first presetting call,"
+                  " calling init hook\n" ));
+      hooks.init_svg( &svg_renderer->state );
+
+      svg_renderer->loaded = TRUE;
+    }
+
+    return hooks.preset_slot( slot, cache, &svg_renderer->state );
+  }
+
+
+  static FT_Error
+  ft_svg_render( FT_Renderer       renderer,
+                 FT_GlyphSlot      slot,
+                 FT_Render_Mode    mode,
+                 const FT_Vector*  origin )
+  {
+    SVG_Renderer  svg_renderer = (SVG_Renderer)renderer;
+
+    FT_Library  library = renderer->root.library;
+    FT_Memory   memory  = library->memory;
+    FT_Error    error;
+
+    FT_ULong  size_image_buffer;
+
+    SVG_RendererHooks  hooks = svg_renderer->hooks;
+
+
+    FT_UNUSED( mode );
+    FT_UNUSED( origin );
+
+    if ( mode != FT_RENDER_MODE_NORMAL )
+      return FT_THROW( Bad_Argument );
+
+    if ( svg_renderer->hooks_set == FALSE )
+    {
+      FT_TRACE1(( "Hooks are NOT set.  Can't render OT-SVG glyphs\n" ));
+      return FT_THROW( Missing_SVG_Hooks );
+    }
+
+    if ( svg_renderer->loaded == FALSE )
+    {
+      FT_TRACE3(( "ft_svg_render: first rendering, calling init hook\n" ));
+      error = hooks.init_svg( &svg_renderer->state );
+
+      svg_renderer->loaded = TRUE;
+    }
+
+    ft_svg_preset_slot( (FT_Module)renderer, slot, TRUE );
+
+    size_image_buffer = (FT_ULong)slot->bitmap.pitch * slot->bitmap.rows;
+    /* No `FT_QALLOC` here since we need a clean, empty canvas */
+    /* to start with.                                          */
+    if ( FT_ALLOC( slot->bitmap.buffer, size_image_buffer ) )
+      return error;
+
+    error = hooks.render_svg( slot, &svg_renderer->state );
+    if ( error )
+      FT_FREE( slot->bitmap.buffer );
+    else
+      slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
+
+    return error;
+  }
+
+
+  static const SVG_Interface  svg_interface =
+  {
+    (Preset_Bitmap_Func)ft_svg_preset_slot
+  };
+
+
+  static FT_Error
+  ft_svg_property_set( FT_Module    module,
+                       const char*  property_name,
+                       const void*  value,
+                       FT_Bool      value_is_string )
+  {
+    FT_Error      error    = FT_Err_Ok;
+    SVG_Renderer  renderer = (SVG_Renderer)module;
+
+
+    if ( !ft_strcmp( property_name, "svg-hooks" ) )
+    {
+      SVG_RendererHooks*  hooks;
+
+
+      if ( value_is_string == TRUE )
+      {
+        error = FT_THROW( Invalid_Argument );
+        goto Exit;
+      }
+
+      hooks = (SVG_RendererHooks*)value;
+
+      if ( !hooks->init_svg    ||
+           !hooks->free_svg    ||
+           !hooks->render_svg  ||
+           !hooks->preset_slot )
+      {
+        FT_TRACE0(( "ft_svg_property_set:"
+                    " SVG rendering hooks not set because\n" ));
+        FT_TRACE0(( "                    "
+                    " at least one function pointer is NULL\n" ));
+
+        error = FT_THROW( Invalid_Argument );
+        goto Exit;
+      }
+
+      renderer->hooks     = *hooks;
+      renderer->hooks_set = TRUE;
+    }
+    else
+      error = FT_THROW( Missing_Property );
+
+  Exit:
+    return error;
+  }
+
+
+  static FT_Error
+  ft_svg_property_get( FT_Module    module,
+                       const char*  property_name,
+                       const void*  value )
+  {
+    FT_Error      error    = FT_Err_Ok;
+    SVG_Renderer  renderer = (SVG_Renderer)module;
+
+
+    if ( !ft_strcmp( property_name, "svg-hooks" ) )
+    {
+      SVG_RendererHooks*  hooks = (SVG_RendererHooks*)value;
+
+
+      *hooks = renderer->hooks;
+    }
+    else
+      error = FT_THROW( Missing_Property );
+
+    return error;
+  }
+
+
+  FT_DEFINE_SERVICE_PROPERTIESREC(
+    ft_svg_service_properties,
+
+    (FT_Properties_SetFunc)ft_svg_property_set, /* set_property */
+    (FT_Properties_GetFunc)ft_svg_property_get  /* get_property */
+  )
+
+
+  FT_DEFINE_SERVICEDESCREC1(
+    ft_svg_services,
+    FT_SERVICE_ID_PROPERTIES, &ft_svg_service_properties )
+
+
+  FT_CALLBACK_DEF( FT_Module_Interface )
+  ft_svg_get_interface( FT_Module    module,
+                        const char*  ft_svg_interface )
+  {
+    FT_Module_Interface  result;
+
+
+    FT_UNUSED( module );
+
+    result = ft_service_list_lookup( ft_svg_services, ft_svg_interface );
+    if ( result )
+      return result;
+
+    return 0;
+  }
+
+
+  static FT_Error
+  ft_svg_transform( FT_Renderer       renderer,
+                    FT_GlyphSlot      slot,
+                    const FT_Matrix*  _matrix,
+                    const FT_Vector*  _delta )
+  {
+    FT_SVG_Document  doc    = (FT_SVG_Document)slot->other;
+    FT_Matrix*       matrix = (FT_Matrix*)_matrix;
+    FT_Vector*       delta  = (FT_Vector*)_delta;
+
+    FT_Matrix  tmp_matrix;
+    FT_Vector  tmp_delta;
+
+    FT_Matrix  a, b;
+    FT_Pos     x, y;
+
+
+    FT_UNUSED( renderer );
+
+    if ( !matrix )
+    {
+      tmp_matrix.xx = 0x10000;
+      tmp_matrix.xy = 0;
+      tmp_matrix.yx = 0;
+      tmp_matrix.yy = 0x10000;
+
+      matrix = &tmp_matrix;
+    }
+
+    if ( !delta )
+    {
+      tmp_delta.x = 0;
+      tmp_delta.y = 0;
+
+      delta = &tmp_delta;
+    }
+
+    a = doc->transform;
+    b = *matrix;
+    FT_Matrix_Multiply( &b, &a );
+
+
+    x = ADD_LONG( ADD_LONG( FT_MulFix( matrix->xx, doc->delta.x ),
+                            FT_MulFix( matrix->xy, doc->delta.y ) ),
+                  delta->x );
+    y = ADD_LONG( ADD_LONG( FT_MulFix( matrix->yx, doc->delta.x ),
+                            FT_MulFix( matrix->yy, doc->delta.y ) ),
+                  delta->y );
+
+    doc->delta.x   = x;
+    doc->delta.y   = y;
+    doc->transform = a;
+
+    return FT_Err_Ok;
+  }
+
+#endif /* FT_CONFIG_OPTION_SVG */
+
+
+#ifdef FT_CONFIG_OPTION_SVG
+#define PUT_SVG_MODULE( a )  a
+#define SVG_GLYPH_FORMAT     FT_GLYPH_FORMAT_SVG
+#else
+#define PUT_SVG_MODULE( a )  NULL
+#define SVG_GLYPH_FORMAT     FT_GLYPH_FORMAT_NONE
+#endif
+
+
+  FT_DEFINE_RENDERER(
+    ft_svg_renderer_class,
+
+      FT_MODULE_RENDERER,
+      sizeof ( SVG_RendererRec ),
+
+      "ot-svg",
+      0x10000L,
+      0x20000L,
+
+      (const void*)PUT_SVG_MODULE( &svg_interface ), /* module specific interface */
+
+      (FT_Module_Constructor)PUT_SVG_MODULE( ft_svg_init ), /* module_init   */
+      (FT_Module_Destructor)PUT_SVG_MODULE( ft_svg_done ),  /* module_done   */
+      PUT_SVG_MODULE( ft_svg_get_interface ),               /* get_interface */
+
+      SVG_GLYPH_FORMAT,
+
+      (FT_Renderer_RenderFunc)   PUT_SVG_MODULE( ft_svg_render ),    /* render_glyph    */
+      (FT_Renderer_TransformFunc)PUT_SVG_MODULE( ft_svg_transform ), /* transform_glyph */
+      NULL,                                                          /* get_glyph_cbox  */
+      NULL,                                                          /* set_mode        */
+      NULL                                                           /* raster_class    */
+  )
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/svg/ftsvg.h b/qtbase/src/3rdparty/freetype/src/svg/ftsvg.h
new file mode 100644
index 0000000000..73514b8cf3
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/svg/ftsvg.h
@@ -0,0 +1,35 @@
+/****************************************************************************
+ *
+ * ftsvg.h
+ *
+ *   The FreeType SVG renderer interface (specification).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#ifndef FTSVG_H_
+#define FTSVG_H_
+
+#include <ft2build.h>
+#include <freetype/ftrender.h>
+#include <freetype/internal/ftobjs.h>
+
+
+FT_BEGIN_HEADER
+
+  FT_DECLARE_RENDERER( ft_svg_renderer_class )
+
+FT_END_HEADER
+
+#endif /* FTSVG_H_ */
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/svg/module.mk b/qtbase/src/3rdparty/freetype/src/svg/module.mk
new file mode 100644
index 0000000000..30c3525747
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/svg/module.mk
@@ -0,0 +1,23 @@
+#
+# FreeType 2 SVG renderer module definition
+#
+
+
+# Copyright (C) 2022 by
+# David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+FTMODULE_H_COMMANDS += SVG_MODULE
+
+define SVG_MODULE
+$(OPEN_DRIVER) FT_Renderer_Class, ft_svg_renderer_class $(CLOSE_DRIVER)
+$(ECHO_DRIVER)ot-svg    $(ECHO_DRIVER_DESC)OT-SVG glyph renderer module$(ECHO_DRIVER_DONE)
+endef
+
+# EOF
diff --git a/qtbase/src/3rdparty/freetype/src/svg/rules.mk b/qtbase/src/3rdparty/freetype/src/svg/rules.mk
new file mode 100644
index 0000000000..9c53128c4a
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/svg/rules.mk
@@ -0,0 +1,70 @@
+#
+# FreeType 2 SVG renderer module build rules
+#
+
+
+# Copyright (C) 2022 by
+# David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# SVG renderer driver directory
+#
+SVG_DIR := $(SRC_DIR)/svg
+
+# compilation flags for the driver
+#
+SVG_COMPILE := $(CC) $(ANSIFLAGS)                            \
+                     $I$(subst /,$(COMPILER_SEP),$(SVG_DIR)) \
+                     $(INCLUDE_FLAGS)                        \
+                     $(FT_CFLAGS)
+
+# SVG renderer sources (i.e., C files)
+#
+SVG_DRV_SRC := $(SVG_DIR)/ftsvg.c
+
+
+# SVG renderer headers
+#
+SVG_DRV_H := $(SVG_DIR)/ftsvg.h    \
+             $(SVG_DIR)/svgtypes.h
+
+
+# SVG renderer object(s)
+#
+#   SVG_DRV_OBJ_M is used during `multi' builds.
+#   SVG_DRV_OBJ_S is used during `single' builds.
+#
+SVG_DRV_OBJ_M := $(SVG_DRV_SRC:$(SVG_DIR)/%.c=$(OBJ_DIR)/%.$O)
+SVG_DRV_OBJ_S := $(OBJ_DIR)/svg.$O
+
+# SVG renderer source file for single build
+#
+SVG_DRV_SRC_S := $(SVG_DIR)/svg.c
+
+
+# SVG renderer - single object
+#
+$(SVG_DRV_OBJ_S): $(SVG_DRV_SRC_S) $(SVG_DRV_SRC) \
+                  $(FREETYPE_H) $(SVG_DRV_H)
+	$(SVG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SVG_DRV_SRC_S))
+
+
+# SVG renderer - multiple objects
+#
+$(OBJ_DIR)/%.$O: $(SVG_DIR)/%.c $(FREETYPE_H) $(SVG_DRV_H)
+	$(SVG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# update main driver object lists
+#
+DRV_OBJS_S += $(SVG_DRV_OBJ_S)
+DRV_OBJS_M += $(SVG_DRV_OBJ_M)
+
+
+# EOF
diff --git a/qtbase/src/3rdparty/freetype/src/svg/svg.c b/qtbase/src/3rdparty/freetype/src/svg/svg.c
new file mode 100644
index 0000000000..b7e62a418c
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/svg/svg.c
@@ -0,0 +1,24 @@
+/****************************************************************************
+ *
+ * svg.c
+ *
+ *   FreeType SVG renderer module component (body only).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#define FT_MAKE_OPTION_SINGLE_OBJECT
+
+#include "svgtypes.h"
+#include "ftsvg.c"
+
+
+/* END */
diff --git a/qtbase/src/3rdparty/freetype/src/svg/svgtypes.h b/qtbase/src/3rdparty/freetype/src/svg/svgtypes.h
new file mode 100644
index 0000000000..34fce47a34
--- /dev/null
+++ b/qtbase/src/3rdparty/freetype/src/svg/svgtypes.h
@@ -0,0 +1,42 @@
+/****************************************************************************
+ *
+ * svgtypes.h
+ *
+ *   The FreeType SVG renderer internal types (specification).
+ *
+ * Copyright (C) 2022 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+#ifndef SVGTYPES_H_
+#define SVGTYPES_H_
+
+#include <ft2build.h>
+#include <freetype/internal/ftobjs.h>
+#include <freetype/ftrender.h>
+#include <freetype/otsvg.h>
+
+
+  typedef struct SVG_RendererRec_
+  {
+    FT_RendererRec     root;   /* this inherits FT_RendererRec                */
+    FT_Bool            loaded;
+    FT_Bool            hooks_set;
+    SVG_RendererHooks  hooks;  /* this holds hooks for SVG rendering          */
+    FT_Pointer         state;  /* a place for hooks to store state, if needed */
+
+  } SVG_RendererRec;
+
+  typedef struct SVG_RendererRec_*  SVG_Renderer;
+
+#endif /* SVGTYPES_H_ */
+
+
+/* EOF */
diff --git a/qtbase/src/3rdparty/freetype/src/tools/afblue.pl b/qtbase/src/3rdparty/freetype/src/tools/afblue.pl
index bbc4f472c9..f4f3845e7a 100644
--- a/qtbase/src/3rdparty/freetype/src/tools/afblue.pl
+++ b/qtbase/src/3rdparty/freetype/src/tools/afblue.pl
@@ -5,7 +5,7 @@
 #
 # Process a blue zone character data file.
 #
-# Copyright (C) 2013-2020 by
+# Copyright (C) 2013-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/tools/apinames.c b/qtbase/src/3rdparty/freetype/src/tools/apinames.c
index aeecf88d22..8a8b0822b1 100644
--- a/qtbase/src/3rdparty/freetype/src/tools/apinames.c
+++ b/qtbase/src/3rdparty/freetype/src/tools/apinames.c
@@ -22,7 +22,7 @@
 #include <ctype.h>
 
 #define  PROGRAM_NAME     "apinames"
-#define  PROGRAM_VERSION  "0.3"
+#define  PROGRAM_VERSION  "0.4"
 
 #define  LINEBUFF_SIZE  1024
 
@@ -33,6 +33,7 @@ typedef enum  OutputFormat_
   OUTPUT_WINDOWS_DEF,   /* output a Windows .DEF file for Visual C++ or Mingw */
   OUTPUT_BORLAND_DEF,   /* output a Windows .DEF file for Borland C++         */
   OUTPUT_WATCOM_LBC,    /* output a Watcom Linker Command File                */
+  OUTPUT_VMS_OPT,       /* output an OpenVMS Linker Option File               */
   OUTPUT_NETWARE_IMP,   /* output a NetWare ImportFile                        */
   OUTPUT_GNU_VERMAP     /* output a version map for GNU or Solaris linker     */
 
@@ -167,7 +168,6 @@ names_dump( FILE*         out,
   case OUTPUT_WATCOM_LBC:
     {
       const char*  dot;
-      char         temp[512];
 
 
       if ( !dll_name )
@@ -181,7 +181,8 @@ names_dump( FILE*         out,
       dot = strchr( dll_name, '.' );
       if ( dot )
       {
-        int  len = dot - dll_name;
+        char  temp[512];
+        int   len = dot - dll_name;
 
 
         if ( len > (int)( sizeof ( temp ) - 1 ) )
@@ -200,6 +201,16 @@ names_dump( FILE*         out,
 
     break;
 
+  case OUTPUT_VMS_OPT:
+    fprintf( out, "GSMATCH=LEQUAL,2,0\n"
+                  "CASE_SENSITIVE=YES\n"
+                  "SYMBOL_VECTOR=(-\n" );
+    for ( nn = 0; nn < num_names - 1; nn++ )
+      fprintf( out, "    %s=PROCEDURE,-\n", the_names[nn].name );
+    fprintf( out, "    %s=PROCEDURE)\n", the_names[num_names - 1].name );
+
+    break;
+
   case OUTPUT_NETWARE_IMP:
     if ( dll_name )
       fprintf( out, "  (%s)\n", dll_name );
@@ -352,6 +363,7 @@ usage( void )
     "           -w      output .DEF file for Visual C++ and Mingw\n"
     "           -wB     output .DEF file for Borland C++\n"
     "           -wW     output Watcom Linker Response File\n"
+    "           -wV     output OpenVMS Linker Options File\n"
     "           -wN     output NetWare Import File\n"
     "           -wL     output version map for GNU or Solaris linker\n"
     "\n";
@@ -445,6 +457,10 @@ main( int                 argc,
         format = OUTPUT_WATCOM_LBC;
         break;
 
+      case 'V':
+        format = OUTPUT_VMS_OPT;
+        break;
+
       case 'N':
         format = OUTPUT_NETWARE_IMP;
         break;
diff --git a/qtbase/src/3rdparty/freetype/src/tools/chktrcmp.py b/qtbase/src/3rdparty/freetype/src/tools/chktrcmp.py
index 4c40bdafdb..244a24a6c3 100755
--- a/qtbase/src/3rdparty/freetype/src/tools/chktrcmp.py
+++ b/qtbase/src/3rdparty/freetype/src/tools/chktrcmp.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #
 # Check trace components in FreeType 2 source.
-# Author: suzuki toshiya, 2009, 2013
+# Author: suzuki toshiya, 2009, 2013, 2020
 #
 # This code is explicitly into the public domain.
 
@@ -50,7 +50,7 @@ for i in range( 1, len( sys.argv ) ):
 #
 
 c_pathname_pat = re.compile( '^.*\.[ch]$', re.IGNORECASE )
-trace_use_pat  = re.compile( '^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+trace_' )
+trace_use_pat  = re.compile( '^[ \t]*#define[ \t]+FT_COMPONENT[ \t]+' )
 
 for d in SRC_FILE_DIRS:
   for ( p, dlst, flst ) in os.walk( d ):
diff --git a/qtbase/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c b/qtbase/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c
index ab62429787..4f912cd21d 100644
--- a/qtbase/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c
+++ b/qtbase/src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c
@@ -29,7 +29,7 @@
 /* This file is now part of the FreeType library */
 
 
-#define _XOPEN_SOURCE 500 /* for `kill', `strdup', `random', and `srandom' */
+#define _XOPEN_SOURCE 600 /* for `kill', `strdup', `random', and `srandom' */
 
 
 #include <stdio.h>
diff --git a/qtbase/src/3rdparty/freetype/src/tools/glnames.py b/qtbase/src/3rdparty/freetype/src/tools/glnames.py
index a19ce178b8..ad7786d291 100644
--- a/qtbase/src/3rdparty/freetype/src/tools/glnames.py
+++ b/qtbase/src/3rdparty/freetype/src/tools/glnames.py
@@ -6,7 +6,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/tools/no-copyright b/qtbase/src/3rdparty/freetype/src/tools/no-copyright
index d639aa4a84..1eaa630967 100644
--- a/qtbase/src/3rdparty/freetype/src/tools/no-copyright
+++ b/qtbase/src/3rdparty/freetype/src/tools/no-copyright
@@ -7,8 +7,6 @@
 #
 # Don't put empty lines into this file!
 #
-.gitignore
-#
 builds/unix/pkg.m4
 #
 docs/FTL.TXT
@@ -62,4 +60,6 @@ src/gzip/zutil.h
 src/tools/apinames.c
 src/tools/ftrandom/ftrandom.c
 #
+subprojects/dlg
+#
 # EOF
diff --git a/qtbase/src/3rdparty/freetype/src/tools/update-copyright-year b/qtbase/src/3rdparty/freetype/src/tools/update-copyright-year
index c659bbafb8..f699db76e9 100755
--- a/qtbase/src/3rdparty/freetype/src/tools/update-copyright-year
+++ b/qtbase/src/3rdparty/freetype/src/tools/update-copyright-year
@@ -2,7 +2,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
   & eval 'exec perl -wS -i "$0" $argv:q'
     if 0;
 
-# Copyright (C) 2015-2020 by
+# Copyright (C) 2015-2022 by
 # Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -28,20 +28,20 @@ eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
 #
 # or
 #
-#   /* Copyright 2000,  2001, 2004-2007 by    */
-#   /* foobar                                 */
+#   /* Copyright (c) 2000,  2001, 2004-2007 by    */
+#   /* foobar                                     */
 #
 # and replaces them uniformly with
 #
-#   Copyright 2000-2015
+#   Copyright (C) 2000-2021
 #   foobar
 #
 # and
 #
-#   /* Copyright 2000-2015 by                 */
-#   /* foobar                                 */
+#   /* Copyright (C) 2000-2021 by                 */
+#   /* foobar                                     */
 #
-# (assuming that the current year is 2015).  As can be seen, the line length
+# (assuming that the current year is 2021).  As can be seen, the line length
 # is retained if there is non-whitespace after the word `by' on the same
 # line.
 
@@ -80,11 +80,11 @@ while (<>)
       {
         # Fill line to the same length (if appropriate); we skip the middle
         # part but insert `(C)', three spaces, and `-'.
-        my $space = length($+{space1}) - 1
-                    + length($+{middle}) - 1
-                    + length($+{space2}) - 1
+        my $space = length($+{space1})
+                    + length($+{middle})
+                    + length($+{space2})
                     + length($+{space3})
-                    - (length("(C)") + 1);
+                    - (length("(C)") + 3 + 1);
 
         print "$+{begin}";
         print "Copyright\ (C)\ $+{first}-$year\ by";
@@ -106,19 +106,38 @@ while (<>)
         (?<end>.*)
       }
       {
-        # Fill line to the same length (if appropriate); we insert three
-        # spaces, a `-', and the current year.
-        my $space = length($+{space1}) - 1
-                    + length($+{space2}) - 1
-                    + length($+{space3})
-                    - (length($year) + 1);
+        if ($+{first} < $year)
+        {
+          # Fill line to the same length (if appropriate); we insert three
+          # spaces, the string `(C)', a `-', and the current year.
+          my $space = length($+{space1})
+                      + length($+{space2})
+                      + length($+{space3})
+                      - (length($year) + length("(C)") + 3 + 1);
 
-        print "$+{begin}";
-        print "Copyright\ (C)\ $+{first}-$year\ by";
-        # If $space is negative this inserts nothing.
-        print ' ' x $space if length($+{end});
-        print "$+{end}\n";
-        $replaced = 1;
+          print "$+{begin}";
+          print "Copyright\ (C)\ $+{first}-$year\ by";
+          # If $space is negative this inserts nothing.
+          print ' ' x $space if length($+{end});
+          print "$+{end}\n";
+          $replaced = 1;
+        }
+        else
+        {
+          # Fill line to the same length (if appropriate); we insert three
+          # spaces and the string `(C)'.
+          my $space = length($+{space1})
+                      + length($+{space2})
+                      + length($+{space3})
+                      - (length("(C)") + 3);
+
+          print "$+{begin}";
+          print "Copyright\ (C)\ $+{first}\ by";
+          # If $space is negative this inserts nothing.
+          print ' ' x $space if length($+{end});
+          print "$+{end}\n";
+          $replaced = 1;
+        }
       }ex
     ||
     # Otherwise print line unaltered.
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/module.mk b/qtbase/src/3rdparty/freetype/src/truetype/module.mk
index 2d8d39d1f7..f6e1c91a5d 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/truetype/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/rules.mk b/qtbase/src/3rdparty/freetype/src/truetype/rules.mk
index 2f6fecfc44..d0d2404b8f 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/truetype/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/truetype.c b/qtbase/src/3rdparty/freetype/src/truetype/truetype.c
index 41b6808a84..41c844acbb 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/truetype.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/truetype.c
@@ -4,7 +4,7 @@
  *
  *   FreeType TrueType driver component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.c b/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.c
index bf830b1418..245d97cb58 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.c
@@ -4,7 +4,7 @@
  *
  *   TrueType font driver implementation (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -108,7 +108,7 @@
       return error;
     }
 
-    FT_TRACE0(( "tt_property_set: missing property `%s'\n",
+    FT_TRACE2(( "tt_property_set: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
@@ -135,7 +135,7 @@
       return error;
     }
 
-    FT_TRACE0(( "tt_property_get: missing property `%s'\n",
+    FT_TRACE2(( "tt_property_get: missing property `%s'\n",
                 property_name ));
     return FT_THROW( Missing_Property );
   }
@@ -354,7 +354,16 @@
 
 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
 
-    FT_Request_Metrics( size->face, req );
+    {
+      FT_Error  err = FT_Request_Metrics( size->face, req );
+
+
+      if ( err )
+      {
+        error = err;
+        goto Exit;
+      }
+    }
 
     if ( FT_IS_SCALABLE( size->face ) )
     {
@@ -382,6 +391,7 @@
 #endif
     }
 
+  Exit:
     return error;
   }
 
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.h b/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.h
index ee1438eb6e..c477c0b1dd 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttdriver.h
@@ -4,7 +4,7 @@
  *
  *   High-level TrueType driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/tterrors.h b/qtbase/src/3rdparty/freetype/src/truetype/tterrors.h
index efeafd3a1b..2c95ea17b2 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/tterrors.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/tterrors.h
@@ -4,7 +4,7 @@
  *
  *   TrueType error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttgload.c b/qtbase/src/3rdparty/freetype/src/truetype/ttgload.c
index 1dd319dcbf..2ca63d65a3 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttgload.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttgload.c
@@ -4,7 +4,7 @@
  *
  *   TrueType Glyph Loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -197,10 +197,17 @@
     }
 #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
 
-    if ( !loader->linear_def )
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+    /* With the incremental interface, these values are set by  */
+    /* a call to `tt_get_metrics_incremental'.                  */
+    if ( face->root.internal->incremental_interface == NULL )
+#endif
     {
-      loader->linear_def = 1;
-      loader->linear     = advance_width;
+      if ( !loader->linear_def )
+      {
+        loader->linear_def = 1;
+        loader->linear     = advance_width;
+      }
     }
 
     return FT_Err_Ok;
@@ -210,8 +217,8 @@
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
 
   static void
-  tt_get_metrics_incr_overrides( TT_Loader  loader,
-                                 FT_UInt    glyph_index )
+  tt_get_metrics_incremental( TT_Loader  loader,
+                              FT_UInt    glyph_index )
   {
     TT_Face  face = loader->face;
 
@@ -451,7 +458,7 @@
                           (void*)&load->exec->glyphIns,
                           n_ins );
 
-      load->exec->glyphSize = (FT_UShort)tmp;
+      load->exec->glyphSize = (FT_UInt)tmp;
       if ( error )
         return error;
 
@@ -736,12 +743,14 @@
                       subglyph->transform.xx / 65536.0,
                       subglyph->transform.yy / 65536.0 ));
         else if ( subglyph->flags & WE_HAVE_A_2X2 )
-          FT_TRACE7(( "      scaling: xx=%f, yx=%f\n"
-                      "               xy=%f, yy=%f\n",
+        {
+          FT_TRACE7(( "      scaling: xx=%f, yx=%f\n",
                       subglyph->transform.xx / 65536.0,
-                      subglyph->transform.yx / 65536.0,
+                      subglyph->transform.yx / 65536.0 ));
+          FT_TRACE7(( "               xy=%f, yy=%f\n",
                       subglyph->transform.xy / 65536.0,
                       subglyph->transform.yy / 65536.0 ));
+        }
 
         subglyph++;
       }
@@ -1095,8 +1104,8 @@
 
           for ( ; vec < limit; vec++, u++ )
           {
-            vec->x = ( FT_MulFix( u->x, x_scale ) + 32 ) >> 6;
-            vec->y = ( FT_MulFix( u->y, y_scale ) + 32 ) >> 6;
+            vec->x = ADD_LONG( FT_MulFix( u->x, x_scale ), 32 ) >> 6;
+            vec->y = ADD_LONG( FT_MulFix( u->y, y_scale ), 32 ) >> 6;
           }
         }
         else
@@ -1219,8 +1228,8 @@
       p1 = gloader->base.outline.points + k;
       p2 = gloader->base.outline.points + l;
 
-      x = p1->x - p2->x;
-      y = p1->y - p2->y;
+      x = SUB_LONG( p1->x, p2->x );
+      y = SUB_LONG( p1->y, p2->y );
     }
     else
     {
@@ -1383,7 +1392,7 @@
            FT_READ_USHORT( n_ins )           )
         return error;
 
-      FT_TRACE5(( "  Instructions size = %d\n", n_ins ));
+      FT_TRACE5(( "  Instructions size = %hu\n", n_ins ));
 
       /* check it */
       max_ins = loader->face->max_profile.maxSizeOfInstructions;
@@ -1391,10 +1400,10 @@
       {
         /* don't trust `maxSizeOfInstructions'; */
         /* only do a rough safety check         */
-        if ( (FT_Int)n_ins > loader->byte_len )
+        if ( n_ins > loader->byte_len )
         {
           FT_TRACE1(( "TT_Process_Composite_Glyph:"
-                      " too many instructions (%d) for glyph with length %d\n",
+                      " too many instructions (%hu) for glyph with length %u\n",
                       n_ins, loader->byte_len ));
           return FT_THROW( Too_Many_Hints );
         }
@@ -1677,7 +1686,7 @@
       FT_ZERO( &inc_stream );
       FT_Stream_OpenMemory( &inc_stream,
                             glyph_data.pointer,
-                            (FT_ULong)glyph_data.length );
+                            glyph_data.length );
 
       loader->stream = &inc_stream;
     }
@@ -1685,8 +1694,7 @@
 
 #endif /* FT_CONFIG_OPTION_INCREMENTAL */
 
-      offset = tt_face_get_location( face, glyph_index,
-                                     (FT_UInt*)&loader->byte_len );
+      offset = tt_face_get_location( face, glyph_index, &loader->byte_len );
 
     if ( loader->byte_len > 0 )
     {
@@ -1705,7 +1713,7 @@
 
       error = face->access_glyph_frame( loader, glyph_index,
                                         face->glyf_offset + offset,
-                                        (FT_UInt)loader->byte_len );
+                                        loader->byte_len );
       if ( error )
         goto Exit;
 
@@ -1739,13 +1747,11 @@
 
     if ( loader->byte_len == 0 || loader->n_contours == 0 )
     {
-      /* must initialize points before (possibly) overriding */
-      /* glyph metrics from the incremental interface        */
-      tt_loader_set_pp( loader );
-
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
-      tt_get_metrics_incr_overrides( loader, glyph_index );
+      tt_get_metrics_incremental( loader, glyph_index );
 #endif
+      tt_loader_set_pp( loader );
+
 
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
 
@@ -1828,13 +1834,11 @@
       goto Exit;
     }
 
-    /* must initialize phantom points before (possibly) overriding */
-    /* glyph metrics from the incremental interface                */
-    tt_loader_set_pp( loader );
-
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
-    tt_get_metrics_incr_overrides( loader, glyph_index );
+    tt_get_metrics_incremental( loader, glyph_index );
 #endif
+    tt_loader_set_pp( loader );
+
 
     /***********************************************************************/
     /***********************************************************************/
@@ -1844,7 +1848,7 @@
     /* (which consists of 10 bytes)                            */
     error = face->access_glyph_frame( loader, glyph_index,
                                       face->glyf_offset + offset + 10,
-                                      (FT_UInt)loader->byte_len - 10 );
+                                      loader->byte_len - 10 );
     if ( error )
       goto Exit;
 
@@ -1898,7 +1902,7 @@
       /* clear the nodes filled by sibling chains */
       node = ft_list_get_node_at( &loader->composites, recurse_count );
       for ( node2 = node; node2; node2 = node2->next )
-        node2->data = (void*)FT_ULONG_MAX;
+        node2->data = (void*)-1;
 
       /* check whether we already have a composite glyph with this index */
       if ( FT_List_Find( &loader->composites,
@@ -1915,7 +1919,7 @@
 
       else
       {
-        if ( FT_NEW( node ) )
+        if ( FT_QNEW( node ) )
           goto Exit;
         node->data = FT_UINT_TO_POINTER( glyph_index );
         FT_List_Add( &loader->composites, node );
@@ -2100,7 +2104,7 @@
         FT_UInt      num_base_subgs = gloader->base.num_subglyphs;
 
         FT_Stream    old_stream     = loader->stream;
-        FT_Int       old_byte_len   = loader->byte_len;
+        FT_UInt      old_byte_len   = loader->byte_len;
 
 
         FT_GlyphLoader_Add( gloader );
@@ -2226,10 +2230,6 @@
                          FT_UInt    glyph_index )
   {
     TT_Face    face   = loader->face;
-#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
-    defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-    TT_Driver  driver = (TT_Driver)FT_FACE_DRIVER( face );
-#endif
 
     FT_BBox       bbox;
     FT_Fixed      y_scale;
@@ -2252,53 +2252,10 @@
 
     glyph->metrics.horiBearingX = bbox.xMin;
     glyph->metrics.horiBearingY = bbox.yMax;
-    glyph->metrics.horiAdvance  = SUB_LONG(loader->pp2.x, loader->pp1.x);
-
-    /* Adjust advance width to the value contained in the hdmx table   */
-    /* unless FT_LOAD_COMPUTE_METRICS is set or backward compatibility */
-    /* mode of the v40 interpreter is active.  See `ttinterp.h' for    */
-    /* details on backward compatibility mode.                         */
-    if (
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-         !( driver->interpreter_version == TT_INTERPRETER_VERSION_40  &&
-            ( loader->exec && loader->exec->backward_compatibility  ) ) &&
-#endif
-         !face->postscript.isFixedPitch                                 &&
-         IS_HINTED( loader->load_flags )                                &&
-         !( loader->load_flags & FT_LOAD_COMPUTE_METRICS )              )
-    {
-      FT_Byte*  widthp;
-
-
-      widthp = tt_face_get_device_metrics( face,
-                                           size->metrics->x_ppem,
-                                           glyph_index );
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-
-      if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
-      {
-        FT_Bool  ignore_x_mode;
-
-
-        ignore_x_mode = FT_BOOL( FT_LOAD_TARGET_MODE( loader->load_flags ) !=
-                                 FT_RENDER_MODE_MONO );
-
-        if ( widthp                                                   &&
-             ( ( ignore_x_mode && loader->exec->compatible_widths ) ||
-                !ignore_x_mode                                      ||
-                SPH_OPTION_BITMAP_WIDTHS                            ) )
-          glyph->metrics.horiAdvance = *widthp * 64;
-      }
-      else
-
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-      {
-        if ( widthp )
-          glyph->metrics.horiAdvance = *widthp * 64;
-      }
-    }
+    if ( loader->widthp )
+      glyph->metrics.horiAdvance = loader->widthp[glyph_index] * 64;
+    else
+      glyph->metrics.horiAdvance = SUB_LONG( loader->pp2.x, loader->pp1.x );
 
     /* set glyph dimensions */
     glyph->metrics.width  = SUB_LONG( bbox.xMax, bbox.xMin );
@@ -2713,6 +2670,9 @@
         error = tt_size_run_prep( size, pedantic );
         if ( error )
           return error;
+        error = TT_Load_Context( exec, face, size );
+        if ( error )
+          return error;
       }
 
       /* check whether the cvt program has disabled hinting */
@@ -2728,12 +2688,58 @@
       /* note that this flag can also be modified in a glyph's bytecode */
       if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 &&
            exec->GS.instruct_control & 4                            )
-        exec->ignore_x_mode = 0;
-#endif
+        exec->ignore_x_mode = FALSE;
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+      /*
+       * Toggle backward compatibility according to what font wants, except
+       * when
+       *
+       * 1) we have a `tricky' font that heavily relies on the interpreter to
+       *    render glyphs correctly, for example DFKai-SB, or
+       * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested.
+       *
+       * In those cases, backward compatibility needs to be turned off to get
+       * correct rendering.  The rendering is then completely up to the
+       * font's programming.
+       *
+       */
+      if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 &&
+           subpixel_hinting_lean                                    &&
+           !FT_IS_TRICKY( glyph->face )                             )
+        exec->backward_compatibility = !( exec->GS.instruct_control & 4 );
+      else
+        exec->backward_compatibility = FALSE;
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL */
 
       exec->pedantic_hinting = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
       loader->exec = exec;
       loader->instructions = exec->glyphIns;
+
+      /* Use the hdmx table if any unless FT_LOAD_COMPUTE_METRICS */
+      /* is set or backward compatibility mode of the v38 or v40  */
+      /* interpreters is active.  See `ttinterp.h' for details on */
+      /* backward compatibility mode.                             */
+      if ( IS_HINTED( loader->load_flags )                                &&
+           !( loader->load_flags & FT_LOAD_COMPUTE_METRICS )              &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+           !( driver->interpreter_version == TT_INTERPRETER_VERSION_40  &&
+              exec->backward_compatibility                              ) &&
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+           !( driver->interpreter_version == TT_INTERPRETER_VERSION_38  &&
+              !SPH_OPTION_BITMAP_WIDTHS                                 &&
+              FT_LOAD_TARGET_MODE( loader->load_flags ) !=
+                                                   FT_RENDER_MODE_MONO  &&
+              exec->compatible_widths                                   ) &&
+#endif
+           !face->postscript.isFixedPitch                                 )
+      {
+        loader->widthp = size->widthp;
+      }
+      else
+        loader->widthp = NULL;
     }
 
 #endif /* TT_USE_BYTECODE_INTERPRETER */
@@ -2781,11 +2787,12 @@
    *   A function used to load a single glyph within a given glyph slot,
    *   for a given size.
    *
-   * @Input:
+   * @InOut:
    *   glyph ::
    *     A handle to a target slot object where the glyph
    *     will be loaded.
    *
+   * @Input:
    *   size ::
    *     A handle to the source face size at which the glyph
    *     must be scaled/loaded.
@@ -2890,8 +2897,12 @@
       }
       else
       {
-        if ( FT_IS_SCALABLE( glyph->face ) )
+        if ( FT_IS_SCALABLE( glyph->face ) ||
+             FT_HAS_SBIX( glyph->face )    )
         {
+          TT_Face  face = (TT_Face)glyph->face;
+
+
           /* for the bbox we need the header only */
           (void)tt_loader_init( &loader, size, glyph, load_flags, TRUE );
           (void)load_truetype_glyph( &loader, glyph_index, 0, TRUE );
@@ -2899,6 +2910,35 @@
           glyph->linearHoriAdvance = loader.linear;
           glyph->linearVertAdvance = loader.vadvance;
 
+          /* Bitmaps from the 'sbix' table need special treatment:  */
+          /* if there is a glyph contour, the bitmap origin must be */
+          /* shifted to be relative to the lower left corner of the */
+          /* glyph bounding box, also taking the left-side bearing  */
+          /* (or top bearing) into account.                         */
+          if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX &&
+               loader.n_contours > 0                            )
+          {
+            FT_Int  bitmap_left;
+            FT_Int  bitmap_top;
+
+
+            if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
+            {
+              /* This is a guess, since Apple's CoreText engine doesn't */
+              /* really do vertical typesetting.                        */
+              bitmap_left = loader.bbox.xMin;
+              bitmap_top  = loader.top_bearing;
+            }
+            else
+            {
+              bitmap_left = loader.left_bearing;
+              bitmap_top  = loader.bbox.yMin;
+            }
+
+            glyph->bitmap_left += FT_MulFix( bitmap_left, x_scale ) >> 6;
+            glyph->bitmap_top  += FT_MulFix( bitmap_top,  y_scale ) >> 6;
+          }
+
           /* sanity checks: if `xxxAdvance' in the sbit metric */
           /* structure isn't set, use `linearXXXAdvance'      */
           if ( !glyph->metrics.horiAdvance && glyph->linearHoriAdvance )
@@ -2913,6 +2953,12 @@
       }
     }
 
+    if ( load_flags & FT_LOAD_SBITS_ONLY )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
 
     /* if FT_LOAD_NO_SCALE is not set, `ttmetrics' must be valid */
@@ -2922,16 +2968,81 @@
       goto Exit;
     }
 
-    if ( load_flags & FT_LOAD_SBITS_ONLY )
+#ifdef FT_CONFIG_OPTION_SVG
+
+    /* check for OT-SVG */
+    if ( ( load_flags & FT_LOAD_COLOR ) && ( (TT_Face)glyph->face )->svg )
+    {
+      SFNT_Service  sfnt;
+
+      FT_Short   leftBearing;
+      FT_Short   topBearing;
+      FT_UShort  advanceX;
+      FT_UShort  advanceY;
+
+
+      FT_TRACE3(( "Trying to load SVG glyph\n" ));
+      sfnt = (SFNT_Service)( (TT_Face)glyph->face )->sfnt;
+
+      error = sfnt->load_svg_doc( glyph, glyph_index );
+      if ( !error )
+      {
+        TT_Face  face = (TT_Face)glyph->face;
+
+
+        FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
+
+        glyph->format = FT_GLYPH_FORMAT_SVG;
+
+        sfnt->get_metrics( face,
+                           FALSE,
+                           glyph_index,
+                           &leftBearing,
+                           &advanceX );
+        sfnt->get_metrics( face,
+                           TRUE,
+                           glyph_index,
+                           &topBearing,
+                           &advanceY );
+
+        advanceX = (FT_UShort)FT_MulDiv( advanceX,
+                                         glyph->face->size->metrics.x_ppem,
+                                         glyph->face->units_per_EM );
+        advanceY = (FT_UShort)FT_MulDiv( advanceY,
+                                         glyph->face->size->metrics.y_ppem,
+                                         glyph->face->units_per_EM );
+
+        glyph->metrics.horiAdvance = advanceX << 6;
+        glyph->metrics.vertAdvance = advanceY << 6;
+
+        return error;
+      }
+
+      FT_TRACE3(( "Failed to load SVG glyph\n" ));
+    }
+
+    /* return immediately if we only want SVG glyphs */
+    if ( load_flags & FT_LOAD_SVG_ONLY )
     {
       error = FT_THROW( Invalid_Argument );
       goto Exit;
     }
 
+#endif /* FT_CONFIG_OPTION_SVG */
+
     error = tt_loader_init( &loader, size, glyph, load_flags, FALSE );
     if ( error )
       goto Exit;
 
+    /* done if we are only interested in the `hdmx` advance */
+    if ( load_flags & FT_LOAD_ADVANCE_ONLY         &&
+         !( load_flags & FT_LOAD_VERTICAL_LAYOUT ) &&
+         loader.widthp                             )
+    {
+      glyph->metrics.horiAdvance = loader.widthp[glyph_index] * 64;
+      goto Done;
+    }
+
     glyph->format        = FT_GLYPH_FORMAT_OUTLINE;
     glyph->num_subglyphs = 0;
     glyph->outline.flags = 0;
@@ -3010,6 +3121,7 @@
                 glyph->outline.n_points,
                 glyph->outline.flags ));
 
+  Done:
     tt_loader_done( &loader );
 
   Exit:
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttgload.h b/qtbase/src/3rdparty/freetype/src/truetype/ttgload.h
index 8f72cd558c..3195351f78 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttgload.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttgload.h
@@ -4,7 +4,7 @@
  *
  *   TrueType Glyph Loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.c b/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.c
index b462263de1..6a0edef29b 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
  *
  *   TrueType GX Font Variation loader
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, Werner Lemberg, and George Williams.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -151,9 +151,7 @@
     FT_UInt    i, j;
     FT_UShort  first;
     FT_Memory  memory = stream->memory;
-    FT_Error   error  = FT_Err_Ok;
-
-    FT_UNUSED( error );
+    FT_Error   error;
 
 
     *point_cnt = 0;
@@ -178,7 +176,7 @@
     /* in the nested loops below we increase `i' twice; */
     /* it is faster to simply allocate one more slot    */
     /* than to add another test within the loop         */
-    if ( FT_NEW_ARRAY( points, n + 1 ) )
+    if ( FT_QNEW_ARRAY( points, n + 1 ) )
       return NULL;
 
     *point_cnt = n;
@@ -264,55 +262,78 @@
     FT_Fixed  *deltas = NULL;
     FT_UInt    runcnt, cnt;
     FT_UInt    i, j;
+    FT_UInt    bytes_used;
     FT_Memory  memory = stream->memory;
-    FT_Error   error  = FT_Err_Ok;
-
-    FT_UNUSED( error );
+    FT_Error   error;
 
 
-    if ( delta_cnt > size )
-    {
-      FT_TRACE1(( "ft_var_readpackeddeltas: number of points too large\n" ));
+    if ( FT_QNEW_ARRAY( deltas, delta_cnt ) )
       return NULL;
-    }
 
-    if ( FT_NEW_ARRAY( deltas, delta_cnt ) )
-      return NULL;
+    i          = 0;
+    bytes_used = 0;
 
-    i = 0;
-    while ( i < delta_cnt )
+    while ( i < delta_cnt && bytes_used < size )
     {
       runcnt = FT_GET_BYTE();
       cnt    = runcnt & GX_DT_DELTA_RUN_COUNT_MASK;
 
+      bytes_used++;
+
       if ( runcnt & GX_DT_DELTAS_ARE_ZERO )
       {
-        /* `runcnt' zeroes get added */
+        /* `cnt` + 1 zeroes get added */
         for ( j = 0; j <= cnt && i < delta_cnt; j++ )
           deltas[i++] = 0;
       }
       else if ( runcnt & GX_DT_DELTAS_ARE_WORDS )
       {
-        /* `runcnt' shorts from the stack */
+        /* `cnt` + 1 shorts from the stack */
+        bytes_used += 2 * ( cnt + 1 );
+        if ( bytes_used > size )
+        {
+          FT_TRACE1(( "ft_var_readpackeddeltas:"
+                      " number of short deltas too large\n" ));
+          goto Fail;
+        }
+
         for ( j = 0; j <= cnt && i < delta_cnt; j++ )
           deltas[i++] = FT_intToFixed( FT_GET_SHORT() );
       }
       else
       {
-        /* `runcnt' signed bytes from the stack */
+        /* `cnt` + 1 signed bytes from the stack */
+        bytes_used += cnt + 1;
+        if ( bytes_used > size )
+        {
+          FT_TRACE1(( "ft_var_readpackeddeltas:"
+                      " number of byte deltas too large\n" ));
+          goto Fail;
+        }
+
         for ( j = 0; j <= cnt && i < delta_cnt; j++ )
           deltas[i++] = FT_intToFixed( FT_GET_CHAR() );
       }
 
       if ( j <= cnt )
       {
-        /* bad format */
-        FT_FREE( deltas );
-        return NULL;
+        FT_TRACE1(( "ft_var_readpackeddeltas:"
+                    " number of deltas too large\n" ));
+        goto Fail;
       }
     }
 
+    if ( i < delta_cnt )
+    {
+      FT_TRACE1(( "ft_var_readpackeddeltas: not enough deltas\n" ));
+      goto Fail;
+    }
+
     return deltas;
+
+  Fail:
+    FT_FREE( deltas );
+    return NULL;
   }
 
 
@@ -336,14 +357,12 @@
     FT_Memory       memory = stream->memory;
     GX_Blend        blend  = face->blend;
     GX_AVarSegment  segment;
-    FT_Error        error = FT_Err_Ok;
+    FT_Error        error;
     FT_Long         version;
     FT_Long         axisCount;
     FT_Int          i, j;
     FT_ULong        table_len;
 
-    FT_UNUSED( error );
-
 
     FT_TRACE2(( "AVAR " ));
 
@@ -371,12 +390,13 @@
 
     if ( axisCount != (FT_Long)blend->mmvar->num_axis )
     {
-      FT_TRACE2(( "ft_var_load_avar: number of axes in `avar' and `fvar'\n"
-                  "                  table are different\n" ));
+      FT_TRACE2(( "ft_var_load_avar:"
+                  " number of axes in `avar' and `fvar'\n" ));
+      FT_TRACE2(( "                  table are different\n" ));
       goto Exit;
     }
 
-    if ( FT_NEW_ARRAY( blend->avar_segment, axisCount ) )
+    if ( FT_QNEW_ARRAY( blend->avar_segment, axisCount ) )
       goto Exit;
 
     segment = &blend->avar_segment[0];
@@ -385,8 +405,8 @@
       FT_TRACE5(( "  axis %d:\n", i ));
 
       segment->pairCount = FT_GET_USHORT();
-      if ( (FT_ULong)segment->pairCount * 4 > table_len                ||
-           FT_NEW_ARRAY( segment->correspondence, segment->pairCount ) )
+      if ( (FT_ULong)segment->pairCount * 4 > table_len                 ||
+           FT_QNEW_ARRAY( segment->correspondence, segment->pairCount ) )
       {
         /* Failure.  Free everything we have done so far.  We must do */
         /* it right now since loading the `avar' table is optional.   */
@@ -395,7 +415,6 @@
           FT_FREE( blend->avar_segment[j].correspondence );
 
         FT_FREE( blend->avar_segment );
-        blend->avar_segment = NULL;
         goto Exit;
       }
 
@@ -431,7 +450,8 @@
     FT_UShort  format;
     FT_ULong   region_offset;
     FT_UInt    i, j, k;
-    FT_UInt    shortDeltaCount;
+    FT_UInt    wordDeltaCount;
+    FT_Bool    long_words;
 
     GX_Blend        blend = face->blend;
     GX_ItemVarData  varData;
@@ -466,7 +486,7 @@
 
     /* make temporary copy of item variation data offsets; */
     /* we will parse region list first, then come back     */
-    if ( FT_NEW_ARRAY( dataOffsetArray, itemStore->dataCount ) )
+    if ( FT_QNEW_ARRAY( dataOffsetArray, itemStore->dataCount ) )
       goto Exit;
 
     for ( i = 0; i < itemStore->dataCount; i++ )
@@ -486,13 +506,22 @@
     if ( itemStore->axisCount != (FT_Long)blend->mmvar->num_axis )
     {
       FT_TRACE2(( "ft_var_load_item_variation_store:"
-                  " number of axes in item variation store\n"
-                  "                                 "
+                  " number of axes in item variation store\n" ));
+      FT_TRACE2(( "                                 "
                   " and `fvar' table are different\n" ));
       error = FT_THROW( Invalid_Table );
       goto Exit;
     }
 
+    /* new constraint in OpenType 1.8.4 */
+    if ( itemStore->regionCount >= 32768U )
+    {
+      FT_TRACE2(( "ft_var_load_item_variation_store:"
+                  " too many variation region tables\n" ));
+      error = FT_THROW( Invalid_Table );
+      goto Exit;
+    }
+
     if ( FT_NEW_ARRAY( itemStore->varRegionList, itemStore->regionCount ) )
       goto Exit;
 
@@ -537,15 +566,18 @@
         goto Exit;
 
       if ( FT_READ_USHORT( varData->itemCount )      ||
-           FT_READ_USHORT( shortDeltaCount )         ||
+           FT_READ_USHORT( wordDeltaCount )          ||
            FT_READ_USHORT( varData->regionIdxCount ) )
         goto Exit;
 
+      long_words      = !!( wordDeltaCount & 0x8000 );
+      wordDeltaCount &= 0x7FFF;
+
       /* check some data consistency */
-      if ( shortDeltaCount > varData->regionIdxCount )
+      if ( wordDeltaCount > varData->regionIdxCount )
       {
         FT_TRACE2(( "bad short count %d or region count %d\n",
-                    shortDeltaCount,
+                    wordDeltaCount,
                     varData->regionIdxCount ));
         error = FT_THROW( Invalid_Table );
         goto Exit;
@@ -581,39 +613,52 @@
 
       /* Parse delta set.                                                */
       /*                                                                 */
-      /* On input, deltas are (shortDeltaCount + regionIdxCount) bytes   */
-      /* each; on output, deltas are expanded to `regionIdxCount' shorts */
-      /* each.                                                           */
+      /* On input, deltas are (wordDeltaCount + regionIdxCount) bytes    */
+      /* each if `long_words` isn't set, and twice as much otherwise.    */
+      /*                                                                 */
+      /* On output, deltas are expanded to `regionIdxCount` shorts each. */
       if ( FT_NEW_ARRAY( varData->deltaSet,
                          varData->regionIdxCount * varData->itemCount ) )
         goto Exit;
 
-      /* the delta set is stored as a 2-dimensional array of shorts; */
-      /* sign-extend signed bytes to signed shorts                   */
-      for ( j = 0; j < varData->itemCount * varData->regionIdxCount; )
+      /* the delta set is stored as a 2-dimensional array of shorts */
+      if ( long_words )
       {
-        for ( k = 0; k < shortDeltaCount; k++, j++ )
+        /* new in OpenType 1.9, currently for 'COLR' table only;          */
+        /* the deltas are interpreted as 16.16 fixed-point scaling values */
+
+        /* not supported yet */
+
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+      else
+      {
+        for ( j = 0; j < varData->itemCount * varData->regionIdxCount; )
         {
-          /* read the short deltas */
-          FT_Short  delta;
+          for ( k = 0; k < wordDeltaCount; k++, j++ )
+          {
+            /* read the short deltas */
+            FT_Short  delta;
 
 
-          if ( FT_READ_SHORT( delta ) )
-            goto Exit;
+            if ( FT_READ_SHORT( delta ) )
+              goto Exit;
 
-          varData->deltaSet[j] = delta;
-        }
+            varData->deltaSet[j] = delta;
+          }
 
-        for ( ; k < varData->regionIdxCount; k++, j++ )
-        {
-          /* read the (signed) byte deltas */
-          FT_Char  delta;
+          for ( ; k < varData->regionIdxCount; k++, j++ )
+          {
+            /* read the (signed) byte deltas */
+            FT_Char  delta;
 
 
-          if ( FT_READ_CHAR( delta ) )
-            goto Exit;
+            if ( FT_READ_CHAR( delta ) )
+              goto Exit;
 
-          varData->deltaSet[j] = delta;
+            varData->deltaSet[j] = delta;
+          }
         }
       }
     }
@@ -629,37 +674,66 @@
   ft_var_load_delta_set_index_mapping( TT_Face            face,
                                        FT_ULong           offset,
                                        GX_DeltaSetIdxMap  map,
-                                       GX_ItemVarStore    itemStore )
+                                       GX_ItemVarStore    itemStore,
+                                       FT_ULong           table_len )
   {
     FT_Stream  stream = FT_FACE_STREAM( face );
     FT_Memory  memory = stream->memory;
 
-    FT_Error   error;
+    FT_Error  error;
 
-    FT_UShort  format;
-    FT_UInt    entrySize;
-    FT_UInt    innerBitCount;
-    FT_UInt    innerIndexMask;
-    FT_UInt    i, j;
+    FT_Byte   format;
+    FT_Byte   entryFormat;
+    FT_UInt   entrySize;
+    FT_UInt   innerBitCount;
+    FT_UInt   innerIndexMask;
+    FT_ULong  i;
+    FT_UInt   j;
 
 
-    if ( FT_STREAM_SEEK( offset )        ||
-         FT_READ_USHORT( format )        ||
-         FT_READ_USHORT( map->mapCount ) )
+    if ( FT_STREAM_SEEK( offset )    ||
+         FT_READ_BYTE( format )      ||
+         FT_READ_BYTE( entryFormat ) )
       goto Exit;
 
-    if ( format & 0xFFC0 )
+    if ( format == 0 )
+    {
+      if ( FT_READ_USHORT( map->mapCount ) )
+        goto Exit;
+    }
+    else if ( format == 1 ) /* new in OpenType 1.9 */
+    {
+      if ( FT_READ_ULONG( map->mapCount ) )
+        goto Exit;
+    }
+    else
     {
       FT_TRACE2(( "bad map format %d\n", format ));
       error = FT_THROW( Invalid_Table );
       goto Exit;
     }
 
+    if ( entryFormat & 0xC0 )
+    {
+      FT_TRACE2(( "bad entry format %d\n", format ));
+      error = FT_THROW( Invalid_Table );
+      goto Exit;
+    }
+
     /* bytes per entry: 1, 2, 3, or 4 */
-    entrySize      = ( ( format & 0x0030 ) >> 4 ) + 1;
-    innerBitCount  = ( format & 0x000F ) + 1;
+    entrySize      = ( ( entryFormat & 0x30 ) >> 4 ) + 1;
+    innerBitCount  = ( entryFormat & 0x0F ) + 1;
     innerIndexMask = ( 1 << innerBitCount ) - 1;
 
+    /* rough sanity check */
+    if ( map->mapCount * entrySize > table_len )
+    {
+      FT_TRACE1(( "ft_var_load_delta_set_index_mapping:"
+                  " invalid number of delta-set index mappings\n" ));
+      error = FT_THROW( Invalid_Table );
+      goto Exit;
+    }
+
     if ( FT_NEW_ARRAY( map->innerIndex, map->mapCount ) )
       goto Exit;
 
@@ -688,7 +762,7 @@
 
       if ( outerIndex >= itemStore->dataCount )
       {
-        FT_TRACE2(( "outerIndex[%d] == %d out of range\n",
+        FT_TRACE2(( "outerIndex[%ld] == %d out of range\n",
                     i,
                     outerIndex ));
         error = FT_THROW( Invalid_Table );
@@ -701,7 +775,7 @@
 
       if ( innerIndex >= itemStore->varData[outerIndex].itemCount )
       {
-        FT_TRACE2(( "innerIndex[%d] == %d out of range\n",
+        FT_TRACE2(( "innerIndex[%ld] == %d out of range\n",
                     i,
                     innerIndex ));
         error = FT_THROW( Invalid_Table );
@@ -826,7 +900,8 @@
                 face,
                 table_offset + widthMap_offset,
                 &table->widthMap,
-                &table->itemStore );
+                &table->itemStore,
+                table_len );
       if ( error )
         goto Exit;
     }
@@ -1515,8 +1590,9 @@
 
     if ( gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
     {
-      FT_TRACE1(( "ft_var_load_gvar: number of axes in `gvar' and `cvar'\n"
-                  "                  table are different\n" ));
+      FT_TRACE1(( "ft_var_load_gvar:"
+                  " number of axes in `gvar' and `cvar'\n" ));
+      FT_TRACE1(( "                  table are different\n" ));
       error = FT_THROW( Invalid_Table );
       goto Exit;
     }
@@ -1558,7 +1634,7 @@
       goto Exit;
 
     /* offsets (one more offset than glyphs, to mark size of last) */
-    if ( FT_NEW_ARRAY( blend->glyphoffsets, gvar_head.glyphCount + 1 ) )
+    if ( FT_QNEW_ARRAY( blend->glyphoffsets, gvar_head.glyphCount + 1 ) )
       goto Fail2;
 
     if ( gvar_head.flags & 1 )
@@ -1637,8 +1713,8 @@
         goto Fail;
       }
 
-      if ( FT_NEW_ARRAY( blend->tuplecoords,
-                         gvar_head.axisCount * gvar_head.globalCoordCount ) )
+      if ( FT_QNEW_ARRAY( blend->tuplecoords,
+                          gvar_head.axisCount * gvar_head.globalCoordCount ) )
         goto Fail2;
 
       for ( i = 0; i < gvar_head.globalCoordCount; i++ )
@@ -1841,25 +1917,22 @@
       FT_TRACE5(( "    %d: %.5f\n", i, coord / 65536.0 ));
       if ( coord > a->maximum || coord < a->minimum )
       {
-        FT_TRACE1((
-          "ft_var_to_normalized: design coordinate %.5f\n"
-          "                      is out of range [%.5f;%.5f]; clamping\n",
-          coord / 65536.0,
-          a->minimum / 65536.0,
-          a->maximum / 65536.0 ));
-
-        if ( coord > a->maximum )
-          coord = a->maximum;
-        else
-          coord = a->minimum;
+        FT_TRACE1(( "ft_var_to_normalized: design coordinate %.5f\n",
+                    coord / 65536.0 ));
+        FT_TRACE1(( "                      is out of range [%.5f;%.5f];"
+                    " clamping\n",
+                    a->minimum / 65536.0,
+                    a->maximum / 65536.0 ));
       }
 
-      if ( coord < a->def )
-        normalized[i] = -FT_DivFix( SUB_LONG( coord, a->def ),
-                                    SUB_LONG( a->minimum, a->def ) );
-      else if ( coord > a->def )
-        normalized[i] = FT_DivFix( SUB_LONG( coord, a->def ),
+      if ( coord > a->def )
+        normalized[i] = coord >= a->maximum ?  0x10000L :
+                        FT_DivFix( SUB_LONG( coord, a->def ),
                                    SUB_LONG( a->maximum, a->def ) );
+      else if ( coord < a->def )
+        normalized[i] = coord <= a->minimum ? -0x10000L :
+                        FT_DivFix( SUB_LONG( coord, a->def ),
+                                   SUB_LONG( a->def, a->minimum ) );
       else
         normalized[i] = 0;
     }
@@ -2049,7 +2122,7 @@
     FT_Var_Axis*         a;
     FT_Fixed*            c;
     FT_Var_Named_Style*  ns;
-    GX_FVar_Head         fvar_head;
+    GX_FVar_Head         fvar_head  = { 0, 0, 0, 0, 0, 0 };
     FT_Bool              usePsName  = 0;
     FT_UInt              num_instances;
     FT_UInt              num_axes;
@@ -2115,8 +2188,8 @@
         if ( FT_SET_ERROR( face->goto_table( face, TTAG_CFF2,
                                              stream, &table_len ) ) )
         {
-          FT_TRACE1(( "\n"
-                      "TT_Get_MM_Var: `gvar' or `CFF2' table is missing\n" ));
+          FT_TRACE1(( "\n" ));
+          FT_TRACE1(( "TT_Get_MM_Var: `gvar' or `CFF2' table is missing\n" ));
           goto Exit;
         }
       }
@@ -2544,17 +2617,17 @@
       num_coords = mmvar->num_axis;
     }
 
-    FT_TRACE5(( "TT_Set_MM_Blend:\n"
-                "  normalized design coordinates:\n" ));
+    FT_TRACE5(( "TT_Set_MM_Blend:\n" ));
+    FT_TRACE5(( "  normalized design coordinates:\n" ));
 
     for ( i = 0; i < num_coords; i++ )
     {
       FT_TRACE5(( "    %.5f\n", coords[i] / 65536.0 ));
       if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
       {
-        FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.5f\n"
-                    "                 is out of range [-1;1]\n",
+        FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.5f\n",
                     coords[i] / 65536.0 ));
+        FT_TRACE1(( "                 is out of range [-1;1]\n" ));
         error = FT_THROW( Invalid_Argument );
         goto Exit;
       }
@@ -2652,9 +2725,10 @@
     }
 
     blend->num_axis = mmvar->num_axis;
-    FT_MEM_COPY( blend->normalizedcoords,
-                 coords,
-                 num_coords * sizeof ( FT_Fixed ) );
+    if ( coords )
+      FT_MEM_COPY( blend->normalizedcoords,
+                   coords,
+                   num_coords * sizeof ( FT_Fixed ) );
 
     if ( set_design_coords )
       ft_var_to_design( face,
@@ -2672,7 +2746,6 @@
         /* The cvt table has been loaded already; every time we change the */
         /* blend we may need to reload and remodify the cvt table.         */
         FT_FREE( face->cvt );
-        face->cvt = NULL;
 
         error = tt_face_load_cvt( face, face->root.stream );
         break;
@@ -2691,7 +2764,6 @@
 
     /* enforce recomputation of the PostScript name; */
     FT_FREE( face->postscript_name );
-    face->postscript_name = NULL;
 
   Exit:
     return error;
@@ -2952,8 +3024,8 @@
     if ( !face->blend->avar_loaded )
       ft_var_load_avar( face );
 
-    FT_TRACE5(( "TT_Set_Var_Design:\n"
-                "  normalized design coordinates:\n" ));
+    FT_TRACE5(( "TT_Set_Var_Design:\n" ));
+    FT_TRACE5(( "  normalized design coordinates:\n" ));
     ft_var_to_normalized( face, num_coords, blend->coords, normalized );
 
     error = tt_set_mm_blend( face, mmvar->num_axis, normalized, 0 );
@@ -3152,6 +3224,8 @@
   /*************************************************************************/
 
 
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
   static FT_Error
   tt_cvt_ready_iterator( FT_ListNode  node,
                          void*        user )
@@ -3166,6 +3240,9 @@
     return FT_Err_Ok;
   }
 
+#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+
+
 
   /**************************************************************************
    *
@@ -3194,6 +3271,8 @@
   tt_face_vary_cvt( TT_Face    face,
                     FT_Stream  stream )
   {
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
     FT_Error   error;
     FT_Memory  memory = stream->memory;
 
@@ -3229,16 +3308,16 @@
 
     if ( !blend )
     {
-      FT_TRACE2(( "\n"
-                  "tt_face_vary_cvt: no blend specified\n" ));
+      FT_TRACE2(( "\n" ));
+      FT_TRACE2(( "tt_face_vary_cvt: no blend specified\n" ));
       error = FT_Err_Ok;
       goto Exit;
     }
 
     if ( !face->cvt )
     {
-      FT_TRACE2(( "\n"
-                  "tt_face_vary_cvt: no `cvt ' table\n" ));
+      FT_TRACE2(( "\n" ));
+      FT_TRACE2(( "tt_face_vary_cvt: no `cvt ' table\n" ));
       error = FT_Err_Ok;
       goto Exit;
     }
@@ -3388,6 +3467,7 @@
       }
       else
       {
+        localpoints = NULL;
         points      = sharedpoints;
         point_count = spoint_count;
       }
@@ -3397,9 +3477,7 @@
                                         point_count == 0 ? face->cvt_size
                                                          : point_count );
 
-      if ( !points                                                        ||
-           !deltas                                                        ||
-           ( localpoints == ALL_POINTS && point_count != face->cvt_size ) )
+      if ( !points || !deltas )
         ; /* failure, ignore it */
 
       else if ( localpoints == ALL_POINTS )
@@ -3514,6 +3592,16 @@
                      NULL );
 
     return error;
+
+#else /* !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+
+    FT_UNUSED( face );
+    FT_UNUSED( stream );
+
+    return FT_Err_Ok;
+
+#endif /* !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+
   }
 
 
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.h b/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.h
index 26e89bcf74..17915f00d3 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttgxvar.h
@@ -4,7 +4,7 @@
  *
  *   TrueType GX Font Variation loader (specification)
  *
- * Copyright (C) 2004-2020 by
+ * Copyright (C) 2004-2022 by
  * David Turner, Robert Wilhelm, Werner Lemberg and George Williams.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -106,9 +106,9 @@ FT_BEGIN_HEADER
 
   typedef struct  GX_DeltaSetIdxMapRec_
   {
-    FT_UInt   mapCount;
-    FT_UInt*  outerIndex;             /* indices to item var data */
-    FT_UInt*  innerIndex;             /* indices to delta set     */
+    FT_ULong  mapCount;
+    FT_UInt*  outerIndex;               /* indices to item var data */
+    FT_UInt*  innerIndex;               /* indices to delta set     */
 
   } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
 
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.c b/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.c
index 0c3cb10ae8..e16565c3a5 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.c
@@ -4,7 +4,7 @@
  *
  *   TrueType bytecode interpreter (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -251,6 +251,14 @@
     FT_FREE( exec->stack );
     exec->stackSize = 0;
 
+    /* free glyf cvt working area */
+    FT_FREE( exec->glyfCvt );
+    exec->glyfCvtSize = 0;
+
+    /* free glyf storage working area */
+    FT_FREE( exec->glyfStorage );
+    exec->glyfStoreSize = 0;
+
     /* free call stack */
     FT_FREE( exec->callStack );
     exec->callSize = 0;
@@ -267,64 +275,6 @@
   }
 
 
-  /**************************************************************************
-   *
-   * @Function:
-   *   Init_Context
-   *
-   * @Description:
-   *   Initializes a context object.
-   *
-   * @Input:
-   *   memory ::
-   *     A handle to the parent memory object.
-   *
-   * @InOut:
-   *   exec ::
-   *     A handle to the target execution context.
-   *
-   * @Return:
-   *   FreeType error code.  0 means success.
-   */
-  static FT_Error
-  Init_Context( TT_ExecContext  exec,
-                FT_Memory       memory )
-  {
-    FT_Error  error;
-
-
-    FT_TRACE1(( "Init_Context: new object at %p\n", (void *)exec ));
-
-    exec->memory   = memory;
-    exec->callSize = 32;
-
-    if ( FT_NEW_ARRAY( exec->callStack, exec->callSize ) )
-      goto Fail_Memory;
-
-    /* all values in the context are set to 0 already, but this is */
-    /* here as a remainder                                         */
-    exec->maxPoints   = 0;
-    exec->maxContours = 0;
-
-    exec->stackSize = 0;
-    exec->glyphSize = 0;
-
-    exec->stack    = NULL;
-    exec->glyphIns = NULL;
-
-    exec->face = NULL;
-    exec->size = NULL;
-
-    return FT_Err_Ok;
-
-  Fail_Memory:
-    FT_ERROR(( "Init_Context: not enough memory for %p\n", (void *)exec ));
-    TT_Done_Context( exec );
-
-    return error;
- }
-
-
   /**************************************************************************
    *
    * @Function:
@@ -367,7 +317,7 @@
 
     if ( *size < new_max )
     {
-      if ( FT_REALLOC( *pbuff, *size * multiplier, new_max * multiplier ) )
+      if ( FT_QREALLOC( *pbuff, *size * multiplier, new_max * multiplier ) )
         return error;
       *size = new_max;
     }
@@ -400,6 +350,8 @@
    *
    * @Note:
    *   Only the glyph loader and debugger should call this function.
+   *
+   *   Note that not all members of `TT_ExecContext` get initialized.
    */
   FT_LOCAL_DEF( FT_Error )
   TT_Load_Context( TT_ExecContext  exec,
@@ -464,13 +416,13 @@
     if ( error )
       return error;
 
-    tmp = exec->glyphSize;
+    tmp = (FT_ULong)exec->glyphSize;
     error = Update_Max( exec->memory,
                         &tmp,
                         sizeof ( FT_Byte ),
                         (void*)&exec->glyphIns,
                         maxp->maxSizeOfInstructions );
-    exec->glyphSize = (FT_UShort)tmp;
+    exec->glyphSize = (FT_UInt)tmp;
     if ( error )
       return error;
 
@@ -609,19 +561,19 @@
 
     memory = driver->root.root.memory;
 
-    /* allocate object */
+    /* allocate object and zero everything inside */
     if ( FT_NEW( exec ) )
       goto Fail;
 
-    /* initialize it; in case of error this deallocates `exec' too */
-    error = Init_Context( exec, memory );
-    if ( error )
-      goto Fail;
+    /* create callStack here, other allocations delayed */
+    exec->memory   = memory;
+    exec->callSize = 32;
 
-    return exec;
+    if ( FT_QNEW_ARRAY( exec->callStack, exec->callSize ) )
+      FT_FREE( exec );
 
   Fail:
-    return NULL;
+    return exec;
   }
 
 
@@ -1572,11 +1524,36 @@
   }
 
 
+  static void
+  Modify_CVT_Check( TT_ExecContext  exc )
+  {
+    /* TT_RunIns sets origCvt and restores cvt to origCvt when done. */
+    if ( exc->iniRange == tt_coderange_glyph &&
+         exc->cvt == exc->origCvt            )
+    {
+      exc->error = Update_Max( exc->memory,
+                               &exc->glyfCvtSize,
+                               sizeof ( FT_Long ),
+                               (void*)&exc->glyfCvt,
+                               exc->cvtSize );
+      if ( exc->error )
+        return;
+
+      FT_ARRAY_COPY( exc->glyfCvt, exc->cvt, exc->glyfCvtSize );
+      exc->cvt = exc->glyfCvt;
+    }
+  }
+
+
   FT_CALLBACK_DEF( void )
   Write_CVT( TT_ExecContext  exc,
              FT_ULong        idx,
              FT_F26Dot6      value )
   {
+    Modify_CVT_Check( exc );
+    if ( exc->error )
+      return;
+
     exc->cvt[idx] = value;
   }
 
@@ -1586,6 +1563,10 @@
                        FT_ULong        idx,
                        FT_F26Dot6      value )
   {
+    Modify_CVT_Check( exc );
+    if ( exc->error )
+      return;
+
     exc->cvt[idx] = FT_DivFix( value, Current_Ratio( exc ) );
   }
 
@@ -1595,6 +1576,10 @@
             FT_ULong        idx,
             FT_F26Dot6      value )
   {
+    Modify_CVT_Check( exc );
+    if ( exc->error )
+      return;
+
     exc->cvt[idx] = ADD_LONG( exc->cvt[idx], value );
   }
 
@@ -1604,6 +1589,10 @@
                       FT_ULong        idx,
                       FT_F26Dot6      value )
   {
+    Modify_CVT_Check( exc );
+    if ( exc->error )
+      return;
+
     exc->cvt[idx] = ADD_LONG( exc->cvt[idx],
                               FT_DivFix( value, Current_Ratio( exc ) ) );
   }
@@ -3125,7 +3114,30 @@
         ARRAY_BOUND_ERROR;
     }
     else
+    {
+      /* TT_RunIns sets origStorage and restores storage to origStorage */
+      /* when done.                                                     */
+      if ( exc->iniRange == tt_coderange_glyph &&
+           exc->storage == exc->origStorage    )
+      {
+        FT_ULong  tmp = (FT_ULong)exc->glyfStoreSize;
+
+
+        exc->error = Update_Max( exc->memory,
+                                 &tmp,
+                                 sizeof ( FT_Long ),
+                                 (void*)&exc->glyfStorage,
+                                 exc->storeSize );
+        exc->glyfStoreSize = (FT_UShort)tmp;
+        if ( exc->error )
+          return;
+
+        FT_ARRAY_COPY( exc->glyfStorage, exc->storage, exc->glyfStoreSize );
+        exc->storage = exc->glyfStorage;
+      }
+
       exc->storage[I] = args[1];
+    }
   }
 
 
@@ -3525,7 +3537,7 @@
       return;
     }
 
-    exc->IP += args[0];
+    exc->IP = ADD_LONG( exc->IP, args[0] );
     if ( exc->IP < 0                                             ||
          ( exc->callTop > 0                                    &&
            exc->IP > exc->callStack[exc->callTop - 1].Def->end ) )
@@ -3697,7 +3709,7 @@
 
 
     /* FDEF is only allowed in `prep' or `fpgm' */
-    if ( exc->curRange == tt_coderange_glyph )
+    if ( exc->iniRange == tt_coderange_glyph )
     {
       exc->error = FT_THROW( DEF_In_Glyf_Bytecode );
       return;
@@ -3771,7 +3783,7 @@
 
             if ( opcode_pointer[i] == opcode_size[i] )
             {
-              FT_TRACE6(( "sph: Function %d, opcode ptrn: %d, %s %s\n",
+              FT_TRACE6(( "sph: Function %d, opcode ptrn: %ld, %s %s\n",
                           i, n,
                           exc->face->root.family_name,
                           exc->face->root.style_name ));
@@ -4133,7 +4145,7 @@
 
 
     /* we enable IDEF only in `prep' or `fpgm' */
-    if ( exc->curRange == tt_coderange_glyph )
+    if ( exc->iniRange == tt_coderange_glyph )
     {
       exc->error = FT_THROW( DEF_In_Glyf_Bytecode );
       return;
@@ -4362,7 +4374,7 @@
 
     if ( ( opcode & 1 ) != 0 )
     {
-      C = B;   /* counter clockwise rotation */
+      C = B;   /* counter-clockwise rotation */
       B = A;
       A = NEG_LONG( C );
     }
@@ -4991,9 +5003,9 @@
 
 #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
     /* Disable Type 2 Vacuform Rounds - e.g. Arial Narrow */
-    if ( SUBPIXEL_HINTING_INFINALITY &&
-         exc->ignore_x_mode          &&
-         FT_ABS( D ) == 64           )
+    if ( SUBPIXEL_HINTING_INFINALITY         &&
+         exc->ignore_x_mode                  &&
+         ( D < 0 ? NEG_LONG( D ) : D ) == 64 )
       D += 1;
 #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
 
@@ -5050,7 +5062,7 @@
 
     if ( ( opcode & 1 ) != 0 )
     {
-      C = B;   /* counter clockwise rotation */
+      C = B;   /* counter-clockwise rotation */
       B = A;
       A = NEG_LONG( C );
     }
@@ -5074,7 +5086,7 @@
 
     if ( ( opcode & 1 ) != 0 )
     {
-      C = B;   /* counter clockwise rotation */
+      C = B;   /* counter-clockwise rotation */
       B = A;
       A = NEG_LONG( C );
     }
@@ -5248,16 +5260,21 @@
       }
     }
 
-    exc->GS.instruct_control &= ~(FT_Byte)Kf;
-    exc->GS.instruct_control |= (FT_Byte)L;
+    /* INSTCTRL should only be used in the CVT program */
+    if ( exc->iniRange == tt_coderange_cvt )
+    {
+      exc->GS.instruct_control &= ~(FT_Byte)Kf;
+      exc->GS.instruct_control |= (FT_Byte)L;
+    }
 
-    if ( K == 3 )
+    /* except to change the subpixel flags temporarily */
+    else if ( exc->iniRange == tt_coderange_glyph && K == 3 )
     {
 #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
       /* INSTCTRL modifying flag 3 also has an effect */
       /* outside of the CVT program                   */
       if ( SUBPIXEL_HINTING_INFINALITY )
-        exc->ignore_x_mode = FT_BOOL( L == 4 );
+        exc->ignore_x_mode = !FT_BOOL( L == 4 );
 #endif
 
 #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
@@ -5268,6 +5285,8 @@
         exc->backward_compatibility = !FT_BOOL( L == 4 );
 #endif
     }
+    else if ( exc->pedantic_hinting )
+      exc->error = FT_THROW( Invalid_Reference );
   }
 
 
@@ -7743,35 +7762,6 @@
 #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
 
 
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-    exc->iup_called = FALSE;
-#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-
-#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-    /*
-     * Toggle backward compatibility according to what font wants, except
-     * when
-     *
-     * 1) we have a `tricky' font that heavily relies on the interpreter to
-     *    render glyphs correctly, for example DFKai-SB, or
-     * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested.
-     *
-     * In those cases, backward compatibility needs to be turned off to get
-     * correct rendering.  The rendering is then completely up to the
-     * font's programming.
-     *
-     */
-    if ( SUBPIXEL_HINTING_MINIMAL          &&
-         exc->subpixel_hinting_lean        &&
-         !FT_IS_TRICKY( &exc->face->root ) )
-      exc->backward_compatibility = !( exc->GS.instruct_control & 4 );
-    else
-      exc->backward_compatibility = FALSE;
-
-    exc->iupx_called = FALSE;
-    exc->iupy_called = FALSE;
-#endif
-
     /* We restrict the number of twilight points to a reasonable,     */
     /* heuristic value to avoid slow execution of malformed bytecode. */
     num_twilight_points = FT_MAX( 30,
@@ -7781,8 +7771,8 @@
       if ( num_twilight_points > 0xFFFFU )
         num_twilight_points = 0xFFFFU;
 
-      FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n"
-                  "           from %d to the more reasonable value %ld\n",
+      FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n" ));
+      FT_TRACE5(( "           from %d to the more reasonable value %ld\n",
                   exc->twilight.n_points,
                   num_twilight_points ));
       exc->twilight.n_points = (FT_UShort)num_twilight_points;
@@ -7842,14 +7832,28 @@
       exc->func_move_cvt  = Move_CVT;
     }
 
+    exc->origCvt     = exc->cvt;
+    exc->origStorage = exc->storage;
+    exc->iniRange    = exc->curRange;
+
     Compute_Funcs( exc );
     Compute_Round( exc, (FT_Byte)exc->GS.round_state );
 
+    /* These flags cancel execution of some opcodes after IUP is called */
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+    exc->iup_called  = FALSE;
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+    exc->iupx_called = FALSE;
+    exc->iupy_called = FALSE;
+#endif
+
     do
     {
       exc->opcode = exc->code[exc->IP];
 
 #ifdef FT_DEBUG_LEVEL_TRACE
+      if ( ft_trace_levels[trace_ttinterp] >= 6 )
       {
         FT_Long  cnt = FT_MIN( 8, exc->top );
         FT_Long  n;
@@ -8566,8 +8570,10 @@
 
       /* increment instruction counter and check if we didn't */
       /* run this program for too long (e.g. infinite loops). */
-      if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES )
-        return FT_THROW( Execution_Too_Long );
+      if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES ) {
+        exc->error = FT_THROW( Execution_Too_Long );
+        goto LErrorLabel_;
+      }
 
     LSuiteLabel_:
       if ( exc->IP >= exc->codeSize )
@@ -8586,6 +8592,10 @@
     FT_TRACE4(( "  %ld instruction%s executed\n",
                 ins_counter,
                 ins_counter == 1 ? "" : "s" ));
+
+    exc->cvt     = exc->origCvt;
+    exc->storage = exc->origStorage;
+
     return FT_Err_Ok;
 
   LErrorCodeOverflow_:
@@ -8595,6 +8605,9 @@
     if ( exc->error && !exc->instruction_trap )
       FT_TRACE1(( "  The interpreter returned error 0x%x\n", exc->error ));
 
+    exc->cvt     = exc->origCvt;
+    exc->storage = exc->origStorage;
+
     return exc->error;
   }
 
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.h b/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.h
index 6a83705a6c..48f618dc9d 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
  *
  *   TrueType bytecode interpreter (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -144,37 +144,41 @@ FT_BEGIN_HEADER
    *
    * The main structure for the interpreter which collects all necessary
    * variables and states.
+   *
+   * Members that are initialized by `TT_Load_Context` are marked with '!'.
+   * Members that are initialized by `TT_Run_Context` are marked with '@'.
    */
   typedef struct  TT_ExecContextRec_
   {
-    TT_Face            face;
-    TT_Size            size;
+    TT_Face            face;       /* ! */
+    TT_Size            size;       /* ! */
     FT_Memory          memory;
 
     /* instructions state */
 
     FT_Error           error;      /* last execution error */
 
-    FT_Long            top;        /* top of exec. stack   */
+    FT_Long            top;        /* @ top of exec. stack */
 
-    FT_Long            stackSize;  /* size of exec. stack  */
-    FT_Long*           stack;      /* current exec. stack  */
+    FT_Long            stackSize;  /* ! size of exec. stack */
+    FT_Long*           stack;      /* ! current exec. stack */
 
     FT_Long            args;
-    FT_Long            new_top;    /* new top after exec.  */
+    FT_Long            new_top;    /* new top after exec. */
 
-    TT_GlyphZoneRec    zp0,        /* zone records */
-                       zp1,
-                       zp2,
-                       pts,
-                       twilight;
+    TT_GlyphZoneRec    zp0,        /* @! zone records */
+                       zp1,        /* @!              */
+                       zp2,        /* @!              */
+                       pts,        /*  !              */
+                       twilight;   /*  !              */
 
-    FT_Long            pointSize;  /* in 26.6 format */
-    FT_Size_Metrics    metrics;
-    TT_Size_Metrics    tt_metrics; /* size metrics */
+    FT_Long            pointSize;  /* ! in 26.6 format */
+    FT_Size_Metrics    metrics;    /* !                */
+    TT_Size_Metrics    tt_metrics; /* ! size metrics   */
 
-    TT_GraphicsState   GS;         /* current graphics state */
+    TT_GraphicsState   GS;         /* !@ current graphics state */
 
+    FT_Int             iniRange;  /* initial code range number   */
     FT_Int             curRange;  /* current code range number   */
     FT_Byte*           code;      /* current code range          */
     FT_Long            IP;        /* current instruction pointer */
@@ -185,43 +189,49 @@ FT_BEGIN_HEADER
 
     FT_Bool            step_ins;  /* true if the interpreter must */
                                   /* increment IP after ins. exec */
-    FT_ULong           cvtSize;
-    FT_Long*           cvt;
+    FT_ULong           cvtSize;   /* ! */
+    FT_Long*           cvt;       /* ! */
+    FT_ULong           glyfCvtSize;
+    FT_Long*           glyfCvt;   /* cvt working copy for glyph */
+    FT_Long*           origCvt;
 
-    FT_UInt            glyphSize; /* glyph instructions buffer size */
-    FT_Byte*           glyphIns;  /* glyph instructions buffer */
+    FT_UInt            glyphSize; /* ! glyph instructions buffer size */
+    FT_Byte*           glyphIns;  /* ! glyph instructions buffer      */
 
-    FT_UInt            numFDefs;  /* number of function defs         */
-    FT_UInt            maxFDefs;  /* maximum number of function defs */
-    TT_DefArray        FDefs;     /* table of FDefs entries          */
+    FT_UInt            numFDefs;  /* ! number of function defs         */
+    FT_UInt            maxFDefs;  /* ! maximum number of function defs */
+    TT_DefArray        FDefs;     /*   table of FDefs entries          */
 
-    FT_UInt            numIDefs;  /* number of instruction defs */
-    FT_UInt            maxIDefs;  /* maximum number of ins defs */
-    TT_DefArray        IDefs;     /* table of IDefs entries     */
+    FT_UInt            numIDefs;  /* ! number of instruction defs */
+    FT_UInt            maxIDefs;  /* ! maximum number of ins defs */
+    TT_DefArray        IDefs;     /*   table of IDefs entries     */
 
-    FT_UInt            maxFunc;   /* maximum function index     */
-    FT_UInt            maxIns;    /* maximum instruction index  */
+    FT_UInt            maxFunc;   /* ! maximum function index    */
+    FT_UInt            maxIns;    /* ! maximum instruction index */
 
-    FT_Int             callTop,    /* top of call stack during execution */
-                       callSize;   /* size of call stack */
-    TT_CallStack       callStack;  /* call stack */
+    FT_Int             callTop,    /* @ top of call stack during execution */
+                       callSize;   /*   size of call stack                 */
+    TT_CallStack       callStack;  /*   call stack                         */
 
     FT_UShort          maxPoints;    /* capacity of this context's `pts' */
     FT_Short           maxContours;  /* record, expressed in points and  */
                                      /* contours.                        */
 
-    TT_CodeRangeTable  codeRangeTable;  /* table of valid code ranges */
-                                        /* useful for the debugger   */
+    TT_CodeRangeTable  codeRangeTable;  /* ! table of valid code ranges */
+                                        /*   useful for the debugger    */
 
-    FT_UShort          storeSize;  /* size of current storage */
-    FT_Long*           storage;    /* storage area            */
+    FT_UShort          storeSize;    /* ! size of current storage */
+    FT_Long*           storage;      /* ! storage area            */
+    FT_UShort          glyfStoreSize;
+    FT_Long*           glyfStorage;  /* storage working copy for glyph */
+    FT_Long*           origStorage;
 
     FT_F26Dot6         period;     /* values used for the */
     FT_F26Dot6         phase;      /* `SuperRounding'     */
     FT_F26Dot6         threshold;
 
-    FT_Bool            instruction_trap; /* If `True', the interpreter will */
-                                         /* exit after each instruction     */
+    FT_Bool            instruction_trap; /* ! If `True', the interpreter   */
+                                         /*   exits after each instruction */
 
     TT_GraphicsState   default_GS;       /* graphics state resulting from   */
                                          /* the prep program                */
@@ -238,7 +248,7 @@ FT_BEGIN_HEADER
                        func_dualproj,  /* current dual proj. function */
                        func_freeProj;  /* current freedom proj. func  */
 
-    TT_Move_Func       func_move;      /* current point move function */
+    TT_Move_Func       func_move;      /* current point move function     */
     TT_Move_Func       func_move_orig; /* move original position function */
 
     TT_Cur_Ppem_Func   func_cur_ppem;  /* get current proj. ppem value  */
@@ -469,16 +479,15 @@ FT_BEGIN_HEADER
    *   TT_New_Context
    *
    * @Description:
-   *   Queries the face context for a given font.  Note that there is
-   *   now a _single_ execution context in the TrueType driver which is
-   *   shared among faces.
+   *   Create a `TT_ExecContext`.  Note that there is now an execution
+   *   context per `TT_Size` that is not shared among faces.
    *
    * @Input:
-   *   face ::
-   *     A handle to the source face object.
+   *   driver ::
+   *     A handle to the driver, used for memory allocation.
    *
    * @Return:
-   *   A handle to the execution context.  Initialized for `face'.
+   *   A handle to a new empty execution context.
    *
    * @Note:
    *   Only the glyph loader and debugger should call this function.
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.c b/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.c
index 06d4569559..f4f3c69336 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.c
@@ -4,7 +4,7 @@
  *
  *   Objects manager (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -140,7 +140,31 @@
 
     return error;
   }
-#endif /* TT_USE_BYTECODE_INTERPRETER */
+
+
+  /*
+   * Fonts embedded in PDFs are made unique by prepending randomization
+   * prefixes to their names: as defined in Section 5.5.3, 'Font Subsets',
+   * of the PDF Reference, they consist of 6 uppercase letters followed by
+   * the `+` sign.  For safety, we do not skip prefixes violating this rule.
+   */
+
+  static const FT_String*
+  tt_skip_pdffont_random_tag( const FT_String*  name )
+  {
+    unsigned int  i;
+
+
+    if ( ft_strlen( name ) < 8 || name[6] != '+' )
+      return name;
+
+    for ( i = 0; i < 6; i++ )
+      if ( !ft_isupper( name[i] ) )
+        return name;
+
+    FT_TRACE7(( "name without randomization tag: %s\n", name + 7 ));
+    return name + 7;
+  }
 
 
   /* Compare the face with a list of well-known `tricky' fonts. */
@@ -151,7 +175,7 @@
   {
 
 #define TRICK_NAMES_MAX_CHARACTERS  19
-#define TRICK_NAMES_COUNT           26
+#define TRICK_NAMES_COUNT           20
 
     static const char trick_names[TRICK_NAMES_COUNT]
                                  [TRICK_NAMES_MAX_CHARACTERS + 1] =
@@ -171,22 +195,28 @@
       "DFGirl-W6-WIN-BF",   /* dftt-h6.ttf; version 1.00, 1993 */
       "DFGothic-EB",        /* DynaLab Inc. 1992-1995 */
       "DFGyoSho-Lt",        /* DynaLab Inc. 1992-1995 */
-      "DFHei-Md-HK-BF",     /* maybe DynaLab Inc. */
+      "DFHei",              /* DynaLab Inc. 1992-1995 [DFHei-Bd-WIN-HK-BF] */
+                            /* covers "DFHei-Md-HK-BF", maybe DynaLab Inc. */
+
       "DFHSGothic-W5",      /* DynaLab Inc. 1992-1995 */
       "DFHSMincho-W3",      /* DynaLab Inc. 1992-1995 */
       "DFHSMincho-W7",      /* DynaLab Inc. 1992-1995 */
       "DFKaiSho-SB",        /* dfkaisb.ttf */
-      "DFKaiShu",
-      "DFKaiShu-Md-HK-BF",  /* maybe DynaLab Inc. */
+      "DFKaiShu",           /* covers "DFKaiShu-Md-HK-BF", maybe DynaLab Inc. */
       "DFKai-SB",           /* kaiu.ttf; version 3.00, 1998 [DFKaiShu-SB-Estd-BF] */
-      "DFMing-Bd-HK-BF",    /* maybe DynaLab Inc. */
+
+      "DFMing",             /* DynaLab Inc. 1992-1995 [DFMing-Md-WIN-HK-BF] */
+                            /* covers "DFMing-Bd-HK-BF", maybe DynaLab Inc. */
+
       "DLC",                /* dftt-m7.ttf; version 1.00, 1993 [DLCMingBold] */
                             /* dftt-f5.ttf; version 1.00, 1993 [DLCFongSung] */
-      "DLCHayMedium",       /* dftt-b5.ttf; version 1.00, 1993 */
-      "DLCHayBold",         /* dftt-b7.ttf; version 1.00, 1993 */
-      "DLCKaiMedium",       /* dftt-k5.ttf; version 1.00, 1992 */
-      "DLCLiShu",           /* dftt-l5.ttf; version 1.00, 1992 */
-      "DLCRoundBold",       /* dftt-r7.ttf; version 1.00, 1993 */
+                            /* covers following */
+                            /* "DLCHayMedium", dftt-b5.ttf; version 1.00, 1993 */
+                            /* "DLCHayBold",   dftt-b7.ttf; version 1.00, 1993 */
+                            /* "DLCKaiMedium", dftt-k5.ttf; version 1.00, 1992 */
+                            /* "DLCLiShu",     dftt-l5.ttf; version 1.00, 1992 */
+                            /* "DLCRoundBold", dftt-r7.ttf; version 1.00, 1993 */
+
       "HuaTianKaiTi?",      /* htkt2.ttf */
       "HuaTianSongTi?",     /* htst3.ttf */
       "Ming(for ISO10646)", /* hkscsiic.ttf; version 0.12, 2007 [Ming] */
@@ -199,10 +229,12 @@
     };
 
     int  nn;
+    const FT_String*  name_without_tag;
 
 
+    name_without_tag = tt_skip_pdffont_random_tag( name );
     for ( nn = 0; nn < TRICK_NAMES_COUNT; nn++ )
-      if ( ft_strstr( name, trick_names[nn] ) )
+      if ( ft_strstr( name_without_tag, trick_names[nn] ) )
         return TRUE;
 
     return FALSE;
@@ -277,7 +309,7 @@
   tt_check_trickyness_sfnt_ids( TT_Face  face )
   {
 #define TRICK_SFNT_IDS_PER_FACE   3
-#define TRICK_SFNT_IDS_NUM_FACES  29
+#define TRICK_SFNT_IDS_NUM_FACES  31
 
     static const tt_sfnt_id_rec sfnt_id[TRICK_SFNT_IDS_NUM_FACES]
                                        [TRICK_SFNT_IDS_PER_FACE] = {
@@ -430,6 +462,16 @@
         { 0x00170003UL, 0x00000060UL }, /* cvt  */
         { 0xDBB4306EUL, 0x000058AAUL }, /* fpgm */
         { 0xD643482AUL, 0x00000035UL }  /* prep */
+      },
+        { /* DFHei-Bd-WIN-HK-BF, issue #1087 */
+        { 0x1269EB58UL, 0x00000350UL }, /* cvt  */
+        { 0x5CD5957AUL, 0x00006A4EUL }, /* fpgm */
+        { 0xF758323AUL, 0x00000380UL }  /* prep */
+      },
+        { /* DFMing-Md-WIN-HK-BF, issue #1087 */
+        { 0x122FEB0BUL, 0x00000350UL }, /* cvt  */
+        { 0x7F10919AUL, 0x000070A9UL }, /* fpgm */
+        { 0x7CD7E7B7UL, 0x0000025CUL }  /* prep */
       }
     };
 
@@ -510,17 +552,27 @@
     /* For first, check the face name for quick check. */
     if ( face->family_name                               &&
          tt_check_trickyness_family( face->family_name ) )
+    {
+      FT_TRACE3(( "found as a tricky font"
+                  " by its family name: %s\n", face->family_name ));
       return TRUE;
+    }
 
     /* Type42 fonts may lack `name' tables, we thus try to identify */
     /* tricky fonts by checking the checksums of Type42-persistent  */
     /* sfnt tables (`cvt', `fpgm', and `prep').                     */
     if ( tt_check_trickyness_sfnt_ids( (TT_Face)face ) )
+    {
+      FT_TRACE3(( "found as a tricky font"
+                  " by its cvt/fpgm/prep table checksum\n" ));
       return TRUE;
+    }
 
     return FALSE;
   }
 
+#endif /* TT_USE_BYTECODE_INTERPRETER */
+
 
   /* Check whether `.notdef' is the only glyph in the `loca' table. */
   static FT_Bool
@@ -666,14 +718,17 @@
     if ( error )
       goto Exit;
 
+#ifdef TT_USE_BYTECODE_INTERPRETER
     if ( tt_check_trickyness( ttface ) )
       ttface->face_flags |= FT_FACE_FLAG_TRICKY;
+#endif
 
     error = tt_face_load_hdmx( face, stream );
     if ( error )
       goto Exit;
 
-    if ( FT_IS_SCALABLE( ttface ) )
+    if ( FT_IS_SCALABLE( ttface ) ||
+         FT_HAS_SBIX( ttface )    )
     {
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
       if ( !ttface->internal->incremental_interface )
@@ -712,8 +767,8 @@
              tt_check_single_notdef( ttface ) )
         {
           FT_TRACE5(( "tt_face_init:"
-                      " Only the `.notdef' glyph has an outline.\n"
-                      "             "
+                      " Only the `.notdef' glyph has an outline.\n" ));
+          FT_TRACE5(( "             "
                       " Resetting scalable flag to FALSE.\n" ));
 
           ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
@@ -1190,11 +1245,11 @@
     /* rescale CVT when needed */
     if ( size->cvt_ready < 0 )
     {
-      FT_UInt  i;
+      FT_UShort  i;
 
 
       /* all twilight points are originally zero */
-      for ( i = 0; i < (FT_UInt)size->twilight.n_points; i++ )
+      for ( i = 0; i < size->twilight.n_points; i++ )
       {
         size->twilight.org[i].x = 0;
         size->twilight.org[i].y = 0;
@@ -1203,7 +1258,7 @@
       }
 
       /* clear storage area */
-      for ( i = 0; i < (FT_UInt)size->storage_size; i++ )
+      for ( i = 0; i < size->storage_size; i++ )
         size->storage[i] = 0;
 
       size->GS = tt_default_graphics_state;
@@ -1381,6 +1436,8 @@
       size->ttmetrics.y_ratio = 0x10000L;
     }
 
+    size->widthp = tt_face_get_device_metrics( face, size_metrics->x_ppem, 0 );
+
     size->metrics = size_metrics;
 
 #ifdef TT_USE_BYTECODE_INTERPRETER
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.h b/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.h
index d986deabc4..5fa239d43a 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttobjs.h
@@ -4,7 +4,7 @@
  *
  *   Objects manager (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -282,6 +282,8 @@ FT_BEGIN_HEADER
 
     TT_Size_Metrics    ttmetrics;
 
+    FT_Byte*           widthp;          /* glyph widths from the hdmx table */
+
     FT_ULong           strike_index;      /* 0xFFFFFFFF to indicate invalid */
 
 #ifdef TT_USE_BYTECODE_INTERPRETER
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttpload.c b/qtbase/src/3rdparty/freetype/src/truetype/ttpload.c
index b1255b88cd..6982c717ab 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttpload.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
  *
  *   TrueType-specific tables loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -98,36 +98,23 @@
       goto Exit;
     }
 
-    if ( face->header.Index_To_Loc_Format != 0 )
-    {
-      shift = 2;
+    shift = face->header.Index_To_Loc_Format != 0 ? 2 : 1;
 
-      if ( table_len >= 0x40000L )
-      {
-        FT_TRACE2(( "table too large\n" ));
-        table_len = 0x3FFFFL;
-      }
-      face->num_locations = table_len >> shift;
-    }
-    else
+    if ( table_len > 0x10000UL << shift )
     {
-      shift = 1;
-
-      if ( table_len >= 0x20000L )
-      {
-        FT_TRACE2(( "table too large\n" ));
-        table_len = 0x1FFFFL;
-      }
-      face->num_locations = table_len >> shift;
+      FT_TRACE2(( "table too large\n" ));
+      table_len = 0x10000UL << shift;
     }
 
+    face->num_locations = table_len >> shift;
+
     if ( face->num_locations != (FT_ULong)face->root.num_glyphs + 1 )
     {
       FT_TRACE2(( "glyph count mismatch!  loca: %ld, maxp: %ld\n",
                   face->num_locations - 1, face->root.num_glyphs ));
 
       /* we only handle the case where `maxp' gives a larger value */
-      if ( face->num_locations <= (FT_ULong)face->root.num_glyphs )
+      if ( face->num_locations < (FT_ULong)face->root.num_glyphs + 1 )
       {
         FT_ULong  new_loca_len =
                     ( (FT_ULong)face->root.num_glyphs + 1 ) << shift;
@@ -237,10 +224,11 @@
     if ( pos1 > face->glyf_len )
     {
       FT_TRACE1(( "tt_face_get_location:"
-                  " too large offset (0x%08lx) found for glyph index %d,\n"
-                  "                     "
+                  " too large offset (0x%08lx) found for glyph index %d,\n",
+                  pos1, gindex ));
+      FT_TRACE1(( "                     "
                   " exceeding the end of `glyf' table (0x%08lx)\n",
-                  pos1, gindex, face->glyf_len ));
+                  face->glyf_len ));
       *asize = 0;
       return 0;
     }
@@ -251,19 +239,21 @@
       if ( gindex == face->num_locations - 2 )
       {
         FT_TRACE1(( "tt_face_get_location:"
-                    " too large size (%ld bytes) found for glyph index %d,\n"
-                    "                     "
+                    " too large size (%ld bytes) found for glyph index %d,\n",
+                    pos2 - pos1, gindex ));
+        FT_TRACE1(( "                     "
                     " truncating at the end of `glyf' table to %ld bytes\n",
-                    pos2 - pos1, gindex, face->glyf_len - pos1 ));
+                    face->glyf_len - pos1 ));
         pos2 = face->glyf_len;
       }
       else
       {
         FT_TRACE1(( "tt_face_get_location:"
-                    " too large offset (0x%08lx) found for glyph index %d,\n"
-                    "                     "
+                    " too large offset (0x%08lx) found for glyph index %d,\n",
+                    pos2, gindex + 1 ));
+        FT_TRACE1(( "                     "
                     " exceeding the end of `glyf' table (0x%08lx)\n",
-                    pos2, gindex + 1, face->glyf_len ));
+                    face->glyf_len ));
         *asize = 0;
         return 0;
       }
@@ -344,7 +334,7 @@
 
     face->cvt_size = table_len / 2;
 
-    if ( FT_NEW_ARRAY( face->cvt, face->cvt_size ) )
+    if ( FT_QNEW_ARRAY( face->cvt, face->cvt_size ) )
       goto Exit;
 
     if ( FT_FRAME_ENTER( face->cvt_size * 2L ) )
@@ -508,6 +498,14 @@
   }
 
 
+  FT_COMPARE_DEF( int )
+  compare_ppem( const void*  a,
+                const void*  b )
+  {
+    return **(FT_Byte**)a - **(FT_Byte**)b;
+  }
+
+
   /**************************************************************************
    *
    * @Function:
@@ -557,12 +555,6 @@
     num_records = FT_NEXT_USHORT( p );
     record_size = FT_NEXT_ULONG( p );
 
-    /* The maximum number of bytes in an hdmx device record is the */
-    /* maximum number of glyphs + 2; this is 0xFFFF + 2, thus      */
-    /* explaining why `record_size' is a long (which we read as    */
-    /* unsigned long for convenience).  In practice, two bytes are */
-    /* sufficient to hold the size value.                          */
-    /*                                                             */
     /* There are at least two fonts, HANNOM-A and HANNOM-B version */
     /* 2.0 (2005), which get this wrong: The upper two bytes of    */
     /* the size value are set to 0xFF instead of 0x00.  We catch   */
@@ -571,32 +563,46 @@
     if ( record_size >= 0xFFFF0000UL )
       record_size &= 0xFFFFU;
 
+    FT_TRACE2(( "Hdmx " ));
+
     /* The limit for `num_records' is a heuristic value. */
-    if ( num_records > 255              ||
-         ( num_records > 0            &&
-           ( record_size > 0x10001L ||
-             record_size < 4        ) ) )
+    if ( num_records > 255 || num_records == 0 )
+    {
+      FT_TRACE2(( "with unreasonable %u records rejected\n", num_records ));
+      goto Fail;
+    }
+
+    /* Out-of-spec tables are rejected.  The record size must be */
+    /* equal to the number of glyphs + 2 + 32-bit padding.       */
+    if ( (FT_Long)record_size != ( ( face->root.num_glyphs + 2 + 3 ) & ~3 ) )
     {
-      error = FT_THROW( Invalid_File_Format );
+      FT_TRACE2(( "with record size off by %ld bytes rejected\n",
+                  (FT_Long)record_size -
+                    ( ( face->root.num_glyphs + 2 + 3 ) & ~3 ) ));
       goto Fail;
     }
 
-    if ( FT_NEW_ARRAY( face->hdmx_record_sizes, num_records ) )
+    if ( FT_QNEW_ARRAY( face->hdmx_records, num_records ) )
       goto Fail;
 
     for ( nn = 0; nn < num_records; nn++ )
     {
       if ( p + record_size > limit )
         break;
-
-      face->hdmx_record_sizes[nn] = p[0];
-      p                          += record_size;
+      face->hdmx_records[nn] = p;
+      p                     += record_size;
     }
 
+    /* The records must be already sorted by ppem but it does not */
+    /* hurt to make sure so that the binary search works later.   */
+    ft_qsort( face->hdmx_records, nn, sizeof ( FT_Byte* ), compare_ppem );
+
     face->hdmx_record_count = nn;
     face->hdmx_table_size   = table_size;
     face->hdmx_record_size  = record_size;
 
+    FT_TRACE2(( "%ux%lu loaded\n", num_records, record_size ));
+
   Exit:
     return error;
 
@@ -614,7 +620,7 @@
     FT_Memory  memory = stream->memory;
 
 
-    FT_FREE( face->hdmx_record_sizes );
+    FT_FREE( face->hdmx_records );
     FT_FRAME_RELEASE( face->hdmx_table );
   }
 
@@ -622,27 +628,34 @@
   /**************************************************************************
    *
    * Return the advance width table for a given pixel size if it is found
-   * in the font's `hdmx' table (if any).
+   * in the font's `hdmx' table (if any).  The records must be sorted for
+   * the binary search to work properly.
    */
   FT_LOCAL_DEF( FT_Byte* )
   tt_face_get_device_metrics( TT_Face  face,
                               FT_UInt  ppem,
                               FT_UInt  gindex )
   {
-    FT_UInt   nn;
-    FT_Byte*  result      = NULL;
-    FT_ULong  record_size = face->hdmx_record_size;
-    FT_Byte*  record      = FT_OFFSET( face->hdmx_table, 8 );
+    FT_UInt   min    = 0;
+    FT_UInt   max    = face->hdmx_record_count;
+    FT_UInt   mid;
+    FT_Byte*  result = NULL;
+
 
+    while ( min < max )
+    {
+      mid = ( min + max ) >> 1;
 
-    for ( nn = 0; nn < face->hdmx_record_count; nn++ )
-      if ( face->hdmx_record_sizes[nn] == ppem )
+      if ( face->hdmx_records[mid][0] > ppem )
+        max = mid;
+      else if ( face->hdmx_records[mid][0] < ppem )
+        min = mid + 1;
+      else
       {
-        gindex += 2;
-        if ( gindex < record_size )
-          result = record + nn * record_size + gindex;
+        result = face->hdmx_records[mid] + 2 + gindex;
         break;
       }
+    }
 
     return result;
   }
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttpload.h b/qtbase/src/3rdparty/freetype/src/truetype/ttpload.h
index bb669e0278..fa5d96ed35 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttpload.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttpload.h
@@ -4,7 +4,7 @@
  *
  *   TrueType-specific tables loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.c b/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.c
index 56667deaf7..2438d3a2a2 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.c
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.c
@@ -4,7 +4,7 @@
  *
  *   TrueType Subpixel Hinting.
  *
- * Copyright (C) 2010-2020 by
+ * Copyright (C) 2010-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -315,7 +315,7 @@
   static const SPH_TweakRule  SKIP_NONPIXEL_Y_MOVES_Rules
                               [SKIP_NONPIXEL_Y_MOVES_RULES_SIZE] =
   {
-    /* fix vwxyz thinness*/
+    /* fix vwxyz thinness */
     { "Consolas", 0, "", 0 },
     /* Fix thin middle stems */
     { "Core MS Legacy Fonts", 0, "Regular", 0 },
@@ -891,12 +891,12 @@
 #define TWEAK_RULES( x )                                       \
   if ( sph_test_tweak( face, family, ppem, style, glyph_index, \
                        x##_Rules, x##_RULES_SIZE ) )           \
-    loader->exec->sph_tweak_flags |= SPH_TWEAK_##x;
+    loader->exec->sph_tweak_flags |= SPH_TWEAK_##x
 
 #define TWEAK_RULES_EXCEPTIONS( x )                                        \
   if ( sph_test_tweak( face, family, ppem, style, glyph_index,             \
                        x##_Rules_Exceptions, x##_RULES_EXCEPTIONS_SIZE ) ) \
-    loader->exec->sph_tweak_flags &= ~SPH_TWEAK_##x;
+    loader->exec->sph_tweak_flags &= ~SPH_TWEAK_##x
 
 
   FT_LOCAL_DEF( void )
diff --git a/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.h b/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.h
index 229a6cf055..181f83810c 100644
--- a/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.h
+++ b/qtbase/src/3rdparty/freetype/src/truetype/ttsubpix.h
@@ -4,7 +4,7 @@
  *
  *   TrueType Subpixel Hinting.
  *
- * Copyright (C) 2010-2020 by
+ * Copyright (C) 2010-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/module.mk b/qtbase/src/3rdparty/freetype/src/type1/module.mk
index cffb774b45..0342a08ffa 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/type1/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/rules.mk b/qtbase/src/3rdparty/freetype/src/type1/rules.mk
index 213e619247..cae0ee553b 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/type1/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1afm.c b/qtbase/src/3rdparty/freetype/src/type1/t1afm.c
index b9cd66b045..6009e9ee2e 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1afm.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1afm.c
@@ -4,7 +4,7 @@
  *
  *   AFM support for Type 1 fonts (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -83,7 +83,7 @@
 
 
   /* compare two kerning pairs */
-  FT_CALLBACK_DEF( int )
+  FT_COMPARE_DEF( int )
   compare_kern_pairs( const void*  a,
                       const void*  b )
   {
@@ -203,7 +203,7 @@
       kp->index1 = FT_Get_Char_Index( t1_face, p[0] );
       kp->index2 = FT_Get_Char_Index( t1_face, p[1] );
 
-      kp->x = (FT_Int)FT_PEEK_SHORT_LE(p + 2);
+      kp->x = (FT_Int)FT_PEEK_SHORT_LE( p + 2 );
       kp->y = 0;
 
       kp++;
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1afm.h b/qtbase/src/3rdparty/freetype/src/type1/t1afm.h
index edf919c791..040ed68298 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1afm.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1afm.h
@@ -4,7 +4,7 @@
  *
  *   AFM support for Type 1 fonts (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1driver.c b/qtbase/src/3rdparty/freetype/src/type1/t1driver.c
index b786a87817..dd31545cf6 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1driver.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1driver.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 driver interface (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1driver.h b/qtbase/src/3rdparty/freetype/src/type1/t1driver.h
index e7eae0b88c..9fe1940334 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1driver.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1driver.h
@@ -4,7 +4,7 @@
  *
  *   High-level Type 1 driver interface (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1errors.h b/qtbase/src/3rdparty/freetype/src/type1/t1errors.h
index ad03a3d32a..1b87c42f18 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1errors.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1errors.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1gload.c b/qtbase/src/3rdparty/freetype/src/type1/t1gload.c
index d16b81f246..540231561c 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1gload.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1gload.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 Glyph Loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -79,7 +79,7 @@
     /* For ordinary fonts get the character data stored in the face record. */
     {
       char_string->pointer = type1->charstrings[glyph_index];
-      char_string->length  = (FT_Int)type1->charstrings_len[glyph_index];
+      char_string->length  = type1->charstrings_len[glyph_index];
     }
 
     if ( !error )
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1gload.h b/qtbase/src/3rdparty/freetype/src/type1/t1gload.h
index 9947507c84..fdb985264f 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1gload.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1gload.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 Glyph Loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1load.c b/qtbase/src/3rdparty/freetype/src/type1/t1load.c
index 84986007b0..66bebd560f 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1load.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1load.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 font loader (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -117,6 +117,9 @@
         goto Exit;
 
       blend->num_default_design_vector = 0;
+      blend->weight_vector             = NULL;
+      blend->default_weight_vector     = NULL;
+      blend->design_pos[0]             = NULL;
 
       face->blend = blend;
     }
@@ -130,14 +133,11 @@
 
 
         /* allocate the blend `private' and `font_info' dictionaries */
-        if ( FT_NEW_ARRAY( blend->font_infos[1], num_designs     ) ||
-             FT_NEW_ARRAY( blend->privates  [1], num_designs     ) ||
-             FT_NEW_ARRAY( blend->bboxes    [1], num_designs     ) ||
-             FT_NEW_ARRAY( blend->weight_vector, num_designs * 2 ) )
+        if ( FT_NEW_ARRAY( blend->font_infos[1], num_designs ) ||
+             FT_NEW_ARRAY( blend->privates  [1], num_designs ) ||
+             FT_NEW_ARRAY( blend->bboxes    [1], num_designs ) )
           goto Exit;
 
-        blend->default_weight_vector = blend->weight_vector + num_designs;
-
         blend->font_infos[0] = &face->type1.font_info;
         blend->privates  [0] = &face->type1.private_dict;
         blend->bboxes    [0] = &face->type1.font_bbox;
@@ -164,21 +164,6 @@
       blend->num_axis = num_axis;
     }
 
-    /* allocate the blend design pos table if needed */
-    num_designs = blend->num_designs;
-    num_axis    = blend->num_axis;
-    if ( num_designs && num_axis && blend->design_pos[0] == 0 )
-    {
-      FT_UInt  n;
-
-
-      if ( FT_NEW_ARRAY( blend->design_pos[0], num_designs * num_axis ) )
-        goto Exit;
-
-      for ( n = 1; n < num_designs; n++ )
-        blend->design_pos[n] = blend->design_pos[0] + num_axis * n;
-    }
-
   Exit:
     return error;
 
@@ -580,7 +565,7 @@
   {
     FT_Error  error;
     PS_Blend  blend = face->blend;
-    FT_UInt   n, p;
+    FT_UInt   n;
     FT_Fixed  final_blends[T1_MAX_MM_DESIGNS];
 
 
@@ -599,7 +584,7 @@
       PS_DesignMap  map     = blend->design_map + n;
       FT_Long*      designs = map->design_points;
       FT_Fixed*     blends  = map->blend_points;
-      FT_Int        before  = -1, after = -1;
+      FT_Int        p, before  = -1, after = -1;
 
 
       /* use a default value if we don't have a coordinate */
@@ -608,7 +593,7 @@
       else
         design = ( designs[map->num_points - 1] - designs[0] ) / 2;
 
-      for ( p = 0; p < (FT_UInt)map->num_points; p++ )
+      for ( p = 0; p < (FT_Int)map->num_points; p++ )
       {
         FT_Long  p_design = designs[p];
 
@@ -622,11 +607,11 @@
 
         if ( design < p_design )
         {
-          after = (FT_Int)p;
+          after = p;
           break;
         }
 
-        before = (FT_Int)p;
+        before = p;
       }
 
       /* now interpolate if necessary */
@@ -851,7 +836,7 @@
         FT_FREE( name );
       }
 
-      if ( FT_ALLOC( blend->axis_names[n], len + 1 ) )
+      if ( FT_QALLOC( blend->axis_names[n], len + 1 ) )
         goto Exit;
 
       name = (FT_Byte*)blend->axis_names[n];
@@ -872,12 +857,14 @@
   {
     T1_TokenRec  design_tokens[T1_MAX_MM_DESIGNS];
     FT_Int       num_designs;
-    FT_Int       num_axis;
-    T1_Parser    parser = &loader->parser;
+    FT_Int       num_axis = 0; /* make compiler happy */
+    T1_Parser    parser   = &loader->parser;
+    FT_Memory    memory   = face->root.memory;
+    FT_Error     error    = FT_Err_Ok;
+    FT_Fixed*    design_pos[T1_MAX_MM_DESIGNS];
 
-    FT_Error     error = FT_Err_Ok;
-    PS_Blend     blend;
 
+    design_pos[0] = NULL;
 
     /* get the array of design tokens -- compute number of designs */
     T1_ToTokenArray( parser, design_tokens,
@@ -899,12 +886,10 @@
     {
       FT_Byte*  old_cursor = parser->root.cursor;
       FT_Byte*  old_limit  = parser->root.limit;
-      FT_Int    n;
+      FT_Int    n, nn;
+      PS_Blend  blend;
 
 
-      blend    = face->blend;
-      num_axis = 0;  /* make compiler happy */
-
       FT_TRACE4(( " [" ));
 
       for ( n = 0; n < num_designs; n++ )
@@ -937,7 +922,13 @@
                                      (FT_UInt)num_axis );
           if ( error )
             goto Exit;
-          blend = face->blend;
+
+          /* allocate a blend design pos table */
+          if ( FT_QNEW_ARRAY( design_pos[0], num_designs * num_axis ) )
+            goto Exit;
+
+          for ( nn = 1; nn < num_designs; nn++ )
+            design_pos[nn] = design_pos[0] + num_axis * nn;
         }
         else if ( n_axis != num_axis )
         {
@@ -955,8 +946,8 @@
 
           parser->root.cursor = token2->start;
           parser->root.limit  = token2->limit;
-          blend->design_pos[n][axis] = T1_ToFixed( parser, 0 );
-          FT_TRACE4(( " %f", (double)blend->design_pos[n][axis] / 65536 ));
+          design_pos[n][axis] = T1_ToFixed( parser, 0 );
+          FT_TRACE4(( " %f", (double)design_pos[n][axis] / 65536 ));
         }
         FT_TRACE4(( "]" )) ;
       }
@@ -965,9 +956,21 @@
 
       loader->parser.root.cursor = old_cursor;
       loader->parser.root.limit  = old_limit;
+
+      /* a valid BlendDesignPosition has been parsed */
+      blend = face->blend;
+      if ( blend->design_pos[0] )
+        FT_FREE( blend->design_pos[0] );
+
+      for ( n = 0; n < num_designs; n++ )
+      {
+        blend->design_pos[n] = design_pos[n];
+        design_pos[n]        = NULL;
+      }
     }
 
   Exit:
+    FT_FREE( design_pos[0] );
     loader->parser.root.error = error;
   }
 
@@ -1044,7 +1047,7 @@
       }
 
       /* allocate design map data */
-      if ( FT_NEW_ARRAY( map->design_points, num_points * 2 ) )
+      if ( FT_QNEW_ARRAY( map->design_points, num_points * 2 ) )
         goto Exit;
       map->blend_points = map->design_points + num_points;
       map->num_points   = (FT_Byte)num_points;
@@ -1088,6 +1091,7 @@
     T1_TokenRec  design_tokens[T1_MAX_MM_DESIGNS];
     FT_Int       num_designs;
     FT_Error     error  = FT_Err_Ok;
+    FT_Memory    memory = face->root.memory;
     T1_Parser    parser = &loader->parser;
     PS_Blend     blend  = face->blend;
     T1_Token     token;
@@ -1122,13 +1126,19 @@
     else if ( blend->num_designs != (FT_UInt)num_designs )
     {
       FT_ERROR(( "parse_weight_vector:"
-                 " /BlendDesignPosition and /WeightVector have\n"
-                 "                    "
+                 " /BlendDesignPosition and /WeightVector have\n" ));
+      FT_ERROR(( "                    "
                  " different number of elements\n" ));
       error = FT_THROW( Invalid_File_Format );
       goto Exit;
     }
 
+    if ( !blend->weight_vector )
+      if ( FT_QNEW_ARRAY( blend->weight_vector, num_designs * 2 ) )
+        goto Exit;
+
+    blend->default_weight_vector = blend->weight_vector + num_designs;
+
     old_cursor = parser->root.cursor;
     old_limit  = parser->root.limit;
 
@@ -1307,9 +1317,9 @@
     else
     {
       FT_TRACE1(( "t1_load_keyword: ignoring keyword `%s'"
-                  " which is not valid at this point\n"
-                  "                 (probably due to missing keywords)\n",
+                  " which is not valid at this point\n",
                  field->ident ));
+      FT_TRACE1(( "                 (probably due to missing keywords)\n" ));
       error = FT_Err_Ok;
     }
 
@@ -1520,8 +1530,8 @@
 
       /* we use a T1_Table to store our charnames */
       loader->num_chars = encode->num_chars = array_size;
-      if ( FT_NEW_ARRAY( encode->char_index, array_size )     ||
-           FT_NEW_ARRAY( encode->char_name,  array_size )     ||
+      if ( FT_QNEW_ARRAY( encode->char_index, array_size )    ||
+           FT_QNEW_ARRAY( encode->char_name,  array_size )    ||
            FT_SET_ERROR( psaux->ps_table_funcs->init(
                            char_table, array_size, memory ) ) )
       {
@@ -1762,7 +1772,7 @@
 
       if ( !loader->subrs_hash )
       {
-        if ( FT_NEW( loader->subrs_hash ) )
+        if ( FT_QNEW( loader->subrs_hash ) )
           goto Fail;
 
         error = ft_hash_num_init( loader->subrs_hash, memory );
@@ -1858,7 +1868,7 @@
         }
 
         /* t1_decrypt() shouldn't write to base -- make temporary copy */
-        if ( FT_ALLOC( temp, size ) )
+        if ( FT_QALLOC( temp, size ) )
           goto Fail;
         FT_MEM_COPY( temp, base, size );
         psaux->t1_decrypt( temp, size, 4330 );
@@ -2047,9 +2057,9 @@
         name_table->elements[n][len] = '\0';
 
         /* record index of /.notdef */
-        if ( *cur == '.'                                              &&
+        if ( *cur == '.'                                                &&
              ft_strcmp( ".notdef",
-                        (const char*)(name_table->elements[n]) ) == 0 )
+                        (const char*)( name_table->elements[n] ) ) == 0 )
         {
           notdef_index = n;
           notdef_found = 1;
@@ -2068,7 +2078,7 @@
           }
 
           /* t1_decrypt() shouldn't write to base -- make temporary copy */
-          if ( FT_ALLOC( temp, size ) )
+          if ( FT_QALLOC( temp, size ) )
             goto Fail;
           FT_MEM_COPY( temp, base, size );
           psaux->t1_decrypt( temp, size, 4330 );
@@ -2321,8 +2331,8 @@
       /* in valid Type 1 fonts we don't see `RD' or `-|' directly */
       /* since those tokens are handled by parse_subrs and        */
       /* parse_charstrings                                        */
-      else if ( *cur == 'R' && cur + 6 < limit && *(cur + 1) == 'D' &&
-                have_integer )
+      else if ( *cur == 'R' && cur + 6 < limit && *( cur + 1 ) == 'D' &&
+                have_integer                                          )
       {
         FT_ULong  s;
         FT_Byte*  b;
@@ -2334,8 +2344,8 @@
         have_integer = 0;
       }
 
-      else if ( *cur == '-' && cur + 6 < limit && *(cur + 1) == '|' &&
-                have_integer )
+      else if ( *cur == '-' && cur + 6 < limit && *( cur + 1 ) == '|' &&
+                have_integer                                          )
       {
         FT_ULong  s;
         FT_Byte*  b;
@@ -2578,7 +2588,15 @@
          ( !face->blend->num_designs || !face->blend->num_axis ) )
       T1_Done_Blend( face );
 
-    /* another safety check */
+    /* the font may have no valid WeightVector */
+    if ( face->blend && !face->blend->weight_vector )
+      T1_Done_Blend( face );
+
+    /* the font may have no valid BlendDesignPositions */
+    if ( face->blend && !face->blend->design_pos[0] )
+      T1_Done_Blend( face );
+
+    /* the font may have no valid BlendDesignMap */
     if ( face->blend )
     {
       FT_UInt  i;
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1load.h b/qtbase/src/3rdparty/freetype/src/type1/t1load.h
index 4396415c20..a6d46eb1e4 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1load.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1load.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 font loader (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1objs.c b/qtbase/src/3rdparty/freetype/src/type1/t1objs.c
index 3b918b7338..847ae0e64b 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1objs.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1objs.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 objects manager (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -116,11 +116,15 @@
   T1_Size_Request( FT_Size          t1size,     /* T1_Size */
                    FT_Size_Request  req )
   {
+    FT_Error  error;
+
     T1_Size            size  = (T1_Size)t1size;
     PSH_Globals_Funcs  funcs = T1_Size_Get_Globals_Funcs( size );
 
 
-    FT_Request_Metrics( size->root.face, req );
+    error = FT_Request_Metrics( size->root.face, req );
+    if ( error )
+      goto Exit;
 
     if ( funcs )
       funcs->set_scale( (PSH_Globals)t1size->internal->module_data,
@@ -128,7 +132,8 @@
                         size->root.metrics.y_scale,
                         0, 0 );
 
-    return FT_Err_Ok;
+  Exit:
+    return error;
   }
 
 
@@ -217,7 +222,6 @@
     {
       FT_FREE( face->buildchar );
 
-      face->buildchar     = NULL;
       face->len_buildchar = 0;
     }
 
@@ -598,11 +602,7 @@
 
 
     /* set default property values, cf. `ftt1drv.h' */
-#ifdef T1_CONFIG_OPTION_OLD_ENGINE
-    driver->hinting_engine = FT_HINTING_FREETYPE;
-#else
     driver->hinting_engine = FT_HINTING_ADOBE;
-#endif
 
     driver->no_stem_darkening = TRUE;
 
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1objs.h b/qtbase/src/3rdparty/freetype/src/type1/t1objs.h
index 536be8ba1e..e632fb58bd 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1objs.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1objs.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 objects manager (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1parse.c b/qtbase/src/3rdparty/freetype/src/type1/t1parse.c
index 74cf38bde7..95dc97d79a 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1parse.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1parse.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 parser (body).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -221,7 +221,7 @@
     else
     {
       /* read segment in memory -- this is clumsy, but so does the format */
-      if ( FT_ALLOC( parser->base_dict, size )       ||
+      if ( FT_QALLOC( parser->base_dict, size )      ||
            FT_STREAM_READ( parser->base_dict, size ) )
         goto Exit;
       parser->base_len = size;
@@ -302,8 +302,8 @@
         goto Fail;
       }
 
-      if ( FT_STREAM_SEEK( start_pos )                           ||
-           FT_ALLOC( parser->private_dict, parser->private_len ) )
+      if ( FT_STREAM_SEEK( start_pos )                            ||
+           FT_QALLOC( parser->private_dict, parser->private_len ) )
         goto Fail;
 
       parser->private_len = 0;
@@ -450,7 +450,7 @@
       if ( parser->in_memory )
       {
         /* note that we allocate one more byte to put a terminating `0' */
-        if ( FT_ALLOC( parser->private_dict, size + 1 ) )
+        if ( FT_QALLOC( parser->private_dict, size + 1 ) )
           goto Fail;
         parser->private_len = size;
       }
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1parse.h b/qtbase/src/3rdparty/freetype/src/type1/t1parse.h
index 1ea0110b50..d9c7e3b56a 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1parse.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1parse.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 parser (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/t1tokens.h b/qtbase/src/3rdparty/freetype/src/type1/t1tokens.h
index c09420355d..79080d9e4d 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/t1tokens.h
+++ b/qtbase/src/3rdparty/freetype/src/type1/t1tokens.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 tokenizer (specification).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type1/type1.c b/qtbase/src/3rdparty/freetype/src/type1/type1.c
index cadee78994..6f11249288 100644
--- a/qtbase/src/3rdparty/freetype/src/type1/type1.c
+++ b/qtbase/src/3rdparty/freetype/src/type1/type1.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Type 1 driver component (body only).
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/module.mk b/qtbase/src/3rdparty/freetype/src/type42/module.mk
index 6ef3a95ead..f619fa5c73 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/type42/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2002-2020 by
+# Copyright (C) 2002-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/rules.mk b/qtbase/src/3rdparty/freetype/src/type42/rules.mk
index f4ce91a3b7..9d26c879d9 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/type42/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 2002-2020 by
+# Copyright (C) 2002-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42drivr.c b/qtbase/src/3rdparty/freetype/src/type42/t42drivr.c
index 90898b4329..45d8c3821b 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42drivr.c
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42drivr.c
@@ -4,7 +4,7 @@
  *
  *   High-level Type 42 driver interface (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -150,22 +150,13 @@
   }
 
 
-  static FT_Error
-  t42_ps_get_font_private( FT_Face         face,
-                           PS_PrivateRec*  afont_private )
-  {
-    *afont_private = ((T42_Face)face)->type1.private_dict;
-
-    return FT_Err_Ok;
-  }
-
-
   static const FT_Service_PsInfoRec  t42_service_ps_info =
   {
     (PS_GetFontInfoFunc)   t42_ps_get_font_info,    /* ps_get_font_info    */
     (PS_GetFontExtraFunc)  t42_ps_get_font_extra,   /* ps_get_font_extra   */
     (PS_HasGlyphNamesFunc) t42_ps_has_glyph_names,  /* ps_has_glyph_names  */
-    (PS_GetFontPrivateFunc)t42_ps_get_font_private, /* ps_get_font_private */
+    /* Type42 fonts don't have a Private dict */
+    (PS_GetFontPrivateFunc)NULL,                    /* ps_get_font_private */
     /* not implemented */
     (PS_GetFontValueFunc)  NULL                     /* ps_get_font_value   */
   };
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42drivr.h b/qtbase/src/3rdparty/freetype/src/type42/t42drivr.h
index 8bf2afc755..95e1207b68 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42drivr.h
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42drivr.h
@@ -4,7 +4,7 @@
  *
  *   High-level Type 42 driver interface (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42error.h b/qtbase/src/3rdparty/freetype/src/type42/t42error.h
index e48132ec09..b278221006 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42error.h
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42error.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 error codes (specification only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42objs.c b/qtbase/src/3rdparty/freetype/src/type42/t42objs.c
index 6acfcdf401..da1e0732a0 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42objs.c
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42objs.c
@@ -4,7 +4,7 @@
  *
  *   Type 42 objects manager (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -44,14 +44,8 @@
 
     parser = &loader.parser;
 
-    if ( FT_ALLOC( face->ttf_data, 12 ) )
-      goto Exit;
-
-    /* while parsing the font we always update `face->ttf_size' so that */
-    /* even in case of buggy data (which might lead to premature end of */
-    /* scanning without causing an error) the call to `FT_Open_Face' in */
-    /* `T42_Face_Init' passes the correct size                          */
-    face->ttf_size = 12;
+    face->ttf_data = NULL;
+    face->ttf_size = 0;
 
     error = t42_parser_init( parser,
                              face->root.stream,
@@ -152,6 +146,11 @@
 
   Exit:
     t42_loader_done( &loader );
+    if ( error )
+    {
+      FT_FREE( face->ttf_data );
+      face->ttf_size = 0;
+    }
     return error;
   }
 
@@ -510,7 +509,8 @@
 
 
     error = FT_New_Size( t42face->ttf_face, &ttsize );
-    t42size->ttsize = ttsize;
+    if ( !error )
+      t42size->ttsize = ttsize;
 
     FT_Activate_Size( ttsize );
 
@@ -582,6 +582,7 @@
     FT_Face        face    = t42slot->face;
     T42_Face       t42face = (T42_Face)face;
     FT_GlyphSlot   ttslot;
+    FT_Memory      memory  = face->memory;
     FT_Error       error   = FT_Err_Ok;
 
 
@@ -593,9 +594,15 @@
     else
     {
       error = FT_New_GlyphSlot( t42face->ttf_face, &ttslot );
-      slot->ttslot = ttslot;
+      if ( !error )
+        slot->ttslot = ttslot;
     }
 
+    /* share the loader so that the autohinter can see it */
+    FT_GlyphLoader_Done( slot->ttslot->internal->loader );
+    FT_FREE( slot->ttslot->internal );
+    slot->ttslot->internal = t42slot->internal;
+
     return error;
   }
 
@@ -606,6 +613,8 @@
     T42_GlyphSlot  slot = (T42_GlyphSlot)t42slot;
 
 
+    /* do not destroy the inherited internal structure just yet */
+    slot->ttslot->internal = NULL;
     FT_Done_GlyphSlot( slot->ttslot );
   }
 
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42objs.h b/qtbase/src/3rdparty/freetype/src/type42/t42objs.h
index 69f5cffd44..e677996a30 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42objs.h
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42objs.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 objects manager (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42parse.c b/qtbase/src/3rdparty/freetype/src/type42/t42parse.c
index 98507699fa..59cc519ea6 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42parse.c
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42parse.c
@@ -4,7 +4,7 @@
  *
  *   Type 42 font parser (body).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -92,7 +92,7 @@
 #undef  T1CODE
 #define T1CODE        T1_FIELD_LOCATION_BBOX
 
-    T1_FIELD_BBOX("FontBBox", xMin, 0 )
+    T1_FIELD_BBOX( "FontBBox", xMin, 0 )
 
     T1_FIELD_CALLBACK( "FontMatrix",  t42_parse_font_matrix, 0 )
     T1_FIELD_CALLBACK( "Encoding",    t42_parse_encoding,    0 )
@@ -197,7 +197,7 @@
     else
     {
       /* read segment in memory */
-      if ( FT_ALLOC( parser->base_dict, size )       ||
+      if ( FT_QALLOC( parser->base_dict, size )      ||
            FT_STREAM_READ( parser->base_dict, size ) )
         goto Exit;
 
@@ -363,8 +363,8 @@
 
       /* we use a T1_Table to store our charnames */
       loader->num_chars = encode->num_chars = count;
-      if ( FT_NEW_ARRAY( encode->char_index, count )     ||
-           FT_NEW_ARRAY( encode->char_name,  count )     ||
+      if ( FT_QNEW_ARRAY( encode->char_index, count )    ||
+           FT_QNEW_ARRAY( encode->char_name,  count )    ||
            FT_SET_ERROR( psaux->ps_table_funcs->init(
                            char_table, count, memory ) ) )
       {
@@ -538,7 +538,8 @@
     FT_Byte*    limit  = parser->root.limit;
     FT_Error    error;
     FT_Int      num_tables = 0;
-    FT_Long     count;
+    FT_Long     ttf_count;
+    FT_Long     ttf_reserved;
 
     FT_ULong    n, string_size, old_string_size, real_size;
     FT_Byte*    string_buf = NULL;
@@ -546,6 +547,9 @@
 
     T42_Load_Status  status;
 
+    /** There should only be one sfnts array, but free any previous. */
+    FT_FREE( face->ttf_data );
+    face->ttf_size = 0;
 
     /* The format is                                */
     /*                                              */
@@ -574,7 +578,13 @@
     status          = BEFORE_START;
     string_size     = 0;
     old_string_size = 0;
-    count           = 0;
+    ttf_count       = 0;
+    ttf_reserved    = 12;
+    if ( FT_QALLOC( face->ttf_data, ttf_reserved ) )
+      goto Fail;
+
+    FT_TRACE2(( "\n" ));
+    FT_TRACE2(( "t42_parse_sfnts:\n" ));
 
     while ( parser->root.cursor < limit )
     {
@@ -586,6 +596,7 @@
       if ( *cur == ']' )
       {
         parser->root.cursor++;
+        face->ttf_size = ttf_count;
         goto Exit;
       }
 
@@ -611,7 +622,7 @@
           error = FT_THROW( Invalid_File_Format );
           goto Fail;
         }
-        if ( FT_REALLOC( string_buf, old_string_size, string_size ) )
+        if ( FT_QREALLOC( string_buf, old_string_size, string_size ) )
           goto Fail;
 
         allocated = 1;
@@ -680,6 +691,9 @@
         goto Fail;
       }
 
+      FT_TRACE2(( "  PS string size %5lu bytes, offset 0x%08lx (%lu)\n",
+                  string_size, ttf_count, ttf_count ));
+
       /* The whole TTF is now loaded into `string_buf'.  We are */
       /* checking its contents while copying it to `ttf_data'.  */
 
@@ -691,50 +705,64 @@
         {
         case BEFORE_START:
           /* load offset table, 12 bytes */
-          if ( count < 12 )
+          if ( ttf_count < 12 )
           {
-            face->ttf_data[count++] = string_buf[n];
+            face->ttf_data[ttf_count++] = string_buf[n];
             continue;
           }
           else
           {
-            num_tables     = 16 * face->ttf_data[4] + face->ttf_data[5];
-            status         = BEFORE_TABLE_DIR;
-            face->ttf_size = 12 + 16 * num_tables;
+            FT_Long ttf_reserved_prev = ttf_reserved;
+
+
+            num_tables   = 16 * face->ttf_data[4] + face->ttf_data[5];
+            status       = BEFORE_TABLE_DIR;
+            ttf_reserved = 12 + 16 * num_tables;
+
+            FT_TRACE2(( "  SFNT directory contains %d tables\n",
+                        num_tables ));
 
-            if ( (FT_Long)size < face->ttf_size )
+            if ( (FT_Long)size < ttf_reserved )
             {
               FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
               error = FT_THROW( Invalid_File_Format );
               goto Fail;
             }
 
-            if ( FT_REALLOC( face->ttf_data, 12, face->ttf_size ) )
+            if ( FT_QREALLOC( face->ttf_data, ttf_reserved_prev,
+                              ttf_reserved ) )
               goto Fail;
           }
           /* fall through */
 
         case BEFORE_TABLE_DIR:
           /* the offset table is read; read the table directory */
-          if ( count < face->ttf_size )
+          if ( ttf_count < ttf_reserved )
           {
-            face->ttf_data[count++] = string_buf[n];
+            face->ttf_data[ttf_count++] = string_buf[n];
             continue;
           }
           else
           {
             int       i;
             FT_ULong  len;
+            FT_Long ttf_reserved_prev = ttf_reserved;
 
 
+            FT_TRACE2(( "\n" ));
+            FT_TRACE2(( "  table    length\n" ));
+            FT_TRACE2(( "  ------------------------------\n" ));
+
             for ( i = 0; i < num_tables; i++ )
             {
               FT_Byte*  p = face->ttf_data + 12 + 16 * i + 12;
 
 
               len = FT_PEEK_ULONG( p );
+              FT_TRACE2(( "   %4i  0x%08lx (%lu)\n", i, len, len ));
+
               if ( len > size                               ||
-                   face->ttf_size > (FT_Long)( size - len ) )
+                   ttf_reserved > (FT_Long)( size - len ) )
               {
                 FT_ERROR(( "t42_parse_sfnts:"
                            " invalid data in sfnts array\n" ));
@@ -743,26 +771,31 @@
               }
 
               /* Pad to a 4-byte boundary length */
-              face->ttf_size += (FT_Long)( ( len + 3 ) & ~3U );
+              ttf_reserved += (FT_Long)( ( len + 3 ) & ~3U );
             }
+            ttf_reserved += 1;
 
             status = OTHER_TABLES;
 
-            if ( FT_REALLOC( face->ttf_data, 12 + 16 * num_tables,
-                             face->ttf_size + 1 ) )
+            FT_TRACE2(( "\n" ));
+            FT_TRACE2(( "  allocating %ld bytes\n", ttf_reserved ));
+            FT_TRACE2(( "\n" ));
+
+            if ( FT_QREALLOC( face->ttf_data, ttf_reserved_prev,
+                              ttf_reserved ) )
               goto Fail;
           }
           /* fall through */
 
         case OTHER_TABLES:
           /* all other tables are just copied */
-          if ( count >= face->ttf_size )
+          if ( ttf_count >= ttf_reserved )
           {
             FT_ERROR(( "t42_parse_sfnts: too much binary data\n" ));
             error = FT_THROW( Invalid_File_Format );
             goto Fail;
           }
-          face->ttf_data[count++] = string_buf[n];
+          face->ttf_data[ttf_count++] = string_buf[n];
         }
       }
 
@@ -776,6 +809,11 @@
     parser->root.error = error;
 
   Exit:
+    if ( parser->root.error )
+    {
+      FT_FREE( face->ttf_data );
+      face->ttf_size = 0;
+    }
     if ( allocated )
       FT_FREE( string_buf );
   }
@@ -970,9 +1008,9 @@
         name_table->elements[n][len] = '\0';
 
         /* record index of /.notdef */
-        if ( *cur == '.'                                              &&
+        if ( *cur == '.'                                                &&
              ft_strcmp( ".notdef",
-                        (const char*)(name_table->elements[n]) ) == 0 )
+                        (const char*)( name_table->elements[n] ) ) == 0 )
         {
           notdef_index = n;
           notdef_found = 1;
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42parse.h b/qtbase/src/3rdparty/freetype/src/type42/t42parse.h
index 2ccf052d78..fa633e7f1e 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42parse.h
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42parse.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 font parser (specification).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/t42types.h b/qtbase/src/3rdparty/freetype/src/type42/t42types.h
index ba0cc21429..985bdfda98 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/t42types.h
+++ b/qtbase/src/3rdparty/freetype/src/type42/t42types.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 font data types (specification only).
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/type42/type42.c b/qtbase/src/3rdparty/freetype/src/type42/type42.c
index 012559e2fd..ccf5d472b8 100644
--- a/qtbase/src/3rdparty/freetype/src/type42/type42.c
+++ b/qtbase/src/3rdparty/freetype/src/type42/type42.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Type 42 driver component.
  *
- * Copyright (C) 2002-2020 by
+ * Copyright (C) 2002-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/winfonts/fnterrs.h b/qtbase/src/3rdparty/freetype/src/winfonts/fnterrs.h
index 550de386fc..10564e107f 100644
--- a/qtbase/src/3rdparty/freetype/src/winfonts/fnterrs.h
+++ b/qtbase/src/3rdparty/freetype/src/winfonts/fnterrs.h
@@ -4,7 +4,7 @@
  *
  *   Win FNT/FON error codes (specification only).
  *
- * Copyright (C) 2001-2020 by
+ * Copyright (C) 2001-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/qtbase/src/3rdparty/freetype/src/winfonts/module.mk b/qtbase/src/3rdparty/freetype/src/winfonts/module.mk
index 4614c55fd0..7a49201fa8 100644
--- a/qtbase/src/3rdparty/freetype/src/winfonts/module.mk
+++ b/qtbase/src/3rdparty/freetype/src/winfonts/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/winfonts/rules.mk b/qtbase/src/3rdparty/freetype/src/winfonts/rules.mk
index e73ef5ea99..2f67ab45f4 100644
--- a/qtbase/src/3rdparty/freetype/src/winfonts/rules.mk
+++ b/qtbase/src/3rdparty/freetype/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright (C) 1996-2020 by
+# Copyright (C) 1996-2022 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.c b/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.c
index e83312d166..8afd6be6e9 100644
--- a/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.c
+++ b/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.c
@@ -4,7 +4,7 @@
  *
  *   FreeType font driver for Windows FNT/FON files
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * Copyright 2003 Huw D M Davies for Codeweavers
  * Copyright 2007 Dmitry Timoshkov for Codeweavers
@@ -217,7 +217,11 @@
     /* first of all, read the FNT header */
     if ( FT_STREAM_SEEK( font->offset )                        ||
          FT_STREAM_READ_FIELDS( winfnt_header_fields, header ) )
+    {
+      FT_TRACE2(( "  not a Windows FNT file\n" ));
+      error = FT_THROW( Unknown_File_Format );
       goto Exit;
+    }
 
     /* check header */
     if ( header->version != 0x200 &&
@@ -284,7 +288,10 @@
     /* does it begin with an MZ header? */
     if ( FT_STREAM_SEEK( 0 )                                      ||
          FT_STREAM_READ_FIELDS( winmz_header_fields, &mz_header ) )
+    {
+      error = FT_ERR( Unknown_File_Format );
       goto Exit;
+    }
 
     error = FT_ERR( Unknown_File_Format );
     if ( mz_header.magic == WINFNT_MZ_MAGIC )
@@ -345,6 +352,10 @@
 
           count = FT_GET_USHORT_LE();
 
+          FT_TRACE2(( type_id == 0x8007U ? "RT_FONTDIR count %hu\n" :
+                      type_id == 0x8008U ? "RT_FONT count %hu\n" : "",
+                                           count ));
+
           if ( type_id == 0x8008U )
           {
             font_count  = count;
@@ -420,12 +431,12 @@
           goto Exit;
 
         FT_TRACE2(( "magic %04lx, machine %02x, number_of_sections %u, "
-                    "size_of_optional_header %02x\n"
-                    "magic32 %02x, rsrc_virtual_address %04lx, "
-                    "rsrc_size %04lx\n",
+                    "size_of_optional_header %02x\n",
                     pe32_header.magic, pe32_header.machine,
                     pe32_header.number_of_sections,
-                    pe32_header.size_of_optional_header,
+                    pe32_header.size_of_optional_header ));
+        FT_TRACE2(( "magic32 %02x, rsrc_virtual_address %04lx, "
+                    "rsrc_size %04lx\n",
                     pe32_header.magic32, pe32_header.rsrc_virtual_address,
                     pe32_header.rsrc_size ));
 
@@ -478,7 +489,7 @@
                                       &dir_entry1 )                )
             goto Exit;
 
-          if ( !(dir_entry1.offset & 0x80000000UL ) /* DataIsDirectory */ )
+          if ( !( dir_entry1.offset & 0x80000000UL ) /* DataIsDirectory */ )
           {
             error = FT_THROW( Invalid_File_Format );
             goto Exit;
@@ -502,7 +513,7 @@
                                         &dir_entry2 )                )
               goto Exit;
 
-            if ( !(dir_entry2.offset & 0x80000000UL ) /* DataIsDirectory */ )
+            if ( !( dir_entry2.offset & 0x80000000UL ) /* DataIsDirectory */ )
             {
               error = FT_THROW( Invalid_File_Format );
               goto Exit;
@@ -793,7 +804,7 @@
         root->style_flags |= FT_STYLE_FLAG_BOLD;
 
       /* set up the `fixed_sizes' array */
-      if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
+      if ( FT_QNEW( root->available_sizes ) )
         goto Fail;
 
       root->num_fixed_sizes = 1;
@@ -885,10 +896,10 @@
       }
       family_size = font->header.file_size - font->header.face_name_offset;
       /* Some broken fonts don't delimit the face name with a final */
-      /* NULL byte -- the frame is erroneously one byte too small.  */
+      /* null byte -- the frame is erroneously one byte too small.  */
       /* We thus allocate one more byte, setting it explicitly to   */
       /* zero.                                                      */
-      if ( FT_ALLOC( font->family_name, family_size + 1 ) )
+      if ( FT_QALLOC( font->family_name, family_size + 1 ) )
         goto Fail;
 
       FT_MEM_COPY( font->family_name,
@@ -897,9 +908,10 @@
 
       font->family_name[family_size] = '\0';
 
-      if ( FT_REALLOC( font->family_name,
-                       family_size,
-                       ft_strlen( font->family_name ) + 1 ) )
+      /* shrink it to the actual length */
+      if ( FT_QREALLOC( font->family_name,
+                        family_size + 1,
+                        ft_strlen( font->family_name ) + 1 ) )
         goto Fail;
 
       root->family_name = font->family_name;
@@ -1094,7 +1106,7 @@
 
       /* note: since glyphs are stored in columns and not in rows we */
       /*       can't use ft_glyphslot_set_bitmap                     */
-      if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, pitch ) )
+      if ( FT_QALLOC_MULT( bitmap->buffer, bitmap->rows, pitch ) )
         goto Exit;
 
       column = (FT_Byte*)bitmap->buffer;
diff --git a/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.h b/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.h
index 3367c7715e..7e6f5915e7 100644
--- a/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.h
+++ b/qtbase/src/3rdparty/freetype/src/winfonts/winfnt.h
@@ -4,7 +4,7 @@
  *
  *   FreeType font driver for Windows FNT/FON files
  *
- * Copyright (C) 1996-2020 by
+ * Copyright (C) 1996-2022 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * Copyright 2007 Dmitry Timoshkov for Codeweavers
  *
diff --git a/qtbase/src/3rdparty/zlib/CVE-2022-37434.patch b/qtbase/src/3rdparty/zlib/CVE-2022-37434.patch
new file mode 100644
index 0000000000..db2c3ded14
--- /dev/null
+++ b/qtbase/src/3rdparty/zlib/CVE-2022-37434.patch
@@ -0,0 +1,68 @@
+From eff308af425b67093bab25f80f1ae950166bece1 Mon Sep 17 00:00:00 2001
+From: Mark Adler <fork@madler.net>
+Date: Sat, 30 Jul 2022 15:51:11 -0700
+Subject: [PATCH] Fix a bug when getting a gzip header extra field with
+ inflate().
+
+If the extra field was larger than the space the user provided with
+inflateGetHeader(), and if multiple calls of inflate() delivered
+the extra header data, then there could be a buffer overflow of the
+provided space. This commit assures that provided space is not
+exceeded.
+---
+ inflate.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/inflate.c b/inflate.c
+index 7be8c63..7a72897 100644
+--- a/inflate.c
++++ b/inflate.c
+@@ -763,9 +763,10 @@ int flush;
+                 copy = state->length;
+                 if (copy > have) copy = have;
+                 if (copy) {
++                    len = state->head->extra_len - state->length;
+                     if (state->head != Z_NULL &&
+-                        state->head->extra != Z_NULL) {
+-                        len = state->head->extra_len - state->length;
++                        state->head->extra != Z_NULL &&
++                        len < state->head->extra_max) {
+                         zmemcpy(state->head->extra + len, next,
+                                 len + copy > state->head->extra_max ?
+                                 state->head->extra_max - len : copy);
+-- 
+2.37.1
+
+
+From 1eb7682f845ac9e9bf9ae35bbfb3bad5dacbd91d Mon Sep 17 00:00:00 2001
+From: Mark Adler <fork@madler.net>
+Date: Mon, 8 Aug 2022 10:50:09 -0700
+Subject: [PATCH] Fix extra field processing bug that dereferences NULL
+ state->head.
+
+The recent commit to fix a gzip header extra field processing bug
+introduced the new bug fixed here.
+---
+ inflate.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/inflate.c b/inflate.c
+index 7a72897..2a3c4fe 100644
+--- a/inflate.c
++++ b/inflate.c
+@@ -763,10 +763,10 @@ int flush;
+                 copy = state->length;
+                 if (copy > have) copy = have;
+                 if (copy) {
+-                    len = state->head->extra_len - state->length;
+                     if (state->head != Z_NULL &&
+                         state->head->extra != Z_NULL &&
+-                        len < state->head->extra_max) {
++                        (len = state->head->extra_len - state->length) <
++                            state->head->extra_max) {
+                         zmemcpy(state->head->extra + len, next,
+                                 len + copy > state->head->extra_max ?
+                                 state->head->extra_max - len : copy);
+-- 
+2.37.1
+
diff --git a/qtbase/src/3rdparty/zlib/qt_attribution.json b/qtbase/src/3rdparty/zlib/qt_attribution.json
index ea3a476e7b..07bea6ba86 100644
--- a/qtbase/src/3rdparty/zlib/qt_attribution.json
+++ b/qtbase/src/3rdparty/zlib/qt_attribution.json
@@ -6,10 +6,10 @@
 
     "Description": "zlib is a general purpose data compression library.",
     "Homepage": "http://zlib.net/",
-    "Version": "1.2.11",
+    "Version": "1.2.12",
 
     "License": "zlib License",
     "LicenseId": "Zlib",
     "LicenseFile": "LICENSE",
-    "Copyright": "(C) 1995-2017 Jean-loup Gailly and Mark Adler"
+    "Copyright": "(C) 1995-2022 Jean-loup Gailly and Mark Adler"
 }
diff --git a/qtbase/src/3rdparty/zlib/qtpatches.diff b/qtbase/src/3rdparty/zlib/qtpatches.diff
index 105dda967c..681697afb0 100644
--- a/qtbase/src/3rdparty/zlib/qtpatches.diff
+++ b/qtbase/src/3rdparty/zlib/qtpatches.diff
@@ -1,21 +1,21 @@
 diff -ruN orig/ChangeLog src/ChangeLog
---- orig/ChangeLog	2017-08-03 08:25:11.347386101 +0200
-+++ src/ChangeLog	2017-08-03 08:25:21.477268439 +0200
+--- orig/ChangeLog
++++ src/ChangeLog
 @@ -1,6 +1,10 @@
  
                  ChangeLog file for zlib
  
-+Changes in 1.2.11 (Qt) (28 Jul 2017)
++Changes in 1.2.12 (Qt) (28 Mar 2022)
 +- This is a stripped down copy of zlib that contains patches to
 +  make it compile as part of Qt. See also "qtpatches.diff".
 +
- Changes in 1.2.11 (15 Jan 2017)
- - Fix deflate stored bug when pulling last block from window
- - Permit immediate deflateParams changes before any deflate input
+ Changes in 1.2.12 (27 Mar 2022)
+ - Cygwin does not have _wopen(), so do not create gzopen_w() there
+ - Permit a deflateParams() parameter change as soon as possible
 diff -ruN orig/gzguts.h src/gzguts.h
---- orig/gzguts.h	2017-08-03 08:25:11.347386101 +0200
-+++ src/gzguts.h	2017-08-03 08:25:21.477268439 +0200
-@@ -3,6 +3,15 @@
+--- orig/gzguts.h
++++ src/gzguts.h
+@@ -3,6 +3,25 @@
   * For conditions of distribution and use, see copyright notice in zlib.h
   */
  
@@ -26,6 +26,8 @@ diff -ruN orig/gzguts.h src/gzguts.h
 +#  ifndef _CRT_NONSTDC_NO_DEPRECATE
 +#    define _CRT_NONSTDC_NO_DEPRECATE
 +#  endif
++// disable warnings like '=': conversion from 'size_t' to 'unsigned int', possible loss of data
++#  pragma warning(disable: 4267; disable: 4244)
 +#endif
 +
  #ifdef _LARGEFILE64_SOURCE
@@ -43,13 +45,12 @@ diff -ruN orig/gzguts.h src/gzguts.h
 +#define HAVE_HIDDEN
 +#endif
 +
-+
- #ifdef HAVE_HIDDEN
- #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
- #else
+ #ifdef _LARGEFILE64_SOURCE
+ #  ifndef _LARGEFILE_SOURCE
+ #    define _LARGEFILE_SOURCE 1
 diff -ruN orig/README src/README
---- orig/README	2017-08-03 08:25:11.347386101 +0200
-+++ src/README	2017-08-03 08:25:21.477268439 +0200
+--- orig/README
++++ src/README
 @@ -6,6 +6,9 @@
  http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
  rfc1952 (gzip format).
@@ -61,8 +62,8 @@ diff -ruN orig/README src/README
  (volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
  of the library is given in the file test/example.c which also tests that
 diff -ruN orig/zconf.h src/zconf.h
---- orig/zconf.h	2017-08-03 08:25:11.347386101 +0200
-+++ src/zconf.h	2017-08-03 08:25:21.477268439 +0200
+--- orig/zconf.h
++++ src/zconf.h
 @@ -8,6 +8,9 @@
  #ifndef ZCONF_H
  #define ZCONF_H
@@ -91,9 +92,9 @@ diff -ruN orig/zconf.h src/zconf.h
  #endif
  
 diff -ruN orig/zlib.h src/zlib.h
---- orig/zlib.h	2017-08-03 08:25:11.347386101 +0200
-+++ src/zlib.h	2017-08-03 08:25:21.480601733 +0200
-@@ -33,12 +33,16 @@
+--- orig/zlib.h
++++ src/zlib.h
+@@ -33,11 +33,15 @@
  
  #include "zconf.h"
  
@@ -105,17 +106,15 @@ diff -ruN orig/zlib.h src/zlib.h
  extern "C" {
  #endif
  
--#define ZLIB_VERSION "1.2.11"
--#define ZLIB_VERNUM 0x12b0
-+#define ZLIB_VERSION "1.2.11 (Qt)"
-+#define ZLIB_VERNUM 0x12b0f
+-#define ZLIB_VERSION "1.2.12"
++#define ZLIB_VERSION "1.2.12 (Qt)"
+ #define ZLIB_VERNUM 0x12c0
  #define ZLIB_VER_MAJOR 1
  #define ZLIB_VER_MINOR 2
- #define ZLIB_VER_REVISION 11
 diff -ruN orig/zutil.h src/zutil.h
---- orig/zutil.h	2017-08-03 08:25:11.347386101 +0200
-+++ src/zutil.h	2017-08-03 08:30:04.490657570 +0200
-@@ -13,6 +13,15 @@
+--- orig/zutil.h
++++ src/zutil.h
+@@ -13,6 +13,14 @@
  #ifndef ZUTIL_H
  #define ZUTIL_H
  
@@ -126,12 +125,11 @@ diff -ruN orig/zutil.h src/zutil.h
 +#ifdef QT_VISIBILITY_AVAILABLE
 +#define HAVE_HIDDEN
 +#endif
-+
 +
  #ifdef HAVE_HIDDEN
  #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
  #else
-@@ -136,6 +145,11 @@
+@@ -143,6 +151,11 @@
  #    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
  #      include <unix.h> /* for fdopen */
  #    else
@@ -143,7 +141,7 @@ diff -ruN orig/zutil.h src/zutil.h
  #      ifndef fdopen
  #        define fdopen(fd,mode) NULL /* No fdopen() */
  #      endif
-@@ -159,7 +173,7 @@
+@@ -166,7 +179,7 @@
  #  define OS_CODE 18
  #endif
  
diff --git a/qtbase/src/3rdparty/zlib/src/ChangeLog b/qtbase/src/3rdparty/zlib/src/ChangeLog
index 251a32262f..14939b2025 100644
--- a/qtbase/src/3rdparty/zlib/src/ChangeLog
+++ b/qtbase/src/3rdparty/zlib/src/ChangeLog
@@ -1,10 +1,73 @@
 
                 ChangeLog file for zlib
 
-Changes in 1.2.11 (Qt) (28 Jul 2017)
+Changes in 1.2.12 (Qt) (28 Mar 2022)
 - This is a stripped down copy of zlib that contains patches to
   make it compile as part of Qt. See also "qtpatches.diff".
 
+Changes in 1.2.12 (27 Mar 2022)
+- Cygwin does not have _wopen(), so do not create gzopen_w() there
+- Permit a deflateParams() parameter change as soon as possible
+- Limit hash table inserts after switch from stored deflate
+- Fix bug when window full in deflate_stored()
+- Fix CLEAR_HASH macro to be usable as a single statement
+- Avoid a conversion error in gzseek when off_t type too small
+- Have Makefile return non-zero error code on test failure
+- Avoid some conversion warnings in gzread.c and gzwrite.c
+- Update use of errno for newer Windows CE versions
+- Small speedup to inflate [psumbera]
+- Return an error if the gzputs string length can't fit in an int
+- Add address checking in clang to -w option of configure
+- Don't compute check value for raw inflate if asked to validate
+- Handle case where inflateSync used when header never processed
+- Avoid the use of ptrdiff_t
+- Avoid an undefined behavior of memcpy() in gzappend()
+- Avoid undefined behaviors of memcpy() in gz*printf()
+- Avoid an undefined behavior of memcpy() in _tr_stored_block()
+- Make the names in functions declarations identical to definitions
+- Remove old assembler code in which bugs have manifested
+- Fix deflateEnd() to not report an error at start of raw deflate
+- Add legal disclaimer to README
+- Emphasize the need to continue decompressing gzip members
+- Correct the initialization requirements for deflateInit2()
+- Fix a bug that can crash deflate on some input when using Z_FIXED
+- Assure that the number of bits for deflatePrime() is valid
+- Use a structure to make globals in enough.c evident
+- Use a macro for the printf format of big_t in enough.c
+- Clean up code style in enough.c, update version
+- Use inline function instead of macro for index in enough.c
+- Clarify that prefix codes are counted in enough.c
+- Show all the codes for the maximum tables size in enough.c
+- Add gznorm.c example, which normalizes gzip files
+- Fix the zran.c example to work on a multiple-member gzip file
+- Add tables for crc32_combine(), to speed it up by a factor of 200
+- Add crc32_combine_gen() and crc32_combine_op() for fast combines
+- Speed up software CRC-32 computation by a factor of 1.5 to 3
+- Use atomic test and set, if available, for dynamic CRC tables
+- Don't bother computing check value after successful inflateSync()
+- Correct comment in crc32.c
+- Add use of the ARMv8 crc32 instructions when requested
+- Use ARM crc32 instructions if the ARM architecture has them
+- Explicitly note that the 32-bit check values are 32 bits
+- Avoid adding empty gzip member after gzflush with Z_FINISH
+- Fix memory leak on error in gzlog.c
+- Fix error in comment on the polynomial representation of a byte
+- Clarify gz* function interfaces, referring to parameter names
+- Change macro name in inflate.c to avoid collision in VxWorks
+- Correct typo in blast.c
+- Improve portability of contrib/minizip
+- Fix indentation in minizip's zip.c
+- Replace black/white with allow/block. (theresa-m)
+- minizip warning fix if MAXU32 already defined. (gvollant)
+- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner)
+- Clean up minizip to reduce warnings for testing
+- Add fallthrough comments for gcc
+- Eliminate use of ULL constants
+- Separate out address sanitizing from warnings in configure
+- Remove destructive aspects of make distclean
+- Check for cc masquerading as gcc or clang in configure
+- Fix crc32.c to compile local functions only if used
+
 Changes in 1.2.11 (15 Jan 2017)
 - Fix deflate stored bug when pulling last block from window
 - Permit immediate deflateParams changes before any deflate input
@@ -515,7 +578,7 @@ Changes in 1.2.3.5 (8 Jan 2010)
 - Don't use _vsnprintf on later versions of MSVC [Lowman]
 - Add CMake build script and input file [Lowman]
 - Update contrib/minizip to 1.1 [Svensson, Vollant]
-- Moved nintendods directory from contrib to .
+- Moved nintendods directory from contrib to root
 - Replace gzio.c with a new set of routines with the same functionality
 - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
 - Update contrib/minizip to 1.1b
@@ -689,7 +752,7 @@ Changes in 1.2.2.4 (11 July 2005)
 - Be more strict on incomplete code sets in inflate_table() and increase
   ENOUGH and MAXD -- this repairs a possible security vulnerability for
   invalid inflate input.  Thanks to Tavis Ormandy and Markus Oberhumer for
-  discovering the vulnerability and providing test cases.
+  discovering the vulnerability and providing test cases
 - Add ia64 support to configure for HP-UX [Smith]
 - Add error return to gzread() for format or i/o error [Levin]
 - Use malloc.h for OS/2 [Necasek]
@@ -725,7 +788,7 @@ Changes in 1.2.2.2 (30 December 2004)
 - Add Z_FIXED strategy option to deflateInit2() to force fixed trees
 - Add updated make_vms.com [Coghlan], update README
 - Create a new "examples" directory, move gzappend.c there, add zpipe.c,
-  fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
+  fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html
 - Add FAQ entry and comments in deflate.c on uninitialized memory access
 - Add Solaris 9 make options in configure [Gilbert]
 - Allow strerror() usage in gzio.c for STDC
@@ -796,7 +859,7 @@ Changes in 1.2.1.1 (9 January 2004)
 - Fix a big fat bug in inftrees.c that prevented decoding valid
   dynamic blocks with only literals and no distance codes --
   Thanks to "Hot Emu" for the bug report and sample file
-- Add a note to puff.c on no distance codes case.
+- Add a note to puff.c on no distance codes case
 
 Changes in 1.2.1 (17 November 2003)
 - Remove a tab in contrib/gzappend/gzappend.c
@@ -1040,14 +1103,14 @@ Changes in 1.2.0 (9 March 2003)
 - Add contrib/puff/ simple inflate for deflate format description
 
 Changes in 1.1.4 (11 March 2002)
-- ZFREE was repeated on same allocation on some error conditions.
+- ZFREE was repeated on same allocation on some error conditions
   This creates a security problem described in
   http://www.zlib.org/advisory-2002-03-11.txt
 - Returned incorrect error (Z_MEM_ERROR) on some invalid data
 - Avoid accesses before window for invalid distances with inflate window
-  less than 32K.
+  less than 32K
 - force windowBits > 8 to avoid a bug in the encoder for a window size
-  of 256 bytes. (A complete fix will be available in 1.1.5).
+  of 256 bytes. (A complete fix will be available in 1.1.5)
 
 Changes in 1.1.3 (9 July 1998)
 - fix "an inflate input buffer bug that shows up on rare but persistent
@@ -1121,7 +1184,7 @@ Changes in 1.1.1 (27 Feb 98)
 - remove block truncation heuristic which had very marginal effect for zlib
   (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
   compression ratio on some files. This also allows inlining _tr_tally for
-  matches in deflate_slow.
+  matches in deflate_slow
 - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
 
 Changes in 1.1.0 (24 Feb 98)
@@ -1166,7 +1229,7 @@ Changes in 1.0.8 (27 Jan 1998)
 - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
 - use constant arrays for the static trees in trees.c instead of computing
   them at run time (thanks to Ken Raeburn for this suggestion). To create
-  trees.h, compile with GEN_TREES_H and run "make test".
+  trees.h, compile with GEN_TREES_H and run "make test"
 - check return code of example in "make test" and display result
 - pass minigzip command line options to file_compress
 - simplifying code of inflateSync to avoid gcc 2.8 bug
@@ -1205,12 +1268,12 @@ Changes in 1.0.6 (19 Jan 1998)
 - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
   gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
 - Fix a deflate bug occurring only with compression level 0 (thanks to
-  Andy Buckler for finding this one).
-- In minigzip, pass transparently also the first byte for .Z files.
+  Andy Buckler for finding this one)
+- In minigzip, pass transparently also the first byte for .Z files
 - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
 - check Z_FINISH in inflate (thanks to Marc Schluper)
 - Implement deflateCopy (thanks to Adam Costello)
-- make static libraries by default in configure, add --shared option.
+- make static libraries by default in configure, add --shared option
 - move MSDOS or Windows specific files to directory msdos
 - suppress the notion of partial flush to simplify the interface
   (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
@@ -1222,7 +1285,7 @@ Changes in 1.0.6 (19 Jan 1998)
 - added Makefile.nt (thanks to Stephen Williams)
 - added the unsupported "contrib" directory:
    contrib/asm386/ by Gilles Vollant <info@winimage.com>
-        386 asm code replacing longest_match().
+        386 asm code replacing longest_match()
    contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
         A C++ I/O streams interface to the zlib gz* functions
    contrib/iostream2/  by Tyge Løvset <Tyge.Lovset@cmr.no>
@@ -1230,7 +1293,7 @@ Changes in 1.0.6 (19 Jan 1998)
    contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
         A very simple tar.gz file extractor using zlib
    contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
-        How to use compress(), uncompress() and the gz* functions from VB.
+        How to use compress(), uncompress() and the gz* functions from VB
 - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
   level) in minigzip (thanks to Tom Lane)
 
@@ -1239,8 +1302,8 @@ Changes in 1.0.6 (19 Jan 1998)
 - add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
 - add undocumented function zError to convert error code to string
   (for Tim Smithers)
-- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
-- Use default memcpy for Symantec MSDOS compiler.
+- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code
+- Use default memcpy for Symantec MSDOS compiler
 - Add EXPORT keyword for check_func (needed for Windows DLL)
 - add current directory to LD_LIBRARY_PATH for "make test"
 - create also a link for libz.so.1
@@ -1253,7 +1316,7 @@ Changes in 1.0.6 (19 Jan 1998)
 - allow compilation with ANSI keywords only enabled for TurboC in large model
 - avoid "versionString"[0] (Borland bug)
 - add NEED_DUMMY_RETURN for Borland
-- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
+- use variable z_verbose for tracing in debug mode (L. Peter Deutsch)
 - allow compilation with CC
 - defined STDC for OS/2 (David Charlap)
 - limit external names to 8 chars for MVS (Thomas Lund)
@@ -1263,7 +1326,7 @@ Changes in 1.0.6 (19 Jan 1998)
 - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
 - added makelcc.bat for lcc-win32 (Tom St Denis)
 - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
-- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
+- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion
 - check for unistd.h in configure (for off_t)
 - remove useless check parameter in inflate_blocks_free
 - avoid useless assignment of s->check to itself in inflate_blocks_new
@@ -1284,7 +1347,7 @@ Changes in 1.0.5 (3 Jan 98)
 Changes in 1.0.4 (24 Jul 96)
 - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
   bit, so the decompressor could decompress all the correct data but went
-  on to attempt decompressing extra garbage data. This affected minigzip too.
+  on to attempt decompressing extra garbage data. This affected minigzip too
 - zlibVersion and gzerror return const char* (needed for DLL)
 - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
 - use z_error only for DEBUG (avoid problem with DLLs)
@@ -1314,7 +1377,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
 - fix array overlay in deflate.c which sometimes caused bad compressed data
 - fix inflate bug with empty stored block
 - fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generate bad compressed data.
+- fix deflateParams() which could generate bad compressed data
 - Bytef is define'd instead of typedef'ed (work around Borland bug)
 - added an INDEX file
 - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
@@ -1335,7 +1398,7 @@ Changes in 0.99 (27 Jan 96)
 - allow preset dictionary shared between compressor and decompressor
 - allow compression level 0 (no compression)
 - add deflateParams in zlib.h: allow dynamic change of compression level
-  and compression strategy.
+  and compression strategy
 - test large buffers and deflateParams in example.c
 - add optional "configure" to build zlib as a shared library
 - suppress Makefile.qnx, use configure instead
@@ -1377,30 +1440,30 @@ Changes in 0.99 (27 Jan 96)
 - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
 - use Z_BINARY instead of BINARY
 - document that gzclose after gzdopen will close the file
-- allow "a" as mode in gzopen.
+- allow "a" as mode in gzopen
 - fix error checking in gzread
 - allow skipping .gz extra-field on pipes
 - added reference to Perl interface in README
 - put the crc table in FAR data (I dislike more and more the medium model :)
 - added get_crc_table
-- added a dimension to all arrays (Borland C can't count).
+- added a dimension to all arrays (Borland C can't count)
 - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
 - guard against multiple inclusion of *.h (for precompiled header on Mac)
-- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
+- Watcom C pretends to be Microsoft C small model even in 32 bit mode
 - don't use unsized arrays to avoid silly warnings by Visual C++:
      warning C4746: 'inflate_mask' : unsized array treated as  '__far'
-     (what's wrong with far data in far model?).
+     (what's wrong with far data in far model?)
 - define enum out of inflate_blocks_state to allow compilation with C++
 
 Changes in 0.95 (16 Aug 95)
 - fix MSDOS small and medium model (now easier to adapt to any compiler)
 - inlined send_bits
 - fix the final (:-) bug for deflate with flush (output was correct but
-  not completely flushed in rare occasions).
+  not completely flushed in rare occasions)
 - default window size is same for compression and decompression
-  (it's now sufficient to set MAX_WBITS in zconf.h).
+  (it's now sufficient to set MAX_WBITS in zconf.h)
 - voidp -> voidpf and voidnp -> voidp (for consistency with other
-  typedefs and because voidnp was not near in large model).
+  typedefs and because voidnp was not near in large model)
 
 Changes in 0.94 (13 Aug 95)
 - support MSDOS medium model
@@ -1409,12 +1472,12 @@ Changes in 0.94 (13 Aug 95)
 - added support for VMS
 - allow a compression level in gzopen()
 - gzflush now calls fflush
-- For deflate with flush, flush even if no more input is provided.
+- For deflate with flush, flush even if no more input is provided
 - rename libgz.a as libz.a
 - avoid complex expression in infcodes.c triggering Turbo C bug
 - work around a problem with gcc on Alpha (in INSERT_STRING)
 - don't use inline functions (problem with some gcc versions)
-- allow renaming of Byte, uInt, etc... with #define.
+- allow renaming of Byte, uInt, etc... with #define
 - avoid warning about (unused) pointer before start of array in deflate.c
 - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
 - avoid reserved word 'new' in trees.c
@@ -1433,7 +1496,7 @@ Changes in 0.92 (3 May 95)
 - no memcpy on Pyramid
 - suppressed inftest.c
 - optimized fill_window, put longest_match inline for gcc
-- optimized inflate on stored blocks.
+- optimized inflate on stored blocks
 - untabify all sources to simplify patches
 
 Changes in 0.91 (2 May 95)
@@ -1451,7 +1514,7 @@ Changes in 0.9 (1 May 95)
 - let again gzread copy uncompressed data unchanged (was working in 0.71)
 - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
 - added a test of inflateSync in example.c
-- moved MAX_WBITS to zconf.h because users might want to change that.
+- moved MAX_WBITS to zconf.h because users might want to change that
 - document explicitly that zalloc(64K) on MSDOS must return a normalized
   pointer (zero offset)
 - added Makefiles for Microsoft C, Turbo C, Borland C++
@@ -1460,7 +1523,7 @@ Changes in 0.9 (1 May 95)
 Changes in 0.8 (29 April 95)
 - added fast inflate (inffast.c)
 - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
-  is incompatible with previous versions of zlib which returned Z_OK.
+  is incompatible with previous versions of zlib which returned Z_OK
 - work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
   (actually that was not a compiler bug, see 0.81 above)
 - gzread no longer reads one extra byte in certain cases
@@ -1470,50 +1533,50 @@ Changes in 0.8 (29 April 95)
 
 Changes in 0.71 (14 April 95)
 - Fixed more MSDOS compilation problems :( There is still a bug with
-  TurboC large model.
+  TurboC large model
 
 Changes in 0.7 (14 April 95)
-- Added full inflate support.
+- Added full inflate support
 - Simplified the crc32() interface. The pre- and post-conditioning
   (one's complement) is now done inside crc32(). WARNING: this is
-  incompatible with previous versions; see zlib.h for the new usage.
+  incompatible with previous versions; see zlib.h for the new usage
 
 Changes in 0.61 (12 April 95)
-- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
+- workaround for a bug in TurboC. example and minigzip now work on MSDOS
 
 Changes in 0.6 (11 April 95)
 - added minigzip.c
 - added gzdopen to reopen a file descriptor as gzFile
-- added transparent reading of non-gziped files in gzread.
+- added transparent reading of non-gziped files in gzread
 - fixed bug in gzread (don't read crc as data)
-- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
+- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose)
 - don't allocate big arrays in the stack (for MSDOS)
 - fix some MSDOS compilation problems
 
 Changes in 0.5:
 - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
-  not yet Z_FULL_FLUSH.
+  not yet Z_FULL_FLUSH
 - support decompression but only in a single step (forced Z_FINISH)
-- added opaque object for zalloc and zfree.
+- added opaque object for zalloc and zfree
 - added deflateReset and inflateReset
-- added a variable zlib_version for consistency checking.
-- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
-  Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
+- added a variable zlib_version for consistency checking
+- renamed the 'filter' parameter of deflateInit2 as 'strategy'
+  Added Z_FILTERED and Z_HUFFMAN_ONLY constants
 
 Changes in 0.4:
-- avoid "zip" everywhere, use zlib instead of ziplib.
+- avoid "zip" everywhere, use zlib instead of ziplib
 - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
-  if compression method == 8.
+  if compression method == 8
 - added adler32 and crc32
 - renamed deflateOptions as deflateInit2, call one or the other but not both
-- added the method parameter for deflateInit2.
+- added the method parameter for deflateInit2
 - added inflateInit2
 - simplied considerably deflateInit and inflateInit by not supporting
   user-provided history buffer. This is supported only in deflateInit2
-  and inflateInit2.
+  and inflateInit2
 
 Changes in 0.3:
 - prefix all macro names with Z_
-- use Z_FINISH instead of deflateEnd to finish compression.
+- use Z_FINISH instead of deflateEnd to finish compression
 - added Z_HUFFMAN_ONLY
 - added gzerror()
diff --git a/qtbase/src/3rdparty/zlib/src/README b/qtbase/src/3rdparty/zlib/src/README
index 4dc7436a3b..1e4f39181d 100644
--- a/qtbase/src/3rdparty/zlib/src/README
+++ b/qtbase/src/3rdparty/zlib/src/README
@@ -1,6 +1,6 @@
 ZLIB DATA COMPRESSION LIBRARY
 
-zlib 1.2.11 is a general purpose data compression library.  All the code is
+zlib 1.2.12 is a general purpose data compression library.  All the code is
 thread safe.  The data format used by the zlib library is described by RFCs
 (Request for Comments) 1950 to 1952 in the files
 http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
@@ -34,7 +34,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan.  1997
 issue of Dr.  Dobb's Journal; a copy of the article is available at
 http://marknelson.us/1997/01/01/zlib-engine/ .
 
-The changes made in version 1.2.11 are documented in the file ChangeLog.
+The changes made in version 1.2.12 are documented in the file ChangeLog.
 
 Unsupported third party contributions are provided in directory contrib/ .
 
@@ -87,7 +87,7 @@ Acknowledgments:
 
 Copyright notice:
 
- (C) 1995-2017 Jean-loup Gailly and Mark Adler
+ (C) 1995-2022 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -111,7 +111,10 @@ Copyright notice:
 If you use the zlib library in a product, we would appreciate *not* receiving
 lengthy legal documents to sign.  The sources are provided for free but without
 warranty of any kind.  The library has been entirely written by Jean-loup
-Gailly and Mark Adler; it does not include third-party code.
+Gailly and Mark Adler; it does not include third-party code.  We make all
+contributions to and distributions of this project solely in our personal
+capacity, and are not conveying any rights to any intellectual property of
+any third parties.
 
 If you redistribute modified sources, we would appreciate that you include in
 the file ChangeLog history information documenting your changes.  Please read
diff --git a/qtbase/src/3rdparty/zlib/src/crc32.c b/qtbase/src/3rdparty/zlib/src/crc32.c
index 9580440c0e..a1bdce5c23 100644
--- a/qtbase/src/3rdparty/zlib/src/crc32.c
+++ b/qtbase/src/3rdparty/zlib/src/crc32.c
@@ -1,12 +1,10 @@
 /* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  *
- * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
- * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
- * tables for updating the shift register in one step with three exclusive-ors
- * instead of four steps with four exclusive-ors.  This results in about a
- * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ * This interleaved implementation of a CRC makes use of pipelined multiple
+ * arithmetic-logic units, commonly found in modern CPU cores. It is due to
+ * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution.
  */
 
 /* @(#) $Id$ */
@@ -14,11 +12,12 @@
 /*
   Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
   protection on the static variables used to control the first-use generation
-  of the crc tables.  Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+  of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
   first call get_crc_table() to initialize the tables before allowing more than
   one thread to use crc32().
 
-  DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+  MAKECRCH can be #defined to write out crc32.h. A main() routine is also
+  produced, so that this one source file can be compiled to an executable.
  */
 
 #ifdef MAKECRCH
@@ -28,415 +27,1090 @@
 #  endif /* !DYNAMIC_CRC_TABLE */
 #endif /* MAKECRCH */
 
-#include "zutil.h"      /* for STDC and FAR definitions */
+#include "zutil.h"      /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */
 
-/* Definitions for doing the crc four data bytes at a time. */
-#if !defined(NOBYFOUR) && defined(Z_U4)
-#  define BYFOUR
+ /*
+  A CRC of a message is computed on N braids of words in the message, where
+  each word consists of W bytes (4 or 8). If N is 3, for example, then three
+  running sparse CRCs are calculated respectively on each braid, at these
+  indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ...
+  This is done starting at a word boundary, and continues until as many blocks
+  of N * W bytes as are available have been processed. The results are combined
+  into a single CRC at the end. For this code, N must be in the range 1..6 and
+  W must be 4 or 8. The upper limit on N can be increased if desired by adding
+  more #if blocks, extending the patterns apparent in the code. In addition,
+  crc32.h would need to be regenerated, if the maximum N value is increased.
+
+  N and W are chosen empirically by benchmarking the execution time on a given
+  processor. The choices for N and W below were based on testing on Intel Kaby
+  Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64
+  Octeon II processors. The Intel, AMD, and ARM processors were all fastest
+  with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4.
+  They were all tested with either gcc or clang, all using the -O3 optimization
+  level. Your mileage may vary.
+ */
+
+/* Define N */
+#ifdef Z_TESTN
+#  define N Z_TESTN
+#else
+#  define N 5
+#endif
+#if N < 1 || N > 6
+#  error N must be in 1..6
 #endif
-#ifdef BYFOUR
-   local unsigned long crc32_little OF((unsigned long,
-                        const unsigned char FAR *, z_size_t));
-   local unsigned long crc32_big OF((unsigned long,
-                        const unsigned char FAR *, z_size_t));
-#  define TBLS 8
+
+/*
+  z_crc_t must be at least 32 bits. z_word_t must be at least as long as
+  z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and
+  that bytes are eight bits.
+ */
+
+/*
+  Define W and the associated z_word_t type. If W is not defined, then a
+  braided calculation is not used, and the associated tables and code are not
+  compiled.
+ */
+#ifdef Z_TESTW
+#  if Z_TESTW-1 != -1
+#    define W Z_TESTW
+#  endif
 #else
-#  define TBLS 1
-#endif /* BYFOUR */
+#  ifdef MAKECRCH
+#    define W 8         /* required for MAKECRCH */
+#  else
+#    if defined(__x86_64__) || defined(__aarch64__)
+#      define W 8
+#    else
+#      define W 4
+#    endif
+#  endif
+#endif
+#ifdef W
+#  if W == 8 && defined(Z_U8)
+     typedef Z_U8 z_word_t;
+#  elif defined(Z_U4)
+#    undef W
+#    define W 4
+     typedef Z_U4 z_word_t;
+#  else
+#    undef W
+#  endif
+#endif
 
-/* Local functions for crc concatenation */
-local unsigned long gf2_matrix_times OF((unsigned long *mat,
-                                         unsigned long vec));
-local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
-local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+/* Local functions. */
+local z_crc_t multmodp OF((z_crc_t a, z_crc_t b));
+local z_crc_t x2nmodp OF((z_off64_t n, unsigned k));
 
+/* If available, use the ARM processor CRC32 instruction. */
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
+#  define ARMCRC32
+#endif
+
+#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE))
+/*
+  Swap the bytes in a z_word_t to convert between little and big endian. Any
+  self-respecting compiler will optimize this to a single machine byte-swap
+  instruction, if one is available. This assumes that word_t is either 32 bits
+  or 64 bits.
+ */
+local z_word_t byte_swap(word)
+    z_word_t word;
+{
+#  if W == 8
+    return
+        (word & 0xff00000000000000) >> 56 |
+        (word & 0xff000000000000) >> 40 |
+        (word & 0xff0000000000) >> 24 |
+        (word & 0xff00000000) >> 8 |
+        (word & 0xff000000) << 8 |
+        (word & 0xff0000) << 24 |
+        (word & 0xff00) << 40 |
+        (word & 0xff) << 56;
+#  else   /* W == 4 */
+    return
+        (word & 0xff000000) >> 24 |
+        (word & 0xff0000) >> 8 |
+        (word & 0xff00) << 8 |
+        (word & 0xff) << 24;
+#  endif
+}
+#endif
+
+/* CRC polynomial. */
+#define POLY 0xedb88320         /* p(x) reflected, with x^32 implied */
 
 #ifdef DYNAMIC_CRC_TABLE
 
-local volatile int crc_table_empty = 1;
-local z_crc_t FAR crc_table[TBLS][256];
+local z_crc_t FAR crc_table[256];
+local z_crc_t FAR x2n_table[32];
 local void make_crc_table OF((void));
+#ifdef W
+   local z_word_t FAR crc_big_table[256];
+   local z_crc_t FAR crc_braid_table[W][256];
+   local z_word_t FAR crc_braid_big_table[W][256];
+   local void braid OF((z_crc_t [][256], z_word_t [][256], int, int));
+#endif
 #ifdef MAKECRCH
-   local void write_table OF((FILE *, const z_crc_t FAR *));
+   local void write_table OF((FILE *, const z_crc_t FAR *, int));
+   local void write_table32hi OF((FILE *, const z_word_t FAR *, int));
+   local void write_table64 OF((FILE *, const z_word_t FAR *, int));
 #endif /* MAKECRCH */
+
+/*
+  Define a once() function depending on the availability of atomics. If this is
+  compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in
+  multiple threads, and if atomics are not available, then get_crc_table() must
+  be called to initialize the tables and must return before any threads are
+  allowed to compute or combine CRCs.
+ */
+
+/* Definition of once functionality. */
+typedef struct once_s once_t;
+local void once OF((once_t *, void (*)(void)));
+
+/* Check for the availability of atomics. */
+#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
+    !defined(__STDC_NO_ATOMICS__)
+
+#include <stdatomic.h>
+
+/* Structure for once(), which must be initialized with ONCE_INIT. */
+struct once_s {
+    atomic_flag begun;
+    atomic_int done;
+};
+#define ONCE_INIT {ATOMIC_FLAG_INIT, 0}
+
+/*
+  Run the provided init() function exactly once, even if multiple threads
+  invoke once() at the same time. The state must be a once_t initialized with
+  ONCE_INIT.
+ */
+local void once(state, init)
+    once_t *state;
+    void (*init)(void);
+{
+    if (!atomic_load(&state->done)) {
+        if (atomic_flag_test_and_set(&state->begun))
+            while (!atomic_load(&state->done))
+                ;
+        else {
+            init();
+            atomic_store(&state->done, 1);
+        }
+    }
+}
+
+#else   /* no atomics */
+
+/* Structure for once(), which must be initialized with ONCE_INIT. */
+struct once_s {
+    volatile int begun;
+    volatile int done;
+};
+#define ONCE_INIT {0, 0}
+
+/* Test and set. Alas, not atomic, but tries to minimize the period of
+   vulnerability. */
+local int test_and_set OF((int volatile *));
+local int test_and_set(flag)
+    int volatile *flag;
+{
+    int was;
+
+    was = *flag;
+    *flag = 1;
+    return was;
+}
+
+/* Run the provided init() function once. This is not thread-safe. */
+local void once(state, init)
+    once_t *state;
+    void (*init)(void);
+{
+    if (!state->done) {
+        if (test_and_set(&state->begun))
+            while (!state->done)
+                ;
+        else {
+            init();
+            state->done = 1;
+        }
+    }
+}
+
+#endif
+
+/* State for once(). */
+local once_t made = ONCE_INIT;
+
 /*
   Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
   x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
 
   Polynomials over GF(2) are represented in binary, one bit per coefficient,
-  with the lowest powers in the most significant bit.  Then adding polynomials
+  with the lowest powers in the most significant bit. Then adding polynomials
   is just exclusive-or, and multiplying a polynomial by x is a right shift by
-  one.  If we call the above polynomial p, and represent a byte as the
+  one. If we call the above polynomial p, and represent a byte as the
   polynomial q, also with the lowest power in the most significant bit (so the
-  byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
+  byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p,
   where a mod b means the remainder after dividing a by b.
 
   This calculation is done using the shift-register method of multiplying and
-  taking the remainder.  The register is initialized to zero, and for each
+  taking the remainder. The register is initialized to zero, and for each
   incoming bit, x^32 is added mod p to the register if the bit is a one (where
-  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
-  x (which is shifting right by one and adding x^32 mod p if the bit shifted
-  out is a one).  We start with the highest power (least significant bit) of
-  q and repeat for all eight bits of q.
-
-  The first table is simply the CRC of all possible eight bit values.  This is
-  all the information needed to generate CRCs on data a byte at a time for all
-  combinations of CRC register values and incoming bytes.  The remaining tables
-  allow for word-at-a-time CRC calculation for both big-endian and little-
-  endian machines, where a word is four bytes.
-*/
+  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x
+  (which is shifting right by one and adding x^32 mod p if the bit shifted out
+  is a one). We start with the highest power (least significant bit) of q and
+  repeat for all eight bits of q.
+
+  The table is simply the CRC of all possible eight bit values. This is all the
+  information needed to generate CRCs on data a byte at a time for all
+  combinations of CRC register values and incoming bytes.
+ */
+
 local void make_crc_table()
 {
-    z_crc_t c;
-    int n, k;
-    z_crc_t poly;                       /* polynomial exclusive-or pattern */
-    /* terms of polynomial defining this crc (except x^32): */
-    static volatile int first = 1;      /* flag to limit concurrent making */
-    static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
-
-    /* See if another task is already doing this (not thread-safe, but better
-       than nothing -- significantly reduces duration of vulnerability in
-       case the advice about DYNAMIC_CRC_TABLE is ignored) */
-    if (first) {
-        first = 0;
-
-        /* make exclusive-or pattern from polynomial (0xedb88320UL) */
-        poly = 0;
-        for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
-            poly |= (z_crc_t)1 << (31 - p[n]);
-
-        /* generate a crc for every 8-bit value */
-        for (n = 0; n < 256; n++) {
-            c = (z_crc_t)n;
-            for (k = 0; k < 8; k++)
-                c = c & 1 ? poly ^ (c >> 1) : c >> 1;
-            crc_table[0][n] = c;
-        }
+    unsigned i, j, n;
+    z_crc_t p;
 
-#ifdef BYFOUR
-        /* generate crc for each value followed by one, two, and three zeros,
-           and then the byte reversal of those as well as the first table */
-        for (n = 0; n < 256; n++) {
-            c = crc_table[0][n];
-            crc_table[4][n] = ZSWAP32(c);
-            for (k = 1; k < 4; k++) {
-                c = crc_table[0][c & 0xff] ^ (c >> 8);
-                crc_table[k][n] = c;
-                crc_table[k + 4][n] = ZSWAP32(c);
-            }
-        }
-#endif /* BYFOUR */
-
-        crc_table_empty = 0;
-    }
-    else {      /* not first */
-        /* wait for the other guy to finish (not efficient, but rare) */
-        while (crc_table_empty)
-            ;
+    /* initialize the CRC of bytes tables */
+    for (i = 0; i < 256; i++) {
+        p = i;
+        for (j = 0; j < 8; j++)
+            p = p & 1 ? (p >> 1) ^ POLY : p >> 1;
+        crc_table[i] = p;
+#ifdef W
+        crc_big_table[i] = byte_swap(p);
+#endif
     }
 
+    /* initialize the x^2^n mod p(x) table */
+    p = (z_crc_t)1 << 30;         /* x^1 */
+    x2n_table[0] = p;
+    for (n = 1; n < 32; n++)
+        x2n_table[n] = p = multmodp(p, p);
+
+#ifdef W
+    /* initialize the braiding tables -- needs x2n_table[] */
+    braid(crc_braid_table, crc_braid_big_table, N, W);
+#endif
+
 #ifdef MAKECRCH
-    /* write out CRC tables to crc32.h */
     {
+        /*
+          The crc32.h header file contains tables for both 32-bit and 64-bit
+          z_word_t's, and so requires a 64-bit type be available. In that case,
+          z_word_t must be defined to be 64-bits. This code then also generates
+          and writes out the tables for the case that z_word_t is 32 bits.
+         */
+#if !defined(W) || W != 8
+#  error Need a 64-bit integer type in order to generate crc32.h.
+#endif
         FILE *out;
+        int k, n;
+        z_crc_t ltl[8][256];
+        z_word_t big[8][256];
 
         out = fopen("crc32.h", "w");
         if (out == NULL) return;
-        fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
-        fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
-        fprintf(out, "local const z_crc_t FAR ");
-        fprintf(out, "crc_table[TBLS][256] =\n{\n  {\n");
-        write_table(out, crc_table[0]);
-#  ifdef BYFOUR
-        fprintf(out, "#ifdef BYFOUR\n");
-        for (k = 1; k < 8; k++) {
-            fprintf(out, "  },\n  {\n");
-            write_table(out, crc_table[k]);
+
+        /* write out little-endian CRC table to crc32.h */
+        fprintf(out,
+            "/* crc32.h -- tables for rapid CRC calculation\n"
+            " * Generated automatically by crc32.c\n */\n"
+            "\n"
+            "local const z_crc_t FAR crc_table[] = {\n"
+            "    ");
+        write_table(out, crc_table, 256);
+        fprintf(out,
+            "};\n");
+
+        /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */
+        fprintf(out,
+            "\n"
+            "#ifdef W\n"
+            "\n"
+            "#if W == 8\n"
+            "\n"
+            "local const z_word_t FAR crc_big_table[] = {\n"
+            "    ");
+        write_table64(out, crc_big_table, 256);
+        fprintf(out,
+            "};\n");
+
+        /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */
+        fprintf(out,
+            "\n"
+            "#else /* W == 4 */\n"
+            "\n"
+            "local const z_word_t FAR crc_big_table[] = {\n"
+            "    ");
+        write_table32hi(out, crc_big_table, 256);
+        fprintf(out,
+            "};\n"
+            "\n"
+            "#endif\n");
+
+        /* write out braid tables for each value of N */
+        for (n = 1; n <= 6; n++) {
+            fprintf(out,
+            "\n"
+            "#if N == %d\n", n);
+
+            /* compute braid tables for this N and 64-bit word_t */
+            braid(ltl, big, n, 8);
+
+            /* write out braid tables for 64-bit z_word_t to crc32.h */
+            fprintf(out,
+            "\n"
+            "#if W == 8\n"
+            "\n"
+            "local const z_crc_t FAR crc_braid_table[][256] = {\n");
+            for (k = 0; k < 8; k++) {
+                fprintf(out, "   {");
+                write_table(out, ltl[k], 256);
+                fprintf(out, "}%s", k < 7 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n"
+            "\n"
+            "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
+            for (k = 0; k < 8; k++) {
+                fprintf(out, "   {");
+                write_table64(out, big[k], 256);
+                fprintf(out, "}%s", k < 7 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n");
+
+            /* compute braid tables for this N and 32-bit word_t */
+            braid(ltl, big, n, 4);
+
+            /* write out braid tables for 32-bit z_word_t to crc32.h */
+            fprintf(out,
+            "\n"
+            "#else /* W == 4 */\n"
+            "\n"
+            "local const z_crc_t FAR crc_braid_table[][256] = {\n");
+            for (k = 0; k < 4; k++) {
+                fprintf(out, "   {");
+                write_table(out, ltl[k], 256);
+                fprintf(out, "}%s", k < 3 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n"
+            "\n"
+            "local const z_word_t FAR crc_braid_big_table[][256] = {\n");
+            for (k = 0; k < 4; k++) {
+                fprintf(out, "   {");
+                write_table32hi(out, big[k], 256);
+                fprintf(out, "}%s", k < 3 ? ",\n" : "");
+            }
+            fprintf(out,
+            "};\n"
+            "\n"
+            "#endif\n"
+            "\n"
+            "#endif\n");
         }
-        fprintf(out, "#endif\n");
-#  endif /* BYFOUR */
-        fprintf(out, "  }\n};\n");
+        fprintf(out,
+            "\n"
+            "#endif\n");
+
+        /* write out zeros operator table to crc32.h */
+        fprintf(out,
+            "\n"
+            "local const z_crc_t FAR x2n_table[] = {\n"
+            "    ");
+        write_table(out, x2n_table, 32);
+        fprintf(out,
+            "};\n");
         fclose(out);
     }
 #endif /* MAKECRCH */
 }
 
 #ifdef MAKECRCH
-local void write_table(out, table)
+
+/*
+   Write the 32-bit values in table[0..k-1] to out, five per line in
+   hexadecimal separated by commas.
+ */
+local void write_table(out, table, k)
     FILE *out;
     const z_crc_t FAR *table;
+    int k;
 {
     int n;
 
-    for (n = 0; n < 256; n++)
-        fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ",
+    for (n = 0; n < k; n++)
+        fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : "    ",
                 (unsigned long)(table[n]),
-                n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+                n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
 }
+
+/*
+   Write the high 32-bits of each value in table[0..k-1] to out, five per line
+   in hexadecimal separated by commas.
+ */
+local void write_table32hi(out, table, k)
+FILE *out;
+const z_word_t FAR *table;
+int k;
+{
+    int n;
+
+    for (n = 0; n < k; n++)
+        fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : "    ",
+                (unsigned long)(table[n] >> 32),
+                n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", "));
+}
+
+/*
+  Write the 64-bit values in table[0..k-1] to out, three per line in
+  hexadecimal separated by commas. This assumes that if there is a 64-bit
+  type, then there is also a long long integer type, and it is at least 64
+  bits. If not, then the type cast and format string can be adjusted
+  accordingly.
+ */
+local void write_table64(out, table, k)
+    FILE *out;
+    const z_word_t FAR *table;
+    int k;
+{
+    int n;
+
+    for (n = 0; n < k; n++)
+        fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : "    ",
+                (unsigned long long)(table[n]),
+                n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", "));
+}
+
+/* Actually do the deed. */
+int main()
+{
+    make_crc_table();
+    return 0;
+}
+
 #endif /* MAKECRCH */
 
+#ifdef W
+/*
+  Generate the little and big-endian braid tables for the given n and z_word_t
+  size w. Each array must have room for w blocks of 256 elements.
+ */
+local void braid(ltl, big, n, w)
+    z_crc_t ltl[][256];
+    z_word_t big[][256];
+    int n;
+    int w;
+{
+    int k;
+    z_crc_t i, p, q;
+    for (k = 0; k < w; k++) {
+        p = x2nmodp((n * w + 3 - k) << 3, 0);
+        ltl[k][0] = 0;
+        big[w - 1 - k][0] = 0;
+        for (i = 1; i < 256; i++) {
+            ltl[k][i] = q = multmodp(i << 24, p);
+            big[w - 1 - k][i] = byte_swap(q);
+        }
+    }
+}
+#endif
+
 #else /* !DYNAMIC_CRC_TABLE */
 /* ========================================================================
- * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ * Tables for byte-wise and braided CRC-32 calculations, and a table of powers
+ * of x for combining CRC-32s, all made by make_crc_table().
  */
 #include "crc32.h"
 #endif /* DYNAMIC_CRC_TABLE */
 
+/* ========================================================================
+ * Routines used for CRC calculation. Some are also required for the table
+ * generation above.
+ */
+
+/*
+  Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
+  reflected. For speed, this requires that a not be zero.
+ */
+local z_crc_t multmodp(a, b)
+    z_crc_t a;
+    z_crc_t b;
+{
+    z_crc_t m, p;
+
+    m = (z_crc_t)1 << 31;
+    p = 0;
+    for (;;) {
+        if (a & m) {
+            p ^= b;
+            if ((a & (m - 1)) == 0)
+                break;
+        }
+        m >>= 1;
+        b = b & 1 ? (b >> 1) ^ POLY : b >> 1;
+    }
+    return p;
+}
+
+/*
+  Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
+  initialized.
+ */
+local z_crc_t x2nmodp(n, k)
+    z_off64_t n;
+    unsigned k;
+{
+    z_crc_t p;
+
+    p = (z_crc_t)1 << 31;           /* x^0 == 1 */
+    while (n) {
+        if (n & 1)
+            p = multmodp(x2n_table[k & 31], p);
+        n >>= 1;
+        k++;
+    }
+    return p;
+}
+
 /* =========================================================================
- * This function can be used by asm versions of crc32()
+ * This function can be used by asm versions of crc32(), and to force the
+ * generation of the CRC tables in a threaded application.
  */
 const z_crc_t FAR * ZEXPORT get_crc_table()
 {
 #ifdef DYNAMIC_CRC_TABLE
-    if (crc_table_empty)
-        make_crc_table();
+    once(&made, make_crc_table);
 #endif /* DYNAMIC_CRC_TABLE */
     return (const z_crc_t FAR *)crc_table;
 }
 
-/* ========================================================================= */
-#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
-#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+/* =========================================================================
+ * Use ARM machine instructions if available. This will compute the CRC about
+ * ten times faster than the braided calculation. This code does not check for
+ * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will
+ * only be defined if the compilation specifies an ARM processor architecture
+ * that has the instructions. For example, compiling with -march=armv8.1-a or
+ * -march=armv8-a+crc, or -march=native if the compile machine has the crc32
+ * instructions.
+ */
+#ifdef ARMCRC32
+
+/*
+   Constants empirically determined to maximize speed. These values are from
+   measurements on a Cortex-A57. Your mileage may vary.
+ */
+#define Z_BATCH 3990                /* number of words in a batch */
+#define Z_BATCH_ZEROS 0xa10d3d0c    /* computed from Z_BATCH = 3990 */
+#define Z_BATCH_MIN 800             /* fewest words in a final batch */
 
-/* ========================================================================= */
 unsigned long ZEXPORT crc32_z(crc, buf, len)
     unsigned long crc;
     const unsigned char FAR *buf;
     z_size_t len;
 {
-    if (buf == Z_NULL) return 0UL;
+    z_crc_t val;
+    z_word_t crc1, crc2;
+    const z_word_t *word;
+    z_word_t val0, val1, val2;
+    z_size_t last, last2, i;
+    z_size_t num;
+
+    /* Return initial CRC, if requested. */
+    if (buf == Z_NULL) return 0;
 
 #ifdef DYNAMIC_CRC_TABLE
-    if (crc_table_empty)
-        make_crc_table();
+    once(&made, make_crc_table);
 #endif /* DYNAMIC_CRC_TABLE */
 
-#ifdef BYFOUR
-    if (sizeof(void *) == sizeof(ptrdiff_t)) {
-        z_crc_t endian;
+    /* Pre-condition the CRC */
+    crc ^= 0xffffffff;
 
-        endian = 1;
-        if (*((unsigned char *)(&endian)))
-            return crc32_little(crc, buf, len);
-        else
-            return crc32_big(crc, buf, len);
+    /* Compute the CRC up to a word boundary. */
+    while (len && ((z_size_t)buf & 7) != 0) {
+        len--;
+        val = *buf++;
+        __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
     }
-#endif /* BYFOUR */
-    crc = crc ^ 0xffffffffUL;
-    while (len >= 8) {
-        DO8;
-        len -= 8;
+
+    /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */
+    word = (z_word_t const *)buf;
+    num = len >> 3;
+    len &= 7;
+
+    /* Do three interleaved CRCs to realize the throughput of one crc32x
+       instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three
+       CRCs are combined into a single CRC after each set of batches. */
+    while (num >= 3 * Z_BATCH) {
+        crc1 = 0;
+        crc2 = 0;
+        for (i = 0; i < Z_BATCH; i++) {
+            val0 = word[i];
+            val1 = word[i + Z_BATCH];
+            val2 = word[i + 2 * Z_BATCH];
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
+        }
+        word += 3 * Z_BATCH;
+        num -= 3 * Z_BATCH;
+        crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1;
+        crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2;
     }
-    if (len) do {
-        DO1;
-    } while (--len);
-    return crc ^ 0xffffffffUL;
-}
 
-/* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
-    unsigned long crc;
-    const unsigned char FAR *buf;
-    uInt len;
-{
-    return crc32_z(crc, buf, len);
+    /* Do one last smaller batch with the remaining words, if there are enough
+       to pay for the combination of CRCs. */
+    last = num / 3;
+    if (last >= Z_BATCH_MIN) {
+        last2 = last << 1;
+        crc1 = 0;
+        crc2 = 0;
+        for (i = 0; i < last; i++) {
+            val0 = word[i];
+            val1 = word[i + last];
+            val2 = word[i + last2];
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1));
+            __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2));
+        }
+        word += 3 * last;
+        num -= 3 * last;
+        val = x2nmodp(last, 6);
+        crc = multmodp(val, crc) ^ crc1;
+        crc = multmodp(val, crc) ^ crc2;
+    }
+
+    /* Compute the CRC on any remaining words. */
+    for (i = 0; i < num; i++) {
+        val0 = word[i];
+        __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0));
+    }
+    word += num;
+
+    /* Complete the CRC on any remaining bytes. */
+    buf = (const unsigned char FAR *)word;
+    while (len) {
+        len--;
+        val = *buf++;
+        __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val));
+    }
+
+    /* Return the CRC, post-conditioned. */
+    return crc ^ 0xffffffff;
 }
 
-#ifdef BYFOUR
+#else
+
+#ifdef W
 
 /*
-   This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
-   integer pointer type. This violates the strict aliasing rule, where a
-   compiler can assume, for optimization purposes, that two pointers to
-   fundamentally different types won't ever point to the same memory. This can
-   manifest as a problem only if one of the pointers is written to. This code
-   only reads from those pointers. So long as this code remains isolated in
-   this compilation unit, there won't be a problem. For this reason, this code
-   should not be copied and pasted into a compilation unit in which other code
-   writes to the buffer that is passed to these routines.
+  Return the CRC of the W bytes in the word_t data, taking the
+  least-significant byte of the word as the first byte of data, without any pre
+  or post conditioning. This is used to combine the CRCs of each braid.
  */
+local z_crc_t crc_word(data)
+    z_word_t data;
+{
+    int k;
+    for (k = 0; k < W; k++)
+        data = (data >> 8) ^ crc_table[data & 0xff];
+    return (z_crc_t)data;
+}
 
-/* ========================================================================= */
-#define DOLIT4 c ^= *buf4++; \
-        c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
-            crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
-#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+local z_word_t crc_word_big(data)
+    z_word_t data;
+{
+    int k;
+    for (k = 0; k < W; k++)
+        data = (data << 8) ^
+            crc_big_table[(data >> ((W - 1) << 3)) & 0xff];
+    return data;
+}
+
+#endif
 
 /* ========================================================================= */
-local unsigned long crc32_little(crc, buf, len)
+unsigned long ZEXPORT crc32_z(crc, buf, len)
     unsigned long crc;
     const unsigned char FAR *buf;
     z_size_t len;
 {
-    register z_crc_t c;
-    register const z_crc_t FAR *buf4;
+    /* Return initial CRC, if requested. */
+    if (buf == Z_NULL) return 0;
 
-    c = (z_crc_t)crc;
-    c = ~c;
-    while (len && ((ptrdiff_t)buf & 3)) {
-        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
-        len--;
-    }
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
 
-    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
-    while (len >= 32) {
-        DOLIT32;
-        len -= 32;
-    }
-    while (len >= 4) {
-        DOLIT4;
-        len -= 4;
-    }
-    buf = (const unsigned char FAR *)buf4;
+    /* Pre-condition the CRC */
+    crc ^= 0xffffffff;
 
-    if (len) do {
-        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
-    } while (--len);
-    c = ~c;
-    return (unsigned long)c;
-}
+#ifdef W
 
-/* ========================================================================= */
-#define DOBIG4 c ^= *buf4++; \
-        c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
-            crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
-#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+    /* If provided enough bytes, do a braided CRC calculation. */
+    if (len >= N * W + W - 1) {
+        z_size_t blks;
+        z_word_t const *words;
+        unsigned endian;
+        int k;
 
-/* ========================================================================= */
-local unsigned long crc32_big(crc, buf, len)
-    unsigned long crc;
-    const unsigned char FAR *buf;
-    z_size_t len;
-{
-    register z_crc_t c;
-    register const z_crc_t FAR *buf4;
+        /* Compute the CRC up to a z_word_t boundary. */
+        while (len && ((z_size_t)buf & (W - 1)) != 0) {
+            len--;
+            crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        }
 
-    c = ZSWAP32((z_crc_t)crc);
-    c = ~c;
-    while (len && ((ptrdiff_t)buf & 3)) {
-        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
-        len--;
+        /* Compute the CRC on as many N z_word_t blocks as are available. */
+        blks = len / (N * W);
+        len -= blks * N * W;
+        words = (z_word_t const *)buf;
+
+        /* Do endian check at execution time instead of compile time, since ARM
+           processors can change the endianess at execution time. If the
+           compiler knows what the endianess will be, it can optimize out the
+           check and the unused branch. */
+        endian = 1;
+        if (*(unsigned char *)&endian) {
+            /* Little endian. */
+
+            z_crc_t crc0;
+            z_word_t word0;
+#if N > 1
+            z_crc_t crc1;
+            z_word_t word1;
+#if N > 2
+            z_crc_t crc2;
+            z_word_t word2;
+#if N > 3
+            z_crc_t crc3;
+            z_word_t word3;
+#if N > 4
+            z_crc_t crc4;
+            z_word_t word4;
+#if N > 5
+            z_crc_t crc5;
+            z_word_t word5;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /* Initialize the CRC for each braid. */
+            crc0 = crc;
+#if N > 1
+            crc1 = 0;
+#if N > 2
+            crc2 = 0;
+#if N > 3
+            crc3 = 0;
+#if N > 4
+            crc4 = 0;
+#if N > 5
+            crc5 = 0;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /*
+              Process the first blks-1 blocks, computing the CRCs on each braid
+              independently.
+             */
+            while (--blks) {
+                /* Load the word for each braid into registers. */
+                word0 = crc0 ^ words[0];
+#if N > 1
+                word1 = crc1 ^ words[1];
+#if N > 2
+                word2 = crc2 ^ words[2];
+#if N > 3
+                word3 = crc3 ^ words[3];
+#if N > 4
+                word4 = crc4 ^ words[4];
+#if N > 5
+                word5 = crc5 ^ words[5];
+#endif
+#endif
+#endif
+#endif
+#endif
+                words += N;
+
+                /* Compute and update the CRC for each word. The loop should
+                   get unrolled. */
+                crc0 = crc_braid_table[0][word0 & 0xff];
+#if N > 1
+                crc1 = crc_braid_table[0][word1 & 0xff];
+#if N > 2
+                crc2 = crc_braid_table[0][word2 & 0xff];
+#if N > 3
+                crc3 = crc_braid_table[0][word3 & 0xff];
+#if N > 4
+                crc4 = crc_braid_table[0][word4 & 0xff];
+#if N > 5
+                crc5 = crc_braid_table[0][word5 & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                for (k = 1; k < W; k++) {
+                    crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff];
+#if N > 1
+                    crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff];
+#if N > 2
+                    crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff];
+#if N > 3
+                    crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff];
+#if N > 4
+                    crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff];
+#if N > 5
+                    crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                }
+            }
+
+            /*
+              Process the last block, combining the CRCs of the N braids at the
+              same time.
+             */
+            crc = crc_word(crc0 ^ words[0]);
+#if N > 1
+            crc = crc_word(crc1 ^ words[1] ^ crc);
+#if N > 2
+            crc = crc_word(crc2 ^ words[2] ^ crc);
+#if N > 3
+            crc = crc_word(crc3 ^ words[3] ^ crc);
+#if N > 4
+            crc = crc_word(crc4 ^ words[4] ^ crc);
+#if N > 5
+            crc = crc_word(crc5 ^ words[5] ^ crc);
+#endif
+#endif
+#endif
+#endif
+#endif
+            words += N;
+        }
+        else {
+            /* Big endian. */
+
+            z_word_t crc0, word0, comb;
+#if N > 1
+            z_word_t crc1, word1;
+#if N > 2
+            z_word_t crc2, word2;
+#if N > 3
+            z_word_t crc3, word3;
+#if N > 4
+            z_word_t crc4, word4;
+#if N > 5
+            z_word_t crc5, word5;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /* Initialize the CRC for each braid. */
+            crc0 = byte_swap(crc);
+#if N > 1
+            crc1 = 0;
+#if N > 2
+            crc2 = 0;
+#if N > 3
+            crc3 = 0;
+#if N > 4
+            crc4 = 0;
+#if N > 5
+            crc5 = 0;
+#endif
+#endif
+#endif
+#endif
+#endif
+
+            /*
+              Process the first blks-1 blocks, computing the CRCs on each braid
+              independently.
+             */
+            while (--blks) {
+                /* Load the word for each braid into registers. */
+                word0 = crc0 ^ words[0];
+#if N > 1
+                word1 = crc1 ^ words[1];
+#if N > 2
+                word2 = crc2 ^ words[2];
+#if N > 3
+                word3 = crc3 ^ words[3];
+#if N > 4
+                word4 = crc4 ^ words[4];
+#if N > 5
+                word5 = crc5 ^ words[5];
+#endif
+#endif
+#endif
+#endif
+#endif
+                words += N;
+
+                /* Compute and update the CRC for each word. The loop should
+                   get unrolled. */
+                crc0 = crc_braid_big_table[0][word0 & 0xff];
+#if N > 1
+                crc1 = crc_braid_big_table[0][word1 & 0xff];
+#if N > 2
+                crc2 = crc_braid_big_table[0][word2 & 0xff];
+#if N > 3
+                crc3 = crc_braid_big_table[0][word3 & 0xff];
+#if N > 4
+                crc4 = crc_braid_big_table[0][word4 & 0xff];
+#if N > 5
+                crc5 = crc_braid_big_table[0][word5 & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                for (k = 1; k < W; k++) {
+                    crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff];
+#if N > 1
+                    crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff];
+#if N > 2
+                    crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff];
+#if N > 3
+                    crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff];
+#if N > 4
+                    crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff];
+#if N > 5
+                    crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff];
+#endif
+#endif
+#endif
+#endif
+#endif
+                }
+            }
+
+            /*
+              Process the last block, combining the CRCs of the N braids at the
+              same time.
+             */
+            comb = crc_word_big(crc0 ^ words[0]);
+#if N > 1
+            comb = crc_word_big(crc1 ^ words[1] ^ comb);
+#if N > 2
+            comb = crc_word_big(crc2 ^ words[2] ^ comb);
+#if N > 3
+            comb = crc_word_big(crc3 ^ words[3] ^ comb);
+#if N > 4
+            comb = crc_word_big(crc4 ^ words[4] ^ comb);
+#if N > 5
+            comb = crc_word_big(crc5 ^ words[5] ^ comb);
+#endif
+#endif
+#endif
+#endif
+#endif
+            words += N;
+            crc = byte_swap(comb);
+        }
+
+        /*
+          Update the pointer to the remaining bytes to process.
+         */
+        buf = (unsigned char const *)words;
     }
 
-    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
-    while (len >= 32) {
-        DOBIG32;
-        len -= 32;
+#endif /* W */
+
+    /* Complete the computation of the CRC on any remaining bytes. */
+    while (len >= 8) {
+        len -= 8;
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
     }
-    while (len >= 4) {
-        DOBIG4;
-        len -= 4;
+    while (len) {
+        len--;
+        crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff];
     }
-    buf = (const unsigned char FAR *)buf4;
 
-    if (len) do {
-        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
-    } while (--len);
-    c = ~c;
-    return (unsigned long)(ZSWAP32(c));
+    /* Return the CRC, post-conditioned. */
+    return crc ^ 0xffffffff;
 }
 
-#endif /* BYFOUR */
-
-#define GF2_DIM 32      /* dimension of GF(2) vectors (length of CRC) */
+#endif
 
 /* ========================================================================= */
-local unsigned long gf2_matrix_times(mat, vec)
-    unsigned long *mat;
-    unsigned long vec;
+unsigned long ZEXPORT crc32(crc, buf, len)
+    unsigned long crc;
+    const unsigned char FAR *buf;
+    uInt len;
 {
-    unsigned long sum;
-
-    sum = 0;
-    while (vec) {
-        if (vec & 1)
-            sum ^= *mat;
-        vec >>= 1;
-        mat++;
-    }
-    return sum;
+    return crc32_z(crc, buf, len);
 }
 
 /* ========================================================================= */
-local void gf2_matrix_square(square, mat)
-    unsigned long *square;
-    unsigned long *mat;
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+    uLong crc1;
+    uLong crc2;
+    z_off64_t len2;
 {
-    int n;
-
-    for (n = 0; n < GF2_DIM; n++)
-        square[n] = gf2_matrix_times(mat, mat[n]);
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+    return multmodp(x2nmodp(len2, 3), crc1) ^ crc2;
 }
 
 /* ========================================================================= */
-local uLong crc32_combine_(crc1, crc2, len2)
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
     uLong crc1;
     uLong crc2;
-    z_off64_t len2;
+    z_off_t len2;
 {
-    int n;
-    unsigned long row;
-    unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */
-    unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */
-
-    /* degenerate case (also disallow negative lengths) */
-    if (len2 <= 0)
-        return crc1;
-
-    /* put operator for one zero bit in odd */
-    odd[0] = 0xedb88320UL;          /* CRC-32 polynomial */
-    row = 1;
-    for (n = 1; n < GF2_DIM; n++) {
-        odd[n] = row;
-        row <<= 1;
-    }
+    return crc32_combine64(crc1, crc2, len2);
+}
 
-    /* put operator for two zero bits in even */
-    gf2_matrix_square(even, odd);
-
-    /* put operator for four zero bits in odd */
-    gf2_matrix_square(odd, even);
-
-    /* apply len2 zeros to crc1 (first square will put the operator for one
-       zero byte, eight zero bits, in even) */
-    do {
-        /* apply zeros operator for this bit of len2 */
-        gf2_matrix_square(even, odd);
-        if (len2 & 1)
-            crc1 = gf2_matrix_times(even, crc1);
-        len2 >>= 1;
-
-        /* if no more bits set, then done */
-        if (len2 == 0)
-            break;
-
-        /* another iteration of the loop with odd and even swapped */
-        gf2_matrix_square(odd, even);
-        if (len2 & 1)
-            crc1 = gf2_matrix_times(odd, crc1);
-        len2 >>= 1;
-
-        /* if no more bits set, then done */
-    } while (len2 != 0);
-
-    /* return combined crc */
-    crc1 ^= crc2;
-    return crc1;
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine_gen64(len2)
+    z_off64_t len2;
+{
+#ifdef DYNAMIC_CRC_TABLE
+    once(&made, make_crc_table);
+#endif /* DYNAMIC_CRC_TABLE */
+    return x2nmodp(len2, 3);
 }
 
 /* ========================================================================= */
-uLong ZEXPORT crc32_combine(crc1, crc2, len2)
-    uLong crc1;
-    uLong crc2;
+uLong ZEXPORT crc32_combine_gen(len2)
     z_off_t len2;
 {
-    return crc32_combine_(crc1, crc2, len2);
+    return crc32_combine_gen64(len2);
 }
 
-uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+/* ========================================================================= */
+uLong crc32_combine_op(crc1, crc2, op)
     uLong crc1;
     uLong crc2;
-    z_off64_t len2;
+    uLong op;
 {
-    return crc32_combine_(crc1, crc2, len2);
+    return multmodp(op, crc1) ^ crc2;
 }
diff --git a/qtbase/src/3rdparty/zlib/src/crc32.h b/qtbase/src/3rdparty/zlib/src/crc32.h
index 9e0c778102..137df68d61 100644
--- a/qtbase/src/3rdparty/zlib/src/crc32.h
+++ b/qtbase/src/3rdparty/zlib/src/crc32.h
@@ -2,440 +2,9445 @@
  * Generated automatically by crc32.c
  */
 
-local const z_crc_t FAR crc_table[TBLS][256] =
-{
-  {
-    0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
-    0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
-    0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
-    0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
-    0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
-    0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
-    0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
-    0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
-    0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
-    0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
-    0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
-    0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
-    0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
-    0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
-    0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
-    0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
-    0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
-    0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
-    0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
-    0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
-    0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
-    0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
-    0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
-    0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
-    0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
-    0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
-    0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
-    0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
-    0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
-    0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
-    0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
-    0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
-    0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
-    0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
-    0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
-    0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
-    0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
-    0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
-    0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
-    0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
-    0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
-    0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
-    0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
-    0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
-    0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
-    0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
-    0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
-    0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
-    0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
-    0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
-    0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
-    0x2d02ef8dUL
-#ifdef BYFOUR
-  },
-  {
-    0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
-    0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
-    0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
-    0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
-    0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
-    0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
-    0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
-    0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
-    0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
-    0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
-    0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
-    0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
-    0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
-    0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
-    0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
-    0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
-    0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
-    0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
-    0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
-    0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
-    0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
-    0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
-    0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
-    0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
-    0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
-    0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
-    0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
-    0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
-    0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
-    0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
-    0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
-    0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
-    0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
-    0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
-    0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
-    0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
-    0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
-    0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
-    0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
-    0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
-    0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
-    0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
-    0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
-    0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
-    0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
-    0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
-    0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
-    0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
-    0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
-    0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
-    0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
-    0x9324fd72UL
-  },
-  {
-    0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
-    0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
-    0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
-    0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
-    0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
-    0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
-    0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
-    0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
-    0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
-    0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
-    0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
-    0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
-    0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
-    0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
-    0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
-    0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
-    0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
-    0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
-    0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
-    0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
-    0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
-    0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
-    0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
-    0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
-    0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
-    0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
-    0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
-    0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
-    0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
-    0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
-    0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
-    0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
-    0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
-    0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
-    0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
-    0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
-    0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
-    0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
-    0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
-    0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
-    0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
-    0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
-    0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
-    0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
-    0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
-    0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
-    0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
-    0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
-    0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
-    0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
-    0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
-    0xbe9834edUL
-  },
-  {
-    0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
-    0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
-    0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
-    0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
-    0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
-    0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
-    0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
-    0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
-    0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
-    0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
-    0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
-    0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
-    0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
-    0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
-    0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
-    0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
-    0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
-    0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
-    0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
-    0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
-    0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
-    0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
-    0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
-    0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
-    0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
-    0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
-    0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
-    0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
-    0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
-    0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
-    0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
-    0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
-    0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
-    0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
-    0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
-    0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
-    0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
-    0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
-    0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
-    0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
-    0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
-    0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
-    0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
-    0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
-    0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
-    0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
-    0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
-    0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
-    0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
-    0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
-    0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
-    0xde0506f1UL
-  },
-  {
-    0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
-    0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
-    0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
-    0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
-    0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
-    0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
-    0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
-    0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
-    0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
-    0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
-    0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
-    0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
-    0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
-    0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
-    0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
-    0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
-    0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
-    0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
-    0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
-    0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
-    0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
-    0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
-    0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
-    0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
-    0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
-    0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
-    0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
-    0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
-    0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
-    0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
-    0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
-    0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
-    0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
-    0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
-    0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
-    0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
-    0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
-    0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
-    0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
-    0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
-    0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
-    0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
-    0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
-    0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
-    0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
-    0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
-    0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
-    0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
-    0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
-    0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
-    0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
-    0x8def022dUL
-  },
-  {
-    0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
-    0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
-    0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
-    0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
-    0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
-    0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
-    0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
-    0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
-    0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
-    0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
-    0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
-    0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
-    0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
-    0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
-    0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
-    0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
-    0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
-    0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
-    0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
-    0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
-    0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
-    0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
-    0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
-    0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
-    0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
-    0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
-    0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
-    0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
-    0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
-    0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
-    0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
-    0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
-    0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
-    0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
-    0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
-    0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
-    0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
-    0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
-    0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
-    0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
-    0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
-    0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
-    0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
-    0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
-    0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
-    0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
-    0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
-    0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
-    0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
-    0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
-    0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
-    0x72fd2493UL
-  },
-  {
-    0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
-    0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
-    0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
-    0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
-    0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
-    0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
-    0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
-    0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
-    0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
-    0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
-    0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
-    0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
-    0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
-    0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
-    0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
-    0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
-    0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
-    0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
-    0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
-    0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
-    0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
-    0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
-    0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
-    0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
-    0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
-    0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
-    0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
-    0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
-    0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
-    0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
-    0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
-    0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
-    0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
-    0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
-    0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
-    0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
-    0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
-    0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
-    0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
-    0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
-    0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
-    0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
-    0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
-    0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
-    0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
-    0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
-    0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
-    0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
-    0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
-    0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
-    0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
-    0xed3498beUL
-  },
-  {
-    0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
-    0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
-    0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
-    0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
-    0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
-    0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
-    0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
-    0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
-    0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
-    0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
-    0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
-    0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
-    0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
-    0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
-    0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
-    0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
-    0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
-    0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
-    0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
-    0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
-    0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
-    0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
-    0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
-    0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
-    0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
-    0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
-    0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
-    0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
-    0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
-    0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
-    0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
-    0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
-    0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
-    0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
-    0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
-    0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
-    0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
-    0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
-    0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
-    0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
-    0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
-    0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
-    0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
-    0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
-    0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
-    0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
-    0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
-    0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
-    0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
-    0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
-    0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
-    0xf10605deUL
+local const z_crc_t FAR crc_table[] = {
+    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+    0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+    0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+    0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+    0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+    0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+    0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+    0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+    0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+    0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+    0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+    0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+    0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+    0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+    0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+    0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+    0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+    0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+    0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+    0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+    0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+    0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+    0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+    0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+    0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+    0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+    0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+    0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+    0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+    0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+    0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+    0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+    0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+    0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+    0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+    0x2d02ef8d};
+
+#ifdef W
+
+#if W == 8
+
+local const z_word_t FAR crc_big_table[] = {
+    0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
+    0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
+    0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
+    0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
+    0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
+    0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
+    0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
+    0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
+    0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
+    0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
+    0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
+    0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
+    0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
+    0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
+    0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
+    0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
+    0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
+    0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
+    0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
+    0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
+    0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
+    0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
+    0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
+    0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
+    0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
+    0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
+    0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
+    0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
+    0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
+    0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
+    0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
+    0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
+    0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
+    0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
+    0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
+    0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
+    0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
+    0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
+    0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
+    0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
+    0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
+    0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
+    0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
+    0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
+    0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
+    0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
+    0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
+    0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
+    0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
+    0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
+    0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
+    0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
+    0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
+    0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
+    0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
+    0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
+    0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
+    0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
+    0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
+    0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
+    0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
+    0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
+    0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
+    0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
+    0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
+    0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
+    0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
+    0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
+    0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
+    0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
+    0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
+    0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
+    0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
+    0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
+    0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
+    0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
+    0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
+    0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
+    0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
+    0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
+    0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
+    0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
+    0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
+    0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
+    0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
+    0x8def022d00000000};
+
+#else /* W == 4 */
+
+local const z_word_t FAR crc_big_table[] = {
+    0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
+    0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
+    0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
+    0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
+    0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
+    0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
+    0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
+    0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
+    0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
+    0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
+    0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
+    0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
+    0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
+    0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
+    0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
+    0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
+    0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
+    0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
+    0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
+    0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
+    0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
+    0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
+    0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
+    0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
+    0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
+    0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
+    0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
+    0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
+    0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
+    0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
+    0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
+    0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
+    0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
+    0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
+    0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
+    0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
+    0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
+    0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
+    0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
+    0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
+    0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
+    0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
+    0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
+    0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
+    0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
+    0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
+    0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
+    0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
+    0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
+    0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
+    0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
+    0x8def022d};
+
+#endif
+
+#if N == 1
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
+    0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
+    0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
+    0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
+    0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
+    0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
+    0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
+    0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
+    0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
+    0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
+    0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
+    0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
+    0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
+    0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
+    0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
+    0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
+    0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
+    0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
+    0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
+    0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
+    0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
+    0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
+    0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
+    0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
+    0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
+    0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
+    0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
+    0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
+    0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
+    0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
+    0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
+    0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
+    0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
+    0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
+    0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
+    0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
+    0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
+    0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
+    0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
+    0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
+    0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
+    0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
+    0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
+    0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
+    0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
+    0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
+    0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
+    0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
+    0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
+    0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
+    0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
+    0x264b06e6},
+   {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
+    0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
+    0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
+    0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
+    0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
+    0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
+    0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
+    0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
+    0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
+    0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
+    0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
+    0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
+    0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
+    0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
+    0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
+    0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
+    0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
+    0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
+    0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
+    0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
+    0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
+    0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
+    0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
+    0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
+    0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
+    0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
+    0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
+    0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
+    0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
+    0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
+    0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
+    0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
+    0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
+    0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
+    0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
+    0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
+    0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
+    0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
+    0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
+    0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
+    0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
+    0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
+    0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
+    0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
+    0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
+    0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
+    0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
+    0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
+    0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
+    0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
+    0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
+    0x92364a30},
+   {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
+    0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
+    0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
+    0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
+    0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
+    0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
+    0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
+    0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
+    0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
+    0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
+    0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
+    0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
+    0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
+    0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
+    0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
+    0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
+    0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
+    0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
+    0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
+    0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
+    0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
+    0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
+    0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
+    0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
+    0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
+    0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
+    0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
+    0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
+    0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
+    0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
+    0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
+    0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
+    0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
+    0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
+    0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
+    0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
+    0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
+    0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
+    0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
+    0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
+    0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
+    0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
+    0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
+    0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
+    0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
+    0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
+    0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
+    0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
+    0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
+    0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
+    0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
+    0xe4c4abcc},
+   {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
+    0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
+    0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
+    0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
+    0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
+    0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
+    0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
+    0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
+    0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
+    0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
+    0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
+    0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
+    0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
+    0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
+    0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
+    0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
+    0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
+    0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
+    0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
+    0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
+    0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
+    0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
+    0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
+    0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
+    0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
+    0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
+    0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
+    0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
+    0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
+    0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
+    0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
+    0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
+    0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
+    0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
+    0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
+    0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
+    0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
+    0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
+    0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
+    0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
+    0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
+    0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
+    0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
+    0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
+    0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
+    0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
+    0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
+    0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
+    0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
+    0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
+    0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
+    0xca64c78c},
+   {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
+    0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
+    0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
+    0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
+    0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
+    0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
+    0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
+    0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
+    0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
+    0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
+    0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
+    0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
+    0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
+    0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
+    0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
+    0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
+    0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
+    0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
+    0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
+    0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
+    0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
+    0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
+    0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
+    0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
+    0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
+    0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
+    0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
+    0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
+    0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
+    0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
+    0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
+    0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
+    0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
+    0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
+    0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
+    0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
+    0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
+    0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
+    0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
+    0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
+    0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
+    0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
+    0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
+    0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
+    0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
+    0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
+    0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
+    0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
+    0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
+    0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
+    0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
+    0xde0506f1},
+   {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
+    0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
+    0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
+    0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
+    0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
+    0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
+    0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
+    0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
+    0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
+    0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
+    0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
+    0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
+    0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
+    0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
+    0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
+    0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
+    0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
+    0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
+    0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
+    0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
+    0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
+    0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
+    0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
+    0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
+    0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
+    0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
+    0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
+    0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
+    0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
+    0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
+    0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
+    0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
+    0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
+    0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
+    0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
+    0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
+    0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
+    0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
+    0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
+    0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
+    0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
+    0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
+    0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
+    0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
+    0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
+    0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
+    0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
+    0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
+    0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
+    0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
+    0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
+    0xbe9834ed},
+   {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
+    0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
+    0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
+    0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
+    0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
+    0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
+    0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
+    0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
+    0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
+    0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
+    0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
+    0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
+    0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
+    0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
+    0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
+    0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
+    0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
+    0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
+    0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
+    0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
+    0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
+    0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
+    0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
+    0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
+    0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
+    0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
+    0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
+    0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
+    0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
+    0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
+    0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
+    0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
+    0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
+    0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
+    0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
+    0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
+    0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
+    0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
+    0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
+    0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
+    0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
+    0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
+    0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
+    0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
+    0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
+    0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
+    0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
+    0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
+    0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
+    0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
+    0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
+    0x9324fd72},
+   {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+    0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+    0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+    0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+    0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+    0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+    0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+    0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+    0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+    0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+    0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+    0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+    0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+    0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+    0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+    0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+    0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+    0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+    0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+    0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+    0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+    0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+    0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+    0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+    0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+    0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+    0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+    0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+    0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+    0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+    0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+    0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+    0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+    0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+    0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+    0x2d02ef8d}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000,
+    0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000,
+    0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000,
+    0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000,
+    0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000,
+    0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000,
+    0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000,
+    0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000,
+    0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000,
+    0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000,
+    0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000,
+    0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000,
+    0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000,
+    0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000,
+    0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000,
+    0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000,
+    0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000,
+    0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000,
+    0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000,
+    0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000,
+    0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000,
+    0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000,
+    0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000,
+    0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000,
+    0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000,
+    0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000,
+    0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000,
+    0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000,
+    0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000,
+    0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000,
+    0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000,
+    0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000,
+    0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000,
+    0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000,
+    0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000,
+    0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000,
+    0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000,
+    0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000,
+    0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000,
+    0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000,
+    0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000,
+    0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000,
+    0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000,
+    0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000,
+    0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000,
+    0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000,
+    0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000,
+    0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000,
+    0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000,
+    0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000,
+    0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000,
+    0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000,
+    0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000,
+    0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000,
+    0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000,
+    0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000,
+    0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000,
+    0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000,
+    0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000,
+    0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000,
+    0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000,
+    0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000,
+    0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000,
+    0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000,
+    0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000,
+    0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000,
+    0x8567077200000000, 0x1357000500000000, 0x824abf9500000000,
+    0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000,
+    0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000,
+    0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000,
+    0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000,
+    0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000,
+    0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000,
+    0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000,
+    0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000,
+    0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000,
+    0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000,
+    0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000,
+    0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000,
+    0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000,
+    0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000,
+    0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000,
+    0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000,
+    0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000,
+    0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000,
+    0x8def022d00000000},
+   {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000,
+    0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000,
+    0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000,
+    0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000,
+    0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000,
+    0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000,
+    0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000,
+    0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000,
+    0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000,
+    0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000,
+    0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000,
+    0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000,
+    0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000,
+    0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000,
+    0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000,
+    0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000,
+    0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000,
+    0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000,
+    0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000,
+    0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000,
+    0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000,
+    0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000,
+    0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000,
+    0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000,
+    0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000,
+    0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000,
+    0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000,
+    0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000,
+    0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000,
+    0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000,
+    0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000,
+    0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000,
+    0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000,
+    0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000,
+    0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000,
+    0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000,
+    0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000,
+    0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000,
+    0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000,
+    0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000,
+    0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000,
+    0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000,
+    0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000,
+    0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000,
+    0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000,
+    0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000,
+    0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000,
+    0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000,
+    0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000,
+    0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000,
+    0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000,
+    0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000,
+    0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000,
+    0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000,
+    0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000,
+    0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000,
+    0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000,
+    0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000,
+    0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000,
+    0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000,
+    0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000,
+    0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000,
+    0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000,
+    0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000,
+    0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000,
+    0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000,
+    0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000,
+    0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000,
+    0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000,
+    0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000,
+    0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000,
+    0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000,
+    0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000,
+    0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000,
+    0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000,
+    0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000,
+    0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000,
+    0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000,
+    0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000,
+    0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000,
+    0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000,
+    0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000,
+    0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000,
+    0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000,
+    0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000,
+    0x72fd249300000000},
+   {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000,
+    0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000,
+    0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000,
+    0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000,
+    0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000,
+    0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000,
+    0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000,
+    0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000,
+    0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000,
+    0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000,
+    0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000,
+    0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000,
+    0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000,
+    0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000,
+    0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000,
+    0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000,
+    0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000,
+    0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000,
+    0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000,
+    0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000,
+    0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000,
+    0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000,
+    0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000,
+    0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000,
+    0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000,
+    0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000,
+    0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000,
+    0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000,
+    0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000,
+    0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000,
+    0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000,
+    0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000,
+    0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000,
+    0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000,
+    0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000,
+    0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000,
+    0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000,
+    0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000,
+    0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000,
+    0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000,
+    0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000,
+    0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000,
+    0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000,
+    0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000,
+    0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000,
+    0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000,
+    0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000,
+    0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000,
+    0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000,
+    0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000,
+    0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000,
+    0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000,
+    0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000,
+    0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000,
+    0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000,
+    0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000,
+    0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000,
+    0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000,
+    0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000,
+    0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000,
+    0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000,
+    0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000,
+    0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000,
+    0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000,
+    0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000,
+    0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000,
+    0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000,
+    0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000,
+    0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000,
+    0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000,
+    0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000,
+    0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000,
+    0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000,
+    0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000,
+    0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000,
+    0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000,
+    0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000,
+    0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000,
+    0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000,
+    0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000,
+    0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000,
+    0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000,
+    0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000,
+    0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000,
+    0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000,
+    0xed3498be00000000},
+   {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000,
+    0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000,
+    0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000,
+    0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000,
+    0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000,
+    0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000,
+    0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000,
+    0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000,
+    0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000,
+    0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000,
+    0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000,
+    0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000,
+    0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000,
+    0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000,
+    0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000,
+    0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000,
+    0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000,
+    0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000,
+    0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000,
+    0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000,
+    0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000,
+    0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000,
+    0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000,
+    0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000,
+    0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000,
+    0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000,
+    0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000,
+    0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000,
+    0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000,
+    0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000,
+    0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000,
+    0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000,
+    0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000,
+    0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000,
+    0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000,
+    0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000,
+    0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000,
+    0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000,
+    0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000,
+    0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000,
+    0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000,
+    0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000,
+    0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000,
+    0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000,
+    0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000,
+    0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000,
+    0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000,
+    0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000,
+    0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000,
+    0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000,
+    0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000,
+    0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000,
+    0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000,
+    0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000,
+    0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000,
+    0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000,
+    0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000,
+    0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000,
+    0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000,
+    0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000,
+    0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000,
+    0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000,
+    0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000,
+    0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000,
+    0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000,
+    0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000,
+    0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000,
+    0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000,
+    0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000,
+    0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000,
+    0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000,
+    0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000,
+    0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000,
+    0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000,
+    0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000,
+    0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000,
+    0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000,
+    0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000,
+    0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000,
+    0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000,
+    0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000,
+    0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000,
+    0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000,
+    0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000,
+    0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000,
+    0xf10605de00000000},
+   {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000,
+    0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000,
+    0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000,
+    0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000,
+    0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000,
+    0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000,
+    0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000,
+    0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000,
+    0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000,
+    0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000,
+    0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000,
+    0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000,
+    0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000,
+    0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000,
+    0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000,
+    0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000,
+    0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000,
+    0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000,
+    0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000,
+    0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000,
+    0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000,
+    0x572f712300000000, 0x4958f35800000000, 0xf971936500000000,
+    0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000,
+    0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000,
+    0x8813836800000000, 0x383ae35500000000, 0xe840431200000000,
+    0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000,
+    0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000,
+    0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000,
+    0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000,
+    0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000,
+    0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000,
+    0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000,
+    0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000,
+    0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000,
+    0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000,
+    0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000,
+    0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000,
+    0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000,
+    0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000,
+    0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000,
+    0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000,
+    0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000,
+    0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000,
+    0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000,
+    0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000,
+    0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000,
+    0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000,
+    0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000,
+    0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000,
+    0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000,
+    0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000,
+    0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000,
+    0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000,
+    0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000,
+    0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000,
+    0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000,
+    0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000,
+    0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000,
+    0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000,
+    0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000,
+    0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000,
+    0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000,
+    0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000,
+    0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000,
+    0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000,
+    0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000,
+    0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000,
+    0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000,
+    0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000,
+    0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000,
+    0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000,
+    0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000,
+    0x983485b900000000, 0x281de58400000000, 0xf86745c300000000,
+    0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000,
+    0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000,
+    0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000,
+    0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000,
+    0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000,
+    0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000,
+    0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000,
+    0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000,
+    0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000,
+    0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000,
+    0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000,
+    0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000,
+    0x8cc764ca00000000},
+   {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000,
+    0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000,
+    0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000,
+    0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000,
+    0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000,
+    0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000,
+    0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000,
+    0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000,
+    0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000,
+    0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000,
+    0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000,
+    0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000,
+    0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000,
+    0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000,
+    0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000,
+    0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000,
+    0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000,
+    0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000,
+    0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000,
+    0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000,
+    0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000,
+    0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000,
+    0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000,
+    0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000,
+    0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000,
+    0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000,
+    0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000,
+    0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000,
+    0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000,
+    0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000,
+    0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000,
+    0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000,
+    0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000,
+    0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000,
+    0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000,
+    0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000,
+    0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000,
+    0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000,
+    0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000,
+    0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000,
+    0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000,
+    0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000,
+    0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000,
+    0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000,
+    0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000,
+    0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000,
+    0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000,
+    0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000,
+    0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000,
+    0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000,
+    0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000,
+    0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000,
+    0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000,
+    0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000,
+    0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000,
+    0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000,
+    0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000,
+    0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000,
+    0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000,
+    0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000,
+    0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000,
+    0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000,
+    0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000,
+    0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000,
+    0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000,
+    0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000,
+    0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000,
+    0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000,
+    0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000,
+    0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000,
+    0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000,
+    0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000,
+    0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000,
+    0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000,
+    0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000,
+    0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000,
+    0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000,
+    0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000,
+    0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000,
+    0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000,
+    0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000,
+    0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000,
+    0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000,
+    0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000,
+    0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000,
+    0xccabc4e400000000},
+   {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000,
+    0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000,
+    0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000,
+    0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000,
+    0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000,
+    0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000,
+    0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000,
+    0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000,
+    0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000,
+    0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000,
+    0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000,
+    0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000,
+    0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000,
+    0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000,
+    0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000,
+    0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000,
+    0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000,
+    0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000,
+    0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000,
+    0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000,
+    0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000,
+    0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000,
+    0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000,
+    0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000,
+    0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000,
+    0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000,
+    0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000,
+    0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000,
+    0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000,
+    0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000,
+    0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000,
+    0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000,
+    0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000,
+    0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000,
+    0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000,
+    0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000,
+    0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000,
+    0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000,
+    0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000,
+    0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000,
+    0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000,
+    0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000,
+    0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000,
+    0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000,
+    0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000,
+    0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000,
+    0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000,
+    0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000,
+    0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000,
+    0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000,
+    0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000,
+    0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000,
+    0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000,
+    0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000,
+    0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000,
+    0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000,
+    0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000,
+    0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000,
+    0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000,
+    0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000,
+    0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000,
+    0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000,
+    0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000,
+    0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000,
+    0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000,
+    0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000,
+    0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000,
+    0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000,
+    0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000,
+    0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000,
+    0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000,
+    0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000,
+    0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000,
+    0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000,
+    0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000,
+    0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000,
+    0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000,
+    0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000,
+    0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000,
+    0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000,
+    0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000,
+    0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000,
+    0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000,
+    0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000,
+    0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000,
+    0x304a369200000000},
+   {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000,
+    0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000,
+    0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000,
+    0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000,
+    0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000,
+    0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000,
+    0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000,
+    0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000,
+    0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000,
+    0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000,
+    0x1923316900000000, 0x87239ba500000000, 0x566276f900000000,
+    0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000,
+    0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000,
+    0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000,
+    0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000,
+    0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000,
+    0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000,
+    0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000,
+    0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000,
+    0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000,
+    0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000,
+    0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000,
+    0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000,
+    0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000,
+    0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000,
+    0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000,
+    0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000,
+    0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000,
+    0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000,
+    0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000,
+    0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000,
+    0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000,
+    0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000,
+    0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000,
+    0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000,
+    0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000,
+    0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000,
+    0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000,
+    0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000,
+    0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000,
+    0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000,
+    0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000,
+    0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000,
+    0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000,
+    0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000,
+    0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000,
+    0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000,
+    0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000,
+    0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000,
+    0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000,
+    0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000,
+    0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000,
+    0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000,
+    0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000,
+    0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000,
+    0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000,
+    0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000,
+    0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000,
+    0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000,
+    0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000,
+    0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000,
+    0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000,
+    0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000,
+    0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000,
+    0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000,
+    0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000,
+    0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000,
+    0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000,
+    0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000,
+    0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000,
+    0x6171384400000000, 0xff71928800000000, 0xe678578200000000,
+    0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000,
+    0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000,
+    0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000,
+    0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000,
+    0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000,
+    0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000,
+    0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000,
+    0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000,
+    0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000,
+    0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000,
+    0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000,
+    0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000,
+    0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000,
+    0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000,
+    0xe6064b2600000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757,
+    0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a,
+    0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733,
+    0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871,
+    0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70,
+    0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42,
+    0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5,
+    0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787,
+    0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086,
+    0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4,
+    0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d,
+    0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0,
+    0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d,
+    0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f,
+    0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859,
+    0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b,
+    0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5,
+    0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028,
+    0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891,
+    0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed,
+    0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec,
+    0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde,
+    0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817,
+    0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825,
+    0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24,
+    0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e,
+    0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7,
+    0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a,
+    0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4,
+    0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196,
+    0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0,
+    0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2,
+    0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52,
+    0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f,
+    0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36,
+    0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174,
+    0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675,
+    0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647,
+    0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d,
+    0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf,
+    0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be,
+    0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc,
+    0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645,
+    0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98,
+    0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138,
+    0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a,
+    0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c,
+    0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e,
+    0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0,
+    0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d,
+    0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194,
+    0xde0506f1},
+   {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc,
+    0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f,
+    0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a,
+    0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29,
+    0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8,
+    0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023,
+    0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e,
+    0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065,
+    0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84,
+    0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7,
+    0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922,
+    0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71,
+    0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0,
+    0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b,
+    0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816,
+    0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd,
+    0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c,
+    0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f,
+    0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba,
+    0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579,
+    0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98,
+    0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873,
+    0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e,
+    0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5,
+    0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134,
+    0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7,
+    0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732,
+    0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461,
+    0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0,
+    0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b,
+    0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26,
+    0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd,
+    0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc,
+    0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef,
+    0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a,
+    0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049,
+    0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8,
+    0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43,
+    0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e,
+    0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5,
+    0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24,
+    0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07,
+    0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982,
+    0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1,
+    0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0,
+    0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b,
+    0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576,
+    0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d,
+    0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c,
+    0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f,
+    0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda,
+    0xbe9834ed},
+   {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504,
+    0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49,
+    0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e,
+    0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192,
+    0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859,
+    0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c,
+    0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620,
+    0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265,
+    0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae,
+    0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2,
+    0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175,
+    0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38,
+    0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05,
+    0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40,
+    0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f,
+    0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca,
+    0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850,
+    0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d,
+    0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da,
+    0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864,
+    0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af,
+    0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea,
+    0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74,
+    0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31,
+    0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa,
+    0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a,
+    0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd,
+    0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180,
+    0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a,
+    0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f,
+    0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290,
+    0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5,
+    0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed,
+    0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0,
+    0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167,
+    0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b,
+    0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0,
+    0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5,
+    0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc,
+    0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189,
+    0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842,
+    0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e,
+    0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299,
+    0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4,
+    0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec,
+    0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9,
+    0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66,
+    0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23,
+    0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9,
+    0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4,
+    0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33,
+    0x9324fd72},
+   {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+    0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+    0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+    0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+    0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+    0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+    0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+    0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+    0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+    0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+    0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+    0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+    0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+    0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+    0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+    0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+    0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+    0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+    0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+    0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+    0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+    0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+    0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+    0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+    0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+    0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+    0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+    0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+    0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+    0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+    0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+    0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+    0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+    0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+    0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+    0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+    0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+    0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+    0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+    0x2d02ef8d}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07,
+    0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79,
+    0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7,
+    0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84,
+    0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13,
+    0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663,
+    0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5,
+    0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5,
+    0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832,
+    0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51,
+    0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf,
+    0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1,
+    0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76,
+    0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606,
+    0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996,
+    0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6,
+    0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c,
+    0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712,
+    0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c,
+    0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4,
+    0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943,
+    0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333,
+    0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe,
+    0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce,
+    0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359,
+    0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a,
+    0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04,
+    0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a,
+    0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0,
+    0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580,
+    0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10,
+    0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060,
+    0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1,
+    0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf,
+    0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31,
+    0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852,
+    0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5,
+    0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5,
+    0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75,
+    0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005,
+    0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292,
+    0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1,
+    0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f,
+    0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111,
+    0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0,
+    0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0,
+    0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40,
+    0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530,
+    0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba,
+    0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4,
+    0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a,
+    0x8def022d},
+   {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64,
+    0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1,
+    0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e,
+    0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61,
+    0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82,
+    0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff,
+    0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7,
+    0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da,
+    0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139,
+    0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6,
+    0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89,
+    0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c,
+    0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0,
+    0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d,
+    0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a,
+    0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177,
+    0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de,
+    0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b,
+    0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824,
+    0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e,
+    0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad,
+    0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0,
+    0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d,
+    0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60,
+    0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83,
+    0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822,
+    0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d,
+    0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8,
+    0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171,
+    0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c,
+    0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b,
+    0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6,
+    0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca,
+    0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f,
+    0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430,
+    0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf,
+    0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c,
+    0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51,
+    0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9,
+    0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84,
+    0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67,
+    0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398,
+    0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7,
+    0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62,
+    0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e,
+    0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923,
+    0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4,
+    0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9,
+    0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070,
+    0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5,
+    0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a,
+    0x72fd2493},
+   {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907,
+    0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f,
+    0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a,
+    0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e,
+    0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512,
+    0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14,
+    0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b,
+    0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d,
+    0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731,
+    0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925,
+    0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620,
+    0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28,
+    0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70,
+    0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176,
+    0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d,
+    0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b,
+    0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b,
+    0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63,
+    0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266,
+    0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a,
+    0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446,
+    0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40,
+    0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557,
+    0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51,
+    0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d,
+    0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0,
+    0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5,
+    0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed,
+    0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd,
+    0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb,
+    0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0,
+    0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6,
+    0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de,
+    0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6,
+    0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3,
+    0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7,
+    0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb,
+    0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd,
+    0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92,
+    0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094,
+    0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598,
+    0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c,
+    0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489,
+    0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81,
+    0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9,
+    0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af,
+    0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4,
+    0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2,
+    0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2,
+    0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba,
+    0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf,
+    0xed3498be},
+   {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f,
+    0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d,
+    0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0,
+    0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42,
+    0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95,
+    0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2,
+    0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a,
+    0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d,
+    0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea,
+    0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748,
+    0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5,
+    0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27,
+    0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b,
+    0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac,
+    0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4,
+    0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3,
+    0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44,
+    0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6,
+    0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b,
+    0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329,
+    0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe,
+    0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9,
+    0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1,
+    0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6,
+    0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921,
+    0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555,
+    0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8,
+    0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a,
+    0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd,
+    0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a,
+    0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2,
+    0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5,
+    0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2,
+    0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330,
+    0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad,
+    0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f,
+    0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8,
+    0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef,
+    0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc,
+    0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb,
+    0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c,
+    0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e,
+    0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03,
+    0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1,
+    0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6,
+    0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1,
+    0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9,
+    0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e,
+    0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409,
+    0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb,
+    0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966,
+    0xf10605de}};
+
+#endif
+
+#endif
+
+#if N == 2
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
+    0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
+    0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
+    0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
+    0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
+    0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
+    0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
+    0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
+    0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
+    0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
+    0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
+    0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
+    0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
+    0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
+    0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
+    0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
+    0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
+    0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
+    0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
+    0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
+    0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
+    0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
+    0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
+    0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
+    0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
+    0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
+    0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
+    0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
+    0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
+    0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
+    0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
+    0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
+    0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
+    0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
+    0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
+    0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
+    0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
+    0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
+    0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
+    0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
+    0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
+    0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
+    0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
+    0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
+    0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
+    0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
+    0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
+    0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
+    0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
+    0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
+    0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
+    0x0d7139d7},
+   {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
+    0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
+    0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
+    0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
+    0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
+    0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
+    0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
+    0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
+    0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
+    0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
+    0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
+    0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
+    0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
+    0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
+    0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
+    0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
+    0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
+    0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
+    0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
+    0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
+    0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
+    0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
+    0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
+    0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
+    0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
+    0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
+    0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
+    0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
+    0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
+    0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
+    0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
+    0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
+    0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
+    0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
+    0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
+    0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
+    0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
+    0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
+    0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
+    0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
+    0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
+    0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
+    0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
+    0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
+    0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
+    0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
+    0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
+    0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
+    0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
+    0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
+    0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
+    0x1c53e98a},
+   {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
+    0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
+    0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
+    0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
+    0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
+    0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
+    0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
+    0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
+    0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
+    0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
+    0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
+    0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
+    0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
+    0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
+    0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
+    0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
+    0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
+    0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
+    0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
+    0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
+    0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
+    0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
+    0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
+    0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
+    0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
+    0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
+    0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
+    0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
+    0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
+    0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
+    0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
+    0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
+    0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
+    0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
+    0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
+    0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
+    0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
+    0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
+    0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
+    0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
+    0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
+    0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
+    0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
+    0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
+    0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
+    0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
+    0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
+    0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
+    0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
+    0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
+    0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
+    0x3f88e851},
+   {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
+    0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
+    0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
+    0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
+    0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
+    0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
+    0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
+    0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
+    0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
+    0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
+    0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
+    0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
+    0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
+    0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
+    0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
+    0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
+    0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
+    0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
+    0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
+    0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
+    0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
+    0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
+    0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
+    0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
+    0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
+    0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
+    0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
+    0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
+    0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
+    0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
+    0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
+    0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
+    0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
+    0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
+    0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
+    0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
+    0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
+    0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
+    0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
+    0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
+    0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
+    0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
+    0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
+    0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
+    0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
+    0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
+    0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
+    0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
+    0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
+    0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
+    0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
+    0x3dee8ca6},
+   {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
+    0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
+    0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
+    0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
+    0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
+    0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
+    0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
+    0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
+    0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
+    0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
+    0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
+    0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
+    0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
+    0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
+    0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
+    0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
+    0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
+    0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
+    0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
+    0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
+    0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
+    0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
+    0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
+    0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
+    0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
+    0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
+    0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
+    0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
+    0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
+    0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
+    0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
+    0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
+    0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
+    0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
+    0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
+    0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
+    0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
+    0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
+    0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
+    0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
+    0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
+    0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
+    0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
+    0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
+    0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
+    0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
+    0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
+    0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
+    0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
+    0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
+    0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
+    0x36197165},
+   {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
+    0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
+    0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
+    0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
+    0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
+    0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
+    0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
+    0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
+    0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
+    0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
+    0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
+    0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
+    0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
+    0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
+    0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
+    0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
+    0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
+    0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
+    0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
+    0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
+    0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
+    0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
+    0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
+    0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
+    0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
+    0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
+    0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
+    0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
+    0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
+    0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
+    0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
+    0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
+    0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
+    0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
+    0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
+    0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
+    0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
+    0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
+    0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
+    0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
+    0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
+    0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
+    0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
+    0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
+    0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
+    0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
+    0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
+    0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
+    0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
+    0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
+    0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
+    0x1a3b93aa},
+   {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
+    0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
+    0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
+    0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
+    0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
+    0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
+    0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
+    0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
+    0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
+    0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
+    0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
+    0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
+    0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
+    0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
+    0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
+    0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
+    0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
+    0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
+    0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
+    0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
+    0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
+    0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
+    0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
+    0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
+    0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
+    0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
+    0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
+    0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
+    0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
+    0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
+    0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
+    0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
+    0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
+    0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
+    0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
+    0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
+    0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
+    0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
+    0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
+    0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
+    0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
+    0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
+    0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
+    0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
+    0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
+    0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
+    0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
+    0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
+    0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
+    0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
+    0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
+    0xe147d714},
+   {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
+    0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
+    0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
+    0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
+    0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
+    0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
+    0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
+    0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
+    0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
+    0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
+    0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
+    0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
+    0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
+    0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
+    0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
+    0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
+    0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
+    0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
+    0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
+    0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
+    0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
+    0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
+    0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
+    0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
+    0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
+    0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
+    0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
+    0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
+    0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
+    0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
+    0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
+    0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
+    0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
+    0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
+    0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
+    0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
+    0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
+    0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
+    0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
+    0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
+    0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
+    0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
+    0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
+    0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
+    0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
+    0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
+    0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
+    0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
+    0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
+    0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
+    0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
+    0x494f0c4b}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000,
+    0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000,
+    0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000,
+    0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000,
+    0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000,
+    0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000,
+    0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000,
+    0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000,
+    0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000,
+    0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000,
+    0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000,
+    0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000,
+    0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000,
+    0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000,
+    0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000,
+    0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000,
+    0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000,
+    0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000,
+    0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000,
+    0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000,
+    0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000,
+    0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000,
+    0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000,
+    0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000,
+    0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000,
+    0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000,
+    0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000,
+    0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000,
+    0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000,
+    0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000,
+    0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000,
+    0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000,
+    0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000,
+    0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000,
+    0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000,
+    0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000,
+    0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000,
+    0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000,
+    0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000,
+    0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000,
+    0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000,
+    0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000,
+    0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000,
+    0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000,
+    0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000,
+    0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000,
+    0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000,
+    0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000,
+    0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000,
+    0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000,
+    0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000,
+    0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000,
+    0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000,
+    0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000,
+    0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000,
+    0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000,
+    0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000,
+    0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000,
+    0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000,
+    0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000,
+    0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000,
+    0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000,
+    0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000,
+    0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000,
+    0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000,
+    0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000,
+    0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000,
+    0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000,
+    0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000,
+    0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000,
+    0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000,
+    0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000,
+    0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000,
+    0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000,
+    0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000,
+    0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000,
+    0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000,
+    0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000,
+    0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000,
+    0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000,
+    0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000,
+    0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000,
+    0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000,
+    0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000,
+    0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000,
+    0x4b0c4f4900000000},
+   {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000,
+    0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000,
+    0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000,
+    0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000,
+    0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000,
+    0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000,
+    0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000,
+    0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000,
+    0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000,
+    0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000,
+    0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000,
+    0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000,
+    0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000,
+    0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000,
+    0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000,
+    0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000,
+    0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000,
+    0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000,
+    0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000,
+    0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000,
+    0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000,
+    0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000,
+    0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000,
+    0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000,
+    0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000,
+    0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000,
+    0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000,
+    0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000,
+    0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000,
+    0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000,
+    0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000,
+    0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000,
+    0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000,
+    0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000,
+    0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000,
+    0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000,
+    0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000,
+    0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000,
+    0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000,
+    0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000,
+    0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000,
+    0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000,
+    0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000,
+    0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000,
+    0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000,
+    0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000,
+    0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000,
+    0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000,
+    0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000,
+    0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000,
+    0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000,
+    0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000,
+    0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000,
+    0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000,
+    0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000,
+    0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000,
+    0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000,
+    0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000,
+    0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000,
+    0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000,
+    0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000,
+    0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000,
+    0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000,
+    0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000,
+    0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000,
+    0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000,
+    0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000,
+    0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000,
+    0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000,
+    0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000,
+    0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000,
+    0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000,
+    0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000,
+    0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000,
+    0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000,
+    0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000,
+    0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000,
+    0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000,
+    0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000,
+    0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000,
+    0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000,
+    0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000,
+    0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000,
+    0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000,
+    0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000,
+    0x14d747e100000000},
+   {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000,
+    0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000,
+    0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000,
+    0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000,
+    0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000,
+    0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000,
+    0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000,
+    0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000,
+    0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000,
+    0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000,
+    0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000,
+    0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000,
+    0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000,
+    0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000,
+    0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000,
+    0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000,
+    0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000,
+    0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000,
+    0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000,
+    0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000,
+    0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000,
+    0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000,
+    0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000,
+    0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000,
+    0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000,
+    0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000,
+    0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000,
+    0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000,
+    0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000,
+    0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000,
+    0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000,
+    0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000,
+    0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000,
+    0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000,
+    0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000,
+    0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000,
+    0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000,
+    0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000,
+    0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000,
+    0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000,
+    0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000,
+    0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000,
+    0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000,
+    0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000,
+    0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000,
+    0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000,
+    0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000,
+    0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000,
+    0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000,
+    0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000,
+    0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000,
+    0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000,
+    0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000,
+    0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000,
+    0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000,
+    0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000,
+    0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000,
+    0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000,
+    0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000,
+    0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000,
+    0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000,
+    0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000,
+    0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000,
+    0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000,
+    0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000,
+    0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000,
+    0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000,
+    0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000,
+    0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000,
+    0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000,
+    0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000,
+    0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000,
+    0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000,
+    0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000,
+    0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000,
+    0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000,
+    0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000,
+    0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000,
+    0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000,
+    0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000,
+    0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000,
+    0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000,
+    0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000,
+    0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000,
+    0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000,
+    0xaa933b1a00000000},
+   {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000,
+    0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000,
+    0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000,
+    0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000,
+    0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000,
+    0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000,
+    0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000,
+    0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000,
+    0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000,
+    0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000,
+    0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000,
+    0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000,
+    0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000,
+    0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000,
+    0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000,
+    0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000,
+    0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000,
+    0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000,
+    0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000,
+    0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000,
+    0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000,
+    0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000,
+    0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000,
+    0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000,
+    0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000,
+    0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000,
+    0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000,
+    0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000,
+    0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000,
+    0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000,
+    0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000,
+    0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000,
+    0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000,
+    0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000,
+    0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000,
+    0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000,
+    0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000,
+    0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000,
+    0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000,
+    0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000,
+    0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000,
+    0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000,
+    0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000,
+    0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000,
+    0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000,
+    0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000,
+    0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000,
+    0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000,
+    0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000,
+    0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000,
+    0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000,
+    0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000,
+    0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000,
+    0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000,
+    0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000,
+    0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000,
+    0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000,
+    0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000,
+    0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000,
+    0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000,
+    0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000,
+    0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000,
+    0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000,
+    0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000,
+    0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000,
+    0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000,
+    0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000,
+    0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000,
+    0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000,
+    0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000,
+    0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000,
+    0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000,
+    0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000,
+    0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000,
+    0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000,
+    0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000,
+    0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000,
+    0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000,
+    0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000,
+    0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000,
+    0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000,
+    0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000,
+    0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000,
+    0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000,
+    0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000,
+    0x6571193600000000},
+   {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000,
+    0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000,
+    0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000,
+    0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000,
+    0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000,
+    0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000,
+    0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000,
+    0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000,
+    0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000,
+    0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000,
+    0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000,
+    0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000,
+    0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000,
+    0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000,
+    0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000,
+    0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000,
+    0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000,
+    0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000,
+    0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000,
+    0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000,
+    0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000,
+    0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000,
+    0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000,
+    0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000,
+    0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000,
+    0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000,
+    0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000,
+    0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000,
+    0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000,
+    0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000,
+    0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000,
+    0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000,
+    0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000,
+    0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000,
+    0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000,
+    0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000,
+    0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000,
+    0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000,
+    0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000,
+    0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000,
+    0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000,
+    0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000,
+    0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000,
+    0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000,
+    0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000,
+    0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000,
+    0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000,
+    0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000,
+    0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000,
+    0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000,
+    0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000,
+    0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000,
+    0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000,
+    0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000,
+    0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000,
+    0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000,
+    0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000,
+    0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000,
+    0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000,
+    0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000,
+    0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000,
+    0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000,
+    0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000,
+    0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000,
+    0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000,
+    0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000,
+    0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000,
+    0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000,
+    0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000,
+    0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000,
+    0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000,
+    0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000,
+    0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000,
+    0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000,
+    0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000,
+    0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000,
+    0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000,
+    0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000,
+    0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000,
+    0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000,
+    0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000,
+    0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000,
+    0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000,
+    0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000,
+    0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000,
+    0xa68cee3d00000000},
+   {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000,
+    0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000,
+    0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000,
+    0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000,
+    0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000,
+    0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000,
+    0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000,
+    0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000,
+    0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000,
+    0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000,
+    0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000,
+    0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000,
+    0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000,
+    0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000,
+    0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000,
+    0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000,
+    0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000,
+    0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000,
+    0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000,
+    0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000,
+    0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000,
+    0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000,
+    0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000,
+    0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000,
+    0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000,
+    0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000,
+    0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000,
+    0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000,
+    0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000,
+    0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000,
+    0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000,
+    0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000,
+    0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000,
+    0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000,
+    0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000,
+    0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000,
+    0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000,
+    0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000,
+    0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000,
+    0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000,
+    0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000,
+    0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000,
+    0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000,
+    0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000,
+    0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000,
+    0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000,
+    0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000,
+    0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000,
+    0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000,
+    0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000,
+    0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000,
+    0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000,
+    0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000,
+    0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000,
+    0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000,
+    0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000,
+    0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000,
+    0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000,
+    0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000,
+    0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000,
+    0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000,
+    0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000,
+    0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000,
+    0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000,
+    0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000,
+    0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000,
+    0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000,
+    0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000,
+    0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000,
+    0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000,
+    0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000,
+    0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000,
+    0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000,
+    0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000,
+    0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000,
+    0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000,
+    0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000,
+    0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000,
+    0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000,
+    0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000,
+    0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000,
+    0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000,
+    0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000,
+    0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000,
+    0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000,
+    0x51e8883f00000000},
+   {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000,
+    0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000,
+    0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000,
+    0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000,
+    0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000,
+    0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000,
+    0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000,
+    0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000,
+    0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000,
+    0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000,
+    0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000,
+    0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000,
+    0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000,
+    0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000,
+    0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000,
+    0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000,
+    0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000,
+    0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000,
+    0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000,
+    0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000,
+    0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000,
+    0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000,
+    0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000,
+    0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000,
+    0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000,
+    0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000,
+    0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000,
+    0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000,
+    0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000,
+    0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000,
+    0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000,
+    0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000,
+    0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000,
+    0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000,
+    0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000,
+    0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000,
+    0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000,
+    0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000,
+    0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000,
+    0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000,
+    0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000,
+    0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000,
+    0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000,
+    0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000,
+    0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000,
+    0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000,
+    0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000,
+    0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000,
+    0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000,
+    0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000,
+    0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000,
+    0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000,
+    0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000,
+    0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000,
+    0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000,
+    0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000,
+    0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000,
+    0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000,
+    0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000,
+    0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000,
+    0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000,
+    0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000,
+    0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000,
+    0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000,
+    0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000,
+    0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000,
+    0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000,
+    0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000,
+    0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000,
+    0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000,
+    0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000,
+    0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000,
+    0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000,
+    0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000,
+    0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000,
+    0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000,
+    0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000,
+    0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000,
+    0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000,
+    0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000,
+    0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000,
+    0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000,
+    0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000,
+    0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000,
+    0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000,
+    0x8ae9531c00000000},
+   {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000,
+    0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000,
+    0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000,
+    0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000,
+    0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000,
+    0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000,
+    0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000,
+    0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000,
+    0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000,
+    0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000,
+    0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000,
+    0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000,
+    0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000,
+    0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000,
+    0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000,
+    0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000,
+    0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000,
+    0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000,
+    0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000,
+    0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000,
+    0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000,
+    0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000,
+    0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000,
+    0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000,
+    0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000,
+    0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000,
+    0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000,
+    0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000,
+    0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000,
+    0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000,
+    0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000,
+    0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000,
+    0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000,
+    0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000,
+    0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000,
+    0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000,
+    0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000,
+    0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000,
+    0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000,
+    0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000,
+    0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000,
+    0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000,
+    0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000,
+    0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000,
+    0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000,
+    0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000,
+    0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000,
+    0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000,
+    0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000,
+    0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000,
+    0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000,
+    0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000,
+    0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000,
+    0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000,
+    0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000,
+    0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000,
+    0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000,
+    0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000,
+    0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000,
+    0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000,
+    0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000,
+    0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000,
+    0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000,
+    0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000,
+    0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000,
+    0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000,
+    0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000,
+    0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000,
+    0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000,
+    0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000,
+    0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000,
+    0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000,
+    0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000,
+    0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000,
+    0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000,
+    0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000,
+    0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000,
+    0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000,
+    0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000,
+    0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000,
+    0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000,
+    0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000,
+    0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000,
+    0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000,
+    0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000,
+    0xd739710d00000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa,
+    0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b,
+    0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232,
+    0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8,
+    0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e,
+    0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa,
+    0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b,
+    0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f,
+    0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719,
+    0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3,
+    0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa,
+    0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b,
+    0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed,
+    0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89,
+    0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25,
+    0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041,
+    0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c,
+    0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed,
+    0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4,
+    0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758,
+    0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e,
+    0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a,
+    0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed,
+    0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889,
+    0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df,
+    0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544,
+    0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d,
+    0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c,
+    0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1,
+    0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95,
+    0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839,
+    0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d,
+    0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976,
+    0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7,
+    0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be,
+    0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144,
+    0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12,
+    0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376,
+    0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a,
+    0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e,
+    0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278,
+    0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682,
+    0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b,
+    0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a,
+    0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561,
+    0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05,
+    0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9,
+    0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd,
+    0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0,
+    0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61,
+    0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678,
+    0x264b06e6},
+   {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413,
+    0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3,
+    0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d,
+    0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653,
+    0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9,
+    0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e,
+    0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5,
+    0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712,
+    0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8,
+    0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6,
+    0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068,
+    0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8,
+    0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579,
+    0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade,
+    0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37,
+    0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590,
+    0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4,
+    0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64,
+    0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea,
+    0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678,
+    0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282,
+    0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25,
+    0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102,
+    0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5,
+    0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f,
+    0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146,
+    0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8,
+    0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08,
+    0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c,
+    0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b,
+    0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972,
+    0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5,
+    0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d,
+    0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd,
+    0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833,
+    0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d,
+    0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7,
+    0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60,
+    0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2,
+    0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105,
+    0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff,
+    0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1,
+    0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f,
+    0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf,
+    0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617,
+    0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0,
+    0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959,
+    0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe,
+    0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca,
+    0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a,
+    0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184,
+    0x92364a30},
+   {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216,
+    0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8,
+    0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170,
+    0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035,
+    0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6,
+    0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145,
+    0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d,
+    0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e,
+    0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d,
+    0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408,
+    0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0,
+    0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e,
+    0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c,
+    0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf,
+    0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a,
+    0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9,
+    0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1,
+    0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f,
+    0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987,
+    0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4,
+    0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37,
+    0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84,
+    0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca,
+    0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79,
+    0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba,
+    0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d,
+    0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5,
+    0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b,
+    0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643,
+    0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0,
+    0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525,
+    0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496,
+    0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8,
+    0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026,
+    0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e,
+    0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db,
+    0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118,
+    0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab,
+    0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf,
+    0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c,
+    0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf,
+    0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a,
+    0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32,
+    0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec,
+    0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82,
+    0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31,
+    0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4,
+    0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957,
+    0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f,
+    0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1,
+    0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869,
+    0xe4c4abcc},
+   {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0,
+    0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271,
+    0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61,
+    0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52,
+    0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43,
+    0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333,
+    0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64,
+    0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314,
+    0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205,
+    0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136,
+    0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26,
+    0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997,
+    0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849,
+    0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739,
+    0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8,
+    0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98,
+    0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b,
+    0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba,
+    0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa,
+    0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d,
+    0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c,
+    0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc,
+    0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af,
+    0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf,
+    0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce,
+    0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922,
+    0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532,
+    0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183,
+    0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710,
+    0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860,
+    0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1,
+    0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1,
+    0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956,
+    0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7,
+    0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7,
+    0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4,
+    0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5,
+    0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5,
+    0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb,
+    0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb,
+    0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da,
+    0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9,
+    0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9,
+    0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48,
+    0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df,
+    0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af,
+    0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e,
+    0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e,
+    0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d,
+    0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c,
+    0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c,
+    0xca64c78c}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5,
+    0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d,
+    0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf,
+    0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027,
+    0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050,
+    0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098,
+    0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb,
+    0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173,
+    0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104,
+    0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c,
+    0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e,
+    0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6,
+    0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358,
+    0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390,
+    0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312,
+    0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da,
+    0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd,
+    0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335,
+    0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387,
+    0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de,
+    0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9,
+    0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261,
+    0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283,
+    0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b,
+    0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c,
+    0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c,
+    0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e,
+    0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6,
+    0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1,
+    0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619,
+    0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b,
+    0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653,
+    0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785,
+    0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d,
+    0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf,
+    0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757,
+    0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720,
+    0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8,
+    0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593,
+    0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b,
+    0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c,
+    0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4,
+    0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506,
+    0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe,
+    0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428,
+    0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0,
+    0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462,
+    0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa,
+    0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd,
+    0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445,
+    0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7,
+    0x8cc764ca},
+   {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b,
+    0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27,
+    0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a,
+    0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285,
+    0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef,
+    0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf,
+    0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a,
+    0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a,
+    0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70,
+    0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf,
+    0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2,
+    0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e,
+    0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f,
+    0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f,
+    0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae,
+    0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe,
+    0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97,
+    0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b,
+    0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436,
+    0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e,
+    0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4,
+    0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4,
+    0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46,
+    0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716,
+    0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c,
+    0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5,
+    0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8,
+    0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774,
+    0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d,
+    0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d,
+    0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc,
+    0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec,
+    0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82,
+    0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e,
+    0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623,
+    0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c,
+    0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6,
+    0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6,
+    0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c,
+    0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c,
+    0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66,
+    0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9,
+    0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4,
+    0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978,
+    0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416,
+    0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946,
+    0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7,
+    0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7,
+    0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e,
+    0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32,
+    0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f,
+    0xccabc4e4},
+   {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4,
+    0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895,
+    0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50,
+    0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656,
+    0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154,
+    0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906,
+    0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258,
+    0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a,
+    0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08,
+    0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e,
+    0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb,
+    0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa,
+    0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44,
+    0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316,
+    0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0,
+    0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2,
+    0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7,
+    0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6,
+    0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73,
+    0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba,
+    0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8,
+    0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea,
+    0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b,
+    0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29,
+    0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b,
+    0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e,
+    0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb,
+    0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a,
+    0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef,
+    0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd,
+    0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b,
+    0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019,
+    0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3,
+    0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2,
+    0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417,
+    0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11,
+    0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13,
+    0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241,
+    0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b,
+    0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09,
+    0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b,
+    0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d,
+    0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8,
+    0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9,
+    0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003,
+    0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851,
+    0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7,
+    0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5,
+    0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190,
+    0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1,
+    0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134,
+    0x304a3692},
+   {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84,
+    0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f,
+    0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15,
+    0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2,
+    0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf,
+    0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7,
+    0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb,
+    0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3,
+    0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae,
+    0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749,
+    0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243,
+    0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8,
+    0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29,
+    0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61,
+    0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8,
+    0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0,
+    0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1,
+    0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a,
+    0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40,
+    0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e,
+    0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03,
+    0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b,
+    0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee,
+    0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6,
+    0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb,
+    0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f,
+    0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495,
+    0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e,
+    0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f,
+    0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067,
+    0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be,
+    0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6,
+    0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e,
+    0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5,
+    0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf,
+    0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958,
+    0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305,
+    0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d,
+    0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338,
+    0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370,
+    0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d,
+    0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca,
+    0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0,
+    0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b,
+    0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083,
+    0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb,
+    0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012,
+    0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a,
+    0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b,
+    0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0,
+    0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea,
+    0xe6064b26}};
+
 #endif
-  }
-};
+
+#endif
+
+#if N == 3
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
+    0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
+    0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
+    0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
+    0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
+    0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
+    0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
+    0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
+    0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
+    0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
+    0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
+    0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
+    0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
+    0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
+    0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
+    0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
+    0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
+    0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
+    0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
+    0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
+    0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
+    0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
+    0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
+    0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
+    0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
+    0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
+    0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
+    0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
+    0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
+    0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
+    0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
+    0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
+    0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
+    0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
+    0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
+    0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
+    0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
+    0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
+    0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
+    0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
+    0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
+    0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
+    0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
+    0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
+    0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
+    0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
+    0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
+    0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
+    0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
+    0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
+    0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
+    0x09cd8551},
+   {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
+    0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
+    0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
+    0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
+    0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
+    0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
+    0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
+    0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
+    0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
+    0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
+    0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
+    0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
+    0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
+    0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
+    0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
+    0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
+    0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
+    0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
+    0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
+    0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
+    0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
+    0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
+    0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
+    0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
+    0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
+    0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
+    0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
+    0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
+    0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
+    0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
+    0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
+    0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
+    0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
+    0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
+    0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
+    0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
+    0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
+    0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
+    0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
+    0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
+    0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
+    0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
+    0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
+    0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
+    0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
+    0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
+    0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
+    0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
+    0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
+    0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
+    0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
+    0x7bc97a0c},
+   {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
+    0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
+    0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
+    0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
+    0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
+    0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
+    0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
+    0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
+    0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
+    0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
+    0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
+    0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
+    0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
+    0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
+    0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
+    0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
+    0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
+    0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
+    0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
+    0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
+    0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
+    0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
+    0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
+    0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
+    0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
+    0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
+    0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
+    0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
+    0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
+    0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
+    0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
+    0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
+    0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
+    0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
+    0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
+    0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
+    0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
+    0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
+    0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
+    0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
+    0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
+    0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
+    0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
+    0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
+    0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
+    0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
+    0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
+    0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
+    0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
+    0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
+    0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
+    0x7851a2ca},
+   {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
+    0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
+    0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
+    0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
+    0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
+    0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
+    0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
+    0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
+    0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
+    0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
+    0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
+    0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
+    0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
+    0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
+    0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
+    0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
+    0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
+    0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
+    0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
+    0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
+    0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
+    0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
+    0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
+    0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
+    0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
+    0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
+    0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
+    0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
+    0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
+    0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
+    0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
+    0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
+    0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
+    0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
+    0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
+    0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
+    0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
+    0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
+    0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
+    0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
+    0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
+    0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
+    0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
+    0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
+    0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
+    0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
+    0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
+    0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
+    0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
+    0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
+    0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
+    0x566b6848},
+   {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
+    0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
+    0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
+    0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
+    0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
+    0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
+    0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
+    0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
+    0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
+    0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
+    0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
+    0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
+    0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
+    0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
+    0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
+    0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
+    0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
+    0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
+    0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
+    0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
+    0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
+    0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
+    0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
+    0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
+    0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
+    0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
+    0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
+    0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
+    0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
+    0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
+    0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
+    0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
+    0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
+    0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
+    0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
+    0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
+    0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
+    0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
+    0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
+    0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
+    0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
+    0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
+    0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
+    0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
+    0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
+    0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
+    0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
+    0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
+    0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
+    0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
+    0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
+    0xd8ac6b35},
+   {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
+    0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
+    0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
+    0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
+    0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
+    0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
+    0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
+    0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
+    0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
+    0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
+    0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
+    0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
+    0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
+    0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
+    0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
+    0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
+    0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
+    0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
+    0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
+    0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
+    0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
+    0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
+    0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
+    0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
+    0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
+    0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
+    0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
+    0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
+    0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
+    0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
+    0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
+    0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
+    0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
+    0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
+    0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
+    0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
+    0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
+    0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
+    0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
+    0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
+    0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
+    0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
+    0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
+    0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
+    0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
+    0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
+    0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
+    0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
+    0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
+    0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
+    0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
+    0xa140efa8},
+   {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
+    0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
+    0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
+    0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
+    0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
+    0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
+    0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
+    0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
+    0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
+    0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
+    0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
+    0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
+    0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
+    0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
+    0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
+    0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
+    0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
+    0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
+    0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
+    0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
+    0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
+    0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
+    0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
+    0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
+    0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
+    0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
+    0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
+    0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
+    0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
+    0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
+    0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
+    0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
+    0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
+    0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
+    0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
+    0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
+    0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
+    0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
+    0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
+    0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
+    0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
+    0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
+    0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
+    0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
+    0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
+    0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
+    0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
+    0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
+    0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
+    0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
+    0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
+    0x917cd6a1},
+   {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
+    0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
+    0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
+    0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
+    0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
+    0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
+    0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
+    0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
+    0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
+    0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
+    0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
+    0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
+    0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
+    0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
+    0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
+    0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
+    0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
+    0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
+    0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
+    0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
+    0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
+    0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
+    0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
+    0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
+    0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
+    0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
+    0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
+    0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
+    0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
+    0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
+    0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
+    0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
+    0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
+    0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
+    0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
+    0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
+    0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
+    0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
+    0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
+    0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
+    0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
+    0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
+    0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
+    0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
+    0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
+    0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
+    0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
+    0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
+    0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
+    0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
+    0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
+    0x18ba364e}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000,
+    0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000,
+    0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000,
+    0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000,
+    0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000,
+    0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000,
+    0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000,
+    0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000,
+    0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000,
+    0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000,
+    0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000,
+    0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000,
+    0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000,
+    0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000,
+    0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000,
+    0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000,
+    0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000,
+    0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000,
+    0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000,
+    0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000,
+    0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000,
+    0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000,
+    0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000,
+    0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000,
+    0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000,
+    0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000,
+    0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000,
+    0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000,
+    0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000,
+    0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000,
+    0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000,
+    0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000,
+    0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000,
+    0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000,
+    0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000,
+    0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000,
+    0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000,
+    0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000,
+    0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000,
+    0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000,
+    0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000,
+    0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000,
+    0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000,
+    0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000,
+    0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000,
+    0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000,
+    0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000,
+    0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000,
+    0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000,
+    0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000,
+    0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000,
+    0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000,
+    0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000,
+    0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000,
+    0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000,
+    0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000,
+    0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000,
+    0x08eda52100000000, 0x4391370100000000, 0x005a918600000000,
+    0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000,
+    0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000,
+    0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000,
+    0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000,
+    0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000,
+    0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000,
+    0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000,
+    0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000,
+    0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000,
+    0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000,
+    0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000,
+    0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000,
+    0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000,
+    0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000,
+    0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000,
+    0x7b23114500000000, 0x305f836500000000, 0x739425e200000000,
+    0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000,
+    0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000,
+    0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000,
+    0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000,
+    0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000,
+    0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000,
+    0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000,
+    0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000,
+    0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000,
+    0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000,
+    0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000,
+    0x4e36ba1800000000},
+   {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000,
+    0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000,
+    0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000,
+    0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000,
+    0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000,
+    0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000,
+    0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000,
+    0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000,
+    0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000,
+    0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000,
+    0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000,
+    0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000,
+    0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000,
+    0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000,
+    0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000,
+    0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000,
+    0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000,
+    0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000,
+    0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000,
+    0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000,
+    0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000,
+    0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000,
+    0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000,
+    0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000,
+    0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000,
+    0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000,
+    0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000,
+    0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000,
+    0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000,
+    0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000,
+    0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000,
+    0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000,
+    0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000,
+    0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000,
+    0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000,
+    0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000,
+    0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000,
+    0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000,
+    0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000,
+    0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000,
+    0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000,
+    0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000,
+    0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000,
+    0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000,
+    0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000,
+    0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000,
+    0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000,
+    0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000,
+    0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000,
+    0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000,
+    0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000,
+    0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000,
+    0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000,
+    0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000,
+    0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000,
+    0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000,
+    0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000,
+    0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000,
+    0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000,
+    0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000,
+    0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000,
+    0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000,
+    0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000,
+    0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000,
+    0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000,
+    0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000,
+    0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000,
+    0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000,
+    0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000,
+    0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000,
+    0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000,
+    0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000,
+    0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000,
+    0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000,
+    0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000,
+    0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000,
+    0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000,
+    0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000,
+    0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000,
+    0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000,
+    0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000,
+    0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000,
+    0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000,
+    0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000,
+    0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000,
+    0xa1d67c9100000000},
+   {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000,
+    0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000,
+    0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000,
+    0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000,
+    0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000,
+    0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000,
+    0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000,
+    0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000,
+    0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000,
+    0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000,
+    0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000,
+    0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000,
+    0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000,
+    0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000,
+    0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000,
+    0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000,
+    0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000,
+    0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000,
+    0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000,
+    0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000,
+    0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000,
+    0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000,
+    0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000,
+    0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000,
+    0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000,
+    0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000,
+    0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000,
+    0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000,
+    0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000,
+    0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000,
+    0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000,
+    0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000,
+    0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000,
+    0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000,
+    0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000,
+    0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000,
+    0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000,
+    0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000,
+    0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000,
+    0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000,
+    0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000,
+    0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000,
+    0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000,
+    0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000,
+    0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000,
+    0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000,
+    0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000,
+    0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000,
+    0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000,
+    0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000,
+    0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000,
+    0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000,
+    0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000,
+    0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000,
+    0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000,
+    0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000,
+    0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000,
+    0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000,
+    0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000,
+    0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000,
+    0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000,
+    0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000,
+    0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000,
+    0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000,
+    0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000,
+    0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000,
+    0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000,
+    0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000,
+    0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000,
+    0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000,
+    0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000,
+    0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000,
+    0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000,
+    0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000,
+    0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000,
+    0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000,
+    0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000,
+    0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000,
+    0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000,
+    0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000,
+    0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000,
+    0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000,
+    0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000,
+    0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000,
+    0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000,
+    0xa8ef40a100000000},
+   {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000,
+    0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000,
+    0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000,
+    0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000,
+    0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000,
+    0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000,
+    0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000,
+    0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000,
+    0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000,
+    0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000,
+    0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000,
+    0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000,
+    0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000,
+    0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000,
+    0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000,
+    0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000,
+    0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000,
+    0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000,
+    0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000,
+    0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000,
+    0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000,
+    0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000,
+    0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000,
+    0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000,
+    0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000,
+    0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000,
+    0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000,
+    0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000,
+    0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000,
+    0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000,
+    0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000,
+    0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000,
+    0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000,
+    0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000,
+    0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000,
+    0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000,
+    0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000,
+    0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000,
+    0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000,
+    0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000,
+    0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000,
+    0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000,
+    0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000,
+    0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000,
+    0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000,
+    0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000,
+    0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000,
+    0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000,
+    0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000,
+    0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000,
+    0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000,
+    0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000,
+    0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000,
+    0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000,
+    0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000,
+    0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000,
+    0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000,
+    0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000,
+    0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000,
+    0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000,
+    0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000,
+    0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000,
+    0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000,
+    0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000,
+    0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000,
+    0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000,
+    0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000,
+    0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000,
+    0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000,
+    0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000,
+    0x933d017400000000, 0xd506661100000000, 0x46a022f000000000,
+    0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000,
+    0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000,
+    0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000,
+    0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000,
+    0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000,
+    0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000,
+    0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000,
+    0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000,
+    0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000,
+    0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000,
+    0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000,
+    0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000,
+    0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000,
+    0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000,
+    0x356bacd800000000},
+   {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000,
+    0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000,
+    0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000,
+    0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000,
+    0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000,
+    0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000,
+    0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000,
+    0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000,
+    0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000,
+    0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000,
+    0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000,
+    0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000,
+    0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000,
+    0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000,
+    0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000,
+    0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000,
+    0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000,
+    0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000,
+    0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000,
+    0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000,
+    0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000,
+    0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000,
+    0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000,
+    0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000,
+    0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000,
+    0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000,
+    0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000,
+    0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000,
+    0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000,
+    0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000,
+    0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000,
+    0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000,
+    0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000,
+    0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000,
+    0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000,
+    0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000,
+    0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000,
+    0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000,
+    0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000,
+    0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000,
+    0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000,
+    0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000,
+    0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000,
+    0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000,
+    0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000,
+    0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000,
+    0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000,
+    0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000,
+    0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000,
+    0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000,
+    0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000,
+    0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000,
+    0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000,
+    0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000,
+    0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000,
+    0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000,
+    0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000,
+    0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000,
+    0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000,
+    0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000,
+    0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000,
+    0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000,
+    0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000,
+    0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000,
+    0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000,
+    0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000,
+    0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000,
+    0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000,
+    0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000,
+    0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000,
+    0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000,
+    0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000,
+    0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000,
+    0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000,
+    0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000,
+    0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000,
+    0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000,
+    0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000,
+    0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000,
+    0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000,
+    0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000,
+    0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000,
+    0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000,
+    0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000,
+    0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000,
+    0x48686b5600000000},
+   {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000,
+    0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000,
+    0x805af17200000000, 0x403ed96500000000, 0x002643b900000000,
+    0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000,
+    0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000,
+    0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000,
+    0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000,
+    0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000,
+    0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000,
+    0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000,
+    0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000,
+    0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000,
+    0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000,
+    0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000,
+    0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000,
+    0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000,
+    0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000,
+    0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000,
+    0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000,
+    0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000,
+    0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000,
+    0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000,
+    0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000,
+    0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000,
+    0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000,
+    0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000,
+    0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000,
+    0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000,
+    0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000,
+    0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000,
+    0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000,
+    0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000,
+    0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000,
+    0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000,
+    0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000,
+    0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000,
+    0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000,
+    0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000,
+    0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000,
+    0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000,
+    0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000,
+    0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000,
+    0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000,
+    0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000,
+    0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000,
+    0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000,
+    0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000,
+    0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000,
+    0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000,
+    0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000,
+    0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000,
+    0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000,
+    0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000,
+    0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000,
+    0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000,
+    0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000,
+    0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000,
+    0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000,
+    0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000,
+    0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000,
+    0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000,
+    0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000,
+    0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000,
+    0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000,
+    0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000,
+    0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000,
+    0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000,
+    0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000,
+    0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000,
+    0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000,
+    0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000,
+    0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000,
+    0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000,
+    0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000,
+    0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000,
+    0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000,
+    0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000,
+    0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000,
+    0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000,
+    0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000,
+    0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000,
+    0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000,
+    0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000,
+    0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000,
+    0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000,
+    0xcaa2517800000000},
+   {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000,
+    0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000,
+    0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000,
+    0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000,
+    0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000,
+    0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000,
+    0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000,
+    0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000,
+    0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000,
+    0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000,
+    0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000,
+    0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000,
+    0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000,
+    0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000,
+    0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000,
+    0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000,
+    0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000,
+    0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000,
+    0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000,
+    0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000,
+    0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000,
+    0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000,
+    0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000,
+    0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000,
+    0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000,
+    0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000,
+    0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000,
+    0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000,
+    0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000,
+    0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000,
+    0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000,
+    0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000,
+    0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000,
+    0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000,
+    0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000,
+    0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000,
+    0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000,
+    0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000,
+    0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000,
+    0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000,
+    0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000,
+    0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000,
+    0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000,
+    0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000,
+    0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000,
+    0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000,
+    0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000,
+    0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000,
+    0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000,
+    0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000,
+    0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000,
+    0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000,
+    0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000,
+    0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000,
+    0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000,
+    0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000,
+    0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000,
+    0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000,
+    0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000,
+    0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000,
+    0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000,
+    0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000,
+    0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000,
+    0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000,
+    0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000,
+    0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000,
+    0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000,
+    0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000,
+    0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000,
+    0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000,
+    0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000,
+    0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000,
+    0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000,
+    0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000,
+    0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000,
+    0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000,
+    0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000,
+    0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000,
+    0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000,
+    0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000,
+    0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000,
+    0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000,
+    0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000,
+    0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000,
+    0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000,
+    0x0c7ac97b00000000},
+   {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000,
+    0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000,
+    0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000,
+    0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000,
+    0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000,
+    0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000,
+    0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000,
+    0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000,
+    0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000,
+    0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000,
+    0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000,
+    0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000,
+    0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000,
+    0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000,
+    0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000,
+    0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000,
+    0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000,
+    0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000,
+    0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000,
+    0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000,
+    0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000,
+    0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000,
+    0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000,
+    0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000,
+    0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000,
+    0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000,
+    0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000,
+    0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000,
+    0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000,
+    0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000,
+    0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000,
+    0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000,
+    0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000,
+    0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000,
+    0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000,
+    0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000,
+    0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000,
+    0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000,
+    0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000,
+    0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000,
+    0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000,
+    0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000,
+    0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000,
+    0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000,
+    0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000,
+    0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000,
+    0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000,
+    0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000,
+    0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000,
+    0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000,
+    0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000,
+    0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000,
+    0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000,
+    0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000,
+    0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000,
+    0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000,
+    0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000,
+    0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000,
+    0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000,
+    0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000,
+    0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000,
+    0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000,
+    0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000,
+    0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000,
+    0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000,
+    0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000,
+    0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000,
+    0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000,
+    0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000,
+    0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000,
+    0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000,
+    0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000,
+    0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000,
+    0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000,
+    0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000,
+    0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000,
+    0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000,
+    0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000,
+    0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000,
+    0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000,
+    0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000,
+    0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000,
+    0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000,
+    0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000,
+    0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000,
+    0x5185cd0900000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f,
+    0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91,
+    0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e,
+    0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c,
+    0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02,
+    0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12,
+    0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567,
+    0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277,
+    0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679,
+    0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b,
+    0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4,
+    0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a,
+    0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0,
+    0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0,
+    0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91,
+    0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881,
+    0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173,
+    0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d,
+    0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912,
+    0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8,
+    0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6,
+    0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6,
+    0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b,
+    0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b,
+    0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75,
+    0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f,
+    0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00,
+    0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee,
+    0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c,
+    0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c,
+    0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d,
+    0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d,
+    0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67,
+    0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89,
+    0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706,
+    0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14,
+    0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a,
+    0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a,
+    0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f,
+    0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f,
+    0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591,
+    0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983,
+    0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c,
+    0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2,
+    0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8,
+    0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8,
+    0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89,
+    0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99,
+    0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b,
+    0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485,
+    0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a,
+    0x36197165},
+   {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382,
+    0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85,
+    0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06,
+    0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca,
+    0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e,
+    0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc,
+    0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616,
+    0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54,
+    0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10,
+    0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc,
+    0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f,
+    0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58,
+    0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef,
+    0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad,
+    0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b,
+    0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29,
+    0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6,
+    0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1,
+    0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622,
+    0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039,
+    0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d,
+    0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f,
+    0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32,
+    0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770,
+    0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034,
+    0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f,
+    0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc,
+    0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db,
+    0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154,
+    0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16,
+    0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0,
+    0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592,
+    0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca,
+    0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd,
+    0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e,
+    0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882,
+    0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6,
+    0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384,
+    0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1,
+    0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3,
+    0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7,
+    0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b,
+    0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8,
+    0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff,
+    0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7,
+    0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5,
+    0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23,
+    0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761,
+    0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee,
+    0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9,
+    0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a,
+    0x1a3b93aa},
+   {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a,
+    0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca,
+    0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3,
+    0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb,
+    0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c,
+    0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58,
+    0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed,
+    0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9,
+    0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e,
+    0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906,
+    0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f,
+    0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf,
+    0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0,
+    0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4,
+    0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769,
+    0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d,
+    0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632,
+    0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82,
+    0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb,
+    0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73,
+    0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484,
+    0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0,
+    0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5,
+    0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1,
+    0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516,
+    0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f,
+    0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946,
+    0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6,
+    0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9,
+    0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad,
+    0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820,
+    0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364,
+    0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab,
+    0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b,
+    0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62,
+    0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a,
+    0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd,
+    0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089,
+    0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c,
+    0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8,
+    0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f,
+    0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477,
+    0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e,
+    0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be,
+    0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71,
+    0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635,
+    0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8,
+    0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc,
+    0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3,
+    0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753,
+    0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a,
+    0xe147d714},
+   {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c,
+    0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b,
+    0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92,
+    0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4,
+    0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069,
+    0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526,
+    0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25,
+    0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a,
+    0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7,
+    0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491,
+    0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958,
+    0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f,
+    0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307,
+    0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648,
+    0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999,
+    0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6,
+    0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a,
+    0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d,
+    0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4,
+    0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61,
+    0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc,
+    0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3,
+    0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53,
+    0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c,
+    0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1,
+    0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c,
+    0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5,
+    0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92,
+    0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e,
+    0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771,
+    0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0,
+    0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def,
+    0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0,
+    0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7,
+    0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e,
+    0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58,
+    0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285,
+    0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca,
+    0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce,
+    0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81,
+    0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c,
+    0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a,
+    0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3,
+    0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4,
+    0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb,
+    0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4,
+    0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75,
+    0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a,
+    0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296,
+    0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1,
+    0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808,
+    0x494f0c4b}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d,
+    0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac,
+    0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8,
+    0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95,
+    0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817,
+    0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d,
+    0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac,
+    0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6,
+    0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564,
+    0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39,
+    0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d,
+    0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac,
+    0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de,
+    0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594,
+    0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b,
+    0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01,
+    0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f,
+    0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de,
+    0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba,
+    0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65,
+    0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7,
+    0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad,
+    0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de,
+    0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294,
+    0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716,
+    0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71,
+    0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15,
+    0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4,
+    0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca,
+    0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280,
+    0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f,
+    0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15,
+    0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9,
+    0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748,
+    0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c,
+    0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971,
+    0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3,
+    0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9,
+    0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196,
+    0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc,
+    0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e,
+    0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03,
+    0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67,
+    0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296,
+    0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a,
+    0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170,
+    0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af,
+    0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5,
+    0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb,
+    0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a,
+    0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e,
+    0x4b0c4f49},
+   {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09,
+    0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc,
+    0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e,
+    0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc,
+    0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934,
+    0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2,
+    0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b,
+    0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad,
+    0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155,
+    0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187,
+    0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65,
+    0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390,
+    0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e,
+    0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378,
+    0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889,
+    0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f,
+    0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0,
+    0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145,
+    0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7,
+    0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a,
+    0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2,
+    0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924,
+    0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2,
+    0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514,
+    0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec,
+    0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709,
+    0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb,
+    0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e,
+    0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1,
+    0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227,
+    0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6,
+    0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030,
+    0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0,
+    0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55,
+    0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7,
+    0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165,
+    0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d,
+    0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b,
+    0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c,
+    0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a,
+    0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362,
+    0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0,
+    0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52,
+    0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7,
+    0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237,
+    0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1,
+    0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020,
+    0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6,
+    0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719,
+    0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec,
+    0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e,
+    0x14d747e1},
+   {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0,
+    0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b,
+    0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652,
+    0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437,
+    0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514,
+    0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265,
+    0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de,
+    0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af,
+    0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c,
+    0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9,
+    0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0,
+    0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b,
+    0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6,
+    0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7,
+    0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734,
+    0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045,
+    0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8,
+    0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303,
+    0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a,
+    0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9,
+    0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea,
+    0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b,
+    0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6,
+    0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7,
+    0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4,
+    0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6,
+    0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f,
+    0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054,
+    0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9,
+    0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8,
+    0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b,
+    0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a,
+    0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441,
+    0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a,
+    0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3,
+    0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6,
+    0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5,
+    0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94,
+    0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9,
+    0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288,
+    0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab,
+    0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce,
+    0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7,
+    0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c,
+    0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527,
+    0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256,
+    0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5,
+    0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4,
+    0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39,
+    0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2,
+    0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db,
+    0xaa933b1a},
+   {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603,
+    0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d,
+    0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9,
+    0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b,
+    0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a,
+    0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792,
+    0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4,
+    0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c,
+    0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d,
+    0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f,
+    0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb,
+    0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65,
+    0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330,
+    0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8,
+    0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da,
+    0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742,
+    0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f,
+    0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1,
+    0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5,
+    0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f,
+    0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e,
+    0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6,
+    0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8,
+    0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250,
+    0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021,
+    0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb,
+    0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f,
+    0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511,
+    0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c,
+    0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4,
+    0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886,
+    0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e,
+    0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b,
+    0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5,
+    0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791,
+    0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003,
+    0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272,
+    0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea,
+    0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc,
+    0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24,
+    0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55,
+    0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7,
+    0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3,
+    0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d,
+    0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548,
+    0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0,
+    0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2,
+    0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a,
+    0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47,
+    0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9,
+    0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad,
+    0x65711936}};
+
+#endif
+
+#endif
+
+#if N == 4
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a,
+    0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe,
+    0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b,
+    0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656,
+    0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd,
+    0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d,
+    0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7,
+    0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47,
+    0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac,
+    0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691,
+    0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404,
+    0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0,
+    0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4,
+    0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424,
+    0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5,
+    0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65,
+    0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67,
+    0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3,
+    0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626,
+    0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9,
+    0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222,
+    0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2,
+    0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a,
+    0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a,
+    0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1,
+    0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2,
+    0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077,
+    0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3,
+    0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1,
+    0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621,
+    0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0,
+    0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60,
+    0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0,
+    0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64,
+    0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1,
+    0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc,
+    0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027,
+    0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7,
+    0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9,
+    0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79,
+    0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292,
+    0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af,
+    0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a,
+    0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee,
+    0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e,
+    0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe,
+    0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f,
+    0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff,
+    0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd,
+    0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29,
+    0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc,
+    0xe3c45916},
+   {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344,
+    0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59,
+    0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e,
+    0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463,
+    0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98,
+    0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d,
+    0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3,
+    0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656,
+    0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad,
+    0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0,
+    0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397,
+    0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a,
+    0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2,
+    0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357,
+    0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8,
+    0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d,
+    0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696,
+    0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b,
+    0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc,
+    0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0,
+    0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b,
+    0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be,
+    0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811,
+    0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384,
+    0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f,
+    0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955,
+    0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362,
+    0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f,
+    0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94,
+    0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701,
+    0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe,
+    0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b,
+    0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1,
+    0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc,
+    0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b,
+    0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986,
+    0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d,
+    0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8,
+    0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4,
+    0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371,
+    0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a,
+    0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87,
+    0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0,
+    0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad,
+    0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527,
+    0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2,
+    0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d,
+    0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998,
+    0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73,
+    0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e,
+    0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59,
+    0xa7520488},
+   {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20,
+    0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09,
+    0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431,
+    0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a,
+    0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203,
+    0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b,
+    0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14,
+    0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c,
+    0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25,
+    0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e,
+    0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36,
+    0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f,
+    0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649,
+    0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961,
+    0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58,
+    0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170,
+    0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b,
+    0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742,
+    0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a,
+    0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55,
+    0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c,
+    0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64,
+    0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f,
+    0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77,
+    0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e,
+    0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a,
+    0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2,
+    0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b,
+    0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090,
+    0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8,
+    0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881,
+    0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9,
+    0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6,
+    0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f,
+    0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7,
+    0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c,
+    0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695,
+    0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd,
+    0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb,
+    0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3,
+    0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa,
+    0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1,
+    0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9,
+    0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0,
+    0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df,
+    0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7,
+    0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace,
+    0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6,
+    0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd,
+    0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4,
+    0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec,
+    0x3522e9e4},
+   {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1,
+    0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86,
+    0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b,
+    0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669,
+    0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7,
+    0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352,
+    0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03,
+    0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6,
+    0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38,
+    0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a,
+    0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7,
+    0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80,
+    0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7,
+    0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522,
+    0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d,
+    0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8,
+    0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103,
+    0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54,
+    0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9,
+    0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0,
+    0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e,
+    0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb,
+    0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1,
+    0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624,
+    0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea,
+    0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a,
+    0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37,
+    0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360,
+    0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab,
+    0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e,
+    0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741,
+    0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4,
+    0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334,
+    0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63,
+    0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de,
+    0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c,
+    0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942,
+    0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7,
+    0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131,
+    0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4,
+    0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a,
+    0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758,
+    0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5,
+    0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2,
+    0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32,
+    0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7,
+    0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8,
+    0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d,
+    0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6,
+    0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1,
+    0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c,
+    0x97411e28},
+   {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474,
+    0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5,
+    0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6,
+    0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7,
+    0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938,
+    0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051,
+    0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a,
+    0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3,
+    0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c,
+    0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d,
+    0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e,
+    0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf,
+    0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740,
+    0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29,
+    0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592,
+    0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb,
+    0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4,
+    0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365,
+    0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036,
+    0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7,
+    0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08,
+    0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561,
+    0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a,
+    0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663,
+    0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac,
+    0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d,
+    0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce,
+    0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f,
+    0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50,
+    0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639,
+    0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82,
+    0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb,
+    0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954,
+    0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5,
+    0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86,
+    0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7,
+    0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418,
+    0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71,
+    0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa,
+    0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93,
+    0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c,
+    0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d,
+    0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e,
+    0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df,
+    0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60,
+    0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309,
+    0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2,
+    0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db,
+    0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4,
+    0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45,
+    0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16,
+    0x93c7a00b},
+   {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45,
+    0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb,
+    0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d,
+    0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696,
+    0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf,
+    0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb,
+    0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028,
+    0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c,
+    0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65,
+    0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be,
+    0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038,
+    0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6,
+    0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15,
+    0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11,
+    0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d,
+    0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19,
+    0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05,
+    0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b,
+    0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d,
+    0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c,
+    0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35,
+    0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31,
+    0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068,
+    0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c,
+    0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25,
+    0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a,
+    0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac,
+    0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22,
+    0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e,
+    0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a,
+    0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36,
+    0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32,
+    0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84,
+    0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a,
+    0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c,
+    0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057,
+    0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e,
+    0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a,
+    0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc,
+    0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8,
+    0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1,
+    0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a,
+    0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec,
+    0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62,
+    0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4,
+    0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0,
+    0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc,
+    0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8,
+    0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4,
+    0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a,
+    0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc,
+    0xce5f968d},
+   {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de,
+    0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b,
+    0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d,
+    0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680,
+    0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4,
+    0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d,
+    0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde,
+    0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97,
+    0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3,
+    0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e,
+    0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678,
+    0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d,
+    0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723,
+    0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a,
+    0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0,
+    0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9,
+    0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85,
+    0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770,
+    0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56,
+    0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a,
+    0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e,
+    0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67,
+    0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785,
+    0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc,
+    0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788,
+    0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90,
+    0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6,
+    0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843,
+    0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f,
+    0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336,
+    0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac,
+    0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5,
+    0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68,
+    0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d,
+    0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb,
+    0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36,
+    0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72,
+    0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b,
+    0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b,
+    0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402,
+    0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446,
+    0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb,
+    0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed,
+    0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418,
+    0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95,
+    0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc,
+    0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946,
+    0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f,
+    0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233,
+    0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6,
+    0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0,
+    0x3e721277},
+   {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb,
+    0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9,
+    0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11,
+    0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d,
+    0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9,
+    0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c,
+    0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881,
+    0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274,
+    0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790,
+    0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc,
+    0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514,
+    0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56,
+    0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9,
+    0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c,
+    0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13,
+    0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6,
+    0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c,
+    0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e,
+    0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386,
+    0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376,
+    0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692,
+    0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67,
+    0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416,
+    0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3,
+    0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07,
+    0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd,
+    0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15,
+    0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457,
+    0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd,
+    0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28,
+    0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337,
+    0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2,
+    0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594,
+    0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6,
+    0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e,
+    0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52,
+    0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6,
+    0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143,
+    0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17,
+    0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2,
+    0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306,
+    0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a,
+    0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182,
+    0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0,
+    0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496,
+    0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63,
+    0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c,
+    0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89,
+    0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903,
+    0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041,
+    0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9,
+    0x1c65ace7}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000,
+    0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000,
+    0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000,
+    0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000,
+    0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000,
+    0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000,
+    0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000,
+    0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000,
+    0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000,
+    0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000,
+    0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000,
+    0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000,
+    0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000,
+    0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000,
+    0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000,
+    0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000,
+    0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000,
+    0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000,
+    0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000,
+    0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000,
+    0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000,
+    0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000,
+    0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000,
+    0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000,
+    0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000,
+    0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000,
+    0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000,
+    0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000,
+    0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000,
+    0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000,
+    0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000,
+    0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000,
+    0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000,
+    0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000,
+    0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000,
+    0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000,
+    0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000,
+    0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000,
+    0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000,
+    0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000,
+    0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000,
+    0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000,
+    0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000,
+    0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000,
+    0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000,
+    0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000,
+    0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000,
+    0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000,
+    0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000,
+    0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000,
+    0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000,
+    0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000,
+    0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000,
+    0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000,
+    0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000,
+    0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000,
+    0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000,
+    0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000,
+    0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000,
+    0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000,
+    0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000,
+    0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000,
+    0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000,
+    0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000,
+    0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000,
+    0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000,
+    0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000,
+    0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000,
+    0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000,
+    0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000,
+    0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000,
+    0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000,
+    0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000,
+    0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000,
+    0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000,
+    0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000,
+    0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000,
+    0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000,
+    0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000,
+    0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000,
+    0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000,
+    0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000,
+    0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000,
+    0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000,
+    0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000,
+    0xe7ac651c00000000},
+   {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000,
+    0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000,
+    0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000,
+    0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000,
+    0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000,
+    0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000,
+    0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000,
+    0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000,
+    0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000,
+    0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000,
+    0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000,
+    0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000,
+    0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000,
+    0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000,
+    0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000,
+    0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000,
+    0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000,
+    0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000,
+    0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000,
+    0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000,
+    0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000,
+    0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000,
+    0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000,
+    0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000,
+    0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000,
+    0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000,
+    0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000,
+    0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000,
+    0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000,
+    0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000,
+    0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000,
+    0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000,
+    0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000,
+    0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000,
+    0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000,
+    0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000,
+    0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000,
+    0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000,
+    0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000,
+    0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000,
+    0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000,
+    0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000,
+    0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000,
+    0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000,
+    0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000,
+    0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000,
+    0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000,
+    0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000,
+    0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000,
+    0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000,
+    0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000,
+    0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000,
+    0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000,
+    0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000,
+    0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000,
+    0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000,
+    0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000,
+    0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000,
+    0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000,
+    0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000,
+    0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000,
+    0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000,
+    0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000,
+    0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000,
+    0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000,
+    0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000,
+    0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000,
+    0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000,
+    0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000,
+    0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000,
+    0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000,
+    0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000,
+    0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000,
+    0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000,
+    0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000,
+    0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000,
+    0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000,
+    0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000,
+    0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000,
+    0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000,
+    0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000,
+    0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000,
+    0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000,
+    0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000,
+    0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000,
+    0x7712723e00000000},
+   {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000,
+    0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000,
+    0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000,
+    0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000,
+    0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000,
+    0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000,
+    0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000,
+    0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000,
+    0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000,
+    0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000,
+    0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000,
+    0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000,
+    0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000,
+    0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000,
+    0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000,
+    0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000,
+    0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000,
+    0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000,
+    0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000,
+    0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000,
+    0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000,
+    0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000,
+    0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000,
+    0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000,
+    0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000,
+    0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000,
+    0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000,
+    0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000,
+    0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000,
+    0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000,
+    0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000,
+    0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000,
+    0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000,
+    0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000,
+    0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000,
+    0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000,
+    0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000,
+    0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000,
+    0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000,
+    0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000,
+    0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000,
+    0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000,
+    0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000,
+    0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000,
+    0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000,
+    0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000,
+    0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000,
+    0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000,
+    0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000,
+    0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000,
+    0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000,
+    0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000,
+    0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000,
+    0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000,
+    0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000,
+    0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000,
+    0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000,
+    0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000,
+    0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000,
+    0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000,
+    0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000,
+    0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000,
+    0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000,
+    0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000,
+    0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000,
+    0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000,
+    0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000,
+    0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000,
+    0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000,
+    0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000,
+    0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000,
+    0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000,
+    0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000,
+    0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000,
+    0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000,
+    0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000,
+    0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000,
+    0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000,
+    0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000,
+    0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000,
+    0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000,
+    0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000,
+    0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000,
+    0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000,
+    0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000,
+    0x8d965fce00000000},
+   {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000,
+    0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000,
+    0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000,
+    0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000,
+    0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000,
+    0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000,
+    0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000,
+    0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000,
+    0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000,
+    0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000,
+    0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000,
+    0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000,
+    0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000,
+    0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000,
+    0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000,
+    0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000,
+    0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000,
+    0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000,
+    0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000,
+    0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000,
+    0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000,
+    0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000,
+    0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000,
+    0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000,
+    0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000,
+    0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000,
+    0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000,
+    0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000,
+    0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000,
+    0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000,
+    0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000,
+    0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000,
+    0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000,
+    0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000,
+    0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000,
+    0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000,
+    0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000,
+    0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000,
+    0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000,
+    0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000,
+    0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000,
+    0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000,
+    0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000,
+    0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000,
+    0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000,
+    0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000,
+    0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000,
+    0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000,
+    0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000,
+    0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000,
+    0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000,
+    0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000,
+    0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000,
+    0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000,
+    0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000,
+    0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000,
+    0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000,
+    0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000,
+    0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000,
+    0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000,
+    0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000,
+    0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000,
+    0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000,
+    0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000,
+    0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000,
+    0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000,
+    0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000,
+    0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000,
+    0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000,
+    0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000,
+    0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000,
+    0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000,
+    0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000,
+    0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000,
+    0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000,
+    0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000,
+    0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000,
+    0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000,
+    0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000,
+    0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000,
+    0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000,
+    0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000,
+    0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000,
+    0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000,
+    0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000,
+    0x0ba0c79300000000},
+   {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000,
+    0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000,
+    0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000,
+    0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000,
+    0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000,
+    0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000,
+    0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000,
+    0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000,
+    0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000,
+    0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000,
+    0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000,
+    0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000,
+    0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000,
+    0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000,
+    0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000,
+    0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000,
+    0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000,
+    0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000,
+    0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000,
+    0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000,
+    0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000,
+    0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000,
+    0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000,
+    0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000,
+    0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000,
+    0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000,
+    0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000,
+    0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000,
+    0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000,
+    0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000,
+    0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000,
+    0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000,
+    0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000,
+    0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000,
+    0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000,
+    0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000,
+    0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000,
+    0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000,
+    0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000,
+    0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000,
+    0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000,
+    0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000,
+    0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000,
+    0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000,
+    0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000,
+    0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000,
+    0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000,
+    0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000,
+    0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000,
+    0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000,
+    0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000,
+    0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000,
+    0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000,
+    0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000,
+    0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000,
+    0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000,
+    0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000,
+    0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000,
+    0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000,
+    0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000,
+    0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000,
+    0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000,
+    0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000,
+    0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000,
+    0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000,
+    0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000,
+    0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000,
+    0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000,
+    0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000,
+    0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000,
+    0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000,
+    0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000,
+    0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000,
+    0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000,
+    0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000,
+    0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000,
+    0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000,
+    0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000,
+    0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000,
+    0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000,
+    0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000,
+    0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000,
+    0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000,
+    0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000,
+    0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000,
+    0x281e419700000000},
+   {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000,
+    0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000,
+    0x304a428900000000, 0x38a922b500000000, 0x011e763800000000,
+    0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000,
+    0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000,
+    0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000,
+    0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000,
+    0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000,
+    0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000,
+    0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000,
+    0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000,
+    0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000,
+    0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000,
+    0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000,
+    0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000,
+    0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000,
+    0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000,
+    0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000,
+    0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000,
+    0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000,
+    0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000,
+    0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000,
+    0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000,
+    0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000,
+    0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000,
+    0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000,
+    0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000,
+    0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000,
+    0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000,
+    0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000,
+    0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000,
+    0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000,
+    0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000,
+    0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000,
+    0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000,
+    0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000,
+    0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000,
+    0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000,
+    0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000,
+    0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000,
+    0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000,
+    0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000,
+    0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000,
+    0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000,
+    0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000,
+    0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000,
+    0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000,
+    0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000,
+    0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000,
+    0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000,
+    0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000,
+    0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000,
+    0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000,
+    0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000,
+    0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000,
+    0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000,
+    0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000,
+    0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000,
+    0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000,
+    0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000,
+    0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000,
+    0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000,
+    0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000,
+    0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000,
+    0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000,
+    0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000,
+    0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000,
+    0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000,
+    0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000,
+    0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000,
+    0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000,
+    0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000,
+    0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000,
+    0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000,
+    0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000,
+    0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000,
+    0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000,
+    0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000,
+    0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000,
+    0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000,
+    0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000,
+    0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000,
+    0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000,
+    0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000,
+    0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000,
+    0xe4e9223500000000},
+   {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000,
+    0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000,
+    0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000,
+    0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000,
+    0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000,
+    0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000,
+    0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000,
+    0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000,
+    0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000,
+    0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000,
+    0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000,
+    0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000,
+    0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000,
+    0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000,
+    0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000,
+    0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000,
+    0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000,
+    0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000,
+    0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000,
+    0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000,
+    0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000,
+    0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000,
+    0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000,
+    0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000,
+    0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000,
+    0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000,
+    0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000,
+    0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000,
+    0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000,
+    0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000,
+    0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000,
+    0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000,
+    0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000,
+    0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000,
+    0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000,
+    0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000,
+    0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000,
+    0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000,
+    0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000,
+    0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000,
+    0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000,
+    0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000,
+    0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000,
+    0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000,
+    0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000,
+    0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000,
+    0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000,
+    0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000,
+    0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000,
+    0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000,
+    0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000,
+    0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000,
+    0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000,
+    0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000,
+    0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000,
+    0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000,
+    0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000,
+    0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000,
+    0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000,
+    0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000,
+    0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000,
+    0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000,
+    0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000,
+    0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000,
+    0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000,
+    0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000,
+    0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000,
+    0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000,
+    0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000,
+    0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000,
+    0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000,
+    0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000,
+    0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000,
+    0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000,
+    0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000,
+    0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000,
+    0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000,
+    0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000,
+    0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000,
+    0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000,
+    0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000,
+    0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000,
+    0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000,
+    0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000,
+    0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000,
+    0x880452a700000000},
+   {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000,
+    0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000,
+    0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000,
+    0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000,
+    0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000,
+    0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000,
+    0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000,
+    0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000,
+    0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000,
+    0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000,
+    0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000,
+    0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000,
+    0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000,
+    0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000,
+    0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000,
+    0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000,
+    0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000,
+    0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000,
+    0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000,
+    0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000,
+    0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000,
+    0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000,
+    0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000,
+    0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000,
+    0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000,
+    0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000,
+    0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000,
+    0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000,
+    0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000,
+    0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000,
+    0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000,
+    0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000,
+    0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000,
+    0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000,
+    0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000,
+    0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000,
+    0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000,
+    0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000,
+    0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000,
+    0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000,
+    0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000,
+    0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000,
+    0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000,
+    0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000,
+    0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000,
+    0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000,
+    0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000,
+    0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000,
+    0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000,
+    0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000,
+    0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000,
+    0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000,
+    0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000,
+    0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000,
+    0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000,
+    0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000,
+    0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000,
+    0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000,
+    0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000,
+    0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000,
+    0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000,
+    0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000,
+    0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000,
+    0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000,
+    0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000,
+    0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000,
+    0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000,
+    0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000,
+    0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000,
+    0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000,
+    0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000,
+    0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000,
+    0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000,
+    0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000,
+    0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000,
+    0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000,
+    0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000,
+    0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000,
+    0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000,
+    0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000,
+    0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000,
+    0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000,
+    0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000,
+    0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000,
+    0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000,
+    0x1659c4e300000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87,
+    0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede,
+    0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab,
+    0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c,
+    0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1,
+    0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7,
+    0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e,
+    0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308,
+    0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5,
+    0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472,
+    0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07,
+    0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e,
+    0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa,
+    0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec,
+    0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6,
+    0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0,
+    0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3,
+    0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba,
+    0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf,
+    0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975,
+    0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8,
+    0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde,
+    0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a,
+    0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c,
+    0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1,
+    0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65,
+    0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410,
+    0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649,
+    0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a,
+    0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c,
+    0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946,
+    0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450,
+    0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e,
+    0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857,
+    0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022,
+    0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5,
+    0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758,
+    0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e,
+    0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d,
+    0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b,
+    0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6,
+    0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401,
+    0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74,
+    0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d,
+    0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073,
+    0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65,
+    0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f,
+    0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749,
+    0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a,
+    0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033,
+    0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846,
+    0x0d7139d7},
+   {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563,
+    0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f,
+    0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875,
+    0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536,
+    0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8,
+    0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43,
+    0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f,
+    0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184,
+    0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a,
+    0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39,
+    0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523,
+    0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f,
+    0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d,
+    0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6,
+    0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b,
+    0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0,
+    0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151,
+    0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d,
+    0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47,
+    0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a,
+    0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964,
+    0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef,
+    0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d,
+    0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6,
+    0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348,
+    0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53,
+    0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449,
+    0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645,
+    0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4,
+    0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f,
+    0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2,
+    0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69,
+    0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46,
+    0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a,
+    0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650,
+    0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13,
+    0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded,
+    0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366,
+    0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57,
+    0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc,
+    0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222,
+    0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61,
+    0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b,
+    0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277,
+    0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558,
+    0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3,
+    0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e,
+    0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5,
+    0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74,
+    0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78,
+    0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262,
+    0x1c53e98a},
+   {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b,
+    0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40,
+    0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580,
+    0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7,
+    0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a,
+    0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37,
+    0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75,
+    0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218,
+    0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5,
+    0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2,
+    0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02,
+    0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59,
+    0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1,
+    0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c,
+    0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a,
+    0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307,
+    0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486,
+    0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd,
+    0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d,
+    0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2,
+    0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f,
+    0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72,
+    0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8,
+    0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985,
+    0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268,
+    0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94,
+    0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454,
+    0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f,
+    0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e,
+    0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3,
+    0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915,
+    0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778,
+    0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821,
+    0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a,
+    0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba,
+    0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d,
+    0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560,
+    0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d,
+    0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe,
+    0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3,
+    0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e,
+    0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509,
+    0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9,
+    0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92,
+    0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb,
+    0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6,
+    0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50,
+    0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d,
+    0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc,
+    0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7,
+    0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927,
+    0x3f88e851},
+   {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96,
+    0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8,
+    0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0,
+    0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14,
+    0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7,
+    0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4,
+    0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe,
+    0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad,
+    0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e,
+    0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa,
+    0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2,
+    0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c,
+    0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab,
+    0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8,
+    0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d,
+    0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e,
+    0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7,
+    0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99,
+    0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1,
+    0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690,
+    0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933,
+    0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20,
+    0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf,
+    0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc,
+    0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f,
+    0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92,
+    0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca,
+    0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4,
+    0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd,
+    0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de,
+    0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb,
+    0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8,
+    0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474,
+    0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a,
+    0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252,
+    0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6,
+    0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55,
+    0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846,
+    0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7,
+    0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4,
+    0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47,
+    0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3,
+    0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb,
+    0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5,
+    0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49,
+    0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a,
+    0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f,
+    0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c,
+    0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305,
+    0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b,
+    0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523,
+    0x3dee8ca6}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0,
+    0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587,
+    0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa,
+    0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09,
+    0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee,
+    0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3,
+    0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3,
+    0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce,
+    0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429,
+    0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda,
+    0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7,
+    0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0,
+    0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd,
+    0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0,
+    0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287,
+    0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a,
+    0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9,
+    0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e,
+    0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3,
+    0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3,
+    0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054,
+    0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49,
+    0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da,
+    0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7,
+    0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20,
+    0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d,
+    0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00,
+    0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347,
+    0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14,
+    0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209,
+    0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e,
+    0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33,
+    0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3,
+    0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194,
+    0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9,
+    0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a,
+    0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd,
+    0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0,
+    0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d,
+    0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460,
+    0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87,
+    0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674,
+    0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509,
+    0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e,
+    0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae,
+    0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3,
+    0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694,
+    0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989,
+    0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da,
+    0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d,
+    0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0,
+    0xa68cee3d},
+   {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19,
+    0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae,
+    0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb,
+    0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a,
+    0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55,
+    0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1,
+    0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c,
+    0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8,
+    0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7,
+    0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936,
+    0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453,
+    0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4,
+    0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941,
+    0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5,
+    0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93,
+    0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17,
+    0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e,
+    0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89,
+    0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec,
+    0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0,
+    0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf,
+    0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b,
+    0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b,
+    0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f,
+    0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0,
+    0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e,
+    0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b,
+    0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc,
+    0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5,
+    0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261,
+    0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637,
+    0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3,
+    0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57,
+    0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0,
+    0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85,
+    0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454,
+    0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b,
+    0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f,
+    0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423,
+    0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7,
+    0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8,
+    0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739,
+    0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c,
+    0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb,
+    0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f,
+    0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b,
+    0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd,
+    0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59,
+    0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070,
+    0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7,
+    0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2,
+    0x51e8883f},
+   {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a,
+    0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276,
+    0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed,
+    0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55,
+    0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b,
+    0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8,
+    0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320,
+    0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413,
+    0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd,
+    0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75,
+    0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee,
+    0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312,
+    0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca,
+    0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9,
+    0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad,
+    0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e,
+    0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504,
+    0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8,
+    0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63,
+    0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353,
+    0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d,
+    0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be,
+    0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae,
+    0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d,
+    0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943,
+    0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7,
+    0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c,
+    0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390,
+    0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a,
+    0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239,
+    0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d,
+    0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e,
+    0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c,
+    0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0,
+    0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b,
+    0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93,
+    0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d,
+    0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e,
+    0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c,
+    0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f,
+    0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1,
+    0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579,
+    0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2,
+    0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e,
+    0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c,
+    0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f,
+    0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b,
+    0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158,
+    0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2,
+    0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e,
+    0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5,
+    0x8ae9531c},
+   {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4,
+    0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd,
+    0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220,
+    0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf,
+    0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495,
+    0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def,
+    0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90,
+    0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea,
+    0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0,
+    0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f,
+    0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2,
+    0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab,
+    0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e,
+    0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754,
+    0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda,
+    0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0,
+    0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c,
+    0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215,
+    0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8,
+    0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910,
+    0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a,
+    0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30,
+    0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658,
+    0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22,
+    0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478,
+    0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2,
+    0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f,
+    0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606,
+    0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba,
+    0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0,
+    0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e,
+    0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034,
+    0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f,
+    0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996,
+    0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b,
+    0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84,
+    0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de,
+    0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4,
+    0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5,
+    0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f,
+    0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5,
+    0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a,
+    0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7,
+    0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce,
+    0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65,
+    0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f,
+    0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91,
+    0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb,
+    0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57,
+    0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e,
+    0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3,
+    0xd739710d}};
+
+#endif
+
+#endif
+
+#if N == 5
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df,
+    0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8,
+    0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef,
+    0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376,
+    0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201,
+    0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399,
+    0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372,
+    0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea,
+    0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d,
+    0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004,
+    0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353,
+    0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334,
+    0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a,
+    0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2,
+    0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a,
+    0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2,
+    0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b,
+    0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c,
+    0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b,
+    0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f,
+    0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338,
+    0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0,
+    0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6,
+    0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e,
+    0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319,
+    0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3,
+    0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4,
+    0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783,
+    0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a,
+    0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492,
+    0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a,
+    0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2,
+    0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496,
+    0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1,
+    0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6,
+    0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f,
+    0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548,
+    0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0,
+    0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741,
+    0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9,
+    0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae,
+    0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437,
+    0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760,
+    0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707,
+    0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433,
+    0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab,
+    0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703,
+    0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b,
+    0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412,
+    0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475,
+    0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722,
+    0xe9947565},
+   {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5,
+    0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22,
+    0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c,
+    0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed,
+    0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d,
+    0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1,
+    0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e,
+    0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32,
+    0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142,
+    0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93,
+    0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d,
+    0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a,
+    0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58,
+    0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14,
+    0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81,
+    0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd,
+    0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab,
+    0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c,
+    0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72,
+    0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f,
+    0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff,
+    0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3,
+    0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30,
+    0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c,
+    0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c,
+    0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558,
+    0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146,
+    0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581,
+    0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7,
+    0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab,
+    0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e,
+    0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272,
+    0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838,
+    0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff,
+    0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1,
+    0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330,
+    0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840,
+    0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c,
+    0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb,
+    0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7,
+    0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7,
+    0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616,
+    0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208,
+    0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf,
+    0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85,
+    0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9,
+    0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c,
+    0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10,
+    0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76,
+    0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1,
+    0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf,
+    0xf7d05006},
+   {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b,
+    0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774,
+    0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58,
+    0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a,
+    0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb,
+    0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952,
+    0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e,
+    0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7,
+    0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746,
+    0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14,
+    0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338,
+    0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907,
+    0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777,
+    0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de,
+    0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064,
+    0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd,
+    0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951,
+    0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e,
+    0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42,
+    0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b,
+    0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a,
+    0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3,
+    0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904,
+    0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad,
+    0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c,
+    0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d,
+    0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861,
+    0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e,
+    0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2,
+    0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b,
+    0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1,
+    0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78,
+    0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f,
+    0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40,
+    0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c,
+    0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e,
+    0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf,
+    0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166,
+    0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d,
+    0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4,
+    0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805,
+    0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157,
+    0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b,
+    0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644,
+    0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43,
+    0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea,
+    0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850,
+    0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9,
+    0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165,
+    0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a,
+    0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676,
+    0xb2075b94},
+   {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf,
+    0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61,
+    0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be,
+    0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd,
+    0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3,
+    0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063,
+    0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105,
+    0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5,
+    0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb,
+    0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8,
+    0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07,
+    0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9,
+    0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5,
+    0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515,
+    0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4,
+    0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014,
+    0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7,
+    0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269,
+    0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6,
+    0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af,
+    0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1,
+    0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111,
+    0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d,
+    0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad,
+    0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3,
+    0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75,
+    0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa,
+    0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74,
+    0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7,
+    0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477,
+    0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6,
+    0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176,
+    0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af,
+    0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71,
+    0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae,
+    0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd,
+    0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3,
+    0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073,
+    0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0,
+    0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400,
+    0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e,
+    0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d,
+    0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2,
+    0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c,
+    0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5,
+    0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505,
+    0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4,
+    0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004,
+    0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7,
+    0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279,
+    0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6,
+    0xba50bcb9},
+   {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897,
+    0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb,
+    0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2,
+    0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2,
+    0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372,
+    0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70,
+    0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92,
+    0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190,
+    0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40,
+    0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430,
+    0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759,
+    0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75,
+    0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2,
+    0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0,
+    0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7,
+    0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5,
+    0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39,
+    0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215,
+    0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c,
+    0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5,
+    0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625,
+    0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27,
+    0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c,
+    0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e,
+    0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee,
+    0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71,
+    0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18,
+    0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134,
+    0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8,
+    0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba,
+    0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd,
+    0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff,
+    0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a,
+    0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6,
+    0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf,
+    0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf,
+    0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f,
+    0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d,
+    0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d,
+    0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f,
+    0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af,
+    0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df,
+    0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6,
+    0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a,
+    0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef,
+    0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed,
+    0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa,
+    0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8,
+    0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624,
+    0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08,
+    0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861,
+    0x808abcf4},
+   {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2,
+    0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd,
+    0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76,
+    0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52,
+    0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e,
+    0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124,
+    0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147,
+    0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d,
+    0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31,
+    0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15,
+    0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae,
+    0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1,
+    0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d,
+    0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307,
+    0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9,
+    0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3,
+    0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084,
+    0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb,
+    0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850,
+    0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2,
+    0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe,
+    0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94,
+    0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261,
+    0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b,
+    0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917,
+    0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53,
+    0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8,
+    0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787,
+    0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0,
+    0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba,
+    0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404,
+    0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e,
+    0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af,
+    0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0,
+    0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b,
+    0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f,
+    0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543,
+    0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129,
+    0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627,
+    0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d,
+    0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51,
+    0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75,
+    0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce,
+    0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1,
+    0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760,
+    0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a,
+    0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4,
+    0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde,
+    0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089,
+    0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6,
+    0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d,
+    0xefdb3f95},
+   {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8,
+    0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7,
+    0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945,
+    0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9,
+    0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652,
+    0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc,
+    0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a,
+    0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4,
+    0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f,
+    0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3,
+    0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51,
+    0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e,
+    0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c,
+    0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362,
+    0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11,
+    0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff,
+    0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7,
+    0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8,
+    0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a,
+    0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690,
+    0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b,
+    0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5,
+    0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05,
+    0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb,
+    0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740,
+    0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f,
+    0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded,
+    0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2,
+    0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa,
+    0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714,
+    0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67,
+    0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89,
+    0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7,
+    0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8,
+    0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a,
+    0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6,
+    0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d,
+    0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3,
+    0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9,
+    0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57,
+    0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc,
+    0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540,
+    0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2,
+    0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd,
+    0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93,
+    0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d,
+    0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e,
+    0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0,
+    0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8,
+    0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7,
+    0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75,
+    0x0e2fbf43},
+   {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc,
+    0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a,
+    0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3,
+    0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7,
+    0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b,
+    0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154,
+    0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3,
+    0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc,
+    0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330,
+    0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264,
+    0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd,
+    0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b,
+    0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a,
+    0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175,
+    0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275,
+    0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a,
+    0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234,
+    0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2,
+    0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b,
+    0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a,
+    0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6,
+    0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189,
+    0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b,
+    0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204,
+    0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8,
+    0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226,
+    0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff,
+    0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219,
+    0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167,
+    0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258,
+    0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158,
+    0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267,
+    0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c,
+    0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da,
+    0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003,
+    0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157,
+    0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b,
+    0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4,
+    0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179,
+    0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246,
+    0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a,
+    0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de,
+    0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107,
+    0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1,
+    0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba,
+    0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285,
+    0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185,
+    0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba,
+    0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4,
+    0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322,
+    0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb,
+    0xf4377108}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000,
+    0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000,
+    0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000,
+    0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000,
+    0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000,
+    0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000,
+    0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000,
+    0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000,
+    0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000,
+    0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000,
+    0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000,
+    0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000,
+    0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000,
+    0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000,
+    0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000,
+    0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000,
+    0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000,
+    0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000,
+    0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000,
+    0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000,
+    0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000,
+    0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000,
+    0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000,
+    0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000,
+    0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000,
+    0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000,
+    0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000,
+    0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000,
+    0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000,
+    0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000,
+    0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000,
+    0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000,
+    0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000,
+    0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000,
+    0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000,
+    0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000,
+    0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000,
+    0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000,
+    0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000,
+    0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000,
+    0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000,
+    0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000,
+    0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000,
+    0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000,
+    0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000,
+    0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000,
+    0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000,
+    0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000,
+    0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000,
+    0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000,
+    0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000,
+    0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000,
+    0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000,
+    0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000,
+    0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000,
+    0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000,
+    0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000,
+    0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000,
+    0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000,
+    0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000,
+    0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000,
+    0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000,
+    0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000,
+    0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000,
+    0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000,
+    0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000,
+    0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000,
+    0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000,
+    0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000,
+    0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000,
+    0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000,
+    0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000,
+    0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000,
+    0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000,
+    0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000,
+    0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000,
+    0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000,
+    0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000,
+    0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000,
+    0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000,
+    0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000,
+    0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000,
+    0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000,
+    0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000,
+    0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000,
+    0x087137f400000000},
+   {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000,
+    0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000,
+    0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000,
+    0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000,
+    0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000,
+    0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000,
+    0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000,
+    0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000,
+    0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000,
+    0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000,
+    0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000,
+    0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000,
+    0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000,
+    0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000,
+    0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000,
+    0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000,
+    0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000,
+    0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000,
+    0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000,
+    0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000,
+    0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000,
+    0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000,
+    0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000,
+    0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000,
+    0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000,
+    0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000,
+    0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000,
+    0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000,
+    0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000,
+    0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000,
+    0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000,
+    0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000,
+    0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000,
+    0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000,
+    0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000,
+    0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000,
+    0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000,
+    0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000,
+    0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000,
+    0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000,
+    0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000,
+    0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000,
+    0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000,
+    0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000,
+    0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000,
+    0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000,
+    0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000,
+    0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000,
+    0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000,
+    0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000,
+    0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000,
+    0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000,
+    0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000,
+    0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000,
+    0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000,
+    0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000,
+    0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000,
+    0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000,
+    0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000,
+    0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000,
+    0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000,
+    0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000,
+    0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000,
+    0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000,
+    0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000,
+    0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000,
+    0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000,
+    0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000,
+    0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000,
+    0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000,
+    0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000,
+    0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000,
+    0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000,
+    0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000,
+    0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000,
+    0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000,
+    0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000,
+    0x1129fad400000000, 0x621116d400000000, 0x544094f000000000,
+    0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000,
+    0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000,
+    0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000,
+    0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000,
+    0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000,
+    0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000,
+    0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000,
+    0x43bf2f0e00000000},
+   {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000,
+    0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000,
+    0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000,
+    0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000,
+    0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000,
+    0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000,
+    0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000,
+    0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000,
+    0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000,
+    0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000,
+    0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000,
+    0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000,
+    0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000,
+    0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000,
+    0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000,
+    0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000,
+    0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000,
+    0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000,
+    0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000,
+    0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000,
+    0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000,
+    0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000,
+    0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000,
+    0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000,
+    0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000,
+    0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000,
+    0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000,
+    0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000,
+    0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000,
+    0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000,
+    0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000,
+    0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000,
+    0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000,
+    0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000,
+    0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000,
+    0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000,
+    0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000,
+    0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000,
+    0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000,
+    0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000,
+    0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000,
+    0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000,
+    0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000,
+    0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000,
+    0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000,
+    0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000,
+    0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000,
+    0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000,
+    0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000,
+    0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000,
+    0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000,
+    0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000,
+    0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000,
+    0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000,
+    0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000,
+    0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000,
+    0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000,
+    0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000,
+    0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000,
+    0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000,
+    0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000,
+    0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000,
+    0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000,
+    0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000,
+    0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000,
+    0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000,
+    0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000,
+    0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000,
+    0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000,
+    0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000,
+    0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000,
+    0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000,
+    0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000,
+    0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000,
+    0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000,
+    0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000,
+    0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000,
+    0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000,
+    0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000,
+    0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000,
+    0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000,
+    0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000,
+    0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000,
+    0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000,
+    0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000,
+    0x953fdbef00000000},
+   {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000,
+    0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000,
+    0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000,
+    0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000,
+    0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000,
+    0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000,
+    0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000,
+    0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000,
+    0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000,
+    0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000,
+    0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000,
+    0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000,
+    0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000,
+    0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000,
+    0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000,
+    0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000,
+    0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000,
+    0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000,
+    0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000,
+    0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000,
+    0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000,
+    0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000,
+    0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000,
+    0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000,
+    0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000,
+    0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000,
+    0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000,
+    0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000,
+    0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000,
+    0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000,
+    0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000,
+    0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000,
+    0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000,
+    0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000,
+    0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000,
+    0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000,
+    0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000,
+    0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000,
+    0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000,
+    0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000,
+    0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000,
+    0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000,
+    0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000,
+    0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000,
+    0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000,
+    0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000,
+    0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000,
+    0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000,
+    0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000,
+    0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000,
+    0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000,
+    0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000,
+    0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000,
+    0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000,
+    0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000,
+    0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000,
+    0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000,
+    0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000,
+    0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000,
+    0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000,
+    0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000,
+    0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000,
+    0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000,
+    0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000,
+    0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000,
+    0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000,
+    0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000,
+    0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000,
+    0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000,
+    0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000,
+    0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000,
+    0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000,
+    0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000,
+    0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000,
+    0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000,
+    0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000,
+    0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000,
+    0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000,
+    0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000,
+    0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000,
+    0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000,
+    0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000,
+    0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000,
+    0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000,
+    0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000,
+    0xf4bc8a8000000000},
+   {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000,
+    0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000,
+    0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000,
+    0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000,
+    0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000,
+    0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000,
+    0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000,
+    0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000,
+    0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000,
+    0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000,
+    0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000,
+    0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000,
+    0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000,
+    0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000,
+    0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000,
+    0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000,
+    0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000,
+    0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000,
+    0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000,
+    0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000,
+    0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000,
+    0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000,
+    0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000,
+    0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000,
+    0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000,
+    0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000,
+    0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000,
+    0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000,
+    0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000,
+    0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000,
+    0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000,
+    0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000,
+    0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000,
+    0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000,
+    0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000,
+    0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000,
+    0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000,
+    0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000,
+    0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000,
+    0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000,
+    0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000,
+    0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000,
+    0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000,
+    0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000,
+    0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000,
+    0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000,
+    0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000,
+    0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000,
+    0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000,
+    0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000,
+    0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000,
+    0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000,
+    0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000,
+    0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000,
+    0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000,
+    0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000,
+    0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000,
+    0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000,
+    0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000,
+    0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000,
+    0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000,
+    0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000,
+    0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000,
+    0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000,
+    0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000,
+    0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000,
+    0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000,
+    0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000,
+    0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000,
+    0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000,
+    0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000,
+    0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000,
+    0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000,
+    0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000,
+    0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000,
+    0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000,
+    0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000,
+    0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000,
+    0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000,
+    0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000,
+    0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000,
+    0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000,
+    0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000,
+    0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000,
+    0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000,
+    0xb9bc50ba00000000},
+   {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000,
+    0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000,
+    0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000,
+    0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000,
+    0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000,
+    0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000,
+    0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000,
+    0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000,
+    0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000,
+    0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000,
+    0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000,
+    0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000,
+    0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000,
+    0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000,
+    0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000,
+    0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000,
+    0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000,
+    0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000,
+    0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000,
+    0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000,
+    0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000,
+    0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000,
+    0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000,
+    0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000,
+    0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000,
+    0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000,
+    0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000,
+    0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000,
+    0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000,
+    0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000,
+    0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000,
+    0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000,
+    0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000,
+    0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000,
+    0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000,
+    0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000,
+    0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000,
+    0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000,
+    0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000,
+    0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000,
+    0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000,
+    0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000,
+    0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000,
+    0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000,
+    0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000,
+    0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000,
+    0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000,
+    0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000,
+    0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000,
+    0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000,
+    0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000,
+    0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000,
+    0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000,
+    0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000,
+    0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000,
+    0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000,
+    0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000,
+    0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000,
+    0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000,
+    0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000,
+    0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000,
+    0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000,
+    0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000,
+    0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000,
+    0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000,
+    0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000,
+    0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000,
+    0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000,
+    0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000,
+    0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000,
+    0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000,
+    0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000,
+    0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000,
+    0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000,
+    0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000,
+    0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000,
+    0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000,
+    0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000,
+    0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000,
+    0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000,
+    0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000,
+    0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000,
+    0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000,
+    0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000,
+    0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000,
+    0x945b07b200000000},
+   {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000,
+    0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000,
+    0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000,
+    0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000,
+    0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000,
+    0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000,
+    0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000,
+    0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000,
+    0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000,
+    0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000,
+    0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000,
+    0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000,
+    0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000,
+    0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000,
+    0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000,
+    0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000,
+    0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000,
+    0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000,
+    0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000,
+    0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000,
+    0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000,
+    0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000,
+    0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000,
+    0x149f066100000000, 0xef839db200000000, 0x468814fc00000000,
+    0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000,
+    0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000,
+    0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000,
+    0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000,
+    0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000,
+    0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000,
+    0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000,
+    0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000,
+    0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000,
+    0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000,
+    0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000,
+    0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000,
+    0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000,
+    0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000,
+    0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000,
+    0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000,
+    0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000,
+    0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000,
+    0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000,
+    0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000,
+    0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000,
+    0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000,
+    0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000,
+    0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000,
+    0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000,
+    0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000,
+    0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000,
+    0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000,
+    0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000,
+    0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000,
+    0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000,
+    0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000,
+    0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000,
+    0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000,
+    0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000,
+    0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000,
+    0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000,
+    0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000,
+    0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000,
+    0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000,
+    0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000,
+    0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000,
+    0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000,
+    0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000,
+    0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000,
+    0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000,
+    0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000,
+    0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000,
+    0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000,
+    0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000,
+    0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000,
+    0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000,
+    0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000,
+    0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000,
+    0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000,
+    0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000,
+    0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000,
+    0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000,
+    0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000,
+    0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000,
+    0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000,
+    0x0650d0f700000000},
+   {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000,
+    0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000,
+    0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000,
+    0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000,
+    0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000,
+    0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000,
+    0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000,
+    0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000,
+    0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000,
+    0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000,
+    0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000,
+    0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000,
+    0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000,
+    0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000,
+    0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000,
+    0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000,
+    0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000,
+    0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000,
+    0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000,
+    0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000,
+    0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000,
+    0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000,
+    0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000,
+    0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000,
+    0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000,
+    0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000,
+    0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000,
+    0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000,
+    0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000,
+    0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000,
+    0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000,
+    0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000,
+    0xc702c15700000000, 0x809085f800000000, 0x082039d200000000,
+    0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000,
+    0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000,
+    0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000,
+    0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000,
+    0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000,
+    0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000,
+    0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000,
+    0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000,
+    0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000,
+    0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000,
+    0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000,
+    0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000,
+    0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000,
+    0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000,
+    0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000,
+    0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000,
+    0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000,
+    0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000,
+    0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000,
+    0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000,
+    0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000,
+    0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000,
+    0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000,
+    0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000,
+    0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000,
+    0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000,
+    0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000,
+    0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000,
+    0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000,
+    0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000,
+    0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000,
+    0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000,
+    0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000,
+    0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000,
+    0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000,
+    0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000,
+    0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000,
+    0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000,
+    0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000,
+    0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000,
+    0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000,
+    0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000,
+    0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000,
+    0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000,
+    0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000,
+    0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000,
+    0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000,
+    0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000,
+    0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000,
+    0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000,
+    0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000,
+    0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000,
+    0x657594e900000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59,
+    0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4,
+    0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67,
+    0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef,
+    0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97,
+    0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88,
+    0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687,
+    0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698,
+    0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0,
+    0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068,
+    0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb,
+    0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056,
+    0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016,
+    0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009,
+    0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028,
+    0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037,
+    0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a,
+    0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7,
+    0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054,
+    0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7,
+    0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af,
+    0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0,
+    0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4,
+    0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab,
+    0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3,
+    0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a,
+    0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9,
+    0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54,
+    0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09,
+    0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16,
+    0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37,
+    0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28,
+    0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e,
+    0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3,
+    0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40,
+    0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8,
+    0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0,
+    0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf,
+    0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6,
+    0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9,
+    0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1,
+    0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059,
+    0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca,
+    0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067,
+    0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031,
+    0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e,
+    0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f,
+    0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010,
+    0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d,
+    0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0,
+    0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073,
+    0xd8ac6b35},
+   {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2,
+    0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd,
+    0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696,
+    0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3,
+    0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f,
+    0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35,
+    0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5,
+    0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f,
+    0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673,
+    0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46,
+    0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d,
+    0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632,
+    0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28,
+    0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192,
+    0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c,
+    0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6,
+    0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0,
+    0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff,
+    0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4,
+    0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95,
+    0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9,
+    0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03,
+    0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7,
+    0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d,
+    0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151,
+    0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808,
+    0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343,
+    0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c,
+    0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a,
+    0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0,
+    0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e,
+    0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594,
+    0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6,
+    0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399,
+    0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2,
+    0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7,
+    0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb,
+    0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571,
+    0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289,
+    0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33,
+    0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f,
+    0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a,
+    0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461,
+    0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e,
+    0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c,
+    0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6,
+    0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918,
+    0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2,
+    0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484,
+    0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb,
+    0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0,
+    0xa140efa8},
+   {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706,
+    0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed,
+    0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289,
+    0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a,
+    0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214,
+    0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3,
+    0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3,
+    0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254,
+    0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a,
+    0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9,
+    0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad,
+    0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746,
+    0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060,
+    0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187,
+    0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef,
+    0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408,
+    0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e,
+    0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495,
+    0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1,
+    0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532,
+    0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c,
+    0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb,
+    0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb,
+    0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c,
+    0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42,
+    0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060,
+    0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04,
+    0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef,
+    0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99,
+    0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e,
+    0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16,
+    0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1,
+    0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7,
+    0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c,
+    0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38,
+    0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb,
+    0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5,
+    0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42,
+    0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62,
+    0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85,
+    0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb,
+    0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18,
+    0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c,
+    0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997,
+    0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1,
+    0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36,
+    0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e,
+    0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9,
+    0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf,
+    0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24,
+    0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040,
+    0x917cd6a1},
+   {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf,
+    0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd,
+    0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896,
+    0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9,
+    0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3,
+    0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f,
+    0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d,
+    0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1,
+    0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab,
+    0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4,
+    0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f,
+    0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d,
+    0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4,
+    0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978,
+    0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad,
+    0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621,
+    0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46,
+    0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854,
+    0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f,
+    0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a,
+    0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890,
+    0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c,
+    0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4,
+    0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238,
+    0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622,
+    0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab,
+    0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0,
+    0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2,
+    0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295,
+    0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19,
+    0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc,
+    0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140,
+    0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd,
+    0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf,
+    0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184,
+    0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb,
+    0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1,
+    0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d,
+    0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb,
+    0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257,
+    0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d,
+    0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22,
+    0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069,
+    0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b,
+    0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6,
+    0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a,
+    0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf,
+    0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33,
+    0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254,
+    0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146,
+    0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d,
+    0x18ba364e}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873,
+    0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661,
+    0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441,
+    0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44,
+    0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1,
+    0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05,
+    0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa,
+    0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e,
+    0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb,
+    0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be,
+    0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e,
+    0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c,
+    0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d,
+    0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9,
+    0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f,
+    0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b,
+    0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39,
+    0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b,
+    0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b,
+    0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20,
+    0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595,
+    0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61,
+    0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0,
+    0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644,
+    0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1,
+    0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d,
+    0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d,
+    0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f,
+    0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad,
+    0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359,
+    0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f,
+    0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b,
+    0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7,
+    0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5,
+    0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5,
+    0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0,
+    0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65,
+    0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091,
+    0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633,
+    0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7,
+    0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272,
+    0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77,
+    0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57,
+    0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145,
+    0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9,
+    0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d,
+    0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb,
+    0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f,
+    0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad,
+    0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf,
+    0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f,
+    0x4e36ba18},
+   {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b,
+    0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8,
+    0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19,
+    0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4,
+    0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239,
+    0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd,
+    0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258,
+    0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc,
+    0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41,
+    0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c,
+    0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d,
+    0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e,
+    0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba,
+    0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e,
+    0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8,
+    0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c,
+    0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f,
+    0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c,
+    0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d,
+    0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d,
+    0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0,
+    0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014,
+    0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc,
+    0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628,
+    0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5,
+    0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941,
+    0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0,
+    0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53,
+    0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880,
+    0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264,
+    0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92,
+    0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776,
+    0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8,
+    0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b,
+    0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea,
+    0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837,
+    0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca,
+    0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e,
+    0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211,
+    0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5,
+    0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08,
+    0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5,
+    0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934,
+    0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7,
+    0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049,
+    0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad,
+    0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b,
+    0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf,
+    0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c,
+    0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f,
+    0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e,
+    0xa1d67c91},
+   {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9,
+    0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de,
+    0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94,
+    0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0,
+    0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a,
+    0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924,
+    0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052,
+    0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c,
+    0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6,
+    0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2,
+    0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8,
+    0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f,
+    0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d,
+    0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273,
+    0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30,
+    0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e,
+    0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7,
+    0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980,
+    0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca,
+    0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8,
+    0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62,
+    0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c,
+    0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c,
+    0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032,
+    0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798,
+    0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d,
+    0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07,
+    0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630,
+    0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389,
+    0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7,
+    0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4,
+    0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca,
+    0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55,
+    0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662,
+    0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828,
+    0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c,
+    0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6,
+    0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98,
+    0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3,
+    0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d,
+    0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037,
+    0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913,
+    0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759,
+    0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e,
+    0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1,
+    0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf,
+    0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c,
+    0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2,
+    0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b,
+    0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c,
+    0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276,
+    0xa8ef40a1},
+   {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e,
+    0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8,
+    0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819,
+    0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f,
+    0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d,
+    0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756,
+    0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0,
+    0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb,
+    0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9,
+    0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f,
+    0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e,
+    0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8,
+    0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835,
+    0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e,
+    0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62,
+    0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749,
+    0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b,
+    0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d,
+    0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc,
+    0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80,
+    0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2,
+    0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599,
+    0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05,
+    0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e,
+    0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c,
+    0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e,
+    0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef,
+    0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359,
+    0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b,
+    0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0,
+    0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc,
+    0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7,
+    0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f,
+    0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189,
+    0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568,
+    0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e,
+    0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c,
+    0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27,
+    0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794,
+    0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf,
+    0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d,
+    0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db,
+    0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a,
+    0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c,
+    0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544,
+    0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f,
+    0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013,
+    0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38,
+    0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea,
+    0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c,
+    0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd,
+    0x356bacd8}};
+
+#endif
+
+#endif
+
+#if N == 6
+
+#if W == 8
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370,
+    0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d,
+    0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69,
+    0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426,
+    0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3,
+    0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f,
+    0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c,
+    0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490,
+    0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155,
+    0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a,
+    0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e,
+    0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603,
+    0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349,
+    0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5,
+    0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50,
+    0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc,
+    0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b,
+    0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76,
+    0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862,
+    0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9,
+    0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c,
+    0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0,
+    0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937,
+    0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b,
+    0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e,
+    0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e,
+    0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a,
+    0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357,
+    0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0,
+    0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c,
+    0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9,
+    0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165,
+    0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766,
+    0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b,
+    0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f,
+    0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030,
+    0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5,
+    0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59,
+    0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63,
+    0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf,
+    0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a,
+    0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845,
+    0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51,
+    0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c,
+    0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f,
+    0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3,
+    0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46,
+    0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea,
+    0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d,
+    0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60,
+    0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74,
+    0x8568a0a8},
+   {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5,
+    0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf,
+    0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5,
+    0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba,
+    0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf,
+    0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f,
+    0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0,
+    0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450,
+    0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55,
+    0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a,
+    0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620,
+    0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a,
+    0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454,
+    0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4,
+    0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534,
+    0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584,
+    0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694,
+    0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e,
+    0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4,
+    0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1,
+    0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4,
+    0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164,
+    0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1,
+    0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911,
+    0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314,
+    0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c,
+    0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6,
+    0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec,
+    0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc,
+    0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c,
+    0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c,
+    0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c,
+    0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716,
+    0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c,
+    0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676,
+    0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879,
+    0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c,
+    0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc,
+    0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77,
+    0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7,
+    0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2,
+    0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd,
+    0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7,
+    0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad,
+    0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897,
+    0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827,
+    0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7,
+    0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947,
+    0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57,
+    0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d,
+    0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37,
+    0x0d907052},
+   {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d,
+    0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89,
+    0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31,
+    0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81,
+    0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e,
+    0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0,
+    0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f,
+    0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291,
+    0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e,
+    0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e,
+    0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936,
+    0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2,
+    0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13,
+    0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d,
+    0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f,
+    0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1,
+    0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a,
+    0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae,
+    0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516,
+    0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f,
+    0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20,
+    0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe,
+    0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28,
+    0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6,
+    0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419,
+    0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5,
+    0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d,
+    0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889,
+    0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412,
+    0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c,
+    0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e,
+    0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0,
+    0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02,
+    0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986,
+    0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e,
+    0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e,
+    0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221,
+    0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf,
+    0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913,
+    0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d,
+    0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622,
+    0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592,
+    0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a,
+    0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae,
+    0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c,
+    0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82,
+    0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20,
+    0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe,
+    0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025,
+    0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1,
+    0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719,
+    0xfd1a6c8a},
+   {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3,
+    0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb,
+    0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d,
+    0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb,
+    0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9,
+    0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156,
+    0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045,
+    0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa,
+    0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8,
+    0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e,
+    0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8,
+    0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0,
+    0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38,
+    0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87,
+    0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46,
+    0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9,
+    0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585,
+    0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d,
+    0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb,
+    0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531,
+    0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03,
+    0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc,
+    0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33,
+    0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c,
+    0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be,
+    0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d,
+    0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b,
+    0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303,
+    0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f,
+    0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0,
+    0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801,
+    0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe,
+    0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e,
+    0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346,
+    0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620,
+    0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776,
+    0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844,
+    0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb,
+    0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0,
+    0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f,
+    0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d,
+    0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b,
+    0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d,
+    0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75,
+    0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795,
+    0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a,
+    0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb,
+    0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354,
+    0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28,
+    0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30,
+    0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856,
+    0x7895f01a},
+   {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188,
+    0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33,
+    0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d,
+    0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445,
+    0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2,
+    0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058,
+    0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43,
+    0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9,
+    0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e,
+    0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06,
+    0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228,
+    0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93,
+    0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e,
+    0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4,
+    0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b,
+    0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371,
+    0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265,
+    0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede,
+    0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0,
+    0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f,
+    0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8,
+    0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32,
+    0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae,
+    0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544,
+    0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3,
+    0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f,
+    0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911,
+    0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa,
+    0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be,
+    0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54,
+    0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b,
+    0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1,
+    0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652,
+    0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9,
+    0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7,
+    0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f,
+    0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68,
+    0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782,
+    0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797,
+    0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d,
+    0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a,
+    0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2,
+    0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc,
+    0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647,
+    0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4,
+    0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e,
+    0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41,
+    0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab,
+    0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf,
+    0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904,
+    0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a,
+    0x9239b848},
+   {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad,
+    0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0,
+    0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40,
+    0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b,
+    0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d,
+    0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b,
+    0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb,
+    0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d,
+    0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b,
+    0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0,
+    0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840,
+    0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d,
+    0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b,
+    0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d,
+    0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6,
+    0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0,
+    0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580,
+    0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd,
+    0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d,
+    0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b,
+    0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d,
+    0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b,
+    0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6,
+    0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0,
+    0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6,
+    0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c,
+    0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c,
+    0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461,
+    0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841,
+    0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317,
+    0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac,
+    0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa,
+    0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7,
+    0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba,
+    0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a,
+    0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161,
+    0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777,
+    0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21,
+    0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a,
+    0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc,
+    0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da,
+    0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1,
+    0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01,
+    0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c,
+    0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241,
+    0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917,
+    0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac,
+    0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa,
+    0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da,
+    0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397,
+    0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537,
+    0xeb36d3cc},
+   {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b,
+    0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059,
+    0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251,
+    0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d,
+    0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9,
+    0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c,
+    0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41,
+    0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4,
+    0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10,
+    0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c,
+    0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54,
+    0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476,
+    0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8,
+    0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d,
+    0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92,
+    0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307,
+    0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad,
+    0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f,
+    0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87,
+    0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17,
+    0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3,
+    0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46,
+    0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197,
+    0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02,
+    0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6,
+    0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e,
+    0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96,
+    0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4,
+    0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e,
+    0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b,
+    0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934,
+    0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1,
+    0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7,
+    0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5,
+    0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd,
+    0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1,
+    0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475,
+    0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0,
+    0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155,
+    0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0,
+    0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304,
+    0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348,
+    0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140,
+    0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862,
+    0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14,
+    0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181,
+    0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e,
+    0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab,
+    0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01,
+    0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523,
+    0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b,
+    0x38e5f3c5},
+   {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06,
+    0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad,
+    0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509,
+    0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba,
+    0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414,
+    0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3,
+    0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733,
+    0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994,
+    0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a,
+    0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889,
+    0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d,
+    0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386,
+    0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621,
+    0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886,
+    0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e,
+    0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389,
+    0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f,
+    0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294,
+    0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30,
+    0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3,
+    0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d,
+    0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba,
+    0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a,
+    0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad,
+    0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03,
+    0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2,
+    0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306,
+    0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad,
+    0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b,
+    0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc,
+    0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914,
+    0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3,
+    0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435,
+    0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e,
+    0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a,
+    0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589,
+    0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27,
+    0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080,
+    0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21,
+    0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586,
+    0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28,
+    0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b,
+    0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f,
+    0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94,
+    0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12,
+    0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5,
+    0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d,
+    0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba,
+    0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c,
+    0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7,
+    0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103,
+    0x3d3101a2}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000,
+    0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000,
+    0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000,
+    0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000,
+    0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000,
+    0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000,
+    0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000,
+    0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000,
+    0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000,
+    0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000,
+    0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000,
+    0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000,
+    0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000,
+    0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000,
+    0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000,
+    0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000,
+    0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000,
+    0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000,
+    0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000,
+    0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000,
+    0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000,
+    0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000,
+    0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000,
+    0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000,
+    0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000,
+    0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000,
+    0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000,
+    0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000,
+    0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000,
+    0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000,
+    0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000,
+    0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000,
+    0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000,
+    0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000,
+    0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000,
+    0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000,
+    0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000,
+    0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000,
+    0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000,
+    0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000,
+    0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000,
+    0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000,
+    0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000,
+    0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000,
+    0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000,
+    0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000,
+    0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000,
+    0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000,
+    0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000,
+    0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000,
+    0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000,
+    0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000,
+    0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000,
+    0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000,
+    0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000,
+    0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000,
+    0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000,
+    0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000,
+    0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000,
+    0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000,
+    0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000,
+    0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000,
+    0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000,
+    0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000,
+    0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000,
+    0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000,
+    0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000,
+    0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000,
+    0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000,
+    0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000,
+    0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000,
+    0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000,
+    0x3688267d00000000, 0x9718319500000000, 0x35af787600000000,
+    0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000,
+    0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000,
+    0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000,
+    0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000,
+    0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000,
+    0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000,
+    0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000,
+    0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000,
+    0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000,
+    0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000,
+    0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000,
+    0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000,
+    0xa201313d00000000},
+   {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000,
+    0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000,
+    0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000,
+    0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000,
+    0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000,
+    0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000,
+    0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000,
+    0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000,
+    0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000,
+    0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000,
+    0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000,
+    0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000,
+    0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000,
+    0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000,
+    0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000,
+    0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000,
+    0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000,
+    0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000,
+    0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000,
+    0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000,
+    0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000,
+    0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000,
+    0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000,
+    0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000,
+    0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000,
+    0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000,
+    0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000,
+    0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000,
+    0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000,
+    0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000,
+    0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000,
+    0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000,
+    0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000,
+    0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000,
+    0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000,
+    0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000,
+    0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000,
+    0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000,
+    0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000,
+    0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000,
+    0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000,
+    0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000,
+    0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000,
+    0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000,
+    0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000,
+    0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000,
+    0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000,
+    0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000,
+    0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000,
+    0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000,
+    0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000,
+    0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000,
+    0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000,
+    0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000,
+    0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000,
+    0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000,
+    0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000,
+    0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000,
+    0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000,
+    0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000,
+    0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000,
+    0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000,
+    0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000,
+    0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000,
+    0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000,
+    0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000,
+    0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000,
+    0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000,
+    0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000,
+    0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000,
+    0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000,
+    0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000,
+    0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000,
+    0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000,
+    0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000,
+    0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000,
+    0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000,
+    0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000,
+    0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000,
+    0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000,
+    0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000,
+    0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000,
+    0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000,
+    0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000,
+    0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000,
+    0xc5f3e53800000000},
+   {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000,
+    0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000,
+    0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000,
+    0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000,
+    0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000,
+    0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000,
+    0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000,
+    0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000,
+    0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000,
+    0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000,
+    0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000,
+    0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000,
+    0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000,
+    0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000,
+    0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000,
+    0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000,
+    0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000,
+    0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000,
+    0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000,
+    0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000,
+    0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000,
+    0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000,
+    0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000,
+    0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000,
+    0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000,
+    0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000,
+    0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000,
+    0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000,
+    0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000,
+    0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000,
+    0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000,
+    0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000,
+    0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000,
+    0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000,
+    0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000,
+    0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000,
+    0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000,
+    0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000,
+    0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000,
+    0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000,
+    0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000,
+    0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000,
+    0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000,
+    0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000,
+    0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000,
+    0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000,
+    0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000,
+    0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000,
+    0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000,
+    0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000,
+    0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000,
+    0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000,
+    0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000,
+    0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000,
+    0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000,
+    0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000,
+    0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000,
+    0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000,
+    0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000,
+    0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000,
+    0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000,
+    0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000,
+    0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000,
+    0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000,
+    0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000,
+    0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000,
+    0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000,
+    0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000,
+    0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000,
+    0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000,
+    0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000,
+    0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000,
+    0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000,
+    0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000,
+    0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000,
+    0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000,
+    0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000,
+    0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000,
+    0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000,
+    0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000,
+    0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000,
+    0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000,
+    0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000,
+    0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000,
+    0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000,
+    0xccd336eb00000000},
+   {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000,
+    0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000,
+    0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000,
+    0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000,
+    0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000,
+    0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000,
+    0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000,
+    0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000,
+    0xb249204500000000, 0xd071086f00000000, 0x7639701100000000,
+    0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000,
+    0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000,
+    0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000,
+    0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000,
+    0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000,
+    0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000,
+    0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000,
+    0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000,
+    0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000,
+    0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000,
+    0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000,
+    0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000,
+    0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000,
+    0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000,
+    0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000,
+    0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000,
+    0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000,
+    0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000,
+    0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000,
+    0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000,
+    0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000,
+    0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000,
+    0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000,
+    0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000,
+    0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000,
+    0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000,
+    0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000,
+    0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000,
+    0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000,
+    0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000,
+    0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000,
+    0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000,
+    0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000,
+    0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000,
+    0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000,
+    0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000,
+    0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000,
+    0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000,
+    0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000,
+    0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000,
+    0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000,
+    0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000,
+    0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000,
+    0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000,
+    0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000,
+    0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000,
+    0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000,
+    0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000,
+    0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000,
+    0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000,
+    0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000,
+    0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000,
+    0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000,
+    0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000,
+    0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000,
+    0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000,
+    0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000,
+    0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000,
+    0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000,
+    0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000,
+    0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000,
+    0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000,
+    0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000,
+    0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000,
+    0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000,
+    0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000,
+    0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000,
+    0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000,
+    0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000,
+    0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000,
+    0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000,
+    0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000,
+    0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000,
+    0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000,
+    0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000,
+    0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000,
+    0x48b8399200000000},
+   {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000,
+    0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000,
+    0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000,
+    0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000,
+    0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000,
+    0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000,
+    0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000,
+    0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000,
+    0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000,
+    0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000,
+    0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000,
+    0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000,
+    0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000,
+    0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000,
+    0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000,
+    0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000,
+    0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000,
+    0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000,
+    0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000,
+    0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000,
+    0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000,
+    0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000,
+    0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000,
+    0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000,
+    0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000,
+    0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000,
+    0xb521428400000000, 0xf909d42700000000, 0x762efede00000000,
+    0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000,
+    0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000,
+    0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000,
+    0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000,
+    0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000,
+    0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000,
+    0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000,
+    0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000,
+    0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000,
+    0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000,
+    0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000,
+    0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000,
+    0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000,
+    0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000,
+    0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000,
+    0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000,
+    0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000,
+    0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000,
+    0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000,
+    0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000,
+    0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000,
+    0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000,
+    0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000,
+    0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000,
+    0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000,
+    0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000,
+    0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000,
+    0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000,
+    0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000,
+    0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000,
+    0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000,
+    0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000,
+    0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000,
+    0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000,
+    0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000,
+    0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000,
+    0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000,
+    0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000,
+    0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000,
+    0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000,
+    0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000,
+    0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000,
+    0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000,
+    0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000,
+    0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000,
+    0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000,
+    0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000,
+    0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000,
+    0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000,
+    0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000,
+    0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000,
+    0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000,
+    0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000,
+    0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000,
+    0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000,
+    0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000,
+    0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000,
+    0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000,
+    0x1af0957800000000},
+   {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000,
+    0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000,
+    0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000,
+    0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000,
+    0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000,
+    0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000,
+    0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000,
+    0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000,
+    0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000,
+    0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000,
+    0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000,
+    0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000,
+    0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000,
+    0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000,
+    0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000,
+    0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000,
+    0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000,
+    0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000,
+    0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000,
+    0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000,
+    0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000,
+    0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000,
+    0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000,
+    0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000,
+    0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000,
+    0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000,
+    0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000,
+    0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000,
+    0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000,
+    0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000,
+    0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000,
+    0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000,
+    0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000,
+    0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000,
+    0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000,
+    0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000,
+    0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000,
+    0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000,
+    0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000,
+    0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000,
+    0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000,
+    0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000,
+    0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000,
+    0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000,
+    0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000,
+    0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000,
+    0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000,
+    0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000,
+    0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000,
+    0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000,
+    0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000,
+    0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000,
+    0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000,
+    0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000,
+    0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000,
+    0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000,
+    0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000,
+    0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000,
+    0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000,
+    0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000,
+    0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000,
+    0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000,
+    0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000,
+    0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000,
+    0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000,
+    0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000,
+    0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000,
+    0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000,
+    0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000,
+    0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000,
+    0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000,
+    0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000,
+    0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000,
+    0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000,
+    0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000,
+    0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000,
+    0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000,
+    0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000,
+    0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000,
+    0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000,
+    0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000,
+    0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000,
+    0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000,
+    0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000,
+    0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000,
+    0x8a6c1afd00000000},
+   {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000,
+    0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000,
+    0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000,
+    0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000,
+    0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000,
+    0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000,
+    0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000,
+    0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000,
+    0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000,
+    0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000,
+    0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000,
+    0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000,
+    0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000,
+    0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000,
+    0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000,
+    0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000,
+    0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000,
+    0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000,
+    0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000,
+    0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000,
+    0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000,
+    0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000,
+    0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000,
+    0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000,
+    0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000,
+    0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000,
+    0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000,
+    0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000,
+    0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000,
+    0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000,
+    0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000,
+    0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000,
+    0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000,
+    0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000,
+    0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000,
+    0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000,
+    0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000,
+    0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000,
+    0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000,
+    0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000,
+    0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000,
+    0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000,
+    0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000,
+    0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000,
+    0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000,
+    0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000,
+    0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000,
+    0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000,
+    0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000,
+    0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000,
+    0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000,
+    0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000,
+    0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000,
+    0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000,
+    0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000,
+    0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000,
+    0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000,
+    0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000,
+    0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000,
+    0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000,
+    0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000,
+    0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000,
+    0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000,
+    0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000,
+    0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000,
+    0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000,
+    0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000,
+    0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000,
+    0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000,
+    0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000,
+    0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000,
+    0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000,
+    0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000,
+    0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000,
+    0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000,
+    0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000,
+    0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000,
+    0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000,
+    0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000,
+    0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000,
+    0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000,
+    0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000,
+    0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000,
+    0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000,
+    0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000,
+    0x5270900d00000000},
+   {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000,
+    0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000,
+    0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000,
+    0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000,
+    0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000,
+    0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000,
+    0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000,
+    0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000,
+    0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000,
+    0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000,
+    0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000,
+    0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000,
+    0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000,
+    0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000,
+    0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000,
+    0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000,
+    0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000,
+    0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000,
+    0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000,
+    0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000,
+    0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000,
+    0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000,
+    0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000,
+    0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000,
+    0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000,
+    0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000,
+    0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000,
+    0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000,
+    0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000,
+    0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000,
+    0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000,
+    0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000,
+    0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000,
+    0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000,
+    0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000,
+    0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000,
+    0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000,
+    0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000,
+    0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000,
+    0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000,
+    0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000,
+    0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000,
+    0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000,
+    0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000,
+    0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000,
+    0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000,
+    0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000,
+    0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000,
+    0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000,
+    0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000,
+    0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000,
+    0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000,
+    0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000,
+    0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000,
+    0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000,
+    0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000,
+    0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000,
+    0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000,
+    0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000,
+    0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000,
+    0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000,
+    0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000,
+    0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000,
+    0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000,
+    0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000,
+    0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000,
+    0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000,
+    0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000,
+    0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000,
+    0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000,
+    0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000,
+    0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000,
+    0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000,
+    0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000,
+    0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000,
+    0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000,
+    0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000,
+    0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000,
+    0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000,
+    0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000,
+    0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000,
+    0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000,
+    0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000,
+    0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000,
+    0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000,
+    0xa8a0688500000000}};
+
+#else /* W == 4 */
+
+local const z_crc_t FAR crc_braid_table[][256] = {
+   {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f,
+    0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999,
+    0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee,
+    0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615,
+    0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383,
+    0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb,
+    0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275,
+    0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d,
+    0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b,
+    0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460,
+    0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317,
+    0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1,
+    0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5,
+    0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd,
+    0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04,
+    0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c,
+    0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7,
+    0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11,
+    0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66,
+    0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7,
+    0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871,
+    0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309,
+    0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd,
+    0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85,
+    0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913,
+    0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d,
+    0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a,
+    0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc,
+    0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57,
+    0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f,
+    0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6,
+    0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e,
+    0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f,
+    0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289,
+    0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe,
+    0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05,
+    0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893,
+    0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb,
+    0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0,
+    0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8,
+    0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e,
+    0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5,
+    0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2,
+    0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574,
+    0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5,
+    0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add,
+    0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114,
+    0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c,
+    0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7,
+    0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701,
+    0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076,
+    0x09cd8551},
+   {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193,
+    0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2,
+    0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c,
+    0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71,
+    0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a,
+    0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d,
+    0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71,
+    0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436,
+    0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d,
+    0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000,
+    0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae,
+    0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf,
+    0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930,
+    0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277,
+    0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff,
+    0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8,
+    0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef,
+    0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e,
+    0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20,
+    0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95,
+    0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e,
+    0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9,
+    0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d,
+    0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a,
+    0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151,
+    0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4,
+    0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a,
+    0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b,
+    0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c,
+    0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b,
+    0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3,
+    0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4,
+    0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b,
+    0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a,
+    0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4,
+    0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189,
+    0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92,
+    0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5,
+    0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9,
+    0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe,
+    0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5,
+    0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8,
+    0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66,
+    0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707,
+    0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8,
+    0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f,
+    0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707,
+    0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40,
+    0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017,
+    0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876,
+    0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8,
+    0x7bc97a0c},
+   {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300,
+    0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0,
+    0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80,
+    0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701,
+    0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41,
+    0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81,
+    0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43,
+    0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83,
+    0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3,
+    0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42,
+    0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202,
+    0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2,
+    0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7,
+    0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407,
+    0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47,
+    0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87,
+    0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86,
+    0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46,
+    0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506,
+    0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44,
+    0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704,
+    0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4,
+    0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5,
+    0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505,
+    0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45,
+    0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f,
+    0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f,
+    0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f,
+    0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e,
+    0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e,
+    0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e,
+    0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce,
+    0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c,
+    0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc,
+    0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c,
+    0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d,
+    0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d,
+    0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d,
+    0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88,
+    0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48,
+    0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708,
+    0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89,
+    0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9,
+    0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309,
+    0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb,
+    0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b,
+    0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b,
+    0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b,
+    0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a,
+    0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a,
+    0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a,
+    0x7851a2ca},
+   {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb,
+    0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8,
+    0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0,
+    0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f,
+    0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a,
+    0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf,
+    0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5,
+    0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380,
+    0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815,
+    0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa,
+    0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2,
+    0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1,
+    0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1,
+    0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4,
+    0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa,
+    0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df,
+    0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6,
+    0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5,
+    0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad,
+    0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca,
+    0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f,
+    0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a,
+    0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8,
+    0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d,
+    0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708,
+    0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d,
+    0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865,
+    0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636,
+    0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f,
+    0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a,
+    0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744,
+    0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061,
+    0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0,
+    0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293,
+    0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb,
+    0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874,
+    0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1,
+    0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4,
+    0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f,
+    0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a,
+    0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f,
+    0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120,
+    0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778,
+    0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b,
+    0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a,
+    0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af,
+    0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81,
+    0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4,
+    0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd,
+    0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e,
+    0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6,
+    0x566b6848}};
+
+local const z_word_t FAR crc_braid_big_table[][256] = {
+   {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912,
+    0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba,
+    0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3,
+    0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30,
+    0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e,
+    0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3,
+    0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73,
+    0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe,
+    0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0,
+    0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643,
+    0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a,
+    0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082,
+    0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4,
+    0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279,
+    0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735,
+    0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8,
+    0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad,
+    0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05,
+    0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c,
+    0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718,
+    0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46,
+    0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb,
+    0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc,
+    0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41,
+    0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f,
+    0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad,
+    0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4,
+    0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c,
+    0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779,
+    0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4,
+    0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8,
+    0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235,
+    0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7,
+    0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f,
+    0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476,
+    0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195,
+    0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb,
+    0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46,
+    0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622,
+    0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af,
+    0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1,
+    0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12,
+    0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b,
+    0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3,
+    0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51,
+    0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc,
+    0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90,
+    0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d,
+    0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708,
+    0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0,
+    0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9,
+    0x48686b56},
+   {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c,
+    0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae,
+    0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb,
+    0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90,
+    0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410,
+    0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b,
+    0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6,
+    0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed,
+    0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d,
+    0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036,
+    0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953,
+    0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1,
+    0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca,
+    0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781,
+    0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d,
+    0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416,
+    0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f,
+    0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd,
+    0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8,
+    0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b,
+    0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb,
+    0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0,
+    0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5,
+    0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e,
+    0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e,
+    0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558,
+    0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d,
+    0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf,
+    0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6,
+    0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad,
+    0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971,
+    0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a,
+    0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b,
+    0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969,
+    0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c,
+    0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57,
+    0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7,
+    0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c,
+    0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab,
+    0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0,
+    0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160,
+    0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b,
+    0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e,
+    0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac,
+    0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d,
+    0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546,
+    0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a,
+    0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1,
+    0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8,
+    0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a,
+    0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f,
+    0xcaa25178},
+   {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00,
+    0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b,
+    0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed,
+    0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777,
+    0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01,
+    0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a,
+    0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef,
+    0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74,
+    0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002,
+    0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498,
+    0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee,
+    0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75,
+    0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05,
+    0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e,
+    0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8,
+    0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73,
+    0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404,
+    0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f,
+    0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9,
+    0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71,
+    0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607,
+    0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c,
+    0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb,
+    0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470,
+    0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806,
+    0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790,
+    0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6,
+    0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d,
+    0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a,
+    0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991,
+    0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7,
+    0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c,
+    0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09,
+    0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92,
+    0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4,
+    0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e,
+    0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08,
+    0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593,
+    0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3,
+    0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778,
+    0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e,
+    0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94,
+    0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2,
+    0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079,
+    0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c,
+    0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497,
+    0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1,
+    0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a,
+    0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d,
+    0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396,
+    0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0,
+    0x0c7ac97b},
+   {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669,
+    0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853,
+    0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062,
+    0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527,
+    0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad,
+    0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545,
+    0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27,
+    0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf,
+    0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45,
+    0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800,
+    0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031,
+    0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b,
+    0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26,
+    0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce,
+    0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d,
+    0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5,
+    0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130,
+    0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a,
+    0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b,
+    0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480,
+    0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a,
+    0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2,
+    0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e,
+    0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996,
+    0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c,
+    0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc,
+    0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd,
+    0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7,
+    0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232,
+    0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da,
+    0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439,
+    0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1,
+    0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da,
+    0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0,
+    0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1,
+    0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94,
+    0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e,
+    0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6,
+    0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2,
+    0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a,
+    0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0,
+    0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95,
+    0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4,
+    0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e,
+    0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395,
+    0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d,
+    0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e,
+    0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676,
+    0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83,
+    0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9,
+    0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888,
+    0x5185cd09}};
+
+#endif
+
+#endif
+
+#endif
+
+local const z_crc_t FAR x2n_table[] = {
+    0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000,
+    0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467,
+    0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0,
+    0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169,
+    0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37,
+    0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a,
+    0xc40ba6d0, 0xc4e22c3c};
diff --git a/qtbase/src/3rdparty/zlib/src/deflate.c b/qtbase/src/3rdparty/zlib/src/deflate.c
index 1ec761448d..799fb93cc0 100644
--- a/qtbase/src/3rdparty/zlib/src/deflate.c
+++ b/qtbase/src/3rdparty/zlib/src/deflate.c
@@ -1,5 +1,5 @@
 /* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -52,7 +52,7 @@
 #include "deflate.h"
 
 const char deflate_copyright[] =
-   " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
+   " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -190,8 +190,11 @@ local const config configuration_table[10] = {
  * prev[] will be initialized on the fly.
  */
 #define CLEAR_HASH(s) \
-    s->head[s->hash_size-1] = NIL; \
-    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+    do { \
+        s->head[s->hash_size-1] = NIL; \
+        zmemzero((Bytef *)s->head, \
+                 (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
+    } while (0)
 
 /* ===========================================================================
  * Slide the hash table when sliding the window down (could be avoided with 32
@@ -252,11 +255,6 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
     int wrap = 1;
     static const char my_version[] = ZLIB_VERSION;
 
-    ushf *overlay;
-    /* We overlay pending_buf and d_buf+l_buf. This works since the average
-     * output size for (length,distance) codes is <= 24 bits.
-     */
-
     if (version == Z_NULL || version[0] != my_version[0] ||
         stream_size != sizeof(z_stream)) {
         return Z_VERSION_ERROR;
@@ -326,9 +324,47 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
 
     s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
 
-    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
-    s->pending_buf = (uchf *) overlay;
-    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+    /* We overlay pending_buf and sym_buf. This works since the average size
+     * for length/distance pairs over any compressed block is assured to be 31
+     * bits or less.
+     *
+     * Analysis: The longest fixed codes are a length code of 8 bits plus 5
+     * extra bits, for lengths 131 to 257. The longest fixed distance codes are
+     * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest
+     * possible fixed-codes length/distance pair is then 31 bits total.
+     *
+     * sym_buf starts one-fourth of the way into pending_buf. So there are
+     * three bytes in sym_buf for every four bytes in pending_buf. Each symbol
+     * in sym_buf is three bytes -- two for the distance and one for the
+     * literal/length. As each symbol is consumed, the pointer to the next
+     * sym_buf value to read moves forward three bytes. From that symbol, up to
+     * 31 bits are written to pending_buf. The closest the written pending_buf
+     * bits gets to the next sym_buf symbol to read is just before the last
+     * code is written. At that time, 31*(n-2) bits have been written, just
+     * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at
+     * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1
+     * symbols are written.) The closest the writing gets to what is unread is
+     * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and
+     * can range from 128 to 32768.
+     *
+     * Therefore, at a minimum, there are 142 bits of space between what is
+     * written and what is read in the overlain buffers, so the symbols cannot
+     * be overwritten by the compressed data. That space is actually 139 bits,
+     * due to the three-bit fixed-code block header.
+     *
+     * That covers the case where either Z_FIXED is specified, forcing fixed
+     * codes, or when the use of fixed codes is chosen, because that choice
+     * results in a smaller compressed block than dynamic codes. That latter
+     * condition then assures that the above analysis also covers all dynamic
+     * blocks. A dynamic-code block will only be chosen to be emitted if it has
+     * fewer bits than a fixed-code block would for the same set of symbols.
+     * Therefore its average symbol length is assured to be less than 31. So
+     * the compressed data for a dynamic block also cannot overwrite the
+     * symbols from which it is being constructed.
+     */
+
+    s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4);
+    s->pending_buf_size = (ulg)s->lit_bufsize * 4;
 
     if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
         s->pending_buf == Z_NULL) {
@@ -337,8 +373,12 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
         deflateEnd (strm);
         return Z_MEM_ERROR;
     }
-    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
-    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+    s->sym_buf = s->pending_buf + s->lit_bufsize;
+    s->sym_end = (s->lit_bufsize - 1) * 3;
+    /* We avoid equality with lit_bufsize*3 because of wraparound at 64K
+     * on 16 bit machines and because stored blocks are restricted to
+     * 64K-1 bytes.
+     */
 
     s->level = level;
     s->strategy = strategy;
@@ -488,13 +528,13 @@ int ZEXPORT deflateResetKeep (strm)
 #ifdef GZIP
         s->wrap == 2 ? GZIP_STATE :
 #endif
-        s->wrap ? INIT_STATE : BUSY_STATE;
+        INIT_STATE;
     strm->adler =
 #ifdef GZIP
         s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
 #endif
         adler32(0L, Z_NULL, 0);
-    s->last_flush = Z_NO_FLUSH;
+    s->last_flush = -2;
 
     _tr_init(s);
 
@@ -549,7 +589,8 @@ int ZEXPORT deflatePrime (strm, bits, value)
 
     if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
     s = strm->state;
-    if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+    if (bits < 0 || bits > 16 ||
+        s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3))
         return Z_BUF_ERROR;
     do {
         put = Buf_size - s->bi_valid;
@@ -587,12 +628,12 @@ int ZEXPORT deflateParams(strm, level, strategy)
     func = configuration_table[s->level].func;
 
     if ((strategy != s->strategy || func != configuration_table[level].func) &&
-        s->high_water) {
+        s->last_flush != -2) {
         /* Flush the last buffer: */
         int err = deflate(strm, Z_BLOCK);
         if (err == Z_STREAM_ERROR)
             return err;
-        if (strm->avail_out == 0)
+        if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
             return Z_BUF_ERROR;
     }
     if (s->level != level) {
@@ -811,6 +852,8 @@ int ZEXPORT deflate (strm, flush)
     }
 
     /* Write the header */
+    if (s->status == INIT_STATE && s->wrap == 0)
+        s->status = BUSY_STATE;
     if (s->status == INIT_STATE) {
         /* zlib header */
         uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
@@ -1108,7 +1151,6 @@ int ZEXPORT deflateCopy (dest, source)
 #else
     deflate_state *ds;
     deflate_state *ss;
-    ushf *overlay;
 
 
     if (deflateStateCheck(source) || dest == Z_NULL) {
@@ -1128,8 +1170,7 @@ int ZEXPORT deflateCopy (dest, source)
     ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
     ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
     ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
-    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
-    ds->pending_buf = (uchf *) overlay;
+    ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4);
 
     if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
         ds->pending_buf == Z_NULL) {
@@ -1143,8 +1184,7 @@ int ZEXPORT deflateCopy (dest, source)
     zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
 
     ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
-    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
-    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+    ds->sym_buf = ds->pending_buf + ds->lit_bufsize;
 
     ds->l_desc.dyn_tree = ds->dyn_ltree;
     ds->d_desc.dyn_tree = ds->dyn_dtree;
@@ -1513,6 +1553,8 @@ local void fill_window(s)
             s->match_start -= wsize;
             s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
             s->block_start -= (long) wsize;
+            if (s->insert > s->strstart)
+                s->insert = s->strstart;
             slide_hash(s);
             more += wsize;
         }
@@ -1742,6 +1784,7 @@ local block_state deflate_stored(s, flush)
             s->matches = 2;         /* clear hash */
             zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
             s->strstart = s->w_size;
+            s->insert = s->strstart;
         }
         else {
             if (s->window_size - s->strstart <= used) {
@@ -1750,12 +1793,14 @@ local block_state deflate_stored(s, flush)
                 zmemcpy(s->window, s->window + s->w_size, s->strstart);
                 if (s->matches < 2)
                     s->matches++;   /* add a pending slide_hash() */
+                if (s->insert > s->strstart)
+                    s->insert = s->strstart;
             }
             zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
             s->strstart += used;
+            s->insert += MIN(used, s->w_size - s->insert);
         }
         s->block_start = s->strstart;
-        s->insert += MIN(used, s->w_size - s->insert);
     }
     if (s->high_water < s->strstart)
         s->high_water = s->strstart;
@@ -1770,7 +1815,7 @@ local block_state deflate_stored(s, flush)
         return block_done;
 
     /* Fill the window with any remaining input. */
-    have = s->window_size - s->strstart - 1;
+    have = s->window_size - s->strstart;
     if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
         /* Slide the window down. */
         s->block_start -= s->w_size;
@@ -1779,12 +1824,15 @@ local block_state deflate_stored(s, flush)
         if (s->matches < 2)
             s->matches++;           /* add a pending slide_hash() */
         have += s->w_size;          /* more space now */
+        if (s->insert > s->strstart)
+            s->insert = s->strstart;
     }
     if (have > s->strm->avail_in)
         have = s->strm->avail_in;
     if (have) {
         read_buf(s->strm, s->window + s->strstart, have);
         s->strstart += have;
+        s->insert += MIN(have, s->w_size - s->insert);
     }
     if (s->high_water < s->strstart)
         s->high_water = s->strstart;
@@ -1912,7 +1960,7 @@ local block_state deflate_fast(s, flush)
         FLUSH_BLOCK(s, 1);
         return finish_done;
     }
-    if (s->last_lit)
+    if (s->sym_next)
         FLUSH_BLOCK(s, 0);
     return block_done;
 }
@@ -2043,7 +2091,7 @@ local block_state deflate_slow(s, flush)
         FLUSH_BLOCK(s, 1);
         return finish_done;
     }
-    if (s->last_lit)
+    if (s->sym_next)
         FLUSH_BLOCK(s, 0);
     return block_done;
 }
@@ -2118,7 +2166,7 @@ local block_state deflate_rle(s, flush)
         FLUSH_BLOCK(s, 1);
         return finish_done;
     }
-    if (s->last_lit)
+    if (s->sym_next)
         FLUSH_BLOCK(s, 0);
     return block_done;
 }
@@ -2157,7 +2205,7 @@ local block_state deflate_huff(s, flush)
         FLUSH_BLOCK(s, 1);
         return finish_done;
     }
-    if (s->last_lit)
+    if (s->sym_next)
         FLUSH_BLOCK(s, 0);
     return block_done;
 }
diff --git a/qtbase/src/3rdparty/zlib/src/deflate.h b/qtbase/src/3rdparty/zlib/src/deflate.h
index 23ecdd312b..17c226113b 100644
--- a/qtbase/src/3rdparty/zlib/src/deflate.h
+++ b/qtbase/src/3rdparty/zlib/src/deflate.h
@@ -1,5 +1,5 @@
 /* deflate.h -- internal compression state
- * Copyright (C) 1995-2016 Jean-loup Gailly
+ * Copyright (C) 1995-2018 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -217,7 +217,7 @@ typedef struct internal_state {
     /* Depth of each subtree used as tie breaker for trees of equal frequency
      */
 
-    uchf *l_buf;          /* buffer for literals or lengths */
+    uchf *sym_buf;        /* buffer for distances and literals/lengths */
 
     uInt  lit_bufsize;
     /* Size of match buffer for literals/lengths.  There are 4 reasons for
@@ -239,13 +239,8 @@ typedef struct internal_state {
      *   - I can't count above 4
      */
 
-    uInt last_lit;      /* running index in l_buf */
-
-    ushf *d_buf;
-    /* Buffer for distances. To simplify the code, d_buf and l_buf have
-     * the same number of elements. To use different lengths, an extra flag
-     * array would be necessary.
-     */
+    uInt sym_next;      /* running index in sym_buf */
+    uInt sym_end;       /* symbol table full when sym_next reaches this */
 
     ulg opt_len;        /* bit length of current block with optimal trees */
     ulg static_len;     /* bit length of current block with static trees */
@@ -325,20 +320,22 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
 
 # define _tr_tally_lit(s, c, flush) \
   { uch cc = (c); \
-    s->d_buf[s->last_lit] = 0; \
-    s->l_buf[s->last_lit++] = cc; \
+    s->sym_buf[s->sym_next++] = 0; \
+    s->sym_buf[s->sym_next++] = 0; \
+    s->sym_buf[s->sym_next++] = cc; \
     s->dyn_ltree[cc].Freq++; \
-    flush = (s->last_lit == s->lit_bufsize-1); \
+    flush = (s->sym_next == s->sym_end); \
    }
 # define _tr_tally_dist(s, distance, length, flush) \
   { uch len = (uch)(length); \
     ush dist = (ush)(distance); \
-    s->d_buf[s->last_lit] = dist; \
-    s->l_buf[s->last_lit++] = len; \
+    s->sym_buf[s->sym_next++] = dist; \
+    s->sym_buf[s->sym_next++] = dist >> 8; \
+    s->sym_buf[s->sym_next++] = len; \
     dist--; \
     s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
     s->dyn_dtree[d_code(dist)].Freq++; \
-    flush = (s->last_lit == s->lit_bufsize-1); \
+    flush = (s->sym_next == s->sym_end); \
   }
 #else
 # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
diff --git a/qtbase/src/3rdparty/zlib/src/gzguts.h b/qtbase/src/3rdparty/zlib/src/gzguts.h
index 20de7cb4ce..3ec32af25f 100644
--- a/qtbase/src/3rdparty/zlib/src/gzguts.h
+++ b/qtbase/src/3rdparty/zlib/src/gzguts.h
@@ -1,5 +1,5 @@
 /* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
+ * Copyright (C) 2004-2019 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -10,15 +10,8 @@
 #  ifndef _CRT_NONSTDC_NO_DEPRECATE
 #    define _CRT_NONSTDC_NO_DEPRECATE
 #  endif
-#endif
-
-#ifdef _LARGEFILE64_SOURCE
-#  ifndef _LARGEFILE_SOURCE
-#    define _LARGEFILE_SOURCE 1
-#  endif
-#  ifdef _FILE_OFFSET_BITS
-#    undef _FILE_OFFSET_BITS
-#  endif
+// disable warnings like '=': conversion from 'size_t' to 'unsigned int', possible loss of data
+#  pragma warning(disable: 4267; disable: 4244)
 #endif
 
 #ifndef QT_BOOTSTRAPPED
@@ -29,6 +22,14 @@
 #define HAVE_HIDDEN
 #endif
 
+#ifdef _LARGEFILE64_SOURCE
+#  ifndef _LARGEFILE_SOURCE
+#    define _LARGEFILE_SOURCE 1
+#  endif
+#  ifdef _FILE_OFFSET_BITS
+#    undef _FILE_OFFSET_BITS
+#  endif
+#endif
 
 #ifdef HAVE_HIDDEN
 #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
@@ -57,7 +58,7 @@
 #  include <io.h>
 #endif
 
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
 #  define WIDECHAR
 #endif
 
@@ -208,6 +209,7 @@ typedef struct {
         /* just for writing */
     int level;              /* compression level */
     int strategy;           /* compression strategy */
+    int reset;              /* true if a reset is pending after a Z_FINISH */
         /* seek request */
     z_off64_t skip;         /* amount to skip (already rewound if backwards) */
     int seek;               /* true if seek request pending */
diff --git a/qtbase/src/3rdparty/zlib/src/gzlib.c b/qtbase/src/3rdparty/zlib/src/gzlib.c
index 4105e6aff9..dddaf26873 100644
--- a/qtbase/src/3rdparty/zlib/src/gzlib.c
+++ b/qtbase/src/3rdparty/zlib/src/gzlib.c
@@ -1,11 +1,11 @@
 /* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004-2017 Mark Adler
+ * Copyright (C) 2004-2019 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
 #include "gzguts.h"
 
-#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
+#if defined(_WIN32) && !defined(__BORLANDC__)
 #  define LSEEK _lseeki64
 #else
 #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
@@ -81,6 +81,8 @@ local void gz_reset(state)
         state->past = 0;            /* have not read past end yet */
         state->how = LOOK;          /* look for gzip header */
     }
+    else                            /* for writing ... */
+        state->reset = 0;           /* no deflateReset pending */
     state->seek = 0;                /* no seek request pending */
     gz_error(state, Z_OK, NULL);    /* clear error */
     state->x.pos = 0;               /* no uncompressed data yet */
@@ -397,7 +399,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence)
     /* if within raw area while reading, just go there */
     if (state->mode == GZ_READ && state->how == COPY &&
             state->x.pos + offset >= 0) {
-        ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+        ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR);
         if (ret == -1)
             return -1;
         state->x.have = 0;
diff --git a/qtbase/src/3rdparty/zlib/src/gzread.c b/qtbase/src/3rdparty/zlib/src/gzread.c
index 956b91ea7d..884c9bfe4c 100644
--- a/qtbase/src/3rdparty/zlib/src/gzread.c
+++ b/qtbase/src/3rdparty/zlib/src/gzread.c
@@ -1,5 +1,5 @@
 /* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -314,9 +314,9 @@ local z_size_t gz_read(state, buf, len)
     got = 0;
     do {
         /* set n to the maximum amount of len that fits in an unsigned int */
-        n = -1;
+        n = (unsigned)-1;
         if (n > len)
-            n = len;
+            n = (unsigned)len;
 
         /* first just try copying data from the output buffer */
         if (state->x.have) {
@@ -397,7 +397,7 @@ int ZEXPORT gzread(file, buf, len)
     }
 
     /* read len or fewer bytes to buf */
-    len = gz_read(state, buf, len);
+    len = (unsigned)gz_read(state, buf, len);
 
     /* check for an error */
     if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
@@ -447,7 +447,6 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file)
 int ZEXPORT gzgetc(file)
     gzFile file;
 {
-    int ret;
     unsigned char buf[1];
     gz_statep state;
 
@@ -469,8 +468,7 @@ int ZEXPORT gzgetc(file)
     }
 
     /* nothing there -- try gz_read() */
-    ret = gz_read(state, buf, 1);
-    return ret < 1 ? -1 : buf[0];
+    return gz_read(state, buf, 1) < 1 ? -1 : buf[0];
 }
 
 int ZEXPORT gzgetc_(file)
diff --git a/qtbase/src/3rdparty/zlib/src/gzwrite.c b/qtbase/src/3rdparty/zlib/src/gzwrite.c
index c7b5651d70..a8ffc8f53d 100644
--- a/qtbase/src/3rdparty/zlib/src/gzwrite.c
+++ b/qtbase/src/3rdparty/zlib/src/gzwrite.c
@@ -1,5 +1,5 @@
 /* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004-2017 Mark Adler
+ * Copyright (C) 2004-2019 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -97,6 +97,15 @@ local int gz_comp(state, flush)
         return 0;
     }
 
+    /* check for a pending reset */
+    if (state->reset) {
+        /* don't start a new gzip member unless there is data to write */
+        if (strm->avail_in == 0)
+            return 0;
+        deflateReset(strm);
+        state->reset = 0;
+    }
+
     /* run deflate() on provided input until it produces no more output */
     ret = Z_OK;
     do {
@@ -134,7 +143,7 @@ local int gz_comp(state, flush)
 
     /* if that completed a deflate stream, allow another to start */
     if (flush == Z_FINISH)
-        deflateReset(strm);
+        state->reset = 1;
 
     /* all done, no errors */
     return 0;
@@ -209,7 +218,7 @@ local z_size_t gz_write(state, buf, len)
                               state->in);
             copy = state->size - have;
             if (copy > len)
-                copy = len;
+                copy = (unsigned)len;
             memcpy(state->in + have, buf, copy);
             state->strm.avail_in += copy;
             state->x.pos += copy;
@@ -229,7 +238,7 @@ local z_size_t gz_write(state, buf, len)
         do {
             unsigned n = (unsigned)-1;
             if (n > len)
-                n = len;
+                n = (unsigned)len;
             state->strm.avail_in = n;
             state->x.pos += n;
             if (gz_comp(state, Z_NO_FLUSH) == -1)
@@ -349,12 +358,11 @@ int ZEXPORT gzputc(file, c)
 }
 
 /* -- see zlib.h -- */
-int ZEXPORT gzputs(file, str)
+int ZEXPORT gzputs(file, s)
     gzFile file;
-    const char *str;
+    const char *s;
 {
-    int ret;
-    z_size_t len;
+    z_size_t len, put;
     gz_statep state;
 
     /* get internal structure */
@@ -367,9 +375,13 @@ int ZEXPORT gzputs(file, str)
         return -1;
 
     /* write string */
-    len = strlen(str);
-    ret = gz_write(state, str, len);
-    return ret == 0 && len != 0 ? -1 : ret;
+    len = strlen(s);
+    if ((int)len < 0 || (unsigned)len != len) {
+        gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
+        return -1;
+    }
+    put = gz_write(state, s, len);
+    return put < len ? -1 : (int)len;
 }
 
 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
@@ -441,7 +453,7 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
         strm->avail_in = state->size;
         if (gz_comp(state, Z_NO_FLUSH) == -1)
             return state->err;
-        memcpy(state->in, state->in + state->size, left);
+        memmove(state->in, state->in + state->size, left);
         strm->next_in = state->in;
         strm->avail_in = left;
     }
@@ -540,7 +552,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
         strm->avail_in = state->size;
         if (gz_comp(state, Z_NO_FLUSH) == -1)
             return state->err;
-        memcpy(state->in, state->in + state->size, left);
+        memmove(state->in, state->in + state->size, left);
         strm->next_in = state->in;
         strm->avail_in = left;
     }
diff --git a/qtbase/src/3rdparty/zlib/src/infback.c b/qtbase/src/3rdparty/zlib/src/infback.c
index 59679ecbfc..a390c58e81 100644
--- a/qtbase/src/3rdparty/zlib/src/infback.c
+++ b/qtbase/src/3rdparty/zlib/src/infback.c
@@ -1,5 +1,5 @@
 /* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2016 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -477,6 +477,7 @@ void FAR *out_desc;
             }
             Tracev((stderr, "inflate:       codes ok\n"));
             state->mode = LEN;
+                /* fallthrough */
 
         case LEN:
             /* use inflate_fast() if we have enough input and output */
diff --git a/qtbase/src/3rdparty/zlib/src/inffast.c b/qtbase/src/3rdparty/zlib/src/inffast.c
index 0dbd1dbc09..1fec7f363f 100644
--- a/qtbase/src/3rdparty/zlib/src/inffast.c
+++ b/qtbase/src/3rdparty/zlib/src/inffast.c
@@ -70,7 +70,7 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */
     code const FAR *dcode;      /* local strm->distcode */
     unsigned lmask;             /* mask for first level of length codes */
     unsigned dmask;             /* mask for first level of distance codes */
-    code here;                  /* retrieved table entry */
+    code const *here;           /* retrieved table entry */
     unsigned op;                /* code bits, operation, extra bits, or */
                                 /*  window position, window bytes to copy */
     unsigned len;               /* match length, unused bytes */
@@ -107,20 +107,20 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */
             hold += (unsigned long)(*in++) << bits;
             bits += 8;
         }
-        here = lcode[hold & lmask];
+        here = lcode + (hold & lmask);
       dolen:
-        op = (unsigned)(here.bits);
+        op = (unsigned)(here->bits);
         hold >>= op;
         bits -= op;
-        op = (unsigned)(here.op);
+        op = (unsigned)(here->op);
         if (op == 0) {                          /* literal */
-            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+            Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
                     "inflate:         literal '%c'\n" :
-                    "inflate:         literal 0x%02x\n", here.val));
-            *out++ = (unsigned char)(here.val);
+                    "inflate:         literal 0x%02x\n", here->val));
+            *out++ = (unsigned char)(here->val);
         }
         else if (op & 16) {                     /* length base */
-            len = (unsigned)(here.val);
+            len = (unsigned)(here->val);
             op &= 15;                           /* number of extra bits */
             if (op) {
                 if (bits < op) {
@@ -138,14 +138,14 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */
                 hold += (unsigned long)(*in++) << bits;
                 bits += 8;
             }
-            here = dcode[hold & dmask];
+            here = dcode + (hold & dmask);
           dodist:
-            op = (unsigned)(here.bits);
+            op = (unsigned)(here->bits);
             hold >>= op;
             bits -= op;
-            op = (unsigned)(here.op);
+            op = (unsigned)(here->op);
             if (op & 16) {                      /* distance base */
-                dist = (unsigned)(here.val);
+                dist = (unsigned)(here->val);
                 op &= 15;                       /* number of extra bits */
                 if (bits < op) {
                     hold += (unsigned long)(*in++) << bits;
@@ -264,7 +264,7 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */
                 }
             }
             else if ((op & 64) == 0) {          /* 2nd level distance code */
-                here = dcode[here.val + (hold & ((1U << op) - 1))];
+                here = dcode + here->val + (hold & ((1U << op) - 1));
                 goto dodist;
             }
             else {
@@ -274,7 +274,7 @@ unsigned start;         /* inflate()'s starting value for strm->avail_out */
             }
         }
         else if ((op & 64) == 0) {              /* 2nd level length code */
-            here = lcode[here.val + (hold & ((1U << op) - 1))];
+            here = lcode + here->val + (hold & ((1U << op) - 1));
             goto dolen;
         }
         else if (op & 32) {                     /* end-of-block */
diff --git a/qtbase/src/3rdparty/zlib/src/inflate.c b/qtbase/src/3rdparty/zlib/src/inflate.c
index ac333e8c2e..2a3c4fe984 100644
--- a/qtbase/src/3rdparty/zlib/src/inflate.c
+++ b/qtbase/src/3rdparty/zlib/src/inflate.c
@@ -1,5 +1,5 @@
 /* inflate.c -- zlib decompression
- * Copyright (C) 1995-2016 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -130,6 +130,7 @@ z_streamp strm;
     state->mode = HEAD;
     state->last = 0;
     state->havedict = 0;
+    state->flags = -1;
     state->dmax = 32768U;
     state->head = Z_NULL;
     state->hold = 0;
@@ -447,10 +448,10 @@ unsigned copy;
 
 /* check function to use adler32() for zlib or crc32() for gzip */
 #ifdef GUNZIP
-#  define UPDATE(check, buf, len) \
+#  define UPDATE_CHECK(check, buf, len) \
     (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
 #else
-#  define UPDATE(check, buf, len) adler32(check, buf, len)
+#  define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
 #endif
 
 /* check macros for header crc */
@@ -670,7 +671,6 @@ int flush;
                 state->mode = FLAGS;
                 break;
             }
-            state->flags = 0;           /* expect zlib header */
             if (state->head != Z_NULL)
                 state->head->done = -1;
             if (!(state->wrap & 1) ||   /* check if zlib header allowed */
@@ -697,6 +697,7 @@ int flush;
                 break;
             }
             state->dmax = 1U << len;
+            state->flags = 0;               /* indicate zlib header */
             Tracev((stderr, "inflate:   zlib header ok\n"));
             strm->adler = state->check = adler32(0L, Z_NULL, 0);
             state->mode = hold & 0x200 ? DICTID : TYPE;
@@ -722,6 +723,7 @@ int flush;
                 CRC2(state->check, hold);
             INITBITS();
             state->mode = TIME;
+                /* fallthrough */
         case TIME:
             NEEDBITS(32);
             if (state->head != Z_NULL)
@@ -730,6 +732,7 @@ int flush;
                 CRC4(state->check, hold);
             INITBITS();
             state->mode = OS;
+                /* fallthrough */
         case OS:
             NEEDBITS(16);
             if (state->head != Z_NULL) {
@@ -740,6 +743,7 @@ int flush;
                 CRC2(state->check, hold);
             INITBITS();
             state->mode = EXLEN;
+                /* fallthrough */
         case EXLEN:
             if (state->flags & 0x0400) {
                 NEEDBITS(16);
@@ -753,14 +757,16 @@ int flush;
             else if (state->head != Z_NULL)
                 state->head->extra = Z_NULL;
             state->mode = EXTRA;
+                /* fallthrough */
         case EXTRA:
             if (state->flags & 0x0400) {
                 copy = state->length;
                 if (copy > have) copy = have;
                 if (copy) {
                     if (state->head != Z_NULL &&
-                        state->head->extra != Z_NULL) {
-                        len = state->head->extra_len - state->length;
+                        state->head->extra != Z_NULL &&
+                        (len = state->head->extra_len - state->length) <
+                            state->head->extra_max) {
                         zmemcpy(state->head->extra + len, next,
                                 len + copy > state->head->extra_max ?
                                 state->head->extra_max - len : copy);
@@ -775,6 +781,7 @@ int flush;
             }
             state->length = 0;
             state->mode = NAME;
+                /* fallthrough */
         case NAME:
             if (state->flags & 0x0800) {
                 if (have == 0) goto inf_leave;
@@ -796,6 +803,7 @@ int flush;
                 state->head->name = Z_NULL;
             state->length = 0;
             state->mode = COMMENT;
+                /* fallthrough */
         case COMMENT:
             if (state->flags & 0x1000) {
                 if (have == 0) goto inf_leave;
@@ -816,6 +824,7 @@ int flush;
             else if (state->head != Z_NULL)
                 state->head->comment = Z_NULL;
             state->mode = HCRC;
+                /* fallthrough */
         case HCRC:
             if (state->flags & 0x0200) {
                 NEEDBITS(16);
@@ -839,6 +848,7 @@ int flush;
             strm->adler = state->check = ZSWAP32(hold);
             INITBITS();
             state->mode = DICT;
+                /* fallthrough */
         case DICT:
             if (state->havedict == 0) {
                 RESTORE();
@@ -846,8 +856,10 @@ int flush;
             }
             strm->adler = state->check = adler32(0L, Z_NULL, 0);
             state->mode = TYPE;
+                /* fallthrough */
         case TYPE:
             if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+                /* fallthrough */
         case TYPEDO:
             if (state->last) {
                 BYTEBITS();
@@ -898,8 +910,10 @@ int flush;
             INITBITS();
             state->mode = COPY_;
             if (flush == Z_TREES) goto inf_leave;
+                /* fallthrough */
         case COPY_:
             state->mode = COPY;
+                /* fallthrough */
         case COPY:
             copy = state->length;
             if (copy) {
@@ -935,6 +949,7 @@ int flush;
             Tracev((stderr, "inflate:       table sizes ok\n"));
             state->have = 0;
             state->mode = LENLENS;
+                /* fallthrough */
         case LENLENS:
             while (state->have < state->ncode) {
                 NEEDBITS(3);
@@ -956,6 +971,7 @@ int flush;
             Tracev((stderr, "inflate:       code lengths ok\n"));
             state->have = 0;
             state->mode = CODELENS;
+                /* fallthrough */
         case CODELENS:
             while (state->have < state->nlen + state->ndist) {
                 for (;;) {
@@ -1039,8 +1055,10 @@ int flush;
             Tracev((stderr, "inflate:       codes ok\n"));
             state->mode = LEN_;
             if (flush == Z_TREES) goto inf_leave;
+                /* fallthrough */
         case LEN_:
             state->mode = LEN;
+                /* fallthrough */
         case LEN:
             if (have >= 6 && left >= 258) {
                 RESTORE();
@@ -1090,6 +1108,7 @@ int flush;
             }
             state->extra = (unsigned)(here.op) & 15;
             state->mode = LENEXT;
+                /* fallthrough */
         case LENEXT:
             if (state->extra) {
                 NEEDBITS(state->extra);
@@ -1100,6 +1119,7 @@ int flush;
             Tracevv((stderr, "inflate:         length %u\n", state->length));
             state->was = state->length;
             state->mode = DIST;
+                /* fallthrough */
         case DIST:
             for (;;) {
                 here = state->distcode[BITS(state->distbits)];
@@ -1127,6 +1147,7 @@ int flush;
             state->offset = (unsigned)here.val;
             state->extra = (unsigned)(here.op) & 15;
             state->mode = DISTEXT;
+                /* fallthrough */
         case DISTEXT:
             if (state->extra) {
                 NEEDBITS(state->extra);
@@ -1143,6 +1164,7 @@ int flush;
 #endif
             Tracevv((stderr, "inflate:         distance %u\n", state->offset));
             state->mode = MATCH;
+                /* fallthrough */
         case MATCH:
             if (left == 0) goto inf_leave;
             copy = out - left;
@@ -1202,7 +1224,7 @@ int flush;
                 state->total += out;
                 if ((state->wrap & 4) && out)
                     strm->adler = state->check =
-                        UPDATE(state->check, put - out, out);
+                        UPDATE_CHECK(state->check, put - out, out);
                 out = left;
                 if ((state->wrap & 4) && (
 #ifdef GUNZIP
@@ -1218,10 +1240,11 @@ int flush;
             }
 #ifdef GUNZIP
             state->mode = LENGTH;
+                /* fallthrough */
         case LENGTH:
             if (state->wrap && state->flags) {
                 NEEDBITS(32);
-                if (hold != (state->total & 0xffffffffUL)) {
+                if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
                     strm->msg = (char *)"incorrect length check";
                     state->mode = BAD;
                     break;
@@ -1231,6 +1254,7 @@ int flush;
             }
 #endif
             state->mode = DONE;
+                /* fallthrough */
         case DONE:
             ret = Z_STREAM_END;
             goto inf_leave;
@@ -1240,6 +1264,7 @@ int flush;
         case MEM:
             return Z_MEM_ERROR;
         case SYNC:
+                /* fallthrough */
         default:
             return Z_STREAM_ERROR;
         }
@@ -1265,7 +1290,7 @@ int flush;
     state->total += out;
     if ((state->wrap & 4) && out)
         strm->adler = state->check =
-            UPDATE(state->check, strm->next_out - out, out);
+            UPDATE_CHECK(state->check, strm->next_out - out, out);
     strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
                       (state->mode == TYPE ? 128 : 0) +
                       (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
@@ -1401,6 +1426,7 @@ int ZEXPORT inflateSync(strm)
 z_streamp strm;
 {
     unsigned len;               /* number of bytes to look at or looked at */
+    int flags;                  /* temporary to save header status */
     unsigned long in, out;      /* temporary to save total_in and total_out */
     unsigned char buf[4];       /* to restore bit buffer to byte string */
     struct inflate_state FAR *state;
@@ -1433,9 +1459,15 @@ z_streamp strm;
 
     /* return no joy or set up to restart inflate() on a new block */
     if (state->have != 4) return Z_DATA_ERROR;
+    if (state->flags == -1)
+        state->wrap = 0;    /* if no header yet, treat as raw */
+    else
+        state->wrap &= ~4;  /* no point in computing a check value now */
+    flags = state->flags;
     in = strm->total_in;  out = strm->total_out;
     inflateReset(strm);
     strm->total_in = in;  strm->total_out = out;
+    state->flags = flags;
     state->mode = TYPE;
     return Z_OK;
 }
@@ -1531,7 +1563,7 @@ int check;
 
     if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
     state = (struct inflate_state FAR *)strm->state;
-    if (check)
+    if (check && state->wrap)
         state->wrap |= 4;
     else
         state->wrap &= ~4;
diff --git a/qtbase/src/3rdparty/zlib/src/inflate.h b/qtbase/src/3rdparty/zlib/src/inflate.h
index a46cce6b6d..f127b6b1fa 100644
--- a/qtbase/src/3rdparty/zlib/src/inflate.h
+++ b/qtbase/src/3rdparty/zlib/src/inflate.h
@@ -1,5 +1,5 @@
 /* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2016 Mark Adler
+ * Copyright (C) 1995-2019 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -86,7 +86,8 @@ struct inflate_state {
     int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip,
                                    bit 2 true to validate check value */
     int havedict;               /* true if dictionary provided */
-    int flags;                  /* gzip header method and flags (0 if zlib) */
+    int flags;                  /* gzip header method and flags, 0 if zlib, or
+                                   -1 if raw or no header yet */
     unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
     unsigned long check;        /* protected copy of check value */
     unsigned long total;        /* protected copy of output count */
diff --git a/qtbase/src/3rdparty/zlib/src/inftrees.c b/qtbase/src/3rdparty/zlib/src/inftrees.c
index 2ea08fc13e..09462a740b 100644
--- a/qtbase/src/3rdparty/zlib/src/inftrees.c
+++ b/qtbase/src/3rdparty/zlib/src/inftrees.c
@@ -1,5 +1,5 @@
 /* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2017 Mark Adler
+ * Copyright (C) 1995-2022 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -9,7 +9,7 @@
 #define MAXBITS 15
 
 const char inflate_copyright[] =
-   " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
+   " inflate 1.2.12 Copyright 1995-2022 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -62,7 +62,7 @@ unsigned short FAR *work;
         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202};
     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
diff --git a/qtbase/src/3rdparty/zlib/src/trees.c b/qtbase/src/3rdparty/zlib/src/trees.c
index 50cf4b4571..f73fd99c37 100644
--- a/qtbase/src/3rdparty/zlib/src/trees.c
+++ b/qtbase/src/3rdparty/zlib/src/trees.c
@@ -1,5 +1,5 @@
 /* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2017 Jean-loup Gailly
+ * Copyright (C) 1995-2021 Jean-loup Gailly
  * detect_data_type() function provided freely by Cosmin Truta, 2006
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
@@ -149,7 +149,7 @@ local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
 local void compress_block OF((deflate_state *s, const ct_data *ltree,
                               const ct_data *dtree));
 local int  detect_data_type OF((deflate_state *s));
-local unsigned bi_reverse OF((unsigned value, int length));
+local unsigned bi_reverse OF((unsigned code, int len));
 local void bi_windup      OF((deflate_state *s));
 local void bi_flush       OF((deflate_state *s));
 
@@ -416,7 +416,7 @@ local void init_block(s)
 
     s->dyn_ltree[END_BLOCK].Freq = 1;
     s->opt_len = s->static_len = 0L;
-    s->last_lit = s->matches = 0;
+    s->sym_next = s->matches = 0;
 }
 
 #define SMALLEST 1
@@ -870,7 +870,8 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
     bi_windup(s);        /* align on byte boundary */
     put_short(s, (ush)stored_len);
     put_short(s, (ush)~stored_len);
-    zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
+    if (stored_len)
+        zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
     s->pending += stored_len;
 #ifdef ZLIB_DEBUG
     s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
@@ -947,7 +948,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
 
         Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
                 opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
-                s->last_lit));
+                s->sym_next / 3));
 
         if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
 
@@ -1016,8 +1017,9 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
     unsigned dist;  /* distance of matched string */
     unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
 {
-    s->d_buf[s->last_lit] = (ush)dist;
-    s->l_buf[s->last_lit++] = (uch)lc;
+    s->sym_buf[s->sym_next++] = dist;
+    s->sym_buf[s->sym_next++] = dist >> 8;
+    s->sym_buf[s->sym_next++] = lc;
     if (dist == 0) {
         /* lc is the unmatched char */
         s->dyn_ltree[lc].Freq++;
@@ -1032,30 +1034,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc)
         s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
         s->dyn_dtree[d_code(dist)].Freq++;
     }
-
-#ifdef TRUNCATE_BLOCK
-    /* Try to guess if it is profitable to stop the current block here */
-    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
-        /* Compute an upper bound for the compressed length */
-        ulg out_length = (ulg)s->last_lit*8L;
-        ulg in_length = (ulg)((long)s->strstart - s->block_start);
-        int dcode;
-        for (dcode = 0; dcode < D_CODES; dcode++) {
-            out_length += (ulg)s->dyn_dtree[dcode].Freq *
-                (5L+extra_dbits[dcode]);
-        }
-        out_length >>= 3;
-        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
-               s->last_lit, in_length, out_length,
-               100L - out_length*100L/in_length));
-        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
-    }
-#endif
-    return (s->last_lit == s->lit_bufsize-1);
-    /* We avoid equality with lit_bufsize because of wraparound at 64K
-     * on 16 bit machines and because stored blocks are restricted to
-     * 64K-1 bytes.
-     */
+    return (s->sym_next == s->sym_end);
 }
 
 /* ===========================================================================
@@ -1068,13 +1047,14 @@ local void compress_block(s, ltree, dtree)
 {
     unsigned dist;      /* distance of matched string */
     int lc;             /* match length or unmatched char (if dist == 0) */
-    unsigned lx = 0;    /* running index in l_buf */
+    unsigned sx = 0;    /* running index in sym_buf */
     unsigned code;      /* the code to send */
     int extra;          /* number of extra bits to send */
 
-    if (s->last_lit != 0) do {
-        dist = s->d_buf[lx];
-        lc = s->l_buf[lx++];
+    if (s->sym_next != 0) do {
+        dist = s->sym_buf[sx++] & 0xff;
+        dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
+        lc = s->sym_buf[sx++];
         if (dist == 0) {
             send_code(s, lc, ltree); /* send a literal byte */
             Tracecv(isgraph(lc), (stderr," '%c' ", lc));
@@ -1099,11 +1079,10 @@ local void compress_block(s, ltree, dtree)
             }
         } /* literal or match pair ? */
 
-        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
-        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
-               "pendingBuf overflow");
+        /* Check that the overlay between pending_buf and sym_buf is ok: */
+        Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
 
-    } while (lx < s->last_lit);
+    } while (sx < s->sym_next);
 
     send_code(s, END_BLOCK, ltree);
 }
@@ -1112,9 +1091,9 @@ local void compress_block(s, ltree, dtree)
  * Check if the data type is TEXT or BINARY, using the following algorithm:
  * - TEXT if the two conditions below are satisfied:
  *    a) There are no non-portable control characters belonging to the
- *       "black list" (0..6, 14..25, 28..31).
+ *       "block list" (0..6, 14..25, 28..31).
  *    b) There is at least one printable character belonging to the
- *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ *       "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
  * - BINARY otherwise.
  * - The following partially-portable control characters form a
  *   "gray list" that is ignored in this detection algorithm:
@@ -1124,19 +1103,19 @@ local void compress_block(s, ltree, dtree)
 local int detect_data_type(s)
     deflate_state *s;
 {
-    /* black_mask is the bit mask of black-listed bytes
+    /* block_mask is the bit mask of block-listed bytes
      * set bits 0..6, 14..25, and 28..31
      * 0xf3ffc07f = binary 11110011111111111100000001111111
      */
-    unsigned long black_mask = 0xf3ffc07fUL;
+    unsigned long block_mask = 0xf3ffc07fUL;
     int n;
 
-    /* Check for non-textual ("black-listed") bytes. */
-    for (n = 0; n <= 31; n++, black_mask >>= 1)
-        if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+    /* Check for non-textual ("block-listed") bytes. */
+    for (n = 0; n <= 31; n++, block_mask >>= 1)
+        if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0))
             return Z_BINARY;
 
-    /* Check for textual ("white-listed") bytes. */
+    /* Check for textual ("allow-listed") bytes. */
     if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
             || s->dyn_ltree[13].Freq != 0)
         return Z_TEXT;
@@ -1144,7 +1123,7 @@ local int detect_data_type(s)
         if (s->dyn_ltree[n].Freq != 0)
             return Z_TEXT;
 
-    /* There are no "black-listed" or "white-listed" bytes:
+    /* There are no "block-listed" or "allow-listed" bytes:
      * this stream either is empty or has tolerated ("gray-listed") bytes only.
      */
     return Z_BINARY;
diff --git a/qtbase/src/3rdparty/zlib/src/zlib.h b/qtbase/src/3rdparty/zlib/src/zlib.h
index 32c2ce0957..84087ef332 100644
--- a/qtbase/src/3rdparty/zlib/src/zlib.h
+++ b/qtbase/src/3rdparty/zlib/src/zlib.h
@@ -1,7 +1,7 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.11, January 15th, 2017
+  version 1.2.12, March 11th, 2022
 
-  Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+  Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -41,11 +41,11 @@
 extern "C" {
 #endif
 
-#define ZLIB_VERSION "1.2.11 (Qt)"
-#define ZLIB_VERNUM 0x12b0f
+#define ZLIB_VERSION "1.2.12 (Qt)"
+#define ZLIB_VERNUM 0x12c0
 #define ZLIB_VER_MAJOR 1
 #define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 11
+#define ZLIB_VER_REVISION 12
 #define ZLIB_VER_SUBREVISION 0
 
 /*
@@ -547,8 +547,7 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
                                      int  strategy));
 
      This is another version of deflateInit with more compression options.  The
-   fields next_in, zalloc, zfree and opaque must be initialized before by the
-   caller.
+   fields zalloc, zfree and opaque must be initialized before by the caller.
 
      The method parameter is the compression method.  It must be Z_DEFLATED in
    this version of the library.
@@ -716,11 +715,12 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
    used to switch between compression and straight copy of the input data, or
    to switch to a different kind of input data requiring a different strategy.
    If the compression approach (which is a function of the level) or the
-   strategy is changed, and if any input has been consumed in a previous
-   deflate() call, then the input available so far is compressed with the old
-   level and strategy using deflate(strm, Z_BLOCK).  There are three approaches
-   for the compression levels 0, 1..3, and 4..9 respectively.  The new level
-   and strategy will take effect at the next call of deflate().
+   strategy is changed, and if there have been any deflate() calls since the
+   state was initialized or reset, then the input available so far is
+   compressed with the old level and strategy using deflate(strm, Z_BLOCK).
+   There are three approaches for the compression levels 0, 1..3, and 4..9
+   respectively.  The new level and strategy will take effect at the next call
+   of deflate().
 
      If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
    not have enough output space to complete, then the parameter change will not
@@ -869,9 +869,11 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
    detection, or add 16 to decode only the gzip format (the zlib format will
    return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
    CRC-32 instead of an Adler-32.  Unlike the gunzip utility and gzread() (see
-   below), inflate() will not automatically decode concatenated gzip streams.
-   inflate() will return Z_STREAM_END at the end of the gzip stream.  The state
-   would need to be reset to continue decoding a subsequent gzip stream.
+   below), inflate() will *not* automatically decode concatenated gzip members.
+   inflate() will return Z_STREAM_END at the end of the gzip member.  The state
+   would need to be reset to continue decoding a subsequent gzip member.  This
+   *must* be done if there is more data after a gzip member, in order for the
+   decompression to be compliant with the gzip standard (RFC 1952).
 
      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
@@ -1306,14 +1308,14 @@ typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
 /*
 ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
 
-     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
-   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
-   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
-   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
-   for fixed code compression as in "wb9F".  (See the description of
-   deflateInit2 for more information about the strategy parameter.)  'T' will
-   request transparent writing or appending with no compression and not using
-   the gzip format.
+     Open the gzip (.gz) file at path for reading and decompressing, or
+   compressing and writing.  The mode parameter is as in fopen ("rb" or "wb")
+   but can also include a compression level ("wb9") or a strategy: 'f' for
+   filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h",
+   'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
+   as in "wb9F".  (See the description of deflateInit2 for more information
+   about the strategy parameter.)  'T' will request transparent writing or
+   appending with no compression and not using the gzip format.
 
      "a" can be used instead of "w" to request that the gzip stream that will
    be written be appended to the file.  "+" will result in an error, since
@@ -1343,9 +1345,9 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
 
 ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
 /*
-     gzdopen associates a gzFile with the file descriptor fd.  File descriptors
-   are obtained from calls like open, dup, creat, pipe or fileno (if the file
-   has been previously opened with fopen).  The mode parameter is as in gzopen.
+     Associate a gzFile with the file descriptor fd.  File descriptors are
+   obtained from calls like open, dup, creat, pipe or fileno (if the file has
+   been previously opened with fopen).  The mode parameter is as in gzopen.
 
      The next call of gzclose on the returned gzFile will also close the file
    descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
@@ -1366,13 +1368,13 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
 
 ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
 /*
-     Set the internal buffer size used by this library's functions.  The
-   default buffer size is 8192 bytes.  This function must be called after
-   gzopen() or gzdopen(), and before any other calls that read or write the
-   file.  The buffer memory allocation is always deferred to the first read or
-   write.  Three times that size in buffer space is allocated.  A larger buffer
-   size of, for example, 64K or 128K bytes will noticeably increase the speed
-   of decompression (reading).
+     Set the internal buffer size used by this library's functions for file to
+   size.  The default buffer size is 8192 bytes.  This function must be called
+   after gzopen() or gzdopen(), and before any other calls that read or write
+   the file.  The buffer memory allocation is always deferred to the first read
+   or write.  Three times that size in buffer space is allocated.  A larger
+   buffer size of, for example, 64K or 128K bytes will noticeably increase the
+   speed of decompression (reading).
 
      The new buffer size also affects the maximum length for gzprintf().
 
@@ -1382,9 +1384,9 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
 
 ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
 /*
-     Dynamically update the compression level or strategy.  See the description
-   of deflateInit2 for the meaning of these parameters.  Previously provided
-   data is flushed before the parameter change.
+     Dynamically update the compression level and strategy for file.  See the
+   description of deflateInit2 for the meaning of these parameters. Previously
+   provided data is flushed before applying the parameter changes.
 
      gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
    opened for writing, Z_ERRNO if there is an error writing the flushed data,
@@ -1393,7 +1395,7 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
 
 ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
 /*
-     Reads the given number of uncompressed bytes from the compressed file.  If
+     Read and decompress up to len uncompressed bytes from file into buf.  If
    the input file is not in gzip format, gzread copies the given number of
    bytes into the buffer directly from the file.
 
@@ -1424,11 +1426,11 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
 ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
                                      gzFile file));
 /*
-     Read up to nitems items of size size from file to buf, otherwise operating
-   as gzread() does.  This duplicates the interface of stdio's fread(), with
-   size_t request and return types.  If the library defines size_t, then
-   z_size_t is identical to size_t.  If not, then z_size_t is an unsigned
-   integer type that can contain a pointer.
+     Read and decompress up to nitems items of size size from file into buf,
+   otherwise operating as gzread() does.  This duplicates the interface of
+   stdio's fread(), with size_t request and return types.  If the library
+   defines size_t, then z_size_t is identical to size_t.  If not, then z_size_t
+   is an unsigned integer type that can contain a pointer.
 
      gzfread() returns the number of full items read of size size, or zero if
    the end of the file was reached and a full item could not be read, or if
@@ -1447,18 +1449,16 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
    file, reseting and retrying on end-of-file, when size is not 1.
 */
 
-ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
-                                voidpc buf, unsigned len));
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len));
 /*
-     Writes the given number of uncompressed bytes into the compressed file.
-   gzwrite returns the number of uncompressed bytes written or 0 in case of
-   error.
+     Compress and write the len uncompressed bytes at buf to file. gzwrite
+   returns the number of uncompressed bytes written or 0 in case of error.
 */
 
 ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
                                       z_size_t nitems, gzFile file));
 /*
-     gzfwrite() writes nitems items of size size from buf to file, duplicating
+     Compress and write nitems items of size size from buf to file, duplicating
    the interface of stdio's fwrite(), with size_t request and return types.  If
    the library defines size_t, then z_size_t is identical to size_t.  If not,
    then z_size_t is an unsigned integer type that can contain a pointer.
@@ -1471,22 +1471,22 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
 
 ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
 /*
-     Converts, formats, and writes the arguments to the compressed file under
-   control of the format string, as in fprintf.  gzprintf returns the number of
+     Convert, format, compress, and write the arguments (...) to file under
+   control of the string format, as in fprintf.  gzprintf returns the number of
    uncompressed bytes actually written, or a negative zlib error code in case
    of error.  The number of uncompressed bytes written is limited to 8191, or
    one less than the buffer size given to gzbuffer().  The caller should assure
    that this limit is not exceeded.  If it is exceeded, then gzprintf() will
    return an error (0) with nothing written.  In this case, there may also be a
    buffer overflow with unpredictable consequences, which is possible only if
-   zlib was compiled with the insecure functions sprintf() or vsprintf()
+   zlib was compiled with the insecure functions sprintf() or vsprintf(),
    because the secure snprintf() or vsnprintf() functions were not available.
    This can be determined using zlibCompileFlags().
 */
 
 ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
 /*
-     Writes the given null-terminated string to the compressed file, excluding
+     Compress and write the given null-terminated string s to file, excluding
    the terminating null character.
 
      gzputs returns the number of characters written, or -1 in case of error.
@@ -1494,11 +1494,12 @@ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
 
 ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
 /*
-     Reads bytes from the compressed file until len-1 characters are read, or a
-   newline character is read and transferred to buf, or an end-of-file
-   condition is encountered.  If any characters are read or if len == 1, the
-   string is terminated with a null character.  If no characters are read due
-   to an end-of-file or len < 1, then the buffer is left untouched.
+     Read and decompress bytes from file into buf, until len-1 characters are
+   read, or until a newline character is read and transferred to buf, or an
+   end-of-file condition is encountered.  If any characters are read or if len
+   is one, the string is terminated with a null character.  If no characters
+   are read due to an end-of-file or len is less than one, then the buffer is
+   left untouched.
 
      gzgets returns buf which is a null-terminated string, or it returns NULL
    for end-of-file or in case of error.  If there was an error, the contents at
@@ -1507,13 +1508,13 @@ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
 
 ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
 /*
-     Writes c, converted to an unsigned char, into the compressed file.  gzputc
+     Compress and write c, converted to an unsigned char, into file.  gzputc
    returns the value that was written, or -1 in case of error.
 */
 
 ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
 /*
-     Reads one byte from the compressed file.  gzgetc returns this byte or -1
+     Read and decompress one byte from file.  gzgetc returns this byte or -1
    in case of end of file or error.  This is implemented as a macro for speed.
    As such, it does not do all of the checking the other functions do.  I.e.
    it does not check to see if file is NULL, nor whether the structure file
@@ -1522,8 +1523,8 @@ ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
 
 ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
 /*
-     Push one character back onto the stream to be read as the first character
-   on the next read.  At least one character of push-back is allowed.
+     Push c back onto the stream for file to be read as the first character on
+   the next read.  At least one character of push-back is always allowed.
    gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
    fail if c is -1, and may fail if a character has been pushed but not read
    yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
@@ -1534,9 +1535,9 @@ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
 
 ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
 /*
-     Flushes all pending output into the compressed file.  The parameter flush
-   is as in the deflate() function.  The return value is the zlib error number
-   (see function gzerror below).  gzflush is only permitted when writing.
+     Flush all pending output to file.  The parameter flush is as in the
+   deflate() function.  The return value is the zlib error number (see function
+   gzerror below).  gzflush is only permitted when writing.
 
      If the flush parameter is Z_FINISH, the remaining data is written and the
    gzip stream is completed in the output.  If gzwrite() is called again, a new
@@ -1551,8 +1552,8 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
 ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
                                    z_off_t offset, int whence));
 
-     Sets the starting position for the next gzread or gzwrite on the given
-   compressed file.  The offset represents a number of bytes in the
+     Set the starting position to offset relative to whence for the next gzread
+   or gzwrite on file.  The offset represents a number of bytes in the
    uncompressed data stream.  The whence parameter is defined as in lseek(2);
    the value SEEK_END is not supported.
 
@@ -1569,18 +1570,18 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
 
 ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
 /*
-     Rewinds the given file. This function is supported only for reading.
+     Rewind file. This function is supported only for reading.
 
-     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
 */
 
 /*
 ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
 
-     Returns the starting position for the next gzread or gzwrite on the given
-   compressed file.  This position represents a number of bytes in the
-   uncompressed data stream, and is zero when starting, even if appending or
-   reading a gzip stream from the middle of a file using gzdopen().
+     Return the starting position for the next gzread or gzwrite on file.
+   This position represents a number of bytes in the uncompressed data stream,
+   and is zero when starting, even if appending or reading a gzip stream from
+   the middle of a file using gzdopen().
 
      gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
 */
@@ -1588,22 +1589,22 @@ ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
 /*
 ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
 
-     Returns the current offset in the file being read or written.  This offset
-   includes the count of bytes that precede the gzip stream, for example when
-   appending or when using gzdopen() for reading.  When reading, the offset
-   does not include as yet unused buffered input.  This information can be used
-   for a progress indicator.  On error, gzoffset() returns -1.
+     Return the current compressed (actual) read or write offset of file.  This
+   offset includes the count of bytes that precede the gzip stream, for example
+   when appending or when using gzdopen() for reading.  When reading, the
+   offset does not include as yet unused buffered input.  This information can
+   be used for a progress indicator.  On error, gzoffset() returns -1.
 */
 
 ZEXTERN int ZEXPORT gzeof OF((gzFile file));
 /*
-     Returns true (1) if the end-of-file indicator has been set while reading,
-   false (0) otherwise.  Note that the end-of-file indicator is set only if the
-   read tried to go past the end of the input, but came up short.  Therefore,
-   just like feof(), gzeof() may return false even if there is no more data to
-   read, in the event that the last read request was for the exact number of
-   bytes remaining in the input file.  This will happen if the input file size
-   is an exact multiple of the buffer size.
+     Return true (1) if the end-of-file indicator for file has been set while
+   reading, false (0) otherwise.  Note that the end-of-file indicator is set
+   only if the read tried to go past the end of the input, but came up short.
+   Therefore, just like feof(), gzeof() may return false even if there is no
+   more data to read, in the event that the last read request was for the exact
+   number of bytes remaining in the input file.  This will happen if the input
+   file size is an exact multiple of the buffer size.
 
      If gzeof() returns true, then the read functions will return no more data,
    unless the end-of-file indicator is reset by gzclearerr() and the input file
@@ -1612,7 +1613,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file));
 
 ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
 /*
-     Returns true (1) if file is being copied directly while reading, or false
+     Return true (1) if file is being copied directly while reading, or false
    (0) if file is a gzip stream being decompressed.
 
      If the input file is empty, gzdirect() will return true, since the input
@@ -1633,8 +1634,8 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
 
 ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
 /*
-     Flushes all pending output if necessary, closes the compressed file and
-   deallocates the (de)compression state.  Note that once file is closed, you
+     Flush all pending output for file, if necessary, close file and
+   deallocate the (de)compression state.  Note that once file is closed, you
    cannot call gzerror with file, since its structures have been deallocated.
    gzclose must not be called more than once on the same file, just as free
    must not be called more than once on the same allocation.
@@ -1658,10 +1659,10 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
 
 ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
 /*
-     Returns the error message for the last error which occurred on the given
-   compressed file.  errnum is set to zlib error number.  If an error occurred
-   in the file system and not in the compression library, errnum is set to
-   Z_ERRNO and the application may consult errno to get the exact error code.
+     Return the error message for the last error which occurred on file.
+   errnum is set to zlib error number.  If an error occurred in the file system
+   and not in the compression library, errnum is set to Z_ERRNO and the
+   application may consult errno to get the exact error code.
 
      The application must not modify the returned string.  Future calls to
    this function may invalidate the previously returned string.  If file is
@@ -1674,7 +1675,7 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
 
 ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
 /*
-     Clears the error and end-of-file flags for file.  This is analogous to the
+     Clear the error and end-of-file flags for file.  This is analogous to the
    clearerr() function in stdio.  This is useful for continuing to read a gzip
    file that is being written concurrently.
 */
@@ -1692,8 +1693,9 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
 ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
 /*
      Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-   return the updated checksum.  If buf is Z_NULL, this function returns the
-   required initial value for the checksum.
+   return the updated checksum. An Adler-32 value is in the range of a 32-bit
+   unsigned integer. If buf is Z_NULL, this function returns the required
+   initial value for the checksum.
 
      An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
    much faster.
@@ -1726,12 +1728,13 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
    negative, the result has no meaning or utility.
 */
 
-ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
 /*
      Update a running CRC-32 with the bytes buf[0..len-1] and return the
-   updated CRC-32.  If buf is Z_NULL, this function returns the required
-   initial value for the crc.  Pre- and post-conditioning (one's complement) is
-   performed within this function so it shouldn't be done by the application.
+   updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer.
+   If buf is Z_NULL, this function returns the required initial value for the
+   crc. Pre- and post-conditioning (one's complement) is performed within this
+   function so it shouldn't be done by the application.
 
    Usage example:
 
@@ -1743,7 +1746,7 @@ ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
      if (crc != original_crc) error();
 */
 
-ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf,
                                   z_size_t len));
 /*
      Same as crc32(), but with a size_t length.
@@ -1759,6 +1762,20 @@ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
    len2.
 */
 
+/*
+ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2));
+
+     Return the operator corresponding to length len2, to be used with
+   crc32_combine_op().
+*/
+
+ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op));
+/*
+     Give the same result as crc32_combine(), using op in place of len2. op is
+   is generated from len2 by crc32_combine_gen(). This will be faster than
+   crc32_combine() if the generated op is used more than once.
+*/
+
 
                         /* various hacks, don't look :) */
 
@@ -1846,6 +1863,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
    ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t));
 #endif
 
 #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
@@ -1856,6 +1874,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
 #    define z_gzoffset z_gzoffset64
 #    define z_adler32_combine z_adler32_combine64
 #    define z_crc32_combine z_crc32_combine64
+#    define z_crc32_combine_gen z_crc32_combine_gen64
 #  else
 #    define gzopen gzopen64
 #    define gzseek gzseek64
@@ -1863,6 +1882,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
 #    define gzoffset gzoffset64
 #    define adler32_combine adler32_combine64
 #    define crc32_combine crc32_combine64
+#    define crc32_combine_gen crc32_combine_gen64
 #  endif
 #  ifndef Z_LARGE64
      ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
@@ -1871,6 +1891,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
      ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
      ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
      ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t));
 #  endif
 #else
    ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
@@ -1879,12 +1900,14 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
    ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
    ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
    ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
 #endif
 
 #else /* Z_SOLO */
 
    ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
    ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t));
 
 #endif /* !Z_SOLO */
 
@@ -1897,7 +1920,7 @@ ZEXTERN int            ZEXPORT inflateValidate OF((z_streamp, int));
 ZEXTERN unsigned long  ZEXPORT inflateCodesUsed OF ((z_streamp));
 ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
 ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
-#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
+#if defined(_WIN32) && !defined(Z_SOLO)
 ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
                                             const char *mode));
 #endif
diff --git a/qtbase/src/3rdparty/zlib/src/zutil.c b/qtbase/src/3rdparty/zlib/src/zutil.c
index a76c6b0c7e..dcab28a0d5 100644
--- a/qtbase/src/3rdparty/zlib/src/zutil.c
+++ b/qtbase/src/3rdparty/zlib/src/zutil.c
@@ -136,8 +136,8 @@ const char * ZEXPORT zError(err)
     return ERR_MSG(err);
 }
 
-#if defined(_WIN32_WCE)
-    /* The Microsoft C Run-Time Library for Windows CE doesn't have
+#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800
+    /* The older Microsoft C Run-Time Library for Windows CE doesn't have
      * errno.  We define it as a global variable to simplify porting.
      * Its value is always 0 and should not be used.
      */
diff --git a/qtbase/src/3rdparty/zlib/src/zutil.h b/qtbase/src/3rdparty/zlib/src/zutil.h
index 38066137fc..0d78483358 100644
--- a/qtbase/src/3rdparty/zlib/src/zutil.h
+++ b/qtbase/src/3rdparty/zlib/src/zutil.h
@@ -1,5 +1,5 @@
 /* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
+ * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -21,7 +21,6 @@
 #define HAVE_HIDDEN
 #endif
 
-
 #ifdef HAVE_HIDDEN
 #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
 #else
@@ -38,10 +37,6 @@
 #  include <stdlib.h>
 #endif
 
-#ifdef Z_SOLO
-   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
-#endif
-
 #ifndef local
 #  define local static
 #endif
@@ -55,6 +50,17 @@ typedef unsigned short ush;
 typedef ush FAR ushf;
 typedef unsigned long  ulg;
 
+#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (ULONG_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned long
+#  elif (ULLONG_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned long long
+#  elif (UINT_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned
+#  endif
+#endif
+
 extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
 /* (size given to avoid silly warnings with Visual C++) */
 
@@ -184,10 +190,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
 #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
 #  if defined(_WIN32_WCE)
 #    define fdopen(fd,mode) NULL /* No fdopen() */
-#    ifndef _PTRDIFF_T_DEFINED
-       typedef int ptrdiff_t;
-#      define _PTRDIFF_T_DEFINED
-#    endif
 #  else
 #    define fdopen(fd,type)  _fdopen(fd,type)
 #  endif
diff --git a/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index c76bf0994e..205cafb947 100644
--- a/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -268,7 +268,7 @@ public class QtActivityDelegate
         }, 5);
     }
 
-    public void showSoftwareKeyboard(final int x, final int y, final int width, final int height, final int editorHeight, final int inputHints, final int enterKeyType)
+    public void showSoftwareKeyboard(final int x, final int y, final int width, final int height, final int inputHints, final int enterKeyType)
     {
         if (m_imm == null)
             return;
@@ -290,7 +290,7 @@ public class QtActivityDelegate
             if (softInputIsHidden)
                 return;
         } else {
-            if (editorHeight > visibleHeight)
+            if (height > visibleHeight)
                 m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
             else
                 m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
@@ -411,12 +411,12 @@ public class QtActivityDelegate
                                                     if (metrics.widthPixels > metrics.heightPixels) { // landscape
                                                         if (m_landscapeKeyboardHeight != r.bottom) {
                                                             m_landscapeKeyboardHeight = r.bottom;
-                                                            showSoftwareKeyboard(x, y, width, height, editorHeight, inputHints, enterKeyType);
+                                                            showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType);
                                                         }
                                                     } else {
                                                         if (m_portraitKeyboardHeight != r.bottom) {
                                                             m_portraitKeyboardHeight = r.bottom;
-                                                            showSoftwareKeyboard(x, y, width, height, editorHeight, inputHints, enterKeyType);
+                                                            showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType);
                                                         }
                                                     }
                                                 } else {
@@ -567,13 +567,6 @@ public class QtActivityDelegate
         }
     }
 
-    public void updateInputItemRectangle(final int x, final int y, final int w, final int h)
-    {
-        if (m_layout == null || m_editText == null || !m_keyboardIsVisible)
-            return;
-        m_layout.setLayoutParams(m_editText, new QtLayout.LayoutParams(w, h, x, y), true);
-    }
-
     public boolean loadApplication(Activity activity, ClassLoader classLoader, Bundle loaderParams)
     {
         /// check parameters integrity
diff --git a/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index c1684354a3..2f74750fcf 100644
--- a/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/qtbase/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -116,6 +116,7 @@ public class QtNative
     public static QtThread m_qtThread = new QtThread();
     private static HashMap<String, Uri> m_cachedUris = new HashMap<String, Uri>();
     private static ArrayList<String> m_knownDirs = new ArrayList<String>();
+    private static final String NoPermissionErrorMessage = "No permissions to open Uri";
 
     private static final Runnable runPendingCppRunnablesRunnable = new Runnable() {
         @Override
@@ -193,11 +194,10 @@ public class QtNative
                     return iterUri;
             }
 
-            // Android 6 and earlier could still manage to open the file so we can return the
-            // parsed uri here
-            if (Build.VERSION.SDK_INT < 24)
-                return parsedUri;
-            return null;
+            // if we only have transient permissions on uri all the above will fail,
+            // but we will be able to read the file anyway, so continue with uri here anyway
+            // and check for SecurityExceptions later
+            return parsedUri;
         } catch (SecurityException e) {
             e.printStackTrace();
             return null;
@@ -244,7 +244,7 @@ public class QtNative
         int error = -1;
 
         if (uri == null) {
-            Log.e(QtTAG, "openFdForContentUrl(): No permissions to open Uri");
+            Log.e(QtTAG, "openFdForContentUrl(): " + NoPermissionErrorMessage);
             return error;
         }
 
@@ -254,12 +254,13 @@ public class QtNative
             return fdDesc.detachFd();
         } catch (FileNotFoundException e) {
             e.printStackTrace();
-            return error;
         } catch (IllegalArgumentException e) {
             Log.e(QtTAG, "openFdForContentUrl(): Invalid Uri");
             e.printStackTrace();
-            return error;
+        } catch (SecurityException e) {
+            Log.e(QtTAG, NoPermissionErrorMessage);
         }
+        return error;
     }
 
     public static long getSize(Context context, String contentUrl)
@@ -270,7 +271,7 @@ public class QtNative
             uri = getUriWithValidPermission(context, contentUrl, "r");
 
         if (uri == null) {
-            Log.e(QtTAG, "getSize(): No permissions to open Uri");
+            Log.e(QtTAG, NoPermissionErrorMessage);
             return size;
         } else if (!m_cachedUris.containsKey(contentUrl)) {
             m_cachedUris.put(contentUrl, uri);
@@ -288,12 +289,13 @@ public class QtNative
         } catch (IllegalArgumentException e) {
             Log.e(QtTAG, "getSize(): Invalid Uri");
             e.printStackTrace();
-            return size;
         }  catch (UnsupportedOperationException e) {
             Log.e(QtTAG, "getSize(): Unsupported operation for given Uri");
             e.printStackTrace();
-            return size;
+        } catch (SecurityException e) {
+            Log.e(QtTAG, NoPermissionErrorMessage);
         }
+        return size;
     }
 
     public static boolean checkFileExists(Context context, String contentUrl)
@@ -303,7 +305,7 @@ public class QtNative
         if (uri == null)
             uri = getUriWithValidPermission(context, contentUrl, "r");
         if (uri == null) {
-            Log.e(QtTAG, "checkFileExists(): No permissions to open Uri");
+            Log.e(QtTAG, NoPermissionErrorMessage);
             return exists;
         } else {
             if (!m_cachedUris.containsKey(contentUrl))
@@ -321,12 +323,13 @@ public class QtNative
         } catch (IllegalArgumentException e) {
             Log.e(QtTAG, "checkFileExists(): Invalid Uri");
             e.printStackTrace();
-            return exists;
         } catch (UnsupportedOperationException e) {
             Log.e(QtTAG, "checkFileExists(): Unsupported operation for given Uri");
             e.printStackTrace();
-            return false;
+        } catch (SecurityException e) {
+            Log.e(QtTAG, NoPermissionErrorMessage);
         }
+        return exists;
     }
 
     public static boolean checkIfWritable(Context context, String contentUrl)
@@ -344,7 +347,7 @@ public class QtNative
             uri = getUriWithValidPermission(context, contentUrl, "r");
         }
         if (uri == null) {
-            Log.e(QtTAG, "isDir(): No permissions to open Uri");
+            Log.e(QtTAG, NoPermissionErrorMessage);
             return isDir;
         } else {
             if (!m_cachedUris.containsKey(contentUrl))
@@ -374,12 +377,13 @@ public class QtNative
         } catch (IllegalArgumentException e) {
             Log.e(QtTAG, "checkIfDir(): Invalid Uri");
             e.printStackTrace();
-            return false;
         } catch (UnsupportedOperationException e) {
             Log.e(QtTAG, "checkIfDir(): Unsupported operation for given Uri");
             e.printStackTrace();
-            return false;
+        } catch (SecurityException e) {
+            Log.e(QtTAG, NoPermissionErrorMessage);
         }
+        return false;
     }
     public static String[] listContentsFromTreeUri(Context context, String contentUrl)
     {
@@ -883,25 +887,10 @@ public class QtNative
         });
     }
 
-    private static void updateInputItemRectangle(final int x,
-                                                 final int y,
-                                                 final int w,
-                                                 final int h)
-    {
-        runAction(new Runnable() {
-            @Override
-            public void run() {
-                m_activityDelegate.updateInputItemRectangle(x, y, w, h);
-            }
-        });
-    }
-
-
     private static void showSoftwareKeyboard(final int x,
                                              final int y,
                                              final int width,
                                              final int height,
-                                             final int editorHeight,
                                              final int inputHints,
                                              final int enterKeyType)
     {
@@ -909,7 +898,7 @@ public class QtNative
             @Override
             public void run() {
                 if (m_activityDelegate != null)
-                    m_activityDelegate.showSoftwareKeyboard(x, y, width, height, editorHeight, inputHints, enterKeyType);
+                    m_activityDelegate.showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType);
             }
         });
     }
diff --git a/qtbase/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/qtbase/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
index 40db7941aa..487ba7e7d2 100644
--- a/qtbase/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
+++ b/qtbase/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
@@ -1079,11 +1079,6 @@ public class QtActivity extends Activity
         QtNative.activityDelegate().resetSoftwareKeyboard();
     }
 
-    public void updateInputItemRectangle(final int x, final int y, final int w, final int h)
-    {
-        QtNative.activityDelegate().updateInputItemRectangle(x, y, w, h);
-    }
-
     public boolean setKeyboardVisibility(boolean visibility, long timeStamp)
     {
         return QtNative.activityDelegate().setKeyboardVisibility(visibility, timeStamp);
@@ -1095,10 +1090,10 @@ public class QtActivity extends Activity
     }
 
     public void showSoftwareKeyboard(final int x, final int y, final int width,
-                                     final int height, final int editorHeight,
-                                     final int inputHints, final int enterKeyType)
+                                     final int height, final int inputHints,
+                                     final int enterKeyType)
     {
-        QtNative.activityDelegate().showSoftwareKeyboard(x, y, width, height, editorHeight, inputHints, enterKeyType);
+        QtNative.activityDelegate().showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType);
     }
 
     public boolean startApplication()
diff --git a/qtbase/src/concurrent/qtconcurrentreducekernel.h b/qtbase/src/concurrent/qtconcurrentreducekernel.h
index 8f9a938952..a98dedef2e 100644
--- a/qtbase/src/concurrent/qtconcurrentreducekernel.h
+++ b/qtbase/src/concurrent/qtconcurrentreducekernel.h
@@ -212,11 +212,13 @@ public:
 
     inline bool shouldThrottle()
     {
+        std::lock_guard<QMutex> locker(mutex);
         return (resultsMapSize > (ReduceQueueThrottleLimit * threadCount));
     }
 
     inline bool shouldStartThread()
     {
+        std::lock_guard<QMutex> locker(mutex);
         return (resultsMapSize <= (ReduceQueueStartLimit * threadCount));
     }
 };
diff --git a/qtbase/src/concurrent/qtconcurrentthreadengine.cpp b/qtbase/src/concurrent/qtconcurrentthreadengine.cpp
index ea6ce3ac42..7f91a2ba68 100644
--- a/qtbase/src/concurrent/qtconcurrentthreadengine.cpp
+++ b/qtbase/src/concurrent/qtconcurrentthreadengine.cpp
@@ -176,6 +176,39 @@ void ThreadEngineBase::startSingleThreaded()
     finish();
 }
 
+void ThreadEngineBase::startBlocking()
+{
+    start();
+    barrier.acquire();
+    startThreads();
+
+    bool throttled = false;
+#ifndef QT_NO_EXCEPTIONS
+    try {
+#endif
+        while (threadFunction() == ThrottleThread) {
+            if (threadThrottleExit()) {
+                throttled = true;
+                break;
+            }
+        }
+#ifndef QT_NO_EXCEPTIONS
+    } catch (QException &e) {
+        handleException(e);
+    } catch (...) {
+        handleException(QUnhandledException());
+    }
+#endif
+
+    if (throttled == false) {
+        barrier.release();
+    }
+
+    barrier.wait();
+    finish();
+    exceptionStore.throwPossibleException();
+}
+
 void ThreadEngineBase::startThread()
 {
     startThreadInternal();
diff --git a/qtbase/src/concurrent/qtconcurrentthreadengine.h b/qtbase/src/concurrent/qtconcurrentthreadengine.h
index 7c30cebdbc..a4c8548cc4 100644
--- a/qtbase/src/concurrent/qtconcurrentthreadengine.h
+++ b/qtbase/src/concurrent/qtconcurrentthreadengine.h
@@ -91,6 +91,7 @@ public:
     ThreadEngineBase();
     virtual ~ThreadEngineBase();
     void startSingleThreaded();
+    void startBlocking();
     void startThread();
     bool isCanceled();
     void waitForResume();
@@ -143,6 +144,15 @@ public:
         return result();
     }
 
+    // Runs the user algorithm using multiple threads.
+    // This function blocks until the algorithm is finished,
+    // and then returns the result.
+    T *startBlocking()
+    {
+        ThreadEngineBase::startBlocking();
+        return result();
+    }
+
     // Runs the user algorithm using multiple threads.
     // Does not block, returns a future.
     QFuture<T> startAsynchronously()
@@ -223,6 +233,13 @@ class ThreadEngineStarter : public ThreadEngineStarterBase<T>
 public:
     ThreadEngineStarter(TypedThreadEngine *eng)
         : Base(eng) { }
+
+    T startBlocking()
+    {
+        T t = *this->threadEngine->startBlocking();
+        delete this->threadEngine;
+        return t;
+    }
 };
 
 // Full template specialization where T is void.
@@ -232,6 +249,12 @@ class ThreadEngineStarter<void> : public ThreadEngineStarterBase<void>
 public:
     ThreadEngineStarter(ThreadEngine<void> *_threadEngine)
         : ThreadEngineStarterBase<void>(_threadEngine) {}
+
+    void startBlocking()
+    {
+        this->threadEngine->startBlocking();
+        delete this->threadEngine;
+    }
 };
 
 //! [qtconcurrentthreadengine-1]
diff --git a/qtbase/src/corelib/animation/qvariantanimation.cpp b/qtbase/src/corelib/animation/qvariantanimation.cpp
index 98b02f0202..eac1524107 100644
--- a/qtbase/src/corelib/animation/qvariantanimation.cpp
+++ b/qtbase/src/corelib/animation/qvariantanimation.cpp
@@ -276,7 +276,9 @@ void QVariantAnimationPrivate::setCurrentValueForProgress(const qreal progress)
 
     const qreal startProgress = currentInterval.start.first;
     const qreal endProgress = currentInterval.end.first;
-    const qreal localProgress = (progress - startProgress) / (endProgress - startProgress);
+    const qreal localProgress =
+            qIsNull(progress - startProgress) ? 0.0 // avoid 0/0 below
+            /* else */                        : (progress - startProgress) / (endProgress - startProgress);
 
     QVariant ret = q->interpolated(currentInterval.start.second,
                                    currentInterval.end.second,
diff --git a/qtbase/src/corelib/global/qendian.h b/qtbase/src/corelib/global/qendian.h
index a97776c761..339f53abb6 100644
--- a/qtbase/src/corelib/global/qendian.h
+++ b/qtbase/src/corelib/global/qendian.h
@@ -1,7 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2021 The Qt Company Ltd.
+** Copyright (C) 2021 Intel Corporation.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/qtbase/src/corelib/global/qnamespace.h b/qtbase/src/corelib/global/qnamespace.h
index ad4150b317..bf19b1627b 100644
--- a/qtbase/src/corelib/global/qnamespace.h
+++ b/qtbase/src/corelib/global/qnamespace.h
@@ -1864,7 +1864,7 @@ public:
     QT_Q_ENUM(TimerType)
     QT_Q_ENUM(ScrollPhase)
     QT_Q_ENUM(MouseEventSource)
-    QT_Q_FLAG(MouseEventFlag)
+    QT_Q_FLAG(MouseEventFlags)
     QT_Q_ENUM(ChecksumType)
     QT_Q_ENUM(HighDpiScaleFactorRoundingPolicy)
     QT_Q_ENUM(TabFocusBehavior)
diff --git a/qtbase/src/corelib/global/qrandom.cpp b/qtbase/src/corelib/global/qrandom.cpp
index 10672c1f92..25f87c7e6a 100644
--- a/qtbase/src/corelib/global/qrandom.cpp
+++ b/qtbase/src/corelib/global/qrandom.cpp
@@ -383,7 +383,6 @@ struct QRandomGenerator::SystemAndGlobalGenerators
 
         constexpr SystemAndGlobalGenerators g = {};
         Q_UNUSED(g);
-        Q_STATIC_ASSERT(std::is_literal_type<SystemAndGlobalGenerators>::value);
 #endif
     }
 
diff --git a/qtbase/src/corelib/io/qabstractfileengine.cpp b/qtbase/src/corelib/io/qabstractfileengine.cpp
index 070139b608..ef6e91d826 100644
--- a/qtbase/src/corelib/io/qabstractfileengine.cpp
+++ b/qtbase/src/corelib/io/qabstractfileengine.cpp
@@ -101,7 +101,7 @@ QT_BEGIN_NAMESPACE
     \sa QAbstractFileEngine, QAbstractFileEngine::create()
 */
 
-static bool qt_file_engine_handlers_in_use = false;
+static QBasicAtomicInt qt_file_engine_handlers_in_use = Q_BASIC_ATOMIC_INITIALIZER(false);
 
 /*
     All application-wide handlers are stored in this list. The mutex must be
@@ -132,7 +132,7 @@ Q_GLOBAL_STATIC(QAbstractFileEngineHandlerList, fileEngineHandlers)
 QAbstractFileEngineHandler::QAbstractFileEngineHandler()
 {
     QWriteLocker locker(fileEngineHandlerMutex());
-    qt_file_engine_handlers_in_use = true;
+    qt_file_engine_handlers_in_use.storeRelaxed(true);
     fileEngineHandlers()->prepend(this);
 }
 
@@ -148,7 +148,7 @@ QAbstractFileEngineHandler::~QAbstractFileEngineHandler()
         QAbstractFileEngineHandlerList *handlers = fileEngineHandlers();
         handlers->removeOne(this);
         if (handlers->isEmpty())
-            qt_file_engine_handlers_in_use = false;
+            qt_file_engine_handlers_in_use.storeRelaxed(false);
     }
 }
 
@@ -161,7 +161,7 @@ QAbstractFileEngine *qt_custom_file_engine_handler_create(const QString &path)
 {
     QAbstractFileEngine *engine = nullptr;
 
-    if (qt_file_engine_handlers_in_use) {
+    if (qt_file_engine_handlers_in_use.loadRelaxed()) {
         QReadLocker locker(fileEngineHandlerMutex());
 
         // check for registered handlers that can load the file
diff --git a/qtbase/src/corelib/io/qbuffer.cpp b/qtbase/src/corelib/io/qbuffer.cpp
index 595fcd2724..032c0ddd4b 100644
--- a/qtbase/src/corelib/io/qbuffer.cpp
+++ b/qtbase/src/corelib/io/qbuffer.cpp
@@ -41,6 +41,8 @@
 #include <QtCore/qmetaobject.h>
 #include "private/qiodevice_p.h"
 
+#include <limits>
+
 QT_BEGIN_NAMESPACE
 
 /** QBufferPrivate **/
@@ -366,7 +368,9 @@ qint64 QBuffer::size() const
 bool QBuffer::seek(qint64 pos)
 {
     Q_D(QBuffer);
-    if (pos > d->buf->size() && isWritable()) {
+    const auto oldBufSize = d->buf->size();
+    constexpr qint64 MaxSeekPos = (std::numeric_limits<decltype(oldBufSize)>::max)();
+    if (pos <= MaxSeekPos && pos > oldBufSize && isWritable()) {
         if (seek(d->buf->size())) {
             const qint64 gapSize = pos - d->buf->size();
             if (write(QByteArray(gapSize, 0)) != gapSize) {
@@ -377,7 +381,7 @@ bool QBuffer::seek(qint64 pos)
             return false;
         }
     } else if (pos > d->buf->size() || pos < 0) {
-        qWarning("QBuffer::seek: Invalid pos: %d", int(pos));
+        qWarning("QBuffer::seek: Invalid pos: %lld", pos);
         return false;
     }
     return QIODevice::seek(pos);
diff --git a/qtbase/src/corelib/io/qfilesystemengine_win.cpp b/qtbase/src/corelib/io/qfilesystemengine_win.cpp
index 81d3a71986..c86ed1f9b0 100644
--- a/qtbase/src/corelib/io/qfilesystemengine_win.cpp
+++ b/qtbase/src/corelib/io/qfilesystemengine_win.cpp
@@ -664,14 +664,14 @@ QFileSystemEntry QFileSystemEngine::absoluteName(const QFileSystemEntry &entry)
     return QFileSystemEntry(ret, QFileSystemEntry::FromInternalPath());
 }
 
-#if defined(Q_CC_MINGW) && WINVER < 0x0602 //  Windows 8 onwards
+#if defined(Q_CC_MINGW) && WINVER < 0x0602 && _WIN32_WINNT < _WIN32_WINNT_WIN8 //  Windows 8 onwards
 
 typedef struct _FILE_ID_INFO {
     ULONGLONG VolumeSerialNumber;
     FILE_ID_128 FileId;
 } FILE_ID_INFO, *PFILE_ID_INFO;
 
-#endif // if defined (Q_CC_MINGW) && WINVER < 0x0602
+#endif // if defined(Q_CC_MINGW) && WINVER < 0x0602 && _WIN32_WINNT < _WIN32_WINNT_WIN8
 
 // File ID for Windows up to version 7 and FAT32 drives
 static inline QByteArray fileId(HANDLE handle)
diff --git a/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp b/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp
index 94d9d06bcb..27e0b13b0b 100644
--- a/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp
+++ b/qtbase/src/corelib/io/qfilesystemwatcher_inotify.cpp
@@ -366,7 +366,9 @@ void QInotifyFileSystemWatcherEngine::readFromInotify()
     // qDebug("QInotifyFileSystemWatcherEngine::readFromInotify");
 
     int buffSize = 0;
-    ioctl(inotifyFd, FIONREAD, (char *) &buffSize);
+    if (ioctl(inotifyFd, FIONREAD, (char *) &buffSize) == -1 || buffSize == 0)
+        return;
+
     QVarLengthArray<char, 4096> buffer(buffSize);
     buffSize = read(inotifyFd, buffer.data(), buffSize);
     char *at = buffer.data();
diff --git a/qtbase/src/corelib/io/qlockfile_win.cpp b/qtbase/src/corelib/io/qlockfile_win.cpp
index 277f8d4230..38ecef5550 100644
--- a/qtbase/src/corelib/io/qlockfile_win.cpp
+++ b/qtbase/src/corelib/io/qlockfile_win.cpp
@@ -48,6 +48,8 @@
 #include "QtCore/qdebug.h"
 #include "QtCore/qthread.h"
 
+#include "private/qsystemlibrary_p.h"
+
 QT_BEGIN_NAMESPACE
 
 static inline bool fileExists(const wchar_t *fileName)
@@ -150,7 +152,7 @@ QString QLockFilePrivate::processNameByPid(qint64 pid)
 #if !defined(Q_OS_WINRT)
     typedef DWORD (WINAPI *GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD);
 
-    HMODULE hPsapi = LoadLibraryA("psapi");
+    HMODULE hPsapi = QSystemLibrary::load(L"psapi");
     if (!hPsapi)
         return QString();
     GetModuleFileNameExFunc qGetModuleFileNameEx = reinterpret_cast<GetModuleFileNameExFunc>(
diff --git a/qtbase/src/corelib/io/qprocess_unix.cpp b/qtbase/src/corelib/io/qprocess_unix.cpp
index 50390e57f5..15c8f30745 100644
--- a/qtbase/src/corelib/io/qprocess_unix.cpp
+++ b/qtbase/src/corelib/io/qprocess_unix.cpp
@@ -1,7 +1,7 @@
 /****************************************************************************
 **
 ** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2022 Intel Corporation.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtCore module of the Qt Toolkit.
@@ -422,14 +422,15 @@ void QProcessPrivate::startProcess()
     // Add the program name to the argument list.
     argv[0] = nullptr;
     if (!program.contains(QLatin1Char('/'))) {
+        // findExecutable() returns its argument if it's an absolute path,
+        // otherwise it searches $PATH; returns empty if not found (we handle
+        // that case much later)
         const QString &exeFilePath = QStandardPaths::findExecutable(program);
-        if (!exeFilePath.isEmpty()) {
-            const QByteArray &tmp = QFile::encodeName(exeFilePath);
-            argv[0] = ::strdup(tmp.constData());
-        }
-    }
-    if (!argv[0])
+        const QByteArray &tmp = QFile::encodeName(exeFilePath);
+        argv[0] = ::strdup(tmp.constData());
+    } else {
         argv[0] = ::strdup(encodedProgramName.constData());
+    }
 
     // Add every argument to the list
     for (int i = 0; i < arguments.count(); ++i)
@@ -983,15 +984,16 @@ bool QProcessPrivate::startDetached(qint64 *pid)
                 envp = _q_dupEnvironment(environment.d.constData()->vars, &envc);
             }
 
-            QByteArray tmp;
             if (!program.contains(QLatin1Char('/'))) {
+                // findExecutable() returns its argument if it's an absolute path,
+                // otherwise it searches $PATH; returns empty if not found (we handle
+                // that case much later)
                 const QString &exeFilePath = QStandardPaths::findExecutable(program);
-                if (!exeFilePath.isEmpty())
-                    tmp = QFile::encodeName(exeFilePath);
+                const QByteArray &tmp = QFile::encodeName(exeFilePath);
+                argv[0] = ::strdup(tmp.constData());
+            } else {
+                argv[0] = ::strdup(QFile::encodeName(program));
             }
-            if (tmp.isEmpty())
-                tmp = QFile::encodeName(program);
-            argv[0] = tmp.data();
 
             if (envp)
                 qt_safe_execve(argv[0], argv, envp);
diff --git a/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp b/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp
index 3a79c502af..997a634e76 100644
--- a/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp
+++ b/qtbase/src/corelib/itemmodels/qabstractitemmodel.cpp
@@ -3196,9 +3196,8 @@ bool QAbstractItemModel::beginMoveColumns(const QModelIndex &sourceParent, int s
     destinationChange.needsAdjust = destinationParent.isValid() && destinationParent.row() >= sourceLast && destinationParent.parent() == sourceParent;
     d->changes.push(destinationChange);
 
-    d->itemsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, Qt::Horizontal);
-
     emit columnsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, QPrivateSignal());
+    d->itemsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, Qt::Horizontal);
     return true;
 }
 
@@ -3231,7 +3230,6 @@ void QAbstractItemModel::endMoveColumns()
       adjustedSource = createIndex(adjustedSource.row(), adjustedSource.column() + numMoved, adjustedSource.internalPointer());
 
     d->itemsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first, Qt::Horizontal);
-
     emit columnsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first, QPrivateSignal());
 }
 
diff --git a/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 1abdafcdbe..c5e287ee84 100644
--- a/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -307,6 +307,8 @@ public:
 
     QHash<QModelIndex, Mapping *>::const_iterator create_mapping(
         const QModelIndex &source_parent) const;
+    QHash<QModelIndex, Mapping *>::const_iterator create_mapping_recursive(
+            const QModelIndex &source_parent) const;
     QModelIndex proxy_to_source(const QModelIndex &proxyIndex) const;
     QModelIndex source_to_proxy(const QModelIndex &sourceIndex) const;
     bool can_create_mapping(const QModelIndex &source_parent) const;
@@ -533,6 +535,29 @@ IndexMap::const_iterator QSortFilterProxyModelPrivate::create_mapping(
     return it;
 }
 
+// Go up the tree, creating mappings, unless of course the parent is filtered out
+IndexMap::const_iterator QSortFilterProxyModelPrivate::create_mapping_recursive(const QModelIndex &source_parent) const
+{
+    if (source_parent.isValid()) {
+        const QModelIndex source_grand_parent = source_parent.parent();
+        IndexMap::const_iterator it = source_index_mapping.constFind(source_grand_parent);
+        IndexMap::const_iterator end = source_index_mapping.constEnd();
+        if (it == end) {
+            it = create_mapping_recursive(source_grand_parent);
+            end = source_index_mapping.constEnd();
+            if (it == end)
+                return end;
+        }
+        Mapping *gm = it.value();
+        if (gm->proxy_rows.at(source_parent.row()) == -1 ||
+                gm->proxy_columns.at(source_parent.column()) == -1) {
+            // Can't do, parent is filtered
+            return end;
+        }
+    }
+    return create_mapping(source_parent);
+}
+
 QModelIndex QSortFilterProxyModelPrivate::proxy_to_source(const QModelIndex &proxy_index) const
 {
     if (!proxy_index.isValid())
@@ -751,8 +776,10 @@ void QSortFilterProxyModelPrivate::remove_source_items(
 {
     Q_Q(QSortFilterProxyModel);
     QModelIndex proxy_parent = q->mapFromSource(source_parent);
-    if (!proxy_parent.isValid() && source_parent.isValid())
+    if (!proxy_parent.isValid() && source_parent.isValid()) {
+        proxy_to_source.clear();
         return; // nothing to do (already removed)
+    }
 
     const auto proxy_intervals = proxy_intervals_for_source_items(
         source_to_proxy, source_items);
@@ -912,8 +939,9 @@ void QSortFilterProxyModelPrivate::insert_source_items(
                 q->beginInsertColumns(proxy_parent, proxy_start, proxy_end);
         }
 
-        for (int i = 0; i < source_items.size(); ++i)
-            proxy_to_source.insert(proxy_start + i, source_items.at(i));
+        // TODO: use the range QList::insert() overload once it is implemented (QTBUG-58633).
+        proxy_to_source.insert(proxy_start, source_items.size(), 0);
+        std::copy(source_items.cbegin(), source_items.cend(), proxy_to_source.begin() + proxy_start);
 
         build_source_to_proxy_mapping(proxy_to_source, source_to_proxy);
 
@@ -1404,11 +1432,20 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc
         const QModelIndex &source_bottom_right = data_changed.bottomRight;
         const QModelIndex source_parent = source_top_left.parent();
 
+        bool change_in_unmapped_parent = false;
         IndexMap::const_iterator it = source_index_mapping.constFind(source_parent);
         if (it == source_index_mapping.constEnd()) {
-            // Don't care, since we don't have mapping for this index
-            continue;
+            // We don't have mapping for this index, so we cannot know how things
+            // changed (in case the change affects filtering) in order to forward
+            // the change correctly.
+            // But we can at least forward the signal "as is", if the row isn't
+            // filtered out, this is better than nothing.
+            it = create_mapping_recursive(source_parent);
+            if (it == source_index_mapping.constEnd())
+                continue;
+            change_in_unmapped_parent = true;
         }
+
         Mapping *m = it.value();
 
         // Figure out how the source changes affect us
@@ -1418,7 +1455,7 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc
         QVector<int> source_rows_resort;
         int end = qMin(source_bottom_right.row(), m->proxy_rows.count() - 1);
         for (int source_row = source_top_left.row(); source_row <= end; ++source_row) {
-            if (dynamic_sortfilter) {
+            if (dynamic_sortfilter && !change_in_unmapped_parent) {
                 if (m->proxy_rows.at(source_row) != -1) {
                     if (!filterAcceptsRowInternal(source_row, source_parent)) {
                         // This source row no longer satisfies the filter, so it must be removed
@@ -1568,7 +1605,6 @@ void QSortFilterProxyModelPrivate::_q_sourceReset()
     _q_clearMapping();
     // All internal structures are deleted in clear()
     q->endResetModel();
-    create_mapping(QModelIndex());
     update_source_sort_column();
     if (dynamic_sortfilter && update_source_sort_column())
         sort();
@@ -1634,8 +1670,8 @@ void QSortFilterProxyModelPrivate::_q_sourceRowsAboutToBeInserted(
 
     const bool toplevel = !source_parent.isValid();
     const bool recursive_accepted = filter_recursive && !toplevel && filterAcceptsRowInternal(source_parent.row(), source_parent.parent());
-    //Force the creation of a mapping now, even if its empty.
-    //We need it because the proxy can be acessed at the moment it emits rowsAboutToBeInserted in insert_source_items
+    //Force the creation of a mapping now, even if it's empty.
+    //We need it because the proxy can be accessed at the moment it emits rowsAboutToBeInserted in insert_source_items
     if (!filter_recursive || toplevel || recursive_accepted) {
         if (can_create_mapping(source_parent))
             create_mapping(source_parent);
@@ -1754,8 +1790,8 @@ void QSortFilterProxyModelPrivate::_q_sourceColumnsAboutToBeInserted(
 {
     Q_UNUSED(start);
     Q_UNUSED(end);
-    //Force the creation of a mapping now, even if its empty.
-    //We need it because the proxy can be acessed at the moment it emits columnsAboutToBeInserted in insert_source_items
+    //Force the creation of a mapping now, even if it's empty.
+    //We need it because the proxy can be accessed at the moment it emits columnsAboutToBeInserted in insert_source_items
     if (can_create_mapping(source_parent))
         create_mapping(source_parent);
 }
@@ -2149,7 +2185,6 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
     connect(d->model, SIGNAL(modelReset()), this, SLOT(_q_sourceReset()));
 
     endResetModel();
-    d->create_mapping(QModelIndex());
     if (d->update_source_sort_column() && d->dynamic_sortfilter)
         d->sort();
 }
@@ -3089,8 +3124,9 @@ bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &
 
     if (d->filter_data.isEmpty())
         return true;
+
+    int column_count = d->model->columnCount(source_parent);
     if (d->filter_column == -1) {
-        int column_count = d->model->columnCount(source_parent);
         for (int column = 0; column < column_count; ++column) {
             QModelIndex source_index = d->model->index(source_row, column, source_parent);
             QString key = d->model->data(source_index, d->filter_role).toString();
@@ -3099,9 +3135,10 @@ bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &
         }
         return false;
     }
-    QModelIndex source_index = d->model->index(source_row, d->filter_column, source_parent);
-    if (!source_index.isValid()) // the column may not exist
+
+    if (d->filter_column >= column_count) // the column may not exist
         return true;
+    QModelIndex source_index = d->model->index(source_row, d->filter_column, source_parent);
     QString key = d->model->data(source_index, d->filter_role).toString();
     return d->filter_data.hasMatch(key);
 }
diff --git a/qtbase/src/corelib/kernel/qcoreapplication.cpp b/qtbase/src/corelib/kernel/qcoreapplication.cpp
index ca2864df83..132b2eae52 100644
--- a/qtbase/src/corelib/kernel/qcoreapplication.cpp
+++ b/qtbase/src/corelib/kernel/qcoreapplication.cpp
@@ -1157,7 +1157,7 @@ static bool doNotify(QObject *receiver, QEvent *event)
 bool QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject *receiver, QEvent *event)
 {
     // We can't access the application event filters outside of the main thread (race conditions)
-    Q_ASSERT(receiver->d_func()->threadData.loadRelaxed()->thread.loadAcquire() == mainThread());
+    Q_ASSERT(receiver->d_func()->threadData.loadAcquire()->thread.loadRelaxed() == mainThread());
 
     if (extraData) {
         // application event filters are only called for objects in the GUI thread
diff --git a/qtbase/src/corelib/kernel/qobject.cpp b/qtbase/src/corelib/kernel/qobject.cpp
index c294868c62..af1b0457fd 100644
--- a/qtbase/src/corelib/kernel/qobject.cpp
+++ b/qtbase/src/corelib/kernel/qobject.cpp
@@ -1010,7 +1010,7 @@ QObject::~QObject()
         emit destroyed(this);
     }
 
-    if (d->declarativeData) {
+    if (!d->isDeletingChildren && d->declarativeData) {
         if (static_cast<QAbstractDeclarativeDataImpl*>(d->declarativeData)->ownedByQml1) {
             if (QAbstractDeclarativeData::destroyed_qml1)
                 QAbstractDeclarativeData::destroyed_qml1(d->declarativeData, this);
@@ -1580,7 +1580,7 @@ void QObject::moveToThread(QThread *targetThread)
 
     QThreadData *currentData = QThreadData::current();
     QThreadData *targetData = targetThread ? QThreadData::get2(targetThread) : nullptr;
-    QThreadData *thisThreadData = d->threadData.loadRelaxed();
+    QThreadData *thisThreadData = d->threadData.loadAcquire();
     if (!thisThreadData->thread.loadAcquire() && currentData == targetData) {
         // one exception to the rule: we allow moving objects with no thread affinity to the current thread
         currentData = d->threadData;
@@ -2616,7 +2616,7 @@ int QObject::receivers(const char *signal) const
         if (!d->isSignalConnected(signal_index))
             return receivers;
 
-        if (d->declarativeData && QAbstractDeclarativeData::receivers) {
+        if (!d->isDeletingChildren && d->declarativeData && QAbstractDeclarativeData::receivers) {
             receivers += QAbstractDeclarativeData::receivers(d->declarativeData, this,
                                                              signal_index);
         }
diff --git a/qtbase/src/corelib/kernel/qobject_p.h b/qtbase/src/corelib/kernel/qobject_p.h
index 0b827a52ca..13ffb88999 100644
--- a/qtbase/src/corelib/kernel/qobject_p.h
+++ b/qtbase/src/corelib/kernel/qobject_p.h
@@ -444,7 +444,7 @@ inline void QObjectPrivate::checkForIncompatibleLibraryVersion(int version) cons
 
 inline bool QObjectPrivate::isDeclarativeSignalConnected(uint signal_index) const
 {
-    return declarativeData && QAbstractDeclarativeData::isSignalConnected
+    return !isDeletingChildren && declarativeData && QAbstractDeclarativeData::isSignalConnected
             && QAbstractDeclarativeData::isSignalConnected(declarativeData, q_func(), signal_index);
 }
 
diff --git a/qtbase/src/corelib/kernel/qtranslator.cpp b/qtbase/src/corelib/kernel/qtranslator.cpp
index 2812ffb7ea..bc0177c5ec 100644
--- a/qtbase/src/corelib/kernel/qtranslator.cpp
+++ b/qtbase/src/corelib/kernel/qtranslator.cpp
@@ -902,7 +902,7 @@ static QString getMessage(const uchar *m, const uchar *end, const char *context,
             goto end;
         case Tag_Translation: {
             int len = read32(m);
-            if (len % 1)
+            if (len & 1)
                 return QString();
             m += 4;
             if (!numerus--) {
diff --git a/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml b/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml
index d384ffb2d5..e73929c9bb 100644
--- a/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml
+++ b/qtbase/src/corelib/mimetypes/mime/packages/freedesktop.org.xml
@@ -1,183 +1,177 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE mime-info [
-  <!ELEMENT mime-info (mime-type)+>
-  <!ATTLIST mime-info xmlns CDATA #FIXED "http://www.freedesktop.org/standards/shared-mime-info">
-
-  <!ELEMENT mime-type (comment+, (acronym,expanded-acronym)? , (icon? | generic-icon? | glob | magic | treemagic | root-XML | alias | sub-class-of)*)>
-  <!ATTLIST mime-type type CDATA #REQUIRED>
-
-  <!-- a comment describing a document with the respective MIME type. Example: "WMV video" -->
-  <!ELEMENT comment (#PCDATA)>
-  <!ATTLIST comment xml:lang CDATA #IMPLIED>
-
-  <!-- a comment describing the respective unexpanded MIME type acronym. Example: "WMV" -->
-  <!ELEMENT acronym (#PCDATA)>
-  <!ATTLIST acronym xml:lang CDATA #IMPLIED>
-
-  <!-- a comment describing the respective expanded MIME type acronym. Example: "Windows Media Video" -->
-  <!ELEMENT expanded-acronym (#PCDATA)>
-  <!ATTLIST expanded-acronym xml:lang CDATA #IMPLIED>
-
-  <!ELEMENT icon EMPTY>
-  <!ATTLIST icon name CDATA #REQUIRED>
-
-  <!-- a generic icon name as per the Icon Naming Specification, only required if computing
-  it from the mime-type would not work, See "generic-icon" in the Shared Mime Specification -->
-  <!ELEMENT generic-icon EMPTY>
-  <!ATTLIST generic-icon name (application-x-executable|audio-x-generic|folder|font-x-generic|image-x-generic|package-x-generic|text-html|text-x-generic|text-x-generic-template|text-x-script|video-x-generic|x-office-address-book|x-office-calendar|x-office-document|x-office-presentation|x-office-spreadsheet) #REQUIRED>
-
-  <!ELEMENT glob EMPTY>
-  <!ATTLIST glob pattern CDATA #REQUIRED>
-  <!ATTLIST glob weight CDATA "50">
-  <!ATTLIST glob case-sensitive CDATA #IMPLIED>
-
-  <!ELEMENT magic (match)+>
-  <!ATTLIST magic priority CDATA "50">
-
-  <!ELEMENT match (match)*>
-  <!ATTLIST match offset CDATA #REQUIRED>
-  <!ATTLIST match type (string|big16|big32|little16|little32|host16|host32|byte) #REQUIRED>
-  <!ATTLIST match value CDATA #REQUIRED>
-  <!ATTLIST match mask CDATA #IMPLIED>
-
-  <!ELEMENT treemagic (treematch)+>
-  <!ATTLIST treemagic priority CDATA "50">
+<!ELEMENT mime-info (mime-type)+>
+<!ATTLIST mime-info xmlns CDATA #FIXED "http://www.freedesktop.org/standards/shared-mime-info">
+<!ELEMENT mime-type (comment+ , (acronym , expanded-acronym)? , (icon | generic-icon | glob | magic | treemagic | root-XML | alias | sub-class-of)*)>
+<!ATTLIST mime-type type CDATA #REQUIRED>
+<!-- a comment describing a document with the respective MIME type. Example: "WMV video" --><!ELEMENT comment (#PCDATA)>
+<!ATTLIST comment xml:lang CDATA #IMPLIED>
+<!-- a comment describing the respective unexpanded MIME type acronym. Example: "WMV" --><!ELEMENT acronym (#PCDATA)>
+<!-- a comment describing the respective expanded MIME type acronym. Example: "Windows Media Video" --><!ELEMENT expanded-acronym (#PCDATA)>
+<!ELEMENT icon EMPTY>
+<!ATTLIST icon name CDATA #REQUIRED>
+<!-- a generic icon name as per the Icon Naming Specification, only required if computing
+  it from the mime-type would not work, See "generic-icon" in the Shared Mime Specification --><!ELEMENT generic-icon EMPTY>
+<!ATTLIST generic-icon name (application-x-executable | audio-x-generic | folder | font-x-generic | image-x-generic | package-x-generic | text-html | text-x-generic | text-x-generic-template | text-x-script | video-x-generic | x-office-address-book | x-office-calendar | x-office-document | x-office-presentation | x-office-spreadsheet) #REQUIRED>
+<!ELEMENT glob EMPTY>
+<!ATTLIST glob pattern CDATA #REQUIRED>
+<!ATTLIST glob weight CDATA "50">
+<!ATTLIST glob case-sensitive CDATA #IMPLIED>
+<!ELEMENT magic (match)+>
+<!ATTLIST magic priority CDATA "50">
+<!ELEMENT match (match)*>
+<!ATTLIST match offset CDATA #REQUIRED>
+<!ATTLIST match type (string | big16 | big32 | little16 | little32 | host16 | host32 | byte) #REQUIRED>
+<!ATTLIST match value CDATA #REQUIRED>
+<!ATTLIST match mask CDATA #IMPLIED>
+<!ELEMENT treemagic (treematch)+>
+<!ATTLIST treemagic priority CDATA "50">
+<!ELEMENT treematch (treematch)*>
+<!ATTLIST treematch path CDATA #REQUIRED>
+<!ATTLIST treematch type (file | directory | link) #IMPLIED>
+<!ATTLIST treematch match-case (true | false) #IMPLIED>
+<!ATTLIST treematch executable (true | false) #IMPLIED>
+<!ATTLIST treematch non-empty (true | false) #IMPLIED>
+<!ATTLIST treematch mimetype CDATA #IMPLIED>
+<!ELEMENT root-XML EMPTY>
+<!ATTLIST root-XML namespaceURI CDATA #REQUIRED>
+<!ATTLIST root-XML localName CDATA #REQUIRED>
+<!ELEMENT alias EMPTY>
+<!ATTLIST alias type CDATA #REQUIRED>
+<!ELEMENT sub-class-of EMPTY>
+<!ATTLIST sub-class-of type CDATA #REQUIRED>
+]>
+<!--
+The freedesktop.org shared MIME database (this file) was created by merging
+several existing MIME databases (all released under the GPL).
 
-  <!ELEMENT treematch (treematch)*>
-  <!ATTLIST treematch path CDATA #REQUIRED>
-  <!ATTLIST treematch type (file|directory|link) #IMPLIED>
-  <!ATTLIST treematch match-case (true|false) #IMPLIED>
-  <!ATTLIST treematch executable (true|false) #IMPLIED>
-  <!ATTLIST treematch non-empty (true|false) #IMPLIED>
-  <!ATTLIST treematch mimetype CDATA #IMPLIED>
+It comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. You may
+redistribute copies of update-mime-database under the terms of the GNU General
+Public License. For more information about these matters, see the file named
+COPYING.
 
-  <!ELEMENT root-XML EMPTY>
-  <!ATTLIST root-XML namespaceURI CDATA #REQUIRED>
-  <!ATTLIST root-XML localName CDATA #REQUIRED>
+The latest version is available from:
 
-  <!ELEMENT alias EMPTY>
-  <!ATTLIST alias type CDATA #REQUIRED>
+	http://www.freedesktop.org/wiki/Software/shared-mime-info/
 
-  <!ELEMENT sub-class-of EMPTY>
-  <!ATTLIST sub-class-of type CDATA #REQUIRED>
-]>
+To extend this database, users and applications should create additional
+XML files in the 'packages' directory and run the update-mime-database
+command to generate the output files.
+-->
 <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
   <mime-type type="application/x-atari-2600-rom">
-    <comment>Atari 2600</comment>
-    <comment xml:lang="ast">Atari 2600</comment>
-    <comment xml:lang="ca">Atari 2600</comment>
-    <comment xml:lang="cs">Atari 2600</comment>
-    <comment xml:lang="da">Atari 2600</comment>
-    <comment xml:lang="de">Atari 2600</comment>
-    <comment xml:lang="en_GB">Atari 2600</comment>
-    <comment xml:lang="es">Atari 2600</comment>
-    <comment xml:lang="eu">Atari 2600</comment>
-    <comment xml:lang="fi">Atari 2600</comment>
-    <comment xml:lang="fr">Atari 2600</comment>
-    <comment xml:lang="ga">Atari 2600</comment>
-    <comment xml:lang="he">אטארי 2600</comment>
-    <comment xml:lang="hr">Atari 2600</comment>
-    <comment xml:lang="hu">Atari 2600</comment>
-    <comment xml:lang="id">Atari 2600</comment>
-    <comment xml:lang="it">Atari 2600</comment>
-    <comment xml:lang="kk">Atari 2600</comment>
-    <comment xml:lang="ko">Atari 2600</comment>
-    <comment xml:lang="oc">Atari 2600</comment>
-    <comment xml:lang="pl">Atari 2600</comment>
-    <comment xml:lang="pt_BR">Atari 2600</comment>
-    <comment xml:lang="ru">Atari 2600</comment>
-    <comment xml:lang="sk">Atari 2600</comment>
-    <comment xml:lang="sr">Атари 2600</comment>
-    <comment xml:lang="sv">Atari 2600</comment>
-    <comment xml:lang="tr">Atari 2600</comment>
-    <comment xml:lang="uk">Atari 2600</comment>
-    <comment xml:lang="zh_CN">雅达利 2600</comment>
-    <comment xml:lang="zh_TW">Atari 2600</comment>
+    <comment>Atari 2600 ROM</comment>
+    <comment xml:lang="bg">ROM — Atari 2600</comment>
+    <comment xml:lang="ca">ROM d'Atari 2600</comment>
+    <comment xml:lang="da">Atari 2600-ROM</comment>
+    <comment xml:lang="de">Atari 2600 ROM</comment>
+    <comment xml:lang="en-GB">Atari 2600 ROM</comment>
+    <comment xml:lang="es">ROM de Atari 2600</comment>
+    <comment xml:lang="eu">Atari 2600 ROMa</comment>
+    <comment xml:lang="fi">Atari 2600 ROM</comment>
+    <comment xml:lang="fr">ROM Atari 2600</comment>
+    <comment xml:lang="fur">ROM Atari 2600</comment>
+    <comment xml:lang="hr">Atari 2600 ROM</comment>
+    <comment xml:lang="hu">Atari 2600 ROM</comment>
+    <comment xml:lang="id">Atari 2600 ROM</comment>
+    <comment xml:lang="it">ROM Atari 2600</comment>
+    <comment xml:lang="kk">Atari 2600 ROM</comment>
+    <comment xml:lang="ko">아타리 2600 롬</comment>
+    <comment xml:lang="pl">Plik ROM konsoli Atari 2600</comment>
+    <comment xml:lang="pt">ROM Atari 2600</comment>
+    <comment xml:lang="pt-BR">ROM do Atari 2600</comment>
+    <comment xml:lang="sl">Atari 2600 ROM</comment>
+    <comment xml:lang="sv">Atari 2600-rom</comment>
+    <comment xml:lang="tr">Atari 2600 ROM</comment>
+    <comment xml:lang="uk">Atari 2600 ROM</comment>
+    <comment xml:lang="zh-CN">雅达利 2600 ROM</comment>
+    <comment xml:lang="zh-TW">雅達利 2600 ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.a26"/>
   </mime-type>
   <mime-type type="application/x-atari-7800-rom">
-    <comment>Atari 7800</comment>
-    <comment xml:lang="ast">Atari 7800</comment>
-    <comment xml:lang="ca">Atari 7800</comment>
-    <comment xml:lang="cs">Atari 7800</comment>
-    <comment xml:lang="da">Atari 7800</comment>
-    <comment xml:lang="de">Atari 7800</comment>
-    <comment xml:lang="en_GB">Atari 7800</comment>
-    <comment xml:lang="es">Atari 7800</comment>
-    <comment xml:lang="eu">Atari 7800</comment>
-    <comment xml:lang="fi">Atari 7800</comment>
-    <comment xml:lang="fr">Atari 7800</comment>
-    <comment xml:lang="ga">Atari 7800</comment>
-    <comment xml:lang="he">אטארי 7800</comment>
-    <comment xml:lang="hr">Atari 7800</comment>
-    <comment xml:lang="hu">Atari 7800</comment>
-    <comment xml:lang="id">Atari 7800</comment>
-    <comment xml:lang="it">Atari 7800</comment>
-    <comment xml:lang="kk">Atari 7800</comment>
-    <comment xml:lang="ko">Atari 7800</comment>
-    <comment xml:lang="oc">Atari 7800</comment>
-    <comment xml:lang="pl">Atari 7800</comment>
-    <comment xml:lang="pt_BR">Atari 7800</comment>
-    <comment xml:lang="ru">Atari 7800</comment>
-    <comment xml:lang="sk">Atari 7800</comment>
-    <comment xml:lang="sr">Атари 7800</comment>
-    <comment xml:lang="sv">Atari 7800</comment>
-    <comment xml:lang="tr">Atari 7800</comment>
-    <comment xml:lang="uk">Atari 7800</comment>
-    <comment xml:lang="zh_CN">雅达利 7800</comment>
-    <comment xml:lang="zh_TW">Atari 7800</comment>
+    <comment>Atari 7800 ROM</comment>
+    <comment xml:lang="bg">ROM — Atari 7800</comment>
+    <comment xml:lang="ca">ROM d'Atari 7800</comment>
+    <comment xml:lang="da">Atari 7800-ROM</comment>
+    <comment xml:lang="de">Atari 7800 ROM</comment>
+    <comment xml:lang="en-GB">Atari 7800 ROM</comment>
+    <comment xml:lang="es">ROM de Atari 7800</comment>
+    <comment xml:lang="eu">Atari 7800 ROMa</comment>
+    <comment xml:lang="fi">Atari 7800 ROM</comment>
+    <comment xml:lang="fr">ROM Atari 7800</comment>
+    <comment xml:lang="fur">ROM Atari 7800</comment>
+    <comment xml:lang="hr">Atari 7800 ROM</comment>
+    <comment xml:lang="hu">Atari 7800 ROM</comment>
+    <comment xml:lang="id">Atari 7800 ROM</comment>
+    <comment xml:lang="it">ROM Atari 7800</comment>
+    <comment xml:lang="kk">Atari 7800 ROM</comment>
+    <comment xml:lang="ko">아타리 7800 롬</comment>
+    <comment xml:lang="pl">Plik ROM konsoli Atari 7800</comment>
+    <comment xml:lang="pt">ROM Atari 7800</comment>
+    <comment xml:lang="pt-BR">ROM do Atari 7800</comment>
+    <comment xml:lang="sl">Atari 7800 ROM</comment>
+    <comment xml:lang="sv">Atari 7800-rom</comment>
+    <comment xml:lang="tr">Atari 7800 ROM</comment>
+    <comment xml:lang="uk">Atari 7800 ROM</comment>
+    <comment xml:lang="zh-CN">雅达利 7800 ROM</comment>
+    <comment xml:lang="zh-TW">雅達利 7800 ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.a78"/>
     <magic>
-      <match value="ATARI7800" type="string" offset="1"/>
+      <match type="string" value="ATARI7800" offset="1"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-atari-lynx-rom">
-    <comment>Atari Lynx</comment>
-    <comment xml:lang="ast">Atari Lynx</comment>
-    <comment xml:lang="ca">Atari Lynx</comment>
-    <comment xml:lang="cs">Atari Lynx</comment>
-    <comment xml:lang="de">Atari Lynx</comment>
-    <comment xml:lang="en_GB">Atari Lynx</comment>
-    <comment xml:lang="es">Atari Lynx</comment>
-    <comment xml:lang="fi">Atari Lynx</comment>
-    <comment xml:lang="hr">Atari Lynx</comment>
-    <comment xml:lang="hu">Atari Lynx</comment>
-    <comment xml:lang="id">Atari Lynx</comment>
-    <comment xml:lang="it">Atari Lynx</comment>
-    <comment xml:lang="kk">Atari Lynx</comment>
-    <comment xml:lang="ko">Atari Lynx</comment>
-    <comment xml:lang="pl">Atari Lynx</comment>
-    <comment xml:lang="pt_BR">Atari Lynx</comment>
-    <comment xml:lang="ru">Atari Lynx</comment>
-    <comment xml:lang="sk">Atari Lynx</comment>
-    <comment xml:lang="sv">Atari Lynx</comment>
-    <comment xml:lang="uk">Atari Lynx</comment>
-    <comment xml:lang="zh_CN">雅达利 Lynx</comment>
-    <comment xml:lang="zh_TW">Atari Lynx</comment>
+    <comment>Atari Lynx ROM</comment>
+    <comment xml:lang="bg">ROM — Atari Lynx</comment>
+    <comment xml:lang="ca">ROM d'Atari Lynx</comment>
+    <comment xml:lang="da">Atari Lynx-ROM</comment>
+    <comment xml:lang="de">Atari Lynx ROM</comment>
+    <comment xml:lang="en-GB">Atari Lynx ROM</comment>
+    <comment xml:lang="es">ROM de Atari Lynx</comment>
+    <comment xml:lang="eu">Atari Lynx ROMa</comment>
+    <comment xml:lang="fi">Atari Lynx ROM</comment>
+    <comment xml:lang="fr">ROM Atari Lynx</comment>
+    <comment xml:lang="fur">ROM Atari Lynx</comment>
+    <comment xml:lang="hr">Atari Lynx ROM</comment>
+    <comment xml:lang="hu">Atari Lynx ROM</comment>
+    <comment xml:lang="id">Atari Lynx ROM</comment>
+    <comment xml:lang="it">ROM Atari Lynx</comment>
+    <comment xml:lang="kk">Atari Lynx ROM</comment>
+    <comment xml:lang="ko">아타리 링스 롬</comment>
+    <comment xml:lang="pl">Plik ROM konsoli Atari Lynx</comment>
+    <comment xml:lang="pt">ROM Atari Lynx</comment>
+    <comment xml:lang="pt-BR">ROM do Atari Lynx</comment>
+    <comment xml:lang="sl">Atari Lynx ROM</comment>
+    <comment xml:lang="sv">Atari Lynx-rom</comment>
+    <comment xml:lang="tr">Atari Lynx ROM</comment>
+    <comment xml:lang="uk">Atari Lynx ROM</comment>
+    <comment xml:lang="zh-CN">雅达利 Lynx ROM</comment>
+    <comment xml:lang="zh-TW">雅達利 Lynx ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.lnx"/>
     <magic>
-      <match value="LYNX" type="string" offset="0"/>
+      <match type="string" value="LYNX" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/andrew-inset">
     <comment>ATK inset</comment>
     <comment xml:lang="ar">شكل ATK</comment>
-    <comment xml:lang="be@latin">Ustaŭka ATK</comment>
-    <comment xml:lang="bg">Сбор — ATK</comment>
+    <comment xml:lang="be-Latn">Ustaŭka ATK</comment>
+    <comment xml:lang="bg">Притурка — ATK</comment>
     <comment xml:lang="ca">ATK inset</comment>
     <comment xml:lang="cs">vložka ATK</comment>
     <comment xml:lang="da">ATK-indsættelse</comment>
     <comment xml:lang="de">ATK-Inset</comment>
     <comment xml:lang="el">Ένθετο ATK</comment>
-    <comment xml:lang="en_GB">ATK inset</comment>
+    <comment xml:lang="en-GB">ATK inset</comment>
     <comment xml:lang="es">inserción ATK</comment>
     <comment xml:lang="eu">ATK sartzapena</comment>
     <comment xml:lang="fi">ATK-osio</comment>
     <comment xml:lang="fo">ATK innskot</comment>
     <comment xml:lang="fr">encart ATK</comment>
+    <comment xml:lang="fur">inset ATK</comment>
     <comment xml:lang="ga">intlis ATK</comment>
     <comment xml:lang="gl">conxunto ATK</comment>
     <comment xml:lang="he">תוספת ATK</comment>
@@ -197,7 +191,7 @@
     <comment xml:lang="oc">encart ATK</comment>
     <comment xml:lang="pl">Wstawka ATK</comment>
     <comment xml:lang="pt">Suplemento ATK</comment>
-    <comment xml:lang="pt_BR">Conjunto de entrada do ATK</comment>
+    <comment xml:lang="pt-BR">Conjunto de entrada do ATK</comment>
     <comment xml:lang="ro">Inset ATK</comment>
     <comment xml:lang="ru">Вкладка ATK</comment>
     <comment xml:lang="sk">Vložka ATK</comment>
@@ -208,8 +202,8 @@
     <comment xml:lang="tr">ATK iç metni</comment>
     <comment xml:lang="uk">вкладка ATK</comment>
     <comment xml:lang="vi">Bộ dát ATK</comment>
-    <comment xml:lang="zh_CN">ATK 嵌入对象</comment>
-    <comment xml:lang="zh_TW">ATK 內嵌</comment>
+    <comment xml:lang="zh-CN">ATK 嵌入对象</comment>
+    <comment xml:lang="zh-TW">ATK 內嵌</comment>
     <acronym>ATK</acronym>
     <expanded-acronym>Andrew Toolkit</expanded-acronym>
     <generic-icon name="x-office-document"/>
@@ -217,21 +211,23 @@
   </mime-type>
   <mime-type type="application/epub+zip">
     <comment>electronic book document</comment>
+    <comment xml:lang="af">elektronieseboekdokument</comment>
     <comment xml:lang="ar">مستند كتاب إلكتروني</comment>
     <comment xml:lang="ast">documentu de llibru electrónicu</comment>
-    <comment xml:lang="be@latin">elektronnaja kniha</comment>
+    <comment xml:lang="be-Latn">elektronnaja kniha</comment>
     <comment xml:lang="bg">Документ — електронна книга</comment>
     <comment xml:lang="ca">document de llibre electrònic</comment>
     <comment xml:lang="cs">dokument elektronické knihy</comment>
     <comment xml:lang="da">elektronisk bogdokument</comment>
     <comment xml:lang="de">Elektronisches Buch</comment>
     <comment xml:lang="el">Έγγραφο ηλεκτρονικού βιβλίου</comment>
-    <comment xml:lang="en_GB">electronic book document</comment>
+    <comment xml:lang="en-GB">electronic book document</comment>
     <comment xml:lang="es">documento de libro electrónico</comment>
     <comment xml:lang="eu">liburu elektronikoaren dokumentua</comment>
     <comment xml:lang="fi">elektroninen kirja</comment>
     <comment xml:lang="fo">elektroniskbóka skjal</comment>
     <comment xml:lang="fr">document livre électronique</comment>
+    <comment xml:lang="fur">document libri eletronic</comment>
     <comment xml:lang="ga">leabhar leictreonach</comment>
     <comment xml:lang="gl">documento de libro electrónico</comment>
     <comment xml:lang="he">מסמך מסוג ספר אלקטרוני</comment>
@@ -250,7 +246,7 @@
     <comment xml:lang="oc">document libre electronic</comment>
     <comment xml:lang="pl">Dokument książki elektronicznej</comment>
     <comment xml:lang="pt">documento de livro eletrónico</comment>
-    <comment xml:lang="pt_BR">Documento de livro eletrônico</comment>
+    <comment xml:lang="pt-BR">Documento de livro eletrônico</comment>
     <comment xml:lang="ro">document carte electronică</comment>
     <comment xml:lang="ru">Электронная книга</comment>
     <comment xml:lang="sk">Dokument elektronickej knihy</comment>
@@ -261,45 +257,77 @@
     <comment xml:lang="tr">elektronik kitap belgesi</comment>
     <comment xml:lang="uk">документ електронної книги</comment>
     <comment xml:lang="vi">tài liệu cuốn sách điện tử</comment>
-    <comment xml:lang="zh_CN">电子书文档</comment>
-    <comment xml:lang="zh_TW">電子書文件</comment>
+    <comment xml:lang="zh-CN">电子书文档</comment>
+    <comment xml:lang="zh-TW">電子書文件</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/epub+zip" type="string" offset="38"/>
-          <match value="application/epub+zip" type="string" offset="43"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/epub+zip" offset="38"/>
+          <match type="string" value="application/epub+zip" offset="43"/>
         </match>
       </match>
     </magic>
     <glob pattern="*.epub"/>
   </mime-type>
+  <mime-type type="application/vnd.amazon.mobi8-ebook">
+    <comment>Kindle book document</comment>
+    <comment xml:lang="ca">document de llibre Kindle</comment>
+    <comment xml:lang="da">Kindle-bogdokument</comment>
+    <comment xml:lang="de">Kindle-Buch-Dokument</comment>
+    <comment xml:lang="en-GB">Kindle book document</comment>
+    <comment xml:lang="es">documento de libro de Kindle</comment>
+    <comment xml:lang="fi">Kindle book -asiakirja</comment>
+    <comment xml:lang="fr">document livre Kindle</comment>
+    <comment xml:lang="hr">Dokument Kindle knjige</comment>
+    <comment xml:lang="hu">Kindle könyvdokumentum</comment>
+    <comment xml:lang="id">Dokumen buku Kindle</comment>
+    <comment xml:lang="it">Documento libro Kindle</comment>
+    <comment xml:lang="kk">Kindle кітап құжаты</comment>
+    <comment xml:lang="ko">Kindle 책 문서</comment>
+    <comment xml:lang="lt">Kindle knygos dokumentas</comment>
+    <comment xml:lang="pl">Dokument książki Kindle</comment>
+    <comment xml:lang="pt">documento de livro eletrónico do Kindle</comment>
+    <comment xml:lang="pt-BR">Documento livro do Kindle</comment>
+    <comment xml:lang="ru">Электронная книга Kindle</comment>
+    <comment xml:lang="sv">Kindle-bokdokument</comment>
+    <comment xml:lang="tr">Kindle kitap belgesi</comment>
+    <comment xml:lang="uk">документ книги Kindle</comment>
+    <comment xml:lang="zh-CN">Kindle 电子书文档</comment>
+    <comment xml:lang="zh-TW">Kindle 書文件</comment>
+    <sub-class-of type="application/x-mobipocket-ebook"/>
+    <glob pattern="*.azw3"/>
+    <glob pattern="*.kfx"/>
+    <alias type="application/x-mobi8-ebook"/>
+  </mime-type>
   <mime-type type="application/illustrator">
     <comment>Adobe Illustrator document</comment>
+    <comment xml:lang="af">Adobe Illustrator-dokument</comment>
     <comment xml:lang="ar">مستند أدوبي المصور</comment>
     <comment xml:lang="ast">Documentu d'Adobe Illustrator</comment>
-    <comment xml:lang="be@latin">Dakument Adobe Illustrator</comment>
+    <comment xml:lang="be-Latn">Dakument Adobe Illustrator</comment>
     <comment xml:lang="bg">Документ — Adobe Illustrator</comment>
     <comment xml:lang="ca">document d'Adobe Illustrator</comment>
     <comment xml:lang="cs">dokument Adobe Illustrator</comment>
     <comment xml:lang="da">Adobe Illustrator-dokument</comment>
     <comment xml:lang="de">Adobe-Illustrator-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Adobe Illustrator</comment>
-    <comment xml:lang="en_GB">Adobe Illustrator document</comment>
+    <comment xml:lang="en-GB">Adobe Illustrator document</comment>
     <comment xml:lang="eo">dokumento de Adobe Illustrator</comment>
     <comment xml:lang="es">documento de Adobe Illustrator</comment>
     <comment xml:lang="eu">Adobe Illustrator dokumentua</comment>
     <comment xml:lang="fi">Adobe Illustrator -asiakirja</comment>
     <comment xml:lang="fo">Adobe Illustrator skjal</comment>
     <comment xml:lang="fr">document Adobe Illustrator</comment>
+    <comment xml:lang="fur">document Adobe Illustrator</comment>
     <comment xml:lang="ga">cáipéis Adobe Illustrator</comment>
     <comment xml:lang="gl">documento de Adobe Ilustrator</comment>
     <comment xml:lang="he">מסמך Adobe Ill</comment>
     <comment xml:lang="hr">Adobe Illustrator dokument</comment>
     <comment xml:lang="hu">Adobe Illustrator-dokumentum</comment>
     <comment xml:lang="ia">Documento Adobe Illustrator</comment>
-    <comment xml:lang="id">dokumen Adobe Illustrator</comment>
+    <comment xml:lang="id">Dokumen Adobe Illustrator</comment>
     <comment xml:lang="it">Documento Adobe Illustrator</comment>
     <comment xml:lang="ja">Adobe Illustrator ドキュメント</comment>
     <comment xml:lang="ka">Adobe Illustrator-ის დოკუმენტი</comment>
@@ -314,7 +342,7 @@
     <comment xml:lang="oc">document Adobe Illustrator</comment>
     <comment xml:lang="pl">Dokument Adobe Illustrator</comment>
     <comment xml:lang="pt">documento Adobe Illustrator</comment>
-    <comment xml:lang="pt_BR">Documento do Adobe Illustrator</comment>
+    <comment xml:lang="pt-BR">Documento do Adobe Illustrator</comment>
     <comment xml:lang="ro">Document Adobe Illustrator</comment>
     <comment xml:lang="ru">Документ Adobe Illustrator</comment>
     <comment xml:lang="sk">Dokument Adobe Illustrator</comment>
@@ -325,18 +353,19 @@
     <comment xml:lang="tr">Adobe Illustrator belgesi</comment>
     <comment xml:lang="uk">документ Adobe Illustrator</comment>
     <comment xml:lang="vi">Tài liệu Adobe Illustrator</comment>
-    <comment xml:lang="zh_CN">Adobe Illustrator 文档</comment>
-    <comment xml:lang="zh_TW">Adobe Illustrator 文件</comment>
+    <comment xml:lang="zh-CN">Adobe Illustrator 文档</comment>
+    <comment xml:lang="zh-TW">Adobe Illustrator 文件</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.ai"/>
     <alias type="application/vnd.adobe.illustrator"/>
   </mime-type>
   <mime-type type="application/mac-binhex40">
     <comment>Macintosh BinHex-encoded file</comment>
+    <comment xml:lang="af">Macintosh BinHex-geënkodeerde lêer</comment>
     <comment xml:lang="ar">ملف Macintosh BinHex مشفر</comment>
     <comment xml:lang="ast">Ficheru codificáu en BinHex de Machintosh</comment>
     <comment xml:lang="az">Macintosh BinHex-kodlanmış fayl</comment>
-    <comment xml:lang="be@latin">Fajł Macintosh, BinHex-zakadavany</comment>
+    <comment xml:lang="be-Latn">Fajł Macintosh, BinHex-zakadavany</comment>
     <comment xml:lang="bg">Файл — кодиран във формат BinHex за Macintosh</comment>
     <comment xml:lang="ca">fitxer amb codificació BinHex de Macintosh</comment>
     <comment xml:lang="cs">soubor kódovaný pomocí Macintosh BinHex</comment>
@@ -344,20 +373,21 @@
     <comment xml:lang="da">Macintosh BinHex-kodet fil</comment>
     <comment xml:lang="de">Macintosh-Datei (BinHex-kodiert)</comment>
     <comment xml:lang="el">Αρχείο Macintosh κωδικοποίησης BinHex</comment>
-    <comment xml:lang="en_GB">Macintosh BinHex-encoded file</comment>
+    <comment xml:lang="en-GB">Macintosh BinHex-encoded file</comment>
     <comment xml:lang="eo">dosiero kodigita laŭ Macintosh BinHex</comment>
     <comment xml:lang="es">archivo Macintosh codificado con BinHex</comment>
     <comment xml:lang="eu">Macintosh BinHex-ekin kodetutako fitxategia</comment>
     <comment xml:lang="fi">Macintosh BinHex -koodattu tiedosto</comment>
     <comment xml:lang="fo">Macintosh BinHex-bronglað fíla</comment>
     <comment xml:lang="fr">fichier codé Macintosh BinHex</comment>
+    <comment xml:lang="fur">file di Macintosh codificât BinHex</comment>
     <comment xml:lang="ga">comhad ionchódaithe le Macintosh BinHex</comment>
     <comment xml:lang="gl">ficheiro de Macintosh codificado con BinHex</comment>
     <comment xml:lang="he">קובץ בקידוד Macintosh BinHex</comment>
     <comment xml:lang="hr">Macintosh BinHex-kôdirana datoteka</comment>
     <comment xml:lang="hu">Macintosh BinHex kódolású fájl</comment>
     <comment xml:lang="ia">File codificate in BinHex de Macintosh</comment>
-    <comment xml:lang="id">berkas tersandi Macintosh BinHex</comment>
+    <comment xml:lang="id">Berkas tersandi Macintosh BinHex</comment>
     <comment xml:lang="it">File Macintosh codificato BinHex</comment>
     <comment xml:lang="ja">Macintosh BinHex エンコードファイル</comment>
     <comment xml:lang="kk">Macintosh BinHex кодталған файлы</comment>
@@ -371,7 +401,7 @@
     <comment xml:lang="oc">fichièr encodat Macintosh BinHex</comment>
     <comment xml:lang="pl">Zakodowany w BinHex plik Macintosh</comment>
     <comment xml:lang="pt">ficheiro codificado em BinHex de Macintosh</comment>
-    <comment xml:lang="pt_BR">Arquivo do Macintosh codificado com BinHex</comment>
+    <comment xml:lang="pt-BR">Arquivo do Macintosh codificado com BinHex</comment>
     <comment xml:lang="ro">Fișier codat Macintosh BinHex</comment>
     <comment xml:lang="ru">Файл (закодированный Macintosh BinHex)</comment>
     <comment xml:lang="sk">Súbor kódovaný pomocou Macintosh BinHex</comment>
@@ -382,61 +412,40 @@
     <comment xml:lang="tr">Macintosh BinHex-şifreli dosya</comment>
     <comment xml:lang="uk">файл закодований Macintosh BinHex</comment>
     <comment xml:lang="vi">Tập tin đã mã hoá BinHex của Macintosh</comment>
-    <comment xml:lang="zh_CN">Macintosh BinHex 编码的文件</comment>
-    <comment xml:lang="zh_TW">Macintosh BinHex 編碼檔</comment>
+    <comment xml:lang="zh-CN">Macintosh BinHex 编码的文件</comment>
+    <comment xml:lang="zh-TW">Macintosh BinHex 編碼檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="must be converted with BinHex" type="string" offset="11"/>
+      <match type="string" value="must be converted with BinHex" offset="11"/>
     </magic>
   </mime-type>
   <mime-type type="application/mathematica">
-    <comment>Mathematica Notebook</comment>
-    <comment xml:lang="ar">مذكرة رياضيات</comment>
-    <comment xml:lang="be@latin">Natatnik Mathematica</comment>
-    <comment xml:lang="bg">Тетрадка — Mathematica</comment>
-    <comment xml:lang="ca">llibreta de notes de Mathematica</comment>
-    <comment xml:lang="cs">sešit Mathematica</comment>
-    <comment xml:lang="da">Mathematica Notebook</comment>
-    <comment xml:lang="de">Mathematica-Dokument</comment>
-    <comment xml:lang="el">Σημειωματάριο Mathematica</comment>
-    <comment xml:lang="en_GB">Mathematica Notebook</comment>
-    <comment xml:lang="es">libreta de Mathematica</comment>
-    <comment xml:lang="eu">Mathematica Notebook</comment>
-    <comment xml:lang="fi">Mathematica-muistilehtiö</comment>
-    <comment xml:lang="fo">Mathematica skriviblokkur</comment>
-    <comment xml:lang="fr">carnet de notes Mathematica</comment>
-    <comment xml:lang="ga">leabhar nótaí Mathematica</comment>
-    <comment xml:lang="gl">notebook de Mathematica</comment>
-    <comment xml:lang="he">מחברת מתמטיקה</comment>
-    <comment xml:lang="hr">Matematička bilježnica</comment>
-    <comment xml:lang="hu">Mathematica notesz</comment>
-    <comment xml:lang="ia">Carnet de notas Mathematica</comment>
-    <comment xml:lang="id">Mathematica Notebook</comment>
-    <comment xml:lang="it">Notebook Mathematica</comment>
-    <comment xml:lang="ja">Mathematica ノートブック</comment>
-    <comment xml:lang="kk">Mathematica Notebook</comment>
-    <comment xml:lang="ko">Mathematica 노트북</comment>
-    <comment xml:lang="lt">Mathematica užrašinė</comment>
-    <comment xml:lang="lv">Mathematica bloknots</comment>
-    <comment xml:lang="nb">Mathematica notisblokk</comment>
-    <comment xml:lang="nl">Mathematica-notitieboek</comment>
-    <comment xml:lang="nn">Mathematica-notatbok</comment>
-    <comment xml:lang="oc">quasernet de nòtas Mathematica</comment>
-    <comment xml:lang="pl">Notatnik Mathematica</comment>
-    <comment xml:lang="pt">Bloco notas Mathematica</comment>
-    <comment xml:lang="pt_BR">Caderno do Mathematica</comment>
-    <comment xml:lang="ro">Carnețel Mathematica</comment>
-    <comment xml:lang="ru">Mathematica Notebook</comment>
-    <comment xml:lang="sk">Zošit programu Mathematica</comment>
-    <comment xml:lang="sl">Datoteka dokumenta Mathematica</comment>
-    <comment xml:lang="sq">Notebook matematike</comment>
-    <comment xml:lang="sr">бележница Математике</comment>
-    <comment xml:lang="sv">Mathematica Notebook-dokument</comment>
-    <comment xml:lang="tr">Mathematica Defteri</comment>
-    <comment xml:lang="uk">математичний записник</comment>
-    <comment xml:lang="vi">Cuốn vở Mathematica</comment>
-    <comment xml:lang="zh_CN">Mathematica 笔记本</comment>
-    <comment xml:lang="zh_TW">Mathematica Notebook</comment>
+    <comment>Mathematica Notebook file</comment>
+    <comment xml:lang="bg">Скицник — Mathematica</comment>
+    <comment xml:lang="ca">llibreta de Mathematica Notebook</comment>
+    <comment xml:lang="da">Mathematica Notebook-fil</comment>
+    <comment xml:lang="de">Mathematica-Notebook-Datei</comment>
+    <comment xml:lang="en-GB">Mathematica Notebook file</comment>
+    <comment xml:lang="es">archivo de Mathematica Notebook</comment>
+    <comment xml:lang="eu">Mathematica Notebook fitxategia</comment>
+    <comment xml:lang="fi">Mathematica Notebook -tiedosto</comment>
+    <comment xml:lang="fr">fichier carnet Mathematica</comment>
+    <comment xml:lang="hr">Mathematica Notebook datoteka</comment>
+    <comment xml:lang="hu">Mathematica munkafüzetfájl</comment>
+    <comment xml:lang="id">Berkas Mathematica Notebook</comment>
+    <comment xml:lang="it">File Mathematica Notebook</comment>
+    <comment xml:lang="kk">Mathematica блокнот файлы</comment>
+    <comment xml:lang="ko">매쓰매티카 기록장 파일</comment>
+    <comment xml:lang="pl">Plik notatnika Mathematica</comment>
+    <comment xml:lang="pt">ficheiro de Mathematica Notebook do Wolfram</comment>
+    <comment xml:lang="pt-BR">Arquivo Notebook do Mathematica</comment>
+    <comment xml:lang="ru">Файл Mathematica Notebook</comment>
+    <comment xml:lang="sl">Datoteka Mathematica Notebook</comment>
+    <comment xml:lang="sv">Mathematica-anteckningsboksfil</comment>
+    <comment xml:lang="tr">Mathematica Notebook dosyası</comment>
+    <comment xml:lang="uk">файл нотатника Mathematica</comment>
+    <comment xml:lang="zh-CN">Mathematica 笔记本文件</comment>
+    <comment xml:lang="zh-TW">Mathematica 筆記本檔案</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.nb"/>
@@ -449,10 +458,11 @@
   </mime-type>
   <mime-type type="application/mathml+xml">
     <comment>MathML document</comment>
+    <comment xml:lang="af">MathML-dokument</comment>
     <comment xml:lang="ar">مستند MathML</comment>
     <comment xml:lang="ast">Documentu MathML</comment>
     <comment xml:lang="az">MathML sənədi</comment>
-    <comment xml:lang="be@latin">Dakument MathML</comment>
+    <comment xml:lang="be-Latn">Dakument MathML</comment>
     <comment xml:lang="bg">Документ — MathML</comment>
     <comment xml:lang="ca">document MathML</comment>
     <comment xml:lang="cs">dokument MathML</comment>
@@ -460,20 +470,21 @@
     <comment xml:lang="da">MathML-dokument</comment>
     <comment xml:lang="de">MathML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο MathML</comment>
-    <comment xml:lang="en_GB">MathML document</comment>
+    <comment xml:lang="en-GB">MathML document</comment>
     <comment xml:lang="eo">MathML-dokumento</comment>
     <comment xml:lang="es">documento MathML</comment>
     <comment xml:lang="eu">MathML dokumentua</comment>
     <comment xml:lang="fi">MathML-asiakirja</comment>
     <comment xml:lang="fo">MathML skjal</comment>
     <comment xml:lang="fr">document MathML</comment>
+    <comment xml:lang="fur">document MathML</comment>
     <comment xml:lang="ga">cáipéis MathML</comment>
     <comment xml:lang="gl">documento de MathML</comment>
     <comment xml:lang="he">מסמך MathML</comment>
     <comment xml:lang="hr">MathML dokument</comment>
     <comment xml:lang="hu">MathML-dokumentum</comment>
     <comment xml:lang="ia">Documento MathML</comment>
-    <comment xml:lang="id">dokumen MathML</comment>
+    <comment xml:lang="id">Dokumen MathML</comment>
     <comment xml:lang="it">Documento MathML</comment>
     <comment xml:lang="ja">MathML ドキュメント</comment>
     <comment xml:lang="ka">MathML-ის დოკუმენტი</comment>
@@ -488,7 +499,7 @@
     <comment xml:lang="oc">document MathML</comment>
     <comment xml:lang="pl">Dokument MathML</comment>
     <comment xml:lang="pt">documento MathML</comment>
-    <comment xml:lang="pt_BR">Documento do MathML</comment>
+    <comment xml:lang="pt-BR">Documento do MathML</comment>
     <comment xml:lang="ro">Document MathML</comment>
     <comment xml:lang="ru">Документ MathML</comment>
     <comment xml:lang="sk">Dokument MathML</comment>
@@ -499,8 +510,8 @@
     <comment xml:lang="tr">MathML belgesi</comment>
     <comment xml:lang="uk">документ MathML</comment>
     <comment xml:lang="vi">Tài liệu MathML</comment>
-    <comment xml:lang="zh_CN">MathML 文档</comment>
-    <comment xml:lang="zh_TW">MathML 文件</comment>
+    <comment xml:lang="zh-CN">MathML 文档</comment>
+    <comment xml:lang="zh-TW">MathML 文件</comment>
     <acronym>MathML</acronym>
     <expanded-acronym>Mathematical Markup Language</expanded-acronym>
     <alias type="text/mathml"/>
@@ -510,20 +521,22 @@
   </mime-type>
   <mime-type type="application/mbox">
     <comment>mailbox file</comment>
+    <comment xml:lang="af">mailbox-lêer</comment>
     <comment xml:lang="ar">ملف صندوق البريد</comment>
-    <comment xml:lang="be@latin">fajł paštovaj skryni</comment>
+    <comment xml:lang="be-Latn">fajł paštovaj skryni</comment>
     <comment xml:lang="bg">Файл — Mailbox</comment>
     <comment xml:lang="ca">fitxer mailbox</comment>
     <comment xml:lang="cs">soubor mailbox</comment>
     <comment xml:lang="da">postkassefil</comment>
     <comment xml:lang="de">Mailbox-Datei</comment>
     <comment xml:lang="el">Αρχείο mailbox</comment>
-    <comment xml:lang="en_GB">mailbox file</comment>
+    <comment xml:lang="en-GB">mailbox file</comment>
     <comment xml:lang="es">archivo de buzón de correo</comment>
     <comment xml:lang="eu">mailbox fitxategia</comment>
     <comment xml:lang="fi">mailbox-tiedosto</comment>
     <comment xml:lang="fo">postkassafíla</comment>
     <comment xml:lang="fr">fichier boîte aux lettres</comment>
+    <comment xml:lang="fur">file mailbox</comment>
     <comment xml:lang="ga">comhad bhosca poist</comment>
     <comment xml:lang="gl">ficheiro de caixa de correo</comment>
     <comment xml:lang="he">קובץ תיבת-דואר</comment>
@@ -543,7 +556,7 @@
     <comment xml:lang="oc">fichièr bóstia de letras</comment>
     <comment xml:lang="pl">Plik poczty (Mailbox)</comment>
     <comment xml:lang="pt">ficheiro de caixa de correio</comment>
-    <comment xml:lang="pt_BR">Arquivo de caixa de correio</comment>
+    <comment xml:lang="pt-BR">Arquivo de caixa de correio</comment>
     <comment xml:lang="ro">fișier căsuță poștală</comment>
     <comment xml:lang="ru">Файл почтового ящика</comment>
     <comment xml:lang="sk">Súbor mailbox</comment>
@@ -551,20 +564,21 @@
     <comment xml:lang="sq">File mailbox</comment>
     <comment xml:lang="sr">датотека поштанског сандучета</comment>
     <comment xml:lang="sv">brevlådefil</comment>
-    <comment xml:lang="tr">posta kutusu dosyası</comment>
+    <comment xml:lang="tr">mailbox dosyası</comment>
     <comment xml:lang="uk">файл поштової скриньки</comment>
     <comment xml:lang="vi">tập tin hộp thư</comment>
-    <comment xml:lang="zh_CN">邮箱文件</comment>
-    <comment xml:lang="zh_TW">郵箱檔</comment>
+    <comment xml:lang="zh-CN">邮箱文件</comment>
+    <comment xml:lang="zh-TW">郵箱檔</comment>
     <generic-icon name="text-x-generic"/>
     <sub-class-of type="text/plain"/>
     <magic priority="20">
-      <match value="From " type="string" offset="0"/>
+      <match type="string" value="From " offset="0"/>
     </magic>
     <glob pattern="*.mbox"/>
   </mime-type>
   <mime-type type="application/metalink+xml">
     <comment>Metalink file</comment>
+    <comment xml:lang="af">Metalink-lêer</comment>
     <comment xml:lang="ar">ملف ميتالنك</comment>
     <comment xml:lang="ast">Ficheru d'enllaz meta</comment>
     <comment xml:lang="bg">Изтегляне — Metalink</comment>
@@ -573,20 +587,21 @@
     <comment xml:lang="da">Metahenvisningsfil</comment>
     <comment xml:lang="de">Metalink-Datei</comment>
     <comment xml:lang="el">Αρχείο Metalink</comment>
-    <comment xml:lang="en_GB">Metalink file</comment>
+    <comment xml:lang="en-GB">Metalink file</comment>
     <comment xml:lang="eo">Metalink-dosiero</comment>
     <comment xml:lang="es">archivo de Metalink</comment>
     <comment xml:lang="eu">Metaestekaren fitxategia</comment>
     <comment xml:lang="fi">Metalink-tiedosto</comment>
     <comment xml:lang="fo">Metalink fíla</comment>
     <comment xml:lang="fr">fichier metalink</comment>
+    <comment xml:lang="fur">file Metalink</comment>
     <comment xml:lang="ga">comhad Metalink</comment>
     <comment xml:lang="gl">ficheiro Metalink</comment>
     <comment xml:lang="he">קובץ Metalink</comment>
     <comment xml:lang="hr">Datoteka meta poveznice</comment>
     <comment xml:lang="hu">Metalink fájl</comment>
     <comment xml:lang="ia">File Metalink</comment>
-    <comment xml:lang="id">berkas Metalink</comment>
+    <comment xml:lang="id">Berkas Metalink</comment>
     <comment xml:lang="it">File Metalink</comment>
     <comment xml:lang="ja">Metalink ファイル</comment>
     <comment xml:lang="kk">Metalink файлы</comment>
@@ -597,7 +612,7 @@
     <comment xml:lang="oc">fichièr metalink</comment>
     <comment xml:lang="pl">Plik Metalink</comment>
     <comment xml:lang="pt">ficheiro Metalink</comment>
-    <comment xml:lang="pt_BR">Arquivo Metalink</comment>
+    <comment xml:lang="pt-BR">Arquivo Metalink</comment>
     <comment xml:lang="ro">Fișier Metalink</comment>
     <comment xml:lang="ru">Файл Metalink</comment>
     <comment xml:lang="sk">Súbor Metalink</comment>
@@ -606,17 +621,18 @@
     <comment xml:lang="sv">Metalink-fil</comment>
     <comment xml:lang="tr">Metalink dosyası</comment>
     <comment xml:lang="uk">файл метапосилання</comment>
-    <comment xml:lang="zh_CN">Metalink 文件</comment>
-    <comment xml:lang="zh_TW">Metalink 檔案</comment>
+    <comment xml:lang="zh-CN">Metalink 文件</comment>
+    <comment xml:lang="zh-TW">Metalink 檔案</comment>
     <sub-class-of type="application/xml"/>
     <magic priority="50">
-      <match value="&lt;metalink version=&quot;3.0&quot;" type="string" offset="0:256"/>
+      <match type="string" value="&lt;metalink version=&quot;3.0&quot;" offset="0:256"/>
     </magic>
     <glob pattern="*.metalink"/>
     <root-XML namespaceURI="http://www.metalinker.org/" localName="metalink"/>
   </mime-type>
   <mime-type type="application/metalink4+xml">
     <comment>Metalink file</comment>
+    <comment xml:lang="af">Metalink-lêer</comment>
     <comment xml:lang="ar">ملف ميتالنك</comment>
     <comment xml:lang="ast">Ficheru d'enllaz meta</comment>
     <comment xml:lang="bg">Изтегляне — Metalink</comment>
@@ -625,20 +641,21 @@
     <comment xml:lang="da">Metahenvisningsfil</comment>
     <comment xml:lang="de">Metalink-Datei</comment>
     <comment xml:lang="el">Αρχείο Metalink</comment>
-    <comment xml:lang="en_GB">Metalink file</comment>
+    <comment xml:lang="en-GB">Metalink file</comment>
     <comment xml:lang="eo">Metalink-dosiero</comment>
     <comment xml:lang="es">archivo de Metalink</comment>
     <comment xml:lang="eu">Metaestekaren fitxategia</comment>
     <comment xml:lang="fi">Metalink-tiedosto</comment>
     <comment xml:lang="fo">Metalink fíla</comment>
     <comment xml:lang="fr">fichier metalink</comment>
+    <comment xml:lang="fur">file Metalink</comment>
     <comment xml:lang="ga">comhad Metalink</comment>
     <comment xml:lang="gl">ficheiro Metalink</comment>
     <comment xml:lang="he">קובץ Metalink</comment>
     <comment xml:lang="hr">Datoteka meta poveznice</comment>
     <comment xml:lang="hu">Metalink fájl</comment>
     <comment xml:lang="ia">File Metalink</comment>
-    <comment xml:lang="id">berkas Metalink</comment>
+    <comment xml:lang="id">Berkas Metalink</comment>
     <comment xml:lang="it">File Metalink</comment>
     <comment xml:lang="ja">Metalink ファイル</comment>
     <comment xml:lang="kk">Metalink файлы</comment>
@@ -649,7 +666,7 @@
     <comment xml:lang="oc">fichièr metalink</comment>
     <comment xml:lang="pl">Plik Metalink</comment>
     <comment xml:lang="pt">ficheiro Metalink</comment>
-    <comment xml:lang="pt_BR">Arquivo Metalink</comment>
+    <comment xml:lang="pt-BR">Arquivo Metalink</comment>
     <comment xml:lang="ro">Fișier Metalink</comment>
     <comment xml:lang="ru">Файл Metalink</comment>
     <comment xml:lang="sk">Súbor Metalink</comment>
@@ -658,33 +675,35 @@
     <comment xml:lang="sv">Metalink-fil</comment>
     <comment xml:lang="tr">Metalink dosyası</comment>
     <comment xml:lang="uk">файл метапосилання</comment>
-    <comment xml:lang="zh_CN">Metalink 文件</comment>
-    <comment xml:lang="zh_TW">Metalink 檔案</comment>
+    <comment xml:lang="zh-CN">Metalink 文件</comment>
+    <comment xml:lang="zh-TW">Metalink 檔案</comment>
     <sub-class-of type="application/xml"/>
     <magic priority="50">
-      <match value="&lt;metalink xmlns=&quot;urn" type="string" offset="0:256"/>
+      <match type="string" value="&lt;metalink xmlns=&quot;urn" offset="0:256"/>
     </magic>
     <glob pattern="*.meta4"/>
     <root-XML namespaceURI="urn:ietf:params:xml:ns:metalink" localName="metalink"/>
   </mime-type>
   <mime-type type="application/octet-stream">
     <comment>unknown</comment>
+    <comment xml:lang="af">onbekend</comment>
     <comment xml:lang="ar">مجهول</comment>
     <comment xml:lang="ast">desconozse</comment>
-    <comment xml:lang="be@latin">nieviadomy</comment>
+    <comment xml:lang="be-Latn">nieviadomy</comment>
     <comment xml:lang="bg">Неизвестен тип</comment>
     <comment xml:lang="ca">desconegut</comment>
     <comment xml:lang="cs">neznámý</comment>
     <comment xml:lang="da">ukendt</comment>
     <comment xml:lang="de">unbekannt</comment>
     <comment xml:lang="el">Άγνωστο</comment>
-    <comment xml:lang="en_GB">unknown</comment>
+    <comment xml:lang="en-GB">unknown</comment>
     <comment xml:lang="eo">nekonate</comment>
     <comment xml:lang="es">desconocido</comment>
     <comment xml:lang="eu">ezezaguna</comment>
     <comment xml:lang="fi">tuntematon</comment>
     <comment xml:lang="fo">ókent</comment>
     <comment xml:lang="fr">inconnu</comment>
+    <comment xml:lang="fur">no cognossût</comment>
     <comment xml:lang="ga">anaithnid</comment>
     <comment xml:lang="gl">descoñecido</comment>
     <comment xml:lang="he">לא ידוע</comment>
@@ -706,7 +725,7 @@
     <comment xml:lang="oc">desconegut</comment>
     <comment xml:lang="pl">Nieznany typ</comment>
     <comment xml:lang="pt">desconhecido</comment>
-    <comment xml:lang="pt_BR">Desconhecido</comment>
+    <comment xml:lang="pt-BR">Desconhecido</comment>
     <comment xml:lang="ro">necunoscut</comment>
     <comment xml:lang="ru">Неизвестно</comment>
     <comment xml:lang="sk">Neznámy</comment>
@@ -717,22 +736,25 @@
     <comment xml:lang="tr">bilinmeyen</comment>
     <comment xml:lang="uk">невідомо</comment>
     <comment xml:lang="vi">không rõ</comment>
-    <comment xml:lang="zh_CN">未知</comment>
-    <comment xml:lang="zh_TW">不明</comment>
+    <comment xml:lang="zh-CN">未知</comment>
+    <comment xml:lang="zh-TW">不明</comment>
   </mime-type>
   <mime-type type="application/x-partial-download">
     <comment>Partially downloaded file</comment>
+    <comment xml:lang="af">Gedeeltelik afgelaaide lêer</comment>
     <comment xml:lang="ast">Ficheru baxáu parcialmente</comment>
+    <comment xml:lang="bg">Частично изтеглен файл</comment>
     <comment xml:lang="ca">fitxer baixat parcialment</comment>
     <comment xml:lang="cs">částečně stažený soubor</comment>
-    <comment xml:lang="da">Delvist hentet fil</comment>
+    <comment xml:lang="da">Delvist downloadet fil</comment>
     <comment xml:lang="de">Teilweise heruntergeladene Datei</comment>
     <comment xml:lang="el">Μερικώς ληφθέντο αρχείο</comment>
-    <comment xml:lang="en_GB">Partially downloaded file</comment>
+    <comment xml:lang="en-GB">Partially downloaded file</comment>
     <comment xml:lang="es">archivo descargado parcialmente</comment>
     <comment xml:lang="eu">Partzialki deskargatutako fitxategia</comment>
     <comment xml:lang="fi">Osittain ladattu tiedosto</comment>
     <comment xml:lang="fr">fichier partiellement téléchargé</comment>
+    <comment xml:lang="fur">file no discjariât dal dut</comment>
     <comment xml:lang="ga">Comhad leath-íoslódáilte</comment>
     <comment xml:lang="gl">Ficheiro descargado parcialmente</comment>
     <comment xml:lang="he">קובץ שהתקבל חלקית</comment>
@@ -743,10 +765,11 @@
     <comment xml:lang="it">File parzialmente scaricato</comment>
     <comment xml:lang="kk">Жартылай жүктелген файл</comment>
     <comment xml:lang="ko">일부 다운로드한 파일</comment>
+    <comment xml:lang="lt">Dalinai atsiųstas failas</comment>
     <comment xml:lang="oc">fichièr parcialament telecargat</comment>
     <comment xml:lang="pl">Częściowo pobrany plik</comment>
-    <comment xml:lang="pt">Ficheiro parcialmente transferido</comment>
-    <comment xml:lang="pt_BR">Arquivo baixado parcialmente</comment>
+    <comment xml:lang="pt">ficheiro descarregado parcialmente</comment>
+    <comment xml:lang="pt-BR">Arquivo baixado parcialmente</comment>
     <comment xml:lang="ru">Частично загруженный файл</comment>
     <comment xml:lang="sk">Čiastočne stiahnutý súbor</comment>
     <comment xml:lang="sl">Delno prenesena datoteka</comment>
@@ -754,8 +777,8 @@
     <comment xml:lang="sv">Delvis hämtad fil</comment>
     <comment xml:lang="tr">Kısmen indirilmiş dosya</comment>
     <comment xml:lang="uk">частково отриманий файл</comment>
-    <comment xml:lang="zh_CN">部分下载的文件</comment>
-    <comment xml:lang="zh_TW">已部份下載的檔案</comment>
+    <comment xml:lang="zh-CN">部分下载的文件</comment>
+    <comment xml:lang="zh-TW">已部份下載的檔案</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.wkdownload"/>
     <glob pattern="*.crdownload"/>
@@ -763,10 +786,11 @@
   </mime-type>
   <mime-type type="application/oda">
     <comment>ODA document</comment>
+    <comment xml:lang="af">ODA-dokument</comment>
     <comment xml:lang="ar">مستند ODA</comment>
     <comment xml:lang="ast">Documentu ODA</comment>
     <comment xml:lang="az">ODA sənədi</comment>
-    <comment xml:lang="be@latin">Dakument ODA</comment>
+    <comment xml:lang="be-Latn">Dakument ODA</comment>
     <comment xml:lang="bg">Документ — ODA</comment>
     <comment xml:lang="ca">document ODA</comment>
     <comment xml:lang="cs">dokument ODA</comment>
@@ -774,13 +798,14 @@
     <comment xml:lang="da">ODA-dokument</comment>
     <comment xml:lang="de">ODA-Dokument</comment>
     <comment xml:lang="el">Έγγραφο ODA</comment>
-    <comment xml:lang="en_GB">ODA document</comment>
+    <comment xml:lang="en-GB">ODA document</comment>
     <comment xml:lang="eo">ODA-dokumento</comment>
     <comment xml:lang="es">documento ODA</comment>
     <comment xml:lang="eu">ODA dokumentua</comment>
     <comment xml:lang="fi">ODA-asiakirja</comment>
     <comment xml:lang="fo">ODA skjal</comment>
     <comment xml:lang="fr">document ODA</comment>
+    <comment xml:lang="fur">document ODA</comment>
     <comment xml:lang="ga">cáipéis ODA</comment>
     <comment xml:lang="gl">documento ODA</comment>
     <comment xml:lang="he">מסמך ODA</comment>
@@ -802,7 +827,7 @@
     <comment xml:lang="oc">document ODA</comment>
     <comment xml:lang="pl">Dokument ODA</comment>
     <comment xml:lang="pt">documento ODA</comment>
-    <comment xml:lang="pt_BR">Documento ODA</comment>
+    <comment xml:lang="pt-BR">Documento ODA</comment>
     <comment xml:lang="ro">Document ODA</comment>
     <comment xml:lang="ru">Документ ODA</comment>
     <comment xml:lang="sk">Dokument ODA</comment>
@@ -813,8 +838,8 @@
     <comment xml:lang="tr">ODA belgesi</comment>
     <comment xml:lang="uk">документ ODA</comment>
     <comment xml:lang="vi">Tài liệu ODA</comment>
-    <comment xml:lang="zh_CN">ODA 文档</comment>
-    <comment xml:lang="zh_TW">ODA 文件</comment>
+    <comment xml:lang="zh-CN">ODA 文档</comment>
+    <comment xml:lang="zh-TW">ODA 文件</comment>
     <acronym>ODA</acronym>
     <expanded-acronym>Office Document Architecture</expanded-acronym>
     <generic-icon name="x-office-document"/>
@@ -822,6 +847,7 @@
   </mime-type>
   <mime-type type="application/x-wwf">
     <comment>WWF document</comment>
+    <comment xml:lang="af">WWF-dokument</comment>
     <comment xml:lang="ast">Documentu WWF</comment>
     <comment xml:lang="bg">Документ — WWF</comment>
     <comment xml:lang="ca">document WWF</comment>
@@ -829,12 +855,13 @@
     <comment xml:lang="da">WWF-dokument</comment>
     <comment xml:lang="de">WWF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο WWF</comment>
-    <comment xml:lang="en_GB">WWF document</comment>
+    <comment xml:lang="en-GB">WWF document</comment>
     <comment xml:lang="eo">WWF-dokumento</comment>
     <comment xml:lang="es">documento WWF</comment>
     <comment xml:lang="eu">WWF dokumentua</comment>
     <comment xml:lang="fi">WWF-asiakirja</comment>
     <comment xml:lang="fr">document WWF</comment>
+    <comment xml:lang="fur">document WWF</comment>
     <comment xml:lang="ga">cáipéis WWF</comment>
     <comment xml:lang="gl">documento de WWF</comment>
     <comment xml:lang="he">מסמך WWF</comment>
@@ -847,12 +874,13 @@
     <comment xml:lang="ka">WWF დოკუმენტი</comment>
     <comment xml:lang="kk">WWF құжаты</comment>
     <comment xml:lang="ko">WWF 문서</comment>
+    <comment xml:lang="lt">WWF dokumentas</comment>
     <comment xml:lang="lv">WWF dokuments</comment>
     <comment xml:lang="nl">WWF document</comment>
     <comment xml:lang="oc">document WWF</comment>
     <comment xml:lang="pl">Dokument WWF</comment>
     <comment xml:lang="pt">documento WWF</comment>
-    <comment xml:lang="pt_BR">Documento WWF</comment>
+    <comment xml:lang="pt-BR">Documento WWF</comment>
     <comment xml:lang="ru">Документ WWF</comment>
     <comment xml:lang="sk">Dokument  WWF</comment>
     <comment xml:lang="sl">Dokument WWF</comment>
@@ -860,8 +888,8 @@
     <comment xml:lang="sv">WWF-dokument</comment>
     <comment xml:lang="tr">WWF belgesi</comment>
     <comment xml:lang="uk">документ WWF</comment>
-    <comment xml:lang="zh_CN">WWF</comment>
-    <comment xml:lang="zh_TW">WWF 文件</comment>
+    <comment xml:lang="zh-CN">WWF</comment>
+    <comment xml:lang="zh-TW">WWF 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.wwf"/>
     <sub-class-of type="application/pdf"/>
@@ -869,9 +897,10 @@
   </mime-type>
   <mime-type type="application/pdf">
     <comment>PDF document</comment>
+    <comment xml:lang="af">PDF-dokument</comment>
     <comment xml:lang="ar">مستند PDF</comment>
     <comment xml:lang="ast">Documentu PDF</comment>
-    <comment xml:lang="be@latin">Dakument PDF</comment>
+    <comment xml:lang="be-Latn">Dakument PDF</comment>
     <comment xml:lang="bg">Документ — PDF</comment>
     <comment xml:lang="ca">document PDF</comment>
     <comment xml:lang="cs">dokument PDF</comment>
@@ -879,13 +908,14 @@
     <comment xml:lang="da">PDF-dokument</comment>
     <comment xml:lang="de">PDF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο PDF</comment>
-    <comment xml:lang="en_GB">PDF document</comment>
+    <comment xml:lang="en-GB">PDF document</comment>
     <comment xml:lang="eo">PDF-dokumento</comment>
     <comment xml:lang="es">documento PDF</comment>
     <comment xml:lang="eu">PDF dokumentua</comment>
     <comment xml:lang="fi">PDF-asiakirja</comment>
     <comment xml:lang="fo">PDF skjal</comment>
     <comment xml:lang="fr">document PDF</comment>
+    <comment xml:lang="fur">document PDF</comment>
     <comment xml:lang="ga">cáipéis PDF</comment>
     <comment xml:lang="gl">documento PDF</comment>
     <comment xml:lang="he">מסמך PDF</comment>
@@ -906,7 +936,7 @@
     <comment xml:lang="oc">document PDF</comment>
     <comment xml:lang="pl">Dokument PDF</comment>
     <comment xml:lang="pt">documento PDF</comment>
-    <comment xml:lang="pt_BR">Documento PDF</comment>
+    <comment xml:lang="pt-BR">Documento PDF</comment>
     <comment xml:lang="ro">Document PDF</comment>
     <comment xml:lang="ru">Документ PDF</comment>
     <comment xml:lang="sk">Dokument PDF</comment>
@@ -917,13 +947,13 @@
     <comment xml:lang="tr">PDF belgesi</comment>
     <comment xml:lang="uk">документ PDF</comment>
     <comment xml:lang="vi">Tài liệu PDF</comment>
-    <comment xml:lang="zh_CN">PDF 文档</comment>
-    <comment xml:lang="zh_TW">PDF 文件</comment>
+    <comment xml:lang="zh-CN">PDF 文档</comment>
+    <comment xml:lang="zh-TW">PDF 文件</comment>
     <acronym>PDF</acronym>
     <expanded-acronym>Portable Document Format</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="%PDF-" type="string" offset="0:1024"/>
+      <match type="string" value="%PDF-" offset="0:1024"/>
     </magic>
     <glob pattern="*.pdf"/>
     <alias type="application/x-pdf"/>
@@ -933,22 +963,24 @@
   </mime-type>
   <mime-type type="application/xspf+xml">
     <comment>XSPF playlist</comment>
+    <comment xml:lang="af">XSPF-speellys</comment>
     <comment xml:lang="ar">قائمة تشغيل XSPF</comment>
     <comment xml:lang="ast">Llista de reproducción XSPF</comment>
-    <comment xml:lang="be@latin">Śpis piesień XSPF</comment>
+    <comment xml:lang="be-Latn">Śpis piesień XSPF</comment>
     <comment xml:lang="bg">Списък за изпълнение — XSPF</comment>
     <comment xml:lang="ca">llista de reproducció XSPF</comment>
     <comment xml:lang="cs">seznam k přehrání XSPF</comment>
     <comment xml:lang="da">XSPF-afspilningsliste</comment>
     <comment xml:lang="de">XSPF-Wiedergabeliste</comment>
     <comment xml:lang="el">Λίστα αναπαραγωγής XSPF</comment>
-    <comment xml:lang="en_GB">XSPF playlist</comment>
+    <comment xml:lang="en-GB">XSPF playlist</comment>
     <comment xml:lang="eo">XSPF-ludlisto</comment>
     <comment xml:lang="es">lista de reproducción XSPF</comment>
     <comment xml:lang="eu">XSPF erreprodukzio-zerrenda</comment>
     <comment xml:lang="fi">XSPF-soittolista</comment>
     <comment xml:lang="fo">XSPF avspælingarlisti</comment>
     <comment xml:lang="fr">liste de lecture XSPF</comment>
+    <comment xml:lang="fur">liste di riproduzion XSPF</comment>
     <comment xml:lang="ga">seinmliosta XSPF</comment>
     <comment xml:lang="gl">lista de reprodución XSPF</comment>
     <comment xml:lang="he">רשימת נגינה XSPF</comment>
@@ -968,7 +1000,7 @@
     <comment xml:lang="oc">lista de lectura XSPF</comment>
     <comment xml:lang="pl">Lista odtwarzania XSPF</comment>
     <comment xml:lang="pt">lista de reprodução XSPF</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução XSPF</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução XSPF</comment>
     <comment xml:lang="ro">Listă XSPF</comment>
     <comment xml:lang="ru">Список воспроизведения XSPF</comment>
     <comment xml:lang="sk">Zoznam skladieb XSPF</comment>
@@ -979,15 +1011,15 @@
     <comment xml:lang="tr">XSPF çalma listesi</comment>
     <comment xml:lang="uk">список програвання XSPF</comment>
     <comment xml:lang="vi">Danh mục nhạc XSPF</comment>
-    <comment xml:lang="zh_CN">XSPF 播放列表</comment>
-    <comment xml:lang="zh_TW">XSPF 播放清單</comment>
+    <comment xml:lang="zh-CN">XSPF 播放列表</comment>
+    <comment xml:lang="zh-TW">XSPF 播放清單</comment>
     <acronym>XSPF</acronym>
     <expanded-acronym>XML Shareable Playlist Format</expanded-acronym>
     <sub-class-of type="application/xml"/>
     <generic-icon name="audio-x-generic"/>
     <magic priority="50">
-      <match value="&lt;playlist version=&quot;1" type="string" offset="0:64"/>
-      <match value="&lt;playlist version='1" type="string" offset="0:64"/>
+      <match type="string" value="&lt;playlist version=&quot;1" offset="0:64"/>
+      <match type="string" value="&lt;playlist version='1" offset="0:64"/>
     </magic>
     <glob pattern="*.xspf"/>
     <root-XML namespaceURI="http://xspf.org/ns/0/" localName="playlist"/>
@@ -995,6 +1027,7 @@
   </mime-type>
   <mime-type type="application/x-windows-themepack">
     <comment>Microsoft Windows theme pack</comment>
+    <comment xml:lang="af">Microsoft Windows-temapak</comment>
     <comment xml:lang="ar">حزمة سمات Microsoft Works</comment>
     <comment xml:lang="ast">Paquete de temes de Microsoft Windows</comment>
     <comment xml:lang="bg">Пакет с тема — Microsoft Windows</comment>
@@ -1003,12 +1036,13 @@
     <comment xml:lang="da">Microsoft Windows-temapakke</comment>
     <comment xml:lang="de">Microsoft-Windows-Themenpaket</comment>
     <comment xml:lang="el">Πακέτο θέματος Microsoft Windows</comment>
-    <comment xml:lang="en_GB">Microsoft Windows theme pack</comment>
+    <comment xml:lang="en-GB">Microsoft Windows theme pack</comment>
     <comment xml:lang="es">paquete de tema para Microsoft Windows</comment>
     <comment xml:lang="eu">Microsoft Windows-en gaiaren paketea</comment>
     <comment xml:lang="fi">Microsoft Windows -teemapaketti</comment>
     <comment xml:lang="fo">Microsoft Windows tema pakki</comment>
     <comment xml:lang="fr">paquet de thèmes Microsoft Windows</comment>
+    <comment xml:lang="fur">pachet temis di Microsoft Windows</comment>
     <comment xml:lang="ga">paca téamaí Microsoft Windows</comment>
     <comment xml:lang="gl">paquete de tema de Microsoft Windows</comment>
     <comment xml:lang="he">חבילת ערכות נושא של Microsoft Windows</comment>
@@ -1027,7 +1061,7 @@
     <comment xml:lang="oc">paquet de tèmas Microsoft Windows</comment>
     <comment xml:lang="pl">Pakiet motywu Microsoft Windows</comment>
     <comment xml:lang="pt">pacote de tema Microsoft Windows</comment>
-    <comment xml:lang="pt_BR">Pacote de temas do Microsoft Windows</comment>
+    <comment xml:lang="pt-BR">Pacote de temas do Microsoft Windows</comment>
     <comment xml:lang="ro">Pachet de teme Microsoft Windows</comment>
     <comment xml:lang="ru">Пакет темы Microsoft Windows</comment>
     <comment xml:lang="sk">Balík tém Microsoft Windows</comment>
@@ -1036,24 +1070,28 @@
     <comment xml:lang="sv">Microsoft Windows-temapaket</comment>
     <comment xml:lang="tr">Microsoft Windows tema paketi</comment>
     <comment xml:lang="uk">пакунок з темою Microsoft Windows</comment>
-    <comment xml:lang="zh_CN">Microsoft Windows 主题包</comment>
-    <comment xml:lang="zh_TW">微軟視窗佈景主題包</comment>
+    <comment xml:lang="zh-CN">Microsoft Windows 主题包</comment>
+    <comment xml:lang="zh-TW">微軟視窗佈景主題包</comment>
     <sub-class-of type="application/vnd.ms-cab-compressed"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.themepack"/>
   </mime-type>
   <mime-type type="audio/x-amzxml">
     <comment>AmazonMP3 download file</comment>
+    <comment xml:lang="af">AmazonMP3-aflaailêer</comment>
     <comment xml:lang="ast">Ficheru de descarga AmazonMP3</comment>
+    <comment xml:lang="bg">Файл за изтегляне — AmazonMP3</comment>
     <comment xml:lang="ca">fitxer baixat d'AmazonMP3</comment>
     <comment xml:lang="cs">soubor stahování AmazonMP3</comment>
     <comment xml:lang="da">AmazonMP3-downloadfil</comment>
     <comment xml:lang="de">AmazonMP3-Herunterladedatei</comment>
     <comment xml:lang="el">Αρχείο λήψης AmazonMP3</comment>
-    <comment xml:lang="en_GB">AmazonMP3 download file</comment>
+    <comment xml:lang="en-GB">AmazonMP3 download file</comment>
     <comment xml:lang="es">archivo de descarga de AmazonMP3</comment>
     <comment xml:lang="eu">AmazonMP3 deskarga fitxategia</comment>
+    <comment xml:lang="fi">AmazonMP3-lataustiedosto</comment>
     <comment xml:lang="fr">fichier téléchargé AmazonMP3</comment>
+    <comment xml:lang="fur">file discjariât AmazonMP3</comment>
     <comment xml:lang="ga">comhad íoslódáilte AmazonMP3</comment>
     <comment xml:lang="gl">Ficheiro de descarga de AmazonMP3</comment>
     <comment xml:lang="he">קובץ הורדת AmazonMP3</comment>
@@ -1069,7 +1107,7 @@
     <comment xml:lang="oc">fichièr telecargat AmazonMP3</comment>
     <comment xml:lang="pl">Pobrany plik AmazonMP3</comment>
     <comment xml:lang="pt">ficheiro transferido AmazonMP3</comment>
-    <comment xml:lang="pt_BR">Arquivo de download AmazonMP3</comment>
+    <comment xml:lang="pt-BR">Arquivo de download AmazonMP3</comment>
     <comment xml:lang="ru">Файл загрузки AmazonMP3</comment>
     <comment xml:lang="sk">Stiahnutý súbor AmazonMP3 </comment>
     <comment xml:lang="sl">Datoteka prenosa AmazonMP3</comment>
@@ -1077,12 +1115,13 @@
     <comment xml:lang="sv">AmazonMP3-hämtningsfil</comment>
     <comment xml:lang="tr">AmazonMP3 indirme dosyası</comment>
     <comment xml:lang="uk">файл завантаження AmazonMP3</comment>
-    <comment xml:lang="zh_CN">AmazonMP3 下载文件</comment>
-    <comment xml:lang="zh_TW">AmazonMP3 下載檔</comment>
+    <comment xml:lang="zh-CN">AmazonMP3 下载文件</comment>
+    <comment xml:lang="zh-TW">AmazonMP3 下載檔</comment>
     <glob pattern="*.amz"/>
   </mime-type>
   <mime-type type="audio/x-gsm">
     <comment>GSM 06.10 audio</comment>
+    <comment xml:lang="af">GSM 06.10-oudio</comment>
     <comment xml:lang="ar">GSM 06.10 سمعي</comment>
     <comment xml:lang="ast">Audiu GSM 6.10</comment>
     <comment xml:lang="bg">Аудио — GSM 06.10</comment>
@@ -1091,12 +1130,13 @@
     <comment xml:lang="da">GSM 06.10-lyd</comment>
     <comment xml:lang="de">GSM-06.10-Audio</comment>
     <comment xml:lang="el">Ήχος GSM 06.10</comment>
-    <comment xml:lang="en_GB">GSM 06.10 audio</comment>
-    <comment xml:lang="es">sonido GSM 06.10</comment>
+    <comment xml:lang="en-GB">GSM 06.10 audio</comment>
+    <comment xml:lang="es">audio GSM 06.10</comment>
     <comment xml:lang="eu">GSM 06.10 audioa</comment>
     <comment xml:lang="fi">GSM 06.10 -ääni</comment>
     <comment xml:lang="fo">GSM 06.10 ljóður</comment>
     <comment xml:lang="fr">audio GSM 06.10</comment>
+    <comment xml:lang="fur">audio GSM 06.10</comment>
     <comment xml:lang="ga">fuaim GSM 06.10</comment>
     <comment xml:lang="gl">son de GSM 06.10</comment>
     <comment xml:lang="he">שמע GSM 06.10</comment>
@@ -1115,7 +1155,7 @@
     <comment xml:lang="oc">àudio GSM 06.10</comment>
     <comment xml:lang="pl">Plik dźwiękowy GSM 06.10</comment>
     <comment xml:lang="pt">áudio GSM 06.10</comment>
-    <comment xml:lang="pt_BR">Áudio GSM 06.10</comment>
+    <comment xml:lang="pt-BR">Áudio GSM 06.10</comment>
     <comment xml:lang="ro">GSM 06.10 audio</comment>
     <comment xml:lang="ru">Аудио GSM 06.10</comment>
     <comment xml:lang="sk">Zvuk GSM 06.10</comment>
@@ -1125,85 +1165,65 @@
     <comment xml:lang="tr">GSM 06.10 ses dosyası</comment>
     <comment xml:lang="uk">звук GSM 06.10</comment>
     <comment xml:lang="vi">Âm thanh GSM 06.10</comment>
-    <comment xml:lang="zh_CN">GSM 06.10 音频</comment>
-    <comment xml:lang="zh_TW">GSM 06.10 音訊</comment>
+    <comment xml:lang="zh-CN">GSM 06.10 音频</comment>
+    <comment xml:lang="zh-TW">GSM 06.10 音訊</comment>
     <acronym>GSM</acronym>
     <expanded-acronym>Global System for Mobile communications</expanded-acronym>
     <glob pattern="*.gsm"/>
   </mime-type>
   <mime-type type="audio/x-iriver-pla">
-    <comment>iRiver Playlist</comment>
-    <comment xml:lang="ar">قائمة تشغيل iRiver</comment>
-    <comment xml:lang="ast">Llista de reproducción iRiver</comment>
-    <comment xml:lang="be@latin">Śpis piesień iRiver</comment>
+    <comment>iRiver playlist</comment>
     <comment xml:lang="bg">Списък за изпълнение — iRiver</comment>
     <comment xml:lang="ca">llista de reproducció iRiver</comment>
-    <comment xml:lang="cs">seznam k přehrání iRiver</comment>
     <comment xml:lang="da">iRiver-afspilningsliste</comment>
     <comment xml:lang="de">iRiver-Wiedergabeliste</comment>
-    <comment xml:lang="el">Λίστα αναπαραγωγής iRiver</comment>
-    <comment xml:lang="en_GB">iRiver Playlist</comment>
-    <comment xml:lang="eo">iRiver-ludlisto</comment>
+    <comment xml:lang="en-GB">iRiver playlist</comment>
     <comment xml:lang="es">lista de reproducción de iRiver</comment>
     <comment xml:lang="eu">iRiver erreprodukzio-zerrenda</comment>
     <comment xml:lang="fi">iRiver-soittolista</comment>
-    <comment xml:lang="fo">iRiver avspælingarlisti</comment>
     <comment xml:lang="fr">liste de lecture iRiver</comment>
-    <comment xml:lang="ga">seinmliosta iRiver</comment>
-    <comment xml:lang="gl">lista de reprodución de iRiver</comment>
-    <comment xml:lang="he">רשימת נגינה של iRiver</comment>
     <comment xml:lang="hr">iRiver popis izvođenja</comment>
     <comment xml:lang="hu">iRiver lejátszólista</comment>
-    <comment xml:lang="ia">Lista de selection iRiver</comment>
-    <comment xml:lang="id">iRiver Playlist</comment>
+    <comment xml:lang="id">daftar putar iRiver</comment>
     <comment xml:lang="it">Playlist iRiver</comment>
-    <comment xml:lang="ja">iRiver 再生リスト</comment>
     <comment xml:lang="kk">iRiver ойнау тізімі</comment>
-    <comment xml:lang="ko">iRiver 재생 목록</comment>
-    <comment xml:lang="lt">iRiver grojaraštis</comment>
-    <comment xml:lang="lv">iRiver repertuārs</comment>
-    <comment xml:lang="nb">iRiver-spilleliste</comment>
-    <comment xml:lang="nl">iRiver-afspeellijst</comment>
-    <comment xml:lang="nn">iRiver speleliste</comment>
-    <comment xml:lang="oc">lista de lectura iRiver</comment>
+    <comment xml:lang="ko">아이리버 재생 목록</comment>
     <comment xml:lang="pl">Lista odtwarzania iRiver</comment>
-    <comment xml:lang="pt">lista de reprodução iRiver</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução do iRiver</comment>
-    <comment xml:lang="ro">Listă iRiver</comment>
+    <comment xml:lang="pt">lista de reprodução do iRiver</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução do iRiver</comment>
     <comment xml:lang="ru">Список воспроизведения iRiver</comment>
     <comment xml:lang="sk">Zoznam skladieb iRiver</comment>
     <comment xml:lang="sl">Seznam predvajanja iRiver</comment>
-    <comment xml:lang="sq">Listë titujsh iRiver</comment>
-    <comment xml:lang="sr">иРивер списак нумера</comment>
     <comment xml:lang="sv">iRiver-spellista</comment>
-    <comment xml:lang="tr">iRiver Çalma Listesini</comment>
-    <comment xml:lang="uk">список програвання iRiver</comment>
-    <comment xml:lang="vi">danh mục nhạc iRiver</comment>
-    <comment xml:lang="zh_CN">iRiver 播放列表</comment>
-    <comment xml:lang="zh_TW">iRiver 播放清單</comment>
+    <comment xml:lang="tr">iRiver çalma listesi</comment>
+    <comment xml:lang="uk">список відтворення iRiver</comment>
+    <comment xml:lang="zh-CN">iRiver 播放列表</comment>
+    <comment xml:lang="zh-TW">iRiver 播放清單</comment>
     <magic priority="50">
-      <match value="iriver UMS PLA" type="string" offset="4"/>
+      <match type="string" value="iriver UMS PLA" offset="4"/>
     </magic>
     <glob pattern="*.pla"/>
   </mime-type>
   <mime-type type="application/pgp-encrypted">
     <comment>PGP/MIME-encrypted message header</comment>
+    <comment xml:lang="af">Kop van PGP/MIME-geënkripteerde boodskap</comment>
     <comment xml:lang="ar">ترويسة رسالة PGP/MIME-مشفرة</comment>
     <comment xml:lang="ast">Testera de mensaxe cifrada en PGP/MIME</comment>
-    <comment xml:lang="be@latin">Zahałovak paviedamleńnia, zašyfravany ŭ PGP/MIME</comment>
+    <comment xml:lang="be-Latn">Zahałovak paviedamleńnia, zašyfravany ŭ PGP/MIME</comment>
     <comment xml:lang="bg">Заглавна част на шифрирано съобщение — PGP/MIME</comment>
     <comment xml:lang="ca">capçalera de missatge amb xifrat PGP/MIME</comment>
     <comment xml:lang="cs">záhlaví zprávy zašifrované pomocí PGP/MIME</comment>
     <comment xml:lang="da">PGP-/MIME-krypteret meddelelseshoved</comment>
     <comment xml:lang="de">PGP/MIME-verschlüsselter Nachrichtenkopf</comment>
     <comment xml:lang="el">Κεφαλίδα μηνύματος κρυπτογραφημένου κατά PGP/MIME</comment>
-    <comment xml:lang="en_GB">PGP/MIME-encrypted message header</comment>
+    <comment xml:lang="en-GB">PGP/MIME-encrypted message header</comment>
     <comment xml:lang="eo">PGP/MIME-ĉifrita ĉapo de mesaĝo</comment>
     <comment xml:lang="es">cabecera de mensaje cifrado PGP/MIME</comment>
-    <comment xml:lang="eu">PGP/MIME enkriptatutako mezu-goiburua</comment>
+    <comment xml:lang="eu">PGP/MIME zifratutako mezu-goiburua</comment>
     <comment xml:lang="fi">PGP/MIME-salattu viestiotsikko</comment>
     <comment xml:lang="fo">PGP/MIME-encrypted boð tekshøvd</comment>
     <comment xml:lang="fr">en-tête de message codé PGP/MIME</comment>
+    <comment xml:lang="fur">intestazion messaç cifrât in PGP/MIME</comment>
     <comment xml:lang="ga">ceanntásc teachtaireachta ionchódaithe le PGP/MIME</comment>
     <comment xml:lang="gl">cabeceira de mensaxe cifrado PGP/MIME</comment>
     <comment xml:lang="he">כותר של קובץ מוצפן מסוג PGP/MIME</comment>
@@ -1224,7 +1244,7 @@
     <comment xml:lang="oc">entèsta de messatge encodat PGP/MIME</comment>
     <comment xml:lang="pl">Nagłówek listu zaszyfrowanego PGP/MIME</comment>
     <comment xml:lang="pt">cabeçalho de mensagem encriptada com PGP/MIME</comment>
-    <comment xml:lang="pt_BR">Cabeçalho de mensagem criptografada PGP/MIME</comment>
+    <comment xml:lang="pt-BR">Cabeçalho de mensagem criptografada PGP/MIME</comment>
     <comment xml:lang="ro">Antet de mesaj encriptat PGP/MIME</comment>
     <comment xml:lang="ru">Заголовок сообщения, зашифрованный PGP/MIME</comment>
     <comment xml:lang="sk">Hlavičke správy zašifrovaná pomocou PGP/MIME</comment>
@@ -1235,24 +1255,25 @@
     <comment xml:lang="tr">PGP/MIME-şifreli ileti başlığı</comment>
     <comment xml:lang="uk">заголовок шифрованого PGP/MIME повідомлення</comment>
     <comment xml:lang="vi">Phần đầu thông điệp đã mật mã bằng PGP/MIME</comment>
-    <comment xml:lang="zh_CN">PGP/MIME 加密的信件头</comment>
-    <comment xml:lang="zh_TW">PGP/MIME 加密訊息標頭</comment>
+    <comment xml:lang="zh-CN">PGP/MIME 加密的信件头</comment>
+    <comment xml:lang="zh-TW">PGP/MIME 加密訊息標頭</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="-----BEGIN PGP MESSAGE-----" type="string" offset="0"/>
+      <match type="string" value="-----BEGIN PGP MESSAGE-----" offset="0"/>
     </magic>
     <glob pattern="*.pgp"/>
     <glob pattern="*.gpg"/>
-    <glob weight="10" pattern="*.asc"/>
+    <glob pattern="*.asc" weight="10"/>
     <alias type="application/pgp"/>
   </mime-type>
   <mime-type type="application/pgp-keys">
     <comment>PGP keys</comment>
+    <comment xml:lang="af">PGP-sleutels</comment>
     <comment xml:lang="ar">مفاتيح PGP</comment>
     <comment xml:lang="ast">Claves PGP</comment>
     <comment xml:lang="az">PGP açarları</comment>
-    <comment xml:lang="be@latin">Klučy PGP</comment>
+    <comment xml:lang="be-Latn">Klučy PGP</comment>
     <comment xml:lang="bg">Ключове — PGP</comment>
     <comment xml:lang="ca">claus PGP</comment>
     <comment xml:lang="cs">klíče PGP</comment>
@@ -1260,13 +1281,14 @@
     <comment xml:lang="da">PGP-nøgler</comment>
     <comment xml:lang="de">PGP-Schlüssel</comment>
     <comment xml:lang="el">Κλειδιά PGP</comment>
-    <comment xml:lang="en_GB">PGP keys</comment>
+    <comment xml:lang="en-GB">PGP keys</comment>
     <comment xml:lang="eo">PGP-ŝlosiloj</comment>
     <comment xml:lang="es">claves PGP</comment>
     <comment xml:lang="eu">PGP giltzak</comment>
     <comment xml:lang="fi">PGP-avainrengas</comment>
     <comment xml:lang="fo">PGP lyklar</comment>
     <comment xml:lang="fr">clés PGP</comment>
+    <comment xml:lang="fur">clâfs PGP</comment>
     <comment xml:lang="ga">eochracha PGP</comment>
     <comment xml:lang="gl">Chaves PGP</comment>
     <comment xml:lang="he">מפתחות PGP</comment>
@@ -1287,7 +1309,7 @@
     <comment xml:lang="oc">claus PGP</comment>
     <comment xml:lang="pl">Klucze PGP</comment>
     <comment xml:lang="pt">chaves PGP</comment>
-    <comment xml:lang="pt_BR">Chaves PGP</comment>
+    <comment xml:lang="pt-BR">Chaves PGP</comment>
     <comment xml:lang="ro">Chei PGP</comment>
     <comment xml:lang="ru">Ключи PGP</comment>
     <comment xml:lang="sk">Kľúče PGP</comment>
@@ -1298,43 +1320,46 @@
     <comment xml:lang="tr">PGP anahtarları</comment>
     <comment xml:lang="uk">ключі PGP</comment>
     <comment xml:lang="vi">Khoá PGP</comment>
-    <comment xml:lang="zh_CN">PGP 密钥</comment>
-    <comment xml:lang="zh_TW">PGP 鑰匙</comment>
+    <comment xml:lang="zh-CN">PGP 密钥</comment>
+    <comment xml:lang="zh-TW">PGP 金鑰</comment>
     <acronym>PGP</acronym>
     <expanded-acronym>Pretty Good Privacy</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="-----BEGIN PGP PUBLIC KEY BLOCK-----" type="string" offset="0"/>
-      <match value="-----BEGIN PGP PRIVATE KEY BLOCK-----" type="string" offset="0"/>
-      <match value="0x9501" type="big16" offset="0"/>
-      <match value="0x9500" type="big16" offset="0"/>
-      <match value="0x9900" type="big16" offset="0"/>
-      <match value="0x9901" type="big16" offset="0"/>
+      <match type="string" value="-----BEGIN PGP PUBLIC KEY BLOCK-----" offset="0"/>
+      <match type="string" value="-----BEGIN PGP PRIVATE KEY BLOCK-----" offset="0"/>
+      <match type="big16" value="0x9501" offset="0"/>
+      <match type="big16" value="0x9500" offset="0"/>
+      <match type="big16" value="0x9900" offset="0"/>
+      <match type="big16" value="0x9901" offset="0"/>
     </magic>
     <glob pattern="*.skr"/>
     <glob pattern="*.pkr"/>
-    <glob weight="10" pattern="*.asc"/>
+    <glob pattern="*.asc" weight="10"/>
     <glob pattern="*.pgp"/>
     <glob pattern="*.gpg"/>
+    <glob pattern="*.key"/>
   </mime-type>
   <mime-type type="application/pgp-signature">
     <comment>detached OpenPGP signature</comment>
+    <comment xml:lang="af">losstaande OpenPGP-handtekening</comment>
     <comment xml:lang="ar">إمضاء OpenPGP مفصول</comment>
-    <comment xml:lang="be@latin">adłučany podpis OpenPGP</comment>
-    <comment xml:lang="bg">Отделен подпис — OpenPGP</comment>
+    <comment xml:lang="be-Latn">adłučany podpis OpenPGP</comment>
+    <comment xml:lang="bg">Отделѐн подпис — OpenPGP</comment>
     <comment xml:lang="ca">signatura OpenPGP abstreta</comment>
     <comment xml:lang="cs">oddělený podpis OpenPGP</comment>
     <comment xml:lang="da">frigjort OpenPGP-signatur</comment>
     <comment xml:lang="de">isolierte OpenPGP-Signatur</comment>
     <comment xml:lang="el">Αποκομμένη υπογραφή OpenPGP</comment>
-    <comment xml:lang="en_GB">detached OpenPGP signature</comment>
+    <comment xml:lang="en-GB">detached OpenPGP signature</comment>
     <comment xml:lang="eo">dekroĉa OpenPGP-subskribo</comment>
     <comment xml:lang="es">firma OpenPGP separada</comment>
     <comment xml:lang="eu">desuzturtako OpenPGP sinadura</comment>
     <comment xml:lang="fi">erillinen OpenPGP-allekirjoitus</comment>
     <comment xml:lang="fo">skild OpenPGP undirskrift</comment>
     <comment xml:lang="fr">signature OpenPGP détachée</comment>
+    <comment xml:lang="fur">firme OpenPGP distacade</comment>
     <comment xml:lang="ga">síniú OpenPGP scartha</comment>
     <comment xml:lang="gl">sinatura de OpenPGP independente</comment>
     <comment xml:lang="he">חתימת OpenPGP מנותקת</comment>
@@ -1355,7 +1380,7 @@
     <comment xml:lang="oc">signatura OpenPGP destacada</comment>
     <comment xml:lang="pl">Oddzielony podpis OpenPGP</comment>
     <comment xml:lang="pt">assinatura OpenPGP solta</comment>
-    <comment xml:lang="pt_BR">Assinatura OpenPGP destacada</comment>
+    <comment xml:lang="pt-BR">Assinatura OpenPGP destacada</comment>
     <comment xml:lang="ro">semnătură OpenPGP detașată</comment>
     <comment xml:lang="ru">Отсоединённая подпись OpenPGP</comment>
     <comment xml:lang="sk">Oddelený podpis OpenPGP</comment>
@@ -1366,57 +1391,48 @@
     <comment xml:lang="tr">müstakil OpenPGP imzası</comment>
     <comment xml:lang="uk">відокремлений OpenPGP підпис</comment>
     <comment xml:lang="vi">chữ ký OpenPGP tách rời</comment>
-    <comment xml:lang="zh_CN">分离的 OpenPGP 签名</comment>
-    <comment xml:lang="zh_TW">分離的 OpenPGP 簽章</comment>
+    <comment xml:lang="zh-CN">分离的 OpenPGP 签名</comment>
+    <comment xml:lang="zh-TW">分離的 OpenPGP 簽章</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="-----BEGIN PGP SIGNATURE-----" type="string" offset="0"/>
+      <match type="string" value="-----BEGIN PGP SIGNATURE-----" offset="0"/>
     </magic>
-    <glob weight="10" pattern="*.asc"/>
+    <glob pattern="*.asc" weight="10"/>
     <glob pattern="*.sig"/>
     <glob pattern="*.pgp"/>
     <glob pattern="*.gpg"/>
   </mime-type>
-  
+  <!-- defined in RFC 2311 -->
   <mime-type type="application/pkcs7-mime">
-    <comment>PKCS#7 Message or Certificate</comment>
-    <comment xml:lang="ast">Mensaxe o certificáu PKCS#7</comment>
-    <comment xml:lang="ca">missatge o certificat PKCS#7</comment>
-    <comment xml:lang="cs">zpráva nebo certifikát PKCS#7</comment>
-    <comment xml:lang="da">PKCS#7-besked eller certifikat</comment>
-    <comment xml:lang="de">PKCS#7 Nachricht oder Zertifikat</comment>
-    <comment xml:lang="el">Μήνυμα ή πιστοποιητικό PKCS#7</comment>
-    <comment xml:lang="en_GB">PKCS#7 Message or Certificate</comment>
-    <comment xml:lang="es">mensaje o certificado PKCS#7</comment>
-    <comment xml:lang="eu">PKCS#7 mezu edo zertifikazioa</comment>
-    <comment xml:lang="fi">PKCS#7-viesti tai -varmenne</comment>
-    <comment xml:lang="fr">Message ou certificat PKCS#7</comment>
-    <comment xml:lang="ga">Teachtaireacht nó Teastas PKCS#7</comment>
-    <comment xml:lang="gl">Mensaxe ou certificado PKCS#7</comment>
-    <comment xml:lang="he">הודעה או אישור מסוג PKCS#7</comment>
-    <comment xml:lang="hr">PKCS#7 poruka ili vjerodajnica</comment>
-    <comment xml:lang="hu">PKCS#7 üzenet vagy tanúsítvány</comment>
-    <comment xml:lang="ia">Message o certificato PKCS#7</comment>
-    <comment xml:lang="id">Sertifikat atau Pesan PKCS#7</comment>
-    <comment xml:lang="it">Messaggio o certificato PKCS#7</comment>
-    <comment xml:lang="ja">PKCS#7 メッセージまたは証明書</comment>
-    <comment xml:lang="kk">PKCS#7 хабарламасы не сертификаты</comment>
-    <comment xml:lang="ko">PKCS#7 메시지 또는 인증서</comment>
-    <comment xml:lang="lv">PKCS#7 ziņojums vai sertifikāts</comment>
-    <comment xml:lang="oc">Messatge o certificat PKCS#7</comment>
-    <comment xml:lang="pl">Wiadomość lub certyfikat PKCS#7</comment>
-    <comment xml:lang="pt">Mensagem ou certificado PKCS#7</comment>
-    <comment xml:lang="pt_BR">Certificado ou Mensagem PKCS#7</comment>
-    <comment xml:lang="ru">Сообщение или сертификат PKCS#7</comment>
-    <comment xml:lang="sk">Správa alebo certifikát PKCS#7</comment>
-    <comment xml:lang="sl">Sporočilo ali dovoljenje PKCS#7</comment>
-    <comment xml:lang="sr">ПКЦС#7 порука или уверење</comment>
-    <comment xml:lang="sv">PKCS#7-meddelande eller -certifikat</comment>
-    <comment xml:lang="tr">PKCS#7 İletisi veya Sertifikası</comment>
-    <comment xml:lang="uk">повідомлення або сертифікат PKCS#7</comment>
-    <comment xml:lang="zh_CN">PKCS#7 消息或证书</comment>
-    <comment xml:lang="zh_TW">PKCS#7 訊息或憑證</comment>
+    <comment>PKCS#7 file</comment>
+    <comment xml:lang="bg">Файл за PKCS#7</comment>
+    <comment xml:lang="ca">fitxer PKCS#7</comment>
+    <comment xml:lang="da">PKCS#7-fil</comment>
+    <comment xml:lang="de">PKCS#7-Datei</comment>
+    <comment xml:lang="en-GB">PKCS#7 file</comment>
+    <comment xml:lang="es">archivo PKCS#7</comment>
+    <comment xml:lang="eu">PKCS#7 fitxategia</comment>
+    <comment xml:lang="fi">PKCS#7-tiedosto</comment>
+    <comment xml:lang="fr">fichier PKCS#7</comment>
+    <comment xml:lang="hr">PKCS#7 datoteka</comment>
+    <comment xml:lang="hu">PKCS#7 fájl</comment>
+    <comment xml:lang="id">Berkas PKCS#7</comment>
+    <comment xml:lang="it">File PKCS#7</comment>
+    <comment xml:lang="kk">PKCS#7 файлы</comment>
+    <comment xml:lang="ko">PKCS#7 파일</comment>
+    <comment xml:lang="lt">PKCS#7 failas</comment>
+    <comment xml:lang="pl">Plik PKCS#7</comment>
+    <comment xml:lang="pt">ficheiro PKCS#7</comment>
+    <comment xml:lang="pt-BR">Arquivo PKCS#7</comment>
+    <comment xml:lang="ru">Файл PKCS#7</comment>
+    <comment xml:lang="sk">Súbor PKCS#7</comment>
+    <comment xml:lang="sl">Datoteka PKCS#7</comment>
+    <comment xml:lang="sv">PKCS#7-fil</comment>
+    <comment xml:lang="tr">PKCS#7 dosyası</comment>
+    <comment xml:lang="uk">файл PKCS#7</comment>
+    <comment xml:lang="zh-CN">PKCS#7 文件</comment>
+    <comment xml:lang="zh-TW">PKCS#7 檔案</comment>
     <acronym>PKCS</acronym>
     <expanded-acronym>Public-Key Cryptography Standards</expanded-acronym>
     <generic-icon name="text-x-generic"/>
@@ -1425,21 +1441,23 @@
   </mime-type>
   <mime-type type="application/pkcs7-signature">
     <comment>detached S/MIME signature</comment>
+    <comment xml:lang="af">losstaande S/MIME-handtekening</comment>
     <comment xml:lang="ar">إمضاء S/MIME مفصول</comment>
-    <comment xml:lang="be@latin">adłučany podpis S/MIME</comment>
-    <comment xml:lang="bg">Отделен подпис — S/MIME</comment>
+    <comment xml:lang="be-Latn">adłučany podpis S/MIME</comment>
+    <comment xml:lang="bg">Отделѐн подпис — S/MIME</comment>
     <comment xml:lang="ca">signatura S/MIME abstreta</comment>
     <comment xml:lang="cs">oddělený podpis S/MIME</comment>
     <comment xml:lang="da">frigjort S/MIME-signatur</comment>
     <comment xml:lang="de">isolierte S/MIME-Signatur</comment>
     <comment xml:lang="el">Αποκομμένη υπογραφή S/MIME</comment>
-    <comment xml:lang="en_GB">detached S/MIME signature</comment>
+    <comment xml:lang="en-GB">detached S/MIME signature</comment>
     <comment xml:lang="eo">dekroĉa S/MIME-subskribo</comment>
     <comment xml:lang="es">firma S/MIME separada</comment>
     <comment xml:lang="eu">desuzturtako S/MIME sinadura</comment>
     <comment xml:lang="fi">erillinen S/MIME-allekirjoitus</comment>
     <comment xml:lang="fo">skild S/MIME undirskrift</comment>
     <comment xml:lang="fr">signature S/MIME détachée</comment>
+    <comment xml:lang="fur">firme S/MIME distacade</comment>
     <comment xml:lang="ga">síniú S/MIME scartha</comment>
     <comment xml:lang="gl">sinatura S/MIME independente</comment>
     <comment xml:lang="he">חתימת S/MIME מנותקת</comment>
@@ -1460,7 +1478,7 @@
     <comment xml:lang="oc">signatura S/MIME destacada</comment>
     <comment xml:lang="pl">Oddzielony podpis S/MIME</comment>
     <comment xml:lang="pt">assinatura S/MIME solta</comment>
-    <comment xml:lang="pt_BR">Assinatura S/MIME destacada</comment>
+    <comment xml:lang="pt-BR">Assinatura S/MIME destacada</comment>
     <comment xml:lang="ro">semnătură S/MIME detașată</comment>
     <comment xml:lang="ru">Отсоединённая подпись S/MIME</comment>
     <comment xml:lang="sk">Oddelený podpis S/MIME</comment>
@@ -1471,8 +1489,8 @@
     <comment xml:lang="tr">müstakil S/MIME imzası</comment>
     <comment xml:lang="uk">відокремлений S/MIME підпис</comment>
     <comment xml:lang="vi">chữ ký S/MIME tách rời</comment>
-    <comment xml:lang="zh_CN">分离的 S/MIME 签名</comment>
-    <comment xml:lang="zh_TW">分離的 S/MIME 簽章</comment>
+    <comment xml:lang="zh-CN">分离的 S/MIME 签名</comment>
+    <comment xml:lang="zh-TW">分離的 S/MIME 簽章</comment>
     <acronym>S/MIME</acronym>
     <expanded-acronym>Secure/Multipurpose Internet Mail Extensions</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -1481,19 +1499,21 @@
   </mime-type>
   <mime-type type="application/pkcs8">
     <comment>PKCS#8 private key</comment>
+    <comment xml:lang="af">PKCS#8- private sleutel</comment>
     <comment xml:lang="ar">رزمة الشهادة PKCS#8</comment>
-    <comment xml:lang="bg">Ключ, частен — PKCS#8</comment>
+    <comment xml:lang="bg">Ключ — PKCS#8, частен</comment>
     <comment xml:lang="ca">clau privada PKCS#8</comment>
     <comment xml:lang="cs">soukromý klíč PKCS#8</comment>
     <comment xml:lang="da">PKCS#8-privat nøgle</comment>
-    <comment xml:lang="de">PKCS#8 Geheimer Schlüssel</comment>
+    <comment xml:lang="de">PKCS#8 privater Schlüssel</comment>
     <comment xml:lang="el">Ιδιωτικό κλειδί PKCS#8</comment>
-    <comment xml:lang="en_GB">PKCS#8 private key</comment>
+    <comment xml:lang="en-GB">PKCS#8 private key</comment>
     <comment xml:lang="es">clave privada PCKS#8</comment>
     <comment xml:lang="eu">PKCS#8 gako pribatua</comment>
     <comment xml:lang="fi">PKCS#8 yksityinen avain</comment>
     <comment xml:lang="fo">PKCS#8 privatur lykil</comment>
     <comment xml:lang="fr">clé privée PKCS#8</comment>
+    <comment xml:lang="fur">clâf privade PKCS#8</comment>
     <comment xml:lang="ga">eochair phríobháideach PKCS#8</comment>
     <comment xml:lang="gl">Chave privada PKCS#8</comment>
     <comment xml:lang="he">מפתח פרטי של PKCS#8</comment>
@@ -1511,7 +1531,7 @@
     <comment xml:lang="oc">clau privada PKCS#8</comment>
     <comment xml:lang="pl">Klucz prywatny PKCS#8</comment>
     <comment xml:lang="pt">chave privada PKCS#8</comment>
-    <comment xml:lang="pt_BR">Chave privada PKCS#8</comment>
+    <comment xml:lang="pt-BR">Chave privada PKCS#8</comment>
     <comment xml:lang="ro">Cheie privată PKCS#8</comment>
     <comment xml:lang="ru">Личный ключ PKCS#8</comment>
     <comment xml:lang="sk">Súkromný kľúč PKCS#8</comment>
@@ -1520,34 +1540,66 @@
     <comment xml:lang="sv">Privat PKCS#8-nyckel</comment>
     <comment xml:lang="tr">PKCS#8 özel anahtarı</comment>
     <comment xml:lang="uk">закритий ключ PKCS#8</comment>
-    <comment xml:lang="zh_CN">PKCS#8 私钥</comment>
-    <comment xml:lang="zh_TW">PKCS#8 私人金鑰</comment>
+    <comment xml:lang="zh-CN">PKCS#8 私钥</comment>
+    <comment xml:lang="zh-TW">PKCS#8 私人金鑰</comment>
     <acronym>PKCS</acronym>
     <expanded-acronym>Public-Key Cryptography Standards</expanded-acronym>
     <glob pattern="*.p8"/>
   </mime-type>
   <mime-type type="application/pkcs8-encrypted">
     <comment>PKCS#8 private key (encrypted)</comment>
+    <comment xml:lang="af">PKCS#8- private sleutel (geënkripteer)</comment>
+    <comment xml:lang="bg">Ключ — PKCS#8, частен, шифриран</comment>
+    <comment xml:lang="ca">clau privada PKCS#8 (xifrada)</comment>
+    <comment xml:lang="cs">soukromý klíč PKCS#8 (zašifrovaný)</comment>
+    <comment xml:lang="da">PKCS#8-privat nøgle (krypteret)</comment>
+    <comment xml:lang="de">PKCS#8 privater Schlüssel (verschlüsselt)</comment>
+    <comment xml:lang="en-GB">PKCS#8 private key (encrypted)</comment>
+    <comment xml:lang="es">clave privada PKCS#8 (cifrada)</comment>
+    <comment xml:lang="eu">PKCS#8 gako pribatua (zifratua)</comment>
+    <comment xml:lang="fi">PKCS#8 yksityinen avain (salattu)</comment>
+    <comment xml:lang="fr">clé privée PKCS#8 (chiffrée)</comment>
+    <comment xml:lang="fur">clâf privade PKCS#8 (cifrade)</comment>
+    <comment xml:lang="ga">eochair phríobháideach PKCS#8 (criptithe)</comment>
+    <comment xml:lang="hr">PKCS#8 privatni ključ (šifriran)</comment>
+    <comment xml:lang="hu">PKCS#8 személyes kulcs (titkosított)</comment>
+    <comment xml:lang="id">Kunci privat PKCS#8 (terenkripsi)</comment>
+    <comment xml:lang="it">Chiave privata PKCS#8 (cifrata)</comment>
+    <comment xml:lang="kk">PKCS#8 жеке кілті (шифрленген)</comment>
+    <comment xml:lang="ko">PKCS#8 개인 키(암호화됨)</comment>
+    <comment xml:lang="pl">Klucz prywatny PKCS#8 (zaszyfrowany)</comment>
+    <comment xml:lang="pt">chave privada PKCS#8 (encriptada)</comment>
+    <comment xml:lang="pt-BR">Chave privada PKCS#8 (criptografada)</comment>
+    <comment xml:lang="ru">Личный ключ PKCS#8 (зашифрованный)</comment>
+    <comment xml:lang="sk">Súkromný kľúč PKCS#8 (šifrovaný)</comment>
+    <comment xml:lang="sl">Zasebni ključ PKCS#8 (širfirano)</comment>
+    <comment xml:lang="sv">Privat PKCS#8-nyckel (krypterad)</comment>
+    <comment xml:lang="tr">PKCS#8 özel anahtar (şifrelenmiş)</comment>
+    <comment xml:lang="uk">закритий ключ PKCS#8 (зашифрований)</comment>
+    <comment xml:lang="zh-CN">PKCS#8 私钥（已加密）</comment>
+    <comment xml:lang="zh-TW">PKCS#8 私人金鑰 (加密)</comment>
     <acronym>PKCS</acronym>
     <expanded-acronym>Public-Key Cryptography Standards</expanded-acronym>
     <glob pattern="*.p8e"/>
   </mime-type>
   <mime-type type="application/pkcs10">
     <comment>PKCS#10 certification request</comment>
+    <comment xml:lang="af">PKCS#10-sertifiseringsversoek</comment>
     <comment xml:lang="ar">طلب شهادة PKCS#10</comment>
-    <comment xml:lang="be@latin">Zapyt sertyfikacyi PKCS#10</comment>
+    <comment xml:lang="be-Latn">Zapyt sertyfikacyi PKCS#10</comment>
     <comment xml:lang="bg">Заявка за сертификат — PKCS#10</comment>
     <comment xml:lang="ca">sol·licitud de certificació PKCS#10</comment>
     <comment xml:lang="cs">žádost o certifikát PKCS#10</comment>
     <comment xml:lang="da">PKCS#10-certifikatanmodning</comment>
     <comment xml:lang="de">PKCS#10-Zertifikatanfrage</comment>
     <comment xml:lang="el">Αίτηση πιστοποίησης PKCS#10</comment>
-    <comment xml:lang="en_GB">PKCS#10 certification request</comment>
+    <comment xml:lang="en-GB">PKCS#10 certification request</comment>
     <comment xml:lang="es">petición de certificados PKCS#10</comment>
     <comment xml:lang="eu">PKCS#10 ziurtagirien eskaera</comment>
     <comment xml:lang="fi">PKCS#10-varmennepyyntö</comment>
     <comment xml:lang="fo">PKCS#10 váttanarumbøn</comment>
     <comment xml:lang="fr">requête de certification PKCS#10</comment>
+    <comment xml:lang="fur">richieste certificazion PKCS#10</comment>
     <comment xml:lang="ga">iarratas dheimhniúchán PKCS#10</comment>
     <comment xml:lang="gl">Solicitude de certificado PKCS#10</comment>
     <comment xml:lang="he">בקשה מוסמכת PLCS#10</comment>
@@ -1567,7 +1619,7 @@
     <comment xml:lang="oc">requèsta de certificacion PKCS#10</comment>
     <comment xml:lang="pl">Żądanie certyfikatu PKCS#10</comment>
     <comment xml:lang="pt">pedido de certificação PKCS#10</comment>
-    <comment xml:lang="pt_BR">Pedido de certificação PKCS#12</comment>
+    <comment xml:lang="pt-BR">Pedido de certificação PKCS#12</comment>
     <comment xml:lang="ro">Cerere de certificat PKCS#10</comment>
     <comment xml:lang="ru">Запрос сертификации PKCS#10</comment>
     <comment xml:lang="sk">Požiadavka na certifikát PKCS#10</comment>
@@ -1578,8 +1630,8 @@
     <comment xml:lang="tr">PKCS#10 sertifika isteği</comment>
     <comment xml:lang="uk">комплект сертифікатів PKCS#10</comment>
     <comment xml:lang="vi">Yêu cầu chứng nhận PKCS#10</comment>
-    <comment xml:lang="zh_CN">PKCS#10 认证请求</comment>
-    <comment xml:lang="zh_TW">PKCS#10 憑證請求</comment>
+    <comment xml:lang="zh-CN">PKCS#10 认证请求</comment>
+    <comment xml:lang="zh-TW">PKCS#10 憑證請求</comment>
     <acronym>PKCS</acronym>
     <expanded-acronym>Public-Key Cryptography Standards</expanded-acronym>
     <generic-icon name="text-x-generic"/>
@@ -1587,6 +1639,7 @@
   </mime-type>
   <mime-type type="application/pkix-cert">
     <comment>X.509 certificate</comment>
+    <comment xml:lang="af">X.509-sertifikaat</comment>
     <comment xml:lang="ar">شهادة X.509</comment>
     <comment xml:lang="ast">Certificáu X.509</comment>
     <comment xml:lang="bg">Сертификат — X.509</comment>
@@ -1595,12 +1648,13 @@
     <comment xml:lang="da">X.509-certifikat</comment>
     <comment xml:lang="de">X.509-Zertifikat</comment>
     <comment xml:lang="el">Πιστοποιητικό X.509</comment>
-    <comment xml:lang="en_GB">X.509 certificate</comment>
+    <comment xml:lang="en-GB">X.509 certificate</comment>
     <comment xml:lang="es">certificado X.509</comment>
     <comment xml:lang="eu">X.509 ziurtagiria</comment>
     <comment xml:lang="fi">X.509-varmenne</comment>
     <comment xml:lang="fo">X.509 prógv</comment>
     <comment xml:lang="fr">certificat X.509</comment>
+    <comment xml:lang="fur">certificât X.509</comment>
     <comment xml:lang="ga">teastas X.509</comment>
     <comment xml:lang="gl">Certificado X.509</comment>
     <comment xml:lang="he">אישור X.509</comment>
@@ -1618,7 +1672,7 @@
     <comment xml:lang="oc">certificat X.509</comment>
     <comment xml:lang="pl">Certyfikat X.509</comment>
     <comment xml:lang="pt">certificado X.509</comment>
-    <comment xml:lang="pt_BR">Certificado X.509</comment>
+    <comment xml:lang="pt-BR">Certificado X.509</comment>
     <comment xml:lang="ro">Certificat X.509</comment>
     <comment xml:lang="ru">Сертификат X.509</comment>
     <comment xml:lang="sk">Certifikát X.509</comment>
@@ -1627,58 +1681,41 @@
     <comment xml:lang="sv">X.509-certifikat</comment>
     <comment xml:lang="tr">X.509 sertifikası</comment>
     <comment xml:lang="uk">сертифікат X.509</comment>
-    <comment xml:lang="zh_CN">X.509 证书</comment>
-    <comment xml:lang="zh_TW">X.509 憑證</comment>
+    <comment xml:lang="zh-CN">X.509 证书</comment>
+    <comment xml:lang="zh-TW">X.509 憑證</comment>
     <glob pattern="*.cer"/>
   </mime-type>
   <mime-type type="application/pkix-crl">
-    <comment>Certificate revocation list</comment>
-    <comment xml:lang="ar">قائمة إبطال الشهادات</comment>
-    <comment xml:lang="ast">Llistáu de revocación de certificaos</comment>
+    <comment>certificate revocation list</comment>
     <comment xml:lang="bg">Списък с отхвърлени сертификати</comment>
     <comment xml:lang="ca">llista de revocació de certificats</comment>
-    <comment xml:lang="cs">seznam odvolaných certifikátů</comment>
-    <comment xml:lang="da">Certifikattilbagekaldelsesliste</comment>
-    <comment xml:lang="de">Liste widerrufener Zertifikate</comment>
-    <comment xml:lang="el">Λίστα ανάκλησης πιστοποιητικού</comment>
-    <comment xml:lang="en_GB">Certificate revocation list</comment>
+    <comment xml:lang="da">certifikat tilbagetrækkelsesliste</comment>
+    <comment xml:lang="de">Zertifikatsperrliste</comment>
+    <comment xml:lang="en-GB">certificate revocation list</comment>
     <comment xml:lang="es">lista de revocación de certificados</comment>
-    <comment xml:lang="eu">Ziurtagiri-errebokatzeen zerrenda</comment>
+    <comment xml:lang="eu">ziurtagiri-errebokatzeen zerrenda</comment>
     <comment xml:lang="fi">Varmenteiden sulkulista</comment>
-    <comment xml:lang="fo">Prógv afturtøkulisti</comment>
     <comment xml:lang="fr">liste de révocation de certificat</comment>
-    <comment xml:lang="ga">Liosta teastas cúlghairmthe</comment>
-    <comment xml:lang="gl">lista de certificados de revogación</comment>
-    <comment xml:lang="he">רשימת אישורים מבוטלים</comment>
     <comment xml:lang="hr">Popis opozvanih vjerodajnica</comment>
-    <comment xml:lang="hu">Tanúsítvány-visszavonási lista</comment>
-    <comment xml:lang="ia">Lista de revocation de certificatos</comment>
-    <comment xml:lang="id">Daftar pencabutan sertificat (CRL)</comment>
+    <comment xml:lang="hu">tanúsítvány visszavonási lista</comment>
+    <comment xml:lang="id">daftar pencabutan sertifikat</comment>
     <comment xml:lang="it">Elenco certificati di revoca</comment>
-    <comment xml:lang="ja">証明書失効リスト</comment>
-    <comment xml:lang="kk">Сертификатты қайта шақыру тізімі</comment>
+    <comment xml:lang="kk">сертификатты қайта шақыру тізімі</comment>
     <comment xml:lang="ko">인증서 철회 목록</comment>
-    <comment xml:lang="lt">Panaikintų liudijimų sąrašas</comment>
-    <comment xml:lang="lv">Sertifikātu atsaukšanu saraksts</comment>
-    <comment xml:lang="nl">Certificaat revocation lijst</comment>
-    <comment xml:lang="oc">lista de revocacion de certificat</comment>
     <comment xml:lang="pl">Lista unieważnień certyfikatów</comment>
     <comment xml:lang="pt">lista de revogação de certificados</comment>
-    <comment xml:lang="pt_BR">Lista de revogação de certificado</comment>
-    <comment xml:lang="ro">Listă de revocare a certificatelor</comment>
-    <comment xml:lang="ru">Список аннулирования сертификатов</comment>
-    <comment xml:lang="sk">Zoznam zrušených certifikátov</comment>
-    <comment xml:lang="sl">Datoteka seznama preklica potrdil</comment>
-    <comment xml:lang="sr">списак повлачења уверења</comment>
-    <comment xml:lang="sv">Spärrlista för certifikat</comment>
-    <comment xml:lang="tr">Sertifika iptal listesi</comment>
+    <comment xml:lang="pt-BR">Lista de revogação de certificados</comment>
+    <comment xml:lang="ru">список аннулирования сертификатов</comment>
+    <comment xml:lang="sv">certifikatåterkallningslista</comment>
+    <comment xml:lang="tr">sertifika iptal listesi</comment>
     <comment xml:lang="uk">список відкликання сертифікатів</comment>
-    <comment xml:lang="zh_CN">证书吊销列表</comment>
-    <comment xml:lang="zh_TW">憑證撤銷清單</comment>
+    <comment xml:lang="zh-CN">证书吊销列表</comment>
+    <comment xml:lang="zh-TW">憑證撤銷清單</comment>
     <glob pattern="*.crl"/>
   </mime-type>
   <mime-type type="application/pkix-pkipath">
     <comment>PkiPath certification path</comment>
+    <comment xml:lang="af">PkiPath-sertifiseringspad</comment>
     <comment xml:lang="ar">مسار شهادة PkiPath</comment>
     <comment xml:lang="ast">Camín de certificación PkiPath</comment>
     <comment xml:lang="bg">Сертификационна верига — PkiPath</comment>
@@ -1687,12 +1724,13 @@
     <comment xml:lang="da">PkiPath-certifikationssti</comment>
     <comment xml:lang="de">PkiPath-Zertifikatspfad</comment>
     <comment xml:lang="el">Διαδρομή πιστοποιητικού PkiPath</comment>
-    <comment xml:lang="en_GB">PkiPath certification path</comment>
+    <comment xml:lang="en-GB">PkiPath certification path</comment>
     <comment xml:lang="es">ruta de certificación PkiPath</comment>
     <comment xml:lang="eu">PkiPath ziurtagirien bide-izena</comment>
     <comment xml:lang="fi">PkiPath-varmennepolku</comment>
     <comment xml:lang="fo">PkiPath váttanleið</comment>
     <comment xml:lang="fr">chemin de certification PkiPath</comment>
+    <comment xml:lang="fur">percors di certificazion PkiPath</comment>
     <comment xml:lang="ga">conair dheimhniúcháin PkiPath</comment>
     <comment xml:lang="gl">Ruta de certificación PkiPath</comment>
     <comment xml:lang="he">נתיב מאושר של PkiPath</comment>
@@ -1710,7 +1748,7 @@
     <comment xml:lang="oc">camin de certificacion PkiPath</comment>
     <comment xml:lang="pl">Ścieżka certyfikacji PkiPath</comment>
     <comment xml:lang="pt">caminho de certificação PkiPath</comment>
-    <comment xml:lang="pt_BR">Pedido de certificação PkiPath</comment>
+    <comment xml:lang="pt-BR">Pedido de certificação PkiPath</comment>
     <comment xml:lang="ro">Cale certificare PkiPath</comment>
     <comment xml:lang="ru">Путь сертификации PkiPath</comment>
     <comment xml:lang="sk">Cesta k certifikátu PkiPath</comment>
@@ -1720,88 +1758,67 @@
     <comment xml:lang="tr">PkiPath sertifika yolu</comment>
     <comment xml:lang="uk">шлях сертифікації PkiPath</comment>
     <comment xml:lang="vi">Đường dẫn cấp chứng nhận PkiPath</comment>
-    <comment xml:lang="zh_CN">PkiPath 证书目录</comment>
-    <comment xml:lang="zh_TW">PkiPath 憑證路徑</comment>
+    <comment xml:lang="zh-CN">PkiPath 证书目录</comment>
+    <comment xml:lang="zh-TW">PkiPath 憑證路徑</comment>
     <glob pattern="*.pkipath"/>
   </mime-type>
   <mime-type type="application/postscript">
-    <comment>PS document</comment>
-    <comment xml:lang="ar">مستند PS</comment>
-    <comment xml:lang="ast">Documentu PS</comment>
-    <comment xml:lang="be@latin">Dakument PS</comment>
-    <comment xml:lang="bg">Документ — PS</comment>
-    <comment xml:lang="ca">document PS</comment>
-    <comment xml:lang="cs">dokument PS</comment>
-    <comment xml:lang="da">PS-dokument</comment>
-    <comment xml:lang="de">PS-Dokument</comment>
-    <comment xml:lang="el">Έγγραφο PS</comment>
-    <comment xml:lang="en_GB">PS document</comment>
-    <comment xml:lang="eo">PS-dokumento</comment>
-    <comment xml:lang="es">documento PS</comment>
-    <comment xml:lang="eu">PS dokumentua</comment>
-    <comment xml:lang="fi">PS-asiakirja</comment>
-    <comment xml:lang="fo">PS skjal</comment>
-    <comment xml:lang="fr">document PS</comment>
-    <comment xml:lang="ga">cáipéis PS</comment>
-    <comment xml:lang="gl">documento PS</comment>
-    <comment xml:lang="he">מסמך PS</comment>
-    <comment xml:lang="hr">PS dokument</comment>
-    <comment xml:lang="hu">PS dokumentum</comment>
-    <comment xml:lang="ia">Documento PS</comment>
-    <comment xml:lang="id">Dokumen PS</comment>
-    <comment xml:lang="it">Documento PS</comment>
-    <comment xml:lang="ja">PS ドキュメント</comment>
-    <comment xml:lang="kk">PS құжаты</comment>
-    <comment xml:lang="ko">PS 문서</comment>
-    <comment xml:lang="lt">PS dokumentas</comment>
-    <comment xml:lang="lv">PS dokuments</comment>
-    <comment xml:lang="nb">PS-dokument</comment>
-    <comment xml:lang="nl">PS-document</comment>
-    <comment xml:lang="nn">PS-dokument</comment>
-    <comment xml:lang="oc">document PS</comment>
-    <comment xml:lang="pl">Dokument PS</comment>
-    <comment xml:lang="pt">documento PS</comment>
-    <comment xml:lang="pt_BR">Documento PS</comment>
-    <comment xml:lang="ro">Document PS</comment>
-    <comment xml:lang="ru">Документ PS</comment>
-    <comment xml:lang="sk">Dokument PS</comment>
-    <comment xml:lang="sl">Dokument PS</comment>
-    <comment xml:lang="sq">Dokument PS</comment>
-    <comment xml:lang="sr">ПС документ</comment>
-    <comment xml:lang="sv">PS-dokument</comment>
-    <comment xml:lang="tr">PS belgesi</comment>
-    <comment xml:lang="uk">документ PS</comment>
-    <comment xml:lang="vi">Tài liệu PS</comment>
-    <comment xml:lang="zh_CN">PS 文档</comment>
-    <comment xml:lang="zh_TW">Ps 文件</comment>
-    <acronym>PS</acronym>
-    <expanded-acronym>PostScript</expanded-acronym>
+    <comment>PostScript document</comment>
+    <comment xml:lang="bg">Документ — PostScrip</comment>
+    <comment xml:lang="ca">document PostScript</comment>
+    <comment xml:lang="da">PostScript-dokument</comment>
+    <comment xml:lang="de">PostScript-Dokument</comment>
+    <comment xml:lang="en-GB">PostScript document</comment>
+    <comment xml:lang="es">documento PostScript</comment>
+    <comment xml:lang="eu">PostScript dokumentua</comment>
+    <comment xml:lang="fi">PostScript-asiakirja</comment>
+    <comment xml:lang="fr">document PostScript</comment>
+    <comment xml:lang="hr">PostScript dokument</comment>
+    <comment xml:lang="hu">PostScript dokumentum</comment>
+    <comment xml:lang="id">Dokumen PostScript</comment>
+    <comment xml:lang="it">Documento PostScript</comment>
+    <comment xml:lang="kk">PostScript құжаты</comment>
+    <comment xml:lang="ko">포스트스크립트 문서</comment>
+    <comment xml:lang="lt">PostScript dokumentas</comment>
+    <comment xml:lang="pl">Dokument PostScript</comment>
+    <comment xml:lang="pt">documento PostScript</comment>
+    <comment xml:lang="pt-BR">Documento PostScript</comment>
+    <comment xml:lang="ru">Документ PostScript</comment>
+    <comment xml:lang="sk">Dokument PostScript</comment>
+    <comment xml:lang="sl">Dokument PostScript</comment>
+    <comment xml:lang="sv">Postscript-dokument</comment>
+    <comment xml:lang="tr">PostScript belgesi</comment>
+    <comment xml:lang="uk">документ PostScript</comment>
+    <comment xml:lang="zh-CN">PostScript 文档</comment>
+    <comment xml:lang="zh-TW">PostScript 文件</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="\004%!" type="string" offset="0"/>
-      <match value="%!" type="string" offset="0"/>
+      <match type="string" value="\004%!" offset="0"/>
+      <match type="string" value="%!" offset="0"/>
     </magic>
     <glob pattern="*.ps"/>
   </mime-type>
   <mime-type type="application/prs.plucker">
     <comment>Plucker document</comment>
+    <comment xml:lang="af">Plucker-dokument</comment>
     <comment xml:lang="ar">مستند Plucker</comment>
     <comment xml:lang="ast">Documentu Plucker</comment>
-    <comment xml:lang="be@latin">Dakument Plucker</comment>
+    <comment xml:lang="be-Latn">Dakument Plucker</comment>
     <comment xml:lang="bg">Документ — Plucker</comment>
     <comment xml:lang="ca">document Plucker</comment>
     <comment xml:lang="cs">dokument Plucker</comment>
     <comment xml:lang="da">Pluckerdokument</comment>
     <comment xml:lang="de">Plucker-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Plucker</comment>
-    <comment xml:lang="en_GB">Plucker document</comment>
+    <comment xml:lang="en-GB">Plucker document</comment>
     <comment xml:lang="eo">Plucker-dokumento</comment>
     <comment xml:lang="es">documento de Plucker</comment>
     <comment xml:lang="eu">Plucker dokumentua</comment>
     <comment xml:lang="fi">Plucker-asiakirja</comment>
     <comment xml:lang="fo">Plucker skjal</comment>
     <comment xml:lang="fr">document Plucker</comment>
+    <comment xml:lang="fur">document Plucker</comment>
     <comment xml:lang="ga">cáipéis Plucker</comment>
     <comment xml:lang="gl">documento de Plucker</comment>
     <comment xml:lang="he">מסמך של Plucker</comment>
@@ -1821,7 +1838,7 @@
     <comment xml:lang="oc">document Plucker</comment>
     <comment xml:lang="pl">Dokument Plucker</comment>
     <comment xml:lang="pt">documento Plucker</comment>
-    <comment xml:lang="pt_BR">Documento do Plucker</comment>
+    <comment xml:lang="pt-BR">Documento do Plucker</comment>
     <comment xml:lang="ro">Document Plucker</comment>
     <comment xml:lang="ru">Документ Plucker</comment>
     <comment xml:lang="sk">Dokument Plucker</comment>
@@ -1832,54 +1849,61 @@
     <comment xml:lang="tr">Plucker belgesi</comment>
     <comment xml:lang="uk">документ Plucker</comment>
     <comment xml:lang="vi">Tài liệu Plucker</comment>
-    <comment xml:lang="zh_CN">Plucker 文档</comment>
-    <comment xml:lang="zh_TW">Plucker 文件</comment>
+    <comment xml:lang="zh-CN">Plucker 文档</comment>
+    <comment xml:lang="zh-TW">Plucker 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="80">
-      <match value="DataPlkr" type="string" offset="60"/>
+      <match type="string" value="DataPlkr" offset="60"/>
     </magic>
   </mime-type>
   <mime-type type="application/raml+yaml">
     <comment>RAML document</comment>
+    <comment xml:lang="af">RAML-dokument</comment>
     <comment xml:lang="ast">Documentu RAML</comment>
+    <comment xml:lang="bg">Документ — RAML</comment>
     <comment xml:lang="ca">document RAML</comment>
     <comment xml:lang="cs">dokument RAML</comment>
     <comment xml:lang="da">RAML-dokument</comment>
     <comment xml:lang="de">RAML-Dokument</comment>
-    <comment xml:lang="en_GB">RAML document</comment>
+    <comment xml:lang="en-GB">RAML document</comment>
     <comment xml:lang="es">documento RAML</comment>
     <comment xml:lang="eu">RAML dokumentua</comment>
     <comment xml:lang="fi">RAML-asiakirja</comment>
     <comment xml:lang="fr">document RAML</comment>
+    <comment xml:lang="fur">document RAML</comment>
     <comment xml:lang="ga">cáipéis RAML</comment>
     <comment xml:lang="he">מסמך RAML</comment>
     <comment xml:lang="hr">RAML dokument</comment>
     <comment xml:lang="hu">RAML dokumentum</comment>
-    <comment xml:lang="id">dokumen RAML</comment>
+    <comment xml:lang="id">Dokumen RAML</comment>
     <comment xml:lang="it">Documento RAML</comment>
     <comment xml:lang="kk">RAML құжаты</comment>
     <comment xml:lang="ko">RAML 문서</comment>
+    <comment xml:lang="lt">RAML dokumentas</comment>
     <comment xml:lang="oc">Document RAML</comment>
     <comment xml:lang="pl">Dokument RAML</comment>
-    <comment xml:lang="pt_BR">Documento RAML</comment>
+    <comment xml:lang="pt">documento RAML</comment>
+    <comment xml:lang="pt-BR">Documento RAML</comment>
     <comment xml:lang="ru">Документ RAML</comment>
     <comment xml:lang="sk">Dokument RAML</comment>
+    <comment xml:lang="sl">Dokument RAML</comment>
     <comment xml:lang="sr">РАМЛ документ</comment>
     <comment xml:lang="sv">RAML-dokument</comment>
     <comment xml:lang="tr">RAML belgesi</comment>
     <comment xml:lang="uk">документ RAML</comment>
-    <comment xml:lang="zh_CN">RAML 文档</comment>
-    <comment xml:lang="zh_TW">RAML 文件</comment>
+    <comment xml:lang="zh-CN">RAML 文档</comment>
+    <comment xml:lang="zh-TW">RAML 文件</comment>
     <acronym>RAML</acronym>
     <expanded-acronym>RESTful API Modeling Language</expanded-acronym>
     <sub-class-of type="application/x-yaml"/>
     <magic>
-      <match value="#%RAML " type="string" offset="0"/>
+      <match type="string" value="#%RAML " offset="0"/>
     </magic>
     <glob pattern="*.raml"/>
   </mime-type>
   <mime-type type="application/relax-ng-compact-syntax">
     <comment>RELAX NG XML schema</comment>
+    <comment xml:lang="af">RELAX NG XML-skema</comment>
     <comment xml:lang="ar">مخطط  RELAX NG XML</comment>
     <comment xml:lang="bg">Схема за XML — RELAX NG</comment>
     <comment xml:lang="ca">esquema XML en RELAX NG</comment>
@@ -1887,11 +1911,12 @@
     <comment xml:lang="da">RELAX NG XML-skema</comment>
     <comment xml:lang="de">RELAX NG XML-Schema</comment>
     <comment xml:lang="el">Σχήμα RELAX NG XML</comment>
-    <comment xml:lang="en_GB">RELAX NG XML schema</comment>
+    <comment xml:lang="en-GB">RELAX NG XML schema</comment>
     <comment xml:lang="es">esquema XML RELAX NG</comment>
     <comment xml:lang="eu">RELAX NG XML eskema</comment>
     <comment xml:lang="fi">RELAX NG XML-skeema</comment>
     <comment xml:lang="fr">schéma XML RELAX NG</comment>
+    <comment xml:lang="fur">scheme XML RELAX NG</comment>
     <comment xml:lang="ga">scéimre XML RELAX NG</comment>
     <comment xml:lang="gl">Esquema XML RELAX NG</comment>
     <comment xml:lang="he">סכנת RELAX NG XML</comment>
@@ -1909,7 +1934,7 @@
     <comment xml:lang="oc">esquèma XML RELAX NG</comment>
     <comment xml:lang="pl">Schemat XML RELAX NG</comment>
     <comment xml:lang="pt">Esquema RELAX NG XML</comment>
-    <comment xml:lang="pt_BR">Esquema XML de RELAX NG</comment>
+    <comment xml:lang="pt-BR">Esquema XML de RELAX NG</comment>
     <comment xml:lang="ro">Schemă RELAX NG XML</comment>
     <comment xml:lang="ru">XML-схема RELAX NG</comment>
     <comment xml:lang="sk">XML schéma RELAX NG</comment>
@@ -1918,8 +1943,8 @@
     <comment xml:lang="sv">RELAX NG XML-schema</comment>
     <comment xml:lang="tr">RELAX NG XML şeması</comment>
     <comment xml:lang="uk">XML-схема RELAX NG</comment>
-    <comment xml:lang="zh_CN">RELAX NG XML 模式</comment>
-    <comment xml:lang="zh_TW">RELAX NG XML schema</comment>
+    <comment xml:lang="zh-CN">RELAX NG XML 模式</comment>
+    <comment xml:lang="zh-TW">RELAX NG XML 綱要</comment>
     <acronym>RELAX NG</acronym>
     <expanded-acronym>REgular LAnguage for XML Next Generation</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -1929,22 +1954,24 @@
   </mime-type>
   <mime-type type="application/rtf">
     <comment>RTF document</comment>
+    <comment xml:lang="af">RTF-dokument</comment>
     <comment xml:lang="ar">مستند RTF</comment>
     <comment xml:lang="ast">Documentu RTF</comment>
-    <comment xml:lang="be@latin">Dakument RTF</comment>
+    <comment xml:lang="be-Latn">Dakument RTF</comment>
     <comment xml:lang="bg">Документ — RTF</comment>
     <comment xml:lang="ca">document RTF</comment>
     <comment xml:lang="cs">dokument RTF</comment>
     <comment xml:lang="da">RTF-dokument</comment>
     <comment xml:lang="de">RTF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο RTF</comment>
-    <comment xml:lang="en_GB">RTF document</comment>
+    <comment xml:lang="en-GB">RTF document</comment>
     <comment xml:lang="eo">RTF-dokumento</comment>
     <comment xml:lang="es">documento RTF</comment>
     <comment xml:lang="eu">RTF dokumentua</comment>
     <comment xml:lang="fi">RTF-asiakirja</comment>
     <comment xml:lang="fo">RTF skjal</comment>
     <comment xml:lang="fr">document RTF</comment>
+    <comment xml:lang="fur">document RTF</comment>
     <comment xml:lang="ga">cáipéis RTF</comment>
     <comment xml:lang="gl">documento RTF</comment>
     <comment xml:lang="he">מסמך RTF</comment>
@@ -1964,7 +1991,7 @@
     <comment xml:lang="oc">document RTF</comment>
     <comment xml:lang="pl">Dokument RTF</comment>
     <comment xml:lang="pt">documento RTF</comment>
-    <comment xml:lang="pt_BR">Documento RTF</comment>
+    <comment xml:lang="pt-BR">Documento RTF</comment>
     <comment xml:lang="ro">Document RTF</comment>
     <comment xml:lang="ru">Документ RTF</comment>
     <comment xml:lang="sk">Dokument RTF</comment>
@@ -1975,33 +2002,35 @@
     <comment xml:lang="tr">RTF belgesi</comment>
     <comment xml:lang="uk">документ RTF</comment>
     <comment xml:lang="vi">Tài liệu RTF</comment>
-    <comment xml:lang="zh_CN">RTF 文档</comment>
-    <comment xml:lang="zh_TW">RTF 文件</comment>
+    <comment xml:lang="zh-CN">RTF 文档</comment>
+    <comment xml:lang="zh-TW">RTF 文件</comment>
     <acronym>RTF</acronym>
     <expanded-acronym>Rich Text Format</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="{\\rtf" type="string" offset="0"/>
+      <match type="string" value="{\\rtf" offset="0"/>
     </magic>
     <glob pattern="*.rtf"/>
     <alias type="text/rtf"/>
   </mime-type>
   <mime-type type="application/sieve">
     <comment>Sieve mail filter script</comment>
+    <comment xml:lang="af">Sieve-posfiltreerskrip</comment>
     <comment xml:lang="ar">سكربت مرشح بريد Sieve</comment>
-    <comment xml:lang="be@latin">Skrypt filtravańnia pošty Sieve</comment>
+    <comment xml:lang="be-Latn">Skrypt filtravańnia pošty Sieve</comment>
     <comment xml:lang="bg">Скрипт-филтър за пресяване на поща</comment>
     <comment xml:lang="ca">script de filtre de correu Sieve</comment>
     <comment xml:lang="cs">skript poštovního filtru Sieve</comment>
     <comment xml:lang="da">Sieve e-post-filterprogram</comment>
     <comment xml:lang="de">Sieve-E-Mail-Filterskript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών φιλτραρίσματος αλληλογραφίας Sieve</comment>
-    <comment xml:lang="en_GB">Sieve mail filter script</comment>
+    <comment xml:lang="en-GB">Sieve mail filter script</comment>
     <comment xml:lang="es">secuencia de órdenes de filtro en Sieve</comment>
     <comment xml:lang="eu">Sieve posta-iragazki script-a</comment>
     <comment xml:lang="fi">Sieve-postinsuodatuskomentotiedosto</comment>
     <comment xml:lang="fr">script de filtrage de courriel Sieve</comment>
+    <comment xml:lang="fur">script filtri pueste Sieve</comment>
     <comment xml:lang="ga">script scagaire r-phost Sieve</comment>
     <comment xml:lang="gl">Script de filtro de correo Sieve</comment>
     <comment xml:lang="he">תסריט סינון דואר של Sieve</comment>
@@ -2021,7 +2050,7 @@
     <comment xml:lang="oc">escript de filtratge de corrièr electronic Sieve</comment>
     <comment xml:lang="pl">Skrypt filtra poczty Sieve</comment>
     <comment xml:lang="pt">Script de filtragem de correio Sieve</comment>
-    <comment xml:lang="pt_BR">Script de filtro de mensagens do Sieve</comment>
+    <comment xml:lang="pt-BR">Script de filtro de mensagens do Sieve</comment>
     <comment xml:lang="ro">Script filtrare email Sieve</comment>
     <comment xml:lang="ru">Сценарий почтового фильтра Sieve</comment>
     <comment xml:lang="sk">Skript poštového filtra Sieve</comment>
@@ -2029,33 +2058,35 @@
     <comment xml:lang="sq">Script filtrim poste Sieve</comment>
     <comment xml:lang="sr">Сјев скрипта пропусника поште</comment>
     <comment xml:lang="sv">Sieve-epostfilterskript</comment>
-    <comment xml:lang="tr">Sieve posta filtre betiği</comment>
+    <comment xml:lang="tr">Sieve posta süzgeç betiği</comment>
     <comment xml:lang="uk">скрипт поштового фільтру Sieve</comment>
     <comment xml:lang="vi">Văn lệnh lọc thư Sieve</comment>
-    <comment xml:lang="zh_CN">Sieve 邮件过滤脚本</comment>
-    <comment xml:lang="zh_TW">Sieve 郵件過濾指令稿</comment>
+    <comment xml:lang="zh-CN">Sieve 邮件过滤脚本</comment>
+    <comment xml:lang="zh-TW">Sieve 郵件篩選指令稿</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.siv"/>
   </mime-type>
   <mime-type type="application/smil+xml">
     <comment>SMIL document</comment>
+    <comment xml:lang="af">SMIL-dokument</comment>
     <comment xml:lang="ar">مستند SMIL</comment>
     <comment xml:lang="ast">Documentu SMIL</comment>
-    <comment xml:lang="be@latin">Dakument SMIL</comment>
+    <comment xml:lang="be-Latn">Dakument SMIL</comment>
     <comment xml:lang="bg">Документ — SMIL</comment>
     <comment xml:lang="ca">document SMIL</comment>
     <comment xml:lang="cs">dokument SMIL</comment>
     <comment xml:lang="da">SMIL-dokument</comment>
     <comment xml:lang="de">SMIL-Dokument</comment>
     <comment xml:lang="el">Έγγραφο SMIL</comment>
-    <comment xml:lang="en_GB">SMIL document</comment>
+    <comment xml:lang="en-GB">SMIL document</comment>
     <comment xml:lang="eo">SMIL-dokumento</comment>
     <comment xml:lang="es">documento SMIL</comment>
     <comment xml:lang="eu">SMIL dokumentua</comment>
     <comment xml:lang="fi">SMIL-asiakirja</comment>
     <comment xml:lang="fo">SMIL skjal</comment>
     <comment xml:lang="fr">document SMIL</comment>
+    <comment xml:lang="fur">document SMIL</comment>
     <comment xml:lang="ga">cáipéis SMIL</comment>
     <comment xml:lang="gl">documento SMIL</comment>
     <comment xml:lang="he">מסמך SMIL</comment>
@@ -2075,7 +2106,7 @@
     <comment xml:lang="oc">document SMIL</comment>
     <comment xml:lang="pl">Dokument SMIL</comment>
     <comment xml:lang="pt">documento SMIL</comment>
-    <comment xml:lang="pt_BR">Documento SMIL</comment>
+    <comment xml:lang="pt-BR">Documento SMIL</comment>
     <comment xml:lang="ro">Document SMIL</comment>
     <comment xml:lang="ru">Документ SMIL</comment>
     <comment xml:lang="sk">Dokument SMIL</comment>
@@ -2086,8 +2117,8 @@
     <comment xml:lang="tr">SMIL belgesi</comment>
     <comment xml:lang="uk">документ SMIL</comment>
     <comment xml:lang="vi">Tài liệu SMIL</comment>
-    <comment xml:lang="zh_CN">SMIL 文档</comment>
-    <comment xml:lang="zh_TW">SMIL 文件</comment>
+    <comment xml:lang="zh-CN">SMIL 文档</comment>
+    <comment xml:lang="zh-TW">SMIL 文件</comment>
     <acronym>SMIL</acronym>
     <expanded-acronym>Synchronized Multimedia Integration Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -2098,7 +2129,7 @@
     <glob pattern="*.sml"/>
     <glob pattern="*.kino"/>
     <magic priority="55">
-      <match value="&lt;smil" type="string" offset="0:256"/>
+      <match type="string" value="&lt;smil" offset="0:256"/>
     </magic>
     <root-XML namespaceURI="http://www.w3.org/2001/SMIL20/Language" localName="smil"/>
     <root-XML namespaceURI="http://www.w3.org/2005/SMIL21/Language" localName="smil"/>
@@ -2106,6 +2137,7 @@
   </mime-type>
   <mime-type type="application/vnd.ms-wpl">
     <comment>WPL playlist</comment>
+    <comment xml:lang="af">WPL-speellys</comment>
     <comment xml:lang="ar">قائمة تشغيل WPL</comment>
     <comment xml:lang="bg">Списък за изпълнение — WPL</comment>
     <comment xml:lang="ca">llista de reproducció WPL</comment>
@@ -2113,13 +2145,14 @@
     <comment xml:lang="da">WPL-afspilningsliste</comment>
     <comment xml:lang="de">WPL-Wiedergabeliste</comment>
     <comment xml:lang="el">Λίστα αναπαραγωγής WPL</comment>
-    <comment xml:lang="en_GB">WPL playlist</comment>
+    <comment xml:lang="en-GB">WPL playlist</comment>
     <comment xml:lang="eo">WPL-ludlisto</comment>
     <comment xml:lang="es">lista de reproducción WPL</comment>
     <comment xml:lang="eu">WPL erreprodukzio-zerrenda</comment>
     <comment xml:lang="fi">WPL-soittolista</comment>
     <comment xml:lang="fo">WPL avspælingarlisti</comment>
     <comment xml:lang="fr">liste de lecture WPL</comment>
+    <comment xml:lang="fur">liste di riproduzion WPL</comment>
     <comment xml:lang="ga">seinmliosta WPL</comment>
     <comment xml:lang="gl">lista de reprodución WPL</comment>
     <comment xml:lang="he">רשימת נגינה WPL</comment>
@@ -2137,7 +2170,7 @@
     <comment xml:lang="oc">lista de lectura WPL</comment>
     <comment xml:lang="pl">Lista odtwarzania WPL</comment>
     <comment xml:lang="pt">lista de reprodução WPL</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução do WPL</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução do WPL</comment>
     <comment xml:lang="ro">Listă redare WPL</comment>
     <comment xml:lang="ru">Список воспроизведения WPL</comment>
     <comment xml:lang="sk">Zoznam skladieb WPL</comment>
@@ -2147,33 +2180,35 @@
     <comment xml:lang="tr">WPL çalma listesi</comment>
     <comment xml:lang="uk">список відтворення WPL</comment>
     <comment xml:lang="vi">Danh mục nhạc WPL</comment>
-    <comment xml:lang="zh_CN">WPL 播放列表</comment>
-    <comment xml:lang="zh_TW">WPL 播放清單</comment>
+    <comment xml:lang="zh-CN">WPL 播放列表</comment>
+    <comment xml:lang="zh-TW">WPL 播放清單</comment>
     <acronym>WPL</acronym>
     <expanded-acronym>Windows Media Player Playlist</expanded-acronym>
     <generic-icon name="video-x-generic"/>
     <glob pattern="*.wpl"/>
     <magic priority="60">
-      <match value="&lt;?wpl" type="string" offset="0:256"/>
+      <match type="string" value="&lt;?wpl" offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-sqlite2">
     <comment>SQLite2 database</comment>
+    <comment xml:lang="af">SQLite2-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات SQLite2</comment>
-    <comment xml:lang="be@latin">Baza źviestak SQLite2</comment>
+    <comment xml:lang="be-Latn">Baza źviestak SQLite2</comment>
     <comment xml:lang="bg">База от данни — SQLite2</comment>
     <comment xml:lang="ca">base de dades SQLite2</comment>
     <comment xml:lang="cs">databáze SQLite2</comment>
     <comment xml:lang="da">SQLite2-database</comment>
     <comment xml:lang="de">SQLite2-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων SQLite2</comment>
-    <comment xml:lang="en_GB">SQLite2 database</comment>
+    <comment xml:lang="en-GB">SQLite2 database</comment>
     <comment xml:lang="eo">SQLite2-datumbazo</comment>
     <comment xml:lang="es">base de datos SQLite2</comment>
     <comment xml:lang="eu">SQLite2 datu-basea</comment>
     <comment xml:lang="fi">SQLite2-tietokanta</comment>
     <comment xml:lang="fo">SQLite2 dátustovnur</comment>
     <comment xml:lang="fr">base de données SQLite2</comment>
+    <comment xml:lang="fur">base di dâts SQLite2</comment>
     <comment xml:lang="ga">bunachar sonraí SQLite2</comment>
     <comment xml:lang="gl">base de datos SQLite2</comment>
     <comment xml:lang="he">מסד נתונים מסוג SQLite2</comment>
@@ -2193,7 +2228,7 @@
     <comment xml:lang="oc">banca de donadas SQLite2</comment>
     <comment xml:lang="pl">Baza danych SQLite2</comment>
     <comment xml:lang="pt">base de dados SQLite2</comment>
-    <comment xml:lang="pt_BR">Banco de dados SQLite2</comment>
+    <comment xml:lang="pt-BR">Banco de dados SQLite2</comment>
     <comment xml:lang="ro">Bază de date SQLite2</comment>
     <comment xml:lang="ru">База данных SQLite2</comment>
     <comment xml:lang="sk">Databáza SQLite2</comment>
@@ -2201,33 +2236,35 @@
     <comment xml:lang="sq">Bazë me të dhëna SQLite2</comment>
     <comment xml:lang="sr">СКуЛајт2 база података</comment>
     <comment xml:lang="sv">SQLite2-databas</comment>
-    <comment xml:lang="tr">SQLite2 veritabanı</comment>
+    <comment xml:lang="tr">SQLite2 veri tabanı</comment>
     <comment xml:lang="uk">База даних SQLite2</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu SQLite2</comment>
-    <comment xml:lang="zh_CN">SQLite2 数据库</comment>
-    <comment xml:lang="zh_TW">SQLite2 資料庫</comment>
+    <comment xml:lang="zh-CN">SQLite2 数据库</comment>
+    <comment xml:lang="zh-TW">SQLite2 資料庫</comment>
     <glob pattern="*.sqlite2"/>
     <magic>
-      <match value="** This file contains an SQLite" type="string" offset="0"/>
+      <match type="string" value="** This file contains an SQLite" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/vnd.sqlite3">
     <comment>SQLite3 database</comment>
+    <comment xml:lang="af">SQLite3-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات SQLite3</comment>
-    <comment xml:lang="be@latin">Baza źviestak SQLite3</comment>
+    <comment xml:lang="be-Latn">Baza źviestak SQLite3</comment>
     <comment xml:lang="bg">База от данни — SQLite3</comment>
     <comment xml:lang="ca">base de dades SQLite3</comment>
     <comment xml:lang="cs">databáze SQLite3</comment>
     <comment xml:lang="da">SQLite3-database</comment>
     <comment xml:lang="de">SQLite3-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων SQLite3</comment>
-    <comment xml:lang="en_GB">SQLite3 database</comment>
+    <comment xml:lang="en-GB">SQLite3 database</comment>
     <comment xml:lang="eo">SQLite3-datumbazo</comment>
     <comment xml:lang="es">base de datos SQLite3</comment>
     <comment xml:lang="eu">SQLite3 datu-basea</comment>
     <comment xml:lang="fi">SQLite3-tietokanta</comment>
     <comment xml:lang="fo">SQLite3 dátustovnur</comment>
     <comment xml:lang="fr">base de données SQLite3</comment>
+    <comment xml:lang="fur">base di dâts SQLite3</comment>
     <comment xml:lang="ga">bunachar sonraí SQLite3</comment>
     <comment xml:lang="gl">base de datos SQLite3</comment>
     <comment xml:lang="he">מסד נתונים מסוג SQLite3</comment>
@@ -2247,7 +2284,7 @@
     <comment xml:lang="oc">banca de donadas SQLite3</comment>
     <comment xml:lang="pl">Baza danych SQLite3</comment>
     <comment xml:lang="pt">base de dados SQLite3</comment>
-    <comment xml:lang="pt_BR">Banco de dados SQLite3</comment>
+    <comment xml:lang="pt-BR">Banco de dados SQLite3</comment>
     <comment xml:lang="ro">Bază de date SQLite3</comment>
     <comment xml:lang="ru">База данных SQLite3</comment>
     <comment xml:lang="sk">Databáza SQLite3</comment>
@@ -2255,33 +2292,57 @@
     <comment xml:lang="sq">Bazë me të dhëna SQLite3</comment>
     <comment xml:lang="sr">СКуЛајт3 база података</comment>
     <comment xml:lang="sv">SQLite3-databas</comment>
-    <comment xml:lang="tr">SQLite3 veritabanı</comment>
+    <comment xml:lang="tr">SQLite3 veri tabanı</comment>
     <comment xml:lang="uk">база даних SQLite3</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu SQLite3</comment>
-    <comment xml:lang="zh_CN">SQLite3 数据库</comment>
-    <comment xml:lang="zh_TW">SQLite3 資料庫</comment>
+    <comment xml:lang="zh-CN">SQLite3 数据库</comment>
+    <comment xml:lang="zh-TW">SQLite3 資料庫</comment>
     <glob pattern="*.sqlite3"/>
     <magic>
-      <match value="SQLite format 3" type="string" offset="0"/>
+      <match type="string" value="SQLite format 3" offset="0"/>
     </magic>
     <alias type="application/x-sqlite3"/>
   </mime-type>
+  <mime-type type="application/x-apple-systemprofiler+xml">
+    <comment>Apple System Profiler</comment>
+    <comment xml:lang="ca">System Profiler d'Apple</comment>
+    <comment xml:lang="da">Apple System Profiler</comment>
+    <comment xml:lang="de">Apple-Systeminformationen</comment>
+    <comment xml:lang="en-GB">Apple System Profiler</comment>
+    <comment xml:lang="es">perfil del sistema de Apple</comment>
+    <comment xml:lang="fi">Applen järjestelmän profiloija</comment>
+    <comment xml:lang="hr">Apple profiler sustava</comment>
+    <comment xml:lang="it">Profiler di sistema Apple</comment>
+    <comment xml:lang="pl">Profiler komputera Apple</comment>
+    <comment xml:lang="pt">Perfilador do sistema Apple</comment>
+    <comment xml:lang="sv">Apple Systeminformation</comment>
+    <comment xml:lang="uk">засіб профілювання системи Apple</comment>
+    <comment xml:lang="zh-CN">Apple 系统概述</comment>
+    <sub-class-of type="application/xml"/>
+    <magic priority="50">
+      <match type="string" value="&lt;plist version=&quot;1.0&quot;" offset="0:256"/>
+    </magic>
+    <glob pattern="*.spx" weight="40"/>
+    <root-XML namespaceURI="http://www.apple.com/DTDs/PropertyList-1.0.dtd" localName="plist"/>
+  </mime-type>
   <mime-type type="application/x-gedcom">
     <comment>GEDCOM family history</comment>
+    <comment xml:lang="af">GEDCOM-familiegeskiedenis</comment>
     <comment xml:lang="ar">تاريخ عائلة GEDCOM</comment>
-    <comment xml:lang="be@latin">Siamiejnaja historyja GEDCOM</comment>
+    <comment xml:lang="be-Latn">Siamiejnaja historyja GEDCOM</comment>
     <comment xml:lang="bg">Родословно дърво — GEDCOM</comment>
     <comment xml:lang="ca">antecedents familiars GEDCOM</comment>
     <comment xml:lang="cs">rodokmen GEDCOM</comment>
     <comment xml:lang="da">GEDCOM-familiehistorie</comment>
     <comment xml:lang="de">GEDCOM-Stammbaum</comment>
     <comment xml:lang="el">Οικογενειακό ιστορικό GEDCOM</comment>
-    <comment xml:lang="en_GB">GEDCOM family history</comment>
+    <comment xml:lang="en-GB">GEDCOM family history</comment>
     <comment xml:lang="es">historial familiar de GEDCOM</comment>
     <comment xml:lang="eu">GEDCOM famili historia</comment>
     <comment xml:lang="fi">GEDCOM-sukuhistoria</comment>
     <comment xml:lang="fo">GEDCOM familjusøga</comment>
     <comment xml:lang="fr">généalogie GEDCOM</comment>
+    <comment xml:lang="fur">gjenealogjie GEDCOM</comment>
     <comment xml:lang="ga">stair theaghlach GEDCOM</comment>
     <comment xml:lang="gl">historial de familia GEDCOM</comment>
     <comment xml:lang="he">היסטוריה משפחתית של GEDCOM</comment>
@@ -2302,7 +2363,7 @@
     <comment xml:lang="oc">genealogia GEDCOM</comment>
     <comment xml:lang="pl">Plik historii rodziny GEDCOM</comment>
     <comment xml:lang="pt">história familiar GEDCOM</comment>
-    <comment xml:lang="pt_BR">Histórico familiar do GEDCOM</comment>
+    <comment xml:lang="pt-BR">Histórico familiar do GEDCOM</comment>
     <comment xml:lang="ro">Tablou genealogic GEDCOM</comment>
     <comment xml:lang="ru">История семьи GEDCOM</comment>
     <comment xml:lang="sk">Rodokmeň GEDCOM</comment>
@@ -2313,13 +2374,13 @@
     <comment xml:lang="tr">GEDCOM aile geçmişi</comment>
     <comment xml:lang="uk">історія родини GEDCOM</comment>
     <comment xml:lang="vi">Lịch sử gia đình GEDCOM</comment>
-    <comment xml:lang="zh_CN">GEDCOM 家谱</comment>
-    <comment xml:lang="zh_TW">GEDCOM 家族史</comment>
+    <comment xml:lang="zh-CN">GEDCOM 家谱</comment>
+    <comment xml:lang="zh-TW">GEDCOM 族譜</comment>
     <acronym>GEDCOM</acronym>
     <expanded-acronym>GEnealogical Data COMmunication</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="0 HEAD" type="string" offset="0"/>
+      <match type="string" value="0 HEAD" offset="0"/>
     </magic>
     <glob pattern="*.ged"/>
     <glob pattern="*.gedcom"/>
@@ -2327,22 +2388,24 @@
   </mime-type>
   <mime-type type="video/x-flv">
     <comment>Flash video</comment>
+    <comment xml:lang="af">Flash-video</comment>
     <comment xml:lang="ar">Flash مرئي</comment>
     <comment xml:lang="ast">Videu en Flash</comment>
-    <comment xml:lang="be@latin">Videa Flash</comment>
+    <comment xml:lang="be-Latn">Videa Flash</comment>
     <comment xml:lang="bg">Видео — Flash</comment>
     <comment xml:lang="ca">vídeo de Flash</comment>
     <comment xml:lang="cs">video Flash</comment>
     <comment xml:lang="da">Flashvideo</comment>
     <comment xml:lang="de">Flash-Video</comment>
     <comment xml:lang="el">Βίντεο Flash</comment>
-    <comment xml:lang="en_GB">Flash video</comment>
+    <comment xml:lang="en-GB">Flash video</comment>
     <comment xml:lang="eo">Flash-video</comment>
     <comment xml:lang="es">vídeo Flash</comment>
     <comment xml:lang="eu">Flash bideoa</comment>
     <comment xml:lang="fi">Flash-video</comment>
     <comment xml:lang="fo">Flash video</comment>
     <comment xml:lang="fr">vidéo Flash</comment>
+    <comment xml:lang="fur">video Flash</comment>
     <comment xml:lang="ga">físeán Flash</comment>
     <comment xml:lang="gl">vídeo Flash</comment>
     <comment xml:lang="he">וידאו של פלאש</comment>
@@ -2363,7 +2426,7 @@
     <comment xml:lang="oc">vidèo Flash</comment>
     <comment xml:lang="pl">Plik wideo Flash</comment>
     <comment xml:lang="pt">vídeo Flash</comment>
-    <comment xml:lang="pt_BR">Vídeo Flash</comment>
+    <comment xml:lang="pt-BR">Vídeo Flash</comment>
     <comment xml:lang="ro">Video Flash</comment>
     <comment xml:lang="ru">Видео Flash</comment>
     <comment xml:lang="sk">Video Flash</comment>
@@ -2374,11 +2437,11 @@
     <comment xml:lang="tr">Flash video</comment>
     <comment xml:lang="uk">відеокліп Flash</comment>
     <comment xml:lang="vi">Ảnh động Flash</comment>
-    <comment xml:lang="zh_CN">Flash 视频</comment>
-    <comment xml:lang="zh_TW">Flash 視訊</comment>
+    <comment xml:lang="zh-CN">Flash 视频</comment>
+    <comment xml:lang="zh-TW">Flash 視訊</comment>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      <match value="FLV" type="string" offset="0"/>
+      <match type="string" value="FLV" offset="0"/>
     </magic>
     <glob pattern="*.flv"/>
     <alias type="application/x-flash-video"/>
@@ -2387,6 +2450,7 @@
   </mime-type>
   <mime-type type="video/x-javafx">
     <comment>JavaFX video</comment>
+    <comment xml:lang="af">JavaFX-video</comment>
     <comment xml:lang="ast">Videu en JavaFX</comment>
     <comment xml:lang="bg">Видео — JavaFX</comment>
     <comment xml:lang="ca">vídeo de JavaFX</comment>
@@ -2394,13 +2458,14 @@
     <comment xml:lang="da">JavaFX-video</comment>
     <comment xml:lang="de">JavaFX-Video</comment>
     <comment xml:lang="el">Βίντεο JavaFX</comment>
-    <comment xml:lang="en_GB">JavaFX video</comment>
+    <comment xml:lang="en-GB">JavaFX video</comment>
     <comment xml:lang="eo">JavaFX-video</comment>
     <comment xml:lang="es">vídeo JavaFX</comment>
     <comment xml:lang="eu">JavaFX bideoa</comment>
     <comment xml:lang="fi">JavaFX-video</comment>
     <comment xml:lang="fo">JavaFX video</comment>
     <comment xml:lang="fr">vidéo JavaFX</comment>
+    <comment xml:lang="fur">video JavaFX</comment>
     <comment xml:lang="ga">físeán JavaFX</comment>
     <comment xml:lang="gl">vídeo JavaFX</comment>
     <comment xml:lang="he">וידאו JavaFX</comment>
@@ -2412,12 +2477,13 @@
     <comment xml:lang="ja">JavaFX 動画</comment>
     <comment xml:lang="kk">JavaFX аудиосы</comment>
     <comment xml:lang="ko">JavaFX 동영상</comment>
+    <comment xml:lang="lt">JavaFX vaizdo įrašas</comment>
     <comment xml:lang="lv">JavaFX video</comment>
     <comment xml:lang="nl">JavaFX video</comment>
     <comment xml:lang="oc">vidèo JavaFX</comment>
     <comment xml:lang="pl">Plik wideo JavaFX</comment>
     <comment xml:lang="pt">vídeo JavaFX</comment>
-    <comment xml:lang="pt_BR">Vídeo JavaFX</comment>
+    <comment xml:lang="pt-BR">Vídeo JavaFX</comment>
     <comment xml:lang="ro">Video JavaFX</comment>
     <comment xml:lang="ru">Видео JavaFX</comment>
     <comment xml:lang="sk">Video JavaFX</comment>
@@ -2426,32 +2492,36 @@
     <comment xml:lang="sv">JavaFX-video</comment>
     <comment xml:lang="tr">JavaFX video</comment>
     <comment xml:lang="uk">відеокліп JavaFX</comment>
-    <comment xml:lang="zh_CN">JavaFX 视频</comment>
-    <comment xml:lang="zh_TW">JavaFX 視訊</comment>
+    <comment xml:lang="zh-CN">JavaFX 视频</comment>
+    <comment xml:lang="zh-TW">JavaFX 視訊</comment>
     <generic-icon name="video-x-generic"/>
     <magic priority="40">
-      <match value="FLV" type="string" offset="0"/>
+      <match type="string" value="FLV" offset="0"/>
     </magic>
     <glob pattern="*.fxm"/>
     <sub-class-of type="video/x-flv"/>
   </mime-type>
   <mime-type type="application/x-go-sgf">
-    
+    <!-- translators: a record is in this context a description of a board game
+         that has been played, and that can be played back again:
+         http://www.red-bean.com/sgf/ -->
     <comment>SGF record</comment>
+    <comment xml:lang="af">SGF-rekord</comment>
     <comment xml:lang="ar">تسجيلة SGF</comment>
-    <comment xml:lang="be@latin">Zapisanaja hulnia SGF</comment>
+    <comment xml:lang="be-Latn">Zapisanaja hulnia SGF</comment>
     <comment xml:lang="bg">Запис — SGF</comment>
     <comment xml:lang="ca">registre SGF</comment>
     <comment xml:lang="cs">nahrávka SGF</comment>
     <comment xml:lang="da">SGF-optagelse</comment>
     <comment xml:lang="de">SGF-Aufzeichnung</comment>
     <comment xml:lang="el">Εγγραφή SGF</comment>
-    <comment xml:lang="en_GB">SGF record</comment>
+    <comment xml:lang="en-GB">SGF record</comment>
     <comment xml:lang="es">grabación SGF</comment>
     <comment xml:lang="eu">SGF erregistroa</comment>
     <comment xml:lang="fi">SGF-nauhoitus</comment>
     <comment xml:lang="fo">SGF met</comment>
     <comment xml:lang="fr">partie SGF</comment>
+    <comment xml:lang="fur">regjistrazion SGF</comment>
     <comment xml:lang="ga">taifead SGF</comment>
     <comment xml:lang="gl">Grabación SGF</comment>
     <comment xml:lang="he">הקלטת SGF</comment>
@@ -2471,7 +2541,7 @@
     <comment xml:lang="oc">partida SGF</comment>
     <comment xml:lang="pl">Zapis gry SGF</comment>
     <comment xml:lang="pt">gravação SGF</comment>
-    <comment xml:lang="pt_BR">Gravação SGF</comment>
+    <comment xml:lang="pt-BR">Gravação SGF</comment>
     <comment xml:lang="ro">Înregistrare SGF</comment>
     <comment xml:lang="ru">Запись SGF</comment>
     <comment xml:lang="sk">Záznam SGF</comment>
@@ -2482,35 +2552,37 @@
     <comment xml:lang="tr">SGF kaydı</comment>
     <comment xml:lang="uk">запис SGF</comment>
     <comment xml:lang="vi">Mục ghi SGF</comment>
-    <comment xml:lang="zh_CN">SGF 记录</comment>
-    <comment xml:lang="zh_TW">SGF 紀錄</comment>
+    <comment xml:lang="zh-CN">SGF 记录</comment>
+    <comment xml:lang="zh-TW">SGF 紀錄</comment>
     <acronym>SGF</acronym>
     <expanded-acronym>Smart Game Format</expanded-acronym>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.sgf"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="(;FF[3]" type="string" offset="0"/>
-      <match value="(;FF[4]" type="string" offset="0"/>
+      <match type="string" value="(;FF[3]" offset="0"/>
+      <match type="string" value="(;FF[4]" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/xliff+xml">
     <comment>XLIFF translation file</comment>
+    <comment xml:lang="af">XLIFF-vertaallêer</comment>
     <comment xml:lang="ar">ملف ترجمة XLIFF</comment>
     <comment xml:lang="ast">Ficheru de traducciones XLIFF</comment>
-    <comment xml:lang="be@latin">Fajł pierakładu XLIFF</comment>
+    <comment xml:lang="be-Latn">Fajł pierakładu XLIFF</comment>
     <comment xml:lang="bg">Превод — XLIFF</comment>
     <comment xml:lang="ca">fitxer de traducció XLIFF</comment>
     <comment xml:lang="cs">soubor překladu XLIFF</comment>
     <comment xml:lang="da">XLIFF-oversættelsesfil</comment>
     <comment xml:lang="de">XLIFF-Übersetzung</comment>
     <comment xml:lang="el">Αρχείο μετάφρασης XLIFF</comment>
-    <comment xml:lang="en_GB">XLIFF translation file</comment>
+    <comment xml:lang="en-GB">XLIFF translation file</comment>
     <comment xml:lang="es">archivo de traducción XLIFF</comment>
     <comment xml:lang="eu">XLIFF itzulpen-fitxategia</comment>
     <comment xml:lang="fi">XLIFF-käännöstiedosto</comment>
     <comment xml:lang="fo">XLIFF týðingarfíla</comment>
     <comment xml:lang="fr">fichier de traduction XLIFF</comment>
+    <comment xml:lang="fur">file di traduzion XLIFF</comment>
     <comment xml:lang="ga">comhad aistriúcháin XLIFF</comment>
     <comment xml:lang="gl">ficheiro de tradución XLIFF</comment>
     <comment xml:lang="he">קובץ תרגום CLIFF</comment>
@@ -2530,7 +2602,7 @@
     <comment xml:lang="oc">fichièr de traduccion XLIFF</comment>
     <comment xml:lang="pl">Plik tłumaczenia XLIFF</comment>
     <comment xml:lang="pt">ficheiro de tradução XLIFF</comment>
-    <comment xml:lang="pt_BR">Arquivo de tradução XLIFF</comment>
+    <comment xml:lang="pt-BR">Arquivo de tradução XLIFF</comment>
     <comment xml:lang="ro">Fișier de traducere XLIFF</comment>
     <comment xml:lang="ru">Файл перевода XLIFF</comment>
     <comment xml:lang="sk">Súbor prekladu XLIFF</comment>
@@ -2541,8 +2613,8 @@
     <comment xml:lang="tr">XLIFF çeviri dosyası</comment>
     <comment xml:lang="uk">файл перекладу XLIFF</comment>
     <comment xml:lang="vi">Tập tin dịch XLIFF</comment>
-    <comment xml:lang="zh_CN">XLIFF 翻译文件</comment>
-    <comment xml:lang="zh_TW">XLIFF 翻譯檔</comment>
+    <comment xml:lang="zh-CN">XLIFF 翻译文件</comment>
+    <comment xml:lang="zh-TW">XLIFF 翻譯檔</comment>
     <acronym>XLIFF</acronym>
     <expanded-acronym>XML Localization Interchange File Format</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -2550,13 +2622,14 @@
     <glob pattern="*.xlf"/>
     <glob pattern="*.xliff"/>
     <magic priority="80">
-      <match value="&lt;xliff" type="string" offset="0:256"/>
+      <match type="string" value="&lt;xliff" offset="0:256"/>
     </magic>
-    <root-XML namespaceURI='urn:oasis:names:tc:xliff:document:1.1' localName='xliff'/>
+    <root-XML namespaceURI="urn:oasis:names:tc:xliff:document:1.1" localName="xliff"/>
     <alias type="application/x-xliff"/>
   </mime-type>
   <mime-type type="application/x-yaml">
     <comment>YAML document</comment>
+    <comment xml:lang="af">YAML-dokument</comment>
     <comment xml:lang="ar">مستند YAML</comment>
     <comment xml:lang="ast">Documentu YAML</comment>
     <comment xml:lang="bg">Документ — YAML</comment>
@@ -2565,13 +2638,14 @@
     <comment xml:lang="da">YAML-dokument</comment>
     <comment xml:lang="de">YAML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο YAML</comment>
-    <comment xml:lang="en_GB">YAML document</comment>
+    <comment xml:lang="en-GB">YAML document</comment>
     <comment xml:lang="eo">YAML-dokumento</comment>
     <comment xml:lang="es">documento YAML</comment>
     <comment xml:lang="eu">YAML dokumentua</comment>
     <comment xml:lang="fi">YAML-asiakirja</comment>
     <comment xml:lang="fo">YAML skjal</comment>
     <comment xml:lang="fr">document YAML</comment>
+    <comment xml:lang="fur">document YAML</comment>
     <comment xml:lang="ga">cáipéis YAML</comment>
     <comment xml:lang="gl">documento YAML</comment>
     <comment xml:lang="he">מסמך YAML</comment>
@@ -2589,7 +2663,7 @@
     <comment xml:lang="oc">document YAML</comment>
     <comment xml:lang="pl">Dokument YAML</comment>
     <comment xml:lang="pt">documento YAML</comment>
-    <comment xml:lang="pt_BR">Documento YAML</comment>
+    <comment xml:lang="pt-BR">Documento YAML</comment>
     <comment xml:lang="ro">Document YAML</comment>
     <comment xml:lang="ru">Документ YAML</comment>
     <comment xml:lang="sk">Dokument YAML</comment>
@@ -2598,14 +2672,14 @@
     <comment xml:lang="sv">YAML-dokument</comment>
     <comment xml:lang="tr">YAML belgesi</comment>
     <comment xml:lang="uk">документ YAML</comment>
-    <comment xml:lang="zh_CN">YAML 文档</comment>
-    <comment xml:lang="zh_TW">YAML 文件</comment>
+    <comment xml:lang="zh-CN">YAML 文档</comment>
+    <comment xml:lang="zh-TW">YAML 文件</comment>
     <acronym>YAML</acronym>
     <expanded-acronym>YAML Ain't Markup Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic>
-      <match value="%YAML" type="string" offset="0"/>
+      <match type="string" value="%YAML" offset="0"/>
     </magic>
     <glob pattern="*.yaml"/>
     <glob pattern="*.yml"/>
@@ -2614,10 +2688,11 @@
   </mime-type>
   <mime-type type="application/vnd.corel-draw">
     <comment>Corel Draw drawing</comment>
+    <comment xml:lang="af">Corel Draw-tekening</comment>
     <comment xml:lang="ar">تصميم Corel Draw</comment>
     <comment xml:lang="ast">Dibuxu de Corel Draw</comment>
     <comment xml:lang="az">Corel Draw çəkimi</comment>
-    <comment xml:lang="be@latin">Rysunak Corel Draw</comment>
+    <comment xml:lang="be-Latn">Rysunak Corel Draw</comment>
     <comment xml:lang="bg">Чертеж — Corel Draw</comment>
     <comment xml:lang="ca">dibuix de Corel Draw</comment>
     <comment xml:lang="cs">kresba Corel Draw</comment>
@@ -2625,13 +2700,14 @@
     <comment xml:lang="da">Corel Draw-tegning</comment>
     <comment xml:lang="de">Corel-Draw-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο Corel Draw </comment>
-    <comment xml:lang="en_GB">Corel Draw drawing</comment>
+    <comment xml:lang="en-GB">Corel Draw drawing</comment>
     <comment xml:lang="eo">grafikaĵo de Corel Draw</comment>
     <comment xml:lang="es">dibujo de Corel Draw</comment>
     <comment xml:lang="eu">Corel Draw-eko marrazkia</comment>
     <comment xml:lang="fi">Corel Draw -piirros</comment>
     <comment xml:lang="fo">Corel Draw tekning</comment>
     <comment xml:lang="fr">dessin Corel Draw</comment>
+    <comment xml:lang="fur">dissen Corel Draw</comment>
     <comment xml:lang="ga">líníocht Corel Draw</comment>
     <comment xml:lang="gl">debuxo de Corel Draw</comment>
     <comment xml:lang="he">ציור של Corel Draw</comment>
@@ -2643,7 +2719,7 @@
     <comment xml:lang="ja">Corel Draw ドロー</comment>
     <comment xml:lang="ka">Corel Draw-ის ნახაზი</comment>
     <comment xml:lang="kk">Corel Draw суреті</comment>
-    <comment xml:lang="ko">코렐 드로우 드로잉</comment>
+    <comment xml:lang="ko">Corel Draw 드로잉</comment>
     <comment xml:lang="lt">Corel Draw piešinys</comment>
     <comment xml:lang="lv">Corel Draw zīmējums</comment>
     <comment xml:lang="ms">Lukisan Corel Draw</comment>
@@ -2653,7 +2729,7 @@
     <comment xml:lang="oc">dessenh Corel Draw</comment>
     <comment xml:lang="pl">Rysunek Corel Draw</comment>
     <comment xml:lang="pt">desenho Corel Drawdesenho Corel Draw</comment>
-    <comment xml:lang="pt_BR">Desenho do Corel Draw</comment>
+    <comment xml:lang="pt-BR">Desenho do Corel Draw</comment>
     <comment xml:lang="ro">Desen Corel Draw</comment>
     <comment xml:lang="ru">Рисунок Corel Draw</comment>
     <comment xml:lang="sk">Kresba Corel Draw</comment>
@@ -2664,11 +2740,11 @@
     <comment xml:lang="tr">Corel Draw çizimi</comment>
     <comment xml:lang="uk">малюнок Corel Draw</comment>
     <comment xml:lang="vi">Bản vẽ Corel Draw</comment>
-    <comment xml:lang="zh_CN">Corel Draw 绘图</comment>
-    <comment xml:lang="zh_TW">Corel Draw 繪圖</comment>
+    <comment xml:lang="zh-CN">Corel Draw 绘图</comment>
+    <comment xml:lang="zh-TW">Corel Draw 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <magic priority="80">
-      <match value="CDRXvrsn" type="string" offset="8" mask="0xffffff00ffffffff"/>
+      <match type="string" value="CDRXvrsn" mask="0xffffff00ffffffff" offset="8"/>
     </magic>
     <glob pattern="*.cdr"/>
     <alias type="application/cdr"/>
@@ -2681,22 +2757,24 @@
   </mime-type>
   <mime-type type="application/vnd.hp-hpgl">
     <comment>HPGL file</comment>
+    <comment xml:lang="af">HPGL-lêer</comment>
     <comment xml:lang="ar">ملف HPGL</comment>
     <comment xml:lang="ast">Ficheru HPGL</comment>
-    <comment xml:lang="be@latin">Fajł HPGL</comment>
+    <comment xml:lang="be-Latn">Fajł HPGL</comment>
     <comment xml:lang="bg">Файл — HPGL</comment>
     <comment xml:lang="ca">fitxer HPGL</comment>
     <comment xml:lang="cs">soubor HPGL</comment>
     <comment xml:lang="da">HPGL-fil</comment>
     <comment xml:lang="de">HPGL-Datei</comment>
     <comment xml:lang="el">Αρχείο HPGL</comment>
-    <comment xml:lang="en_GB">HPGL file</comment>
+    <comment xml:lang="en-GB">HPGL file</comment>
     <comment xml:lang="eo">HPGL-dosiero</comment>
     <comment xml:lang="es">archivo HPGL</comment>
     <comment xml:lang="eu">HPGL fitxategia</comment>
     <comment xml:lang="fi">HPGL-tiedosto</comment>
     <comment xml:lang="fo">HPGL fíla</comment>
     <comment xml:lang="fr">fichier HPGL</comment>
+    <comment xml:lang="fur">file HPGL</comment>
     <comment xml:lang="ga">comhad HPGL</comment>
     <comment xml:lang="gl">ficheiro HPGL</comment>
     <comment xml:lang="he">קובץ HGPL</comment>
@@ -2716,7 +2794,7 @@
     <comment xml:lang="oc">fichièr HPGL</comment>
     <comment xml:lang="pl">Plik HPGL</comment>
     <comment xml:lang="pt">ficheiro HPGL</comment>
-    <comment xml:lang="pt_BR">Arquivo HPGL</comment>
+    <comment xml:lang="pt-BR">Arquivo HPGL</comment>
     <comment xml:lang="ro">Fișier HPGL</comment>
     <comment xml:lang="ru">Файл HPGL</comment>
     <comment xml:lang="sk">Súbor HPGL</comment>
@@ -2727,8 +2805,8 @@
     <comment xml:lang="tr">HPGL dosyası</comment>
     <comment xml:lang="uk">файл HPGL</comment>
     <comment xml:lang="vi">Tập tin HPGL</comment>
-    <comment xml:lang="zh_CN">HPGL 文件</comment>
-    <comment xml:lang="zh_TW">HPGL 檔案</comment>
+    <comment xml:lang="zh-CN">HPGL 文件</comment>
+    <comment xml:lang="zh-TW">HPGL 檔案</comment>
     <acronym>HPGL</acronym>
     <expanded-acronym>HP Graphics Language</expanded-acronym>
     <generic-icon name="image-x-generic"/>
@@ -2736,22 +2814,24 @@
   </mime-type>
   <mime-type type="application/vnd.hp-pcl">
     <comment>PCL file</comment>
+    <comment xml:lang="af">PCL-lêer</comment>
     <comment xml:lang="ar">ملف PCL</comment>
     <comment xml:lang="ast">FIcheru PCL</comment>
-    <comment xml:lang="be@latin">Fajł PCL</comment>
+    <comment xml:lang="be-Latn">Fajł PCL</comment>
     <comment xml:lang="bg">Файл — PCL</comment>
     <comment xml:lang="ca">fitxer PCL</comment>
     <comment xml:lang="cs">soubor PCL</comment>
     <comment xml:lang="da">PCL-fil</comment>
     <comment xml:lang="de">PCL-Datei</comment>
     <comment xml:lang="el">Αρχείο PCL</comment>
-    <comment xml:lang="en_GB">PCL file</comment>
+    <comment xml:lang="en-GB">PCL file</comment>
     <comment xml:lang="eo">PCL-dosiero</comment>
     <comment xml:lang="es">archivo PCL</comment>
     <comment xml:lang="eu">PCL fitxategia</comment>
     <comment xml:lang="fi">PCL-tiedosto</comment>
     <comment xml:lang="fo">PCL fíla</comment>
     <comment xml:lang="fr">fichier PCL</comment>
+    <comment xml:lang="fur">file PCL</comment>
     <comment xml:lang="ga">comhad PCL</comment>
     <comment xml:lang="gl">ficheiro PCL</comment>
     <comment xml:lang="he">קובץ PCL</comment>
@@ -2771,7 +2851,7 @@
     <comment xml:lang="oc">fichièr PCL</comment>
     <comment xml:lang="pl">Plik PCL</comment>
     <comment xml:lang="pt">ficheiro PCL</comment>
-    <comment xml:lang="pt_BR">Arquivo PCL</comment>
+    <comment xml:lang="pt-BR">Arquivo PCL</comment>
     <comment xml:lang="ro">Fișier PCL</comment>
     <comment xml:lang="ru">Файл PCL</comment>
     <comment xml:lang="sk">Súbor PCL</comment>
@@ -2782,8 +2862,8 @@
     <comment xml:lang="tr">PCL dosyası</comment>
     <comment xml:lang="uk">файл PCL</comment>
     <comment xml:lang="vi">Tập tin PCL</comment>
-    <comment xml:lang="zh_CN">PCL 文件</comment>
-    <comment xml:lang="zh_TW">PCL 檔</comment>
+    <comment xml:lang="zh-CN">PCL 文件</comment>
+    <comment xml:lang="zh-TW">PCL 檔</comment>
     <acronym>PCL</acronym>
     <expanded-acronym>HP Printer Control Language</expanded-acronym>
     <generic-icon name="image-x-generic"/>
@@ -2791,10 +2871,11 @@
   </mime-type>
   <mime-type type="application/vnd.lotus-1-2-3">
     <comment>Lotus 1-2-3 spreadsheet</comment>
+    <comment xml:lang="af">Lotus 1-2-3 sigblad</comment>
     <comment xml:lang="ar">جدول Lotus 1-2-3</comment>
     <comment xml:lang="ast">Fueya de cálculu de Lotus 1-2-3</comment>
     <comment xml:lang="az">Lotus 1-2-3 hesab cədvəli</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš Lotus 1-2-3</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš Lotus 1-2-3</comment>
     <comment xml:lang="bg">Таблица — Lotus 1-2-3</comment>
     <comment xml:lang="ca">full de càlcul de Lotus 1-2-3</comment>
     <comment xml:lang="cs">sešit Lotus 1-2-3</comment>
@@ -2802,13 +2883,14 @@
     <comment xml:lang="da">Lotus 1-2-3-regneark</comment>
     <comment xml:lang="de">Lotus-1-2-3-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Lotus 1-2-3</comment>
-    <comment xml:lang="en_GB">Lotus 1-2-3 spreadsheet</comment>
+    <comment xml:lang="en-GB">Lotus 1-2-3 spreadsheet</comment>
     <comment xml:lang="eo">Kalkultabelo de Lotus 1-2-3</comment>
     <comment xml:lang="es">hoja de cálculo de Lotus 1-2-3</comment>
     <comment xml:lang="eu">Lotus 1-2-3 kalkulu-orria</comment>
     <comment xml:lang="fi">Lotus 1-2-3 -taulukko</comment>
     <comment xml:lang="fo">Lotus 1-2-3 rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Lotus 1-2-3</comment>
+    <comment xml:lang="fur">sfuei di calcul Lotus 1-2-3</comment>
     <comment xml:lang="ga">scarbhileog Lotus 1-2-3</comment>
     <comment xml:lang="gl">folla de cálculo de Lotus 1-2-3</comment>
     <comment xml:lang="he">גיליון נתונים של Lotus 1-2-3</comment>
@@ -2829,7 +2911,7 @@
     <comment xml:lang="oc">fuèlh de calcul Lotus 1-2-3</comment>
     <comment xml:lang="pl">Arkusz Lotus 1-2-3</comment>
     <comment xml:lang="pt">folha de cálculo Lotus 1-2-3</comment>
-    <comment xml:lang="pt_BR">Planilha do Lotus 1-2-3</comment>
+    <comment xml:lang="pt-BR">Planilha do Lotus 1-2-3</comment>
     <comment xml:lang="ro">Foaie de calcul Lotus 1-2-3</comment>
     <comment xml:lang="ru">Электронная таблица Lotus 1-2-3</comment>
     <comment xml:lang="sk">Zošit Lotus 1-2-3</comment>
@@ -2837,14 +2919,14 @@
     <comment xml:lang="sq">Fletë llogaritjesh Lotus 1-2-3</comment>
     <comment xml:lang="sr">Лотусова 1-2-3 табела</comment>
     <comment xml:lang="sv">Lotus 1-2-3-kalkylblad</comment>
-    <comment xml:lang="tr">Lotus 1-2-3 hesap tablosu</comment>
+    <comment xml:lang="tr">Lotus 1-2-3 hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Lotus 1-2-3</comment>
     <comment xml:lang="vi">Bảng tính Lotus 1-2-3</comment>
-    <comment xml:lang="zh_CN">Lotus 1-2-3 电子表格</comment>
-    <comment xml:lang="zh_TW">Lotus 1-2-3 試算表</comment>
+    <comment xml:lang="zh-CN">Lotus 1-2-3 电子表格</comment>
+    <comment xml:lang="zh-TW">Lotus 1-2-3 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="\x00\x00\x02\x00\x06\x04\x06\x00\x08\x00\x00\x00\x00\x00" type="string" offset="0"/>
+      <match type="string" value="\x00\x00\x02\x00\x06\x04\x06\x00\x08\x00\x00\x00\x00\x00" offset="0"/>
     </magic>
     <glob pattern="*.123"/>
     <glob pattern="*.wk1"/>
@@ -2858,67 +2940,59 @@
     <alias type="zz-application/zz-winassoc-123"/>
   </mime-type>
   <mime-type type="application/vnd.lotus-wordpro">
-    <comment>Lotus Word Pro</comment>
-    <comment xml:lang="ast">Lotus Word Pro</comment>
-    <comment xml:lang="ca">Lotus Word Pro</comment>
-    <comment xml:lang="cs">Lotus Word Pro</comment>
-    <comment xml:lang="da">Lotus Word Pro</comment>
-    <comment xml:lang="de">Lotus Word Pro</comment>
-    <comment xml:lang="el">Lotus Word Pro</comment>
-    <comment xml:lang="en_GB">Lotus Word Pro</comment>
-    <comment xml:lang="es">Lotus Word Pro</comment>
-    <comment xml:lang="eu">Lotus Word Pro</comment>
-    <comment xml:lang="fi">Lotus Word Pro</comment>
-    <comment xml:lang="fr">Lotus Word Pro</comment>
-    <comment xml:lang="ga">Lotus Word Pro</comment>
-    <comment xml:lang="gl">Lotus Word Pro</comment>
-    <comment xml:lang="he">Lotus Word Pro</comment>
-    <comment xml:lang="hr">Lotus Word Pro</comment>
-    <comment xml:lang="hu">Lotus Word Pro</comment>
-    <comment xml:lang="ia">Lotus Word Pro</comment>
-    <comment xml:lang="id">Lotus Word Pro</comment>
-    <comment xml:lang="it">Lotus Word Pro</comment>
-    <comment xml:lang="ja">Lotus Word Pro</comment>
-    <comment xml:lang="kk">Lotus Word Pro</comment>
-    <comment xml:lang="ko">Lotus Word Pro</comment>
-    <comment xml:lang="lv">Lotus Word Pro</comment>
-    <comment xml:lang="oc">Lotus Word Pro</comment>
-    <comment xml:lang="pl">Lotus Word Pro</comment>
-    <comment xml:lang="pt">Lotus Word Pro</comment>
-    <comment xml:lang="pt_BR">Lotus Word Pro</comment>
-    <comment xml:lang="ru">Lotus Word Pro</comment>
-    <comment xml:lang="sk">Lotus Word Pro</comment>
-    <comment xml:lang="sl">Lotus Word Pro</comment>
-    <comment xml:lang="sr">Лотусов Писац Про</comment>
-    <comment xml:lang="sv">Lotus Word Pro</comment>
-    <comment xml:lang="tr">Lotus Word Pro</comment>
-    <comment xml:lang="uk">Lotus Word Pro</comment>
-    <comment xml:lang="zh_CN">Lotus Word Pro</comment>
-    <comment xml:lang="zh_TW">Lotus Word Pro</comment>
+    <comment>Lotus Word Pro document</comment>
+    <comment xml:lang="bg">Документ — Lotus Word Pro</comment>
+    <comment xml:lang="ca">document de Lotus Word Pro</comment>
+    <comment xml:lang="da">Lotus Word Pro-dokument</comment>
+    <comment xml:lang="de">Lotus-Word-Pro-Dokument</comment>
+    <comment xml:lang="en-GB">Lotus Word Pro document</comment>
+    <comment xml:lang="es">documento de Lotus Word Pro</comment>
+    <comment xml:lang="eu">Lotus Word Pro dokumentua</comment>
+    <comment xml:lang="fi">Lotus Word Pro -asiakirja</comment>
+    <comment xml:lang="fr">document Lotus Word Pro</comment>
+    <comment xml:lang="hr">Lotus Word Pro dokument</comment>
+    <comment xml:lang="hu">Lotus Word Pro dokumentum</comment>
+    <comment xml:lang="id">Dokumen Lotus Word Pro</comment>
+    <comment xml:lang="it">Documento Lotus Word Pro</comment>
+    <comment xml:lang="kk">Lotus Word Pro құжаты</comment>
+    <comment xml:lang="ko">로투스 워드 프로 문서</comment>
+    <comment xml:lang="pl">Dokument Lotus Word Pro</comment>
+    <comment xml:lang="pt">documento Lotus Word Pro</comment>
+    <comment xml:lang="pt-BR">Documento do Lotus Word Pro</comment>
+    <comment xml:lang="ru">Документ Lotus Word Pro</comment>
+    <comment xml:lang="sk">Dokument Lotus Word Pro</comment>
+    <comment xml:lang="sl">Dokument Lotus Word Pro</comment>
+    <comment xml:lang="sv">Lotus Word Pro-dokument</comment>
+    <comment xml:lang="tr">Lotus Word Pro belgesi</comment>
+    <comment xml:lang="uk">документ Lotus Word Pro</comment>
+    <comment xml:lang="zh-CN">Lotus Word Pro 文档</comment>
+    <comment xml:lang="zh-TW">Lotus Word Pro 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="WordPro" type="string" offset="0"/>
+      <match type="string" value="WordPro" offset="0"/>
     </magic>
     <glob pattern="*.lwp"/>
   </mime-type>
   <mime-type type="application/vnd.ms-access">
     <comment>JET database</comment>
+    <comment xml:lang="af">JET-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات JET</comment>
     <comment xml:lang="ast">Base de datos JETº</comment>
-    <comment xml:lang="be@latin">Baza źviestak JET</comment>
+    <comment xml:lang="be-Latn">Baza źviestak JET</comment>
     <comment xml:lang="bg">База от данни — JET</comment>
     <comment xml:lang="ca">base de dades JET</comment>
     <comment xml:lang="cs">databáze JET</comment>
     <comment xml:lang="da">JET-database</comment>
     <comment xml:lang="de">JET-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων JET</comment>
-    <comment xml:lang="en_GB">JET database</comment>
+    <comment xml:lang="en-GB">JET database</comment>
     <comment xml:lang="eo">JET-datumbazo</comment>
     <comment xml:lang="es">base de datos JET</comment>
     <comment xml:lang="eu">JET datu-basea</comment>
     <comment xml:lang="fi">JET-tietokanta</comment>
     <comment xml:lang="fo">JET dátustovnur</comment>
     <comment xml:lang="fr">base de données JET</comment>
+    <comment xml:lang="fur">base di dâts JET</comment>
     <comment xml:lang="ga">bunachar sonraí JET</comment>
     <comment xml:lang="gl">base de datos JET</comment>
     <comment xml:lang="he">מסד נתונים מסוג JET</comment>
@@ -2938,7 +3012,7 @@
     <comment xml:lang="oc">banca de donadas JET</comment>
     <comment xml:lang="pl">Baza Danych JET</comment>
     <comment xml:lang="pt">base de dados JET</comment>
-    <comment xml:lang="pt_BR">Banco de dados JET</comment>
+    <comment xml:lang="pt-BR">Banco de dados JET</comment>
     <comment xml:lang="ro">Bază de date JET</comment>
     <comment xml:lang="ru">База данных JET</comment>
     <comment xml:lang="sk">Databáza JET</comment>
@@ -2946,19 +3020,18 @@
     <comment xml:lang="sq">Bazë me të dhëna JET</comment>
     <comment xml:lang="sr">ЈЕТ база података</comment>
     <comment xml:lang="sv">JET-databas</comment>
-    <comment xml:lang="tr">JET veritabanı</comment>
+    <comment xml:lang="tr">JET veri tabanı</comment>
     <comment xml:lang="uk">База даних JET</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu JET</comment>
-    <comment xml:lang="zh_CN">JET 数据库</comment>
-    <comment xml:lang="zh_TW">JET 資料庫</comment>
+    <comment xml:lang="zh-CN">JET 数据库</comment>
+    <comment xml:lang="zh-TW">JET 資料庫</comment>
     <acronym>JET</acronym>
     <expanded-acronym>Joint Engine Technology</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="\x00\x01\x00\x00Standard Jet DB" type="string" offset="0"/>
+      <match offset="0" type="string" value="\x00\x01\x00\x00Standard Jet DB"/>
     </magic>
     <glob pattern="*.mdb"/>
-    <alias type="application/x-msaccess"/>
     <alias type="application/msaccess"/>
     <alias type="application/vnd.msaccess"/>
     <alias type="application/x-msaccess"/>
@@ -2968,6 +3041,7 @@
   </mime-type>
   <mime-type type="application/vnd.ms-cab-compressed">
     <comment>Microsoft Cabinet archive</comment>
+    <comment xml:lang="af">Microsoft Cabinet-argief</comment>
     <comment xml:lang="ar">أرشيف Microsoft Cabinet</comment>
     <comment xml:lang="bg">Архив — Microsoft Cabinet</comment>
     <comment xml:lang="ca">arxiu de Microsoft Cabinet</comment>
@@ -2975,12 +3049,13 @@
     <comment xml:lang="da">Microsoft Cabinet-arkiv</comment>
     <comment xml:lang="de">Microsoft-Cabinet-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Microsoft Cabinet</comment>
-    <comment xml:lang="en_GB">Microsoft Cabinet archive</comment>
+    <comment xml:lang="en-GB">Microsoft Cabinet archive</comment>
     <comment xml:lang="es">archivador Cabinet de Microsoft</comment>
     <comment xml:lang="eu">Microsoft Cabinet artxiboa</comment>
     <comment xml:lang="fi">Microsoft Cabinet -arkisto</comment>
     <comment xml:lang="fo">Microsoft Cabinet skjalasavn</comment>
     <comment xml:lang="fr">archive Cab Microsoft</comment>
+    <comment xml:lang="fur">archivi Cabinet Microsoft</comment>
     <comment xml:lang="ga">cartlann Microsoft Cabinet</comment>
     <comment xml:lang="gl">arquivo de Microsoft Cabinet</comment>
     <comment xml:lang="he">ארכיון CAB (מיקרוסופט)</comment>
@@ -2992,14 +3067,14 @@
     <comment xml:lang="ja">Microsoft Cabinet アーカイブ</comment>
     <comment xml:lang="ka">Microsoft-ის Cabinet არქივი</comment>
     <comment xml:lang="kk">Microsoft Cabinet архиві</comment>
-    <comment xml:lang="ko">Microsoft Cabinte 압축 파일</comment>
+    <comment xml:lang="ko">Microsoft Cabinet 압축 파일</comment>
     <comment xml:lang="lt">Microsoft Cabinet archyvas</comment>
     <comment xml:lang="lv">Microsoft kabineta arhīvs</comment>
     <comment xml:lang="nl">Microsoft Cabinet-archief</comment>
     <comment xml:lang="oc">archiu Cab Microsoft</comment>
     <comment xml:lang="pl">Archiwum Microsoft Cabinet</comment>
     <comment xml:lang="pt">arquivo Microsoft Cabinet</comment>
-    <comment xml:lang="pt_BR">Pacote Cabinet da Microsoft</comment>
+    <comment xml:lang="pt-BR">Pacote Cabinet da Microsoft</comment>
     <comment xml:lang="ro">Arhivă Microsoft Cabinet</comment>
     <comment xml:lang="ru">Архив Microsoft Cabinet</comment>
     <comment xml:lang="sk">Archív Microsoft Cabinet</comment>
@@ -3009,32 +3084,34 @@
     <comment xml:lang="tr">Microsoft Cabinet arşivi</comment>
     <comment xml:lang="uk">архів Cabinet Microsoft</comment>
     <comment xml:lang="vi">Kho lưu Cabinet Microsoft</comment>
-    <comment xml:lang="zh_CN">Microsoft Cabinet 归档文件</comment>
-    <comment xml:lang="zh_TW">微軟 Cabinet 封存檔</comment>
+    <comment xml:lang="zh-CN">Microsoft Cabinet 归档文件</comment>
+    <comment xml:lang="zh-TW">微軟 Cabinet 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="MSCF\0\0\0\0" type="string" offset="0"/>
+      <match offset="0" type="string" value="MSCF\0\0\0\0"/>
     </magic>
     <glob pattern="*.cab"/>
     <alias type="zz-application/zz-winassoc-cab"/>
   </mime-type>
   <mime-type type="application/vnd.ms-excel">
     <comment>Excel spreadsheet</comment>
+    <comment xml:lang="af">Excel-sigblad</comment>
     <comment xml:lang="ar">جدول Excel</comment>
-    <comment xml:lang="be@latin">Raźlikovy akruš Excel</comment>
+    <comment xml:lang="be-Latn">Raźlikovy akruš Excel</comment>
     <comment xml:lang="bg">Таблица — Excel</comment>
     <comment xml:lang="ca">full de càlcul d'Excel</comment>
     <comment xml:lang="cs">sešit Excel</comment>
     <comment xml:lang="da">Excelregneark</comment>
     <comment xml:lang="de">Excel-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Excel</comment>
-    <comment xml:lang="en_GB">Excel spreadsheet</comment>
+    <comment xml:lang="en-GB">Excel spreadsheet</comment>
     <comment xml:lang="eo">Excel-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo de Excel</comment>
     <comment xml:lang="eu">Excel kalkulu-orria</comment>
     <comment xml:lang="fi">Excel-taulukko</comment>
     <comment xml:lang="fo">Excel rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Excel</comment>
+    <comment xml:lang="fur">sfuei di calcul Excel</comment>
     <comment xml:lang="ga">scarbhileog Excel</comment>
     <comment xml:lang="gl">folla de cálculo de Excel</comment>
     <comment xml:lang="he">גליון נתונים של Excel</comment>
@@ -3055,7 +3132,7 @@
     <comment xml:lang="oc">fuèlh de calcul Excel</comment>
     <comment xml:lang="pl">Arkusz Excel</comment>
     <comment xml:lang="pt">folha de cálculo Excel</comment>
-    <comment xml:lang="pt_BR">Planilha do Excel</comment>
+    <comment xml:lang="pt-BR">Planilha do Excel</comment>
     <comment xml:lang="ro">Foaie de calcul Excel</comment>
     <comment xml:lang="ru">Электронная таблица Excel</comment>
     <comment xml:lang="sk">Zošit Excel</comment>
@@ -3063,14 +3140,14 @@
     <comment xml:lang="sq">Fletë llogaritje Excel</comment>
     <comment xml:lang="sr">Екселова табела</comment>
     <comment xml:lang="sv">Excel-kalkylblad</comment>
-    <comment xml:lang="tr">Excel çalışma sayfası</comment>
+    <comment xml:lang="tr">Excel hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Excel</comment>
     <comment xml:lang="vi">Bảng tính Excel</comment>
-    <comment xml:lang="zh_CN">Excel 电子表格</comment>
-    <comment xml:lang="zh_TW">Excel 試算表</comment>
+    <comment xml:lang="zh-CN">Excel 电子表格</comment>
+    <comment xml:lang="zh-TW">Excel 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="Microsoft Excel 5.0 Worksheet" type="string" offset="2080"/>
+      <match type="string" value="Microsoft Excel 5.0 Worksheet" offset="2080"/>
     </magic>
     <glob pattern="*.xls"/>
     <glob pattern="*.xlc"/>
@@ -3086,17 +3163,19 @@
   </mime-type>
   <mime-type type="application/vnd.ms-excel.addin.macroEnabled.12">
     <comment>Excel add-in</comment>
+    <comment xml:lang="af">Excel-byvoeging</comment>
     <comment xml:lang="bg">Приставка — Excel</comment>
     <comment xml:lang="ca">complement d'Excel</comment>
     <comment xml:lang="cs">doplněk aplikace Excel</comment>
     <comment xml:lang="da">Excel-tilføjelse</comment>
     <comment xml:lang="de">Excel Add-in</comment>
     <comment xml:lang="el">Πρόσθετο Excel</comment>
-    <comment xml:lang="en_GB">Excel add-in</comment>
+    <comment xml:lang="en-GB">Excel add-in</comment>
     <comment xml:lang="es">complemento de Excel</comment>
     <comment xml:lang="eu">Excel gehigarria</comment>
     <comment xml:lang="fi">Excel-lisäosa</comment>
     <comment xml:lang="fr">complément Excel</comment>
+    <comment xml:lang="fur">zonte Excel</comment>
     <comment xml:lang="ga">breiseán Excel</comment>
     <comment xml:lang="gl">complemento de Excel</comment>
     <comment xml:lang="he">תוסף של Excel</comment>
@@ -3114,7 +3193,7 @@
     <comment xml:lang="oc">complement Excel</comment>
     <comment xml:lang="pl">Dodatek Excel</comment>
     <comment xml:lang="pt">Extensão Excel</comment>
-    <comment xml:lang="pt_BR">Suplemento do Excel</comment>
+    <comment xml:lang="pt-BR">Suplemento do Excel</comment>
     <comment xml:lang="ru">Дополнение Excel</comment>
     <comment xml:lang="sk">Doplnok aplikácie Excel</comment>
     <comment xml:lang="sl">Vstavek Excel</comment>
@@ -3122,25 +3201,27 @@
     <comment xml:lang="sv">Excel-tillägg</comment>
     <comment xml:lang="tr">Excel eklentisi</comment>
     <comment xml:lang="uk">додаток Excel</comment>
-    <comment xml:lang="zh_CN">Excel 外接程序</comment>
-    <comment xml:lang="zh_TW">Excel 增益集</comment>
+    <comment xml:lang="zh-CN">Excel 外接程序</comment>
+    <comment xml:lang="zh-TW">Excel 增益集</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.xlam"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
   </mime-type>
   <mime-type type="application/vnd.ms-excel.sheet.binary.macroEnabled.12">
     <comment>Excel 2007 binary spreadsheet</comment>
+    <comment xml:lang="af">Excel 2007 binêre sigblad</comment>
     <comment xml:lang="bg">Таблица — Excel 2007, двоична</comment>
     <comment xml:lang="ca">full de càlcul binari d'Excel 2007</comment>
     <comment xml:lang="cs">binární formát sešitu Excel 2007</comment>
     <comment xml:lang="da">Binært Excel 2007-regneark</comment>
     <comment xml:lang="de">Excel-2007-Tabelle (binär)</comment>
     <comment xml:lang="el">Δυαδικό λογιστικό φύλλο Excel 2007</comment>
-    <comment xml:lang="en_GB">Excel 2007 binary spreadsheet</comment>
+    <comment xml:lang="en-GB">Excel 2007 binary spreadsheet</comment>
     <comment xml:lang="es">hoja de cálculo binaria de Excel 2007</comment>
     <comment xml:lang="eu">Excel 2007 kalkulu-orri binarioa</comment>
     <comment xml:lang="fi">Excel 2007:n binaarinen taulukko</comment>
     <comment xml:lang="fr">feuille de calcul binaire Excel 2007</comment>
+    <comment xml:lang="fur">sfuei di calcul binari Excel 2007</comment>
     <comment xml:lang="ga">scarbhileog dhénártha Excel 2007</comment>
     <comment xml:lang="gl">ficheiro binario de folla de cálculo Excel 2007</comment>
     <comment xml:lang="he">גיליון נתונים בינרי של Excel 2007</comment>
@@ -3158,37 +3239,39 @@
     <comment xml:lang="oc">fuèlh de calcul binaire Excel 2007</comment>
     <comment xml:lang="pl">Binarny arkusz Excel 2007</comment>
     <comment xml:lang="pt">folha de cálculo binária Excel 2007</comment>
-    <comment xml:lang="pt_BR">Planilha binária do Excel 2007</comment>
+    <comment xml:lang="pt-BR">Planilha binária do Excel 2007</comment>
     <comment xml:lang="ru">Двоичная электронная таблица Excel 2007</comment>
     <comment xml:lang="sk">Binárny zošit Excel 2007</comment>
     <comment xml:lang="sl">Binarna preglednica Excel 2007</comment>
     <comment xml:lang="sr">Ексел 2007 бинарна табела</comment>
     <comment xml:lang="sv">Binärt Excel 2007-kalkylblad</comment>
-    <comment xml:lang="tr">Excel 2007 ikilik çalışma sayfası</comment>
+    <comment xml:lang="tr">Excel 2007 ikilik hesap çizelgesi</comment>
     <comment xml:lang="uk">бінарна електронна таблиця Excel 2007</comment>
-    <comment xml:lang="zh_CN">Excel 2007 二进制电子表格</comment>
-    <comment xml:lang="zh_TW">Excel 2007 二進位試算表</comment>
+    <comment xml:lang="zh-CN">Excel 2007 二进制电子表格</comment>
+    <comment xml:lang="zh-TW">Excel 2007 二進位試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.xlsb"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
   </mime-type>
   <mime-type type="application/vnd.ms-excel.sheet.macroEnabled.12">
     <comment>Excel spreadsheet</comment>
+    <comment xml:lang="af">Excel-sigblad</comment>
     <comment xml:lang="ar">جدول Excel</comment>
-    <comment xml:lang="be@latin">Raźlikovy akruš Excel</comment>
+    <comment xml:lang="be-Latn">Raźlikovy akruš Excel</comment>
     <comment xml:lang="bg">Таблица — Excel</comment>
     <comment xml:lang="ca">full de càlcul d'Excel</comment>
     <comment xml:lang="cs">sešit Excel</comment>
     <comment xml:lang="da">Excelregneark</comment>
     <comment xml:lang="de">Excel-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Excel</comment>
-    <comment xml:lang="en_GB">Excel spreadsheet</comment>
+    <comment xml:lang="en-GB">Excel spreadsheet</comment>
     <comment xml:lang="eo">Excel-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo de Excel</comment>
     <comment xml:lang="eu">Excel kalkulu-orria</comment>
     <comment xml:lang="fi">Excel-taulukko</comment>
     <comment xml:lang="fo">Excel rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Excel</comment>
+    <comment xml:lang="fur">sfuei di calcul Excel</comment>
     <comment xml:lang="ga">scarbhileog Excel</comment>
     <comment xml:lang="gl">folla de cálculo de Excel</comment>
     <comment xml:lang="he">גליון נתונים של Excel</comment>
@@ -3209,7 +3292,7 @@
     <comment xml:lang="oc">fuèlh de calcul Excel</comment>
     <comment xml:lang="pl">Arkusz Excel</comment>
     <comment xml:lang="pt">folha de cálculo Excel</comment>
-    <comment xml:lang="pt_BR">Planilha do Excel</comment>
+    <comment xml:lang="pt-BR">Planilha do Excel</comment>
     <comment xml:lang="ro">Foaie de calcul Excel</comment>
     <comment xml:lang="ru">Электронная таблица Excel</comment>
     <comment xml:lang="sk">Zošit Excel</comment>
@@ -3217,27 +3300,30 @@
     <comment xml:lang="sq">Fletë llogaritje Excel</comment>
     <comment xml:lang="sr">Екселова табела</comment>
     <comment xml:lang="sv">Excel-kalkylblad</comment>
-    <comment xml:lang="tr">Excel çalışma sayfası</comment>
+    <comment xml:lang="tr">Excel hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Excel</comment>
     <comment xml:lang="vi">Bảng tính Excel</comment>
-    <comment xml:lang="zh_CN">Excel 电子表格</comment>
-    <comment xml:lang="zh_TW">Excel 試算表</comment>
+    <comment xml:lang="zh-CN">Excel 电子表格</comment>
+    <comment xml:lang="zh-TW">Excel 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.xlsm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
   </mime-type>
   <mime-type type="application/vnd.ms-excel.template.macroEnabled.12">
     <comment>Excel spreadsheet template</comment>
+    <comment xml:lang="af">Excel-sigbladsjabloon</comment>
+    <comment xml:lang="bg">Шаблон за таблица — Excel</comment>
     <comment xml:lang="ca">plantilla de full de càlcul d'Excel</comment>
     <comment xml:lang="cs">šablona tabulky Excel</comment>
     <comment xml:lang="da">Excel-regnearksskabelon</comment>
     <comment xml:lang="de">Excel-Tabellenvorlage</comment>
     <comment xml:lang="el">Πρότυπο λογιστικού φύλλου Excel</comment>
-    <comment xml:lang="en_GB">Excel spreadsheet template</comment>
-    <comment xml:lang="es">plantilla de libro de Excel</comment>
+    <comment xml:lang="en-GB">Excel spreadsheet template</comment>
+    <comment xml:lang="es">plantilla de hoja de cálculo de Excel</comment>
     <comment xml:lang="eu">Excel kalkulu-orri txantiloia</comment>
     <comment xml:lang="fi">Excel-taulukkomalli</comment>
     <comment xml:lang="fr">modèle de feuille de calcul Excel</comment>
+    <comment xml:lang="fur">model sfuei di calcul Excel</comment>
     <comment xml:lang="ga">teimpléad scarbhileoige Excel</comment>
     <comment xml:lang="he">תבנית גיליון נתונים של Excel</comment>
     <comment xml:lang="hr">Predložak Excel proračunske tablice</comment>
@@ -3249,37 +3335,40 @@
     <comment xml:lang="ko">Excel 스프레드시트 서식</comment>
     <comment xml:lang="oc">Modèl de fuèlh de calcul Excel</comment>
     <comment xml:lang="pl">Szablon arkusza Excel</comment>
-    <comment xml:lang="pt">modelo de folha de cálculo Excel</comment>
-    <comment xml:lang="pt_BR">Modelo de planilha do Excel</comment>
+    <comment xml:lang="pt">predefinição da folha de cálculo Excel</comment>
+    <comment xml:lang="pt-BR">Modelo de planilha do Excel</comment>
     <comment xml:lang="ru">Шаблон таблицы Excel</comment>
     <comment xml:lang="sk">Šablóna tabuľky aplikácie Excel</comment>
+    <comment xml:lang="sl">Predloga preglednice Excel</comment>
     <comment xml:lang="sr">Екселов шаблон табеле</comment>
     <comment xml:lang="sv">Excel-kalkylarksmall</comment>
-    <comment xml:lang="tr">Excel hesap tablosu şablonu</comment>
+    <comment xml:lang="tr">Excel hesap çizelgesi şablonu</comment>
     <comment xml:lang="uk">шаблон електронної таблиці Excel</comment>
-    <comment xml:lang="zh_CN">Excel 电子表格模板</comment>
-    <comment xml:lang="zh_TW">Excel 試算表範本</comment>
+    <comment xml:lang="zh-CN">Excel 电子表格模板</comment>
+    <comment xml:lang="zh-TW">Excel 試算表範本</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.xltm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.spreadsheetml.template"/>
   </mime-type>
   <mime-type type="application/vnd.ms-powerpoint">
     <comment>PowerPoint presentation</comment>
+    <comment xml:lang="af">PowerPoint-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي PowerPoint</comment>
-    <comment xml:lang="be@latin">Prezentacyja PowerPoint</comment>
+    <comment xml:lang="be-Latn">Prezentacyja PowerPoint</comment>
     <comment xml:lang="bg">Презентация — PowerPoint</comment>
     <comment xml:lang="ca">presentació de PowerPoint</comment>
     <comment xml:lang="cs">prezentace PowerPoint</comment>
     <comment xml:lang="da">PowerPoint-præsentation</comment>
     <comment xml:lang="de">PowerPoint-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση PowerPoint</comment>
-    <comment xml:lang="en_GB">PowerPoint presentation</comment>
+    <comment xml:lang="en-GB">PowerPoint presentation</comment>
     <comment xml:lang="eo">PowerPoint-prezentaĵo</comment>
     <comment xml:lang="es">presentación de PowerPoint</comment>
     <comment xml:lang="eu">PowerPoint aurkezpena</comment>
     <comment xml:lang="fi">PowerPoint-esitys</comment>
     <comment xml:lang="fo">PowerPoint framløga</comment>
     <comment xml:lang="fr">présentation PowerPoint</comment>
+    <comment xml:lang="fur">presentazion PowerPoint</comment>
     <comment xml:lang="ga">láithreoireacht PowerPoint</comment>
     <comment xml:lang="gl">presentación de PowerPoint</comment>
     <comment xml:lang="he">מצגת PowerPoint</comment>
@@ -3299,7 +3388,7 @@
     <comment xml:lang="oc">presentacion PowerPoint</comment>
     <comment xml:lang="pl">Prezentacja PowerPoint</comment>
     <comment xml:lang="pt">apresentação PowerPoint</comment>
-    <comment xml:lang="pt_BR">Apresentação do PowerPoint</comment>
+    <comment xml:lang="pt-BR">Apresentação do PowerPoint</comment>
     <comment xml:lang="ro">Prezentare PowerPoint</comment>
     <comment xml:lang="ru">Презентация PowerPoint</comment>
     <comment xml:lang="sk">Prezentácia PowerPoint</comment>
@@ -3310,8 +3399,8 @@
     <comment xml:lang="tr">PowerPoint sunumu</comment>
     <comment xml:lang="uk">презентація PowerPoint</comment>
     <comment xml:lang="vi">Trình diễn PowerPoint</comment>
-    <comment xml:lang="zh_CN">PowerPoint 演示文稿</comment>
-    <comment xml:lang="zh_TW">PowerPoint 簡報</comment>
+    <comment xml:lang="zh-CN">PowerPoint 演示文稿</comment>
+    <comment xml:lang="zh-TW">PowerPoint 簡報</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.ppz"/>
     <glob pattern="*.ppt"/>
@@ -3323,17 +3412,19 @@
   </mime-type>
   <mime-type type="application/vnd.ms-powerpoint.addin.macroEnabled.12">
     <comment>PowerPoint add-in</comment>
+    <comment xml:lang="af">PowerPoint-byvoeging</comment>
     <comment xml:lang="bg">Приставка — PowerPoint</comment>
     <comment xml:lang="ca">complement de PowerPoint</comment>
     <comment xml:lang="cs">doplněk PowerPoint</comment>
     <comment xml:lang="da">PowerPoint-tilføjelse</comment>
     <comment xml:lang="de">PowerPoint Add-in</comment>
     <comment xml:lang="el">Πρόσθετο PowerPoint</comment>
-    <comment xml:lang="en_GB">PowerPoint add-in</comment>
+    <comment xml:lang="en-GB">PowerPoint add-in</comment>
     <comment xml:lang="es">complemento de PowerPoint</comment>
     <comment xml:lang="eu">PowerPoint gehigarria</comment>
     <comment xml:lang="fi">PowerPoint-lisäosa</comment>
     <comment xml:lang="fr">complément PowerPoint</comment>
+    <comment xml:lang="fur">zonte PowerPoint</comment>
     <comment xml:lang="ga">breiseán PowerPoint</comment>
     <comment xml:lang="gl">complemento de PowerPoint</comment>
     <comment xml:lang="he">תוסף של PowerPoint</comment>
@@ -3351,7 +3442,7 @@
     <comment xml:lang="oc">complement PowerPoint</comment>
     <comment xml:lang="pl">Dodatek PowerPoint</comment>
     <comment xml:lang="pt">extensão PowerPoint</comment>
-    <comment xml:lang="pt_BR">Suplemento do PowerPoint</comment>
+    <comment xml:lang="pt-BR">Suplemento do PowerPoint</comment>
     <comment xml:lang="ru">Дополнение PowerPoint</comment>
     <comment xml:lang="sk">Doplnok aplikácie PowerPoint </comment>
     <comment xml:lang="sl">Vstavek PowerPoint</comment>
@@ -3359,28 +3450,30 @@
     <comment xml:lang="sv">PowerPoint-tillägg</comment>
     <comment xml:lang="tr">PowerPoint eklentisi</comment>
     <comment xml:lang="uk">додаток PowerPoint</comment>
-    <comment xml:lang="zh_CN">PowerPoint 外接程序</comment>
-    <comment xml:lang="zh_TW">PowerPoint 增益集</comment>
+    <comment xml:lang="zh-CN">PowerPoint 外接程序</comment>
+    <comment xml:lang="zh-TW">PowerPoint 增益集</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.ppam"/>
   </mime-type>
   <mime-type type="application/vnd.ms-powerpoint.presentation.macroEnabled.12">
     <comment>PowerPoint presentation</comment>
+    <comment xml:lang="af">PowerPoint-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي PowerPoint</comment>
-    <comment xml:lang="be@latin">Prezentacyja PowerPoint</comment>
+    <comment xml:lang="be-Latn">Prezentacyja PowerPoint</comment>
     <comment xml:lang="bg">Презентация — PowerPoint</comment>
     <comment xml:lang="ca">presentació de PowerPoint</comment>
     <comment xml:lang="cs">prezentace PowerPoint</comment>
     <comment xml:lang="da">PowerPoint-præsentation</comment>
     <comment xml:lang="de">PowerPoint-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση PowerPoint</comment>
-    <comment xml:lang="en_GB">PowerPoint presentation</comment>
+    <comment xml:lang="en-GB">PowerPoint presentation</comment>
     <comment xml:lang="eo">PowerPoint-prezentaĵo</comment>
     <comment xml:lang="es">presentación de PowerPoint</comment>
     <comment xml:lang="eu">PowerPoint aurkezpena</comment>
     <comment xml:lang="fi">PowerPoint-esitys</comment>
     <comment xml:lang="fo">PowerPoint framløga</comment>
     <comment xml:lang="fr">présentation PowerPoint</comment>
+    <comment xml:lang="fur">presentazion PowerPoint</comment>
     <comment xml:lang="ga">láithreoireacht PowerPoint</comment>
     <comment xml:lang="gl">presentación de PowerPoint</comment>
     <comment xml:lang="he">מצגת PowerPoint</comment>
@@ -3400,7 +3493,7 @@
     <comment xml:lang="oc">presentacion PowerPoint</comment>
     <comment xml:lang="pl">Prezentacja PowerPoint</comment>
     <comment xml:lang="pt">apresentação PowerPoint</comment>
-    <comment xml:lang="pt_BR">Apresentação do PowerPoint</comment>
+    <comment xml:lang="pt-BR">Apresentação do PowerPoint</comment>
     <comment xml:lang="ro">Prezentare PowerPoint</comment>
     <comment xml:lang="ru">Презентация PowerPoint</comment>
     <comment xml:lang="sk">Prezentácia PowerPoint</comment>
@@ -3411,25 +3504,28 @@
     <comment xml:lang="tr">PowerPoint sunumu</comment>
     <comment xml:lang="uk">презентація PowerPoint</comment>
     <comment xml:lang="vi">Trình diễn PowerPoint</comment>
-    <comment xml:lang="zh_CN">PowerPoint 演示文稿</comment>
-    <comment xml:lang="zh_TW">PowerPoint 簡報</comment>
+    <comment xml:lang="zh-CN">PowerPoint 演示文稿</comment>
+    <comment xml:lang="zh-TW">PowerPoint 簡報</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.pptm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
   </mime-type>
   <mime-type type="application/vnd.ms-powerpoint.slide.macroEnabled.12">
     <comment>PowerPoint slide</comment>
+    <comment xml:lang="af">PowerPoint-skyfie</comment>
     <comment xml:lang="ast">Diapositiva de PowerPoint</comment>
+    <comment xml:lang="bg">Кадър — PowerPoint</comment>
     <comment xml:lang="ca">dispositiva de PowerPoint</comment>
     <comment xml:lang="cs">promítání PowerPoint</comment>
     <comment xml:lang="da">PowerPoint-dias</comment>
     <comment xml:lang="de">PowerPoint-Folie</comment>
     <comment xml:lang="el">Διαφάνεια PowerPoint</comment>
-    <comment xml:lang="en_GB">PowerPoint slide</comment>
+    <comment xml:lang="en-GB">PowerPoint slide</comment>
     <comment xml:lang="es">diapositiva de PowerPoint</comment>
     <comment xml:lang="eu">PowerPoint diapositiba</comment>
     <comment xml:lang="fi">PowerPoint-dia</comment>
     <comment xml:lang="fr">diapositive PowerPoint</comment>
+    <comment xml:lang="fur">diapositive PowerPoint</comment>
     <comment xml:lang="ga">sleamhnán PowerPoint</comment>
     <comment xml:lang="he">שקופית של PowerPoint</comment>
     <comment xml:lang="hr">PowerPoint prezentacija</comment>
@@ -3438,40 +3534,43 @@
     <comment xml:lang="id">Salindia PowerPoint</comment>
     <comment xml:lang="it">Diapositiva PowerPoint</comment>
     <comment xml:lang="kk">PowerPoint слайды</comment>
-    <comment xml:lang="ko">파워포인트 슬라이드</comment>
+    <comment xml:lang="ko">PowerPoint 슬라이드</comment>
     <comment xml:lang="oc">Diapositiva PowerPoint</comment>
     <comment xml:lang="pl">Slajd PowerPoint</comment>
     <comment xml:lang="pt">diapositivo PowerPoint</comment>
-    <comment xml:lang="pt_BR">Slide do PowerPoint</comment>
+    <comment xml:lang="pt-BR">Slide do PowerPoint</comment>
     <comment xml:lang="ru">Слайд PowerPoint</comment>
     <comment xml:lang="sk">Snímka aplikácie PowerPoint</comment>
+    <comment xml:lang="sl">Prosojnica PowerPoint</comment>
     <comment xml:lang="sr">Пауер поинт слајд</comment>
     <comment xml:lang="sv">PowerPoint-bildspel</comment>
     <comment xml:lang="tr">PowerPoint sunusu</comment>
     <comment xml:lang="uk">слайд PowerPoint</comment>
-    <comment xml:lang="zh_CN">PowerPoint 幻灯片</comment>
-    <comment xml:lang="zh_TW">PowerPoint 投影片</comment>
+    <comment xml:lang="zh-CN">PowerPoint 幻灯片</comment>
+    <comment xml:lang="zh-TW">PowerPoint 投影片</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.sldm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.presentationml.slide"/>
   </mime-type>
   <mime-type type="application/vnd.ms-powerpoint.slideshow.macroEnabled.12">
     <comment>PowerPoint presentation</comment>
+    <comment xml:lang="af">PowerPoint-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي PowerPoint</comment>
-    <comment xml:lang="be@latin">Prezentacyja PowerPoint</comment>
+    <comment xml:lang="be-Latn">Prezentacyja PowerPoint</comment>
     <comment xml:lang="bg">Презентация — PowerPoint</comment>
     <comment xml:lang="ca">presentació de PowerPoint</comment>
     <comment xml:lang="cs">prezentace PowerPoint</comment>
     <comment xml:lang="da">PowerPoint-præsentation</comment>
     <comment xml:lang="de">PowerPoint-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση PowerPoint</comment>
-    <comment xml:lang="en_GB">PowerPoint presentation</comment>
+    <comment xml:lang="en-GB">PowerPoint presentation</comment>
     <comment xml:lang="eo">PowerPoint-prezentaĵo</comment>
     <comment xml:lang="es">presentación de PowerPoint</comment>
     <comment xml:lang="eu">PowerPoint aurkezpena</comment>
     <comment xml:lang="fi">PowerPoint-esitys</comment>
     <comment xml:lang="fo">PowerPoint framløga</comment>
     <comment xml:lang="fr">présentation PowerPoint</comment>
+    <comment xml:lang="fur">presentazion PowerPoint</comment>
     <comment xml:lang="ga">láithreoireacht PowerPoint</comment>
     <comment xml:lang="gl">presentación de PowerPoint</comment>
     <comment xml:lang="he">מצגת PowerPoint</comment>
@@ -3491,7 +3590,7 @@
     <comment xml:lang="oc">presentacion PowerPoint</comment>
     <comment xml:lang="pl">Prezentacja PowerPoint</comment>
     <comment xml:lang="pt">apresentação PowerPoint</comment>
-    <comment xml:lang="pt_BR">Apresentação do PowerPoint</comment>
+    <comment xml:lang="pt-BR">Apresentação do PowerPoint</comment>
     <comment xml:lang="ro">Prezentare PowerPoint</comment>
     <comment xml:lang="ru">Презентация PowerPoint</comment>
     <comment xml:lang="sk">Prezentácia PowerPoint</comment>
@@ -3502,25 +3601,28 @@
     <comment xml:lang="tr">PowerPoint sunumu</comment>
     <comment xml:lang="uk">презентація PowerPoint</comment>
     <comment xml:lang="vi">Trình diễn PowerPoint</comment>
-    <comment xml:lang="zh_CN">PowerPoint 演示文稿</comment>
-    <comment xml:lang="zh_TW">PowerPoint 簡報</comment>
+    <comment xml:lang="zh-CN">PowerPoint 演示文稿</comment>
+    <comment xml:lang="zh-TW">PowerPoint 簡報</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.ppsm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.presentationml.slideshow"/>
   </mime-type>
   <mime-type type="application/vnd.ms-powerpoint.template.macroEnabled.12">
     <comment>PowerPoint presentation template</comment>
+    <comment xml:lang="af">PowerPoint-voorleggingsjabloon</comment>
     <comment xml:lang="ast">Plantía de presentaciones de PowerPoint</comment>
+    <comment xml:lang="bg">Шаблон за презентация — PowerPoint</comment>
     <comment xml:lang="ca">plantilla de presentació de PowerPoint</comment>
     <comment xml:lang="cs">šablona prezentace PowerPoint</comment>
     <comment xml:lang="da">PowerPoint-præsentationsskabelon</comment>
     <comment xml:lang="de">PowerPoint-Präsentationsvorlage</comment>
     <comment xml:lang="el">Πρότυπο παρουσίασης PowerPoint</comment>
-    <comment xml:lang="en_GB">PowerPoint presentation template</comment>
+    <comment xml:lang="en-GB">PowerPoint presentation template</comment>
     <comment xml:lang="es">plantilla de presentación de PowerPoint</comment>
     <comment xml:lang="eu">PowerPoint aurkezpen txantiloia</comment>
     <comment xml:lang="fi">PowerPoint-esitysmalli</comment>
     <comment xml:lang="fr">modèle de présentation PowerPoint</comment>
+    <comment xml:lang="fur">model di presentazion PowerPoint</comment>
     <comment xml:lang="ga">teimpléad láithreoireachta PowerPoint</comment>
     <comment xml:lang="he">תבנית מצגת PowerPoint</comment>
     <comment xml:lang="hr">Predložak PowerPoint prezentacije</comment>
@@ -3529,255 +3631,230 @@
     <comment xml:lang="id">Templat presentasi PowerPoint</comment>
     <comment xml:lang="it">Modello presentazione PowerPoint</comment>
     <comment xml:lang="kk">PowerPoint презентация үлгісі</comment>
-    <comment xml:lang="ko">PowerPoint 프리젠테이션 서식</comment>
+    <comment xml:lang="ko">PowerPoint 프레젠테이션 서식</comment>
     <comment xml:lang="oc">Modèl de presentacion PowerPoint</comment>
     <comment xml:lang="pl">Szablon prezentacji PowerPoint</comment>
-    <comment xml:lang="pt">modelo de apresentação PowerPoint</comment>
-    <comment xml:lang="pt_BR">Modelo de apresentação do PowerPoint</comment>
+    <comment xml:lang="pt">predefinição de apresentação PowerPoint</comment>
+    <comment xml:lang="pt-BR">Modelo de apresentação do PowerPoint</comment>
     <comment xml:lang="ru">Шаблон презентации PowerPoint</comment>
     <comment xml:lang="sk">Šablóna prezentácie aplikácie PowerPoint</comment>
+    <comment xml:lang="sl">Predloga predstavitve PowerPoint</comment>
     <comment xml:lang="sr">Шаблон презентације Пауер поинта</comment>
     <comment xml:lang="sv">PowerPoint-presentationsmall</comment>
     <comment xml:lang="tr">PowerPoint sunum şablonu</comment>
     <comment xml:lang="uk">шаблон презентації PowerPoint</comment>
-    <comment xml:lang="zh_CN">PowerPoint 演示文稿模板</comment>
-    <comment xml:lang="zh_TW">PowerPoint 簡報範本</comment>
+    <comment xml:lang="zh-CN">PowerPoint 演示文稿模板</comment>
+    <comment xml:lang="zh-TW">PowerPoint 簡報範本</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.potm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.presentationml.template"/>
   </mime-type>
     <mime-type type="application/vnd.ms-visio.drawing.main+xml">
-    <comment>Office Open XML Visio Drawing</comment>
+    <comment>Office Open XML Visio drawing</comment>
+    <comment xml:lang="bg">Чертеж — Office Open XML Visio</comment>
     <comment xml:lang="ca">dibuix en Office Open XML de Visio</comment>
-    <comment xml:lang="cs">kresba Office Open XML Visio</comment>
     <comment xml:lang="da">Office Open XML Visio-tegning</comment>
     <comment xml:lang="de">Office-Open-XML-Visio-Zeichnung</comment>
-    <comment xml:lang="el">Σχέδιο Office Open XML Visio</comment>
-    <comment xml:lang="en_GB">Office Open XML Visio Drawing</comment>
-    <comment xml:lang="es">dibujo en OOXML de Visio</comment>
+    <comment xml:lang="en-GB">Office Open XML Visio drawing</comment>
+    <comment xml:lang="es">dibujo Office Open XML de Visio</comment>
     <comment xml:lang="eu">Office Open XML Visio marrazkia</comment>
     <comment xml:lang="fi">Office Open XML Visio -piirros</comment>
     <comment xml:lang="fr">dessin Visio Office Open XML</comment>
-    <comment xml:lang="ga">Líníocht Office Open XML Visio</comment>
-    <comment xml:lang="he">ציור Visio ב־Open XML מבית Office</comment>
     <comment xml:lang="hr">Office Open XML Visio crtež</comment>
     <comment xml:lang="hu">Office Open XML Visio rajz</comment>
-    <comment xml:lang="ia">Designo Office Open XML Visio</comment>
-    <comment xml:lang="id">Gambar Visio Office Open XML</comment>
+    <comment xml:lang="id">Gambar Office Open XML Visio</comment>
     <comment xml:lang="it">Disegno Visio Office Open XML</comment>
     <comment xml:lang="kk">Office Open XML Visio суреті</comment>
     <comment xml:lang="ko">오피스 오픈 XML 비지오 드로잉</comment>
     <comment xml:lang="pl">Rysunek Office Open XML Visio</comment>
-    <comment xml:lang="pt">desenho Office Open XML Visio</comment>
-    <comment xml:lang="pt_BR">Desenho do Visio em Office Open XML</comment>
+    <comment xml:lang="pt">desenho Visio do Open Office XML</comment>
+    <comment xml:lang="pt-BR">Desenho do Office Open XML Visio</comment>
     <comment xml:lang="ru">Рисунок Visio формата Office Open XML</comment>
-    <comment xml:lang="sk">Kresba aplikácie Visio Office Open XML</comment>
-    <comment xml:lang="sr">Офисов отворени ИксМЛ Визио цртеж</comment>
-    <comment xml:lang="sv">Office Open XML Visio-teckning</comment>
-    <comment xml:lang="tr">Office Open XML Visio Çizimi</comment>
-    <comment xml:lang="uk">схема VIisio у форматі Office Open XML</comment>
-    <comment xml:lang="zh_CN">Office Open XML Visio 绘图</comment>
-    <comment xml:lang="zh_TW">Office Open XML Visio 繪圖</comment>
+    <comment xml:lang="sk">Kresba aplikácie Office Open XML Visio</comment>
+    <comment xml:lang="sl">Risba Office Open XML Visio</comment>
+    <comment xml:lang="sv">Office Open XML Visio-ritning</comment>
+    <comment xml:lang="tr">Office Open XML Visio çizimi</comment>
+    <comment xml:lang="uk">малюнок Visio Office Open у XML</comment>
+    <comment xml:lang="zh-CN">Office Open XML Visio 绘图</comment>
+    <comment xml:lang="zh-TW">Office Open XML Visio 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.vsdx"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/vnd.ms-visio.template.main+xml">
-    <comment>Office Open XML Visio Template</comment>
+    <comment>Office Open XML Visio template</comment>
+    <comment xml:lang="bg">Шаблон за чертеж — Office Open XML Visio</comment>
     <comment xml:lang="ca">plantilla en Office Open XML de Visio</comment>
-    <comment xml:lang="cs">šablona Office Open XML Visio</comment>
     <comment xml:lang="da">Office Open XML Visio-skabelon</comment>
     <comment xml:lang="de">Office-Open-XML-Visio-Vorlage</comment>
-    <comment xml:lang="el">Πρότυπο Office Open XML Visio</comment>
-    <comment xml:lang="en_GB">Office Open XML Visio Template</comment>
-    <comment xml:lang="es">plantilla en OOXML de Visio</comment>
+    <comment xml:lang="en-GB">Office Open XML Visio template</comment>
+    <comment xml:lang="es">plantilla Office Open XML de Visio</comment>
     <comment xml:lang="eu">Office Open XML Visio txantiloia</comment>
     <comment xml:lang="fi">Office Open XML Visio -malli</comment>
     <comment xml:lang="fr">modèle Visio Office Open XML</comment>
-    <comment xml:lang="ga">Teimpléad Office Open XML Visio</comment>
-    <comment xml:lang="he">תבנית Visio ב־Open XML מבית Office</comment>
-    <comment xml:lang="hr">Predložak Office Open XML Visio</comment>
+    <comment xml:lang="hr">Office Open XML Visio predložak</comment>
     <comment xml:lang="hu">Office Open XML Visio sablon</comment>
-    <comment xml:lang="ia">Patrono Office Open XML Visio</comment>
-    <comment xml:lang="id">Templat Visio Office Open XML</comment>
+    <comment xml:lang="id">Templat Office Open XML Visio</comment>
     <comment xml:lang="it">Modello Visio Office Open XML</comment>
     <comment xml:lang="kk">Office Open XML Visio үлгісі</comment>
-    <comment xml:lang="ko">오피스 오픈 XML 비지오 서식</comment>
+    <comment xml:lang="ko">오피스 오픈 XML 비지오 양식</comment>
     <comment xml:lang="pl">Szablon Office Open XML Visio</comment>
-    <comment xml:lang="pt">modelo Office Open XML Visio</comment>
-    <comment xml:lang="pt_BR">Modelo do Visio em Office Open XML</comment>
+    <comment xml:lang="pt">predefinição Visio do Open Office XML</comment>
+    <comment xml:lang="pt-BR">Modelo Office Open XML Visio</comment>
     <comment xml:lang="ru">Шаблон Visio формата Office Open XML</comment>
-    <comment xml:lang="sk">Šablóna aplikácie Visio Office Open XML</comment>
-    <comment xml:lang="sr">Офисов отворени ИксМЛ Визио шаблон</comment>
+    <comment xml:lang="sk">Šablóna aplikácie Office Open XML Visio</comment>
+    <comment xml:lang="sl">Predloga Office Open XML Visio</comment>
     <comment xml:lang="sv">Office Open XML Visio-mall</comment>
-    <comment xml:lang="tr">Office Open XML Visio Şablonu</comment>
-    <comment xml:lang="uk">шаблон Visio у форматі Office Open XML</comment>
-    <comment xml:lang="zh_CN">Office Open XML Visio 模板</comment>
-    <comment xml:lang="zh_TW">Office Open XML Visio 範本</comment>
+    <comment xml:lang="tr">Office Open XML Visio şablonu</comment>
+    <comment xml:lang="uk">шаблон Visio Office Open у XML</comment>
+    <comment xml:lang="zh-CN">Office Open XML Visio 模板</comment>
+    <comment xml:lang="zh-TW">Office Open XML Visio 範本</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.vstx"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/vnd.ms-visio.stencil.main+xml">
-    <comment>Office Open XML Visio Stencil</comment>
+    <comment>Office Open XML Visio stencil</comment>
+    <comment xml:lang="bg">Образци — Office Open XML Visio</comment>
     <comment xml:lang="ca">patró en Office Open XML de Visio</comment>
-    <comment xml:lang="cs">objekty Office Open XML Visio</comment>
     <comment xml:lang="da">Office Open XML Visio-stencil</comment>
     <comment xml:lang="de">Office-Open-XML-Visio-Schablone</comment>
-    <comment xml:lang="en_GB">Office Open XML Visio Stencil</comment>
-    <comment xml:lang="es">esténcil en OOXML de Visio</comment>
+    <comment xml:lang="en-GB">Office Open XML Visio stencil</comment>
+    <comment xml:lang="es">galería de símbolos Office Open XML de Visio</comment>
     <comment xml:lang="eu">Office Open XML Visio txantiloia</comment>
-    <comment xml:lang="fi">Office Open XML Visio -kaavio</comment>
+    <comment xml:lang="fi">Office Open XML Visio -malli</comment>
     <comment xml:lang="fr">stencil Visio Office Open XML</comment>
-    <comment xml:lang="ga">Stionsal Office Open XML Visio</comment>
-    <comment xml:lang="he">דגם ל־Visio ב־Open XML מבית Office</comment>
     <comment xml:lang="hr">Office Open XML Visio šablona</comment>
     <comment xml:lang="hu">Office Open XML Visio stencil</comment>
-    <comment xml:lang="ia">Stencil Office Open XML Visio</comment>
-    <comment xml:lang="id">Stensil Visio Office Open XML</comment>
+    <comment xml:lang="id">Stensil Office Open XML Visio</comment>
     <comment xml:lang="it">Stencil Visio Office Open XML</comment>
-    <comment xml:lang="kk">Office Open XML пішімінің Visio трафареті</comment>
+    <comment xml:lang="kk">Office Open XML Visio трафареті</comment>
     <comment xml:lang="ko">오피스 오픈 XML 비지오 스텐실</comment>
     <comment xml:lang="pl">Wzór Office Open XML Visio</comment>
-    <comment xml:lang="pt">Stencil Office Open XML Visio</comment>
-    <comment xml:lang="pt_BR">Estêncil do Visio em Office Open XML</comment>
+    <comment xml:lang="pt">estêncil Visio do Open Office XML</comment>
+    <comment xml:lang="pt-BR">Estêncil do Office Open XML Visio</comment>
     <comment xml:lang="ru">Трафарет Visio формата Office Open XML</comment>
-    <comment xml:lang="sk">Objekt aplikácie Visio Office Open XML</comment>
-    <comment xml:lang="sr">Офисов отворени ИксМЛ Визио шаблон</comment>
     <comment xml:lang="sv">Office Open XML Visio-stencil</comment>
-    <comment xml:lang="tr">Office Open XML Visio Kalıbı</comment>
-    <comment xml:lang="uk">трафарет Visio у форматі Office Open XML</comment>
-    <comment xml:lang="zh_CN">Office Open XML Visio 模具</comment>
-    <comment xml:lang="zh_TW">Office Open XML Visio 圖形樣本</comment>
+    <comment xml:lang="tr">Office Open XML Visio kalıbı</comment>
+    <comment xml:lang="uk">трафарет Visio Office Open у XML</comment>
+    <comment xml:lang="zh-CN">Office Open XML Visio 模具</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.vssx"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/vnd.ms-visio.drawing.macroEnabled.main+xml">
-    <comment>Office Open XML Visio Drawing</comment>
+    <comment>Office Open XML Visio drawing</comment>
+    <comment xml:lang="bg">Чертеж — Office Open XML Visio</comment>
     <comment xml:lang="ca">dibuix en Office Open XML de Visio</comment>
-    <comment xml:lang="cs">kresba Office Open XML Visio</comment>
     <comment xml:lang="da">Office Open XML Visio-tegning</comment>
     <comment xml:lang="de">Office-Open-XML-Visio-Zeichnung</comment>
-    <comment xml:lang="el">Σχέδιο Office Open XML Visio</comment>
-    <comment xml:lang="en_GB">Office Open XML Visio Drawing</comment>
-    <comment xml:lang="es">dibujo en OOXML de Visio</comment>
+    <comment xml:lang="en-GB">Office Open XML Visio drawing</comment>
+    <comment xml:lang="es">dibujo Office Open XML de Visio</comment>
     <comment xml:lang="eu">Office Open XML Visio marrazkia</comment>
     <comment xml:lang="fi">Office Open XML Visio -piirros</comment>
     <comment xml:lang="fr">dessin Visio Office Open XML</comment>
-    <comment xml:lang="ga">Líníocht Office Open XML Visio</comment>
-    <comment xml:lang="he">ציור Visio ב־Open XML מבית Office</comment>
     <comment xml:lang="hr">Office Open XML Visio crtež</comment>
     <comment xml:lang="hu">Office Open XML Visio rajz</comment>
-    <comment xml:lang="ia">Designo Office Open XML Visio</comment>
-    <comment xml:lang="id">Gambar Visio Office Open XML</comment>
+    <comment xml:lang="id">Gambar Office Open XML Visio</comment>
     <comment xml:lang="it">Disegno Visio Office Open XML</comment>
     <comment xml:lang="kk">Office Open XML Visio суреті</comment>
     <comment xml:lang="ko">오피스 오픈 XML 비지오 드로잉</comment>
     <comment xml:lang="pl">Rysunek Office Open XML Visio</comment>
-    <comment xml:lang="pt">desenho Office Open XML Visio</comment>
-    <comment xml:lang="pt_BR">Desenho do Visio em Office Open XML</comment>
+    <comment xml:lang="pt">desenho Visio do Open Office XML</comment>
+    <comment xml:lang="pt-BR">Desenho do Office Open XML Visio</comment>
     <comment xml:lang="ru">Рисунок Visio формата Office Open XML</comment>
-    <comment xml:lang="sk">Kresba aplikácie Visio Office Open XML</comment>
-    <comment xml:lang="sr">Офисов отворени ИксМЛ Визио цртеж</comment>
-    <comment xml:lang="sv">Office Open XML Visio-teckning</comment>
-    <comment xml:lang="tr">Office Open XML Visio Çizimi</comment>
-    <comment xml:lang="uk">схема VIisio у форматі Office Open XML</comment>
-    <comment xml:lang="zh_CN">Office Open XML Visio 绘图</comment>
-    <comment xml:lang="zh_TW">Office Open XML Visio 繪圖</comment>
+    <comment xml:lang="sk">Kresba aplikácie Office Open XML Visio</comment>
+    <comment xml:lang="sl">Risba Office Open XML Visio</comment>
+    <comment xml:lang="sv">Office Open XML Visio-ritning</comment>
+    <comment xml:lang="tr">Office Open XML Visio çizimi</comment>
+    <comment xml:lang="uk">малюнок Visio Office Open у XML</comment>
+    <comment xml:lang="zh-CN">Office Open XML Visio 绘图</comment>
+    <comment xml:lang="zh-TW">Office Open XML Visio 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.vsdm"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/vnd.ms-visio.template.macroEnabled.main+xml">
-    <comment>Office Open XML Visio Template</comment>
+    <comment>Office Open XML Visio template</comment>
+    <comment xml:lang="bg">Шаблон за чертеж — Office Open XML Visio</comment>
     <comment xml:lang="ca">plantilla en Office Open XML de Visio</comment>
-    <comment xml:lang="cs">šablona Office Open XML Visio</comment>
     <comment xml:lang="da">Office Open XML Visio-skabelon</comment>
     <comment xml:lang="de">Office-Open-XML-Visio-Vorlage</comment>
-    <comment xml:lang="el">Πρότυπο Office Open XML Visio</comment>
-    <comment xml:lang="en_GB">Office Open XML Visio Template</comment>
-    <comment xml:lang="es">plantilla en OOXML de Visio</comment>
+    <comment xml:lang="en-GB">Office Open XML Visio template</comment>
+    <comment xml:lang="es">plantilla Office Open XML de Visio</comment>
     <comment xml:lang="eu">Office Open XML Visio txantiloia</comment>
     <comment xml:lang="fi">Office Open XML Visio -malli</comment>
     <comment xml:lang="fr">modèle Visio Office Open XML</comment>
-    <comment xml:lang="ga">Teimpléad Office Open XML Visio</comment>
-    <comment xml:lang="he">תבנית Visio ב־Open XML מבית Office</comment>
-    <comment xml:lang="hr">Predložak Office Open XML Visio</comment>
+    <comment xml:lang="hr">Office Open XML Visio predložak</comment>
     <comment xml:lang="hu">Office Open XML Visio sablon</comment>
-    <comment xml:lang="ia">Patrono Office Open XML Visio</comment>
-    <comment xml:lang="id">Templat Visio Office Open XML</comment>
+    <comment xml:lang="id">Templat Office Open XML Visio</comment>
     <comment xml:lang="it">Modello Visio Office Open XML</comment>
     <comment xml:lang="kk">Office Open XML Visio үлгісі</comment>
-    <comment xml:lang="ko">오피스 오픈 XML 비지오 서식</comment>
+    <comment xml:lang="ko">오피스 오픈 XML 비지오 양식</comment>
     <comment xml:lang="pl">Szablon Office Open XML Visio</comment>
-    <comment xml:lang="pt">modelo Office Open XML Visio</comment>
-    <comment xml:lang="pt_BR">Modelo do Visio em Office Open XML</comment>
+    <comment xml:lang="pt">predefinição Visio do Open Office XML</comment>
+    <comment xml:lang="pt-BR">Modelo Office Open XML Visio</comment>
     <comment xml:lang="ru">Шаблон Visio формата Office Open XML</comment>
-    <comment xml:lang="sk">Šablóna aplikácie Visio Office Open XML</comment>
-    <comment xml:lang="sr">Офисов отворени ИксМЛ Визио шаблон</comment>
+    <comment xml:lang="sk">Šablóna aplikácie Office Open XML Visio</comment>
+    <comment xml:lang="sl">Predloga Office Open XML Visio</comment>
     <comment xml:lang="sv">Office Open XML Visio-mall</comment>
-    <comment xml:lang="tr">Office Open XML Visio Şablonu</comment>
-    <comment xml:lang="uk">шаблон Visio у форматі Office Open XML</comment>
-    <comment xml:lang="zh_CN">Office Open XML Visio 模板</comment>
-    <comment xml:lang="zh_TW">Office Open XML Visio 範本</comment>
+    <comment xml:lang="tr">Office Open XML Visio şablonu</comment>
+    <comment xml:lang="uk">шаблон Visio Office Open у XML</comment>
+    <comment xml:lang="zh-CN">Office Open XML Visio 模板</comment>
+    <comment xml:lang="zh-TW">Office Open XML Visio 範本</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.vstm"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/vnd.ms-visio.stencil.macroEnabled.main+xml">
-    <comment>Office Open XML Visio Stencil</comment>
+    <comment>Office Open XML Visio stencil</comment>
+    <comment xml:lang="bg">Образци — Office Open XML Visio</comment>
     <comment xml:lang="ca">patró en Office Open XML de Visio</comment>
-    <comment xml:lang="cs">objekty Office Open XML Visio</comment>
     <comment xml:lang="da">Office Open XML Visio-stencil</comment>
     <comment xml:lang="de">Office-Open-XML-Visio-Schablone</comment>
-    <comment xml:lang="en_GB">Office Open XML Visio Stencil</comment>
-    <comment xml:lang="es">esténcil en OOXML de Visio</comment>
+    <comment xml:lang="en-GB">Office Open XML Visio stencil</comment>
+    <comment xml:lang="es">galería de símbolos Office Open XML de Visio</comment>
     <comment xml:lang="eu">Office Open XML Visio txantiloia</comment>
-    <comment xml:lang="fi">Office Open XML Visio -kaavio</comment>
+    <comment xml:lang="fi">Office Open XML Visio -malli</comment>
     <comment xml:lang="fr">stencil Visio Office Open XML</comment>
-    <comment xml:lang="ga">Stionsal Office Open XML Visio</comment>
-    <comment xml:lang="he">דגם ל־Visio ב־Open XML מבית Office</comment>
     <comment xml:lang="hr">Office Open XML Visio šablona</comment>
     <comment xml:lang="hu">Office Open XML Visio stencil</comment>
-    <comment xml:lang="ia">Stencil Office Open XML Visio</comment>
-    <comment xml:lang="id">Stensil Visio Office Open XML</comment>
+    <comment xml:lang="id">Stensil Office Open XML Visio</comment>
     <comment xml:lang="it">Stencil Visio Office Open XML</comment>
-    <comment xml:lang="kk">Office Open XML пішімінің Visio трафареті</comment>
+    <comment xml:lang="kk">Office Open XML Visio трафареті</comment>
     <comment xml:lang="ko">오피스 오픈 XML 비지오 스텐실</comment>
     <comment xml:lang="pl">Wzór Office Open XML Visio</comment>
-    <comment xml:lang="pt">Stencil Office Open XML Visio</comment>
-    <comment xml:lang="pt_BR">Estêncil do Visio em Office Open XML</comment>
+    <comment xml:lang="pt">estêncil Visio do Open Office XML</comment>
+    <comment xml:lang="pt-BR">Estêncil do Office Open XML Visio</comment>
     <comment xml:lang="ru">Трафарет Visio формата Office Open XML</comment>
-    <comment xml:lang="sk">Objekt aplikácie Visio Office Open XML</comment>
-    <comment xml:lang="sr">Офисов отворени ИксМЛ Визио шаблон</comment>
     <comment xml:lang="sv">Office Open XML Visio-stencil</comment>
-    <comment xml:lang="tr">Office Open XML Visio Kalıbı</comment>
-    <comment xml:lang="uk">трафарет Visio у форматі Office Open XML</comment>
-    <comment xml:lang="zh_CN">Office Open XML Visio 模具</comment>
-    <comment xml:lang="zh_TW">Office Open XML Visio 圖形樣本</comment>
+    <comment xml:lang="tr">Office Open XML Visio kalıbı</comment>
+    <comment xml:lang="uk">трафарет Visio Office Open у XML</comment>
+    <comment xml:lang="zh-CN">Office Open XML Visio 模具</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.vssm"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/vnd.ms-word.document.macroEnabled.12">
     <comment>Word document</comment>
+    <comment xml:lang="af">Word-dokument</comment>
     <comment xml:lang="ar">مستند Word</comment>
     <comment xml:lang="ast">Documentu de Word</comment>
-    <comment xml:lang="be@latin">Dakument Word</comment>
+    <comment xml:lang="be-Latn">Dakument Word</comment>
     <comment xml:lang="bg">Документ — Word</comment>
     <comment xml:lang="ca">document Word</comment>
     <comment xml:lang="cs">dokument Word</comment>
     <comment xml:lang="da">Worddokument</comment>
     <comment xml:lang="de">Word-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Word</comment>
-    <comment xml:lang="en_GB">Word document</comment>
+    <comment xml:lang="en-GB">Word document</comment>
     <comment xml:lang="eo">Word-dokumento</comment>
     <comment xml:lang="es">documento de Word</comment>
     <comment xml:lang="eu">Word dokumentua</comment>
     <comment xml:lang="fi">Word-asiakirja</comment>
     <comment xml:lang="fo">Word skjal</comment>
     <comment xml:lang="fr">document Word</comment>
+    <comment xml:lang="fur">document Word</comment>
     <comment xml:lang="ga">cáipéis Word</comment>
     <comment xml:lang="gl">documento de Word</comment>
     <comment xml:lang="he">מסמך Word</comment>
@@ -3797,7 +3874,7 @@
     <comment xml:lang="oc">document Word</comment>
     <comment xml:lang="pl">Dokument Word</comment>
     <comment xml:lang="pt">documento Word</comment>
-    <comment xml:lang="pt_BR">Documento do Word</comment>
+    <comment xml:lang="pt-BR">Documento do Word</comment>
     <comment xml:lang="ro">Document Word</comment>
     <comment xml:lang="ru">Документ Word</comment>
     <comment xml:lang="sk">Dokument Word</comment>
@@ -3808,25 +3885,28 @@
     <comment xml:lang="tr">Word belgesi</comment>
     <comment xml:lang="uk">документ Word</comment>
     <comment xml:lang="vi">Tài liệu Word</comment>
-    <comment xml:lang="zh_CN">Word 文档</comment>
-    <comment xml:lang="zh_TW">Word 文件</comment>
+    <comment xml:lang="zh-CN">Word 文档</comment>
+    <comment xml:lang="zh-TW">Word 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.docm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
   </mime-type>
   <mime-type type="application/vnd.ms-word.template.macroEnabled.12">
     <comment>Word document template</comment>
+    <comment xml:lang="af">Word-dokumentsjabloon</comment>
     <comment xml:lang="ast">Plantía de documentu de Word</comment>
+    <comment xml:lang="bg">Шаблон за документ — Word</comment>
     <comment xml:lang="ca">plantilla de document Word</comment>
     <comment xml:lang="cs">šablona dokumentu Word</comment>
     <comment xml:lang="da">Word-dokumentskabelon</comment>
     <comment xml:lang="de">Word-Dokumentvorlage</comment>
     <comment xml:lang="el">Πρότυπο έγγραφο Word</comment>
-    <comment xml:lang="en_GB">Word document template</comment>
+    <comment xml:lang="en-GB">Word document template</comment>
     <comment xml:lang="es">plantilla de documento de Word</comment>
     <comment xml:lang="eu">Word dokumentuaren txantiloia</comment>
     <comment xml:lang="fi">Word-asiakirjamalli</comment>
     <comment xml:lang="fr">modèle de document Word</comment>
+    <comment xml:lang="fur">model di document Word</comment>
     <comment xml:lang="ga">teimpléad Word</comment>
     <comment xml:lang="he">תבנית מסמך Word</comment>
     <comment xml:lang="hr">Predložak Word dokumenta</comment>
@@ -3839,37 +3919,48 @@
     <comment xml:lang="oc">modèl de document Word</comment>
     <comment xml:lang="pl">Szablon dokumentu Word</comment>
     <comment xml:lang="pt">modelo de documento Word</comment>
-    <comment xml:lang="pt_BR">Modelo de documento do Word</comment>
+    <comment xml:lang="pt-BR">Modelo de documento do Word</comment>
     <comment xml:lang="ru">Шаблон документа Word</comment>
     <comment xml:lang="sk">Šablóna dokumentu aplikácie Word</comment>
+    <comment xml:lang="sl">Predloga dokumenta Word</comment>
     <comment xml:lang="sr">Шаблон Ворд документа</comment>
     <comment xml:lang="sv">Word-dokumentmall</comment>
     <comment xml:lang="tr">Word belgesi şablonu</comment>
     <comment xml:lang="uk">шаблон документа Word</comment>
-    <comment xml:lang="zh_CN">Word 文档模板</comment>
-    <comment xml:lang="zh_TW">Word 文件範本</comment>
+    <comment xml:lang="zh-CN">Word 文档模板</comment>
+    <comment xml:lang="zh-TW">Word 文件範本</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.dotm"/>
     <sub-class-of type="application/vnd.openxmlformats-officedocument.wordprocessingml.template"/>
   </mime-type>
   <mime-type type="application/oxps">
+    <comment>OpenXPS document</comment>
+    <acronym>OpenXPS</acronym>
+    <expanded-acronym>Open XML Paper Specification</expanded-acronym>
+    <sub-class-of type="application/zip"/>
+    <generic-icon name="x-office-document"/>
+    <glob pattern="*.oxps"/>
+  </mime-type>
+  <mime-type type="application/vnd.ms-xpsdocument">
     <comment>XPS document</comment>
+    <comment xml:lang="af">XPS-dokument</comment>
     <comment xml:lang="ar">مستند XPS</comment>
     <comment xml:lang="ast">Documentu XPS</comment>
-    <comment xml:lang="be@latin">Dakument XPS</comment>
+    <comment xml:lang="be-Latn">Dakument XPS</comment>
     <comment xml:lang="bg">Документ — XPS</comment>
     <comment xml:lang="ca">document XPS</comment>
     <comment xml:lang="cs">dokument XPS</comment>
     <comment xml:lang="da">XPS-dokument</comment>
     <comment xml:lang="de">XPS-Dokument</comment>
     <comment xml:lang="el">Έγγραφο XPS</comment>
-    <comment xml:lang="en_GB">XPS document</comment>
+    <comment xml:lang="en-GB">XPS document</comment>
     <comment xml:lang="eo">XPS-dokumento</comment>
     <comment xml:lang="es">documento XPS</comment>
     <comment xml:lang="eu">XPS dokumentua</comment>
     <comment xml:lang="fi">XPS-asiakirja</comment>
     <comment xml:lang="fo">XPS skjal</comment>
     <comment xml:lang="fr">document XPS</comment>
+    <comment xml:lang="fur">document XPS</comment>
     <comment xml:lang="ga">cáipéis XPS</comment>
     <comment xml:lang="gl">documento XPS</comment>
     <comment xml:lang="he">מסמך XPS</comment>
@@ -3889,7 +3980,7 @@
     <comment xml:lang="oc">document XPS</comment>
     <comment xml:lang="pl">Dokument XPS</comment>
     <comment xml:lang="pt">documento XPS</comment>
-    <comment xml:lang="pt_BR">Documento XPS</comment>
+    <comment xml:lang="pt-BR">Documento XPS</comment>
     <comment xml:lang="ro">Document XPS</comment>
     <comment xml:lang="ru">Документ XPS</comment>
     <comment xml:lang="sk">Dokument XPS</comment>
@@ -3900,34 +3991,34 @@
     <comment xml:lang="tr">XPS belgesi</comment>
     <comment xml:lang="uk">документ XPS</comment>
     <comment xml:lang="vi">Tài liệu XPS</comment>
-    <comment xml:lang="zh_CN">XPS 文档</comment>
-    <comment xml:lang="zh_TW">XPS 文件</comment>
+    <comment xml:lang="zh-CN">XPS 文档</comment>
+    <comment xml:lang="zh-TW">XPS 文件</comment>
     <acronym>XPS</acronym>
-    <expanded-acronym>Open XML Paper Specification</expanded-acronym>
+    <expanded-acronym>XML Paper Specification</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
-    <glob pattern="*.oxps"/>
     <glob pattern="*.xps"/>
-    <alias type="application/vnd.ms-xpsdocument"/>
     <alias type="application/xps"/>
   </mime-type>
   <mime-type type="application/vnd.ms-works">
     <comment>Microsoft Works document</comment>
+    <comment xml:lang="af">Microsoft Works-dokument</comment>
     <comment xml:lang="ar">مستند Microsoft Works</comment>
     <comment xml:lang="ast">Documentu de Microsoft Works</comment>
-    <comment xml:lang="be@latin">Dakument Microsoft Works</comment>
+    <comment xml:lang="be-Latn">Dakument Microsoft Works</comment>
     <comment xml:lang="bg">Документ — Microsoft Works</comment>
     <comment xml:lang="ca">document de Microsoft Works</comment>
     <comment xml:lang="cs">dokument Microsoft Works</comment>
     <comment xml:lang="da">Microsoft Works-dokument</comment>
     <comment xml:lang="de">Microsoft-Works-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Microsoft Works</comment>
-    <comment xml:lang="en_GB">Microsoft Works document</comment>
+    <comment xml:lang="en-GB">Microsoft Works document</comment>
     <comment xml:lang="es">documento de Microsoft Works</comment>
     <comment xml:lang="eu">Microsoft Works dokumentua</comment>
     <comment xml:lang="fi">Microsoft Works -asiakirja</comment>
     <comment xml:lang="fo">Microsoft Works skjal</comment>
     <comment xml:lang="fr">document Microsoft Works</comment>
+    <comment xml:lang="fur">document Microsoft Works</comment>
     <comment xml:lang="ga">cáipéis Microsoft Works</comment>
     <comment xml:lang="gl">documento de Microsoft Works</comment>
     <comment xml:lang="he">מסמך Microsoft Works</comment>
@@ -3948,7 +4039,7 @@
     <comment xml:lang="oc">document Microsoft Works</comment>
     <comment xml:lang="pl">Dokument Microsoft Works</comment>
     <comment xml:lang="pt">documento Microsoft Works</comment>
-    <comment xml:lang="pt_BR">Documento do Microsoft Works</comment>
+    <comment xml:lang="pt-BR">Documento do Microsoft Works</comment>
     <comment xml:lang="ro">Document Microsoft Works</comment>
     <comment xml:lang="ru">Документ Microsoft Works</comment>
     <comment xml:lang="sk">Dokument Microsoft Works</comment>
@@ -3959,8 +4050,8 @@
     <comment xml:lang="tr">Microsoft Works belgesi</comment>
     <comment xml:lang="uk">документ Microsoft Works</comment>
     <comment xml:lang="vi">Tài liệu Microsoft Works</comment>
-    <comment xml:lang="zh_CN">Microsoft Works 文档</comment>
-    <comment xml:lang="zh_TW">微軟 Works 文件</comment>
+    <comment xml:lang="zh-CN">Microsoft Works 文档</comment>
+    <comment xml:lang="zh-TW">微軟 Works 文件</comment>
     <sub-class-of type="application/x-ole-storage"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.wcm"/>
@@ -3971,6 +4062,7 @@
   </mime-type>
   <mime-type type="application/vnd.visio">
     <comment>Microsoft Visio document</comment>
+    <comment xml:lang="af">Microsoft Visio-dokument</comment>
     <comment xml:lang="ast">Documentu de Microsoft Visio</comment>
     <comment xml:lang="bg">Документ — Microsoft Visio</comment>
     <comment xml:lang="ca">document de Microsoft Visio</comment>
@@ -3978,11 +4070,12 @@
     <comment xml:lang="da">Microsoft Visio-dokument</comment>
     <comment xml:lang="de">Microsoft-Visio-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Microsoft Visio</comment>
-    <comment xml:lang="en_GB">Microsoft Visio document</comment>
+    <comment xml:lang="en-GB">Microsoft Visio document</comment>
     <comment xml:lang="es">documento de Microsoft Visio</comment>
     <comment xml:lang="eu">Microsoft Visio dokumentua</comment>
     <comment xml:lang="fi">Microsoft Visio -asiakirja</comment>
     <comment xml:lang="fr">document Microsoft Visio</comment>
+    <comment xml:lang="fur">document Microsoft Visio</comment>
     <comment xml:lang="ga">cáipéis Microsoft Visio</comment>
     <comment xml:lang="gl">Documento de Microsoft Visio</comment>
     <comment xml:lang="he">מסמך </comment>
@@ -4000,7 +4093,7 @@
     <comment xml:lang="oc">document Microsoft Visio</comment>
     <comment xml:lang="pl">Dokument Microsoft Visio</comment>
     <comment xml:lang="pt">documento Microsoft Visio</comment>
-    <comment xml:lang="pt_BR">Documento do Microsoft Visio</comment>
+    <comment xml:lang="pt-BR">Documento do Microsoft Visio</comment>
     <comment xml:lang="ru">Документ Microsoft Visio</comment>
     <comment xml:lang="sk">Dokument Microsoft Visio</comment>
     <comment xml:lang="sl">Dokument Microsoft Visio</comment>
@@ -4008,8 +4101,8 @@
     <comment xml:lang="sv">Microsoft Visio-dokument</comment>
     <comment xml:lang="tr">Microsoft Visio belgesi</comment>
     <comment xml:lang="uk">документ Microsoft Visio</comment>
-    <comment xml:lang="zh_CN">Microsoft Visio 文档</comment>
-    <comment xml:lang="zh_TW">Microsoft Visio文件</comment>
+    <comment xml:lang="zh-CN">Microsoft Visio 文档</comment>
+    <comment xml:lang="zh-TW">微軟 Visio 文件</comment>
     <sub-class-of type="application/x-ole-storage"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.vsd"/>
@@ -4019,22 +4112,24 @@
   </mime-type>
   <mime-type type="application/msword">
     <comment>Word document</comment>
+    <comment xml:lang="af">Word-dokument</comment>
     <comment xml:lang="ar">مستند Word</comment>
     <comment xml:lang="ast">Documentu de Word</comment>
-    <comment xml:lang="be@latin">Dakument Word</comment>
+    <comment xml:lang="be-Latn">Dakument Word</comment>
     <comment xml:lang="bg">Документ — Word</comment>
     <comment xml:lang="ca">document Word</comment>
     <comment xml:lang="cs">dokument Word</comment>
     <comment xml:lang="da">Worddokument</comment>
     <comment xml:lang="de">Word-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Word</comment>
-    <comment xml:lang="en_GB">Word document</comment>
+    <comment xml:lang="en-GB">Word document</comment>
     <comment xml:lang="eo">Word-dokumento</comment>
     <comment xml:lang="es">documento de Word</comment>
     <comment xml:lang="eu">Word dokumentua</comment>
     <comment xml:lang="fi">Word-asiakirja</comment>
     <comment xml:lang="fo">Word skjal</comment>
     <comment xml:lang="fr">document Word</comment>
+    <comment xml:lang="fur">document Word</comment>
     <comment xml:lang="ga">cáipéis Word</comment>
     <comment xml:lang="gl">documento de Word</comment>
     <comment xml:lang="he">מסמך Word</comment>
@@ -4054,7 +4149,7 @@
     <comment xml:lang="oc">document Word</comment>
     <comment xml:lang="pl">Dokument Word</comment>
     <comment xml:lang="pt">documento Word</comment>
-    <comment xml:lang="pt_BR">Documento do Word</comment>
+    <comment xml:lang="pt-BR">Documento do Word</comment>
     <comment xml:lang="ro">Document Word</comment>
     <comment xml:lang="ru">Документ Word</comment>
     <comment xml:lang="sk">Dokument Word</comment>
@@ -4065,20 +4160,20 @@
     <comment xml:lang="tr">Word belgesi</comment>
     <comment xml:lang="uk">документ Word</comment>
     <comment xml:lang="vi">Tài liệu Word</comment>
-    <comment xml:lang="zh_CN">Word 文档</comment>
-    <comment xml:lang="zh_TW">Word 文件</comment>
+    <comment xml:lang="zh-CN">Word 文档</comment>
+    <comment xml:lang="zh-TW">Word 文件</comment>
     <sub-class-of type="application/x-ole-storage"/>
     <generic-icon name="x-office-document"/>
     <magic priority="60">
-      <match value="\x31\xbe\x00\x00" type="string" offset="0"/>
-      <match value="PO^Q`" type="string" offset="0"/>
-      <match value="\376\067\0\043" type="string" offset="0"/>
-      <match value="\333\245-\0\0\0" type="string" offset="0"/>
-      <match value="MSWordDoc" type="string" offset="2112"/>
-      <match value="MSWordDoc" type="string" offset="2108"/>
-      <match value="Microsoft Word document data" type="string" offset="2112"/>
-      <match value="bjbj" type="string" offset="546"/>
-      <match value="jbjb" type="string" offset="546"/>
+      <match type="string" value="\x31\xbe\x00\x00" offset="0"/>
+      <match type="string" value="PO^Q`" offset="0"/>
+      <match type="string" value="\376\067\0\043" offset="0"/>
+      <match type="string" value="\333\245-\0\0\0" offset="0"/>
+      <match type="string" value="MSWordDoc" offset="2112"/>
+      <match type="string" value="MSWordDoc" offset="2108"/>
+      <match type="string" value="Microsoft Word document data" offset="2112"/>
+      <match type="string" value="bjbj" offset="546"/>
+      <match type="string" value="jbjb" offset="546"/>
     </magic>
     <glob pattern="*.doc"/>
     <alias type="application/vnd.ms-word"/>
@@ -4087,22 +4182,24 @@
   </mime-type>
   <mime-type type="application/msword-template">
     <comment>Word template</comment>
+    <comment xml:lang="af">Word-sjabloon</comment>
     <comment xml:lang="ar">قالب Word</comment>
     <comment xml:lang="ast">Plantía de Word</comment>
-    <comment xml:lang="be@latin">Šablon Word</comment>
+    <comment xml:lang="be-Latn">Šablon Word</comment>
     <comment xml:lang="bg">Шаблон за документи — Word</comment>
     <comment xml:lang="ca">plantilla de Word</comment>
     <comment xml:lang="cs">šablona Word</comment>
     <comment xml:lang="da">Wordskabelon</comment>
     <comment xml:lang="de">Word-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο έγγραφο Word</comment>
-    <comment xml:lang="en_GB">Word template</comment>
+    <comment xml:lang="en-GB">Word template</comment>
     <comment xml:lang="eo">Word-ŝablono</comment>
     <comment xml:lang="es">plantilla de Word</comment>
     <comment xml:lang="eu">Word txantiloia</comment>
     <comment xml:lang="fi">Word-malli</comment>
     <comment xml:lang="fo">Word formur</comment>
     <comment xml:lang="fr">modèle Word</comment>
+    <comment xml:lang="fur">model Word</comment>
     <comment xml:lang="ga">teimpléad Word</comment>
     <comment xml:lang="gl">Plantilla de Word</comment>
     <comment xml:lang="he">תבנית Word</comment>
@@ -4122,7 +4219,7 @@
     <comment xml:lang="oc">modèl Word</comment>
     <comment xml:lang="pl">Szablon Word</comment>
     <comment xml:lang="pt">modelo Word</comment>
-    <comment xml:lang="pt_BR">Modelo do Word</comment>
+    <comment xml:lang="pt-BR">Modelo do Word</comment>
     <comment xml:lang="ro">Șablon Word</comment>
     <comment xml:lang="ru">Шаблон Word</comment>
     <comment xml:lang="sk">Šablóna Word</comment>
@@ -4133,25 +4230,28 @@
     <comment xml:lang="tr">Word şablonu</comment>
     <comment xml:lang="uk">шаблон Word</comment>
     <comment xml:lang="vi">Mẫu Word</comment>
-    <comment xml:lang="zh_CN">Word 模板</comment>
-    <comment xml:lang="zh_TW">Word 範本</comment>
+    <comment xml:lang="zh-CN">Word 模板</comment>
+    <comment xml:lang="zh-TW">Word 範本</comment>
     <sub-class-of type="application/msword"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.dot"/>
   </mime-type>
   <mime-type type="application/gml+xml">
     <comment>GML document</comment>
+    <comment xml:lang="af">GML-dokument</comment>
     <comment xml:lang="ast">Documentu GML</comment>
+    <comment xml:lang="bg">Документ — GML</comment>
     <comment xml:lang="ca">document GML</comment>
     <comment xml:lang="cs">dokument GML</comment>
     <comment xml:lang="da">GML-dokument</comment>
     <comment xml:lang="de">GML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο GML</comment>
-    <comment xml:lang="en_GB">GML document</comment>
+    <comment xml:lang="en-GB">GML document</comment>
     <comment xml:lang="es">documento GML</comment>
     <comment xml:lang="eu">GML dokumentua</comment>
     <comment xml:lang="fi">GML-asiakirja</comment>
     <comment xml:lang="fr">document GML</comment>
+    <comment xml:lang="fur">document GML</comment>
     <comment xml:lang="ga">cáipéis GML</comment>
     <comment xml:lang="gl">Documento GML</comment>
     <comment xml:lang="he">מסמך GML</comment>
@@ -4163,11 +4263,12 @@
     <comment xml:lang="ja">GML ドキュメント</comment>
     <comment xml:lang="kk">GML құжаты</comment>
     <comment xml:lang="ko">GML 문서</comment>
+    <comment xml:lang="lt">GML dokumentas</comment>
     <comment xml:lang="lv">GML dokuments</comment>
     <comment xml:lang="oc">document GML</comment>
     <comment xml:lang="pl">Dokument GML</comment>
     <comment xml:lang="pt">documento GML</comment>
-    <comment xml:lang="pt_BR">Documento GML</comment>
+    <comment xml:lang="pt-BR">Documento GML</comment>
     <comment xml:lang="ru">Документ GML</comment>
     <comment xml:lang="sk">Dokument GML</comment>
     <comment xml:lang="sl">Dokument GML</comment>
@@ -4175,8 +4276,8 @@
     <comment xml:lang="sv">GML-dokument</comment>
     <comment xml:lang="tr">GML belgesi</comment>
     <comment xml:lang="uk">документ GML</comment>
-    <comment xml:lang="zh_CN">GML 文档</comment>
-    <comment xml:lang="zh_TW">GML 文件</comment>
+    <comment xml:lang="zh-CN">GML 文档</comment>
+    <comment xml:lang="zh-TW">GML 文件</comment>
     <acronym>GML</acronym>
     <expanded-acronym>Geography Markup Language</expanded-acronym>
     <glob pattern="*.gml"/>
@@ -4185,20 +4286,22 @@
   </mime-type>
   <mime-type type="application/gnunet-directory">
     <comment>GNUnet search file</comment>
+    <comment xml:lang="af">GNUnet-soeklêer</comment>
     <comment xml:lang="ar">ملف بحث GNUnet</comment>
-    <comment xml:lang="be@latin">fajł pošuku GNUnet</comment>
+    <comment xml:lang="be-Latn">fajł pošuku GNUnet</comment>
     <comment xml:lang="bg">Указател за търсене — GNUnet</comment>
     <comment xml:lang="ca">fitxer de cerca GNUnet</comment>
     <comment xml:lang="cs">vyhledávací soubor GNUnet</comment>
     <comment xml:lang="da">GNunet-søgefil</comment>
     <comment xml:lang="de">GNUnet-Suchdatei</comment>
     <comment xml:lang="el">Αρχείο αναζήτησης GNUnet</comment>
-    <comment xml:lang="en_GB">GNUnet search file</comment>
+    <comment xml:lang="en-GB">GNUnet search file</comment>
     <comment xml:lang="es">archivo de búsqueda GNUnet</comment>
     <comment xml:lang="eu">GNUnet bilaketako fitxategia</comment>
     <comment xml:lang="fi">GNUnet-hakutiedosto</comment>
     <comment xml:lang="fo">GNUnet leitifíla</comment>
     <comment xml:lang="fr">fichier de recherche GNUnet</comment>
+    <comment xml:lang="fur">file di ricercje GNUnet</comment>
     <comment xml:lang="ga">comhad cuardaigh GNUnet</comment>
     <comment xml:lang="gl">ficheiro de busca de GNUnet</comment>
     <comment xml:lang="he">קובץ חיפוש של GNUnet</comment>
@@ -4219,7 +4322,7 @@
     <comment xml:lang="oc">fichièr de recèrca GNUnet</comment>
     <comment xml:lang="pl">Plik wyszukiwania GNUnet</comment>
     <comment xml:lang="pt">ficheiro de procura GNUnet</comment>
-    <comment xml:lang="pt_BR">Arquivo de pesquisa do GNUnet</comment>
+    <comment xml:lang="pt-BR">Arquivo de pesquisa do GNUnet</comment>
     <comment xml:lang="ro">Fișier căutare GNUnet</comment>
     <comment xml:lang="ru">Файл поиска GNUnet</comment>
     <comment xml:lang="sk">Vyhľadávací súbor GNUnet</comment>
@@ -4230,30 +4333,32 @@
     <comment xml:lang="tr">GNUnet arama dosyası</comment>
     <comment xml:lang="uk">файл пошуку GNUnet</comment>
     <comment xml:lang="vi">Tập tin tìm kiếm GNUnet</comment>
-    <comment xml:lang="zh_CN">GNUnet 搜索文件</comment>
-    <comment xml:lang="zh_TW">GNUnet 搜尋檔案</comment>
+    <comment xml:lang="zh-CN">GNUnet 搜索文件</comment>
+    <comment xml:lang="zh-TW">GNUnet 搜尋檔案</comment>
     <magic priority="50">
-      <match value="\211GND\r\n\032\n" type="string" offset="0"/>
+      <match type="string" value="\211GND\r\n\032\n" offset="0"/>
     </magic>
     <glob pattern="*.gnd"/>
   </mime-type>
   <mime-type type="application/vnd.ms-tnef">
     <comment>TNEF message</comment>
+    <comment xml:lang="af">TNEF-boodskap</comment>
     <comment xml:lang="ar">رسالة TNEF</comment>
     <comment xml:lang="ast">Mensaxe TNEF</comment>
-    <comment xml:lang="be@latin">List TNEF</comment>
+    <comment xml:lang="be-Latn">List TNEF</comment>
     <comment xml:lang="bg">Съобщение — TNEF</comment>
     <comment xml:lang="ca">missatge TNEF</comment>
     <comment xml:lang="cs">zpráva TNEF</comment>
     <comment xml:lang="da">TNEF-meddelelse</comment>
     <comment xml:lang="de">TNEF-Nachricht</comment>
     <comment xml:lang="el">Μήνυμα TNEF</comment>
-    <comment xml:lang="en_GB">TNEF message</comment>
+    <comment xml:lang="en-GB">TNEF message</comment>
     <comment xml:lang="es">mensaje TNEF</comment>
     <comment xml:lang="eu">TNEF mezua</comment>
     <comment xml:lang="fi">TNEF-viesti</comment>
     <comment xml:lang="fo">TNEF boð</comment>
     <comment xml:lang="fr">message TNEF</comment>
+    <comment xml:lang="fur">messaç TNEF</comment>
     <comment xml:lang="ga">teachtaireacht TNEF</comment>
     <comment xml:lang="gl">mensaxe TNEF</comment>
     <comment xml:lang="he">הודעת TNEF</comment>
@@ -4273,7 +4378,7 @@
     <comment xml:lang="oc">messatge TNEF</comment>
     <comment xml:lang="pl">Wiadomość TNEF</comment>
     <comment xml:lang="pt">mensagem TNEF</comment>
-    <comment xml:lang="pt_BR">Mensagem TNEF</comment>
+    <comment xml:lang="pt-BR">Mensagem TNEF</comment>
     <comment xml:lang="ro">Mesaj TNEF</comment>
     <comment xml:lang="ru">Сообщение TNEF</comment>
     <comment xml:lang="sk">Správa TNEF</comment>
@@ -4284,12 +4389,12 @@
     <comment xml:lang="tr">TNEF iletisi</comment>
     <comment xml:lang="uk">повідомлення TNEF</comment>
     <comment xml:lang="vi">Thông điệp TNEF</comment>
-    <comment xml:lang="zh_CN">TNEF 信件</comment>
-    <comment xml:lang="zh_TW">TNEF 訊息</comment>
+    <comment xml:lang="zh-CN">TNEF 信件</comment>
+    <comment xml:lang="zh-TW">TNEF 訊息</comment>
     <acronym>TNEF</acronym>
     <expanded-acronym>Transport Neutral Encapsulation Format</expanded-acronym>
     <magic priority="50">
-      <match value="0x223e9f78" type="little32" offset="0"/>
+      <match type="little32" value="0x223e9f78" offset="0"/>
     </magic>
     <glob pattern="*.tnef"/>
     <glob pattern="*.tnf"/>
@@ -4298,9 +4403,10 @@
   </mime-type>
   <mime-type type="application/vnd.stardivision.calc">
     <comment>StarCalc spreadsheet</comment>
+    <comment xml:lang="af">StarCalc-sigblad</comment>
     <comment xml:lang="ar">جدول StarCalc</comment>
     <comment xml:lang="az">StarCalc hesab cədvəli</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš StarCalc</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš StarCalc</comment>
     <comment xml:lang="bg">Таблица — StarCalc</comment>
     <comment xml:lang="ca">full de càlcul de StarCalc</comment>
     <comment xml:lang="cs">sešit StarCalc</comment>
@@ -4308,13 +4414,14 @@
     <comment xml:lang="da">StarCalc-regneark</comment>
     <comment xml:lang="de">StarCalc-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο StarCalc</comment>
-    <comment xml:lang="en_GB">StarCalc spreadsheet</comment>
+    <comment xml:lang="en-GB">StarCalc spreadsheet</comment>
     <comment xml:lang="eo">StarCalc-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo de StarCalc</comment>
     <comment xml:lang="eu">StarCalc kalkulu-orria</comment>
     <comment xml:lang="fi">StarCalc-taulukko</comment>
     <comment xml:lang="fo">StarCalc rokniark</comment>
     <comment xml:lang="fr">feuille de calcul StarCalc</comment>
+    <comment xml:lang="fur">sfuei di calcul StarCalc</comment>
     <comment xml:lang="ga">scarbhileog StarCalc</comment>
     <comment xml:lang="gl">folla de cálculo de StarCalc</comment>
     <comment xml:lang="he">גליון נתונים של StarCalc</comment>
@@ -4335,7 +4442,7 @@
     <comment xml:lang="oc">fuèlh de calcul StarCalc</comment>
     <comment xml:lang="pl">Arkusz StarCalc</comment>
     <comment xml:lang="pt">folha de cálculo do StarCalc</comment>
-    <comment xml:lang="pt_BR">Planilha do StarCalc</comment>
+    <comment xml:lang="pt-BR">Planilha do StarCalc</comment>
     <comment xml:lang="ro">Foaie de calcul StarCalc</comment>
     <comment xml:lang="ru">Электронная таблица StarCalc</comment>
     <comment xml:lang="sk">Zošit StarCalc</comment>
@@ -4343,19 +4450,20 @@
     <comment xml:lang="sq">Fletë llogaritjesh StarCalc</comment>
     <comment xml:lang="sr">Стар калк табела</comment>
     <comment xml:lang="sv">StarCalc-kalkylblad</comment>
-    <comment xml:lang="tr">StarCalc çalışma sayfası</comment>
+    <comment xml:lang="tr">StarCalc hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця StarCalc</comment>
     <comment xml:lang="vi">Bảng tính StarCalc</comment>
-    <comment xml:lang="zh_CN">StarCalc 电子表格</comment>
-    <comment xml:lang="zh_TW">StarCalc 試算表</comment>
+    <comment xml:lang="zh-CN">StarCalc 电子表格</comment>
+    <comment xml:lang="zh-TW">StarCalc 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.sdc"/>
   </mime-type>
   <mime-type type="application/vnd.stardivision.chart">
     <comment>StarChart chart</comment>
+    <comment xml:lang="af">StarChart-grafiek</comment>
     <comment xml:lang="ar">مخطط StarChart</comment>
     <comment xml:lang="az">StarChart cədvəli</comment>
-    <comment xml:lang="be@latin">Dyjahrama StarChart</comment>
+    <comment xml:lang="be-Latn">Dyjahrama StarChart</comment>
     <comment xml:lang="bg">Диаграма — StarChart</comment>
     <comment xml:lang="ca">diagrama de StarChart</comment>
     <comment xml:lang="cs">graf StarChart</comment>
@@ -4363,13 +4471,14 @@
     <comment xml:lang="da">StarChart-diagram</comment>
     <comment xml:lang="de">StarChart-Diagramm</comment>
     <comment xml:lang="el">Γράφημα StarChart</comment>
-    <comment xml:lang="en_GB">StarChart chart</comment>
+    <comment xml:lang="en-GB">StarChart chart</comment>
     <comment xml:lang="eo">StarChart-diagramo</comment>
     <comment xml:lang="es">gráfico de StarChart</comment>
     <comment xml:lang="eu">StarChart diagrama</comment>
     <comment xml:lang="fi">StarChart-kaavio</comment>
     <comment xml:lang="fo">StarChart strikumynd</comment>
     <comment xml:lang="fr">graphique StarChart</comment>
+    <comment xml:lang="fur">grafic StarChart</comment>
     <comment xml:lang="ga">cairt StarChart</comment>
     <comment xml:lang="gl">gráfica de StarChart</comment>
     <comment xml:lang="he">טבלה של StarChart</comment>
@@ -4390,7 +4499,7 @@
     <comment xml:lang="oc">grafic StarChart</comment>
     <comment xml:lang="pl">Wykres StarChart</comment>
     <comment xml:lang="pt">gráfico do StarChart</comment>
-    <comment xml:lang="pt_BR">Gráfico do StarChart</comment>
+    <comment xml:lang="pt-BR">Gráfico do StarChart</comment>
     <comment xml:lang="ro">Diagramă StarChart</comment>
     <comment xml:lang="ru">Диаграмма StarChart</comment>
     <comment xml:lang="sk">Graf StarChart</comment>
@@ -4398,19 +4507,20 @@
     <comment xml:lang="sq">Grafik StarChart</comment>
     <comment xml:lang="sr">График Стар Графика</comment>
     <comment xml:lang="sv">StarChart-diagram</comment>
-    <comment xml:lang="tr">StarChart çizgelgesi</comment>
+    <comment xml:lang="tr">StarChart çizgesi</comment>
     <comment xml:lang="uk">діаграма StarChart</comment>
     <comment xml:lang="vi">Đồ thị StarChart</comment>
-    <comment xml:lang="zh_CN">StarCalc 图表</comment>
-    <comment xml:lang="zh_TW">StarChart 圖表</comment>
+    <comment xml:lang="zh-CN">StarCalc 图表</comment>
+    <comment xml:lang="zh-TW">StarChart 圖表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.sds"/>
   </mime-type>
   <mime-type type="application/vnd.stardivision.draw">
     <comment>StarDraw drawing</comment>
+    <comment xml:lang="af">StarDraw-tekening</comment>
     <comment xml:lang="ar">تصميم StarDraw</comment>
     <comment xml:lang="az">StarDraw çəkimi</comment>
-    <comment xml:lang="be@latin">Rysunak StarDraw</comment>
+    <comment xml:lang="be-Latn">Rysunak StarDraw</comment>
     <comment xml:lang="bg">Чертеж — StarDraw</comment>
     <comment xml:lang="ca">dibuix de StarDraw</comment>
     <comment xml:lang="cs">kresba StarDraw</comment>
@@ -4418,13 +4528,14 @@
     <comment xml:lang="da">StarDraw-tegning</comment>
     <comment xml:lang="de">StarDraw-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο StarDraw</comment>
-    <comment xml:lang="en_GB">StarDraw drawing</comment>
+    <comment xml:lang="en-GB">StarDraw drawing</comment>
     <comment xml:lang="eo">StarDraw-grafikaĵo</comment>
     <comment xml:lang="es">dibujo de StarDraw</comment>
     <comment xml:lang="eu">StarDraw marrazkia</comment>
     <comment xml:lang="fi">StarDraw-piirros</comment>
     <comment xml:lang="fo">StarDraw tekning</comment>
     <comment xml:lang="fr">dessin StarDraw</comment>
+    <comment xml:lang="fur">dissen StarDraw</comment>
     <comment xml:lang="ga">líníocht StarDraw</comment>
     <comment xml:lang="gl">debuxo de StarDraw</comment>
     <comment xml:lang="he">ציור של StarDrawing</comment>
@@ -4445,7 +4556,7 @@
     <comment xml:lang="oc">dessenh StarDraw</comment>
     <comment xml:lang="pl">Rysunek StarDraw</comment>
     <comment xml:lang="pt">desenho do StarDraw</comment>
-    <comment xml:lang="pt_BR">Desenho do StarDraw</comment>
+    <comment xml:lang="pt-BR">Desenho do StarDraw</comment>
     <comment xml:lang="ro">Desen StarDraw</comment>
     <comment xml:lang="ru">Рисунок StarDraw</comment>
     <comment xml:lang="sk">Kresba StarDraw</comment>
@@ -4456,16 +4567,17 @@
     <comment xml:lang="tr">StarDraw çizimi</comment>
     <comment xml:lang="uk">малюнок StarDraw</comment>
     <comment xml:lang="vi">Bản vẽ StarDraw</comment>
-    <comment xml:lang="zh_CN">StarDraw 绘图</comment>
-    <comment xml:lang="zh_TW">StarDraw 繪圖</comment>
+    <comment xml:lang="zh-CN">StarDraw 绘图</comment>
+    <comment xml:lang="zh-TW">StarDraw 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.sda"/>
   </mime-type>
   <mime-type type="application/vnd.stardivision.impress">
     <comment>StarImpress presentation</comment>
+    <comment xml:lang="af">StarImpress-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي StarImpress</comment>
     <comment xml:lang="az">StarImpress təqdimatı</comment>
-    <comment xml:lang="be@latin">Prezentacyja StarImpress</comment>
+    <comment xml:lang="be-Latn">Prezentacyja StarImpress</comment>
     <comment xml:lang="bg">Презентация — StarImpress</comment>
     <comment xml:lang="ca">presentació de StarImpress</comment>
     <comment xml:lang="cs">prezentace StarImpress</comment>
@@ -4473,13 +4585,14 @@
     <comment xml:lang="da">StarImpress-præsentation</comment>
     <comment xml:lang="de">StarImpress-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση StarImpress</comment>
-    <comment xml:lang="en_GB">StarImpress presentation</comment>
+    <comment xml:lang="en-GB">StarImpress presentation</comment>
     <comment xml:lang="eo">StarImpress-prezentaĵo</comment>
     <comment xml:lang="es">presentación de StarImpress</comment>
     <comment xml:lang="eu">StarImpress aurkezpena</comment>
     <comment xml:lang="fi">StarImpress-esitys</comment>
     <comment xml:lang="fo">StarImpress framløga</comment>
     <comment xml:lang="fr">présentation StarImpress</comment>
+    <comment xml:lang="fur">presentazion StarImpress</comment>
     <comment xml:lang="ga">láithreoireacht StarImpress</comment>
     <comment xml:lang="gl">presentación de StarImpress</comment>
     <comment xml:lang="he">מצגת של StarImpress</comment>
@@ -4500,7 +4613,7 @@
     <comment xml:lang="oc">presentacion StarImpress</comment>
     <comment xml:lang="pl">Prezentacja StarImpress</comment>
     <comment xml:lang="pt">apresentação do StarImpress</comment>
-    <comment xml:lang="pt_BR">Apresentação do StarImpress</comment>
+    <comment xml:lang="pt-BR">Apresentação do StarImpress</comment>
     <comment xml:lang="ro">Prezentare StarImpress</comment>
     <comment xml:lang="ru">Презентация StarImpress</comment>
     <comment xml:lang="sk">Prezentácia StarImpress</comment>
@@ -4511,29 +4624,31 @@
     <comment xml:lang="tr">StarImpress sunumu</comment>
     <comment xml:lang="uk">презентація StarImpress</comment>
     <comment xml:lang="vi">Trình diễn StarImpress</comment>
-    <comment xml:lang="zh_CN">StarImpress 演示文稿</comment>
-    <comment xml:lang="zh_TW">StarImpress 簡報檔</comment>
+    <comment xml:lang="zh-CN">StarImpress 演示文稿</comment>
+    <comment xml:lang="zh-TW">StarImpress 簡報</comment>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.sdd"/>
     <glob pattern="*.sdp"/>
   </mime-type>
   <mime-type type="application/vnd.stardivision.mail">
     <comment>StarMail email</comment>
+    <comment xml:lang="af">StarMail-e-pos</comment>
     <comment xml:lang="ar">بريد StarMail الإلكتروني</comment>
-    <comment xml:lang="be@latin">Email StarMail</comment>
+    <comment xml:lang="be-Latn">Email StarMail</comment>
     <comment xml:lang="bg">Електронно писмо — StarMail</comment>
     <comment xml:lang="ca">correu electrònic de StarMail</comment>
     <comment xml:lang="cs">e-mail StarMail</comment>
     <comment xml:lang="da">StarMail-e-brev</comment>
     <comment xml:lang="de">StarMail-E-Mail</comment>
     <comment xml:lang="el">Ηλ. μήνυμα StarMail</comment>
-    <comment xml:lang="en_GB">StarMail email</comment>
+    <comment xml:lang="en-GB">StarMail email</comment>
     <comment xml:lang="eo">StarMail-retpoŝto</comment>
     <comment xml:lang="es">correo electrónico de StarMail</comment>
     <comment xml:lang="eu">StarMail helb.el.</comment>
     <comment xml:lang="fi">StarMail-sähköposti</comment>
     <comment xml:lang="fo">StarMail t-postur</comment>
     <comment xml:lang="fr">courriel StarMail</comment>
+    <comment xml:lang="fur">e-mail StarMail</comment>
     <comment xml:lang="ga">ríomhphost StarMail</comment>
     <comment xml:lang="gl">Correo electrónico de StarMail</comment>
     <comment xml:lang="he">דוא״ל של StarMail</comment>
@@ -4554,7 +4669,7 @@
     <comment xml:lang="oc">corrièr electronic StarMail</comment>
     <comment xml:lang="pl">E-Mail StarMail</comment>
     <comment xml:lang="pt">email do StarMail</comment>
-    <comment xml:lang="pt_BR">E-mail do StarMail</comment>
+    <comment xml:lang="pt-BR">E-mail do StarMail</comment>
     <comment xml:lang="ro">Email StarEmail</comment>
     <comment xml:lang="ru">Электронное письмо StarMail</comment>
     <comment xml:lang="sk">E-mail StarMail</comment>
@@ -4565,27 +4680,29 @@
     <comment xml:lang="tr">StarMail epostası</comment>
     <comment xml:lang="uk">поштове повідомлення StarMail</comment>
     <comment xml:lang="vi">Thư điện tử StarMail</comment>
-    <comment xml:lang="zh_CN">StarMail 电子邮件</comment>
-    <comment xml:lang="zh_TW">StarMail 郵件</comment>
+    <comment xml:lang="zh-CN">StarMail 电子邮件</comment>
+    <comment xml:lang="zh-TW">StarMail 郵件</comment>
     <glob pattern="*.smd"/>
   </mime-type>
   <mime-type type="application/vnd.stardivision.math">
     <comment>StarMath formula</comment>
+    <comment xml:lang="af">StarMath-formule</comment>
     <comment xml:lang="ar">صيغة StarMath</comment>
-    <comment xml:lang="be@latin">Formuła StarMath</comment>
+    <comment xml:lang="be-Latn">Formuła StarMath</comment>
     <comment xml:lang="bg">Формула — StarMath</comment>
     <comment xml:lang="ca">fórmula de StarMath</comment>
     <comment xml:lang="cs">vzorec StarMath</comment>
     <comment xml:lang="da">StarMath-formel</comment>
     <comment xml:lang="de">StarMath-Formel</comment>
     <comment xml:lang="el">Μαθηματικός τύπος StarMath</comment>
-    <comment xml:lang="en_GB">StarMath formula</comment>
+    <comment xml:lang="en-GB">StarMath formula</comment>
     <comment xml:lang="eo">StarMath-formulo</comment>
     <comment xml:lang="es">fórmula de StarMath</comment>
     <comment xml:lang="eu">StarMath formula</comment>
     <comment xml:lang="fi">StarMath-kaava</comment>
     <comment xml:lang="fo">StarMath frymil</comment>
     <comment xml:lang="fr">formule StarMath</comment>
+    <comment xml:lang="fur">formule StarMath</comment>
     <comment xml:lang="ga">foirmle StarMath</comment>
     <comment xml:lang="gl">fórmula de StarMath</comment>
     <comment xml:lang="he">נוסחה של StarMath</comment>
@@ -4606,7 +4723,7 @@
     <comment xml:lang="oc">formula StarMath</comment>
     <comment xml:lang="pl">Formuła StarMath</comment>
     <comment xml:lang="pt">fórmula do StarMath</comment>
-    <comment xml:lang="pt_BR">Fórmula do StarMath</comment>
+    <comment xml:lang="pt-BR">Fórmula do StarMath</comment>
     <comment xml:lang="ro">Formulă StarMath</comment>
     <comment xml:lang="ru">Формула StarMath</comment>
     <comment xml:lang="sk">Vzorec StarMath</comment>
@@ -4617,17 +4734,18 @@
     <comment xml:lang="tr">StarMath formülü</comment>
     <comment xml:lang="uk">формула StarMath</comment>
     <comment xml:lang="vi">Công thức StarMath</comment>
-    <comment xml:lang="zh_CN">StarMath 公式</comment>
-    <comment xml:lang="zh_TW">StarMath 公式</comment>
+    <comment xml:lang="zh-CN">StarMath 公式</comment>
+    <comment xml:lang="zh-TW">StarMath 公式</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.smf"/>
   </mime-type>
   <mime-type type="application/vnd.stardivision.writer">
     <comment>StarWriter document</comment>
+    <comment xml:lang="af">StarWriter-dokument</comment>
     <comment xml:lang="ar">مستند StarWriter</comment>
     <comment xml:lang="ast">Documentu de StarWriter</comment>
     <comment xml:lang="az">StarWriter sənədi</comment>
-    <comment xml:lang="be@latin">Dakument StarWriter</comment>
+    <comment xml:lang="be-Latn">Dakument StarWriter</comment>
     <comment xml:lang="bg">Документ — StarWriter</comment>
     <comment xml:lang="ca">document StarWriter</comment>
     <comment xml:lang="cs">dokument StarWriter</comment>
@@ -4635,13 +4753,14 @@
     <comment xml:lang="da">StarWriter-dokument</comment>
     <comment xml:lang="de">StarWriter-Dokument</comment>
     <comment xml:lang="el">Έγγραφο StarWriter</comment>
-    <comment xml:lang="en_GB">StarWriter document</comment>
+    <comment xml:lang="en-GB">StarWriter document</comment>
     <comment xml:lang="eo">StarWriter-dokumento</comment>
     <comment xml:lang="es">documento de StarWriter</comment>
     <comment xml:lang="eu">StarWriter dokumentua</comment>
     <comment xml:lang="fi">StarWriter-asiakirja</comment>
     <comment xml:lang="fo">StarWriter skjal</comment>
     <comment xml:lang="fr">document StarWriter</comment>
+    <comment xml:lang="fur">document StarWriter</comment>
     <comment xml:lang="ga">cáipéis StarWriter</comment>
     <comment xml:lang="gl">documento de StarWriter</comment>
     <comment xml:lang="he">מסמך של StarWriter</comment>
@@ -4662,7 +4781,7 @@
     <comment xml:lang="oc">document StarWriter</comment>
     <comment xml:lang="pl">Dokument StarWriter</comment>
     <comment xml:lang="pt">documento do StarWriter</comment>
-    <comment xml:lang="pt_BR">Documento do StarWriter</comment>
+    <comment xml:lang="pt-BR">Documento do StarWriter</comment>
     <comment xml:lang="ro">Document StarWriter</comment>
     <comment xml:lang="ru">Документ StarWriter</comment>
     <comment xml:lang="sk">Dokument StarWriter</comment>
@@ -4673,33 +4792,35 @@
     <comment xml:lang="tr">StarWriter belgesi</comment>
     <comment xml:lang="uk">документ StarWriter</comment>
     <comment xml:lang="vi">Tài liệu StarWriter</comment>
-    <comment xml:lang="zh_CN">StarWriter 文档</comment>
-    <comment xml:lang="zh_TW">StarWriter 文件</comment>
+    <comment xml:lang="zh-CN">StarWriter 文档</comment>
+    <comment xml:lang="zh-TW">StarWriter 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.sdw"/>
     <glob pattern="*.vor"/>
     <glob pattern="*.sgl"/>
     <magic priority="90">
-      <match value="StarWriter" type="string" offset="2089"/>
+      <match type="string" value="StarWriter" offset="2089"/>
     </magic>
     <alias type="application/vnd.stardivision.writer-global"/>
   </mime-type>
   <mime-type type="application/vnd.sun.xml.calc">
     <comment>OpenOffice Calc spreadsheet</comment>
+    <comment xml:lang="af">OpenOffice Calc-sigblad</comment>
     <comment xml:lang="ar">جدول Calc المكتب المفتوح</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš OpenOffice Calc</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš OpenOffice Calc</comment>
     <comment xml:lang="bg">Таблица — OpenOffice Calc</comment>
     <comment xml:lang="ca">full de càlcul d'OpenOffice Calc</comment>
     <comment xml:lang="cs">sešit OpenOffice Calc</comment>
     <comment xml:lang="da">OpenOffice Calc-regneark</comment>
     <comment xml:lang="de">OpenOffice-Calc-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο OpenOffice Calc</comment>
-    <comment xml:lang="en_GB">OpenOffice Calc spreadsheet</comment>
-    <comment xml:lang="es">hoja de cálculo de OpenOffice Calc</comment>
+    <comment xml:lang="en-GB">OpenOffice Calc spreadsheet</comment>
+    <comment xml:lang="es">hoja de cálculo de LibreOffice Calc</comment>
     <comment xml:lang="eu">OpenOffice.org Calc kalkulu-orria</comment>
     <comment xml:lang="fi">OpenOffice Calc -taulukko</comment>
     <comment xml:lang="fo">OpenOffice Calc rokniark</comment>
     <comment xml:lang="fr">feuille de calcul OpenOffice Calc</comment>
+    <comment xml:lang="fur">sfuei di calcul OpenOffice Calc</comment>
     <comment xml:lang="ga">scarbhileog OpenOffice Calc</comment>
     <comment xml:lang="gl">folla de cálculo de OpenOffice Calc</comment>
     <comment xml:lang="he">גליון נתונים של OpenOffice Calc</comment>
@@ -4718,9 +4839,9 @@
     <comment xml:lang="nl">OpenOffice.org Calc-rekenblad</comment>
     <comment xml:lang="nn">OpenOffice Calc-rekneark</comment>
     <comment xml:lang="oc">fuèlh de calcul OpenOffice Calc</comment>
-    <comment xml:lang="pl">Arkusz kalkulacyjny OpenOffice.org Calc</comment>
+    <comment xml:lang="pl">Arkusz OpenOffice.org Calc</comment>
     <comment xml:lang="pt">folha de cálculo OpenOffice Calc</comment>
-    <comment xml:lang="pt_BR">Planilha do OpenOffice Calc</comment>
+    <comment xml:lang="pt-BR">Planilha do OpenOffice Calc</comment>
     <comment xml:lang="ro">Foaie de calcul OpenOffice Calc</comment>
     <comment xml:lang="ru">Электронная таблица OpenOffice Calc</comment>
     <comment xml:lang="sk">Zošit OpenOffice Calc</comment>
@@ -4728,17 +4849,17 @@
     <comment xml:lang="sq">Fletë llogaritjesh OpenOffice Calc</comment>
     <comment xml:lang="sr">Табела Опен Офис Рачуна</comment>
     <comment xml:lang="sv">OpenOffice Calc-kalkylblad</comment>
-    <comment xml:lang="tr">OpenOffice Calc çalışma sayfası</comment>
+    <comment xml:lang="tr">OpenOffice Calc hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця OpenOffice Calc</comment>
     <comment xml:lang="vi">Bảng tính Calc của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Calc 电子表格</comment>
-    <comment xml:lang="zh_TW">OpenOffice Calc 試算表</comment>
+    <comment xml:lang="zh-CN">OpenOffice Calc 电子表格</comment>
+    <comment xml:lang="zh-TW">OpenOffice Calc 試算表</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.calc" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.calc"/>
         </match>
       </match>
     </magic>
@@ -4746,20 +4867,22 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.calc.template">
     <comment>OpenOffice Calc template</comment>
+    <comment xml:lang="af">OpenOffice Calc-sjabloon</comment>
     <comment xml:lang="ar">قالب Calc المكتب المفتوح</comment>
-    <comment xml:lang="be@latin">Šablon OpenOffice Calc</comment>
+    <comment xml:lang="be-Latn">Šablon OpenOffice Calc</comment>
     <comment xml:lang="bg">Шаблон за таблици — OpenOffice Calc</comment>
     <comment xml:lang="ca">plantilla d'OpenOffice Calc</comment>
     <comment xml:lang="cs">šablona OpenOffice Calc</comment>
     <comment xml:lang="da">OpenOffice Calc-skabelon</comment>
     <comment xml:lang="de">OpenOffice-Calc-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο OpenOffice Calc</comment>
-    <comment xml:lang="en_GB">OpenOffice Calc template</comment>
-    <comment xml:lang="es">plantilla de OpenOffice Calc</comment>
+    <comment xml:lang="en-GB">OpenOffice Calc template</comment>
+    <comment xml:lang="es">plantilla de LibreOffice Calc</comment>
     <comment xml:lang="eu">OpenOffice Calc txantiloia</comment>
     <comment xml:lang="fi">OpenOffice Calc -malli</comment>
     <comment xml:lang="fo">OpenOffice Calc formur</comment>
     <comment xml:lang="fr">modèle OpenOffice Calc</comment>
+    <comment xml:lang="fur">model OpenOffice Calc</comment>
     <comment xml:lang="ga">teimpléad OpenOffice Calc</comment>
     <comment xml:lang="gl">modelo de OpenOffice Calc</comment>
     <comment xml:lang="he">תבנית של OpenOffice Calc</comment>
@@ -4780,7 +4903,7 @@
     <comment xml:lang="oc">modèl OpenOffice Calc</comment>
     <comment xml:lang="pl">Szablon arkusza OpenOffice.org Calc</comment>
     <comment xml:lang="pt">modelo OpenOffice Calc</comment>
-    <comment xml:lang="pt_BR">Modelo do OpenOffice Calc</comment>
+    <comment xml:lang="pt-BR">Modelo do OpenOffice Calc</comment>
     <comment xml:lang="ro">Șablon OpenOffice Calc</comment>
     <comment xml:lang="ru">Шаблон OpenOffice Calc</comment>
     <comment xml:lang="sk">Šablóna OpenOffice Calc</comment>
@@ -4791,14 +4914,14 @@
     <comment xml:lang="tr">OpenOffice Calc şablonu</comment>
     <comment xml:lang="uk">шаблон ел.таблиці OpenOffice Calc</comment>
     <comment xml:lang="vi">Mẫu bảng tính Calc của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Calc 模板</comment>
-    <comment xml:lang="zh_TW">OpenOffice Calc 範本</comment>
+    <comment xml:lang="zh-CN">OpenOffice Calc 模板</comment>
+    <comment xml:lang="zh-TW">OpenOffice Calc 範本</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.calc" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.calc"/>
         </match>
       </match>
     </magic>
@@ -4806,20 +4929,22 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.draw">
     <comment>OpenOffice Draw drawing</comment>
+    <comment xml:lang="af">OpenOffice Draw-tekening</comment>
     <comment xml:lang="ar">تصميم Draw المكتب المفتوح</comment>
-    <comment xml:lang="be@latin">Rysunak OpenOffice Draw</comment>
+    <comment xml:lang="be-Latn">Rysunak OpenOffice Draw</comment>
     <comment xml:lang="bg">Чертеж — OpenOffice Draw</comment>
     <comment xml:lang="ca">dibuix d'OpenOffice Draw</comment>
     <comment xml:lang="cs">kresba OpenOffice Draw</comment>
     <comment xml:lang="da">OpenOffice Draw-tegning</comment>
     <comment xml:lang="de">OpenOffice-Draw-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο OpenOffice Draw</comment>
-    <comment xml:lang="en_GB">OpenOffice Draw drawing</comment>
-    <comment xml:lang="es">dibujo de OpenOffice Draw</comment>
+    <comment xml:lang="en-GB">OpenOffice Draw drawing</comment>
+    <comment xml:lang="es">dibujo de LibreOffice Draw</comment>
     <comment xml:lang="eu">OpenOffice.org Draw marrazkia</comment>
     <comment xml:lang="fi">OpenOffice Draw -piirros</comment>
     <comment xml:lang="fo">OpenOffice Draw tekning</comment>
     <comment xml:lang="fr">dessin OpenOffice Draw</comment>
+    <comment xml:lang="fur">dissen OpenOffice Draw</comment>
     <comment xml:lang="ga">líníocht OpenOffice Draw</comment>
     <comment xml:lang="gl">debuxo de OpenOffice Draw</comment>
     <comment xml:lang="he">ציור של OpenOffice Draw</comment>
@@ -4840,7 +4965,7 @@
     <comment xml:lang="oc">dessenh OpenOffice Draw</comment>
     <comment xml:lang="pl">Rysunek OpenOffice.org Draw</comment>
     <comment xml:lang="pt">desenho OpenOffice Draw</comment>
-    <comment xml:lang="pt_BR">Desenho do OpenOffice Draw</comment>
+    <comment xml:lang="pt-BR">Desenho do OpenOffice Draw</comment>
     <comment xml:lang="ro">Desen OpenOffice Draw</comment>
     <comment xml:lang="ru">Рисунок OpenOffice Draw</comment>
     <comment xml:lang="sk">Kresba OpenOffice Draw</comment>
@@ -4851,14 +4976,14 @@
     <comment xml:lang="tr">OpenOffice Draw çizimi</comment>
     <comment xml:lang="uk">малюнок OpenOffice Draw</comment>
     <comment xml:lang="vi">Bản vẽ Draw của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Draw 绘图</comment>
-    <comment xml:lang="zh_TW">OpenOffice Draw 繪圖</comment>
+    <comment xml:lang="zh-CN">OpenOffice Draw 绘图</comment>
+    <comment xml:lang="zh-TW">OpenOffice Draw 繪圖</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="image-x-generic"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.draw" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.draw"/>
         </match>
       </match>
     </magic>
@@ -4866,20 +4991,22 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.draw.template">
     <comment>OpenOffice Draw template</comment>
+    <comment xml:lang="af">OpenOffice Draw-sjabloon</comment>
     <comment xml:lang="ar">قالب Draw المكتب المفتوح</comment>
-    <comment xml:lang="be@latin">Šablon OpenOffice Draw</comment>
+    <comment xml:lang="be-Latn">Šablon OpenOffice Draw</comment>
     <comment xml:lang="bg">Шаблон за чертежи — OpenOffice Draw</comment>
     <comment xml:lang="ca">plantilla d'OpenOffice Draw</comment>
     <comment xml:lang="cs">šablona OpenOffice Draw</comment>
     <comment xml:lang="da">OpenOffice Draw-skabelon</comment>
     <comment xml:lang="de">OpenOffice-Draw-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο OpenOffice Draw</comment>
-    <comment xml:lang="en_GB">OpenOffice Draw template</comment>
-    <comment xml:lang="es">plantilla de OpenOffice Draw</comment>
+    <comment xml:lang="en-GB">OpenOffice Draw template</comment>
+    <comment xml:lang="es">plantilla de LibreOffice Draw</comment>
     <comment xml:lang="eu">OpenOffice Draw txantiloia</comment>
     <comment xml:lang="fi">OpenOffice Draw -malli</comment>
     <comment xml:lang="fo">OpenOffice Draw formur</comment>
     <comment xml:lang="fr">modèle OpenOffice Draw</comment>
+    <comment xml:lang="fur">model OpenOffice Draw </comment>
     <comment xml:lang="ga">teimpléad OpenOffice Draw</comment>
     <comment xml:lang="gl">modelo de OpenOffice Draw</comment>
     <comment xml:lang="he">תבנית של OpenOffice Draw</comment>
@@ -4900,7 +5027,7 @@
     <comment xml:lang="oc">modèl OpenOffice Draw</comment>
     <comment xml:lang="pl">Szablon rysunku OpenOffice.org Draw</comment>
     <comment xml:lang="pt">modelo OpenOffice Draw</comment>
-    <comment xml:lang="pt_BR">Modelo do OpenOffice Draw</comment>
+    <comment xml:lang="pt-BR">Modelo do OpenOffice Draw</comment>
     <comment xml:lang="ro">Șablon OpenOffice Draw</comment>
     <comment xml:lang="ru">Шаблон OpenOffice Draw</comment>
     <comment xml:lang="sk">Šablóna OpenOffice Draw</comment>
@@ -4911,14 +5038,14 @@
     <comment xml:lang="tr">OpenOffice Draw şablonu</comment>
     <comment xml:lang="uk">шаблон малюнку OpenOffice Draw</comment>
     <comment xml:lang="vi">Mẫu bản vẽ Draw của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Draw 模板</comment>
-    <comment xml:lang="zh_TW">OpenOffice Draw 範本</comment>
+    <comment xml:lang="zh-CN">OpenOffice Draw 模板</comment>
+    <comment xml:lang="zh-TW">OpenOffice Draw 範本</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="image-x-generic"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.draw" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.draw"/>
         </match>
       </match>
     </magic>
@@ -4926,9 +5053,10 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.impress">
     <comment>OpenOffice Impress presentation</comment>
+    <comment xml:lang="af">OpenOffice Impress-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي Impress المكتب المفتوح</comment>
     <comment xml:lang="az">OpenOffice Impress sənədi</comment>
-    <comment xml:lang="be@latin">Prezentacyja OpenOffice Impress</comment>
+    <comment xml:lang="be-Latn">Prezentacyja OpenOffice Impress</comment>
     <comment xml:lang="bg">Презентация — OpenOffice Impress</comment>
     <comment xml:lang="ca">presentació d'OpenOffice Impress</comment>
     <comment xml:lang="cs">prezentace OpenOffice Impress</comment>
@@ -4936,12 +5064,13 @@
     <comment xml:lang="da">OpenOffice Impress-præsentation</comment>
     <comment xml:lang="de">OpenOffice-Impress-Vorlage</comment>
     <comment xml:lang="el">Παρουσίαση OpenOffice Impress</comment>
-    <comment xml:lang="en_GB">OpenOffice Impress presentation</comment>
-    <comment xml:lang="es">presentación de OpenOffice Impress</comment>
+    <comment xml:lang="en-GB">OpenOffice Impress presentation</comment>
+    <comment xml:lang="es">presentación de LibreOffice Impress</comment>
     <comment xml:lang="eu">OpenOffice.org Impress aurkezpena</comment>
     <comment xml:lang="fi">OpenOffice Impress -esitys</comment>
     <comment xml:lang="fo">OpenOffice Impress framløga</comment>
     <comment xml:lang="fr">présentation OpenOffice Impress</comment>
+    <comment xml:lang="fur">presentazion OpenOffice Impress</comment>
     <comment xml:lang="ga">láithreoireacht OpenOffice Impress</comment>
     <comment xml:lang="gl">presentación de  de OpenOffice Impress</comment>
     <comment xml:lang="he">מצגת של OpenOffice Impress</comment>
@@ -4962,7 +5091,7 @@
     <comment xml:lang="oc">presentacion OpenOffice Impress</comment>
     <comment xml:lang="pl">Prezentacja OpenOffice.org Impress</comment>
     <comment xml:lang="pt">apresentação OpenOffice Impress</comment>
-    <comment xml:lang="pt_BR">Apresentação do OpenOffice Impress</comment>
+    <comment xml:lang="pt-BR">Apresentação do OpenOffice Impress</comment>
     <comment xml:lang="ro">Prezentare OpenOffice Impress</comment>
     <comment xml:lang="ru">Презентация OpenOffice Impress</comment>
     <comment xml:lang="sk">Prezentácia OpenOffice Impress</comment>
@@ -4973,14 +5102,14 @@
     <comment xml:lang="tr">OpenOffice Impress sunumu</comment>
     <comment xml:lang="uk">презентація OpenOffice Impress</comment>
     <comment xml:lang="vi">Trình diễn Impress của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Impress 演示文稿</comment>
-    <comment xml:lang="zh_TW">OpenOffice Impress 簡報</comment>
+    <comment xml:lang="zh-CN">OpenOffice Impress 演示文稿</comment>
+    <comment xml:lang="zh-TW">OpenOffice Impress 簡報</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.impress" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.impress"/>
         </match>
       </match>
     </magic>
@@ -4988,20 +5117,22 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.impress.template">
     <comment>OpenOffice Impress template</comment>
+    <comment xml:lang="af">OpenOffice Impress-sjabloon</comment>
     <comment xml:lang="ar">قالب Impress المكتب المفتوح</comment>
-    <comment xml:lang="be@latin">Šablon OpenOffice Impress</comment>
+    <comment xml:lang="be-Latn">Šablon OpenOffice Impress</comment>
     <comment xml:lang="bg">Шаблон за презентации — OpenOffice Impress</comment>
     <comment xml:lang="ca">plantilla d'OpenOffice Impress</comment>
     <comment xml:lang="cs">šablona OpenOffice Impress</comment>
     <comment xml:lang="da">OpenOffice Impress-skabelon</comment>
     <comment xml:lang="de">OpenOffice-Impress-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο OpenOffice Impress</comment>
-    <comment xml:lang="en_GB">OpenOffice Impress template</comment>
-    <comment xml:lang="es">plantilla de OpenOffice Impress</comment>
+    <comment xml:lang="en-GB">OpenOffice Impress template</comment>
+    <comment xml:lang="es">plantilla de LibreOffice Impress</comment>
     <comment xml:lang="eu">OpenOffice Impress txantiloia</comment>
     <comment xml:lang="fi">OpenOffice Impress -malli</comment>
     <comment xml:lang="fo">OpenOffice Impress formur</comment>
     <comment xml:lang="fr">modèle OpenOffice Impress</comment>
+    <comment xml:lang="fur">model OpenOffice Impress</comment>
     <comment xml:lang="ga">teimpléad OpenOffice Impress</comment>
     <comment xml:lang="gl">modelo de OpenOffice Impress</comment>
     <comment xml:lang="he">תבנית של OpenOffice Impress</comment>
@@ -5022,7 +5153,7 @@
     <comment xml:lang="oc">modèl OpenOffice Impress</comment>
     <comment xml:lang="pl">Szablon prezentacji OpenOffice.org Impress</comment>
     <comment xml:lang="pt">modelo OpenOffice Impress</comment>
-    <comment xml:lang="pt_BR">Modelo do OpenOffice Impress</comment>
+    <comment xml:lang="pt-BR">Modelo do OpenOffice Impress</comment>
     <comment xml:lang="ro">Șablon OpenOffice Impress</comment>
     <comment xml:lang="ru">Шаблон OpenOffice Impress</comment>
     <comment xml:lang="sk">Šablóna OpenOffice Impress</comment>
@@ -5033,14 +5164,14 @@
     <comment xml:lang="tr">OpenOffice Impress şablonu</comment>
     <comment xml:lang="uk">шаблон презентації OpenOffice Impress</comment>
     <comment xml:lang="vi">Mẫu trình diễn Impress của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Impress 模板</comment>
-    <comment xml:lang="zh_TW">OpenOffice Impress 範本</comment>
+    <comment xml:lang="zh-CN">OpenOffice Impress 模板</comment>
+    <comment xml:lang="zh-TW">OpenOffice Impress 範本</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.impress" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.impress"/>
         </match>
       </match>
     </magic>
@@ -5048,20 +5179,22 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.math">
     <comment>OpenOffice Math formula</comment>
+    <comment xml:lang="af">OpenOffice Math-formule</comment>
     <comment xml:lang="ar">صيغة Math المكتب المفتوح</comment>
-    <comment xml:lang="be@latin">Formuła OpenOffice Math</comment>
+    <comment xml:lang="be-Latn">Formuła OpenOffice Math</comment>
     <comment xml:lang="bg">Формула — OpenOffice Math</comment>
     <comment xml:lang="ca">fórmula d'OpenOffice Math</comment>
     <comment xml:lang="cs">vzorec OpenOffice Math</comment>
     <comment xml:lang="da">OpenOffice Math-formel</comment>
     <comment xml:lang="de">OpenOffice-Math-Formel</comment>
     <comment xml:lang="el">Μαθηματικός τύπος OpenOffice Math</comment>
-    <comment xml:lang="en_GB">OpenOffice Math formula</comment>
-    <comment xml:lang="es">fórmula de OpenOffice Math</comment>
+    <comment xml:lang="en-GB">OpenOffice Math formula</comment>
+    <comment xml:lang="es">fórmula de LibreOffice Math</comment>
     <comment xml:lang="eu">OpenOffice.org Math formula</comment>
     <comment xml:lang="fi">OpenOffice Math -kaava</comment>
     <comment xml:lang="fo">OpenOffice Math frymil</comment>
     <comment xml:lang="fr">formule OpenOffice Math</comment>
+    <comment xml:lang="fur">formule OpenOffice Math</comment>
     <comment xml:lang="ga">foirmle OpenOffice Math</comment>
     <comment xml:lang="gl">fórmula de OpenOffice Math</comment>
     <comment xml:lang="he">נוסחה של OpenOffice Math</comment>
@@ -5082,7 +5215,7 @@
     <comment xml:lang="oc">formula OpenOffice Math</comment>
     <comment xml:lang="pl">Formuła OpenOffice.org Math</comment>
     <comment xml:lang="pt">fórmula OpenOffice Math</comment>
-    <comment xml:lang="pt_BR">Fórmula do OpenOffice Math</comment>
+    <comment xml:lang="pt-BR">Fórmula do OpenOffice Math</comment>
     <comment xml:lang="ro">Formulă OpenOffice Math</comment>
     <comment xml:lang="ru">Формула OpenOffice Math</comment>
     <comment xml:lang="sk">Vzorec OpenOffice Math</comment>
@@ -5093,14 +5226,14 @@
     <comment xml:lang="tr">OpenOffice Math formülü</comment>
     <comment xml:lang="uk">формула OpenOffice Math</comment>
     <comment xml:lang="vi">Công thức Math của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Math 公式</comment>
-    <comment xml:lang="zh_TW">OpenOffice Math 公式</comment>
+    <comment xml:lang="zh-CN">OpenOffice Math 公式</comment>
+    <comment xml:lang="zh-TW">OpenOffice Math 公式</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.math" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.math"/>
         </match>
       </match>
     </magic>
@@ -5108,10 +5241,11 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.writer">
     <comment>OpenOffice Writer document</comment>
+    <comment xml:lang="af">OpenOffice Writer-dokument</comment>
     <comment xml:lang="ar">مستند Writer المكتب المفتوح</comment>
     <comment xml:lang="ast">Documentu d'OpenOffice Writer</comment>
     <comment xml:lang="az">OpenOffice Writer sənədi</comment>
-    <comment xml:lang="be@latin">Dakument OpenOffice Writer</comment>
+    <comment xml:lang="be-Latn">Dakument OpenOffice Writer</comment>
     <comment xml:lang="bg">Документ — OpenOffice Writer</comment>
     <comment xml:lang="ca">document d'OpenOffice Writer</comment>
     <comment xml:lang="cs">dokument OpenOffice Writer</comment>
@@ -5119,12 +5253,13 @@
     <comment xml:lang="da">OpenOffice Writer-dokument</comment>
     <comment xml:lang="de">OpenOffice-Writer-Dokument</comment>
     <comment xml:lang="el">Έγγραφο OpenOffice Writer</comment>
-    <comment xml:lang="en_GB">OpenOffice Writer document</comment>
-    <comment xml:lang="es">documento de OpenOffice Writer</comment>
+    <comment xml:lang="en-GB">OpenOffice Writer document</comment>
+    <comment xml:lang="es">documento de LibreOffice Writer</comment>
     <comment xml:lang="eu">OpenOffice.org Writer dokumentua</comment>
     <comment xml:lang="fi">OpenOffice Writer -asiakirja</comment>
     <comment xml:lang="fo">OpenOffice Writer skjal</comment>
     <comment xml:lang="fr">document OpenOffice Writer</comment>
+    <comment xml:lang="fur">document OpenOffice Writer</comment>
     <comment xml:lang="ga">cáipéis OpenOffice Writer</comment>
     <comment xml:lang="gl">documento de OpenOffice Writer</comment>
     <comment xml:lang="he">מסמך של OpenOffice Writer</comment>
@@ -5145,7 +5280,7 @@
     <comment xml:lang="oc">document OpenOffice Writer</comment>
     <comment xml:lang="pl">Dokument OpenOffice.org Writer</comment>
     <comment xml:lang="pt">documento OpenOffice Writer</comment>
-    <comment xml:lang="pt_BR">Documento do OpenOffice Writer</comment>
+    <comment xml:lang="pt-BR">Documento do OpenOffice Writer</comment>
     <comment xml:lang="ro">Document OpenOffice Writer</comment>
     <comment xml:lang="ru">Документ OpenOffice Writer</comment>
     <comment xml:lang="sk">Dokument OpenOffice Writer</comment>
@@ -5156,14 +5291,14 @@
     <comment xml:lang="tr">OpenOffice Writer belgesi</comment>
     <comment xml:lang="uk">документ OpenOffice Writer</comment>
     <comment xml:lang="vi">Tài liệu Writer của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Writer 文档</comment>
-    <comment xml:lang="zh_TW">OpenOffice Writer 文件</comment>
+    <comment xml:lang="zh-CN">OpenOffice Writer 文档</comment>
+    <comment xml:lang="zh-TW">OpenOffice Writer 文件</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.writer" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.writer"/>
         </match>
       </match>
     </magic>
@@ -5171,23 +5306,25 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.writer.global">
     <comment>OpenOffice Writer global document</comment>
+    <comment xml:lang="af">OpenOffice Writer globale dokument</comment>
     <comment xml:lang="ar">مستند المكتب المفتوح Writer العالمي</comment>
     <comment xml:lang="ast">Documentu global d'OpenOffice Writer</comment>
     <comment xml:lang="az">OpenOffice Writer qlobal sənədi</comment>
-    <comment xml:lang="be@latin">Hlabalny dakument OpenOffice Writer</comment>
-    <comment xml:lang="bg">Документ - глобален — OpenOffice Writer</comment>
+    <comment xml:lang="be-Latn">Hlabalny dakument OpenOffice Writer</comment>
+    <comment xml:lang="bg">Глобален документ — OpenOffice Writer</comment>
     <comment xml:lang="ca">document global d'OpenOffice Writer</comment>
     <comment xml:lang="cs">globální dokument OpenOffice Writer</comment>
     <comment xml:lang="cy">Dogfen eang OpenOffice (Writer)</comment>
     <comment xml:lang="da">OpenOffice Writer-globalt dokument</comment>
     <comment xml:lang="de">OpenOffice-Writer-Globaldokument</comment>
     <comment xml:lang="el">Καθολικό έγγραφο OpenOffice Writer</comment>
-    <comment xml:lang="en_GB">OpenOffice Writer global document</comment>
-    <comment xml:lang="es">documento global de OpenOffice Writer</comment>
+    <comment xml:lang="en-GB">OpenOffice Writer global document</comment>
+    <comment xml:lang="es">documento global de LibreOffice Writer</comment>
     <comment xml:lang="eu">OpenOffice.org Writer dokumentu globala</comment>
     <comment xml:lang="fi">OpenOffice Writer - yleinen asiakirja</comment>
     <comment xml:lang="fo">OpenOffice Writer heiltøkt skjal</comment>
     <comment xml:lang="fr">document global OpenOffice Writer</comment>
+    <comment xml:lang="fur">document globâl OpenOffice Writer</comment>
     <comment xml:lang="ga">cáipéis chomhchoiteann OpenOffice Writer</comment>
     <comment xml:lang="gl">documento global de OpenOffice Writer</comment>
     <comment xml:lang="he">מסמך גלובלי של OpenOffice Writer</comment>
@@ -5208,7 +5345,7 @@
     <comment xml:lang="oc">document global OpenOffice Writer</comment>
     <comment xml:lang="pl">Globalny dokument OpenOffice.org Writer</comment>
     <comment xml:lang="pt">documento global OpenOffice Writer</comment>
-    <comment xml:lang="pt_BR">Documento global do OpenOffice Writer</comment>
+    <comment xml:lang="pt-BR">Documento global do OpenOffice Writer</comment>
     <comment xml:lang="ro">Document global OpenOffice Writer</comment>
     <comment xml:lang="ru">Основной документ OpenOffice Writer</comment>
     <comment xml:lang="sk">Globálny dokument OpenOffice Writer</comment>
@@ -5219,14 +5356,14 @@
     <comment xml:lang="tr">OpenOffice Writer global belgesi</comment>
     <comment xml:lang="uk">загальний документ OpenOffice Writer</comment>
     <comment xml:lang="vi">Tài liệu toàn cục Writer của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Writer 全局文档</comment>
-    <comment xml:lang="zh_TW">OpenOffice Writer 主控文件</comment>
+    <comment xml:lang="zh-CN">OpenOffice Writer 全局文档</comment>
+    <comment xml:lang="zh-TW">OpenOffice Writer 主控文件</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.writer" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.writer"/>
         </match>
       </match>
     </magic>
@@ -5234,9 +5371,10 @@
   </mime-type>
   <mime-type type="application/vnd.sun.xml.writer.template">
     <comment>OpenOffice Writer template</comment>
+    <comment xml:lang="af">OpenOffice Writer-sjabloon</comment>
     <comment xml:lang="ar">قالب Writer المكتب المفتوح</comment>
     <comment xml:lang="az">OpenOffice Writer şablonu</comment>
-    <comment xml:lang="be@latin">Šablon OpenOffice Writer</comment>
+    <comment xml:lang="be-Latn">Šablon OpenOffice Writer</comment>
     <comment xml:lang="bg">Шаблон за документи — OpenOffice Writer</comment>
     <comment xml:lang="ca">plantilla d'OpenOffice Writer</comment>
     <comment xml:lang="cs">šablona OpenOffice Writer</comment>
@@ -5244,12 +5382,13 @@
     <comment xml:lang="da">OpenOffice Writer-skabelon</comment>
     <comment xml:lang="de">OpenOffice-Writer-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο OpenOffice Writer</comment>
-    <comment xml:lang="en_GB">OpenOffice Writer template</comment>
-    <comment xml:lang="es">plantilla de OpenOffice Writer</comment>
+    <comment xml:lang="en-GB">OpenOffice Writer template</comment>
+    <comment xml:lang="es">plantilla de LibreOffice Writer</comment>
     <comment xml:lang="eu">OpenOffice Writer txantiloia</comment>
     <comment xml:lang="fi">OpenOffice Writer -malli</comment>
     <comment xml:lang="fo">OpenOffice Writer formur</comment>
     <comment xml:lang="fr">modèle OpenOffice Writer</comment>
+    <comment xml:lang="fur">model OpenOffice Writer</comment>
     <comment xml:lang="ga">teimpléad OpenOffice Writer</comment>
     <comment xml:lang="gl">modelo  de OpenOffice Writer</comment>
     <comment xml:lang="he">תסנית של OpenOffice Writer</comment>
@@ -5271,7 +5410,7 @@
     <comment xml:lang="oc">modèl OpenOffice Writer</comment>
     <comment xml:lang="pl">Szablon dokumentu OpenOffice.org Writer</comment>
     <comment xml:lang="pt">modelo OpenOffice Writer</comment>
-    <comment xml:lang="pt_BR">Modelo do OpenOffice Writer</comment>
+    <comment xml:lang="pt-BR">Modelo do OpenOffice Writer</comment>
     <comment xml:lang="ro">Șablon OpenOffice Writer</comment>
     <comment xml:lang="ru">Шаблон OpenOffice Writer</comment>
     <comment xml:lang="sk">Šablóna OpenOffice Writer</comment>
@@ -5282,14 +5421,14 @@
     <comment xml:lang="tr">OpenOffice Writer şablonu</comment>
     <comment xml:lang="uk">шаблон документа OpenOffice Writer</comment>
     <comment xml:lang="vi">Mẫu tài liệu Writer của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice Writer 模板</comment>
-    <comment xml:lang="zh_TW">OpenOffice Writer 範本</comment>
+    <comment xml:lang="zh-CN">OpenOffice Writer 模板</comment>
+    <comment xml:lang="zh-TW">OpenOffice Writer 範本</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.sun.xml.writer" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" offset="38" value="application/vnd.sun.xml.writer"/>
         </match>
       </match>
     </magic>
@@ -5297,22 +5436,24 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.text">
     <comment>ODT document</comment>
+    <comment xml:lang="af">ODT-dokument</comment>
     <comment xml:lang="ar">مستند ODT</comment>
     <comment xml:lang="ast">Documentu ODT</comment>
-    <comment xml:lang="be@latin">Dakument ODT</comment>
+    <comment xml:lang="be-Latn">Dakument ODT</comment>
     <comment xml:lang="bg">Документ — ODT</comment>
     <comment xml:lang="ca">document ODT</comment>
     <comment xml:lang="cs">dokument ODT</comment>
     <comment xml:lang="da">ODT-dokument</comment>
     <comment xml:lang="de">ODT-Dokument</comment>
     <comment xml:lang="el">Έγγραφο ODT</comment>
-    <comment xml:lang="en_GB">ODT document</comment>
+    <comment xml:lang="en-GB">ODT document</comment>
     <comment xml:lang="eo">ODT-dokumento</comment>
     <comment xml:lang="es">documento ODT</comment>
     <comment xml:lang="eu">ODT dokumentua</comment>
     <comment xml:lang="fi">ODT-asiakirja</comment>
     <comment xml:lang="fo">ODT skjal</comment>
     <comment xml:lang="fr">document ODT</comment>
+    <comment xml:lang="fur">document ODT</comment>
     <comment xml:lang="ga">cáipéis ODT</comment>
     <comment xml:lang="gl">documento ODT</comment>
     <comment xml:lang="he">מסמך ODT</comment>
@@ -5333,7 +5474,7 @@
     <comment xml:lang="oc">document ODT</comment>
     <comment xml:lang="pl">Dokument ODT</comment>
     <comment xml:lang="pt">documento ODT</comment>
-    <comment xml:lang="pt_BR">Documento ODT</comment>
+    <comment xml:lang="pt-BR">Documento ODT</comment>
     <comment xml:lang="ro">Document ODT</comment>
     <comment xml:lang="ru">Документ ODT</comment>
     <comment xml:lang="sk">Dokument ODT</comment>
@@ -5344,16 +5485,16 @@
     <comment xml:lang="tr">ODT belgesi</comment>
     <comment xml:lang="uk">документ ODT</comment>
     <comment xml:lang="vi">Tài liệu ODT</comment>
-    <comment xml:lang="zh_CN">ODT 文档</comment>
-    <comment xml:lang="zh_TW">ODT 文件</comment>
+    <comment xml:lang="zh-CN">ODT 文档</comment>
+    <comment xml:lang="zh-TW">ODT 文件</comment>
     <acronym>ODT</acronym>
     <expanded-acronym>OpenDocument Text</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.text" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.text" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5361,6 +5502,7 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.text-flat-xml">
     <comment>ODT document (Flat XML)</comment>
+    <comment xml:lang="af">ODT-dokument (plat XML)</comment>
     <comment xml:lang="ar">مستند ODT (Flat XML)</comment>
     <comment xml:lang="ast">Documentu ODT (XML planu)</comment>
     <comment xml:lang="bg">Документ — ODT (само XML)</comment>
@@ -5369,12 +5511,13 @@
     <comment xml:lang="da">ODT-dokument (flad XML)</comment>
     <comment xml:lang="de">ODT-Dokument (Unkomprimiertes XML)</comment>
     <comment xml:lang="el">Έγγραφο ODT (Flat XML)</comment>
-    <comment xml:lang="en_GB">ODT document (Flat XML)</comment>
+    <comment xml:lang="en-GB">ODT document (Flat XML)</comment>
     <comment xml:lang="es">documento ODT (XML plano)</comment>
     <comment xml:lang="eu">ODT dokumentua (XML soila)</comment>
     <comment xml:lang="fi">ODT-asiakirja (Flat XML)</comment>
     <comment xml:lang="fo">ODT skjal (Flat XML)</comment>
     <comment xml:lang="fr">document ODT (XML plat)</comment>
+    <comment xml:lang="fur">document ODT (XML sempliç)</comment>
     <comment xml:lang="ga">cáipéis ODT (XML cothrom)</comment>
     <comment xml:lang="gl">documento ODT (XML plano)</comment>
     <comment xml:lang="he">מסמך ODT‏ (Flat XML)</comment>
@@ -5393,7 +5536,7 @@
     <comment xml:lang="oc">document ODT (XML plat)</comment>
     <comment xml:lang="pl">Dokument ODT (prosty XML)</comment>
     <comment xml:lang="pt">documento ODT (XML plano)</comment>
-    <comment xml:lang="pt_BR">Documento ODT (Flat XML)</comment>
+    <comment xml:lang="pt-BR">Documento ODT (Flat XML)</comment>
     <comment xml:lang="ro">Document ODT (XML simplu)</comment>
     <comment xml:lang="ru">Документ ODT (простой XML)</comment>
     <comment xml:lang="sk">Dokument ODT (čisté XML)</comment>
@@ -5402,8 +5545,8 @@
     <comment xml:lang="sv">ODT-dokument (platt XML)</comment>
     <comment xml:lang="tr">ODT belgesi (Düz XML)</comment>
     <comment xml:lang="uk">документ ODT (Flat XML)</comment>
-    <comment xml:lang="zh_CN">ODT 文档（Flat XML）</comment>
-    <comment xml:lang="zh_TW">ODT 文件 (Flat XML)</comment>
+    <comment xml:lang="zh-CN">ODT 文档（Flat XML）</comment>
+    <comment xml:lang="zh-TW">ODT 文件 (Flat XML)</comment>
     <acronym>FODT</acronym>
     <expanded-acronym>OpenDocument Text (Flat XML)</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -5412,21 +5555,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.text-template">
     <comment>ODT template</comment>
+    <comment xml:lang="af">ODT-sjabloon</comment>
     <comment xml:lang="ar">قالب ODT</comment>
-    <comment xml:lang="be@latin">Šablon ODT</comment>
+    <comment xml:lang="be-Latn">Šablon ODT</comment>
     <comment xml:lang="bg">Шаблон за документи — ODT</comment>
     <comment xml:lang="ca">plantilla ODT</comment>
     <comment xml:lang="cs">šablona ODT</comment>
     <comment xml:lang="da">ODT-skabelon</comment>
     <comment xml:lang="de">ODT-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο ODT</comment>
-    <comment xml:lang="en_GB">ODT template</comment>
+    <comment xml:lang="en-GB">ODT template</comment>
     <comment xml:lang="eo">ODT-ŝablono</comment>
     <comment xml:lang="es">plantilla ODT</comment>
     <comment xml:lang="eu">ODT txantiloia</comment>
     <comment xml:lang="fi">ODT-malli</comment>
     <comment xml:lang="fo">ODT formur</comment>
     <comment xml:lang="fr">modèle ODT</comment>
+    <comment xml:lang="fur">model ODT</comment>
     <comment xml:lang="ga">teimpléad ODT</comment>
     <comment xml:lang="gl">modelo ODT</comment>
     <comment xml:lang="he">תבנית ODT</comment>
@@ -5447,7 +5592,7 @@
     <comment xml:lang="oc">modèl ODT</comment>
     <comment xml:lang="pl">Szablon ODT</comment>
     <comment xml:lang="pt">modelo ODT</comment>
-    <comment xml:lang="pt_BR">Modelo ODT</comment>
+    <comment xml:lang="pt-BR">Modelo ODT</comment>
     <comment xml:lang="ro">Șablon ODT</comment>
     <comment xml:lang="ru">Шаблон ODT</comment>
     <comment xml:lang="sk">Šablóna ODT</comment>
@@ -5458,16 +5603,16 @@
     <comment xml:lang="tr">ODT şablonu</comment>
     <comment xml:lang="uk">шаблон ODT</comment>
     <comment xml:lang="vi">Mẫu ODT</comment>
-    <comment xml:lang="zh_CN">ODT 模板</comment>
-    <comment xml:lang="zh_TW">ODT 範本</comment>
+    <comment xml:lang="zh-CN">ODT 模板</comment>
+    <comment xml:lang="zh-TW">ODT 範本</comment>
     <acronym>ODT</acronym>
     <expanded-acronym>OpenDocument Text</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.text-template" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.text-template" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5475,21 +5620,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.text-web">
     <comment>OTH template</comment>
+    <comment xml:lang="af">OTH-sjabloon</comment>
     <comment xml:lang="ar">قالب OTH</comment>
-    <comment xml:lang="be@latin">Šablon OTH</comment>
+    <comment xml:lang="be-Latn">Šablon OTH</comment>
     <comment xml:lang="bg">Шаблон за страници — OTH</comment>
     <comment xml:lang="ca">plantilla OTH</comment>
     <comment xml:lang="cs">šablona OTH</comment>
     <comment xml:lang="da">OTH-skabelon</comment>
     <comment xml:lang="de">OTH-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο OTH</comment>
-    <comment xml:lang="en_GB">OTH template</comment>
+    <comment xml:lang="en-GB">OTH template</comment>
     <comment xml:lang="eo">OTH-ŝablono</comment>
     <comment xml:lang="es">plantilla OTH</comment>
     <comment xml:lang="eu">OTH txantiloia</comment>
     <comment xml:lang="fi">OTH-malli</comment>
     <comment xml:lang="fo">OTH formur</comment>
     <comment xml:lang="fr">modèle OTH</comment>
+    <comment xml:lang="fur">model OTH</comment>
     <comment xml:lang="ga">teimpléad OTH</comment>
     <comment xml:lang="gl">modelo OTH</comment>
     <comment xml:lang="he">תבנית OTH</comment>
@@ -5510,7 +5657,7 @@
     <comment xml:lang="oc">modèl OTH</comment>
     <comment xml:lang="pl">Szablon OTH</comment>
     <comment xml:lang="pt">modelo OTH</comment>
-    <comment xml:lang="pt_BR">Modelo OTH</comment>
+    <comment xml:lang="pt-BR">Modelo OTH</comment>
     <comment xml:lang="ro">Șablon OTH</comment>
     <comment xml:lang="ru">Шаблон OTH</comment>
     <comment xml:lang="sk">Šablóna OTH</comment>
@@ -5521,16 +5668,16 @@
     <comment xml:lang="tr">OTH şablonu</comment>
     <comment xml:lang="uk">шаблон OTH</comment>
     <comment xml:lang="vi">Mẫu ODH</comment>
-    <comment xml:lang="zh_CN">OTH 模板</comment>
-    <comment xml:lang="zh_TW">OTH 範本</comment>
+    <comment xml:lang="zh-CN">OTH 模板</comment>
+    <comment xml:lang="zh-TW">OTH 範本</comment>
     <acronym>OTH</acronym>
     <expanded-acronym>OpenDocument HTML</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="text-html"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.text-web" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.text-web" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5538,22 +5685,24 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.text-master">
     <comment>ODM document</comment>
+    <comment xml:lang="af">ODM-dokument</comment>
     <comment xml:lang="ar">مستند ODM</comment>
     <comment xml:lang="ast">Documentu ODM</comment>
-    <comment xml:lang="be@latin">Dakument ODM</comment>
+    <comment xml:lang="be-Latn">Dakument ODM</comment>
     <comment xml:lang="bg">Документ — ODM</comment>
     <comment xml:lang="ca">document ODM</comment>
     <comment xml:lang="cs">dokument ODM</comment>
     <comment xml:lang="da">ODM-dokument</comment>
     <comment xml:lang="de">ODM-Dokument</comment>
     <comment xml:lang="el">Έγγραφο ODM</comment>
-    <comment xml:lang="en_GB">ODM document</comment>
+    <comment xml:lang="en-GB">ODM document</comment>
     <comment xml:lang="eo">ODM-dokumento</comment>
     <comment xml:lang="es">documento ODM</comment>
     <comment xml:lang="eu">ODM dokumentua</comment>
     <comment xml:lang="fi">ODM-asiakirja</comment>
     <comment xml:lang="fo">ODM skjal</comment>
     <comment xml:lang="fr">document ODM</comment>
+    <comment xml:lang="fur">document ODM</comment>
     <comment xml:lang="ga">cáipéis ODM</comment>
     <comment xml:lang="gl">documento ODM</comment>
     <comment xml:lang="he">מסמך ODM</comment>
@@ -5574,7 +5723,7 @@
     <comment xml:lang="oc">document ODM</comment>
     <comment xml:lang="pl">Dokument ODM</comment>
     <comment xml:lang="pt">documento ODM</comment>
-    <comment xml:lang="pt_BR">Documento ODM</comment>
+    <comment xml:lang="pt-BR">Documento ODM</comment>
     <comment xml:lang="ro">Document ODM</comment>
     <comment xml:lang="ru">Документ ODM</comment>
     <comment xml:lang="sk">Dokument ODM</comment>
@@ -5585,16 +5734,16 @@
     <comment xml:lang="tr">ODM belgesi</comment>
     <comment xml:lang="uk">документ ODM</comment>
     <comment xml:lang="vi">Tài liệu ODM</comment>
-    <comment xml:lang="zh_CN">ODM 文档</comment>
-    <comment xml:lang="zh_TW">ODM 文件</comment>
+    <comment xml:lang="zh-CN">ODM 文档</comment>
+    <comment xml:lang="zh-TW">ODM 文件</comment>
     <acronym>ODM</acronym>
     <expanded-acronym>OpenDocument Master</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.text-master" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.text-master" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5602,21 +5751,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.graphics">
     <comment>ODG drawing</comment>
+    <comment xml:lang="af">ODG-tekening</comment>
     <comment xml:lang="ar">تصميم ODG</comment>
-    <comment xml:lang="be@latin">Rysunak ODG</comment>
+    <comment xml:lang="be-Latn">Rysunak ODG</comment>
     <comment xml:lang="bg">Чертеж — ODG</comment>
     <comment xml:lang="ca">dibuix ODG</comment>
     <comment xml:lang="cs">kresba ODG</comment>
     <comment xml:lang="da">ODG-tegning</comment>
     <comment xml:lang="de">ODG-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο ODG</comment>
-    <comment xml:lang="en_GB">ODG drawing</comment>
+    <comment xml:lang="en-GB">ODG drawing</comment>
     <comment xml:lang="eo">ODG-desegnaĵo</comment>
     <comment xml:lang="es">dibujo ODG</comment>
     <comment xml:lang="eu">ODG marrazkia</comment>
     <comment xml:lang="fi">ODG-piirros</comment>
     <comment xml:lang="fo">ODG tekning</comment>
     <comment xml:lang="fr">dessin ODG</comment>
+    <comment xml:lang="fur">dissen ODG</comment>
     <comment xml:lang="ga">líníocht ODG</comment>
     <comment xml:lang="gl">debuxo ODG</comment>
     <comment xml:lang="he">ציור ODG</comment>
@@ -5637,7 +5788,7 @@
     <comment xml:lang="oc">dessenh ODG</comment>
     <comment xml:lang="pl">Rysunek ODG</comment>
     <comment xml:lang="pt">desenho ODG</comment>
-    <comment xml:lang="pt_BR">Desenho ODG</comment>
+    <comment xml:lang="pt-BR">Desenho ODG</comment>
     <comment xml:lang="ro">Desen ODG</comment>
     <comment xml:lang="ru">Рисунок ODG</comment>
     <comment xml:lang="sk">Kresba ODG</comment>
@@ -5648,16 +5799,16 @@
     <comment xml:lang="tr">ODG çizimi</comment>
     <comment xml:lang="uk">малюнок ODG</comment>
     <comment xml:lang="vi">Bản vẽ ODG</comment>
-    <comment xml:lang="zh_CN">ODG 绘图</comment>
-    <comment xml:lang="zh_TW">ODG 繪圖</comment>
+    <comment xml:lang="zh-CN">ODG 绘图</comment>
+    <comment xml:lang="zh-TW">ODG 繪圖</comment>
     <acronym>ODG</acronym>
     <expanded-acronym>OpenDocument Drawing</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="image-x-generic"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.graphics" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.graphics" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5665,6 +5816,7 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.graphics-flat-xml">
     <comment>ODG drawing (Flat XML)</comment>
+    <comment xml:lang="af">ODG-tekening (plat XML)</comment>
     <comment xml:lang="ar">رسمة ODG (Flat XML)</comment>
     <comment xml:lang="bg">Чертеж — ODG (само XML)</comment>
     <comment xml:lang="ca">dibuix ODG (XML pla) </comment>
@@ -5672,12 +5824,13 @@
     <comment xml:lang="da">ODG-tegning (flad XML)</comment>
     <comment xml:lang="de">ODG-Zeichnung (Unkomprimiertes XML)</comment>
     <comment xml:lang="el">Σχέδιο ODG (Flat XML)</comment>
-    <comment xml:lang="en_GB">ODG drawing (Flat XML)</comment>
+    <comment xml:lang="en-GB">ODG drawing (Flat XML)</comment>
     <comment xml:lang="es">dibujo ODG (XML plano)</comment>
     <comment xml:lang="eu">ODG marrazkia (XML soila)</comment>
     <comment xml:lang="fi">ODG-piirros (Flat XML)</comment>
     <comment xml:lang="fo">ODG tekning (Flat XML)</comment>
     <comment xml:lang="fr">dessin ODG (XML plat)</comment>
+    <comment xml:lang="fur">dissen ODG (XML sempliç)</comment>
     <comment xml:lang="ga">líníocht ODG (XML cothrom)</comment>
     <comment xml:lang="gl">debuxo ODB (XML plano)</comment>
     <comment xml:lang="he">ציור ODG (Flat XML(</comment>
@@ -5696,7 +5849,7 @@
     <comment xml:lang="oc">dessenh ODG (XML plat)</comment>
     <comment xml:lang="pl">Rysunek ODG (prosty XML)</comment>
     <comment xml:lang="pt">desenho ODG (XML plano)</comment>
-    <comment xml:lang="pt_BR">Desenho ODG (Flat XML)</comment>
+    <comment xml:lang="pt-BR">Desenho ODG (Flat XML)</comment>
     <comment xml:lang="ro">Desen ODG (XML simplu)</comment>
     <comment xml:lang="ru">Рисунок ODG (простой XML)</comment>
     <comment xml:lang="sk">Kresba ODG (čisté XML)</comment>
@@ -5704,9 +5857,9 @@
     <comment xml:lang="sr">ОДГ цртеж (Обичан ИксМЛ)</comment>
     <comment xml:lang="sv">ODG-teckning (platt XML)</comment>
     <comment xml:lang="tr">ODG çizimi (Düz XML)</comment>
-    <comment xml:lang="uk">малюнок ODG (Flat XML)</comment>
-    <comment xml:lang="zh_CN">ODG 绘图（Flat XML）</comment>
-    <comment xml:lang="zh_TW">ODG 繪圖 (Flat XML)</comment>
+    <comment xml:lang="uk">малюнок ODG (простий XML)</comment>
+    <comment xml:lang="zh-CN">ODG 绘图（Flat XML）</comment>
+    <comment xml:lang="zh-TW">ODG 繪圖 (Flat XML)</comment>
     <acronym>FODG</acronym>
     <expanded-acronym>OpenDocument Drawing (Flat XML)</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -5715,21 +5868,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.graphics-template">
     <comment>ODG template</comment>
+    <comment xml:lang="af">ODG-sjabloon</comment>
     <comment xml:lang="ar">قالب ODG</comment>
-    <comment xml:lang="be@latin">Šablon ODG</comment>
+    <comment xml:lang="be-Latn">Šablon ODG</comment>
     <comment xml:lang="bg">Шаблон за чертежи — ODG</comment>
     <comment xml:lang="ca">plantilla ODG</comment>
     <comment xml:lang="cs">šablona ODG</comment>
     <comment xml:lang="da">ODG-skabelon</comment>
     <comment xml:lang="de">ODG-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο ODG</comment>
-    <comment xml:lang="en_GB">ODG template</comment>
+    <comment xml:lang="en-GB">ODG template</comment>
     <comment xml:lang="eo">ODG-ŝablono</comment>
     <comment xml:lang="es">plantilla ODG</comment>
     <comment xml:lang="eu">ODG txantiloia</comment>
     <comment xml:lang="fi">ODG-malli</comment>
     <comment xml:lang="fo">ODG formur</comment>
     <comment xml:lang="fr">modèle ODG</comment>
+    <comment xml:lang="fur">model ODG</comment>
     <comment xml:lang="ga">teimpléad ODG</comment>
     <comment xml:lang="gl">modelo ODG</comment>
     <comment xml:lang="he">תבנית ODG</comment>
@@ -5750,7 +5905,7 @@
     <comment xml:lang="oc">modèl ODG</comment>
     <comment xml:lang="pl">Szablon ODG</comment>
     <comment xml:lang="pt">modelo ODG</comment>
-    <comment xml:lang="pt_BR">Modelo ODG</comment>
+    <comment xml:lang="pt-BR">Modelo ODG</comment>
     <comment xml:lang="ro">Șablon ODG</comment>
     <comment xml:lang="ru">Шаблон ODG</comment>
     <comment xml:lang="sk">Šablóna ODG</comment>
@@ -5761,16 +5916,16 @@
     <comment xml:lang="tr">ODG şablonu</comment>
     <comment xml:lang="uk">шаблон ODG</comment>
     <comment xml:lang="vi">Mẫu ODG</comment>
-    <comment xml:lang="zh_CN">ODG 模板</comment>
-    <comment xml:lang="zh_TW">ODG 範本</comment>
+    <comment xml:lang="zh-CN">ODG 模板</comment>
+    <comment xml:lang="zh-TW">ODG 範本</comment>
     <acronym>ODG</acronym>
     <expanded-acronym>OpenDocument Drawing</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="image-x-generic"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.graphics-template" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.graphics-template" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5778,21 +5933,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.presentation">
     <comment>ODP presentation</comment>
+    <comment xml:lang="af">ODP-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي ODP</comment>
-    <comment xml:lang="be@latin">Prezentacyja ODP</comment>
+    <comment xml:lang="be-Latn">Prezentacyja ODP</comment>
     <comment xml:lang="bg">Презентация — ODP</comment>
     <comment xml:lang="ca">presentació ODP</comment>
     <comment xml:lang="cs">prezentace ODP</comment>
     <comment xml:lang="da">ODP-præsentation</comment>
     <comment xml:lang="de">ODP-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση ODP</comment>
-    <comment xml:lang="en_GB">ODP presentation</comment>
+    <comment xml:lang="en-GB">ODP presentation</comment>
     <comment xml:lang="eo">ODP-prezentaĵo</comment>
     <comment xml:lang="es">presentación ODP</comment>
     <comment xml:lang="eu">ODP aurkezpena</comment>
     <comment xml:lang="fi">ODP-esitys</comment>
     <comment xml:lang="fo">ODP framløga</comment>
     <comment xml:lang="fr">présentation ODP</comment>
+    <comment xml:lang="fur">presentazion ODP</comment>
     <comment xml:lang="ga">láithreoireacht ODP</comment>
     <comment xml:lang="gl">presentación ODP</comment>
     <comment xml:lang="he">מצגת ODP</comment>
@@ -5813,7 +5970,7 @@
     <comment xml:lang="oc">presentacion ODP</comment>
     <comment xml:lang="pl">Prezentacja ODP</comment>
     <comment xml:lang="pt">apresentação ODP</comment>
-    <comment xml:lang="pt_BR">Apresentação ODP</comment>
+    <comment xml:lang="pt-BR">Apresentação ODP</comment>
     <comment xml:lang="ro">Prezentare ODP</comment>
     <comment xml:lang="ru">Презентация ODP</comment>
     <comment xml:lang="sk">Prezentácia ODP</comment>
@@ -5824,16 +5981,16 @@
     <comment xml:lang="tr">ODP sunumu</comment>
     <comment xml:lang="uk">презентація ODP</comment>
     <comment xml:lang="vi">Trình diễn ODM</comment>
-    <comment xml:lang="zh_CN">ODP 演示文稿</comment>
-    <comment xml:lang="zh_TW">ODP 簡報</comment>
+    <comment xml:lang="zh-CN">ODP 演示文稿</comment>
+    <comment xml:lang="zh-TW">ODP 簡報</comment>
     <acronym>ODP</acronym>
     <expanded-acronym>OpenDocument Presentation</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.presentation" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.presentation" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5841,6 +5998,7 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.presentation-flat-xml">
     <comment>ODP presentation (Flat XML)</comment>
+    <comment xml:lang="af">ODP-voorlegging (plat XML)</comment>
     <comment xml:lang="ar">عرض ODP (Flat XML)</comment>
     <comment xml:lang="bg">Презентация — ODP (само XML)</comment>
     <comment xml:lang="ca">presentació ODP (XML pla)</comment>
@@ -5848,12 +6006,13 @@
     <comment xml:lang="da">ODP-præsentation (flad XML)</comment>
     <comment xml:lang="de">ODP-Präsentation (Unkomprimiertes XML)</comment>
     <comment xml:lang="el">Παρουσίαση ODP (Flat XML)</comment>
-    <comment xml:lang="en_GB">ODP presentation (Flat XML)</comment>
+    <comment xml:lang="en-GB">ODP presentation (Flat XML)</comment>
     <comment xml:lang="es">presentación ODP (XML plano)</comment>
     <comment xml:lang="eu">ODP aurkezpena (XML soila)</comment>
     <comment xml:lang="fi">ODP-esitys (Flat XML)</comment>
     <comment xml:lang="fo">ODP framløga (Flat XML)</comment>
     <comment xml:lang="fr">présentation ODP (XML plat)</comment>
+    <comment xml:lang="fur">presentazion ODP (XML sempliç)</comment>
     <comment xml:lang="ga">láithreoireacht ODP (XML cothrom)</comment>
     <comment xml:lang="gl">presentación ODP (XML plano)</comment>
     <comment xml:lang="he">מצגת ODP‏ (Flat XML)</comment>
@@ -5872,7 +6031,7 @@
     <comment xml:lang="oc">presentacion ODP (XML plat)</comment>
     <comment xml:lang="pl">Prezentacja ODP (prosty XML)</comment>
     <comment xml:lang="pt">apresentação ODP (XML plano)</comment>
-    <comment xml:lang="pt_BR">Apresentação ODP (Flat XML)</comment>
+    <comment xml:lang="pt-BR">Apresentação ODP (Flat XML)</comment>
     <comment xml:lang="ro">Prezentare ODP (XML simplu)</comment>
     <comment xml:lang="ru">Презентация ODP (простой XML)</comment>
     <comment xml:lang="sk">Prezentácia ODP (čisté XML)</comment>
@@ -5881,8 +6040,8 @@
     <comment xml:lang="sv">ODP-presentation (platt XML)</comment>
     <comment xml:lang="tr">ODP sunumu (Düz XML)</comment>
     <comment xml:lang="uk">презентація ODP (Flat XML)</comment>
-    <comment xml:lang="zh_CN">ODP 演示文稿（Flat XML）</comment>
-    <comment xml:lang="zh_TW">ODP 範本 (Flat XML)</comment>
+    <comment xml:lang="zh-CN">ODP 演示文稿（Flat XML）</comment>
+    <comment xml:lang="zh-TW">ODP 範本 (Flat XML)</comment>
     <acronym>FODP</acronym>
     <expanded-acronym>OpenDocument Presentation (Flat XML)</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -5891,21 +6050,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.presentation-template">
     <comment>ODP template</comment>
+    <comment xml:lang="af">ODP-sjabloon</comment>
     <comment xml:lang="ar">قالب ODP</comment>
-    <comment xml:lang="be@latin">Šablon ODP</comment>
+    <comment xml:lang="be-Latn">Šablon ODP</comment>
     <comment xml:lang="bg">Шаблон за презентации — ODP</comment>
     <comment xml:lang="ca">plantilla ODP</comment>
     <comment xml:lang="cs">šablona ODP</comment>
     <comment xml:lang="da">ODP-skabelon</comment>
     <comment xml:lang="de">ODP-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο ODP</comment>
-    <comment xml:lang="en_GB">ODP template</comment>
+    <comment xml:lang="en-GB">ODP template</comment>
     <comment xml:lang="eo">ODP-ŝablono</comment>
     <comment xml:lang="es">plantilla ODP</comment>
     <comment xml:lang="eu">ODP txantiloia</comment>
     <comment xml:lang="fi">ODP-malli</comment>
     <comment xml:lang="fo">ODP formur</comment>
     <comment xml:lang="fr">modèle ODP</comment>
+    <comment xml:lang="fur">model ODP</comment>
     <comment xml:lang="ga">teimpléad ODP</comment>
     <comment xml:lang="gl">modelo ODP</comment>
     <comment xml:lang="he">תבנית ODP</comment>
@@ -5926,7 +6087,7 @@
     <comment xml:lang="oc">modèl ODP</comment>
     <comment xml:lang="pl">Szablon ODP</comment>
     <comment xml:lang="pt">modelo ODP</comment>
-    <comment xml:lang="pt_BR">Modelo ODP</comment>
+    <comment xml:lang="pt-BR">Modelo ODP</comment>
     <comment xml:lang="ro">Șablon ODP</comment>
     <comment xml:lang="ru">Шаблон ODP</comment>
     <comment xml:lang="sk">Šablóna ODP</comment>
@@ -5937,16 +6098,16 @@
     <comment xml:lang="tr">ODP şablonu</comment>
     <comment xml:lang="uk">шаблон ODP</comment>
     <comment xml:lang="vi">Mẫu ODP</comment>
-    <comment xml:lang="zh_CN">ODP 模板</comment>
-    <comment xml:lang="zh_TW">ODP 範本</comment>
+    <comment xml:lang="zh-CN">ODP 模板</comment>
+    <comment xml:lang="zh-TW">ODP 範本</comment>
     <acronym>ODP</acronym>
     <expanded-acronym>OpenDocument Presentation</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.presentation-template" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.presentation-template" offset="38"/>
         </match>
       </match>
     </magic>
@@ -5954,21 +6115,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.spreadsheet">
     <comment>ODS spreadsheet</comment>
+    <comment xml:lang="af">ODS-sigblad</comment>
     <comment xml:lang="ar">جدول ODS</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš ODS</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš ODS</comment>
     <comment xml:lang="bg">Таблица — ODS</comment>
     <comment xml:lang="ca">full de càlcul ODS</comment>
     <comment xml:lang="cs">sešit ODS</comment>
     <comment xml:lang="da">ODS-regneark</comment>
     <comment xml:lang="de">ODS-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο ODS</comment>
-    <comment xml:lang="en_GB">ODS spreadsheet</comment>
+    <comment xml:lang="en-GB">ODS spreadsheet</comment>
     <comment xml:lang="eo">ODS-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo ODS</comment>
     <comment xml:lang="eu">ODS kalkulu-orria</comment>
     <comment xml:lang="fi">ODS-taulukko</comment>
     <comment xml:lang="fo">ODS rokniark</comment>
     <comment xml:lang="fr">feuille de calcul ODS</comment>
+    <comment xml:lang="fur">sfuei di calcul ODS</comment>
     <comment xml:lang="ga">scarbhileog ODS</comment>
     <comment xml:lang="gl">folla de cálculo ODS</comment>
     <comment xml:lang="he">גליון נתונים ODS</comment>
@@ -5989,7 +6152,7 @@
     <comment xml:lang="oc">fuèlh de calcul ODS</comment>
     <comment xml:lang="pl">Arkusz ODS</comment>
     <comment xml:lang="pt">folha de cálculo ODS</comment>
-    <comment xml:lang="pt_BR">Planilha ODS</comment>
+    <comment xml:lang="pt-BR">Planilha ODS</comment>
     <comment xml:lang="ro">Foaie de calcul ODS</comment>
     <comment xml:lang="ru">Электронная таблица ODS</comment>
     <comment xml:lang="sk">Zošit ODS</comment>
@@ -5997,19 +6160,19 @@
     <comment xml:lang="sq">Fletë llogaritjesh ODS</comment>
     <comment xml:lang="sr">ОДС табела</comment>
     <comment xml:lang="sv">ODS-kalkylblad</comment>
-    <comment xml:lang="tr">ODS çalışma sayfası</comment>
+    <comment xml:lang="tr">ODS hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця ODS</comment>
     <comment xml:lang="vi">Bảng tính ODS</comment>
-    <comment xml:lang="zh_CN">ODS 电子表格</comment>
-    <comment xml:lang="zh_TW">ODS 試算表</comment>
+    <comment xml:lang="zh-CN">ODS 电子表格</comment>
+    <comment xml:lang="zh-TW">ODS 試算表</comment>
     <acronym>ODS</acronym>
     <expanded-acronym>OpenDocument Spreadsheet</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.spreadsheet" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.spreadsheet" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6017,6 +6180,7 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.spreadsheet-flat-xml">
     <comment>ODS spreadsheet (Flat XML)</comment>
+    <comment xml:lang="af">ODS-sigblad (plat XML)</comment>
     <comment xml:lang="ar">جدول ODS (Flat XML)</comment>
     <comment xml:lang="bg">Таблица — ODS (само XML)</comment>
     <comment xml:lang="ca">full de càlcul ODS (XML pla)</comment>
@@ -6024,12 +6188,13 @@
     <comment xml:lang="da">ODS-regneark (flad XML)</comment>
     <comment xml:lang="de">ODS-Tabelle (Unkomprimiertes XML)</comment>
     <comment xml:lang="el">Λογιστικό φύλλο ODS (Flat XML)</comment>
-    <comment xml:lang="en_GB">ODS spreadsheet (Flat XML)</comment>
+    <comment xml:lang="en-GB">ODS spreadsheet (Flat XML)</comment>
     <comment xml:lang="es">hoja de cálculo ODS (XML plano)</comment>
     <comment xml:lang="eu">ODS kalkulu-orria (XML soila)</comment>
     <comment xml:lang="fi">ODS-laskentataulukko (Flat XML)</comment>
     <comment xml:lang="fo">ODS rokniark (Flat XML)</comment>
     <comment xml:lang="fr">feuille de calcul ODS (XML plat)</comment>
+    <comment xml:lang="fur">sfuei di calcul ODS (XML sempliç)</comment>
     <comment xml:lang="ga">scarbhileog ODS (XML cothrom)</comment>
     <comment xml:lang="gl">folla de cálculo ODS (XML plano)</comment>
     <comment xml:lang="he">גליון נתונים ODS‏ (XML פשוט)</comment>
@@ -6048,17 +6213,17 @@
     <comment xml:lang="oc">fuèlh de calcul ODS (XML plat)</comment>
     <comment xml:lang="pl">Arkusz ODS (prosty XML)</comment>
     <comment xml:lang="pt">folha de cálculo ODS (XML plano)</comment>
-    <comment xml:lang="pt_BR">Planilha ODS (Flat XML)</comment>
+    <comment xml:lang="pt-BR">Planilha ODS (Flat XML)</comment>
     <comment xml:lang="ro">Foaie de calcul ODS (XML simplu)</comment>
     <comment xml:lang="ru">Электронная таблица ODS (простой XML)</comment>
     <comment xml:lang="sk">Zošit ODS (čisté XML)</comment>
     <comment xml:lang="sl">Preglednica ODS (nepovezan XML)</comment>
     <comment xml:lang="sr">ОДС табела (обични ИксМЛ)</comment>
     <comment xml:lang="sv">ODS-kalkylblad (platt XML)</comment>
-    <comment xml:lang="tr">ODS sunumu (Düz XML)</comment>
+    <comment xml:lang="tr">ODS hesap çizelgesi (Düz XML)</comment>
     <comment xml:lang="uk">ел. таблиця ODS (Flat XML)</comment>
-    <comment xml:lang="zh_CN">ODS 电子表格 (Flat XML)</comment>
-    <comment xml:lang="zh_TW">ODS 試算表 (Flat XML)</comment>
+    <comment xml:lang="zh-CN">ODS 电子表格 (Flat XML)</comment>
+    <comment xml:lang="zh-TW">ODS 試算表 (Flat XML)</comment>
     <acronym>FODS</acronym>
     <expanded-acronym>OpenDocument Spreadsheet (Flat XML)</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -6067,21 +6232,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.spreadsheet-template">
     <comment>ODS template</comment>
+    <comment xml:lang="af">ODS-sjabloon</comment>
     <comment xml:lang="ar">قالب ODS</comment>
-    <comment xml:lang="be@latin">Šablon ODS</comment>
+    <comment xml:lang="be-Latn">Šablon ODS</comment>
     <comment xml:lang="bg">Шаблон за таблици — ODS</comment>
     <comment xml:lang="ca">plantilla ODS</comment>
     <comment xml:lang="cs">šablona ODS</comment>
     <comment xml:lang="da">ODS-skabelon</comment>
     <comment xml:lang="de">ODS-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο ODS</comment>
-    <comment xml:lang="en_GB">ODS template</comment>
+    <comment xml:lang="en-GB">ODS template</comment>
     <comment xml:lang="eo">ODS-ŝablono</comment>
     <comment xml:lang="es">plantilla ODS</comment>
     <comment xml:lang="eu">ODS txantiloia</comment>
     <comment xml:lang="fi">ODS-malli</comment>
     <comment xml:lang="fo">ODS formur</comment>
     <comment xml:lang="fr">modèle ODS</comment>
+    <comment xml:lang="fur">model ODS</comment>
     <comment xml:lang="ga">teimpléad ODS</comment>
     <comment xml:lang="gl">modelo ODS</comment>
     <comment xml:lang="he">תבנית ODS</comment>
@@ -6102,7 +6269,7 @@
     <comment xml:lang="oc">modèl ODS</comment>
     <comment xml:lang="pl">Szablon ODS</comment>
     <comment xml:lang="pt">modelo ODS</comment>
-    <comment xml:lang="pt_BR">Modelo ODS</comment>
+    <comment xml:lang="pt-BR">Modelo ODS</comment>
     <comment xml:lang="ro">Șablon ODS</comment>
     <comment xml:lang="ru">Шаблон ODS</comment>
     <comment xml:lang="sk">Šablóna ODS</comment>
@@ -6113,16 +6280,16 @@
     <comment xml:lang="tr">ODS şablonu</comment>
     <comment xml:lang="uk">шаблон ODS</comment>
     <comment xml:lang="vi">Mẫu ODS</comment>
-    <comment xml:lang="zh_CN">ODS 模板</comment>
-    <comment xml:lang="zh_TW">ODS 範本</comment>
+    <comment xml:lang="zh-CN">ODS 模板</comment>
+    <comment xml:lang="zh-TW">ODS 範本</comment>
     <acronym>ODS</acronym>
     <expanded-acronym>OpenDocument Spreadsheet</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.spreadsheet-template" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.spreadsheet-template" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6130,21 +6297,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.chart">
     <comment>ODC chart</comment>
+    <comment xml:lang="af">ODC-grafiek</comment>
     <comment xml:lang="ar">مخطط ODC</comment>
-    <comment xml:lang="be@latin">Dyjahrama ODC</comment>
+    <comment xml:lang="be-Latn">Dyjahrama ODC</comment>
     <comment xml:lang="bg">Диаграма — ODC</comment>
     <comment xml:lang="ca">diagrama ODC</comment>
     <comment xml:lang="cs">graf ODC</comment>
     <comment xml:lang="da">ODC-diagram</comment>
     <comment xml:lang="de">ODC-Diagramm</comment>
     <comment xml:lang="el">Διάγραμμα ODC</comment>
-    <comment xml:lang="en_GB">ODC chart</comment>
+    <comment xml:lang="en-GB">ODC chart</comment>
     <comment xml:lang="eo">ODC-diagramo</comment>
     <comment xml:lang="es">gráfico ODC</comment>
     <comment xml:lang="eu">ODC diagrama</comment>
     <comment xml:lang="fi">ODC-kaavio</comment>
     <comment xml:lang="fo">ODC strikumynd</comment>
     <comment xml:lang="fr">graphique ODC</comment>
+    <comment xml:lang="fur">grafic ODC</comment>
     <comment xml:lang="ga">cairt ODC</comment>
     <comment xml:lang="gl">gráfica ODC</comment>
     <comment xml:lang="he">תו ODC</comment>
@@ -6164,7 +6333,7 @@
     <comment xml:lang="oc">grafic ODC</comment>
     <comment xml:lang="pl">Wykres ODC</comment>
     <comment xml:lang="pt">gráfico ODC</comment>
-    <comment xml:lang="pt_BR">Gráfico ODC</comment>
+    <comment xml:lang="pt-BR">Gráfico ODC</comment>
     <comment xml:lang="ro">Diagramă ODC</comment>
     <comment xml:lang="ru">Диаграмма ODC</comment>
     <comment xml:lang="sk">Graf ODC</comment>
@@ -6172,19 +6341,19 @@
     <comment xml:lang="sq">Grafik ODC</comment>
     <comment xml:lang="sr">ОДЦ график</comment>
     <comment xml:lang="sv">ODC-diagram</comment>
-    <comment xml:lang="tr">ODC çizelgesi</comment>
+    <comment xml:lang="tr">ODC çizgesi</comment>
     <comment xml:lang="uk">діаграма ODC</comment>
     <comment xml:lang="vi">Sơ đồ ODC</comment>
-    <comment xml:lang="zh_CN">ODC 图表</comment>
-    <comment xml:lang="zh_TW">ODC 圖表</comment>
+    <comment xml:lang="zh-CN">ODC 图表</comment>
+    <comment xml:lang="zh-TW">ODC 圖表</comment>
     <acronym>ODC</acronym>
     <expanded-acronym>OpenDocument Chart</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.chart" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.chart" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6192,6 +6361,7 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.chart-template">
     <comment>ODC template</comment>
+    <comment xml:lang="af">ODC-sjabloon</comment>
     <comment xml:lang="ar">قالب ODC</comment>
     <comment xml:lang="bg">Шаблон за диаграми — ODC</comment>
     <comment xml:lang="ca">plantilla ODC</comment>
@@ -6199,13 +6369,14 @@
     <comment xml:lang="da">ODC-skabelon</comment>
     <comment xml:lang="de">ODC-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο ODC</comment>
-    <comment xml:lang="en_GB">ODC template</comment>
+    <comment xml:lang="en-GB">ODC template</comment>
     <comment xml:lang="eo">ODC-ŝablono</comment>
     <comment xml:lang="es">plantilla ODC</comment>
     <comment xml:lang="eu">ODC txantiloia</comment>
     <comment xml:lang="fi">ODC-malli</comment>
     <comment xml:lang="fo">ODC formur</comment>
     <comment xml:lang="fr">modèle ODC</comment>
+    <comment xml:lang="fur">model ODC</comment>
     <comment xml:lang="ga">teimpléad ODC</comment>
     <comment xml:lang="gl">modelo ODC</comment>
     <comment xml:lang="he">תבנית ODC</comment>
@@ -6224,7 +6395,7 @@
     <comment xml:lang="oc">modèl ODC</comment>
     <comment xml:lang="pl">Szablon ODC</comment>
     <comment xml:lang="pt">modelo ODC</comment>
-    <comment xml:lang="pt_BR">Modelo ODC</comment>
+    <comment xml:lang="pt-BR">Modelo ODC</comment>
     <comment xml:lang="ro">Șablon ODC</comment>
     <comment xml:lang="ru">Шаблон ODC</comment>
     <comment xml:lang="sk">Šablóna ODC</comment>
@@ -6234,16 +6405,16 @@
     <comment xml:lang="tr">ODC şablonu</comment>
     <comment xml:lang="uk">шаблон ODC</comment>
     <comment xml:lang="vi">Mẫu ODC</comment>
-    <comment xml:lang="zh_CN">ODC 模板</comment>
-    <comment xml:lang="zh_TW">ODC 範本</comment>
+    <comment xml:lang="zh-CN">ODC 模板</comment>
+    <comment xml:lang="zh-TW">ODC 範本</comment>
     <acronym>ODC</acronym>
     <expanded-acronym>OpenDocument Chart</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.chart-template" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.chart-template" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6251,21 +6422,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.formula">
     <comment>ODF formula</comment>
+    <comment xml:lang="af">ODF-formule</comment>
     <comment xml:lang="ar">صيغة ODF</comment>
-    <comment xml:lang="be@latin">Formuła ODF</comment>
+    <comment xml:lang="be-Latn">Formuła ODF</comment>
     <comment xml:lang="bg">Формула — ODF</comment>
     <comment xml:lang="ca">fórmula ODF</comment>
     <comment xml:lang="cs">vzorec ODF</comment>
     <comment xml:lang="da">ODF-formel</comment>
     <comment xml:lang="de">ODF-Formel</comment>
     <comment xml:lang="el">Μαθηματικός τύπος ODF</comment>
-    <comment xml:lang="en_GB">ODF formula</comment>
+    <comment xml:lang="en-GB">ODF formula</comment>
     <comment xml:lang="eo">ODF-formulo</comment>
     <comment xml:lang="es">fórmula ODF</comment>
     <comment xml:lang="eu">ODF formula</comment>
     <comment xml:lang="fi">ODF-kaava</comment>
     <comment xml:lang="fo">ODF frymil</comment>
     <comment xml:lang="fr">formule ODF</comment>
+    <comment xml:lang="fur">formule ODF</comment>
     <comment xml:lang="ga">foirmle ODF</comment>
     <comment xml:lang="gl">Fórula ODF</comment>
     <comment xml:lang="he">נוסחת ODF</comment>
@@ -6286,7 +6459,7 @@
     <comment xml:lang="oc">formula ODF</comment>
     <comment xml:lang="pl">Formuła ODF</comment>
     <comment xml:lang="pt">fórmula ODF</comment>
-    <comment xml:lang="pt_BR">Fórmula ODF</comment>
+    <comment xml:lang="pt-BR">Fórmula ODF</comment>
     <comment xml:lang="ro">Formulă ODF</comment>
     <comment xml:lang="ru">Формула ODF</comment>
     <comment xml:lang="sk">Vzorec ODF</comment>
@@ -6297,16 +6470,16 @@
     <comment xml:lang="tr">ODF formülü</comment>
     <comment xml:lang="uk">формула ODF</comment>
     <comment xml:lang="vi">Công thức ODF</comment>
-    <comment xml:lang="zh_CN">ODF 公式</comment>
-    <comment xml:lang="zh_TW">ODF 公式</comment>
+    <comment xml:lang="zh-CN">ODF 公式</comment>
+    <comment xml:lang="zh-TW">ODF 公式</comment>
     <acronym>ODF</acronym>
     <expanded-acronym>OpenDocument Formula</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.formula" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.formula" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6314,6 +6487,7 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.formula-template">
     <comment>ODF template</comment>
+    <comment xml:lang="af">ODF-sjabloon</comment>
     <comment xml:lang="ar">قالب ODF</comment>
     <comment xml:lang="bg">Шаблон за формули — ODF</comment>
     <comment xml:lang="ca">plantilla ODF</comment>
@@ -6321,13 +6495,14 @@
     <comment xml:lang="da">ODF-skabelon</comment>
     <comment xml:lang="de">ODF-Vorlage</comment>
     <comment xml:lang="el">Πρότυπο ODF</comment>
-    <comment xml:lang="en_GB">ODF template</comment>
+    <comment xml:lang="en-GB">ODF template</comment>
     <comment xml:lang="eo">ODF-ŝablono</comment>
     <comment xml:lang="es">plantilla ODF</comment>
     <comment xml:lang="eu">ODF txantiloia</comment>
     <comment xml:lang="fi">ODF-malli</comment>
     <comment xml:lang="fo">ODF formur</comment>
     <comment xml:lang="fr">modèle ODF</comment>
+    <comment xml:lang="fur">model ODF</comment>
     <comment xml:lang="ga">teimpléad ODF</comment>
     <comment xml:lang="gl">modelo ODF</comment>
     <comment xml:lang="he">תבנית ODF</comment>
@@ -6346,7 +6521,7 @@
     <comment xml:lang="oc">modèl ODF</comment>
     <comment xml:lang="pl">Szablon ODF</comment>
     <comment xml:lang="pt">modelo ODF</comment>
-    <comment xml:lang="pt_BR">Modelo ODF</comment>
+    <comment xml:lang="pt-BR">Modelo ODF</comment>
     <comment xml:lang="ro">Șablon ODF</comment>
     <comment xml:lang="ru">Шаблон ODF</comment>
     <comment xml:lang="sk">Šablóna ODF</comment>
@@ -6356,16 +6531,16 @@
     <comment xml:lang="tr">ODF şablonu</comment>
     <comment xml:lang="uk">шаблон ODF</comment>
     <comment xml:lang="vi">Mẫu ODF</comment>
-    <comment xml:lang="zh_CN">ODF 模板</comment>
-    <comment xml:lang="zh_TW">ODF 範本</comment>
+    <comment xml:lang="zh-CN">ODF 模板</comment>
+    <comment xml:lang="zh-TW">ODF 範本</comment>
     <acronym>ODF</acronym>
     <expanded-acronym>OpenDocument Formula</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.formula-template" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.formula-template" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6373,21 +6548,23 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.database">
     <comment>ODB database</comment>
+    <comment xml:lang="af">ODB-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات ODB</comment>
-    <comment xml:lang="be@latin">Baza źviestak ODB</comment>
+    <comment xml:lang="be-Latn">Baza źviestak ODB</comment>
     <comment xml:lang="bg">База от данни — ODB</comment>
     <comment xml:lang="ca">base de dades ODB</comment>
     <comment xml:lang="cs">databáze ODB</comment>
     <comment xml:lang="da">ODB-database</comment>
     <comment xml:lang="de">ODB-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων ODB</comment>
-    <comment xml:lang="en_GB">ODB database</comment>
+    <comment xml:lang="en-GB">ODB database</comment>
     <comment xml:lang="eo">ODB-datumbazo</comment>
     <comment xml:lang="es">base de datos ODB</comment>
     <comment xml:lang="eu">ODB datu-basea</comment>
     <comment xml:lang="fi">ODB-tietokanta</comment>
     <comment xml:lang="fo">ODB dátustovnur</comment>
     <comment xml:lang="fr">base de données ODB</comment>
+    <comment xml:lang="fur">base di dâts ODB</comment>
     <comment xml:lang="ga">bunachar sonraí ODB</comment>
     <comment xml:lang="gl">base de datos ODB</comment>
     <comment xml:lang="he">מסד נתונים ODB</comment>
@@ -6408,7 +6585,7 @@
     <comment xml:lang="oc">banca de donadas ODB</comment>
     <comment xml:lang="pl">Baza danych ODB</comment>
     <comment xml:lang="pt">base de dados ODB</comment>
-    <comment xml:lang="pt_BR">Banco de dados ODB</comment>
+    <comment xml:lang="pt-BR">Banco de dados ODB</comment>
     <comment xml:lang="ro">Bază de date ODB</comment>
     <comment xml:lang="ru">База данных ODB</comment>
     <comment xml:lang="sk">Databáza ODB</comment>
@@ -6416,19 +6593,19 @@
     <comment xml:lang="sq">Bazë me të dhëna ODB</comment>
     <comment xml:lang="sr">ОДБ база података</comment>
     <comment xml:lang="sv">ODB-databas</comment>
-    <comment xml:lang="tr">ODB veritabanı</comment>
+    <comment xml:lang="tr">ODB veri tabanı</comment>
     <comment xml:lang="uk">база даних ODB</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu ODB</comment>
-    <comment xml:lang="zh_CN">ODB 数据库</comment>
-    <comment xml:lang="zh_TW">ODB 資料庫</comment>
+    <comment xml:lang="zh-CN">ODB 数据库</comment>
+    <comment xml:lang="zh-TW">ODB 資料庫</comment>
     <acronym>ODB</acronym>
     <expanded-acronym>OpenDocument Database</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.base" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.base" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6437,22 +6614,24 @@
   </mime-type>
   <mime-type type="application/vnd.oasis.opendocument.image">
     <comment>ODI image</comment>
+    <comment xml:lang="af">ODI-beeld</comment>
     <comment xml:lang="ar">صورة ODI</comment>
     <comment xml:lang="ast">Imaxe ODI</comment>
-    <comment xml:lang="be@latin">Vyjava ODI</comment>
+    <comment xml:lang="be-Latn">Vyjava ODI</comment>
     <comment xml:lang="bg">Изображение — ODI</comment>
     <comment xml:lang="ca">imatge ODI</comment>
     <comment xml:lang="cs">obrázek ODI</comment>
     <comment xml:lang="da">ODI-billede</comment>
     <comment xml:lang="de">ODI-Bild</comment>
     <comment xml:lang="el">Εικόνα ODI</comment>
-    <comment xml:lang="en_GB">ODI image</comment>
+    <comment xml:lang="en-GB">ODI image</comment>
     <comment xml:lang="eo">ODI-bildo</comment>
     <comment xml:lang="es">imagen ODI</comment>
     <comment xml:lang="eu">ODI irudia</comment>
     <comment xml:lang="fi">ODI-kuva</comment>
     <comment xml:lang="fo">ODI mynd</comment>
     <comment xml:lang="fr">image ODI</comment>
+    <comment xml:lang="fur">imagjin ODI</comment>
     <comment xml:lang="ga">íomhá ODI</comment>
     <comment xml:lang="gl">imaxe ODI</comment>
     <comment xml:lang="he">תמונת ODI</comment>
@@ -6473,7 +6652,7 @@
     <comment xml:lang="oc">imatge ODI</comment>
     <comment xml:lang="pl">Obraz ODI</comment>
     <comment xml:lang="pt">imagem ODI</comment>
-    <comment xml:lang="pt_BR">Imagem ODI</comment>
+    <comment xml:lang="pt-BR">Imagem ODI</comment>
     <comment xml:lang="ro">Imagine ODI</comment>
     <comment xml:lang="ru">Изображение ODI</comment>
     <comment xml:lang="sk">Obrázok ODI</comment>
@@ -6484,16 +6663,16 @@
     <comment xml:lang="tr">ODI görüntüsü</comment>
     <comment xml:lang="uk">зображення ODI</comment>
     <comment xml:lang="vi">Ảnh ODI</comment>
-    <comment xml:lang="zh_CN">ODI 图像</comment>
-    <comment xml:lang="zh_TW">ODI 影像</comment>
+    <comment xml:lang="zh-CN">ODI 图像</comment>
+    <comment xml:lang="zh-TW">ODI 影像</comment>
     <acronym>ODI</acronym>
     <expanded-acronym>OpenDocument Image</expanded-acronym>
     <sub-class-of type="application/zip"/>
     <generic-icon name="image-x-generic"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/vnd.oasis.opendocument.image" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/vnd.oasis.opendocument.image" offset="38"/>
         </match>
       </match>
     </magic>
@@ -6501,21 +6680,23 @@
   </mime-type>
   <mime-type type="application/vnd.openofficeorg.extension">
     <comment>OpenOffice.org extension</comment>
+    <comment xml:lang="af">OpenOffice.org-uitbreiding</comment>
     <comment xml:lang="ar">امتداد OpenOffice.org</comment>
     <comment xml:lang="ast">Estensión d'OpenOffice.org</comment>
-    <comment xml:lang="be@latin">Pašyreńnie OpenOffice.org</comment>
-    <comment xml:lang="bg">Разширение — OpenOffice</comment>
+    <comment xml:lang="be-Latn">Pašyreńnie OpenOffice.org</comment>
+    <comment xml:lang="bg">Приставка — OpenOffice</comment>
     <comment xml:lang="ca">extensió d'OpenOffice.org</comment>
     <comment xml:lang="cs">rozšíření OpenOffice.org</comment>
     <comment xml:lang="da">OpenOffice.org-udvidelse</comment>
     <comment xml:lang="de">OpenOffice.org-Erweiterung</comment>
     <comment xml:lang="el">Επέκταση OpenOffice.org</comment>
-    <comment xml:lang="en_GB">OpenOffice.org extension</comment>
+    <comment xml:lang="en-GB">OpenOffice.org extension</comment>
     <comment xml:lang="es">extensión de LibreOffice</comment>
     <comment xml:lang="eu">OpenOffice.org luzapena</comment>
     <comment xml:lang="fi">OpenOffice.org-laajennus</comment>
     <comment xml:lang="fo">OpenOffice.org víðkan</comment>
     <comment xml:lang="fr">extension OpenOffice.org</comment>
+    <comment xml:lang="fur">estension OpenOffice.org</comment>
     <comment xml:lang="ga">eisínteacht OpenOffice.org</comment>
     <comment xml:lang="gl">Extensión de OpenOffice.org</comment>
     <comment xml:lang="he">הרחבה של OpenOffice.org</comment>
@@ -6535,7 +6716,7 @@
     <comment xml:lang="oc">extension OpenOffice.org</comment>
     <comment xml:lang="pl">Rozszerzenie OpenOffice.org</comment>
     <comment xml:lang="pt">extensão OpenOffice.org</comment>
-    <comment xml:lang="pt_BR">Extensão do OpenOffice</comment>
+    <comment xml:lang="pt-BR">Extensão do OpenOffice</comment>
     <comment xml:lang="ro">Extensie OpenOffice.org</comment>
     <comment xml:lang="ru">Расширение OpenOffice.org</comment>
     <comment xml:lang="sk">Rozšírenie OpenOffice.org</comment>
@@ -6546,14 +6727,15 @@
     <comment xml:lang="tr">OpenOffice.org eklentisi</comment>
     <comment xml:lang="uk">розширення OpenOffice.org</comment>
     <comment xml:lang="vi">Phần mở rộng của OpenOffice.org</comment>
-    <comment xml:lang="zh_CN">OpenOffice.org 扩展</comment>
-    <comment xml:lang="zh_TW">OpenOffice.org 擴充套件</comment>
+    <comment xml:lang="zh-CN">OpenOffice.org 扩展</comment>
+    <comment xml:lang="zh-TW">OpenOffice.org 擴充套件</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.oxt"/>
   </mime-type>
   <mime-type type="application/vnd.android.package-archive">
     <comment>Android package</comment>
+    <comment xml:lang="af">Android-pakket</comment>
     <comment xml:lang="ast">Paquete d'Android</comment>
     <comment xml:lang="bg">Пакет — Android</comment>
     <comment xml:lang="ca">paquet d'Android</comment>
@@ -6561,12 +6743,13 @@
     <comment xml:lang="da">Android-pakke</comment>
     <comment xml:lang="de">Android-Paket</comment>
     <comment xml:lang="el">Πακέτο Android</comment>
-    <comment xml:lang="en_GB">Android package</comment>
+    <comment xml:lang="en-GB">Android package</comment>
     <comment xml:lang="eo">Android-pakaĵo</comment>
     <comment xml:lang="es">paquete de Android</comment>
     <comment xml:lang="eu">Android paketea</comment>
     <comment xml:lang="fi">Android-paketti</comment>
     <comment xml:lang="fr">paquet Android</comment>
+    <comment xml:lang="fur">pachet Android</comment>
     <comment xml:lang="ga">pacáiste Android</comment>
     <comment xml:lang="gl">paquete de Android</comment>
     <comment xml:lang="he">חבילת אנדרויד</comment>
@@ -6579,12 +6762,13 @@
     <comment xml:lang="ka">Android-ის პაკეტი</comment>
     <comment xml:lang="kk">Android дестесі</comment>
     <comment xml:lang="ko">Android 패키지</comment>
+    <comment xml:lang="lt">Android paketas</comment>
     <comment xml:lang="lv">Android pakotne</comment>
     <comment xml:lang="nl">Android pakket</comment>
     <comment xml:lang="oc">paquet Android</comment>
     <comment xml:lang="pl">Pakiet Androida</comment>
     <comment xml:lang="pt">pacote Android</comment>
-    <comment xml:lang="pt_BR">Pacote do Android</comment>
+    <comment xml:lang="pt-BR">Pacote do Android</comment>
     <comment xml:lang="ru">Пакет Android</comment>
     <comment xml:lang="sk">Balík Android</comment>
     <comment xml:lang="sl">Paket Android</comment>
@@ -6592,29 +6776,31 @@
     <comment xml:lang="sv">Android-paket</comment>
     <comment xml:lang="tr">Android paketi</comment>
     <comment xml:lang="uk">пакунок Android</comment>
-    <comment xml:lang="zh_CN">Android 应用包</comment>
-    <comment xml:lang="zh_TW">Android 軟體包</comment>
+    <comment xml:lang="zh-CN">Android 应用包</comment>
+    <comment xml:lang="zh-TW">Android 軟體包</comment>
     <sub-class-of type="application/x-java-archive"/>
     <glob pattern="*.apk"/>
   </mime-type>
   <mime-type type="application/vnd.symbian.install">
     <comment>SIS package</comment>
+    <comment xml:lang="af">SIS-pakket</comment>
     <comment xml:lang="ar">حزمة SIS</comment>
     <comment xml:lang="ast">Paquete SIS</comment>
-    <comment xml:lang="be@latin">Pakunak SIS</comment>
+    <comment xml:lang="be-Latn">Pakunak SIS</comment>
     <comment xml:lang="bg">Пакет — SIS</comment>
     <comment xml:lang="ca">paquet SIS</comment>
     <comment xml:lang="cs">balíček SIS</comment>
     <comment xml:lang="da">SIS-pakke</comment>
     <comment xml:lang="de">SIS-Paket</comment>
     <comment xml:lang="el">Πακέτο SIS</comment>
-    <comment xml:lang="en_GB">SIS package</comment>
+    <comment xml:lang="en-GB">SIS package</comment>
     <comment xml:lang="eo">SIS-pakaĵo</comment>
     <comment xml:lang="es">paquete SIS</comment>
     <comment xml:lang="eu">SIS paketea</comment>
     <comment xml:lang="fi">SIS-paketti</comment>
     <comment xml:lang="fo">SIS pakki</comment>
     <comment xml:lang="fr">paquet SIS</comment>
+    <comment xml:lang="fur">pachet SIS</comment>
     <comment xml:lang="ga">pacáiste SIS</comment>
     <comment xml:lang="gl">paquete SIS</comment>
     <comment xml:lang="he">חבילת SIS</comment>
@@ -6634,7 +6820,7 @@
     <comment xml:lang="oc">paquet SIS</comment>
     <comment xml:lang="pl">Pakiet SIS</comment>
     <comment xml:lang="pt">pacote SIS</comment>
-    <comment xml:lang="pt_BR">Pacote SIS</comment>
+    <comment xml:lang="pt-BR">Pacote SIS</comment>
     <comment xml:lang="ro">Pachet SIS</comment>
     <comment xml:lang="ru">Пакет SIS</comment>
     <comment xml:lang="sk">Balíček SIS</comment>
@@ -6645,34 +6831,36 @@
     <comment xml:lang="tr">SIS paketi</comment>
     <comment xml:lang="uk">пакунок SIS</comment>
     <comment xml:lang="vi">Gói SIS</comment>
-    <comment xml:lang="zh_CN">SIS 软件包</comment>
-    <comment xml:lang="zh_TW">SIS 軟體包</comment>
+    <comment xml:lang="zh-CN">SIS 软件包</comment>
+    <comment xml:lang="zh-TW">SIS 軟體包</comment>
     <acronym>SIS</acronym>
     <expanded-acronym>Symbian Installation File</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="0x10000419" type="little32" offset="8"/>
+      <match type="little32" value="0x10000419" offset="8"/>
     </magic>
     <glob pattern="*.sis"/>
   </mime-type>
   <mime-type type="x-epoc/x-sisx-app">
     <comment>SISX package</comment>
+    <comment xml:lang="af">SISX-pakket</comment>
     <comment xml:lang="ar">حزمة SISX</comment>
     <comment xml:lang="ast">Paquete SISX</comment>
-    <comment xml:lang="be@latin">Pakunak SISX</comment>
+    <comment xml:lang="be-Latn">Pakunak SISX</comment>
     <comment xml:lang="bg">Пакет — SISX</comment>
     <comment xml:lang="ca">paquet SISX</comment>
     <comment xml:lang="cs">balíček SISX</comment>
     <comment xml:lang="da">SISX-pakke</comment>
     <comment xml:lang="de">SISX-Paket</comment>
     <comment xml:lang="el">Πακέτο SISX</comment>
-    <comment xml:lang="en_GB">SISX package</comment>
+    <comment xml:lang="en-GB">SISX package</comment>
     <comment xml:lang="eo">SISX-pakaĵo</comment>
     <comment xml:lang="es">paquete SISX</comment>
     <comment xml:lang="eu">SISX paketea</comment>
     <comment xml:lang="fi">SISX-paketti</comment>
     <comment xml:lang="fo">SISX pakki</comment>
     <comment xml:lang="fr">paquet SISX</comment>
+    <comment xml:lang="fur">pachet SISX</comment>
     <comment xml:lang="ga">pacáiste SISX</comment>
     <comment xml:lang="gl">paquete SISX</comment>
     <comment xml:lang="he">חבילת SISX</comment>
@@ -6692,7 +6880,7 @@
     <comment xml:lang="oc">paquet SISX</comment>
     <comment xml:lang="pl">Pakiet SISX</comment>
     <comment xml:lang="pt">pacote SISX</comment>
-    <comment xml:lang="pt_BR">Pacote SISX</comment>
+    <comment xml:lang="pt-BR">Pacote SISX</comment>
     <comment xml:lang="ro">Pachet SISX</comment>
     <comment xml:lang="ru">Пакет SISX</comment>
     <comment xml:lang="sk">Balíček SISX</comment>
@@ -6703,59 +6891,44 @@
     <comment xml:lang="tr">SISX paketi</comment>
     <comment xml:lang="uk">пакунок SISX</comment>
     <comment xml:lang="vi">Gói SISX</comment>
-    <comment xml:lang="zh_CN">SISX 软件包</comment>
-    <comment xml:lang="zh_TW">SISX 軟體包</comment>
+    <comment xml:lang="zh-CN">SISX 软件包</comment>
+    <comment xml:lang="zh-TW">SISX 軟體包</comment>
     <acronym>SIS</acronym>
     <expanded-acronym>Symbian Installation File</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="0x10201a7a" type="little32" offset="0"/>
+      <match type="little32" value="0x10201a7a" offset="0"/>
     </magic>
     <glob pattern="*.sisx"/>
   </mime-type>
   <mime-type type="application/vnd.tcpdump.pcap">
-    <comment>Network Packet Capture</comment>
-    <comment xml:lang="bg">Прихванати пакети по мрежата</comment>
+    <comment>network packet capture</comment>
+    <comment xml:lang="bg">Прихванати мрежови пакети</comment>
     <comment xml:lang="ca">captura de paquets de xarxa</comment>
-    <comment xml:lang="cs">Network Packet Capture</comment>
-    <comment xml:lang="da">Netværkspakkeoptegnelse</comment>
-    <comment xml:lang="de">Netzwerk-Paketmitschnitt</comment>
-    <comment xml:lang="el">Σύλληψη πακέτων δικτύου</comment>
-    <comment xml:lang="en_GB">Network Packet Capture</comment>
-    <comment xml:lang="es">captura de paquete de red</comment>
-    <comment xml:lang="eu">Sareko pakete kaptura</comment>
-    <comment xml:lang="fi">Verkkopakettien kaappaus</comment>
+    <comment xml:lang="da">Netværkspakkeoptagelse</comment>
+    <comment xml:lang="de">Netzwerkpaketmitschnitt</comment>
+    <comment xml:lang="en-GB">network packet capture</comment>
+    <comment xml:lang="es">captura de paquetes de red</comment>
+    <comment xml:lang="eu">sareko pakete kaptura</comment>
+    <comment xml:lang="fi">verkkopakettien kaappaus</comment>
     <comment xml:lang="fr">capture de paquet réseau</comment>
-    <comment xml:lang="ga">Gabháltas Paicéid Líonra</comment>
-    <comment xml:lang="gl">Captura de Network Packet</comment>
-    <comment xml:lang="he">לכידה של מנות נתונים ברשת</comment>
     <comment xml:lang="hr">Mrežno hvatanje paketa</comment>
-    <comment xml:lang="hu">Hálózati csomagelfogás</comment>
-    <comment xml:lang="ia">Captura de pacchettos de rete</comment>
-    <comment xml:lang="id">Tangkapan Paket Jaringan</comment>
+    <comment xml:lang="hu">hálózaticsomag-rögzítés</comment>
+    <comment xml:lang="id">tangkapan paket jaringan</comment>
     <comment xml:lang="it">Cattura pacchetti rete</comment>
-    <comment xml:lang="ja">ネットワークパケットキャプチャー</comment>
-    <comment xml:lang="ka">ქსელური პაკეტის ანაბეჭდი</comment>
     <comment xml:lang="kk">ұсталған желілік пакеттер</comment>
     <comment xml:lang="ko">네트워크 패킷 캡처</comment>
-    <comment xml:lang="lv">Network Packet Capture</comment>
-    <comment xml:lang="nl">Network Packet Capture</comment>
-    <comment xml:lang="oc">captura de paquet ret</comment>
     <comment xml:lang="pl">Przechwycenie pakietu sieciowego</comment>
-    <comment xml:lang="pt">captura Network Packet</comment>
-    <comment xml:lang="pt_BR">Pacote de captura de rede</comment>
-    <comment xml:lang="ru">Захваченные сетевые пакеты</comment>
-    <comment xml:lang="sk">Zachytené sieťové pakety</comment>
-    <comment xml:lang="sl">Zajem omrežnih paketov</comment>
-    <comment xml:lang="sr">Снимање мрежног пакета</comment>
-    <comment xml:lang="sv">Fångst av nätverkspaket</comment>
-    <comment xml:lang="tr">Ağ Paket Yakalaması</comment>
-    <comment xml:lang="uk">перехоплені дані мережевих пакетів</comment>
-    <comment xml:lang="zh_CN">网络包抓取</comment>
-    <comment xml:lang="zh_TW">網路封包捕捉</comment>
-    <magic priority="50">
-      <match value="0xa1b2c3d4" type="host32" offset="0"/>
-      <match value="0xd4c3b2a1" type="host32" offset="0"/>
+    <comment xml:lang="pt">captura dos pacotes de rede</comment>
+    <comment xml:lang="pt-BR">Captura de pacotes de rede</comment>
+    <comment xml:lang="ru">захваченные сетевые пакеты</comment>
+    <comment xml:lang="sv">nätverkspaketsspårning</comment>
+    <comment xml:lang="tr">ağ paket yakalaması</comment>
+    <comment xml:lang="uk">перехоплення мережевого пакета</comment>
+    <comment xml:lang="zh-CN">网络数据包抓取</comment>
+    <magic priority="50">
+      <match type="host32" value="0xa1b2c3d4" offset="0"/>
+      <match type="host32" value="0xd4c3b2a1" offset="0"/>
     </magic>
     <glob pattern="*.pcap"/>
     <glob pattern="*.cap"/>
@@ -6765,10 +6938,11 @@
   </mime-type>
   <mime-type type="application/vnd.wordperfect">
     <comment>WordPerfect document</comment>
+    <comment xml:lang="af">WordPerfect-dokument</comment>
     <comment xml:lang="ar">مستند WordPerfect</comment>
     <comment xml:lang="ast">Documentu de WordPerfect</comment>
     <comment xml:lang="az">WordPerfect sənədi</comment>
-    <comment xml:lang="be@latin">Dakument WordPerfect</comment>
+    <comment xml:lang="be-Latn">Dakument WordPerfect</comment>
     <comment xml:lang="bg">Документ — WordPerfect</comment>
     <comment xml:lang="ca">document WordPerfect</comment>
     <comment xml:lang="cs">dokument WordPerfect</comment>
@@ -6776,13 +6950,14 @@
     <comment xml:lang="da">WordPerfect-dokument</comment>
     <comment xml:lang="de">WordPerfect-Dokument</comment>
     <comment xml:lang="el">Έγγραφο WordPerfect</comment>
-    <comment xml:lang="en_GB">WordPerfect document</comment>
+    <comment xml:lang="en-GB">WordPerfect document</comment>
     <comment xml:lang="eo">WordPerfect-dokumento</comment>
     <comment xml:lang="es">documento de WordPerfect</comment>
     <comment xml:lang="eu">WordPerfect dokumentua</comment>
     <comment xml:lang="fi">WordPerfect-asiakirja</comment>
     <comment xml:lang="fo">WordPerfect skjal</comment>
     <comment xml:lang="fr">document WordPerfect</comment>
+    <comment xml:lang="fur">document WordPerfect</comment>
     <comment xml:lang="ga">cáipéis WordPerfect</comment>
     <comment xml:lang="gl">documento de WordPerfect</comment>
     <comment xml:lang="he">מסמך WordPerfect</comment>
@@ -6803,7 +6978,7 @@
     <comment xml:lang="oc">document WordPerfect</comment>
     <comment xml:lang="pl">Dokument WordPerfect</comment>
     <comment xml:lang="pt">documento WordPerfect</comment>
-    <comment xml:lang="pt_BR">Documento do WordPerfect</comment>
+    <comment xml:lang="pt-BR">Documento do WordPerfect</comment>
     <comment xml:lang="ro">Document WordPerfect</comment>
     <comment xml:lang="ru">Документ WordPerfect</comment>
     <comment xml:lang="sk">Dokument WordPerfect</comment>
@@ -6814,14 +6989,14 @@
     <comment xml:lang="tr">WordPerfect belgesi</comment>
     <comment xml:lang="uk">документ WordPerfect</comment>
     <comment xml:lang="vi">Tài liệu WordPerfect</comment>
-    <comment xml:lang="zh_CN">WordPerfect 文档</comment>
-    <comment xml:lang="zh_TW">WordPerfect 文件</comment>
+    <comment xml:lang="zh-CN">WordPerfect 文档</comment>
+    <comment xml:lang="zh-TW">WordPerfect 文件</comment>
     <alias type="application/x-wordperfect"/>
     <alias type="application/wordperfect"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="WPC" type="string" offset="1"/>
-      
+      <match type="string" value="WPC" offset="1"/>
+      <!-- <match type="big32" value="0xff575053c405" offset="0"/> -->
     </magic>
     <glob pattern="*.wp"/>
     <glob pattern="*.wp4"/>
@@ -6831,126 +7006,125 @@
     <glob pattern="*.wpp"/>
   </mime-type>
   <mime-type type="application/vnd.youtube.yt">
-    <comment>YouTube Media Archive</comment>
+    <comment>YouTube media archive</comment>
+    <comment xml:lang="bg">Медиен архив — YouTube</comment>
+    <comment xml:lang="ca">arxiu de mitjans de YouTube</comment>
+    <comment xml:lang="da">YouTube-mediearkiv</comment>
+    <comment xml:lang="de">YouTube-Medienarchiv</comment>
+    <comment xml:lang="en-GB">YouTube media archive</comment>
+    <comment xml:lang="es">archivador multimedia de YouTube</comment>
+    <comment xml:lang="eu">YouTube media fitxategia</comment>
+    <comment xml:lang="fi">YouTube-media-arkisto</comment>
+    <comment xml:lang="fr">archive média YouTube</comment>
+    <comment xml:lang="hr">YouTube medijska arhiva</comment>
+    <comment xml:lang="hu">YouTube médiaarchívum</comment>
+    <comment xml:lang="id">Arsip media YouTube</comment>
+    <comment xml:lang="it">Archivio multimediale YouTube</comment>
+    <comment xml:lang="kk">YouTube медиа архиві</comment>
+    <comment xml:lang="ko">유튜브 미디어 저장 파일</comment>
+    <comment xml:lang="pl">Archiwum multimediów YouTube</comment>
+    <comment xml:lang="pt">arquivo multimédia do YouTube</comment>
+    <comment xml:lang="pt-BR">Arquivo de mídia do Youtube</comment>
+    <comment xml:lang="ru">Медиа-архив YouTube</comment>
+    <comment xml:lang="sk">Archív médií YouTube</comment>
+    <comment xml:lang="sv">YouTube-mediaarkiv</comment>
+    <comment xml:lang="tr">YouTube ortam arşivi</comment>
+    <comment xml:lang="uk">мультимедійний архів YouTube</comment>
+    <comment xml:lang="zh-CN">YouTube 媒体存档</comment>
     <generic-icon name="video-x-generic"/>
     <glob pattern="*.yt"/>
     <sub-class-of type="application/zip"/>
   </mime-type>
   <mime-type type="application/x-spss-por">
-    <comment>SPSS Portable Data File</comment>
-    <comment xml:lang="ar">ملف بيانات SPSS متنقلة</comment>
+    <comment>SPSS portable data file</comment>
     <comment xml:lang="bg">Данни — SPSS, преносими</comment>
     <comment xml:lang="ca">fitxer de dades portables SPSS</comment>
-    <comment xml:lang="cs">soubor přenositelných dat SPSS</comment>
-    <comment xml:lang="da">Portabel SPSS-datafil</comment>
+    <comment xml:lang="da">SPSS portable data-fil</comment>
     <comment xml:lang="de">SPSS portable Datendatei</comment>
-    <comment xml:lang="el">Φορητό αρχείο δεδομένων SPSS</comment>
-    <comment xml:lang="en_GB">SPSS Portable Data File</comment>
-    <comment xml:lang="es">archivo de datos portátil de SPSS</comment>
-    <comment xml:lang="eu">SPSS datuen fitxategi eramangarria</comment>
-    <comment xml:lang="fo">SPSS flytifør dátufíla</comment>
+    <comment xml:lang="en-GB">SPSS portable data file</comment>
+    <comment xml:lang="es">archivo de datos portátiles de SPSS</comment>
+    <comment xml:lang="eu">SPSS datu fitxategi eramangarria</comment>
+    <comment xml:lang="fi">Siirrettävä SPSS-tiedosto</comment>
     <comment xml:lang="fr">fichier portable de données SPSS</comment>
-    <comment xml:lang="ga">comhad iniompartha sonraí SPSS</comment>
-    <comment xml:lang="gl">ficheiro de datos portábel SPSS</comment>
-    <comment xml:lang="he">קובץ מידע נייד SPSS</comment>
     <comment xml:lang="hr">SPSS prenosiva podatkovna datoteka</comment>
     <comment xml:lang="hu">SPSS hordozható adatfájl</comment>
-    <comment xml:lang="ia">File portabile de datos SPSS</comment>
-    <comment xml:lang="id">Berkas Data Portabel SPSS</comment>
+    <comment xml:lang="id">Berkas data portabel SPSS</comment>
     <comment xml:lang="it">File dati SPSS Portable</comment>
-    <comment xml:lang="ja">SPSS ポータブルデータファイル</comment>
-    <comment xml:lang="kk">SPSS тасымалы ақпарат файлы</comment>
-    <comment xml:lang="ko">SPSS 이동식 데이터 파일</comment>
-    <comment xml:lang="lt">SPSS perkeliamų duomenų failas</comment>
-    <comment xml:lang="lv">SPSS pārvietojamu datu datne</comment>
-    <comment xml:lang="nl">SPSS Portable Databestand</comment>
-    <comment xml:lang="oc">fichièr portable de donadas SPSS</comment>
+    <comment xml:lang="kk">SPSS тасымалы деректер файлы</comment>
+    <comment xml:lang="ko">SPSS 휴대 데이터 파일</comment>
     <comment xml:lang="pl">Plik przenośnych danych SPSS</comment>
     <comment xml:lang="pt">ficheiro de dados portátil SPSS</comment>
-    <comment xml:lang="pt_BR">Arquivo de Dados Portáteis SPSS</comment>
-    <comment xml:lang="ro">Fișier portabil de date SPSS</comment>
+    <comment xml:lang="pt-BR">Arquivo de dados portáteis SPSS</comment>
     <comment xml:lang="ru">Файл переносимых данных SPSS</comment>
-    <comment xml:lang="sk">Súbor prenosných dát SPSS</comment>
-    <comment xml:lang="sl">Prenosna podatkovna datoteka SPSS</comment>
-    <comment xml:lang="sr">СПСС датотека преносних података</comment>
-    <comment xml:lang="sv">Portabel SPSS-datafil</comment>
-    <comment xml:lang="tr">SPSS Taşınabilir Veri Dosyası</comment>
-    <comment xml:lang="uk">файл даних SPSS Portable</comment>
-    <comment xml:lang="zh_CN">SPSS 便携式数据文件</comment>
-    <comment xml:lang="zh_TW">SPSS 可攜式資料檔</comment>
+    <comment xml:lang="sk">Súbor prenosných údajov SPSS</comment>
+    <comment xml:lang="sv">SPSS portabel datafil</comment>
+    <comment xml:lang="tr">SPSS taşınabilir veri dosyası</comment>
+    <comment xml:lang="uk">портативний файл даних SPSS</comment>
+    <comment xml:lang="zh-CN">SPSS 便携式数据文件</comment>
+    <comment xml:lang="zh-TW">SPSS 可攜資料檔</comment>
+    <acronym>SPSS</acronym>
+    <expanded-acronym>Statistical Package for the Social Sciences</expanded-acronym>
     <magic priority="50">
-      <match value="ASCII SPSS PORT FILE" type="string" offset="40"/>
+      <match type="string" offset="40" value="ASCII SPSS PORT FILE"/>
     </magic>
     <glob pattern="*.por"/>
   </mime-type>
   <mime-type type="application/x-spss-sav">
-    <comment>SPSS Data File</comment>
-    <comment xml:lang="ar">ملف بيانات SPSS</comment>
+    <comment>SPSS data file</comment>
     <comment xml:lang="bg">Данни — SPSS</comment>
     <comment xml:lang="ca">fitxer de dades SPSS</comment>
-    <comment xml:lang="cs">datový soubor SPSS</comment>
-    <comment xml:lang="da">SPSS-datafil</comment>
+    <comment xml:lang="da">SPSS data-fil</comment>
     <comment xml:lang="de">SPSS-Datendatei</comment>
-    <comment xml:lang="el">Αρχείο δεδομένων SPSS</comment>
-    <comment xml:lang="en_GB">SPSS Data File</comment>
-    <comment xml:lang="es">archivo de datos SPSS</comment>
-    <comment xml:lang="eu">SPSS datuen fitxategia</comment>
+    <comment xml:lang="en-GB">SPSS data file</comment>
+    <comment xml:lang="es">archivo de datos de SPSS</comment>
+    <comment xml:lang="eu">SPSS datu fitxategia</comment>
     <comment xml:lang="fi">SPSS-datatiedosto</comment>
-    <comment xml:lang="fo">SPSS dátufíla</comment>
     <comment xml:lang="fr">fichier de données SPSS</comment>
-    <comment xml:lang="ga">comhad sonraí SPSS</comment>
-    <comment xml:lang="gl">ficheiro de datos SPSS</comment>
-    <comment xml:lang="he">קובץ מידע SPSS</comment>
     <comment xml:lang="hr">SPSS podatkovna datoteka</comment>
     <comment xml:lang="hu">SPSS adatfájl</comment>
-    <comment xml:lang="ia">File de datos SPSS</comment>
-    <comment xml:lang="id">Berkas Data SPSS</comment>
+    <comment xml:lang="id">Berkas data SPSS</comment>
     <comment xml:lang="it">File dati SPSS</comment>
-    <comment xml:lang="ja">SPSS データファイル</comment>
-    <comment xml:lang="kk">SPSS ақпарат файлы</comment>
+    <comment xml:lang="kk">SPSS деректер файлы</comment>
     <comment xml:lang="ko">SPSS 데이터 파일</comment>
-    <comment xml:lang="lt">SPSS duomenų failas</comment>
-    <comment xml:lang="lv">SPSS datu datne</comment>
-    <comment xml:lang="nl">SPSS Databstand</comment>
-    <comment xml:lang="oc">fichièr de donadas SPSS</comment>
     <comment xml:lang="pl">Plik danych SPSS</comment>
     <comment xml:lang="pt">ficheiro de dados SPSS</comment>
-    <comment xml:lang="pt_BR">Arquivo de dados SPSS</comment>
-    <comment xml:lang="ro">Fișier date SPSS</comment>
+    <comment xml:lang="pt-BR">Arquivo de dados SPSS</comment>
     <comment xml:lang="ru">Файл данных SPSS</comment>
-    <comment xml:lang="sk">Dátový súbor SPSS</comment>
-    <comment xml:lang="sl">Podatkovna datoteka SPSS</comment>
-    <comment xml:lang="sr">СПСС датотека података</comment>
+    <comment xml:lang="sk">Súbor údajov SPSS</comment>
     <comment xml:lang="sv">SPSS-datafil</comment>
-    <comment xml:lang="tr">SPSS Veri Dosyası</comment>
+    <comment xml:lang="tr">SPSS veri dosyası</comment>
     <comment xml:lang="uk">файл даних SPSS</comment>
-    <comment xml:lang="zh_CN">SPSS 数据文件</comment>
-    <comment xml:lang="zh_TW">SPSS 資料檔</comment>
+    <comment xml:lang="zh-CN">SPSS 数据文件</comment>
+    <comment xml:lang="zh-TW">SPSS 資料檔</comment>
+    <acronym>SPSS</acronym>
+    <expanded-acronym>Statistical Package for the Social Sciences</expanded-acronym>
     <alias type="application/x-spss-savefile"/>
     <magic priority="50">
-      <match value="$FL2" type="string" offset="0"/>
-      <match value="$FL3" type="string" offset="0"/>
+      <match type="string" offset="0" value="$FL2"/>
+      <match type="string" offset="0" value="$FL3"/>
     </magic>
     <glob pattern="*.sav"/>
     <glob pattern="*.zsav"/>
   </mime-type>
   <mime-type type="application/x-xbel">
     <comment>XBEL bookmarks</comment>
+    <comment xml:lang="af">XBEL-boekmerke</comment>
     <comment xml:lang="ar">علامات XBEL</comment>
-    <comment xml:lang="be@latin">Zakładki XBEL</comment>
+    <comment xml:lang="be-Latn">Zakładki XBEL</comment>
     <comment xml:lang="bg">Отметки — XBEL</comment>
     <comment xml:lang="ca">llista d'adreces d'interès XBEL</comment>
     <comment xml:lang="cs">záložky XBEL</comment>
     <comment xml:lang="da">XBEL-bogmærker</comment>
     <comment xml:lang="de">XBEL-Lesezeichen</comment>
     <comment xml:lang="el">Σελιδοδείκτες XBEL</comment>
-    <comment xml:lang="en_GB">XBEL bookmarks</comment>
+    <comment xml:lang="en-GB">XBEL bookmarks</comment>
     <comment xml:lang="eo">XBEL-legosignoj</comment>
     <comment xml:lang="es">marcadores XBEL</comment>
     <comment xml:lang="eu">XBEL laster-markak</comment>
     <comment xml:lang="fi">XBEL-kirjanmerkit</comment>
     <comment xml:lang="fo">XBEL bókamerki</comment>
     <comment xml:lang="fr">marque-pages XBEL</comment>
+    <comment xml:lang="fur">segnelibris XBEL</comment>
     <comment xml:lang="ga">leabharmharcanna XBEL</comment>
     <comment xml:lang="gl">Marcadores XBEL</comment>
     <comment xml:lang="he">סימניית XBEL</comment>
@@ -6971,7 +7145,7 @@
     <comment xml:lang="oc">marcapaginas XBEL</comment>
     <comment xml:lang="pl">Zakładki XBEL</comment>
     <comment xml:lang="pt">marcadores XBEL</comment>
-    <comment xml:lang="pt_BR">Marcadores do XBEL</comment>
+    <comment xml:lang="pt-BR">Marcadores do XBEL</comment>
     <comment xml:lang="ro">Semne de carte XBEL</comment>
     <comment xml:lang="ru">Закладки XBEL</comment>
     <comment xml:lang="sk">Záložky XBEL</comment>
@@ -6982,35 +7156,37 @@
     <comment xml:lang="tr">XBEL yer imleri</comment>
     <comment xml:lang="uk">закладки XBEL</comment>
     <comment xml:lang="vi">Liên kết đã lưu XBEL</comment>
-    <comment xml:lang="zh_CN">XBEL 书签</comment>
-    <comment xml:lang="zh_TW">XBEL 格式書籤</comment>
+    <comment xml:lang="zh-CN">XBEL 书签</comment>
+    <comment xml:lang="zh-TW">XBEL 格式書籤</comment>
     <acronym>XBEL</acronym>
     <expanded-acronym>XML Bookmark Exchange Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
     <generic-icon name="text-html"/>
     <magic priority="50">
-      <match value="&lt;!DOCTYPE\ xbel" type="string" offset="0:256"/>
+      <match type="string" value="&lt;!DOCTYPE\ xbel" offset="0:256"/>
     </magic>
     <glob pattern="*.xbel"/>
   </mime-type>
   <mime-type type="application/x-7z-compressed">
     <comment>7-zip archive</comment>
+    <comment xml:lang="af">7-zip-argief</comment>
     <comment xml:lang="ar">أرشيف 7-zip</comment>
     <comment xml:lang="ast">Archivu 7-zip</comment>
-    <comment xml:lang="be@latin">Archiŭ 7-zip</comment>
+    <comment xml:lang="be-Latn">Archiŭ 7-zip</comment>
     <comment xml:lang="bg">Архив — 7-zip</comment>
     <comment xml:lang="ca">arxiu 7-zip</comment>
     <comment xml:lang="cs">archiv 7-zip</comment>
     <comment xml:lang="da">7-zip-arkiv</comment>
     <comment xml:lang="de">7zip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο 7-zip</comment>
-    <comment xml:lang="en_GB">7-zip archive</comment>
+    <comment xml:lang="en-GB">7-zip archive</comment>
     <comment xml:lang="eo">7z-arkivo</comment>
     <comment xml:lang="es">archivador 7-zip</comment>
     <comment xml:lang="eu">7-zip artxiboa</comment>
     <comment xml:lang="fi">7-zip-arkisto</comment>
     <comment xml:lang="fo">7-zip skjalasavn</comment>
     <comment xml:lang="fr">archive 7-zip</comment>
+    <comment xml:lang="fur">archivi 7-zip</comment>
     <comment xml:lang="ga">cartlann 7-zip</comment>
     <comment xml:lang="gl">arquivo 7-zip</comment>
     <comment xml:lang="he">ארכיון 7-zip</comment>
@@ -7031,7 +7207,7 @@
     <comment xml:lang="oc">archiu 7-zip</comment>
     <comment xml:lang="pl">Archiwum 7-zip</comment>
     <comment xml:lang="pt">arquivo 7-zip</comment>
-    <comment xml:lang="pt_BR">Pacote 7-Zip</comment>
+    <comment xml:lang="pt-BR">Pacote 7-Zip</comment>
     <comment xml:lang="ro">Arhivă 7-zip</comment>
     <comment xml:lang="ru">Архив 7-zip</comment>
     <comment xml:lang="sk">Archív 7-zip</comment>
@@ -7042,32 +7218,34 @@
     <comment xml:lang="tr">7-Zip arşivi</comment>
     <comment xml:lang="uk">архів 7-zip</comment>
     <comment xml:lang="vi">Kho nén 7-zip</comment>
-    <comment xml:lang="zh_CN">7-zip 归档文件</comment>
-    <comment xml:lang="zh_TW">7-zip 封存檔</comment>
+    <comment xml:lang="zh-CN">7-zip 归档文件</comment>
+    <comment xml:lang="zh-TW">7-zip 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="7z\274\257\047\034" type="string" offset="0"/>
+      <match type="string" value="7z\274\257\047\034" offset="0"/>
     </magic>
     <glob pattern="*.7z"/>
   </mime-type>
   <mime-type type="application/x-abiword">
     <comment>AbiWord document</comment>
+    <comment xml:lang="af">AbiWord-dokument</comment>
     <comment xml:lang="ar">مستند آبي وورد</comment>
     <comment xml:lang="ast">Documentu d'AbiWord</comment>
-    <comment xml:lang="be@latin">Dakument AbiWord</comment>
+    <comment xml:lang="be-Latn">Dakument AbiWord</comment>
     <comment xml:lang="bg">Документ — AbiWord</comment>
     <comment xml:lang="ca">document AbiWord</comment>
     <comment xml:lang="cs">dokument AbiWord</comment>
     <comment xml:lang="da">AbiWord-dokument</comment>
     <comment xml:lang="de">AbiWord-Dokument</comment>
     <comment xml:lang="el">Έγγραφο AbiWord</comment>
-    <comment xml:lang="en_GB">AbiWord document</comment>
+    <comment xml:lang="en-GB">AbiWord document</comment>
     <comment xml:lang="eo">AbiWord-dokumento</comment>
     <comment xml:lang="es">documento de Abiword</comment>
     <comment xml:lang="eu">AbiWord dokumentua</comment>
     <comment xml:lang="fi">AbiWord-asiakirja</comment>
     <comment xml:lang="fo">AbiWord skjal</comment>
     <comment xml:lang="fr">document AbiWord</comment>
+    <comment xml:lang="fur">document AbiWord</comment>
     <comment xml:lang="ga">cáipéis AbiWord</comment>
     <comment xml:lang="gl">documento de AbiWord</comment>
     <comment xml:lang="he">מסמך AbiWord</comment>
@@ -7089,7 +7267,7 @@
     <comment xml:lang="oc">document AbiWord</comment>
     <comment xml:lang="pl">Dokument AbiWord</comment>
     <comment xml:lang="pt">documento AbiWord</comment>
-    <comment xml:lang="pt_BR">Documento do AbiWord</comment>
+    <comment xml:lang="pt-BR">Documento do AbiWord</comment>
     <comment xml:lang="ro">Document AbiWord</comment>
     <comment xml:lang="ru">Документ AbiWord</comment>
     <comment xml:lang="sk">Dokument AbiWord</comment>
@@ -7100,13 +7278,13 @@
     <comment xml:lang="tr">AbiWord belgesi</comment>
     <comment xml:lang="uk">документ AbiWord</comment>
     <comment xml:lang="vi">Tài liệu AbiWord</comment>
-    <comment xml:lang="zh_CN">AbiWord 文档</comment>
-    <comment xml:lang="zh_TW">AbiWord 文件</comment>
+    <comment xml:lang="zh-CN">AbiWord 文档</comment>
+    <comment xml:lang="zh-TW">AbiWord 文件</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="&lt;abiword" type="string" offset="0:256"/>
-      <match value="&lt;!DOCTYPE abiword" type="string" offset="0:256"/>
+      <match type="string" value="&lt;abiword" offset="0:256"/>
+      <match type="string" value="&lt;!DOCTYPE abiword" offset="0:256"/>
     </magic>
     <glob pattern="*.abw"/>
     <glob pattern="*.abw.CRASHED"/>
@@ -7117,18 +7295,19 @@
   <mime-type type="application/x-cue">
     <comment>CD image cuesheet</comment>
     <comment xml:lang="ar">صفيحة صورة الـCD جديلة</comment>
-    <comment xml:lang="be@latin">Infarmacyjny arkuš vyjavy CD</comment>
-    <comment xml:lang="bg">Описание на изображение на CD</comment>
+    <comment xml:lang="be-Latn">Infarmacyjny arkuš vyjavy CD</comment>
+    <comment xml:lang="bg">Съдържание на CD</comment>
     <comment xml:lang="ca">«cuesheet» d'imatge de CD</comment>
     <comment xml:lang="cs">rozvržení stop obrazu CD</comment>
     <comment xml:lang="da">Cd-aftrykscuesheet</comment>
     <comment xml:lang="de">CD-Abbild-Cuesheet</comment>
     <comment xml:lang="el">Φύλλο cue εικόνας CD</comment>
-    <comment xml:lang="en_GB">CD image cuesheet</comment>
+    <comment xml:lang="en-GB">CD image cuesheet</comment>
     <comment xml:lang="es">hoja CUE de imagen de CD</comment>
     <comment xml:lang="eu">CD irudiaren CUE orria</comment>
     <comment xml:lang="fi">CD-vedos cuesheet</comment>
     <comment xml:lang="fr">index de pistes de CD</comment>
+    <comment xml:lang="fur">sfuei-brivade CUE de imagjin CD</comment>
     <comment xml:lang="ga">bileog chiúála íomhá CD</comment>
     <comment xml:lang="gl">cue sheet dunha imaxe de CD</comment>
     <comment xml:lang="he">גליון נתונים לתמונת דיסק</comment>
@@ -7147,8 +7326,8 @@
     <comment xml:lang="nn">CD-bilete-indeksfil</comment>
     <comment xml:lang="oc">indèx de pistas de CD</comment>
     <comment xml:lang="pl">Obraz cuesheet płyty CD</comment>
-    <comment xml:lang="pt">índice de CD de imagem</comment>
-    <comment xml:lang="pt_BR">Índice de Imagem de CD</comment>
+    <comment xml:lang="pt">índice de imagem do CD</comment>
+    <comment xml:lang="pt-BR">Índice de Imagem de CD</comment>
     <comment xml:lang="ro">Imagine CD cuesheet</comment>
     <comment xml:lang="ru">Таблица содержания образа CD</comment>
     <comment xml:lang="sk">Rozvrhnutie stôp obrazu CD</comment>
@@ -7156,21 +7335,22 @@
     <comment xml:lang="sq">Cuesheet imazhi CD</comment>
     <comment xml:lang="sr">Кју лист ЦД одраза</comment>
     <comment xml:lang="sv">Indexblad för cd-avbild</comment>
-    <comment xml:lang="tr">CD görüntüsü belgesi</comment>
+    <comment xml:lang="tr">CD görüntüsü çizelgesi</comment>
     <comment xml:lang="uk">таблиця CUE образу CD</comment>
     <comment xml:lang="vi">Tờ tín hiệu báo ảnh CD</comment>
-    <comment xml:lang="zh_CN">CD 映像标记文件</comment>
-    <comment xml:lang="zh_TW">CD 映像指示表</comment>
+    <comment xml:lang="zh-CN">CD 映像标记文件</comment>
+    <comment xml:lang="zh-TW">CD 映像指示表</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.cue"/>
   </mime-type>
   <mime-type type="application/x-amipro">
     <comment>Lotus AmiPro document</comment>
+    <comment xml:lang="af">Lotus AmiPro-dokument</comment>
     <comment xml:lang="ar">مستند Lotus AmiPro</comment>
     <comment xml:lang="ast">Documentu de Lotus AmiPro</comment>
     <comment xml:lang="az">Lotus AmiPro sənədi</comment>
-    <comment xml:lang="be@latin">Dakument Lotus AmiPro</comment>
+    <comment xml:lang="be-Latn">Dakument Lotus AmiPro</comment>
     <comment xml:lang="bg">Документ — Lotus AmiPro</comment>
     <comment xml:lang="ca">document de Lotus AmiPro</comment>
     <comment xml:lang="cs">dokument Lotus AmiPro</comment>
@@ -7178,13 +7358,14 @@
     <comment xml:lang="da">Lotus AmiPro-dokument</comment>
     <comment xml:lang="de">Lotus-AmiPro-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Lotus AmiPro</comment>
-    <comment xml:lang="en_GB">Lotus AmiPro document</comment>
+    <comment xml:lang="en-GB">Lotus AmiPro document</comment>
     <comment xml:lang="eo">dokumento de Lotus AmiPro</comment>
     <comment xml:lang="es">documento de Lotus AmiPro</comment>
     <comment xml:lang="eu">Lotus AmiPro dokumentua</comment>
     <comment xml:lang="fi">Lotus AmiPro -asiakirja</comment>
     <comment xml:lang="fo">Lotus AmiPro skjal</comment>
     <comment xml:lang="fr">document Lotus AmiPro</comment>
+    <comment xml:lang="fur">document Lotus AmiPro</comment>
     <comment xml:lang="ga">cáipéis Lotus AmiPro</comment>
     <comment xml:lang="gl">documento de Lotus AmiPro</comment>
     <comment xml:lang="he">מסמך של Lotus AmiPro</comment>
@@ -7205,7 +7386,7 @@
     <comment xml:lang="oc">document Lotus AmiPro</comment>
     <comment xml:lang="pl">Dokument Lotus AmiPro</comment>
     <comment xml:lang="pt">documento Lotus AmiPro</comment>
-    <comment xml:lang="pt_BR">Documento do Lotus AmiPro</comment>
+    <comment xml:lang="pt-BR">Documento do Lotus AmiPro</comment>
     <comment xml:lang="ro">Document Lotus AmiPro</comment>
     <comment xml:lang="ru">Документ Lotus AmiPro</comment>
     <comment xml:lang="sk">Dokument Lotus AmiPro</comment>
@@ -7216,13 +7397,14 @@
     <comment xml:lang="tr">Lotus AmiPro belgesi</comment>
     <comment xml:lang="uk">документ Lotus AmiPro</comment>
     <comment xml:lang="vi">Tài liệu Lotus AmiPro</comment>
-    <comment xml:lang="zh_CN">Lotus AmiPro 文档</comment>
-    <comment xml:lang="zh_TW">Lotus AmiPro 文件</comment>
+    <comment xml:lang="zh-CN">Lotus AmiPro 文档</comment>
+    <comment xml:lang="zh-TW">Lotus AmiPro 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.sam"/>
   </mime-type>
   <mime-type type="application/x-aportisdoc">
     <comment>AportisDoc document</comment>
+    <comment xml:lang="af">AportisDoc-dokument</comment>
     <comment xml:lang="ar">مستند AportisDoc</comment>
     <comment xml:lang="ast">Documentu d'AportisDoc</comment>
     <comment xml:lang="bg">Документ — AportisDoc</comment>
@@ -7231,13 +7413,14 @@
     <comment xml:lang="da">AportisDoc-dokument</comment>
     <comment xml:lang="de">AportisDoc-Dokument</comment>
     <comment xml:lang="el">Έγγραφο AportisDoc</comment>
-    <comment xml:lang="en_GB">AportisDoc document</comment>
+    <comment xml:lang="en-GB">AportisDoc document</comment>
     <comment xml:lang="eo">AportisDoc-dokumento</comment>
     <comment xml:lang="es">documento de AportisDoc</comment>
     <comment xml:lang="eu">AportisDoc dokumentua</comment>
     <comment xml:lang="fi">AportisDoc-asiakirja</comment>
     <comment xml:lang="fo">AportisDoc skjal</comment>
     <comment xml:lang="fr">document AportisDoc</comment>
+    <comment xml:lang="fur">document AportisDoc</comment>
     <comment xml:lang="ga">cáipéis AportisDoc</comment>
     <comment xml:lang="gl">documento de AportiDoc</comment>
     <comment xml:lang="he">מסמך AportisDoc</comment>
@@ -7256,7 +7439,7 @@
     <comment xml:lang="oc">document AportisDoc</comment>
     <comment xml:lang="pl">Dokument AportisDoc</comment>
     <comment xml:lang="pt">documento AportisDoc</comment>
-    <comment xml:lang="pt_BR">Documento do AportisDoc</comment>
+    <comment xml:lang="pt-BR">Documento do AportisDoc</comment>
     <comment xml:lang="ro">Document AportisDoc</comment>
     <comment xml:lang="ru">Документ AportisDoc</comment>
     <comment xml:lang="sk">Dokument AportisDoc</comment>
@@ -7266,34 +7449,36 @@
     <comment xml:lang="tr">AportisDoc belgesi</comment>
     <comment xml:lang="uk">документ AportisDoc</comment>
     <comment xml:lang="vi">Tài liệu AportisDoc</comment>
-    <comment xml:lang="zh_CN">AportisDoc 文档</comment>
-    <comment xml:lang="zh_TW">AportisDoc 文件</comment>
+    <comment xml:lang="zh-CN">AportisDoc 文档</comment>
+    <comment xml:lang="zh-TW">AportisDoc 文件</comment>
     <sub-class-of type="application/vnd.palm"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="TEXtREAd" type="string" offset="60"/>
-      <match value="TEXtTlDc" type="string" offset="60"/>
+      <match type="string" value="TEXtREAd" offset="60"/>
+      <match type="string" value="TEXtTlDc" offset="60"/>
     </magic>
     <glob pattern="*.pdb"/>
     <glob pattern="*.pdc"/>
   </mime-type>
   <mime-type type="application/x-applix-spreadsheet">
     <comment>Applix Spreadsheets spreadsheet</comment>
+    <comment xml:lang="af">Applix Spreadsheets-sigblad</comment>
     <comment xml:lang="ar">جداول بيانات Applix</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš Applix Spreadsheets</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš Applix Spreadsheets</comment>
     <comment xml:lang="bg">Таблица — Applix Spreadsheets</comment>
     <comment xml:lang="ca">full de càlcul d'Applix Spreadsheets</comment>
     <comment xml:lang="cs">sešit Applix Spreadsheets</comment>
     <comment xml:lang="da">Applix Spreadsheets-regneark</comment>
     <comment xml:lang="de">Applix-Spreadsheets-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Applix Spreadsheets</comment>
-    <comment xml:lang="en_GB">Applix Spreadsheets spreadsheet</comment>
+    <comment xml:lang="en-GB">Applix Spreadsheets spreadsheet</comment>
     <comment xml:lang="eo">sterntabelo de Applix Spreadsheets</comment>
     <comment xml:lang="es">hoja de cálculo de Applix Spreadsheets</comment>
     <comment xml:lang="eu">Applix Spreadsheets kalkulu-orria</comment>
     <comment xml:lang="fi">Applix Spreadsheets -taulukko</comment>
     <comment xml:lang="fo">Applix Spreadsheets rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Applix</comment>
+    <comment xml:lang="fur">sfuei di calcul Applix Spreadsheets</comment>
     <comment xml:lang="ga">scarbhileog Applix Spreadsheets</comment>
     <comment xml:lang="gl">folla de cálculo de Applix</comment>
     <comment xml:lang="he">גליון נתונים של Applix Spreadsheets</comment>
@@ -7315,7 +7500,7 @@
     <comment xml:lang="oc">fuèlh de calcul Applix</comment>
     <comment xml:lang="pl">Arkusz Applix Spreadsheets</comment>
     <comment xml:lang="pt">folha de cálculo Applix Spreadsheets</comment>
-    <comment xml:lang="pt_BR">Planilha do Applix Spreadsheets</comment>
+    <comment xml:lang="pt-BR">Planilha do Applix Spreadsheets</comment>
     <comment xml:lang="ro">Foaie de calcul Applix</comment>
     <comment xml:lang="ru">Электронная таблица Applix Spreadsheets</comment>
     <comment xml:lang="sk">Zošit Applix Spreadsheets</comment>
@@ -7323,26 +7508,27 @@
     <comment xml:lang="sq">Fletë llogaritjesh Applix Spreadsheets</comment>
     <comment xml:lang="sr">документ Апликсове Табеле</comment>
     <comment xml:lang="sv">Applix Spreadsheets-kalkylblad</comment>
-    <comment xml:lang="tr">Applix Spreadsheets çalışma sayfası</comment>
+    <comment xml:lang="tr">Applix Spreadsheets hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Applix Spreadsheets</comment>
     <comment xml:lang="vi">Bảng tính Applix Spreadsheets</comment>
-    <comment xml:lang="zh_CN">Applix Spreadsheets 电子表格</comment>
-    <comment xml:lang="zh_TW">Applix Spreadsheets 試算表</comment>
+    <comment xml:lang="zh-CN">Applix Spreadsheets 电子表格</comment>
+    <comment xml:lang="zh-TW">Applix Spreadsheets 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="*BEGIN SPREADSHEETS" type="string" offset="0"/>
-      <match value="*BEGIN" type="string" offset="0">
-        <match value="SPREADSHEETS" type="string" offset="7"/>
+      <match type="string" value="*BEGIN SPREADSHEETS" offset="0"/>
+      <match type="string" value="*BEGIN" offset="0">
+        <match type="string" value="SPREADSHEETS" offset="7"/>
       </match>
     </magic>
     <glob pattern="*.as"/>
   </mime-type>
   <mime-type type="application/x-applix-word">
     <comment>Applix Words document</comment>
+    <comment xml:lang="af">Applix Words-dokument</comment>
     <comment xml:lang="ar">مستند كلمات Applix</comment>
     <comment xml:lang="ast">Documentu d'Applix Words</comment>
     <comment xml:lang="az">Applix Words sənədi</comment>
-    <comment xml:lang="be@latin">Dakument Applix Words</comment>
+    <comment xml:lang="be-Latn">Dakument Applix Words</comment>
     <comment xml:lang="bg">Документ — Applix Words</comment>
     <comment xml:lang="ca">document d'Applix Words</comment>
     <comment xml:lang="cs">dokument Applix Words</comment>
@@ -7350,13 +7536,14 @@
     <comment xml:lang="da">Applix Words-dokument</comment>
     <comment xml:lang="de">Applix-Words-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Applix Words</comment>
-    <comment xml:lang="en_GB">Applix Words document</comment>
+    <comment xml:lang="en-GB">Applix Words document</comment>
     <comment xml:lang="eo">dokumento de Applix Words</comment>
     <comment xml:lang="es">documento de Applix Words</comment>
     <comment xml:lang="eu">Applix Words dokumentua</comment>
     <comment xml:lang="fi">Applix Words -asiakirja</comment>
     <comment xml:lang="fo">Applix Words skjal</comment>
     <comment xml:lang="fr">document Applix Words</comment>
+    <comment xml:lang="fur">document Applix Words</comment>
     <comment xml:lang="ga">cáipéis Applix Words</comment>
     <comment xml:lang="gl">documento de Applix Words</comment>
     <comment xml:lang="he">מסמך של Applix Words</comment>
@@ -7378,7 +7565,7 @@
     <comment xml:lang="oc">document Applix Words</comment>
     <comment xml:lang="pl">Dokument Applix Words</comment>
     <comment xml:lang="pt">documento Applix Words</comment>
-    <comment xml:lang="pt_BR">Documento do Applix Words</comment>
+    <comment xml:lang="pt-BR">Documento do Applix Words</comment>
     <comment xml:lang="ro">Document Applix Words</comment>
     <comment xml:lang="ru">Документ Applix Words</comment>
     <comment xml:lang="sk">Dokument Applix Words</comment>
@@ -7389,33 +7576,35 @@
     <comment xml:lang="tr">Applix Words belgesi</comment>
     <comment xml:lang="uk">документ Applix Words</comment>
     <comment xml:lang="vi">Tài liệu Applix Words</comment>
-    <comment xml:lang="zh_CN">Applix Words 文档</comment>
-    <comment xml:lang="zh_TW">Applix Words 文件</comment>
+    <comment xml:lang="zh-CN">Applix Words 文档</comment>
+    <comment xml:lang="zh-TW">Applix Words 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="*BEGIN" type="string" offset="0">
-        <match value="WORDS" type="string" offset="7"/>
+      <match type="string" value="*BEGIN" offset="0">
+        <match type="string" value="WORDS" offset="7"/>
       </match>
     </magic>
     <glob pattern="*.aw"/>
   </mime-type>
   <mime-type type="application/x-arc">
     <comment>ARC archive</comment>
+    <comment xml:lang="af">ARC-argief</comment>
     <comment xml:lang="ar">أرشيف ARC</comment>
-    <comment xml:lang="be@latin">Archiŭ ARC</comment>
+    <comment xml:lang="be-Latn">Archiŭ ARC</comment>
     <comment xml:lang="bg">Архив — ARC</comment>
     <comment xml:lang="ca">arxiu ARC</comment>
     <comment xml:lang="cs">archiv ARC</comment>
     <comment xml:lang="da">ARC-arkiv</comment>
     <comment xml:lang="de">ARC-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο ARC</comment>
-    <comment xml:lang="en_GB">ARC archive</comment>
+    <comment xml:lang="en-GB">ARC archive</comment>
     <comment xml:lang="eo">ARC-arkivo</comment>
     <comment xml:lang="es">archivador ARC</comment>
     <comment xml:lang="eu">ARC artxiboa</comment>
     <comment xml:lang="fi">ARC-arkisto</comment>
     <comment xml:lang="fo">ARC skjalasavn</comment>
     <comment xml:lang="fr">archive ARC</comment>
+    <comment xml:lang="fur">archivi ARC</comment>
     <comment xml:lang="ga">cartlann ARC</comment>
     <comment xml:lang="gl">arquivo ARC</comment>
     <comment xml:lang="he">ארכיון ARC</comment>
@@ -7436,7 +7625,7 @@
     <comment xml:lang="oc">archiu ARC</comment>
     <comment xml:lang="pl">Archiwum ARC</comment>
     <comment xml:lang="pt">arquivo ARC</comment>
-    <comment xml:lang="pt_BR">Pacote ARC</comment>
+    <comment xml:lang="pt-BR">Pacote ARC</comment>
     <comment xml:lang="ro">Arhivă ARC</comment>
     <comment xml:lang="ru">Архив ARC</comment>
     <comment xml:lang="sk">Archív ARC</comment>
@@ -7447,35 +7636,37 @@
     <comment xml:lang="tr">ARC arşivi</comment>
     <comment xml:lang="uk">архів ARC</comment>
     <comment xml:lang="vi">Kho nén ARC</comment>
-    <comment xml:lang="zh_CN">ARC 归档文件</comment>
-    <comment xml:lang="zh_TW">ARC 封存檔</comment>
+    <comment xml:lang="zh-CN">ARC 归档文件</comment>
+    <comment xml:lang="zh-TW">ARC 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="0x0000081a" type="little32" offset="0" mask="0x8080ffff"/>
-      <match value="0x0000091a" type="little32" offset="0" mask="0x8080ffff"/>
-      <match value="0x0000021a" type="little32" offset="0" mask="0x8080ffff"/>
-      <match value="0x0000031a" type="little32" offset="0" mask="0x8080ffff"/>
-      <match value="0x0000041a" type="little32" offset="0" mask="0x8080ffff"/>
-      <match value="0x0000061a" type="little32" offset="0" mask="0x8080ffff"/>
+      <match type="little32" mask="0x8080ffff" value="0x0000081a" offset="0"/>
+      <match type="little32" mask="0x8080ffff" value="0x0000091a" offset="0"/>
+      <match type="little32" mask="0x8080ffff" value="0x0000021a" offset="0"/>
+      <match type="little32" mask="0x8080ffff" value="0x0000031a" offset="0"/>
+      <match type="little32" mask="0x8080ffff" value="0x0000041a" offset="0"/>
+      <match type="little32" mask="0x8080ffff" value="0x0000061a" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-archive">
     <comment>AR archive</comment>
+    <comment xml:lang="af">AR-argief</comment>
     <comment xml:lang="ar">أرشيف AR</comment>
-    <comment xml:lang="be@latin">Archiŭ AR</comment>
+    <comment xml:lang="be-Latn">Archiŭ AR</comment>
     <comment xml:lang="bg">Архив — AR</comment>
     <comment xml:lang="ca">arxiu AR</comment>
     <comment xml:lang="cs">archiv AR</comment>
     <comment xml:lang="da">AR-arkiv</comment>
     <comment xml:lang="de">AR-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο AR</comment>
-    <comment xml:lang="en_GB">AR archive</comment>
+    <comment xml:lang="en-GB">AR archive</comment>
     <comment xml:lang="eo">AR-arkivo</comment>
     <comment xml:lang="es">archivador AR</comment>
     <comment xml:lang="eu">AR artxiboa</comment>
     <comment xml:lang="fi">AR-arkisto</comment>
     <comment xml:lang="fo">AR skjalasavn</comment>
     <comment xml:lang="fr">archive AR</comment>
+    <comment xml:lang="fur">archivi AR</comment>
     <comment xml:lang="ga">cartlann AR</comment>
     <comment xml:lang="gl">arquivo AR</comment>
     <comment xml:lang="he">ארכיון AR</comment>
@@ -7497,7 +7688,7 @@
     <comment xml:lang="oc">archiu AR</comment>
     <comment xml:lang="pl">Archiwum AR</comment>
     <comment xml:lang="pt">arquivo AR</comment>
-    <comment xml:lang="pt_BR">Pacote AR</comment>
+    <comment xml:lang="pt-BR">Pacote AR</comment>
     <comment xml:lang="ro">Arhivă AR</comment>
     <comment xml:lang="ru">Архив AR</comment>
     <comment xml:lang="sk">Archív AR</comment>
@@ -7508,21 +7699,22 @@
     <comment xml:lang="tr">AR arşivi</comment>
     <comment xml:lang="uk">архів AR</comment>
     <comment xml:lang="vi">Kho nén AR</comment>
-    <comment xml:lang="zh_CN">AR 归档文件</comment>
-    <comment xml:lang="zh_TW">AR 封存檔</comment>
+    <comment xml:lang="zh-CN">AR 归档文件</comment>
+    <comment xml:lang="zh-TW">AR 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="45">
-      <match value="&lt;ar&gt;" type="string" offset="0"/>
-      <match value="!&lt;arch&gt;" type="string" offset="0"/>
+      <match type="string" value="&lt;ar&gt;" offset="0"/>
+      <match type="string" value="!&lt;arch&gt;" offset="0"/>
     </magic>
     <glob pattern="*.a"/>
     <glob pattern="*.ar"/>
   </mime-type>
   <mime-type type="application/x-arj">
     <comment>ARJ archive</comment>
+    <comment xml:lang="af">ARJ-argief</comment>
     <comment xml:lang="ar">أرشيف ARJ</comment>
     <comment xml:lang="az">ARJ arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ ARJ</comment>
+    <comment xml:lang="be-Latn">Archiŭ ARJ</comment>
     <comment xml:lang="bg">Архив — ARJ</comment>
     <comment xml:lang="ca">arxiu ARJ</comment>
     <comment xml:lang="cs">archiv ARJ</comment>
@@ -7530,13 +7722,14 @@
     <comment xml:lang="da">ARJ-arkiv</comment>
     <comment xml:lang="de">ARJ-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο ARJ</comment>
-    <comment xml:lang="en_GB">ARJ archive</comment>
+    <comment xml:lang="en-GB">ARJ archive</comment>
     <comment xml:lang="eo">ARJ-arkivo</comment>
     <comment xml:lang="es">archivador ARJ</comment>
     <comment xml:lang="eu">ARJ artxiboa</comment>
     <comment xml:lang="fi">ARJ-arkisto</comment>
     <comment xml:lang="fo">ARJ skjalasavn</comment>
     <comment xml:lang="fr">archive ARJ</comment>
+    <comment xml:lang="fur">archivi ARJ</comment>
     <comment xml:lang="ga">cartlann ARJ</comment>
     <comment xml:lang="gl">arquivo ARJ</comment>
     <comment xml:lang="he">ארכיון ARJ</comment>
@@ -7558,7 +7751,7 @@
     <comment xml:lang="oc">archiu ARJ</comment>
     <comment xml:lang="pl">Archiwum ARJ</comment>
     <comment xml:lang="pt">arquivo ARJ</comment>
-    <comment xml:lang="pt_BR">Pacote ARJ</comment>
+    <comment xml:lang="pt-BR">Pacote ARJ</comment>
     <comment xml:lang="ro">Arhivă ARJ</comment>
     <comment xml:lang="ru">Архив ARJ</comment>
     <comment xml:lang="sk">Archív ARJ</comment>
@@ -7569,34 +7762,36 @@
     <comment xml:lang="tr">ARJ arşivi</comment>
     <comment xml:lang="uk">архів ARJ</comment>
     <comment xml:lang="vi">Kho nén ARJ</comment>
-    <comment xml:lang="zh_CN">ARJ 归档文件</comment>
-    <comment xml:lang="zh_TW">ARJ 封存檔</comment>
+    <comment xml:lang="zh-CN">ARJ 归档文件</comment>
+    <comment xml:lang="zh-TW">ARJ 封存檔</comment>
     <acronym>ARJ</acronym>
     <expanded-acronym>Archived by Robert Jung</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="0xea60" type="little16" offset="0"/>
+      <match type="little16" value="0xea60" offset="0"/>
     </magic>
     <glob pattern="*.arj"/>
   </mime-type>
   <mime-type type="application/x-asp">
     <comment>ASP page</comment>
+    <comment xml:lang="af">ASP-bladsy</comment>
     <comment xml:lang="ar">صفحة ASP</comment>
     <comment xml:lang="ast">Páxina ASP</comment>
-    <comment xml:lang="be@latin">Staronka ASP</comment>
+    <comment xml:lang="be-Latn">Staronka ASP</comment>
     <comment xml:lang="bg">Страница — ASP</comment>
     <comment xml:lang="ca">pàgina ASP</comment>
     <comment xml:lang="cs">stránka ASP</comment>
     <comment xml:lang="da">ASP-side</comment>
     <comment xml:lang="de">ASP-Seite</comment>
     <comment xml:lang="el">Σελίδα ASP</comment>
-    <comment xml:lang="en_GB">ASP page</comment>
+    <comment xml:lang="en-GB">ASP page</comment>
     <comment xml:lang="eo">ASP-paĝo</comment>
     <comment xml:lang="es">página ASP</comment>
     <comment xml:lang="eu">ASP orria</comment>
     <comment xml:lang="fi">ASP-sivu</comment>
     <comment xml:lang="fo">ASP síða</comment>
     <comment xml:lang="fr">page ASP</comment>
+    <comment xml:lang="fur">pagjine ASP</comment>
     <comment xml:lang="ga">leathanach ASP</comment>
     <comment xml:lang="gl">páxina ASP</comment>
     <comment xml:lang="he">עמוד ASP</comment>
@@ -7617,7 +7812,7 @@
     <comment xml:lang="oc">pagina ASP</comment>
     <comment xml:lang="pl">Strona ASP</comment>
     <comment xml:lang="pt">página ASP</comment>
-    <comment xml:lang="pt_BR">Página ASP</comment>
+    <comment xml:lang="pt-BR">Página ASP</comment>
     <comment xml:lang="ro">Pagină ASP</comment>
     <comment xml:lang="ru">Страница ASP</comment>
     <comment xml:lang="sk">Stránka ASP</comment>
@@ -7628,8 +7823,8 @@
     <comment xml:lang="tr">ASP sayfası</comment>
     <comment xml:lang="uk">сторінка ASP</comment>
     <comment xml:lang="vi">Trang ASP</comment>
-    <comment xml:lang="zh_CN">ASP 页面</comment>
-    <comment xml:lang="zh_TW">ASP 頁面</comment>
+    <comment xml:lang="zh-CN">ASP 页面</comment>
+    <comment xml:lang="zh-TW">ASP 頁面</comment>
     <acronym>ASP</acronym>
     <expanded-acronym>Active Server Page</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -7638,10 +7833,11 @@
   </mime-type>
   <mime-type type="application/x-awk">
     <comment>AWK script</comment>
+    <comment xml:lang="af">AWK-skrip</comment>
     <comment xml:lang="ar">سكربت AWK</comment>
     <comment xml:lang="ast">Script AWK</comment>
     <comment xml:lang="az">AWK skripti</comment>
-    <comment xml:lang="be@latin">Skrypt AWK</comment>
+    <comment xml:lang="be-Latn">Skrypt AWK</comment>
     <comment xml:lang="bg">Скрипт — AWK</comment>
     <comment xml:lang="ca">script AWK</comment>
     <comment xml:lang="cs">skript AWK</comment>
@@ -7649,13 +7845,14 @@
     <comment xml:lang="da">AWK-program</comment>
     <comment xml:lang="de">AWK-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών AWK</comment>
-    <comment xml:lang="en_GB">AWK script</comment>
+    <comment xml:lang="en-GB">AWK script</comment>
     <comment xml:lang="eo">AWK-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en AWK</comment>
     <comment xml:lang="eu">AWK script-a</comment>
     <comment xml:lang="fi">AWK-komentotiedosto</comment>
     <comment xml:lang="fo">AWK boðrøð</comment>
     <comment xml:lang="fr">script AWK</comment>
+    <comment xml:lang="fur">script AWK</comment>
     <comment xml:lang="ga">script AWK</comment>
     <comment xml:lang="gl">script de AWK</comment>
     <comment xml:lang="he">תסריט AWK</comment>
@@ -7677,7 +7874,7 @@
     <comment xml:lang="oc">escript AWK</comment>
     <comment xml:lang="pl">Skrypt AWK</comment>
     <comment xml:lang="pt">script AWK</comment>
-    <comment xml:lang="pt_BR">Script AWK</comment>
+    <comment xml:lang="pt-BR">Script AWK</comment>
     <comment xml:lang="ro">Script AWK</comment>
     <comment xml:lang="ru">Сценарий AWK</comment>
     <comment xml:lang="sk">Skript AWK</comment>
@@ -7688,31 +7885,32 @@
     <comment xml:lang="tr">AWK betiği</comment>
     <comment xml:lang="uk">скрипт AWK</comment>
     <comment xml:lang="vi">Văn lệnh AWK</comment>
-    <comment xml:lang="zh_CN">AWK 脚本</comment>
-    <comment xml:lang="zh_TW">AWK 指令稿</comment>
+    <comment xml:lang="zh-CN">AWK 脚本</comment>
+    <comment xml:lang="zh-TW">AWK 指令稿</comment>
     <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <magic priority="50">
-      <match value="#!/bin/gawk" type="string" offset="0"/>
-      <match value="#! /bin/gawk" type="string" offset="0"/>
-      <match value="#!/usr/bin/gawk" type="string" offset="0"/>
-      <match value="#! /usr/bin/gawk" type="string" offset="0"/>
-      <match value="#!/usr/local/bin/gawk" type="string" offset="0"/>
-      <match value="#! /usr/local/bin/gawk" type="string" offset="0"/>
-      <match value="#!/bin/awk" type="string" offset="0"/>
-      <match value="#! /bin/awk" type="string" offset="0"/>
-      <match value="#!/usr/bin/awk" type="string" offset="0"/>
-      <match value="#! /usr/bin/awk" type="string" offset="0"/>
+      <match type="string" value="#!/bin/gawk" offset="0"/>
+      <match type="string" value="#! /bin/gawk" offset="0"/>
+      <match type="string" value="#!/usr/bin/gawk" offset="0"/>
+      <match type="string" value="#! /usr/bin/gawk" offset="0"/>
+      <match type="string" value="#!/usr/local/bin/gawk" offset="0"/>
+      <match type="string" value="#! /usr/local/bin/gawk" offset="0"/>
+      <match type="string" value="#!/bin/awk" offset="0"/>
+      <match type="string" value="#! /bin/awk" offset="0"/>
+      <match type="string" value="#!/usr/bin/awk" offset="0"/>
+      <match type="string" value="#! /usr/bin/awk" offset="0"/>
     </magic>
     <glob pattern="*.awk"/>
   </mime-type>
   <mime-type type="application/x-bcpio">
     <comment>BCPIO document</comment>
+    <comment xml:lang="af">BCPIO-dokument</comment>
     <comment xml:lang="ar">مستند BCPIO</comment>
     <comment xml:lang="ast">Documentu BCPIO</comment>
     <comment xml:lang="az">BCPIO sənədi</comment>
-    <comment xml:lang="be@latin">Dakument BCPIO</comment>
+    <comment xml:lang="be-Latn">Dakument BCPIO</comment>
     <comment xml:lang="bg">Документ — BCPIO</comment>
     <comment xml:lang="ca">document BCPIO</comment>
     <comment xml:lang="cs">dokument BCPIO</comment>
@@ -7720,13 +7918,14 @@
     <comment xml:lang="da">BCPIO-dokument</comment>
     <comment xml:lang="de">BCPIO-Dokument</comment>
     <comment xml:lang="el">Έγγραφο BCPIO</comment>
-    <comment xml:lang="en_GB">BCPIO document</comment>
+    <comment xml:lang="en-GB">BCPIO document</comment>
     <comment xml:lang="eo">BCPIO-dokumento</comment>
     <comment xml:lang="es">documento BCPIO</comment>
     <comment xml:lang="eu">BCPIO dokumentua</comment>
     <comment xml:lang="fi">BCPIO-asiakirja</comment>
     <comment xml:lang="fo">BCPIO skjal</comment>
     <comment xml:lang="fr">document BCPIO</comment>
+    <comment xml:lang="fur">document BCPIO</comment>
     <comment xml:lang="ga">cáipéis BCPIO</comment>
     <comment xml:lang="gl">documento BCPIO</comment>
     <comment xml:lang="he">מסמך של BCPO</comment>
@@ -7748,7 +7947,7 @@
     <comment xml:lang="oc">document BCPIO</comment>
     <comment xml:lang="pl">Dokument BCPIO</comment>
     <comment xml:lang="pt">documento BCPIO</comment>
-    <comment xml:lang="pt_BR">Documento BCPIO</comment>
+    <comment xml:lang="pt-BR">Documento BCPIO</comment>
     <comment xml:lang="ro">Document BCPIO</comment>
     <comment xml:lang="ru">Документ BCPIO</comment>
     <comment xml:lang="sk">Dokument BCPIO</comment>
@@ -7759,8 +7958,8 @@
     <comment xml:lang="tr">BCPIO belgesi</comment>
     <comment xml:lang="uk">документ BCPIO</comment>
     <comment xml:lang="vi">Tài liệu BCPIO</comment>
-    <comment xml:lang="zh_CN">BCPIO 文档</comment>
-    <comment xml:lang="zh_TW">BCPIO 文件</comment>
+    <comment xml:lang="zh-CN">BCPIO 文档</comment>
+    <comment xml:lang="zh-TW">BCPIO 文件</comment>
     <acronym>BCPIO</acronym>
     <expanded-acronym>Binary CPIO</expanded-acronym>
     <generic-icon name="package-x-generic"/>
@@ -7768,9 +7967,10 @@
   </mime-type>
   <mime-type type="application/x-bittorrent">
     <comment>BitTorrent seed file</comment>
+    <comment xml:lang="af">BitTorrent-saadlêer</comment>
     <comment xml:lang="ar">ملف باذر البت تورنت</comment>
     <comment xml:lang="az">BitTorrent seed faylı</comment>
-    <comment xml:lang="be@latin">Fajł krynicy BitTorrent</comment>
+    <comment xml:lang="be-Latn">Fajł krynicy BitTorrent</comment>
     <comment xml:lang="bg">Файл-източник — BitTorrent</comment>
     <comment xml:lang="ca">fitxer de llavor BitTorrent</comment>
     <comment xml:lang="cs">soubor BitTorrent</comment>
@@ -7778,13 +7978,14 @@
     <comment xml:lang="da">BitTorrent-frøfil</comment>
     <comment xml:lang="de">BitTorrent-Seed-Datei</comment>
     <comment xml:lang="el">Αρχείο BitTorrent seed</comment>
-    <comment xml:lang="en_GB">BitTorrent seed file</comment>
+    <comment xml:lang="en-GB">BitTorrent seed file</comment>
     <comment xml:lang="eo">BitTorrent-semdosiero</comment>
     <comment xml:lang="es">archivo semilla de BitTorrent</comment>
     <comment xml:lang="eu">BitTorrent hazi-fitxategia</comment>
     <comment xml:lang="fi">BitTorrent-siementiedosto</comment>
     <comment xml:lang="fo">BitTorrent seed fíla</comment>
     <comment xml:lang="fr">fichier graine BitTorrent</comment>
+    <comment xml:lang="fur">file semence di BitTorrent</comment>
     <comment xml:lang="ga">comhad síl BitTorrent</comment>
     <comment xml:lang="gl">ficheiro de orixe BitTorrent</comment>
     <comment xml:lang="he">קובץ זריעה של BitTorrent</comment>
@@ -7805,7 +8006,7 @@
     <comment xml:lang="oc">fichièr grana BitTorrent</comment>
     <comment xml:lang="pl">Plik ziarna BitTorrent</comment>
     <comment xml:lang="pt">ficheiro de semente BitTorrent</comment>
-    <comment xml:lang="pt_BR">Arquivo semente BitTorrent</comment>
+    <comment xml:lang="pt-BR">Arquivo semente BitTorrent</comment>
     <comment xml:lang="ro">Fișier sursă-completă BitTorrent</comment>
     <comment xml:lang="ru">Файл источника BitTorrent</comment>
     <comment xml:lang="sk">Súbor BitTorrent</comment>
@@ -7816,31 +8017,33 @@
     <comment xml:lang="tr">BitTorrent tohum dosyası</comment>
     <comment xml:lang="uk">файл поширення BitTorrent</comment>
     <comment xml:lang="vi">Tải tập hạt BitTorrent</comment>
-    <comment xml:lang="zh_CN">BitTorrent 种子文件</comment>
-    <comment xml:lang="zh_TW">BitTorrent 種子檔</comment>
+    <comment xml:lang="zh-CN">BitTorrent 种子文件</comment>
+    <comment xml:lang="zh-TW">BitTorrent 種子檔</comment>
     <magic priority="50">
-      <match value="d8:announce" type="string" offset="0"/>
+      <match type="string" value="d8:announce" offset="0"/>
     </magic>
     <glob pattern="*.torrent"/>
   </mime-type>
   <mime-type type="application/x-blender">
     <comment>Blender scene</comment>
+    <comment xml:lang="af">Blender-toneel</comment>
     <comment xml:lang="ar">مشهد بلندر</comment>
     <comment xml:lang="ast">Escena de Blender</comment>
-    <comment xml:lang="be@latin">Scena Blender</comment>
+    <comment xml:lang="be-Latn">Scena Blender</comment>
     <comment xml:lang="bg">Сцена — Blender</comment>
     <comment xml:lang="ca">escena de Blender</comment>
     <comment xml:lang="cs">scéna Blender</comment>
     <comment xml:lang="da">Blenderscene</comment>
     <comment xml:lang="de">Blender-Szene</comment>
     <comment xml:lang="el">Σκηνή Blender</comment>
-    <comment xml:lang="en_GB">Blender scene</comment>
+    <comment xml:lang="en-GB">Blender scene</comment>
     <comment xml:lang="eo">Blender-sceno</comment>
     <comment xml:lang="es">escena de Blender</comment>
     <comment xml:lang="eu">Blender-eko fitxategia</comment>
     <comment xml:lang="fi">Blender-näkymä</comment>
     <comment xml:lang="fo">Blender leikmynd</comment>
     <comment xml:lang="fr">scène Blender</comment>
+    <comment xml:lang="fur">sene Blender</comment>
     <comment xml:lang="ga">radharc Blender</comment>
     <comment xml:lang="gl">escena de Blender</comment>
     <comment xml:lang="he">סצנת Blender</comment>
@@ -7862,7 +8065,7 @@
     <comment xml:lang="oc">scèna Blender</comment>
     <comment xml:lang="pl">Scena programu Blender</comment>
     <comment xml:lang="pt">cenário Blender</comment>
-    <comment xml:lang="pt_BR">Cena do Blender</comment>
+    <comment xml:lang="pt-BR">Cena do Blender</comment>
     <comment xml:lang="ro">Scenă Blender</comment>
     <comment xml:lang="ru">Сцена Blender</comment>
     <comment xml:lang="sk">Scéna Blender</comment>
@@ -7873,38 +8076,40 @@
     <comment xml:lang="tr">Blender sahnesi</comment>
     <comment xml:lang="uk">сцена Blender</comment>
     <comment xml:lang="vi">Cảnh Blender</comment>
-    <comment xml:lang="zh_CN">Blender 场景</comment>
-    <comment xml:lang="zh_TW">Blender 場景</comment>
+    <comment xml:lang="zh-CN">Blender 场景</comment>
+    <comment xml:lang="zh-TW">Blender 場景</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.blender"/>
     <glob pattern="*.blend"/>
     <glob pattern="*.BLEND"/>
     <magic priority="50">
-      <match value="BLENDER" type="string" offset="0"/>
+      <match type="string" value="BLENDER" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-bzdvi">
     <comment>TeX DVI document (bzip-compressed)</comment>
+    <comment xml:lang="af">TeX DVI-dokument (bzip-saamgepers)</comment>
     <comment xml:lang="ar">مستند TeX DVI (مضغوط-bzip)</comment>
     <comment xml:lang="ast">Documentu Tex DVI (comprimíu en bzip)</comment>
-    <comment xml:lang="be@latin">Dakument TeX DVI (bzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Dakument TeX DVI (bzip-skampresavany)</comment>
     <comment xml:lang="bg">Документ — TeX DVI, компресиран с bzip</comment>
     <comment xml:lang="ca">document de TeX DVI (amb compressió bzip)</comment>
     <comment xml:lang="cs">dokument TeX DVI (komprimovaný pomocí bzip)</comment>
     <comment xml:lang="da">TeX DVI-dokument (bzip-komprimeret)</comment>
     <comment xml:lang="de">TeX-DVI-Dokument (bzip-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο TeX DVI (συμπιεσμένο με bzip)</comment>
-    <comment xml:lang="en_GB">TeX DVI document (bzip-compressed)</comment>
+    <comment xml:lang="en-GB">TeX DVI document (bzip-compressed)</comment>
     <comment xml:lang="es">documento DVI de TeX (comprimido con bzip)</comment>
     <comment xml:lang="eu">TeX DVI dokumentua (bzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">TeX DVI -asiakirja (bzip-pakattu)</comment>
     <comment xml:lang="fo">TeX DVI skjal (bzip-stappað)</comment>
     <comment xml:lang="fr">document DVI TeX (compressé bzip)</comment>
+    <comment xml:lang="fur">document DVI TeX (comprimût cun bzip)</comment>
     <comment xml:lang="ga">cáipéis DVI TeX (comhbhrúite le bzip)</comment>
     <comment xml:lang="gl">documento DVI de TeX (comprimido con bzip)</comment>
     <comment xml:lang="he">מסמך מסוג TeX DVI (מכווץ ע״י bzip)</comment>
     <comment xml:lang="hr">TeX DVI dokument (bzip sažeto)</comment>
-    <comment xml:lang="hu">TeX DVI dokumentum (bzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">TeX DVI dokumentum (bzip tömörítésű)</comment>
     <comment xml:lang="ia">Documento TeX DVI (comprimite con bzip)</comment>
     <comment xml:lang="id">Dokumen TeX DVI (terkompresi bzip)</comment>
     <comment xml:lang="it">Documento TeX DVI (compresso con bzip)</comment>
@@ -7919,7 +8124,7 @@
     <comment xml:lang="oc">document DVI TeX (compressat bzip)</comment>
     <comment xml:lang="pl">Dokument TeX DVI (kompresja bzip)</comment>
     <comment xml:lang="pt">documento TeX DVI (compressão bzip)</comment>
-    <comment xml:lang="pt_BR">Documento DVI TeX (compactado com bzip)</comment>
+    <comment xml:lang="pt-BR">Documento DVI TeX (compactado com bzip)</comment>
     <comment xml:lang="ro">Document TeX DVI (comprimat bzip)</comment>
     <comment xml:lang="ru">Документ TeX DVI (сжатый bzip)</comment>
     <comment xml:lang="sk">Dokument TeX DVI (komprimovaný pomocou bzip)</comment>
@@ -7930,30 +8135,32 @@
     <comment xml:lang="tr">TeX DVI belgesi (bzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ TeX DVI (стиснений bzip)</comment>
     <comment xml:lang="vi">Tài liệu DVI TeX (đã nén bzip)</comment>
-    <comment xml:lang="zh_CN">TeX DVI 文档（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">TeX DVI 文件 (bzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">TeX DVI 文档（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">TeX DVI 文件 (bzip 壓縮)</comment>
     <sub-class-of type="application/x-bzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.dvi.bz2"/>
   </mime-type>
   <mime-type type="application/x-bzip">
     <comment>Bzip archive</comment>
+    <comment xml:lang="af">Bzip-argief</comment>
     <comment xml:lang="ar">أرشيف Bzip</comment>
     <comment xml:lang="ast">Archivu Bzip</comment>
-    <comment xml:lang="be@latin">Archiŭ bzip</comment>
+    <comment xml:lang="be-Latn">Archiŭ bzip</comment>
     <comment xml:lang="bg">Архив — bzip</comment>
     <comment xml:lang="ca">arxiu bzip</comment>
     <comment xml:lang="cs">archiv bzip</comment>
     <comment xml:lang="da">Bzip-arkiv</comment>
     <comment xml:lang="de">Bzip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Bzip</comment>
-    <comment xml:lang="en_GB">Bzip archive</comment>
+    <comment xml:lang="en-GB">Bzip archive</comment>
     <comment xml:lang="eo">Bzip-arkivo</comment>
     <comment xml:lang="es">archivador Bzip</comment>
     <comment xml:lang="eu">Bzip artxiboa</comment>
     <comment xml:lang="fi">Bzip-arkisto</comment>
     <comment xml:lang="fo">Bzip skjalasavn</comment>
     <comment xml:lang="fr">archive bzip</comment>
+    <comment xml:lang="fur">archivi Bzip</comment>
     <comment xml:lang="ga">cartlann Bzip</comment>
     <comment xml:lang="gl">arquivo Bzip</comment>
     <comment xml:lang="he">ארכיון Bzip</comment>
@@ -7974,10 +8181,10 @@
     <comment xml:lang="oc">archiu bzip</comment>
     <comment xml:lang="pl">Archiwum bzip</comment>
     <comment xml:lang="pt">arquivo Bzip</comment>
-    <comment xml:lang="pt_BR">Pacote Bzip</comment>
+    <comment xml:lang="pt-BR">Pacote Bzip</comment>
     <comment xml:lang="ro">Arhivă Bzip</comment>
     <comment xml:lang="ru">Архив BZIP</comment>
-    <comment xml:lang="sk">Archív bzip</comment>
+    <comment xml:lang="sk">Archív Bzip</comment>
     <comment xml:lang="sl">Datoteka arhiva Bzip</comment>
     <comment xml:lang="sq">Arkiv bzip</comment>
     <comment xml:lang="sr">Бзип архива</comment>
@@ -7985,38 +8192,41 @@
     <comment xml:lang="tr">Bzip arşivi</comment>
     <comment xml:lang="uk">архів bzip</comment>
     <comment xml:lang="vi">Kho nén bzip</comment>
-    <comment xml:lang="zh_CN">Bzip 归档文件</comment>
-    <comment xml:lang="zh_TW">Bzip 封存檔</comment>
+    <comment xml:lang="zh-CN">Bzip 归档文件</comment>
+    <comment xml:lang="zh-TW">Bzip 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="BZh" type="string" offset="0"/>
+      <match type="string" value="BZh" offset="0"/>
     </magic>
     <glob pattern="*.bz2"/>
     <glob pattern="*.bz"/>
     <alias type="application/x-bzip2"/>
+    <alias type="application/bzip2"/>
   </mime-type>
   <mime-type type="application/x-bzip-compressed-tar">
     <comment>Tar archive (bzip-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (bzip-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط-bzip)</comment>
     <comment xml:lang="ast">Archivu Tar (comprimíu en bzip)</comment>
-    <comment xml:lang="be@latin">Archiŭ tar (bzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Archiŭ tar (bzip-skampresavany)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран с bzip</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió bzip)</comment>
     <comment xml:lang="cs">archiv Tar (komprimovaný pomocí bzip)</comment>
     <comment xml:lang="da">Tar-arkiv (bzip-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (bzip-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο με bzip)</comment>
-    <comment xml:lang="en_GB">Tar archive (bzip-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (bzip-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con bzip)</comment>
     <comment xml:lang="eu">Tar artxiboa (bzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (bzip-pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn (bzip-stappað)</comment>
     <comment xml:lang="fr">archive tar (compressée bzip)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun bzip)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le bzip)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido con bzip)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י bzip)</comment>
     <comment xml:lang="hr">Tar arhiva (bzip sažeto)</comment>
-    <comment xml:lang="hu">Tar archívum (bzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">Tar archívum (bzip tömörítésű)</comment>
     <comment xml:lang="ia">Archivo Tar (comprimite con bzip)</comment>
     <comment xml:lang="id">Arsip Tar (terkompresi bzip)</comment>
     <comment xml:lang="it">Archivio tar (compresso con bzip)</comment>
@@ -8031,10 +8241,10 @@
     <comment xml:lang="oc">archiu tar (compressat bzip)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja bzip)</comment>
     <comment xml:lang="pt">arquivo Tar (compressão bzip)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado com bzip)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com bzip)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată bzip)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый bzip)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou bzip)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou bzip)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen z bzip)</comment>
     <comment xml:lang="sq">Arkiv tar (i kompresuar me bzip)</comment>
     <comment xml:lang="sr">Тар архива (запакована бзипом)</comment>
@@ -8042,8 +8252,8 @@
     <comment xml:lang="tr">Tar arşivi (bzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений bzip)</comment>
     <comment xml:lang="vi">Kho nén tar (đã nén bzip)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（bzip 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (bzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（bzip 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (bzip 壓縮)</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="application/x-bzip"/>
     <glob pattern="*.tar.bz2"/>
@@ -8054,26 +8264,28 @@
   </mime-type>
   <mime-type type="application/x-bzpdf">
     <comment>PDF document (bzip-compressed)</comment>
+    <comment xml:lang="af">PDF-dokument (bzip-saamgepers)</comment>
     <comment xml:lang="ar">مستند PDF (مضغوط-bzip)</comment>
     <comment xml:lang="ast">Documentu PDF (comprimíu en bzip)</comment>
-    <comment xml:lang="be@latin">Dakument PDF (bzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Dakument PDF (bzip-skampresavany)</comment>
     <comment xml:lang="bg">Документ — PDF, компресиран с bzip</comment>
     <comment xml:lang="ca">document PDF (amb compressió bzip)</comment>
     <comment xml:lang="cs">dokument PDF (komprimovaný pomocí bzip)</comment>
     <comment xml:lang="da">PDF-dokument (bzip-komprimeret)</comment>
     <comment xml:lang="de">PDF-Dokument (bzip-komprimiert)</comment>
     <comment xml:lang="el">Έγγραφο PDF (συμπιεσμένο με bzip)</comment>
-    <comment xml:lang="en_GB">PDF document (bzip-compressed)</comment>
+    <comment xml:lang="en-GB">PDF document (bzip-compressed)</comment>
     <comment xml:lang="es">documento PDF (comprimido con bzip)</comment>
     <comment xml:lang="eu">PostScript dokumentua (bzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">PDF-asiakirja (bzip-pakattu)</comment>
     <comment xml:lang="fo">PDF skjal (bzip-stappað)</comment>
     <comment xml:lang="fr">document PDF (compressé bzip)</comment>
+    <comment xml:lang="fur">document PDF (comprimût cun bzip)</comment>
     <comment xml:lang="ga">cáipéis PDF (comhbhrúite le bzip)</comment>
     <comment xml:lang="gl">documento PDF (comprimido en bzip)</comment>
     <comment xml:lang="he">מסמך PDF (מכווץ ע״י bzip)</comment>
     <comment xml:lang="hr">PDF dokument (bzip sažet)</comment>
-    <comment xml:lang="hu">PDF dokumentum (bzip-tömörítésű)</comment>
+    <comment xml:lang="hu">PDF dokumentum (bzip tömörítésű)</comment>
     <comment xml:lang="ia">Documento PDF (comprimite con bzip)</comment>
     <comment xml:lang="id">Dokumen PDF (terkompresi bzip)</comment>
     <comment xml:lang="it">Documento PDF (compresso con bzip)</comment>
@@ -8088,7 +8300,7 @@
     <comment xml:lang="oc">document PDF (compressat bzip)</comment>
     <comment xml:lang="pl">Dokument PDF (kompresja bzip)</comment>
     <comment xml:lang="pt">documento PDF (compressão bzip)</comment>
-    <comment xml:lang="pt_BR">Documento PDF (compactado com bzip)</comment>
+    <comment xml:lang="pt-BR">Documento PDF (compactado com bzip)</comment>
     <comment xml:lang="ro">Document PDF (comprimat bzip)</comment>
     <comment xml:lang="ru">Документ PDF (сжатый bzip)</comment>
     <comment xml:lang="sk">Dokument PDF (komprimovaný pomocou bzip)</comment>
@@ -8099,34 +8311,36 @@
     <comment xml:lang="tr">PDF belgesi (bzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ PDF (стиснений bzip)</comment>
     <comment xml:lang="vi">Tài liệu PDF (đã nén bzip)</comment>
-    <comment xml:lang="zh_CN">PDF 文档（bzip 压缩）</comment>
-    <comment xml:lang="zh_TW">PDF 文件 (bzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">PDF 文档（bzip 压缩）</comment>
+    <comment xml:lang="zh-TW">PDF 文件 (bzip 壓縮)</comment>
     <sub-class-of type="application/x-bzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.pdf.bz2"/>
   </mime-type>
   <mime-type type="application/x-bzpostscript">
     <comment>PostScript document (bzip-compressed)</comment>
+    <comment xml:lang="af">PostScript-dokument (bzip-saamgepers)</comment>
     <comment xml:lang="ar">مستند PostScript (مضغوط-bzip)</comment>
     <comment xml:lang="ast">Documentu PostScript (comprimíu en bzip)</comment>
-    <comment xml:lang="be@latin">Dakument PostScript (bzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Dakument PostScript (bzip-skampresavany)</comment>
     <comment xml:lang="bg">Документ — PostScript, компресиран с bzip</comment>
     <comment xml:lang="ca">document PostScript (amb compressió bzip)</comment>
     <comment xml:lang="cs">dokument PostScript (komprimovaný pomocí bzip)</comment>
     <comment xml:lang="da">PostScript-dokument (bzip-komprimeret)</comment>
     <comment xml:lang="de">PostScript-Dokument (bzip-komprimiert)</comment>
     <comment xml:lang="el">Έγγραφο PostScript (συμπιεσμένο με bzip)</comment>
-    <comment xml:lang="en_GB">PostScript document (bzip-compressed)</comment>
+    <comment xml:lang="en-GB">PostScript document (bzip-compressed)</comment>
     <comment xml:lang="es">documento PostScript (comprimido con bzip)</comment>
     <comment xml:lang="eu">PostScript dokumentua (bzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">PostScript-asiakirja (bzip-pakattu)</comment>
     <comment xml:lang="fo">PostScript skjal (bzip-stappað)</comment>
     <comment xml:lang="fr">document PostScript (compressé bzip)</comment>
+    <comment xml:lang="fur">document PostScript (comprimût cun bzip)</comment>
     <comment xml:lang="ga">cáipéis PostScript (comhbhrúite le bzip)</comment>
     <comment xml:lang="gl">documento PostScript (comprimido con bzip)</comment>
     <comment xml:lang="he">מסמך PostDcript (מכווץ ע״י bzip)</comment>
     <comment xml:lang="hr">PostScript dokument (bzip sažet)</comment>
-    <comment xml:lang="hu">PostScript dokumentum (bzip-tömörítésű)</comment>
+    <comment xml:lang="hu">PostScript dokumentum (bzip tömörítésű)</comment>
     <comment xml:lang="ia">Documento PostScript (comprimite con bzip)</comment>
     <comment xml:lang="id">Dokumen PostScript (terkompresi bzip)</comment>
     <comment xml:lang="it">Documento PostScript (compresso con bzip)</comment>
@@ -8139,9 +8353,9 @@
     <comment xml:lang="nl">PostScript-document (ingepakt met bzip)</comment>
     <comment xml:lang="nn">PostScript-dokument (pakka med bzip)</comment>
     <comment xml:lang="oc">document PostEscript (compressat bzip)</comment>
-    <comment xml:lang="pl">Dokument Postscript (kompresja bzip)</comment>
+    <comment xml:lang="pl">Dokument PostScript (kompresja bzip)</comment>
     <comment xml:lang="pt">documento PostScript (compressão bzip)</comment>
-    <comment xml:lang="pt_BR">Documento PostScript (compactado com bzip)</comment>
+    <comment xml:lang="pt-BR">Documento PostScript (compactado com bzip)</comment>
     <comment xml:lang="ro">Document PostScript (comprimat bzip)</comment>
     <comment xml:lang="ru">Документ PostScript (сжатый bzip)</comment>
     <comment xml:lang="sk">Dokument PostScript (komprimovaný pomocou bzip)</comment>
@@ -8152,28 +8366,30 @@
     <comment xml:lang="tr">PostScript belgesi (bzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ PostScript (стиснене bzip)</comment>
     <comment xml:lang="vi">Tài liệu PostScript (đã nén bzip)</comment>
-    <comment xml:lang="zh_CN">PostScript 文档（bzip 压缩）</comment>
-    <comment xml:lang="zh_TW">PostScript 文件 (bzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">PostScript 文档（bzip 压缩）</comment>
+    <comment xml:lang="zh-TW">PostScript 文件 (bzip 壓縮)</comment>
     <sub-class-of type="application/x-bzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.ps.bz2"/>
   </mime-type>
   <mime-type type="application/vnd.comicbook-rar">
     <comment>comic book archive</comment>
+    <comment xml:lang="af">strokiesprent-argief</comment>
     <comment xml:lang="ar">أرشيف comic book</comment>
-    <comment xml:lang="be@latin">archiŭ komiksaŭ</comment>
+    <comment xml:lang="be-Latn">archiŭ komiksaŭ</comment>
     <comment xml:lang="bg">Архив — комикси</comment>
     <comment xml:lang="ca">arxiu comic book</comment>
     <comment xml:lang="cs">archiv knihy komiksů</comment>
     <comment xml:lang="da">comic book-arkiv</comment>
     <comment xml:lang="de">Comic-Book-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο κόμικ</comment>
-    <comment xml:lang="en_GB">comic book archive</comment>
+    <comment xml:lang="en-GB">comic book archive</comment>
     <comment xml:lang="es">archivador de libro de cómic</comment>
     <comment xml:lang="eu">komiki artxiboa</comment>
     <comment xml:lang="fi">sarjakuva-arkisto</comment>
     <comment xml:lang="fo">teknisøgubóka skjalasavn</comment>
     <comment xml:lang="fr">archive Comic Book</comment>
+    <comment xml:lang="fur">archivi di fumets</comment>
     <comment xml:lang="ga">cartlann chartúin</comment>
     <comment xml:lang="gl">ficheiro de libro de banda deseñada</comment>
     <comment xml:lang="he">ארכיון ספר קומי</comment>
@@ -8193,7 +8409,7 @@
     <comment xml:lang="oc">archiu Comic Book</comment>
     <comment xml:lang="pl">Archiwum komiksu</comment>
     <comment xml:lang="pt">arquivo de banda desenhada</comment>
-    <comment xml:lang="pt_BR">Pacote de histórias em quadrinhos</comment>
+    <comment xml:lang="pt-BR">Pacote de histórias em quadrinhos</comment>
     <comment xml:lang="ro">arhivă benzi desenate</comment>
     <comment xml:lang="ru">Архив комиксов</comment>
     <comment xml:lang="sk">Archív knihy komiksov</comment>
@@ -8204,8 +8420,8 @@
     <comment xml:lang="tr">çizgi roman arşivi</comment>
     <comment xml:lang="uk">архів коміксів</comment>
     <comment xml:lang="vi">Kho nén sách tranh chuyện vui</comment>
-    <comment xml:lang="zh_CN">漫画书归档文件</comment>
-    <comment xml:lang="zh_TW">漫畫書封存檔</comment>
+    <comment xml:lang="zh-CN">漫画书归档文件</comment>
+    <comment xml:lang="zh-TW">漫畫書封存檔</comment>
     <sub-class-of type="application/vnd.rar"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.cbr"/>
@@ -8213,20 +8429,22 @@
   </mime-type>
   <mime-type type="application/x-cb7">
     <comment>comic book archive</comment>
+    <comment xml:lang="af">strokiesprent-argief</comment>
     <comment xml:lang="ar">أرشيف comic book</comment>
-    <comment xml:lang="be@latin">archiŭ komiksaŭ</comment>
+    <comment xml:lang="be-Latn">archiŭ komiksaŭ</comment>
     <comment xml:lang="bg">Архив — комикси</comment>
     <comment xml:lang="ca">arxiu comic book</comment>
     <comment xml:lang="cs">archiv knihy komiksů</comment>
     <comment xml:lang="da">comic book-arkiv</comment>
     <comment xml:lang="de">Comic-Book-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο κόμικ</comment>
-    <comment xml:lang="en_GB">comic book archive</comment>
+    <comment xml:lang="en-GB">comic book archive</comment>
     <comment xml:lang="es">archivador de libro de cómic</comment>
     <comment xml:lang="eu">komiki artxiboa</comment>
     <comment xml:lang="fi">sarjakuva-arkisto</comment>
     <comment xml:lang="fo">teknisøgubóka skjalasavn</comment>
     <comment xml:lang="fr">archive Comic Book</comment>
+    <comment xml:lang="fur">archivi di fumets</comment>
     <comment xml:lang="ga">cartlann chartúin</comment>
     <comment xml:lang="gl">ficheiro de libro de banda deseñada</comment>
     <comment xml:lang="he">ארכיון ספר קומי</comment>
@@ -8246,7 +8464,7 @@
     <comment xml:lang="oc">archiu Comic Book</comment>
     <comment xml:lang="pl">Archiwum komiksu</comment>
     <comment xml:lang="pt">arquivo de banda desenhada</comment>
-    <comment xml:lang="pt_BR">Pacote de histórias em quadrinhos</comment>
+    <comment xml:lang="pt-BR">Pacote de histórias em quadrinhos</comment>
     <comment xml:lang="ro">arhivă benzi desenate</comment>
     <comment xml:lang="ru">Архив комиксов</comment>
     <comment xml:lang="sk">Archív knihy komiksov</comment>
@@ -8257,28 +8475,30 @@
     <comment xml:lang="tr">çizgi roman arşivi</comment>
     <comment xml:lang="uk">архів коміксів</comment>
     <comment xml:lang="vi">Kho nén sách tranh chuyện vui</comment>
-    <comment xml:lang="zh_CN">漫画书归档文件</comment>
-    <comment xml:lang="zh_TW">漫畫書封存檔</comment>
+    <comment xml:lang="zh-CN">漫画书归档文件</comment>
+    <comment xml:lang="zh-TW">漫畫書封存檔</comment>
     <sub-class-of type="application/x-7z-compressed"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.cb7"/>
   </mime-type>
   <mime-type type="application/x-cbt">
     <comment>comic book archive</comment>
+    <comment xml:lang="af">strokiesprent-argief</comment>
     <comment xml:lang="ar">أرشيف comic book</comment>
-    <comment xml:lang="be@latin">archiŭ komiksaŭ</comment>
+    <comment xml:lang="be-Latn">archiŭ komiksaŭ</comment>
     <comment xml:lang="bg">Архив — комикси</comment>
     <comment xml:lang="ca">arxiu comic book</comment>
     <comment xml:lang="cs">archiv knihy komiksů</comment>
     <comment xml:lang="da">comic book-arkiv</comment>
     <comment xml:lang="de">Comic-Book-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο κόμικ</comment>
-    <comment xml:lang="en_GB">comic book archive</comment>
+    <comment xml:lang="en-GB">comic book archive</comment>
     <comment xml:lang="es">archivador de libro de cómic</comment>
     <comment xml:lang="eu">komiki artxiboa</comment>
     <comment xml:lang="fi">sarjakuva-arkisto</comment>
     <comment xml:lang="fo">teknisøgubóka skjalasavn</comment>
     <comment xml:lang="fr">archive Comic Book</comment>
+    <comment xml:lang="fur">archivi di fumets</comment>
     <comment xml:lang="ga">cartlann chartúin</comment>
     <comment xml:lang="gl">ficheiro de libro de banda deseñada</comment>
     <comment xml:lang="he">ארכיון ספר קומי</comment>
@@ -8298,7 +8518,7 @@
     <comment xml:lang="oc">archiu Comic Book</comment>
     <comment xml:lang="pl">Archiwum komiksu</comment>
     <comment xml:lang="pt">arquivo de banda desenhada</comment>
-    <comment xml:lang="pt_BR">Pacote de histórias em quadrinhos</comment>
+    <comment xml:lang="pt-BR">Pacote de histórias em quadrinhos</comment>
     <comment xml:lang="ro">arhivă benzi desenate</comment>
     <comment xml:lang="ru">Архив комиксов</comment>
     <comment xml:lang="sk">Archív knihy komiksov</comment>
@@ -8309,28 +8529,30 @@
     <comment xml:lang="tr">çizgi roman arşivi</comment>
     <comment xml:lang="uk">архів коміксів</comment>
     <comment xml:lang="vi">Kho nén sách tranh chuyện vui</comment>
-    <comment xml:lang="zh_CN">漫画书归档文件</comment>
-    <comment xml:lang="zh_TW">漫畫書封存檔</comment>
+    <comment xml:lang="zh-CN">漫画书归档文件</comment>
+    <comment xml:lang="zh-TW">漫畫書封存檔</comment>
     <sub-class-of type="application/x-tar"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.cbt"/>
   </mime-type>
   <mime-type type="application/vnd.comicbook+zip">
     <comment>comic book archive</comment>
+    <comment xml:lang="af">strokiesprent-argief</comment>
     <comment xml:lang="ar">أرشيف comic book</comment>
-    <comment xml:lang="be@latin">archiŭ komiksaŭ</comment>
+    <comment xml:lang="be-Latn">archiŭ komiksaŭ</comment>
     <comment xml:lang="bg">Архив — комикси</comment>
     <comment xml:lang="ca">arxiu comic book</comment>
     <comment xml:lang="cs">archiv knihy komiksů</comment>
     <comment xml:lang="da">comic book-arkiv</comment>
     <comment xml:lang="de">Comic-Book-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο κόμικ</comment>
-    <comment xml:lang="en_GB">comic book archive</comment>
+    <comment xml:lang="en-GB">comic book archive</comment>
     <comment xml:lang="es">archivador de libro de cómic</comment>
     <comment xml:lang="eu">komiki artxiboa</comment>
     <comment xml:lang="fi">sarjakuva-arkisto</comment>
     <comment xml:lang="fo">teknisøgubóka skjalasavn</comment>
     <comment xml:lang="fr">archive Comic Book</comment>
+    <comment xml:lang="fur">archivi di fumets</comment>
     <comment xml:lang="ga">cartlann chartúin</comment>
     <comment xml:lang="gl">ficheiro de libro de banda deseñada</comment>
     <comment xml:lang="he">ארכיון ספר קומי</comment>
@@ -8350,7 +8572,7 @@
     <comment xml:lang="oc">archiu Comic Book</comment>
     <comment xml:lang="pl">Archiwum komiksu</comment>
     <comment xml:lang="pt">arquivo de banda desenhada</comment>
-    <comment xml:lang="pt_BR">Pacote de histórias em quadrinhos</comment>
+    <comment xml:lang="pt-BR">Pacote de histórias em quadrinhos</comment>
     <comment xml:lang="ro">arhivă benzi desenate</comment>
     <comment xml:lang="ru">Архив комиксов</comment>
     <comment xml:lang="sk">Archív knihy komiksov</comment>
@@ -8361,8 +8583,8 @@
     <comment xml:lang="tr">çizgi roman arşivi</comment>
     <comment xml:lang="uk">архів коміксів</comment>
     <comment xml:lang="vi">Kho nén sách tranh chuyện vui</comment>
-    <comment xml:lang="zh_CN">漫画书归档文件</comment>
-    <comment xml:lang="zh_TW">漫畫書封存檔</comment>
+    <comment xml:lang="zh-CN">漫画书归档文件</comment>
+    <comment xml:lang="zh-TW">漫畫書封存檔</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.cbz"/>
@@ -8370,6 +8592,7 @@
   </mime-type>
   <mime-type type="application/x-lrzip">
     <comment>Lrzip archive</comment>
+    <comment xml:lang="af">Lrzip-argief</comment>
     <comment xml:lang="ar">أرشيف Lrzip</comment>
     <comment xml:lang="bg">Архив — lrzip</comment>
     <comment xml:lang="ca">arxiu lrzip</comment>
@@ -8377,13 +8600,14 @@
     <comment xml:lang="da">Lrzip-arkiv</comment>
     <comment xml:lang="de">Lrzip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Lrzip</comment>
-    <comment xml:lang="en_GB">Lrzip archive</comment>
+    <comment xml:lang="en-GB">Lrzip archive</comment>
     <comment xml:lang="eo">Lrzip-arkivo</comment>
     <comment xml:lang="es">archivador Lrzip</comment>
     <comment xml:lang="eu">Lrzip artxiboa</comment>
     <comment xml:lang="fi">Lrzip-arkisto</comment>
     <comment xml:lang="fo">Lrzip skjalasavn</comment>
     <comment xml:lang="fr">archive lrzip</comment>
+    <comment xml:lang="fur">archivi Lrzip</comment>
     <comment xml:lang="ga">cartlann Lrzip</comment>
     <comment xml:lang="gl">arquivo Lrzip</comment>
     <comment xml:lang="he">ארכיון Lrzip</comment>
@@ -8401,7 +8625,7 @@
     <comment xml:lang="oc">archiu lrzip</comment>
     <comment xml:lang="pl">Archiwum lrzip</comment>
     <comment xml:lang="pt">arquivo Lrzip</comment>
-    <comment xml:lang="pt_BR">Pacote Lrzip</comment>
+    <comment xml:lang="pt-BR">Pacote Lrzip</comment>
     <comment xml:lang="ro">Arhivă Lrzip</comment>
     <comment xml:lang="ru">Архив LRZIP</comment>
     <comment xml:lang="sk">Archív Lrzip</comment>
@@ -8410,16 +8634,17 @@
     <comment xml:lang="sv">Lrzip-arkiv</comment>
     <comment xml:lang="tr">Lrzip arşivi</comment>
     <comment xml:lang="uk">архів lrzip</comment>
-    <comment xml:lang="zh_CN">Lrzip 归档文件</comment>
-    <comment xml:lang="zh_TW">Lrzip 封存檔</comment>
+    <comment xml:lang="zh-CN">Lrzip 归档文件</comment>
+    <comment xml:lang="zh-TW">Lrzip 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="LRZI" type="string" offset="0"/>
+      <match type="string" value="LRZI" offset="0"/>
     </magic>
     <glob pattern="*.lrz"/>
   </mime-type>
   <mime-type type="application/x-lrzip-compressed-tar">
     <comment>Tar archive (lrzip-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (lrzip-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط-lrzip)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран с lrzip</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió lrzip)</comment>
@@ -8427,17 +8652,18 @@
     <comment xml:lang="da">Tar-arkiv (lrzip-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (lrzip-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο με lrzip)</comment>
-    <comment xml:lang="en_GB">Tar archive (lrzip-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (lrzip-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con lrzip)</comment>
     <comment xml:lang="eu">Tar artxiboa (lrzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (lrzip-pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn (lrzip-stappað)</comment>
     <comment xml:lang="fr">archive tar (compressée lrzip)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun lrzip)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le lrzip)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido con lrzip)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י lrzip)</comment>
     <comment xml:lang="hr">Tar arhiva (lrzip sažeta)</comment>
-    <comment xml:lang="hu">Tar archívum (lrzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">Tar archívum (lrzip tömörítésű)</comment>
     <comment xml:lang="ia">Archivo Tar (comprimite con lrzip)</comment>
     <comment xml:lang="id">Arsip Tar (terkompresi lrzip)</comment>
     <comment xml:lang="it">Archivio tar (compresso con lrzip)</comment>
@@ -8450,17 +8676,17 @@
     <comment xml:lang="oc">archiu tar (compressat lrzip)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja lrzip)</comment>
     <comment xml:lang="pt">arquivo Tar (compressão Lrzip)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado com lrzip)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com lrzip)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată lrzip)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый lrzip)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou lrzip)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou lrzip)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen z lrzip)</comment>
     <comment xml:lang="sr">Тар архива (запакована лрзипом)</comment>
     <comment xml:lang="sv">Tar-arkiv (lrzip-komprimerat)</comment>
     <comment xml:lang="tr">Tar arşivi (lrzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений lrzip)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（lrzip 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (lrzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（lrzip 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (lrzip 格式壓縮)</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="application/x-lrzip"/>
     <glob pattern="*.tar.lrz"/>
@@ -8468,6 +8694,7 @@
   </mime-type>
   <mime-type type="application/x-apple-diskimage">
     <comment>Apple disk image</comment>
+    <comment xml:lang="af">Apple-skyfbeeldlêer</comment>
     <comment xml:lang="ast">Imaxe de discu d'Apple</comment>
     <comment xml:lang="bg">Диск — Apple</comment>
     <comment xml:lang="ca">imatge de disc d'Apple</comment>
@@ -8475,11 +8702,12 @@
     <comment xml:lang="da">Apple-diskaftryk</comment>
     <comment xml:lang="de">Apple-Datenträgerabbild</comment>
     <comment xml:lang="el">Εικόνα δίσκου Apple</comment>
-    <comment xml:lang="en_GB">Apple disk image</comment>
+    <comment xml:lang="en-GB">Apple disk image</comment>
     <comment xml:lang="es">imagen de disco de Apple</comment>
     <comment xml:lang="eu">Apple disko irudia</comment>
     <comment xml:lang="fi">Apple-levytiedosto</comment>
     <comment xml:lang="fr">image disque Apple</comment>
+    <comment xml:lang="fur">imagjin disc Apple</comment>
     <comment xml:lang="ga">íomhá diosca Apple</comment>
     <comment xml:lang="gl">imaxe de disco de Appl</comment>
     <comment xml:lang="he">תמונת כונן Apple</comment>
@@ -8497,7 +8725,7 @@
     <comment xml:lang="oc">imatge disc Apple</comment>
     <comment xml:lang="pl">Obraz dysku Apple</comment>
     <comment xml:lang="pt">imagem de disco Apple</comment>
-    <comment xml:lang="pt_BR">Imagem de disco Apple</comment>
+    <comment xml:lang="pt-BR">Imagem de disco Apple</comment>
     <comment xml:lang="ru">Образ диска Apple Mac OS X</comment>
     <comment xml:lang="sk">Obraz disku Apple</comment>
     <comment xml:lang="sl">Odtis diska Apple</comment>
@@ -8505,23 +8733,26 @@
     <comment xml:lang="sv">Apple-diskavbild</comment>
     <comment xml:lang="tr">Apple disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска Apple</comment>
-    <comment xml:lang="zh_CN">Apple 磁盘映像</comment>
-    <comment xml:lang="zh_TW">Apple 磁碟映像檔</comment>
+    <comment xml:lang="zh-CN">Apple 磁盘映像</comment>
+    <comment xml:lang="zh-TW">Apple 磁碟映像檔</comment>
     <glob pattern="*.dmg"/>
   </mime-type>
   <mime-type type="application/x-raw-disk-image">
     <comment>Raw disk image</comment>
+    <comment xml:lang="af">Rou skyfbeeldlêer</comment>
     <comment xml:lang="ast">Imaxe de discu en bruto</comment>
+    <comment xml:lang="bg">Диск — raw</comment>
     <comment xml:lang="ca">imatge de disc RAW</comment>
     <comment xml:lang="cs">surový obraz disku</comment>
-    <comment xml:lang="da">Rå diskaftryk</comment>
+    <comment xml:lang="da">Raw-diskaftryk</comment>
     <comment xml:lang="de">Rohes Datenträgerabbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα δίσκου</comment>
-    <comment xml:lang="en_GB">Raw disk image</comment>
+    <comment xml:lang="en-GB">Raw disk image</comment>
     <comment xml:lang="es">imagen de disco en bruto</comment>
     <comment xml:lang="eu">Disko gordinaren irudia</comment>
     <comment xml:lang="fi">Raaka levytiedosto</comment>
     <comment xml:lang="fr">image disque Raw</comment>
+    <comment xml:lang="fur">imagjin disc grese</comment>
     <comment xml:lang="ga">Amhíomha diosca</comment>
     <comment xml:lang="gl">Imaxe de disco en bruto</comment>
     <comment xml:lang="he">דמות גולמית של כונן</comment>
@@ -8535,21 +8766,50 @@
     <comment xml:lang="oc">imatge disc Raw</comment>
     <comment xml:lang="pl">Surowy obraz dysku</comment>
     <comment xml:lang="pt">imagem de disco Raw</comment>
-    <comment xml:lang="pt_BR">Imagem bruta de disco</comment>
+    <comment xml:lang="pt-BR">Imagem bruta de disco</comment>
     <comment xml:lang="ru">Необработанный образ диска</comment>
     <comment xml:lang="sk">Obraz disku</comment>
     <comment xml:lang="sl">Surovi odtis diska</comment>
     <comment xml:lang="sr">сиров одраз диска</comment>
     <comment xml:lang="sv">Rå diskavbild</comment>
-    <comment xml:lang="tr">İşlem görmemiş disk imajı</comment>
+    <comment xml:lang="tr">Ham disk görüntüsü</comment>
     <comment xml:lang="uk">простий образ диска</comment>
-    <comment xml:lang="zh_CN">原始磁盘映像</comment>
-    <comment xml:lang="zh_TW">原生磁碟映像檔</comment>
+    <comment xml:lang="zh-CN">原始磁盘映像</comment>
+    <comment xml:lang="zh-TW">原始磁碟映像檔</comment>
     <glob pattern="*.raw-disk-image"/>
     <glob pattern="*.img"/>
   </mime-type>
   <mime-type type="application/x-raw-floppy-disk-image">
     <comment>Floppy disk image</comment>
+    <comment xml:lang="af">Disket-skyfbeeldlêer</comment>
+    <comment xml:lang="bg">Диск — флопи</comment>
+    <comment xml:lang="ca">imatge de disquet</comment>
+    <comment xml:lang="cs">obraz diskety</comment>
+    <comment xml:lang="da">Floppy-diskaftryk</comment>
+    <comment xml:lang="de">Diskettenabbild</comment>
+    <comment xml:lang="en-GB">Floppy disk image</comment>
+    <comment xml:lang="es">imagen de disquete</comment>
+    <comment xml:lang="eu">Diskete disko irudia</comment>
+    <comment xml:lang="fi">Disketin levykuva</comment>
+    <comment xml:lang="fr">image disquette</comment>
+    <comment xml:lang="fur">imagjin disc floppy</comment>
+    <comment xml:lang="ga">íomhá diosca fhlapaigh</comment>
+    <comment xml:lang="hr">Slika diskete</comment>
+    <comment xml:lang="hu">Flopi lemezkép</comment>
+    <comment xml:lang="id">Image disk floppy</comment>
+    <comment xml:lang="it">Immagine disco floppy</comment>
+    <comment xml:lang="kk">Иілгіш диск бейнесі</comment>
+    <comment xml:lang="ko">플로피 디스크 이미지</comment>
+    <comment xml:lang="pl">Obraz dyskietki</comment>
+    <comment xml:lang="pt">imagem da disquete</comment>
+    <comment xml:lang="pt-BR">Imagem de disco flexível</comment>
+    <comment xml:lang="ru">Образ гибкого диска</comment>
+    <comment xml:lang="sk">Obraz pružného disku</comment>
+    <comment xml:lang="sv">Diskettavbild</comment>
+    <comment xml:lang="tr">Disket görüntüsü</comment>
+    <comment xml:lang="uk">образ дискети</comment>
+    <comment xml:lang="zh-CN">软盘映像</comment>
+    <comment xml:lang="zh-TW">Floppy 軟碟映像檔</comment>
     <sub-class-of type="application/x-raw-disk-image"/>
     <alias type="application/x-fd-file"/>
     <glob pattern="*.fd"/>
@@ -8557,22 +8817,25 @@
   </mime-type>
   <mime-type type="application/x-raw-disk-image-xz-compressed">
     <comment>Raw disk image (XZ-compressed)</comment>
+    <comment xml:lang="af">Rou skyfbeeldlêer (XZ-saamgepers)</comment>
     <comment xml:lang="ast">Imaxe de discu en bruto (comprimida en XZ)</comment>
+    <comment xml:lang="bg">Диск — raw, компресиран с xz</comment>
     <comment xml:lang="ca">imatge de disc RAW (amb compressió XZ)</comment>
     <comment xml:lang="cs">surový obraz disku (komprimovaný pomocí XZ)</comment>
-    <comment xml:lang="da">Rå diskaftryk (XZ-komprimeret)</comment>
+    <comment xml:lang="da">Raw-diskaftryk (XZ-komprimeret)</comment>
     <comment xml:lang="de">Rohes Datenträgerabbild (XZ-komprimiert)</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα δίσκου (συμπιεσμένη XZ)</comment>
-    <comment xml:lang="en_GB">Raw disk image (XZ-compressed)</comment>
+    <comment xml:lang="en-GB">Raw disk image (XZ-compressed)</comment>
     <comment xml:lang="es">imagen de disco en bruto (comprimida con XZ)</comment>
     <comment xml:lang="eu">Disko gordinaren irudia (XZ-rekin konprimitua)</comment>
     <comment xml:lang="fi">Raaka levytiedosto (XZ-pakattu)</comment>
     <comment xml:lang="fr">image disque Raw (compression XZ)</comment>
+    <comment xml:lang="fur">imagjin disc grese (comprimude cun XZ)</comment>
     <comment xml:lang="ga">Amhíomhá (comhbhrúite le XZ)</comment>
     <comment xml:lang="gl">Imaxe de disco en bruto (comprimida en XZ)</comment>
     <comment xml:lang="he">דמות גולמית של כונן (בדחיסת XZ)</comment>
     <comment xml:lang="hr">Osnovna slika diska (XZ sažeta)</comment>
-    <comment xml:lang="hu">Nyers lemezkép (XZ-vel tömörítve)</comment>
+    <comment xml:lang="hu">Nyers lemezkép (XZ tömörítésű)</comment>
     <comment xml:lang="ia">Imagine de disco crude (comprimite con XZ)</comment>
     <comment xml:lang="id">Image disk mentah (terkompresi XZ)</comment>
     <comment xml:lang="it">Immagine disco raw (compressa XZ)</comment>
@@ -8581,38 +8844,40 @@
     <comment xml:lang="oc">imatge disc Raw (compression XZ)</comment>
     <comment xml:lang="pl">Surowy obraz dysku (kompresja XZ)</comment>
     <comment xml:lang="pt">imagem de disco Raw (compressão XZ)</comment>
-    <comment xml:lang="pt_BR">Imagem bruta de disco (compactada com XZ)</comment>
+    <comment xml:lang="pt-BR">Imagem bruta de disco (compactada com XZ)</comment>
     <comment xml:lang="ru">Необработанный образ диска (сжатый xz)</comment>
     <comment xml:lang="sk">Obraz disku (komprimovaný pomocou XZ)</comment>
     <comment xml:lang="sl">Surovi odtis diska (stisnjeno z XZ)</comment>
     <comment xml:lang="sr">сиров одраз диска (запакована ИксЗ-ом)</comment>
     <comment xml:lang="sv">Rå diskavbild (XZ-komprimerad)</comment>
-    <comment xml:lang="tr">İşlem görmemiş disk imajı (XZ ile sıkıştırılmış)</comment>
+    <comment xml:lang="tr">Ham disk görüntüsü (XZ ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">простий образ диска (стиснений XZ)</comment>
-    <comment xml:lang="zh_CN">原始磁盘映像（XZ 压缩）</comment>
-    <comment xml:lang="zh_TW">原生磁碟映像 (XZ 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">原始磁盘映像（XZ 压缩）</comment>
+    <comment xml:lang="zh-TW">原始磁碟映像檔 (XZ 壓縮)</comment>
     <sub-class-of type="application/x-xz"/>
     <glob pattern="*.raw-disk-image.xz"/>
     <glob pattern="*.img.xz"/>
   </mime-type>
   <mime-type type="application/x-cd-image">
     <comment>raw CD image</comment>
+    <comment xml:lang="af">rou CD-beeldlêer</comment>
     <comment xml:lang="ar">صورة CD خامة</comment>
     <comment xml:lang="ast">imaxe de CD en bruto</comment>
-    <comment xml:lang="be@latin">suvoraja vyjava CD</comment>
-    <comment xml:lang="bg">Изображение — raw CD</comment>
+    <comment xml:lang="be-Latn">suvoraja vyjava CD</comment>
+    <comment xml:lang="bg">Диск — raw CD</comment>
     <comment xml:lang="ca">imatge de CD en cru</comment>
     <comment xml:lang="cs">surový obraz CD</comment>
-    <comment xml:lang="da">rå cd-aftryk</comment>
+    <comment xml:lang="da">raw cd-aftryk</comment>
     <comment xml:lang="de">CD-Roh-Abbild</comment>
     <comment xml:lang="el">Εικόνα περιεχομένου ψηφιακού δίσκου</comment>
-    <comment xml:lang="en_GB">raw CD image</comment>
+    <comment xml:lang="en-GB">raw CD image</comment>
     <comment xml:lang="eo">kruda lumdiskbildo</comment>
     <comment xml:lang="es">imagen de CD en bruto</comment>
     <comment xml:lang="eu">CD gordinaren irudia </comment>
     <comment xml:lang="fi">raaka CD-vedos</comment>
     <comment xml:lang="fo">rá CD mynd</comment>
     <comment xml:lang="fr">image CD brute</comment>
+    <comment xml:lang="fur">imagjin CD grese</comment>
     <comment xml:lang="ga">amhíomhá dhlúthdhiosca</comment>
     <comment xml:lang="gl">imaxe de CD en bruto</comment>
     <comment xml:lang="he">תמונת דיסק גולמית</comment>
@@ -8633,7 +8898,7 @@
     <comment xml:lang="oc">imatge CD brut</comment>
     <comment xml:lang="pl">Surowy obraz CD</comment>
     <comment xml:lang="pt">imagem em bruto de CD</comment>
-    <comment xml:lang="pt_BR">Imagem bruta de CD</comment>
+    <comment xml:lang="pt-BR">Imagem bruta de CD</comment>
     <comment xml:lang="ro">imagine de CD brută</comment>
     <comment xml:lang="ru">Необработанный образ компакт-диска</comment>
     <comment xml:lang="sk">Surový obraz CD</comment>
@@ -8641,48 +8906,64 @@
     <comment xml:lang="sq">Imazh raw CD</comment>
     <comment xml:lang="sr">сиров одраз ЦД-а</comment>
     <comment xml:lang="sv">rå cd-avbild</comment>
-    <comment xml:lang="tr">Ham CD görüntüsü</comment>
+    <comment xml:lang="tr">ham CD görüntüsü</comment>
     <comment xml:lang="uk">образ raw CD</comment>
     <comment xml:lang="vi">ảnh đĩa CD thô</comment>
-    <comment xml:lang="zh_CN">原始 CD 映像</comment>
-    <comment xml:lang="zh_TW">原生 CD 映像檔</comment>
+    <comment xml:lang="zh-CN">原始 CD 映像</comment>
+    <comment xml:lang="zh-TW">原生 CD 映像檔</comment>
     <sub-class-of type="application/x-raw-disk-image"/>
     <alias type="application/x-iso9660-image"/>
-    
-    <glob weight="80" pattern="*.iso"/>
+    <!-- No magic, see https://bugs.freedesktop.org/show_bug.cgi?id=10049 -->
+    <glob pattern="*.iso" weight="80"/>
     <glob pattern="*.iso9660"/>
   </mime-type>
+  <mime-type type="application/x-compressed-iso">
+    <comment>Compressed CD image</comment>
+    <comment xml:lang="ca">imatge de CD amb compressió</comment>
+    <comment xml:lang="fi">Pakattu CD-levykuva</comment>
+    <comment xml:lang="it">Immagine CD compressa</comment>
+    <comment xml:lang="pl">Skompresowany obraz płyty CD</comment>
+    <comment xml:lang="uk">стиснений образ CD</comment>
+    <magic priority="50">
+      <match value="CISO" type="string" offset="0"/>
+    </magic>
+    <glob pattern="*.cso"/>
+  </mime-type>
   <mime-type type="application/x-iso9660-appimage">
     <comment>AppImage application bundle</comment>
+    <comment xml:lang="af">AppImage-toepassingsbundel</comment>
+    <comment xml:lang="bg">Програмен пакет — AppImage</comment>
     <comment xml:lang="ca">paquet d'aplicació AppImage</comment>
     <comment xml:lang="cs">balíček AppImage s aplikací</comment>
-    <comment xml:lang="da">Applmage-programsamling</comment>
+    <comment xml:lang="da">AppImage-programsamling</comment>
     <comment xml:lang="de">AppImage-Anwendungspaket</comment>
-    <comment xml:lang="en_GB">AppImage application bundle</comment>
+    <comment xml:lang="en-GB">AppImage application bundle</comment>
     <comment xml:lang="es">paquete de aplicación AppImage</comment>
     <comment xml:lang="eu">AppImage aplikazio bilduma</comment>
     <comment xml:lang="fi">AppImage-sovelluspaketti</comment>
     <comment xml:lang="fr">lot applicatif AppImage</comment>
+    <comment xml:lang="fur">côl di aplicazions AppImage</comment>
     <comment xml:lang="ga">burla feidhmchláir AppImage</comment>
     <comment xml:lang="he">חבילת יישומי AppImage</comment>
     <comment xml:lang="hr">AppImage paket aplikacije</comment>
     <comment xml:lang="hu">AppImage alkalmazáscsomag</comment>
-    <comment xml:lang="id">bundel aplikasi AppImage</comment>
+    <comment xml:lang="id">Bundel aplikasi AppImage</comment>
     <comment xml:lang="it">Bundle applicazione AppImage</comment>
     <comment xml:lang="kk">AppImage қолданбалар дестесі</comment>
     <comment xml:lang="ko">AppImage 프로그램 번들</comment>
     <comment xml:lang="pl">Pakiet programu AppImage</comment>
-    <comment xml:lang="pt_BR">Pacote de aplicativo AppImage</comment>
+    <comment xml:lang="pt">pacote de aplicação AppImage</comment>
+    <comment xml:lang="pt-BR">Pacote de aplicativo AppImage</comment>
     <comment xml:lang="ru">Пакет приложения AppImage</comment>
     <comment xml:lang="sk">Balík aplikácií AppImage</comment>
     <comment xml:lang="sr">скуп програма Ап-слике</comment>
     <comment xml:lang="sv">AppImage-programbunt</comment>
     <comment xml:lang="tr">AppImage uygulama paketi</comment>
     <comment xml:lang="uk">пакунок із програмами AppImage</comment>
-    <comment xml:lang="zh_CN">AppImage 应用组合包</comment>
-    <comment xml:lang="zh_TW">AppImage 應用程式套組</comment>
+    <comment xml:lang="zh-CN">AppImage 应用组合包</comment>
+    <comment xml:lang="zh-TW">AppImage 應用程式套組</comment>
     <sub-class-of type="application/x-executable"/>
-    <sub-class-of type="application/x-iso9660-image"/>
+    <sub-class-of type="application/x-cd-image"/>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
       <match value="ELF" type="string" offset="1">
@@ -8697,20 +8978,22 @@
   </mime-type>
   <mime-type type="application/x-cdrdao-toc">
     <comment>CD Table Of Contents</comment>
+    <comment xml:lang="af">CD-inhoudsopgawe</comment>
     <comment xml:lang="ar">جدول محتويات الـ CD</comment>
-    <comment xml:lang="be@latin">Źmieściva CD</comment>
+    <comment xml:lang="be-Latn">Źmieściva CD</comment>
     <comment xml:lang="bg">Съдържание на CD</comment>
     <comment xml:lang="ca">taula de continguts de CD</comment>
     <comment xml:lang="cs">obsah CD</comment>
-    <comment xml:lang="da">Cd-indholdsfotegnelse</comment>
+    <comment xml:lang="da">Cd-indholdsfortegnelse</comment>
     <comment xml:lang="de">CD-Inhaltsverzeichnis</comment>
     <comment xml:lang="el">Πίνακας περιεχομένων CD</comment>
-    <comment xml:lang="en_GB">CD Table Of Contents</comment>
+    <comment xml:lang="en-GB">CD Table Of Contents</comment>
     <comment xml:lang="es">índice de contenido de CD</comment>
     <comment xml:lang="eu">CDaren edukien aurkibidea</comment>
     <comment xml:lang="fi">CD-sisällysluettelo</comment>
     <comment xml:lang="fo">CD innihaldsyvurlit</comment>
     <comment xml:lang="fr">table des matières de CD</comment>
+    <comment xml:lang="fur">tabele dai contignûts di CD</comment>
     <comment xml:lang="ga">clár ábhar dlúthdhiosca</comment>
     <comment xml:lang="gl">táboa de contidos de CD</comment>
     <comment xml:lang="he">תוכן עניינים של דיסק</comment>
@@ -8730,7 +9013,7 @@
     <comment xml:lang="oc">ensenhador de CD</comment>
     <comment xml:lang="pl">Plik zawartości płyty CD</comment>
     <comment xml:lang="pt">Tabela de conteúdos de CD</comment>
-    <comment xml:lang="pt_BR">Sumário de CD</comment>
+    <comment xml:lang="pt-BR">Sumário de CD</comment>
     <comment xml:lang="ro">Tabel conținut CD</comment>
     <comment xml:lang="ru">Таблица содержания CD</comment>
     <comment xml:lang="sk">Obsah CD</comment>
@@ -8741,37 +9024,64 @@
     <comment xml:lang="tr">CD İçindekiler Tablosu</comment>
     <comment xml:lang="uk">зміст CD</comment>
     <comment xml:lang="vi">Mục Lục của đĩa CD</comment>
-    <comment xml:lang="zh_CN">CD 索引</comment>
-    <comment xml:lang="zh_TW">CD 內容目錄</comment>
+    <comment xml:lang="zh-CN">CD 索引</comment>
+    <comment xml:lang="zh-TW">CD 內容目錄</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="CD_ROM\n" type="string" offset="0"/>
-      <match value="CD_DA\n" type="string" offset="0"/>
-      <match value="CD_ROM_XA\n" type="string" offset="0"/>
-      <match value="CD_TEXT " type="string" offset="0"/>
-      <match value="CATALOG &quot;" type="string" offset="0">
-        <match value="&quot;" type="string" offset="22"/>
+      <match type="string" value="CD_ROM\n" offset="0"/>
+      <match type="string" value="CD_DA\n" offset="0"/>
+      <match type="string" value="CD_ROM_XA\n" offset="0"/>
+      <match type="string" value="CD_TEXT " offset="0"/>
+      <match type="string" value="CATALOG &quot;" offset="0">
+        <match type="string" value="&quot;" offset="22"/>
       </match>
     </magic>
     <glob pattern="*.toc"/>
   </mime-type>
+  <mime-type type="application/x-gd-rom-cue">
+    <comment>GD-ROM image cuesheet</comment>
+    <comment xml:lang="ca">«cuesheet» d'imatge de GD-ROM</comment>
+    <comment xml:lang="fi">GD-ROM levykuvan taulukko</comment>
+    <comment xml:lang="it">Cuesheet immagine GD-ROM</comment>
+    <comment xml:lang="pl">Obraz cuesheet płyty GD-ROM</comment>
+    <comment xml:lang="uk">таблиця CUE образу GD-ROM</comment>
+    <!-- It is a non-standard cuesheet used only for Dreamcast GD-ROM images, it
+         is typically surrounded by the .bin and .raw files it lists, each one
+         matching a disc track.
+         The first file should have the application/x-dreamcast-rom type. -->
+    <sub-class-of type="text/plain"/>
+    <generic-icon name="text-x-generic"/>
+    <glob pattern="*.gdi"/>
+  </mime-type>
+  <mime-type type="application/x-discjuggler-cd-image">
+    <comment>Padus DiscJuggler CD image</comment>
+    <comment xml:lang="ca">imatge de CD de Padus DiscJuggler</comment>
+    <comment xml:lang="fi">Padus DiscJuggler CD-levykuva</comment>
+    <comment xml:lang="it">Immagine CD DiscJuggler Padus</comment>
+    <comment xml:lang="pl">Obraz płyty CD programu Padus DiscJuggler</comment>
+    <comment xml:lang="pt-BR">Imagem de CD do Padus DiscJuggler</comment>
+    <comment xml:lang="uk">образ CD Padus DiscJuggler</comment>
+    <glob pattern="*.cdi"/>
+  </mime-type>
   <mime-type type="application/vnd.chess-pgn">
     <comment>PGN chess game notation</comment>
+    <comment xml:lang="af">PGN-skaakspelnotasie</comment>
     <comment xml:lang="ar">تدوينة لعبة الشطرنج PGN</comment>
-    <comment xml:lang="be@latin">Zaciem ab šachmatnaj partyi PGN</comment>
+    <comment xml:lang="be-Latn">Zaciem ab šachmatnaj partyi PGN</comment>
     <comment xml:lang="bg">Игра шах — PGN</comment>
     <comment xml:lang="ca">notació de joc d'escacs PGN</comment>
     <comment xml:lang="cs">šachová notace PGN</comment>
     <comment xml:lang="da">PGN-skakspilsnotation</comment>
     <comment xml:lang="de">PGN-Schachspielnotation</comment>
     <comment xml:lang="el">Σημειογραφία παιχνιδιού σκακιού PGN</comment>
-    <comment xml:lang="en_GB">PGN chess game notation</comment>
+    <comment xml:lang="en-GB">PGN chess game notation</comment>
     <comment xml:lang="es">notación para juegos de ajedrez PGN</comment>
     <comment xml:lang="eu">PGN xake jokoaren notazioa</comment>
     <comment xml:lang="fi">PGN-šakkipelinotaatio</comment>
     <comment xml:lang="fo">PGN talv teknskipan</comment>
     <comment xml:lang="fr">notation de jeu d'échecs PGN</comment>
+    <comment xml:lang="fur">notazion par zûc di scacs PGN</comment>
     <comment xml:lang="ga">nodaireacht chluiche ficheall PGN</comment>
     <comment xml:lang="gl">Notación de xogo de xadrez PGN</comment>
     <comment xml:lang="he">סימון משחק שח PGN</comment>
@@ -8791,7 +9101,7 @@
     <comment xml:lang="oc">notacion de jòc d'escacs PGN</comment>
     <comment xml:lang="pl">Plik PGN notacji gry w szachy</comment>
     <comment xml:lang="pt">notação de jogo de xadrez PGN</comment>
-    <comment xml:lang="pt_BR">Notação de jogo de xadrez PGN</comment>
+    <comment xml:lang="pt-BR">Notação de jogo de xadrez PGN</comment>
     <comment xml:lang="ro">Notație joc șah PGN</comment>
     <comment xml:lang="ru">Шахматная партия PGN</comment>
     <comment xml:lang="sk">Šachová notácia PGN</comment>
@@ -8802,36 +9112,38 @@
     <comment xml:lang="tr">PGN satranç oyun gösterimi</comment>
     <comment xml:lang="uk">запис гри у шахи PGN</comment>
     <comment xml:lang="vi">Cách ghi lượt chơi cờ PGN</comment>
-    <comment xml:lang="zh_CN">PGN 象棋游戏注记</comment>
-    <comment xml:lang="zh_TW">PGN 國際象棋棋譜</comment>
+    <comment xml:lang="zh-CN">PGN 象棋游戏注记</comment>
+    <comment xml:lang="zh-TW">PGN 國際象棋棋譜</comment>
     <acronym>PGN</acronym>
     <expanded-acronym>Portable Game Notation</expanded-acronym>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.pgn"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="[Event " type="string" offset="0"/>
+      <match type="string" value="[Event " offset="0"/>
     </magic>
     <alias type="application/x-chess-pgn"/>
   </mime-type>
   <mime-type type="application/vnd.ms-htmlhelp">
     <comment>CHM document</comment>
+    <comment xml:lang="af">CHM-dokument</comment>
     <comment xml:lang="ar">مستند CHM</comment>
     <comment xml:lang="ast">Documentu CHM</comment>
-    <comment xml:lang="be@latin">Dakument CHM</comment>
+    <comment xml:lang="be-Latn">Dakument CHM</comment>
     <comment xml:lang="bg">Документ — CHM</comment>
     <comment xml:lang="ca">document CHM</comment>
     <comment xml:lang="cs">dokument CHM</comment>
     <comment xml:lang="da">CHM-dokument</comment>
     <comment xml:lang="de">CHM-Dokument</comment>
     <comment xml:lang="el">Έγγραφο CHM</comment>
-    <comment xml:lang="en_GB">CHM document</comment>
+    <comment xml:lang="en-GB">CHM document</comment>
     <comment xml:lang="eo">CHM-dokumento</comment>
     <comment xml:lang="es">documento CHM</comment>
     <comment xml:lang="eu">CHM dokumentua</comment>
     <comment xml:lang="fi">CHM-asiakirja</comment>
     <comment xml:lang="fo">CHM skjal</comment>
     <comment xml:lang="fr">document CHM</comment>
+    <comment xml:lang="fur">document CHM</comment>
     <comment xml:lang="ga">cáipéis CHM</comment>
     <comment xml:lang="gl">documento CHM</comment>
     <comment xml:lang="he">מסמך CHM</comment>
@@ -8852,7 +9164,7 @@
     <comment xml:lang="oc">document CHM</comment>
     <comment xml:lang="pl">Dokument CHM</comment>
     <comment xml:lang="pt">documento CHM</comment>
-    <comment xml:lang="pt_BR">Documento CHM</comment>
+    <comment xml:lang="pt-BR">Documento CHM</comment>
     <comment xml:lang="ro">Document CHM</comment>
     <comment xml:lang="ru">Документ CHM</comment>
     <comment xml:lang="sk">Dokument CHM</comment>
@@ -8863,8 +9175,8 @@
     <comment xml:lang="tr">CHM belgesi</comment>
     <comment xml:lang="uk">документ CHM</comment>
     <comment xml:lang="vi">Tài liệu CHM</comment>
-    <comment xml:lang="zh_CN">CHM 文档</comment>
-    <comment xml:lang="zh_TW">CHM 文件</comment>
+    <comment xml:lang="zh-CN">CHM 文档</comment>
+    <comment xml:lang="zh-TW">CHM 文件</comment>
     <acronym>CHM</acronym>
     <expanded-acronym>Compiled Help Modules</expanded-acronym>
     <generic-icon name="x-office-document"/>
@@ -8873,23 +9185,25 @@
   </mime-type>
   <mime-type type="application/x-class-file">
     <comment>Java byte code</comment>
+    <comment xml:lang="af">Java binêre kode</comment>
     <comment xml:lang="ar">رمز بايت الـJava</comment>
     <comment xml:lang="az">Java bayt kodu</comment>
-    <comment xml:lang="be@latin">Bajtavy kod Java</comment>
+    <comment xml:lang="be-Latn">Bajtavy kod Java</comment>
     <comment xml:lang="bg">Байт код за Java</comment>
-    <comment xml:lang="ca">Bytecode de Java</comment>
+    <comment xml:lang="ca">bytecode de Java</comment>
     <comment xml:lang="cs">bajtový kód Java</comment>
     <comment xml:lang="cy">Côd beit Java</comment>
-    <comment xml:lang="da">Javabytekode</comment>
+    <comment xml:lang="da">Java-bytekode</comment>
     <comment xml:lang="de">Java-Bytecode</comment>
     <comment xml:lang="el">Συμβολοκώδικας Java</comment>
-    <comment xml:lang="en_GB">Java byte code</comment>
+    <comment xml:lang="en-GB">Java byte code</comment>
     <comment xml:lang="eo">Java-bajtkodo</comment>
     <comment xml:lang="es">bytecode de Java</comment>
     <comment xml:lang="eu">Java byte-kodea</comment>
     <comment xml:lang="fi">Java-tavukoodi</comment>
     <comment xml:lang="fo">Java býtkota</comment>
     <comment xml:lang="fr">code Java binaire</comment>
+    <comment xml:lang="fur">bytecode di Java</comment>
     <comment xml:lang="ga">beartchód Java</comment>
     <comment xml:lang="gl">byte code de Java</comment>
     <comment xml:lang="he">קוד Java byte</comment>
@@ -8910,7 +9224,7 @@
     <comment xml:lang="oc">còde Java binari</comment>
     <comment xml:lang="pl">Kod bajtowy Java</comment>
     <comment xml:lang="pt">byte-code Java</comment>
-    <comment xml:lang="pt_BR">Código compilado Java</comment>
+    <comment xml:lang="pt-BR">Código compilado Java</comment>
     <comment xml:lang="ro">Bytecode Java</comment>
     <comment xml:lang="ru">Байт-код Java</comment>
     <comment xml:lang="sk">Bajtový kód Java</comment>
@@ -8921,31 +9235,33 @@
     <comment xml:lang="tr">Java derlenmiş kodu</comment>
     <comment xml:lang="uk">Байт-код Java</comment>
     <comment xml:lang="vi">Mã byte Java</comment>
-    <comment xml:lang="zh_CN">Java 字节码</comment>
-    <comment xml:lang="zh_TW">Java 位元組碼</comment>
+    <comment xml:lang="zh-CN">Java 字节码</comment>
+    <comment xml:lang="zh-TW">Java 位元組碼</comment>
   </mime-type>
   <mime-type type="application/x-compress">
     <comment>UNIX-compressed file</comment>
+    <comment xml:lang="af">UNIX-saamgepersde lêer</comment>
     <comment xml:lang="ar">ملف يونكس-مضغوط</comment>
-    <comment xml:lang="be@latin">Skampresavany UNIX-fajł</comment>
+    <comment xml:lang="be-Latn">Skampresavany UNIX-fajł</comment>
     <comment xml:lang="bg">Файл — компресиран за UNIX</comment>
     <comment xml:lang="ca">fitxer amb compressió UNIX</comment>
     <comment xml:lang="cs">soubor komprimovaný v Unixu</comment>
     <comment xml:lang="da">UNIX-komprimeret fil</comment>
     <comment xml:lang="de">UNIX-komprimierte Datei</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο UNIX</comment>
-    <comment xml:lang="en_GB">UNIX-compressed file</comment>
+    <comment xml:lang="en-GB">UNIX-compressed file</comment>
     <comment xml:lang="eo">UNIX-kunpremita dosiero</comment>
     <comment xml:lang="es">archivo comprimido de Unix</comment>
     <comment xml:lang="eu">UNIX-en konprimitutako fitxategia</comment>
     <comment xml:lang="fi">UNIX-pakattu tiedosto</comment>
     <comment xml:lang="fo">UNIX-stappað fíla</comment>
     <comment xml:lang="fr">fichier compressé UNIX</comment>
+    <comment xml:lang="fur">file comprimût di UNIX</comment>
     <comment xml:lang="ga">comhad UNIX-comhbhrúite</comment>
     <comment xml:lang="gl">ficheiro comprimido de UNIX</comment>
     <comment xml:lang="he">קובץ בכיווץ UNIX</comment>
     <comment xml:lang="hr">UNIX sažeta datoteka</comment>
-    <comment xml:lang="hu">Tömörített UNIX-fájl</comment>
+    <comment xml:lang="hu">UNIX tömörítésű fájl</comment>
     <comment xml:lang="ia">File comprimite de UNIX</comment>
     <comment xml:lang="id">Berkas terkompresi UNIX</comment>
     <comment xml:lang="it">File compresso-UNIX</comment>
@@ -8961,7 +9277,7 @@
     <comment xml:lang="oc">fichièr compressat UNIX</comment>
     <comment xml:lang="pl">Skompresowany plik systemu UNIX</comment>
     <comment xml:lang="pt">ficheiro comprimido UNIX</comment>
-    <comment xml:lang="pt_BR">Arquivo compactado do UNIX</comment>
+    <comment xml:lang="pt-BR">Arquivo compactado do UNIX</comment>
     <comment xml:lang="ro">Fișier comprimat UNIX</comment>
     <comment xml:lang="ru">Файл (UNIX-сжатый)</comment>
     <comment xml:lang="sk">Súbor komprimovaný v Unixe</comment>
@@ -8972,35 +9288,37 @@
     <comment xml:lang="tr">UNIX-sıkıştırılmış dosyası</comment>
     <comment xml:lang="uk">стиснений файл UNIX</comment>
     <comment xml:lang="vi">Tập tin đã nén UNIX</comment>
-    <comment xml:lang="zh_CN">UNIX 压缩文件</comment>
-    <comment xml:lang="zh_TW">UNIX 格式壓縮檔</comment>
+    <comment xml:lang="zh-CN">UNIX 压缩文件</comment>
+    <comment xml:lang="zh-TW">UNIX 壓縮檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="\037\235" type="string" offset="0"/>
+      <match type="string" value="\037\235" offset="0"/>
     </magic>
     <glob pattern="*.Z"/>
   </mime-type>
   <mime-type type="application/x-compressed-tar">
     <comment>Tar archive (gzip-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (gzip-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط-gzip)</comment>
-    <comment xml:lang="be@latin">Archiŭ tar (gzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Archiŭ tar (gzip-skampresavany)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран с gzip</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió gzip)</comment>
     <comment xml:lang="cs">archiv tar (komprimovaný pomocí gzip)</comment>
     <comment xml:lang="da">Tar-arkiv (gzip-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (gzip-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο με gzip)</comment>
-    <comment xml:lang="en_GB">Tar archive (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (gzip-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con gzip)</comment>
     <comment xml:lang="eu">Tar artxiboa (gzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (gzip-pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn (gzip-stappað)</comment>
     <comment xml:lang="fr">archive tar (compressée gzip)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun gzip)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido con gzip)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י gzip)</comment>
     <comment xml:lang="hr">Tar arhiva (gzip sažeta)</comment>
-    <comment xml:lang="hu">Tar archívum (gzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">Tar archívum (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Archivo Tar (comprimite con gzip)</comment>
     <comment xml:lang="id">Arsip Tar (terkompresi gzip)</comment>
     <comment xml:lang="it">Archivio tar (compresso con gzip)</comment>
@@ -9015,10 +9333,10 @@
     <comment xml:lang="oc">archiu tar (compressat gzip)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja gzip)</comment>
     <comment xml:lang="pt">arquivo Tar (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado com gzip)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com gzip)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată gzip)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый gzip)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou gzip)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou gzip)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen z gzip)</comment>
     <comment xml:lang="sq">Arkiv tar (i kompresuar me gzip)</comment>
     <comment xml:lang="sr">Тар архива (запакована гзипом)</comment>
@@ -9026,8 +9344,8 @@
     <comment xml:lang="tr">Tar arşivi (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений gzip)</comment>
     <comment xml:lang="vi">Kho nén tar (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.tar.gz"/>
@@ -9035,21 +9353,23 @@
   </mime-type>
   <mime-type type="application/x-core">
     <comment>program crash data</comment>
+    <comment xml:lang="af">programomvaldata</comment>
     <comment xml:lang="ar">معلومات انهيار البرنامج</comment>
-    <comment xml:lang="be@latin">źviestki złamanaj prahramy</comment>
+    <comment xml:lang="be-Latn">źviestki złamanaj prahramy</comment>
     <comment xml:lang="bg">Данни от забиване на програма</comment>
     <comment xml:lang="ca">dades de fallada de programa</comment>
     <comment xml:lang="cs">data o pádu programu</comment>
     <comment xml:lang="da">programnedbrudsdata</comment>
     <comment xml:lang="de">Daten zu Programmabsturz</comment>
     <comment xml:lang="el">δεδομένα από την κατάρρευση προγράμματος</comment>
-    <comment xml:lang="en_GB">program crash data</comment>
+    <comment xml:lang="en-GB">program crash data</comment>
     <comment xml:lang="eo">datumo pri kraŝo de programo</comment>
     <comment xml:lang="es">datos de cuelgue de programa</comment>
     <comment xml:lang="eu">programaren kraskaduraren datuak</comment>
     <comment xml:lang="fi">ohjelman kaatumistiedot</comment>
     <comment xml:lang="fo">forrits sordáta</comment>
     <comment xml:lang="fr">données de plantage de programme</comment>
+    <comment xml:lang="fur">dâts di colàs di program</comment>
     <comment xml:lang="ga">sonraí tuairte ríomhchláir</comment>
     <comment xml:lang="gl">datos de colgue do programa</comment>
     <comment xml:lang="he">מידע מקריסת תכנית</comment>
@@ -9070,7 +9390,7 @@
     <comment xml:lang="oc">donadas de plantage de programa</comment>
     <comment xml:lang="pl">Dane awarii programu</comment>
     <comment xml:lang="pt">dados de rebentamento de aplicação</comment>
-    <comment xml:lang="pt_BR">Dados de travamento de programa</comment>
+    <comment xml:lang="pt-BR">Dados de travamento de programa</comment>
     <comment xml:lang="ro">date eroare program</comment>
     <comment xml:lang="ru">Данные аварийного завершения программы</comment>
     <comment xml:lang="sk">Údaje o páde programu</comment>
@@ -9081,31 +9401,32 @@
     <comment xml:lang="tr">program çökme verisi</comment>
     <comment xml:lang="uk">аварійні дані про програму</comment>
     <comment xml:lang="vi">dữ liệu sụp đổ chương trình</comment>
-    <comment xml:lang="zh_CN">程序崩溃数据</comment>
-    <comment xml:lang="zh_TW">程式當掉資料</comment>
+    <comment xml:lang="zh-CN">程序崩溃数据</comment>
+    <comment xml:lang="zh-TW">程式當掉資料</comment>
     <magic priority="50">
-      <match value="\177ELF            \004" type="string" offset="0" mask="0xffffffff000000000000000000000000ff"/>
-      <match value="\177ELF" type="string" offset="0">
-        <match value="1" type="byte" offset="5">
-          <match value="4" type="little16" offset="16"/>
+      <match type="string" mask="0xffffffff000000000000000000000000ff" value="\177ELF            \004" offset="0"/>
+      <match type="string" value="\177ELF" offset="0">
+        <match type="byte" value="1" offset="5">
+          <match type="little16" value="4" offset="16"/>
         </match>
       </match>
-      <match value="\177ELF" type="string" offset="0">
-        <match value="2" type="byte" offset="5">
-          <match value="4" type="big16" offset="16"/>
+      <match type="string" value="\177ELF" offset="0">
+        <match type="byte" value="2" offset="5">
+          <match type="big16" value="4" offset="16"/>
         </match>
       </match>
-      <match value="Core\001" type="string" offset="0"/>
-      <match value="Core\002" type="string" offset="0"/>
+      <match type="string" value="Core\001" offset="0"/>
+      <match type="string" value="Core\002" offset="0"/>
     </magic>
     <glob pattern="core" case-sensitive="true"/>
   </mime-type>
   <mime-type type="application/x-cpio">
     <comment>CPIO archive</comment>
+    <comment xml:lang="af">CPIO-argief</comment>
     <comment xml:lang="ar">أرشيف CPIO</comment>
     <comment xml:lang="ast">Archivu CPIO</comment>
     <comment xml:lang="az">CPIO arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ CPIO</comment>
+    <comment xml:lang="be-Latn">Archiŭ CPIO</comment>
     <comment xml:lang="bg">Архив — CPIO</comment>
     <comment xml:lang="ca">arxiu CPIO</comment>
     <comment xml:lang="cs">archiv CPIO</comment>
@@ -9113,13 +9434,14 @@
     <comment xml:lang="da">CPIO-arkiv</comment>
     <comment xml:lang="de">CPIO-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο CPIO</comment>
-    <comment xml:lang="en_GB">CPIO archive</comment>
+    <comment xml:lang="en-GB">CPIO archive</comment>
     <comment xml:lang="eo">CPIO-arkivo</comment>
     <comment xml:lang="es">archivador CPIO</comment>
     <comment xml:lang="eu">CPIO artxiboa</comment>
     <comment xml:lang="fi">CPIO-arkisto</comment>
     <comment xml:lang="fo">CPIO skjalasavn</comment>
     <comment xml:lang="fr">archive CPIO</comment>
+    <comment xml:lang="fur">archivi CPIO</comment>
     <comment xml:lang="ga">cartlann CPIO</comment>
     <comment xml:lang="gl">arquivo CPIO</comment>
     <comment xml:lang="he">ארכיון CPIO</comment>
@@ -9141,7 +9463,7 @@
     <comment xml:lang="oc">archiu CPIO</comment>
     <comment xml:lang="pl">Archiwum CPIO</comment>
     <comment xml:lang="pt">arquivo CPIO</comment>
-    <comment xml:lang="pt_BR">Pacote CPIO</comment>
+    <comment xml:lang="pt-BR">Pacote CPIO</comment>
     <comment xml:lang="ro">Arhivă CPIO</comment>
     <comment xml:lang="ru">Архив CPIO</comment>
     <comment xml:lang="sk">Archív CPIO</comment>
@@ -9152,22 +9474,23 @@
     <comment xml:lang="tr">CPIO arşivi</comment>
     <comment xml:lang="uk">архів CPIO</comment>
     <comment xml:lang="vi">Kho nén CPIO</comment>
-    <comment xml:lang="zh_CN">CPIO 归档文件</comment>
-    <comment xml:lang="zh_TW">CPIO 封存檔</comment>
+    <comment xml:lang="zh-CN">CPIO 归档文件</comment>
+    <comment xml:lang="zh-TW">CPIO 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="070707" type="host16" offset="0"/>
-      <match value="070701" type="string" offset="0"/>
-      <match value="070702" type="string" offset="0"/>
-      <match value="0143561" type="host16" offset="0"/>
+      <match type="host16" value="070707" offset="0"/>
+      <match type="string" value="070701" offset="0"/>
+      <match type="string" value="070702" offset="0"/>
+      <match type="host16" value="0143561" offset="0"/>
     </magic>
     <glob pattern="*.cpio"/>
   </mime-type>
   <mime-type type="application/x-cpio-compressed">
     <comment>CPIO archive (gzip-compressed)</comment>
+    <comment xml:lang="af">CPIO-argief (gzip-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف CPIO (مضغوط-gzip)</comment>
     <comment xml:lang="az">CPIO arxivi (gzip ilə sıxışdırılmış)</comment>
-    <comment xml:lang="be@latin">Archiŭ CPIO (gzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Archiŭ CPIO (gzip-skampresavany)</comment>
     <comment xml:lang="bg">Архив — CPIO, компресиран с gzip</comment>
     <comment xml:lang="ca">arxiu CPIO (amb compressió gzip)</comment>
     <comment xml:lang="cs">archiv CPIO (komprimovaný pomocí gzip)</comment>
@@ -9175,18 +9498,19 @@
     <comment xml:lang="da">CPIO-arkiv (gzip-komprimeret)</comment>
     <comment xml:lang="de">CPIO-Archiv (gzip-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο CPIO (συμπιεσμένο με gzip)</comment>
-    <comment xml:lang="en_GB">CPIO archive (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">CPIO archive (gzip-compressed)</comment>
     <comment xml:lang="eo">CPIO-arkivo (kunpremita per gzip)</comment>
     <comment xml:lang="es">archivador CPIO (comprimido con gzip)</comment>
     <comment xml:lang="eu">CPIO artxiboa (gzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">CPIO-arkisto (gzip-pakattu)</comment>
     <comment xml:lang="fo">CPIO skjalasavn (gzip-stappað)</comment>
     <comment xml:lang="fr">archive CPIO (compressé gzip)</comment>
+    <comment xml:lang="fur">archivi CPIO (comprimût cun gzip)</comment>
     <comment xml:lang="ga">cartlann CPIO (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">arquivo CPIO (comprimido con gzip)</comment>
     <comment xml:lang="he">ארכיון CPIO (מכווץ ע״י gzip)</comment>
     <comment xml:lang="hr">CPIO arhiva (gzip sažeta)</comment>
-    <comment xml:lang="hu">CPIO-archívum (gzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">CPIO archívum (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Archivo CPIO (comprimite con gzip)</comment>
     <comment xml:lang="id">Arsip CPIO (terkompresi gzip)</comment>
     <comment xml:lang="it">Archivio CPIO (compresso con gzip)</comment>
@@ -9203,7 +9527,7 @@
     <comment xml:lang="oc">archiu CPIO (compressat gzip)</comment>
     <comment xml:lang="pl">Archiwum CPIO (kompresja gzip)</comment>
     <comment xml:lang="pt">arquivo CPIO (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Pacote CPIO (compactado com gzip)</comment>
+    <comment xml:lang="pt-BR">Pacote CPIO (compactado com gzip)</comment>
     <comment xml:lang="ro">Arhivă CPIO (compresie gzip)</comment>
     <comment xml:lang="ru">Архив CPIO (сжатый gzip)</comment>
     <comment xml:lang="sk">Archív CPIO (komprimovaný pomocou gzip)</comment>
@@ -9214,17 +9538,18 @@
     <comment xml:lang="tr">CPIO arşivi (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів CPIO (стиснений gzip)</comment>
     <comment xml:lang="vi">Kho nén CPIO (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">CPIO 归档文件（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">CPIO 封存檔 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">CPIO 归档文件（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">CPIO 封存檔 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.cpio.gz"/>
   </mime-type>
   <mime-type type="application/x-csh">
     <comment>C shell script</comment>
+    <comment xml:lang="af">C shell-skrip</comment>
     <comment xml:lang="ar">سكربت شِل سي</comment>
     <comment xml:lang="az">C qabıq skripti</comment>
-    <comment xml:lang="be@latin">Skrypt abałonki C</comment>
+    <comment xml:lang="be-Latn">Skrypt abałonki C</comment>
     <comment xml:lang="bg">Скрипт — обвивка C</comment>
     <comment xml:lang="ca">script C shell</comment>
     <comment xml:lang="cs">skript shellu C</comment>
@@ -9232,13 +9557,14 @@
     <comment xml:lang="da">C-skalprogram</comment>
     <comment xml:lang="de">C-Shell-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών κελύφους C</comment>
-    <comment xml:lang="en_GB">C shell script</comment>
+    <comment xml:lang="en-GB">C shell script</comment>
     <comment xml:lang="eo">skripto de C-ŝelo</comment>
     <comment xml:lang="es">secuencia de órdenes de consola en C</comment>
     <comment xml:lang="eu">C shell script-a</comment>
     <comment xml:lang="fi">Csh-komentotiedosto</comment>
     <comment xml:lang="fo">C skel boðrøð</comment>
     <comment xml:lang="fr">script C shell</comment>
+    <comment xml:lang="fur">script di shell in C</comment>
     <comment xml:lang="ga">script bhlaoisce C</comment>
     <comment xml:lang="gl">script de C shell</comment>
     <comment xml:lang="he">תסריט מעטפת C</comment>
@@ -9259,7 +9585,7 @@
     <comment xml:lang="oc">escript C shell</comment>
     <comment xml:lang="pl">Skrypt powłoki C</comment>
     <comment xml:lang="pt">script de terminal C</comment>
-    <comment xml:lang="pt_BR">Script de shell C</comment>
+    <comment xml:lang="pt-BR">Script de shell C</comment>
     <comment xml:lang="ro">Script C shell</comment>
     <comment xml:lang="ru">Сценарий C shell</comment>
     <comment xml:lang="sk">Skript shellu C</comment>
@@ -9270,37 +9596,39 @@
     <comment xml:lang="tr">C kabuk betiği</comment>
     <comment xml:lang="uk">скрипт оболонки C</comment>
     <comment xml:lang="vi">Văn lệnh trình bao C</comment>
-    <comment xml:lang="zh_CN">C shell 脚本</comment>
-    <comment xml:lang="zh_TW">C shell 指令稿</comment>
+    <comment xml:lang="zh-CN">C shell 脚本</comment>
+    <comment xml:lang="zh-TW">C shell 指令稿</comment>
     <sub-class-of type="application/x-shellscript"/>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <magic>
-      <match value="/bin/tcsh" type="string" offset="2:16"/>
-      <match value="/bin/csh" type="string" offset="2:16"/>
-      <match value="/bin/env csh" type="string" offset="2:16"/>
-      <match value="/bin/env tcsh" type="string" offset="2:16"/>
+      <match type="string" value="/bin/tcsh" offset="2:16"/>
+      <match type="string" value="/bin/csh" offset="2:16"/>
+      <match type="string" value="/bin/env csh" offset="2:16"/>
+      <match type="string" value="/bin/env tcsh" offset="2:16"/>
     </magic>
     <glob pattern="*.csh"/>
   </mime-type>
   <mime-type type="application/x-dbf">
     <comment>Xbase document</comment>
+    <comment xml:lang="af">Xbase-dokument</comment>
     <comment xml:lang="ar">مستند Xbase</comment>
     <comment xml:lang="ast">Documentu Xbase</comment>
-    <comment xml:lang="be@latin">Dakument Xbase</comment>
+    <comment xml:lang="be-Latn">Dakument Xbase</comment>
     <comment xml:lang="bg">Документ — Xbase</comment>
     <comment xml:lang="ca">document Xbase</comment>
     <comment xml:lang="cs">dokument Xbase</comment>
     <comment xml:lang="da">Xbasedokument</comment>
     <comment xml:lang="de">Xbase-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Xbase</comment>
-    <comment xml:lang="en_GB">Xbase document</comment>
+    <comment xml:lang="en-GB">Xbase document</comment>
     <comment xml:lang="eo">Xbase-dokumento</comment>
     <comment xml:lang="es">documento Xbase</comment>
     <comment xml:lang="eu">Xbase dokumentua</comment>
     <comment xml:lang="fi">Xbase-asiakirja</comment>
     <comment xml:lang="fo">Xbase skjal</comment>
     <comment xml:lang="fr">document Xbase</comment>
+    <comment xml:lang="fur">document Xbase</comment>
     <comment xml:lang="ga">cáipéis Xbase</comment>
     <comment xml:lang="gl">documento Xbase</comment>
     <comment xml:lang="he">מסמך Xbase</comment>
@@ -9320,7 +9648,7 @@
     <comment xml:lang="oc">document Xbase</comment>
     <comment xml:lang="pl">Dokument Xbase</comment>
     <comment xml:lang="pt">documento Xbase</comment>
-    <comment xml:lang="pt_BR">Documento do Xbase</comment>
+    <comment xml:lang="pt-BR">Documento do Xbase</comment>
     <comment xml:lang="ro">Document Xbase</comment>
     <comment xml:lang="ru">Документ Xbase</comment>
     <comment xml:lang="sk">Dokument Xbase</comment>
@@ -9331,8 +9659,8 @@
     <comment xml:lang="tr">Xbase belgesi</comment>
     <comment xml:lang="uk">документ Xbase</comment>
     <comment xml:lang="vi">Tài liệu Xbase</comment>
-    <comment xml:lang="zh_CN">Xbase 文档</comment>
-    <comment xml:lang="zh_TW">Xbase 文件</comment>
+    <comment xml:lang="zh-CN">Xbase 文档</comment>
+    <comment xml:lang="zh-TW">Xbase 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.dbf"/>
     <alias type="application/x-dbase"/>
@@ -9341,20 +9669,22 @@
   </mime-type>
   <mime-type type="application/ecmascript">
     <comment>ECMAScript program</comment>
+    <comment xml:lang="af">ECMAScript-program</comment>
     <comment xml:lang="ar">برنامج ECMAScript</comment>
-    <comment xml:lang="be@latin">Prahrama ECMAScript</comment>
+    <comment xml:lang="be-Latn">Prahrama ECMAScript</comment>
     <comment xml:lang="bg">Програма — ECMAScript</comment>
     <comment xml:lang="ca">programa ECMAScript</comment>
     <comment xml:lang="cs">program v jazyce ECMAScript</comment>
-    <comment xml:lang="da">ECMA-program</comment>
+    <comment xml:lang="da">ECMAScript-program</comment>
     <comment xml:lang="de">ECMAScript-Programm</comment>
     <comment xml:lang="el">Πρόγραμμα ECMAScript</comment>
-    <comment xml:lang="en_GB">ECMAScript program</comment>
+    <comment xml:lang="en-GB">ECMAScript program</comment>
     <comment xml:lang="es">programa en ECMAScript</comment>
     <comment xml:lang="eu">ECMAScript programa</comment>
     <comment xml:lang="fi">ECMAScript-ohjelma</comment>
     <comment xml:lang="fo">ECMAScript forrit</comment>
     <comment xml:lang="fr">programme ECMAScript</comment>
+    <comment xml:lang="fur">program ECMAScript</comment>
     <comment xml:lang="ga">ríomhchlár ECMAScript</comment>
     <comment xml:lang="gl">programa en ECMAScript</comment>
     <comment xml:lang="he">תכנית EMCAScript</comment>
@@ -9375,7 +9705,7 @@
     <comment xml:lang="oc">programa ECMAEscript</comment>
     <comment xml:lang="pl">Pogram ECMAScript</comment>
     <comment xml:lang="pt">programa ECMAScript</comment>
-    <comment xml:lang="pt_BR">Programa ECMAScript</comment>
+    <comment xml:lang="pt-BR">Programa ECMAScript</comment>
     <comment xml:lang="ro">Program ECMAScript</comment>
     <comment xml:lang="ru">Программа ECMAScript</comment>
     <comment xml:lang="sk">Program ECMAScript</comment>
@@ -9386,105 +9716,131 @@
     <comment xml:lang="tr">ECMAScript programı</comment>
     <comment xml:lang="uk">програма мовою ECMAScript</comment>
     <comment xml:lang="vi">Chương trình ECMAScript</comment>
-    <comment xml:lang="zh_CN">ECMAScript 程序</comment>
-    <comment xml:lang="zh_TW">ECMAScript 程式</comment>
+    <comment xml:lang="zh-CN">ECMAScript 程序</comment>
+    <comment xml:lang="zh-TW">ECMAScript 程式</comment>
     <alias type="text/ecmascript"/>
-    <sub-class-of type='application/x-executable'/>
+    <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.es"/>
   </mime-type>
+  <mime-type type="application/x-mame-chd">
+    <comment>MAME compressed hard disk image</comment>
+    <comment xml:lang="ca">imatge de disc dur MAME amb compressió</comment>
+    <comment xml:lang="fi">MAME-pakatun kiintolevyn levykuva</comment>
+    <comment xml:lang="it">Immagine disco MAME compressa</comment>
+    <comment xml:lang="pl">Skompresowany obraz dysku twardego MAME</comment>
+    <comment xml:lang="uk">стиснений образ жорсткого диска MAME</comment>
+    <generic-icon name="application-x-executable"/>
+    <magic priority="50">
+      <match type="string" value="MComprHD" offset="0"/>
+    </magic>
+    <glob pattern="*.chd"/>
+  </mime-type>
   <mime-type type="application/x-sega-cd-rom">
-    
+    <!-- Translate this to Mega-CD if the console was known as such in your locale
+         Should be Mega-CD in all but en_US, Mexico, Canada and Brazil: https://en.wikipedia.org/wiki/Sega_CD -->
     <comment>Sega CD disc image</comment>
+    <comment xml:lang="af">Mega CD-skyfbeeldlêer</comment>
     <comment xml:lang="ast">Imaxe de discu de Sega CD</comment>
+    <comment xml:lang="bg">Диск — Mega-CD (Sega)</comment>
     <comment xml:lang="ca">imatge de disc de Sega CD</comment>
     <comment xml:lang="cs">obraz disku CD pro Sega</comment>
     <comment xml:lang="da">Sega CD-diskaftryk</comment>
     <comment xml:lang="de">Sega-CD-Datenträgerabbild</comment>
-    <comment xml:lang="en_GB">Sega CD disc image</comment>
+    <comment xml:lang="en-GB">Sega CD disc image</comment>
     <comment xml:lang="es">imagen de disco CD de Sega</comment>
     <comment xml:lang="eu">Sega CD disko irudia</comment>
     <comment xml:lang="fi">Sega CD -levykuva</comment>
     <comment xml:lang="fr">image disque Sega CD</comment>
+    <comment xml:lang="fur">imagjin disc CD Sega</comment>
     <comment xml:lang="ga">íomhá dlúthdhiosca Sega</comment>
     <comment xml:lang="he">דמות כונן Sega CD</comment>
     <comment xml:lang="hr">Sega CD slika diska</comment>
     <comment xml:lang="hu">Sega CD-lemezkép</comment>
-    <comment xml:lang="id">image cakram CD Sega</comment>
+    <comment xml:lang="id">Image cakram CD Sega</comment>
     <comment xml:lang="it">Immagine disco Sega Mega CD</comment>
     <comment xml:lang="kk">Sega CD диск бейнесі</comment>
     <comment xml:lang="ko">세가 CD 디스크 이미지</comment>
     <comment xml:lang="pl">Obraz płyty konsoli Mega-CD</comment>
-    <comment xml:lang="pt_BR">Imagem de disco Sega CD</comment>
+    <comment xml:lang="pt">imagem de disco Mega-CD</comment>
+    <comment xml:lang="pt-BR">Imagem de disco Sega CD</comment>
     <comment xml:lang="ru">Образ диска CD Sega</comment>
     <comment xml:lang="sk">Obraz disku CD Sega</comment>
     <comment xml:lang="sr">одраз диска Сега ЦД-а</comment>
     <comment xml:lang="sv">Mega-CD-skivavbild</comment>
-    <comment xml:lang="tr">Sega CD disk kalıbı</comment>
+    <comment xml:lang="tr">Sega CD disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска Sega CD</comment>
-    <comment xml:lang="zh_CN">Sega CD 光盘映像</comment>
-    <comment xml:lang="zh_TW">Sega CD 光碟映像檔</comment>
+    <comment xml:lang="zh-CN">Sega CD 光盘映像</comment>
+    <comment xml:lang="zh-TW">Sega CD 光碟映像檔</comment>
     <generic-icon name="application-x-executable"/>
-    
+    <!-- Also matches the application/x-genesis-rom magic values, hence the higher priority -->
     <magic priority="60">
-      <match value="SEGADISCSYSTEM" type="string" offset="0">
-        <match value="SEGA" type="string" offset="256"/>
+      <match type="string" value="SEGADISCSYSTEM" offset="0">
+        <match type="string" value="SEGA" offset="256"/>
       </match>
-      <match value="SEGADISCSYSTEM" type="string" offset="16">
-        <match value="SEGA" type="string" offset="272"/>
+      <match type="string" value="SEGADISCSYSTEM" offset="16">
+        <match type="string" value="SEGA" offset="272"/>
       </match>
     </magic>
-    <glob pattern="*.bin"/>
     <glob pattern="*.iso"/>
   </mime-type>
   <mime-type type="application/x-sega-pico-rom">
-    
+    <!-- Translate this to Kids Computer Pico if the console was known as such in your locale
+         Should be Sega Pico in all but Japan: https://en.wikipedia.org/wiki/Sega_Pico -->
     <comment>Sega Pico ROM</comment>
     <comment xml:lang="ast">ROM de Sega Pico</comment>
+    <comment xml:lang="bg">ROM — Sega Pico</comment>
     <comment xml:lang="ca">ROM de Sega Pico</comment>
     <comment xml:lang="cs">ROM pro Sega Pico</comment>
+    <comment xml:lang="da">Sega Pico-ROM</comment>
     <comment xml:lang="de">Sega Pico ROM</comment>
-    <comment xml:lang="en_GB">Sega Pico ROM</comment>
+    <comment xml:lang="en-GB">Sega Pico ROM</comment>
     <comment xml:lang="es">ROM de Sega Pico</comment>
     <comment xml:lang="eu">Sega Pico ROM</comment>
     <comment xml:lang="fi">Sega Pico ROM</comment>
     <comment xml:lang="fr">ROM Sega Pico</comment>
+    <comment xml:lang="fur">ROM Sega Pico</comment>
     <comment xml:lang="ga">ROM Sega Pico</comment>
     <comment xml:lang="hr">Sega Pico ROM</comment>
     <comment xml:lang="hu">Sega Pico ROM</comment>
     <comment xml:lang="id">ROM Sega Pico</comment>
     <comment xml:lang="it">ROM Sega Pico</comment>
     <comment xml:lang="kk">Sega Pico ROM</comment>
-    <comment xml:lang="ko">세카 피코 롬</comment>
+    <comment xml:lang="ko">세가 피코 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Sega Pico</comment>
-    <comment xml:lang="pt_BR">ROM de Sega Pico</comment>
+    <comment xml:lang="pt">ROM Sega Pico</comment>
+    <comment xml:lang="pt-BR">ROM de Sega Pico</comment>
     <comment xml:lang="ru">Sega Pico ROM</comment>
     <comment xml:lang="sk">ROM pre Sega Pico</comment>
     <comment xml:lang="sr">Сега Пико РОМ</comment>
     <comment xml:lang="sv">Sega Pico-rom</comment>
     <comment xml:lang="tr">Sega Pico ROM</comment>
     <comment xml:lang="uk">ППП Sega Pico</comment>
-    <comment xml:lang="zh_CN">Sega Pico ROM</comment>
-    <comment xml:lang="zh_TW">Sega Pico ROM</comment>
+    <comment xml:lang="zh-CN">Sega Pico ROM</comment>
+    <comment xml:lang="zh-TW">Sega Pico ROM</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="SEGA PICO" type="string" offset="256"/>
+      <match type="string" value="SEGA PICO" offset="256"/>
     </magic>
+    <glob pattern="*.iso"/>
   </mime-type>
   <mime-type type="application/x-saturn-rom">
     <comment>Sega Saturn disc image</comment>
+    <comment xml:lang="af">Sega Saturn-skyfbeeldlêer</comment>
     <comment xml:lang="ast">Imaxe de discu de Sega Saturn</comment>
+    <comment xml:lang="bg">Диск — Sega Saturn</comment>
     <comment xml:lang="ca">imatge de disc de Sega Saturn</comment>
     <comment xml:lang="cs">obraz disku pro Sega Saturn</comment>
     <comment xml:lang="da">Sega Saturn-diskaftryk</comment>
     <comment xml:lang="de">Sega-Saturn-Datenträgerabbild</comment>
     <comment xml:lang="el">Εικόνα δίσκου Sega Saturn</comment>
-    <comment xml:lang="en_GB">Sega Saturn disc image</comment>
+    <comment xml:lang="en-GB">Sega Saturn disc image</comment>
     <comment xml:lang="es">imagen de disco de Sega Saturn</comment>
     <comment xml:lang="eu">Sega Saturn disko irudia</comment>
     <comment xml:lang="fi">Sega Saturn -levykuva</comment>
     <comment xml:lang="fr">image disque Sega Saturn</comment>
+    <comment xml:lang="fur">imagjin disc Sega Saturn</comment>
     <comment xml:lang="ga">íomhá diosca Sega Saturn</comment>
     <comment xml:lang="he">דמות כונן Sega Saturn</comment>
     <comment xml:lang="hr">Sega Saturn slika diska</comment>
@@ -9497,76 +9853,73 @@
     <comment xml:lang="oc">imatge disc Sega Saturn</comment>
     <comment xml:lang="pl">Obraz płyty konsoli Sega Saturn</comment>
     <comment xml:lang="pt">imagem de disco Sega Saturn</comment>
-    <comment xml:lang="pt_BR">Imagem de disco do Sega Saturn</comment>
+    <comment xml:lang="pt-BR">Imagem de disco do Sega Saturn</comment>
     <comment xml:lang="ru">Образ диска Sega Saturn</comment>
     <comment xml:lang="sk">Obraz disku Sega Saturn</comment>
     <comment xml:lang="sr">одраз диска Сега Сатурна</comment>
     <comment xml:lang="sv">Sega Saturn-skivavbild</comment>
-    <comment xml:lang="tr">Sega Saturn disk kalıbı</comment>
+    <comment xml:lang="tr">Sega Saturn disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска Sega Saturn</comment>
-    <comment xml:lang="zh_CN">Sega Saturn 光盘映像</comment>
-    <comment xml:lang="zh_TW">Sega Saturn 光碟映像檔</comment>
+    <comment xml:lang="zh-CN">Sega Saturn 光盘映像</comment>
+    <comment xml:lang="zh-TW">Sega Saturn 光碟映像檔</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="SEGA SEGASATURN" type="string" offset="0"/>
-      <match value="SEGA SEGASATURN" type="string" offset="16"/>
+      <match type="string" value="SEGA SEGASATURN" offset="0"/>
+      <match type="string" value="SEGA SEGASATURN" offset="16"/>
     </magic>
-    <glob pattern="*.bin"/>
     <glob pattern="*.iso"/>
   </mime-type>
-  <mime-type type="application/x-dc-rom">
-    <comment>Dreamcast GD-ROM</comment>
-    <comment xml:lang="ast">GD-ROM de Dreamcast</comment>
-    <comment xml:lang="ca">GD-ROM de Dreamcast</comment>
-    <comment xml:lang="cs">GD-ROM pro Dreamcast</comment>
-    <comment xml:lang="da">Dreamcast GD-ROM</comment>
-    <comment xml:lang="de">Dreamcast GD-ROM</comment>
-    <comment xml:lang="el">Dreamcast GD-ROM</comment>
-    <comment xml:lang="en_GB">Dreamcast GD-ROM</comment>
-    <comment xml:lang="es">GD-ROM de Dreamcast</comment>
-    <comment xml:lang="eu">Dreamcast GD-ROM</comment>
-    <comment xml:lang="fr">GD-ROM Dreamcast</comment>
-    <comment xml:lang="ga">GD-ROM Dreamcast</comment>
-    <comment xml:lang="he">Dreamcast GD-ROM</comment>
-    <comment xml:lang="hr">Dreamcast GD-ROM</comment>
-    <comment xml:lang="hu">Dreamcast GD-ROM</comment>
-    <comment xml:lang="ia">GD-ROM Dreamcast</comment>
-    <comment xml:lang="id">GD-ROM Dreamcast</comment>
-    <comment xml:lang="it">GD-ROM Dreamcast</comment>
-    <comment xml:lang="kk">Dreamcast GD-ROM</comment>
-    <comment xml:lang="ko">드림캐스트 GD-ROM</comment>
-    <comment xml:lang="oc">GD-ROM Dreamcast</comment>
-    <comment xml:lang="pl">Plik GD-ROM konsoli Dreamcast</comment>
-    <comment xml:lang="pt">GD-ROM Dreamcast</comment>
-    <comment xml:lang="pt_BR">GD-ROM de Dreamcast</comment>
-    <comment xml:lang="ru">Dreamcast GD-ROM</comment>
-    <comment xml:lang="sk">Dreamcast GD-ROM</comment>
-    <comment xml:lang="sr">Дримкаст ГД-РОМ</comment>
-    <comment xml:lang="sv">Dreamcast-gd-rom</comment>
-    <comment xml:lang="tr">Dreamcast GD-ROM</comment>
-    <comment xml:lang="uk">GD-ROM Dreamcast</comment>
-    <comment xml:lang="zh_CN">Dreamcast CD-ROM</comment>
-    <comment xml:lang="zh_TW">Dreamcast GD-ROM</comment>
+  <mime-type type="application/x-dreamcast-rom">
+    <comment>Dreamcast disc image</comment>
+    <comment xml:lang="bg">Диск — Dreamcast</comment>
+    <comment xml:lang="ca">imatge de disc de Dreamcast</comment>
+    <comment xml:lang="da">Dreamcast-diskaftryk</comment>
+    <comment xml:lang="de">Dreamcast-Datenträgerabbild</comment>
+    <comment xml:lang="en-GB">Dreamcast disc image</comment>
+    <comment xml:lang="es">imagen de disco de Dreamcast</comment>
+    <comment xml:lang="eu">Dreamcast disko irudia</comment>
+    <comment xml:lang="fi">Dreamcast-levykuva</comment>
+    <comment xml:lang="fr">image disque Dreamcast</comment>
+    <comment xml:lang="hr">Dreamcast slika disa</comment>
+    <comment xml:lang="hu">Dreamcast lemezkép</comment>
+    <comment xml:lang="id">Image cakram Dreamcast</comment>
+    <comment xml:lang="it">Immagine disco Dreamcast</comment>
+    <comment xml:lang="kk">Dreamcast диск бейнесі</comment>
+    <comment xml:lang="ko">드림캐스트 디스크 이미지</comment>
+    <comment xml:lang="pl">Obraz płyty konsoli Dreamcast</comment>
+    <comment xml:lang="pt">imagem de disco Dreamcast</comment>
+    <comment xml:lang="pt-BR">Imagem de disco do Dreamcast</comment>
+    <comment xml:lang="ru">Образ диска Dreamcast</comment>
+    <comment xml:lang="sk">Obraz disku Dreamcast</comment>
+    <comment xml:lang="sv">Dreamcast-skivavbild</comment>
+    <comment xml:lang="tr">Dreamcast disk görüntüsü</comment>
+    <comment xml:lang="uk">образ диска Dreamcast</comment>
+    <comment xml:lang="zh-CN">Dreamcast 光盘映像</comment>
+    <comment xml:lang="zh-TW">Dreamcast 光碟映像檔</comment>
     <generic-icon name="application-x-executable"/>
-    <glob pattern="*.dc"/>
+    <magic priority="50">
+      <match type="string" value="SEGA SEGAKATANA" offset="16"/>
+    </magic>
+    <glob pattern="*.iso"/>
   </mime-type>
   <mime-type type="application/x-nintendo-ds-rom">
     <comment>Nintendo DS ROM</comment>
     <comment xml:lang="ar">Nintendo DS ROM</comment>
     <comment xml:lang="ast">ROM de Nintendo DS</comment>
-    <comment xml:lang="be@latin">Nintendo DS ROM</comment>
+    <comment xml:lang="be-Latn">Nintendo DS ROM</comment>
     <comment xml:lang="bg">ROM — Nintendo DS</comment>
     <comment xml:lang="ca">ROM de Nintendo DS</comment>
     <comment xml:lang="cs">ROM pro Nintendo DS</comment>
-    <comment xml:lang="da">Nintendo DS-rom</comment>
+    <comment xml:lang="da">Nintendo DS-ROM</comment>
     <comment xml:lang="de">Nintendo DS ROM</comment>
     <comment xml:lang="el">Nintendo DS ROM</comment>
-    <comment xml:lang="en_GB">Nintendo DS ROM</comment>
+    <comment xml:lang="en-GB">Nintendo DS ROM</comment>
     <comment xml:lang="es">ROM de Nintendo DS</comment>
     <comment xml:lang="eu">Nintendo DS-ko ROMa</comment>
     <comment xml:lang="fi">Nintendo DS-ROM</comment>
     <comment xml:lang="fo">Nintendo DS ROM</comment>
     <comment xml:lang="fr">ROM Nintendo DS</comment>
+    <comment xml:lang="fur">ROM Nintendo DS</comment>
     <comment xml:lang="ga">ROM Nintendo DS</comment>
     <comment xml:lang="gl">ROM de Nintendo DS</comment>
     <comment xml:lang="he">ROM של Nintendo</comment>
@@ -9586,7 +9939,7 @@
     <comment xml:lang="oc">ROM Nintendo DS</comment>
     <comment xml:lang="pl">Plik ROM konsoli Nintendo DS</comment>
     <comment xml:lang="pt">ROM Nintendo DS</comment>
-    <comment xml:lang="pt_BR">ROM de Nintendo DS</comment>
+    <comment xml:lang="pt-BR">ROM de Nintendo DS</comment>
     <comment xml:lang="ro">ROM Nintendo DS</comment>
     <comment xml:lang="ru">Nintendo DS ROM</comment>
     <comment xml:lang="sk">ROM pre Nintendo DS</comment>
@@ -9597,24 +9950,54 @@
     <comment xml:lang="tr">Nintendo DS ROM</comment>
     <comment xml:lang="uk">ППП Nintendo</comment>
     <comment xml:lang="vi">ROM DS Nintendo</comment>
-    <comment xml:lang="zh_CN">任天堂 DS ROM</comment>
-    <comment xml:lang="zh_TW">任天堂 DS ROM</comment>
+    <comment xml:lang="zh-CN">任天堂 DS ROM</comment>
+    <comment xml:lang="zh-TW">任天堂 DS ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.nds"/>
   </mime-type>
+  <mime-type type="application/x-nintendo-3ds-rom">
+    <comment>Nintendo 3DS ROM</comment>
+    <comment xml:lang="ca">ROM de Nintendo 3DS</comment>
+    <comment xml:lang="fi">Nintendo 3DS ROM</comment>
+    <comment xml:lang="it">ROM Nintendo 3DS</comment>
+    <comment xml:lang="pl">Plik ROM konsoli Nintendo 3DS</comment>
+    <comment xml:lang="pt-BR">ROM do Nintendo 3DS</comment>
+    <comment xml:lang="uk">ППП Nintendo 3DS</comment>
+    <generic-icon name="application-x-executable"/>
+    <glob pattern="*.3ds"/>
+    <glob pattern="*.cci"/>
+    <magic>
+      <match offset="256" type="string" value="NCSD"/>
+    </magic>
+  </mime-type>
+  <mime-type type="application/x-nintendo-3ds-executable">
+    <comment>Nintendo 3DS Executable</comment>
+    <comment xml:lang="ca">executable de Nintendo 3DS</comment>
+    <comment xml:lang="fi">Nintendo 3DS suoritettava</comment>
+    <comment xml:lang="it">Eseguibile Nintendo 3DS</comment>
+    <comment xml:lang="pl">Plik wykonywalny konsoli Nintendo 3DS</comment>
+    <comment xml:lang="uk">виконуваний файл Nintendo 3DS</comment>
+    <generic-icon name="application-x-executable"/>
+    <glob pattern="*.3dsx"/>
+    <magic priority="40">
+      <match offset="0" type="string" value="3DSX"/>
+    </magic>
+  </mime-type>
   <mime-type type="application/x-pc-engine-rom">
     <comment>PC Engine ROM</comment>
     <comment xml:lang="ast">ROM de PC Engine</comment>
+    <comment xml:lang="bg">ROM — PC Engine</comment>
     <comment xml:lang="ca">ROM de PC Engine</comment>
     <comment xml:lang="cs">ROM pro PC Engine</comment>
-    <comment xml:lang="da">PC Engine ROM</comment>
+    <comment xml:lang="da">PC Engine-ROM</comment>
     <comment xml:lang="de">PC Engine ROM</comment>
     <comment xml:lang="el">PC Engine ROM</comment>
-    <comment xml:lang="en_GB">PC Engine ROM</comment>
+    <comment xml:lang="en-GB">PC Engine ROM</comment>
     <comment xml:lang="es">ROM de PC Engine</comment>
     <comment xml:lang="eu">PC Engine ROM</comment>
     <comment xml:lang="fi">PC Engine ROM</comment>
     <comment xml:lang="fr">ROM PC Engine</comment>
+    <comment xml:lang="fur">ROM PC Engine</comment>
     <comment xml:lang="ga">ROM PC Engine</comment>
     <comment xml:lang="gl">ROM de máquina de PC</comment>
     <comment xml:lang="he">ROM של PC Engine</comment>
@@ -9628,7 +10011,7 @@
     <comment xml:lang="oc">ROM PC Engine</comment>
     <comment xml:lang="pl">Plik ROM konsoli PC Engine</comment>
     <comment xml:lang="pt">ROM PC Engine</comment>
-    <comment xml:lang="pt_BR">ROM de PC Engine</comment>
+    <comment xml:lang="pt-BR">ROM de PC Engine</comment>
     <comment xml:lang="ru">PC Engine ROM</comment>
     <comment xml:lang="sk">PC Engine ROM</comment>
     <comment xml:lang="sl">Pomnilnik PC Engine ROM</comment>
@@ -9636,24 +10019,27 @@
     <comment xml:lang="sv">PC Engine-rom</comment>
     <comment xml:lang="tr">PC Engine ROM</comment>
     <comment xml:lang="uk">ROM для рушія на ПК</comment>
-    <comment xml:lang="zh_CN">PC Engine ROM</comment>
-    <comment xml:lang="zh_TW">PC Engine ROM</comment>
+    <comment xml:lang="zh-CN">PC Engine ROM</comment>
+    <comment xml:lang="zh-TW">PC Engine ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.pce"/>
   </mime-type>
   <mime-type type="application/x-wii-rom">
     <comment>Wii disc image</comment>
+    <comment xml:lang="af">Wii-skyfbeeldlêer</comment>
     <comment xml:lang="ast">Imaxe de discu de Wii</comment>
+    <comment xml:lang="bg">Диск — Wii</comment>
     <comment xml:lang="ca">imatge de disc de Wii</comment>
     <comment xml:lang="cs">obraz disku pro Wii</comment>
     <comment xml:lang="da">Wii-diskaftryk</comment>
     <comment xml:lang="de">Wii-Datenträgerabbild</comment>
     <comment xml:lang="el">Εικόνα δίσκου Wii</comment>
-    <comment xml:lang="en_GB">Wii disc image</comment>
+    <comment xml:lang="en-GB">Wii disc image</comment>
     <comment xml:lang="es">imagen de disco de Wii</comment>
     <comment xml:lang="eu">Wii disko irudia</comment>
     <comment xml:lang="fi">Wii-levykuva</comment>
     <comment xml:lang="fr">image disque Wii</comment>
+    <comment xml:lang="fur">imagjin disc Wii</comment>
     <comment xml:lang="ga">íomhá diosca Wii</comment>
     <comment xml:lang="gl">Imaxe de disco de Wii</comment>
     <comment xml:lang="he">דמות כונן Wii</comment>
@@ -9667,7 +10053,7 @@
     <comment xml:lang="oc">imatge disc Wii</comment>
     <comment xml:lang="pl">Obraz płyty konsoli Wii</comment>
     <comment xml:lang="pt">imagem de disco Wii</comment>
-    <comment xml:lang="pt_BR">Imagem de disco Wii</comment>
+    <comment xml:lang="pt-BR">Imagem de disco Wii</comment>
     <comment xml:lang="ru">Образ диска Wii</comment>
     <comment xml:lang="sk">Obraz disku Wii</comment>
     <comment xml:lang="sl">Odtis diska Wii</comment>
@@ -9675,29 +10061,33 @@
     <comment xml:lang="sv">Wii-skivavbild</comment>
     <comment xml:lang="tr">Wii disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска Wii</comment>
-    <comment xml:lang="zh_CN">Wii 光盘映像</comment>
-    <comment xml:lang="zh_TW">Wii 光碟映像檔</comment>
+    <comment xml:lang="zh-CN">Wii 光盘映像</comment>
+    <comment xml:lang="zh-TW">Wii 光碟映像檔</comment>
     <alias type="application/x-wii-iso-image"/>
     <alias type="application/x-wbfs"/>
     <alias type="application/x-wia"/>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.iso"/>
     <magic priority="50">
-      <match value="0x5d1c9ea3" type="big32" offset="24"/>
-      <match value="WBFS" type="string" offset="0"/>
-      <match value="WII\001DISC" type="string" offset="0"/>
+      <match offset="24" type="big32" value="0x5d1c9ea3"/>
+      <match offset="0" type="string" value="WBFS"/>
+      <match offset="0" type="string" value="WII\001DISC"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-wii-wad">
     <comment>WiiWare bundle</comment>
+    <comment xml:lang="af">WiiWare-bundel</comment>
+    <comment xml:lang="bg">Програмен пакет — WiiWare</comment>
     <comment xml:lang="ca">paquet de WiiWare</comment>
     <comment xml:lang="cs">balíček pro WiiWare</comment>
     <comment xml:lang="da">WiiWare-samling</comment>
     <comment xml:lang="de">WiiWare-Paket</comment>
-    <comment xml:lang="en_GB">WiiWare bundle</comment>
+    <comment xml:lang="en-GB">WiiWare bundle</comment>
     <comment xml:lang="es">conjunto de WiiWare</comment>
     <comment xml:lang="eu">WiiWare bilduma</comment>
+    <comment xml:lang="fi">WiiWare-lisäpaketti</comment>
     <comment xml:lang="fr">lot WiiWare</comment>
+    <comment xml:lang="fur">côl WiiWare</comment>
     <comment xml:lang="ga">burla WiiWare</comment>
     <comment xml:lang="he">מאגד WiiWare</comment>
     <comment xml:lang="hr">WiiWare paket</comment>
@@ -9706,39 +10096,42 @@
     <comment xml:lang="id">Bundel WiiWare</comment>
     <comment xml:lang="it">Bundle WiiWare</comment>
     <comment xml:lang="kk">WiiWare дестесі</comment>
-    <comment xml:lang="ko">위-웨어 번들</comment>
+    <comment xml:lang="ko">WiiWare 번들</comment>
     <comment xml:lang="oc">lòt WiiWare</comment>
     <comment xml:lang="pl">Pakiet WiiWare</comment>
     <comment xml:lang="pt">pacote WiiWare</comment>
-    <comment xml:lang="pt_BR">Pacote WiiWare</comment>
+    <comment xml:lang="pt-BR">Pacote WiiWare</comment>
     <comment xml:lang="ru">Пакет WiiWare</comment>
     <comment xml:lang="sk">Balík WiiWare</comment>
     <comment xml:lang="sr">ВииВер комплет</comment>
     <comment xml:lang="sv">WiiWare-paket</comment>
     <comment xml:lang="tr">WiiWare paketi</comment>
     <comment xml:lang="uk">пакет WiiWare</comment>
-    <comment xml:lang="zh_CN">WiiWare 捆绑包</comment>
-    <comment xml:lang="zh_TW">WiiWare 綁包</comment>
+    <comment xml:lang="zh-CN">WiiWare 捆绑包</comment>
+    <comment xml:lang="zh-TW">WiiWare 綁包</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="Is\0\0" type="string" offset="4"/>
-      <match value="ib\0\0" type="string" offset="4"/>
-      <match value="Bk\0\0" type="string" offset="4"/>
+      <match type="string" value="Is\0\0" offset="4"/>
+      <match type="string" value="ib\0\0" offset="4"/>
+      <match type="string" value="Bk\0\0" offset="4"/>
     </magic>
     <glob pattern="*.wad"/>
   </mime-type>
   <mime-type type="application/x-gamecube-rom">
     <comment>GameCube disc image</comment>
+    <comment xml:lang="af">GameCube-skyfbeeldlêer</comment>
+    <comment xml:lang="bg">Диск — GameCube</comment>
     <comment xml:lang="ca">imatge de disc de GameCube</comment>
     <comment xml:lang="cs">obraz disku pro GameCube</comment>
     <comment xml:lang="da">GameCube-diskaftryk</comment>
     <comment xml:lang="de">GameCube-Datenträgerabbild</comment>
     <comment xml:lang="el">Εικόνα δίσκου GameCube</comment>
-    <comment xml:lang="en_GB">GameCube disc image</comment>
+    <comment xml:lang="en-GB">GameCube disc image</comment>
     <comment xml:lang="es">imagen de disco de GameCube</comment>
     <comment xml:lang="eu">GameCube disko irudia</comment>
     <comment xml:lang="fi">GameCube-levykuva</comment>
     <comment xml:lang="fr">image disque GameCube</comment>
+    <comment xml:lang="fur">imagjin disc GameCube</comment>
     <comment xml:lang="ga">íomhá diosca GameCube</comment>
     <comment xml:lang="gl">Imae de disco de GameCube</comment>
     <comment xml:lang="he">דמות כונן GameCube</comment>
@@ -9752,7 +10145,7 @@
     <comment xml:lang="oc">imatge disc GameCube</comment>
     <comment xml:lang="pl">Obraz płyty konsoli GameCube</comment>
     <comment xml:lang="pt">imagem de disco GameCube</comment>
-    <comment xml:lang="pt_BR">Imagem de disco GameCube</comment>
+    <comment xml:lang="pt-BR">Imagem de disco GameCube</comment>
     <comment xml:lang="ru">Образ диска GameCube</comment>
     <comment xml:lang="sk">Obraz disku GameCube</comment>
     <comment xml:lang="sl">Odtis diska GameCube</comment>
@@ -9760,144 +10153,169 @@
     <comment xml:lang="sv">GameCube-skivavbild</comment>
     <comment xml:lang="tr">GameCube disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска GameCube</comment>
-    <comment xml:lang="zh_CN">GameCube 光盘映像</comment>
-    <comment xml:lang="zh_TW">GameCube 光碟映像檔</comment>
+    <comment xml:lang="zh-CN">GameCube 光盘映像</comment>
+    <comment xml:lang="zh-TW">GameCube 光碟映像檔</comment>
     <generic-icon name="application-x-executable"/>
     <alias type="application/x-gamecube-iso-image"/>
     <glob pattern="*.iso"/>
     <magic priority="50">
-      <match value="0xc2339f3d" type="big32" offset="28"/>
+      <match offset="28" type="big32" value="0xc2339f3d"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-thomson-cartridge-memo7">
     <comment>Thomson Mémo7 cartridge</comment>
+    <comment xml:lang="bg">Касета — Thomson Mémo7</comment>
     <comment xml:lang="ca">cartutx Thomson Mémo7</comment>
     <comment xml:lang="cs">Kazeta Thomson Mémo7</comment>
+    <comment xml:lang="da">Thomson Mémo7-kassette</comment>
     <comment xml:lang="de">Thomson-Mémo7-Steckmodul</comment>
-    <comment xml:lang="en_GB">Thomson Mémo7 cartridge</comment>
+    <comment xml:lang="en-GB">Thomson Mémo7 cartridge</comment>
     <comment xml:lang="es">cartucho Mémo7 de Thomson</comment>
+    <comment xml:lang="eu">Thomson Mémo7 kartutxoa</comment>
+    <comment xml:lang="fi">Thomson Mémo7 -patruuna</comment>
     <comment xml:lang="fr">cartouche Thomson Mémo7</comment>
+    <comment xml:lang="fur">cartucje Mémo7 Thomson</comment>
     <comment xml:lang="ga">cartús Thomson Mémo7</comment>
     <comment xml:lang="hr">Thomson Mémo7 uložak</comment>
     <comment xml:lang="hu">Thomson Mémo7 kazetta</comment>
-    <comment xml:lang="id">cartridge Thomson Mémo7</comment>
+    <comment xml:lang="id">Cartridge Thomson Mémo7</comment>
     <comment xml:lang="it">Cartuccia Thomson Mémo7</comment>
     <comment xml:lang="kk">Thomson Mémo7 картриджі</comment>
-    <comment xml:lang="ko">톰슨 메모7 카트릿지</comment>
+    <comment xml:lang="ko">톰슨 Mémo7 카트리지</comment>
     <comment xml:lang="pl">Kartridż Thomson Mémo7</comment>
-    <comment xml:lang="pt_BR">Cartucho Thomson Mémo7</comment>
+    <comment xml:lang="pt">cartucho Thomson Mémo7</comment>
+    <comment xml:lang="pt-BR">Cartucho Thomson Mémo7</comment>
     <comment xml:lang="ru">Картридж Thomson Mémo7</comment>
     <comment xml:lang="sk">Kazeta Thomson Mémo7</comment>
     <comment xml:lang="sr">Томсон Мемо7 кертриџ</comment>
     <comment xml:lang="sv">Thomson Mémo7-spelkassett</comment>
     <comment xml:lang="tr">Thomson Mémo7 kartuşu</comment>
     <comment xml:lang="uk">картридж Thomson Mémo7</comment>
-    <comment xml:lang="zh_CN">Thomson Mémo7 卡带</comment>
-    <comment xml:lang="zh_TW">Thomson Mémo7 卡匣</comment>
+    <comment xml:lang="zh-CN">Thomson Mémo7 卡带</comment>
+    <comment xml:lang="zh-TW">Thomson Mémo7 卡匣</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.m7"/>
   </mime-type>
   <mime-type type="application/x-thomson-cassette">
     <comment>Thomson cassette</comment>
+    <comment xml:lang="bg">Касета — Thomson</comment>
     <comment xml:lang="ca">cinta de casset Thomson</comment>
     <comment xml:lang="cs">Kazeta Thomson</comment>
+    <comment xml:lang="da">Thomson-kassette</comment>
     <comment xml:lang="de">Thomson-Kassette</comment>
-    <comment xml:lang="en_GB">Thomson cassette</comment>
+    <comment xml:lang="en-GB">Thomson cassette</comment>
     <comment xml:lang="es">casete de Thomson</comment>
+    <comment xml:lang="eu">Thomson kasetea</comment>
+    <comment xml:lang="fi">Thomson-kasetti</comment>
     <comment xml:lang="fr">cassette Thomson</comment>
+    <comment xml:lang="fur">cassete Thomson</comment>
     <comment xml:lang="ga">caiséad Thomson</comment>
     <comment xml:lang="hr">Thomson kaseta</comment>
     <comment xml:lang="hu">Thomson kazetta</comment>
-    <comment xml:lang="id">kaset Thomson</comment>
+    <comment xml:lang="id">Kaset Thomson</comment>
     <comment xml:lang="it">Cassetta Thomson</comment>
     <comment xml:lang="kk">Thomson кассетасы</comment>
-    <comment xml:lang="ko">톰슨 카셋트</comment>
+    <comment xml:lang="ko">톰슨 카세트</comment>
     <comment xml:lang="pl">Kaseta Thomson</comment>
-    <comment xml:lang="pt_BR">Cassete Thomson</comment>
+    <comment xml:lang="pt">cassete Thomson</comment>
+    <comment xml:lang="pt-BR">Cassete Thomson</comment>
     <comment xml:lang="ru">Кассета Thomson</comment>
     <comment xml:lang="sk">Kazeta Thomson</comment>
     <comment xml:lang="sr">Томсон касете</comment>
     <comment xml:lang="sv">Thomson-kassett</comment>
     <comment xml:lang="tr">Thomson kaset</comment>
     <comment xml:lang="uk">касета Thomson</comment>
-    <comment xml:lang="zh_CN">Thomson 磁带</comment>
-    <comment xml:lang="zh_TW">Thomson 卡匣</comment>
+    <comment xml:lang="zh-CN">Thomson 磁带</comment>
+    <comment xml:lang="zh-TW">Thomson 卡匣</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.k7"/>
   </mime-type>
   <mime-type type="application/x-hfe-floppy-image">
     <comment>HFE floppy disk image</comment>
+    <comment xml:lang="bg">Диск — флопи, HFE</comment>
     <comment xml:lang="ca">imatge de disquet HFE</comment>
     <comment xml:lang="cs">Obraz diskety HFE</comment>
+    <comment xml:lang="da">HFE-floppydiskaftryk</comment>
     <comment xml:lang="de">HFE-Diskettenabbild</comment>
-    <comment xml:lang="en_GB">HFE floppy disk image</comment>
+    <comment xml:lang="en-GB">HFE floppy disk image</comment>
     <comment xml:lang="es">imagen de disquete HFE</comment>
+    <comment xml:lang="eu">HFE diskete disko irudia</comment>
+    <comment xml:lang="fi">HFE disketti-levykuva</comment>
     <comment xml:lang="fr">image disquette HFE</comment>
+    <comment xml:lang="fur">imagjin disc floppy HFE</comment>
     <comment xml:lang="ga">íomhá diosca fhlapaigh HFE</comment>
     <comment xml:lang="hr">HFE slika diskete</comment>
     <comment xml:lang="hu">HFE flopi lemezkép</comment>
-    <comment xml:lang="id">image disk floppy HFE</comment>
+    <comment xml:lang="id">Image disk floppy HFE</comment>
     <comment xml:lang="it">Immagine disco floppy HFE</comment>
     <comment xml:lang="kk">HFE иілгіш диск бейнесі</comment>
     <comment xml:lang="ko">HFE 플로피 디스크 이미지</comment>
     <comment xml:lang="pl">Obraz dyskietki HFE</comment>
-    <comment xml:lang="pt_BR">Imagem de disco flexível HFE</comment>
+    <comment xml:lang="pt">imagem de disquete HFE</comment>
+    <comment xml:lang="pt-BR">Imagem de disco flexível HFE</comment>
     <comment xml:lang="ru">Образ гибкого диска HFE</comment>
     <comment xml:lang="sk">Obraz pružného disku HFE</comment>
     <comment xml:lang="sr">ХФЕ слика флопи диска</comment>
     <comment xml:lang="sv">HFE-diskavbild</comment>
-    <comment xml:lang="tr">HFE disket kalıbı</comment>
+    <comment xml:lang="tr">HFE disket görüntüsü</comment>
     <comment xml:lang="uk">образ дискети HFE</comment>
-    <comment xml:lang="zh_CN">HFE 软盘映像</comment>
-    <comment xml:lang="zh_TW">HFE 軟碟映像檔</comment>
+    <comment xml:lang="zh-CN">HFE 软盘映像</comment>
+    <comment xml:lang="zh-TW">HFE 軟碟映像檔</comment>
     <acronym>HFE</acronym>
     <expanded-acronym>HxC Floppy Emulator</expanded-acronym>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.hfe"/>
     <magic>
-      <match value="HXCPICFE" type="string" offset="0"/>
+      <match offset="0" type="string" value="HXCPICFE"/>
     </magic>
     <alias type="application/x-hfe-file"/>
   </mime-type>
   <mime-type type="application/x-thomson-sap-image">
     <comment>SAP Thomson floppy disk image</comment>
+    <comment xml:lang="bg">Диск — флопи, SAP Thomson</comment>
     <comment xml:lang="ca">imatge de disquet SAP Thomson</comment>
     <comment xml:lang="cs">Obraz diskety SAP Thomson</comment>
+    <comment xml:lang="da">SAP Thomson-floppydiskaftryk</comment>
     <comment xml:lang="de">SAP-Thomson-Diskettenabbild</comment>
-    <comment xml:lang="en_GB">SAP Thomson floppy disk image</comment>
+    <comment xml:lang="en-GB">SAP Thomson floppy disk image</comment>
     <comment xml:lang="es">imagen de disquete SAP de Thomson</comment>
+    <comment xml:lang="eu">SAP Thomson diskete disko irudia</comment>
+    <comment xml:lang="fi">SAP Thomson disketti-levykuva</comment>
     <comment xml:lang="fr">image disquette SAP Thomson</comment>
+    <comment xml:lang="fur">imagjin disc floppy SAP Thomson</comment>
     <comment xml:lang="ga">íomhá diosca fhlapaigh SAP Thomson</comment>
     <comment xml:lang="hr">SAP Thomson slika diskete</comment>
     <comment xml:lang="hu">SAP Thomson flopi lemezkép</comment>
-    <comment xml:lang="id">image disk floppy SAP Thomson</comment>
+    <comment xml:lang="id">Image disk floppy SAP Thomson</comment>
     <comment xml:lang="it">Immagine disco floppy Thomson SAP</comment>
     <comment xml:lang="kk">SAP Thomson иілгіш диск бейнесі</comment>
     <comment xml:lang="ko">SAP 톰슨 플로피 디스크 이미지</comment>
     <comment xml:lang="pl">Obraz dyskietki SAP Thomson</comment>
-    <comment xml:lang="pt_BR">Imagem de disco flexível SAP Thomson</comment>
+    <comment xml:lang="pt">imagem de disquete SAP Thomson</comment>
+    <comment xml:lang="pt-BR">Imagem de disco flexível SAP Thomson</comment>
     <comment xml:lang="ru">Образ гибкого диска SAP Thomson</comment>
     <comment xml:lang="sk">Obraz pružného disku SAP Thomson</comment>
     <comment xml:lang="sr">САП Томсон слика флопи диска</comment>
     <comment xml:lang="sv">SAP Thomson-diskavbild</comment>
-    <comment xml:lang="tr">SAP Thomson disket kalıbı</comment>
+    <comment xml:lang="tr">SAP Thomson disket görüntüsü</comment>
     <comment xml:lang="uk">образ дискети Thomson SAP</comment>
-    <comment xml:lang="zh_CN">SAP Thomson 软盘映像</comment>
-    <comment xml:lang="zh_TW">SAP Thomson 軟碟映像檔</comment>
+    <comment xml:lang="zh-CN">SAP Thomson 软盘映像</comment>
+    <comment xml:lang="zh-TW">SAP Thomson 軟碟映像檔</comment>
     <acronym>SAP</acronym>
     <expanded-acronym>Système d'Archivage Pukall</expanded-acronym>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.sap"/>
     <magic>
-      <match value="SYSTEME D'ARCHIVAGE PUKALL S.A.P. (c) Alexandre PUKALL Avril 1998" type="string" offset="1"/>
+      <match offset="1" type="string" value="SYSTEME D'ARCHIVAGE PUKALL S.A.P. (c) Alexandre PUKALL Avril 1998"/>
     </magic>
     <alias type="application/x-sap-file"/>
   </mime-type>
   <mime-type type="application/vnd.debian.binary-package">
     <comment>Debian package</comment>
+    <comment xml:lang="af">Debian-pakket</comment>
     <comment xml:lang="ar">حزمة ديبيان</comment>
     <comment xml:lang="az">Debian paketi</comment>
-    <comment xml:lang="be@latin">Pakunak Debian</comment>
+    <comment xml:lang="be-Latn">Pakunak Debian</comment>
     <comment xml:lang="bg">Пакет — Debian</comment>
     <comment xml:lang="ca">paquet Debian</comment>
     <comment xml:lang="cs">balíček Debianu</comment>
@@ -9905,13 +10323,14 @@
     <comment xml:lang="da">Debianpakke</comment>
     <comment xml:lang="de">Debian-Paket</comment>
     <comment xml:lang="el">Πακέτο Debian</comment>
-    <comment xml:lang="en_GB">Debian package</comment>
+    <comment xml:lang="en-GB">Debian package</comment>
     <comment xml:lang="eo">Debian-pakaĵo</comment>
     <comment xml:lang="es">paquete de Debian</comment>
     <comment xml:lang="eu">Debian paketea</comment>
     <comment xml:lang="fi">Debian-paketti</comment>
     <comment xml:lang="fo">Debian pakki</comment>
     <comment xml:lang="fr">paquet Debian</comment>
+    <comment xml:lang="fur">pachet Debian</comment>
     <comment xml:lang="ga">pacáiste Debian</comment>
     <comment xml:lang="gl">paquete de Debian</comment>
     <comment xml:lang="he">חבילת דביאן</comment>
@@ -9933,7 +10352,7 @@
     <comment xml:lang="oc">paquet Debian</comment>
     <comment xml:lang="pl">Pakiet Debiana</comment>
     <comment xml:lang="pt">pacote Debian</comment>
-    <comment xml:lang="pt_BR">Pacote Debian</comment>
+    <comment xml:lang="pt-BR">Pacote Debian</comment>
     <comment xml:lang="ro">Pachet Debian</comment>
     <comment xml:lang="ru">Пакет Debian</comment>
     <comment xml:lang="sk">Balíček Debianu</comment>
@@ -9944,90 +10363,78 @@
     <comment xml:lang="tr">Debian paketi</comment>
     <comment xml:lang="uk">пакунок Debian</comment>
     <comment xml:lang="vi">Gói Debian</comment>
-    <comment xml:lang="zh_CN">Debian 软件包</comment>
-    <comment xml:lang="zh_TW">Debian 軟體包</comment>
+    <comment xml:lang="zh-CN">Debian 软件包</comment>
+    <comment xml:lang="zh-TW">Debian 軟體包</comment>
     <alias type="application/x-deb"/>
     <alias type="application/x-debian-package"/>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="!&lt;arch&gt;" type="string" offset="0">
-        <match value="debian" type="string" offset="8"/>
+      <match type="string" value="!&lt;arch&gt;" offset="0">
+        <match type="string" value="debian" offset="8"/>
       </match>
     </magic>
     <glob pattern="*.deb"/>
     <glob pattern="*.udeb"/>
   </mime-type>
   <mime-type type="application/x-designer">
-    <comment>Qt Designer file</comment>
-    <comment xml:lang="ar">ملف Qt Designer</comment>
-    <comment xml:lang="be@latin">Fajł Qt Designer</comment>
-    <comment xml:lang="bg">Файл — Qt Designer</comment>
-    <comment xml:lang="ca">fitxer de Qt Designer</comment>
-    <comment xml:lang="cs">soubor Qt Designer</comment>
-    <comment xml:lang="da">Qt Designer-fil</comment>
-    <comment xml:lang="de">Qt-Designer-Datei</comment>
-    <comment xml:lang="el">Αρχείο Qt Designer</comment>
-    <comment xml:lang="en_GB">Qt Designer file</comment>
-    <comment xml:lang="eo">dosiero de Qt Designer</comment>
-    <comment xml:lang="es">archivo de Qt Designer</comment>
-    <comment xml:lang="eu">Qt Designer Fitxategia</comment>
-    <comment xml:lang="fi">Qt Designer -tiedosto</comment>
-    <comment xml:lang="fo">Qt Designer fíla</comment>
-    <comment xml:lang="fr">fichier Qt Designer</comment>
-    <comment xml:lang="ga">comhad Qt Designer</comment>
-    <comment xml:lang="gl">ficheiro de Qt Designer</comment>
-    <comment xml:lang="he">קובץ של Qt Designer</comment>
-    <comment xml:lang="hr">Qt Designer datoteka</comment>
-    <comment xml:lang="hu">Qt Designer-fájl</comment>
-    <comment xml:lang="ia">File Qt Designer</comment>
-    <comment xml:lang="id">Berkas Qt Designer</comment>
-    <comment xml:lang="it">File Qt Designer</comment>
-    <comment xml:lang="ja">Qt Designer ファイル</comment>
-    <comment xml:lang="kk">Qt Designer файлы</comment>
-    <comment xml:lang="ko">Qt 디자이너 파일</comment>
-    <comment xml:lang="lt">Qt Designer failas</comment>
-    <comment xml:lang="lv">Qt Designer datne</comment>
-    <comment xml:lang="ms">Fail Qt Designer</comment>
-    <comment xml:lang="nb">Qt Designer-fil</comment>
-    <comment xml:lang="nl">Qt Designer-bestand</comment>
-    <comment xml:lang="nn">Qt Designer-fil</comment>
-    <comment xml:lang="oc">fichièr Qt Designer</comment>
-    <comment xml:lang="pl">Plik Qt Designer</comment>
-    <comment xml:lang="pt">ficheiro do Qt Designer</comment>
-    <comment xml:lang="pt_BR">Arquivo do Qt Designer</comment>
-    <comment xml:lang="ro">Fișier Qt Designer</comment>
-    <comment xml:lang="ru">Файл Qt Designer</comment>
-    <comment xml:lang="sk">Súbor Qt Designer</comment>
-    <comment xml:lang="sl">Datoteka Qt Designer</comment>
-    <comment xml:lang="sq">File Qt Designer</comment>
-    <comment xml:lang="sr">датотека Кут дизајнера</comment>
-    <comment xml:lang="sv">Qt Designer-fil</comment>
-    <comment xml:lang="tr">Qt Tasarımcı dosyası</comment>
-    <comment xml:lang="uk">файл програми Qt-дизайнер</comment>
-    <comment xml:lang="vi">Tập tin thiết kế Qt Designer</comment>
-    <comment xml:lang="zh_CN">Qt Designer 文件</comment>
-    <comment xml:lang="zh_TW">Qt Designer 檔案</comment>
+    <comment>Qt Designer interface document</comment>
+    <comment xml:lang="bg">Документ — интерфейс, Qt Designer</comment>
+    <comment xml:lang="ca">document d'interfície Qt Designer</comment>
+    <comment xml:lang="da">Qt Designer-brugerflade-dokument</comment>
+    <comment xml:lang="de">Qt-Designer-Oberflächendokument</comment>
+    <comment xml:lang="en-GB">Qt Designer interface document</comment>
+    <comment xml:lang="es">documento de interfaz de Qt Designer</comment>
+    <comment xml:lang="eu">Qt Designer interfaze dokumentua</comment>
+    <comment xml:lang="fi">Qt Designer -käyttöliittymän asiakirja</comment>
+    <comment xml:lang="fr">document d'interface Qt Designer</comment>
+    <comment xml:lang="hr">Qt Designer dokument sučelja</comment>
+    <comment xml:lang="hu">Qt Designer felületleíró dokumentum</comment>
+    <comment xml:lang="id">Dokumen antarmuka Qt Designer</comment>
+    <comment xml:lang="it">Documento interfaccia Qt Designer</comment>
+    <comment xml:lang="kk">Qt Designer интерфейс құжаты</comment>
+    <comment xml:lang="ko">Qt 디자이너 인터페이스 문서</comment>
+    <comment xml:lang="pl">Dokument interfejsu Qt Designer</comment>
+    <comment xml:lang="pt">documento de interface Qt Designer</comment>
+    <comment xml:lang="pt-BR">Documento de interface do Qt Designer</comment>
+    <comment xml:lang="ru">Документ интерфейса Qt Designer</comment>
+    <comment xml:lang="sv">Qt Designer-gränssnittsdokument</comment>
+    <comment xml:lang="tr">Qt Designer arayüz belgesi</comment>
+    <comment xml:lang="uk">документ інтерфейсу Qt Designer</comment>
+    <comment xml:lang="zh-CN">Qt Designer 界面文档</comment>
+    <comment xml:lang="zh-TW">Qt Designer 介面文件</comment>
     <generic-icon name="x-office-document"/>
     <sub-class-of type="application/xml"/>
     <magic>
-      <match value="&lt;ui " type="string" offset="0:256"/>
-      <match value="&lt;UI " type="string" offset="0:256"/>
+      <match type="string" value="&lt;ui " offset="0:256"/>
+      <match type="string" value="&lt;UI " offset="0:256"/>
     </magic>
     <glob pattern="*.ui"/>
   </mime-type>
+  <mime-type type="text/x-kaitai-struct">
+    <comment>Kaitai Struct definition file</comment>
+    <comment xml:lang="ca">fitxer de definicions Kaitai Struct</comment>
+    <comment xml:lang="fi">Kaitai Struct määritystiedosto</comment>
+    <comment xml:lang="it">File definizione Kaitai Struct</comment>
+    <comment xml:lang="pl">Plik definicji Kaitai Struct</comment>
+    <comment xml:lang="uk">файл визначень Kaitai Struct</comment>
+    <sub-class-of type="application/x-yaml"/>
+    <glob pattern="*.ksy"/>
+  </mime-type>
   <mime-type type="text/x-qml">
     <comment>Qt Markup Language file</comment>
-    <comment xml:lang="bg">Файл — Qt Markup</comment>
+    <comment xml:lang="af">Qt Markup Language-lêer</comment>
+    <comment xml:lang="bg">Интерфейс — Qt Markup</comment>
     <comment xml:lang="ca">fitxer de llenguatge de marcadors Qt</comment>
     <comment xml:lang="cs">soubor Qt Markup Language</comment>
     <comment xml:lang="da">Qt Markup Language-fil</comment>
     <comment xml:lang="de">Qt-Auszeichnungssprachendatei</comment>
     <comment xml:lang="el">Αρχείο Qt Markup Language</comment>
-    <comment xml:lang="en_GB">Qt Markup Language file</comment>
+    <comment xml:lang="en-GB">Qt Markup Language file</comment>
     <comment xml:lang="es">archivo de lenguaje de marcado Qt</comment>
     <comment xml:lang="eu">Qt Markup lengoai fitxategia</comment>
     <comment xml:lang="fi">QML-tiedosto</comment>
     <comment xml:lang="fr">fichier Qt Markup Language</comment>
+    <comment xml:lang="fur">file Qt Markup Language</comment>
     <comment xml:lang="ga">comhad teanga mharcála Qt</comment>
     <comment xml:lang="gl">ficheiro de linguaxe de marcado Qt</comment>
     <comment xml:lang="he">קובץ שפת סימון של Qt</comment>
@@ -10044,7 +10451,7 @@
     <comment xml:lang="oc">fichièr Qt Markup Language</comment>
     <comment xml:lang="pl">Plik języka znaczników Qt</comment>
     <comment xml:lang="pt">ficheiro de linguagem Qt Markup</comment>
-    <comment xml:lang="pt_BR">Arquivo de Qt Markup Language</comment>
+    <comment xml:lang="pt-BR">Arquivo de Qt Markup Language</comment>
     <comment xml:lang="ru">Файл Qt Markup Language</comment>
     <comment xml:lang="sk">Súbor značkovacieho jazyka Qt</comment>
     <comment xml:lang="sl">Datoteka označevalnega jezika Qt</comment>
@@ -10052,15 +10459,15 @@
     <comment xml:lang="sv">Qt-märkspråksfil</comment>
     <comment xml:lang="tr">Qt İşaretleme Dili dosyası</comment>
     <comment xml:lang="uk">файл мови розмітки Qt</comment>
-    <comment xml:lang="zh_CN">Qt Markup Language 文件</comment>
-    <comment xml:lang="zh_TW">Qt 標記語言檔</comment>
+    <comment xml:lang="zh-CN">Qt Markup Language 文件</comment>
+    <comment xml:lang="zh-TW">Qt 標記語言檔</comment>
     <magic priority="80">
-      <match value="/bin/env qml" type="string" offset="2:16"/>
-      <match value="import Qt" type="string" offset="0:3000">
-        <match value="{" type="string" offset="9:3009"/>
+      <match type="string" value="/bin/env qml" offset="2:16"/>
+      <match type="string" value="import Qt" offset="0:3000">
+        <match type="string" value="{" offset="9:3009"/>
       </match>
-      <match value="import Qml" type="string" offset="0:3000">
-        <match value="{" type="string" offset="9:3009"/>
+      <match type="string" value="import Qml" offset="0:3000">
+        <match type="string" value="{" offset="9:3009"/>
       </match>
     </magic>
     <glob pattern="*.qml"/>
@@ -10070,24 +10477,25 @@
   <mime-type type="application/x-desktop">
     <comment>desktop configuration file</comment>
     <comment xml:lang="ar">ملف تضبيط سطح المكتب</comment>
-    <comment xml:lang="be@latin">kanfihuracyjny fajł asiarodździa</comment>
-    <comment xml:lang="bg">Файл с информация за работния плот</comment>
+    <comment xml:lang="be-Latn">kanfihuracyjny fajł asiarodździa</comment>
+    <comment xml:lang="bg">Информация за работния плот</comment>
     <comment xml:lang="ca">fitxer de configuració d'escriptori</comment>
     <comment xml:lang="cs">soubor nastavení pracovní plochy</comment>
     <comment xml:lang="da">skrivebordskonfigurationsfil</comment>
     <comment xml:lang="de">Desktop-Konfigurationsdatei</comment>
     <comment xml:lang="el">Αρχείο ρυθμίσεων επιφάνειας εργασίας</comment>
-    <comment xml:lang="en_GB">desktop configuration file</comment>
+    <comment xml:lang="en-GB">desktop configuration file</comment>
     <comment xml:lang="eo">dosiero de agordoj de labortablo</comment>
     <comment xml:lang="es">archivo de configuración del escritorio</comment>
     <comment xml:lang="eu">Mahaigainaren konfigurazio-fitxategia</comment>
     <comment xml:lang="fi">työpöydän asetustiedosto</comment>
     <comment xml:lang="fo">skriviborðssamansetingarfíla</comment>
     <comment xml:lang="fr">fichier de configuration desktop</comment>
+    <comment xml:lang="fur">file di configurazion scritori</comment>
     <comment xml:lang="ga">comhad cumraíochta deisce</comment>
     <comment xml:lang="gl">ficheiro de configuración de escritorio</comment>
     <comment xml:lang="he">קובץ הגדרות שולחן עבודה</comment>
-    <comment xml:lang="hr">Datoteka prečaca radne površine</comment>
+    <comment xml:lang="hr">datoteka podešavanja radne površine</comment>
     <comment xml:lang="hu">asztalbeállító fájl</comment>
     <comment xml:lang="ia">File de configuration de scriptorio</comment>
     <comment xml:lang="id">berkas konfigurasi destop</comment>
@@ -10104,7 +10512,7 @@
     <comment xml:lang="oc">fichièr de configuracion desktop</comment>
     <comment xml:lang="pl">Plik konfiguracji środowiska</comment>
     <comment xml:lang="pt">ficheiro de configuração de área de trabalho</comment>
-    <comment xml:lang="pt_BR">Arquivo de configuração desktop</comment>
+    <comment xml:lang="pt-BR">Arquivo de configuração desktop</comment>
     <comment xml:lang="ro">fișier de configurare al desktopului</comment>
     <comment xml:lang="ru">Файл настроек рабочего стола</comment>
     <comment xml:lang="sk">Súbor nastavení pracovnej plochy</comment>
@@ -10112,19 +10520,19 @@
     <comment xml:lang="sq">File konfigurimi desktop</comment>
     <comment xml:lang="sr">датотека подешавања радне површи</comment>
     <comment xml:lang="sv">skrivbordskonfigurationsfil</comment>
-    <comment xml:lang="tr">masa üstü yapılandırma dosyası</comment>
+    <comment xml:lang="tr">masaüstü yapılandırma dosyası</comment>
     <comment xml:lang="uk">файл конфігурації стільниці</comment>
     <comment xml:lang="vi">tập tin cấu hình môi trường</comment>
-    <comment xml:lang="zh_CN">桌面配置文件</comment>
-    <comment xml:lang="zh_TW">桌面組態檔</comment>
+    <comment xml:lang="zh-CN">桌面配置文件</comment>
+    <comment xml:lang="zh-TW">桌面組態檔</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="[Desktop Entry]" type="string" offset="0:32"/>
-      <match value="[Desktop Action" type="string" offset="0"/>
-      <match value="[KDE Desktop Entry]" type="string" offset="0"/>
-      <match value="# Config File" type="string" offset="0"/>
-      <match value="# KDE Config File" type="string" offset="0"/>
+      <match type="string" value="[Desktop Entry]" offset="0:32"/>
+      <match type="string" value="[Desktop Action" offset="0"/>
+      <match type="string" value="[KDE Desktop Entry]" offset="0"/>
+      <match type="string" value="# Config File" offset="0"/>
+      <match type="string" value="# KDE Config File" offset="0"/>
     </magic>
     <glob pattern="*.desktop"/>
     <glob pattern="*.kdelnk"/>
@@ -10132,6 +10540,7 @@
   </mime-type>
   <mime-type type="application/x-fictionbook+xml">
     <comment>FictionBook document</comment>
+    <comment xml:lang="af">FictionBook-dokument</comment>
     <comment xml:lang="ar">مستند FictionBook</comment>
     <comment xml:lang="ast">Documentu de FictionBook</comment>
     <comment xml:lang="bg">Документ — FictionBook</comment>
@@ -10140,13 +10549,14 @@
     <comment xml:lang="da">FictionBook-dokument</comment>
     <comment xml:lang="de">FictionBook-Dokument</comment>
     <comment xml:lang="el">Έγγραφο FictionBook</comment>
-    <comment xml:lang="en_GB">FictionBook document</comment>
+    <comment xml:lang="en-GB">FictionBook document</comment>
     <comment xml:lang="eo">FictionBook-dokumento</comment>
     <comment xml:lang="es">documento FictionBook</comment>
     <comment xml:lang="eu">FictionBook dokumentua</comment>
     <comment xml:lang="fi">FictionBook-asiakirja</comment>
     <comment xml:lang="fo">FictionBook skjal</comment>
     <comment xml:lang="fr">document FictionBook</comment>
+    <comment xml:lang="fur">document FictionBook</comment>
     <comment xml:lang="ga">cáipéis FictionBook</comment>
     <comment xml:lang="gl">documento de FictionBook</comment>
     <comment xml:lang="he">מסמך FictionBook</comment>
@@ -10165,7 +10575,7 @@
     <comment xml:lang="oc">document FictionBook</comment>
     <comment xml:lang="pl">Dokument FictionBook</comment>
     <comment xml:lang="pt">documento FictionBook</comment>
-    <comment xml:lang="pt_BR">Documento FictionBook</comment>
+    <comment xml:lang="pt-BR">Documento FictionBook</comment>
     <comment xml:lang="ro">Document FictionBook</comment>
     <comment xml:lang="ru">Документ FictionBook</comment>
     <comment xml:lang="sk">Dokument FictionBook</comment>
@@ -10175,29 +10585,32 @@
     <comment xml:lang="tr">FictionBook belgesi</comment>
     <comment xml:lang="uk">документ FictionBook</comment>
     <comment xml:lang="vi">Tài liệu FictionBook</comment>
-    <comment xml:lang="zh_CN">FictionBook 文档</comment>
-    <comment xml:lang="zh_TW">FictionBook 文件</comment>
+    <comment xml:lang="zh-CN">FictionBook 文档</comment>
+    <comment xml:lang="zh-TW">FictionBook 文件</comment>
     <sub-class-of type="application/xml"/>
     <glob pattern="*.fb2"/>
     <magic priority="80">
-      <match value="&lt;FictionBook" type="string" offset="0:256"/>
+      <match type="string" value="&lt;FictionBook" offset="0:256"/>
     </magic>
     <alias type="application/x-fictionbook"/>
     <root-XML namespaceURI="http://www.gribuser.ru/xml/fictionbook/2.0" localName="FictionBook"/>
   </mime-type>
   <mime-type type="application/x-zip-compressed-fb2">
     <comment>Compressed FictionBook document</comment>
+    <comment xml:lang="af">Saamgepersde FictionBook-dokument</comment>
     <comment xml:lang="ast">Documentu comprimíu de FictionBook</comment>
+    <comment xml:lang="bg">Документ — FictionBook, компресиран</comment>
     <comment xml:lang="ca">document FictionBook amb compressió</comment>
     <comment xml:lang="cs">komprimovaný dokument FictionBook</comment>
     <comment xml:lang="da">Komprimeret FictionBook-dokument</comment>
     <comment xml:lang="de">Komprimiertes FictionBook-Dokument</comment>
     <comment xml:lang="el">Συμπιεσμένο έγγραφο FictionBook</comment>
-    <comment xml:lang="en_GB">Compressed FictionBook document</comment>
+    <comment xml:lang="en-GB">Compressed FictionBook document</comment>
     <comment xml:lang="es">documento comprimido de FictionBook</comment>
     <comment xml:lang="eu">Konprimitutako FictionBook dokumentua</comment>
     <comment xml:lang="fi">Pakattu FictionBook-asiakirja</comment>
     <comment xml:lang="fr">document FictionBook compressé</comment>
+    <comment xml:lang="fur">document FictionBook comprimût</comment>
     <comment xml:lang="ga">cáipéis chomhbhrúite FictionBook</comment>
     <comment xml:lang="gl">Documento de FictionBook comprimida</comment>
     <comment xml:lang="he">מסמך FictionBook מכווץ</comment>
@@ -10211,30 +10624,31 @@
     <comment xml:lang="oc">document FictionBook compressat</comment>
     <comment xml:lang="pl">Skompresowany dokument FictionBook</comment>
     <comment xml:lang="pt">documento comprimido FictionBook</comment>
-    <comment xml:lang="pt_BR">Documento FictionBook comprimido</comment>
+    <comment xml:lang="pt-BR">Documento FictionBook comprimido</comment>
     <comment xml:lang="ru">Сжатый документ FictionBook</comment>
     <comment xml:lang="sk">Komprimovaný dokument FictionBook</comment>
     <comment xml:lang="sl">Stisnjeni dokument FictionBook</comment>
     <comment xml:lang="sr">запаковани документ Фикшон Књиге</comment>
     <comment xml:lang="sv">Komprimerat FictionBook-dokument</comment>
-    <comment xml:lang="tr">Sıkıştırılmış KurguKitap belgesi</comment>
+    <comment xml:lang="tr">Sıkıştırılmış FictionBook belgesi</comment>
     <comment xml:lang="uk">стиснений документ FictionBook</comment>
-    <comment xml:lang="zh_CN">压缩的 FictionBook 文档</comment>
-    <comment xml:lang="zh_TW">壓縮版 FictionBook 文件</comment>
+    <comment xml:lang="zh-CN">压缩的 FictionBook 文档</comment>
+    <comment xml:lang="zh-TW">壓縮版 FictionBook 文件</comment>
     <sub-class-of type="application/zip"/>
     <glob pattern="*.fb2.zip"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        
-        <match value=".fb2" type="string" offset="30:256"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <!-- Okay, this is not ideal, but it should be good enough for normal cases -->
+        <match type="string" value=".fb2" offset="30:256"/>
       </match>
     </magic>
   </mime-type>
   <mime-type type="application/x-dia-diagram">
     <comment>Dia diagram</comment>
+    <comment xml:lang="af">Dia-diagram</comment>
     <comment xml:lang="ar">خطاطة Dia</comment>
     <comment xml:lang="az">Dia diaqramı</comment>
-    <comment xml:lang="be@latin">Dyjahrama Dia</comment>
+    <comment xml:lang="be-Latn">Dyjahrama Dia</comment>
     <comment xml:lang="bg">Диаграма — Dia</comment>
     <comment xml:lang="ca">diagrama de Dia</comment>
     <comment xml:lang="cs">diagram Dia</comment>
@@ -10242,13 +10656,14 @@
     <comment xml:lang="da">Dia-diagram</comment>
     <comment xml:lang="de">Dia-Diagramm</comment>
     <comment xml:lang="el">Διάγραμμα Dia</comment>
-    <comment xml:lang="en_GB">Dia diagram</comment>
+    <comment xml:lang="en-GB">Dia diagram</comment>
     <comment xml:lang="eo">Dia-diagramo</comment>
     <comment xml:lang="es">diagrama de Dia</comment>
     <comment xml:lang="eu">Dia diagrama</comment>
     <comment xml:lang="fi">Dia-kaavio</comment>
     <comment xml:lang="fo">Dia ritmynd</comment>
     <comment xml:lang="fr">diagramme Dia</comment>
+    <comment xml:lang="fur">diagram Dia</comment>
     <comment xml:lang="ga">léaráid Dia</comment>
     <comment xml:lang="gl">diagrama de Dia</comment>
     <comment xml:lang="he">גרף של Dia</comment>
@@ -10270,7 +10685,7 @@
     <comment xml:lang="oc">diagrama Dia</comment>
     <comment xml:lang="pl">Diagram Dia</comment>
     <comment xml:lang="pt">diagrama Dia</comment>
-    <comment xml:lang="pt_BR">Diagrama do Dia</comment>
+    <comment xml:lang="pt-BR">Diagrama do Dia</comment>
     <comment xml:lang="ro">Diagramă Dia</comment>
     <comment xml:lang="ru">Диаграмма Dia</comment>
     <comment xml:lang="sk">Diagram Dia</comment>
@@ -10281,18 +10696,19 @@
     <comment xml:lang="tr">Dia çizimi</comment>
     <comment xml:lang="uk">діаграма Dia</comment>
     <comment xml:lang="vi">Biểu đồ Dia</comment>
-    <comment xml:lang="zh_CN">Dia 图表</comment>
-    <comment xml:lang="zh_TW">Dia 圖表</comment>
+    <comment xml:lang="zh-CN">Dia 图表</comment>
+    <comment xml:lang="zh-TW">Dia 圖表</comment>
     <generic-icon name="image-x-generic"/>
     <sub-class-of type="application/xml"/>
     <glob pattern="*.dia"/>
     <magic priority="50">
-      <match value="&lt;dia:" type="string" offset="5:100"/>
+      <match offset="5:100" type="string" value="&lt;dia:"/>
     </magic>
     <root-XML namespaceURI="http://www.lysator.liu.se/~alla/dia/" localName="diagram"/>
   </mime-type>
   <mime-type type="application/x-dia-shape">
     <comment>Dia shape</comment>
+    <comment xml:lang="af">Dia-vorm</comment>
     <comment xml:lang="ar">شكل Dia</comment>
     <comment xml:lang="bg">Фигура — Dia</comment>
     <comment xml:lang="ca">forma de Dia</comment>
@@ -10300,12 +10716,13 @@
     <comment xml:lang="da">Dia-figur</comment>
     <comment xml:lang="de">Dia-Form</comment>
     <comment xml:lang="el">Σχήμα Dia</comment>
-    <comment xml:lang="en_GB">Dia shape</comment>
+    <comment xml:lang="en-GB">Dia shape</comment>
     <comment xml:lang="es">forma de Dia</comment>
     <comment xml:lang="eu">Dia-ren forma</comment>
     <comment xml:lang="fi">Dia-muoto</comment>
     <comment xml:lang="fo">Dia skapur</comment>
     <comment xml:lang="fr">forme Dia</comment>
+    <comment xml:lang="fur">sagome Dia</comment>
     <comment xml:lang="ga">cruth Dia</comment>
     <comment xml:lang="gl">forma de Dia</comment>
     <comment xml:lang="he">צורה של Dia</comment>
@@ -10323,7 +10740,7 @@
     <comment xml:lang="oc">forma Dia</comment>
     <comment xml:lang="pl">Kształt Dia</comment>
     <comment xml:lang="pt">forma Dia</comment>
-    <comment xml:lang="pt_BR">Formato Dia</comment>
+    <comment xml:lang="pt-BR">Formato Dia</comment>
     <comment xml:lang="ro">Figură Dia</comment>
     <comment xml:lang="ru">Фигура Dia</comment>
     <comment xml:lang="sk">Tvar Dia</comment>
@@ -10332,34 +10749,36 @@
     <comment xml:lang="sv">Dia-figur</comment>
     <comment xml:lang="tr">Dia şekli</comment>
     <comment xml:lang="uk">форма Dia</comment>
-    <comment xml:lang="zh_CN">Dia 形状</comment>
-    <comment xml:lang="zh_TW">Dia 形狀</comment>
+    <comment xml:lang="zh-CN">Dia 形状</comment>
+    <comment xml:lang="zh-TW">Dia 形狀</comment>
     <generic-icon name="image-x-generic"/>
     <sub-class-of type="application/xml"/>
     <glob pattern="*.shape"/>
     <magic priority="50">
-      <match value="&lt;shape" type="string" offset="5:100"/>
+      <match offset="5:100" type="string" value="&lt;shape"/>
     </magic>
     <root-XML namespaceURI="http://www.daa.com.au/~james/dia-shape-ns" localName="shape"/>
   </mime-type>
   <mime-type type="application/x-dvi">
     <comment>TeX DVI document</comment>
+    <comment xml:lang="af">TeX DVI-dokument</comment>
     <comment xml:lang="ar">مستند TeX DVI</comment>
     <comment xml:lang="ast">Documentu Tex DVI</comment>
-    <comment xml:lang="be@latin">Dakument TeX DVI</comment>
+    <comment xml:lang="be-Latn">Dakument TeX DVI</comment>
     <comment xml:lang="bg">Документ — TeX DVI</comment>
     <comment xml:lang="ca">document DVI de TeX</comment>
     <comment xml:lang="cs">dokument TeX DVI</comment>
     <comment xml:lang="da">TeX DVI-dokument</comment>
     <comment xml:lang="de">TeX-DVI-Dokument</comment>
     <comment xml:lang="el">Έγγραφο TeX DVI</comment>
-    <comment xml:lang="en_GB">TeX DVI document</comment>
+    <comment xml:lang="en-GB">TeX DVI document</comment>
     <comment xml:lang="eo">DVI-dokumento de TeX</comment>
     <comment xml:lang="es">documento TeX DVI</comment>
     <comment xml:lang="eu">TeX DVI dokumentua</comment>
     <comment xml:lang="fi">TeX DVI -asiakirja</comment>
     <comment xml:lang="fo">TeX DVI skjal</comment>
     <comment xml:lang="fr">document TeX DVI</comment>
+    <comment xml:lang="fur">document DVI TeX</comment>
     <comment xml:lang="ga">cáipéis DVI TeX</comment>
     <comment xml:lang="gl">documento TeX DVI</comment>
     <comment xml:lang="he">מסמך מסוג TeX DVI</comment>
@@ -10380,7 +10799,7 @@
     <comment xml:lang="oc">document TeX DVI</comment>
     <comment xml:lang="pl">Dokument TeX DVI</comment>
     <comment xml:lang="pt">documento TeX DVI</comment>
-    <comment xml:lang="pt_BR">Documento DVI TeX</comment>
+    <comment xml:lang="pt-BR">Documento DVI TeX</comment>
     <comment xml:lang="ro">Document Tex DVI</comment>
     <comment xml:lang="ru">Документ TeX DVI</comment>
     <comment xml:lang="sk">Dokument TeX DVI</comment>
@@ -10391,21 +10810,22 @@
     <comment xml:lang="tr">TeX DVI belgesi</comment>
     <comment xml:lang="uk">документ TeX DVI</comment>
     <comment xml:lang="vi">Tài liệu DVI Tex</comment>
-    <comment xml:lang="zh_CN">TeX DVI 文档</comment>
-    <comment xml:lang="zh_TW">TeX DVI 文件</comment>
+    <comment xml:lang="zh-CN">TeX DVI 文档</comment>
+    <comment xml:lang="zh-TW">TeX DVI 文件</comment>
     <acronym>DVI</acronym>
     <expanded-acronym>Device independent file format</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="0x02f7" type="little16" offset="0"/>
+      <match type="little16" value="0x02f7" offset="0"/>
     </magic>
     <glob pattern="*.dvi"/>
   </mime-type>
   <mime-type type="application/x-e-theme">
     <comment>Enlightenment theme</comment>
+    <comment xml:lang="af">Enlightenment-tema</comment>
     <comment xml:lang="ar">سمة Enlightenment</comment>
     <comment xml:lang="az">Enlightenment örtüyü</comment>
-    <comment xml:lang="be@latin">Matyŭ Enlightenment</comment>
+    <comment xml:lang="be-Latn">Matyŭ Enlightenment</comment>
     <comment xml:lang="bg">Тема — Enlightenment</comment>
     <comment xml:lang="ca">tema d'Enlightenment</comment>
     <comment xml:lang="cs">motiv Enlightenment</comment>
@@ -10413,13 +10833,14 @@
     <comment xml:lang="da">Enlightenmenttema</comment>
     <comment xml:lang="de">Enlightenment-Thema</comment>
     <comment xml:lang="el">Θέμα Enlightenment</comment>
-    <comment xml:lang="en_GB">Enlightenment theme</comment>
+    <comment xml:lang="en-GB">Enlightenment theme</comment>
     <comment xml:lang="eo">etoso de Enlightenment</comment>
     <comment xml:lang="es">tema de Enlightenment</comment>
     <comment xml:lang="eu">Enlightenment gaia</comment>
     <comment xml:lang="fi">Enlightenment-teema</comment>
     <comment xml:lang="fo">Enlightenment tema</comment>
     <comment xml:lang="fr">thème Enlightenment</comment>
+    <comment xml:lang="fur">teme di Enlightenment</comment>
     <comment xml:lang="ga">téama Enlightenment</comment>
     <comment xml:lang="gl">tema de Enlightenment</comment>
     <comment xml:lang="he">ערכת נושא של Enlightenment</comment>
@@ -10441,7 +10862,7 @@
     <comment xml:lang="oc">tèma Enlightenment</comment>
     <comment xml:lang="pl">Motyw Enlightenment</comment>
     <comment xml:lang="pt">tema Enlightenment</comment>
-    <comment xml:lang="pt_BR">Tema do Enlightenment</comment>
+    <comment xml:lang="pt-BR">Tema do Enlightenment</comment>
     <comment xml:lang="ro">Temă Enlightenment</comment>
     <comment xml:lang="ru">Тема Enlightenment</comment>
     <comment xml:lang="sk">Motív Enlightenment</comment>
@@ -10452,27 +10873,28 @@
     <comment xml:lang="tr">Enlightenment teması</comment>
     <comment xml:lang="uk">тема Enlightenment</comment>
     <comment xml:lang="vi">Sắc thái Enlightenment</comment>
-    <comment xml:lang="zh_CN">Enlightenment 主题</comment>
-    <comment xml:lang="zh_TW">Enlightenment 佈景主題</comment>
+    <comment xml:lang="zh-CN">Enlightenment 主题</comment>
+    <comment xml:lang="zh-TW">Enlightenment 佈景主題</comment>
     <glob pattern="*.etheme"/>
   </mime-type>
   <mime-type type="application/x-egon">
     <comment>Egon Animator animation</comment>
     <comment xml:lang="ar">تحريكة محرك Egon</comment>
-    <comment xml:lang="be@latin">Animacyja Egon Animator</comment>
+    <comment xml:lang="be-Latn">Animacyja Egon Animator</comment>
     <comment xml:lang="bg">Анимация — Egon Animator</comment>
     <comment xml:lang="ca">animació d'Egon Animator</comment>
     <comment xml:lang="cs">animace Egon Animator</comment>
     <comment xml:lang="da">Egon Animator-animation</comment>
     <comment xml:lang="de">Egon-Animator-Animation</comment>
     <comment xml:lang="el">Κινούμενο σχέδιο Egon Animator</comment>
-    <comment xml:lang="en_GB">Egon Animator animation</comment>
+    <comment xml:lang="en-GB">Egon Animator animation</comment>
     <comment xml:lang="eo">animacio de Egon Animator</comment>
     <comment xml:lang="es">animación de Egon Animator</comment>
     <comment xml:lang="eu">Egon Animator-eko animazioa</comment>
     <comment xml:lang="fi">Egon Animator -animaatio</comment>
     <comment xml:lang="fo">Egon Animator teknimyndagerð</comment>
     <comment xml:lang="fr">animation Egon Animator</comment>
+    <comment xml:lang="fur">animazion Egon Animator</comment>
     <comment xml:lang="ga">beochan Egon Animator</comment>
     <comment xml:lang="gl">animación de Egon Animator</comment>
     <comment xml:lang="he">אנימצייה של Egon Animator</comment>
@@ -10494,7 +10916,7 @@
     <comment xml:lang="oc">animacion Egon Animator</comment>
     <comment xml:lang="pl">Animacja Egon Animator</comment>
     <comment xml:lang="pt">animação Egon Animator</comment>
-    <comment xml:lang="pt_BR">Animação do Egon Animator</comment>
+    <comment xml:lang="pt-BR">Animação do Egon Animator</comment>
     <comment xml:lang="ro">Animație Egon Animator</comment>
     <comment xml:lang="ru">Анимация Egon Animator</comment>
     <comment xml:lang="sk">Animácia Egon Animator</comment>
@@ -10505,28 +10927,30 @@
     <comment xml:lang="tr">Egon Animator canlandırması</comment>
     <comment xml:lang="uk">анімація Egon Animator</comment>
     <comment xml:lang="vi">Hoạt ảnh Egon Animator</comment>
-    <comment xml:lang="zh_CN">Egon Animator 动画</comment>
-    <comment xml:lang="zh_TW">Egon Animator 動畫</comment>
+    <comment xml:lang="zh-CN">Egon Animator 动画</comment>
+    <comment xml:lang="zh-TW">Egon Animator 動畫</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.egon"/>
   </mime-type>
   <mime-type type="application/x-executable">
     <comment>executable</comment>
+    <comment xml:lang="af">uitvoerbaar</comment>
     <comment xml:lang="ar">تنفيذي</comment>
-    <comment xml:lang="be@latin">vykonvalny fajł</comment>
+    <comment xml:lang="be-Latn">vykonvalny fajł</comment>
     <comment xml:lang="bg">Изпълним файл</comment>
     <comment xml:lang="ca">executable</comment>
     <comment xml:lang="cs">spustitelný soubor</comment>
     <comment xml:lang="da">kørbar</comment>
     <comment xml:lang="de">Programm</comment>
     <comment xml:lang="el">Εκτελέσιμο</comment>
-    <comment xml:lang="en_GB">executable</comment>
+    <comment xml:lang="en-GB">executable</comment>
     <comment xml:lang="eo">plenumebla</comment>
     <comment xml:lang="es">ejecutable</comment>
     <comment xml:lang="eu">exekutagarria</comment>
     <comment xml:lang="fi">suoritettava ohjelma</comment>
     <comment xml:lang="fo">inningarfør</comment>
     <comment xml:lang="fr">exécutable</comment>
+    <comment xml:lang="fur">eseguibil</comment>
     <comment xml:lang="ga">comhad inrite</comment>
     <comment xml:lang="gl">executábel</comment>
     <comment xml:lang="he">קובץ הרצה</comment>
@@ -10547,7 +10971,7 @@
     <comment xml:lang="oc">executable</comment>
     <comment xml:lang="pl">Program</comment>
     <comment xml:lang="pt">executável</comment>
-    <comment xml:lang="pt_BR">Executável</comment>
+    <comment xml:lang="pt-BR">Executável</comment>
     <comment xml:lang="ro">executabil</comment>
     <comment xml:lang="ru">Исполняемый</comment>
     <comment xml:lang="sk">Spustiteľný súbor</comment>
@@ -10558,43 +10982,41 @@
     <comment xml:lang="tr">çalıştırılabilir</comment>
     <comment xml:lang="uk">виконуваний файл</comment>
     <comment xml:lang="vi">thực hiện được</comment>
-    <comment xml:lang="zh_CN">可执行文件</comment>
-    <comment xml:lang="zh_TW">可執行檔</comment>
+    <comment xml:lang="zh-CN">可执行文件</comment>
+    <comment xml:lang="zh-TW">可執行檔</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="40">
-      <match value="\177ELF" type="string" offset="0">
-        <match value="1" type="byte" offset="5">
-          <match value="2" type="little16" offset="16"/>
-        </match>
+      <match type="string" value="\177ELF" offset="0">
+        <match type="byte" value="1" offset="5"/>
       </match>
-      <match value="\177ELF" type="string" offset="0">
-        <match value="2" type="byte" offset="5">
-          <match value="2" type="big16" offset="16"/>
-        </match>
+      <match type="string" value="\177ELF" offset="0">
+        <match type="byte" value="2" offset="5"/>
       </match>
-      <match value="MZ" type="string" offset="0"/>
-      <match value="0x521c" type="little16" offset="0"/>
-      <match value="0420" type="host16" offset="0"/>
-      <match value="0421" type="host16" offset="0"/>
-      <match value="0603" type="little16" offset="0"/>
+      <match type="string" value="MZ" offset="0"/>
+      <match type="little16" value="0x521c" offset="0"/>
+      <match type="host16" value="0420" offset="0"/>
+      <match type="host16" value="0421" offset="0"/>
+      <match type="little16" value="0603" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-fluid">
     <comment>FLTK Fluid file</comment>
+    <comment xml:lang="af">FLTK Fluit-lêer</comment>
     <comment xml:lang="ar">ملف FLTK Fluid</comment>
-    <comment xml:lang="be@latin">Fajł FLTK Fluid</comment>
+    <comment xml:lang="be-Latn">Fajł FLTK Fluid</comment>
     <comment xml:lang="bg">Интерфейс — FLTK Fluid</comment>
     <comment xml:lang="ca">fitxer FLTK Fluid</comment>
     <comment xml:lang="cs">soubor FLTK Fluid</comment>
     <comment xml:lang="da">FLTK Fluid-fil</comment>
     <comment xml:lang="de">FLTK-Fluid-Datei</comment>
     <comment xml:lang="el">Αρχείο FLTK Fluid</comment>
-    <comment xml:lang="en_GB">FLTK Fluid file</comment>
+    <comment xml:lang="en-GB">FLTK Fluid file</comment>
     <comment xml:lang="es">archivo FLTK Fluid</comment>
     <comment xml:lang="eu">FLTK Fluid fitxategia</comment>
     <comment xml:lang="fi">FLTK Fluid -tiedosto</comment>
     <comment xml:lang="fo">FLTK Fluid fíla</comment>
     <comment xml:lang="fr">fichier Fluid FLTK</comment>
+    <comment xml:lang="fur">file FLTK Fluid</comment>
     <comment xml:lang="ga">comhad FLTK Fluid</comment>
     <comment xml:lang="gl">ficheiro FLTK Fluid</comment>
     <comment xml:lang="he">קובץ FLTK Fluid</comment>
@@ -10615,7 +11037,7 @@
     <comment xml:lang="oc">fichièr Fluid FLTK</comment>
     <comment xml:lang="pl">Plik Fluid FLTK</comment>
     <comment xml:lang="pt">ficheiro FLTK Fluid</comment>
-    <comment xml:lang="pt_BR">Arquivo Fluid do FLTK</comment>
+    <comment xml:lang="pt-BR">Arquivo Fluid do FLTK</comment>
     <comment xml:lang="ro">Fișier FLTK Fluid</comment>
     <comment xml:lang="ru">Файл FLTK Fluid</comment>
     <comment xml:lang="sk">Súbor FLTK Fluid</comment>
@@ -10626,34 +11048,37 @@
     <comment xml:lang="tr">FLTK Fluid dosyası</comment>
     <comment xml:lang="uk">файл FLTK Fluid</comment>
     <comment xml:lang="vi">Tập tin Fluid FLTK</comment>
-    <comment xml:lang="zh_CN">FLTK 流体文档</comment>
-    <comment xml:lang="zh_TW">FLTK Fluid 檔</comment>
+    <comment xml:lang="zh-CN">FLTK 流体文档</comment>
+    <comment xml:lang="zh-TW">FLTK Fluid 檔</comment>
     <acronym>FLTK</acronym>
     <expanded-acronym>Fast Light Toolkit</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="# data file for the Fltk" type="string" offset="0"/>
+      <match type="string" value="# data file for the Fltk" offset="0"/>
     </magic>
     <glob pattern="*.fl"/>
   </mime-type>
   <mime-type type="font/woff">
     <comment>WOFF font</comment>
+    <comment xml:lang="af">WOFF-skriftipe</comment>
     <comment xml:lang="ast">Fonte WOFF</comment>
+    <comment xml:lang="bg">Шрифт — WOFF</comment>
     <comment xml:lang="ca">lletra WOFF</comment>
     <comment xml:lang="cs">font WOFF</comment>
     <comment xml:lang="da">WOFF-skrifttype</comment>
     <comment xml:lang="de">WOFF-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά WOFF</comment>
-    <comment xml:lang="en_GB">WOFF font</comment>
+    <comment xml:lang="en-GB">WOFF font</comment>
     <comment xml:lang="es">tipo de letra WOFF</comment>
     <comment xml:lang="eu">WOFF letra-tipoa</comment>
     <comment xml:lang="fi">WOFF-fontti</comment>
     <comment xml:lang="fr">police WOFF</comment>
+    <comment xml:lang="fur">caratar WOFF</comment>
     <comment xml:lang="ga">cló WOFF</comment>
     <comment xml:lang="gl">Tipo de letra WOFF</comment>
     <comment xml:lang="he">גופן WOFF</comment>
-    <comment xml:lang="hr">WOFF slovo</comment>
+    <comment xml:lang="hr">WOFF font</comment>
     <comment xml:lang="hu">WOFF-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras WOFF</comment>
     <comment xml:lang="id">Fonta WOFF</comment>
@@ -10661,11 +11086,12 @@
     <comment xml:lang="ja">WOFF フォント</comment>
     <comment xml:lang="kk">WOFF қарібі</comment>
     <comment xml:lang="ko">WOFF 글꼴</comment>
+    <comment xml:lang="lt">WOFF šriftas</comment>
     <comment xml:lang="lv">WOFF fonts</comment>
     <comment xml:lang="oc">poliça WOFF</comment>
     <comment xml:lang="pl">Czcionka WOFF</comment>
     <comment xml:lang="pt">letra WOFF</comment>
-    <comment xml:lang="pt_BR">Fonte WOFF</comment>
+    <comment xml:lang="pt-BR">Fonte WOFF</comment>
     <comment xml:lang="ru">Шрифт WOFF</comment>
     <comment xml:lang="sk">Písmo WOFF</comment>
     <comment xml:lang="sl">Pisava WOFF</comment>
@@ -10673,83 +11099,100 @@
     <comment xml:lang="sv">WOFF-typsnitt</comment>
     <comment xml:lang="tr">WOFF yazı tipi</comment>
     <comment xml:lang="uk">шрифт WOFF</comment>
-    <comment xml:lang="zh_CN">WOFF 字体</comment>
-    <comment xml:lang="zh_TW">WOFF 字型</comment>
+    <comment xml:lang="zh-CN">WOFF 字体</comment>
+    <comment xml:lang="zh-TW">WOFF 字型</comment>
     <acronym>WOFF</acronym>
     <expanded-acronym>Web Open Font Format</expanded-acronym>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="0x774f4646" type="big32" offset="0"/>
+      <match type="big32" value="0x774f4646" offset="0"/>
     </magic>
     <glob pattern="*.woff"/>
     <alias type="application/font-woff"/>
   </mime-type>
-  <mime-type type="font/woff">
+  <mime-type type="font/woff2">
     <comment>WOFF2 font</comment>
+    <comment xml:lang="af">WOFF2-skriftipe</comment>
     <comment xml:lang="ast">Fonte WOFF2</comment>
+    <comment xml:lang="bg">Шрифт — WOFF2</comment>
     <comment xml:lang="ca">lletra WOFF2</comment>
     <comment xml:lang="cs">font WOFF2</comment>
+    <comment xml:lang="da">WOFF2-skrifttype</comment>
     <comment xml:lang="de">WOFF2-Schrift</comment>
-    <comment xml:lang="en_GB">WOFF2 font</comment>
+    <comment xml:lang="en-GB">WOFF2 font</comment>
     <comment xml:lang="es">tipo de letra WOFF2</comment>
+    <comment xml:lang="eu">WOFF2 letra-tipoa</comment>
     <comment xml:lang="fi">WOFF2-fontti</comment>
-    <comment xml:lang="hr">WOFF2 slovo</comment>
+    <comment xml:lang="fr">police WOFF2</comment>
+    <comment xml:lang="fur">caratar WOFF2</comment>
+    <comment xml:lang="ga">cló WOFF2</comment>
+    <comment xml:lang="hr">WOFF2 font</comment>
     <comment xml:lang="hu">WOFF2 betűkészlet</comment>
     <comment xml:lang="id">Fonta WOFF2</comment>
     <comment xml:lang="it">Carattere WOFF2</comment>
     <comment xml:lang="kk">WOFF2 қарібі</comment>
     <comment xml:lang="ko">WOFF2 글꼴</comment>
+    <comment xml:lang="lt">WOFF2 šriftas</comment>
     <comment xml:lang="pl">Czcionka WOFF2</comment>
-    <comment xml:lang="pt_BR">Fonte WOFF2</comment>
+    <comment xml:lang="pt">letra WOFF2</comment>
+    <comment xml:lang="pt-BR">Fonte WOFF2</comment>
     <comment xml:lang="ru">Шрифт WOFF2</comment>
     <comment xml:lang="sk">Písmo WOFF2</comment>
+    <comment xml:lang="sl">Pisava WOFF2</comment>
     <comment xml:lang="sv">WOFF2-typsnitt</comment>
+    <comment xml:lang="tr">WOFF2 yazı tipi</comment>
     <comment xml:lang="uk">шрифт WOFF2</comment>
-    <comment xml:lang="zh_CN">WOFF2 字体</comment>
-    <comment xml:lang="zh_TW">WOFF2 字型</comment>
+    <comment xml:lang="zh-CN">WOFF2 字体</comment>
+    <comment xml:lang="zh-TW">WOFF2 字型</comment>
     <acronym>WOFF2</acronym>
     <expanded-acronym>Web Open Font Format 2.0</expanded-acronym>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="0x774f4632" type="big32" offset="0"/>
+      <match type="big32" value="0x774f4632" offset="0"/>
     </magic>
     <glob pattern="*.woff2"/>
   </mime-type>
   <mime-type type="application/x-font-type1">
     <comment>PostScript type-1 font</comment>
+    <comment xml:lang="af">PostScript tipe 1-skriftipe</comment>
+    <comment xml:lang="bg">Шрифт — PostScript type-1</comment>
     <comment xml:lang="ca">lletra type-1 de PostScript</comment>
     <comment xml:lang="cs">font PostScript type-1</comment>
+    <comment xml:lang="da">PostScript type-1-skrifttype</comment>
     <comment xml:lang="de">PostScript-Typ-1-Schrift</comment>
-    <comment xml:lang="en_GB">PostScript type-1 font</comment>
+    <comment xml:lang="en-GB">PostScript type-1 font</comment>
     <comment xml:lang="es">tipo de letra PostScript Type-1</comment>
     <comment xml:lang="eu">PostScript type-1 letra-tipoa</comment>
+    <comment xml:lang="fi">PostScript type-1 -fontti</comment>
     <comment xml:lang="fr">police PostScript Type 1</comment>
+    <comment xml:lang="fur">caratar PostScript type-1</comment>
     <comment xml:lang="ga">cló PostScript type-1</comment>
-    <comment xml:lang="hr">PostScript type-1 slovo</comment>
+    <comment xml:lang="hr">PostScript type-1 font</comment>
     <comment xml:lang="hu">PostScript type-1 betűkészlet</comment>
-    <comment xml:lang="id">fonta PostScript type-1</comment>
+    <comment xml:lang="id">Fonta PostScript type-1</comment>
     <comment xml:lang="it">Carattere PostScript type-1</comment>
     <comment xml:lang="kk">PostScript type-1 қарібі</comment>
     <comment xml:lang="ko">PostScript Type-1 글꼴</comment>
     <comment xml:lang="pl">Czcionka PostScript Type-1</comment>
-    <comment xml:lang="pt_BR">Fonte PostScript tipo-1</comment>
+    <comment xml:lang="pt">letra PostScript Tipo 1</comment>
+    <comment xml:lang="pt-BR">Fonte PostScript tipo-1</comment>
     <comment xml:lang="ru">Шрифт PostScript Type-1</comment>
     <comment xml:lang="sk">Písmo PostScript typu 1</comment>
     <comment xml:lang="sr">слова Постскрипта врсте-1</comment>
     <comment xml:lang="sv">PostScript type-1-typsnitt</comment>
     <comment xml:lang="tr">PostScript tip-1 yazı tipi</comment>
     <comment xml:lang="uk">шрифт type-1 PostScript</comment>
-    <comment xml:lang="zh_CN">PostScript type-1 字体</comment>
-    <comment xml:lang="zh_TW">PostScript type-1 字型</comment>
+    <comment xml:lang="zh-CN">PostScript type-1 字体</comment>
+    <comment xml:lang="zh-TW">PostScript type-1 字型</comment>
     <sub-class-of type="application/postscript"/>
     <generic-icon name="font-x-generic"/>
     <magic priority="60">
-      <match value="LWFN" type="string" offset="0"/>
-      <match value="LWFN" type="string" offset="65"/>
-      <match value="%!PS-AdobeFont-1." type="string" offset="0"/>
-      <match value="%!PS-AdobeFont-1." type="string" offset="6"/>
-      <match value="%!FontType1-1." type="string" offset="0"/>
-      <match value="%!FontType1-1." type="string" offset="6"/>
+      <match type="string" value="LWFN" offset="0"/>
+      <match type="string" value="LWFN" offset="65"/>
+      <match type="string" value="%!PS-AdobeFont-1." offset="0"/>
+      <match type="string" value="%!PS-AdobeFont-1." offset="6"/>
+      <match type="string" value="%!FontType1-1." offset="0"/>
+      <match type="string" value="%!FontType1-1." offset="6"/>
     </magic>
     <glob pattern="*.pfa"/>
     <glob pattern="*.pfb"/>
@@ -10757,9 +11200,10 @@
   </mime-type>
   <mime-type type="application/x-font-afm">
     <comment>Adobe font metrics</comment>
+    <comment xml:lang="af">Adobe skriftipe-afmetings</comment>
     <comment xml:lang="ar">مقاييس خط أدوبي</comment>
     <comment xml:lang="az">Adobe yazı növü metrikləri</comment>
-    <comment xml:lang="be@latin">Metryka šryftu Adobe</comment>
+    <comment xml:lang="be-Latn">Metryka šryftu Adobe</comment>
     <comment xml:lang="bg">Шрифтова метрика — Adobe</comment>
     <comment xml:lang="ca">mètrica de lletra d'Adobe</comment>
     <comment xml:lang="cs">metrika fontu Adobe</comment>
@@ -10767,16 +11211,17 @@
     <comment xml:lang="da">Adobe skrifttypefil</comment>
     <comment xml:lang="de">Adobe-Schriftmetriken</comment>
     <comment xml:lang="el">Μετρικά γραμματοσειράς Adobe</comment>
-    <comment xml:lang="en_GB">Adobe font metrics</comment>
+    <comment xml:lang="en-GB">Adobe font metrics</comment>
     <comment xml:lang="eo">metrikoj de Adobe-tiparo</comment>
     <comment xml:lang="es">métricas tipográficas de Adobe</comment>
     <comment xml:lang="eu">Adobe letra-tipoen neurriak</comment>
     <comment xml:lang="fi">Adobe-fonttimitat</comment>
     <comment xml:lang="fr">métriques de police Adobe</comment>
+    <comment xml:lang="fur">metrichis caratar Adobe</comment>
     <comment xml:lang="ga">meadarachtaí cló Adobe</comment>
     <comment xml:lang="gl">métricas de fonte de Adobe</comment>
     <comment xml:lang="he">מדדי גופן של Adobe</comment>
-    <comment xml:lang="hr">Adobe mjere slova</comment>
+    <comment xml:lang="hr">Metrika Adobe fonta</comment>
     <comment xml:lang="hu">Adobe-betűmetrika</comment>
     <comment xml:lang="ia">Metricas de typo de litteras Adobe</comment>
     <comment xml:lang="id">Metrik fonta Adobe</comment>
@@ -10793,7 +11238,7 @@
     <comment xml:lang="oc">metricas de poliça Adobe</comment>
     <comment xml:lang="pl">Metryka czcionki Adobe</comment>
     <comment xml:lang="pt">métrica de letras Adobe</comment>
-    <comment xml:lang="pt_BR">Métricas de fonte Adobe</comment>
+    <comment xml:lang="pt-BR">Métricas de fonte Adobe</comment>
     <comment xml:lang="ro">Dimensiuni font Adobe</comment>
     <comment xml:lang="ru">Метрика шрифта Adobe</comment>
     <comment xml:lang="sk">Metrika písma Adobe</comment>
@@ -10801,19 +11246,20 @@
     <comment xml:lang="sq">Metrik lloj gërmash Adobe</comment>
     <comment xml:lang="sr">метрика Адобе слова</comment>
     <comment xml:lang="sv">Adobe-typsnittsmetrik</comment>
-    <comment xml:lang="tr">Adobe yazıtipi ölçüleri</comment>
+    <comment xml:lang="tr">Adobe yazı tipi ölçüleri</comment>
     <comment xml:lang="uk">метрики шрифту Adobe</comment>
     <comment xml:lang="vi">Cách đo phông chữ Adobe</comment>
-    <comment xml:lang="zh_CN">Adobe 字体规格</comment>
-    <comment xml:lang="zh_TW">Adobe 字型描述檔</comment>
+    <comment xml:lang="zh-CN">Adobe 字体规格</comment>
+    <comment xml:lang="zh-TW">Adobe 字型描述檔</comment>
     <generic-icon name="font-x-generic"/>
     <glob pattern="*.afm"/>
   </mime-type>
   <mime-type type="application/x-font-bdf">
     <comment>BDF font</comment>
+    <comment xml:lang="af">BDF-skriftipe</comment>
     <comment xml:lang="ar">خط BDF</comment>
     <comment xml:lang="az">BDF yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft BDF</comment>
+    <comment xml:lang="be-Latn">Šryft BDF</comment>
     <comment xml:lang="bg">Шрифт — BDF</comment>
     <comment xml:lang="ca">lletra BDF</comment>
     <comment xml:lang="cs">font BDF</comment>
@@ -10821,17 +11267,18 @@
     <comment xml:lang="da">BDF-skrifttype</comment>
     <comment xml:lang="de">BDF-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά BDF</comment>
-    <comment xml:lang="en_GB">BDF font</comment>
+    <comment xml:lang="en-GB">BDF font</comment>
     <comment xml:lang="eo">BDF-tiparo</comment>
     <comment xml:lang="es">tipo de letra BDF</comment>
     <comment xml:lang="eu">BDF letra-tipoa</comment>
     <comment xml:lang="fi">BDF-fontti</comment>
     <comment xml:lang="fo">BDF stavasnið</comment>
     <comment xml:lang="fr">police BDF</comment>
+    <comment xml:lang="fur">caratar BDF</comment>
     <comment xml:lang="ga">cló BDF</comment>
     <comment xml:lang="gl">tipo de fonte BDF</comment>
     <comment xml:lang="he">גופן BDF</comment>
-    <comment xml:lang="hr">BDF slovo</comment>
+    <comment xml:lang="hr">BDF font</comment>
     <comment xml:lang="hu">BDF-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras BDF</comment>
     <comment xml:lang="id">Fonta BDF</comment>
@@ -10848,7 +11295,7 @@
     <comment xml:lang="oc">poliça BDF</comment>
     <comment xml:lang="pl">Czcionka BDF</comment>
     <comment xml:lang="pt">letra BDF</comment>
-    <comment xml:lang="pt_BR">Fonte BDF</comment>
+    <comment xml:lang="pt-BR">Fonte BDF</comment>
     <comment xml:lang="ro">Font BDF</comment>
     <comment xml:lang="ru">Шрифт BDF</comment>
     <comment xml:lang="sk">Písmo BDF</comment>
@@ -10856,22 +11303,23 @@
     <comment xml:lang="sq">Lloj gërme BDF</comment>
     <comment xml:lang="sr">БДФ слова</comment>
     <comment xml:lang="sv">BDF-typsnitt</comment>
-    <comment xml:lang="tr">BDF fontu</comment>
+    <comment xml:lang="tr">BDF yazı tipi</comment>
     <comment xml:lang="uk">шрифт BDF</comment>
     <comment xml:lang="vi">Phông chữ BDF</comment>
-    <comment xml:lang="zh_CN">BDF 字体</comment>
-    <comment xml:lang="zh_TW">BDF 字型</comment>
+    <comment xml:lang="zh-CN">BDF 字体</comment>
+    <comment xml:lang="zh-TW">BDF 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="STARTFONT\040" type="string" offset="0"/>
+      <match type="string" value="STARTFONT\040" offset="0"/>
     </magic>
     <glob pattern="*.bdf"/>
   </mime-type>
   <mime-type type="application/x-font-dos">
     <comment>DOS font</comment>
+    <comment xml:lang="af">DOS-skriftipe</comment>
     <comment xml:lang="ar">خط DOS</comment>
     <comment xml:lang="az">DOS yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft DOS</comment>
+    <comment xml:lang="be-Latn">Šryft DOS</comment>
     <comment xml:lang="bg">Шрифт —  DOS</comment>
     <comment xml:lang="ca">lletra DOS</comment>
     <comment xml:lang="cs">font pro DOS</comment>
@@ -10879,17 +11327,18 @@
     <comment xml:lang="da">DOS-skrifttype</comment>
     <comment xml:lang="de">DOS-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά DOS</comment>
-    <comment xml:lang="en_GB">DOS font</comment>
+    <comment xml:lang="en-GB">DOS font</comment>
     <comment xml:lang="eo">DOS-tiparo</comment>
     <comment xml:lang="es">tipo de letra de DOS</comment>
     <comment xml:lang="eu">DOS letra-tipoa</comment>
     <comment xml:lang="fi">DOS-fontti</comment>
     <comment xml:lang="fo">DOS stavasnið</comment>
     <comment xml:lang="fr">police DOS</comment>
+    <comment xml:lang="fur">caratar DOS</comment>
     <comment xml:lang="ga">cló DOS</comment>
     <comment xml:lang="gl">tipo de fonte de DOS</comment>
     <comment xml:lang="he">גופן DOS</comment>
-    <comment xml:lang="hr">DOS slovo</comment>
+    <comment xml:lang="hr">DOS font</comment>
     <comment xml:lang="hu">DOS-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras DOS</comment>
     <comment xml:lang="id">Fonta DOS</comment>
@@ -10906,7 +11355,7 @@
     <comment xml:lang="oc">poliça DOS</comment>
     <comment xml:lang="pl">Czcionka DOS</comment>
     <comment xml:lang="pt">letra DOS</comment>
-    <comment xml:lang="pt_BR">Fonte do DOS</comment>
+    <comment xml:lang="pt-BR">Fonte do DOS</comment>
     <comment xml:lang="ro">Font DOS</comment>
     <comment xml:lang="ru">Шрифт DOS</comment>
     <comment xml:lang="sk">Písmo pre DOS</comment>
@@ -10914,23 +11363,24 @@
     <comment xml:lang="sq">Gërmë DOS</comment>
     <comment xml:lang="sr">ДОС слова</comment>
     <comment xml:lang="sv">DOS-typsnitt</comment>
-    <comment xml:lang="tr">DOS fontu</comment>
+    <comment xml:lang="tr">DOS yazı tipi</comment>
     <comment xml:lang="uk">шрифт DOS</comment>
     <comment xml:lang="vi">Phông chữ DOS</comment>
-    <comment xml:lang="zh_CN">DOS 字体</comment>
-    <comment xml:lang="zh_TW">DOS 字型</comment>
+    <comment xml:lang="zh-CN">DOS 字体</comment>
+    <comment xml:lang="zh-TW">DOS 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="\xff\x46\x4f\x4e" type="string" offset="0"/>
-      <match value="\x00\x45\x47\x41" type="string" offset="7"/>
-      <match value="\x00\x56\x49\x44" type="string" offset="7"/>
+      <match type="string" value="\xff\x46\x4f\x4e" offset="0"/>
+      <match type="string" value="\x00\x45\x47\x41" offset="7"/>
+      <match type="string" value="\x00\x56\x49\x44" offset="7"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-font-framemaker">
     <comment>Adobe FrameMaker font</comment>
+    <comment xml:lang="af">Adobe FrameMaker-skriftipe</comment>
     <comment xml:lang="ar">خط أدوبي الصانع للإطارات</comment>
     <comment xml:lang="az">Adobe FrameMaker yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft Adobe FrameMaker</comment>
+    <comment xml:lang="be-Latn">Šryft Adobe FrameMaker</comment>
     <comment xml:lang="bg">Шрифт — Adobe FrameMaker</comment>
     <comment xml:lang="ca">lletra d'Adobe FrameMaker</comment>
     <comment xml:lang="cs">font Adobe FrameMaker</comment>
@@ -10938,17 +11388,18 @@
     <comment xml:lang="da">Adobe FrameMaker-skrifttype</comment>
     <comment xml:lang="de">Adobe-FrameMaker-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά Adobe FrameMaker</comment>
-    <comment xml:lang="en_GB">Adobe FrameMaker font</comment>
+    <comment xml:lang="en-GB">Adobe FrameMaker font</comment>
     <comment xml:lang="eo">Tiparo de Adobe FrameMaker</comment>
     <comment xml:lang="es">tipo de letra de Adobe FrameMaker</comment>
     <comment xml:lang="eu">Adobe FrameMaker-en letra-tipoa</comment>
     <comment xml:lang="fi">Adobe FrameMaker -fontti</comment>
     <comment xml:lang="fo">Adobe FrameMaker stavasnið</comment>
     <comment xml:lang="fr">police Adobe FrameMaker</comment>
+    <comment xml:lang="fur">caratar Adobe FrameMaker</comment>
     <comment xml:lang="ga">cló Adobe FrameMaker</comment>
     <comment xml:lang="gl">tipo de fonte de Adobe FrameMaker</comment>
     <comment xml:lang="he">גופן של Adobe FrameMaker</comment>
-    <comment xml:lang="hr">Adobe FrameMaker slovo</comment>
+    <comment xml:lang="hr">Adobe FrameMaker font</comment>
     <comment xml:lang="hu">Adobe FrameMaker-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras pro Adobe FrameMaker</comment>
     <comment xml:lang="id">Fonta Adobe FrameMaker</comment>
@@ -10965,7 +11416,7 @@
     <comment xml:lang="oc">poliça Adobe FrameMaker</comment>
     <comment xml:lang="pl">Czcionka Adobe FrameMaker</comment>
     <comment xml:lang="pt">letra Adobe FrameMaker</comment>
-    <comment xml:lang="pt_BR">Fonte do Adobe FrameMaker</comment>
+    <comment xml:lang="pt-BR">Fonte do Adobe FrameMaker</comment>
     <comment xml:lang="ro">Font Adobe FrameMaker</comment>
     <comment xml:lang="ru">Шрифт Adobe FrameMaker</comment>
     <comment xml:lang="sk">Písmo Adobe FrameMaker</comment>
@@ -10976,18 +11427,19 @@
     <comment xml:lang="tr">Adobe FrameMaker yazı tipi</comment>
     <comment xml:lang="uk">шрифт Adobe FrameMaker</comment>
     <comment xml:lang="vi">Phông chữ Adobe FrameMaker</comment>
-    <comment xml:lang="zh_CN">Adobe FrameMaker 字体</comment>
-    <comment xml:lang="zh_TW">Adobe FrameMaker 字型</comment>
+    <comment xml:lang="zh-CN">Adobe FrameMaker 字体</comment>
+    <comment xml:lang="zh-TW">Adobe FrameMaker 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="&lt;MakerScreenFont" type="string" offset="0"/>
+      <match type="string" value="&lt;MakerScreenFont" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-font-libgrx">
     <comment>LIBGRX font</comment>
+    <comment xml:lang="af">LIBGRX-skriftipe</comment>
     <comment xml:lang="ar">خط LIBGRX</comment>
     <comment xml:lang="az">LIBGRX yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft LIBGRX</comment>
+    <comment xml:lang="be-Latn">Šryft LIBGRX</comment>
     <comment xml:lang="bg">Шрифт — LIBGRX</comment>
     <comment xml:lang="ca">lletra LIBGRX</comment>
     <comment xml:lang="cs">font LIBGRX</comment>
@@ -10995,17 +11447,18 @@
     <comment xml:lang="da">LIBGRX-skrifttype</comment>
     <comment xml:lang="de">LIBGRX-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά LIBGRX</comment>
-    <comment xml:lang="en_GB">LIBGRX font</comment>
+    <comment xml:lang="en-GB">LIBGRX font</comment>
     <comment xml:lang="eo">LIBGRX-tiparo</comment>
     <comment xml:lang="es">tipo de letra LIBGRX</comment>
     <comment xml:lang="eu">LIBGRX letra-tipoa</comment>
     <comment xml:lang="fi">LIBGRX-fontti</comment>
     <comment xml:lang="fo">LIBGRX stavasnið</comment>
     <comment xml:lang="fr">police LIBGRX</comment>
+    <comment xml:lang="fur">caratar LIBGRX</comment>
     <comment xml:lang="ga">cló LIBGRX</comment>
     <comment xml:lang="gl">tipo de fonte en LIBGRX</comment>
     <comment xml:lang="he">גופן LIBGRX</comment>
-    <comment xml:lang="hr">LIBGRX slovo</comment>
+    <comment xml:lang="hr">LIBGRX font</comment>
     <comment xml:lang="hu">LIBGRX-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras LIBGRX</comment>
     <comment xml:lang="id">Fonta LIBGRX</comment>
@@ -11022,7 +11475,7 @@
     <comment xml:lang="oc">poliça LIBGRX</comment>
     <comment xml:lang="pl">Czcionka LIBGRX</comment>
     <comment xml:lang="pt">letra LIBGRX</comment>
-    <comment xml:lang="pt_BR">Fonte LIBGRX</comment>
+    <comment xml:lang="pt-BR">Fonte LIBGRX</comment>
     <comment xml:lang="ro">Font LIBGRX</comment>
     <comment xml:lang="ru">Шрифт LIBGRX</comment>
     <comment xml:lang="sk">Písmo LIBGRX</comment>
@@ -11030,21 +11483,22 @@
     <comment xml:lang="sq">Lloj gërme LIBGRX</comment>
     <comment xml:lang="sr">ЛИБГРИкс слова</comment>
     <comment xml:lang="sv">LIBGRX-typsnitt</comment>
-    <comment xml:lang="tr">LIBGRX fontu</comment>
+    <comment xml:lang="tr">LIBGRX yazı tipi</comment>
     <comment xml:lang="uk">шрифт LIBGRX</comment>
     <comment xml:lang="vi">Phông chữ LIBGRX</comment>
-    <comment xml:lang="zh_CN">LIBGRX 字体</comment>
-    <comment xml:lang="zh_TW">LIBGRX 字型</comment>
+    <comment xml:lang="zh-CN">LIBGRX 字体</comment>
+    <comment xml:lang="zh-TW">LIBGRX 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="\x14\x02\x59\x19" type="string" offset="0"/>
+      <match type="string" value="\x14\x02\x59\x19" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-font-linux-psf">
     <comment>Linux PSF console font</comment>
+    <comment xml:lang="af">Linux PSF-konsoleskriftipe</comment>
     <comment xml:lang="ar">خط كونسول PSF لينكس</comment>
     <comment xml:lang="az">Linux PSF konsol yazı növü</comment>
-    <comment xml:lang="be@latin">Kansolny šryft PSF dla Linuksa</comment>
+    <comment xml:lang="be-Latn">Kansolny šryft PSF dla Linuksa</comment>
     <comment xml:lang="bg">Шрифт — PSF, за конзолата на Линукс</comment>
     <comment xml:lang="ca">lletra de consola PSF de Linux</comment>
     <comment xml:lang="cs">font PSF pro konzolu Linuxu</comment>
@@ -11052,17 +11506,18 @@
     <comment xml:lang="da">Linux PSF-konsolskrifttype</comment>
     <comment xml:lang="de">Linux-PSF-Konsolenschrift</comment>
     <comment xml:lang="el">Γραμματοσειρά κονσόλας PSF Linux</comment>
-    <comment xml:lang="en_GB">Linux PSF console font</comment>
+    <comment xml:lang="en-GB">Linux PSF console font</comment>
     <comment xml:lang="eo">PSF-tiparo de Linux-konzolo</comment>
     <comment xml:lang="es">tipo de letra de consola Linux PSF</comment>
     <comment xml:lang="eu">Linux PSF kontsolako letra-tipoa</comment>
     <comment xml:lang="fi">Linux PSF -konsolifontti</comment>
     <comment xml:lang="fo">Linux PSF stýristøðs stavasnið</comment>
     <comment xml:lang="fr">police console Linux PSF</comment>
+    <comment xml:lang="fur">caratar console Linux PSF</comment>
     <comment xml:lang="ga">cló consóil Linux PSF</comment>
     <comment xml:lang="gl">tipo de fonte de consola Linux PSF</comment>
     <comment xml:lang="he">גופן לקונסול מסוג Linux PSF</comment>
-    <comment xml:lang="hr">Linux PSF konzolno slovo</comment>
+    <comment xml:lang="hr">Linux PSF font konzole</comment>
     <comment xml:lang="hu">Linux PSF konzolos betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras console Linux PSF</comment>
     <comment xml:lang="id">Fonta konsol Linux PSF</comment>
@@ -11079,7 +11534,7 @@
     <comment xml:lang="oc">poliça consòla Linux PSF</comment>
     <comment xml:lang="pl">Czcionka konsoli PSF Linux</comment>
     <comment xml:lang="pt">letra de consola Linux PSF</comment>
-    <comment xml:lang="pt_BR">Fonte de console Linux PSF</comment>
+    <comment xml:lang="pt-BR">Fonte de console Linux PSF</comment>
     <comment xml:lang="ro">Font consolă Linux PSF</comment>
     <comment xml:lang="ru">Консольный шрифт Linux PSF</comment>
     <comment xml:lang="sk">Písmo PSF pre konzolu Linuxu</comment>
@@ -11087,38 +11542,40 @@
     <comment xml:lang="sq">Lloj gërme për konsolë Linux PSF</comment>
     <comment xml:lang="sr">слова Линуксове ПСФ конзоле</comment>
     <comment xml:lang="sv">Linux PSF-konsoltypsnitt</comment>
-    <comment xml:lang="tr">Linux PSF konsol fontu</comment>
+    <comment xml:lang="tr">Linux PSF konsol yazı tipi</comment>
     <comment xml:lang="uk">консольний шрифт Linux PSF</comment>
     <comment xml:lang="vi">Phông chữ bàn giao tiếp PSF Linux</comment>
-    <comment xml:lang="zh_CN">Linux PSF 控制台字体</comment>
-    <comment xml:lang="zh_TW">Linux PSF console 字型</comment>
+    <comment xml:lang="zh-CN">Linux PSF 控制台字体</comment>
+    <comment xml:lang="zh-TW">Linux PSF console 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="\x36\x04" type="string" offset="0"/>
+      <match type="string" value="\x36\x04" offset="0"/>
     </magic>
     <glob pattern="*.psf"/>
   </mime-type>
   <mime-type type="application/x-gz-font-linux-psf">
     <comment>Linux PSF console font (gzip-compressed)</comment>
+    <comment xml:lang="af">Linux PSF-konsoleskriftipe (gzip-saamgepers)</comment>
     <comment xml:lang="ar">خط كونسول PSF لينكس (مضغوط-gzip)</comment>
-    <comment xml:lang="be@latin">Kansolny šryft PSF dla Linuksa (gzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Kansolny šryft PSF dla Linuksa (gzip-skampresavany)</comment>
     <comment xml:lang="bg">Шрифт — Linux PSF, компресиран с gzip</comment>
     <comment xml:lang="ca">lletra de consola PSF de Linux (amb compressió gzip)</comment>
     <comment xml:lang="cs">font PSF pro konzolu Linuxu (komprimace gzip)</comment>
     <comment xml:lang="da">Linux PSF-konsolskrifttype (gzip-komprimeret)</comment>
     <comment xml:lang="de">Linux-PSF-Konsolenschrift (gzip-komprimiert)</comment>
     <comment xml:lang="el">Γραμματοσειρά κονσόλας PSF Linux (συμπιεσμένη με gzip)</comment>
-    <comment xml:lang="en_GB">Linux PSF console font (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">Linux PSF console font (gzip-compressed)</comment>
     <comment xml:lang="es">tipo de letra de consola Linux PSF (comprimido con gzip)</comment>
     <comment xml:lang="eu">Linux PSF kontsolako letra-tipoa (gzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">Linux PSF -konsolifontti (gzip-pakattu)</comment>
     <comment xml:lang="fo">Linux PSF stýristøðs stavasnið (gzip-stappað)</comment>
     <comment xml:lang="fr">police console Linux PSF (compressée gzip)</comment>
+    <comment xml:lang="fur">caratar console Linux PSF (comprimût cun gzip)</comment>
     <comment xml:lang="ga">cló consóil Linux PSF (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">tipo de fonte de consola Linux PSF (comprimida con gzip)</comment>
     <comment xml:lang="he">גופן למסוף מסוג Linux PSF (מכווץ ע״י gzip)</comment>
-    <comment xml:lang="hr">Linux PSF konzolno slovo (gzip sažeto)</comment>
-    <comment xml:lang="hu">Linux PSF konzolos betűkészlet (gzip-tömörítésű)</comment>
+    <comment xml:lang="hr">Linux PSF font konzolne (gzip komprimirano)</comment>
+    <comment xml:lang="hu">Linux PSF konzolos betűkészlet (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Typo de litteras console Linux PSF (comprimite con gzip)</comment>
     <comment xml:lang="id">Fonta konsol Linux PSF (terkompresi gzip)</comment>
     <comment xml:lang="it">Carattere console Linux PSF (compresso con gzip)</comment>
@@ -11133,7 +11590,7 @@
     <comment xml:lang="oc">poliça consòla Linux PSF (compressat gzip)</comment>
     <comment xml:lang="pl">Czcionka konsoli PSF Linux (kompresja gzip)</comment>
     <comment xml:lang="pt">letra de consola Linux PSF (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Fonte de console Linux PSF (compactada com gzip)</comment>
+    <comment xml:lang="pt-BR">Fonte de console Linux PSF (compactada com gzip)</comment>
     <comment xml:lang="ro">Font consolă Linux PSF (compresie gzip)</comment>
     <comment xml:lang="ru">Консольный шрифт Linux PSF (сжатый gzip)</comment>
     <comment xml:lang="sk">Písmo PSF pre konzolu Linuxu (komprimované pomocou gzip)</comment>
@@ -11141,20 +11598,21 @@
     <comment xml:lang="sq">Lloj gërme për konsolë Linux PSF (komresuar me gzip)</comment>
     <comment xml:lang="sr">слова Линуксове ПСФ конзоле (запакована гзип-ом)</comment>
     <comment xml:lang="sv">Linux PSF-konsoltypsnitt (gzip-komprimerat)</comment>
-    <comment xml:lang="tr">Linux PSF konsol fontu (gzip ile sıkıştırılmış)</comment>
+    <comment xml:lang="tr">Linux PSF konsol yazı tipi (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">консольний шрифт Linux PSF (стиснений gzip)</comment>
     <comment xml:lang="vi">Phông chữ bàn giao tiếp PSF Linux (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">Linux PSF 控制台字体（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">Linux PSF console 字型 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Linux PSF 控制台字体（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">Linux PSF console 字型 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <generic-icon name="font-x-generic"/>
     <glob pattern="*.psf.gz"/>
   </mime-type>
   <mime-type type="application/x-font-pcf">
     <comment>PCF font</comment>
+    <comment xml:lang="af">PCF-skriftipe</comment>
     <comment xml:lang="ar">خط PCF</comment>
     <comment xml:lang="az">PCF yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft PCF</comment>
+    <comment xml:lang="be-Latn">Šryft PCF</comment>
     <comment xml:lang="bg">Шрифт — PCF</comment>
     <comment xml:lang="ca">lletra PCF</comment>
     <comment xml:lang="cs">font PCF</comment>
@@ -11162,17 +11620,18 @@
     <comment xml:lang="da">PCF-skrifttype</comment>
     <comment xml:lang="de">PCF-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά PCF</comment>
-    <comment xml:lang="en_GB">PCF font</comment>
+    <comment xml:lang="en-GB">PCF font</comment>
     <comment xml:lang="eo">PCF-tiparo</comment>
     <comment xml:lang="es">tipo de letra PCF</comment>
     <comment xml:lang="eu">PCF letra-tipoa</comment>
     <comment xml:lang="fi">PCF-fontti</comment>
     <comment xml:lang="fo">PCF stavasnið</comment>
     <comment xml:lang="fr">police PCF</comment>
+    <comment xml:lang="fur">caratar PCF</comment>
     <comment xml:lang="ga">cló PCF</comment>
     <comment xml:lang="gl">tipo de letra PCF</comment>
     <comment xml:lang="he">גופן PCF</comment>
-    <comment xml:lang="hr">PCF slovo</comment>
+    <comment xml:lang="hr">PCF font</comment>
     <comment xml:lang="hu">PCF-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras PCF</comment>
     <comment xml:lang="id">Fonta PCF</comment>
@@ -11189,7 +11648,7 @@
     <comment xml:lang="oc">poliça PCF</comment>
     <comment xml:lang="pl">Czcionka PCF</comment>
     <comment xml:lang="pt">letra PCF</comment>
-    <comment xml:lang="pt_BR">Fonte PCF</comment>
+    <comment xml:lang="pt-BR">Fonte PCF</comment>
     <comment xml:lang="ro">Font PCF</comment>
     <comment xml:lang="ru">Шрифт PCF</comment>
     <comment xml:lang="sk">Písmo PCF</comment>
@@ -11197,14 +11656,14 @@
     <comment xml:lang="sq">Gërma PCF</comment>
     <comment xml:lang="sr">ПЦФ слова</comment>
     <comment xml:lang="sv">PCF-typsnitt</comment>
-    <comment xml:lang="tr">PCF fontu</comment>
+    <comment xml:lang="tr">PCF yazı tipi</comment>
     <comment xml:lang="uk">шрифт PCF</comment>
     <comment xml:lang="vi">Phông chữ PCF</comment>
-    <comment xml:lang="zh_CN">PCF 字体</comment>
-    <comment xml:lang="zh_TW">PCF 字型</comment>
+    <comment xml:lang="zh-CN">PCF 字体</comment>
+    <comment xml:lang="zh-TW">PCF 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="\001fcp" type="string" offset="0"/>
+      <match type="string" value="\001fcp" offset="0"/>
     </magic>
     <glob pattern="*.pcf"/>
     <glob pattern="*.pcf.Z"/>
@@ -11212,9 +11671,10 @@
   </mime-type>
   <mime-type type="font/otf">
     <comment>OpenType font</comment>
+    <comment xml:lang="af">OpenType-skriftipe</comment>
     <comment xml:lang="ar">خط OpenType</comment>
     <comment xml:lang="az">OpenType yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft OpenType</comment>
+    <comment xml:lang="be-Latn">Šryft OpenType</comment>
     <comment xml:lang="bg">Шрифт — OpenType</comment>
     <comment xml:lang="ca">lletra OpenType</comment>
     <comment xml:lang="cs">font OpenType</comment>
@@ -11222,17 +11682,18 @@
     <comment xml:lang="da">OpenType-skrifttype</comment>
     <comment xml:lang="de">OpenType-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά OpenType </comment>
-    <comment xml:lang="en_GB">OpenType font</comment>
+    <comment xml:lang="en-GB">OpenType font</comment>
     <comment xml:lang="eo">OpenType-tiparo</comment>
     <comment xml:lang="es">tipo de letra OpenType</comment>
     <comment xml:lang="eu">OpenType letra-tipoa</comment>
     <comment xml:lang="fi">OpenType-fontti</comment>
     <comment xml:lang="fo">OpenType stavasnið</comment>
     <comment xml:lang="fr">police OpenType</comment>
+    <comment xml:lang="fur">caratar OpenType</comment>
     <comment xml:lang="ga">cló OpenType</comment>
     <comment xml:lang="gl">tipo de fonte OpenType</comment>
     <comment xml:lang="he">גופן של OpenType</comment>
-    <comment xml:lang="hr">OpenType slovo</comment>
+    <comment xml:lang="hr">OpenType font</comment>
     <comment xml:lang="hu">OpenType-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras OpenType</comment>
     <comment xml:lang="id">Fonta OpenType</comment>
@@ -11249,7 +11710,7 @@
     <comment xml:lang="oc">poliça OpenType</comment>
     <comment xml:lang="pl">Czcionka OpenType</comment>
     <comment xml:lang="pt">letra OpenType</comment>
-    <comment xml:lang="pt_BR">Fonte OpenType</comment>
+    <comment xml:lang="pt-BR">Fonte OpenType</comment>
     <comment xml:lang="ro">Font OpenType</comment>
     <comment xml:lang="ru">Шрифт OpenType</comment>
     <comment xml:lang="sk">Písmo OpenType</comment>
@@ -11257,24 +11718,25 @@
     <comment xml:lang="sq">Gërma OpenType</comment>
     <comment xml:lang="sr">слова Отворене Врсте</comment>
     <comment xml:lang="sv">OpenType-typsnitt</comment>
-    <comment xml:lang="tr">OpenType fontu</comment>
+    <comment xml:lang="tr">OpenType yazı tipi</comment>
     <comment xml:lang="uk">шрифт OpenType</comment>
     <comment xml:lang="vi">Phông chữ OpenType</comment>
-    <comment xml:lang="zh_CN">OpenType 字体</comment>
-    <comment xml:lang="zh_TW">OpenType 字型</comment>
+    <comment xml:lang="zh-CN">OpenType 字体</comment>
+    <comment xml:lang="zh-TW">OpenType 字型</comment>
     <sub-class-of type="font/ttf"/>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="OTTO" type="string" offset="0"/>
+      <match type="string" value="OTTO" offset="0"/>
     </magic>
     <glob pattern="*.otf"/>
     <alias type="application/x-font-otf"/>
   </mime-type>
   <mime-type type="application/x-font-speedo">
     <comment>Speedo font</comment>
+    <comment xml:lang="af">Speedo-skriftipe</comment>
     <comment xml:lang="ar">خط Speedo</comment>
     <comment xml:lang="az">Speedo yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft Speedo</comment>
+    <comment xml:lang="be-Latn">Šryft Speedo</comment>
     <comment xml:lang="bg">Шрифт — Speedo</comment>
     <comment xml:lang="ca">lletra Speedo</comment>
     <comment xml:lang="cs">font Speedo</comment>
@@ -11282,17 +11744,18 @@
     <comment xml:lang="da">Speedoskrifttype</comment>
     <comment xml:lang="de">Speedo-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά Speedo</comment>
-    <comment xml:lang="en_GB">Speedo font</comment>
+    <comment xml:lang="en-GB">Speedo font</comment>
     <comment xml:lang="eo">Speedo-tiparo</comment>
     <comment xml:lang="es">tipo de letra de Speedo</comment>
     <comment xml:lang="eu">Speedo letra-tipoa</comment>
     <comment xml:lang="fi">Speedo-fontti</comment>
     <comment xml:lang="fo">Speedo stavasnið</comment>
     <comment xml:lang="fr">police Speedo</comment>
+    <comment xml:lang="fur">caratar Speedo</comment>
     <comment xml:lang="ga">cló Speedo</comment>
     <comment xml:lang="gl">tipo de letra Speedo</comment>
     <comment xml:lang="he">גופן של Speedo</comment>
-    <comment xml:lang="hr">Speedo slovo</comment>
+    <comment xml:lang="hr">Speedo font</comment>
     <comment xml:lang="hu">Speedo-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras Speedo</comment>
     <comment xml:lang="id">Fonta Speedo</comment>
@@ -11309,7 +11772,7 @@
     <comment xml:lang="oc">poliça Speedo</comment>
     <comment xml:lang="pl">Czcionka Speedo</comment>
     <comment xml:lang="pt">letra Speedo</comment>
-    <comment xml:lang="pt_BR">Fonte Speedo</comment>
+    <comment xml:lang="pt-BR">Fonte Speedo</comment>
     <comment xml:lang="ro">Font Speedo</comment>
     <comment xml:lang="ru">Шрифт Speedo</comment>
     <comment xml:lang="sk">Písmo Speedo</comment>
@@ -11317,22 +11780,23 @@
     <comment xml:lang="sq">Gërma Speedo</comment>
     <comment xml:lang="sr">Спидо слова</comment>
     <comment xml:lang="sv">Speedo-typsnitt</comment>
-    <comment xml:lang="tr">Speedo fontu</comment>
+    <comment xml:lang="tr">Speedo yazı tipi</comment>
     <comment xml:lang="uk">шрифт Speedo</comment>
     <comment xml:lang="vi">Phông chữ Speedo</comment>
-    <comment xml:lang="zh_CN">Speedo 字体</comment>
-    <comment xml:lang="zh_TW">Speedo 字型</comment>
+    <comment xml:lang="zh-CN">Speedo 字体</comment>
+    <comment xml:lang="zh-TW">Speedo 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="D1.0\015" type="string" offset="0"/>
+      <match type="string" value="D1.0\015" offset="0"/>
     </magic>
     <glob pattern="*.spd"/>
   </mime-type>
   <mime-type type="application/x-font-sunos-news">
     <comment>SunOS News font</comment>
+    <comment xml:lang="af">SunOS News-skriftipe</comment>
     <comment xml:lang="ar">خط SunOS News</comment>
     <comment xml:lang="az">SunOS News yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft SunOS News</comment>
+    <comment xml:lang="be-Latn">Šryft SunOS News</comment>
     <comment xml:lang="bg">Шрифт — SunOS News</comment>
     <comment xml:lang="ca">lletra News de SunOS</comment>
     <comment xml:lang="cs">font SunOS News</comment>
@@ -11340,17 +11804,18 @@
     <comment xml:lang="da">SunOS News-skrifttype</comment>
     <comment xml:lang="de">SunOS-News-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά SunOS News</comment>
-    <comment xml:lang="en_GB">SunOS News font</comment>
+    <comment xml:lang="en-GB">SunOS News font</comment>
     <comment xml:lang="eo">tiparo de SunOS News</comment>
     <comment xml:lang="es">tipo de letra para NeWS de SunOS</comment>
     <comment xml:lang="eu">SunOs News letra-tipoa</comment>
     <comment xml:lang="fi">SunOS News -fontti</comment>
     <comment xml:lang="fo">SunOS News stavasnið</comment>
     <comment xml:lang="fr">police SunOS News</comment>
+    <comment xml:lang="fur">caratar SunOS News</comment>
     <comment xml:lang="ga">cló SunOS News</comment>
     <comment xml:lang="gl">tipo de letra SunOS News</comment>
     <comment xml:lang="he">גופן של SunOS News</comment>
-    <comment xml:lang="hr">SunOS News slovo</comment>
+    <comment xml:lang="hr">SunOS News font</comment>
     <comment xml:lang="hu">SunOS News-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras SunOS News</comment>
     <comment xml:lang="id">Fonta SunOS News</comment>
@@ -11367,7 +11832,7 @@
     <comment xml:lang="oc">poliça SunOS News</comment>
     <comment xml:lang="pl">Czcionka SunOS News</comment>
     <comment xml:lang="pt">letra SunOS News</comment>
-    <comment xml:lang="pt_BR">Fonte SunOS News</comment>
+    <comment xml:lang="pt-BR">Fonte SunOS News</comment>
     <comment xml:lang="ro">Font SunOS News</comment>
     <comment xml:lang="ru">Шрифт SunOS News</comment>
     <comment xml:lang="sk">Písmo SunOS News</comment>
@@ -11378,20 +11843,21 @@
     <comment xml:lang="tr">SunOS News yazı tipi</comment>
     <comment xml:lang="uk">шрифт SunOS News</comment>
     <comment xml:lang="vi">Phông chữ SunOS News</comment>
-    <comment xml:lang="zh_CN">SunOS News 字体</comment>
-    <comment xml:lang="zh_TW">SunOS News 字型</comment>
+    <comment xml:lang="zh-CN">SunOS News 字体</comment>
+    <comment xml:lang="zh-TW">SunOS News 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="StartFont" type="string" offset="0"/>
-      <match value="\x13\x7A\x29" type="string" offset="0"/>
-      <match value="\x13\x7A\x2B" type="string" offset="8"/>
+      <match type="string" value="StartFont" offset="0"/>
+      <match type="string" value="\x13\x7A\x29" offset="0"/>
+      <match type="string" value="\x13\x7A\x2B" offset="8"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-font-tex">
     <comment>TeX font</comment>
+    <comment xml:lang="af">TeX-skriftipe</comment>
     <comment xml:lang="ar">خط TeX</comment>
     <comment xml:lang="az">TeX yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft TeX</comment>
+    <comment xml:lang="be-Latn">Šryft TeX</comment>
     <comment xml:lang="bg">Шрифт — TeX</comment>
     <comment xml:lang="ca">lletra TeX</comment>
     <comment xml:lang="cs">font TeX</comment>
@@ -11399,17 +11865,18 @@
     <comment xml:lang="da">TeX-skrifttype</comment>
     <comment xml:lang="de">TeX-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά TeX</comment>
-    <comment xml:lang="en_GB">TeX font</comment>
+    <comment xml:lang="en-GB">TeX font</comment>
     <comment xml:lang="eo">TeX-tiparo</comment>
     <comment xml:lang="es">tipo de letra de TeX</comment>
     <comment xml:lang="eu">TeX letra-tipoa</comment>
     <comment xml:lang="fi">TeX-fontti</comment>
     <comment xml:lang="fo">TeX stavasnið</comment>
     <comment xml:lang="fr">police TeX</comment>
+    <comment xml:lang="fur">caratar TeX</comment>
     <comment xml:lang="ga">cló TeX</comment>
     <comment xml:lang="gl">tipo de letra de TeX</comment>
     <comment xml:lang="he">גופן TeX</comment>
-    <comment xml:lang="hr">TeX slovo</comment>
+    <comment xml:lang="hr">TeX font</comment>
     <comment xml:lang="hu">TeX-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras TeX</comment>
     <comment xml:lang="id">Fonta TeX</comment>
@@ -11426,7 +11893,7 @@
     <comment xml:lang="oc">poliça TeX</comment>
     <comment xml:lang="pl">Czcionka TeX</comment>
     <comment xml:lang="pt">letra TeX</comment>
-    <comment xml:lang="pt_BR">Fonte TeX</comment>
+    <comment xml:lang="pt-BR">Fonte TeX</comment>
     <comment xml:lang="ro">Font TeX</comment>
     <comment xml:lang="ru">Шрифт TeX</comment>
     <comment xml:lang="sk">Písmo TeX</comment>
@@ -11434,23 +11901,24 @@
     <comment xml:lang="sq">Gërma TeX</comment>
     <comment xml:lang="sr">ТеКс слова</comment>
     <comment xml:lang="sv">TeX-typsnitt</comment>
-    <comment xml:lang="tr">TeX fontu</comment>
+    <comment xml:lang="tr">TeX yazı tipi</comment>
     <comment xml:lang="uk">шрифт TeX</comment>
     <comment xml:lang="vi">Phông chữ TeX</comment>
-    <comment xml:lang="zh_CN">TeX 字体</comment>
-    <comment xml:lang="zh_TW">TeX 字型</comment>
+    <comment xml:lang="zh-CN">TeX 字体</comment>
+    <comment xml:lang="zh-TW">TeX 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="\367\203" type="string" offset="0"/>
-      <match value="\367\131" type="string" offset="0"/>
-      <match value="\367\312" type="string" offset="0"/>
+      <match type="string" value="\367\203" offset="0"/>
+      <match type="string" value="\367\131" offset="0"/>
+      <match type="string" value="\367\312" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-font-tex-tfm">
     <comment>TeX font metrics</comment>
+    <comment xml:lang="af">TeX-skriftipeafmetings</comment>
     <comment xml:lang="ar">مقاييس خط TeX</comment>
     <comment xml:lang="az">TeX yazı növü metrikləri</comment>
-    <comment xml:lang="be@latin">Metryka šryftu TeX</comment>
+    <comment xml:lang="be-Latn">Metryka šryftu TeX</comment>
     <comment xml:lang="bg">Шрифтова метрика — TeX</comment>
     <comment xml:lang="ca">mètrica de lletra de TeX</comment>
     <comment xml:lang="cs">metrika fontu TeX</comment>
@@ -11458,16 +11926,17 @@
     <comment xml:lang="da">TeX-skrifttypeinformation</comment>
     <comment xml:lang="de">TeX-Schriftmetriken</comment>
     <comment xml:lang="el">Μετρικά γραμματοσειράς TeX</comment>
-    <comment xml:lang="en_GB">TeX font metrics</comment>
+    <comment xml:lang="en-GB">TeX font metrics</comment>
     <comment xml:lang="eo">metrikoj de TeX-tiparo</comment>
     <comment xml:lang="es">métricas tipográficas de TeX</comment>
     <comment xml:lang="eu">TeX letra-tipoen neurriak</comment>
     <comment xml:lang="fi">TeX-fonttimitat</comment>
     <comment xml:lang="fr">métriques de police TeX</comment>
+    <comment xml:lang="fur">metrichis caratar TeX</comment>
     <comment xml:lang="ga">meadarachtaí cló TeX</comment>
     <comment xml:lang="gl">Métricas de tipo de letra de TeX</comment>
     <comment xml:lang="he">ממדי גופן של TeX</comment>
-    <comment xml:lang="hr">TeX mjere slova</comment>
+    <comment xml:lang="hr">Metrika TeX fonta</comment>
     <comment xml:lang="hu">TeX-betűmetrika</comment>
     <comment xml:lang="ia">Metricas de typo de litteras TeX</comment>
     <comment xml:lang="id">Fonta metrik TeX</comment>
@@ -11484,7 +11953,7 @@
     <comment xml:lang="oc">metricas de poliça TeX</comment>
     <comment xml:lang="pl">Metryki czcionki TeX</comment>
     <comment xml:lang="pt">métricas de letra TeX</comment>
-    <comment xml:lang="pt_BR">Métrica de fonte TeX</comment>
+    <comment xml:lang="pt-BR">Métrica de fonte TeX</comment>
     <comment xml:lang="ro">Dimensiuni font TeX</comment>
     <comment xml:lang="ru">Метрика шрифта TeX</comment>
     <comment xml:lang="sk">Metrika písma TeX</comment>
@@ -11495,35 +11964,37 @@
     <comment xml:lang="tr">TeX yazı tipi ölçüleri</comment>
     <comment xml:lang="uk">метрики шрифту TeX</comment>
     <comment xml:lang="vi">Cách đo phông chữ TeX</comment>
-    <comment xml:lang="zh_CN">TeX 字体规格</comment>
-    <comment xml:lang="zh_TW">TeX 字型描述檔</comment>
+    <comment xml:lang="zh-CN">TeX 字体规格</comment>
+    <comment xml:lang="zh-TW">TeX 字型描述檔</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="\000\021" type="string" offset="2"/>
-      <match value="\000\022" type="string" offset="2"/>
+      <match type="string" value="\000\021" offset="2"/>
+      <match type="string" value="\000\022" offset="2"/>
     </magic>
   </mime-type>
   <mime-type type="font/ttf">
     <comment>TrueType font</comment>
+    <comment xml:lang="af">TrueType-skriftipe</comment>
     <comment xml:lang="ar">خط TrueType</comment>
-    <comment xml:lang="be@latin">Šryft TrueType</comment>
+    <comment xml:lang="be-Latn">Šryft TrueType</comment>
     <comment xml:lang="bg">Шрифт — TrueType</comment>
     <comment xml:lang="ca">lletra TrueType</comment>
     <comment xml:lang="cs">font TrueType</comment>
     <comment xml:lang="da">TrueType-skrifttype</comment>
     <comment xml:lang="de">TrueType-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά TrueType</comment>
-    <comment xml:lang="en_GB">TrueType font</comment>
+    <comment xml:lang="en-GB">TrueType font</comment>
     <comment xml:lang="eo">TrueType-tiparo</comment>
     <comment xml:lang="es">tipo de letra TrueType</comment>
     <comment xml:lang="eu">TrueType letra-tipoa</comment>
     <comment xml:lang="fi">TrueType-fontti</comment>
     <comment xml:lang="fo">TrueType stavasnið</comment>
     <comment xml:lang="fr">police Truetype</comment>
+    <comment xml:lang="fur">caratar TrueType</comment>
     <comment xml:lang="ga">cló TrueType</comment>
     <comment xml:lang="gl">tipo de letra TrueType</comment>
     <comment xml:lang="he">גופן מסוג TrueType</comment>
-    <comment xml:lang="hr">TrueType slovo</comment>
+    <comment xml:lang="hr">TrueType font</comment>
     <comment xml:lang="hu">TrueType-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras TrueType</comment>
     <comment xml:lang="id">Fonta TrueType</comment>
@@ -11540,7 +12011,7 @@
     <comment xml:lang="oc">poliça Truetype</comment>
     <comment xml:lang="pl">Czcionka TrueType</comment>
     <comment xml:lang="pt">letra TrueType</comment>
-    <comment xml:lang="pt_BR">Fonte TrueType</comment>
+    <comment xml:lang="pt-BR">Fonte TrueType</comment>
     <comment xml:lang="ro">Font TrueType</comment>
     <comment xml:lang="ru">Шрифт TrueType</comment>
     <comment xml:lang="sk">Písmo TrueType</comment>
@@ -11548,65 +12019,77 @@
     <comment xml:lang="sq">Lloj gërme TrueType</comment>
     <comment xml:lang="sr">Трутајп слова</comment>
     <comment xml:lang="sv">Truetype-typsnitt</comment>
-    <comment xml:lang="tr">TrueType fontu</comment>
+    <comment xml:lang="tr">TrueType yazı tipi</comment>
     <comment xml:lang="uk">шрифт TrueType</comment>
     <comment xml:lang="vi">Phông chữ TrueType</comment>
-    <comment xml:lang="zh_CN">TrueType 字体</comment>
-    <comment xml:lang="zh_TW">TrueType 字型</comment>
+    <comment xml:lang="zh-CN">TrueType 字体</comment>
+    <comment xml:lang="zh-TW">TrueType 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="FFIL" type="string" offset="0"/>
-      <match value="FFIL" type="string" offset="65"/>
-      <match value="\000\001\000\000\000" type="string" offset="0"/>
+      <match type="string" value="FFIL" offset="0"/>
+      <match type="string" value="FFIL" offset="65"/>
+      <match type="string" value="\000\001\000\000\000" offset="0"/>
     </magic>
     <glob pattern="*.ttf"/>
     <alias type="application/x-font-ttf"/>
   </mime-type>
   <mime-type type="font/collection">
     <comment>Font collection</comment>
+    <comment xml:lang="af">Skriftipeversameling</comment>
+    <comment xml:lang="bg">Шрифтова колекция</comment>
     <comment xml:lang="ca">ccol·lecció de lletres</comment>
     <comment xml:lang="cs">kolekce fontů</comment>
+    <comment xml:lang="da">Skrifttypesamling</comment>
     <comment xml:lang="de">Schriftsammlung</comment>
-    <comment xml:lang="en_GB">Font collection</comment>
+    <comment xml:lang="en-GB">Font collection</comment>
     <comment xml:lang="es">colección tipográfica</comment>
+    <comment xml:lang="eu">Letra-tipo bilduma</comment>
     <comment xml:lang="fi">Fonttikokoelma</comment>
-    <comment xml:lang="hr">Kolekcija slova</comment>
+    <comment xml:lang="fr">Collection de polices</comment>
+    <comment xml:lang="fur">colezion di caratars</comment>
+    <comment xml:lang="ga">bailiúchán clónna</comment>
+    <comment xml:lang="hr">Zbirka fontova</comment>
     <comment xml:lang="hu">Betűkészlet-gyűjtemény</comment>
     <comment xml:lang="id">Koleksi fonta</comment>
     <comment xml:lang="it">Raccolta di caratteri</comment>
     <comment xml:lang="kk">Қаріптер жинағы</comment>
     <comment xml:lang="ko">글꼴 모음</comment>
     <comment xml:lang="pl">Kolekcja czcionek</comment>
-    <comment xml:lang="pt_BR">coleção de fontes</comment>
+    <comment xml:lang="pt">coleção de letras</comment>
+    <comment xml:lang="pt-BR">coleção de fontes</comment>
     <comment xml:lang="ru">Коллекция шрифтов</comment>
     <comment xml:lang="sk">Zbierka písiem</comment>
+    <comment xml:lang="sl">Zbirka pisav</comment>
     <comment xml:lang="sv">Typsnittssamling</comment>
+    <comment xml:lang="tr">Yazı tipi derlemi</comment>
     <comment xml:lang="uk">збірка шрифтів</comment>
-    <comment xml:lang="zh_CN">字体集</comment>
-    <comment xml:lang="zh_TW">字型集</comment>
+    <comment xml:lang="zh-CN">字体集</comment>
+    <comment xml:lang="zh-TW">字型集</comment>
     <generic-icon name="font-x-generic"/>
     <glob pattern="*.ttc"/>
   </mime-type>
   <mime-type type="application/x-font-ttx">
     <comment>TrueType XML font</comment>
+    <comment xml:lang="af">TrueType XML-skriftipe</comment>
     <comment xml:lang="ar">خط TrueType XML</comment>
-    <comment xml:lang="be@latin">Šryft TrueType XML</comment>
+    <comment xml:lang="be-Latn">Šryft TrueType XML</comment>
     <comment xml:lang="bg">Шрифт — TrueType XML</comment>
     <comment xml:lang="ca">lletra XML de TrueType</comment>
     <comment xml:lang="cs">font TrueType XML</comment>
     <comment xml:lang="da">TrueType XML-skrifttype</comment>
     <comment xml:lang="de">TrueType-XML-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά XML TrueType</comment>
-    <comment xml:lang="en_GB">TrueType XML font</comment>
+    <comment xml:lang="en-GB">TrueType XML font</comment>
     <comment xml:lang="es">tipo de letra TrueType XML</comment>
     <comment xml:lang="eu">TrueType XML letra-tipoa</comment>
     <comment xml:lang="fi">TrueType-XML-fontti</comment>
     <comment xml:lang="fo">TrueType XML stavasnið</comment>
     <comment xml:lang="fr">police Truetype XML</comment>
+    <comment xml:lang="fur">caratar TrueType XML</comment>
     <comment xml:lang="ga">cló XML TrueType</comment>
     <comment xml:lang="gl">tipo de letra TrueType XML</comment>
     <comment xml:lang="he">גופן XML מסוג TrueType</comment>
-    <comment xml:lang="hr">TrueType XML slovo</comment>
+    <comment xml:lang="hr">TrueType XML font</comment>
     <comment xml:lang="hu">TrueType XML betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras TrueType XML</comment>
     <comment xml:lang="id">Fonta TrueType XML</comment>
@@ -11622,7 +12105,7 @@
     <comment xml:lang="oc">poliça Truetype XML</comment>
     <comment xml:lang="pl">Czcionka TrueType XML</comment>
     <comment xml:lang="pt">letra TrueType XML</comment>
-    <comment xml:lang="pt_BR">Fonte TrueType XML</comment>
+    <comment xml:lang="pt-BR">Fonte TrueType XML</comment>
     <comment xml:lang="ro">Font XML TrueType</comment>
     <comment xml:lang="ru">Шрифт TrueType XML</comment>
     <comment xml:lang="sk">Písmo TrueType XML</comment>
@@ -11630,23 +12113,24 @@
     <comment xml:lang="sq">Lloj gërme TrueType XML</comment>
     <comment xml:lang="sr">Трутајп ИксМЛ слова</comment>
     <comment xml:lang="sv">Truetype XML-typsnitt</comment>
-    <comment xml:lang="tr">TrueType XML fontu</comment>
+    <comment xml:lang="tr">TrueType XML yazı tipi</comment>
     <comment xml:lang="uk">шрифт TrueType XML</comment>
     <comment xml:lang="vi">Phông chữ XML TrueType</comment>
-    <comment xml:lang="zh_CN">TrueType XML 字体</comment>
-    <comment xml:lang="zh_TW">TrueType XML 字型</comment>
+    <comment xml:lang="zh-CN">TrueType XML 字体</comment>
+    <comment xml:lang="zh-TW">TrueType XML 字型</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="&lt;ttFont sfntVersion=&quot;\\x00\\x01\\x00\\x00&quot; ttLibVersion=&quot;" type="string" offset="0:256"/>
+      <match type="string" value="&lt;ttFont sfntVersion=&quot;\\x00\\x01\\x00\\x00&quot; ttLibVersion=&quot;" offset="0:256"/>
     </magic>
     <glob pattern="*.ttx"/>
   </mime-type>
   <mime-type type="application/x-font-vfont">
     <comment>V font</comment>
+    <comment xml:lang="af">V-skriftipe</comment>
     <comment xml:lang="ar">خط V</comment>
     <comment xml:lang="az">V yazı növü</comment>
-    <comment xml:lang="be@latin">Šryft V</comment>
+    <comment xml:lang="be-Latn">Šryft V</comment>
     <comment xml:lang="bg">Шрифт — V</comment>
     <comment xml:lang="ca">lletra V</comment>
     <comment xml:lang="cs">font V</comment>
@@ -11654,17 +12138,18 @@
     <comment xml:lang="da">V-skrifttype</comment>
     <comment xml:lang="de">V-Schrift</comment>
     <comment xml:lang="el">Γραμματοσειρά V</comment>
-    <comment xml:lang="en_GB">V font</comment>
+    <comment xml:lang="en-GB">V font</comment>
     <comment xml:lang="eo">V-tiparo</comment>
     <comment xml:lang="es">tipo de letra V</comment>
     <comment xml:lang="eu">V letra-tipoa</comment>
     <comment xml:lang="fi">V-fontti</comment>
     <comment xml:lang="fo">V stavasnið</comment>
     <comment xml:lang="fr">police V</comment>
+    <comment xml:lang="fur">caratar V</comment>
     <comment xml:lang="ga">cló V</comment>
     <comment xml:lang="gl">tipo de letra V</comment>
     <comment xml:lang="he">גופן של V</comment>
-    <comment xml:lang="hr">V slovo</comment>
+    <comment xml:lang="hr">V font</comment>
     <comment xml:lang="hu">V-betűkészlet</comment>
     <comment xml:lang="ia">Typo de litteras V</comment>
     <comment xml:lang="id">Fonta V</comment>
@@ -11681,7 +12166,7 @@
     <comment xml:lang="oc">poliça V</comment>
     <comment xml:lang="pl">Czcionka V</comment>
     <comment xml:lang="pt">letra V</comment>
-    <comment xml:lang="pt_BR">Fonte V</comment>
+    <comment xml:lang="pt-BR">Fonte V</comment>
     <comment xml:lang="ro">Font V</comment>
     <comment xml:lang="ru">Шрифт V font</comment>
     <comment xml:lang="sk">Písmo V</comment>
@@ -11689,34 +12174,36 @@
     <comment xml:lang="sq">Gërmë V</comment>
     <comment xml:lang="sr">В слова</comment>
     <comment xml:lang="sv">V-typsnitt</comment>
-    <comment xml:lang="tr">V fontu</comment>
+    <comment xml:lang="tr">V yazı tipi</comment>
     <comment xml:lang="uk">V-шрифт</comment>
     <comment xml:lang="vi">Phông chữ V</comment>
-    <comment xml:lang="zh_CN">V 字体</comment>
-    <comment xml:lang="zh_TW">V 字型</comment>
+    <comment xml:lang="zh-CN">V 字体</comment>
+    <comment xml:lang="zh-TW">V 字型</comment>
     <generic-icon name="font-x-generic"/>
     <magic priority="50">
-      <match value="FONT" type="string" offset="0"/>
+      <match type="string" value="FONT" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/vnd.framemaker">
     <comment>Adobe FrameMaker document</comment>
+    <comment xml:lang="af">Adobe FrameMaker-dokument</comment>
     <comment xml:lang="ar">مستند أدوبي الصانع للإطارات</comment>
     <comment xml:lang="ast">Documentu d'Adobe FrameMaker</comment>
-    <comment xml:lang="be@latin">Dakument Adobe FrameMaker</comment>
+    <comment xml:lang="be-Latn">Dakument Adobe FrameMaker</comment>
     <comment xml:lang="bg">Документ — Adobe FrameMaker</comment>
     <comment xml:lang="ca">document d'Adobe FrameMaker</comment>
     <comment xml:lang="cs">dokument Adobe FrameMaker</comment>
     <comment xml:lang="da">Adobe FrameMaker-dokument</comment>
     <comment xml:lang="de">Adobe-FrameMaker-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Adobe FrameMaker</comment>
-    <comment xml:lang="en_GB">Adobe FrameMaker document</comment>
+    <comment xml:lang="en-GB">Adobe FrameMaker document</comment>
     <comment xml:lang="eo">Dokumento de Adobe FrameMaker</comment>
     <comment xml:lang="es">documento de Adobe FrameMaker</comment>
     <comment xml:lang="eu">Adobe FrameMaker-en dokumentua</comment>
     <comment xml:lang="fi">Adobe FrameMaker -asiakirja</comment>
     <comment xml:lang="fo">Adobe FrameMaker skjal</comment>
     <comment xml:lang="fr">document Adobe FrameMaker</comment>
+    <comment xml:lang="fur">document Adobe FrameMaker</comment>
     <comment xml:lang="ga">cáipéis Adobe FrameMaker</comment>
     <comment xml:lang="gl">documento de Adobe FrameMaker</comment>
     <comment xml:lang="he">מסמך Adobe FrameMaker</comment>
@@ -11737,7 +12224,7 @@
     <comment xml:lang="oc">document Adobe FrameMaker</comment>
     <comment xml:lang="pl">Dokument Adobe FrameMaker</comment>
     <comment xml:lang="pt">documento Adobe FrameMaker</comment>
-    <comment xml:lang="pt_BR">Documento do Adobe FrameMaker</comment>
+    <comment xml:lang="pt-BR">Documento do Adobe FrameMaker</comment>
     <comment xml:lang="ro">Document Adobe FrameMaker</comment>
     <comment xml:lang="ru">Документ Adobe FrameMaker</comment>
     <comment xml:lang="sk">Dokument Adobe FrameMaker</comment>
@@ -11748,17 +12235,17 @@
     <comment xml:lang="tr">Adobe FrameMaker belgesi</comment>
     <comment xml:lang="uk">документ Adobe FrameMaker</comment>
     <comment xml:lang="vi">Tài liệu Adobe FrameMaker</comment>
-    <comment xml:lang="zh_CN">Adobe FrameMaker 文档</comment>
-    <comment xml:lang="zh_TW">Adobe FrameMaker 文件</comment>
+    <comment xml:lang="zh-CN">Adobe FrameMaker 文档</comment>
+    <comment xml:lang="zh-TW">Adobe FrameMaker 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="&lt;MakerFile" type="string" offset="0"/>
-      <match value="&lt;MIFFile" type="string" offset="0"/>
-      <match value="&lt;MakerDictionary" type="string" offset="0"/>
-      <match value="&lt;MakerScreenFon" type="string" offset="0"/>
-      <match value="&lt;MML" type="string" offset="0"/>
-      <match value="&lt;Book" type="string" offset="0"/>
-      <match value="&lt;Maker" type="string" offset="0"/>
+      <match type="string" value="&lt;MakerFile" offset="0"/>
+      <match type="string" value="&lt;MIFFile" offset="0"/>
+      <match type="string" value="&lt;MakerDictionary" offset="0"/>
+      <match type="string" value="&lt;MakerScreenFon" offset="0"/>
+      <match type="string" value="&lt;MML" offset="0"/>
+      <match type="string" value="&lt;Book" offset="0"/>
+      <match type="string" value="&lt;Maker" offset="0"/>
     </magic>
     <glob pattern="*.fm"/>
     <alias type="application/x-frame"/>
@@ -11766,20 +12253,21 @@
   <mime-type type="application/x-gameboy-rom">
     <comment>Game Boy ROM</comment>
     <comment xml:lang="ar">Game Boy ROM</comment>
-    <comment xml:lang="be@latin">Game Boy ROM</comment>
+    <comment xml:lang="be-Latn">Game Boy ROM</comment>
     <comment xml:lang="bg">ROM — Game Boy</comment>
     <comment xml:lang="ca">ROM de Game Boy</comment>
     <comment xml:lang="cs">ROM pro Game Boy</comment>
-    <comment xml:lang="da">Game Boy-rom</comment>
+    <comment xml:lang="da">Game Boy-ROM</comment>
     <comment xml:lang="de">Game Boy ROM</comment>
     <comment xml:lang="el">Game Boy ROM</comment>
-    <comment xml:lang="en_GB">Game Boy ROM</comment>
+    <comment xml:lang="en-GB">Game Boy ROM</comment>
     <comment xml:lang="eo">NLM de Game Boy</comment>
     <comment xml:lang="es">ROM de Game Boy</comment>
     <comment xml:lang="eu">Game Boy-eko ROMa</comment>
     <comment xml:lang="fi">Game Boy -ROM</comment>
     <comment xml:lang="fo">Game Boy ROM</comment>
     <comment xml:lang="fr">ROM Game Boy</comment>
+    <comment xml:lang="fur">ROM Game Boy</comment>
     <comment xml:lang="ga">ROM Game Boy</comment>
     <comment xml:lang="gl">ROM de Game Boy</comment>
     <comment xml:lang="he">ROM של Game Boy</comment>
@@ -11801,7 +12289,7 @@
     <comment xml:lang="oc">ROM Game Boy</comment>
     <comment xml:lang="pl">Plik ROM konsoli Game Boy</comment>
     <comment xml:lang="pt">ROM Game Boy</comment>
-    <comment xml:lang="pt_BR">ROM de Game Boy</comment>
+    <comment xml:lang="pt-BR">ROM de Game Boy</comment>
     <comment xml:lang="ro">ROM Game Boy</comment>
     <comment xml:lang="ru">Game Boy ROM</comment>
     <comment xml:lang="sk">ROM pre Game Boy</comment>
@@ -11812,12 +12300,12 @@
     <comment xml:lang="tr">Game Boy ROM</comment>
     <comment xml:lang="uk">ППП Game Boy</comment>
     <comment xml:lang="vi">ROM Game Boy</comment>
-    <comment xml:lang="zh_CN">Game Boy ROM</comment>
-    <comment xml:lang="zh_TW">Game Boy ROM</comment>
+    <comment xml:lang="zh-CN">Game Boy ROM</comment>
+    <comment xml:lang="zh-TW">Game Boy ROM</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="\xce\xed\x66\x66\xcc\x0d\x00\x0b\x03\x73\x00\x83\x00\x0c\x00\x0d\x00\x08\x11\x1f\x88\x89\x00\x0e" type="string" offset="260">
-        <match value="0x0" type="byte" offset="323" mask="0x80"/>
+      <match type="string" value="\xce\xed\x66\x66\xcc\x0d\x00\x0b\x03\x73\x00\x83\x00\x0c\x00\x0d\x00\x08\x11\x1f\x88\x89\x00\x0e" offset="260">
+        <match type="byte" value="0x0" mask="0x80" offset="323"/>
       </match>
     </magic>
     <glob pattern="*.gb"/>
@@ -11825,15 +12313,17 @@
   </mime-type>
   <mime-type type="application/x-gameboy-color-rom">
     <comment>Game Boy Color ROM</comment>
+    <comment xml:lang="bg">ROM — Game Boy Color</comment>
     <comment xml:lang="ca">ROM de Game Boy Color</comment>
     <comment xml:lang="cs">ROM pro Game Boy Color</comment>
-    <comment xml:lang="da">Game Boy Color ROM</comment>
+    <comment xml:lang="da">Game Boy Color-ROM</comment>
     <comment xml:lang="de">Game Boy Color ROM</comment>
-    <comment xml:lang="en_GB">Game Boy Colour ROM</comment>
+    <comment xml:lang="en-GB">Game Boy Colour ROM</comment>
     <comment xml:lang="es">ROM de Game Boy Color</comment>
     <comment xml:lang="eu">Game Boy Color ROM</comment>
     <comment xml:lang="fi">Game Boy Color -ROM</comment>
     <comment xml:lang="fr">ROM Game Boy Color</comment>
+    <comment xml:lang="fur">ROM Game Boy Color</comment>
     <comment xml:lang="ga">ROM Game Boy Color</comment>
     <comment xml:lang="he">ROM של Game Boy Color</comment>
     <comment xml:lang="hr">Game Boy Color ROM</comment>
@@ -11843,19 +12333,19 @@
     <comment xml:lang="kk">Game Boy Color ROM</comment>
     <comment xml:lang="ko">게임보이 컬러 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Game Boy Color</comment>
-    <comment xml:lang="pt_BR">ROM de Game Boy Color</comment>
+    <comment xml:lang="pt-BR">ROM de Game Boy Color</comment>
     <comment xml:lang="ru">Game Boy Color ROM</comment>
     <comment xml:lang="sk">ROM pre Game Boy Color</comment>
     <comment xml:lang="sr">Гејм Бој РОМ боје</comment>
     <comment xml:lang="sv">Game Boy Color-rom</comment>
     <comment xml:lang="tr">Game Boy Color ROM</comment>
     <comment xml:lang="uk">ППП Game Boy Color</comment>
-    <comment xml:lang="zh_CN">Game Boy Color ROM</comment>
-    <comment xml:lang="zh_TW">Game Boy Color ROM</comment>
+    <comment xml:lang="zh-CN">Game Boy Color ROM</comment>
+    <comment xml:lang="zh-TW">Game Boy Color ROM</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="\xce\xed\x66\x66\xcc\x0d\x00\x0b\x03\x73\x00\x83\x00\x0c\x00\x0d\x00\x08" type="string" offset="260">
-        <match value="0x80" type="byte" offset="323" mask="0x80"/>
+      <match type="string" value="\xce\xed\x66\x66\xcc\x0d\x00\x0b\x03\x73\x00\x83\x00\x0c\x00\x0d\x00\x08" offset="260">
+        <match type="byte" value="0x80" mask="0x80" offset="323"/>
       </match>
     </magic>
     <glob pattern="*.gbc"/>
@@ -11864,19 +12354,20 @@
   <mime-type type="application/x-gba-rom">
     <comment>Game Boy Advance ROM</comment>
     <comment xml:lang="ar">Game Boy Advance ROM</comment>
-    <comment xml:lang="be@latin">Game Boy Advance ROM</comment>
+    <comment xml:lang="be-Latn">Game Boy Advance ROM</comment>
     <comment xml:lang="bg">ROM — Game Boy Advance</comment>
     <comment xml:lang="ca">ROM de Game Boy Advance</comment>
     <comment xml:lang="cs">ROM pro Game Boy Advance</comment>
-    <comment xml:lang="da">Game Boy Advance-rom</comment>
+    <comment xml:lang="da">Game Boy Advance-ROM</comment>
     <comment xml:lang="de">Game Boy Advance ROM</comment>
     <comment xml:lang="el">Game Boy Advance ROM</comment>
-    <comment xml:lang="en_GB">Game Boy Advance ROM</comment>
+    <comment xml:lang="en-GB">Game Boy Advance ROM</comment>
     <comment xml:lang="es">ROM de Game Boy Advance</comment>
     <comment xml:lang="eu">Game Boy Advance-ko ROMa</comment>
     <comment xml:lang="fi">Game Boy Advance -ROM</comment>
     <comment xml:lang="fo">Game Boy Advance ROM</comment>
     <comment xml:lang="fr">ROM Game Boy Advance</comment>
+    <comment xml:lang="fur">ROM Game Boy Advance</comment>
     <comment xml:lang="ga">ROM Game Boy Advance</comment>
     <comment xml:lang="gl">ROM de Game Boy Advance</comment>
     <comment xml:lang="he">ROM של Game Boy Advance</comment>
@@ -11897,7 +12388,7 @@
     <comment xml:lang="oc">ROM Game Boy Advance</comment>
     <comment xml:lang="pl">Plik ROM konsoli Game Boy Advance</comment>
     <comment xml:lang="pt">ROM Game Boy Advance</comment>
-    <comment xml:lang="pt_BR">ROM de Game Boy Advance</comment>
+    <comment xml:lang="pt-BR">ROM de Game Boy Advance</comment>
     <comment xml:lang="ro">ROM Game Boy Advance</comment>
     <comment xml:lang="ru">Game Boy Advance ROM</comment>
     <comment xml:lang="sk">ROM pre Game Boy Advance</comment>
@@ -11908,19 +12399,26 @@
     <comment xml:lang="tr">Game Boy Gelişmiş ROM</comment>
     <comment xml:lang="uk">розширений ППП Game Boy</comment>
     <comment xml:lang="vi">ROM Game Boy Advance</comment>
-    <comment xml:lang="zh_CN">Game Boy Advance ROM</comment>
-    <comment xml:lang="zh_TW">Game Boy Advance ROM</comment>
+    <comment xml:lang="zh-CN">Game Boy Advance ROM</comment>
+    <comment xml:lang="zh-TW">Game Boy Advance ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.gba"/>
     <glob pattern="*.agb"/>
   </mime-type>
   <mime-type type="application/x-virtual-boy-rom">
     <comment>Virtual Boy ROM</comment>
+    <comment xml:lang="bg">ROM — Virtual Boy</comment>
     <comment xml:lang="ca">ROM de Virtual Boy</comment>
     <comment xml:lang="cs">ROM pro Virtual Boy</comment>
+    <comment xml:lang="da">Virtual Boy-ROM</comment>
     <comment xml:lang="de">Virtual Boy ROM</comment>
-    <comment xml:lang="en_GB">Virtual Boy ROM</comment>
+    <comment xml:lang="en-GB">Virtual Boy ROM</comment>
     <comment xml:lang="es">ROM de Virtual Boy</comment>
+    <comment xml:lang="eu">Virtual Boy ROM</comment>
+    <comment xml:lang="fi">Virtual Boy ROM</comment>
+    <comment xml:lang="fr">ROM Virtual Boy</comment>
+    <comment xml:lang="fur">ROM Virtual Boy</comment>
+    <comment xml:lang="ga">ROM Virtual Boy</comment>
     <comment xml:lang="hr">Virtual Boy ROM</comment>
     <comment xml:lang="hu">Virtual Boy ROM</comment>
     <comment xml:lang="id">ROM Virtual Boy</comment>
@@ -11928,33 +12426,36 @@
     <comment xml:lang="kk">Virtual Boy ROM</comment>
     <comment xml:lang="ko">버추얼보이 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Virtual Boy</comment>
-    <comment xml:lang="pt_BR">ROM de Virtual Boy</comment>
+    <comment xml:lang="pt-BR">ROM de Virtual Boy</comment>
     <comment xml:lang="ru">Virtual Boy ROM</comment>
     <comment xml:lang="sk">ROM pre Virtual Boy</comment>
     <comment xml:lang="sv">Virtual Boy-rom</comment>
+    <comment xml:lang="tr">Virtual Boy ROM</comment>
     <comment xml:lang="uk">ROM Virtual Boy</comment>
-    <comment xml:lang="zh_CN">Virtual Boy ROM</comment>
-    <comment xml:lang="zh_TW">Virtual Boy ROM</comment>
+    <comment xml:lang="zh-CN">Virtual Boy ROM</comment>
+    <comment xml:lang="zh-TW">Virtual Boy ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.vb"/>
   </mime-type>
   <mime-type type="application/x-gdbm">
     <comment>GDBM database</comment>
+    <comment xml:lang="af">GDBM-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات GDBM</comment>
-    <comment xml:lang="be@latin">Baza źviestak GDBM</comment>
+    <comment xml:lang="be-Latn">Baza źviestak GDBM</comment>
     <comment xml:lang="bg">База от данни — GDBM</comment>
     <comment xml:lang="ca">base de dades GDBM</comment>
     <comment xml:lang="cs">databáze GDBM</comment>
     <comment xml:lang="da">GDBM-database</comment>
     <comment xml:lang="de">GDBM-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων GDBM</comment>
-    <comment xml:lang="en_GB">GDBM database</comment>
+    <comment xml:lang="en-GB">GDBM database</comment>
     <comment xml:lang="eo">GDBM-datumbazo</comment>
     <comment xml:lang="es">base de datos GDBM</comment>
     <comment xml:lang="eu">GDBM datu-basea</comment>
     <comment xml:lang="fi">GDBM-tietokanta</comment>
     <comment xml:lang="fo">GDBM dátustovnur</comment>
     <comment xml:lang="fr">base de données GDBM</comment>
+    <comment xml:lang="fur">base di dâts GDBM</comment>
     <comment xml:lang="ga">bunachar sonraí GDBM</comment>
     <comment xml:lang="gl">base de datos GDBM</comment>
     <comment xml:lang="he">מסד נתונים GDBM</comment>
@@ -11975,7 +12476,7 @@
     <comment xml:lang="oc">banca de donadas GDBM</comment>
     <comment xml:lang="pl">Baza danych GDBM</comment>
     <comment xml:lang="pt">base de dados GDMB</comment>
-    <comment xml:lang="pt_BR">Banco de dados GDBM</comment>
+    <comment xml:lang="pt-BR">Banco de dados GDBM</comment>
     <comment xml:lang="ro">Bază de date GDBM</comment>
     <comment xml:lang="ru">База данных GDBM</comment>
     <comment xml:lang="sk">Databáza GDBM</comment>
@@ -11983,37 +12484,39 @@
     <comment xml:lang="sq">Bazë me të dhëna GDBM</comment>
     <comment xml:lang="sr">ГДБМ база података</comment>
     <comment xml:lang="sv">GDBM-databas</comment>
-    <comment xml:lang="tr">GDBM veritabanı</comment>
+    <comment xml:lang="tr">GDBM veri tabanı</comment>
     <comment xml:lang="uk">база даних GDBM</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu GDBM</comment>
-    <comment xml:lang="zh_CN">GDBM 数据库</comment>
-    <comment xml:lang="zh_TW">GDBM 資料庫</comment>
+    <comment xml:lang="zh-CN">GDBM 数据库</comment>
+    <comment xml:lang="zh-TW">GDBM 資料庫</comment>
     <acronym>GDBM</acronym>
     <expanded-acronym>GNU Database Manager</expanded-acronym>
     <magic priority="50">
-      <match value="0x13579ace" type="big32" offset="0"/>
-      <match value="0x13579ace" type="little32" offset="0"/>
-      <match value="GDBM" type="string" offset="0"/>
+      <match type="big32" value="0x13579ace" offset="0"/>
+      <match type="little32" value="0x13579ace" offset="0"/>
+      <match type="string" value="GDBM" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-genesis-rom">
-    
+    <!-- Translate this to Mega Drive if the console was known as such in your locale
+         Should be Mega Drive in all but en_US, Mexico and Canada: https://en.wikipedia.org/wiki/Sega_Genesis#History -->
     <comment>Genesis ROM</comment>
     <comment xml:lang="ar">Genesis ROM</comment>
-    <comment xml:lang="be@latin">Genesis ROM</comment>
+    <comment xml:lang="be-Latn">Genesis ROM</comment>
     <comment xml:lang="bg">ROM — Genesis</comment>
     <comment xml:lang="ca">ROM de Genesis</comment>
     <comment xml:lang="cs">ROM pro Genesis</comment>
-    <comment xml:lang="da">Genesis-rom</comment>
+    <comment xml:lang="da">Genesis-ROM</comment>
     <comment xml:lang="de">Genesis ROM</comment>
     <comment xml:lang="el">Genesis ROM</comment>
-    <comment xml:lang="en_GB">Genesis ROM</comment>
+    <comment xml:lang="en-GB">Genesis ROM</comment>
     <comment xml:lang="eo">Genesis-NLM</comment>
     <comment xml:lang="es">ROM de Genesis (Mega Drive)</comment>
     <comment xml:lang="eu">Genesis-eko ROMa</comment>
     <comment xml:lang="fi">Genesis-ROM</comment>
     <comment xml:lang="fo">Genesis ROM</comment>
     <comment xml:lang="fr">ROM Mega Drive/Genesis</comment>
+    <comment xml:lang="fur">ROM Sega Mega Drive</comment>
     <comment xml:lang="ga">ROM Genesis</comment>
     <comment xml:lang="gl">ROM xenérica</comment>
     <comment xml:lang="he">ROM מסוג Genesis</comment>
@@ -12034,7 +12537,7 @@
     <comment xml:lang="oc">ROM Mega Drive/Genesis</comment>
     <comment xml:lang="pl">Plik ROM konsoli Mega Drive</comment>
     <comment xml:lang="pt">ROM Mega Drive</comment>
-    <comment xml:lang="pt_BR">ROM de Genesis (Mega Drive)</comment>
+    <comment xml:lang="pt-BR">ROM de Genesis (Mega Drive)</comment>
     <comment xml:lang="ro">ROM Genesis</comment>
     <comment xml:lang="ru">Genesis ROM</comment>
     <comment xml:lang="sk">ROM pre Megadrive</comment>
@@ -12045,30 +12548,35 @@
     <comment xml:lang="tr">Genesis ROM</comment>
     <comment xml:lang="uk">ППП Genesis</comment>
     <comment xml:lang="vi">ROM Genesis</comment>
-    <comment xml:lang="zh_CN">Genesis ROM</comment>
-    <comment xml:lang="zh_TW">Genesis ROM</comment>
+    <comment xml:lang="zh-CN">Genesis ROM</comment>
+    <comment xml:lang="zh-TW">Genesis ROM</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="SEGA GENESIS" type="string" offset="256"/>
-      <match value="SEGA MEGA DRIVE" type="string" offset="256"/>
-      <match value="EAGN" type="string" offset="640"/>
-      <match value="EAMG" type="string" offset="640"/>
+      <match type="string" value="SEGA GENESIS" offset="256"/>
+      <match type="string" value="SEGA MEGA DRIVE" offset="256"/>
+      <match type="string" value="SEGA_MEGA_DRIVE" offset="256"/>
+      <match type="string" value="EAGN" offset="640"/>
+      <match type="string" value="EAMG" offset="640"/>
     </magic>
     <glob pattern="*.gen"/>
     <glob pattern="*.smd"/>
+    <glob pattern="*.sgd"/>
   </mime-type>
   <mime-type type="application/x-genesis-32x-rom">
-    
+    <!-- Translate this to Super 32X, Mega Drive 32X or Mega 32X if the system was known as such in your locale
+         Should be Super 32X in Japan, Mega Drive 32X in PAL region and Mega 32X in Brazil: https://en.wikipedia.org/wiki/32X -->
     <comment>Genesis 32X ROM</comment>
+    <comment xml:lang="bg">ROM — Genesis 32X</comment>
     <comment xml:lang="ca">ROM de Genesis 32X</comment>
     <comment xml:lang="cs">ROM pro Genesis 32X</comment>
-    <comment xml:lang="da">Genesis 32X ROM</comment>
+    <comment xml:lang="da">Genesis 32X-ROM</comment>
     <comment xml:lang="de">Genesis 32X ROM</comment>
-    <comment xml:lang="en_GB">Genesis 32X ROM</comment>
+    <comment xml:lang="en-GB">Genesis 32X ROM</comment>
     <comment xml:lang="es">ROM de Genesis 32X</comment>
     <comment xml:lang="eu">Genesis 32X ROM</comment>
     <comment xml:lang="fi">Genesis 32X -ROM</comment>
     <comment xml:lang="fr">ROM Genesis 32X</comment>
+    <comment xml:lang="fur">ROM Sega Mega Drive 32X</comment>
     <comment xml:lang="ga">ROM Genesis 32X</comment>
     <comment xml:lang="he">ROM מסוג Genesis 32X</comment>
     <comment xml:lang="hr">Genesis 32X ROM</comment>
@@ -12078,39 +12586,41 @@
     <comment xml:lang="kk">Genesis 32X ROM</comment>
     <comment xml:lang="ko">제네시스 32X 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Mega Drive 32X</comment>
-    <comment xml:lang="pt_BR">ROM de Genesis 32X</comment>
+    <comment xml:lang="pt-BR">ROM de Genesis 32X</comment>
     <comment xml:lang="ru">Genesis 32X ROM</comment>
     <comment xml:lang="sk">ROM pre Genesis 32X</comment>
     <comment xml:lang="sr">Џенезис 32X РОМ</comment>
     <comment xml:lang="sv">Mega Drive 32X-rom</comment>
     <comment xml:lang="tr">Genesis 32X ROM</comment>
     <comment xml:lang="uk">ППП Genesis 32X</comment>
-    <comment xml:lang="zh_CN">Genesis 32X ROM</comment>
-    <comment xml:lang="zh_TW">Genesis 32X ROM</comment>
+    <comment xml:lang="zh-CN">Genesis 32X ROM</comment>
+    <comment xml:lang="zh-TW">Genesis 32X ROM</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="SEGA 32X" type="string" offset="256"/>
+      <match type="string" value="SEGA 32X" offset="256"/>
     </magic>
     <glob pattern="*.32x"/>
     <glob pattern="*.mdx"/>
   </mime-type>
   <mime-type type="application/x-gettext-translation">
     <comment>translated messages (machine-readable)</comment>
+    <comment xml:lang="af">vertaalde boodskappe (masjienleesbaar)</comment>
     <comment xml:lang="ar">رسائل مترجمة (مقروءة آليا)</comment>
-    <comment xml:lang="be@latin">pierakładzienyja paviedamleńni (dla čytańnia kamputaram)</comment>
+    <comment xml:lang="be-Latn">pierakładzienyja paviedamleńni (dla čytańnia kamputaram)</comment>
     <comment xml:lang="bg">Преведени съобщения — машинен формат</comment>
     <comment xml:lang="ca">missatges traduïts (llegible per màquina)</comment>
     <comment xml:lang="cs">přeložené zprávy (strojově čitelné)</comment>
     <comment xml:lang="da">oversatte meddelelser (maskinlæsbare)</comment>
     <comment xml:lang="de">Übersetzte Meldungen (maschinenlesbar)</comment>
     <comment xml:lang="el">Μεταφρασμένα μηνύματα (για μηχανική ανάγνωση)</comment>
-    <comment xml:lang="en_GB">translated messages (machine-readable)</comment>
+    <comment xml:lang="en-GB">translated messages (machine-readable)</comment>
     <comment xml:lang="eo">tradukitaj mesaĝoj (maŝinlegebla)</comment>
     <comment xml:lang="es">mensajes traducidos (legibles por máquinas)</comment>
     <comment xml:lang="eu">itzulitako mezuak (ordenagailuek irakurtzeko)</comment>
     <comment xml:lang="fi">käännetyt viestit (koneluettava)</comment>
     <comment xml:lang="fo">týdd boð (maskin-lesifør)</comment>
     <comment xml:lang="fr">messages traduits (lisibles par machine)</comment>
+    <comment xml:lang="fur">messaçs tradots (leibii de machine)</comment>
     <comment xml:lang="ga">teachtaireachtaí aistrithe (inléite ag meaisín)</comment>
     <comment xml:lang="gl">mensaxes traducidos (lexíbeis por máquinas)</comment>
     <comment xml:lang="he">הודעות מתורגמות (מובן ע״י מכונה)</comment>
@@ -12132,7 +12642,7 @@
     <comment xml:lang="oc">messatges tradusits (legibles per maquina)</comment>
     <comment xml:lang="pl">Przetłumaczone komunikaty (czytelne dla komputera)</comment>
     <comment xml:lang="pt">mensagens traduzidas (leitura pelo computador)</comment>
-    <comment xml:lang="pt_BR">Mensagens traduzidas (legível pelo computador)</comment>
+    <comment xml:lang="pt-BR">Mensagens traduzidas (legível pelo computador)</comment>
     <comment xml:lang="ro">mesaje traduse (citite de calculator)</comment>
     <comment xml:lang="ru">Переводы сообщений (откомпилированые)</comment>
     <comment xml:lang="sk">Preložené správy (strojovo čitateľné)</comment>
@@ -12143,64 +12653,53 @@
     <comment xml:lang="tr">çevrilmiş iletiler (makine tarafından okunabilir)</comment>
     <comment xml:lang="uk">перекладені повідомлення (у машинній формі)</comment>
     <comment xml:lang="vi">thông điệp đã dịch (máy đọc được)</comment>
-    <comment xml:lang="zh_CN">已翻译消息（机读）</comment>
-    <comment xml:lang="zh_TW">翻譯訊息 (程式讀取格式)</comment>
+    <comment xml:lang="zh-CN">已翻译消息（机读）</comment>
+    <comment xml:lang="zh-TW">翻譯訊息 (程式讀取格式)</comment>
     <magic priority="50">
-      <match value="\336\22\4\225" type="string" offset="0"/>
-      <match value="\225\4\22\336" type="string" offset="0"/>
+      <match type="string" value="\336\22\4\225" offset="0"/>
+      <match type="string" value="\225\4\22\336" offset="0"/>
     </magic>
     <glob pattern="*.gmo"/>
     <glob pattern="*.mo"/>
   </mime-type>
   <mime-type type="application/x-gtk-builder">
-    <comment>GTK+ Builder</comment>
-    <comment xml:lang="ca">constructor de GTK+</comment>
-    <comment xml:lang="cs">GTK+ Builder</comment>
-    <comment xml:lang="da">GTK+ Builder</comment>
-    <comment xml:lang="de">GTK+ Builder</comment>
-    <comment xml:lang="el">Δομητής GTK+</comment>
-    <comment xml:lang="en_GB">GTK+ Builder</comment>
-    <comment xml:lang="es">GTK+ Builder</comment>
-    <comment xml:lang="eu">GTK+ Builder</comment>
-    <comment xml:lang="fi">GTK+ Builder</comment>
-    <comment xml:lang="fr">GTK+ Builder</comment>
-    <comment xml:lang="ga">Tógálaí GTK+</comment>
-    <comment xml:lang="gl">Construtor de GTK+</comment>
-    <comment xml:lang="he">בנייה של GTK+‎</comment>
-    <comment xml:lang="hr">GTK+ Builder</comment>
-    <comment xml:lang="hu">GTK+ Builder</comment>
-    <comment xml:lang="ia">GTK+ Builder</comment>
-    <comment xml:lang="id">GTK+ Builder</comment>
-    <comment xml:lang="it">GTK+ Builder</comment>
-    <comment xml:lang="ja">GTK+ Builder</comment>
-    <comment xml:lang="kk">GTK+ Builder</comment>
-    <comment xml:lang="ko">GTK+ 빌더</comment>
-    <comment xml:lang="lv">GTK+ būvētājs</comment>
-    <comment xml:lang="oc">GTK+ Builder</comment>
-    <comment xml:lang="pl">GTK+ Builder</comment>
-    <comment xml:lang="pt">Construtor GTK+</comment>
-    <comment xml:lang="pt_BR">GTK+ Builder</comment>
-    <comment xml:lang="ru">GTK+ Builder</comment>
-    <comment xml:lang="sk">GTK+ Builder</comment>
-    <comment xml:lang="sl">GTK+ Builder</comment>
-    <comment xml:lang="sr">ГТК+ Градитељ</comment>
-    <comment xml:lang="sv">GTK+ Builder</comment>
-    <comment xml:lang="tr">GTK+ İnşa Edici</comment>
-    <comment xml:lang="uk">GTK+ Builder</comment>
-    <comment xml:lang="zh_CN">GTK+ Builder</comment>
-    <comment xml:lang="zh_TW">GTK+ Builder</comment>
+    <comment>GTK+ Builder interface document</comment>
+    <comment xml:lang="bg">Интерфейс — GTK+ Builder</comment>
+    <comment xml:lang="ca">document d'interfície GTK+ Builder</comment>
+    <comment xml:lang="da">GTK+ Builder-brugerflade-dokument</comment>
+    <comment xml:lang="de">GTK+-Builder-Oberflächendokument</comment>
+    <comment xml:lang="en-GB">GTK+ Builder interface document</comment>
+    <comment xml:lang="es">documento de interfaz de GTK Builder</comment>
+    <comment xml:lang="eu">GTK+ Builder interfaze dokumentua</comment>
+    <comment xml:lang="fi">GTK+ Builder -käyttöliittymän asiakirja</comment>
+    <comment xml:lang="fr">document d'interface GTK+ Builder</comment>
+    <comment xml:lang="hr">GTK+ Graditelj dokument sučelja</comment>
+    <comment xml:lang="hu">GTK+ Builder felületleíró dokumentum</comment>
+    <comment xml:lang="id">Dokumen antarmuka GTK+ Builder</comment>
+    <comment xml:lang="it">Documento interfaccia GTK+ Builder</comment>
+    <comment xml:lang="kk">GTK+ Builder интерфейс құжаты</comment>
+    <comment xml:lang="ko">GTK+ 빌더 인터페이스 문서</comment>
+    <comment xml:lang="pl">Dokument interfejsu GTK Builder</comment>
+    <comment xml:lang="pt-BR">Documento de interface do GTK+ Builder</comment>
+    <comment xml:lang="ru">Документ интерфейса GTK+ Builder</comment>
+    <comment xml:lang="sv">GTK+-Builder-gränssnittsdokument</comment>
+    <comment xml:lang="tr">GTK+ Builder arayüz belgesi</comment>
+    <comment xml:lang="uk">документ інтерфейсу GTK+ Builder</comment>
+    <comment xml:lang="zh-CN">GTK+ Builder 界面文档</comment>
+    <comment xml:lang="zh-TW">GTK+ Builder 介面文件</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.ui"/>
     <magic priority="50">
-      <match value="&lt;interface" type="string" offset="0:256"/>
+      <match type="string" value="&lt;interface" offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-glade">
     <comment>Glade project</comment>
+    <comment xml:lang="af">Glade-projek</comment>
     <comment xml:lang="ar">مشروع Glade</comment>
     <comment xml:lang="az">Glade layihəsi</comment>
-    <comment xml:lang="be@latin">Prajekt Glade</comment>
+    <comment xml:lang="be-Latn">Prajekt Glade</comment>
     <comment xml:lang="bg">Проект — Glade</comment>
     <comment xml:lang="ca">projecte de Glade</comment>
     <comment xml:lang="cs">projekt Glade</comment>
@@ -12208,13 +12707,14 @@
     <comment xml:lang="da">Gladeprojekt</comment>
     <comment xml:lang="de">Glade-Projekt</comment>
     <comment xml:lang="el">Έργο Glade</comment>
-    <comment xml:lang="en_GB">Glade project</comment>
+    <comment xml:lang="en-GB">Glade project</comment>
     <comment xml:lang="eo">Glade-projekto</comment>
     <comment xml:lang="es">proyecto de Glade</comment>
     <comment xml:lang="eu">Glade proiektua</comment>
     <comment xml:lang="fi">Glade-projekti</comment>
     <comment xml:lang="fo">Glade verkætlan</comment>
     <comment xml:lang="fr">projet Glade</comment>
+    <comment xml:lang="fur">progjet Glade</comment>
     <comment xml:lang="ga">tionscadal Glade</comment>
     <comment xml:lang="gl">proxecto de Glade</comment>
     <comment xml:lang="he">מיזם Glade</comment>
@@ -12235,7 +12735,7 @@
     <comment xml:lang="oc">projècte Glade</comment>
     <comment xml:lang="pl">Projekt Glade</comment>
     <comment xml:lang="pt">projecto Glade</comment>
-    <comment xml:lang="pt_BR">Projeto do Glade</comment>
+    <comment xml:lang="pt-BR">Projeto do Glade</comment>
     <comment xml:lang="ro">Proiect Glade</comment>
     <comment xml:lang="ru">Проект Glade</comment>
     <comment xml:lang="sk">Projekt Glade</comment>
@@ -12244,19 +12744,20 @@
     <comment xml:lang="sr">Глејдов пројекат</comment>
     <comment xml:lang="sv">Glade-projekt</comment>
     <comment xml:lang="tr">Glade projesi</comment>
-    <comment xml:lang="uk">проект Glade</comment>
+    <comment xml:lang="uk">проєкт Glade</comment>
     <comment xml:lang="vi">Dự án Glade</comment>
-    <comment xml:lang="zh_CN">Glade 工程</comment>
-    <comment xml:lang="zh_TW">Glade 專案</comment>
+    <comment xml:lang="zh-CN">Glade 工程</comment>
+    <comment xml:lang="zh-TW">Glade 專案</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.glade"/>
     <magic priority="50">
-      <match value="&lt;glade-interface" type="string" offset="0:256"/>
+      <match type="string" value="&lt;glade-interface" offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-gnucash">
     <comment>GnuCash financial data</comment>
+    <comment xml:lang="af">GnuCash finansiële data</comment>
     <comment xml:lang="ar">معلومات GnuCash المالية</comment>
     <comment xml:lang="bg">Финансови данни — GnuCash</comment>
     <comment xml:lang="ca">dades financeres de GnuCash</comment>
@@ -12264,12 +12765,13 @@
     <comment xml:lang="da">Finansielle data til GnuCash</comment>
     <comment xml:lang="de">GnuCash-Finanzdaten</comment>
     <comment xml:lang="el">Οικονομικά στοιχεία GnuCash</comment>
-    <comment xml:lang="en_GB">GnuCash financial data</comment>
+    <comment xml:lang="en-GB">GnuCash financial data</comment>
     <comment xml:lang="es">datos financieros de GnuCash</comment>
     <comment xml:lang="eu">GnuCash finantzako datuak</comment>
     <comment xml:lang="fi">GnuCash-taloustiedot</comment>
     <comment xml:lang="fo">GnuCash fíggjarligar dátur</comment>
     <comment xml:lang="fr">données financières GnuCash</comment>
+    <comment xml:lang="fur">dâts finanziaris GnuCash</comment>
     <comment xml:lang="ga">sonraí airgeadúla GnuCash</comment>
     <comment xml:lang="gl">datos financeiros de GNUCash</comment>
     <comment xml:lang="he">מידע כלכלי של GnuCash</comment>
@@ -12287,7 +12789,7 @@
     <comment xml:lang="oc">donadas financières GnuCash</comment>
     <comment xml:lang="pl">Dane finansowe GnuCash</comment>
     <comment xml:lang="pt">dados financeiros GnuCash</comment>
-    <comment xml:lang="pt_BR">Dados financeiros do GnuCash</comment>
+    <comment xml:lang="pt-BR">Dados financeiros do GnuCash</comment>
     <comment xml:lang="ro">Date financiare GnuCash</comment>
     <comment xml:lang="ru">Финансовые данные GnuCash</comment>
     <comment xml:lang="sk">Finančné údaje GnuCash</comment>
@@ -12297,8 +12799,8 @@
     <comment xml:lang="tr">GnuCash mali verisi</comment>
     <comment xml:lang="uk">фінансові дані GnuCash</comment>
     <comment xml:lang="vi">Dữ liệu tài chính GnuCash</comment>
-    <comment xml:lang="zh_CN">GnuCash 财务数据</comment>
-    <comment xml:lang="zh_TW">GnuCash 財務資料</comment>
+    <comment xml:lang="zh-CN">GnuCash 财务数据</comment>
+    <comment xml:lang="zh-TW">GnuCash 財務資料</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.gnucash"/>
     <glob pattern="*.gnc"/>
@@ -12306,21 +12808,23 @@
   </mime-type>
   <mime-type type="application/x-gnumeric">
     <comment>Gnumeric spreadsheet</comment>
+    <comment xml:lang="af">Gnumeric-sigblad</comment>
     <comment xml:lang="ar">جدول Gnumeric</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš Gnumeric</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš Gnumeric</comment>
     <comment xml:lang="bg">Таблица — Gnumeric</comment>
     <comment xml:lang="ca">full de càlcul de Gnumeric</comment>
     <comment xml:lang="cs">sešit Gnumeric</comment>
     <comment xml:lang="da">Gnumeric-regneark</comment>
     <comment xml:lang="de">Gnumeric-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Gnumeric</comment>
-    <comment xml:lang="en_GB">Gnumeric spreadsheet</comment>
+    <comment xml:lang="en-GB">Gnumeric spreadsheet</comment>
     <comment xml:lang="eo">Gnumeric-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo de Gnumeric</comment>
     <comment xml:lang="eu">Gnumeric kalkulu-orria</comment>
     <comment xml:lang="fi">Gnumeric-taulukko</comment>
     <comment xml:lang="fo">Gnumeric rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Gnumeric</comment>
+    <comment xml:lang="fur">sfuei di calcul Gnumeric</comment>
     <comment xml:lang="ga">scarbhileog Gnumeric</comment>
     <comment xml:lang="gl">folla de cálculo de Gnumeric</comment>
     <comment xml:lang="he">גליון עבודה Gnumeric</comment>
@@ -12341,7 +12845,7 @@
     <comment xml:lang="oc">fuèlh de calcul Gnumeric</comment>
     <comment xml:lang="pl">Arkusz Gnumeric</comment>
     <comment xml:lang="pt">folha de cálculo Gnumeric</comment>
-    <comment xml:lang="pt_BR">Planilha do Gnumeric</comment>
+    <comment xml:lang="pt-BR">Planilha do Gnumeric</comment>
     <comment xml:lang="ro">Foaie de calcul Gnumeric</comment>
     <comment xml:lang="ru">Электронная таблица Gnumeric</comment>
     <comment xml:lang="sk">Zošit Gnumeric</comment>
@@ -12349,36 +12853,38 @@
     <comment xml:lang="sq">Fletë llogaritjesh Gnumeric</comment>
     <comment xml:lang="sr">табела Гномовог бројевника</comment>
     <comment xml:lang="sv">Gnumeric-kalkylblad</comment>
-    <comment xml:lang="tr">Gnumeric çalışma sayfası</comment>
+    <comment xml:lang="tr">Gnumeric hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Gnumeric</comment>
     <comment xml:lang="vi">Bảng tính Gnumeric.</comment>
-    <comment xml:lang="zh_CN">Gnumeric 电子表格</comment>
-    <comment xml:lang="zh_TW">Gnumeric 試算表</comment>
+    <comment xml:lang="zh-CN">Gnumeric 电子表格</comment>
+    <comment xml:lang="zh-TW">Gnumeric 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="gmr:Workbook" type="string" offset="0:64"/>
-      <match value="gnm:Workbook" type="string" offset="0:64"/>
+      <match type="string" value="gmr:Workbook" offset="0:64"/>
+      <match type="string" value="gnm:Workbook" offset="0:64"/>
     </magic>
     <glob pattern="*.gnumeric"/>
   </mime-type>
   <mime-type type="application/x-gnuplot">
     <comment>Gnuplot document</comment>
+    <comment xml:lang="af">Gnuplot-dokument</comment>
     <comment xml:lang="ar">مستند Gnuplot</comment>
     <comment xml:lang="ast">Documentu de Gnuplot</comment>
-    <comment xml:lang="be@latin">Dakument Gnuplot</comment>
+    <comment xml:lang="be-Latn">Dakument Gnuplot</comment>
     <comment xml:lang="bg">Документ — Gnuplot</comment>
     <comment xml:lang="ca">document gnuplot</comment>
     <comment xml:lang="cs">dokument Gnuplot</comment>
-    <comment xml:lang="da">Gnuplotdokument</comment>
+    <comment xml:lang="da">Gnuplot-dokument</comment>
     <comment xml:lang="de">Gnuplot-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Gnuplot</comment>
-    <comment xml:lang="en_GB">Gnuplot document</comment>
+    <comment xml:lang="en-GB">Gnuplot document</comment>
     <comment xml:lang="eo">Gnuplot-dokumento</comment>
     <comment xml:lang="es">documento de Gnuplot</comment>
     <comment xml:lang="eu">Gnuplot dokumentua</comment>
     <comment xml:lang="fi">Gnuplot-asiakirja</comment>
     <comment xml:lang="fo">Gnuplot skjal</comment>
     <comment xml:lang="fr">document Gnuplot</comment>
+    <comment xml:lang="fur">document Gnuplot</comment>
     <comment xml:lang="ga">cáipéis Gnuplot</comment>
     <comment xml:lang="gl">documento de Gnuplot</comment>
     <comment xml:lang="he">מסמך Gnuplot</comment>
@@ -12398,7 +12904,7 @@
     <comment xml:lang="oc">document Gnuplot</comment>
     <comment xml:lang="pl">Dokument Gnuplot</comment>
     <comment xml:lang="pt">documento Gnuplot</comment>
-    <comment xml:lang="pt_BR">Documento do Gnuplot</comment>
+    <comment xml:lang="pt-BR">Documento do Gnuplot</comment>
     <comment xml:lang="ro">Document Gnuplot</comment>
     <comment xml:lang="ru">Документ Gnuplot</comment>
     <comment xml:lang="sk">Dokument Gnuplot</comment>
@@ -12409,8 +12915,8 @@
     <comment xml:lang="tr">Gnuplot belgesi</comment>
     <comment xml:lang="uk">документ Gnuplot</comment>
     <comment xml:lang="vi">Tài liệu Gnuplot</comment>
-    <comment xml:lang="zh_CN">Gnuplot 文档</comment>
-    <comment xml:lang="zh_TW">Gnuplot 文件</comment>
+    <comment xml:lang="zh-CN">Gnuplot 文档</comment>
+    <comment xml:lang="zh-TW">Gnuplot 文件</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.gp"/>
@@ -12420,20 +12926,21 @@
   <mime-type type="application/x-graphite">
     <comment>Graphite scientific graph</comment>
     <comment xml:lang="ar">مبيان الجرافيت العلمي</comment>
-    <comment xml:lang="be@latin">Navukovy hrafik Graphite</comment>
+    <comment xml:lang="be-Latn">Navukovy hrafik Graphite</comment>
     <comment xml:lang="bg">Графика — Graphite</comment>
     <comment xml:lang="ca">gràfic científic Graphite</comment>
     <comment xml:lang="cs">vědecký graf Graphite</comment>
     <comment xml:lang="da">Graphite videnskabelig graf</comment>
     <comment xml:lang="de">Wissenschaftlicher Graphite-Graph</comment>
     <comment xml:lang="el">Επιστημονικό γράφημα Graphite</comment>
-    <comment xml:lang="en_GB">Graphite scientific graph</comment>
+    <comment xml:lang="en-GB">Graphite scientific graph</comment>
     <comment xml:lang="eo">scienca grafikaĵo de Graphite</comment>
     <comment xml:lang="es">gráfico científico de Graphite</comment>
     <comment xml:lang="eu">Graphite - grafiko zientifikoak</comment>
     <comment xml:lang="fi">Graphite- tieteellinen graafi</comment>
     <comment xml:lang="fo">Grapite vísindarlig ritmynd</comment>
     <comment xml:lang="fr">graphe Graphite scientific</comment>
+    <comment xml:lang="fur">grafic sientific Graphite</comment>
     <comment xml:lang="ga">graf eolaíochta Graphite</comment>
     <comment xml:lang="gl">gráfica científica de Graphite</comment>
     <comment xml:lang="he">תרשים מדעי של Graphite</comment>
@@ -12454,7 +12961,7 @@
     <comment xml:lang="oc">graphe Graphite scientific</comment>
     <comment xml:lang="pl">Wykres naukowy Graphite</comment>
     <comment xml:lang="pt">gráfico científico Graphite</comment>
-    <comment xml:lang="pt_BR">Gráfico científico do Graphite</comment>
+    <comment xml:lang="pt-BR">Gráfico científico do Graphite</comment>
     <comment xml:lang="ro">Grafic științific Graphite</comment>
     <comment xml:lang="ru">Научная диаграмма Graphite</comment>
     <comment xml:lang="sk">Vedecký graf Graphite</comment>
@@ -12465,28 +12972,29 @@
     <comment xml:lang="tr">Graphite bilimsel grafiği</comment>
     <comment xml:lang="uk">наукова графіка Graphite</comment>
     <comment xml:lang="vi">Biểu đồ khoa học Graphite</comment>
-    <comment xml:lang="zh_CN">Graphite 科学图形</comment>
-    <comment xml:lang="zh_TW">Graphite 科學圖表</comment>
+    <comment xml:lang="zh-CN">Graphite 科学图形</comment>
+    <comment xml:lang="zh-TW">Graphite 科學圖表</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.gra"/>
   </mime-type>
   <mime-type type="application/x-gtktalog">
     <comment>GTKtalog catalog</comment>
     <comment xml:lang="ar">كتالوج GTKtalog</comment>
-    <comment xml:lang="be@latin">Kataloh GTKtalog</comment>
+    <comment xml:lang="be-Latn">Kataloh GTKtalog</comment>
     <comment xml:lang="bg">Каталог — Gtktalog</comment>
     <comment xml:lang="ca">catàleg de GTKtalog</comment>
     <comment xml:lang="cs">katalog GTKtalog</comment>
     <comment xml:lang="da">GTKtalog-katalog</comment>
     <comment xml:lang="de">GTKtalog-Katalog</comment>
     <comment xml:lang="el">Κατάλογος GTKtalog</comment>
-    <comment xml:lang="en_GB">GTKtalog catalogue</comment>
+    <comment xml:lang="en-GB">GTKtalog catalogue</comment>
     <comment xml:lang="eo">katalogo de GTKtalog</comment>
     <comment xml:lang="es">catálogo de GTKtalog</comment>
     <comment xml:lang="eu">Gtktalog katalogoa</comment>
     <comment xml:lang="fi">GTKtalog-luettelo</comment>
     <comment xml:lang="fo">GTKtalog skrá</comment>
     <comment xml:lang="fr">catalogue Gtktalog</comment>
+    <comment xml:lang="fur">catalic GTKtalog</comment>
     <comment xml:lang="ga">catalóg GTKtalog</comment>
     <comment xml:lang="gl">catálogo de GTKtalog</comment>
     <comment xml:lang="he">קטלוג GTKtalog</comment>
@@ -12508,7 +13016,7 @@
     <comment xml:lang="oc">catalòg Gtktalog</comment>
     <comment xml:lang="pl">Katalog programu GTKtalog</comment>
     <comment xml:lang="pt">catálogo GTKtalog</comment>
-    <comment xml:lang="pt_BR">Catálogo GTKtalog</comment>
+    <comment xml:lang="pt-BR">Catálogo GTKtalog</comment>
     <comment xml:lang="ro">Catalog GTKalog</comment>
     <comment xml:lang="ru">Каталог GTKtalog</comment>
     <comment xml:lang="sk">Katalóg GTKtalog</comment>
@@ -12516,38 +13024,40 @@
     <comment xml:lang="sq">Katallog GTKtalog</comment>
     <comment xml:lang="sr">каталог ГТКталога</comment>
     <comment xml:lang="sv">GTKtalog-katalog</comment>
-    <comment xml:lang="tr">Gtktalog kataloğu</comment>
+    <comment xml:lang="tr">GTKtalog kataloğu</comment>
     <comment xml:lang="uk">каталог GTKtalog</comment>
     <comment xml:lang="vi">Phân loại GTKtalog</comment>
-    <comment xml:lang="zh_CN">GTKtalog 目录</comment>
-    <comment xml:lang="zh_TW">GTKtalog 光碟目錄</comment>
+    <comment xml:lang="zh-CN">GTKtalog 目录</comment>
+    <comment xml:lang="zh-TW">GTKtalog 光碟目錄</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="gtktalog " type="string" offset="4"/>
+      <match type="string" value="gtktalog " offset="4"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-gzdvi">
     <comment>TeX DVI document (gzip-compressed)</comment>
+    <comment xml:lang="af">TeX DVI-dokument (gzip-saamgepers)</comment>
     <comment xml:lang="ar">مستند TeX DVI (مضغوط-gzip)</comment>
     <comment xml:lang="ast">Documentu Tex DVI (comprimíu en gzip)</comment>
-    <comment xml:lang="be@latin">Dakument TeX DVI (gzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Dakument TeX DVI (gzip-skampresavany)</comment>
     <comment xml:lang="bg">Документ — TeX DVI, компресиран с gzip</comment>
     <comment xml:lang="ca">document DVI de TeX (amb compressió gzip)</comment>
     <comment xml:lang="cs">dokument TeX DVI (komprimovaný pomocí gzip)</comment>
     <comment xml:lang="da">TeX DVI-dokument (gzip-komprimeret)</comment>
     <comment xml:lang="de">TeX-DVI-Dokument (gzip-komprimiert)</comment>
     <comment xml:lang="el">Έγγραφο TeX DVI (συμπιεσμένο με gzip)</comment>
-    <comment xml:lang="en_GB">TeX DVI document (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">TeX DVI document (gzip-compressed)</comment>
     <comment xml:lang="es">documento DVI de TeX (comprimido con gzip)</comment>
     <comment xml:lang="eu">TeX DVI dokumentua (gzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">TeX DVI -asiakirja (gzip-pakattu)</comment>
     <comment xml:lang="fo">TeX DVI skjal (gzip-stappað)</comment>
     <comment xml:lang="fr">document DVI TeX (compressé gzip)</comment>
+    <comment xml:lang="fur">document DVI TeX (comprimût cun gzip)</comment>
     <comment xml:lang="ga">cáipéis DVI TeX (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">documento DVI de TeX (comprimido con gzip)</comment>
     <comment xml:lang="he">מסמך מסוג TeX DVI (מכווץ ע״י gzip)</comment>
     <comment xml:lang="hr">TeX DVI dokument (gzip sažet)</comment>
-    <comment xml:lang="hu">TeX DVI dokumentum (gzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">TeX DVI dokumentum (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Documento TeX DVI (comprimite con gzip)</comment>
     <comment xml:lang="id">Dokumen TeX DVI (terkompresi gzip)</comment>
     <comment xml:lang="it">Documento Tex DVI (compresso con gzip)</comment>
@@ -12562,7 +13072,7 @@
     <comment xml:lang="oc">document DVI TeX (compressat gzip)</comment>
     <comment xml:lang="pl">Dokument TeX DVI (kompresja gzip)</comment>
     <comment xml:lang="pt">documento TeX DVI (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Documento DVI TeX (compactado com gzip)</comment>
+    <comment xml:lang="pt-BR">Documento DVI TeX (compactado com gzip)</comment>
     <comment xml:lang="ro">Document TeX DVI (comprimat gzip)</comment>
     <comment xml:lang="ru">Документ TeX DVI (сжатый gzip)</comment>
     <comment xml:lang="sk">Dokument TeX DVI (komprimovaný pomocou gzip)</comment>
@@ -12573,29 +13083,31 @@
     <comment xml:lang="tr">TeX DVI belgesi (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ TeX DVI (стиснений gzip)</comment>
     <comment xml:lang="vi">Tài liệu DVI TeX (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">TeX DVI 文档（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">TeX DVI 文件 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">TeX DVI 文档（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">TeX DVI 文件 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.dvi.gz"/>
   </mime-type>
   <mime-type type="application/gzip">
     <comment>Gzip archive</comment>
+    <comment xml:lang="af">Gzip-argief</comment>
     <comment xml:lang="ar">أرشيف Gzip</comment>
-    <comment xml:lang="be@latin">Archiŭ gzip</comment>
+    <comment xml:lang="be-Latn">Archiŭ gzip</comment>
     <comment xml:lang="bg">Архив — gzip</comment>
     <comment xml:lang="ca">arxiu gzip</comment>
     <comment xml:lang="cs">archiv gzip</comment>
     <comment xml:lang="da">Gzip-arkiv</comment>
     <comment xml:lang="de">Gzip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Gzip</comment>
-    <comment xml:lang="en_GB">Gzip archive</comment>
+    <comment xml:lang="en-GB">Gzip archive</comment>
     <comment xml:lang="eo">Gzip-arkivo</comment>
     <comment xml:lang="es">archivador Gzip</comment>
     <comment xml:lang="eu">Gzip artxiboa</comment>
     <comment xml:lang="fi">Gzip-arkisto</comment>
     <comment xml:lang="fo">Gzip skjalasavn</comment>
     <comment xml:lang="fr">archive gzip</comment>
+    <comment xml:lang="fur">archivi Gzip</comment>
     <comment xml:lang="ga">cartlann Gzip</comment>
     <comment xml:lang="gl">arquivo Gzip</comment>
     <comment xml:lang="he">ארכיון Gzip</comment>
@@ -12615,10 +13127,10 @@
     <comment xml:lang="oc">archiu gzip</comment>
     <comment xml:lang="pl">Archiwum gzip</comment>
     <comment xml:lang="pt">arquivo Gzip</comment>
-    <comment xml:lang="pt_BR">Pacote Gzip</comment>
+    <comment xml:lang="pt-BR">Pacote Gzip</comment>
     <comment xml:lang="ro">Arhivă Gzip</comment>
     <comment xml:lang="ru">Архив GZIP</comment>
-    <comment xml:lang="sk">Archív gzip</comment>
+    <comment xml:lang="sk">Archív Gzip</comment>
     <comment xml:lang="sl">Datoteka arhiva Gzip</comment>
     <comment xml:lang="sq">Arkiv gzip</comment>
     <comment xml:lang="sr">Гзип архива</comment>
@@ -12626,37 +13138,39 @@
     <comment xml:lang="tr">Gzip arşivi</comment>
     <comment xml:lang="uk">архів gzip</comment>
     <comment xml:lang="vi">Kho nén gzip</comment>
-    <comment xml:lang="zh_CN">Gzip 归档文件</comment>
-    <comment xml:lang="zh_TW">Gzip 封存檔</comment>
+    <comment xml:lang="zh-CN">Gzip 归档文件</comment>
+    <comment xml:lang="zh-TW">Gzip 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="\037\213" type="string" offset="0"/>
+      <match type="string" value="\037\213" offset="0"/>
     </magic>
     <glob pattern="*.gz"/>
     <alias type="application/x-gzip"/>
   </mime-type>
   <mime-type type="application/x-gzpdf">
     <comment>PDF document (gzip-compressed)</comment>
+    <comment xml:lang="af">PDF-dokument (gzip-saamgepers)</comment>
     <comment xml:lang="ar">مستند PDF (مضغوط-gzip)</comment>
     <comment xml:lang="ast">Documentu PDF (comprimíu en gzip)</comment>
-    <comment xml:lang="be@latin">Dakument PDF (gzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Dakument PDF (gzip-skampresavany)</comment>
     <comment xml:lang="bg">Документ — PDF, компресиран с gzip</comment>
     <comment xml:lang="ca">document PDF (amb compressió gzip)</comment>
     <comment xml:lang="cs">dokument PDF (komprimovaný pomocí gzip)</comment>
     <comment xml:lang="da">PDF-dokument (gzip-komprimeret)</comment>
     <comment xml:lang="de">PDF-Dokument (gzip-komprimiert)</comment>
     <comment xml:lang="el">Έγγραφο PDF (συμπιεσμένο με gzip)</comment>
-    <comment xml:lang="en_GB">PDF document (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">PDF document (gzip-compressed)</comment>
     <comment xml:lang="es">documento PDF (comprimido con gzip)</comment>
     <comment xml:lang="eu">PDF dokumentua (gzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">PDF-asiakirja (gzip-pakattu)</comment>
     <comment xml:lang="fo">PDF skjal (gzip-stappað)</comment>
     <comment xml:lang="fr">document PDF (compressé gzip)</comment>
+    <comment xml:lang="fur">document PDF (comprimût cun gzip)</comment>
     <comment xml:lang="ga">cáipéis PDF (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">documento PDF (comprimido en gzip)</comment>
     <comment xml:lang="he">מסמך PDF (מכווץ ע״י gzip)</comment>
     <comment xml:lang="hr">PDF dokument (gzip sažet)</comment>
-    <comment xml:lang="hu">PDF dokumentum (gzip-tömörítésű)</comment>
+    <comment xml:lang="hu">PDF dokumentum (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Documento PDF (comprimite con gzip)</comment>
     <comment xml:lang="id">Dokumen PDF (terkompresi gzip)</comment>
     <comment xml:lang="it">Documento PDF (compresso con gzip)</comment>
@@ -12671,7 +13185,7 @@
     <comment xml:lang="oc">document PDF (compressat gzip)</comment>
     <comment xml:lang="pl">Dokument PDF (kompresja gzip)</comment>
     <comment xml:lang="pt">documento PDF (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Documento PDF (compactado com gzip)</comment>
+    <comment xml:lang="pt-BR">Documento PDF (compactado com gzip)</comment>
     <comment xml:lang="ro">Document PDF (comprimat gzip)</comment>
     <comment xml:lang="ru">Документ PDF (сжатый gzip)</comment>
     <comment xml:lang="sk">Dokument PDF (komprimovaný pomocou gzip)</comment>
@@ -12682,35 +13196,37 @@
     <comment xml:lang="tr">PDF belgesi (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ PDF (стиснений gzip)</comment>
     <comment xml:lang="vi">Tài liệu PDF (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">PDF 文档（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">PDF 文件 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">PDF 文档（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">PDF 文件 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.pdf.gz"/>
   </mime-type>
   <mime-type type="application/x-gzpostscript">
     <comment>PostScript document (gzip-compressed)</comment>
+    <comment xml:lang="af">PostScript-dokument (gzip-saamgepers)</comment>
     <comment xml:lang="ar">مستند PostScript (مضغوط-gzip)</comment>
     <comment xml:lang="ast">Documentu PostScript (comprimíu en gzip)</comment>
-    <comment xml:lang="be@latin">Dakument PostScript (gzip-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Dakument PostScript (gzip-skampresavany)</comment>
     <comment xml:lang="bg">Документ — PostScript, компресиран с gzip</comment>
     <comment xml:lang="ca">document PostScript (amb compressió gzip)</comment>
     <comment xml:lang="cs">dokument PostScript (komprimovaný pomocí gzip)</comment>
     <comment xml:lang="da">PostScript-dokument (gzip-komprimeret)</comment>
     <comment xml:lang="de">PostScript-Dokument (gzip-komprimiert)</comment>
     <comment xml:lang="el">Έγγραφο PostScript (συμπιεσμένο με gzip)</comment>
-    <comment xml:lang="en_GB">PostScript document (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">PostScript document (gzip-compressed)</comment>
     <comment xml:lang="eo">PostScript-dokumento (kunpremita per gzip)</comment>
     <comment xml:lang="es">documento PostScript (comprimido con gzip)</comment>
     <comment xml:lang="eu">PostScript dokumentua (gzip-konprimitua)</comment>
     <comment xml:lang="fi">PostScript-asiakirja (gzip-pakattu)</comment>
     <comment xml:lang="fo">PostScript skjal (gzip-stappað)</comment>
     <comment xml:lang="fr">document PostScript (compressé gzip)</comment>
+    <comment xml:lang="fur">document PostScript (comprimût cun gzip)</comment>
     <comment xml:lang="ga">cáipéis PostScript (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">documento PostScript (comprimido con gzip)</comment>
     <comment xml:lang="he">מסמך PostScript (מכוות ע״י gzip)</comment>
     <comment xml:lang="hr">PostScript dokument (gzip sažet)</comment>
-    <comment xml:lang="hu">PostScript-dokumentum (gzip-pel tömörítve)</comment>
+    <comment xml:lang="hu">PostScript-dokumentum (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Documento PostScript (comprimite con gzip)</comment>
     <comment xml:lang="id">Dokumen PostScript (terkompresi gzip)</comment>
     <comment xml:lang="it">Documento PostScript (compresso con gzip)</comment>
@@ -12724,9 +13240,9 @@
     <comment xml:lang="nl">PostScript-document (ingepakt met gzip)</comment>
     <comment xml:lang="nn">PostScript-dokument (pakka med gzip)</comment>
     <comment xml:lang="oc">document PostEscript (compressat gzip)</comment>
-    <comment xml:lang="pl">Dokument Postscript (kompresja gzip)</comment>
+    <comment xml:lang="pl">Dokument PostScript (kompresja gzip)</comment>
     <comment xml:lang="pt">documento PostScript (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Documento PostScript (compactado com gzip)</comment>
+    <comment xml:lang="pt-BR">Documento PostScript (compactado com gzip)</comment>
     <comment xml:lang="ro">Document PostScript (comprimat gzip)</comment>
     <comment xml:lang="ru">Документ PostScript (сжатый gzip)</comment>
     <comment xml:lang="sk">Dokument PostScript (komprimovaný pomocou gzip)</comment>
@@ -12737,18 +13253,19 @@
     <comment xml:lang="tr">PostScript belgesi (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ PostScript (стиснене gzip)</comment>
     <comment xml:lang="vi">Tài liệu PostScript (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">PostScript 文档（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">PostScript 文件 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">PostScript 文档（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">PostScript 文件 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.ps.gz"/>
   </mime-type>
   <mime-type type="application/x-hdf">
     <comment>HDF document</comment>
+    <comment xml:lang="af">HDF-dokument</comment>
     <comment xml:lang="ar">مستند HDF</comment>
     <comment xml:lang="ast">Documentu HDF</comment>
     <comment xml:lang="az">HDF sənədi</comment>
-    <comment xml:lang="be@latin">Dakument HDF</comment>
+    <comment xml:lang="be-Latn">Dakument HDF</comment>
     <comment xml:lang="bg">Документ — HDF</comment>
     <comment xml:lang="ca">document HDF</comment>
     <comment xml:lang="cs">dokument HDF</comment>
@@ -12756,13 +13273,14 @@
     <comment xml:lang="da">HDF-dokument</comment>
     <comment xml:lang="de">HDF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο HDF</comment>
-    <comment xml:lang="en_GB">HDF document</comment>
+    <comment xml:lang="en-GB">HDF document</comment>
     <comment xml:lang="eo">HDF-dokumento</comment>
     <comment xml:lang="es">documento HDF</comment>
     <comment xml:lang="eu">HDF dokumentua</comment>
     <comment xml:lang="fi">HDF-asiakirja</comment>
     <comment xml:lang="fo">HDF skjal</comment>
     <comment xml:lang="fr">document HDF</comment>
+    <comment xml:lang="fur">document HDF</comment>
     <comment xml:lang="ga">cáipéis HDF</comment>
     <comment xml:lang="gl">documento HDF</comment>
     <comment xml:lang="he">מסמך HDF</comment>
@@ -12783,7 +13301,7 @@
     <comment xml:lang="oc">document HDF</comment>
     <comment xml:lang="pl">Dokument HDF</comment>
     <comment xml:lang="pt">documento HDF</comment>
-    <comment xml:lang="pt_BR">Documento HDF</comment>
+    <comment xml:lang="pt-BR">Documento HDF</comment>
     <comment xml:lang="ro">Document HDF</comment>
     <comment xml:lang="ru">Документ HDF</comment>
     <comment xml:lang="sk">Dokument HDF</comment>
@@ -12794,14 +13312,14 @@
     <comment xml:lang="tr">HDF belgesi</comment>
     <comment xml:lang="uk">документ HDF</comment>
     <comment xml:lang="vi">Tài liệu HDF</comment>
-    <comment xml:lang="zh_CN">HDF 文档</comment>
-    <comment xml:lang="zh_TW">HDF 文件</comment>
+    <comment xml:lang="zh-CN">HDF 文档</comment>
+    <comment xml:lang="zh-TW">HDF 文件</comment>
     <acronym>HDF</acronym>
     <expanded-acronym>Hierarchical Data Format</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="\211HDF\r\n\032\n" type="string" offset="0"/>
-      <match value="\016\003\023\001" type="string" offset="0"/>
+      <match type="string" offset="0" value="\211HDF\r\n\032\n"/>
+      <match type="string" offset="0" value="\016\003\023\001"/>
     </magic>
     <glob pattern="*.hdf"/>
     <glob pattern="*.hdf4"/>
@@ -12811,16 +13329,19 @@
   </mime-type>
   <mime-type type="application/x-iff">
     <comment>IFF file</comment>
+    <comment xml:lang="af">IFF-lêer</comment>
+    <comment xml:lang="bg">Пакет — IFF</comment>
     <comment xml:lang="ca">fitxer IFF</comment>
     <comment xml:lang="cs">soubor IFF</comment>
     <comment xml:lang="da">IFF-fil</comment>
     <comment xml:lang="de">IFF-Datei</comment>
     <comment xml:lang="el">Αρχείο IFF</comment>
-    <comment xml:lang="en_GB">IFF file</comment>
+    <comment xml:lang="en-GB">IFF file</comment>
     <comment xml:lang="es">archivo IFF</comment>
     <comment xml:lang="eu">IFF fitxtegia</comment>
     <comment xml:lang="fi">IFF-tiedosto</comment>
     <comment xml:lang="fr">fichier IFF</comment>
+    <comment xml:lang="fur">file IFF</comment>
     <comment xml:lang="ga">comhad IFF</comment>
     <comment xml:lang="gl">Ficheiro IFF</comment>
     <comment xml:lang="he">קובץ IFF</comment>
@@ -12836,7 +13357,7 @@
     <comment xml:lang="oc">fichièr IFF</comment>
     <comment xml:lang="pl">Plik IFF</comment>
     <comment xml:lang="pt">ficheiro IFF</comment>
-    <comment xml:lang="pt_BR">Arquivo IFF</comment>
+    <comment xml:lang="pt-BR">Arquivo IFF</comment>
     <comment xml:lang="ru">Файл IFF</comment>
     <comment xml:lang="sk">Súbor IFF</comment>
     <comment xml:lang="sl">Datoteka IFF</comment>
@@ -12844,31 +13365,32 @@
     <comment xml:lang="sv">IFF-fil</comment>
     <comment xml:lang="tr">IFF dosyası</comment>
     <comment xml:lang="uk">файл IFF</comment>
-    <comment xml:lang="zh_CN">IFF 文件</comment>
-    <comment xml:lang="zh_TW">IFF 檔案</comment>
+    <comment xml:lang="zh-CN">IFF 文件</comment>
+    <comment xml:lang="zh-TW">IFF 檔案</comment>
     <acronym>IFF</acronym>
     <expanded-acronym>Interchange File Format</expanded-acronym>
     <magic priority="40">
-      <match value="FORM" type="string" offset="0"/>
+      <match type="string" value="FORM" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-ipod-firmware">
     <comment>iPod firmware</comment>
     <comment xml:lang="ar">برنامج عتاد الـiPod</comment>
-    <comment xml:lang="be@latin">Firmware iPod</comment>
-    <comment xml:lang="bg">Фърмуер за iPod</comment>
+    <comment xml:lang="be-Latn">Firmware iPod</comment>
+    <comment xml:lang="bg">Фърмуер — iPod</comment>
     <comment xml:lang="ca">microprogramari d'iPod</comment>
     <comment xml:lang="cs">firmware iPod</comment>
     <comment xml:lang="da">iPod-styreprogram</comment>
     <comment xml:lang="de">iPod-Firmware</comment>
     <comment xml:lang="el">Υλικολογισμικό iPod</comment>
-    <comment xml:lang="en_GB">iPod firmware</comment>
+    <comment xml:lang="en-GB">iPod firmware</comment>
     <comment xml:lang="eo">iPod-mikroprogramaro</comment>
     <comment xml:lang="es">firmware de iPod</comment>
     <comment xml:lang="eu">iPod firmwarea</comment>
     <comment xml:lang="fi">iPod-laiteohjelmisto</comment>
     <comment xml:lang="fo">iPod fastbúnaður</comment>
     <comment xml:lang="fr">firmware iPod</comment>
+    <comment xml:lang="fur">firmware iPod</comment>
     <comment xml:lang="ga">dochtearraí iPod</comment>
     <comment xml:lang="gl">firmware de iPod</comment>
     <comment xml:lang="he">קושחת ipod</comment>
@@ -12889,7 +13411,7 @@
     <comment xml:lang="oc">firmware iPod</comment>
     <comment xml:lang="pl">Oprogramowanie wewnętrzne iPod</comment>
     <comment xml:lang="pt">firmware iPod</comment>
-    <comment xml:lang="pt_BR">Firmware do iPod</comment>
+    <comment xml:lang="pt-BR">Firmware do iPod</comment>
     <comment xml:lang="ro">Firmware iPod</comment>
     <comment xml:lang="ru">Микропрограмма iPod</comment>
     <comment xml:lang="sk">Firmware iPod</comment>
@@ -12897,32 +13419,34 @@
     <comment xml:lang="sq">Firmware iPod</comment>
     <comment xml:lang="sr">ајПод-ов уграђени</comment>
     <comment xml:lang="sv">fast iPod-program</comment>
-    <comment xml:lang="tr">iPod üretici yazılımı</comment>
+    <comment xml:lang="tr">iPod donanım yazılımı</comment>
     <comment xml:lang="uk">мікропрограма iPod</comment>
     <comment xml:lang="vi">phần vững iPod</comment>
-    <comment xml:lang="zh_CN">iPod 固件</comment>
-    <comment xml:lang="zh_TW">iPod 韌體</comment>
+    <comment xml:lang="zh-CN">iPod 固件</comment>
+    <comment xml:lang="zh-TW">iPod 韌體</comment>
     <magic priority="50">
-      <match value="S T O P" type="string" offset="0"/>
+      <match type="string" value="S T O P" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-java-archive">
     <comment>Java archive</comment>
+    <comment xml:lang="af">Java-argief</comment>
     <comment xml:lang="ar">أرشيف Java</comment>
-    <comment xml:lang="be@latin">Archiŭ Java</comment>
+    <comment xml:lang="be-Latn">Archiŭ Java</comment>
     <comment xml:lang="bg">Архив — Java</comment>
     <comment xml:lang="ca">arxiu de Java</comment>
     <comment xml:lang="cs">archiv Java</comment>
-    <comment xml:lang="da">Javaarkiv</comment>
+    <comment xml:lang="da">Java-arkiv</comment>
     <comment xml:lang="de">Java-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Java</comment>
-    <comment xml:lang="en_GB">Java archive</comment>
+    <comment xml:lang="en-GB">Java archive</comment>
     <comment xml:lang="eo">Java-arkivo</comment>
     <comment xml:lang="es">archivador Java</comment>
     <comment xml:lang="eu">Java artxiboa</comment>
     <comment xml:lang="fi">Java-arkisto</comment>
     <comment xml:lang="fo">Java skjalasavn</comment>
     <comment xml:lang="fr">archive Java</comment>
+    <comment xml:lang="fur">archivi Java</comment>
     <comment xml:lang="ga">cartlann Java</comment>
     <comment xml:lang="gl">arquivo Java</comment>
     <comment xml:lang="he">ארכיון Java</comment>
@@ -12943,7 +13467,7 @@
     <comment xml:lang="oc">archiu Java</comment>
     <comment xml:lang="pl">Archiwum Java</comment>
     <comment xml:lang="pt">arquivo Java</comment>
-    <comment xml:lang="pt_BR">Pacote Java</comment>
+    <comment xml:lang="pt-BR">Pacote Java</comment>
     <comment xml:lang="ro">Arhivă Java</comment>
     <comment xml:lang="ru">Архив Java</comment>
     <comment xml:lang="sk">Archív Java</comment>
@@ -12954,8 +13478,8 @@
     <comment xml:lang="tr">Java arşivi</comment>
     <comment xml:lang="uk">архів Java</comment>
     <comment xml:lang="vi">Kho nén Java</comment>
-    <comment xml:lang="zh_CN">Java 归档文件</comment>
-    <comment xml:lang="zh_TW">Java 封存檔</comment>
+    <comment xml:lang="zh-CN">Java 归档文件</comment>
+    <comment xml:lang="zh-TW">Java 封存檔</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="package-x-generic"/>
     <alias type="application/x-jar"/>
@@ -12964,21 +13488,23 @@
   </mime-type>
   <mime-type type="application/x-java">
     <comment>Java class</comment>
+    <comment xml:lang="af">Java-klas</comment>
     <comment xml:lang="ar">صنف java</comment>
-    <comment xml:lang="be@latin">Klasa Java</comment>
-    <comment xml:lang="bg">Клас на Java</comment>
+    <comment xml:lang="be-Latn">Klasa Java</comment>
+    <comment xml:lang="bg">Клас — Java</comment>
     <comment xml:lang="ca">classe de Java</comment>
     <comment xml:lang="cs">třída Java</comment>
-    <comment xml:lang="da">Javaklasse</comment>
+    <comment xml:lang="da">Java-klasse</comment>
     <comment xml:lang="de">Java-Klasse</comment>
     <comment xml:lang="el">Κλάση Java</comment>
-    <comment xml:lang="en_GB">Java class</comment>
+    <comment xml:lang="en-GB">Java class</comment>
     <comment xml:lang="eo">Java-klaso</comment>
     <comment xml:lang="es">clase de Java</comment>
     <comment xml:lang="eu">Java-ko klasea</comment>
     <comment xml:lang="fi">Java-luokka</comment>
     <comment xml:lang="fo">Java flokkur</comment>
     <comment xml:lang="fr">classe Java</comment>
+    <comment xml:lang="fur">classe Java</comment>
     <comment xml:lang="ga">aicme Java</comment>
     <comment xml:lang="gl">clase de Java</comment>
     <comment xml:lang="he">מחלקת Java</comment>
@@ -12999,7 +13525,7 @@
     <comment xml:lang="oc">classa Java</comment>
     <comment xml:lang="pl">Klasa Java</comment>
     <comment xml:lang="pt">classe Java</comment>
-    <comment xml:lang="pt_BR">Classe Java</comment>
+    <comment xml:lang="pt-BR">Classe Java</comment>
     <comment xml:lang="ro">Clasă Java</comment>
     <comment xml:lang="ru">Класс Java</comment>
     <comment xml:lang="sk">Trieda Java</comment>
@@ -13010,10 +13536,10 @@
     <comment xml:lang="tr">Java sınıfı</comment>
     <comment xml:lang="uk">клас Java</comment>
     <comment xml:lang="vi">Hạng Java</comment>
-    <comment xml:lang="zh_CN">Java 类</comment>
-    <comment xml:lang="zh_TW">Java class</comment>
+    <comment xml:lang="zh-CN">Java 类</comment>
+    <comment xml:lang="zh-TW">Java class</comment>
     <magic priority="50">
-      <match value="0xcafebabe" type="big32" offset="0"/>
+      <match type="big32" value="0xcafebabe" offset="0"/>
     </magic>
     <alias type="application/java"/>
     <alias type="application/java-byte-code"/>
@@ -13022,23 +13548,90 @@
     <alias type="application/x-java-vm"/>
     <glob pattern="*.class"/>
   </mime-type>
+  <mime-type type="text/x-groovy">
+    <comment>Groovy source code</comment>
+    <comment xml:lang="bg">Изходен код — Groovy</comment>
+    <comment xml:lang="ca">codi font en Groovy</comment>
+    <comment xml:lang="da">Groovy-kildekode</comment>
+    <comment xml:lang="de">Groovy-Quelltext</comment>
+    <comment xml:lang="en-GB">Groovy source code</comment>
+    <comment xml:lang="es">código fuente en Groovy</comment>
+    <comment xml:lang="eu">Groovy iturburu-kodea</comment>
+    <comment xml:lang="fi">Groovy-lähdekoodi</comment>
+    <comment xml:lang="fr">code source Groovy</comment>
+    <comment xml:lang="hr">Groovy izvorni kôd</comment>
+    <comment xml:lang="hu">Groovy forráskód</comment>
+    <comment xml:lang="id">Kode sumber Groovy</comment>
+    <comment xml:lang="it">Codice sorgente Groovy</comment>
+    <comment xml:lang="kk">Groovy бастапқы коды</comment>
+    <comment xml:lang="ko">그루비 소스 코드</comment>
+    <comment xml:lang="pl">Kod źródłowy Groovy</comment>
+    <comment xml:lang="pt-BR">Código-fonte Groovy</comment>
+    <comment xml:lang="ru">Исходный код Groovy</comment>
+    <comment xml:lang="sv">Groovy-källkod</comment>
+    <comment xml:lang="tr">Groovy kaynak kodu</comment>
+    <comment xml:lang="uk">вихідний код мовою Groovy</comment>
+    <comment xml:lang="zh-CN">Groovy 源代码</comment>
+    <comment xml:lang="zh-TW">Groovy 原始碼</comment>
+    <sub-class-of type="text/x-csrc"/>
+    <generic-icon name="text-x-script"/>
+    <glob pattern="*.groovy"/>
+    <glob pattern="*.gvy"/>
+    <glob pattern="*.gy"/>
+    <glob pattern="*.gsh"/>
+  </mime-type>
+  <mime-type type="text/x-gradle">
+    <comment>Gradle scripts</comment>
+    <comment xml:lang="af">Gradle-skrippe</comment>
+    <comment xml:lang="bg">Скрипт — Gradle</comment>
+    <comment xml:lang="ca">scripts Gradle</comment>
+    <comment xml:lang="cs">skript Gradle</comment>
+    <comment xml:lang="da">Gradle-programmer</comment>
+    <comment xml:lang="de">Gradle-Skripte</comment>
+    <comment xml:lang="en-GB">Gradle scripts</comment>
+    <comment xml:lang="es">secuencias de órdenes de Gradle</comment>
+    <comment xml:lang="eu">Gradle script-ak</comment>
+    <comment xml:lang="fi">Gradle scriptit</comment>
+    <comment xml:lang="fr">scripts Gradle</comment>
+    <comment xml:lang="fur">script Gradle</comment>
+    <comment xml:lang="ga">scripteanna Gradle</comment>
+    <comment xml:lang="hr">Gradle skripta</comment>
+    <comment xml:lang="hu">Gradle-parancsfájl</comment>
+    <comment xml:lang="id">Skrip Gradle</comment>
+    <comment xml:lang="it">Script Gradle</comment>
+    <comment xml:lang="kk">Gradle сценарийлері</comment>
+    <comment xml:lang="ko">Gradle 스크립트</comment>
+    <comment xml:lang="pl">Skrypty Gradle</comment>
+    <comment xml:lang="pt-BR">Scripts Gradle</comment>
+    <comment xml:lang="ru">Скрипты Gradle</comment>
+    <comment xml:lang="sk">Skripty Gradle</comment>
+    <comment xml:lang="sv">Gradle-skript</comment>
+    <comment xml:lang="tr">Gradle betikleri</comment>
+    <comment xml:lang="uk">скрипти Gradle</comment>
+    <comment xml:lang="zh-CN">Gradle 脚本</comment>
+    <comment xml:lang="zh-TW">Gradle 指令稿</comment>
+    <sub-class-of type="text/x-groovy"/>
+    <glob pattern="*.gradle"/>
+  </mime-type>
   <mime-type type="application/x-java-jnlp-file">
     <comment>JNLP file</comment>
+    <comment xml:lang="af">JNLP-lêer</comment>
     <comment xml:lang="ar">ملف JNLP</comment>
-    <comment xml:lang="be@latin">Fajł JNLP</comment>
-    <comment xml:lang="bg">Файл — JNLP</comment>
+    <comment xml:lang="be-Latn">Fajł JNLP</comment>
+    <comment xml:lang="bg">Стартер — JNLP</comment>
     <comment xml:lang="ca">fitxer JNLP</comment>
     <comment xml:lang="cs">soubor JNLP</comment>
     <comment xml:lang="da">JNPL-fil</comment>
     <comment xml:lang="de">JNLP-Datei</comment>
     <comment xml:lang="el">Αρχείο JNLP</comment>
-    <comment xml:lang="en_GB">JNLP file</comment>
+    <comment xml:lang="en-GB">JNLP file</comment>
     <comment xml:lang="eo">JNLP-dosiero</comment>
     <comment xml:lang="es">archivo JNPL</comment>
     <comment xml:lang="eu">JNLP fitxategia</comment>
     <comment xml:lang="fi">JNLP-tiedosto</comment>
     <comment xml:lang="fo">JNLP fíla</comment>
     <comment xml:lang="fr">fichier JNLP</comment>
+    <comment xml:lang="fur">file JNLP</comment>
     <comment xml:lang="ga">comhad JNLP</comment>
     <comment xml:lang="gl">ficheiro JNLP</comment>
     <comment xml:lang="he">קובץ JNLP</comment>
@@ -13058,7 +13651,7 @@
     <comment xml:lang="oc">fichièr JNLP</comment>
     <comment xml:lang="pl">Plik JNLP</comment>
     <comment xml:lang="pt">ficheiro JNLP</comment>
-    <comment xml:lang="pt_BR">Arquivo JNLP</comment>
+    <comment xml:lang="pt-BR">Arquivo JNLP</comment>
     <comment xml:lang="ro">Fișier JNLP</comment>
     <comment xml:lang="ru">Файл JNLP</comment>
     <comment xml:lang="sk">Súbor JNLP</comment>
@@ -13069,15 +13662,15 @@
     <comment xml:lang="tr">JNLP dosyası</comment>
     <comment xml:lang="uk">файл JNLP</comment>
     <comment xml:lang="vi">Tập tin JNLP</comment>
-    <comment xml:lang="zh_CN">JNLP 文件</comment>
-    <comment xml:lang="zh_TW">JNLP 檔案</comment>
+    <comment xml:lang="zh-CN">JNLP 文件</comment>
+    <comment xml:lang="zh-TW">JNLP 檔案</comment>
     <acronym>JNLP</acronym>
     <expanded-acronym>Java Network Launching Protocol</expanded-acronym>
     <sub-class-of type="application/xml"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.jnlp"/>
     <magic priority="50">
-      <match value="&lt;jnlp" type="string" offset="0:256"/>
+      <match type="string" value="&lt;jnlp" offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-java-keystore">
@@ -13086,15 +13679,16 @@
     <comment xml:lang="bg">Ключодържател — Java</comment>
     <comment xml:lang="ca">magatzem de claus de Java</comment>
     <comment xml:lang="cs">úložiště klíčů Java</comment>
-    <comment xml:lang="da">Javanøglelager</comment>
+    <comment xml:lang="da">Java-nøglelager</comment>
     <comment xml:lang="de">Java-Schlüsselbund</comment>
     <comment xml:lang="el">Χώρος αποθήκευσης κλειδιών Java</comment>
-    <comment xml:lang="en_GB">Java keystore</comment>
+    <comment xml:lang="en-GB">Java keystore</comment>
     <comment xml:lang="es">almacén de claves de Java</comment>
     <comment xml:lang="eu">Java-ren gako-biltegia</comment>
     <comment xml:lang="fi">Java-avainvarasto</comment>
     <comment xml:lang="fo">Java lyklagoymsla</comment>
     <comment xml:lang="fr">stockage de clés Java</comment>
+    <comment xml:lang="fur">archivi di clâfs Java</comment>
     <comment xml:lang="ga">eochairstór Java</comment>
     <comment xml:lang="gl">almacén de chaves de Java</comment>
     <comment xml:lang="he">אחסון מפתחות של Java</comment>
@@ -13112,19 +13706,19 @@
     <comment xml:lang="oc">emmagazinatge de claus Java</comment>
     <comment xml:lang="pl">Baza kluczy Java</comment>
     <comment xml:lang="pt">armazém de chaves Java</comment>
-    <comment xml:lang="pt_BR">Keystore de Java</comment>
+    <comment xml:lang="pt-BR">Keystore de Java</comment>
     <comment xml:lang="ro">Stocare chei Java</comment>
     <comment xml:lang="ru">Хранилище ключей Java</comment>
     <comment xml:lang="sk">Úložisko kľúčov Java</comment>
     <comment xml:lang="sl">Datoteka tipkovne razporeditve Java</comment>
     <comment xml:lang="sr">смештај кључа Јаве</comment>
     <comment xml:lang="sv">Java-nyckellager</comment>
-    <comment xml:lang="tr">Java deposu</comment>
+    <comment xml:lang="tr">Java anahtar deposu</comment>
     <comment xml:lang="uk">сховище ключів Java</comment>
-    <comment xml:lang="zh_CN">Java 密钥库</comment>
-    <comment xml:lang="zh_TW">Java 金鑰儲存</comment>
+    <comment xml:lang="zh-CN">Java 密钥库</comment>
+    <comment xml:lang="zh-TW">Java 金鑰儲存</comment>
     <magic priority="50">
-      <match value="0xfeedfeed" type="big32" offset="0"/>
+      <match type="big32" value="0xfeedfeed" offset="0"/>
     </magic>
     <glob pattern="*.jks"/>
     <glob pattern="*.ks"/>
@@ -13139,12 +13733,13 @@
     <comment xml:lang="da">Java JCE-nøglelager</comment>
     <comment xml:lang="de">Java JCE-Schlüsselbund</comment>
     <comment xml:lang="el">Αποθήκη κλειδιών Java JCE</comment>
-    <comment xml:lang="en_GB">Java JCE keystore</comment>
+    <comment xml:lang="en-GB">Java JCE keystore</comment>
     <comment xml:lang="es">almacén de claves JCE de Java</comment>
     <comment xml:lang="eu">Java JCE-ren gako-biltegia</comment>
     <comment xml:lang="fi">Java JCE -avainvarasto</comment>
     <comment xml:lang="fo">Java JCE lyklagoymsla</comment>
     <comment xml:lang="fr">stockage de clés Java JCE</comment>
+    <comment xml:lang="fur">archivi di clâfs JCE Java</comment>
     <comment xml:lang="ga">eochairstór Java JCE</comment>
     <comment xml:lang="gl">almacén de chves JCE de Java</comment>
     <comment xml:lang="he">אחסון מפתחות של Java JCE</comment>
@@ -13162,40 +13757,41 @@
     <comment xml:lang="oc">emmagazinatge de claus Java JCE</comment>
     <comment xml:lang="pl">Baza kluczy Java JCE</comment>
     <comment xml:lang="pt">armazém de chaves JavaJCE</comment>
-    <comment xml:lang="pt_BR">Keystore JCE do Java</comment>
+    <comment xml:lang="pt-BR">Keystore JCE do Java</comment>
     <comment xml:lang="ro">Stocare chei Java JCE</comment>
     <comment xml:lang="ru">Хранилище ключей Java JCE</comment>
     <comment xml:lang="sk">Úložisko kľúčov Java JCE</comment>
     <comment xml:lang="sl">Datoteka tipkovne razporeditve Java JCE</comment>
     <comment xml:lang="sr">смештај ЈЦЕ кључа Јаве</comment>
     <comment xml:lang="sv">Java JCE-nyckellager</comment>
-    <comment xml:lang="tr">Java JCE deposu</comment>
+    <comment xml:lang="tr">Java JCE anahtar deposu</comment>
     <comment xml:lang="uk">сховище ключів JCE Java</comment>
-    <comment xml:lang="zh_CN">Java JCE 密钥库</comment>
-    <comment xml:lang="zh_TW">Java JCE 金鑰儲存</comment>
+    <comment xml:lang="zh-CN">Java JCE 密钥库</comment>
+    <comment xml:lang="zh-TW">Java JCE 金鑰儲存</comment>
     <acronym>JCE</acronym>
     <expanded-acronym>Java Cryptography Extension</expanded-acronym>
     <magic priority="50">
-      <match value="0xcececece" type="host32" offset="0"/>
+      <match type="host32" value="0xcececece" offset="0"/>
     </magic>
     <glob pattern="*.jceks"/>
   </mime-type>
   <mime-type type="application/x-java-pack200">
     <comment>Pack200 Java archive</comment>
     <comment xml:lang="ar">أرشيف Pack200 Java</comment>
-    <comment xml:lang="be@latin">Archiŭ Pack200 Java</comment>
+    <comment xml:lang="be-Latn">Archiŭ Pack200 Java</comment>
     <comment xml:lang="bg">Архив — Java Pack200</comment>
     <comment xml:lang="ca">arxiu de Java en Pack200</comment>
     <comment xml:lang="cs">archiv Java Pack200</comment>
     <comment xml:lang="da">Pack200 Java-arkiv</comment>
     <comment xml:lang="de">Pack200-Java-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Java Pack200</comment>
-    <comment xml:lang="en_GB">Pack200 Java archive</comment>
+    <comment xml:lang="en-GB">Pack200 Java archive</comment>
     <comment xml:lang="es">archivador Pack200 Java</comment>
     <comment xml:lang="eu">Pack2000 Java artxiboa</comment>
     <comment xml:lang="fi">Pack200-Java-arkisto</comment>
     <comment xml:lang="fo">Pack200 Java skjalasavn</comment>
     <comment xml:lang="fr">archive Java Pack200</comment>
+    <comment xml:lang="fur">archivi Java Pack200</comment>
     <comment xml:lang="ga">cartlann Java Pack200</comment>
     <comment xml:lang="gl">arquivo Pack200 Java</comment>
     <comment xml:lang="he">ארכיון מסוג Pack200 Java</comment>
@@ -13215,7 +13811,7 @@
     <comment xml:lang="oc">archiu Java Pack200</comment>
     <comment xml:lang="pl">Archiwum Java Pack200</comment>
     <comment xml:lang="pt">arquivo Java Pack200</comment>
-    <comment xml:lang="pt_BR">Pacote Java Pack200</comment>
+    <comment xml:lang="pt-BR">Pacote Java Pack200</comment>
     <comment xml:lang="ro">Arhivă Java Pack2000</comment>
     <comment xml:lang="ru">Архив Java Pack200</comment>
     <comment xml:lang="sk">Archív Java Pack200</comment>
@@ -13226,31 +13822,33 @@
     <comment xml:lang="tr">Pack200 Java arşivi</comment>
     <comment xml:lang="uk">архів Java Pack200</comment>
     <comment xml:lang="vi">Kho nén Java Pack200</comment>
-    <comment xml:lang="zh_CN">Pack200 Java 归档文件</comment>
-    <comment xml:lang="zh_TW">Pack200 Java 封存檔</comment>
+    <comment xml:lang="zh-CN">Pack200 Java 归档文件</comment>
+    <comment xml:lang="zh-TW">Pack200 Java 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="0xcafed00d" type="big32" offset="0"/>
+      <match type="big32" value="0xcafed00d" offset="0"/>
     </magic>
     <glob pattern="*.pack"/>
   </mime-type>
   <mime-type type="application/javascript">
     <comment>JavaScript program</comment>
+    <comment xml:lang="af">JavaScript-program</comment>
     <comment xml:lang="ar">برنامج جافاسكربت</comment>
-    <comment xml:lang="be@latin">Prahrama JavaScript</comment>
+    <comment xml:lang="be-Latn">Prahrama JavaScript</comment>
     <comment xml:lang="bg">Програма на JavaScript</comment>
     <comment xml:lang="ca">programa JavaScript</comment>
     <comment xml:lang="cs">program v JavaScriptu</comment>
     <comment xml:lang="da">JavaScript-program</comment>
     <comment xml:lang="de">JavaScript-Programm</comment>
     <comment xml:lang="el">Πρόγραμμα JavaScript</comment>
-    <comment xml:lang="en_GB">JavaScript program</comment>
+    <comment xml:lang="en-GB">JavaScript program</comment>
     <comment xml:lang="eo">JavaScript-programo</comment>
     <comment xml:lang="es">programa en JavaScript</comment>
     <comment xml:lang="eu">JavaScript programa</comment>
     <comment xml:lang="fi">JavaScript-ohjelma</comment>
     <comment xml:lang="fo">JavaScript forrit</comment>
     <comment xml:lang="fr">programme JavaScript</comment>
+    <comment xml:lang="fur">program JavaScript</comment>
     <comment xml:lang="ga">ríomhchlár JavaScript</comment>
     <comment xml:lang="gl">programa JavaScript</comment>
     <comment xml:lang="he">תכנית JavaScript</comment>
@@ -13271,7 +13869,7 @@
     <comment xml:lang="oc">programa JavaEscript</comment>
     <comment xml:lang="pl">Pogram JavaScript</comment>
     <comment xml:lang="pt">programa JavaScript</comment>
-    <comment xml:lang="pt_BR">Programa JavaScript</comment>
+    <comment xml:lang="pt-BR">Programa JavaScript</comment>
     <comment xml:lang="ro">Program JavaScript</comment>
     <comment xml:lang="ru">Программа JavaScript</comment>
     <comment xml:lang="sk">Program jazyka JavaScript</comment>
@@ -13282,23 +13880,23 @@
     <comment xml:lang="tr">JavaScript programı</comment>
     <comment xml:lang="uk">програма мовою JavaScript</comment>
     <comment xml:lang="vi">Chương trình JavaScript</comment>
-    <comment xml:lang="zh_CN">JavaScript 程序</comment>
-    <comment xml:lang="zh_TW">JavaScript 程式</comment>
+    <comment xml:lang="zh-CN">JavaScript 程序</comment>
+    <comment xml:lang="zh-TW">JavaScript 程式</comment>
     <alias type="application/x-javascript"/>
     <alias type="text/javascript"/>
     <sub-class-of type="application/ecmascript"/>
     <generic-icon name="text-x-script"/>
     <magic priority="50">
-      <match value="#!/bin/gjs" type="string" offset="0"/>
-      <match value="#! /bin/gjs" type="string" offset="0"/>
-      <match value='eval \"exec /bin/gjs' type="string" offset="0"/>
-      <match value="#!/usr/bin/gjs" type="string" offset="0"/>
-      <match value="#! /usr/bin/gjs" type="string" offset="0"/>
-      <match value='eval \"exec /usr/bin/gjs' type="string" offset="0"/>
-      <match value="#!/usr/local/bin/gjs" type="string" offset="0"/>
-      <match value="#! /usr/local/bin/gjs" type="string" offset="0"/>
-      <match value='eval \"exec /usr/local/bin/gjs' type="string" offset="0"/>
-      <match value='/bin/env gjs' type="string" offset="2:16"/>
+      <match type="string" value="#!/bin/gjs" offset="0"/>
+      <match type="string" value="#! /bin/gjs" offset="0"/>
+      <match type="string" value="eval \&quot;exec /bin/gjs" offset="0"/>
+      <match type="string" value="#!/usr/bin/gjs" offset="0"/>
+      <match type="string" value="#! /usr/bin/gjs" offset="0"/>
+      <match type="string" value="eval \&quot;exec /usr/bin/gjs" offset="0"/>
+      <match type="string" value="#!/usr/local/bin/gjs" offset="0"/>
+      <match type="string" value="#! /usr/local/bin/gjs" offset="0"/>
+      <match type="string" value="eval \&quot;exec /usr/local/bin/gjs" offset="0"/>
+      <match type="string" value="/bin/env gjs" offset="2:16"/>
     </magic>
     <glob pattern="*.js"/>
     <glob pattern="*.jsm"/>
@@ -13306,17 +13904,20 @@
   </mime-type>
   <mime-type type="application/json">
     <comment>JSON document</comment>
+    <comment xml:lang="af">JSON-dokument</comment>
     <comment xml:lang="ast">Documentu JSON</comment>
+    <comment xml:lang="bg">Документ — JSON</comment>
     <comment xml:lang="ca">document JSON</comment>
     <comment xml:lang="cs">dokument JSON</comment>
     <comment xml:lang="da">JSON-dokument</comment>
     <comment xml:lang="de">JSON-Dokument</comment>
     <comment xml:lang="el">Έγγραφο JSON</comment>
-    <comment xml:lang="en_GB">JSON document</comment>
+    <comment xml:lang="en-GB">JSON document</comment>
     <comment xml:lang="es">documento JSON</comment>
     <comment xml:lang="eu">JSON dokumentua</comment>
     <comment xml:lang="fi">JSON-asiakirja</comment>
     <comment xml:lang="fr">document JSON</comment>
+    <comment xml:lang="fur">document JSON</comment>
     <comment xml:lang="ga">cáipéis JSON</comment>
     <comment xml:lang="gl">Documento JSON</comment>
     <comment xml:lang="he">מסמך JSON</comment>
@@ -13330,7 +13931,7 @@
     <comment xml:lang="oc">document JSON</comment>
     <comment xml:lang="pl">Dokument JSON</comment>
     <comment xml:lang="pt">documento JSON</comment>
-    <comment xml:lang="pt_BR">Documento JSON</comment>
+    <comment xml:lang="pt-BR">Documento JSON</comment>
     <comment xml:lang="ru">Документ JSON</comment>
     <comment xml:lang="sk">Dokument JSON</comment>
     <comment xml:lang="sl">Dokument JSON</comment>
@@ -13338,8 +13939,8 @@
     <comment xml:lang="sv">JSON-dokument</comment>
     <comment xml:lang="tr">JSON belgesi</comment>
     <comment xml:lang="uk">документ JSON</comment>
-    <comment xml:lang="zh_CN">JSON 文档</comment>
-    <comment xml:lang="zh_TW">JSON 文件</comment>
+    <comment xml:lang="zh-CN">JSON 文档</comment>
+    <comment xml:lang="zh-TW">JSON 文件</comment>
     <acronym>JSON</acronym>
     <expanded-acronym>JavaScript Object Notation</expanded-acronym>
     <sub-class-of type="application/javascript"/>
@@ -13348,17 +13949,20 @@
   </mime-type>
   <mime-type type="application/jrd+json">
     <comment>JRD document</comment>
+    <comment xml:lang="af">JRD-dokument</comment>
     <comment xml:lang="ast">Documentu JRD</comment>
+    <comment xml:lang="bg">Документ — JRD</comment>
     <comment xml:lang="ca">document JRD</comment>
     <comment xml:lang="cs">dokument JRD</comment>
     <comment xml:lang="da">JRD-dokument</comment>
     <comment xml:lang="de">JRD-Dokument</comment>
     <comment xml:lang="el">Έγγραφο JRD</comment>
-    <comment xml:lang="en_GB">JRD document</comment>
+    <comment xml:lang="en-GB">JRD document</comment>
     <comment xml:lang="es">documento JRD</comment>
     <comment xml:lang="eu">JRD dokumentua</comment>
     <comment xml:lang="fi">JRD-asiakirja</comment>
     <comment xml:lang="fr">document JRD</comment>
+    <comment xml:lang="fur">document JRD</comment>
     <comment xml:lang="ga">cáipéis JRD</comment>
     <comment xml:lang="he">מסמך JRD</comment>
     <comment xml:lang="hr">JRD dokument</comment>
@@ -13371,15 +13975,16 @@
     <comment xml:lang="oc">document JRD</comment>
     <comment xml:lang="pl">Dokument JRD</comment>
     <comment xml:lang="pt">doxumento JRD</comment>
-    <comment xml:lang="pt_BR">Documento JRD</comment>
+    <comment xml:lang="pt-BR">Documento JRD</comment>
     <comment xml:lang="ru">Документ JRD</comment>
     <comment xml:lang="sk">Dokument JRD</comment>
+    <comment xml:lang="sl">Dokument JRD</comment>
     <comment xml:lang="sr">ЈРД документ</comment>
     <comment xml:lang="sv">JRD-dokument</comment>
     <comment xml:lang="tr">JRD belgesi</comment>
     <comment xml:lang="uk">документ JRD</comment>
-    <comment xml:lang="zh_CN">JRD 文档</comment>
-    <comment xml:lang="zh_TW">JRD 文件</comment>
+    <comment xml:lang="zh-CN">JRD 文档</comment>
+    <comment xml:lang="zh-TW">JRD 文件</comment>
     <acronym>JRD</acronym>
     <expanded-acronym>JSON Resource Descriptor</expanded-acronym>
     <sub-class-of type="application/json"/>
@@ -13388,14 +13993,17 @@
   </mime-type>
   <mime-type type="application/json-patch+json">
     <comment>JSON patch</comment>
+    <comment xml:lang="bg">Кръпка — JSON</comment>
     <comment xml:lang="ca">pedaç de JSON</comment>
     <comment xml:lang="cs">cesta JSON</comment>
     <comment xml:lang="da">JSON-rettelse</comment>
     <comment xml:lang="de">JSON-Patch</comment>
-    <comment xml:lang="en_GB">JSON patch</comment>
+    <comment xml:lang="en-GB">JSON patch</comment>
     <comment xml:lang="es">parche en JSON</comment>
     <comment xml:lang="eu">JSON adabakia</comment>
+    <comment xml:lang="fi">JSON-paikkatiedosto</comment>
     <comment xml:lang="fr">correctif JSON</comment>
+    <comment xml:lang="fur">blec JSON</comment>
     <comment xml:lang="ga">paiste JSON</comment>
     <comment xml:lang="he">טלאי JSON</comment>
     <comment xml:lang="hr">JSON zakrpa</comment>
@@ -13408,15 +14016,15 @@
     <comment xml:lang="oc">correctiu JSON</comment>
     <comment xml:lang="pl">Łata JSON</comment>
     <comment xml:lang="pt">patch JSON</comment>
-    <comment xml:lang="pt_BR">Patch JSON</comment>
+    <comment xml:lang="pt-BR">Patch JSON</comment>
     <comment xml:lang="ru">Патч JSON</comment>
     <comment xml:lang="sk">Záplata JSON</comment>
     <comment xml:lang="sr">ЈСОН закрпа</comment>
     <comment xml:lang="sv">JSON patch</comment>
     <comment xml:lang="tr">JSON yaması</comment>
     <comment xml:lang="uk">латка JSON</comment>
-    <comment xml:lang="zh_CN">JSON 补丁</comment>
-    <comment xml:lang="zh_TW">JSON 修補檔</comment>
+    <comment xml:lang="zh-CN">JSON 补丁</comment>
+    <comment xml:lang="zh-TW">JSON 修補檔</comment>
     <acronym>JSON</acronym>
     <expanded-acronym>JavaScript Object Notation</expanded-acronym>
     <sub-class-of type="application/json"/>
@@ -13426,16 +14034,18 @@
   <mime-type type="application/ld+json">
     <comment>JSON-LD document</comment>
     <comment xml:lang="ast">Documentu JSON-LD</comment>
+    <comment xml:lang="bg">Документ — JSON-LD</comment>
     <comment xml:lang="ca">document JSON-LD</comment>
     <comment xml:lang="cs">dokument JSON-LD</comment>
     <comment xml:lang="da">JSON-LD-dokument</comment>
     <comment xml:lang="de">JSON-LD-Dokument</comment>
     <comment xml:lang="el">Έγγραφο JSON-LD</comment>
-    <comment xml:lang="en_GB">JSON-LD document</comment>
+    <comment xml:lang="en-GB">JSON-LD document</comment>
     <comment xml:lang="es">documento JSON-LD</comment>
     <comment xml:lang="eu">JSON-LD dokumentua</comment>
     <comment xml:lang="fi">JSON-LD-asiakirja</comment>
     <comment xml:lang="fr">document JSON-LD</comment>
+    <comment xml:lang="fur">document JSON-LD</comment>
     <comment xml:lang="ga">cáipéis JSON-LD</comment>
     <comment xml:lang="he">מסמך JSON-LD</comment>
     <comment xml:lang="hr">JSON-LD dokument</comment>
@@ -13448,15 +14058,16 @@
     <comment xml:lang="oc">Document JSON-LD</comment>
     <comment xml:lang="pl">Dokument JSON-LD</comment>
     <comment xml:lang="pt">documento JSON-LD</comment>
-    <comment xml:lang="pt_BR">Documento JSON-LD</comment>
+    <comment xml:lang="pt-BR">Documento JSON-LD</comment>
     <comment xml:lang="ru">Документ JSON-LD</comment>
     <comment xml:lang="sk">Dokument JSON-LD</comment>
+    <comment xml:lang="sl">Dokument JSON-LD</comment>
     <comment xml:lang="sr">ЈСОН-ЛД документ</comment>
     <comment xml:lang="sv">JSON-LD-dokument</comment>
     <comment xml:lang="tr">JSON-LD belgesi</comment>
     <comment xml:lang="uk">документ JSON-LD</comment>
-    <comment xml:lang="zh_CN">JSON-LD 文档</comment>
-    <comment xml:lang="zh_TW">JSON-LD 文件</comment>
+    <comment xml:lang="zh-CN">JSON-LD 文档</comment>
+    <comment xml:lang="zh-TW">JSON-LD 文件</comment>
     <acronym>JSON-LD</acronym>
     <expanded-acronym>JavaScript Object Notation for Linked Data</expanded-acronym>
     <sub-class-of type="application/json"/>
@@ -13464,55 +14075,55 @@
     <glob pattern="*.jsonld"/>
   </mime-type>
   <mime-type type="application/x-ipynb+json">
-    <comment>Jupyter Notebook</comment>
-    <comment xml:lang="ca">llibreta de notes de Jupyter</comment>
-    <comment xml:lang="cs">sešit Jupyter</comment>
-    <comment xml:lang="da">Jupyter Notebook</comment>
-    <comment xml:lang="de">Jupyter-Dokument</comment>
-    <comment xml:lang="en_GB">Jupyter Notebook</comment>
-    <comment xml:lang="es">libreta de Jupyter</comment>
-    <comment xml:lang="eu">Jupyter Notebook</comment>
+    <comment>Jupyter notebook document</comment>
+    <comment xml:lang="bg">Скицник — Jupyter</comment>
+    <comment xml:lang="ca">document de llibreta de notes de Jupyter</comment>
+    <comment xml:lang="da">Jupyter notebook-dokument</comment>
+    <comment xml:lang="de">Jupyter-Notebook-Dokument</comment>
+    <comment xml:lang="en-GB">Jupyter notebook document</comment>
+    <comment xml:lang="es">documento de cuaderno de Jupyter</comment>
+    <comment xml:lang="eu">Jupyter notebook dokumentua</comment>
+    <comment xml:lang="fi">Jupyter notebook -asiakirja</comment>
     <comment xml:lang="fr">carnet de notes Jupyter</comment>
-    <comment xml:lang="ga">Leabhar nótaí Jupyter</comment>
-    <comment xml:lang="he">מחברת Jupyter</comment>
-    <comment xml:lang="hr">Jupyter bilježnica</comment>
-    <comment xml:lang="hu">Jupyter notesz</comment>
-    <comment xml:lang="id">Notebook Jupyter</comment>
-    <comment xml:lang="it">Notebook Jupyter</comment>
-    <comment xml:lang="kk">Jupyter Notebook</comment>
-    <comment xml:lang="ko">Jupyter 노트북</comment>
-    <comment xml:lang="pl">Notatnik Jupyter</comment>
-    <comment xml:lang="pt_BR">Bloco de Notas Jupyter</comment>
-    <comment xml:lang="ru">Jupyter Notebook</comment>
-    <comment xml:lang="sk">Zošit programu Jupyter</comment>
-    <comment xml:lang="sr">Џупитер бележница</comment>
-    <comment xml:lang="sv">Jupyter Notebook-dokument</comment>
-    <comment xml:lang="tr">Jupyter Notebook</comment>
-    <comment xml:lang="uk">записник Jupyter</comment>
-    <comment xml:lang="zh_CN">Jupyter 笔记本</comment>
-    <comment xml:lang="zh_TW">Jupyter 記事本</comment>
+    <comment xml:lang="hr">Jupyter notebook dokument</comment>
+    <comment xml:lang="hu">Jupyter munkafüzet dokumentum</comment>
+    <comment xml:lang="id">Dokumen Jupyter notebook</comment>
+    <comment xml:lang="it">Documento notebook Jupyter</comment>
+    <comment xml:lang="kk">Jupyter блокнот құжаты</comment>
+    <comment xml:lang="ko">주피터 노트북 문서</comment>
+    <comment xml:lang="pl">Dokument notatnika Jupyter</comment>
+    <comment xml:lang="pt-BR">Documento Jupyter Notebook</comment>
+    <comment xml:lang="ru">Документ Jupyter notebook</comment>
+    <comment xml:lang="sv">Jupyter-anteckningsboksdokument</comment>
+    <comment xml:lang="tr">Jupyter notebook belgesi</comment>
+    <comment xml:lang="uk">документ нотатника Jupyter</comment>
+    <comment xml:lang="zh-CN">Jupyter 笔记本文档</comment>
+    <comment xml:lang="zh-TW">Jupyter 記事本文件</comment>
     <sub-class-of type="application/json"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="{" type="string" offset="0">
-        <match value='"cells":' type="string" offset="1:256"/>
+      <match type="string" value="{" offset="0">
+        <match type="string" value="&quot;cells&quot;:" offset="1:256"/>
       </match>
     </magic>
     <glob pattern="*.ipynb"/>
   </mime-type>
   <mime-type type="application/vnd.coffeescript">
     <comment>CoffeeScript document</comment>
+    <comment xml:lang="af">CoffeeScript-dokument</comment>
     <comment xml:lang="ast">Documentu de CoffeScript</comment>
+    <comment xml:lang="bg">Документ — CoffeeScript</comment>
     <comment xml:lang="ca">document CoffeeScript</comment>
     <comment xml:lang="cs">dokument CoffeeScript</comment>
     <comment xml:lang="da">CoffeeScript-dokument</comment>
     <comment xml:lang="de">CoffeeScript-Dokument</comment>
     <comment xml:lang="el">Έγγραφο CoffeeScript</comment>
-    <comment xml:lang="en_GB">CoffeeScript document</comment>
+    <comment xml:lang="en-GB">CoffeeScript document</comment>
     <comment xml:lang="es">documento en CoffeeScript</comment>
     <comment xml:lang="eu">CoffeeScript dokumentua</comment>
     <comment xml:lang="fi">CoffeeScript-asiakirja</comment>
     <comment xml:lang="fr">document CoffeeScript</comment>
+    <comment xml:lang="fur">document CoffeeScript</comment>
     <comment xml:lang="ga">cáipéis CoffeeScript</comment>
     <comment xml:lang="he">מסמך CoffeeScript</comment>
     <comment xml:lang="hr">CoffeeScript dokument</comment>
@@ -13525,36 +14136,39 @@
     <comment xml:lang="oc">Document CoffeScript</comment>
     <comment xml:lang="pl">Dokument CoffeeScript</comment>
     <comment xml:lang="pt">documento CoffeeScript</comment>
-    <comment xml:lang="pt_BR">Documento CoffeeScript</comment>
+    <comment xml:lang="pt-BR">Documento CoffeeScript</comment>
     <comment xml:lang="ru">Документ CoffeeScript</comment>
     <comment xml:lang="sk">Dokument CoffeeScript</comment>
+    <comment xml:lang="sl">Dokument CoffeeScript</comment>
     <comment xml:lang="sr">Кофи скрипт документ</comment>
     <comment xml:lang="sv">CoffeeScript-dokument</comment>
     <comment xml:lang="tr">CoffeeScript belgesi</comment>
     <comment xml:lang="uk">документ CoffeeScript</comment>
-    <comment xml:lang="zh_CN">CoffeeScript 文档</comment>
-    <comment xml:lang="zh_TW">CoffeeScript 文件</comment>
+    <comment xml:lang="zh-CN">CoffeeScript 文档</comment>
+    <comment xml:lang="zh-TW">CoffeeScript 文件</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.coffee"/>
   </mime-type>
   <mime-type type="application/x-jbuilder-project">
     <comment>JBuilder project</comment>
+    <comment xml:lang="af">JBuilder-projek</comment>
     <comment xml:lang="ar">مشروع JBuilder</comment>
-    <comment xml:lang="be@latin">Prajekt JBuilder</comment>
+    <comment xml:lang="be-Latn">Prajekt JBuilder</comment>
     <comment xml:lang="bg">Проект — JBuilder</comment>
     <comment xml:lang="ca">projecte de JBuilder</comment>
     <comment xml:lang="cs">projekt JBuilder</comment>
     <comment xml:lang="da">JBuilder-projekt</comment>
     <comment xml:lang="de">JBuilder-Projekt</comment>
     <comment xml:lang="el">Εργο JBuilder</comment>
-    <comment xml:lang="en_GB">JBuilder project</comment>
+    <comment xml:lang="en-GB">JBuilder project</comment>
     <comment xml:lang="eo">JBuilder-projekto</comment>
     <comment xml:lang="es">proyecto de JBuilder</comment>
     <comment xml:lang="eu">JBuilder proiektua</comment>
     <comment xml:lang="fi">JBuilder-projekti</comment>
     <comment xml:lang="fo">JBuilder verkætlan</comment>
     <comment xml:lang="fr">projet JBuilder</comment>
+    <comment xml:lang="fur">progjet JBuilder</comment>
     <comment xml:lang="ga">tionscadal JBuilder</comment>
     <comment xml:lang="gl">proxecto de JBuilder</comment>
     <comment xml:lang="he">מיזם JBuilder</comment>
@@ -13575,7 +14189,7 @@
     <comment xml:lang="oc">projècte JBuilder</comment>
     <comment xml:lang="pl">Projekt JBuilder</comment>
     <comment xml:lang="pt">projecto JBuilder</comment>
-    <comment xml:lang="pt_BR">Projeto do JBuilder</comment>
+    <comment xml:lang="pt-BR">Projeto do JBuilder</comment>
     <comment xml:lang="ro">Proiect JBuilder</comment>
     <comment xml:lang="ru">Проект JBuilder</comment>
     <comment xml:lang="sk">Projekt JBuilder</comment>
@@ -13584,31 +14198,33 @@
     <comment xml:lang="sr">пројекат ЈГрадитеља</comment>
     <comment xml:lang="sv">JBuilder-projekt</comment>
     <comment xml:lang="tr">JBuilder projesi</comment>
-    <comment xml:lang="uk">проект JBuilder</comment>
+    <comment xml:lang="uk">проєкт JBuilder</comment>
     <comment xml:lang="vi">Dự án JBuilder</comment>
-    <comment xml:lang="zh_CN">JBuilder 工程</comment>
-    <comment xml:lang="zh_TW">JBuilder 專案</comment>
+    <comment xml:lang="zh-CN">JBuilder 工程</comment>
+    <comment xml:lang="zh-TW">JBuilder 專案</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.jpr"/>
     <glob pattern="*.jpx"/>
   </mime-type>
   <mime-type type="application/x-karbon">
     <comment>Karbon14 drawing</comment>
+    <comment xml:lang="af">Karbon14-tekening</comment>
     <comment xml:lang="ar">تصميم Karbon14</comment>
-    <comment xml:lang="be@latin">Rysunak Karbon14</comment>
+    <comment xml:lang="be-Latn">Rysunak Karbon14</comment>
     <comment xml:lang="bg">Чертеж — Karbon14</comment>
     <comment xml:lang="ca">dibuix de Karbon14</comment>
     <comment xml:lang="cs">kresba Karbon14</comment>
     <comment xml:lang="da">Karbon14-tegning</comment>
     <comment xml:lang="de">Karbon14-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο Karbon14</comment>
-    <comment xml:lang="en_GB">Karbon14 drawing</comment>
+    <comment xml:lang="en-GB">Karbon14 drawing</comment>
     <comment xml:lang="eo">Karbon14-grafikaĵo</comment>
     <comment xml:lang="es">dibujo de Karbon14</comment>
     <comment xml:lang="eu">Karbon14 marrazkia</comment>
     <comment xml:lang="fi">Karbon14-piirros</comment>
     <comment xml:lang="fo">Karbon14 tekning</comment>
     <comment xml:lang="fr">dessin Karbon14</comment>
+    <comment xml:lang="fur">dissen Karbon14</comment>
     <comment xml:lang="ga">líníocht Karbon14</comment>
     <comment xml:lang="gl">debuxo de Karbon14</comment>
     <comment xml:lang="he">ציור Karbon14</comment>
@@ -13629,7 +14245,7 @@
     <comment xml:lang="oc">dessenh Karbon14</comment>
     <comment xml:lang="pl">Rysunek Karbon14</comment>
     <comment xml:lang="pt">desenho Karbon14</comment>
-    <comment xml:lang="pt_BR">Desenho do Karbon14</comment>
+    <comment xml:lang="pt-BR">Desenho do Karbon14</comment>
     <comment xml:lang="ro">Desen Karbon14</comment>
     <comment xml:lang="ru">Рисунок Karbon14</comment>
     <comment xml:lang="sk">Kresba Karbon14</comment>
@@ -13640,18 +14256,18 @@
     <comment xml:lang="tr">Karbon14 çizimi</comment>
     <comment xml:lang="uk">малюнок Karbon14</comment>
     <comment xml:lang="vi">Bản vẽ Karbon14</comment>
-    <comment xml:lang="zh_CN">Karbon14 绘图</comment>
-    <comment xml:lang="zh_TW">Karbon14 繪圖</comment>
+    <comment xml:lang="zh-CN">Karbon14 绘图</comment>
+    <comment xml:lang="zh-TW">Karbon14 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-karbon\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-karbon\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-karbon" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-karbon" offset="38"/>
         </match>
       </match>
     </magic>
@@ -13659,21 +14275,23 @@
   </mime-type>
   <mime-type type="application/x-kchart">
     <comment>KChart chart</comment>
+    <comment xml:lang="af">KChart-grafiek</comment>
     <comment xml:lang="ar">رسم بياني KChart</comment>
-    <comment xml:lang="be@latin">Hrafik KChart</comment>
+    <comment xml:lang="be-Latn">Hrafik KChart</comment>
     <comment xml:lang="bg">Диаграма — KChart</comment>
     <comment xml:lang="ca">diagrama de KChart</comment>
     <comment xml:lang="cs">graf Chart</comment>
     <comment xml:lang="da">KChart-diagram</comment>
     <comment xml:lang="de">KChart-Diagramm</comment>
     <comment xml:lang="el">Γράφημα KChart</comment>
-    <comment xml:lang="en_GB">KChart chart</comment>
+    <comment xml:lang="en-GB">KChart chart</comment>
     <comment xml:lang="eo">KChart-diagramo</comment>
     <comment xml:lang="es">gráfico de KChart</comment>
     <comment xml:lang="eu">KChart diagrama</comment>
     <comment xml:lang="fi">KChart-kaavio</comment>
     <comment xml:lang="fo">KChart strikumynd</comment>
     <comment xml:lang="fr">graphique KChart</comment>
+    <comment xml:lang="fur">grafic KChart</comment>
     <comment xml:lang="ga">cairt KChart</comment>
     <comment xml:lang="gl">gráfica de KChart</comment>
     <comment xml:lang="he">תרשים KChart</comment>
@@ -13694,7 +14312,7 @@
     <comment xml:lang="oc">grafic KChart</comment>
     <comment xml:lang="pl">Wykres KChart</comment>
     <comment xml:lang="pt">gráfico KChart</comment>
-    <comment xml:lang="pt_BR">Gráfico do KChart</comment>
+    <comment xml:lang="pt-BR">Gráfico do KChart</comment>
     <comment xml:lang="ro">Diagramă KChart</comment>
     <comment xml:lang="ru">Диаграмма KChart</comment>
     <comment xml:lang="sk">Graf KChart</comment>
@@ -13705,224 +14323,159 @@
     <comment xml:lang="tr">KChart çizgesi</comment>
     <comment xml:lang="uk">діаграма KChart</comment>
     <comment xml:lang="vi">Sơ đồ KChart</comment>
-    <comment xml:lang="zh_CN">KChart 图表</comment>
-    <comment xml:lang="zh_TW">KChart 圖表</comment>
+    <comment xml:lang="zh-CN">KChart 图表</comment>
+    <comment xml:lang="zh-TW">KChart 圖表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kchart\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kchart\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kchart" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kchart" offset="38"/>
         </match>
       </match>
     </magic>
     <glob pattern="*.chrt"/>
   </mime-type>
   <mime-type type="application/x-kexi-connectiondata">
-    <comment>Kexi settings for database server connection</comment>
-    <comment xml:lang="ar">إعدادات Kexi للإتصال بخادم قاعدة البيانات</comment>
-    <comment xml:lang="bg">Връзка към база от данни — Kexi</comment>
-    <comment xml:lang="ca">ajusts de Kexi per a la connexió al servidor de bases de dades</comment>
-    <comment xml:lang="cs">nastavení Kexi ke spojení s databázovým serverem</comment>
-    <comment xml:lang="da">Kexiopsætning til forbindelsen for databaseserveren</comment>
-    <comment xml:lang="de">Kexi-Einstellungen für Verbindung zum Datenbankserver</comment>
-    <comment xml:lang="el">Ρυθμίσεις Kexi για σύνδεση με εξυπηρετητή βάσεων δεδομένων</comment>
-    <comment xml:lang="en_GB">Kexi settings for database server connection</comment>
-    <comment xml:lang="es">configuración de Kexi para conectar con un servidor de bases de datos</comment>
-    <comment xml:lang="eu">Kexi-ren ezarpenak datu-basearen zerbitzariarekin konektatzeko</comment>
-    <comment xml:lang="fi">Kexi-tietokantayhteysasetukset</comment>
-    <comment xml:lang="fo">Kexi stillingar fyri dátustovnsambætara sambinding</comment>
-    <comment xml:lang="fr">paramètres Kexi pour connexion au serveur de base de données</comment>
-    <comment xml:lang="ga">socruithe Kexi do cheangal le freastalaí bunachair sonraí</comment>
-    <comment xml:lang="gl">configuración de Kexi para conexión con servidor de base de datos </comment>
-    <comment xml:lang="he">הגדרות של Kexi עבור חיבור שרת למסד נתונים</comment>
-    <comment xml:lang="hr">Kexi postavke za povezeivanje baza podataka poslužitelja</comment>
-    <comment xml:lang="hu">Kexi beállítások adatbáziskiszolgáló-kapcsolathoz</comment>
-    <comment xml:lang="ia">Configuration Kexi pro connexion al servitor de base de datos</comment>
-    <comment xml:lang="id">Tatanan Kexi bagi koneksi server basis data</comment>
-    <comment xml:lang="it">Impostazioni Kexi per connessione a server di database</comment>
-    <comment xml:lang="ja">データベースサーバ接続用の Kexi 設定</comment>
-    <comment xml:lang="kk">Дерекқор серверге байланыс Kexi баптаулары</comment>
-    <comment xml:lang="ko">Kexi 데이터베이스 서버 연결 설정</comment>
-    <comment xml:lang="lt">Kexi duomenų bazės ryšio su serveriu parametrai</comment>
-    <comment xml:lang="lv">Kexi iestatījumi datubāzes servera savienojumam</comment>
-    <comment xml:lang="nl">Kexi instellingen voor database server connectie</comment>
-    <comment xml:lang="oc">paramètres Kexi per connexion al servidor de banca de donadas</comment>
-    <comment xml:lang="pl">Ustawienia Kexi dla połączenia serwera bazy danych</comment>
-    <comment xml:lang="pt">definições Kexi para ligação de servidor de base de dados</comment>
-    <comment xml:lang="pt_BR">Configurações do Kexi para conexão a servidor de banco de dados</comment>
-    <comment xml:lang="ro">Configurări Kexi pentru conexiunea la serverul de baze de date</comment>
-    <comment xml:lang="ru">Параметры Kexi для подключения к серверу БД</comment>
-    <comment xml:lang="sk">Nastavenia Kexi pre pripojenie k databázovému serveru</comment>
-    <comment xml:lang="sl">Strežniška povezava do nastavitvene datoteke Kexi.</comment>
-    <comment xml:lang="sr">подешавања Кексија за везу са сервером базе података</comment>
-    <comment xml:lang="sv">Kexi-inställningar för anslutning till databasserver</comment>
-    <comment xml:lang="tr">Veritabanı sunucu bağlantısı için Kexi ayarları</comment>
-    <comment xml:lang="uk">параметри Kexi для встановлення з’єднання з сервером бази даних</comment>
-    <comment xml:lang="zh_CN">Kexi 数据库服务器连接设置</comment>
-    <comment xml:lang="zh_TW">Kexi 設定值 (資料庫伺服器連線用)</comment>
+    <comment>Kexi settings</comment>
+    <comment xml:lang="bg">Настройки — Kexi</comment>
+    <comment xml:lang="ca">ajusts de Kexi</comment>
+    <comment xml:lang="da">Kexi-indstillinger</comment>
+    <comment xml:lang="de">Kexi-Einstellungen</comment>
+    <comment xml:lang="en-GB">Kexi settings</comment>
+    <comment xml:lang="es">configuración de Kexi</comment>
+    <comment xml:lang="eu">Kexi ezarpenak</comment>
+    <comment xml:lang="fi">Kexi-asetukset</comment>
+    <comment xml:lang="fr">réglages Kexi</comment>
+    <comment xml:lang="hr">Kexi postavke</comment>
+    <comment xml:lang="hu">Kexi beállítások</comment>
+    <comment xml:lang="id">Pengaturan Kexi</comment>
+    <comment xml:lang="it">Impostazioni Kexi</comment>
+    <comment xml:lang="kk">Kexi баптаулары</comment>
+    <comment xml:lang="ko">Kexi 설정</comment>
+    <comment xml:lang="pl">Ustawienia Kexi</comment>
+    <comment xml:lang="pt-BR">Configurações do Kexi</comment>
+    <comment xml:lang="ru">Файл настроек Kexi</comment>
+    <comment xml:lang="sk">Nastavenia Kexi</comment>
+    <comment xml:lang="sl">Nastavitve Kexi</comment>
+    <comment xml:lang="sv">Kexi-inställningar</comment>
+    <comment xml:lang="tr">Kexi ayarları</comment>
+    <comment xml:lang="uk">параметри Kexi</comment>
+    <comment xml:lang="zh-CN">Kexi 设置</comment>
+    <comment xml:lang="zh-TW">Kexi 設定</comment>
     <glob pattern="*.kexic"/>
   </mime-type>
   <mime-type type="application/x-kexiproject-shortcut">
-    <comment>shortcut to Kexi project on database server</comment>
-    <comment xml:lang="ar">اختصار لمشروع Kexi على خادم قاعدة بيانات</comment>
-    <comment xml:lang="bg">Връзка към проект — Kexi</comment>
-    <comment xml:lang="ca">drecera al projecte de Kexi en un servidor de base de dades</comment>
-    <comment xml:lang="cs">zástupce projektu Kexi na databázovém serveru</comment>
-    <comment xml:lang="da">genvej til Kexiprojekt på databaseserver</comment>
-    <comment xml:lang="de">Schnellzugriff zum Kexi-Projekt auf dem Datenbankserver</comment>
-    <comment xml:lang="el">Συντόμευση σε έργο Kexi στον εξυπηρετητή βάσης δεδομένων</comment>
-    <comment xml:lang="en_GB">shortcut to Kexi project on database server</comment>
-    <comment xml:lang="es">acceso directo a proyecto Kexi en el servidor de bases de datos</comment>
-    <comment xml:lang="eu">lasterbidea datu-basearen zerbitzariko Kexi proiekturako</comment>
-    <comment xml:lang="fi">pikakuvake tietokantapalvelimella olevaan Kexi-projektiin</comment>
-    <comment xml:lang="fo">snarvegur til Kexi verkætlan á dátustovnsambætara</comment>
-    <comment xml:lang="fr">raccourci vers projet Kexi sur serveur de base de données</comment>
-    <comment xml:lang="ga">aicearra go tionscadal Kexi ar fhreastalaí bunachair sonraí</comment>
-    <comment xml:lang="gl">acceso directo a proxecto Kexi no servidor de bases de datos</comment>
-    <comment xml:lang="he">קיצור דרך לפרוירט Kexi בשרת נתונים</comment>
-    <comment xml:lang="hr">Prečac do Kexi projekta na poslužitelju baze podataka</comment>
-    <comment xml:lang="hu">indítóikon adatbázis-kiszolgálón lévő Kexi projektre</comment>
-    <comment xml:lang="ia">Ligamine a projecto Kexi in servitor de base de datos</comment>
-    <comment xml:lang="id">pintasan ke projek Kexi pada server basis data</comment>
-    <comment xml:lang="it">Scorciatoia a progetto Kexi su server di database</comment>
-    <comment xml:lang="ja">データベースサーバの Kexi プロジェクトへのショートカット</comment>
-    <comment xml:lang="kk">дерекқор серверіндегі Kexi жобасына сілтеме</comment>
-    <comment xml:lang="ko">데이터베이스 서버의 Kexi 프로젝트 바로 가기</comment>
-    <comment xml:lang="lt">nuoroda į Kexi projektą duomenų bazės serveryje</comment>
-    <comment xml:lang="lv">īsceļš uz Kexi projektu datubāzes serverī</comment>
-    <comment xml:lang="nl">shortcut naar Kexi project op database server</comment>
-    <comment xml:lang="oc">acorchi cap a projècte Kexi sus servidor de banca de donadas</comment>
-    <comment xml:lang="pl">Skrót do projektu Kexi na serwerze bazy danych</comment>
-    <comment xml:lang="pt">atalho para projeto Kexi em servidor de base de dados</comment>
-    <comment xml:lang="pt_BR">Atalho para projeto Kexi no servidor de banco de dados</comment>
-    <comment xml:lang="ro">scurtătură către un proiect Kexi pe un server de baze de date</comment>
-    <comment xml:lang="ru">Ссылка на проект Kexi на сервере БД</comment>
-    <comment xml:lang="sk">Zástupca projektu Kexi na databázovom serveri</comment>
-    <comment xml:lang="sl">bližnjica do Kexi projekta na podatkovnem strežniku</comment>
-    <comment xml:lang="sr">пречица до пројекта Кексија на серверу базе података</comment>
-    <comment xml:lang="sv">genväg till Kexi-projekt på databasserver</comment>
-    <comment xml:lang="tr">veritabanı üzerindeki Kexi projesine kısayol</comment>
-    <comment xml:lang="uk">скорочення для проекту Kexi на сервері бази даних</comment>
-    <comment xml:lang="zh_CN">数据库服务器上 Kexi 项目的快捷方式</comment>
-    <comment xml:lang="zh_TW">資料庫伺服器上 Kexi 專案的捷徑</comment>
+    <comment>Kexi shortcut</comment>
+    <comment xml:lang="bg">Ускорител — Kexi</comment>
+    <comment xml:lang="ca">drecera de Kexi</comment>
+    <comment xml:lang="da">Kexi-genvej</comment>
+    <comment xml:lang="de">Kexi-Verweis</comment>
+    <comment xml:lang="en-GB">Kexi shortcut</comment>
+    <comment xml:lang="es">atajo de Kexi</comment>
+    <comment xml:lang="eu">Kexi lasterbidea</comment>
+    <comment xml:lang="fi">KEXI-pikakuvake</comment>
+    <comment xml:lang="fr">raccourci Kexi</comment>
+    <comment xml:lang="hr">Kexi prečac</comment>
+    <comment xml:lang="hu">Kexi parancsiko</comment>
+    <comment xml:lang="id">Pintasan Kexi</comment>
+    <comment xml:lang="it">Scorciatoia Kexi</comment>
+    <comment xml:lang="kk">Kexi жарлығы</comment>
+    <comment xml:lang="ko">Kexi 바로 가기</comment>
+    <comment xml:lang="pl">Skrót Kexi</comment>
+    <comment xml:lang="pt-BR">Atalho do Kexi</comment>
+    <comment xml:lang="ru">Ссылка Kexi</comment>
+    <comment xml:lang="sk">Odkaz Kexi</comment>
+    <comment xml:lang="sv">Kexi-genväg</comment>
+    <comment xml:lang="tr">Kexi kısayolu</comment>
+    <comment xml:lang="uk">скорочення Kexi</comment>
+    <comment xml:lang="zh-CN">Kexi 快捷方式</comment>
+    <comment xml:lang="zh-TW">Kexi 捷徑</comment>
     <glob pattern="*.kexis"/>
   </mime-type>
   <mime-type type="application/x-kexiproject-sqlite2">
-    <comment>Kexi database file-based project</comment>
-    <comment xml:lang="ar">مشروع قاعدة بيانات Kexi يعتمد على ملفات</comment>
-    <comment xml:lang="bg">Проект с база от данни — Kexi</comment>
-    <comment xml:lang="ca">projecte basat en fitxer de base de dades de Kexi</comment>
-    <comment xml:lang="cs">projekt založený na souboru databáze Kexi</comment>
-    <comment xml:lang="da">Filbaseret projekt for Kexidatabase</comment>
-    <comment xml:lang="de">Dateibasiertes Kexi-Datenbankprojekt</comment>
-    <comment xml:lang="el">Έργο βάσης δεδομένων Kexi βασισμένο σε αρχεία </comment>
-    <comment xml:lang="en_GB">Kexi database file-based project</comment>
-    <comment xml:lang="es">proyecto de base de datos basada en archivos de Kexi</comment>
-    <comment xml:lang="eu">Kexi datu-baseko fitxategian oinarritutako proiektua</comment>
-    <comment xml:lang="fi">Kexin tiedostoperustainen tietokantaprojekti</comment>
-    <comment xml:lang="fo">Kexi dátustovns fílugrundað verkætlan</comment>
-    <comment xml:lang="fr">projet de base de données Kexi en mode fichier</comment>
-    <comment xml:lang="ga">tionscadal bunachair sonraí Kexi bunaithe ar chomhaid</comment>
-    <comment xml:lang="gl">proxecto baseado no ficheiro-base de datos Kexi</comment>
-    <comment xml:lang="he">מיזם מסד נתונים מבוסס-קובץ של Kexi</comment>
-    <comment xml:lang="hr">Kexi baza podataka datotekom temeljen projekt</comment>
-    <comment xml:lang="hu">Kexi adatbázisfájl-alapú projekt</comment>
-    <comment xml:lang="ia">Projecto de base de datos Kexi in modo file</comment>
-    <comment xml:lang="id">Projek berbasis berkas basis data Kexi</comment>
-    <comment xml:lang="it">Progetto su file di database Kexi</comment>
-    <comment xml:lang="ja">Kexi データベース ファイルベースプロジェクト</comment>
-    <comment xml:lang="kk">Файл негізінде жоба үшін Kexi дерекқоры</comment>
-    <comment xml:lang="ko">Kexi 데이터베이스 파일 기반 프로젝트</comment>
-    <comment xml:lang="lt">Kexi duomenų bazės failo tipo projektas</comment>
-    <comment xml:lang="lv">Kexi datubāzes datnes balstīts projekts</comment>
-    <comment xml:lang="nl">Kexi database bestandgebaseerd project</comment>
-    <comment xml:lang="oc">projècte de banca de donadas Kexi en mòde fichièr</comment>
-    <comment xml:lang="pl">Projekt bazy danych Kexi na podstawie plików</comment>
-    <comment xml:lang="pt">projeto Kexi em base de dados baseada em ficheiros</comment>
-    <comment xml:lang="pt_BR">Projeto de banco de dados baseado em arquivo do Kexi</comment>
-    <comment xml:lang="ro">Proiect bazat pe fișiere al bazei de date Kexi</comment>
-    <comment xml:lang="ru">Файловый проект базы данных Kexi</comment>
-    <comment xml:lang="sk">Projekt databázy Kexi s úložiskom typu súbor</comment>
-    <comment xml:lang="sl">Datoteka projekta podatkovne zbirke Kexi</comment>
-    <comment xml:lang="sr">пројекат Кексијеве базе података на основу датотеке</comment>
-    <comment xml:lang="sv">Kexi-databas för filbaserat projekt</comment>
-    <comment xml:lang="tr">Dosya temelli Kexi veritabanı projesi</comment>
-    <comment xml:lang="uk">проект файлової бази даних Kexi</comment>
-    <comment xml:lang="zh_CN">Kexi 基于文件的数据库项目</comment>
-    <comment xml:lang="zh_TW">Kexi 資料庫檔案基礎專案</comment>
+    <comment>Kexi database file</comment>
+    <comment xml:lang="bg">База от данни — Kexi</comment>
+    <comment xml:lang="ca">fitxer de base de dades de Kexi</comment>
+    <comment xml:lang="da">Kexi database-fil</comment>
+    <comment xml:lang="de">Kexi-Datenbankdatei</comment>
+    <comment xml:lang="en-GB">Kexi database file</comment>
+    <comment xml:lang="es">archivo de base de datos de Kexi</comment>
+    <comment xml:lang="eu">Kexi datu-base fitxategia</comment>
+    <comment xml:lang="fi">KEXI-tietokanta</comment>
+    <comment xml:lang="fr">fichier de base de données Kexi</comment>
+    <comment xml:lang="hr">Kexi datoteka baze podataka</comment>
+    <comment xml:lang="hu">Kexi adatbázisfájl</comment>
+    <comment xml:lang="id">Berkas basis data Kexi</comment>
+    <comment xml:lang="it">File database Kexi</comment>
+    <comment xml:lang="kk">Kexi дерекқор файлы</comment>
+    <comment xml:lang="ko">Kexi 데이터베이스 파일</comment>
+    <comment xml:lang="pl">Plik bazy danych Kexi</comment>
+    <comment xml:lang="pt-BR">Arquivo de banco de dados do Kexi</comment>
+    <comment xml:lang="ru">Файл базы данных Kexi</comment>
+    <comment xml:lang="sk">Súbor databázy Kexi</comment>
+    <comment xml:lang="sv">Kexi-databasfil</comment>
+    <comment xml:lang="tr">Kexi veri tabanı dosyası</comment>
+    <comment xml:lang="uk">файл бази даних Kexi</comment>
+    <comment xml:lang="zh-CN">Kexi 数据库文件</comment>
+    <comment xml:lang="zh-TW">Kexi 資料庫檔案</comment>
     <sub-class-of type="application/x-sqlite2"/>
     <glob pattern="*.kexi"/>
   </mime-type>
   <mime-type type="application/x-kexiproject-sqlite3">
-    <comment>Kexi database file-based project</comment>
-    <comment xml:lang="ar">مشروع قاعدة بيانات Kexi يعتمد على ملفات</comment>
-    <comment xml:lang="bg">Проект с база от данни — Kexi</comment>
-    <comment xml:lang="ca">projecte basat en fitxer de base de dades de Kexi</comment>
-    <comment xml:lang="cs">projekt založený na souboru databáze Kexi</comment>
-    <comment xml:lang="da">Filbaseret projekt for Kexidatabase</comment>
-    <comment xml:lang="de">Dateibasiertes Kexi-Datenbankprojekt</comment>
-    <comment xml:lang="el">Έργο βάσης δεδομένων Kexi βασισμένο σε αρχεία </comment>
-    <comment xml:lang="en_GB">Kexi database file-based project</comment>
-    <comment xml:lang="es">proyecto de base de datos basada en archivos de Kexi</comment>
-    <comment xml:lang="eu">Kexi datu-baseko fitxategian oinarritutako proiektua</comment>
-    <comment xml:lang="fi">Kexin tiedostoperustainen tietokantaprojekti</comment>
-    <comment xml:lang="fo">Kexi dátustovns fílugrundað verkætlan</comment>
-    <comment xml:lang="fr">projet de base de données Kexi en mode fichier</comment>
-    <comment xml:lang="ga">tionscadal bunachair sonraí Kexi bunaithe ar chomhaid</comment>
-    <comment xml:lang="gl">proxecto baseado no ficheiro-base de datos Kexi</comment>
-    <comment xml:lang="he">מיזם מסד נתונים מבוסס-קובץ של Kexi</comment>
-    <comment xml:lang="hr">Kexi baza podataka datotekom temeljen projekt</comment>
-    <comment xml:lang="hu">Kexi adatbázisfájl-alapú projekt</comment>
-    <comment xml:lang="ia">Projecto de base de datos Kexi in modo file</comment>
-    <comment xml:lang="id">Projek berbasis berkas basis data Kexi</comment>
-    <comment xml:lang="it">Progetto su file di database Kexi</comment>
-    <comment xml:lang="ja">Kexi データベース ファイルベースプロジェクト</comment>
-    <comment xml:lang="kk">Файл негізінде жоба үшін Kexi дерекқоры</comment>
-    <comment xml:lang="ko">Kexi 데이터베이스 파일 기반 프로젝트</comment>
-    <comment xml:lang="lt">Kexi duomenų bazės failo tipo projektas</comment>
-    <comment xml:lang="lv">Kexi datubāzes datnes balstīts projekts</comment>
-    <comment xml:lang="nl">Kexi database bestandgebaseerd project</comment>
-    <comment xml:lang="oc">projècte de banca de donadas Kexi en mòde fichièr</comment>
-    <comment xml:lang="pl">Projekt bazy danych Kexi na podstawie plików</comment>
-    <comment xml:lang="pt">projeto Kexi em base de dados baseada em ficheiros</comment>
-    <comment xml:lang="pt_BR">Projeto de banco de dados baseado em arquivo do Kexi</comment>
-    <comment xml:lang="ro">Proiect bazat pe fișiere al bazei de date Kexi</comment>
-    <comment xml:lang="ru">Файловый проект базы данных Kexi</comment>
-    <comment xml:lang="sk">Projekt databázy Kexi s úložiskom typu súbor</comment>
-    <comment xml:lang="sl">Datoteka projekta podatkovne zbirke Kexi</comment>
-    <comment xml:lang="sr">пројекат Кексијеве базе података на основу датотеке</comment>
-    <comment xml:lang="sv">Kexi-databas för filbaserat projekt</comment>
-    <comment xml:lang="tr">Dosya temelli Kexi veritabanı projesi</comment>
-    <comment xml:lang="uk">проект файлової бази даних Kexi</comment>
-    <comment xml:lang="zh_CN">Kexi 基于文件的数据库项目</comment>
-    <comment xml:lang="zh_TW">Kexi 資料庫檔案基礎專案</comment>
-    <sub-class-of type="application/x-sqlite3"/>
+    <comment>Kexi database file</comment>
+    <comment xml:lang="bg">База от данни — Kexi</comment>
+    <comment xml:lang="ca">fitxer de base de dades de Kexi</comment>
+    <comment xml:lang="da">Kexi database-fil</comment>
+    <comment xml:lang="de">Kexi-Datenbankdatei</comment>
+    <comment xml:lang="en-GB">Kexi database file</comment>
+    <comment xml:lang="es">archivo de base de datos de Kexi</comment>
+    <comment xml:lang="eu">Kexi datu-base fitxategia</comment>
+    <comment xml:lang="fi">KEXI-tietokanta</comment>
+    <comment xml:lang="fr">fichier de base de données Kexi</comment>
+    <comment xml:lang="hr">Kexi datoteka baze podataka</comment>
+    <comment xml:lang="hu">Kexi adatbázisfájl</comment>
+    <comment xml:lang="id">Berkas basis data Kexi</comment>
+    <comment xml:lang="it">File database Kexi</comment>
+    <comment xml:lang="kk">Kexi дерекқор файлы</comment>
+    <comment xml:lang="ko">Kexi 데이터베이스 파일</comment>
+    <comment xml:lang="pl">Plik bazy danych Kexi</comment>
+    <comment xml:lang="pt-BR">Arquivo de banco de dados do Kexi</comment>
+    <comment xml:lang="ru">Файл базы данных Kexi</comment>
+    <comment xml:lang="sk">Súbor databázy Kexi</comment>
+    <comment xml:lang="sv">Kexi-databasfil</comment>
+    <comment xml:lang="tr">Kexi veri tabanı dosyası</comment>
+    <comment xml:lang="uk">файл бази даних Kexi</comment>
+    <comment xml:lang="zh-CN">Kexi 数据库文件</comment>
+    <comment xml:lang="zh-TW">Kexi 資料庫檔案</comment>
+    <sub-class-of type="application/vnd.sqlite3"/>
     <glob pattern="*.kexi"/>
     <alias type="application/x-vnd.kde.kexi"/>
     <alias type="application/x-kexiproject-sqlite"/>
   </mime-type>
   <mime-type type="application/x-kformula">
     <comment>KFormula formula</comment>
+    <comment xml:lang="af">KFormula-formule</comment>
     <comment xml:lang="ar">صيغة KFormula</comment>
-    <comment xml:lang="be@latin">Formuła KFormula</comment>
+    <comment xml:lang="be-Latn">Formuła KFormula</comment>
     <comment xml:lang="bg">Формула — KFormula</comment>
     <comment xml:lang="ca">fórmula de KFormula</comment>
     <comment xml:lang="cs">vzorec KFormula</comment>
     <comment xml:lang="da">KFormula-formel</comment>
     <comment xml:lang="de">KFormula-Formel</comment>
     <comment xml:lang="el">Μαθηματικός τύπος KFormula</comment>
-    <comment xml:lang="en_GB">KFormula formula</comment>
+    <comment xml:lang="en-GB">KFormula formula</comment>
     <comment xml:lang="eo">KFormula-formulo</comment>
     <comment xml:lang="es">fórmula de KFormula</comment>
     <comment xml:lang="eu">KFormula formula</comment>
     <comment xml:lang="fi">KFormula-kaava</comment>
     <comment xml:lang="fo">KFormula frymil</comment>
     <comment xml:lang="fr">formule KFormula</comment>
+    <comment xml:lang="fur">formule KFormula</comment>
     <comment xml:lang="ga">foirmle KFormula</comment>
     <comment xml:lang="gl">fórmula de KFormula</comment>
     <comment xml:lang="he">נוסחת KFormula</comment>
@@ -13943,7 +14496,7 @@
     <comment xml:lang="oc">formula KFormula</comment>
     <comment xml:lang="pl">Formuła KFormula</comment>
     <comment xml:lang="pt">fórmula KFormula</comment>
-    <comment xml:lang="pt_BR">Fórmula do KFormula</comment>
+    <comment xml:lang="pt-BR">Fórmula do KFormula</comment>
     <comment xml:lang="ro">Formulă KFormula</comment>
     <comment xml:lang="ru">Формула KFormula</comment>
     <comment xml:lang="sk">Vzorec KFormula</comment>
@@ -13954,18 +14507,18 @@
     <comment xml:lang="tr">KFormula formülü</comment>
     <comment xml:lang="uk">формула KFormula</comment>
     <comment xml:lang="vi">Công thức KFormula</comment>
-    <comment xml:lang="zh_CN">KFormula 公式</comment>
-    <comment xml:lang="zh_TW">KFormula 公式</comment>
+    <comment xml:lang="zh-CN">KFormula 公式</comment>
+    <comment xml:lang="zh-TW">KFormula 公式</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kformula\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kformula\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kformula" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kformula" offset="38"/>
         </match>
       </match>
     </magic>
@@ -13973,21 +14526,23 @@
   </mime-type>
   <mime-type type="application/x-killustrator">
     <comment>KIllustrator drawing</comment>
+    <comment xml:lang="af">KIllustrator-tekening</comment>
     <comment xml:lang="ar">تصميم KIllustrator</comment>
-    <comment xml:lang="be@latin">Rysunak KIllustrator</comment>
+    <comment xml:lang="be-Latn">Rysunak KIllustrator</comment>
     <comment xml:lang="bg">Чертеж — KIllustrator</comment>
     <comment xml:lang="ca">dibuix de KIllustrator</comment>
     <comment xml:lang="cs">kresba KIllustrator</comment>
     <comment xml:lang="da">KIllustrator-tegning</comment>
     <comment xml:lang="de">KIllustrator-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο KIllustrator</comment>
-    <comment xml:lang="en_GB">KIllustrator drawing</comment>
+    <comment xml:lang="en-GB">KIllustrator drawing</comment>
     <comment xml:lang="eo">KIllustrator-grafikaĵo</comment>
     <comment xml:lang="es">dibujo de KIllustrator</comment>
     <comment xml:lang="eu">KIllustrator marrazkia</comment>
     <comment xml:lang="fi">KIllustrator-piirros</comment>
     <comment xml:lang="fo">KIllustrator tekning</comment>
     <comment xml:lang="fr">dessin KIllustrator</comment>
+    <comment xml:lang="fur">dissen KIllustrator</comment>
     <comment xml:lang="ga">líníocht KIllustrator</comment>
     <comment xml:lang="gl">debuxo de KIllustrator</comment>
     <comment xml:lang="he">ציור KIllustrator</comment>
@@ -14008,7 +14563,7 @@
     <comment xml:lang="oc">dessenh KIllustrator</comment>
     <comment xml:lang="pl">Rysunek KIllustrator</comment>
     <comment xml:lang="pt">desenho KIllustrator</comment>
-    <comment xml:lang="pt_BR">Desenho do KIllustrator</comment>
+    <comment xml:lang="pt-BR">Desenho do KIllustrator</comment>
     <comment xml:lang="ro">Desen KIllustrator</comment>
     <comment xml:lang="ru">Рисунок KIllustrator</comment>
     <comment xml:lang="sk">Kresba KIllustrator</comment>
@@ -14019,13 +14574,13 @@
     <comment xml:lang="tr">KIllustrator çizimi</comment>
     <comment xml:lang="uk">малюнок KIllustrator</comment>
     <comment xml:lang="vi">Bản vẽ KIllustrator</comment>
-    <comment xml:lang="zh_CN">KIllustrator 绘图</comment>
-    <comment xml:lang="zh_TW">KIllustrator 繪圖</comment>
+    <comment xml:lang="zh-CN">KIllustrator 绘图</comment>
+    <comment xml:lang="zh-TW">KIllustrator 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-killustrator\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-killustrator\004\006" offset="18"/>
         </match>
       </match>
     </magic>
@@ -14033,21 +14588,23 @@
   </mime-type>
   <mime-type type="application/x-kivio">
     <comment>Kivio flowchart</comment>
+    <comment xml:lang="af">Kivio-vloeidiagram</comment>
     <comment xml:lang="ar">قائمة تدفق Kivio</comment>
-    <comment xml:lang="be@latin">Blok-schiema Kivio</comment>
+    <comment xml:lang="be-Latn">Blok-schiema Kivio</comment>
     <comment xml:lang="bg">Диаграма — Kivio</comment>
     <comment xml:lang="ca">diagrama de flux de Kivio</comment>
     <comment xml:lang="cs">vývojový diagram Kivio</comment>
     <comment xml:lang="da">Kiviorutediagram</comment>
     <comment xml:lang="de">Kivio-Flussdiagramm</comment>
     <comment xml:lang="el">Διάγραμμα ροής Kivio</comment>
-    <comment xml:lang="en_GB">Kivio flowchart</comment>
+    <comment xml:lang="en-GB">Kivio flowchart</comment>
     <comment xml:lang="eo">Kivo-fluskemo</comment>
     <comment xml:lang="es">diagrama de flujo de Kivio</comment>
     <comment xml:lang="eu">Kivio diagrama</comment>
     <comment xml:lang="fi">Kivio-vuokaavio</comment>
     <comment xml:lang="fo">Kivio leiðarit</comment>
     <comment xml:lang="fr">diagramme de flux Kivio</comment>
+    <comment xml:lang="fur">diagram di flus Kivio</comment>
     <comment xml:lang="ga">sreabhchairt Kivio</comment>
     <comment xml:lang="gl">gráfica de fluxo de Kivio</comment>
     <comment xml:lang="he">תרשים זרימה של Kivio</comment>
@@ -14068,7 +14625,7 @@
     <comment xml:lang="oc">diagrama de flux Kivio</comment>
     <comment xml:lang="pl">Diagram przepływów Kivio</comment>
     <comment xml:lang="pt">gráfico de fluxo Kivio</comment>
-    <comment xml:lang="pt_BR">Fluxograma do Kivio</comment>
+    <comment xml:lang="pt-BR">Fluxograma do Kivio</comment>
     <comment xml:lang="ro">Diagramă Kivio</comment>
     <comment xml:lang="ru">Диаграмма Kivio</comment>
     <comment xml:lang="sk">Vývojový diagram Kivio</comment>
@@ -14076,21 +14633,21 @@
     <comment xml:lang="sq">Diagramë fluksi Kivio</comment>
     <comment xml:lang="sr">Кивиов дијаграм тока</comment>
     <comment xml:lang="sv">Kivio-flödesschema</comment>
-    <comment xml:lang="tr">Kivio akış şeması</comment>
+    <comment xml:lang="tr">Kivio akış çizgesi</comment>
     <comment xml:lang="uk">блок-схема Kivio</comment>
     <comment xml:lang="vi">Lược đồ Kivio</comment>
-    <comment xml:lang="zh_CN">Kivio 流程图</comment>
-    <comment xml:lang="zh_TW">Kivio 圖表</comment>
+    <comment xml:lang="zh-CN">Kivio 流程图</comment>
+    <comment xml:lang="zh-TW">Kivio 流程圖</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kivio\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kivio\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kivio" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kivio" offset="38"/>
         </match>
       </match>
     </magic>
@@ -14098,21 +14655,23 @@
   </mime-type>
   <mime-type type="application/x-kontour">
     <comment>Kontour drawing</comment>
+    <comment xml:lang="af">Kontour-tekening</comment>
     <comment xml:lang="ar">تصميم Kontour</comment>
-    <comment xml:lang="be@latin">Rysunak Kontour</comment>
+    <comment xml:lang="be-Latn">Rysunak Kontour</comment>
     <comment xml:lang="bg">Чертеж — Kontour</comment>
     <comment xml:lang="ca">dibuix de Kontour</comment>
     <comment xml:lang="cs">kresba Kontour</comment>
     <comment xml:lang="da">Kontourtegning</comment>
     <comment xml:lang="de">Kontour-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο Kontour</comment>
-    <comment xml:lang="en_GB">Kontour drawing</comment>
+    <comment xml:lang="en-GB">Kontour drawing</comment>
     <comment xml:lang="eo">Kontour-grafikaĵo</comment>
     <comment xml:lang="es">dibujo de Kontour</comment>
     <comment xml:lang="eu">Kontour marrazkia</comment>
     <comment xml:lang="fi">Kontour-piirros</comment>
     <comment xml:lang="fo">Kontour tekning</comment>
     <comment xml:lang="fr">dessin Kontour</comment>
+    <comment xml:lang="fur">dissen Kontour</comment>
     <comment xml:lang="ga">líníocht Kontour</comment>
     <comment xml:lang="gl">debuxo de Kontour</comment>
     <comment xml:lang="he">ציור Kontour</comment>
@@ -14133,7 +14692,7 @@
     <comment xml:lang="oc">dessenh Kontour</comment>
     <comment xml:lang="pl">Rysunek Kontour</comment>
     <comment xml:lang="pt">desenho Kontour</comment>
-    <comment xml:lang="pt_BR">Desenho do Kontour</comment>
+    <comment xml:lang="pt-BR">Desenho do Kontour</comment>
     <comment xml:lang="ro">Desen Kontour</comment>
     <comment xml:lang="ru">Рисунок Kontour</comment>
     <comment xml:lang="sk">Kresba Kontour</comment>
@@ -14144,18 +14703,18 @@
     <comment xml:lang="tr">Kontour çizimi</comment>
     <comment xml:lang="uk">малюнок Kontour</comment>
     <comment xml:lang="vi">Bản vẽ Kontour</comment>
-    <comment xml:lang="zh_CN">Kontour 绘图</comment>
-    <comment xml:lang="zh_TW">Kontour 繪圖</comment>
+    <comment xml:lang="zh-CN">Kontour 绘图</comment>
+    <comment xml:lang="zh-TW">Kontour 繪圖</comment>
     <generic-icon name="image-x-generic"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kontour\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kontour\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kontour" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kontour" offset="38"/>
         </match>
       </match>
     </magic>
@@ -14163,21 +14722,23 @@
   </mime-type>
   <mime-type type="application/x-kpovmodeler">
     <comment>KPovModeler scene</comment>
+    <comment xml:lang="af">KPovModeler-toneel</comment>
     <comment xml:lang="ar">مشهد KPovModeler</comment>
-    <comment xml:lang="be@latin">Scena KPovModeler</comment>
+    <comment xml:lang="be-Latn">Scena KPovModeler</comment>
     <comment xml:lang="bg">Сцена — KPovModeler</comment>
     <comment xml:lang="ca">escena de KPovModeler</comment>
     <comment xml:lang="cs">scéna KPovModeler</comment>
     <comment xml:lang="da">KPovModeler-scene</comment>
     <comment xml:lang="de">KPovModeler-Szene</comment>
     <comment xml:lang="el">Σκηνή KPovModeler</comment>
-    <comment xml:lang="en_GB">KPovModeler scene</comment>
+    <comment xml:lang="en-GB">KPovModeler scene</comment>
     <comment xml:lang="eo">KPovModeler-sceno</comment>
     <comment xml:lang="es">escena de KPovModeler</comment>
     <comment xml:lang="eu">KPovModeler eszena</comment>
     <comment xml:lang="fi">KPovModeler-näkymä</comment>
     <comment xml:lang="fo">KPovModeler leikmynd</comment>
     <comment xml:lang="fr">scène KPovModeler</comment>
+    <comment xml:lang="fur">sene KPovModeler</comment>
     <comment xml:lang="ga">radharc KPovModeler</comment>
     <comment xml:lang="gl">escena de KPovModeler</comment>
     <comment xml:lang="he">סצנת KPovModeler</comment>
@@ -14198,7 +14759,7 @@
     <comment xml:lang="oc">scène KPovModeler</comment>
     <comment xml:lang="pl">Scena KPovModeler</comment>
     <comment xml:lang="pt">cenário KPovModeler</comment>
-    <comment xml:lang="pt_BR">Cena do KPovModeler</comment>
+    <comment xml:lang="pt-BR">Cena do KPovModeler</comment>
     <comment xml:lang="ro">Scenă KPovModeler</comment>
     <comment xml:lang="ru">Сцена KPovModeler</comment>
     <comment xml:lang="sk">Scéna KPovModeler</comment>
@@ -14209,28 +14770,30 @@
     <comment xml:lang="tr">KPovModeler sahnesi</comment>
     <comment xml:lang="uk">сцена KPovModeler</comment>
     <comment xml:lang="vi">Cảnh KPovModeler</comment>
-    <comment xml:lang="zh_CN">KPovModeler 场景</comment>
-    <comment xml:lang="zh_TW">KPovModeler 場景</comment>
+    <comment xml:lang="zh-CN">KPovModeler 场景</comment>
+    <comment xml:lang="zh-TW">KPovModeler 場景</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.kpm"/>
   </mime-type>
   <mime-type type="application/x-kpresenter">
     <comment>KPresenter presentation</comment>
+    <comment xml:lang="af">KPresenter-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي KPresenter</comment>
-    <comment xml:lang="be@latin">Prezentacyja KPresenter</comment>
+    <comment xml:lang="be-Latn">Prezentacyja KPresenter</comment>
     <comment xml:lang="bg">Презентация — KPresenter</comment>
     <comment xml:lang="ca">presentació de KPresenter</comment>
     <comment xml:lang="cs">prezentace KPresenter</comment>
     <comment xml:lang="da">KPresenter-præsentation</comment>
     <comment xml:lang="de">KPresenter-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση KPresenter</comment>
-    <comment xml:lang="en_GB">KPresenter presentation</comment>
+    <comment xml:lang="en-GB">KPresenter presentation</comment>
     <comment xml:lang="eo">KPresenter-prezentaĵo</comment>
     <comment xml:lang="es">presentación de KPresenter</comment>
     <comment xml:lang="eu">Kpresenter aurkezpena</comment>
     <comment xml:lang="fi">KPresenter-esitys</comment>
     <comment xml:lang="fo">KPresenter framløga</comment>
     <comment xml:lang="fr">présentation KPresenter</comment>
+    <comment xml:lang="fur">presentazion KPresenter</comment>
     <comment xml:lang="ga">láithreoireacht KPresenter</comment>
     <comment xml:lang="gl">presentación de KPresenter</comment>
     <comment xml:lang="he">מצגת KPresenter</comment>
@@ -14251,7 +14814,7 @@
     <comment xml:lang="oc">presentacion KPresenter</comment>
     <comment xml:lang="pl">Prezentacja KPresenter</comment>
     <comment xml:lang="pt">apresentação KPresenter</comment>
-    <comment xml:lang="pt_BR">Apresentação do KPresenter</comment>
+    <comment xml:lang="pt-BR">Apresentação do KPresenter</comment>
     <comment xml:lang="ro">Prezentare KPresenter</comment>
     <comment xml:lang="ru">Презентация KPresenter</comment>
     <comment xml:lang="sk">Prezentácia KPresenter</comment>
@@ -14262,18 +14825,18 @@
     <comment xml:lang="tr">KPresenter sunum dosyası</comment>
     <comment xml:lang="uk">презентація KPresenter</comment>
     <comment xml:lang="vi">Trình diễn KPresenter</comment>
-    <comment xml:lang="zh_CN">KPresenter 演示文稿</comment>
-    <comment xml:lang="zh_TW">KPresenter 簡報檔</comment>
+    <comment xml:lang="zh-CN">KPresenter 演示文稿</comment>
+    <comment xml:lang="zh-TW">KPresenter 簡報</comment>
     <generic-icon name="x-office-presentation"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kpresenter\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kpresenter\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kpresenter" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kpresenter" offset="38"/>
         </match>
       </match>
     </magic>
@@ -14282,22 +14845,24 @@
   </mime-type>
   <mime-type type="application/x-krita">
     <comment>Krita document</comment>
+    <comment xml:lang="af">Krita-dokument</comment>
     <comment xml:lang="ar">مستند Krita</comment>
     <comment xml:lang="ast">Documentu de Krita</comment>
-    <comment xml:lang="be@latin">Dakument Krita</comment>
+    <comment xml:lang="be-Latn">Dakument Krita</comment>
     <comment xml:lang="bg">Документ — Krita</comment>
-    <comment xml:lang="ca">document Krita</comment>
+    <comment xml:lang="ca">document de Krita</comment>
     <comment xml:lang="cs">dokument Krita</comment>
     <comment xml:lang="da">Kritadokument</comment>
     <comment xml:lang="de">Krita-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Krita</comment>
-    <comment xml:lang="en_GB">Krita document</comment>
+    <comment xml:lang="en-GB">Krita document</comment>
     <comment xml:lang="eo">Krita-dokumento</comment>
     <comment xml:lang="es">documento de Krita</comment>
     <comment xml:lang="eu">Krita dokumentua</comment>
     <comment xml:lang="fi">Krita-asiakirja</comment>
     <comment xml:lang="fo">Krita skjal</comment>
     <comment xml:lang="fr">document Krita</comment>
+    <comment xml:lang="fur">document Krita</comment>
     <comment xml:lang="ga">cáipéis Krita</comment>
     <comment xml:lang="gl">documento de Krita</comment>
     <comment xml:lang="he">מסמך Krita</comment>
@@ -14318,7 +14883,7 @@
     <comment xml:lang="oc">document Krita</comment>
     <comment xml:lang="pl">Dokument Krita</comment>
     <comment xml:lang="pt">documento Krita</comment>
-    <comment xml:lang="pt_BR">Documento do Krita</comment>
+    <comment xml:lang="pt-BR">Documento do Krita</comment>
     <comment xml:lang="ro">Document Krita</comment>
     <comment xml:lang="ru">Документ Krita</comment>
     <comment xml:lang="sk">Dokument Krita</comment>
@@ -14329,18 +14894,18 @@
     <comment xml:lang="tr">Krita belgesi</comment>
     <comment xml:lang="uk">документ Krita</comment>
     <comment xml:lang="vi">Tài liệu Krita</comment>
-    <comment xml:lang="zh_CN">Krita 文档</comment>
-    <comment xml:lang="zh_TW">Krita 文件</comment>
+    <comment xml:lang="zh-CN">Krita 文档</comment>
+    <comment xml:lang="zh-TW">Krita 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-krita\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-krita\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-krita" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-krita" offset="38"/>
         </match>
       </match>
     </magic>
@@ -14348,21 +14913,23 @@
   </mime-type>
   <mime-type type="application/x-kspread">
     <comment>KSpread spreadsheet</comment>
+    <comment xml:lang="af">KSpread-sigblad</comment>
     <comment xml:lang="ar">جدول KSpread</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš KSpread</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš KSpread</comment>
     <comment xml:lang="bg">Таблица — KSpread</comment>
     <comment xml:lang="ca">full de càlcul de KSpread</comment>
     <comment xml:lang="cs">sešit KSpread</comment>
     <comment xml:lang="da">KSpread-regneark</comment>
     <comment xml:lang="de">KSpread-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο KSpread</comment>
-    <comment xml:lang="en_GB">KSpread spreadsheet</comment>
+    <comment xml:lang="en-GB">KSpread spreadsheet</comment>
     <comment xml:lang="eo">KSpread-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo de KSpread</comment>
     <comment xml:lang="eu">KSpread kalkulu-orria</comment>
     <comment xml:lang="fi">KSpread-taulukko</comment>
     <comment xml:lang="fo">KSpread rokniark</comment>
     <comment xml:lang="fr">feuille de calcul KSpread</comment>
+    <comment xml:lang="fur">sfuei di calcul KSpread</comment>
     <comment xml:lang="ga">scarbhileog KSpread</comment>
     <comment xml:lang="gl">folla de cálculo de KSpread</comment>
     <comment xml:lang="he">גליון נתונים של Kspread</comment>
@@ -14383,7 +14950,7 @@
     <comment xml:lang="oc">fuèlh de calcul KSpread</comment>
     <comment xml:lang="pl">Arkusz KSpread</comment>
     <comment xml:lang="pt">folha de cálculo KSpread</comment>
-    <comment xml:lang="pt_BR">Planilha do KSpread</comment>
+    <comment xml:lang="pt-BR">Planilha do KSpread</comment>
     <comment xml:lang="ro">Foaie de calcul KSpread</comment>
     <comment xml:lang="ru">Электронная таблица KSpread</comment>
     <comment xml:lang="sk">Zošit KSpread</comment>
@@ -14391,21 +14958,21 @@
     <comment xml:lang="sq">Fletë llogaritjesh KSpread</comment>
     <comment xml:lang="sr">табела К-табеле</comment>
     <comment xml:lang="sv">KSpread-kalkylblad</comment>
-    <comment xml:lang="tr">KSpread çalışma sayfası</comment>
+    <comment xml:lang="tr">KSpread hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця KSpread</comment>
     <comment xml:lang="vi">Bảng tính KSpread</comment>
-    <comment xml:lang="zh_CN">KSpread 电子表格</comment>
-    <comment xml:lang="zh_TW">KSpread 試算表</comment>
+    <comment xml:lang="zh-CN">KSpread 电子表格</comment>
+    <comment xml:lang="zh-TW">KSpread 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kspread\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kspread\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kspread" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kspread" offset="38"/>
         </match>
       </match>
     </magic>
@@ -14413,21 +14980,23 @@
   </mime-type>
   <mime-type type="application/x-kspread-crypt">
     <comment>KSpread spreadsheet (encrypted)</comment>
+    <comment xml:lang="af">KSpread-sigblad (geënkripteer)</comment>
     <comment xml:lang="ar">جدول KSpread (مشفر)</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš KSpread (zašyfravany)</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš KSpread (zašyfravany)</comment>
     <comment xml:lang="bg">Таблица — KSpread, шифрирана</comment>
     <comment xml:lang="ca">full de càlcul de KSpread (xifrat)</comment>
     <comment xml:lang="cs">sešit KSpread (šifrovaný)</comment>
     <comment xml:lang="da">KSpread-regneark (krypteret)</comment>
     <comment xml:lang="de">KSpread-Tabelle (verschlüsselt)</comment>
     <comment xml:lang="el">Λογιστικό φύλλο KSpread (κρυπτογραφημένο)</comment>
-    <comment xml:lang="en_GB">KSpread spreadsheet (encrypted)</comment>
+    <comment xml:lang="en-GB">KSpread spreadsheet (encrypted)</comment>
     <comment xml:lang="eo">KSpread-kalkultabelo (ĉifrita)</comment>
     <comment xml:lang="es">hoja de cálculo de KSpread (cifrada)</comment>
-    <comment xml:lang="eu">KSpread kalkulu-orria (enkriptatua)</comment>
+    <comment xml:lang="eu">KSpread kalkulu-orria (zifratuta)</comment>
     <comment xml:lang="fi">KSpread-taulukko (salattu)</comment>
     <comment xml:lang="fo">KSpread rokniark (bronglað)</comment>
     <comment xml:lang="fr">feuille de calcul KSpread (chiffrée)</comment>
+    <comment xml:lang="fur">sfuei di calcul KSpread (cifrât)</comment>
     <comment xml:lang="ga">scarbhileog KSpread (criptithe)</comment>
     <comment xml:lang="gl">folla de cálculo de KSpread (cifrada)</comment>
     <comment xml:lang="he">גליון נתונים של KSpread (מוצפן)</comment>
@@ -14448,7 +15017,7 @@
     <comment xml:lang="oc">fuèlh de calcul KSpread (chifrada)</comment>
     <comment xml:lang="pl">Arkusz KSpread (zaszyfrowany)</comment>
     <comment xml:lang="pt">folha de cálculo KSpread (encriptada)</comment>
-    <comment xml:lang="pt_BR">Planilha do KSpread (criptografada)</comment>
+    <comment xml:lang="pt-BR">Planilha do KSpread (criptografada)</comment>
     <comment xml:lang="ro">Foaie de calcul KSpread (criptat)</comment>
     <comment xml:lang="ru">Электронная таблица KSpread (зашифрованная)</comment>
     <comment xml:lang="sk">Zošit KSpread (šifrovaný)</comment>
@@ -14456,32 +15025,33 @@
     <comment xml:lang="sq">Fletë llogaritjesh KSpread (e kriptuar)</comment>
     <comment xml:lang="sr">табела К-табеле (шифрована)</comment>
     <comment xml:lang="sv">KSpread-kalkylblad (krypterat)</comment>
-    <comment xml:lang="tr">KSpread çalışma sayfası (şifreli)</comment>
+    <comment xml:lang="tr">KSpread hesap çizelgesi (şifreli)</comment>
     <comment xml:lang="uk">ел. таблиця KSpread (зашифрована)</comment>
     <comment xml:lang="vi">Bảng tính KSpread (đã mật mã)</comment>
-    <comment xml:lang="zh_CN">KSpread 电子表格（加密）</comment>
-    <comment xml:lang="zh_TW">KSpread 試算表 (已加密)</comment>
+    <comment xml:lang="zh-CN">KSpread 电子表格（加密）</comment>
+    <comment xml:lang="zh-TW">KSpread 試算表 (加密)</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="0x0d1a2702" type="big32" offset="0"/>
+      <match type="big32" value="0x0d1a2702" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-ksysv-package">
     <comment>KSysV init package</comment>
     <comment xml:lang="ar">حزمة KSysV init</comment>
-    <comment xml:lang="be@latin">Inicyjalny pakunak KSysV</comment>
+    <comment xml:lang="be-Latn">Inicyjalny pakunak KSysV</comment>
     <comment xml:lang="bg">Пакет — KSysV init</comment>
-    <comment xml:lang="ca">paquet d'inici KSysV</comment>
+    <comment xml:lang="ca">paquet de KSysV init</comment>
     <comment xml:lang="cs">balíček init KSysV</comment>
     <comment xml:lang="da">KSsV init-pakke</comment>
     <comment xml:lang="de">KSysV-Init-Paket</comment>
     <comment xml:lang="el">Αρχικό πακέτο KSysV</comment>
-    <comment xml:lang="en_GB">KSysV init package</comment>
+    <comment xml:lang="en-GB">KSysV init package</comment>
     <comment xml:lang="es">paquete de configuración de init para KSysV</comment>
     <comment xml:lang="eu">KSysV hasieratzeko paketea</comment>
     <comment xml:lang="fi">KSysV init -paketti</comment>
     <comment xml:lang="fo">KSysV init pakki</comment>
     <comment xml:lang="fr">paquet d'initialisation KSysV</comment>
+    <comment xml:lang="fur">pachet init KSysV</comment>
     <comment xml:lang="ga">pacáiste túsaithe KSysV</comment>
     <comment xml:lang="gl">paquete de KsysV init</comment>
     <comment xml:lang="he">חבילת KSysV init</comment>
@@ -14501,7 +15071,7 @@
     <comment xml:lang="oc">paquet d'initializacion KSysV</comment>
     <comment xml:lang="pl">Pakiet KSysV init</comment>
     <comment xml:lang="pt">pacote inicial KSysV</comment>
-    <comment xml:lang="pt_BR">Pacote init do KSysV</comment>
+    <comment xml:lang="pt-BR">Pacote init do KSysV</comment>
     <comment xml:lang="ro">Pachet KSysV init</comment>
     <comment xml:lang="ru">Пакет инициализации KSysV</comment>
     <comment xml:lang="sk">Balíček KSysV init</comment>
@@ -14512,33 +15082,35 @@
     <comment xml:lang="tr">KSysV init paketi</comment>
     <comment xml:lang="uk">пакунок KSysV init</comment>
     <comment xml:lang="vi">Gói sở khởi KSysV</comment>
-    <comment xml:lang="zh_CN">KSysV init 软件包</comment>
-    <comment xml:lang="zh_TW">KSysV init 軟體包</comment>
+    <comment xml:lang="zh-CN">KSysV init 软件包</comment>
+    <comment xml:lang="zh-TW">KSysV init 軟體包</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="KSysV" type="string" offset="4">
-        <match value="1" type="byte" offset="15"/>
+      <match type="string" value="KSysV" offset="4">
+        <match type="byte" value="1" offset="15"/>
       </match>
     </magic>
   </mime-type>
   <mime-type type="application/x-kugar">
     <comment>Kugar document</comment>
+    <comment xml:lang="af">Kugar-dokument</comment>
     <comment xml:lang="ar">مستند Kugar</comment>
     <comment xml:lang="ast">Documentu de Kugar</comment>
-    <comment xml:lang="be@latin">Dakument Kugar</comment>
+    <comment xml:lang="be-Latn">Dakument Kugar</comment>
     <comment xml:lang="bg">Документ — Kugar</comment>
     <comment xml:lang="ca">document Kugar</comment>
     <comment xml:lang="cs">dokument Kugar</comment>
     <comment xml:lang="da">Kugardokument</comment>
     <comment xml:lang="de">Kugar-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Kugar</comment>
-    <comment xml:lang="en_GB">Kugar document</comment>
+    <comment xml:lang="en-GB">Kugar document</comment>
     <comment xml:lang="eo">Kugar-dokumento</comment>
     <comment xml:lang="es">documento de Kugar</comment>
     <comment xml:lang="eu">Kugar dokumentua</comment>
     <comment xml:lang="fi">Kugar-asiakirja</comment>
     <comment xml:lang="fo">Kugar skjal</comment>
     <comment xml:lang="fr">document Kugar</comment>
+    <comment xml:lang="fur">document Kugar</comment>
     <comment xml:lang="ga">cáipéis Kugar</comment>
     <comment xml:lang="gl">documento de Kugar</comment>
     <comment xml:lang="he">מסמך Kugar</comment>
@@ -14559,7 +15131,7 @@
     <comment xml:lang="oc">document Kugar</comment>
     <comment xml:lang="pl">Dokument Kuguar</comment>
     <comment xml:lang="pt">documento Kugar</comment>
-    <comment xml:lang="pt_BR">Documento do Kugar</comment>
+    <comment xml:lang="pt-BR">Documento do Kugar</comment>
     <comment xml:lang="ro">Document Kugar</comment>
     <comment xml:lang="ru">Документ Kugar</comment>
     <comment xml:lang="sk">Dokument Kugar</comment>
@@ -14570,16 +15142,17 @@
     <comment xml:lang="tr">Kugar belgesi</comment>
     <comment xml:lang="uk">документ Kugar</comment>
     <comment xml:lang="vi">Tài liệu Kugar</comment>
-    <comment xml:lang="zh_CN">Kugar 文档</comment>
-    <comment xml:lang="zh_TW">Kugar 文件</comment>
+    <comment xml:lang="zh-CN">Kugar 文档</comment>
+    <comment xml:lang="zh-TW">Kugar 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.kud"/>
   </mime-type>
   <mime-type type="application/x-kword">
     <comment>KWord document</comment>
+    <comment xml:lang="af">KWord-dokument</comment>
     <comment xml:lang="ar">مستند KWord</comment>
     <comment xml:lang="ast">Documentu de Kword</comment>
-    <comment xml:lang="be@latin">Dakument KWord</comment>
+    <comment xml:lang="be-Latn">Dakument KWord</comment>
     <comment xml:lang="bg">Документ — KWord</comment>
     <comment xml:lang="ca">document KWord</comment>
     <comment xml:lang="cs">dokument KWord</comment>
@@ -14587,13 +15160,14 @@
     <comment xml:lang="da">KWord-dokument</comment>
     <comment xml:lang="de">KWord-Dokument</comment>
     <comment xml:lang="el">Έγγραφο KWord</comment>
-    <comment xml:lang="en_GB">KWord document</comment>
+    <comment xml:lang="en-GB">KWord document</comment>
     <comment xml:lang="eo">KWord-dokumento</comment>
     <comment xml:lang="es">documento de KWord</comment>
     <comment xml:lang="eu">KWord dokumentua</comment>
     <comment xml:lang="fi">KWord-asiakirja</comment>
     <comment xml:lang="fo">KWord skjal</comment>
     <comment xml:lang="fr">document KWord</comment>
+    <comment xml:lang="fur">document KWord</comment>
     <comment xml:lang="ga">cáipéis KWord</comment>
     <comment xml:lang="gl">documento de KWord</comment>
     <comment xml:lang="he">מסמך KWord</comment>
@@ -14614,7 +15188,7 @@
     <comment xml:lang="oc">document KWord</comment>
     <comment xml:lang="pl">Dokument KWord</comment>
     <comment xml:lang="pt">documento KWord</comment>
-    <comment xml:lang="pt_BR">Documento do KWord</comment>
+    <comment xml:lang="pt-BR">Documento do KWord</comment>
     <comment xml:lang="ro">Document KWord</comment>
     <comment xml:lang="ru">Документ KWord</comment>
     <comment xml:lang="sk">Dokument KWord</comment>
@@ -14625,18 +15199,18 @@
     <comment xml:lang="tr">KWord belgesi</comment>
     <comment xml:lang="uk">документ KWord</comment>
     <comment xml:lang="vi">Tài liệu KWord</comment>
-    <comment xml:lang="zh_CN">KWord 文档</comment>
-    <comment xml:lang="zh_TW">KWord 文件</comment>
+    <comment xml:lang="zh-CN">KWord 文档</comment>
+    <comment xml:lang="zh-TW">KWord 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="60">
-      <match value="\037\213" type="string" offset="0">
-        <match value="KOffice" type="string" offset="10">
-          <match value="application/x-kword\004\006" type="string" offset="18"/>
+      <match type="string" value="\037\213" offset="0">
+        <match type="string" value="KOffice" offset="10">
+          <match type="string" value="application/x-kword\004\006" offset="18"/>
         </match>
       </match>
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="application/x-kword" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="application/x-kword" offset="38"/>
         </match>
       </match>
     </magic>
@@ -14645,22 +15219,24 @@
   </mime-type>
   <mime-type type="application/x-kword-crypt">
     <comment>KWord document (encrypted)</comment>
+    <comment xml:lang="af">KWord-dokument (geënkripteer)</comment>
     <comment xml:lang="ar">مستند KWord (مشفر)</comment>
     <comment xml:lang="ast">Documentu de Kword (cifráu)</comment>
-    <comment xml:lang="be@latin">Dakument KWord (zašyfravany)</comment>
+    <comment xml:lang="be-Latn">Dakument KWord (zašyfravany)</comment>
     <comment xml:lang="bg">Документ — KWord, шифриран</comment>
     <comment xml:lang="ca">document KWord (xifrat)</comment>
     <comment xml:lang="cs">dokument KWord (šifrovaný)</comment>
     <comment xml:lang="da">KWord-dokument (krypteret)</comment>
     <comment xml:lang="de">KWord-Dokument (verschlüsselt)</comment>
     <comment xml:lang="el">Έγγραφο KWord (κρυπτογραφημένο)</comment>
-    <comment xml:lang="en_GB">KWord document (encrypted)</comment>
+    <comment xml:lang="en-GB">KWord document (encrypted)</comment>
     <comment xml:lang="eo">KWord-dokumento (ĉifrita)</comment>
     <comment xml:lang="es">documento de KWord (cifrado)</comment>
-    <comment xml:lang="eu">KWord dokumentua (enkriptatua)</comment>
+    <comment xml:lang="eu">KWord dokumentua (zifratuta)</comment>
     <comment xml:lang="fi">KWord-asiakirja (salattu)</comment>
     <comment xml:lang="fo">KWord skjal (bronglað)</comment>
     <comment xml:lang="fr">document KWord (chiffré)</comment>
+    <comment xml:lang="fur">document KWord (cifrât)</comment>
     <comment xml:lang="ga">cáipéis KWord (criptithe)</comment>
     <comment xml:lang="gl">documento de KWord (cifrado)</comment>
     <comment xml:lang="he">מסמך KWord (מוצפן)</comment>
@@ -14681,7 +15257,7 @@
     <comment xml:lang="oc">document KWord (chifrat)</comment>
     <comment xml:lang="pl">Dokument KWord (zaszyfrowany)</comment>
     <comment xml:lang="pt">documento KWord (encriptado)</comment>
-    <comment xml:lang="pt_BR">Documento do KWord (criptografado)</comment>
+    <comment xml:lang="pt-BR">Documento do KWord (criptografado)</comment>
     <comment xml:lang="ro">Document KWord (criptat)</comment>
     <comment xml:lang="ru">Документ KWord (зашифрованный)</comment>
     <comment xml:lang="sk">Dokument KWord (šifrovaný)</comment>
@@ -14692,18 +15268,19 @@
     <comment xml:lang="tr">KWord belgesi (şifreli)</comment>
     <comment xml:lang="uk">документ KWord (зашифрований)</comment>
     <comment xml:lang="vi">Tài liệu KWord (đã mật mã)</comment>
-    <comment xml:lang="zh_CN">KWord 文档（加密）</comment>
-    <comment xml:lang="zh_TW">KWord 文件 (已加密)</comment>
+    <comment xml:lang="zh-CN">KWord 文档（加密）</comment>
+    <comment xml:lang="zh-TW">KWord 文件 (加密)</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="0x0d1a2701" type="big32" offset="0"/>
+      <match type="big32" value="0x0d1a2701" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-lha">
     <comment>LHA archive</comment>
+    <comment xml:lang="af">LHA-argief</comment>
     <comment xml:lang="ar">أرشيف LHA</comment>
     <comment xml:lang="az">LHA arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ LHA</comment>
+    <comment xml:lang="be-Latn">Archiŭ LHA</comment>
     <comment xml:lang="bg">Архив — LHA</comment>
     <comment xml:lang="ca">arxiu LHA</comment>
     <comment xml:lang="cs">archiv LHA</comment>
@@ -14711,13 +15288,14 @@
     <comment xml:lang="da">LHA-arkiv</comment>
     <comment xml:lang="de">LHA-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο LHA</comment>
-    <comment xml:lang="en_GB">LHA archive</comment>
+    <comment xml:lang="en-GB">LHA archive</comment>
     <comment xml:lang="eo">LHA-arkivo</comment>
     <comment xml:lang="es">archivador LHA</comment>
     <comment xml:lang="eu">LHA artxiboa</comment>
     <comment xml:lang="fi">LHA-arkisto</comment>
     <comment xml:lang="fo">LHA skjalasavn</comment>
     <comment xml:lang="fr">archive LHA</comment>
+    <comment xml:lang="fur">archivi LHA</comment>
     <comment xml:lang="ga">cartlann LHA</comment>
     <comment xml:lang="gl">arquivo LHA</comment>
     <comment xml:lang="he">ארכיון LHA</comment>
@@ -14738,7 +15316,7 @@
     <comment xml:lang="oc">archiu LHA</comment>
     <comment xml:lang="pl">Archiwum LHA</comment>
     <comment xml:lang="pt">arquivo LHA</comment>
-    <comment xml:lang="pt_BR">Pacote LHA</comment>
+    <comment xml:lang="pt-BR">Pacote LHA</comment>
     <comment xml:lang="ro">Arhivă LHA</comment>
     <comment xml:lang="ru">Архив LHA</comment>
     <comment xml:lang="sk">Archív LHA</comment>
@@ -14749,22 +15327,22 @@
     <comment xml:lang="tr">LHA arşivi</comment>
     <comment xml:lang="uk">архів LHA</comment>
     <comment xml:lang="vi">Kho nén LHA</comment>
-    <comment xml:lang="zh_CN">LHA 归档文件</comment>
-    <comment xml:lang="zh_TW">LHA 封存檔</comment>
+    <comment xml:lang="zh-CN">LHA 归档文件</comment>
+    <comment xml:lang="zh-TW">LHA 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="-lh -" type="string" offset="2"/>
-      <match value="-lh0-" type="string" offset="2"/>
-      <match value="-lh1-" type="string" offset="2"/>
-      <match value="-lh2-" type="string" offset="2"/>
-      <match value="-lh3-" type="string" offset="2"/>
-      <match value="-lh4-" type="string" offset="2"/>
-      <match value="-lh5-" type="string" offset="2"/>
-      <match value="-lh40-" type="string" offset="2"/>
-      <match value="-lhd-" type="string" offset="2"/>
-      <match value="-lz4-" type="string" offset="2"/>
-      <match value="-lz5-" type="string" offset="2"/>
-      <match value="-lzs-" type="string" offset="2"/>
+      <match type="string" value="-lh -" offset="2"/>
+      <match type="string" value="-lh0-" offset="2"/>
+      <match type="string" value="-lh1-" offset="2"/>
+      <match type="string" value="-lh2-" offset="2"/>
+      <match type="string" value="-lh3-" offset="2"/>
+      <match type="string" value="-lh4-" offset="2"/>
+      <match type="string" value="-lh5-" offset="2"/>
+      <match type="string" value="-lh40-" offset="2"/>
+      <match type="string" value="-lhd-" offset="2"/>
+      <match type="string" value="-lz4-" offset="2"/>
+      <match type="string" value="-lz5-" offset="2"/>
+      <match type="string" value="-lzs-" offset="2"/>
     </magic>
     <glob pattern="*.lha"/>
     <glob pattern="*.lzh"/>
@@ -14772,21 +15350,23 @@
   </mime-type>
   <mime-type type="application/x-lhz">
     <comment>LHZ archive</comment>
+    <comment xml:lang="af">LHZ-argief</comment>
     <comment xml:lang="ar">أرشيف LHZ</comment>
-    <comment xml:lang="be@latin">Archiŭ LHZ</comment>
+    <comment xml:lang="be-Latn">Archiŭ LHZ</comment>
     <comment xml:lang="bg">Архив — LHZ</comment>
     <comment xml:lang="ca">arxiu LHZ</comment>
     <comment xml:lang="cs">archiv LHZ</comment>
     <comment xml:lang="da">LHZ-arkiv</comment>
     <comment xml:lang="de">LHZ-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο LHZ</comment>
-    <comment xml:lang="en_GB">LHZ archive</comment>
+    <comment xml:lang="en-GB">LHZ archive</comment>
     <comment xml:lang="eo">LHZ-arkivo</comment>
     <comment xml:lang="es">archivador LHZ</comment>
     <comment xml:lang="eu">LHZ artxiboa</comment>
     <comment xml:lang="fi">LHZ-arkisto</comment>
     <comment xml:lang="fo">LHZ skjalasavn</comment>
     <comment xml:lang="fr">archive LHZ</comment>
+    <comment xml:lang="fur">archivi LHZ</comment>
     <comment xml:lang="ga">cartlann LHZ</comment>
     <comment xml:lang="gl">arquivo LHZ</comment>
     <comment xml:lang="he">ארכיון LHZ</comment>
@@ -14807,7 +15387,7 @@
     <comment xml:lang="oc">archiu LHZ</comment>
     <comment xml:lang="pl">Archiwum LHZ</comment>
     <comment xml:lang="pt">arquivo LHZ</comment>
-    <comment xml:lang="pt_BR">Pacote LHZ</comment>
+    <comment xml:lang="pt-BR">Pacote LHZ</comment>
     <comment xml:lang="ro">Arhivă LHZ</comment>
     <comment xml:lang="ru">Архив LHZ</comment>
     <comment xml:lang="sk">Archív LHZ</comment>
@@ -14818,28 +15398,30 @@
     <comment xml:lang="tr">LHZ arşivi</comment>
     <comment xml:lang="uk">архів LHZ</comment>
     <comment xml:lang="vi">Kho nén LHZ (LHA đã nén)</comment>
-    <comment xml:lang="zh_CN">LHZ 归档文件</comment>
-    <comment xml:lang="zh_TW">LHZ 封存檔</comment>
+    <comment xml:lang="zh-CN">LHZ 归档文件</comment>
+    <comment xml:lang="zh-TW">LHZ 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.lhz"/>
   </mime-type>
-  <mime-type type="text/vnd.qt.linguist">
+  <mime-type type="text/vnd.trolltech.linguist">
     <comment>message catalog</comment>
+    <comment xml:lang="af">boodskaplêer</comment>
     <comment xml:lang="ar">كتالوج الرسالة</comment>
-    <comment xml:lang="be@latin">kataloh paviedamleńniaŭ</comment>
+    <comment xml:lang="be-Latn">kataloh paviedamleńniaŭ</comment>
     <comment xml:lang="bg">Каталог със съобщения</comment>
     <comment xml:lang="ca">catàleg de missatges</comment>
     <comment xml:lang="cs">katalog zpráv</comment>
     <comment xml:lang="da">meddelelseskatalog</comment>
     <comment xml:lang="de">Nachrichtenkatalog</comment>
     <comment xml:lang="el">Κατάλογος μηνυμάτων</comment>
-    <comment xml:lang="en_GB">message catalogue</comment>
+    <comment xml:lang="en-GB">message catalogue</comment>
     <comment xml:lang="eo">katalogo de mesaĝoj</comment>
     <comment xml:lang="es">catálogo de mensajes</comment>
     <comment xml:lang="eu">mezuen katalogoa</comment>
     <comment xml:lang="fi">viestiluettelo</comment>
     <comment xml:lang="fo">boðskrá</comment>
     <comment xml:lang="fr">catalogue de messages</comment>
+    <comment xml:lang="fur">catalic di messaçs</comment>
     <comment xml:lang="ga">catalóg theachtaireachtaí</comment>
     <comment xml:lang="gl">catálogo de mensaxes</comment>
     <comment xml:lang="he">קטלוג הודעות</comment>
@@ -14860,7 +15442,7 @@
     <comment xml:lang="oc">catalòg de messatges</comment>
     <comment xml:lang="pl">Katalog wiadomości</comment>
     <comment xml:lang="pt">catálogo de mensagens</comment>
-    <comment xml:lang="pt_BR">Catálogo de mensagens</comment>
+    <comment xml:lang="pt-BR">Catálogo de mensagens</comment>
     <comment xml:lang="ro">catalog de mesaje</comment>
     <comment xml:lang="ru">Каталог сообщений</comment>
     <comment xml:lang="sk">Katalóg správ</comment>
@@ -14871,34 +15453,37 @@
     <comment xml:lang="tr">ileti kataloğu</comment>
     <comment xml:lang="uk">каталог повідомлень</comment>
     <comment xml:lang="vi">phân loại thông điệp</comment>
-    <comment xml:lang="zh_CN">消息库</comment>
-    <comment xml:lang="zh_TW">訊息目錄</comment>
+    <comment xml:lang="zh-CN">消息库</comment>
+    <comment xml:lang="zh-TW">訊息目錄</comment>
     <sub-class-of type="application/xml"/>
     <magic>
-      <match value="&lt;TS" type="string" offset="0:256"/>
+      <match type="string" value="&lt;TS " offset="0:256"/>
+      <match type="string" value="&lt;TS&gt;" offset="0:256"/>
     </magic>
     <glob pattern="*.ts"/>
     <alias type="application/x-linguist"/>
-    <alias type="text/vnd.trolltech.linguist"/>
+    <alias type="text/vnd.qt.linguist"/>
   </mime-type>
   <mime-type type="application/x-lyx">
     <comment>LyX document</comment>
+    <comment xml:lang="af">LyX-dokument</comment>
     <comment xml:lang="ar">مستند LyX</comment>
     <comment xml:lang="ast">Documentu de Lyx</comment>
-    <comment xml:lang="be@latin">Dakument LyX</comment>
+    <comment xml:lang="be-Latn">Dakument LyX</comment>
     <comment xml:lang="bg">Документ — LyX</comment>
     <comment xml:lang="ca">document LyX</comment>
     <comment xml:lang="cs">dokument LyX</comment>
     <comment xml:lang="da">LyX-dokument</comment>
     <comment xml:lang="de">LyX-Dokument</comment>
     <comment xml:lang="el">Έγγραφο LyX</comment>
-    <comment xml:lang="en_GB">LyX document</comment>
+    <comment xml:lang="en-GB">LyX document</comment>
     <comment xml:lang="eo">LyX-dokumento</comment>
     <comment xml:lang="es">documento de LyX</comment>
     <comment xml:lang="eu">LyX dokumentua</comment>
     <comment xml:lang="fi">LyX-asiakirja</comment>
     <comment xml:lang="fo">LyX skjal</comment>
     <comment xml:lang="fr">document LyX</comment>
+    <comment xml:lang="fur">document LyX</comment>
     <comment xml:lang="ga">cáipéis LyX</comment>
     <comment xml:lang="gl">documento LyX</comment>
     <comment xml:lang="he">מסמך Lyx</comment>
@@ -14919,7 +15504,7 @@
     <comment xml:lang="oc">document LyX</comment>
     <comment xml:lang="pl">Dokument LyX</comment>
     <comment xml:lang="pt">documento LyX</comment>
-    <comment xml:lang="pt_BR">Documento LyX</comment>
+    <comment xml:lang="pt-BR">Documento LyX</comment>
     <comment xml:lang="ro">Document LyX</comment>
     <comment xml:lang="ru">Документ LyX</comment>
     <comment xml:lang="sk">Dokument LyX</comment>
@@ -14930,28 +15515,31 @@
     <comment xml:lang="tr">LyX belgesi</comment>
     <comment xml:lang="uk">документ LyX</comment>
     <comment xml:lang="vi">Tài liệu LyX</comment>
-    <comment xml:lang="zh_CN">LyX 文档</comment>
-    <comment xml:lang="zh_TW">LyX 文件</comment>
+    <comment xml:lang="zh-CN">LyX 文档</comment>
+    <comment xml:lang="zh-TW">LyX 文件</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="#LyX" type="string" offset="0"/>
+      <match type="string" value="#LyX" offset="0"/>
     </magic>
     <glob pattern="*.lyx"/>
     <alias type="text/x-lyx"/>
   </mime-type>
   <mime-type type="application/x-lz4">
     <comment>LZ4 archive</comment>
+    <comment xml:lang="af">LZ4-argief</comment>
+    <comment xml:lang="bg">Архив — LZ4</comment>
     <comment xml:lang="ca">arxiu LZ4</comment>
     <comment xml:lang="cs">archiv LZ4</comment>
     <comment xml:lang="da">LZ4-arkiv</comment>
     <comment xml:lang="de">LZ4-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο LZ4</comment>
-    <comment xml:lang="en_GB">LZ4 archive</comment>
+    <comment xml:lang="en-GB">LZ4 archive</comment>
     <comment xml:lang="es">archivador LZ4</comment>
     <comment xml:lang="eu">LZ4 artxiboa</comment>
     <comment xml:lang="fi">LZ4-arkisto</comment>
     <comment xml:lang="fr">archive LZ4</comment>
+    <comment xml:lang="fur">archivi LZ4</comment>
     <comment xml:lang="ga">Cartlann LZ4</comment>
     <comment xml:lang="gl">Arquivo LZ4</comment>
     <comment xml:lang="he">ארכיון LZ4</comment>
@@ -14965,7 +15553,7 @@
     <comment xml:lang="oc">archiu LZ4</comment>
     <comment xml:lang="pl">Archiwum LZ4</comment>
     <comment xml:lang="pt">arquivo LZ4</comment>
-    <comment xml:lang="pt_BR">Pacote LZ4</comment>
+    <comment xml:lang="pt-BR">Pacote LZ4</comment>
     <comment xml:lang="ru">Архив LZ4</comment>
     <comment xml:lang="sk">Archív LZ4</comment>
     <comment xml:lang="sl">Datoteka arhiva LZ4</comment>
@@ -14973,64 +15561,69 @@
     <comment xml:lang="sv">LZ4-arkiv</comment>
     <comment xml:lang="tr">LZ4 arşivi</comment>
     <comment xml:lang="uk">архів LZ4</comment>
-    <comment xml:lang="zh_CN">LZ4 归档文件</comment>
-    <comment xml:lang="zh_TW">LZ4 封存檔</comment>
+    <comment xml:lang="zh-CN">LZ4 归档文件</comment>
+    <comment xml:lang="zh-TW">LZ4 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="0x184d2204" type="little32" offset="0"/>
-      <match value="0x184c2102" type="little32" offset="0"/>
+      <match type="little32" value="0x184d2204" offset="0"/>
+      <match type="little32" value="0x184c2102" offset="0"/>
     </magic>
     <glob pattern="*.lz4"/>
   </mime-type>
   <mime-type type="application/x-lz4-compressed-tar">
     <comment>Tar archive (LZ4-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (LZ4-saamgepers)</comment>
+    <comment xml:lang="bg">Архив — tar, компресиран с LZ4</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió LZ4)</comment>
     <comment xml:lang="cs">archiv Tar (komprimace LZ4)</comment>
     <comment xml:lang="da">Tar-arkiv (LZ4-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (LZ4-komprimiert)</comment>
-    <comment xml:lang="en_GB">Tar archive (LZ4-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (LZ4-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con LZ4)</comment>
     <comment xml:lang="eu">Tar artxiboa (LZ4-rekin konprimatua)</comment>
     <comment xml:lang="fi">Tar-arkisto (LZ4-pakattu)</comment>
     <comment xml:lang="fr">archive tar (compression LZ4)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun LZ4)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le LZ4)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י LZ4)</comment>
     <comment xml:lang="hr">Tar arhiva (LZ4 sažeto)</comment>
-    <comment xml:lang="hu">Tar archívum (LZ4-el tömörítve)</comment>
-    <comment xml:lang="id">arsip tar (terkompresi LZ4)</comment>
+    <comment xml:lang="hu">Tar archívum (LZ4 tömörítésű)</comment>
+    <comment xml:lang="id">Arsip tar (terkompresi LZ4)</comment>
     <comment xml:lang="it">Archivio tar (compresso con LZ4)</comment>
     <comment xml:lang="kk">Tar архиві (LZ4-пен сығылған)</comment>
     <comment xml:lang="ko">Tar 묶음 파일(LZ4 압축)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja LZ4)</comment>
-    <comment xml:lang="pt_BR">Arquvio Tar (compactado com LZ4)</comment>
+    <comment xml:lang="pt-BR">Arquivo Tar (compactado com LZ4)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый lz4)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou LZ4)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou LZ4)</comment>
     <comment xml:lang="sr">Тар архива (запакована ЛЗ4-ом)</comment>
     <comment xml:lang="sv">Tar-arkiv (LZ4-komprimerat)</comment>
     <comment xml:lang="tr">Tar arşivi (LZ4 ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений LZ4)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（LZ4 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (LZ4 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（LZ4 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (LZ4 壓縮)</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="application/x-lz4"/>
     <glob pattern="*.tar.lz4"/>
   </mime-type>
   <mime-type type="application/x-lzip">
     <comment>Lzip archive</comment>
+    <comment xml:lang="af">Lzip-argief</comment>
     <comment xml:lang="ar">أرشيف Lzip</comment>
-    <comment xml:lang="bg">Архив — lzip</comment>
+    <comment xml:lang="bg">Архив — Lzip</comment>
     <comment xml:lang="ca">arxiu lzip</comment>
     <comment xml:lang="cs">archiv Lzip</comment>
     <comment xml:lang="da">Lzip-arkiv</comment>
     <comment xml:lang="de">Lzip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Lzip</comment>
-    <comment xml:lang="en_GB">Lzip archive</comment>
+    <comment xml:lang="en-GB">Lzip archive</comment>
     <comment xml:lang="eo">Lzip-arkivo</comment>
     <comment xml:lang="es">archivador Lzip</comment>
     <comment xml:lang="eu">Lzip artxiboa</comment>
     <comment xml:lang="fi">Lzip-arkisto</comment>
     <comment xml:lang="fo">Lzip skjalasavn</comment>
     <comment xml:lang="fr">archive lzip</comment>
+    <comment xml:lang="fur">archivi Lzip</comment>
     <comment xml:lang="ga">cartlann Lzip</comment>
     <comment xml:lang="gl">arquivo Lzip</comment>
     <comment xml:lang="he">ארכיון Lzip</comment>
@@ -15048,7 +15641,7 @@
     <comment xml:lang="oc">archiu lzip</comment>
     <comment xml:lang="pl">Archiwum lzip</comment>
     <comment xml:lang="pt">arquivo LZip</comment>
-    <comment xml:lang="pt_BR">Pacote Lzip</comment>
+    <comment xml:lang="pt-BR">Pacote Lzip</comment>
     <comment xml:lang="ro">Arhivă Lzip</comment>
     <comment xml:lang="ru">Архив LZIP</comment>
     <comment xml:lang="sk">Archív Lzip</comment>
@@ -15057,96 +15650,105 @@
     <comment xml:lang="sv">Lzip-arkiv</comment>
     <comment xml:lang="tr">Lzip arşivi</comment>
     <comment xml:lang="uk">архів lzip</comment>
-    <comment xml:lang="zh_CN">Lzip 归档文件</comment>
-    <comment xml:lang="zh_TW">Lzip 封存檔</comment>
+    <comment xml:lang="zh-CN">Lzip 归档文件</comment>
+    <comment xml:lang="zh-TW">Lzip 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="LZIP" type="string" offset="0"/>
+      <match type="string" value="LZIP" offset="0"/>
     </magic>
     <glob pattern="*.lz"/>
   </mime-type>
   <mime-type type="application/x-lzip-compressed-tar">
     <comment>Tar archive (lzip-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (lzip-saamgepers)</comment>
+    <comment xml:lang="bg">Архив — tar, компресиран с Lzip</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió lzip)</comment>
     <comment xml:lang="cs">archiv Tar (komprimace lzip)</comment>
     <comment xml:lang="da">Tar-arkiv (lzip-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (lzip-komprimiert)</comment>
-    <comment xml:lang="en_GB">Tar archive (lzip-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (lzip-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con lzip)</comment>
     <comment xml:lang="eu">Tar artxiboa (lzip-rekin konprimatua)</comment>
     <comment xml:lang="fi">Tar-arkisto (lzip-pakattu)</comment>
     <comment xml:lang="fr">archive tar (compressée lzip)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun lzip)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le lzip)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י lzip)</comment>
     <comment xml:lang="hr">Tar arhiva (lzip sažeto)</comment>
-    <comment xml:lang="hu">Tar archívum (lzippel tömörítve)</comment>
-    <comment xml:lang="id">arsip tar (terkompresi lzip)</comment>
+    <comment xml:lang="hu">Tar archívum (lzip tömörítésű)</comment>
+    <comment xml:lang="id">Arsip tar (terkompresi lzip)</comment>
     <comment xml:lang="it">Archivio tar (compresso con lzip)</comment>
     <comment xml:lang="kk">Tar архиві (lzip-пен сығылған)</comment>
     <comment xml:lang="ko">TAR 묶음 파일(LZIP 압축)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja lzip)</comment>
-    <comment xml:lang="pt_BR">Arquivo Tar (compactado com lzip)</comment>
+    <comment xml:lang="pt-BR">Arquivo Tar (compactado com lzip)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый lzip)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou lzip)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou lzip)</comment>
     <comment xml:lang="sr">Тар архива (запакована лзипом)</comment>
     <comment xml:lang="sv">Tar-arkiv (lzip-komprimerat)</comment>
     <comment xml:lang="tr">Tar arşivi (lzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений lzip)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（lzip 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (lzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（lzip 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (lzip 壓縮)</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="application/x-lzip"/>
     <glob pattern="*.tar.lz"/>
   </mime-type>
   <mime-type type="application/x-lzpdf">
     <comment>PDF document (lzip-compressed)</comment>
+    <comment xml:lang="af">PDF-dokument (lzip-saamgepers)</comment>
     <comment xml:lang="ast">Documentu PDF (comprimíu en lzip)</comment>
+    <comment xml:lang="bg">Документ — PDF, компресиран с Lzip</comment>
     <comment xml:lang="ca">document PDF (amb compressió lzip)</comment>
     <comment xml:lang="cs">dokument PDF (komprimace lzip)</comment>
+    <comment xml:lang="da">PDF-dokument (lzip-komprimeret)</comment>
     <comment xml:lang="de">PDF-Dokument (lzip-komprimiert)</comment>
-    <comment xml:lang="en_GB">PDF document (lzip-compressed)</comment>
+    <comment xml:lang="en-GB">PDF document (lzip-compressed)</comment>
     <comment xml:lang="es">documento PDF (comprimido con lzip)</comment>
     <comment xml:lang="eu">PDF dokumentua (lzip-rekin konprimitua)</comment>
     <comment xml:lang="fi">PDF-asiakirja (lzip-pakattu)</comment>
     <comment xml:lang="fr">document PDF (compressé lzip)</comment>
+    <comment xml:lang="fur">document PDF (comprimût cun lzip)</comment>
     <comment xml:lang="ga">cáipéis PDF (comhbhrúite le lzip)</comment>
     <comment xml:lang="hr">PDF dokument (lzip sažeto)</comment>
-    <comment xml:lang="hu">PDF dokumentum (lzip-tömörítésű)</comment>
-    <comment xml:lang="id">dokumen PDF (termkompresi lzip)</comment>
+    <comment xml:lang="hu">PDF dokumentum (lzip tömörítésű)</comment>
+    <comment xml:lang="id">Dokumen PDF (termkompresi lzip)</comment>
     <comment xml:lang="it">Documento PDF (compresso con lzip)</comment>
     <comment xml:lang="kk">PDF құжаты (lzip-пен сығылған)</comment>
     <comment xml:lang="ko">PDF 문서(LZIP 압축)</comment>
     <comment xml:lang="pl">Dokument PDF (kompresja lzip)</comment>
-    <comment xml:lang="pt_BR">Documento PDF (compactado com lzip)</comment>
+    <comment xml:lang="pt-BR">Documento PDF (compactado com lzip)</comment>
     <comment xml:lang="ru">Документ PDF (сжатый lzip)</comment>
     <comment xml:lang="sk">Dokument PDF (komprimovaný pomocou lzip)</comment>
     <comment xml:lang="sr">ПДФ документ (запакован лзип-ом)</comment>
     <comment xml:lang="sv">PDF-dokument (lzip-komprimerat)</comment>
     <comment xml:lang="tr">PDF belgesi (lzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ PDF (стиснений lzip)</comment>
-    <comment xml:lang="zh_CN">PDF 文档（lzip 压缩）</comment>
-    <comment xml:lang="zh_TW">PDF 文件 (lzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">PDF 文档（lzip 压缩）</comment>
+    <comment xml:lang="zh-TW">PDF 文件 (lzip 壓縮)</comment>
     <sub-class-of type="application/x-lzip"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.pdf.lz"/>
   </mime-type>
   <mime-type type="application/x-lzma">
     <comment>LZMA archive</comment>
+    <comment xml:lang="af">LZMA-argief</comment>
     <comment xml:lang="ar">أرشيف LZMA</comment>
-    <comment xml:lang="be@latin">Archiŭ LZMA</comment>
+    <comment xml:lang="be-Latn">Archiŭ LZMA</comment>
     <comment xml:lang="bg">Архив — LZMA</comment>
     <comment xml:lang="ca">arxiu LZMA</comment>
     <comment xml:lang="cs">archiv LZMA</comment>
     <comment xml:lang="da">LZHA-arkiv</comment>
     <comment xml:lang="de">LZMA-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο LZMA</comment>
-    <comment xml:lang="en_GB">LZMA archive</comment>
+    <comment xml:lang="en-GB">LZMA archive</comment>
     <comment xml:lang="eo">LZMA-arkivo</comment>
     <comment xml:lang="es">archivador LZMA</comment>
     <comment xml:lang="eu">LZMA artxiboa</comment>
     <comment xml:lang="fi">LZMA-arkisto</comment>
     <comment xml:lang="fo">LZMA skjalasavn</comment>
     <comment xml:lang="fr">archive LZMA</comment>
+    <comment xml:lang="fur">archivi LZMA</comment>
     <comment xml:lang="ga">cartlann LZMA</comment>
     <comment xml:lang="gl">arquivo LZMA</comment>
     <comment xml:lang="he">ארכיון LZMA</comment>
@@ -15166,7 +15768,7 @@
     <comment xml:lang="oc">archiu LZMA</comment>
     <comment xml:lang="pl">Archiwum LZMA</comment>
     <comment xml:lang="pt">arquivo LZMA</comment>
-    <comment xml:lang="pt_BR">Pacote LZMA</comment>
+    <comment xml:lang="pt-BR">Pacote LZMA</comment>
     <comment xml:lang="ro">Arhivă LZMA</comment>
     <comment xml:lang="ru">Архив LZMA</comment>
     <comment xml:lang="sk">Archív LZMA</comment>
@@ -15177,8 +15779,8 @@
     <comment xml:lang="tr">LZMA arşivi</comment>
     <comment xml:lang="uk">архів LZMA</comment>
     <comment xml:lang="vi">Kho nén LZMA</comment>
-    <comment xml:lang="zh_CN">LZMA 归档文件</comment>
-    <comment xml:lang="zh_TW">LZMA 封存檔</comment>
+    <comment xml:lang="zh-CN">LZMA 归档文件</comment>
+    <comment xml:lang="zh-TW">LZMA 封存檔</comment>
     <acronym>LZMA</acronym>
     <expanded-acronym>Lempel-Ziv-Markov chain-Algorithm</expanded-acronym>
     <generic-icon name="package-x-generic"/>
@@ -15186,25 +15788,27 @@
   </mime-type>
   <mime-type type="application/x-lzma-compressed-tar">
     <comment>Tar archive (LZMA-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (LZMA-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط-LZMA)</comment>
-    <comment xml:lang="be@latin">Archiŭ tar (LZMA-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Archiŭ tar (LZMA-skampresavany)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран с LZMA</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió LZMA)</comment>
     <comment xml:lang="cs">archiv Tar (komprimace LZMA)</comment>
     <comment xml:lang="da">Tar-arkiv (LZMA-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (LZMA-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο με LZMA)</comment>
-    <comment xml:lang="en_GB">Tar archive (LZMA-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (LZMA-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con LZMA)</comment>
     <comment xml:lang="eu">Tar artxiboa (LZMA-rekin konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (LZMA-pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn (LZMA-stappað)</comment>
     <comment xml:lang="fr">archive tar (compression LZMA)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun LZMA)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le LZMA)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido con LZMA)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י LZMA)</comment>
     <comment xml:lang="hr">Tar arhiva (LZMA sažeta)</comment>
-    <comment xml:lang="hu">Tar archívum (LZMA-val tömörítve)</comment>
+    <comment xml:lang="hu">Tar archívum (LZMA tömörítésű)</comment>
     <comment xml:lang="ia">Archivo Tar (comprimite con LZMA)</comment>
     <comment xml:lang="id">Arsip Tar (terkompresi LZMA)</comment>
     <comment xml:lang="it">Archivio tar (compresso con LZMA)</comment>
@@ -15219,10 +15823,10 @@
     <comment xml:lang="oc">archiu tar (compression LZMA)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja LZMA)</comment>
     <comment xml:lang="pt">arquivo Tar (compressão LZMA)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado com LZMA)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com LZMA)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată LZMA)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый lzma)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou LZMA)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou LZMA)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen z LZMA)</comment>
     <comment xml:lang="sq">Arkiv tar (i kompresuar me LZMA)</comment>
     <comment xml:lang="sr">Тар архива (запакована ЛЗМА-ом)</comment>
@@ -15230,8 +15834,8 @@
     <comment xml:lang="tr">Tar arşivi (LZMA ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений LZMA)</comment>
     <comment xml:lang="vi">Kho nén tar (đã nén LZMA)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（LZMA 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (LZMA 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（LZMA 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (LZMA 壓縮)</comment>
     <sub-class-of type="application/x-lzma"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.tar.lzma"/>
@@ -15239,21 +15843,23 @@
   </mime-type>
   <mime-type type="application/x-lzop">
     <comment>LZO archive</comment>
+    <comment xml:lang="af">LZO-argief</comment>
     <comment xml:lang="ar">أرشيف LZO</comment>
-    <comment xml:lang="be@latin">Archiŭ LZO</comment>
+    <comment xml:lang="be-Latn">Archiŭ LZO</comment>
     <comment xml:lang="bg">Архив — LZO</comment>
     <comment xml:lang="ca">arxiu LZO</comment>
     <comment xml:lang="cs">archiv LZO</comment>
     <comment xml:lang="da">LZO-arkiv</comment>
     <comment xml:lang="de">LZO-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο LZO</comment>
-    <comment xml:lang="en_GB">LZO archive</comment>
+    <comment xml:lang="en-GB">LZO archive</comment>
     <comment xml:lang="eo">LZO-arkivo</comment>
     <comment xml:lang="es">archivador LZO</comment>
     <comment xml:lang="eu">LZO artxiboa</comment>
     <comment xml:lang="fi">LZO-arkisto</comment>
     <comment xml:lang="fo">LZO skjalasavn</comment>
     <comment xml:lang="fr">archive LZO</comment>
+    <comment xml:lang="fur">archivi LZO</comment>
     <comment xml:lang="ga">cartlann LZO</comment>
     <comment xml:lang="gl">arquivo LZO</comment>
     <comment xml:lang="he">ארכיון LZO</comment>
@@ -15274,7 +15880,7 @@
     <comment xml:lang="oc">archiu LZO</comment>
     <comment xml:lang="pl">Archiwum LZO</comment>
     <comment xml:lang="pt">arquivo LZO</comment>
-    <comment xml:lang="pt_BR">Pacote LZO</comment>
+    <comment xml:lang="pt-BR">Pacote LZO</comment>
     <comment xml:lang="ro">Arhivă LZO</comment>
     <comment xml:lang="ru">Архив LZO</comment>
     <comment xml:lang="sk">Archív LZO</comment>
@@ -15285,27 +15891,31 @@
     <comment xml:lang="tr">LZO arşivi</comment>
     <comment xml:lang="uk">архів LZO</comment>
     <comment xml:lang="vi">Kho nén LZO</comment>
-    <comment xml:lang="zh_CN">LZO 归档文件</comment>
-    <comment xml:lang="zh_TW">LZO 封存檔</comment>
+    <comment xml:lang="zh-CN">LZO 归档文件</comment>
+    <comment xml:lang="zh-TW">LZO 封存檔</comment>
     <acronym>LZO</acronym>
     <expanded-acronym>Lempel-Ziv-Oberhumer</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a" type="string" offset="0"/>
+      <match type="string" value="\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a" offset="0"/>
     </magic>
     <glob pattern="*.lzo"/>
   </mime-type>
   <mime-type type="application/x-qpress">
     <comment>Qpress archive</comment>
+    <comment xml:lang="af">Qpress-argief</comment>
+    <comment xml:lang="bg">Архив — Qpress</comment>
     <comment xml:lang="ca">arxiu Qpress</comment>
     <comment xml:lang="cs">archiv Qpress</comment>
     <comment xml:lang="da">Qpress-arkiv</comment>
     <comment xml:lang="de">Qpress-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Qpress</comment>
-    <comment xml:lang="en_GB">Qpress archive</comment>
+    <comment xml:lang="en-GB">Qpress archive</comment>
     <comment xml:lang="es">archivador de Qpress</comment>
+    <comment xml:lang="eu">Qpress artxiboa</comment>
     <comment xml:lang="fi">Qpress-arkisto</comment>
     <comment xml:lang="fr">Archive Qpress</comment>
+    <comment xml:lang="fur">archivi Qpress</comment>
     <comment xml:lang="ga">cartlann Qpress</comment>
     <comment xml:lang="gl">Arquivo Qpress</comment>
     <comment xml:lang="he">ארכיון Qpress</comment>
@@ -15319,7 +15929,7 @@
     <comment xml:lang="oc">Archiu Qpress</comment>
     <comment xml:lang="pl">Archiwum Qpress</comment>
     <comment xml:lang="pt">arquivo Qpress</comment>
-    <comment xml:lang="pt_BR">Pacote Qpress</comment>
+    <comment xml:lang="pt-BR">Pacote Qpress</comment>
     <comment xml:lang="ru">Архив Qpress</comment>
     <comment xml:lang="sk">Archív Qpress</comment>
     <comment xml:lang="sl">Datoteka arhiva Qpress</comment>
@@ -15327,25 +15937,28 @@
     <comment xml:lang="sv">Qpress-arkiv</comment>
     <comment xml:lang="tr">Qpress arşivi</comment>
     <comment xml:lang="uk">архів Qpress</comment>
-    <comment xml:lang="zh_CN">Qpress 归档文件</comment>
-    <comment xml:lang="zh_TW">Qpress 封存檔</comment>
+    <comment xml:lang="zh-CN">Qpress 归档文件</comment>
+    <comment xml:lang="zh-TW">Qpress 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="qpress10" type="string" offset="0"/>
+      <match type="string" value="qpress10" offset="0"/>
     </magic>
     <glob pattern="*.qp"/>
   </mime-type>
   <mime-type type="application/x-xar">
     <comment>XAR archive</comment>
+    <comment xml:lang="af">XAR-argief</comment>
+    <comment xml:lang="bg">Архив — XAR</comment>
     <comment xml:lang="ca">arxiu XAR</comment>
     <comment xml:lang="cs">archiv XAR</comment>
     <comment xml:lang="da">XAR-arkiv</comment>
     <comment xml:lang="de">XAR-Archiv</comment>
-    <comment xml:lang="en_GB">XAR archive</comment>
+    <comment xml:lang="en-GB">XAR archive</comment>
     <comment xml:lang="es">archivador XAR</comment>
     <comment xml:lang="eu">XAR artxiboa</comment>
     <comment xml:lang="fi">XAR-arkisto</comment>
     <comment xml:lang="fr">archive XAR</comment>
+    <comment xml:lang="fur">archivi XAR</comment>
     <comment xml:lang="ga">cartlann XAR</comment>
     <comment xml:lang="he">ארכיון XAR</comment>
     <comment xml:lang="hr">XAR arhiva</comment>
@@ -15356,36 +15969,40 @@
     <comment xml:lang="ko">XAR 아카이브</comment>
     <comment xml:lang="oc">Archiu XAR</comment>
     <comment xml:lang="pl">Archiwum XAR</comment>
-    <comment xml:lang="pt_BR">Arquivo XAR</comment>
+    <comment xml:lang="pt-BR">Arquivo XAR</comment>
     <comment xml:lang="ru">Архив XAR</comment>
     <comment xml:lang="sk">Archív XAR</comment>
     <comment xml:lang="sr">ИксАР архива</comment>
     <comment xml:lang="sv">XAR-arkiv</comment>
     <comment xml:lang="tr">XAR arşivi</comment>
     <comment xml:lang="uk">архів XAR</comment>
-    <comment xml:lang="zh_CN">XAR 归档文件</comment>
-    <comment xml:lang="zh_TW">XAR 封存檔</comment>
+    <comment xml:lang="zh-CN">XAR 归档文件</comment>
+    <comment xml:lang="zh-TW">XAR 封存檔</comment>
     <acronym>XAR</acronym>
     <expanded-acronym>eXtensible ARchive</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="0x78617221" type="big32" offset="0"/>
+      <match type="big32" value="0x78617221" offset="0"/>
     </magic>
     <glob pattern="*.xar"/>
-    
+    <!-- OS X 10.5+ installer package -->
     <glob pattern="*.pkg"/>
   </mime-type>
   <mime-type type="application/zlib">
     <comment>Zlib archive</comment>
+    <comment xml:lang="af">Zlib-argief</comment>
+    <comment xml:lang="bg">Архив — Zlib</comment>
     <comment xml:lang="ca">arxiu Zlib</comment>
     <comment xml:lang="cs">archiv Zlib</comment>
     <comment xml:lang="da">Zlib-arkiv</comment>
     <comment xml:lang="de">Zlib-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Zlib</comment>
-    <comment xml:lang="en_GB">Zlib archive</comment>
+    <comment xml:lang="en-GB">Zlib archive</comment>
     <comment xml:lang="es">archivador Zlib</comment>
+    <comment xml:lang="eu">Zlib artxiboa</comment>
     <comment xml:lang="fi">Zlib-arkisto</comment>
     <comment xml:lang="fr">Archive Zlib</comment>
+    <comment xml:lang="fur">archivi Zlib</comment>
     <comment xml:lang="ga">cartlann Zlib</comment>
     <comment xml:lang="gl">Arquivo Zlib</comment>
     <comment xml:lang="he">ארכיון Zlib</comment>
@@ -15399,7 +16016,7 @@
     <comment xml:lang="oc">Archiu Zlib</comment>
     <comment xml:lang="pl">Archiwum Zlib</comment>
     <comment xml:lang="pt">arquivo Zlib</comment>
-    <comment xml:lang="pt_BR">Pacote Zlib</comment>
+    <comment xml:lang="pt-BR">Pacote Zlib</comment>
     <comment xml:lang="ru">Архив Zlib</comment>
     <comment xml:lang="sk">Archív Zlib</comment>
     <comment xml:lang="sl">Datoteka arhiva Zlib</comment>
@@ -15407,15 +16024,16 @@
     <comment xml:lang="sv">Zlib-arkiv</comment>
     <comment xml:lang="tr">Zlib arşivi</comment>
     <comment xml:lang="uk">архів zlib</comment>
-    <comment xml:lang="zh_CN">Alzip 归档文件</comment>
-    <comment xml:lang="zh_TW">Zlib 封存檔</comment>
+    <comment xml:lang="zh-CN">Alzip 归档文件</comment>
+    <comment xml:lang="zh-TW">Zlib 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.zz"/>
   </mime-type>
   <mime-type type="application/x-magicpoint">
     <comment>MagicPoint presentation</comment>
+    <comment xml:lang="af">MagicPoint-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي MagicPoint</comment>
-    <comment xml:lang="be@latin">Prezentacyja MagicPoint</comment>
+    <comment xml:lang="be-Latn">Prezentacyja MagicPoint</comment>
     <comment xml:lang="bg">Презентация — MagicPoint</comment>
     <comment xml:lang="ca">presentació de MagicPoint</comment>
     <comment xml:lang="cs">prezentace MagicPoint</comment>
@@ -15423,13 +16041,14 @@
     <comment xml:lang="da">MagicPoint-præsentation</comment>
     <comment xml:lang="de">MagicPoint-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση MagicPoint</comment>
-    <comment xml:lang="en_GB">MagicPoint presentation</comment>
+    <comment xml:lang="en-GB">MagicPoint presentation</comment>
     <comment xml:lang="eo">MagicPoint-prezentaĵo</comment>
     <comment xml:lang="es">presentación de MagicPoint</comment>
     <comment xml:lang="eu">MagicPoint aurkezpena</comment>
     <comment xml:lang="fi">MagicPoint-esitys</comment>
     <comment xml:lang="fo">MagicPoint framløga</comment>
     <comment xml:lang="fr">présentation MagicPoint</comment>
+    <comment xml:lang="fur">presentazion MagicPoint</comment>
     <comment xml:lang="ga">láithreoireacht MagicPoint</comment>
     <comment xml:lang="gl">presentación de MagicPoint</comment>
     <comment xml:lang="he">מצגת MagicPoint</comment>
@@ -15451,7 +16070,7 @@
     <comment xml:lang="oc">presentacion MagicPoint</comment>
     <comment xml:lang="pl">Prezentacja programu MagicPoint</comment>
     <comment xml:lang="pt">apresentação MagicPoint</comment>
-    <comment xml:lang="pt_BR">Apresentação do MagicPoint</comment>
+    <comment xml:lang="pt-BR">Apresentação do MagicPoint</comment>
     <comment xml:lang="ro">Prezentare MagicPoint</comment>
     <comment xml:lang="ru">Презентация MagicPoint</comment>
     <comment xml:lang="sk">Prezentácia MagicPoint</comment>
@@ -15462,29 +16081,31 @@
     <comment xml:lang="tr">MagicPoint sunumu</comment>
     <comment xml:lang="uk">презентація MagicPoint</comment>
     <comment xml:lang="vi">Trình diễn MagicPoint</comment>
-    <comment xml:lang="zh_CN">MagicPoint 演示文稿</comment>
-    <comment xml:lang="zh_TW">MagicPoint 簡報檔</comment>
+    <comment xml:lang="zh-CN">MagicPoint 演示文稿</comment>
+    <comment xml:lang="zh-TW">MagicPoint 簡報</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-presentation"/>
     <glob pattern="*.mgp"/>
   </mime-type>
   <mime-type type="application/x-macbinary">
     <comment>Macintosh MacBinary file</comment>
+    <comment xml:lang="af">Macintosh MacBinary-lêer</comment>
     <comment xml:lang="ar">ملف Macintosh MacBinary</comment>
-    <comment xml:lang="be@latin">Fajł Macintosh MacBinary</comment>
+    <comment xml:lang="be-Latn">Fajł Macintosh MacBinary</comment>
     <comment xml:lang="bg">Файл — MacBinary</comment>
     <comment xml:lang="ca">fitxer MacBinary de Macintosh</comment>
     <comment xml:lang="cs">soubor MacBinary pro Macintosh </comment>
     <comment xml:lang="da">Macintosh MacBinary-fil</comment>
     <comment xml:lang="de">Macintosh-MacBinary-Datei</comment>
     <comment xml:lang="el">Εκτελέσιμο Macintosh MacBinary</comment>
-    <comment xml:lang="en_GB">Macintosh MacBinary file</comment>
+    <comment xml:lang="en-GB">Macintosh MacBinary file</comment>
     <comment xml:lang="eo">MacBinary-dosiero de Macintosh</comment>
     <comment xml:lang="es">archivo de Macintosh MacBinary</comment>
     <comment xml:lang="eu">Macintosh MacBinary fitxategia</comment>
     <comment xml:lang="fi">Macintosh MacBinary -tiedosto</comment>
     <comment xml:lang="fo">Macintosh MacBinary fíla</comment>
     <comment xml:lang="fr">fichier Macintosh MacBinary</comment>
+    <comment xml:lang="fur">file MacBinary di Macintosh</comment>
     <comment xml:lang="ga">comhad Macintosh MacBinary</comment>
     <comment xml:lang="gl">ficheiro MacBinary de Macintosh</comment>
     <comment xml:lang="he">קובץ בינרי של מקינטוש</comment>
@@ -15505,7 +16126,7 @@
     <comment xml:lang="oc">fichièr Macintosh MacBinary</comment>
     <comment xml:lang="pl">Plik MacBinary Macintosh</comment>
     <comment xml:lang="pt">ficheiro MacBinary de Macintosh</comment>
-    <comment xml:lang="pt_BR">Arquivo do Macintosh MacBinary</comment>
+    <comment xml:lang="pt-BR">Arquivo do Macintosh MacBinary</comment>
     <comment xml:lang="ro">Fișier Macintosh MacBinary</comment>
     <comment xml:lang="ru">Файл Macintosh MacBinary</comment>
     <comment xml:lang="sk">Súbor pre Macintosh MacBinary</comment>
@@ -15516,29 +16137,31 @@
     <comment xml:lang="tr">Macintosh MacBinary dosyası</comment>
     <comment xml:lang="uk">файл Macintosh MacBinary</comment>
     <comment xml:lang="vi">Tập tin nhị phân MacBinary của Macintosh</comment>
-    <comment xml:lang="zh_CN">Macintosh MacBinary 文件</comment>
-    <comment xml:lang="zh_TW">Macintosh MacBinary 檔</comment>
+    <comment xml:lang="zh-CN">Macintosh MacBinary 文件</comment>
+    <comment xml:lang="zh-TW">Macintosh MacBinary 檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="mBIN" type="string" offset="102"/>
+      <match type="string" value="mBIN" offset="102"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-matroska">
     <comment>Matroska stream</comment>
+    <comment xml:lang="af">Matroska-stroom</comment>
     <comment xml:lang="ar">دفق Matroska</comment>
-    <comment xml:lang="be@latin">Płyń Matroska</comment>
+    <comment xml:lang="be-Latn">Płyń Matroska</comment>
     <comment xml:lang="bg">Поток — Matroska</comment>
     <comment xml:lang="ca">flux Matroska</comment>
     <comment xml:lang="cs">proud Matroska</comment>
-    <comment xml:lang="da">Matroskastrøm</comment>
+    <comment xml:lang="da">Matroska-strøm</comment>
     <comment xml:lang="de">Matroska-Datenstrom</comment>
     <comment xml:lang="el">Ροή Matroska</comment>
-    <comment xml:lang="en_GB">Matroska stream</comment>
+    <comment xml:lang="en-GB">Matroska stream</comment>
     <comment xml:lang="es">flujo Matroska</comment>
     <comment xml:lang="eu">Matroska korrontea</comment>
     <comment xml:lang="fi">Matroska-virta</comment>
     <comment xml:lang="fo">Matroska streymur</comment>
     <comment xml:lang="fr">flux Matroska</comment>
+    <comment xml:lang="fur">flus Matroska</comment>
     <comment xml:lang="ga">sruth Matroska</comment>
     <comment xml:lang="gl">fluxo de Matroska</comment>
     <comment xml:lang="he">זרימת Matroska</comment>
@@ -15558,7 +16181,7 @@
     <comment xml:lang="oc">flux Matroska</comment>
     <comment xml:lang="pl">Strumień Matroska</comment>
     <comment xml:lang="pt">fluxo Matroska</comment>
-    <comment xml:lang="pt_BR">Transmissão do Matroska</comment>
+    <comment xml:lang="pt-BR">Transmissão do Matroska</comment>
     <comment xml:lang="ro">Flux Matroska</comment>
     <comment xml:lang="ru">Поток Matroska</comment>
     <comment xml:lang="sk">Stream Matroska</comment>
@@ -15569,38 +16192,40 @@
     <comment xml:lang="tr">Matroska akışı</comment>
     <comment xml:lang="uk">потік даних Matroska</comment>
     <comment xml:lang="vi">Luồng Matroska</comment>
-    <comment xml:lang="zh_CN">Matroska 流</comment>
-    <comment xml:lang="zh_TW">Matroska 串流</comment>
+    <comment xml:lang="zh-CN">Matroska 流</comment>
+    <comment xml:lang="zh-TW">Matroska 串流</comment>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      
-      <match value="0x1a45dfa3" type="big32" offset="0">
-        
-        <match value="0x4282" type="big16" offset="5:65">
-          
-          <match value="matroska" type="string" offset="8:75"/>
+      <!-- EBML ID -->
+      <match type="big32" value="0x1a45dfa3" offset="0">
+        <!-- DocumentType ID -->
+        <match type="big16" value="0x4282" offset="5:65">
+          <!-- DocumentType -->
+          <match type="string" value="matroska" offset="8:75"/>
         </match>
       </match>
     </magic>
   </mime-type>
   <mime-type type="video/x-matroska">
     <comment>Matroska video</comment>
+    <comment xml:lang="af">Matroska-video</comment>
     <comment xml:lang="ar">Matroska مرئي</comment>
     <comment xml:lang="ast">Videu en Matroska</comment>
-    <comment xml:lang="be@latin">Videa Matroska</comment>
+    <comment xml:lang="be-Latn">Videa Matroska</comment>
     <comment xml:lang="bg">Видео — Matroska</comment>
     <comment xml:lang="ca">vídeo Matroska</comment>
     <comment xml:lang="cs">video Matroska</comment>
-    <comment xml:lang="da">Matroskavideo</comment>
+    <comment xml:lang="da">Matroska-video</comment>
     <comment xml:lang="de">Matroska-Video</comment>
     <comment xml:lang="el">Βίντεο Matroska</comment>
-    <comment xml:lang="en_GB">Matroska video</comment>
+    <comment xml:lang="en-GB">Matroska video</comment>
     <comment xml:lang="eo">Matroska-video</comment>
     <comment xml:lang="es">vídeo Matroska</comment>
     <comment xml:lang="eu">Matroska bideoa</comment>
     <comment xml:lang="fi">Matroska-video</comment>
     <comment xml:lang="fo">Matroska video</comment>
     <comment xml:lang="fr">vidéo Matroska</comment>
+    <comment xml:lang="fur">video Matroska</comment>
     <comment xml:lang="ga">físeán Matroska</comment>
     <comment xml:lang="gl">vídeo de Matroska</comment>
     <comment xml:lang="he">וידאו Matroska</comment>
@@ -15622,7 +16247,7 @@
     <comment xml:lang="oc">vidèo Matroska</comment>
     <comment xml:lang="pl">Plik wideo Matroska</comment>
     <comment xml:lang="pt">vídeo Matroska</comment>
-    <comment xml:lang="pt_BR">Vídeo Matroska</comment>
+    <comment xml:lang="pt-BR">Vídeo Matroska</comment>
     <comment xml:lang="ro">Video Matroska</comment>
     <comment xml:lang="ru">Видео Matroska</comment>
     <comment xml:lang="sk">Video Matroska</comment>
@@ -15633,24 +16258,27 @@
     <comment xml:lang="tr">Matroska video</comment>
     <comment xml:lang="uk">відеокліп Matroska</comment>
     <comment xml:lang="vi">Ảnh động Matroska</comment>
-    <comment xml:lang="zh_CN">Matroska 视频</comment>
-    <comment xml:lang="zh_TW">Matroska 視訊</comment>
+    <comment xml:lang="zh-CN">Matroska 视频</comment>
+    <comment xml:lang="zh-TW">Matroska 視訊</comment>
     <glob pattern="*.mkv"/>
     <sub-class-of type="application/x-matroska"/>
   </mime-type>
   <mime-type type="video/x-matroska-3d">
     <comment>Matroska 3D video</comment>
+    <comment xml:lang="af">Matroska 3D video</comment>
     <comment xml:lang="ast">Videu en Matroska 3D</comment>
+    <comment xml:lang="bg">Видео — Matroska 3D</comment>
     <comment xml:lang="ca">vídeo Matroska 3D</comment>
     <comment xml:lang="cs">3D video Matroska</comment>
     <comment xml:lang="da">Matroska 3D-video</comment>
     <comment xml:lang="de">Matroska 3D-Video</comment>
     <comment xml:lang="el">Βίντεο 3Δ Matroska</comment>
-    <comment xml:lang="en_GB">Matroska 3D video</comment>
+    <comment xml:lang="en-GB">Matroska 3D video</comment>
     <comment xml:lang="es">vídeo Matroska en 3D</comment>
     <comment xml:lang="eu">Matroska 3D bideoa</comment>
     <comment xml:lang="fi">Matroska 3D-video</comment>
     <comment xml:lang="fr">vidéo Matroska 3D</comment>
+    <comment xml:lang="fur">video 3D Matroska</comment>
     <comment xml:lang="ga">físeán Matroska 3D</comment>
     <comment xml:lang="gl">Video Matroska 3D</comment>
     <comment xml:lang="he">סרטון תלת ממדי מסוג Matroska</comment>
@@ -15664,7 +16292,7 @@
     <comment xml:lang="oc">vidèo Matroska 3D</comment>
     <comment xml:lang="pl">Plik wideo Matroska 3D</comment>
     <comment xml:lang="pt">vídeo 3D Matroska</comment>
-    <comment xml:lang="pt_BR">Vídeo 3D Matroska</comment>
+    <comment xml:lang="pt-BR">Vídeo 3D Matroska</comment>
     <comment xml:lang="ru">Видео Matroska 3D</comment>
     <comment xml:lang="sk">3D video Matroska</comment>
     <comment xml:lang="sl">Video datoteka Matroska 3D</comment>
@@ -15672,28 +16300,30 @@
     <comment xml:lang="sv">Matroska 3D-video</comment>
     <comment xml:lang="tr">Matroska 3B video</comment>
     <comment xml:lang="uk">відеокліп Matroska 3D</comment>
-    <comment xml:lang="zh_CN">Matroska 3D 视频</comment>
-    <comment xml:lang="zh_TW">Matroska 3D 視訊</comment>
+    <comment xml:lang="zh-CN">Matroska 3D 视频</comment>
+    <comment xml:lang="zh-TW">Matroska 3D 視訊</comment>
     <glob pattern="*.mk3d"/>
     <sub-class-of type="application/x-matroska"/>
   </mime-type>
   <mime-type type="audio/x-matroska">
     <comment>Matroska audio</comment>
+    <comment xml:lang="af">Matroska-oudio</comment>
     <comment xml:lang="ar">سمعي Matroska</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Matroska</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Matroska</comment>
     <comment xml:lang="bg">Аудио — Matroska</comment>
-    <comment xml:lang="ca">àudio de Matroska</comment>
+    <comment xml:lang="ca">àudio Matroska</comment>
     <comment xml:lang="cs">zvuk Matroska</comment>
-    <comment xml:lang="da">Matroskalyd</comment>
+    <comment xml:lang="da">Matroska-lyd</comment>
     <comment xml:lang="de">Matroska-Audio</comment>
     <comment xml:lang="el">Ήχος Matroska</comment>
-    <comment xml:lang="en_GB">Matroska audio</comment>
+    <comment xml:lang="en-GB">Matroska audio</comment>
     <comment xml:lang="eo">Matroska-sondosiero</comment>
-    <comment xml:lang="es">sonido Matroska</comment>
+    <comment xml:lang="es">audio Matroska</comment>
     <comment xml:lang="eu">Matroska audioa</comment>
     <comment xml:lang="fi">Matroska-ääni</comment>
     <comment xml:lang="fo">Matroska ljóður</comment>
     <comment xml:lang="fr">audio Matroska</comment>
+    <comment xml:lang="fur">audio Matroska</comment>
     <comment xml:lang="ga">fuaim Matroska</comment>
     <comment xml:lang="gl">son de Matroska</comment>
     <comment xml:lang="he">שמע Matroska</comment>
@@ -15714,7 +16344,7 @@
     <comment xml:lang="oc">àudio Matroska</comment>
     <comment xml:lang="pl">Plik dźwiękowy Matroska</comment>
     <comment xml:lang="pt">áudio Matroska</comment>
-    <comment xml:lang="pt_BR">Áudio Matroska</comment>
+    <comment xml:lang="pt-BR">Áudio Matroska</comment>
     <comment xml:lang="ro">Audio Matroska</comment>
     <comment xml:lang="ru">Аудио Matroska</comment>
     <comment xml:lang="sk">Zvuk Matroska</comment>
@@ -15725,13 +16355,14 @@
     <comment xml:lang="tr">Matroska ses</comment>
     <comment xml:lang="uk">звук Matroska</comment>
     <comment xml:lang="vi">Âm thanh Matroska</comment>
-    <comment xml:lang="zh_CN">Matroska 音频</comment>
-    <comment xml:lang="zh_TW">Matroska 音訊</comment>
+    <comment xml:lang="zh-CN">Matroska 音频</comment>
+    <comment xml:lang="zh-TW">Matroska 音訊</comment>
     <glob pattern="*.mka"/>
     <sub-class-of type="application/x-matroska"/>
   </mime-type>
   <mime-type type="video/webm">
     <comment>WebM video</comment>
+    <comment xml:lang="af">WebM-video</comment>
     <comment xml:lang="ar">WebM مرئي</comment>
     <comment xml:lang="ast">Videu en WebM</comment>
     <comment xml:lang="bg">Видео — WebM</comment>
@@ -15740,13 +16371,14 @@
     <comment xml:lang="da">WebM-video</comment>
     <comment xml:lang="de">WebM-Video</comment>
     <comment xml:lang="el">Βίντεο WebM</comment>
-    <comment xml:lang="en_GB">WebM video</comment>
+    <comment xml:lang="en-GB">WebM video</comment>
     <comment xml:lang="eo">WebM-video</comment>
     <comment xml:lang="es">vídeo WebM</comment>
     <comment xml:lang="eu">WebM bideoa</comment>
     <comment xml:lang="fi">WebM-video</comment>
     <comment xml:lang="fo">WebM video</comment>
     <comment xml:lang="fr">vidéo WebM</comment>
+    <comment xml:lang="fur">video WebM</comment>
     <comment xml:lang="ga">físeán WebM</comment>
     <comment xml:lang="gl">vídeo WebM</comment>
     <comment xml:lang="he">וידאו WebM</comment>
@@ -15764,7 +16396,7 @@
     <comment xml:lang="oc">vidèo WebM</comment>
     <comment xml:lang="pl">Plik wideo WebM</comment>
     <comment xml:lang="pt">vídeo WebM</comment>
-    <comment xml:lang="pt_BR">Vídeo WebM</comment>
+    <comment xml:lang="pt-BR">Vídeo WebM</comment>
     <comment xml:lang="ro">Video WebM</comment>
     <comment xml:lang="ru">Видео WebM</comment>
     <comment xml:lang="sk">Video WebM</comment>
@@ -15773,36 +16405,38 @@
     <comment xml:lang="sv">WebM-video</comment>
     <comment xml:lang="tr">WebM video</comment>
     <comment xml:lang="uk">відео WebM</comment>
-    <comment xml:lang="zh_CN">WebM 视频</comment>
-    <comment xml:lang="zh_TW">WebM 視訊</comment>
+    <comment xml:lang="zh-CN">WebM 视频</comment>
+    <comment xml:lang="zh-TW">WebM 視訊</comment>
     <glob pattern="*.webm"/>
     <magic priority="50">
-      
-      <match value="0x1a45dfa3" type="big32" offset="0">
-        
-        <match value="0x4282" type="big16" offset="5:65">
-          
-          <match value="webm" type="string" offset="8:75"/>
+      <!-- EBML ID -->
+      <match type="big32" value="0x1a45dfa3" offset="0">
+        <!-- DocumentType ID -->
+        <match type="big16" value="0x4282" offset="5:65">
+          <!-- DocumentType -->
+          <match type="string" value="webm" offset="8:75"/>
         </match>
       </match>
     </magic>
   </mime-type>
   <mime-type type="audio/webm">
     <comment>WebM audio</comment>
+    <comment xml:lang="af">WebM-oudio</comment>
     <comment xml:lang="ar">WebM سمعي</comment>
     <comment xml:lang="bg">Аудио — WebM</comment>
-    <comment xml:lang="ca">àudio de WebM</comment>
+    <comment xml:lang="ca">àudio WebM</comment>
     <comment xml:lang="cs">zvuk WebM</comment>
     <comment xml:lang="da">WebM-lyd</comment>
     <comment xml:lang="de">WebM-Audio</comment>
     <comment xml:lang="el">Ήχος WebM</comment>
-    <comment xml:lang="en_GB">WebM audio</comment>
+    <comment xml:lang="en-GB">WebM audio</comment>
     <comment xml:lang="eo">WebM-sondosiero</comment>
-    <comment xml:lang="es">sonido WebM</comment>
+    <comment xml:lang="es">audio WebM</comment>
     <comment xml:lang="eu">WebM audioa</comment>
     <comment xml:lang="fi">WebM-ääni</comment>
     <comment xml:lang="fo">WebM ljóður</comment>
     <comment xml:lang="fr">audio WebM</comment>
+    <comment xml:lang="fur">audio WebM</comment>
     <comment xml:lang="ga">fuaim WebM</comment>
     <comment xml:lang="gl">son WebM</comment>
     <comment xml:lang="he">שמע WebM</comment>
@@ -15820,7 +16454,7 @@
     <comment xml:lang="oc">àudio WebM</comment>
     <comment xml:lang="pl">Plik dźwiękowy WebM</comment>
     <comment xml:lang="pt">áudio WebM</comment>
-    <comment xml:lang="pt_BR">Áudio WebM</comment>
+    <comment xml:lang="pt-BR">Áudio WebM</comment>
     <comment xml:lang="ro">Audio WebM</comment>
     <comment xml:lang="ru">Аудио WebM</comment>
     <comment xml:lang="sk">Zvuk WebM</comment>
@@ -15829,22 +16463,25 @@
     <comment xml:lang="sv">WebM-ljud</comment>
     <comment xml:lang="tr">WebM sesi</comment>
     <comment xml:lang="uk">звук WebM</comment>
-    <comment xml:lang="zh_CN">WebM 音频</comment>
-    <comment xml:lang="zh_TW">WebM 音訊</comment>
+    <comment xml:lang="zh-CN">WebM 音频</comment>
+    <comment xml:lang="zh-TW">WebM 音訊</comment>
     <sub-class-of type="video/webm"/>
   </mime-type>
   <mime-type type="application/x-mimearchive">
     <comment>MHTML web archive</comment>
+    <comment xml:lang="af">MHTML-webargief</comment>
+    <comment xml:lang="bg">Архив — MHTML</comment>
     <comment xml:lang="ca">arxiu web MHTML</comment>
     <comment xml:lang="cs">webový archiv MHTML</comment>
-    <comment xml:lang="da">MHTML-netarkiv</comment>
+    <comment xml:lang="da">MHTML-webarkiv</comment>
     <comment xml:lang="de">MHTML-Webarchiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο ιστού MHTML</comment>
-    <comment xml:lang="en_GB">MHTML web archive</comment>
+    <comment xml:lang="en-GB">MHTML web archive</comment>
     <comment xml:lang="es">archivador web MHTML</comment>
     <comment xml:lang="eu">MHTML web artxiboa</comment>
     <comment xml:lang="fi">MHTML-kooste</comment>
     <comment xml:lang="fr">archive web MHTML</comment>
+    <comment xml:lang="fur">archivi web MHTML</comment>
     <comment xml:lang="ga">cartlann ghréasáin MHTML</comment>
     <comment xml:lang="gl">Arquivo web MHTML</comment>
     <comment xml:lang="he">ארכיון רשת MHTML</comment>
@@ -15860,7 +16497,7 @@
     <comment xml:lang="oc">archiu web MHTML</comment>
     <comment xml:lang="pl">Archiwum witryny MHTML</comment>
     <comment xml:lang="pt">arquivo web MHTML</comment>
-    <comment xml:lang="pt_BR">Pacote web MHTML</comment>
+    <comment xml:lang="pt-BR">Pacote web MHTML</comment>
     <comment xml:lang="ru">Веб-архив MHTML</comment>
     <comment xml:lang="sk">Webový archív MHTML</comment>
     <comment xml:lang="sl">Spletni arhiv MHTML</comment>
@@ -15868,8 +16505,8 @@
     <comment xml:lang="sv">MHTML-webbarkiv</comment>
     <comment xml:lang="tr">MHTML web arşivi</comment>
     <comment xml:lang="uk">вебархів MHTML</comment>
-    <comment xml:lang="zh_CN">MHTML 网络归档</comment>
-    <comment xml:lang="zh_TW">MHTML 網頁封存檔</comment>
+    <comment xml:lang="zh-CN">MHTML 网络归档</comment>
+    <comment xml:lang="zh-TW">MHTML 網頁封存檔</comment>
     <acronym>MHTML</acronym>
     <expanded-acronym>MIME HTML</expanded-acronym>
     <glob pattern="*.mhtml"/>
@@ -15878,6 +16515,7 @@
   </mime-type>
   <mime-type type="application/mxf">
     <comment>MXF video</comment>
+    <comment xml:lang="af">MXF-video</comment>
     <comment xml:lang="ar">MXF مرئي</comment>
     <comment xml:lang="ast">Videu en MXF</comment>
     <comment xml:lang="bg">Видео — MXF</comment>
@@ -15886,13 +16524,14 @@
     <comment xml:lang="da">MXF-video</comment>
     <comment xml:lang="de">MXF-Video</comment>
     <comment xml:lang="el">Βίντεο MXF</comment>
-    <comment xml:lang="en_GB">MXF video</comment>
+    <comment xml:lang="en-GB">MXF video</comment>
     <comment xml:lang="eo">MXF-video</comment>
     <comment xml:lang="es">vídeo MXF</comment>
     <comment xml:lang="eu">MXF bideoa</comment>
     <comment xml:lang="fi">MXF-video</comment>
     <comment xml:lang="fo">MXF video</comment>
     <comment xml:lang="fr">vidéo MXF</comment>
+    <comment xml:lang="fur">video MXF</comment>
     <comment xml:lang="ga">físeán MXF</comment>
     <comment xml:lang="gl">vídeo MXF</comment>
     <comment xml:lang="he">וידאו MXF</comment>
@@ -15911,7 +16550,7 @@
     <comment xml:lang="oc">vidèo MXF</comment>
     <comment xml:lang="pl">Plik wideo MXF</comment>
     <comment xml:lang="pt">vídeo MXF</comment>
-    <comment xml:lang="pt_BR">Vídeo MXF</comment>
+    <comment xml:lang="pt-BR">Vídeo MXF</comment>
     <comment xml:lang="ro">Video MXF</comment>
     <comment xml:lang="ru">Видео MXF</comment>
     <comment xml:lang="sk">Video MXF</comment>
@@ -15920,33 +16559,35 @@
     <comment xml:lang="sv">MXF-video</comment>
     <comment xml:lang="tr">MXF video</comment>
     <comment xml:lang="uk">відеокліп MXF</comment>
-    <comment xml:lang="zh_CN">MXF 视频</comment>
-    <comment xml:lang="zh_TW">MXF 視訊</comment>
+    <comment xml:lang="zh-CN">MXF 视频</comment>
+    <comment xml:lang="zh-TW">MXF 視訊</comment>
     <acronym>MXF</acronym>
     <expanded-acronym>Material Exchange Format</expanded-acronym>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      <match value="\x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02\x01\x01\x02" type="string" offset="0:256"/>
+      <match type="string" value="\x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02\x01\x01\x02" offset="0:256"/>
     </magic>
     <glob pattern="*.mxf"/>
   </mime-type>
   <mime-type type="text/x-ocl">
     <comment>OCL file</comment>
+    <comment xml:lang="af">OCL-lêer</comment>
     <comment xml:lang="ar">ملف OCL</comment>
-    <comment xml:lang="be@latin">Fajł OCL</comment>
+    <comment xml:lang="be-Latn">Fajł OCL</comment>
     <comment xml:lang="bg">Файл — OCL</comment>
     <comment xml:lang="ca">fitxer OCL</comment>
     <comment xml:lang="cs">soubor OCL</comment>
     <comment xml:lang="da">OCL-fil</comment>
     <comment xml:lang="de">OCL-Datei</comment>
     <comment xml:lang="el">Αρχείο OCL</comment>
-    <comment xml:lang="en_GB">OCL file</comment>
+    <comment xml:lang="en-GB">OCL file</comment>
     <comment xml:lang="eo">OCL-dosiero</comment>
     <comment xml:lang="es">archivo OCL</comment>
     <comment xml:lang="eu">OCL fitxategia</comment>
     <comment xml:lang="fi">OCL-tiedosto</comment>
     <comment xml:lang="fo">OCL fíla</comment>
     <comment xml:lang="fr">fichier OCL</comment>
+    <comment xml:lang="fur">file OCL</comment>
     <comment xml:lang="ga">comhad OCL</comment>
     <comment xml:lang="gl">ficheiro OCL</comment>
     <comment xml:lang="he">קובץ OCL</comment>
@@ -15966,7 +16607,7 @@
     <comment xml:lang="oc">fichièr OCL</comment>
     <comment xml:lang="pl">Plik OCL</comment>
     <comment xml:lang="pt">ficheiro OCL</comment>
-    <comment xml:lang="pt_BR">Arquivo OCL</comment>
+    <comment xml:lang="pt-BR">Arquivo OCL</comment>
     <comment xml:lang="ro">Fișier OCL</comment>
     <comment xml:lang="ru">Файл OCL</comment>
     <comment xml:lang="sk">Súbor OCL</comment>
@@ -15977,54 +16618,39 @@
     <comment xml:lang="tr">OCL dosyası</comment>
     <comment xml:lang="uk">файл OCL</comment>
     <comment xml:lang="vi">Tập tin OCL</comment>
-    <comment xml:lang="zh_CN">OCL 文件</comment>
-    <comment xml:lang="zh_TW">OCL 檔</comment>
+    <comment xml:lang="zh-CN">OCL 文件</comment>
+    <comment xml:lang="zh-TW">OCL 檔</comment>
     <acronym>OCL</acronym>
     <expanded-acronym>Object Constraint Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.ocl"/>
   </mime-type>
   <mime-type type="text/x-cobol">
-    <comment>COBOL source file</comment>
+    <comment>COBOL source code</comment>
     <comment xml:lang="bg">Изходен код — COBOL</comment>
     <comment xml:lang="ca">codi font en COBOL</comment>
-    <comment xml:lang="cs">zdrojový soubor COBOL</comment>
-    <comment xml:lang="da">COBOL-kildefil</comment>
-    <comment xml:lang="de">COBOL-Quelldatei</comment>
-    <comment xml:lang="el">Πηγαίο αρχείο COBOL</comment>
-    <comment xml:lang="en_GB">COBOL source file</comment>
-    <comment xml:lang="eo">COBOL-fontdosiero</comment>
-    <comment xml:lang="es">archivo fuente de COBOL</comment>
+    <comment xml:lang="da">COBOL-kildekode</comment>
+    <comment xml:lang="de">COBOL-Quelltext</comment>
+    <comment xml:lang="en-GB">COBOL source code</comment>
+    <comment xml:lang="es">código fuente en COBOL</comment>
     <comment xml:lang="eu">COBOL iturburu-kodea</comment>
     <comment xml:lang="fi">COBOL-lähdekoodi</comment>
-    <comment xml:lang="fr">fichier source COBOL</comment>
-    <comment xml:lang="ga">cód foinseach COBOL</comment>
-    <comment xml:lang="gl">ficheiro fonte de COBOL</comment>
-    <comment xml:lang="he">קובץ מקור של COBOL</comment>
-    <comment xml:lang="hr">COBOL izvorna datoteka</comment>
-    <comment xml:lang="hu">COBOL forrásfájl</comment>
-    <comment xml:lang="ia">File de codice fonte COBOL</comment>
-    <comment xml:lang="id">Berkas sumber COBOL</comment>
-    <comment xml:lang="it">File sorgente COBOL</comment>
-    <comment xml:lang="ja">COBOL ソースファイル</comment>
-    <comment xml:lang="ka">COBOL-ის საწყისი ფაილი</comment>
+    <comment xml:lang="fr">code source COBOL</comment>
+    <comment xml:lang="hr">COBOL izvorni kôd</comment>
+    <comment xml:lang="hu">COBOL forráskód</comment>
+    <comment xml:lang="id">Kode sumber COBOL</comment>
+    <comment xml:lang="it">Codice sorgente COBOL</comment>
     <comment xml:lang="kk">COBOL бастапқы коды</comment>
-    <comment xml:lang="ko">COBOL 소스 파일</comment>
-    <comment xml:lang="lv">COBOL pirmkods</comment>
-    <comment xml:lang="nl">COBOL bronbestand</comment>
-    <comment xml:lang="oc">fichièr font COBOL</comment>
-    <comment xml:lang="pl">Plik źródłowy COBOL</comment>
-    <comment xml:lang="pt">ficheiro origem COBOL</comment>
-    <comment xml:lang="pt_BR">Arquivo de código-fonte em COBOL</comment>
-    <comment xml:lang="ru">Файл исходного кода на COBOL</comment>
-    <comment xml:lang="sk">Zdrojový súbor COBOLu</comment>
-    <comment xml:lang="sl">Izvorna koda COBOL</comment>
-    <comment xml:lang="sr">изворна датотека КОБОЛ-а</comment>
-    <comment xml:lang="sv">COBOL-källkodsfil</comment>
-    <comment xml:lang="tr">COBOL kaynak dosyası</comment>
+    <comment xml:lang="ko">코볼 소스 코드</comment>
+    <comment xml:lang="pl">Kod źródłowy COBOL</comment>
+    <comment xml:lang="pt-BR">Código-fonte COBOL</comment>
+    <comment xml:lang="ru">Исходный код COBOL</comment>
+    <comment xml:lang="sk">Zdrojový kód COBOL</comment>
+    <comment xml:lang="sv">COBOL-källkod</comment>
+    <comment xml:lang="tr">COBOL kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою COBOL</comment>
-    <comment xml:lang="zh_CN">COBOL 源文件</comment>
-    <comment xml:lang="zh_TW">COBOL 源檔</comment>
+    <comment xml:lang="zh-CN">COBOL 源代码</comment>
+    <comment xml:lang="zh-TW">COBOL 原始碼</comment>
     <acronym>COBOL</acronym>
     <expanded-acronym>COmmon Business Oriented Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -16033,24 +16659,26 @@
   </mime-type>
   <mime-type type="application/x-mobipocket-ebook">
     <comment>Mobipocket e-book</comment>
+    <comment xml:lang="af">Mobipocket e-boek</comment>
     <comment xml:lang="bg">Е-книга — Mobipocket</comment>
     <comment xml:lang="ca">llibre electrònic Mobipocket </comment>
     <comment xml:lang="cs">elektronická kniha Mobipocket</comment>
     <comment xml:lang="da">Mobipocket e-bog</comment>
     <comment xml:lang="de">Mobipocket E-Book</comment>
     <comment xml:lang="el">Ηλεκτρονικό βιβλίο Mobipocket</comment>
-    <comment xml:lang="en_GB">Mobipocket e-book</comment>
+    <comment xml:lang="en-GB">Mobipocket e-book</comment>
     <comment xml:lang="es">libro electrónico de Mobipocket</comment>
     <comment xml:lang="eu">Mobipocket liburua</comment>
     <comment xml:lang="fi">Mobipocket e-kirja</comment>
     <comment xml:lang="fr">livre numérique Mobipocket</comment>
+    <comment xml:lang="fur">e-book Mobipocket</comment>
     <comment xml:lang="ga">r-leabhar Mobipocket</comment>
     <comment xml:lang="gl">E-book Mobipocket</comment>
     <comment xml:lang="he">ספר אלקטרוני של Mobipocket</comment>
     <comment xml:lang="hr">Mobipocket e-knjiga</comment>
     <comment xml:lang="hu">Mobipocket e-könyv</comment>
     <comment xml:lang="ia">E-libro Mobipocket</comment>
-    <comment xml:lang="id">e-book Mobipocket</comment>
+    <comment xml:lang="id">E-book Mobipocket</comment>
     <comment xml:lang="it">E-book Mobipocket</comment>
     <comment xml:lang="ja">Mobipocket 電子書籍</comment>
     <comment xml:lang="ka">Mobipocket-ის ელწიგნი</comment>
@@ -16061,7 +16689,7 @@
     <comment xml:lang="oc">libre numeric Mobipocket</comment>
     <comment xml:lang="pl">E-book Mobipocket</comment>
     <comment xml:lang="pt">ebook Mobipocket</comment>
-    <comment xml:lang="pt_BR">E-book Mobipocket</comment>
+    <comment xml:lang="pt-BR">E-book Mobipocket</comment>
     <comment xml:lang="ru">Электронная книга Mobipocket</comment>
     <comment xml:lang="sk">E-kniha Mobipocket</comment>
     <comment xml:lang="sl">e-knjiga Mobipocket</comment>
@@ -16069,38 +16697,40 @@
     <comment xml:lang="sv">Mobipocket-e-bok</comment>
     <comment xml:lang="tr">Mobipocket e-kitap</comment>
     <comment xml:lang="uk">електронна книга Mobipocket</comment>
-    <comment xml:lang="zh_CN">Mobipocket 电子书</comment>
-    <comment xml:lang="zh_TW">Mobipocket e-book</comment>
+    <comment xml:lang="zh-CN">Mobipocket 电子书</comment>
+    <comment xml:lang="zh-TW">Mobipocket e-book</comment>
     <sub-class-of type="application/vnd.palm"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.mobi"/>
     <glob pattern="*.prc"/>
     <magic priority="30">
-      
-      <match value="TEXtREAd" type="string" offset="60"/>
+      <!-- This also matches AportisDoc, so lower the priority and prefer extension -->
+      <match type="string" offset="60" value="TEXtREAd"/>
     </magic>
     <magic priority="80">
-      <match value="BOOKMOBI" type="string" offset="60"/>
+      <match type="string" offset="60" value="BOOKMOBI"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-mif">
     <comment>Adobe FrameMaker MIF document</comment>
+    <comment xml:lang="af">Adobe FrameMaker MIF-dokument</comment>
     <comment xml:lang="ar">مستند أدوبي الصانع للإطارات MIF</comment>
     <comment xml:lang="ast">Documentu MIF d'Adobe FrameMaker</comment>
-    <comment xml:lang="be@latin">Dakument Adobe FrameMaker MIF</comment>
+    <comment xml:lang="be-Latn">Dakument Adobe FrameMaker MIF</comment>
     <comment xml:lang="bg">Документ — Adobe FrameMaker MIF</comment>
     <comment xml:lang="ca">document MIF d'Adobe FrameMaker</comment>
     <comment xml:lang="cs">dokument Adobe FrameMaker MIF</comment>
     <comment xml:lang="da">Adobe FrameMaker MIF-dokument</comment>
     <comment xml:lang="de">Adobe-FrameMaker-MIF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο MIF του Adobe FrameMaker </comment>
-    <comment xml:lang="en_GB">Adobe FrameMaker MIF document</comment>
+    <comment xml:lang="en-GB">Adobe FrameMaker MIF document</comment>
     <comment xml:lang="eo">MIF-dokumento de Adobe FrameMaker</comment>
     <comment xml:lang="es">documento MIF de Adobe FrameMaker</comment>
     <comment xml:lang="eu">Adobe FrameMaker-en MIF dokumentua</comment>
     <comment xml:lang="fi">Adobe FrameMaker MIF -asiakirja</comment>
     <comment xml:lang="fo">Adobe FrameMaker MIF skjal</comment>
     <comment xml:lang="fr">document MIF Adobe FrameMaker</comment>
+    <comment xml:lang="fur">document MIF di Adobe FrameMaker</comment>
     <comment xml:lang="ga">cáipéis MIF Adobe FrameMaker</comment>
     <comment xml:lang="gl">documento MIF de Adobe FrameMaker</comment>
     <comment xml:lang="he">מסמך MIF של Adobe FrameMaker</comment>
@@ -16121,7 +16751,7 @@
     <comment xml:lang="oc">document MIF Adobe FrameMaker</comment>
     <comment xml:lang="pl">Dokument MIF Adobe FrameMaker</comment>
     <comment xml:lang="pt">documento Adobe FrameMaker MIF</comment>
-    <comment xml:lang="pt_BR">Documento MIF do Adobe FrameMaker</comment>
+    <comment xml:lang="pt-BR">Documento MIF do Adobe FrameMaker</comment>
     <comment xml:lang="ro">Document Adobe FrameMaker MIF</comment>
     <comment xml:lang="ru">Документ Adobe FrameMaker MIF</comment>
     <comment xml:lang="sk">Dokument Adobe FrameMaker MIF</comment>
@@ -16132,27 +16762,29 @@
     <comment xml:lang="tr">Adobe FrameMaker MIF belgesi</comment>
     <comment xml:lang="uk">документ Adobe FrameMaker MIF</comment>
     <comment xml:lang="vi">Tài liệu Adobe FrameMaker MIF</comment>
-    <comment xml:lang="zh_CN">Adobe FrameMaker MIF 文档</comment>
-    <comment xml:lang="zh_TW">Adobe FrameMaker MIF 文件</comment>
+    <comment xml:lang="zh-CN">Adobe FrameMaker MIF 文档</comment>
+    <comment xml:lang="zh-TW">Adobe FrameMaker MIF 文件</comment>
     <glob pattern="*.mif"/>
   </mime-type>
   <mime-type type="application/x-mozilla-bookmarks">
     <comment>Mozilla bookmarks</comment>
+    <comment xml:lang="af">Mozilla-boekmerke</comment>
     <comment xml:lang="ar">علامات موزيلا</comment>
-    <comment xml:lang="be@latin">Zakładki Mozilla</comment>
+    <comment xml:lang="be-Latn">Zakładki Mozilla</comment>
     <comment xml:lang="bg">Отметки — Mozilla</comment>
     <comment xml:lang="ca">llista d'adreces d'interès de Mozilla</comment>
     <comment xml:lang="cs">záložky Mozilla</comment>
     <comment xml:lang="da">Mozillabogmærker</comment>
     <comment xml:lang="de">Mozilla-Lesezeichen</comment>
     <comment xml:lang="el">Σελιδοδείκτες Mozilla</comment>
-    <comment xml:lang="en_GB">Mozilla bookmarks</comment>
+    <comment xml:lang="en-GB">Mozilla bookmarks</comment>
     <comment xml:lang="eo">Mozilla-legosignoj</comment>
     <comment xml:lang="es">marcadores de Mozilla</comment>
     <comment xml:lang="eu">Mozillako laster-markak</comment>
     <comment xml:lang="fi">Mozilla-kirjanmerkit</comment>
     <comment xml:lang="fo">Mozilla bókamerki</comment>
     <comment xml:lang="fr">marque-pages Mozilla</comment>
+    <comment xml:lang="fur">segnelibris Mozilla</comment>
     <comment xml:lang="ga">leabharmharcanna Mozilla</comment>
     <comment xml:lang="gl">Marcadores de Mozilla</comment>
     <comment xml:lang="he">סימניה של Mozilla</comment>
@@ -16173,7 +16805,7 @@
     <comment xml:lang="oc">marcapaginas Mozilla</comment>
     <comment xml:lang="pl">Zakładki Mozilla</comment>
     <comment xml:lang="pt">marcadores do Mozilla</comment>
-    <comment xml:lang="pt_BR">Favoritos do Mozilla</comment>
+    <comment xml:lang="pt-BR">Favoritos do Mozilla</comment>
     <comment xml:lang="ro">Semne de carte Mozilla</comment>
     <comment xml:lang="ru">Закладки Mozilla</comment>
     <comment xml:lang="sk">Záložky Mozilla</comment>
@@ -16184,32 +16816,34 @@
     <comment xml:lang="tr">Mozilla yer imleri</comment>
     <comment xml:lang="uk">закладки Mozilla</comment>
     <comment xml:lang="vi">Liên kết đã lưu Mozilla</comment>
-    <comment xml:lang="zh_CN">Mozilla 书签</comment>
-    <comment xml:lang="zh_TW">Mozilla 書籤</comment>
+    <comment xml:lang="zh-CN">Mozilla 书签</comment>
+    <comment xml:lang="zh-TW">Mozilla 書籤</comment>
     <sub-class-of type="text/html"/>
     <generic-icon name="text-html"/>
     <magic priority="80">
-      <match value="&lt;!DOCTYPE NETSCAPE-Bookmark-file-1&gt;" type="string" offset="0:64"/>
+      <match type="string" value="&lt;!DOCTYPE NETSCAPE-Bookmark-file-1&gt;" offset="0:64"/>
     </magic>
     <alias type="application/x-netscape-bookmarks"/>
   </mime-type>
   <mime-type type="application/x-ms-dos-executable">
     <comment>DOS/Windows executable</comment>
+    <comment xml:lang="af">DOS/Windows-uitvoerbaar</comment>
     <comment xml:lang="ar">تنفيذي DOS/Windows</comment>
-    <comment xml:lang="be@latin">Vykonvalny fajł DOS/Windows</comment>
+    <comment xml:lang="be-Latn">Vykonvalny fajł DOS/Windows</comment>
     <comment xml:lang="bg">Изпълним файл — DOS/Windows</comment>
     <comment xml:lang="ca">executable de DOS o de Windows</comment>
     <comment xml:lang="cs">spustitelný soubor pro DOS/Windows</comment>
     <comment xml:lang="da">DOS-/Windowskørbar</comment>
     <comment xml:lang="de">DOS/Windows-Programmdatei</comment>
     <comment xml:lang="el">Εκτελέσιμο DOS/Windows</comment>
-    <comment xml:lang="en_GB">DOS/Windows executable</comment>
+    <comment xml:lang="en-GB">DOS/Windows executable</comment>
     <comment xml:lang="eo">DOS/Windows-plenumebla</comment>
     <comment xml:lang="es">ejecutable de DOS/Windows</comment>
     <comment xml:lang="eu">DOS/Windows-eko exekutagarria</comment>
     <comment xml:lang="fi">DOS/Windows-ohjelma</comment>
     <comment xml:lang="fo">DOS/Windows inningarfør</comment>
     <comment xml:lang="fr">exécutable DOS/Windows</comment>
+    <comment xml:lang="fur">eseguibil DOS/Windows</comment>
     <comment xml:lang="ga">comhad inrite DOS/Windows</comment>
     <comment xml:lang="gl">executábel de DOS/Windows</comment>
     <comment xml:lang="he">קובץ בר־הרצה של DOS/חלונות</comment>
@@ -16231,7 +16865,7 @@
     <comment xml:lang="oc">executable DOS/Windows</comment>
     <comment xml:lang="pl">Program DOS/Windows</comment>
     <comment xml:lang="pt">executável DOS/Windows</comment>
-    <comment xml:lang="pt_BR">Executável do DOS/Windows</comment>
+    <comment xml:lang="pt-BR">Executável do DOS/Windows</comment>
     <comment xml:lang="ro">Executabil DOS/Windows</comment>
     <comment xml:lang="ru">Исполняемый файл DOS/Windows</comment>
     <comment xml:lang="sk">Spustiteľný súbor pre DOS/Windows</comment>
@@ -16239,33 +16873,35 @@
     <comment xml:lang="sq">I ekzekutueshëm DOS/Windows</comment>
     <comment xml:lang="sr">ДОС/Виндоуз извршна</comment>
     <comment xml:lang="sv">Körbar DOS/Windows-fil</comment>
-    <comment xml:lang="tr">DOS/Windows çalıştırılabilir</comment>
+    <comment xml:lang="tr">DOS/Windows çalıştırılabiliri</comment>
     <comment xml:lang="uk">виконуваний файл DOS/Windows</comment>
     <comment xml:lang="vi">Tập tin có thực hiện được DOS/Windows</comment>
-    <comment xml:lang="zh_CN">DOS/Windows 可执行文件</comment>
-    <comment xml:lang="zh_TW">DOS/Windows 可執行檔</comment>
+    <comment xml:lang="zh-CN">DOS/Windows 可执行文件</comment>
+    <comment xml:lang="zh-TW">DOS/Windows 可執行檔</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="MZ" type="string" offset="0"/>
+      <match type="string" value="MZ" offset="0"/>
     </magic>
     <glob pattern="*.exe"/>
   </mime-type>
   <mime-type type="application/x-mswinurl">
     <comment>Internet shortcut</comment>
+    <comment xml:lang="af">Internet-kortpad</comment>
     <comment xml:lang="ar">اختصار الإنترنت</comment>
-    <comment xml:lang="be@latin">Sieciŭnaja spasyłka</comment>
+    <comment xml:lang="be-Latn">Sieciŭnaja spasyłka</comment>
     <comment xml:lang="bg">Адрес в Интернет</comment>
     <comment xml:lang="ca">drecera d'Internet</comment>
     <comment xml:lang="cs">odkaz do Internetu</comment>
     <comment xml:lang="da">Internetgenvej</comment>
     <comment xml:lang="de">Internet-Verweis</comment>
     <comment xml:lang="el">Συντόμευση διαδικτύου</comment>
-    <comment xml:lang="en_GB">Internet shortcut</comment>
+    <comment xml:lang="en-GB">Internet shortcut</comment>
     <comment xml:lang="es">acceso directo a Internet</comment>
     <comment xml:lang="eu">Interneteko lasterbidea</comment>
     <comment xml:lang="fi">Internet-pikakuvake</comment>
     <comment xml:lang="fo">Alnetssnarvegur</comment>
     <comment xml:lang="fr">raccourci Internet</comment>
+    <comment xml:lang="fur">scurte di internet</comment>
     <comment xml:lang="ga">aicearra Idirlín</comment>
     <comment xml:lang="gl">atallo de Internet</comment>
     <comment xml:lang="he">קיצור דרך של האינטרנט</comment>
@@ -16285,7 +16921,7 @@
     <comment xml:lang="oc">acorchi Internet</comment>
     <comment xml:lang="pl">Skrót internetowy</comment>
     <comment xml:lang="pt">atalho da Internet</comment>
-    <comment xml:lang="pt_BR">Atalho da Internet</comment>
+    <comment xml:lang="pt-BR">Atalho da Internet</comment>
     <comment xml:lang="ro">Scurtătură Internet</comment>
     <comment xml:lang="ru">Интернет-ссылка</comment>
     <comment xml:lang="sk">Internetový odkaz</comment>
@@ -16296,34 +16932,36 @@
     <comment xml:lang="tr">İnternet kısayolu</comment>
     <comment xml:lang="uk">інтернет-посилання</comment>
     <comment xml:lang="vi">Lối tắt Internet</comment>
-    <comment xml:lang="zh_CN">Internet 快捷方式</comment>
-    <comment xml:lang="zh_TW">網際網路捷徑</comment>
+    <comment xml:lang="zh-CN">Internet 快捷方式</comment>
+    <comment xml:lang="zh-TW">網際網路捷徑</comment>
     <magic priority="50">
-      <match value="InternetShortcut" type="string" offset="1"/>
-      <match value="DEFAULT" type="string" offset="1">
-        <match value="BASEURL=" type="string" offset="11"/>
+      <match type="string" value="InternetShortcut" offset="1"/>
+      <match type="string" value="DEFAULT" offset="1">
+        <match type="string" value="BASEURL=" offset="11"/>
       </match>
     </magic>
     <glob pattern="*.url"/>
   </mime-type>
   <mime-type type="application/x-mswrite">
     <comment>WRI document</comment>
+    <comment xml:lang="af">WRI-dokument</comment>
     <comment xml:lang="ar">مستند WRI</comment>
     <comment xml:lang="ast">Documentu WRI</comment>
-    <comment xml:lang="be@latin">Dakument WRI</comment>
+    <comment xml:lang="be-Latn">Dakument WRI</comment>
     <comment xml:lang="bg">Документ — WRI</comment>
     <comment xml:lang="ca">document WRI</comment>
     <comment xml:lang="cs">dokument WRI</comment>
     <comment xml:lang="da">WRI-dokument</comment>
     <comment xml:lang="de">WRI-Dokument</comment>
     <comment xml:lang="el">Έγγραφο WRI</comment>
-    <comment xml:lang="en_GB">WRI document</comment>
+    <comment xml:lang="en-GB">WRI document</comment>
     <comment xml:lang="eo">WRI-dokumento</comment>
     <comment xml:lang="es">documento WRI</comment>
     <comment xml:lang="eu">WRI dokumentua</comment>
     <comment xml:lang="fi">WRI-asiakirja</comment>
     <comment xml:lang="fo">WRI skjal</comment>
     <comment xml:lang="fr">document WRI</comment>
+    <comment xml:lang="fur">document WRI</comment>
     <comment xml:lang="ga">cáipéis WRI</comment>
     <comment xml:lang="gl">documento WRI</comment>
     <comment xml:lang="he">מסמך WRI</comment>
@@ -16343,7 +16981,7 @@
     <comment xml:lang="oc">document WRI</comment>
     <comment xml:lang="pl">Dokument WRI</comment>
     <comment xml:lang="pt">documento WRI</comment>
-    <comment xml:lang="pt_BR">Documento WRI</comment>
+    <comment xml:lang="pt-BR">Documento WRI</comment>
     <comment xml:lang="ro">Document WRI</comment>
     <comment xml:lang="ru">Документ WRI</comment>
     <comment xml:lang="sk">Dokument WRI</comment>
@@ -16354,29 +16992,30 @@
     <comment xml:lang="tr">WRI belgesi</comment>
     <comment xml:lang="uk">документ WRI</comment>
     <comment xml:lang="vi">Tài liệu WRI</comment>
-    <comment xml:lang="zh_CN">WRI 文档</comment>
-    <comment xml:lang="zh_TW">WRI 文件</comment>
+    <comment xml:lang="zh-CN">WRI 文档</comment>
+    <comment xml:lang="zh-TW">WRI 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.wri"/>
   </mime-type>
   <mime-type type="application/x-msx-rom">
     <comment>MSX ROM</comment>
     <comment xml:lang="ar">MSX ROM</comment>
-    <comment xml:lang="be@latin">MSX ROM</comment>
+    <comment xml:lang="be-Latn">MSX ROM</comment>
     <comment xml:lang="bg">ROM — MSX</comment>
     <comment xml:lang="ca">ROM de MSX</comment>
     <comment xml:lang="cs">ROM pro MSX</comment>
     <comment xml:lang="cy">ROM MSX</comment>
-    <comment xml:lang="da">MSX-rom</comment>
+    <comment xml:lang="da">MSX-ROM</comment>
     <comment xml:lang="de">MSX ROM</comment>
     <comment xml:lang="el">MSX ROM</comment>
-    <comment xml:lang="en_GB">MSX ROM</comment>
+    <comment xml:lang="en-GB">MSX ROM</comment>
     <comment xml:lang="eo">MSX-NLM</comment>
     <comment xml:lang="es">ROM de MSX</comment>
     <comment xml:lang="eu">MSX-ko ROMa</comment>
     <comment xml:lang="fi">MSX-ROM</comment>
     <comment xml:lang="fo">MSX ROM</comment>
     <comment xml:lang="fr">ROM MSX</comment>
+    <comment xml:lang="fur">ROM MSX</comment>
     <comment xml:lang="ga">ROM MSX</comment>
     <comment xml:lang="gl">ROM de MSX</comment>
     <comment xml:lang="he">MSX ROM</comment>
@@ -16398,7 +17037,7 @@
     <comment xml:lang="oc">ROM MSX</comment>
     <comment xml:lang="pl">Plik ROM konsoli MSX</comment>
     <comment xml:lang="pt">ROM MSX</comment>
-    <comment xml:lang="pt_BR">ROM de MSX</comment>
+    <comment xml:lang="pt-BR">ROM de MSX</comment>
     <comment xml:lang="ro">ROM MSX</comment>
     <comment xml:lang="ru">MSX ROM</comment>
     <comment xml:lang="sk">ROM pre MSX</comment>
@@ -16409,27 +17048,29 @@
     <comment xml:lang="tr">MSX ROM</comment>
     <comment xml:lang="uk">ППП MSX</comment>
     <comment xml:lang="vi">ROM MSX</comment>
-    <comment xml:lang="zh_CN">MSX ROM</comment>
-    <comment xml:lang="zh_TW">MSX ROM</comment>
+    <comment xml:lang="zh-CN">MSX ROM</comment>
+    <comment xml:lang="zh-TW">MSX ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.msx"/>
   </mime-type>
   <mime-type type="application/x-m4">
     <comment>M4 macro</comment>
+    <comment xml:lang="af">M4-makro</comment>
     <comment xml:lang="ar">M4 macro</comment>
-    <comment xml:lang="be@latin">Makras M4</comment>
+    <comment xml:lang="be-Latn">Makras M4</comment>
     <comment xml:lang="bg">Макроси — M4</comment>
     <comment xml:lang="ca">macro M4</comment>
     <comment xml:lang="cs">makro M4</comment>
     <comment xml:lang="da">M4-makro</comment>
     <comment xml:lang="de">M4-Makro</comment>
     <comment xml:lang="el">Μακροεντολή m4</comment>
-    <comment xml:lang="en_GB">M4 macro</comment>
+    <comment xml:lang="en-GB">M4 macro</comment>
     <comment xml:lang="es">macro M4</comment>
     <comment xml:lang="eu">M4 makroa</comment>
     <comment xml:lang="fi">M4-makro</comment>
     <comment xml:lang="fo">M4 fjølvi</comment>
     <comment xml:lang="fr">macro M4</comment>
+    <comment xml:lang="fur">macro M4</comment>
     <comment xml:lang="ga">macra M4</comment>
     <comment xml:lang="gl">macro M4</comment>
     <comment xml:lang="he">מאקרו M4</comment>
@@ -16449,7 +17090,7 @@
     <comment xml:lang="oc">macro M4</comment>
     <comment xml:lang="pl">Makro M4</comment>
     <comment xml:lang="pt">macro M4</comment>
-    <comment xml:lang="pt_BR">Macro M4</comment>
+    <comment xml:lang="pt-BR">Macro M4</comment>
     <comment xml:lang="ro">Macro M4</comment>
     <comment xml:lang="ru">Макрос M4</comment>
     <comment xml:lang="sk">Makro M4</comment>
@@ -16460,8 +17101,8 @@
     <comment xml:lang="tr">M4 makrosu</comment>
     <comment xml:lang="uk">макрос M4</comment>
     <comment xml:lang="vi">Vĩ lệnh M4</comment>
-    <comment xml:lang="zh_CN">M4 宏</comment>
-    <comment xml:lang="zh_TW">M4 巨集</comment>
+    <comment xml:lang="zh-CN">M4 宏</comment>
+    <comment xml:lang="zh-TW">M4 巨集</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.m4"/>
@@ -16469,20 +17110,21 @@
   <mime-type type="application/x-n64-rom">
     <comment>Nintendo64 ROM</comment>
     <comment xml:lang="ar">Nintendo64 ROM</comment>
-    <comment xml:lang="be@latin">Nintendo64 ROM</comment>
+    <comment xml:lang="be-Latn">Nintendo64 ROM</comment>
     <comment xml:lang="bg">ROM — Nintendo64</comment>
     <comment xml:lang="ca">ROM de Nintendo64</comment>
     <comment xml:lang="cs">ROM pro Nintendo64</comment>
-    <comment xml:lang="da">Nintendo64-rom</comment>
+    <comment xml:lang="da">Nintendo64-ROM</comment>
     <comment xml:lang="de">Nintendo64 ROM</comment>
     <comment xml:lang="el">Nintendo64 ROM</comment>
-    <comment xml:lang="en_GB">Nintendo64 ROM</comment>
+    <comment xml:lang="en-GB">Nintendo64 ROM</comment>
     <comment xml:lang="eo">Nintendo64-NLM</comment>
     <comment xml:lang="es">ROM de Nintendo64</comment>
     <comment xml:lang="eu">Nintendo64-ko ROMa</comment>
     <comment xml:lang="fi">Nintendo64-ROM</comment>
     <comment xml:lang="fo">Nintendo64 ROM</comment>
     <comment xml:lang="fr">ROM Nintendo64</comment>
+    <comment xml:lang="fur">ROM Nintendo64</comment>
     <comment xml:lang="ga">ROM Nintendo64</comment>
     <comment xml:lang="gl">ROM de Nintendo64</comment>
     <comment xml:lang="he">ROM של Nintendo64</comment>
@@ -16503,7 +17145,7 @@
     <comment xml:lang="oc">ROM Nintendo64</comment>
     <comment xml:lang="pl">Plik ROM konsoli Nintendo64</comment>
     <comment xml:lang="pt">ROM Nintendo64</comment>
-    <comment xml:lang="pt_BR">ROM de Nintendo64</comment>
+    <comment xml:lang="pt-BR">ROM de Nintendo64</comment>
     <comment xml:lang="ro">ROM Nintendo64</comment>
     <comment xml:lang="ru">Nintendo64 ROM</comment>
     <comment xml:lang="sk">ROM pre Nintendo64</comment>
@@ -16514,26 +17156,27 @@
     <comment xml:lang="tr">Nintendo64 ROM</comment>
     <comment xml:lang="uk">ППП Nintendo64</comment>
     <comment xml:lang="vi">ROM Nintendo64</comment>
-    <comment xml:lang="zh_CN">任天堂 64 ROM</comment>
-    <comment xml:lang="zh_TW">Nintendo64 ROM</comment>
+    <comment xml:lang="zh-CN">任天堂 64 ROM</comment>
+    <comment xml:lang="zh-TW">Nintendo64 ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.n64"/>
     <glob pattern="*.z64"/>
     <glob pattern="*.v64"/>
     <magic>
-      
-      <match value="0x80371240" type="big32" offset="0"/>
-      
-      <match value="0x37804012" type="big32" offset="0"/>
-      
-      <match value="0x40123780" type="big32" offset="0"/>
+      <!-- native *.z64 -->
+      <match type="big32" offset="0" value="0x80371240"/>
+      <!-- byteswapped [BADC] *.v64 -->
+      <match type="big32" offset="0" value="0x37804012"/>
+      <!-- wordswapped [DCBA] *.n64 -->
+      <match type="big32" offset="0" value="0x40123780"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-nautilus-link">
     <comment>Nautilus link</comment>
+    <comment xml:lang="af">Nautilus-skakel</comment>
     <comment xml:lang="ar">وصلة Nautilus</comment>
     <comment xml:lang="az">Nautilus körpüsü</comment>
-    <comment xml:lang="be@latin">Spasyłka Nautilus</comment>
+    <comment xml:lang="be-Latn">Spasyłka Nautilus</comment>
     <comment xml:lang="bg">Връзка — Nautilus</comment>
     <comment xml:lang="ca">enllaç de Nautilus</comment>
     <comment xml:lang="cs">odkaz Nautilus</comment>
@@ -16541,13 +17184,14 @@
     <comment xml:lang="da">Nautilus-henvisning</comment>
     <comment xml:lang="de">Nautilus-Verknüpfung</comment>
     <comment xml:lang="el">Σύνδεσμος Nautilus</comment>
-    <comment xml:lang="en_GB">Nautilus link</comment>
+    <comment xml:lang="en-GB">Nautilus link</comment>
     <comment xml:lang="eo">Nautilus-ligilo</comment>
     <comment xml:lang="es">enlace de Nautilus</comment>
     <comment xml:lang="eu">Nautilus esteka</comment>
     <comment xml:lang="fi">Nautilus-linkki</comment>
     <comment xml:lang="fo">Nautilus leinkja</comment>
     <comment xml:lang="fr">lien Nautilus</comment>
+    <comment xml:lang="fur">colegament Nautilus</comment>
     <comment xml:lang="ga">nasc Nautilus</comment>
     <comment xml:lang="gl">ligazón de nautilus</comment>
     <comment xml:lang="he">קישור של Nautilus</comment>
@@ -16568,7 +17212,7 @@
     <comment xml:lang="oc">ligam Nautilus</comment>
     <comment xml:lang="pl">Odnośnik Nautilus</comment>
     <comment xml:lang="pt">atalho Nautilus</comment>
-    <comment xml:lang="pt_BR">Link do Nautilus</comment>
+    <comment xml:lang="pt-BR">Link do Nautilus</comment>
     <comment xml:lang="ro">Legătură Nautilus</comment>
     <comment xml:lang="ru">Ссылка Nautilus</comment>
     <comment xml:lang="sk">Odkaz Nautilus</comment>
@@ -16579,25 +17223,27 @@
     <comment xml:lang="tr">Nautilus bağlantısı</comment>
     <comment xml:lang="uk">посилання Nautilus</comment>
     <comment xml:lang="vi">Liên kết Nautilus</comment>
-    <comment xml:lang="zh_CN">Nautilus 链接</comment>
-    <comment xml:lang="zh_TW">Nautilus 鏈結</comment>
+    <comment xml:lang="zh-CN">Nautilus 链接</comment>
+    <comment xml:lang="zh-TW">Nautilus 連結</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="&lt;nautilus_object nautilus_link" type="string" offset="0:32"/>
+      <match type="string" value="&lt;nautilus_object nautilus_link" offset="0:32"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-neo-geo-pocket-rom">
     <comment>Neo-Geo Pocket ROM</comment>
+    <comment xml:lang="bg">ROM — Neo-Geo Pocket</comment>
     <comment xml:lang="ca">ROM de Neo-Geo Pocket</comment>
     <comment xml:lang="cs">ROM pro Neo-Geo Pocket</comment>
-    <comment xml:lang="da">Neo-Geo Pocket ROM</comment>
+    <comment xml:lang="da">Neo-Geo Pocket-ROM</comment>
     <comment xml:lang="de">Neo-Geo Pocket ROM</comment>
-    <comment xml:lang="en_GB">Neo-Geo Pocket ROM</comment>
+    <comment xml:lang="en-GB">Neo-Geo Pocket ROM</comment>
     <comment xml:lang="es">ROM de Neo-Geo Pocket</comment>
     <comment xml:lang="eu">Neo-Geo Pocket ROM</comment>
     <comment xml:lang="fi">Neo-Geo Pocket -ROM</comment>
     <comment xml:lang="fr">ROM Neo-Geo Pocket</comment>
+    <comment xml:lang="fur">ROM Neo-Geo Pocket</comment>
     <comment xml:lang="ga">ROM Neo-Geo Pocket</comment>
     <comment xml:lang="hr">Neo-Geo Pocket ROM</comment>
     <comment xml:lang="hu">Neo-Geo Pocket ROM</comment>
@@ -16606,54 +17252,82 @@
     <comment xml:lang="kk">Neo-Geo Pocket ROM</comment>
     <comment xml:lang="ko">네오지오 포켓 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Neo-Geo Pocket</comment>
-    <comment xml:lang="pt_BR">ROM de Neo-Geo Pocket</comment>
+    <comment xml:lang="pt-BR">ROM de Neo-Geo Pocket</comment>
     <comment xml:lang="ru">Neo-Geo Pocket ROM</comment>
     <comment xml:lang="sk">ROM pre Neo-Geo Pocket</comment>
     <comment xml:lang="sr">Нео-Гео Покет РОМ</comment>
     <comment xml:lang="sv">Neo-Geo Pocket-rom</comment>
     <comment xml:lang="tr">Neo-Geo Pocket ROM</comment>
     <comment xml:lang="uk">ППП Neo-Geo Pocket</comment>
-    <comment xml:lang="zh_CN">Neo-Geo Pocket ROM</comment>
-    <comment xml:lang="zh_TW">Neo-Geo Pocket ROM</comment>
+    <comment xml:lang="zh-CN">Neo-Geo Pocket ROM</comment>
+    <comment xml:lang="zh-TW">Neo-Geo Pocket ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.ngp"/>
     <magic>
-      <match value="0x0" type="byte" offset="35">
-        <match value="COPYRIGHT BY SNK CORPORATION" type="string" offset="0"/>
-        <match value=" LICENSED BY SNK CORPORATION" type="string" offset="0"/>
+      <match offset="35" type="byte" value="0x0">
+        <match offset="0" type="string" value="COPYRIGHT BY SNK CORPORATION"/>
+        <match offset="0" type="string" value=" LICENSED BY SNK CORPORATION"/>
       </match>
     </magic>
   </mime-type>
   <mime-type type="application/x-neo-geo-pocket-color-rom">
     <comment>Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="bg">ROM — Neo-Geo Pocket Color</comment>
+    <comment xml:lang="ca">ROM de Neo-Geo Pocket Color</comment>
+    <comment xml:lang="cs">ROM pro Neo-Geo Pocket Color</comment>
+    <comment xml:lang="da">Neo-Geo Pocket Color-ROM</comment>
+    <comment xml:lang="de">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="en-GB">Neo-Geo Pocket Colour ROM</comment>
+    <comment xml:lang="es">ROM de Neo-Geo Pocket Color</comment>
+    <comment xml:lang="eu">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="fi">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="fr">ROM Neo-Geo Pocket Color</comment>
+    <comment xml:lang="fur">ROM Neo-Geo Pocket Color</comment>
+    <comment xml:lang="ga">ROM datha Neo-Geo Pocket</comment>
+    <comment xml:lang="hr">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="hu">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="id">ROM Neo-Geo Pocket Color</comment>
+    <comment xml:lang="it">ROM Neo-Geo Pocket Color</comment>
+    <comment xml:lang="kk">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="ko">네오지오 포켓 컬러 롬</comment>
+    <comment xml:lang="pl">Plik ROM konsoli Neo-Geo Pocket Color</comment>
+    <comment xml:lang="pt-BR">ROM de Neo-Geo Pocket Color</comment>
+    <comment xml:lang="ru">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="sk">ROM pre Neo-Geo Pocket Color</comment>
+    <comment xml:lang="sv">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="tr">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="uk">ППП Neo-Geo Pocket Color</comment>
+    <comment xml:lang="zh-CN">Neo-Geo Pocket Color ROM</comment>
+    <comment xml:lang="zh-TW">Neo-Geo Pocket Color ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.ngc"/>
     <magic>
-      <match value="0x10" type="byte" offset="35">
-        <match value="COPYRIGHT BY SNK CORPORATION" type="string" offset="0"/>
-        <match value=" LICENSED BY SNK CORPORATION" type="string" offset="0"/>
+      <match offset="35" type="byte" value="0x10">
+        <match offset="0" type="string" value="COPYRIGHT BY SNK CORPORATION"/>
+        <match offset="0" type="string" value=" LICENSED BY SNK CORPORATION"/>
       </match>
     </magic>
   </mime-type>
   <mime-type type="application/x-nes-rom">
-    
+    <!-- Translate this to Famicom if the console was known as such in your locale -->
     <comment>NES ROM</comment>
     <comment xml:lang="ar">NES ROM</comment>
-    <comment xml:lang="be@latin">NES ROM</comment>
+    <comment xml:lang="be-Latn">NES ROM</comment>
     <comment xml:lang="bg">ROM — NES</comment>
     <comment xml:lang="ca">ROM de NES</comment>
     <comment xml:lang="cs">ROM pro NES</comment>
     <comment xml:lang="cy">ROM NES</comment>
-    <comment xml:lang="da">NES-rom</comment>
+    <comment xml:lang="da">NES-ROM</comment>
     <comment xml:lang="de">NES ROM</comment>
     <comment xml:lang="el">NES ROM</comment>
-    <comment xml:lang="en_GB">NES ROM</comment>
+    <comment xml:lang="en-GB">NES ROM</comment>
     <comment xml:lang="eo">NES-NLM</comment>
     <comment xml:lang="es">ROM de NES</comment>
     <comment xml:lang="eu">NES-eko ROMa</comment>
     <comment xml:lang="fi">NES-ROM</comment>
     <comment xml:lang="fo">NES ROM</comment>
     <comment xml:lang="fr">ROM NES</comment>
+    <comment xml:lang="fur">ROM NES</comment>
     <comment xml:lang="ga">ROM NES</comment>
     <comment xml:lang="gl">ROM de NES</comment>
     <comment xml:lang="he">ROM של NES</comment>
@@ -16674,7 +17348,7 @@
     <comment xml:lang="oc">ROM NES</comment>
     <comment xml:lang="pl">Plik ROM konsoli NES</comment>
     <comment xml:lang="pt">ROM NES</comment>
-    <comment xml:lang="pt_BR">ROM de NES</comment>
+    <comment xml:lang="pt-BR">ROM de NES</comment>
     <comment xml:lang="ro">ROM NES</comment>
     <comment xml:lang="ru">NES ROM</comment>
     <comment xml:lang="sk">ROM pre NES</comment>
@@ -16685,8 +17359,8 @@
     <comment xml:lang="tr">NES ROM</comment>
     <comment xml:lang="uk">ППП NES</comment>
     <comment xml:lang="vi">ROM NES</comment>
-    <comment xml:lang="zh_CN">NES ROM</comment>
-    <comment xml:lang="zh_TW">任天堂 ROM</comment>
+    <comment xml:lang="zh-CN">NES ROM</comment>
+    <comment xml:lang="zh-TW">任天堂紅白機 ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.nes"/>
     <glob pattern="*.nez"/>
@@ -16697,20 +17371,21 @@
     <comment>Unidata NetCDF document</comment>
     <comment xml:lang="ar">مستند Unidata NetCDF</comment>
     <comment xml:lang="ast">Documentu NetCDF d'Unidata</comment>
-    <comment xml:lang="be@latin">Dakument Unidata NetCDF</comment>
+    <comment xml:lang="be-Latn">Dakument Unidata NetCDF</comment>
     <comment xml:lang="bg">Документ — Unidata NetCDF</comment>
     <comment xml:lang="ca">document d'Unidata NetCDF</comment>
     <comment xml:lang="cs">dokument Unidata NetCDF</comment>
     <comment xml:lang="da">Unidata NetCDF-dokument</comment>
     <comment xml:lang="de">Unidata-NetCDF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Unidata NetCDF</comment>
-    <comment xml:lang="en_GB">Unidata NetCDF document</comment>
+    <comment xml:lang="en-GB">Unidata NetCDF document</comment>
     <comment xml:lang="eo">dokumento en NetCDF-formato de Unidata</comment>
     <comment xml:lang="es">documento de Unidata NetCDF</comment>
     <comment xml:lang="eu">Unidata NetCDF dokumentua</comment>
     <comment xml:lang="fi">Unidata NetCDF -asiakirja</comment>
     <comment xml:lang="fo">Unidata NetCDF skjal</comment>
     <comment xml:lang="fr">document Unidata NetCDF</comment>
+    <comment xml:lang="fur">document Unidata NetCDF</comment>
     <comment xml:lang="ga">cáipéis Unidata NetCDF</comment>
     <comment xml:lang="gl">Documentno de Unixdata NetCDF</comment>
     <comment xml:lang="he">מסמך של Unidata NetCDF</comment>
@@ -16731,7 +17406,7 @@
     <comment xml:lang="oc">document Unidata NetCDF</comment>
     <comment xml:lang="pl">Dokument Unidata NetCDF</comment>
     <comment xml:lang="pt">documento Unidata NetCDF</comment>
-    <comment xml:lang="pt_BR">Documento do Unidata NetCDF</comment>
+    <comment xml:lang="pt-BR">Documento do Unidata NetCDF</comment>
     <comment xml:lang="ro">Document Unidata NetCDF</comment>
     <comment xml:lang="ru">Документ Unidata NetCDF</comment>
     <comment xml:lang="sk">Dokument Unidata NetCDF</comment>
@@ -16742,8 +17417,8 @@
     <comment xml:lang="tr">Unidata NetCDF belgesi</comment>
     <comment xml:lang="uk">документ Unidata NetCDF</comment>
     <comment xml:lang="vi">Tài liệu NetCDF Unidata</comment>
-    <comment xml:lang="zh_CN">Unidata NetCDF 文档</comment>
-    <comment xml:lang="zh_TW">Unidata NetCDF 文件</comment>
+    <comment xml:lang="zh-CN">Unidata NetCDF 文档</comment>
+    <comment xml:lang="zh-TW">Unidata NetCDF 文件</comment>
     <acronym>NetCDF</acronym>
     <expanded-acronym>Network Common Data Form</expanded-acronym>
     <generic-icon name="x-office-document"/>
@@ -16755,13 +17430,15 @@
     <comment xml:lang="bg">Индекс — Usenet, NewzBin</comment>
     <comment xml:lang="ca">índex d'Usenet NewzBin</comment>
     <comment xml:lang="cs">index NewzBin diskuzních skupin Usenet</comment>
-    <comment xml:lang="da">NewzBin-brugernetindex</comment>
+    <comment xml:lang="da">NewzBin usenet-indeks</comment>
     <comment xml:lang="de">NewzBin-Usenet-Index</comment>
     <comment xml:lang="el">Ευρετήριο usenet NewzBin</comment>
-    <comment xml:lang="en_GB">NewzBin usenet index</comment>
+    <comment xml:lang="en-GB">NewzBin usenet index</comment>
     <comment xml:lang="es">índice NewzBin de usenet</comment>
     <comment xml:lang="eu">NewzBin usenet indizea</comment>
+    <comment xml:lang="fi">NewzBin usenet indeksi</comment>
     <comment xml:lang="fr">index usenet </comment>
+    <comment xml:lang="fur">tabele usenet NewzBin</comment>
     <comment xml:lang="ga">innéacs usenet NewzBin</comment>
     <comment xml:lang="gl">Índice de usenet NEwzBin</comment>
     <comment xml:lang="he">אינדקס שרתי חדשות NewzBin</comment>
@@ -16778,7 +17455,7 @@
     <comment xml:lang="oc">indèx usenet NewzBin</comment>
     <comment xml:lang="pl">Indeks grup dyskusyjnych NewzBin</comment>
     <comment xml:lang="pt">índice usenet NewzBin</comment>
-    <comment xml:lang="pt_BR">Índice de usenet NewzBin</comment>
+    <comment xml:lang="pt-BR">Índice de usenet NewzBin</comment>
     <comment xml:lang="ru">Индекс usenet NewzBin</comment>
     <comment xml:lang="sk">Index Usenetu NewzBin</comment>
     <comment xml:lang="sl">Kazalo usenet NewzBin</comment>
@@ -16786,30 +17463,32 @@
     <comment xml:lang="sv">NewzBin-usenetindex</comment>
     <comment xml:lang="tr">NewzBin usenet dizini</comment>
     <comment xml:lang="uk">покажчик usenet NewzBin</comment>
-    <comment xml:lang="zh_CN">NewzBin Usenet 索引</comment>
-    <comment xml:lang="zh_TW">NewzBin usenet 索引</comment>
+    <comment xml:lang="zh-CN">NewzBin Usenet 索引</comment>
+    <comment xml:lang="zh-TW">NewzBin usenet 索引</comment>
     <sub-class-of type="application/xml"/>
     <magic priority="80">
-      <match value="&lt;nzb" type="string" offset="0:256"/>
+      <match type="string" value="&lt;nzb" offset="0:256"/>
     </magic>
     <glob pattern="*.nzb"/>
   </mime-type>
   <mime-type type="application/x-object">
     <comment>object code</comment>
+    <comment xml:lang="af">objekkode</comment>
     <comment xml:lang="ar">رمز الكائن</comment>
-    <comment xml:lang="be@latin">abjektny kod</comment>
+    <comment xml:lang="be-Latn">abjektny kod</comment>
     <comment xml:lang="bg">Обектен код</comment>
     <comment xml:lang="ca">codi objecte</comment>
     <comment xml:lang="cs">objektový kód</comment>
     <comment xml:lang="da">objektkode</comment>
     <comment xml:lang="de">Objektcode</comment>
     <comment xml:lang="el">Μεταφρασμένος κώδικας</comment>
-    <comment xml:lang="en_GB">object code</comment>
+    <comment xml:lang="en-GB">object code</comment>
     <comment xml:lang="eo">celkodo</comment>
     <comment xml:lang="es">código objeto</comment>
     <comment xml:lang="eu">objektu kodea</comment>
     <comment xml:lang="fi">objektikoodi</comment>
     <comment xml:lang="fr">code objet</comment>
+    <comment xml:lang="fur">codiç ogjet</comment>
     <comment xml:lang="ga">cód réada</comment>
     <comment xml:lang="gl">código obxecto</comment>
     <comment xml:lang="he">קוד אובייקט</comment>
@@ -16830,7 +17509,7 @@
     <comment xml:lang="oc">còde objet</comment>
     <comment xml:lang="pl">Kod obiektowy</comment>
     <comment xml:lang="pt">código de objeto</comment>
-    <comment xml:lang="pt_BR">Código-objeto</comment>
+    <comment xml:lang="pt-BR">Código-objeto</comment>
     <comment xml:lang="ro">cod sursă obiect</comment>
     <comment xml:lang="ru">Объектный код</comment>
     <comment xml:lang="sk">Objektový kód</comment>
@@ -16841,18 +17520,18 @@
     <comment xml:lang="tr">nesne kodu</comment>
     <comment xml:lang="uk">об'єктний код</comment>
     <comment xml:lang="vi">mã đối tượng</comment>
-    <comment xml:lang="zh_CN">目标代码</comment>
-    <comment xml:lang="zh_TW">目的碼</comment>
+    <comment xml:lang="zh-CN">目标代码</comment>
+    <comment xml:lang="zh-TW">目的碼</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="\177ELF" type="string" offset="0">
-        <match value="1" type="byte" offset="5">
-          <match value="1" type="little16" offset="16"/>
+      <match type="string" value="\177ELF" offset="0">
+        <match type="byte" value="1" offset="5">
+          <match type="little16" value="1" offset="16"/>
         </match>
       </match>
-      <match value="\177ELF" type="string" offset="0">
-        <match value="2" type="byte" offset="5">
-          <match value="1" type="big16" offset="16"/>
+      <match type="string" value="\177ELF" offset="0">
+        <match type="byte" value="2" offset="5">
+          <match type="big16" value="1" offset="16"/>
         </match>
       </match>
     </magic>
@@ -16867,12 +17546,13 @@
     <comment xml:lang="da">Udvekslingsformat for Annodex</comment>
     <comment xml:lang="de">Annodex-Wechselformat</comment>
     <comment xml:lang="el">Μορφή ανταλλαγής Annodex</comment>
-    <comment xml:lang="en_GB">Annodex exchange format</comment>
+    <comment xml:lang="en-GB">Annodex exchange format</comment>
     <comment xml:lang="es">formato de intercambio de Annodex</comment>
     <comment xml:lang="eu">Annodex trukatze-formatua</comment>
     <comment xml:lang="fi">Annodex-siirtomuoto</comment>
     <comment xml:lang="fo">Annodex umbýtingarsnið</comment>
     <comment xml:lang="fr">format d'échange Annodex</comment>
+    <comment xml:lang="fur">formât di scambi Annodex</comment>
     <comment xml:lang="ga">formáid mhalairte Annodex</comment>
     <comment xml:lang="gl">formato intercambiábel de Annodex</comment>
     <comment xml:lang="he">תבנית החלפת Annodex</comment>
@@ -16891,7 +17571,7 @@
     <comment xml:lang="oc">format d'escambi Annodex</comment>
     <comment xml:lang="pl">Format wymiany Annodex</comment>
     <comment xml:lang="pt">formato de troca Annodex</comment>
-    <comment xml:lang="pt_BR">Formato de troca Annodex</comment>
+    <comment xml:lang="pt-BR">Formato de troca Annodex</comment>
     <comment xml:lang="ro">Format schimb Annodex</comment>
     <comment xml:lang="ru">Формат обмена Annodex</comment>
     <comment xml:lang="sk">Formát pre výmenu Annodex</comment>
@@ -16901,13 +17581,13 @@
     <comment xml:lang="tr">Annodex değişim biçimi</comment>
     <comment xml:lang="uk">формат обміну даними Annodex</comment>
     <comment xml:lang="vi">Định dạng trao đổi Annodex</comment>
-    <comment xml:lang="zh_CN">Annodex 交换格式</comment>
-    <comment xml:lang="zh_TW">Annodex 交換格式</comment>
+    <comment xml:lang="zh-CN">Annodex 交换格式</comment>
+    <comment xml:lang="zh-TW">Annodex 交換格式</comment>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      <match value="OggS" type="string" offset="0">
-        <match value="fishead\0" type="string" offset="28">
-          <match value="CMML\0\0\0\0" type="string" offset="56:512"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="fishead\0" offset="28">
+          <match type="string" value="CMML\0\0\0\0" offset="56:512"/>
         </match>
       </match>
     </magic>
@@ -16915,57 +17595,35 @@
     <alias type="application/x-annodex"/>
   </mime-type>
   <mime-type type="video/annodex">
-    <comment>Annodex Video</comment>
-    <comment xml:lang="ar">Annodex مرئي</comment>
-    <comment xml:lang="ast">Videu n'Annodex</comment>
+    <comment>Annodex video</comment>
     <comment xml:lang="bg">Видео — Annodex</comment>
-    <comment xml:lang="ca">Annodex Video</comment>
-    <comment xml:lang="cs">video Annodex</comment>
-    <comment xml:lang="da">Annodexvideo</comment>
+    <comment xml:lang="ca">vídeo Annodex</comment>
+    <comment xml:lang="da">Annodex-video</comment>
     <comment xml:lang="de">Annodex-Video</comment>
-    <comment xml:lang="el">Βίντεο Annodex</comment>
-    <comment xml:lang="en_GB">Annodex Video</comment>
-    <comment xml:lang="eo">Annodex-video</comment>
+    <comment xml:lang="en-GB">Annodex video</comment>
     <comment xml:lang="es">vídeo Annodex</comment>
     <comment xml:lang="eu">Annodex bideoa</comment>
-    <comment xml:lang="fi">Annodex-video</comment>
-    <comment xml:lang="fo">Annodex video</comment>
+    <comment xml:lang="fi">Annodex video</comment>
     <comment xml:lang="fr">vidéo Annodex</comment>
-    <comment xml:lang="ga">Físeán Annodex</comment>
-    <comment xml:lang="gl">vídeo de Annodex</comment>
-    <comment xml:lang="he">וידאו Annodex</comment>
     <comment xml:lang="hr">Annodex video snimka</comment>
     <comment xml:lang="hu">Annodex videó</comment>
-    <comment xml:lang="ia">Video Annodex</comment>
     <comment xml:lang="id">Video Annodex</comment>
     <comment xml:lang="it">Video Annodex</comment>
-    <comment xml:lang="ja">Annodex 動画</comment>
-    <comment xml:lang="ka">Annodex-ის ვიდეო</comment>
     <comment xml:lang="kk">Annodex видеосы</comment>
     <comment xml:lang="ko">Annodex 동영상</comment>
-    <comment xml:lang="lt">Annodex vaizdo įrašas</comment>
-    <comment xml:lang="lv">Annodex video</comment>
-    <comment xml:lang="nl">Annodex Video</comment>
-    <comment xml:lang="oc">vidèo Annodex</comment>
     <comment xml:lang="pl">Plik wideo Annodex</comment>
-    <comment xml:lang="pt">vídeo Annodex</comment>
-    <comment xml:lang="pt_BR">Vídeo Annodex</comment>
-    <comment xml:lang="ro">Video Annodex</comment>
+    <comment xml:lang="pt-BR">Vídeo Annodex</comment>
     <comment xml:lang="ru">Видео Annodex</comment>
-    <comment xml:lang="sk">Video Annodex</comment>
-    <comment xml:lang="sl">Video datoteka Annodex</comment>
-    <comment xml:lang="sr">Анодекс видео</comment>
     <comment xml:lang="sv">Annodex-video</comment>
-    <comment xml:lang="tr">Annodex Video</comment>
-    <comment xml:lang="uk">відеокліп Annodex</comment>
-    <comment xml:lang="vi">Ảnh động Annodex</comment>
-    <comment xml:lang="zh_CN">Annodex 视频</comment>
-    <comment xml:lang="zh_TW">Annodex 視訊</comment>
+    <comment xml:lang="tr">Annodex video</comment>
+    <comment xml:lang="uk">відео Annodex</comment>
+    <comment xml:lang="zh-CN">Annodex 视频</comment>
+    <comment xml:lang="zh-TW">Annodex 視訊</comment>
     <sub-class-of type="application/annodex"/>
     <magic priority="50">
-      <match value="OggS" type="string" offset="0">
-        <match value="fishead\0" type="string" offset="28">
-          <match value="CMML\0\0\0\0" type="string" offset="56:512"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="fishead\0" offset="28">
+          <match type="string" value="CMML\0\0\0\0" offset="56:512"/>
         </match>
       </match>
     </magic>
@@ -16973,56 +17631,35 @@
     <alias type="video/x-annodex"/>
   </mime-type>
   <mime-type type="audio/annodex">
-    <comment>Annodex Audio</comment>
-    <comment xml:lang="ar">Annodex سمعي</comment>
+    <comment>Annodex audio</comment>
     <comment xml:lang="bg">Аудио — Annodex</comment>
-    <comment xml:lang="ca">Annodex Audio</comment>
-    <comment xml:lang="cs">zvuk Annodex</comment>
-    <comment xml:lang="da">Annodexlyd</comment>
+    <comment xml:lang="ca">àudio Annodex</comment>
+    <comment xml:lang="da">Annodex-lyd</comment>
     <comment xml:lang="de">Annodex-Audio</comment>
-    <comment xml:lang="el">Ήχος Annodex</comment>
-    <comment xml:lang="en_GB">Annodex Audio</comment>
-    <comment xml:lang="eo">Annodex-sondosiero</comment>
-    <comment xml:lang="es">sonido Annodex</comment>
+    <comment xml:lang="en-GB">Annodex audio</comment>
+    <comment xml:lang="es">audio Annodex</comment>
     <comment xml:lang="eu">Annodex audioa</comment>
-    <comment xml:lang="fi">Annodex-ääni</comment>
-    <comment xml:lang="fo">Annodex ljóður</comment>
+    <comment xml:lang="fi">Annodex ääni</comment>
     <comment xml:lang="fr">audio Annodex</comment>
-    <comment xml:lang="ga">Fuaim Annodex</comment>
-    <comment xml:lang="gl">son de Annodex</comment>
-    <comment xml:lang="he">שמע Annodex</comment>
     <comment xml:lang="hr">Annodex zvučni zapis</comment>
     <comment xml:lang="hu">Annodex hang</comment>
-    <comment xml:lang="ia">Audio Annodex</comment>
     <comment xml:lang="id">Audio Annodex</comment>
     <comment xml:lang="it">Audio Annodex</comment>
-    <comment xml:lang="ja">Annodex オーディオ</comment>
-    <comment xml:lang="ka">Annodex-ის აუდიო</comment>
     <comment xml:lang="kk">Annodex аудиосы</comment>
     <comment xml:lang="ko">Annodex 오디오</comment>
-    <comment xml:lang="lt">Annodex garso įrašas</comment>
-    <comment xml:lang="lv">Annodex audio</comment>
-    <comment xml:lang="nl">Annodex Audio</comment>
-    <comment xml:lang="oc">àudio Annodex</comment>
     <comment xml:lang="pl">Plik dźwiękowy Annodex</comment>
-    <comment xml:lang="pt">áudio Annodex</comment>
-    <comment xml:lang="pt_BR">Áudio Annodex</comment>
-    <comment xml:lang="ro">Audio Annodex</comment>
+    <comment xml:lang="pt-BR">Áudio Annodex</comment>
     <comment xml:lang="ru">Аудио Annodex</comment>
-    <comment xml:lang="sk">Zvuk Annodex</comment>
-    <comment xml:lang="sl">Zvočna datoteka Annodex</comment>
-    <comment xml:lang="sr">Анодекс аудио</comment>
     <comment xml:lang="sv">Annodex-ljud</comment>
-    <comment xml:lang="tr">Annodex Sesi</comment>
+    <comment xml:lang="tr">Annodex sesi</comment>
     <comment xml:lang="uk">звук Annodex</comment>
-    <comment xml:lang="vi">Âm thanh Annodex</comment>
-    <comment xml:lang="zh_CN">Annodex 音频</comment>
-    <comment xml:lang="zh_TW">Annodex 音訊</comment>
+    <comment xml:lang="zh-CN">Annodex 音频</comment>
+    <comment xml:lang="zh-TW">Annodex 音訊</comment>
     <sub-class-of type="application/annodex"/>
     <magic priority="50">
-      <match value="OggS" type="string" offset="0">
-        <match value="fishead\0" type="string" offset="28">
-          <match value="CMML\0\0\0\0" type="string" offset="56:512"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="fishead\0" offset="28">
+          <match type="string" value="CMML\0\0\0\0" offset="56:512"/>
         </match>
       </match>
     </magic>
@@ -17031,20 +17668,22 @@
   </mime-type>
   <mime-type type="application/ogg">
     <comment>Ogg multimedia file</comment>
+    <comment xml:lang="af">Ogg-multimedialêer</comment>
     <comment xml:lang="ar">ملف وسائط متعددة Ogg</comment>
-    <comment xml:lang="be@latin">Multymedyjny fajł Ogg</comment>
+    <comment xml:lang="be-Latn">Multymedyjny fajł Ogg</comment>
     <comment xml:lang="bg">Мултимедия — Ogg</comment>
     <comment xml:lang="ca">fitxer multimèdia Ogg</comment>
     <comment xml:lang="cs">multimediální soubor Ogg</comment>
     <comment xml:lang="da">Ogg multimedie-fil</comment>
     <comment xml:lang="de">Ogg-Multimediadatei</comment>
     <comment xml:lang="el">Αρχείο πολυμέσων Ogg</comment>
-    <comment xml:lang="en_GB">Ogg multimedia file</comment>
+    <comment xml:lang="en-GB">Ogg multimedia file</comment>
     <comment xml:lang="es">archivo multimedia Ogg</comment>
     <comment xml:lang="eu">Ogg multimediako fitxategia</comment>
     <comment xml:lang="fi">Ogg-multimediatiedosto</comment>
     <comment xml:lang="fo">Ogg margmiðlafíla</comment>
     <comment xml:lang="fr">fichier multimédia Ogg</comment>
+    <comment xml:lang="fur">file multimediâl Ogg</comment>
     <comment xml:lang="ga">comhad ilmheán Ogg</comment>
     <comment xml:lang="gl">ficheiro multimedia Ogg</comment>
     <comment xml:lang="he">קובץ מולטימדיה Ogg</comment>
@@ -17065,7 +17704,7 @@
     <comment xml:lang="oc">fichièr multimèdia Ogg</comment>
     <comment xml:lang="pl">Plik multimedialny Ogg</comment>
     <comment xml:lang="pt">ficheiro multimédia Ogg</comment>
-    <comment xml:lang="pt_BR">Arquivo multimídia Ogg</comment>
+    <comment xml:lang="pt-BR">Arquivo multimídia Ogg</comment>
     <comment xml:lang="ro">Fișier multimedia Ogg</comment>
     <comment xml:lang="ru">Мультимедийный файл Ogg</comment>
     <comment xml:lang="sk">Súbor multimédií Ogg</comment>
@@ -17073,70 +17712,47 @@
     <comment xml:lang="sq">File multimedial Ogg</comment>
     <comment xml:lang="sr">Огг мултимедијална датотека</comment>
     <comment xml:lang="sv">Ogg-multimediafil</comment>
-    <comment xml:lang="tr">Ogg çokluortam dosyası</comment>
+    <comment xml:lang="tr">Ogg çoklu ortam dosyası</comment>
     <comment xml:lang="uk">мультимедійний файл Ogg</comment>
     <comment xml:lang="vi">Tập tin đa phương tiện Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg 多媒体文件</comment>
-    <comment xml:lang="zh_TW">Ogg 多媒體檔案</comment>
+    <comment xml:lang="zh-CN">Ogg 多媒体文件</comment>
+    <comment xml:lang="zh-TW">Ogg 多媒體檔案</comment>
     <generic-icon name="video-x-generic"/>
     <alias type="application/x-ogg"/>
     <magic priority="50">
-      <match value="OggS" type="string" offset="0"/>
+      <match type="string" value="OggS" offset="0"/>
     </magic>
     <glob pattern="*.ogx"/>
   </mime-type>
   <mime-type type="audio/ogg">
-    <comment>Ogg Audio</comment>
-    <comment xml:lang="ar">Ogg سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Ogg</comment>
+    <comment>Ogg audio</comment>
     <comment xml:lang="bg">Аудио — Ogg</comment>
-    <comment xml:lang="ca">àudio d'Ogg</comment>
-    <comment xml:lang="cs">zvuk Ogg</comment>
+    <comment xml:lang="ca">àudio Ogg</comment>
     <comment xml:lang="da">Ogg-lyd</comment>
     <comment xml:lang="de">Ogg-Audio</comment>
-    <comment xml:lang="el">Ήχος Ogg</comment>
-    <comment xml:lang="en_GB">Ogg Audio</comment>
-    <comment xml:lang="es">sonido Ogg</comment>
+    <comment xml:lang="en-GB">Ogg audio</comment>
+    <comment xml:lang="es">audio Ogg</comment>
     <comment xml:lang="eu">Ogg audioa</comment>
     <comment xml:lang="fi">Ogg-ääni</comment>
-    <comment xml:lang="fo">Ogg ljóður</comment>
     <comment xml:lang="fr">audio Ogg</comment>
-    <comment xml:lang="ga">Fuaim Ogg</comment>
-    <comment xml:lang="gl">son Ogg</comment>
-    <comment xml:lang="he">שמע Ogg</comment>
     <comment xml:lang="hr">Ogg zvučni zapis</comment>
     <comment xml:lang="hu">Ogg hang</comment>
-    <comment xml:lang="ia">Audio Ogg</comment>
     <comment xml:lang="id">Audio Ogg</comment>
     <comment xml:lang="it">Audio Ogg</comment>
-    <comment xml:lang="ja">Ogg オーディオ</comment>
-    <comment xml:lang="ka">Ogg-ის აუდიო</comment>
-    <comment xml:lang="kk">Ogg аудиосы</comment>
+    <comment xml:lang="kk">Ogg аулиосы</comment>
     <comment xml:lang="ko">Ogg 오디오</comment>
-    <comment xml:lang="lt">Ogg garso įrašas</comment>
-    <comment xml:lang="lv">Ogg audio</comment>
-    <comment xml:lang="nb">Ogg lyd</comment>
-    <comment xml:lang="nl">Ogg-audio</comment>
-    <comment xml:lang="nn">Ogg-lyd</comment>
-    <comment xml:lang="oc">àudio Ogg</comment>
     <comment xml:lang="pl">Plik dźwiękowy Ogg</comment>
-    <comment xml:lang="pt">áudio Ogg</comment>
-    <comment xml:lang="pt_BR">Áudio Ogg</comment>
-    <comment xml:lang="ro">Audio Ogg</comment>
+    <comment xml:lang="pt-BR">Áudio Ogg</comment>
     <comment xml:lang="ru">Аудио Ogg</comment>
     <comment xml:lang="sk">Zvuk Ogg</comment>
-    <comment xml:lang="sl">Zvočna datoteka Ogg</comment>
-    <comment xml:lang="sq">Audio Ogg</comment>
-    <comment xml:lang="sr">Огг звук</comment>
     <comment xml:lang="sv">Ogg-ljud</comment>
-    <comment xml:lang="tr">Ogg Sesi</comment>
+    <comment xml:lang="tr">Ogg sesi</comment>
     <comment xml:lang="uk">звук ogg</comment>
-    <comment xml:lang="vi">Âm thanh Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg 音频</comment>
-    <comment xml:lang="zh_TW">Ogg 音訊</comment>
+    <comment xml:lang="zh-CN">Ogg 音频</comment>
+    <comment xml:lang="zh-TW">Ogg 音訊</comment>
     <sub-class-of type="application/ogg"/>
     <magic priority="50">
-      <match value="OggS" type="string" offset="0"/>
+      <match type="string" value="OggS" offset="0"/>
     </magic>
     <glob pattern="*.oga"/>
     <glob pattern="*.ogg"/>
@@ -17144,58 +17760,34 @@
     <alias type="audio/x-ogg"/>
   </mime-type>
   <mime-type type="video/ogg">
-    <comment>Ogg Video</comment>
-    <comment xml:lang="ar">Ogg مرئي</comment>
-    <comment xml:lang="ast">Videu n'Ogg</comment>
-    <comment xml:lang="be@latin">Videa Ogg</comment>
+    <comment>Ogg video</comment>
     <comment xml:lang="bg">Видео — Ogg</comment>
     <comment xml:lang="ca">vídeo Ogg</comment>
-    <comment xml:lang="cs">video Ogg</comment>
     <comment xml:lang="da">Ogg-video</comment>
     <comment xml:lang="de">Ogg-Video</comment>
-    <comment xml:lang="el">Βίντεο Ogg</comment>
-    <comment xml:lang="en_GB">Ogg Video</comment>
+    <comment xml:lang="en-GB">Ogg video</comment>
     <comment xml:lang="es">vídeo Ogg</comment>
     <comment xml:lang="eu">Ogg bideoa</comment>
     <comment xml:lang="fi">Ogg-video</comment>
-    <comment xml:lang="fo">Ogg Video</comment>
     <comment xml:lang="fr">vidéo Ogg</comment>
-    <comment xml:lang="ga">Físeán Ogg</comment>
-    <comment xml:lang="gl">vídeo Ogg</comment>
-    <comment xml:lang="he">וידאו Ogg</comment>
     <comment xml:lang="hr">Ogg video snimka</comment>
     <comment xml:lang="hu">Ogg videó</comment>
-    <comment xml:lang="ia">Video Ogg</comment>
     <comment xml:lang="id">Video Ogg</comment>
     <comment xml:lang="it">Video Ogg</comment>
-    <comment xml:lang="ja">Ogg 動画</comment>
-    <comment xml:lang="ka">Ogg ვიდეო</comment>
     <comment xml:lang="kk">Ogg видеосы</comment>
     <comment xml:lang="ko">Ogg 동영상</comment>
-    <comment xml:lang="lt">Ogg vaizdo įrašas</comment>
-    <comment xml:lang="lv">Ogg video</comment>
-    <comment xml:lang="nb">Ogg video</comment>
-    <comment xml:lang="nl">Ogg-video</comment>
-    <comment xml:lang="nn">Ogg-video</comment>
-    <comment xml:lang="oc">vidèo Ogg</comment>
     <comment xml:lang="pl">Plik wideo Ogg</comment>
-    <comment xml:lang="pt">vídeo Ogg</comment>
-    <comment xml:lang="pt_BR">Vídeo Ogg</comment>
-    <comment xml:lang="ro">Video Ogg</comment>
+    <comment xml:lang="pt-BR">Vídeo Ogg</comment>
     <comment xml:lang="ru">Видео Ogg</comment>
     <comment xml:lang="sk">Video Ogg</comment>
-    <comment xml:lang="sl">Video datoteka Ogg</comment>
-    <comment xml:lang="sq">Video Ogg</comment>
-    <comment xml:lang="sr">Огг снимак</comment>
     <comment xml:lang="sv">Ogg-video</comment>
-    <comment xml:lang="tr">Ogg Video</comment>
-    <comment xml:lang="uk">відеокліп ogg</comment>
-    <comment xml:lang="vi">Ảnh động Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg 视频</comment>
-    <comment xml:lang="zh_TW">Ogg 視訊</comment>
+    <comment xml:lang="tr">Ogg video</comment>
+    <comment xml:lang="uk">відео ogg</comment>
+    <comment xml:lang="zh-CN">Ogg 视频</comment>
+    <comment xml:lang="zh-TW">Ogg 視訊</comment>
     <sub-class-of type="application/ogg"/>
     <magic priority="50">
-      <match value="OggS" type="string" offset="0"/>
+      <match type="string" value="OggS" offset="0"/>
     </magic>
     <glob pattern="*.ogv"/>
     <glob pattern="*.ogg"/>
@@ -17203,23 +17795,25 @@
   </mime-type>
   <mime-type type="audio/x-vorbis+ogg">
     <comment>Ogg Vorbis audio</comment>
+    <comment xml:lang="af">Ogg Vorbis-oudio</comment>
     <comment xml:lang="ar">Ogg Vorbis سمعي</comment>
     <comment xml:lang="az">Ogg Vorbis audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Ogg Vorbis</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Ogg Vorbis</comment>
     <comment xml:lang="bg">Аудио — Ogg Vorbis</comment>
-    <comment xml:lang="ca">àudio d'Ogg Vorbis</comment>
+    <comment xml:lang="ca">àudio Ogg Vorbis</comment>
     <comment xml:lang="cs">zvuk Ogg Vorbis</comment>
     <comment xml:lang="cy">Sain Ogg Vorbis</comment>
     <comment xml:lang="da">Ogg Vorbis-lyd</comment>
     <comment xml:lang="de">Ogg-Vorbis-Audio</comment>
     <comment xml:lang="el">Ήχος Ogg Vobris</comment>
-    <comment xml:lang="en_GB">Ogg Vorbis audio</comment>
+    <comment xml:lang="en-GB">Ogg Vorbis audio</comment>
     <comment xml:lang="eo">Ogg-Vorbis-sondosiero</comment>
-    <comment xml:lang="es">sonido Ogg Vorbis</comment>
+    <comment xml:lang="es">audio Ogg Vorbis</comment>
     <comment xml:lang="eu">Ogg Vorbis audioa</comment>
     <comment xml:lang="fi">Ogg Vorbis -ääni</comment>
     <comment xml:lang="fo">Ogg Vorbis ljóður</comment>
     <comment xml:lang="fr">audio Ogg Vorbis</comment>
+    <comment xml:lang="fur">audio Ogg Vorbis</comment>
     <comment xml:lang="ga">fuaim Ogg Vorbis</comment>
     <comment xml:lang="gl">son Ogg Vorbis</comment>
     <comment xml:lang="he">שמע Ogg Vorbis</comment>
@@ -17241,7 +17835,7 @@
     <comment xml:lang="oc">àudio Ogg Vorbis</comment>
     <comment xml:lang="pl">Plik dźwiękowy Ogg Vorbis</comment>
     <comment xml:lang="pt">áudio Ogg Vorbis</comment>
-    <comment xml:lang="pt_BR">Áudio Ogg Vorbis</comment>
+    <comment xml:lang="pt-BR">Áudio Ogg Vorbis</comment>
     <comment xml:lang="ro">Audio Ogg Vorbis</comment>
     <comment xml:lang="ru">Аудио Ogg Vorbis</comment>
     <comment xml:lang="sk">Zvuk Ogg Vorbis</comment>
@@ -17252,14 +17846,14 @@
     <comment xml:lang="tr">Ogg Vorbis sesi</comment>
     <comment xml:lang="uk">звук ogg Vorbis</comment>
     <comment xml:lang="vi">Âm thanh Vorbis Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg Vorbis 音频</comment>
-    <comment xml:lang="zh_TW">Ogg Vorbis 音訊</comment>
+    <comment xml:lang="zh-CN">Ogg Vorbis 音频</comment>
+    <comment xml:lang="zh-TW">Ogg Vorbis 音訊</comment>
     <sub-class-of type="audio/ogg"/>
     <alias type="audio/vorbis"/>
     <alias type="audio/x-vorbis"/>
     <magic priority="80">
-      <match value="OggS" type="string" offset="0">
-        <match value="\x01vorbis" type="string" offset="28"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="\x01vorbis" offset="28"/>
       </match>
     </magic>
     <glob pattern="*.oga"/>
@@ -17267,20 +17861,22 @@
   </mime-type>
   <mime-type type="audio/x-flac+ogg">
     <comment>Ogg FLAC audio</comment>
+    <comment xml:lang="af">Ogg FLAC-oudio</comment>
     <comment xml:lang="ar">Ogg FLAC سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Ogg FLAC</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Ogg FLAC</comment>
     <comment xml:lang="bg">Аудио — Ogg FLAC</comment>
-    <comment xml:lang="ca">àudio FLAC d'Ogg</comment>
+    <comment xml:lang="ca">àudio Ogg FLAC</comment>
     <comment xml:lang="cs">zvuk Ogg FLAC</comment>
     <comment xml:lang="da">Ogg FLAC-lyd</comment>
     <comment xml:lang="de">Ogg-FLAC-Audio</comment>
     <comment xml:lang="el">Ήχος Ogg FLAC</comment>
-    <comment xml:lang="en_GB">Ogg FLAC audio</comment>
-    <comment xml:lang="es">sonido Ogg FLAC</comment>
+    <comment xml:lang="en-GB">Ogg FLAC audio</comment>
+    <comment xml:lang="es">audio Ogg FLAC</comment>
     <comment xml:lang="eu">Ogg FLAC audioa</comment>
     <comment xml:lang="fi">Ogg FLAC -ääni</comment>
     <comment xml:lang="fo">Ogg FLAC ljóður</comment>
     <comment xml:lang="fr">audio Ogg FLAC</comment>
+    <comment xml:lang="fur">audio Ogg FLAC</comment>
     <comment xml:lang="ga">fuaim Ogg FLAC</comment>
     <comment xml:lang="gl">son Ogg FLAC</comment>
     <comment xml:lang="he">שמע Ogg FLAC</comment>
@@ -17301,7 +17897,7 @@
     <comment xml:lang="oc">àudio Ogg FLAC</comment>
     <comment xml:lang="pl">Plik dźwiękowy Ogg FLAC</comment>
     <comment xml:lang="pt">áudio Ogg FLAC</comment>
-    <comment xml:lang="pt_BR">Áudio Ogg FLAC</comment>
+    <comment xml:lang="pt-BR">Áudio Ogg FLAC</comment>
     <comment xml:lang="ro">Audio Ogg FLAC</comment>
     <comment xml:lang="ru">Аудио Ogg FLAC</comment>
     <comment xml:lang="sk">Zvuk Ogg FLAC</comment>
@@ -17312,13 +17908,13 @@
     <comment xml:lang="tr">Ogg FLAC sesi</comment>
     <comment xml:lang="uk">звук ogg FLAC</comment>
     <comment xml:lang="vi">Âm thanh FLAC Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg FLAC 音频</comment>
-    <comment xml:lang="zh_TW">Ogg FLAC 音訊</comment>
+    <comment xml:lang="zh-CN">Ogg FLAC 音频</comment>
+    <comment xml:lang="zh-TW">Ogg FLAC 音訊</comment>
     <sub-class-of type="audio/ogg"/>
     <alias type="audio/x-oggflac"/>
     <magic priority="80">
-      <match value="OggS" type="string" offset="0">
-        <match value="fLaC" type="string" offset="28"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="fLaC" offset="28"/>
       </match>
       <match value="OggS" type="string" offset="0">
         <match value="\177FLAC" type="string" offset="28"/>
@@ -17329,16 +17925,19 @@
   </mime-type>
   <mime-type type="audio/x-opus+ogg">
     <comment>Opus audio</comment>
-    <comment xml:lang="ca">àudio d'Opus</comment>
+    <comment xml:lang="af">Opus-oudio</comment>
+    <comment xml:lang="bg">Аудио — Opus</comment>
+    <comment xml:lang="ca">àudio Opus</comment>
     <comment xml:lang="cs">zvuk Opus</comment>
     <comment xml:lang="da">Opus-lyd</comment>
     <comment xml:lang="de">Opus-Audio</comment>
     <comment xml:lang="el">Ήχος Opus </comment>
-    <comment xml:lang="en_GB">Opus audio</comment>
-    <comment xml:lang="es">sonido Opus</comment>
+    <comment xml:lang="en-GB">Opus audio</comment>
+    <comment xml:lang="es">audio Opus</comment>
     <comment xml:lang="eu">Opus audioa</comment>
     <comment xml:lang="fi">Opus-ääni</comment>
     <comment xml:lang="fr">audio Opus</comment>
+    <comment xml:lang="fur">audio Opus</comment>
     <comment xml:lang="ga">fuaim Opus</comment>
     <comment xml:lang="gl">Son Opus</comment>
     <comment xml:lang="he">שמע Opus</comment>
@@ -17352,7 +17951,7 @@
     <comment xml:lang="oc">àudio Opus</comment>
     <comment xml:lang="pl">Plik dźwiękowy Opus</comment>
     <comment xml:lang="pt">áudio Opus</comment>
-    <comment xml:lang="pt_BR">Áudio Opus</comment>
+    <comment xml:lang="pt-BR">Áudio Opus</comment>
     <comment xml:lang="ru">Аудио Opus</comment>
     <comment xml:lang="sk">Zvuk Opu</comment>
     <comment xml:lang="sl">Zvočna datoteka Opus</comment>
@@ -17360,32 +17959,34 @@
     <comment xml:lang="sv">Opus-ljud</comment>
     <comment xml:lang="tr">Opus sesi</comment>
     <comment xml:lang="uk">звук Opus</comment>
-    <comment xml:lang="zh_CN">Opus 音频</comment>
-    <comment xml:lang="zh_TW">Opus 音訊</comment>
+    <comment xml:lang="zh-CN">Opus 音频</comment>
+    <comment xml:lang="zh-TW">Opus 音訊</comment>
     <sub-class-of type="audio/ogg"/>
     <magic priority="80">
-      <match value="OggS" type="string" offset="0">
-        <match value="OpusHead" type="string" offset="28"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="OpusHead" offset="28"/>
       </match>
     </magic>
     <glob pattern="*.opus"/>
   </mime-type>
   <mime-type type="audio/x-speex+ogg">
     <comment>Ogg Speex audio</comment>
+    <comment xml:lang="af">Ogg Speex-oudio</comment>
     <comment xml:lang="ar">Ogg Speex سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Ogg Speex</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Ogg Speex</comment>
     <comment xml:lang="bg">Аудио — Ogg Speex</comment>
-    <comment xml:lang="ca">àudio Speex d'Ogg</comment>
+    <comment xml:lang="ca">àudio Ogg Speex</comment>
     <comment xml:lang="cs">zvuk Ogg Speex</comment>
     <comment xml:lang="da">Ogg Speex-lyd</comment>
     <comment xml:lang="de">Ogg-Speex-Audio</comment>
     <comment xml:lang="el">Ήχος Ogg Speex</comment>
-    <comment xml:lang="en_GB">Ogg Speex audio</comment>
-    <comment xml:lang="es">sonido Ogg Speex</comment>
+    <comment xml:lang="en-GB">Ogg Speex audio</comment>
+    <comment xml:lang="es">audio Ogg Speex</comment>
     <comment xml:lang="eu">Ogg Speex audioa</comment>
     <comment xml:lang="fi">Ogg Speex -ääni</comment>
     <comment xml:lang="fo">Ogg Speex ljóður</comment>
     <comment xml:lang="fr">audio Ogg Speex</comment>
+    <comment xml:lang="fur">audio Ogg Speex</comment>
     <comment xml:lang="ga">fuaim Ogg Speex</comment>
     <comment xml:lang="gl">son Ogg Speex</comment>
     <comment xml:lang="he">שמע Ogg Speex</comment>
@@ -17406,7 +18007,7 @@
     <comment xml:lang="oc">àudio Ogg Speex</comment>
     <comment xml:lang="pl">Plik dźwiękowy Ogg Speex</comment>
     <comment xml:lang="pt">áudio Ogg Speex</comment>
-    <comment xml:lang="pt_BR">Áudio Ogg Speex</comment>
+    <comment xml:lang="pt-BR">Áudio Ogg Speex</comment>
     <comment xml:lang="ro">Audio Ogg Speex</comment>
     <comment xml:lang="ru">Аудио Ogg Speex</comment>
     <comment xml:lang="sk">Zvuk Ogg Speex</comment>
@@ -17417,33 +18018,36 @@
     <comment xml:lang="tr">Ogg Speex sesi</comment>
     <comment xml:lang="uk">звук ogg Speex</comment>
     <comment xml:lang="vi">Âm thanh Speex Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg Speex 音频</comment>
-    <comment xml:lang="zh_TW">Ogg Speex 音訊</comment>
+    <comment xml:lang="zh-CN">Ogg Speex 音频</comment>
+    <comment xml:lang="zh-TW">Ogg Speex 音訊</comment>
     <sub-class-of type="audio/ogg"/>
     <magic priority="80">
-      <match value="OggS" type="string" offset="0">
-        <match value="Speex  " type="string" offset="28"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="Speex  " offset="28"/>
       </match>
     </magic>
     <glob pattern="*.oga"/>
     <glob pattern="*.ogg"/>
+    <glob pattern="*.spx"/>
   </mime-type>
   <mime-type type="audio/x-speex">
     <comment>Speex audio</comment>
+    <comment xml:lang="af">Speex-oudio</comment>
     <comment xml:lang="ar">Speex سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Speex</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Speex</comment>
     <comment xml:lang="bg">Аудио — Speex</comment>
-    <comment xml:lang="ca">àudio de Speex</comment>
+    <comment xml:lang="ca">àudio Speex</comment>
     <comment xml:lang="cs">zvuk Speex</comment>
-    <comment xml:lang="da">Speexlyd</comment>
+    <comment xml:lang="da">Speex-lyd</comment>
     <comment xml:lang="de">Speex-Audio</comment>
     <comment xml:lang="el">Ήχος Speex</comment>
-    <comment xml:lang="en_GB">Speex audio</comment>
-    <comment xml:lang="es">sonido Speex</comment>
+    <comment xml:lang="en-GB">Speex audio</comment>
+    <comment xml:lang="es">audio Speex</comment>
     <comment xml:lang="eu">Speex audioa</comment>
     <comment xml:lang="fi">Speex-ääni</comment>
     <comment xml:lang="fo">Speex ljóður</comment>
     <comment xml:lang="fr">audio Speex</comment>
+    <comment xml:lang="fur">audio Speex</comment>
     <comment xml:lang="ga">fuaim Speex</comment>
     <comment xml:lang="gl">son Speex</comment>
     <comment xml:lang="he">שמע של Speex</comment>
@@ -17463,7 +18067,7 @@
     <comment xml:lang="oc">àudio Speex</comment>
     <comment xml:lang="pl">Plik dźwiękowy Speex</comment>
     <comment xml:lang="pt">áudio Speex</comment>
-    <comment xml:lang="pt_BR">Áudio Speex</comment>
+    <comment xml:lang="pt-BR">Áudio Speex</comment>
     <comment xml:lang="ro">Audio Speex</comment>
     <comment xml:lang="ru">Аудио Speex</comment>
     <comment xml:lang="sk">Zvuk Speex</comment>
@@ -17474,30 +18078,32 @@
     <comment xml:lang="tr">Speex sesi</comment>
     <comment xml:lang="uk">звук Speex</comment>
     <comment xml:lang="vi">Âm thanh Speex</comment>
-    <comment xml:lang="zh_CN">Speex 音频</comment>
-    <comment xml:lang="zh_TW">Speex 音訊</comment>
+    <comment xml:lang="zh-CN">Speex 音频</comment>
+    <comment xml:lang="zh-TW">Speex 音訊</comment>
     <magic priority="50">
-      <match value="Speex" type="string" offset="0"/>
+      <match type="string" value="Speex" offset="0"/>
     </magic>
     <glob pattern="*.spx"/>
   </mime-type>
   <mime-type type="video/x-theora+ogg">
     <comment>Ogg Theora video</comment>
+    <comment xml:lang="af">Ogg Theora-video</comment>
     <comment xml:lang="ar">Ogg Theora مرئي</comment>
     <comment xml:lang="ast">Videu n'Ogg Theora</comment>
-    <comment xml:lang="be@latin">Videa Ogg Theora</comment>
+    <comment xml:lang="be-Latn">Videa Ogg Theora</comment>
     <comment xml:lang="bg">Видео — Ogg Theora</comment>
     <comment xml:lang="ca">vídeo Ogg Theora</comment>
     <comment xml:lang="cs">video Ogg Theora</comment>
     <comment xml:lang="da">Ogg Theora-video</comment>
     <comment xml:lang="de">Ogg-Theora-Video</comment>
     <comment xml:lang="el">Βίντεο Ogg Theora</comment>
-    <comment xml:lang="en_GB">Ogg Theora video</comment>
+    <comment xml:lang="en-GB">Ogg Theora video</comment>
     <comment xml:lang="es">vídeo Ogg Theora</comment>
     <comment xml:lang="eu">Ogg Theora bideoa</comment>
     <comment xml:lang="fi">Ogg Theora -video</comment>
     <comment xml:lang="fo">Ogg Theora video</comment>
     <comment xml:lang="fr">vidéo Ogg Theora</comment>
+    <comment xml:lang="fur">video Ogg Theora</comment>
     <comment xml:lang="ga">físeán Ogg Theora</comment>
     <comment xml:lang="gl">vídeo Ogg Theora</comment>
     <comment xml:lang="he">שמע Ogg Theora</comment>
@@ -17518,7 +18124,7 @@
     <comment xml:lang="oc">vidèo Ogg Theora</comment>
     <comment xml:lang="pl">Plik wideo Ogg Theora</comment>
     <comment xml:lang="pt">vídeo Ogg Theora</comment>
-    <comment xml:lang="pt_BR">Vídeo Ogg Theora</comment>
+    <comment xml:lang="pt-BR">Vídeo Ogg Theora</comment>
     <comment xml:lang="ro">Video Ogg Theora</comment>
     <comment xml:lang="ru">Видео Ogg Theora</comment>
     <comment xml:lang="sk">Video Ogg Theora</comment>
@@ -17529,35 +18135,37 @@
     <comment xml:lang="tr">Ogg Theora video</comment>
     <comment xml:lang="uk">відеокліп ogg Theora</comment>
     <comment xml:lang="vi">Ảnh động Theora Ogg</comment>
-    <comment xml:lang="zh_CN">Ogg Theora 视频</comment>
-    <comment xml:lang="zh_TW">Ogg Theora 視訊</comment>
+    <comment xml:lang="zh-CN">Ogg Theora 视频</comment>
+    <comment xml:lang="zh-TW">Ogg Theora 視訊</comment>
     <sub-class-of type="video/ogg"/>
     <alias type="video/x-theora"/>
     <magic priority="80">
-      <match value="OggS" type="string" offset="0">
-        <match value="\x80theora" type="string" offset="28"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="\x80theora" offset="28"/>
       </match>
     </magic>
     <glob pattern="*.ogg"/>
   </mime-type>
   <mime-type type="video/x-ogm+ogg">
     <comment>OGM video</comment>
+    <comment xml:lang="af">OGM-video</comment>
     <comment xml:lang="ar">OGM مرئي</comment>
     <comment xml:lang="ast">Videu n'OGM</comment>
-    <comment xml:lang="be@latin">Videa OGM</comment>
+    <comment xml:lang="be-Latn">Videa OGM</comment>
     <comment xml:lang="bg">Видео — OGM</comment>
     <comment xml:lang="ca">vídeo OGM</comment>
     <comment xml:lang="cs">video OGM</comment>
     <comment xml:lang="da">OGM-video</comment>
     <comment xml:lang="de">OGM-Video</comment>
     <comment xml:lang="el">Βίντεο OGM</comment>
-    <comment xml:lang="en_GB">OGM video</comment>
+    <comment xml:lang="en-GB">OGM video</comment>
     <comment xml:lang="eo">OGM-video</comment>
     <comment xml:lang="es">vídeo OGM</comment>
     <comment xml:lang="eu">OGM bideoa</comment>
     <comment xml:lang="fi">OGM-video</comment>
     <comment xml:lang="fo">OGM video</comment>
     <comment xml:lang="fr">vidéo OGM</comment>
+    <comment xml:lang="fur">video OGM</comment>
     <comment xml:lang="ga">físeán OGM</comment>
     <comment xml:lang="gl">vídeo OGM</comment>
     <comment xml:lang="he">וידאו OGM</comment>
@@ -17578,7 +18186,7 @@
     <comment xml:lang="oc">vidèo OGM</comment>
     <comment xml:lang="pl">Plik wideo OGM</comment>
     <comment xml:lang="pt">vídeo OGM</comment>
-    <comment xml:lang="pt_BR">Vídeo OGM</comment>
+    <comment xml:lang="pt-BR">Vídeo OGM</comment>
     <comment xml:lang="ro">Video OGM</comment>
     <comment xml:lang="ru">Видео OGM</comment>
     <comment xml:lang="sk">Video OGM</comment>
@@ -17589,43 +18197,45 @@
     <comment xml:lang="tr">OGM video</comment>
     <comment xml:lang="uk">відеокліп OGM</comment>
     <comment xml:lang="vi">Ảnh động OGM</comment>
-    <comment xml:lang="zh_CN">OGM 视频</comment>
-    <comment xml:lang="zh_TW">OGM 視訊</comment>
+    <comment xml:lang="zh-CN">OGM 视频</comment>
+    <comment xml:lang="zh-TW">OGM 視訊</comment>
     <sub-class-of type="video/ogg"/>
     <alias type="video/x-ogm"/>
     <magic priority="80">
-      <match value="OggS" type="string" offset="0">
-        <match value="video" type="string" offset="29"/>
+      <match type="string" value="OggS" offset="0">
+        <match type="string" value="video" offset="29"/>
       </match>
     </magic>
     <glob pattern="*.ogm"/>
   </mime-type>
-  
+  <!-- These are typically compount document of various types, so prefer
+       extensions for these -->
   <mime-type type="application/x-ole-storage">
     <comment>OLE2 compound document storage</comment>
     <comment xml:lang="ar">تخزين مجمع مستند OLE2</comment>
     <comment xml:lang="ast">Almacenamientu de documentos compuestu por OLE2</comment>
-    <comment xml:lang="be@latin">Schovišča dla kampanentaŭ dakumentu OLE2</comment>
+    <comment xml:lang="be-Latn">Schovišča dla kampanentaŭ dakumentu OLE2</comment>
     <comment xml:lang="bg">Съставен документ-хранилище — OLE2</comment>
     <comment xml:lang="ca">emmagatzematge de documents compostos OLE2</comment>
     <comment xml:lang="cs">úložiště složeného dokumentu OLE2</comment>
     <comment xml:lang="da">OLE2-sammensat dokumentlager</comment>
     <comment xml:lang="de">OLE2-Verbunddokumentenspeicher</comment>
     <comment xml:lang="el">Αρχείο συμπαγούς αποθήκευσης εγγράφων OLE2</comment>
-    <comment xml:lang="en_GB">OLE2 compound document storage</comment>
+    <comment xml:lang="en-GB">OLE2 compound document storage</comment>
     <comment xml:lang="eo">OLE2-deponejo de parentezaj dokumentoj</comment>
     <comment xml:lang="es">almacenamiento de documentos compuestos OLE2</comment>
     <comment xml:lang="eu">OLE2 konposatutako dokumentu-bilduma</comment>
     <comment xml:lang="fi">OLE2-yhdisteasiakirjatallenne</comment>
     <comment xml:lang="fo">OLE2 samansett skjalagoymsla</comment>
     <comment xml:lang="fr">document de stockage composé OLE2</comment>
+    <comment xml:lang="fur">memorizazion document compost OLE2</comment>
     <comment xml:lang="ga">stóras cáipéisí comhshuite OLE2</comment>
     <comment xml:lang="gl">almacenamento de documento composto OLE2</comment>
     <comment xml:lang="he">אחסון מסמך משותף OLE2</comment>
     <comment xml:lang="hr">OLE2 pohrana složenog dokumenta</comment>
     <comment xml:lang="hu">OLE2 összetett dokumentumtároló</comment>
     <comment xml:lang="ia">Magazin de documentos composite OLE2</comment>
-    <comment xml:lang="id">penyimpan dokumen kompon OLE2</comment>
+    <comment xml:lang="id">Penyimpan dokumen kompon OLE2</comment>
     <comment xml:lang="it">Memorizzazione documento composto OLE2</comment>
     <comment xml:lang="ja">OLE2 複合ドキュメントストレージ</comment>
     <comment xml:lang="kk">OLE2 құрама құжаттар қоймасы</comment>
@@ -17639,7 +18249,7 @@
     <comment xml:lang="oc">document d'emmagazinatge compausat OLE2</comment>
     <comment xml:lang="pl">Magazyn dokumentu złożonego OLE2</comment>
     <comment xml:lang="pt">armazenamento de documento composto OLE2</comment>
-    <comment xml:lang="pt_BR">Armazenamento de documento composto OLE2</comment>
+    <comment xml:lang="pt-BR">Armazenamento de documento composto OLE2</comment>
     <comment xml:lang="ro">Document de stocare compus OLE2</comment>
     <comment xml:lang="ru">Хранилище составных документов OLE2</comment>
     <comment xml:lang="sk">Úložisko zloženého dokumentu OLE2</comment>
@@ -17650,27 +18260,30 @@
     <comment xml:lang="tr">OLE2 bileşik belge depolama</comment>
     <comment xml:lang="uk">сховище складних документів OLE2</comment>
     <comment xml:lang="vi">Kho lưu tài liệu ghép OLE2</comment>
-    <comment xml:lang="zh_CN">OLE2 组合文档存储</comment>
-    <comment xml:lang="zh_TW">OLE2 複合文件儲存</comment>
+    <comment xml:lang="zh-CN">OLE2 组合文档存储</comment>
+    <comment xml:lang="zh-TW">OLE2 複合文件儲存</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="\320\317\021\340\241\261\032\341" type="string" offset="0"/>
-      <match value="0xe011cfd0" type="little32" offset="0"/>
+      <match type="string" value="\320\317\021\340\241\261\032\341" offset="0"/>
+      <match type="little32" value="0xe011cfd0" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/vnd.ms-publisher">
     <comment>Microsoft Publisher document</comment>
+    <comment xml:lang="af">Microsoft Publisher-dokument</comment>
     <comment xml:lang="ast">Documentu de Microsoft Publisher</comment>
+    <comment xml:lang="bg">Документ — Microsoft Publisher</comment>
     <comment xml:lang="ca">document de Microsoft Publisher</comment>
     <comment xml:lang="cs">dokument Microsoft Publisher</comment>
     <comment xml:lang="da">Microsoft Publisher-dokument</comment>
     <comment xml:lang="de">Microsoft-Publisher-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Microsoft Publisher</comment>
-    <comment xml:lang="en_GB">Microsoft Publisher document</comment>
+    <comment xml:lang="en-GB">Microsoft Publisher document</comment>
     <comment xml:lang="es">documento de Microsoft Publisher</comment>
     <comment xml:lang="eu">Microsoft Publisher dokumentua</comment>
     <comment xml:lang="fi">Microsoft Publisher -asiakirja</comment>
     <comment xml:lang="fr">document Microsoft Publisher</comment>
+    <comment xml:lang="fur">document Microsoft Publisher</comment>
     <comment xml:lang="ga">cáipéis Microsoft Publisher</comment>
     <comment xml:lang="gl">Documento de Microsoft Publisher</comment>
     <comment xml:lang="he">מסמך Microsoft Publisher</comment>
@@ -17684,7 +18297,7 @@
     <comment xml:lang="oc">document Microsoft Publisher</comment>
     <comment xml:lang="pl">Dokument Microsoft Publisher</comment>
     <comment xml:lang="pt">documento Microsoft Publisher</comment>
-    <comment xml:lang="pt_BR">Documento do Microsoft Publisher</comment>
+    <comment xml:lang="pt-BR">Documento do Microsoft Publisher</comment>
     <comment xml:lang="ru">Документ Microsoft Publisher</comment>
     <comment xml:lang="sk">Dokument Microsoft Publisher</comment>
     <comment xml:lang="sl">Dokument Microsoft Publisher</comment>
@@ -17692,27 +18305,29 @@
     <comment xml:lang="sv">Microsoft Publisher-dokument</comment>
     <comment xml:lang="tr">Microsoft Publisher belgesi</comment>
     <comment xml:lang="uk">документ Microsoft Publisher</comment>
-    <comment xml:lang="zh_CN">Microsoft Publisher 文档</comment>
-    <comment xml:lang="zh_TW">Microsoft Publisher 文件</comment>
+    <comment xml:lang="zh-CN">Microsoft Publisher 文档</comment>
+    <comment xml:lang="zh-TW">微軟 Publisher 文件</comment>
     <sub-class-of type="application/x-ole-storage"/>
     <glob pattern="*.pub"/>
   </mime-type>
   <mime-type type="application/x-msi">
     <comment>Windows Installer package</comment>
+    <comment xml:lang="af">Windows-installeerpakket</comment>
     <comment xml:lang="ar">حزمة مثبّت ويندوز</comment>
-    <comment xml:lang="be@latin">Pakunak Windows Installer</comment>
+    <comment xml:lang="be-Latn">Pakunak Windows Installer</comment>
     <comment xml:lang="bg">Пакет — инсталация за Windows</comment>
     <comment xml:lang="ca">paquet de Windows Installer</comment>
     <comment xml:lang="cs">balíček Windows Installer</comment>
-    <comment xml:lang="da">Windows Installer-pakke</comment>
+    <comment xml:lang="da">Windows installationsprogram-pakke</comment>
     <comment xml:lang="de">Windows-Installationspaket</comment>
     <comment xml:lang="el">Πακέτο Windows Installer</comment>
-    <comment xml:lang="en_GB">Windows Installer package</comment>
+    <comment xml:lang="en-GB">Windows Installer package</comment>
     <comment xml:lang="es">paquete de instalación de Windows</comment>
     <comment xml:lang="eu">Windows-eko pakete instalatzailea</comment>
     <comment xml:lang="fi">Windows-asennuspaketti</comment>
     <comment xml:lang="fo">Windows innleggingarpakki</comment>
     <comment xml:lang="fr">paquet d'installation Windows</comment>
+    <comment xml:lang="fur">pachet Windows Installer</comment>
     <comment xml:lang="ga">pacáiste Windows Installer</comment>
     <comment xml:lang="gl">paquete de instalación de Windows</comment>
     <comment xml:lang="he">חבילה של Windows Installer</comment>
@@ -17731,7 +18346,7 @@
     <comment xml:lang="oc">paquet d'installacion Windows</comment>
     <comment xml:lang="pl">Pakiet instalatora Windows</comment>
     <comment xml:lang="pt">pacote de instalação Windows</comment>
-    <comment xml:lang="pt_BR">Pacote do Windows Installer</comment>
+    <comment xml:lang="pt-BR">Pacote do Windows Installer</comment>
     <comment xml:lang="ro">Pachet instalator Windows</comment>
     <comment xml:lang="ru">Пакет Windows Installer</comment>
     <comment xml:lang="sk">Balík Windows Installer</comment>
@@ -17742,28 +18357,30 @@
     <comment xml:lang="tr">Windows Installer paketi</comment>
     <comment xml:lang="uk">пакунок Windows Installer</comment>
     <comment xml:lang="vi">Gói cài đặt Windows</comment>
-    <comment xml:lang="zh_CN">Windows 程序安装包</comment>
-    <comment xml:lang="zh_TW">Windows Installer 軟體包</comment>
+    <comment xml:lang="zh-CN">Windows 程序安装包</comment>
+    <comment xml:lang="zh-TW">Windows Installer 軟體包</comment>
     <sub-class-of type="application/x-ole-storage"/>
     <glob pattern="*.msi"/>
   </mime-type>
   <mime-type type="application/x-oleo">
     <comment>GNU Oleo spreadsheet</comment>
+    <comment xml:lang="af">GNU Oleo-sigblad</comment>
     <comment xml:lang="ar">جدول جنو Oleo</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš GNU Oleo</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš GNU Oleo</comment>
     <comment xml:lang="bg">Таблица — GNU Oleo</comment>
     <comment xml:lang="ca">full de càlcul de GNU Oleo</comment>
     <comment xml:lang="cs">sešit GNU Oleo</comment>
     <comment xml:lang="da">GNU Oleo-regneark</comment>
     <comment xml:lang="de">GNU-Oleo-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο GNU Oleo</comment>
-    <comment xml:lang="en_GB">GNU Oleo spreadsheet</comment>
+    <comment xml:lang="en-GB">GNU Oleo spreadsheet</comment>
     <comment xml:lang="eo">Kalkultabelo de GNU Oleo</comment>
     <comment xml:lang="es">hoja de cálculo de GNU Oleo</comment>
     <comment xml:lang="eu">GNU Oleo kalkulu-orria</comment>
     <comment xml:lang="fi">GNU Oleo -taulukko</comment>
     <comment xml:lang="fo">GNU Oleo rokniark</comment>
     <comment xml:lang="fr">feuille de calcul GNU Oleo</comment>
+    <comment xml:lang="fur">sfuei di calcul GNU Oleo</comment>
     <comment xml:lang="ga">scarbhileog GNU Oleo</comment>
     <comment xml:lang="gl">folla de cálculo de Oleo GNU</comment>
     <comment xml:lang="he">גליון נתונים של GNU Oleo</comment>
@@ -17785,7 +18402,7 @@
     <comment xml:lang="oc">fuèlh de calcul GNU Oleo</comment>
     <comment xml:lang="pl">Arkusz GNU Oleo</comment>
     <comment xml:lang="pt">folha de cálculo GNU Oleo</comment>
-    <comment xml:lang="pt_BR">Planilha do GNU Oleo</comment>
+    <comment xml:lang="pt-BR">Planilha do GNU Oleo</comment>
     <comment xml:lang="ro">Foaie de calcul GNU Oleo</comment>
     <comment xml:lang="ru">Электронная таблица GNU Oleo</comment>
     <comment xml:lang="sk">Zošit GNU Oleo</comment>
@@ -17793,34 +18410,36 @@
     <comment xml:lang="sq">Fletë llogaritje GNU Oleo</comment>
     <comment xml:lang="sr">ГНУ Олео табела</comment>
     <comment xml:lang="sv">GNU Oleo-kalkylblad</comment>
-    <comment xml:lang="tr">GNU Oleo çalışma sayfası</comment>
+    <comment xml:lang="tr">GNU Oleo hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця GNU Oleo</comment>
     <comment xml:lang="vi">Bảng tính Oleo của GNU</comment>
-    <comment xml:lang="zh_CN">GNU Oleo 电子表格</comment>
-    <comment xml:lang="zh_TW">GNU Oleo 試算表</comment>
+    <comment xml:lang="zh-CN">GNU Oleo 电子表格</comment>
+    <comment xml:lang="zh-TW">GNU Oleo 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="Oleo" type="string" offset="31"/>
+      <match type="string" value="Oleo" offset="31"/>
     </magic>
     <glob pattern="*.oleo"/>
   </mime-type>
   <mime-type type="application/x-pak">
     <comment>PAK archive</comment>
+    <comment xml:lang="af">PAK-argief</comment>
     <comment xml:lang="ar">أرشيف PAK</comment>
-    <comment xml:lang="be@latin">Archiŭ PAK</comment>
+    <comment xml:lang="be-Latn">Archiŭ PAK</comment>
     <comment xml:lang="bg">Архив — PAK</comment>
     <comment xml:lang="ca">arxiu PAK</comment>
     <comment xml:lang="cs">archiv PAK</comment>
     <comment xml:lang="da">PAK-arkiv</comment>
     <comment xml:lang="de">PAK-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο PAK</comment>
-    <comment xml:lang="en_GB">PAK archive</comment>
+    <comment xml:lang="en-GB">PAK archive</comment>
     <comment xml:lang="eo">PAK-arkivo</comment>
     <comment xml:lang="es">archivador PAK</comment>
     <comment xml:lang="eu">PAK artxiboa</comment>
     <comment xml:lang="fi">PAK-arkisto</comment>
     <comment xml:lang="fo">PAK skjalasavn</comment>
     <comment xml:lang="fr">archive PAK</comment>
+    <comment xml:lang="fur">archivi PAK</comment>
     <comment xml:lang="ga">cartlann PAK</comment>
     <comment xml:lang="gl">arquivo PAK</comment>
     <comment xml:lang="he">ארכיון PAK</comment>
@@ -17841,7 +18460,7 @@
     <comment xml:lang="oc">archiu PAK</comment>
     <comment xml:lang="pl">Archiwum PAK</comment>
     <comment xml:lang="pt">arquivo PAK</comment>
-    <comment xml:lang="pt_BR">Pacote PAK</comment>
+    <comment xml:lang="pt-BR">Pacote PAK</comment>
     <comment xml:lang="ro">Arhivă PAK</comment>
     <comment xml:lang="ru">Архив PAK</comment>
     <comment xml:lang="sk">Archív PAK</comment>
@@ -17852,19 +18471,20 @@
     <comment xml:lang="tr">PAK arşivi</comment>
     <comment xml:lang="uk">архів PAK</comment>
     <comment xml:lang="vi">Kho nén PAK</comment>
-    <comment xml:lang="zh_CN">PAK 归档文件</comment>
-    <comment xml:lang="zh_TW">PAK 封存檔</comment>
+    <comment xml:lang="zh-CN">PAK 归档文件</comment>
+    <comment xml:lang="zh-TW">PAK 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="80">
-      <match value="PACK" type="string" offset="0"/>
+      <match offset="0" type="string" value="PACK"/>
     </magic>
     <glob pattern="*.pak"/>
   </mime-type>
   <mime-type type="application/vnd.palm">
     <comment>Palm OS database</comment>
+    <comment xml:lang="af">Palm OS-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات Palm OS</comment>
     <comment xml:lang="az">Palm OS mə'lumat bazası</comment>
-    <comment xml:lang="be@latin">Baza źviestak Palm OS</comment>
+    <comment xml:lang="be-Latn">Baza źviestak Palm OS</comment>
     <comment xml:lang="bg">База от данни — Palm OS</comment>
     <comment xml:lang="ca">base de dades Palm OS</comment>
     <comment xml:lang="cs">databáze Palm OS</comment>
@@ -17872,13 +18492,14 @@
     <comment xml:lang="da">Palm OS-database</comment>
     <comment xml:lang="de">Palm-OS-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων Palm OS</comment>
-    <comment xml:lang="en_GB">Palm OS database</comment>
+    <comment xml:lang="en-GB">Palm OS database</comment>
     <comment xml:lang="eo">datumbazo de Palm OS</comment>
     <comment xml:lang="es">base de datos de Palm OS</comment>
     <comment xml:lang="eu">Palm OS datu-basea</comment>
     <comment xml:lang="fi">Palm OS -tietokanta</comment>
     <comment xml:lang="fo">Palm OS dátustovnur</comment>
     <comment xml:lang="fr">base de données Palm OS</comment>
+    <comment xml:lang="fur">base di dâts Palm OS</comment>
     <comment xml:lang="ga">bunachar sonraí Palm OS</comment>
     <comment xml:lang="gl">base de datos de Palm OS</comment>
     <comment xml:lang="he">מסד נתונים של Palm OS</comment>
@@ -17899,7 +18520,7 @@
     <comment xml:lang="oc">banca de donadas Palm OS</comment>
     <comment xml:lang="pl">Baza danych Palm OS</comment>
     <comment xml:lang="pt">base de dados Palm OS</comment>
-    <comment xml:lang="pt_BR">Banco de dados do Palm OS</comment>
+    <comment xml:lang="pt-BR">Banco de dados do Palm OS</comment>
     <comment xml:lang="ro">Bază de date Palm OS</comment>
     <comment xml:lang="ru">База данных Palm OS</comment>
     <comment xml:lang="sk">Databáza Palm OS</comment>
@@ -17907,11 +18528,11 @@
     <comment xml:lang="sq">Bankë me të dhëna Palm OS</comment>
     <comment xml:lang="sr">база података Палм ОС-а</comment>
     <comment xml:lang="sv">Palm OS-databas</comment>
-    <comment xml:lang="tr">Palm OS veritabanı</comment>
+    <comment xml:lang="tr">Palm OS veri tabanı</comment>
     <comment xml:lang="uk">база даних Palm OS</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu PalmOS</comment>
-    <comment xml:lang="zh_CN">Palm OS 数据库</comment>
-    <comment xml:lang="zh_TW">Palm OS 資料庫</comment>
+    <comment xml:lang="zh-CN">Palm OS 数据库</comment>
+    <comment xml:lang="zh-TW">Palm OS 資料庫</comment>
     <glob pattern="*.prc"/>
     <glob pattern="*.pdb"/>
     <glob pattern="*.pqa"/>
@@ -17920,20 +18541,22 @@
   </mime-type>
   <mime-type type="application/x-par2">
     <comment>Parchive archive</comment>
+    <comment xml:lang="af">Parchive-argief</comment>
     <comment xml:lang="ar">أرشيف Parchive</comment>
-    <comment xml:lang="be@latin">Archiŭ Parchive</comment>
+    <comment xml:lang="be-Latn">Archiŭ Parchive</comment>
     <comment xml:lang="bg">Архив — parchive</comment>
     <comment xml:lang="ca">arxiu Parchive</comment>
     <comment xml:lang="cs">archiv Parchive</comment>
     <comment xml:lang="da">Parchive-arkiv</comment>
     <comment xml:lang="de">Parchive-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Parchive</comment>
-    <comment xml:lang="en_GB">Parchive archive</comment>
+    <comment xml:lang="en-GB">Parchive archive</comment>
     <comment xml:lang="es">archivador Parchive</comment>
     <comment xml:lang="eu">Parchive artxiboa</comment>
     <comment xml:lang="fi">Parchive-arkisto</comment>
     <comment xml:lang="fo">Parchive skjalasavn</comment>
     <comment xml:lang="fr">archive Parchive</comment>
+    <comment xml:lang="fur">archivi Parchive</comment>
     <comment xml:lang="ga">cartlann Parchive</comment>
     <comment xml:lang="gl">arquivo Parchive</comment>
     <comment xml:lang="he">ארכיון של Parchive</comment>
@@ -17953,7 +18576,7 @@
     <comment xml:lang="oc">archiu Parchive</comment>
     <comment xml:lang="pl">Archiwum parchive</comment>
     <comment xml:lang="pt">arquivo Parchive</comment>
-    <comment xml:lang="pt_BR">Pacote Parchive</comment>
+    <comment xml:lang="pt-BR">Pacote Parchive</comment>
     <comment xml:lang="ro">Arhivă Parchive</comment>
     <comment xml:lang="ru">Архив Parchive</comment>
     <comment xml:lang="sk">Archív Parchive</comment>
@@ -17964,34 +18587,36 @@
     <comment xml:lang="tr">Parchive arşivi</comment>
     <comment xml:lang="uk">архів Parchive</comment>
     <comment xml:lang="vi">Kho nén Parchive</comment>
-    <comment xml:lang="zh_CN">Parchive 归档文件</comment>
-    <comment xml:lang="zh_TW">Parchive 封存檔</comment>
+    <comment xml:lang="zh-CN">Parchive 归档文件</comment>
+    <comment xml:lang="zh-TW">Parchive 封存檔</comment>
     <acronym>Parchive</acronym>
     <expanded-acronym>Parity Volume Set Archive</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="PAR2" type="string" offset="0"/>
+      <match offset="0" type="string" value="PAR2"/>
     </magic>
     <glob pattern="*.PAR2"/>
     <glob pattern="*.par2"/>
   </mime-type>
   <mime-type type="application/x-pef-executable">
     <comment>PEF executable</comment>
+    <comment xml:lang="af">PEF-uitvoerbaar</comment>
     <comment xml:lang="ar">PEF تنفيذي</comment>
-    <comment xml:lang="be@latin">Vykonvalny fajł PEF</comment>
+    <comment xml:lang="be-Latn">Vykonvalny fajł PEF</comment>
     <comment xml:lang="bg">Изпълним файл — PEF</comment>
     <comment xml:lang="ca">executable PEF</comment>
     <comment xml:lang="cs">spustitelný soubor PEF</comment>
     <comment xml:lang="da">PEF-kørbar</comment>
     <comment xml:lang="de">PEF-Programm</comment>
     <comment xml:lang="el">Εκτελέσιμο PEF</comment>
-    <comment xml:lang="en_GB">PEF executable</comment>
+    <comment xml:lang="en-GB">PEF executable</comment>
     <comment xml:lang="eo">PEF-plenumebla</comment>
     <comment xml:lang="es">ejecutable PEF</comment>
     <comment xml:lang="eu">PEF exekutagarria</comment>
     <comment xml:lang="fi">PEF-ohjelma</comment>
     <comment xml:lang="fo">PEF inningarfør</comment>
     <comment xml:lang="fr">exécutable PEF</comment>
+    <comment xml:lang="fur">eseguibil PEF</comment>
     <comment xml:lang="ga">comhad inrite PEF</comment>
     <comment xml:lang="gl">Executábel PEF</comment>
     <comment xml:lang="he">קובץ הרצה PEF</comment>
@@ -18012,7 +18637,7 @@
     <comment xml:lang="oc">executable PEF</comment>
     <comment xml:lang="pl">Program PEF</comment>
     <comment xml:lang="pt">executável PEF</comment>
-    <comment xml:lang="pt_BR">Executável PEF</comment>
+    <comment xml:lang="pt-BR">Executável PEF</comment>
     <comment xml:lang="ro">Executabil PEF</comment>
     <comment xml:lang="ru">Исполняемый файл PEF</comment>
     <comment xml:lang="sk">Spustiteľný súbor PEF</comment>
@@ -18023,31 +18648,33 @@
     <comment xml:lang="tr">PEF çalıştırılabilir</comment>
     <comment xml:lang="uk">виконуваний файл PEF</comment>
     <comment xml:lang="vi">Tập tin thực hiện được PEF</comment>
-    <comment xml:lang="zh_CN">PEF 可执行文件</comment>
-    <comment xml:lang="zh_TW">PEF 可執行檔</comment>
+    <comment xml:lang="zh-CN">PEF 可执行文件</comment>
+    <comment xml:lang="zh-TW">PEF 可執行檔</comment>
     <generic-icon name="application-x-executable"/>
     <magic priority="50">
-      <match value="Joy!" type="string" offset="0"/>
+      <match type="string" value="Joy!" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-perl">
     <comment>Perl script</comment>
+    <comment xml:lang="af">Perl-skrip</comment>
     <comment xml:lang="ar">سكربت بيرل</comment>
-    <comment xml:lang="be@latin">Skrypt Perl</comment>
+    <comment xml:lang="be-Latn">Skrypt Perl</comment>
     <comment xml:lang="bg">Скрипт — Perl</comment>
     <comment xml:lang="ca">script Perl</comment>
     <comment xml:lang="cs">skript v Perlu</comment>
     <comment xml:lang="cy">Sgript Perl</comment>
-    <comment xml:lang="da">Perlprogram</comment>
+    <comment xml:lang="da">Perl-program</comment>
     <comment xml:lang="de">Perl-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών Perl</comment>
-    <comment xml:lang="en_GB">Perl script</comment>
+    <comment xml:lang="en-GB">Perl script</comment>
     <comment xml:lang="eo">Perl-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en Perl</comment>
     <comment xml:lang="eu">Perl script-a</comment>
     <comment xml:lang="fi">Perl-komentotiedosto</comment>
     <comment xml:lang="fo">Perl boðrøð</comment>
     <comment xml:lang="fr">script Perl</comment>
+    <comment xml:lang="fur">script Perl</comment>
     <comment xml:lang="ga">script Perl</comment>
     <comment xml:lang="gl">Script de Perl</comment>
     <comment xml:lang="he">תסריט מעטפת של Perl</comment>
@@ -18068,7 +18695,7 @@
     <comment xml:lang="oc">escript Perl</comment>
     <comment xml:lang="pl">Skrypt Perl</comment>
     <comment xml:lang="pt">script Perl</comment>
-    <comment xml:lang="pt_BR">Script Perl</comment>
+    <comment xml:lang="pt-BR">Script Perl</comment>
     <comment xml:lang="ro">Script Perl</comment>
     <comment xml:lang="ru">Сценарий Perl</comment>
     <comment xml:lang="sk">Skript jazyka Perl</comment>
@@ -18079,40 +18706,41 @@
     <comment xml:lang="tr">Perl betiği</comment>
     <comment xml:lang="uk">скрипт на Perl</comment>
     <comment xml:lang="vi">Văn lệnh Perl</comment>
-    <comment xml:lang="zh_CN">Perl 脚本</comment>
-    <comment xml:lang="zh_TW">Perl 指令稿</comment>
+    <comment xml:lang="zh-CN">Perl 脚本</comment>
+    <comment xml:lang="zh-TW">Perl 指令稿</comment>
     <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <alias type="text/x-perl"/>
     <magic priority="50">
-      <match value='eval \"exec /usr/local/bin/perl' type="string" offset="0"/>
-      <match value="/bin/perl" type="string" offset="2:16"/>
-      <match value="/bin/env perl" type="string" offset="2:16"/>
-      <match value="use strict" type="string" offset="0:256"/>
-      <match value="use warnings" type="string" offset="0:256"/>
-      <match value="use diagnostics" type="string" offset="0:256"/>
-      <match value="use Test::" type="string" offset="0:256"/>
-      <match value="BEGIN {" type="string" offset="0:256"/>
+      <match type="string" value="eval \&quot;exec /usr/local/bin/perl" offset="0"/>
+      <match type="string" value="/bin/perl" offset="2:16"/>
+      <match type="string" value="/bin/env perl" offset="2:16"/>
+      <match type="string" value="use Test::" offset="0:256"/>
+      <match type="string" value="BEGIN {" offset="0:256"/>
     </magic>
     <magic priority="40">
-      <match value="\n=pod" type="string" offset="0:256"/>
-      <match value="\n=head1 NAME" type="string" offset="0:256"/>
-      <match value="\n=head1 DESCRIPTION" type="string" offset="0:256"/>
+      <match type="string" value="use strict" offset="0:256"/>
+      <match type="string" value="use warnings" offset="0:256"/>
+      <match type="string" value="use diagnostics" offset="0:256"/>
+      <match type="string" value="\n=pod" offset="0:256"/>
+      <match type="string" value="\n=head1 NAME" offset="0:256"/>
+      <match type="string" value="\n=head1 DESCRIPTION" offset="0:256"/>
     </magic>
     <glob pattern="*.pl"/>
-    <glob pattern="*.PL"/>
-    <glob pattern="*.pm"/>
-    <glob pattern="*.al"/>
+    <glob pattern="*.PL"/><!-- CPAN-style Perl build script -->
+    <glob pattern="*.pm"/><!-- module -->
+    <glob pattern="*.al"/><!-- autoloader -->
     <glob pattern="*.perl"/>
-    <glob pattern="*.pod"/>
-    <glob weight="10" pattern="*.t"/>
+    <glob pattern="*.pod"/><!-- documentation -->
+    <glob pattern="*.t" weight="10"/><!-- CPAN-style Perl test script -->
   </mime-type>
   <mime-type type="application/x-php">
     <comment>PHP script</comment>
+    <comment xml:lang="af">PHP-skrip</comment>
     <comment xml:lang="ar">سكربت PHP</comment>
     <comment xml:lang="az">PHP skripti</comment>
-    <comment xml:lang="be@latin">Skrypt PHP</comment>
+    <comment xml:lang="be-Latn">Skrypt PHP</comment>
     <comment xml:lang="bg">Скрипт — PHP</comment>
     <comment xml:lang="ca">script PHP</comment>
     <comment xml:lang="cs">skript PHP</comment>
@@ -18120,13 +18748,14 @@
     <comment xml:lang="da">PHP-program</comment>
     <comment xml:lang="de">PHP-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών PHP</comment>
-    <comment xml:lang="en_GB">PHP script</comment>
+    <comment xml:lang="en-GB">PHP script</comment>
     <comment xml:lang="eo">PHP-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en PHP</comment>
     <comment xml:lang="eu">PHP script-a</comment>
     <comment xml:lang="fi">PHP-komentotiedosto</comment>
     <comment xml:lang="fo">PHP boðrøð</comment>
     <comment xml:lang="fr">script PHP</comment>
+    <comment xml:lang="fur">script PHP</comment>
     <comment xml:lang="ga">script PHP</comment>
     <comment xml:lang="gl">Script de PHP</comment>
     <comment xml:lang="he">תסריט מעטפת של PHP</comment>
@@ -18147,7 +18776,7 @@
     <comment xml:lang="oc">escript PHP</comment>
     <comment xml:lang="pl">Skrypt PHP</comment>
     <comment xml:lang="pt">script PHP</comment>
-    <comment xml:lang="pt_BR">Script PHP</comment>
+    <comment xml:lang="pt-BR">Script PHP</comment>
     <comment xml:lang="ro">Script PHP</comment>
     <comment xml:lang="ru">Сценарий PHP</comment>
     <comment xml:lang="sk">Skript PHP</comment>
@@ -18158,12 +18787,12 @@
     <comment xml:lang="tr">PHP betiği</comment>
     <comment xml:lang="uk">скрипт PHP</comment>
     <comment xml:lang="vi">Văn lệnh PHP</comment>
-    <comment xml:lang="zh_CN">PHP 脚本</comment>
-    <comment xml:lang="zh_TW">PHP 指令稿</comment>
+    <comment xml:lang="zh-CN">PHP 脚本</comment>
+    <comment xml:lang="zh-TW">PHP 指令稿</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <magic priority="80">
-      <match value="&lt;?php" type="string" offset="0:64"/>
+      <match type="string" value="&lt;?php" offset="0:64"/>
     </magic>
     <glob pattern="*.php"/>
     <glob pattern="*.php3"/>
@@ -18173,19 +18802,21 @@
   </mime-type>
   <mime-type type="application/x-pkcs7-certificates">
     <comment>PKCS#7 certificate bundle</comment>
+    <comment xml:lang="af">PKCS#7-sertifikaatbundel</comment>
     <comment xml:lang="ar">رزمة الشهادة PKCS#7</comment>
-    <comment xml:lang="bg">Сбор със сертификати — PKCS#7</comment>
+    <comment xml:lang="bg">Пакет със сертификати — PKCS#7</comment>
     <comment xml:lang="ca">conjunt de certificats PKCS#7</comment>
     <comment xml:lang="cs">svazek certifikátů PKCS#7</comment>
     <comment xml:lang="da">PKCS#7-certifikatbundt</comment>
     <comment xml:lang="de">PKCS#7-Zertifikatspaket</comment>
     <comment xml:lang="el">Πακέτο ψηφιακών πιστοποιητικών PKCS#7</comment>
-    <comment xml:lang="en_GB">PKCS#7 certificate bundle</comment>
+    <comment xml:lang="en-GB">PKCS#7 certificate bundle</comment>
     <comment xml:lang="es">lote de certificados PCKS#7</comment>
     <comment xml:lang="eu">PKCS#7 zertifikazio sorta</comment>
     <comment xml:lang="fi">PKCS#7-varmennenippu</comment>
     <comment xml:lang="fo">PKCS#7 váttanar bundi</comment>
     <comment xml:lang="fr">lot de certificats PKCS#7</comment>
+    <comment xml:lang="fur">côl di certificâts PKCS#7</comment>
     <comment xml:lang="ga">burla teastas PKCS#7</comment>
     <comment xml:lang="gl">paquete de certificado PKCS#7</comment>
     <comment xml:lang="he">בקשה מוסמכת PKCS#7</comment>
@@ -18203,7 +18834,7 @@
     <comment xml:lang="oc">lòt de certificats PKCS#7</comment>
     <comment xml:lang="pl">Pakiet certyfikatu PKCS#7</comment>
     <comment xml:lang="pt">pacote de certificação PKCS#7</comment>
-    <comment xml:lang="pt_BR">Pacote de certificados PKCS#7</comment>
+    <comment xml:lang="pt-BR">Pacote de certificados PKCS#7</comment>
     <comment xml:lang="ro">Pachet certificat PKCS#7</comment>
     <comment xml:lang="ru">Пакет сертификата PKCS#7</comment>
     <comment xml:lang="sk">Zväzok certifikátov PKCS#7</comment>
@@ -18213,8 +18844,8 @@
     <comment xml:lang="tr">PKCS#7 sertifika paketi</comment>
     <comment xml:lang="uk">комплект сертифікатів PKCS#7</comment>
     <comment xml:lang="vi">Bó chứng nhận PKCS#7</comment>
-    <comment xml:lang="zh_CN">PKCS#7 证书束</comment>
-    <comment xml:lang="zh_TW">PKCS#7 憑證綁包</comment>
+    <comment xml:lang="zh-CN">PKCS#7 证书束</comment>
+    <comment xml:lang="zh-TW">PKCS#7 憑證綁包</comment>
     <acronym>PKCS</acronym>
     <expanded-acronym>Public-Key Cryptography Standards</expanded-acronym>
     <glob pattern="*.p7b"/>
@@ -18222,21 +18853,23 @@
   </mime-type>
   <mime-type type="application/pkcs12">
     <comment>PKCS#12 certificate bundle</comment>
+    <comment xml:lang="af">PKCS#12-sertifikaatbundel</comment>
     <comment xml:lang="ar">رزمة الشهادة PKCS#12</comment>
-    <comment xml:lang="be@latin">Viazka sertyfikataŭ PKCS#12</comment>
-    <comment xml:lang="bg">Сбор със сертификати — PKCS#12</comment>
+    <comment xml:lang="be-Latn">Viazka sertyfikataŭ PKCS#12</comment>
+    <comment xml:lang="bg">Пакет със сертификати — PKCS#12</comment>
     <comment xml:lang="ca">conjunt de certificats PKCS#12</comment>
     <comment xml:lang="cs">svazek certifikátů PKCS#12</comment>
     <comment xml:lang="da">PKCS#12-certifikatbundt</comment>
     <comment xml:lang="de">PKCS#12-Zertifikatspaket</comment>
     <comment xml:lang="el">Πακέτο ψηφιακών πιστοποιητικών PKCS#12</comment>
-    <comment xml:lang="en_GB">PKCS#12 certificate bundle</comment>
+    <comment xml:lang="en-GB">PKCS#12 certificate bundle</comment>
     <comment xml:lang="eo">ligaĵo de PKCS#12-atestiloj</comment>
     <comment xml:lang="es">lote de certificados PCKS#12</comment>
     <comment xml:lang="eu">PKCS#12 zertifikazio sorta</comment>
     <comment xml:lang="fi">PKCS#12-varmennenippu</comment>
     <comment xml:lang="fo">PKCS#12 váttanar bundi</comment>
     <comment xml:lang="fr">lot de certificats PKCS#12</comment>
+    <comment xml:lang="fur">côl di certificâts PKCS#12</comment>
     <comment xml:lang="ga">burla teastas PKCS#12</comment>
     <comment xml:lang="gl">paquete de certificado PKCS#12</comment>
     <comment xml:lang="he">בקשה מוסמכת PKCS#12</comment>
@@ -18257,7 +18890,7 @@
     <comment xml:lang="oc">lòt de certificats PKCS#12</comment>
     <comment xml:lang="pl">Pakiet certyfikatu PKCS#12</comment>
     <comment xml:lang="pt">pacote de certificação PKCS#12</comment>
-    <comment xml:lang="pt_BR">Pacote de certificados PKCS#12</comment>
+    <comment xml:lang="pt-BR">Pacote de certificados PKCS#12</comment>
     <comment xml:lang="ro">Certificat împachetat PKCS#12</comment>
     <comment xml:lang="ru">Пакет сертификата PKCS#12</comment>
     <comment xml:lang="sk">Zväzok certifikátov PKCS#12</comment>
@@ -18268,8 +18901,8 @@
     <comment xml:lang="tr">PKCS#12 sertifika paketi</comment>
     <comment xml:lang="uk">комплект сертифікатів PKCS#12</comment>
     <comment xml:lang="vi">Bó chứng nhận PKCS#12</comment>
-    <comment xml:lang="zh_CN">PKCS#12 证书束</comment>
-    <comment xml:lang="zh_TW">PKCS#12 憑證檔綁包</comment>
+    <comment xml:lang="zh-CN">PKCS#12 证书束</comment>
+    <comment xml:lang="zh-TW">PKCS#12 憑證綁包</comment>
     <acronym>PKCS</acronym>
     <expanded-acronym>Public-Key Cryptography Standards</expanded-acronym>
     <glob pattern="*.p12"/>
@@ -18278,20 +18911,22 @@
   </mime-type>
   <mime-type type="application/x-planperfect">
     <comment>PlanPerfect spreadsheet</comment>
+    <comment xml:lang="af">PlanPerfect-sigblad</comment>
     <comment xml:lang="ar">جدول PlanPerfect</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš PlanPerfect</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš PlanPerfect</comment>
     <comment xml:lang="bg">Таблица — PlanPerfect</comment>
     <comment xml:lang="ca">full de càlcul de PlanPerfect</comment>
     <comment xml:lang="cs">sešit PlanPerfect</comment>
     <comment xml:lang="da">PlanPerfect-regneark</comment>
     <comment xml:lang="de">PlanPerfect-Tabelle</comment>
     <comment xml:lang="el">Φύλλο εργασίας PlanPerfect</comment>
-    <comment xml:lang="en_GB">PlanPerfect spreadsheet</comment>
+    <comment xml:lang="en-GB">PlanPerfect spreadsheet</comment>
     <comment xml:lang="es">hoja de cálculo de PlanPerfect</comment>
     <comment xml:lang="eu">PlanPerfect kalkulu-orria</comment>
     <comment xml:lang="fi">PlanPerfect-taulukko</comment>
     <comment xml:lang="fo">PlanPerfect rokniark</comment>
     <comment xml:lang="fr">feuille de calcul PlanPerfect</comment>
+    <comment xml:lang="fur">sfuei di calcul PlanPerfect</comment>
     <comment xml:lang="ga">scarbhileog PlanPerfect</comment>
     <comment xml:lang="gl">folla de cálculo de PlanPerfect</comment>
     <comment xml:lang="he">גליון נתונים של PlanPerfect</comment>
@@ -18311,7 +18946,7 @@
     <comment xml:lang="oc">fuèlh de calcul PlanPerfect</comment>
     <comment xml:lang="pl">Arkusz PlanPerfect</comment>
     <comment xml:lang="pt">folha de cálculo PlanPerfect</comment>
-    <comment xml:lang="pt_BR">Planilha do PlanPerfect</comment>
+    <comment xml:lang="pt-BR">Planilha do PlanPerfect</comment>
     <comment xml:lang="ro">Foaie de calcul PlanPerfect</comment>
     <comment xml:lang="ru">Электронная таблица PlanPerfect</comment>
     <comment xml:lang="sk">Zošit PlanPerfect</comment>
@@ -18319,16 +18954,17 @@
     <comment xml:lang="sq">Fletë llogaritjesh PlanPerfect</comment>
     <comment xml:lang="sr">табела План Перфекта</comment>
     <comment xml:lang="sv">PlanPerfect-kalkylblad</comment>
-    <comment xml:lang="tr">PlanPerfect çalışma sayfası</comment>
+    <comment xml:lang="tr">PlanPerfect hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця PlanPerfect</comment>
     <comment xml:lang="vi">Bảng tính PlanPerfect</comment>
-    <comment xml:lang="zh_CN">PlanPerfect 电子表格</comment>
-    <comment xml:lang="zh_TW">PlanPerfect 試算表</comment>
+    <comment xml:lang="zh-CN">PlanPerfect 电子表格</comment>
+    <comment xml:lang="zh-TW">PlanPerfect 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.pln"/>
   </mime-type>
   <mime-type type="application/x-pocket-word">
     <comment>Pocket Word document</comment>
+    <comment xml:lang="af">Pocket Word-dokument</comment>
     <comment xml:lang="ar">مستند Pocket Word</comment>
     <comment xml:lang="ast">Documentu de PocketWord</comment>
     <comment xml:lang="bg">Документ — Pocket Word</comment>
@@ -18337,12 +18973,13 @@
     <comment xml:lang="da">Pocket Word-dokument</comment>
     <comment xml:lang="de">Pocket-Word-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Pocket Word</comment>
-    <comment xml:lang="en_GB">Pocket Word document</comment>
+    <comment xml:lang="en-GB">Pocket Word document</comment>
     <comment xml:lang="es">documento de Pocket Word</comment>
     <comment xml:lang="eu">Pocket Word dokumentua</comment>
     <comment xml:lang="fi">Pocket Word -asiakirja</comment>
     <comment xml:lang="fo">Pocket Word skjal</comment>
     <comment xml:lang="fr">document Pocket Word</comment>
+    <comment xml:lang="fur">document Pocket Word</comment>
     <comment xml:lang="ga">cáipéis Pocket Word</comment>
     <comment xml:lang="gl">documento de Pocket Word</comment>
     <comment xml:lang="he">מסמך של Pocket Word</comment>
@@ -18360,7 +18997,7 @@
     <comment xml:lang="oc">document Pocket Word</comment>
     <comment xml:lang="pl">Dokument Pocket Word</comment>
     <comment xml:lang="pt">documento Pocket Word</comment>
-    <comment xml:lang="pt_BR">Documento do Pocket Word</comment>
+    <comment xml:lang="pt-BR">Documento do Pocket Word</comment>
     <comment xml:lang="ro">Document Pocket Word</comment>
     <comment xml:lang="ru">Документ Pocket Word</comment>
     <comment xml:lang="sk">Dokument Pocket Word</comment>
@@ -18370,32 +19007,34 @@
     <comment xml:lang="tr">Pocket Word belgesi</comment>
     <comment xml:lang="uk">документ Pocket Word</comment>
     <comment xml:lang="vi">Tài liệu Pocket Word</comment>
-    <comment xml:lang="zh_CN">Pocket Word 文档</comment>
-    <comment xml:lang="zh_TW">Pocket Word 文件</comment>
+    <comment xml:lang="zh-CN">Pocket Word 文档</comment>
+    <comment xml:lang="zh-TW">Pocket Word 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="{\\pwi" type="string" offset="0"/>
+      <match type="string" value="{\\pwi" offset="0"/>
     </magic>
     <glob pattern="*.psw"/>
   </mime-type>
   <mime-type type="application/x-profile">
     <comment>profiler results</comment>
+    <comment xml:lang="af">profieldata</comment>
     <comment xml:lang="ar">نتائج المحلل</comment>
     <comment xml:lang="az">profiler nəticələri</comment>
-    <comment xml:lang="be@latin">vyniki profilera</comment>
+    <comment xml:lang="be-Latn">vyniki profilera</comment>
     <comment xml:lang="bg">Резултати от анализатора</comment>
-    <comment xml:lang="ca">resultats de profiler</comment>
+    <comment xml:lang="ca">resultats del perfilador</comment>
     <comment xml:lang="cs">výsledky profileru</comment>
     <comment xml:lang="cy">canlyniadau proffeilio</comment>
     <comment xml:lang="da">profileringsresultater</comment>
     <comment xml:lang="de">Profiler-Ergebnisse</comment>
     <comment xml:lang="el">Αποτελέσματα μετρήσεων για την εκτέλεση προγράμματος</comment>
-    <comment xml:lang="en_GB">profiler results</comment>
+    <comment xml:lang="en-GB">profiler results</comment>
     <comment xml:lang="eo">resultoj de profililo</comment>
     <comment xml:lang="es">resultados del perfilador</comment>
     <comment xml:lang="eu">profiler-aren emaitzak</comment>
     <comment xml:lang="fi">profilointitulokset</comment>
     <comment xml:lang="fr">résultats de profileur</comment>
+    <comment xml:lang="fur">risultâts profiladôr</comment>
     <comment xml:lang="ga">torthaí próifíleora</comment>
     <comment xml:lang="gl">resultados do perfilador</comment>
     <comment xml:lang="he">תוצאות מאבחן</comment>
@@ -18416,7 +19055,7 @@
     <comment xml:lang="oc">resultats de perfilador</comment>
     <comment xml:lang="pl">Wyniki profilowania</comment>
     <comment xml:lang="pt">resultados de análise de perfil</comment>
-    <comment xml:lang="pt_BR">Resultados do profiler</comment>
+    <comment xml:lang="pt-BR">Resultados do profiler</comment>
     <comment xml:lang="ro">rezultate profiler</comment>
     <comment xml:lang="ru">Результаты профилирования</comment>
     <comment xml:lang="sk">Výsledky profilera</comment>
@@ -18424,33 +19063,35 @@
     <comment xml:lang="sq">Rezultate të profiluesit</comment>
     <comment xml:lang="sr">резултати профилатора</comment>
     <comment xml:lang="sv">profilerarresultat</comment>
-    <comment xml:lang="tr">profil sonuçları</comment>
+    <comment xml:lang="tr">profiler sonuçları</comment>
     <comment xml:lang="uk">результати профілювання</comment>
     <comment xml:lang="vi">kết quả nét hiện trạng</comment>
-    <comment xml:lang="zh_CN">探查器结果</comment>
-    <comment xml:lang="zh_TW">硬體資訊產生器成果</comment>
+    <comment xml:lang="zh-CN">探查器结果</comment>
+    <comment xml:lang="zh-TW">硬體資訊產生器成果</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <glob pattern="gmon.out"/>
   </mime-type>
   <mime-type type="application/x-pw">
     <comment>Pathetic Writer document</comment>
+    <comment xml:lang="af">Pathetic Writer-dokument</comment>
     <comment xml:lang="ar">مستند Pathetic Writer</comment>
     <comment xml:lang="ast">Documentu de Pathetic Writer</comment>
-    <comment xml:lang="be@latin">Dakument Pathetic Writer</comment>
+    <comment xml:lang="be-Latn">Dakument Pathetic Writer</comment>
     <comment xml:lang="bg">Документ — Pathetic Writer</comment>
     <comment xml:lang="ca">document de Pathetic Writer</comment>
     <comment xml:lang="cs">dokument Pathetic Writer</comment>
     <comment xml:lang="da">Pathetic Writer-dokument</comment>
     <comment xml:lang="de">Pathetic-Writer-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Pathetic Writer</comment>
-    <comment xml:lang="en_GB">Pathetic Writer document</comment>
+    <comment xml:lang="en-GB">Pathetic Writer document</comment>
     <comment xml:lang="eo">dokumento de Pathetic Writer</comment>
     <comment xml:lang="es">documento de Pathetic Writer</comment>
     <comment xml:lang="eu">Pathetic Writer dokumentua</comment>
     <comment xml:lang="fi">Pathetic Writer -asiakirja</comment>
     <comment xml:lang="fo">Pathetic Writer skjal</comment>
     <comment xml:lang="fr">document Pathetic Writer</comment>
+    <comment xml:lang="fur">document Pathetic Writer</comment>
     <comment xml:lang="ga">cáipéis Pathetic Writer</comment>
     <comment xml:lang="gl">documento de Pathetic Writer</comment>
     <comment xml:lang="he">מסמך של Pathetic Writer</comment>
@@ -18471,7 +19112,7 @@
     <comment xml:lang="oc">document Pathetic Writer</comment>
     <comment xml:lang="pl">Dokument Pathetic Writer</comment>
     <comment xml:lang="pt">documento do Pathetic Writer</comment>
-    <comment xml:lang="pt_BR">Documento do Pathetic Writer</comment>
+    <comment xml:lang="pt-BR">Documento do Pathetic Writer</comment>
     <comment xml:lang="ro">Document Pathetic Writer</comment>
     <comment xml:lang="ru">Документ Pathetic Writer</comment>
     <comment xml:lang="sk">Dokument Pathetic Writer</comment>
@@ -18482,30 +19123,32 @@
     <comment xml:lang="tr">Pathetic Writer belgesi</comment>
     <comment xml:lang="uk">документ Pathetic Writer</comment>
     <comment xml:lang="vi">Tài liệu Pathetic Writer</comment>
-    <comment xml:lang="zh_CN">Pathetic Writer 文档</comment>
-    <comment xml:lang="zh_TW">Pathetic Writer 文件</comment>
+    <comment xml:lang="zh-CN">Pathetic Writer 文档</comment>
+    <comment xml:lang="zh-TW">Pathetic Writer 文件</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.pw"/>
   </mime-type>
   <mime-type type="application/x-python-bytecode">
     <comment>Python bytecode</comment>
+    <comment xml:lang="af">Python binêre kode</comment>
     <comment xml:lang="ar">Python bytecode</comment>
     <comment xml:lang="az">Python bayt kodu</comment>
-    <comment xml:lang="be@latin">Bajtavy kod Python</comment>
+    <comment xml:lang="be-Latn">Bajtavy kod Python</comment>
     <comment xml:lang="bg">Байт код — Python</comment>
     <comment xml:lang="ca">bytecode de Python</comment>
     <comment xml:lang="cs">bajtový kód Python</comment>
     <comment xml:lang="cy">Côd beit Python</comment>
-    <comment xml:lang="da">Pythonbytekode</comment>
+    <comment xml:lang="da">Python-bytekode</comment>
     <comment xml:lang="de">Python-Bytecode</comment>
     <comment xml:lang="el">Συμβολοκώδικας Python</comment>
-    <comment xml:lang="en_GB">Python bytecode</comment>
+    <comment xml:lang="en-GB">Python bytecode</comment>
     <comment xml:lang="eo">Python-bajtkodo</comment>
     <comment xml:lang="es">bytecode de Python</comment>
     <comment xml:lang="eu">Python byte-kodea</comment>
     <comment xml:lang="fi">Python-tavukoodi</comment>
     <comment xml:lang="fo">Python býtkota</comment>
     <comment xml:lang="fr">bytecode Python</comment>
+    <comment xml:lang="fur">bytecode di Python</comment>
     <comment xml:lang="ga">beartchód Python</comment>
     <comment xml:lang="gl">bytecode de Python</comment>
     <comment xml:lang="he">Bytecode של Python</comment>
@@ -18526,7 +19169,7 @@
     <comment xml:lang="oc">bytecode Python</comment>
     <comment xml:lang="pl">Kod bajtowy Python</comment>
     <comment xml:lang="pt">código binário Python</comment>
-    <comment xml:lang="pt_BR">Código compilado Python</comment>
+    <comment xml:lang="pt-BR">Código compilado Python</comment>
     <comment xml:lang="ro">Bytecode Python</comment>
     <comment xml:lang="ru">Байт-код Python</comment>
     <comment xml:lang="sk">Bajtový kód Python</comment>
@@ -18537,27 +19180,30 @@
     <comment xml:lang="tr">Python bayt kodu</comment>
     <comment xml:lang="uk">байт-код Python</comment>
     <comment xml:lang="vi">Mã byte Python</comment>
-    <comment xml:lang="zh_CN">Python 字节码</comment>
-    <comment xml:lang="zh_TW">Python 位元組碼</comment>
+    <comment xml:lang="zh-CN">Python 字节码</comment>
+    <comment xml:lang="zh-TW">Python 位元組碼</comment>
     <magic priority="50">
-      <match value="0x994e0d0a" type="big32" offset="0"/>
+      <match type="big32" value="0x994e0d0a" offset="0"/>
     </magic>
     <glob pattern="*.pyc"/>
     <glob pattern="*.pyo"/>
   </mime-type>
   <mime-type type="application/x-qtiplot">
     <comment>QtiPlot document</comment>
+    <comment xml:lang="af">QtiPlot-dokument</comment>
     <comment xml:lang="ast">Documentu de QtiPlot</comment>
+    <comment xml:lang="bg">Документ — QtiPlot</comment>
     <comment xml:lang="ca">document QtiPlot</comment>
     <comment xml:lang="cs">dokument GtiPlot</comment>
     <comment xml:lang="da">QtiPlot-dokument</comment>
     <comment xml:lang="de">QtiPlot-Dokument</comment>
     <comment xml:lang="el">Έγγραφο QtiPlot</comment>
-    <comment xml:lang="en_GB">QtiPlot document</comment>
+    <comment xml:lang="en-GB">QtiPlot document</comment>
     <comment xml:lang="es">documento de QtiPlot</comment>
     <comment xml:lang="eu">QtiPlot dokumentua</comment>
     <comment xml:lang="fi">QtiPlot-asiakirja</comment>
     <comment xml:lang="fr">document QtiPlot</comment>
+    <comment xml:lang="fur">document QtiPlot</comment>
     <comment xml:lang="ga">cáipéis QtiPlot</comment>
     <comment xml:lang="gl">Documento de QtiPilot</comment>
     <comment xml:lang="he">מסמך QtiPlot</comment>
@@ -18573,7 +19219,7 @@
     <comment xml:lang="oc">document QtiPlot</comment>
     <comment xml:lang="pl">Dokument QtiPlot</comment>
     <comment xml:lang="pt">documento QtiPlot</comment>
-    <comment xml:lang="pt_BR">Documento do QtiPlot</comment>
+    <comment xml:lang="pt-BR">Documento do QtiPlot</comment>
     <comment xml:lang="ru">Документ QtiPlot</comment>
     <comment xml:lang="sk">Dokument QtiPlot</comment>
     <comment xml:lang="sl">Dokument QtiPlot</comment>
@@ -18581,8 +19227,8 @@
     <comment xml:lang="sv">QtiPlot-dokument</comment>
     <comment xml:lang="tr">QtiPlot belgesi</comment>
     <comment xml:lang="uk">документ QtiPlot</comment>
-    <comment xml:lang="zh_CN">QtiPlot 文档</comment>
-    <comment xml:lang="zh_TW">QtiPlot 文件</comment>
+    <comment xml:lang="zh-CN">QtiPlot 文档</comment>
+    <comment xml:lang="zh-TW">QtiPlot 文件</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
@@ -18593,21 +19239,23 @@
   </mime-type>
   <mime-type type="application/x-quattropro">
     <comment>Quattro Pro spreadsheet</comment>
+    <comment xml:lang="af">Quattro Pro-sigblad</comment>
     <comment xml:lang="ar">جدول Quattro Pro</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš Quattro Pro</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš Quattro Pro</comment>
     <comment xml:lang="bg">Таблица — Quattro Pro</comment>
     <comment xml:lang="ca">full de càlcul de Quattro Pro</comment>
     <comment xml:lang="cs">sešit Quattro Pro</comment>
     <comment xml:lang="da">Quattro Pro-regneark</comment>
     <comment xml:lang="de">Quattro-Pro-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Quattro Pro</comment>
-    <comment xml:lang="en_GB">Quattro Pro spreadsheet</comment>
+    <comment xml:lang="en-GB">Quattro Pro spreadsheet</comment>
     <comment xml:lang="eo">sterntabelo de Quattro Pro</comment>
     <comment xml:lang="es">hoja de cálculo de Quattro Pro</comment>
     <comment xml:lang="eu">Quattro Pro kalkulu-orria</comment>
     <comment xml:lang="fi">Quattro Pro -taulukko</comment>
     <comment xml:lang="fo">Quattro Pro rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Quattro Pro</comment>
+    <comment xml:lang="fur">sfuei di calcul Quattro Pro</comment>
     <comment xml:lang="ga">scarbhileog Quattro Pro</comment>
     <comment xml:lang="gl">folla de cálculo Quattro Pro</comment>
     <comment xml:lang="he">גליון נתונים של Quattro Pro</comment>
@@ -18628,7 +19276,7 @@
     <comment xml:lang="oc">fuèlh de calcul Quattro Pro</comment>
     <comment xml:lang="pl">Arkusz Quattro Pro</comment>
     <comment xml:lang="pt">folha de cálculo Quattro Pro</comment>
-    <comment xml:lang="pt_BR">Planilha do Quattro Pro</comment>
+    <comment xml:lang="pt-BR">Planilha do Quattro Pro</comment>
     <comment xml:lang="ro">Foaie de calcul Quattro Pro</comment>
     <comment xml:lang="ru">Электронная таблица Quattro Pro</comment>
     <comment xml:lang="sk">Zošit Quattro Pro</comment>
@@ -18636,70 +19284,48 @@
     <comment xml:lang="sq">Fletë llogaritjesh Quattro Pro</comment>
     <comment xml:lang="sr">Кватро Про табела</comment>
     <comment xml:lang="sv">Quattro Pro-kalkylblad</comment>
-    <comment xml:lang="tr">Quattro Pro çalışma sayfası</comment>
+    <comment xml:lang="tr">Quattro Pro hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Quattro Pro</comment>
     <comment xml:lang="vi">Bảng tính Quattro Pro</comment>
-    <comment xml:lang="zh_CN">Quattro Pro 电子表格</comment>
-    <comment xml:lang="zh_TW">Quattro Pro 試算表</comment>
+    <comment xml:lang="zh-CN">Quattro Pro 电子表格</comment>
+    <comment xml:lang="zh-TW">Quattro Pro 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.wb1"/>
     <glob pattern="*.wb2"/>
     <glob pattern="*.wb3"/>
   </mime-type>
   <mime-type type="application/x-quicktime-media-link">
-    <comment>QuickTime metalink playlist</comment>
-    <comment xml:lang="ar">قائمة تشغيل QuickTime metalink</comment>
-    <comment xml:lang="be@latin">śpis metaspasyłak na pieśni QuickTime</comment>
+    <comment>QuickTime playlist</comment>
     <comment xml:lang="bg">Списък за изпълнение — QuickTime</comment>
-    <comment xml:lang="ca">llista de reproducció de metaenllaços QuickTime</comment>
-    <comment xml:lang="cs">seznam k přehrání metalink QuickTime</comment>
-    <comment xml:lang="da">QuickTime metalink-afspilningsliste</comment>
-    <comment xml:lang="de">QuickTime-Metalink-Wiedergabeliste</comment>
-    <comment xml:lang="el">Λίστα αναπαραγωγής metalinks QuickTime</comment>
-    <comment xml:lang="en_GB">QuickTime metalink playlist</comment>
-    <comment xml:lang="es">lista de reproducción de metaenlaces QuickTime</comment>
-    <comment xml:lang="eu">QuickTime meta-esteken erreprodukzio-zerrenda</comment>
-    <comment xml:lang="fi">QuickTime metalink -soittolista</comment>
-    <comment xml:lang="fo">QuickTime metaleinkju avspælingarlisti</comment>
-    <comment xml:lang="fr">liste de lecture metalink QuickTime</comment>
-    <comment xml:lang="ga">seinmliosta meiteanasc QuickTime</comment>
-    <comment xml:lang="gl">lista de reprodución de metaligazóns QuickTime</comment>
-    <comment xml:lang="he">רשימת השמעה מקושרת של QuickTime</comment>
-    <comment xml:lang="hr">QuickTime meta poveznica popisa izvođenja</comment>
-    <comment xml:lang="hu">QuickTime metalink lejátszólista</comment>
-    <comment xml:lang="ia">Lista de selection Metalink QuickTime</comment>
-    <comment xml:lang="id">Senarai berkas taut meta QuickTime</comment>
-    <comment xml:lang="it">Playlist metalink QuickTime</comment>
-    <comment xml:lang="ja">QuickTime メタリンク再生リスト</comment>
-    <comment xml:lang="kk">QuickTime метасілтемелер ойнау тізімі</comment>
-    <comment xml:lang="ko">퀵타임 메타링크 재생 목록</comment>
-    <comment xml:lang="lt">QuickTime metanuorodos grojaraštis</comment>
-    <comment xml:lang="lv">QuickTime metasaites repertuārs</comment>
-    <comment xml:lang="nb">QuickTime metalink-spilleliste</comment>
-    <comment xml:lang="nl">QuickTime metalink-afspeellijst</comment>
-    <comment xml:lang="nn">QuickTime metalink-speleliste</comment>
-    <comment xml:lang="oc">lista de lectura metalink QuickTime</comment>
-    <comment xml:lang="pl">Lista odtwarzania metaodnośników QuickTime</comment>
-    <comment xml:lang="pt">lista de reprodução QuickTime metalink</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução metalink do QuickTime</comment>
-    <comment xml:lang="ro">Listă cu metalegături QuickTime</comment>
-    <comment xml:lang="ru">Список воспроизведения мета-ссылок QuickTime</comment>
-    <comment xml:lang="sk">Zoznam skladieb metalink QuickTime</comment>
-    <comment xml:lang="sl">Seznam predvajanja QuickTime</comment>
-    <comment xml:lang="sq">Listë titujsh metalink QuickTime</comment>
-    <comment xml:lang="sr">списак нумера мета везе Квик Тајма</comment>
-    <comment xml:lang="sv">QuickTime-metalänkspellista</comment>
-    <comment xml:lang="tr">QuickTime metalink çalma listesi</comment>
-    <comment xml:lang="uk">список відтворення QuickTime metalink</comment>
-    <comment xml:lang="vi">Danh mục nhạc siêu liên kết Quicktime</comment>
-    <comment xml:lang="zh_CN">QuickTime Metalink 播放列表</comment>
-    <comment xml:lang="zh_TW">QuickTime metalink 播放清單</comment>
+    <comment xml:lang="ca">llista de reproducció QuickTime</comment>
+    <comment xml:lang="da">QuickTime-afspilningsliste</comment>
+    <comment xml:lang="de">QuickTime-Wiedergabeliste</comment>
+    <comment xml:lang="en-GB">QuickTime playlist</comment>
+    <comment xml:lang="es">lista de reproducción de QuickTime</comment>
+    <comment xml:lang="eu">QuickTime erreprodukzio-zerrenda</comment>
+    <comment xml:lang="fi">QuickTime-soittolista</comment>
+    <comment xml:lang="fr">liste de lecture QuickTime</comment>
+    <comment xml:lang="hr">QuickTime popis izvođenja</comment>
+    <comment xml:lang="hu">QuickTime lejátszólista</comment>
+    <comment xml:lang="id">Daftar putar QuickTime</comment>
+    <comment xml:lang="it">Playlist QuickTime</comment>
+    <comment xml:lang="kk">QuickTime ойнау тізімі</comment>
+    <comment xml:lang="ko">퀵타임 재생 목록</comment>
+    <comment xml:lang="pl">Lista odtwarzania QuickTime</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução do QuickTime</comment>
+    <comment xml:lang="ru">Список воспроизведения QuickTime</comment>
+    <comment xml:lang="sk">Zoznam skladieb QuickTime</comment>
+    <comment xml:lang="sv">QuickTime-spellista</comment>
+    <comment xml:lang="tr">QuickTime çalma listesi</comment>
+    <comment xml:lang="uk">список відтворення QuickTime</comment>
+    <comment xml:lang="zh-CN">QuickTime 播放列表</comment>
+    <comment xml:lang="zh-TW">QuickTime 播放清單</comment>
     <generic-icon name="video-x-generic"/>
     <sub-class-of type="video/quicktime"/>
     <alias type="application/x-quicktimeplayer"/>
     <magic priority="60">
       <match value="&lt;?xml" type="string" offset="0">
-        <match value="&lt;?quicktime" type="string" offset="0:64"/>
+        <match type="string" value="&lt;?quicktime" offset="0:64"/>
       </match>
       <match value="RTSPtext" type="string" offset="0"/>
       <match value="rtsptext" type="string" offset="0"/>
@@ -18709,10 +19335,11 @@
   </mime-type>
   <mime-type type="application/x-qw">
     <comment>Quicken document</comment>
+    <comment xml:lang="af">Quicken-dokument</comment>
     <comment xml:lang="ar">مستند Quicken</comment>
     <comment xml:lang="ast">Documentu de Quicken</comment>
     <comment xml:lang="az">Quicken sənədi</comment>
-    <comment xml:lang="be@latin">Dakument Quicken</comment>
+    <comment xml:lang="be-Latn">Dakument Quicken</comment>
     <comment xml:lang="bg">Документ — Quicken</comment>
     <comment xml:lang="ca">document Quicken</comment>
     <comment xml:lang="cs">dokument Quicken</comment>
@@ -18720,13 +19347,14 @@
     <comment xml:lang="da">Quickendokument</comment>
     <comment xml:lang="de">Quicken-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Quicken</comment>
-    <comment xml:lang="en_GB">Quicken document</comment>
+    <comment xml:lang="en-GB">Quicken document</comment>
     <comment xml:lang="eo">Quicken-dokumento</comment>
     <comment xml:lang="es">documento de Quicken</comment>
     <comment xml:lang="eu">Quicken dokumentua</comment>
     <comment xml:lang="fi">Quicken-asiakirja</comment>
     <comment xml:lang="fo">Quicken skjal</comment>
     <comment xml:lang="fr">document Quicken</comment>
+    <comment xml:lang="fur">document Quicken</comment>
     <comment xml:lang="ga">cáipéis Quicken</comment>
     <comment xml:lang="gl">documento de Quicken</comment>
     <comment xml:lang="he">מסמך של Quicken</comment>
@@ -18747,7 +19375,7 @@
     <comment xml:lang="oc">document Quicken</comment>
     <comment xml:lang="pl">Dokument Quicken</comment>
     <comment xml:lang="pt">documento Quicken</comment>
-    <comment xml:lang="pt_BR">Documento do Quicken</comment>
+    <comment xml:lang="pt-BR">Documento do Quicken</comment>
     <comment xml:lang="ro">Document Quicken</comment>
     <comment xml:lang="ru">Документ Quicken</comment>
     <comment xml:lang="sk">Dokument Quicken</comment>
@@ -18758,15 +19386,16 @@
     <comment xml:lang="tr">Quicken belgesi</comment>
     <comment xml:lang="uk">документ Quicken</comment>
     <comment xml:lang="vi">Tài liệu Quicken</comment>
-    <comment xml:lang="zh_CN">Quicken 文档</comment>
-    <comment xml:lang="zh_TW">Quicken 文件</comment>
+    <comment xml:lang="zh-CN">Quicken 文档</comment>
+    <comment xml:lang="zh-TW">Quicken 文件</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.qif"/>
   </mime-type>
   <mime-type type="application/vnd.rar">
     <comment>RAR archive</comment>
+    <comment xml:lang="af">RAR-argief</comment>
     <comment xml:lang="ar">أرشيف RAR</comment>
-    <comment xml:lang="be@latin">Archiŭ RAR</comment>
+    <comment xml:lang="be-Latn">Archiŭ RAR</comment>
     <comment xml:lang="bg">Архив — RAR</comment>
     <comment xml:lang="ca">arxiu RAR</comment>
     <comment xml:lang="cs">archiv RAR</comment>
@@ -18774,13 +19403,14 @@
     <comment xml:lang="da">RAR-arkiv</comment>
     <comment xml:lang="de">RAR-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο RAR</comment>
-    <comment xml:lang="en_GB">RAR archive</comment>
+    <comment xml:lang="en-GB">RAR archive</comment>
     <comment xml:lang="eo">RAR-arkivo</comment>
     <comment xml:lang="es">archivador RAR</comment>
     <comment xml:lang="eu">RAR artxiboa</comment>
     <comment xml:lang="fi">RAR-arkisto</comment>
     <comment xml:lang="fo">RAR skjalasavn</comment>
     <comment xml:lang="fr">archive RAR</comment>
+    <comment xml:lang="fur">archivi RAR</comment>
     <comment xml:lang="ga">cartlann RAR</comment>
     <comment xml:lang="gl">ficheiro RAR</comment>
     <comment xml:lang="he">ארכיון RAR</comment>
@@ -18801,7 +19431,7 @@
     <comment xml:lang="oc">archiu RAR</comment>
     <comment xml:lang="pl">Archiwum RAR</comment>
     <comment xml:lang="pt">arquivo RAR</comment>
-    <comment xml:lang="pt_BR">Pacote RAR</comment>
+    <comment xml:lang="pt-BR">Pacote RAR</comment>
     <comment xml:lang="ro">Arhivă RAR</comment>
     <comment xml:lang="ru">Архив RAR</comment>
     <comment xml:lang="sk">Archív RAR</comment>
@@ -18812,35 +19442,37 @@
     <comment xml:lang="tr">RAR arşivi</comment>
     <comment xml:lang="uk">архів RAR</comment>
     <comment xml:lang="vi">Kho nén RAR</comment>
-    <comment xml:lang="zh_CN">RAR 归档文件</comment>
-    <comment xml:lang="zh_TW">RAR 封存檔</comment>
+    <comment xml:lang="zh-CN">RAR 归档文件</comment>
+    <comment xml:lang="zh-TW">RAR 封存檔</comment>
     <acronym>RAR</acronym>
     <expanded-acronym>Roshal ARchive</expanded-acronym>
     <alias type="application/x-rar"/>
     <alias type="application/x-rar-compressed"/>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="Rar!" type="string" offset="0"/>
+      <match type="string" value="Rar!" offset="0"/>
     </magic>
     <glob pattern="*.rar"/>
   </mime-type>
   <mime-type type="application/x-dar">
     <comment>DAR archive</comment>
+    <comment xml:lang="af">DAR-argief</comment>
     <comment xml:lang="ar">أرشيف DAR</comment>
-    <comment xml:lang="be@latin">Archiŭ DAR</comment>
+    <comment xml:lang="be-Latn">Archiŭ DAR</comment>
     <comment xml:lang="bg">Архив — DAR</comment>
     <comment xml:lang="ca">arxiu DAR</comment>
     <comment xml:lang="cs">archiv DAR</comment>
     <comment xml:lang="da">DAR-arkiv</comment>
     <comment xml:lang="de">DAR-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο DAR</comment>
-    <comment xml:lang="en_GB">DAR archive</comment>
+    <comment xml:lang="en-GB">DAR archive</comment>
     <comment xml:lang="eo">DAR-arkivo</comment>
     <comment xml:lang="es">archivador DAR</comment>
     <comment xml:lang="eu">DAR artxiboa</comment>
     <comment xml:lang="fi">DAR-arkisto</comment>
     <comment xml:lang="fo">DAR skjalasavn</comment>
     <comment xml:lang="fr">archive DAR</comment>
+    <comment xml:lang="fur">archivi DAR</comment>
     <comment xml:lang="ga">cartlann DAR</comment>
     <comment xml:lang="gl">arquivo DAR</comment>
     <comment xml:lang="he">ארכיון DAR</comment>
@@ -18861,7 +19493,7 @@
     <comment xml:lang="oc">archiu DAR</comment>
     <comment xml:lang="pl">Archiwum DAR</comment>
     <comment xml:lang="pt">arquivo DAR</comment>
-    <comment xml:lang="pt_BR">Pacote DAR</comment>
+    <comment xml:lang="pt-BR">Pacote DAR</comment>
     <comment xml:lang="ro">Arhivă DAR</comment>
     <comment xml:lang="ru">Архив DAR</comment>
     <comment xml:lang="sk">Archív DAR</comment>
@@ -18872,31 +19504,33 @@
     <comment xml:lang="tr">DAR arşivi</comment>
     <comment xml:lang="uk">архів DAR</comment>
     <comment xml:lang="vi">Kho nén DAR</comment>
-    <comment xml:lang="zh_CN">DAR 归档文件</comment>
-    <comment xml:lang="zh_TW">DAR 封存檔</comment>
+    <comment xml:lang="zh-CN">DAR 归档文件</comment>
+    <comment xml:lang="zh-TW">DAR 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic>
-      <match value="123" type="big32" offset="0"/>
+      <match type="big32" value="123" offset="0"/>
     </magic>
     <glob pattern="*.dar"/>
   </mime-type>
   <mime-type type="application/x-alz">
     <comment>Alzip archive</comment>
+    <comment xml:lang="af">Alzip-argief</comment>
     <comment xml:lang="ar">أرشيف Alzip</comment>
-    <comment xml:lang="be@latin">Archiŭ Alzip</comment>
+    <comment xml:lang="be-Latn">Archiŭ Alzip</comment>
     <comment xml:lang="bg">Архив — alzip</comment>
     <comment xml:lang="ca">arxiu Alzip</comment>
     <comment xml:lang="cs">archiv Alzip</comment>
-    <comment xml:lang="da">Alziparkiv</comment>
+    <comment xml:lang="da">Alzip-arkiv</comment>
     <comment xml:lang="de">Alzip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Alzip</comment>
-    <comment xml:lang="en_GB">Alzip archive</comment>
+    <comment xml:lang="en-GB">Alzip archive</comment>
     <comment xml:lang="eo">Alzip-arkivo</comment>
     <comment xml:lang="es">archivador Alzip</comment>
     <comment xml:lang="eu">Alzip artxiboa</comment>
     <comment xml:lang="fi">Alzip-arkisto</comment>
     <comment xml:lang="fo">Alsip skjalasavn</comment>
     <comment xml:lang="fr">archive alzip</comment>
+    <comment xml:lang="fur">archivi Alzip</comment>
     <comment xml:lang="ga">cartlann Alzip</comment>
     <comment xml:lang="gl">arquivo Alzip</comment>
     <comment xml:lang="he">ארכיון Alzip</comment>
@@ -18917,7 +19551,7 @@
     <comment xml:lang="oc">archiu alzip</comment>
     <comment xml:lang="pl">Archiwum alzip</comment>
     <comment xml:lang="pt">arquivo Alzip</comment>
-    <comment xml:lang="pt_BR">Pacote Alzip</comment>
+    <comment xml:lang="pt-BR">Pacote Alzip</comment>
     <comment xml:lang="ro">Arhivă Alzip</comment>
     <comment xml:lang="ru">Архив ALZIP</comment>
     <comment xml:lang="sk">Archív Alzip</comment>
@@ -18928,31 +19562,32 @@
     <comment xml:lang="tr">Alzip arşivi</comment>
     <comment xml:lang="uk">архів Alzip</comment>
     <comment xml:lang="vi">Kho nén Alzip</comment>
-    <comment xml:lang="zh_CN">Alzip 归档文件</comment>
-    <comment xml:lang="zh_TW">Alzip 封存檔</comment>
+    <comment xml:lang="zh-CN">Alzip 归档文件</comment>
+    <comment xml:lang="zh-TW">Alzip 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="ALZ" type="string" offset="0"/>
+      <match type="string" value="ALZ" offset="0"/>
     </magic>
     <glob pattern="*.alz"/>
   </mime-type>
   <mime-type type="text/x-reject">
     <comment>rejected patch</comment>
     <comment xml:lang="ar">رقعة مرفوضة</comment>
-    <comment xml:lang="be@latin">niepryniaty patch</comment>
+    <comment xml:lang="be-Latn">niepryniaty patch</comment>
     <comment xml:lang="bg">Отхвърлен файл с кръпка</comment>
     <comment xml:lang="ca">pedaç rebutjat</comment>
     <comment xml:lang="cs">odmítnutá záplata</comment>
-    <comment xml:lang="da">afvist tekstlap</comment>
+    <comment xml:lang="da">afvist rettelse</comment>
     <comment xml:lang="de">Abgelehnter Patch</comment>
     <comment xml:lang="el">Διόρθωση που απορρίφθηκε</comment>
-    <comment xml:lang="en_GB">rejected patch</comment>
+    <comment xml:lang="en-GB">rejected patch</comment>
     <comment xml:lang="eo">reĵeta flikaĵo</comment>
     <comment xml:lang="es">parche rechazado</comment>
     <comment xml:lang="eu">baztertutako adabakia</comment>
     <comment xml:lang="fi">hylättyjen muutosten tiedosto</comment>
     <comment xml:lang="fo">vrakað rætting</comment>
     <comment xml:lang="fr">correctif rejeté</comment>
+    <comment xml:lang="fur">blec refudât</comment>
     <comment xml:lang="ga">paiste diúltaithe</comment>
     <comment xml:lang="gl">parche rexeitado</comment>
     <comment xml:lang="he">טלאי שנדחה</comment>
@@ -18973,7 +19608,7 @@
     <comment xml:lang="oc">correctiu regetat</comment>
     <comment xml:lang="pl">Odrzucona łata</comment>
     <comment xml:lang="pt">patch rejeitado</comment>
-    <comment xml:lang="pt_BR">Arquivo de patch rejeitado</comment>
+    <comment xml:lang="pt-BR">Arquivo de patch rejeitado</comment>
     <comment xml:lang="ro">petec respsins</comment>
     <comment xml:lang="ru">Отклонённый патч</comment>
     <comment xml:lang="sk">Odmietnutá záplata</comment>
@@ -18984,8 +19619,8 @@
     <comment xml:lang="tr">reddedilmiş yama</comment>
     <comment xml:lang="uk">відхилена латка</comment>
     <comment xml:lang="vi">đắp vá bị từ chối</comment>
-    <comment xml:lang="zh_CN">拒绝的补丁</comment>
-    <comment xml:lang="zh_TW">回絕的修補</comment>
+    <comment xml:lang="zh-CN">拒绝的补丁</comment>
+    <comment xml:lang="zh-TW">回絕的修補</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <alias type="application/x-reject"/>
@@ -18993,21 +19628,23 @@
   </mime-type>
   <mime-type type="application/x-rpm">
     <comment>RPM package</comment>
+    <comment xml:lang="af">RPM-pakket</comment>
     <comment xml:lang="ar">حزمة RPM</comment>
-    <comment xml:lang="be@latin">Pakunak RPM</comment>
+    <comment xml:lang="be-Latn">Pakunak RPM</comment>
     <comment xml:lang="bg">Пакет — RPM</comment>
     <comment xml:lang="ca">paquet RPM</comment>
     <comment xml:lang="cs">balíček RPM</comment>
     <comment xml:lang="da">RPM-pakke</comment>
     <comment xml:lang="de">RPM-Paket</comment>
     <comment xml:lang="el">Πακέτο RPM</comment>
-    <comment xml:lang="en_GB">RPM package</comment>
+    <comment xml:lang="en-GB">RPM package</comment>
     <comment xml:lang="eo">RPM-pakaĵo</comment>
     <comment xml:lang="es">paquete RPM</comment>
     <comment xml:lang="eu">RPM paketea</comment>
     <comment xml:lang="fi">RPM-paketti</comment>
     <comment xml:lang="fo">RPM pakki</comment>
     <comment xml:lang="fr">paquet RPM</comment>
+    <comment xml:lang="fur">pachet RPM</comment>
     <comment xml:lang="ga">pacáiste RPM</comment>
     <comment xml:lang="gl">paquete RFM</comment>
     <comment xml:lang="he">חבילת RPM</comment>
@@ -19028,7 +19665,7 @@
     <comment xml:lang="oc">paquet RPM</comment>
     <comment xml:lang="pl">Pakiet RPM</comment>
     <comment xml:lang="pt">pacote RPM</comment>
-    <comment xml:lang="pt_BR">Pacote RPM</comment>
+    <comment xml:lang="pt-BR">Pacote RPM</comment>
     <comment xml:lang="ro">Pachet RPM</comment>
     <comment xml:lang="ru">Пакет RPM</comment>
     <comment xml:lang="sk">Balík RPM</comment>
@@ -19039,27 +19676,30 @@
     <comment xml:lang="tr">RPM paketi</comment>
     <comment xml:lang="uk">пакунок RPM</comment>
     <comment xml:lang="vi">Gói RPM</comment>
-    <comment xml:lang="zh_CN">RPM 软件包</comment>
-    <comment xml:lang="zh_TW">RPM 軟體包</comment>
+    <comment xml:lang="zh-CN">RPM 软件包</comment>
+    <comment xml:lang="zh-TW">RPM 軟體包</comment>
     <generic-icon name="package-x-generic"/>
     <alias type="application/x-redhat-package-manager"/>
     <magic priority="50">
-      <match value="\xed\xab\xee\xdb" type="string" offset="0"/>
+      <match type="string" value="\xed\xab\xee\xdb" offset="0"/>
     </magic>
     <glob pattern="*.rpm"/>
   </mime-type>
   <mime-type type="application/x-source-rpm">
     <comment>Source RPM package</comment>
+    <comment xml:lang="af">Bron-RPM-pakket</comment>
+    <comment xml:lang="bg">Пакет — RPM с изходен код</comment>
     <comment xml:lang="ca">paquet RPM de codi font</comment>
     <comment xml:lang="cs">zdrojový balíček RPM</comment>
     <comment xml:lang="da">Kilde RPM-pakke</comment>
     <comment xml:lang="de">Quell-RPM-Paket</comment>
     <comment xml:lang="el">Πακέτο πηγής RPM</comment>
-    <comment xml:lang="en_GB">Source RPM package</comment>
+    <comment xml:lang="en-GB">Source RPM package</comment>
     <comment xml:lang="es">paquete de fuente RPM</comment>
     <comment xml:lang="eu">Iturburu RPM paketea</comment>
     <comment xml:lang="fi">RPM-lähdepaketti</comment>
     <comment xml:lang="fr">paquet source RPM</comment>
+    <comment xml:lang="fur">pachet sorzint RPM</comment>
     <comment xml:lang="ga">pacáiste foinse RPM</comment>
     <comment xml:lang="gl">Paquete RPM de fontes</comment>
     <comment xml:lang="he">חבילת מקור RPM</comment>
@@ -19075,7 +19715,7 @@
     <comment xml:lang="oc">paquet font RPM</comment>
     <comment xml:lang="pl">Źródłowy pakiet RPM</comment>
     <comment xml:lang="pt">pacote origem RPM</comment>
-    <comment xml:lang="pt_BR">Pacote fonte RPM</comment>
+    <comment xml:lang="pt-BR">Pacote fonte RPM</comment>
     <comment xml:lang="ru">Пакет RPM с исходным кодом</comment>
     <comment xml:lang="sk">Zdrojový balík RPM</comment>
     <comment xml:lang="sl">Paket izvorne kode RPM</comment>
@@ -19083,8 +19723,8 @@
     <comment xml:lang="sv">Käll-RPM-paket</comment>
     <comment xml:lang="tr">Kaynak RPM paketi</comment>
     <comment xml:lang="uk">пакунок RPM з початковим кодом</comment>
-    <comment xml:lang="zh_CN">源码 RPM 软件包</comment>
-    <comment xml:lang="zh_TW">來源 RPM 軟體包</comment>
+    <comment xml:lang="zh-CN">源码 RPM 软件包</comment>
+    <comment xml:lang="zh-TW">來源 RPM 軟體包</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="application/x-rpm"/>
     <glob pattern="*.src.rpm"/>
@@ -19092,21 +19732,23 @@
   </mime-type>
   <mime-type type="application/x-ruby">
     <comment>Ruby script</comment>
+    <comment xml:lang="af">Ruby-skrip</comment>
     <comment xml:lang="ar">سكربت روبي</comment>
-    <comment xml:lang="be@latin">Skrypt Ruby</comment>
+    <comment xml:lang="be-Latn">Skrypt Ruby</comment>
     <comment xml:lang="bg">Скрипт — Ruby</comment>
     <comment xml:lang="ca">script Ruby</comment>
     <comment xml:lang="cs">skript Ruby</comment>
-    <comment xml:lang="da">Rubyprogram</comment>
+    <comment xml:lang="da">Ruby-program</comment>
     <comment xml:lang="de">Ruby-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών Ruby</comment>
-    <comment xml:lang="en_GB">Ruby script</comment>
+    <comment xml:lang="en-GB">Ruby script</comment>
     <comment xml:lang="eo">Ruby-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en Ruby</comment>
     <comment xml:lang="eu">Ruby script-a</comment>
     <comment xml:lang="fi">Ruby-komentotiedosto</comment>
     <comment xml:lang="fo">Ruby boðrøð</comment>
     <comment xml:lang="fr">script Ruby</comment>
+    <comment xml:lang="fur">script Ruby</comment>
     <comment xml:lang="ga">script Ruby</comment>
     <comment xml:lang="gl">Script de Ruby</comment>
     <comment xml:lang="he">תסריט Ruby</comment>
@@ -19127,7 +19769,7 @@
     <comment xml:lang="oc">escript Ruby</comment>
     <comment xml:lang="pl">Skrypt Ruby</comment>
     <comment xml:lang="pt">script Ruby</comment>
-    <comment xml:lang="pt_BR">Script Ruby</comment>
+    <comment xml:lang="pt-BR">Script Ruby</comment>
     <comment xml:lang="ro">Script Ruby</comment>
     <comment xml:lang="ru">Сценарий Ruby</comment>
     <comment xml:lang="sk">Skript Ruby</comment>
@@ -19138,34 +19780,36 @@
     <comment xml:lang="tr">Ruby betiği</comment>
     <comment xml:lang="uk">скрипт Ruby</comment>
     <comment xml:lang="vi">Văn lệnh Ruby</comment>
-    <comment xml:lang="zh_CN">Ruby 脚本</comment>
-    <comment xml:lang="zh_TW">Ruby 指令稿</comment>
+    <comment xml:lang="zh-CN">Ruby 脚本</comment>
+    <comment xml:lang="zh-TW">Ruby 指令稿</comment>
     <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <magic>
-      <match value="/bin/env ruby" type="string" offset="2:16"/>
-      <match value="/bin/ruby" type="string" offset="2:16"/>
+      <match type="string" value="/bin/env ruby" offset="2:16"/>
+      <match type="string" value="/bin/ruby" offset="2:16"/>
     </magic>
     <glob pattern="*.rb"/>
   </mime-type>
   <mime-type type="application/x-markaby">
     <comment>Markaby script</comment>
+    <comment xml:lang="af">Markaby-skrip</comment>
     <comment xml:lang="ar">سكربت Markaby</comment>
-    <comment xml:lang="be@latin">Skrypt Markaby</comment>
+    <comment xml:lang="be-Latn">Skrypt Markaby</comment>
     <comment xml:lang="bg">Скрипт — Markaby</comment>
     <comment xml:lang="ca">script Markaby</comment>
     <comment xml:lang="cs">skript Markaby</comment>
-    <comment xml:lang="da">Markabyprogram</comment>
+    <comment xml:lang="da">Markaby-program</comment>
     <comment xml:lang="de">Markaby-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών Markaby</comment>
-    <comment xml:lang="en_GB">Markaby script</comment>
+    <comment xml:lang="en-GB">Markaby script</comment>
     <comment xml:lang="eo">Markaby-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en Markaby</comment>
     <comment xml:lang="eu">Markaby script-a</comment>
     <comment xml:lang="fi">Markaby-komentotiedosto</comment>
     <comment xml:lang="fo">Markaby boðrøð</comment>
     <comment xml:lang="fr">script Markaby</comment>
+    <comment xml:lang="fur">script Markaby</comment>
     <comment xml:lang="ga">script Markaby</comment>
     <comment xml:lang="gl">Script de Markaby</comment>
     <comment xml:lang="he">תסריט Markby</comment>
@@ -19186,7 +19830,7 @@
     <comment xml:lang="oc">escript Markaby</comment>
     <comment xml:lang="pl">Skrypt Markaby</comment>
     <comment xml:lang="pt">script Markaby</comment>
-    <comment xml:lang="pt_BR">Script Markaby</comment>
+    <comment xml:lang="pt-BR">Script Markaby</comment>
     <comment xml:lang="ro">Script Markaby</comment>
     <comment xml:lang="ru">Сценарий Markaby</comment>
     <comment xml:lang="sk">Skript Markaby</comment>
@@ -19197,24 +19841,27 @@
     <comment xml:lang="tr">Markaby betiği</comment>
     <comment xml:lang="uk">скрипт Markaby</comment>
     <comment xml:lang="vi">Văn lệnh Markaby</comment>
-    <comment xml:lang="zh_CN">RMarkaby 脚本</comment>
-    <comment xml:lang="zh_TW">Markaby 指令稿</comment>
+    <comment xml:lang="zh-CN">RMarkaby 脚本</comment>
+    <comment xml:lang="zh-TW">Markaby 指令稿</comment>
     <sub-class-of type="application/x-ruby"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.mab"/>
   </mime-type>
   <mime-type type="text/rust">
     <comment>Rust source code</comment>
+    <comment xml:lang="af">Rust-bronkode</comment>
+    <comment xml:lang="bg">Изходен код — Rust</comment>
     <comment xml:lang="ca">codi font en Rust</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Rust</comment>
     <comment xml:lang="da">Rust-kildekode</comment>
     <comment xml:lang="de">Rust-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Rust</comment>
-    <comment xml:lang="en_GB">Rust source code</comment>
+    <comment xml:lang="en-GB">Rust source code</comment>
     <comment xml:lang="es">código fuente en Rust</comment>
     <comment xml:lang="eu">Rust iturburu-kodea</comment>
     <comment xml:lang="fi">Rust-lähdekoodi</comment>
     <comment xml:lang="fr">code source Rust</comment>
+    <comment xml:lang="fur">codiç sorzint Rust</comment>
     <comment xml:lang="ga">cód foinseach Rust</comment>
     <comment xml:lang="he">קוד מקור של Rust</comment>
     <comment xml:lang="hr">Rust izvorni kôd</comment>
@@ -19227,35 +19874,38 @@
     <comment xml:lang="oc">còde font Rust</comment>
     <comment xml:lang="pl">Kod źródłowy Rust</comment>
     <comment xml:lang="pt">código origem Rust</comment>
-    <comment xml:lang="pt_BR">Código-fonte Rust</comment>
+    <comment xml:lang="pt-BR">Código-fonte Rust</comment>
     <comment xml:lang="ru">Исходный код Rust</comment>
     <comment xml:lang="sk">Zdrojový kód Rust</comment>
+    <comment xml:lang="sl">Izvorna koda Rust</comment>
     <comment xml:lang="sr">Раст изворни ко̂д</comment>
     <comment xml:lang="sv">Rust-källkod</comment>
     <comment xml:lang="tr">Rust kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Rust</comment>
-    <comment xml:lang="zh_CN">Rust 源代码</comment>
-    <comment xml:lang="zh_TW">Rust 源碼</comment>
+    <comment xml:lang="zh-CN">Rust 源代码</comment>
+    <comment xml:lang="zh-TW">Rust 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.rs"/>
   </mime-type>
   <mime-type type="application/x-sc">
     <comment>SC/Xspread spreadsheet</comment>
+    <comment xml:lang="af">SC/Xspread-sigblad</comment>
     <comment xml:lang="ar">جدول SC/Xspread</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš SC/Xspread</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš SC/Xspread</comment>
     <comment xml:lang="bg">Таблица — SC/Xspread</comment>
     <comment xml:lang="ca">full de càlcul de SC/Xspread</comment>
     <comment xml:lang="cs">sešit SC/Xspread</comment>
     <comment xml:lang="da">SC/Xspread-regneark</comment>
     <comment xml:lang="de">SX/Xspread-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο SC/Xspread</comment>
-    <comment xml:lang="en_GB">SC/Xspread spreadsheet</comment>
+    <comment xml:lang="en-GB">SC/Xspread spreadsheet</comment>
     <comment xml:lang="eo">SC/Xspread-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo SC/Xspread</comment>
     <comment xml:lang="eu">SC/Xspread kalkulu-orria</comment>
     <comment xml:lang="fi">SC/Xspread-taulukko</comment>
     <comment xml:lang="fo">SC/Xspread rokniark</comment>
     <comment xml:lang="fr">feuille de calcul SC/Xspread</comment>
+    <comment xml:lang="fur">sfuei di calcul SC/Xspread</comment>
     <comment xml:lang="ga">scarbhileog SC/Xspread</comment>
     <comment xml:lang="gl">folla de cálculo SC/Xspread</comment>
     <comment xml:lang="he">גליון נתונים של SC/Xspread</comment>
@@ -19275,7 +19925,7 @@
     <comment xml:lang="oc">fuèlh de calcul SC/Xspread</comment>
     <comment xml:lang="pl">Arkusz SC/Xspread</comment>
     <comment xml:lang="pt">folha de cálculo SC/Xspread</comment>
-    <comment xml:lang="pt_BR">Planilha do SC/Xspread</comment>
+    <comment xml:lang="pt-BR">Planilha do SC/Xspread</comment>
     <comment xml:lang="ro">Foaie de calcul SC/Xspread</comment>
     <comment xml:lang="ru">Электронная таблица SC/Xspread</comment>
     <comment xml:lang="sk">Zošit SC/Xspread</comment>
@@ -19283,35 +19933,37 @@
     <comment xml:lang="sq">Fletë llogaritjesh SC/Xspread</comment>
     <comment xml:lang="sr">табела СЦ/Икс-табеле</comment>
     <comment xml:lang="sv">SC/Xspread-kalkylblad</comment>
-    <comment xml:lang="tr">SC/Xspread çalışma sayfası</comment>
+    <comment xml:lang="tr">SC/Xspread hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця SC/Xspread</comment>
     <comment xml:lang="vi">Bảng tính SC/Xspread</comment>
-    <comment xml:lang="zh_CN">SC/Xspread 电子表格</comment>
-    <comment xml:lang="zh_TW">SC/Xspread 試算表</comment>
+    <comment xml:lang="zh-CN">SC/Xspread 电子表格</comment>
+    <comment xml:lang="zh-TW">SC/Xspread 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <magic priority="50">
-      <match value="Spreadsheet" type="string" offset="38"/>
+      <match type="string" value="Spreadsheet" offset="38"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-shar">
     <comment>shell archive</comment>
+    <comment xml:lang="af">shell-argief</comment>
     <comment xml:lang="ar">أرشيف شِل</comment>
     <comment xml:lang="az">qabıq arxivi</comment>
-    <comment xml:lang="be@latin">archiŭ abałonki</comment>
+    <comment xml:lang="be-Latn">archiŭ abałonki</comment>
     <comment xml:lang="bg">Архив на обвивката</comment>
     <comment xml:lang="ca">arxiu de shell</comment>
     <comment xml:lang="cs">archiv shellu</comment>
     <comment xml:lang="cy">archif plisgyn</comment>
-    <comment xml:lang="da">skalarkiv</comment>
+    <comment xml:lang="da">skal-arkiv</comment>
     <comment xml:lang="de">Shell-Archiv</comment>
     <comment xml:lang="el">Αρχείο κέλυφους</comment>
-    <comment xml:lang="en_GB">shell archive</comment>
+    <comment xml:lang="en-GB">shell archive</comment>
     <comment xml:lang="eo">ŝel-arkivo</comment>
     <comment xml:lang="es">archivador shell</comment>
     <comment xml:lang="eu">shell artxiboa</comment>
     <comment xml:lang="fi">komentotulkkiarkisto</comment>
     <comment xml:lang="fo">skel savn</comment>
     <comment xml:lang="fr">archive shell</comment>
+    <comment xml:lang="fur">archivi shell</comment>
     <comment xml:lang="ga">cartlann bhlaoisce</comment>
     <comment xml:lang="gl">ficheiro shell</comment>
     <comment xml:lang="he">ארכיון מעטפת</comment>
@@ -19332,7 +19984,7 @@
     <comment xml:lang="oc">archiu shell</comment>
     <comment xml:lang="pl">Archiwum powłoki</comment>
     <comment xml:lang="pt">arquivo de terminal</comment>
-    <comment xml:lang="pt_BR">Pacote shell</comment>
+    <comment xml:lang="pt-BR">Pacote shell</comment>
     <comment xml:lang="ro">arhivă shell</comment>
     <comment xml:lang="ru">Архив shell</comment>
     <comment xml:lang="sk">Archív shellu</comment>
@@ -19343,27 +19995,29 @@
     <comment xml:lang="tr">kabuk arşivi</comment>
     <comment xml:lang="uk">архів оболонки</comment>
     <comment xml:lang="vi">kho trình bao</comment>
-    <comment xml:lang="zh_CN">shell 归档文件</comment>
-    <comment xml:lang="zh_TW">shell 封存檔</comment>
+    <comment xml:lang="zh-CN">shell 归档文件</comment>
+    <comment xml:lang="zh-TW">shell 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.shar"/>
   </mime-type>
   <mime-type type="application/x-shared-library-la">
     <comment>libtool shared library</comment>
+    <comment xml:lang="af">libtool- gedeelde biblioteek</comment>
     <comment xml:lang="ar">مكتبة libtool المشتركة</comment>
-    <comment xml:lang="be@latin">supolnaja biblijateka libtool</comment>
+    <comment xml:lang="be-Latn">supolnaja biblijateka libtool</comment>
     <comment xml:lang="bg">Споделена библиотека — libtool</comment>
     <comment xml:lang="ca">biblioteca compartida libtool</comment>
     <comment xml:lang="cs">sdílená knihovna libtool</comment>
     <comment xml:lang="da">libtool delt bibliotek</comment>
     <comment xml:lang="de">Gemeinsame libtool-Bibliothek</comment>
     <comment xml:lang="el">Κοινόχρηστη βιβλιοθήκη libtool</comment>
-    <comment xml:lang="en_GB">libtool shared library</comment>
+    <comment xml:lang="en-GB">libtool shared library</comment>
     <comment xml:lang="es">biblioteca compartida de libtool</comment>
     <comment xml:lang="eu">libtool partekatutako liburutegia</comment>
     <comment xml:lang="fi">jaettu libtool-kirjasto</comment>
     <comment xml:lang="fo">libtool felagssavn</comment>
     <comment xml:lang="fr">bibliothèque partagée libtool</comment>
+    <comment xml:lang="fur">librarie condividude libtool</comment>
     <comment xml:lang="ga">comhleabharlann libtool</comment>
     <comment xml:lang="gl">biblioteca compartida de libtool</comment>
     <comment xml:lang="he">ספרייה משותפת של libtool</comment>
@@ -19383,7 +20037,7 @@
     <comment xml:lang="oc">bibliotèca partejada libtool</comment>
     <comment xml:lang="pl">Biblioteka współdzielona libtool</comment>
     <comment xml:lang="pt">biblioteca partilhada libtool</comment>
-    <comment xml:lang="pt_BR">Biblioteca compartilhada libtool</comment>
+    <comment xml:lang="pt-BR">Biblioteca compartilhada libtool</comment>
     <comment xml:lang="ro">bibliotecă partajată libtool</comment>
     <comment xml:lang="ru">Разделяемая библиотека libtool</comment>
     <comment xml:lang="sk">Zdieľaná knižnica libtool</comment>
@@ -19394,17 +20048,18 @@
     <comment xml:lang="tr">libtool paylaşımlı kitaplığı</comment>
     <comment xml:lang="uk">спільна бібліотека libtool</comment>
     <comment xml:lang="vi">thư viện dùng chung libtool</comment>
-    <comment xml:lang="zh_CN">libtool 共享库</comment>
-    <comment xml:lang="zh_TW">libtool 共享函式庫</comment>
+    <comment xml:lang="zh-CN">libtool 共享库</comment>
+    <comment xml:lang="zh-TW">libtool 共享函式庫</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-script"/>
     <glob pattern="*.la"/>
   </mime-type>
   <mime-type type="application/x-sharedlib">
     <comment>shared library</comment>
+    <comment xml:lang="af">gedeelde biblioteek</comment>
     <comment xml:lang="ar">مكتبة مشتركة</comment>
     <comment xml:lang="az">bölüşülmüş kitabxana</comment>
-    <comment xml:lang="be@latin">supolnaja biblijateka</comment>
+    <comment xml:lang="be-Latn">supolnaja biblijateka</comment>
     <comment xml:lang="bg">Споделена библиотека</comment>
     <comment xml:lang="ca">biblioteca compartida</comment>
     <comment xml:lang="cs">sdílená knihovna</comment>
@@ -19412,13 +20067,14 @@
     <comment xml:lang="da">delt bibliotek</comment>
     <comment xml:lang="de">Gemeinsame Bibliothek</comment>
     <comment xml:lang="el">Αρχείο κοινόχρηστης βιβλιοθήκης</comment>
-    <comment xml:lang="en_GB">shared library</comment>
+    <comment xml:lang="en-GB">shared library</comment>
     <comment xml:lang="eo">dinamike bindebla biblioteko</comment>
     <comment xml:lang="es">biblioteca compartida</comment>
     <comment xml:lang="eu">partekatutako liburutegia</comment>
     <comment xml:lang="fi">jaettu kirjasto</comment>
     <comment xml:lang="fo">felagssavn</comment>
     <comment xml:lang="fr">bibliothèque partagée</comment>
+    <comment xml:lang="fur">librarie condividude</comment>
     <comment xml:lang="ga">comhleabharlann</comment>
     <comment xml:lang="gl">biblioteca compartida</comment>
     <comment xml:lang="he">ספרייה משותפת</comment>
@@ -19439,7 +20095,7 @@
     <comment xml:lang="oc">bibliotèca partejada</comment>
     <comment xml:lang="pl">Biblioteka współdzielona</comment>
     <comment xml:lang="pt">biblioteca partilhada</comment>
-    <comment xml:lang="pt_BR">Biblioteca compartilhada</comment>
+    <comment xml:lang="pt-BR">Biblioteca compartilhada</comment>
     <comment xml:lang="ro">bibliotecă partajată</comment>
     <comment xml:lang="ru">Разделяемая библиотека</comment>
     <comment xml:lang="sk">Zdieľaná knižnica</comment>
@@ -19450,45 +20106,36 @@
     <comment xml:lang="tr">paylaşımlı kitaplık</comment>
     <comment xml:lang="uk">спільна бібліотека</comment>
     <comment xml:lang="vi">thư viện dùng chung</comment>
-    <comment xml:lang="zh_CN">共享库</comment>
-    <comment xml:lang="zh_TW">共享函式庫</comment>
+    <comment xml:lang="zh-CN">共享库</comment>
+    <comment xml:lang="zh-TW">共享函式庫</comment>
     <magic priority="50">
-      <match value="\177ELF" type="string" offset="0">
-        <match value="1" type="byte" offset="5">
-          <match value="3" type="little16" offset="16"/>
-        </match>
-      </match>
-      <match value="\177ELF" type="string" offset="0">
-        <match value="2" type="byte" offset="5">
-          <match value="3" type="big16" offset="16"/>
-        </match>
-      </match>
-      <match value="0603" type="little16" offset="0">
-        <match value="020000" type="little16" offset="22" mask="030000"/>
+      <match type="little16" value="0603" offset="0">
+        <match type="little16" mask="030000" value="020000" offset="22"/>
       </match>
-      <match value="\177ELF            \003" type="string" offset="0" mask="0xffffffff000000000000000000000000ff"/>
     </magic>
     <glob pattern="*.so"/>
   </mime-type>
   <mime-type type="application/x-shellscript">
     <comment>shell script</comment>
+    <comment xml:lang="af">shell-skrip</comment>
     <comment xml:lang="ar">سكربت شِل</comment>
     <comment xml:lang="az">qabıq skripti</comment>
-    <comment xml:lang="be@latin">skrypt abałonki</comment>
+    <comment xml:lang="be-Latn">skrypt abałonki</comment>
     <comment xml:lang="bg">Скрипт на обвивката</comment>
     <comment xml:lang="ca">script shell</comment>
     <comment xml:lang="cs">skript shellu</comment>
     <comment xml:lang="cy">sgript plisgyn</comment>
-    <comment xml:lang="da">skalprogram</comment>
+    <comment xml:lang="da">skal-program</comment>
     <comment xml:lang="de">Shell-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών κελύφους</comment>
-    <comment xml:lang="en_GB">shell script</comment>
+    <comment xml:lang="en-GB">shell script</comment>
     <comment xml:lang="eo">ŝelskripto</comment>
     <comment xml:lang="es">secuencia de órdenes en shell</comment>
     <comment xml:lang="eu">shell script-a</comment>
     <comment xml:lang="fi">komentotulkin komentotiedosto</comment>
     <comment xml:lang="fo">skel boðrøð</comment>
     <comment xml:lang="fr">script shell</comment>
+    <comment xml:lang="fur">script shell</comment>
     <comment xml:lang="ga">script bhlaoisce</comment>
     <comment xml:lang="gl">script de shell</comment>
     <comment xml:lang="he">תסריט מעטפת</comment>
@@ -19509,7 +20156,7 @@
     <comment xml:lang="oc">escript shell</comment>
     <comment xml:lang="pl">Skrypt powłoki</comment>
     <comment xml:lang="pt">script de terminal</comment>
-    <comment xml:lang="pt_BR">Script shell</comment>
+    <comment xml:lang="pt-BR">Script shell</comment>
     <comment xml:lang="ro">script shell</comment>
     <comment xml:lang="ru">Сценарий shell</comment>
     <comment xml:lang="sk">Skript shellu</comment>
@@ -19520,44 +20167,46 @@
     <comment xml:lang="tr">kabuk betiği</comment>
     <comment xml:lang="uk">скрипт оболонки</comment>
     <comment xml:lang="vi">văn lệnh trình bao</comment>
-    <comment xml:lang="zh_CN">shell 脚本</comment>
-    <comment xml:lang="zh_TW">shell 指令稿</comment>
+    <comment xml:lang="zh-CN">shell 脚本</comment>
+    <comment xml:lang="zh-TW">shell 指令稿</comment>
     <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <alias type="text/x-sh"/>
     <generic-icon name="text-x-script"/>
     <magic priority="50">
-      <match value="# This is a shell archive" type="string" offset="10"/>
-      <match value="/bin/bash" type="string" offset="2:16"/>
-      <match value="/bin/nawk" type="string" offset="2:16"/>
-      <match value="/bin/zsh" type="string" offset="2:16"/>
-      <match value="/bin/sh" type="string" offset="2:16"/>
-      <match value="/bin/ksh" type="string" offset="2:16"/>
-      <match value="/bin/dash" type="string" offset="2:16"/>
-      <match value="/bin/env sh" type="string" offset="2:16"/>
-      <match value="/bin/env bash" type="string" offset="2:16"/>
-      <match value="/bin/env zsh" type="string" offset="2:16"/>
-      <match value="/bin/env ksh" type="string" offset="2:16"/>
+      <match type="string" value="# This is a shell archive" offset="10"/>
+      <match type="string" value="/bin/bash" offset="2:16"/>
+      <match type="string" value="/bin/nawk" offset="2:16"/>
+      <match type="string" value="/bin/zsh" offset="2:16"/>
+      <match type="string" value="/bin/sh" offset="2:16"/>
+      <match type="string" value="/bin/ksh" offset="2:16"/>
+      <match type="string" value="/bin/dash" offset="2:16"/>
+      <match type="string" value="/bin/env sh" offset="2:16"/>
+      <match type="string" value="/bin/env bash" offset="2:16"/>
+      <match type="string" value="/bin/env zsh" offset="2:16"/>
+      <match type="string" value="/bin/env ksh" offset="2:16"/>
     </magic>
     <glob pattern="*.sh"/>
   </mime-type>
   <mime-type type="application/vnd.adobe.flash.movie">
     <comment>Shockwave Flash file</comment>
+    <comment xml:lang="af">Shockwave Flash-lêer</comment>
     <comment xml:lang="ar">ملف Shockwave Flash</comment>
-    <comment xml:lang="be@latin">Fajł Shockwave Flash</comment>
+    <comment xml:lang="be-Latn">Fajł Shockwave Flash</comment>
     <comment xml:lang="bg">Файл — Shockwave Flash</comment>
     <comment xml:lang="ca">fitxer Shockwave Flash</comment>
     <comment xml:lang="cs">soubor Shockwave Flash</comment>
     <comment xml:lang="da">Shockwave Flash-fil</comment>
     <comment xml:lang="de">Shockwave-Flash-Datei</comment>
     <comment xml:lang="el">Αρχείο Shockwave Flash</comment>
-    <comment xml:lang="en_GB">Shockwave Flash file</comment>
+    <comment xml:lang="en-GB">Shockwave Flash file</comment>
     <comment xml:lang="eo">dosiero de Shockwave Flash</comment>
     <comment xml:lang="es">archivo Shockwave Flash</comment>
     <comment xml:lang="eu">Shockwave Flash fitxategia</comment>
     <comment xml:lang="fi">Shockwave Flash -tiedosto</comment>
     <comment xml:lang="fo">Shockwave Flash fíla</comment>
     <comment xml:lang="fr">fichier Shockwave Flash</comment>
+    <comment xml:lang="fur">file Shockwave Flash</comment>
     <comment xml:lang="ga">comhad Shockwave Flash</comment>
     <comment xml:lang="gl">ficheiro sockwave Flash</comment>
     <comment xml:lang="he">קובץ של Shockwave Flash</comment>
@@ -19578,7 +20227,7 @@
     <comment xml:lang="oc">fichièr Shockwave Flash</comment>
     <comment xml:lang="pl">Plik Shockwave Flash</comment>
     <comment xml:lang="pt">ficheiro Shockwave Flash</comment>
-    <comment xml:lang="pt_BR">Arquivo Shockwave Flash</comment>
+    <comment xml:lang="pt-BR">Arquivo Shockwave Flash</comment>
     <comment xml:lang="ro">Fișier Shockwave Flash</comment>
     <comment xml:lang="ru">Файл Shockwave Flash</comment>
     <comment xml:lang="sk">Súbor Shockwave Flash</comment>
@@ -19589,36 +20238,38 @@
     <comment xml:lang="tr">Shockwave Flash dosyası</comment>
     <comment xml:lang="uk">файл Shockwave Flash</comment>
     <comment xml:lang="vi">Tập tin Flash Shockwave</comment>
-    <comment xml:lang="zh_CN">Shockwave Flash 文件</comment>
-    <comment xml:lang="zh_TW">Shockwave Flash 檔案</comment>
+    <comment xml:lang="zh-CN">Shockwave Flash 文件</comment>
+    <comment xml:lang="zh-TW">Shockwave Flash 檔案</comment>
     <alias type="application/x-shockwave-flash"/>
     <alias type="application/futuresplash"/>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      <match value="FWS" type="string" offset="0"/>
-      <match value="CWS" type="string" offset="0"/>
+      <match type="string" value="FWS" offset="0"/>
+      <match type="string" value="CWS" offset="0"/>
     </magic>
     <glob pattern="*.swf"/>
     <glob pattern="*.spl"/>
   </mime-type>
   <mime-type type="application/x-shorten">
-    
+    <!-- translators: "Shorten" is the name of an audio codec -->
     <comment>Shorten audio</comment>
+    <comment xml:lang="af">Shorten-oudio</comment>
     <comment xml:lang="ar">Shorten سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Shorten</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Shorten</comment>
     <comment xml:lang="bg">Аудио — Shorten</comment>
     <comment xml:lang="ca">àudio de Shorten</comment>
     <comment xml:lang="cs">zvuk Shorten</comment>
-    <comment xml:lang="da">Shortenlyd</comment>
+    <comment xml:lang="da">Shorten-lyd</comment>
     <comment xml:lang="de">Shorten-Audio</comment>
     <comment xml:lang="el">Ήχος Shorten</comment>
-    <comment xml:lang="en_GB">Shorten audio</comment>
+    <comment xml:lang="en-GB">Shorten audio</comment>
     <comment xml:lang="eo">Shorten-sondosiero</comment>
-    <comment xml:lang="es">sonido Shorten</comment>
+    <comment xml:lang="es">audio Shorten</comment>
     <comment xml:lang="eu">Shorten audioa</comment>
     <comment xml:lang="fi">Shorten-ääni</comment>
     <comment xml:lang="fo">Shorten ljóður</comment>
     <comment xml:lang="fr">audio Shorten</comment>
+    <comment xml:lang="fur">audio Shorten</comment>
     <comment xml:lang="ga">fuaim Shorten</comment>
     <comment xml:lang="gl">son Shorten</comment>
     <comment xml:lang="he">שמע של Shorten</comment>
@@ -19638,7 +20289,7 @@
     <comment xml:lang="oc">àudio Shorten</comment>
     <comment xml:lang="pl">Plik dźwiękowy Shorten</comment>
     <comment xml:lang="pt">áudio Shorten</comment>
-    <comment xml:lang="pt_BR">Áudio Shorten</comment>
+    <comment xml:lang="pt-BR">Áudio Shorten</comment>
     <comment xml:lang="ro">Audio Shorten</comment>
     <comment xml:lang="ru">Аудио Shorten</comment>
     <comment xml:lang="sk">Zvuk Shorten</comment>
@@ -19646,35 +20297,37 @@
     <comment xml:lang="sq">Audio Shorten</comment>
     <comment xml:lang="sr">Шортен звук</comment>
     <comment xml:lang="sv">Shorten-ljud</comment>
-    <comment xml:lang="tr">Kısaltılmış ses</comment>
+    <comment xml:lang="tr">Shorten sesi</comment>
     <comment xml:lang="uk">звук Shorten</comment>
     <comment xml:lang="vi">Âm thanh Shorten</comment>
-    <comment xml:lang="zh_CN">Shorten 音频</comment>
-    <comment xml:lang="zh_TW">Shorten 音訊</comment>
+    <comment xml:lang="zh-CN">Shorten 音频</comment>
+    <comment xml:lang="zh-TW">Shorten 音訊</comment>
     <generic-icon name="audio-x-generic"/>
     <magic priority="50">
-      <match value="ajkg" type="string" offset="0"/>
+      <match type="string" value="ajkg" offset="0"/>
     </magic>
     <glob pattern="*.shn"/>
     <alias type="audio/x-shorten"/>
   </mime-type>
   <mime-type type="application/x-siag">
     <comment>Siag spreadsheet</comment>
+    <comment xml:lang="af">Siag-sigblad</comment>
     <comment xml:lang="ar">جدول Siag</comment>
-    <comment xml:lang="be@latin">Raźlikovy arkuš Siag</comment>
+    <comment xml:lang="be-Latn">Raźlikovy arkuš Siag</comment>
     <comment xml:lang="bg">Таблица — Siag</comment>
     <comment xml:lang="ca">full de càlcul Siag</comment>
     <comment xml:lang="cs">sešit Siag</comment>
     <comment xml:lang="da">Siagregneark</comment>
     <comment xml:lang="de">Siag-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Siag</comment>
-    <comment xml:lang="en_GB">Siag spreadsheet</comment>
+    <comment xml:lang="en-GB">Siag spreadsheet</comment>
     <comment xml:lang="eo">Siag-kalkultabelo</comment>
     <comment xml:lang="es">hoja de cálculo de Siag</comment>
     <comment xml:lang="eu">Siag kalkulu-orria</comment>
     <comment xml:lang="fi">Siag-taulukko</comment>
     <comment xml:lang="fo">Siag rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Siag</comment>
+    <comment xml:lang="fur">sfuei di calcul Siag</comment>
     <comment xml:lang="ga">scarbhileog Siag</comment>
     <comment xml:lang="gl">folla de cálculo de Siag</comment>
     <comment xml:lang="he">גליון נתונים של Siag</comment>
@@ -19695,7 +20348,7 @@
     <comment xml:lang="oc">fuèlh de calcul Siag</comment>
     <comment xml:lang="pl">Arkusz Siag</comment>
     <comment xml:lang="pt">folha de cálculo Siag</comment>
-    <comment xml:lang="pt_BR">Planilha do Siag</comment>
+    <comment xml:lang="pt-BR">Planilha do Siag</comment>
     <comment xml:lang="ro">Foaie de calcul Siag</comment>
     <comment xml:lang="ru">Электронная таблица Siag</comment>
     <comment xml:lang="sk">Zošit Siag</comment>
@@ -19703,32 +20356,34 @@
     <comment xml:lang="sq">Fletë llogaritjesh Siag</comment>
     <comment xml:lang="sr">Сјаг табела</comment>
     <comment xml:lang="sv">Siag-kalkylblad</comment>
-    <comment xml:lang="tr">Siag çalışma sayfası</comment>
+    <comment xml:lang="tr">Siag hesap çizelgesi</comment>
     <comment xml:lang="uk">ел. таблиця Siag</comment>
     <comment xml:lang="vi">Bảng tính Slag</comment>
-    <comment xml:lang="zh_CN">Siag 电子表格</comment>
-    <comment xml:lang="zh_TW">Siag 試算表</comment>
+    <comment xml:lang="zh-CN">Siag 电子表格</comment>
+    <comment xml:lang="zh-TW">Siag 試算表</comment>
     <generic-icon name="x-office-spreadsheet"/>
     <glob pattern="*.siag"/>
   </mime-type>
   <mime-type type="image/x-skencil">
     <comment>Skencil document</comment>
+    <comment xml:lang="af">Skencil-dokument</comment>
     <comment xml:lang="ar">مستند Skencil</comment>
     <comment xml:lang="ast">Documentu de Skencil</comment>
-    <comment xml:lang="be@latin">Dakument Skencil</comment>
+    <comment xml:lang="be-Latn">Dakument Skencil</comment>
     <comment xml:lang="bg">Документ — Skencil</comment>
     <comment xml:lang="ca">document Skencil</comment>
     <comment xml:lang="cs">dokument Skencil</comment>
     <comment xml:lang="da">Skencildokument</comment>
     <comment xml:lang="de">Skencil-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Skencil</comment>
-    <comment xml:lang="en_GB">Skencil document</comment>
+    <comment xml:lang="en-GB">Skencil document</comment>
     <comment xml:lang="eo">Skencil-dokumento</comment>
     <comment xml:lang="es">documento de Skencil</comment>
     <comment xml:lang="eu">Skencil dokumentua</comment>
     <comment xml:lang="fi">Skencil-asiakirja</comment>
     <comment xml:lang="fo">Skencil skjal</comment>
     <comment xml:lang="fr">document Skencil</comment>
+    <comment xml:lang="fur">document Skencil</comment>
     <comment xml:lang="ga">cáipéis Skencil</comment>
     <comment xml:lang="gl">documento Skencil</comment>
     <comment xml:lang="he">מסמך Skencil</comment>
@@ -19747,7 +20402,7 @@
     <comment xml:lang="oc">document Skencil</comment>
     <comment xml:lang="pl">Dokument Skencil</comment>
     <comment xml:lang="pt">documento Skencil</comment>
-    <comment xml:lang="pt_BR">Documento do Skencil</comment>
+    <comment xml:lang="pt-BR">Documento do Skencil</comment>
     <comment xml:lang="ro">Document Skencil</comment>
     <comment xml:lang="ru">Документ Skencil</comment>
     <comment xml:lang="sk">Dokument Skencil</comment>
@@ -19758,19 +20413,20 @@
     <comment xml:lang="tr">Skencil belgesi</comment>
     <comment xml:lang="uk">документ Skencil</comment>
     <comment xml:lang="vi">Tài liệu Skencil</comment>
-    <comment xml:lang="zh_CN">Skencil 文档</comment>
-    <comment xml:lang="zh_TW">Skencil 文件</comment>
+    <comment xml:lang="zh-CN">Skencil 文档</comment>
+    <comment xml:lang="zh-TW">Skencil 文件</comment>
     <glob pattern="*.sk"/>
     <glob pattern="*.sk1"/>
     <magic priority="50">
-      <match value="##Sketch" type="string" offset="0"/>
+      <match type="string" value="##Sketch" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-slp">
     <comment>Stampede package</comment>
+    <comment xml:lang="af">Stampede-pakket</comment>
     <comment xml:lang="ar">حزمة Stampede</comment>
     <comment xml:lang="az">Stampede paketi</comment>
-    <comment xml:lang="be@latin">Pakunak Stampede</comment>
+    <comment xml:lang="be-Latn">Pakunak Stampede</comment>
     <comment xml:lang="bg">Пакет — Stampede</comment>
     <comment xml:lang="ca">paquet Stampede</comment>
     <comment xml:lang="cs">balíček Stampede</comment>
@@ -19778,13 +20434,14 @@
     <comment xml:lang="da">Stampedepakke</comment>
     <comment xml:lang="de">Stampede-Paket</comment>
     <comment xml:lang="el">Πακέτο Stampede</comment>
-    <comment xml:lang="en_GB">Stampede package</comment>
+    <comment xml:lang="en-GB">Stampede package</comment>
     <comment xml:lang="eo">Stampede-pakaĵo</comment>
     <comment xml:lang="es">paquete Stampede</comment>
     <comment xml:lang="eu">Stampede paketea</comment>
     <comment xml:lang="fi">Stampede-paketti</comment>
     <comment xml:lang="fo">Stampede pakki</comment>
     <comment xml:lang="fr">paquet Stampede</comment>
+    <comment xml:lang="fur">pachet Stampede</comment>
     <comment xml:lang="ga">pacáiste Stampede</comment>
     <comment xml:lang="gl">paquete Stampede</comment>
     <comment xml:lang="he">חבילה של Stampede</comment>
@@ -19805,7 +20462,7 @@
     <comment xml:lang="oc">paquet Stampede</comment>
     <comment xml:lang="pl">Pakiet Stampede</comment>
     <comment xml:lang="pt">pacote Stampede</comment>
-    <comment xml:lang="pt_BR">Pacote Stampede</comment>
+    <comment xml:lang="pt-BR">Pacote Stampede</comment>
     <comment xml:lang="ro">Pachet Stampede</comment>
     <comment xml:lang="ru">Пакет Stampede</comment>
     <comment xml:lang="sk">Balíček Stampede</comment>
@@ -19816,21 +20473,23 @@
     <comment xml:lang="tr">Stampede paketi</comment>
     <comment xml:lang="uk">пакунок Stampede</comment>
     <comment xml:lang="vi">Gói Stampede</comment>
-    <comment xml:lang="zh_CN">Stampede 软件包</comment>
-    <comment xml:lang="zh_TW">Stampede 軟體包</comment>
+    <comment xml:lang="zh-CN">Stampede 软件包</comment>
+    <comment xml:lang="zh-TW">Stampede 軟體包</comment>
     <generic-icon name="package-x-generic"/>
   </mime-type>
   <mime-type type="application/x-sg1000-rom">
     <comment>SG-1000 ROM</comment>
+    <comment xml:lang="bg">ROM — SG-1000</comment>
     <comment xml:lang="ca">ROM de SG-1000</comment>
     <comment xml:lang="cs">ROM pro SG-1000</comment>
-    <comment xml:lang="da">SG-1000 ROM</comment>
+    <comment xml:lang="da">SG-1000-ROM</comment>
     <comment xml:lang="de">SG-1000 ROM</comment>
-    <comment xml:lang="en_GB">SG-1000 ROM</comment>
+    <comment xml:lang="en-GB">SG-1000 ROM</comment>
     <comment xml:lang="es">ROM de SG-1000</comment>
     <comment xml:lang="eu">SG-1000 ROM</comment>
     <comment xml:lang="fi">SG-1000 -ROM</comment>
     <comment xml:lang="fr">ROM SG-1000</comment>
+    <comment xml:lang="fur">ROM SG-1000</comment>
     <comment xml:lang="ga">ROM SG-1000</comment>
     <comment xml:lang="hr">SG-1000 ROM</comment>
     <comment xml:lang="hu">SG-1000 ROM</comment>
@@ -19839,30 +20498,33 @@
     <comment xml:lang="kk">SG-1000 ROM</comment>
     <comment xml:lang="ko">SG-1000 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli SG-1000</comment>
-    <comment xml:lang="pt_BR">ROM de SG-1000</comment>
+    <comment xml:lang="pt-BR">ROM de SG-1000</comment>
     <comment xml:lang="ru">SG-1000 ROM</comment>
     <comment xml:lang="sk">ROM pre SG-1000</comment>
+    <comment xml:lang="sl">SG-1000 ROM</comment>
     <comment xml:lang="sr">СГ-1000 РОМ</comment>
     <comment xml:lang="sv">SG-1000-rom</comment>
     <comment xml:lang="tr">SG-1000 ROM</comment>
     <comment xml:lang="uk">ППП SG-1000</comment>
-    <comment xml:lang="zh_CN">SG-1000 ROM</comment>
-    <comment xml:lang="zh_TW">SG-1000 ROM</comment>
+    <comment xml:lang="zh-CN">SG-1000 ROM</comment>
+    <comment xml:lang="zh-TW">SG-1000 ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.sg"/>
   </mime-type>
   <mime-type type="application/x-sms-rom">
-    
+    <!-- Translate this to "Master System/Mark III" if the console was known as such in your locale (probably only in Japan) -->
     <comment>Master System ROM</comment>
+    <comment xml:lang="bg">ROM — Master System</comment>
     <comment xml:lang="ca">ROM de Master System</comment>
     <comment xml:lang="cs">ROM pro Master System</comment>
-    <comment xml:lang="da">Master System ROM</comment>
+    <comment xml:lang="da">Master System-ROM</comment>
     <comment xml:lang="de">Master System ROM</comment>
-    <comment xml:lang="en_GB">Master System ROM</comment>
+    <comment xml:lang="en-GB">Master System ROM</comment>
     <comment xml:lang="es">ROM de Master System</comment>
     <comment xml:lang="eu">Master System ROM</comment>
     <comment xml:lang="fi">Master System -ROM</comment>
     <comment xml:lang="fr">ROM Master System</comment>
+    <comment xml:lang="fur">ROM Master System</comment>
     <comment xml:lang="ga">ROM Master System</comment>
     <comment xml:lang="hr">Master System ROM</comment>
     <comment xml:lang="hu">Master System ROM</comment>
@@ -19871,30 +20533,38 @@
     <comment xml:lang="kk">Master System ROM</comment>
     <comment xml:lang="ko">마스터 시스템 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli SMS</comment>
-    <comment xml:lang="pt_BR">ROM de Master System</comment>
+    <comment xml:lang="pt-BR">ROM de Master System</comment>
     <comment xml:lang="ru">Master System ROM</comment>
     <comment xml:lang="sk">ROM pre Master System</comment>
     <comment xml:lang="sr">Мастер Систем РОМ</comment>
     <comment xml:lang="sv">Master System-rom</comment>
     <comment xml:lang="tr">Master System ROM</comment>
     <comment xml:lang="uk">ППП Master System</comment>
-    <comment xml:lang="zh_CN">Master System ROM</comment>
-    <comment xml:lang="zh_TW">Master System ROM</comment>
+    <comment xml:lang="zh-CN">Master System ROM</comment>
+    <comment xml:lang="zh-TW">Master System ROM</comment>
     <generic-icon name="application-x-executable"/>
-    
+    <!-- Disabled, the magic would be too far into the file
+    <magic>
+      <match type="string" value="TMR SEGA" offset="32752">
+        <match type="byte" value="0x30" offset="32767" mask="0xf0"/>
+        <match type="byte" value="0x40" offset="32767" mask="0xf0"/>
+      </match>
+    </magic> -->
     <glob pattern="*.sms"/>
   </mime-type>
   <mime-type type="application/x-gamegear-rom">
     <comment>Game Gear ROM</comment>
+    <comment xml:lang="bg">ROM — Game Gear</comment>
     <comment xml:lang="ca">ROM de Game Gear</comment>
     <comment xml:lang="cs">ROM pro Game Gear</comment>
-    <comment xml:lang="da">Game Gear ROM</comment>
+    <comment xml:lang="da">Game Gear-ROM</comment>
     <comment xml:lang="de">Game Gear ROM</comment>
-    <comment xml:lang="en_GB">Game Gear ROM</comment>
+    <comment xml:lang="en-GB">Game Gear ROM</comment>
     <comment xml:lang="es">ROM de Game Gear</comment>
     <comment xml:lang="eu">Game Gear ROM</comment>
     <comment xml:lang="fi">Game Gear -ROM</comment>
     <comment xml:lang="fr">ROM Game Gear</comment>
+    <comment xml:lang="fur">ROM Game Gear</comment>
     <comment xml:lang="ga">ROM Game Gear</comment>
     <comment xml:lang="hr">Game Gear ROM</comment>
     <comment xml:lang="hu">Game Gear ROM</comment>
@@ -19903,36 +20573,44 @@
     <comment xml:lang="kk">Game Gear ROM</comment>
     <comment xml:lang="ko">게임 기어 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Game Gear</comment>
-    <comment xml:lang="pt_BR">ROM de Game Gear</comment>
+    <comment xml:lang="pt-BR">ROM de Game Gear</comment>
     <comment xml:lang="ru">Game Gear ROM</comment>
     <comment xml:lang="sk">ROM pre Game Gear</comment>
     <comment xml:lang="sr">Гејм Гир РОМ</comment>
     <comment xml:lang="sv">Game Gear-rom</comment>
     <comment xml:lang="tr">Game Gear ROM</comment>
     <comment xml:lang="uk">ППП Game Gear</comment>
-    <comment xml:lang="zh_CN">Game Gear ROM</comment>
-    <comment xml:lang="zh_TW">Game Gear ROM</comment>
+    <comment xml:lang="zh-CN">Game Gear ROM</comment>
+    <comment xml:lang="zh-TW">Game Gear ROM</comment>
     <generic-icon name="application-x-executable"/>
-    
+    <!-- Disabled, the magic would be too far into the file
+    <magic>
+      <match type="string" value="TMR SEGA" offset="32752">
+        <match type="byte" value="0x50" offset="32767" mask="0xf0"/>
+        <match type="byte" value="0x60" offset="32767" mask="0xf0"/>
+        <match type="byte" value="0x70" offset="32767" mask="0xf0"/>
+      </match>
+    </magic> -->
     <glob pattern="*.gg"/>
   </mime-type>
   <mime-type type="application/vnd.nintendo.snes.rom">
-    
+    <!-- Translate this as Super Famicom (in Far East Asia) or Super Nintendo (in Europe) if the console was known as such in your locale -->
     <comment>Super NES ROM</comment>
     <comment xml:lang="ar">Super NES ROM</comment>
-    <comment xml:lang="be@latin">Super Nintendo ROM</comment>
+    <comment xml:lang="be-Latn">Super Nintendo ROM</comment>
     <comment xml:lang="bg">ROM — Super NES</comment>
     <comment xml:lang="ca">ROM de Super NES</comment>
     <comment xml:lang="cs">ROM pro Super Nintendo</comment>
-    <comment xml:lang="da">Super NES-rom</comment>
+    <comment xml:lang="da">Super NES-ROM</comment>
     <comment xml:lang="de">Super NES ROM</comment>
     <comment xml:lang="el">Super NES ROM</comment>
-    <comment xml:lang="en_GB">Super NES ROM</comment>
+    <comment xml:lang="en-GB">Super NES ROM</comment>
     <comment xml:lang="es">ROM de Super NES</comment>
     <comment xml:lang="eu">Super Nintendo-ko ROMa</comment>
     <comment xml:lang="fi">Super Nintendo -ROM</comment>
     <comment xml:lang="fo">Super NES ROM</comment>
     <comment xml:lang="fr">ROM Super Nintendo</comment>
+    <comment xml:lang="fur">ROM Super Nintendo</comment>
     <comment xml:lang="ga">ROM Super NES</comment>
     <comment xml:lang="gl">ROM de Super NES</comment>
     <comment xml:lang="he">ROM של Super NES</comment>
@@ -19952,7 +20630,7 @@
     <comment xml:lang="oc">ROM Super Nintendo</comment>
     <comment xml:lang="pl">Plik ROM konsoli SNES</comment>
     <comment xml:lang="pt">ROM Super Nintendo</comment>
-    <comment xml:lang="pt_BR">ROM de Super Nintendo</comment>
+    <comment xml:lang="pt-BR">ROM de Super Nintendo</comment>
     <comment xml:lang="ro">ROM Super Nintendo</comment>
     <comment xml:lang="ru">Super NES ROM</comment>
     <comment xml:lang="sk">ROM pre Super Nintendo</comment>
@@ -19963,8 +20641,8 @@
     <comment xml:lang="tr">Super NES ROM</comment>
     <comment xml:lang="uk">ППП Super NES</comment>
     <comment xml:lang="vi">ROM Super Nintendo</comment>
-    <comment xml:lang="zh_CN">Super NES ROM</comment>
-    <comment xml:lang="zh_TW">超級任天堂 ROM</comment>
+    <comment xml:lang="zh-CN">Super NES ROM</comment>
+    <comment xml:lang="zh-TW">超級任天堂 ROM</comment>
     <generic-icon name="application-x-executable"/>
     <alias type="application/x-snes-rom"/>
     <glob pattern="*.sfc"/>
@@ -19972,21 +20650,23 @@
   </mime-type>
   <mime-type type="application/x-stuffit">
     <comment>StuffIt archive</comment>
+    <comment xml:lang="af">StuffIt-argief</comment>
     <comment xml:lang="ar">أرشيف StuffIt</comment>
-    <comment xml:lang="be@latin">Archiŭ StuffIt</comment>
+    <comment xml:lang="be-Latn">Archiŭ StuffIt</comment>
     <comment xml:lang="bg">Архив — StuffIt</comment>
     <comment xml:lang="ca">arxiu StuffIt</comment>
     <comment xml:lang="cs">archiv StuffIt</comment>
     <comment xml:lang="da">StuffIt-arkiv</comment>
     <comment xml:lang="de">StuffIt-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο StuffIt</comment>
-    <comment xml:lang="en_GB">StuffIt archive</comment>
+    <comment xml:lang="en-GB">StuffIt archive</comment>
     <comment xml:lang="eo">StuffIt-arkivo</comment>
     <comment xml:lang="es">archivador de StuffIt</comment>
     <comment xml:lang="eu">StuffIt artxiboa</comment>
     <comment xml:lang="fi">StuffIt-arkisto</comment>
     <comment xml:lang="fo">StuffIt skjalasavn</comment>
     <comment xml:lang="fr">archive StuffIt</comment>
+    <comment xml:lang="fur">archivi StuffIt</comment>
     <comment xml:lang="ga">cartlann StuffIt</comment>
     <comment xml:lang="gl">arquivo StuffIt</comment>
     <comment xml:lang="he">ארכיון של StuffIt</comment>
@@ -20006,7 +20686,7 @@
     <comment xml:lang="oc">archiu StuffIt</comment>
     <comment xml:lang="pl">Archiwum StuffIt</comment>
     <comment xml:lang="pt">arquivo StuffIt</comment>
-    <comment xml:lang="pt_BR">Pacote StuffIt</comment>
+    <comment xml:lang="pt-BR">Pacote StuffIt</comment>
     <comment xml:lang="ro">Arhivă StuffIt</comment>
     <comment xml:lang="ru">Архив StuffIt</comment>
     <comment xml:lang="sk">Archív StuffIt</comment>
@@ -20017,34 +20697,36 @@
     <comment xml:lang="tr">StuffIt arşivi</comment>
     <comment xml:lang="uk">архів StuffIt</comment>
     <comment xml:lang="vi">Kho nén Stuffit</comment>
-    <comment xml:lang="zh_CN">Macintosh StuffIt 归档文件</comment>
-    <comment xml:lang="zh_TW">StuffIt 封存檔</comment>
+    <comment xml:lang="zh-CN">Macintosh StuffIt 归档文件</comment>
+    <comment xml:lang="zh-TW">StuffIt 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <alias type="application/stuffit"/>
     <alias type="application/x-sit"/>
     <magic priority="60">
-      <match value="StuffIt " type="string" offset="0"/>
-      <match value="SIT!" type="string" offset="0"/>
+      <match type="string" value="StuffIt " offset="0"/>
+      <match type="string" value="SIT!" offset="0"/>
     </magic>
     <glob pattern="*.sit"/>
   </mime-type>
   <mime-type type="application/x-subrip">
     <comment>SubRip subtitles</comment>
+    <comment xml:lang="af">SubRip-onderskrifte</comment>
     <comment xml:lang="ar">ترجمات SubRip</comment>
-    <comment xml:lang="be@latin">Subtytry SubRip</comment>
+    <comment xml:lang="be-Latn">Subtytry SubRip</comment>
     <comment xml:lang="bg">Субтитри — SubRip</comment>
     <comment xml:lang="ca">subtítols SubRip</comment>
     <comment xml:lang="cs">titulky SubRip</comment>
     <comment xml:lang="da">SubRip-undertekster</comment>
     <comment xml:lang="de">SubRip-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι SubRip</comment>
-    <comment xml:lang="en_GB">SubRip subtitles</comment>
+    <comment xml:lang="en-GB">SubRip subtitles</comment>
     <comment xml:lang="eo">SubRip-subtekstoj</comment>
     <comment xml:lang="es">subtítulos SubRip</comment>
     <comment xml:lang="eu">SubRip azpitituluak</comment>
     <comment xml:lang="fi">SubRip-tekstitykset</comment>
     <comment xml:lang="fo">SubRip undirtekstir</comment>
     <comment xml:lang="fr">sous-titres SubRip</comment>
+    <comment xml:lang="fur">sottitui SubRip</comment>
     <comment xml:lang="ga">fotheidil SubRip</comment>
     <comment xml:lang="gl">subtítulos SubRip</comment>
     <comment xml:lang="he">כתוביות של SubRip</comment>
@@ -20064,7 +20746,7 @@
     <comment xml:lang="oc">sostítols SubRip</comment>
     <comment xml:lang="pl">Napisy SubRip</comment>
     <comment xml:lang="pt">legendas SubRip</comment>
-    <comment xml:lang="pt_BR">Legendas SubRip</comment>
+    <comment xml:lang="pt-BR">Legendas SubRip</comment>
     <comment xml:lang="ro">Subtitrare SubRip</comment>
     <comment xml:lang="ru">Субтитры SubRip</comment>
     <comment xml:lang="sk">Titulky SubRip</comment>
@@ -20072,34 +20754,36 @@
     <comment xml:lang="sq">Nëntituj SubRip</comment>
     <comment xml:lang="sr">Суб Рип преводи</comment>
     <comment xml:lang="sv">SubRip-undertexter</comment>
-    <comment xml:lang="tr">SubRip altyazıları</comment>
+    <comment xml:lang="tr">SubRip alt yazıları</comment>
     <comment xml:lang="uk">субтитри SubRip</comment>
     <comment xml:lang="vi">Phụ đề SubRip</comment>
-    <comment xml:lang="zh_CN">SubRip 字幕</comment>
-    <comment xml:lang="zh_TW">SubRip 字幕</comment>
+    <comment xml:lang="zh-CN">SubRip 字幕</comment>
+    <comment xml:lang="zh-TW">SubRip 字幕</comment>
     <alias type="application/x-srt"/>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="1" type="string" offset="0">
-        <match value=" --> " type="string" offset="0:256"/>
+      <match type="string" value="1" offset="0">
+        <match type="string" value=" --&gt; " offset="0:256"/>
       </match>
     </magic>
     <glob pattern="*.srt"/>
   </mime-type>
   <mime-type type="text/vtt">
     <comment>WebVTT subtitles</comment>
+    <comment xml:lang="af">WebVTT-onderskrifte</comment>
     <comment xml:lang="bg">Субтитри — WebVTT</comment>
     <comment xml:lang="ca">subtítols WebVTT</comment>
     <comment xml:lang="cs">titulky WebVTT</comment>
     <comment xml:lang="da">WebVTT-undertekster</comment>
     <comment xml:lang="de">WebVTT-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι WebVTT</comment>
-    <comment xml:lang="en_GB">WebVTT subtitles</comment>
+    <comment xml:lang="en-GB">WebVTT subtitles</comment>
     <comment xml:lang="es">subtítulos WebVTT</comment>
     <comment xml:lang="eu">WebVTT azpitituluak</comment>
     <comment xml:lang="fi">WebVTT-tekstitykset</comment>
     <comment xml:lang="fr">sous-titres WebVTT</comment>
+    <comment xml:lang="fur">sottitui WebVTT</comment>
     <comment xml:lang="ga">fotheidil WebVTT</comment>
     <comment xml:lang="gl">subtítulos WebVTT</comment>
     <comment xml:lang="he">כתוביות WebVTT</comment>
@@ -20117,42 +20801,44 @@
     <comment xml:lang="oc">sostítols WebVTT</comment>
     <comment xml:lang="pl">Napisy WebVTT</comment>
     <comment xml:lang="pt">legendas WebVTT</comment>
-    <comment xml:lang="pt_BR">Legendas WebVTT</comment>
+    <comment xml:lang="pt-BR">Legendas WebVTT</comment>
     <comment xml:lang="ru">Субтитры WebVTT</comment>
     <comment xml:lang="sk">Titulky WebVTT</comment>
     <comment xml:lang="sl">Podnapisi WebVTT</comment>
     <comment xml:lang="sr">Веб ВТТ преводи</comment>
     <comment xml:lang="sv">WebVTT-undertexter</comment>
-    <comment xml:lang="tr">WebVTT altyazıları</comment>
+    <comment xml:lang="tr">WebVTT alt yazıları</comment>
     <comment xml:lang="uk">субтитри WebVTT</comment>
-    <comment xml:lang="zh_CN">WebVTT 字幕</comment>
-    <comment xml:lang="zh_TW">WebVTT 字幕</comment>
+    <comment xml:lang="zh-CN">WebVTT 字幕</comment>
+    <comment xml:lang="zh-TW">WebVTT 字幕</comment>
     <acronym>VTT</acronym>
     <expanded-acronym>Video Text Tracks</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="WEBVTT" type="string" offset="0"/>
+      <match type="string" value="WEBVTT" offset="0"/>
     </magic>
     <glob pattern="*.vtt"/>
   </mime-type>
   <mime-type type="application/x-sami">
     <comment>SAMI subtitles</comment>
+    <comment xml:lang="af">SAMI-onderskrifte</comment>
     <comment xml:lang="ar">ترجمات SAMI</comment>
-    <comment xml:lang="be@latin">Subtytry SAMI</comment>
+    <comment xml:lang="be-Latn">Subtytry SAMI</comment>
     <comment xml:lang="bg">Субтитри — SAMI</comment>
     <comment xml:lang="ca">subtítols SAMI</comment>
     <comment xml:lang="cs">titulky SAMI</comment>
     <comment xml:lang="da">SAMI-undertekster</comment>
     <comment xml:lang="de">SAMI-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι SAMI</comment>
-    <comment xml:lang="en_GB">SAMI subtitles</comment>
+    <comment xml:lang="en-GB">SAMI subtitles</comment>
     <comment xml:lang="eo">SAMI-subtekstoj</comment>
     <comment xml:lang="es">subtítulos SAMI</comment>
     <comment xml:lang="eu">SAMI azpitituluak</comment>
     <comment xml:lang="fi">SAMI-tekstitykset</comment>
     <comment xml:lang="fo">SAMI undirtekstir</comment>
     <comment xml:lang="fr">sous-titres SAMI</comment>
+    <comment xml:lang="fur">sottitui SAMI</comment>
     <comment xml:lang="ga">fotheidil SAMI</comment>
     <comment xml:lang="gl">subtítulos SAMI</comment>
     <comment xml:lang="he">כתוביות SAMI</comment>
@@ -20172,7 +20858,7 @@
     <comment xml:lang="oc">sostítols SAMI</comment>
     <comment xml:lang="pl">Napisy SAMI</comment>
     <comment xml:lang="pt">legendas SAMI</comment>
-    <comment xml:lang="pt_BR">Legendas SAMI</comment>
+    <comment xml:lang="pt-BR">Legendas SAMI</comment>
     <comment xml:lang="ro">Subtitrări SAMI</comment>
     <comment xml:lang="ru">Субтитры SAMI</comment>
     <comment xml:lang="sk">Titulky SAMI</comment>
@@ -20180,38 +20866,40 @@
     <comment xml:lang="sq">Nëntituj SAMI</comment>
     <comment xml:lang="sr">САМИ преводи</comment>
     <comment xml:lang="sv">SAMI-undertexter</comment>
-    <comment xml:lang="tr">SAMI altyazıları</comment>
+    <comment xml:lang="tr">SAMI alt yazıları</comment>
     <comment xml:lang="uk">субтитри SAMI</comment>
     <comment xml:lang="vi">Phụ đề SAMI</comment>
-    <comment xml:lang="zh_CN">SAMI 字幕</comment>
-    <comment xml:lang="zh_TW">SAMI 字幕</comment>
+    <comment xml:lang="zh-CN">SAMI 字幕</comment>
+    <comment xml:lang="zh-TW">SAMI 字幕</comment>
     <acronym>SAMI</acronym>
     <expanded-acronym>Synchronized Accessible Media Interchange</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="&lt;SAMI&gt;" type="string" offset="0:256"/>
+      <match type="string" value="&lt;SAMI&gt;" offset="0:256"/>
     </magic>
     <glob pattern="*.smi"/>
     <glob pattern="*.sami"/>
   </mime-type>
   <mime-type type="text/x-microdvd">
     <comment>MicroDVD subtitles</comment>
+    <comment xml:lang="af">MicroDVD-onderskrifte</comment>
     <comment xml:lang="ar">ترجمات MicroDVD</comment>
-    <comment xml:lang="be@latin">Subtytry MicroDVD</comment>
+    <comment xml:lang="be-Latn">Subtytry MicroDVD</comment>
     <comment xml:lang="bg">Субтитри — MicroDVD</comment>
     <comment xml:lang="ca">subtítols MicroDVD</comment>
     <comment xml:lang="cs">titulky MicroDVD</comment>
     <comment xml:lang="da">MicroDVD-undertekster</comment>
     <comment xml:lang="de">MicroDVD-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι MicroDVD</comment>
-    <comment xml:lang="en_GB">MicroDVD subtitles</comment>
+    <comment xml:lang="en-GB">MicroDVD subtitles</comment>
     <comment xml:lang="eo">MicroDVD-subtekstoj</comment>
     <comment xml:lang="es">subtítulos de MicroDVD</comment>
     <comment xml:lang="eu">MicroDVD azpitituluak</comment>
     <comment xml:lang="fi">MicroDVD-tekstitykset</comment>
     <comment xml:lang="fo">MicroDVD undirtekstir</comment>
     <comment xml:lang="fr">sous-titres MicroDVD</comment>
+    <comment xml:lang="fur">sottitui MicroDVD</comment>
     <comment xml:lang="ga">fotheidil MicroDVD</comment>
     <comment xml:lang="gl">subtítulos de MicroDVD</comment>
     <comment xml:lang="he">כתוביות של MicroDVD</comment>
@@ -20232,7 +20920,7 @@
     <comment xml:lang="oc">sostítols MicroDVD</comment>
     <comment xml:lang="pl">Napisy MicroDVD</comment>
     <comment xml:lang="pt">legendas MicroDVD</comment>
-    <comment xml:lang="pt_BR">Legendas MicroDVD</comment>
+    <comment xml:lang="pt-BR">Legendas MicroDVD</comment>
     <comment xml:lang="ro">Subtitrări MicroDVD</comment>
     <comment xml:lang="ru">Субтитры MicroDVD</comment>
     <comment xml:lang="sk">Titulky MicroDVD</comment>
@@ -20240,36 +20928,38 @@
     <comment xml:lang="sq">Nëntituj MicroDVD</comment>
     <comment xml:lang="sr">Микро ДВД преводи</comment>
     <comment xml:lang="sv">MicroDVD-undertexter</comment>
-    <comment xml:lang="tr">MicroDVD altyazısı</comment>
+    <comment xml:lang="tr">MicroDVD alt yazısı</comment>
     <comment xml:lang="uk">субтитри MicroDVD</comment>
     <comment xml:lang="vi">Phụ đề MicroDVD</comment>
-    <comment xml:lang="zh_CN">MicroDVD 字幕</comment>
-    <comment xml:lang="zh_TW">MicroDVD 字幕</comment>
+    <comment xml:lang="zh-CN">MicroDVD 字幕</comment>
+    <comment xml:lang="zh-TW">MicroDVD 字幕</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="{1}" type="string" offset="0"/>
-      <match value="{0}" type="string" offset="0"/>
-      <match value="}{" type="string" offset="0:6"/>
+      <match type="string" value="{1}" offset="0"/>
+      <match type="string" value="{0}" offset="0"/>
+      <match type="string" value="}{" offset="0:6"/>
     </magic>
     <glob pattern="*.sub"/>
   </mime-type>
   <mime-type type="text/x-mpsub">
     <comment>MPSub subtitles</comment>
+    <comment xml:lang="af">MPSub-onderskrifte</comment>
     <comment xml:lang="ar">ترجمات MPSub</comment>
-    <comment xml:lang="be@latin">Subtytry MPSub</comment>
+    <comment xml:lang="be-Latn">Subtytry MPSub</comment>
     <comment xml:lang="bg">Субтитри — MPSub</comment>
     <comment xml:lang="ca">subtítols MPSub</comment>
     <comment xml:lang="cs">titulky MPSub</comment>
     <comment xml:lang="da">MPSub-undertekster</comment>
     <comment xml:lang="de">MPSub-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι MPSub</comment>
-    <comment xml:lang="en_GB">MPSub subtitles</comment>
+    <comment xml:lang="en-GB">MPSub subtitles</comment>
     <comment xml:lang="eo">MPSub-subtekstoj</comment>
     <comment xml:lang="es">subtítulos MPSub</comment>
     <comment xml:lang="eu">MPSub azpitituluak</comment>
     <comment xml:lang="fi">MPSub-tekstitykset</comment>
     <comment xml:lang="fo">MPSub undirtekstir</comment>
     <comment xml:lang="fr">sous-titres MPSub</comment>
+    <comment xml:lang="fur">sottitui MPSub</comment>
     <comment xml:lang="ga">fotheidil MPSub</comment>
     <comment xml:lang="gl">subtítulos MPSub</comment>
     <comment xml:lang="he">כתוביות MPSub</comment>
@@ -20290,7 +20980,7 @@
     <comment xml:lang="oc">sostítols MPSub</comment>
     <comment xml:lang="pl">Napisy MPSub</comment>
     <comment xml:lang="pt">legendas MPSub</comment>
-    <comment xml:lang="pt_BR">Legendas MPSub</comment>
+    <comment xml:lang="pt-BR">Legendas MPSub</comment>
     <comment xml:lang="ro">Subtitrări MPSub</comment>
     <comment xml:lang="ru">Субтитры MPSub</comment>
     <comment xml:lang="sk">Titulky MPSub</comment>
@@ -20298,36 +20988,38 @@
     <comment xml:lang="sq">Nëntituj MPSub</comment>
     <comment xml:lang="sr">МПСуб преводи</comment>
     <comment xml:lang="sv">MPSub-undertexter</comment>
-    <comment xml:lang="tr">MPSub altyazıları</comment>
+    <comment xml:lang="tr">MPSub alt yazıları</comment>
     <comment xml:lang="uk">субтитри MPSub</comment>
     <comment xml:lang="vi">Phụ đề MPSub</comment>
-    <comment xml:lang="zh_CN">MPSub 字幕</comment>
-    <comment xml:lang="zh_TW">MPSub 字幕</comment>
+    <comment xml:lang="zh-CN">MPSub 字幕</comment>
+    <comment xml:lang="zh-TW">MPSub 字幕</comment>
     <acronym>MPSub</acronym>
     <expanded-acronym>MPlayer Subtitle</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="FORMAT=" type="string" offset="0:256"/>
+      <match type="string" value="FORMAT=" offset="0:256"/>
     </magic>
     <glob pattern="*.sub"/>
   </mime-type>
   <mime-type type="text/x-ssa">
     <comment>SSA subtitles</comment>
+    <comment xml:lang="af">SSA-onderskrifte</comment>
     <comment xml:lang="ar">ترجمات SSA</comment>
-    <comment xml:lang="be@latin">Subtytry SSA</comment>
+    <comment xml:lang="be-Latn">Subtytry SSA</comment>
     <comment xml:lang="bg">Субтитри — SSA</comment>
     <comment xml:lang="ca">subtítols SSA</comment>
     <comment xml:lang="cs">titulky SSA</comment>
     <comment xml:lang="da">SSA-undertekster</comment>
     <comment xml:lang="de">SSA-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι SSA</comment>
-    <comment xml:lang="en_GB">SSA subtitles</comment>
+    <comment xml:lang="en-GB">SSA subtitles</comment>
     <comment xml:lang="eo">SSA-subtekstoj</comment>
     <comment xml:lang="es">subtítulos SSA</comment>
     <comment xml:lang="eu">SSA azpitituluak</comment>
     <comment xml:lang="fi">SSA-tekstitykset</comment>
     <comment xml:lang="fo">SSA undirtekstir</comment>
     <comment xml:lang="fr">sous-titres SSA</comment>
+    <comment xml:lang="fur">sottitui SSA</comment>
     <comment xml:lang="ga">fotheidil SSA</comment>
     <comment xml:lang="gl">Subtitulos SSA</comment>
     <comment xml:lang="he">כתובית SSA</comment>
@@ -20347,7 +21039,7 @@
     <comment xml:lang="oc">sostítols SSA</comment>
     <comment xml:lang="pl">Napisy SSA</comment>
     <comment xml:lang="pt">legendas SSA</comment>
-    <comment xml:lang="pt_BR">Legendas SSA</comment>
+    <comment xml:lang="pt-BR">Legendas SSA</comment>
     <comment xml:lang="ro">Subtitrări SSA</comment>
     <comment xml:lang="ru">Субтитры SSA</comment>
     <comment xml:lang="sk">Titulky SSA</comment>
@@ -20355,38 +21047,40 @@
     <comment xml:lang="sq">Nëntituj SSA</comment>
     <comment xml:lang="sr">ССА преводи</comment>
     <comment xml:lang="sv">SSA-undertexter</comment>
-    <comment xml:lang="tr">SSA altyazıları</comment>
+    <comment xml:lang="tr">SSA alt yazıları</comment>
     <comment xml:lang="uk">субтитри SSA</comment>
     <comment xml:lang="vi">Phụ đề SSA</comment>
-    <comment xml:lang="zh_CN">SSA 字幕</comment>
-    <comment xml:lang="zh_TW">SSA 字幕</comment>
+    <comment xml:lang="zh-CN">SSA 字幕</comment>
+    <comment xml:lang="zh-TW">SSA 字幕</comment>
     <acronym>SSA</acronym>
     <expanded-acronym>SubStation Alpha</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="[Script Info]" type="string" offset="0:256"/>
-      <match value="Dialogue: " type="string" offset="0:256"/>
+      <match type="string" value="[Script Info]" offset="0:256"/>
+      <match type="string" value="Dialogue: " offset="0:256"/>
     </magic>
     <glob pattern="*.ssa"/>
     <glob pattern="*.ass"/>
   </mime-type>
   <mime-type type="text/x-subviewer">
     <comment>SubViewer subtitles</comment>
+    <comment xml:lang="af">SubViewer-onderskrifte</comment>
     <comment xml:lang="ar">ترجمات SubViewer</comment>
-    <comment xml:lang="be@latin">Subtytry SubViewer</comment>
+    <comment xml:lang="be-Latn">Subtytry SubViewer</comment>
     <comment xml:lang="bg">Субтитри — SubViewer</comment>
     <comment xml:lang="ca">subtítols SubViewer</comment>
     <comment xml:lang="cs">titulky SubViewer</comment>
     <comment xml:lang="da">SubViewer-undertekster</comment>
     <comment xml:lang="de">SubViewer-Untertitel</comment>
     <comment xml:lang="el">Υπότιτλοι SubViewer</comment>
-    <comment xml:lang="en_GB">SubViewer subtitles</comment>
+    <comment xml:lang="en-GB">SubViewer subtitles</comment>
     <comment xml:lang="eo">SubViewer-subtekstoj</comment>
     <comment xml:lang="es">subtítulos SubViewer</comment>
     <comment xml:lang="eu">SubViewer azpitituluak</comment>
     <comment xml:lang="fi">SubViewer-tekstitykset</comment>
     <comment xml:lang="fo">SubViewer undirtekstir</comment>
     <comment xml:lang="fr">sous-titres SubViewer</comment>
+    <comment xml:lang="fur">sottitui SubViewer</comment>
     <comment xml:lang="ga">fotheidil SubViewer</comment>
     <comment xml:lang="gl">subtítulos SubViewer</comment>
     <comment xml:lang="he">כתוביות של SubViewer</comment>
@@ -20406,7 +21100,7 @@
     <comment xml:lang="oc">sostítols SubViewer</comment>
     <comment xml:lang="pl">Napisy SubViewer</comment>
     <comment xml:lang="pt">legendas SubViewer</comment>
-    <comment xml:lang="pt_BR">Legendas SubViewer</comment>
+    <comment xml:lang="pt-BR">Legendas SubViewer</comment>
     <comment xml:lang="ro">Subtitrare SubViewer</comment>
     <comment xml:lang="ru">Субтитры SubViewer</comment>
     <comment xml:lang="sk">Titulky SubViewer</comment>
@@ -20414,33 +21108,35 @@
     <comment xml:lang="sq">Nëntituj SubViewer</comment>
     <comment xml:lang="sr">Суб Вјивер преводи</comment>
     <comment xml:lang="sv">SubViewer-undertexter</comment>
-    <comment xml:lang="tr">SubViewer altyazıları</comment>
+    <comment xml:lang="tr">SubViewer alt yazıları</comment>
     <comment xml:lang="uk">субтитри SubViewer</comment>
     <comment xml:lang="vi">Phụ đề SubViewer</comment>
-    <comment xml:lang="zh_CN">SubViewer 字幕</comment>
-    <comment xml:lang="zh_TW">SubViewer 字幕</comment>
+    <comment xml:lang="zh-CN">SubViewer 字幕</comment>
+    <comment xml:lang="zh-TW">SubViewer 字幕</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="[INFORMATION]" type="string" offset="0"/>
+      <match type="string" value="[INFORMATION]" offset="0"/>
     </magic>
     <glob pattern="*.sub"/>
   </mime-type>
   <mime-type type="text/x-iMelody">
     <comment>iMelody ringtone</comment>
+    <comment xml:lang="af">iMelody-luitoon</comment>
     <comment xml:lang="ar">نغمة iMelody</comment>
-    <comment xml:lang="be@latin">Rington iMelody</comment>
+    <comment xml:lang="be-Latn">Rington iMelody</comment>
     <comment xml:lang="bg">Аудио — iMelody</comment>
     <comment xml:lang="ca">to de trucada iMelody</comment>
     <comment xml:lang="cs">vyzváněcí melodie iMelody</comment>
     <comment xml:lang="da">iMelody-ringetone</comment>
     <comment xml:lang="de">iMelody-Klingelton</comment>
     <comment xml:lang="el">ringtone iMelody</comment>
-    <comment xml:lang="en_GB">iMelody ringtone</comment>
+    <comment xml:lang="en-GB">iMelody ringtone</comment>
     <comment xml:lang="es">tono de llamada iMelody</comment>
     <comment xml:lang="eu">iMelody doinua</comment>
     <comment xml:lang="fi">iMelody-soittoääni</comment>
     <comment xml:lang="fo">iMelody ringitóni</comment>
     <comment xml:lang="fr">sonnerie iMelody</comment>
+    <comment xml:lang="fur">sunarie iMelody</comment>
     <comment xml:lang="ga">ton buailte iMelody</comment>
     <comment xml:lang="gl">Melodía de iMelody</comment>
     <comment xml:lang="he">צלצול של iMelody</comment>
@@ -20460,7 +21156,7 @@
     <comment xml:lang="oc">sonariá iMelody</comment>
     <comment xml:lang="pl">Dzwonek iMelody</comment>
     <comment xml:lang="pt">toque iMelody</comment>
-    <comment xml:lang="pt_BR">Toque de celular do iMelody</comment>
+    <comment xml:lang="pt-BR">Toque de celular do iMelody</comment>
     <comment xml:lang="ro">Sonerie iMelody</comment>
     <comment xml:lang="ru">Мелодия iMelody</comment>
     <comment xml:lang="sk">Vyzváňacie melódie iMelody</comment>
@@ -20471,33 +21167,35 @@
     <comment xml:lang="tr">iMelody melodisi</comment>
     <comment xml:lang="uk">рінгтон iMelody</comment>
     <comment xml:lang="vi">tiếng réo iMelody</comment>
-    <comment xml:lang="zh_CN">iMelody 铃声</comment>
-    <comment xml:lang="zh_TW">iMelody 鈴聲</comment>
+    <comment xml:lang="zh-CN">iMelody 铃声</comment>
+    <comment xml:lang="zh-TW">iMelody 鈴聲</comment>
     <magic priority="50">
-      <match value="BEGIN:IMELODY" type="string" offset="0"/>
+      <match type="string" value="BEGIN:IMELODY" offset="0"/>
     </magic>
     <glob pattern="*.imy"/>
     <glob pattern="*.ime"/>
     <alias type="audio/x-iMelody"/>
     <alias type="audio/iMelody"/>
   </mime-type>
-  <mime-type type="application/x-smaf">
+  <mime-type type="application/vnd.smaf">
     <comment>SMAF audio</comment>
+    <comment xml:lang="af">SMAF-oudio</comment>
     <comment xml:lang="ar">SMAF سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo SMAF</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo SMAF</comment>
     <comment xml:lang="bg">Аудио — SMAF</comment>
     <comment xml:lang="ca">àudio SMAF</comment>
     <comment xml:lang="cs">zvuk SMAF</comment>
     <comment xml:lang="da">SMAF-lyd</comment>
     <comment xml:lang="de">SMAF-Audio</comment>
     <comment xml:lang="el">Ήχος SMAF</comment>
-    <comment xml:lang="en_GB">SMAF audio</comment>
+    <comment xml:lang="en-GB">SMAF audio</comment>
     <comment xml:lang="eo">SMAF-sondosiero</comment>
-    <comment xml:lang="es">sonido SMAF</comment>
+    <comment xml:lang="es">audio SMAF</comment>
     <comment xml:lang="eu">SMAF audioa</comment>
     <comment xml:lang="fi">SMAF-ääni</comment>
     <comment xml:lang="fo">SMAF ljóður</comment>
     <comment xml:lang="fr">audio SMAF</comment>
+    <comment xml:lang="fur">audio SMAF</comment>
     <comment xml:lang="ga">fuaim SMAF</comment>
     <comment xml:lang="gl">son SMAF</comment>
     <comment xml:lang="he">שמע SMAF</comment>
@@ -20517,7 +21215,7 @@
     <comment xml:lang="oc">àudio SMAF</comment>
     <comment xml:lang="pl">Plik dźwiękowy SMAF</comment>
     <comment xml:lang="pt">áudio SMAF</comment>
-    <comment xml:lang="pt_BR">Áudio SMAF</comment>
+    <comment xml:lang="pt-BR">Áudio SMAF</comment>
     <comment xml:lang="ro">Audio SMAF</comment>
     <comment xml:lang="ru">Аудио SMAF</comment>
     <comment xml:lang="sk">Zvuk SMAF</comment>
@@ -20528,35 +21226,37 @@
     <comment xml:lang="tr">SMAF sesi</comment>
     <comment xml:lang="uk">звук SMAF</comment>
     <comment xml:lang="vi">Âm thanh SMAF</comment>
-    <comment xml:lang="zh_CN">SMAF 音频</comment>
-    <comment xml:lang="zh_TW">SMAF 音訊</comment>
+    <comment xml:lang="zh-CN">SMAF 音频</comment>
+    <comment xml:lang="zh-TW">SMAF 音訊</comment>
     <acronym>SMAF</acronym>
     <expanded-acronym>Synthetic music Mobile Application Format</expanded-acronym>
     <generic-icon name="audio-x-generic"/>
     <magic priority="50">
-      <match value="MMMD" type="string" offset="0"/>
+      <match type="string" value="MMMD" offset="0"/>
     </magic>
     <glob pattern="*.mmf"/>
     <glob pattern="*.smaf"/>
-    <alias type="application/vnd.smaf"/>
+    <alias type="application/x-smaf"/>
   </mime-type>
   <mime-type type="text/x-mrml">
     <comment>MRML playlist</comment>
+    <comment xml:lang="af">MRML-speellys</comment>
     <comment xml:lang="ar">قائمة تشغيل MRML</comment>
-    <comment xml:lang="be@latin">Śpis piesień MRML</comment>
+    <comment xml:lang="be-Latn">Śpis piesień MRML</comment>
     <comment xml:lang="bg">Списък за изпълнение — MRML</comment>
     <comment xml:lang="ca">llista de reproducció MRML</comment>
     <comment xml:lang="cs">seznam k přehrání MRML</comment>
     <comment xml:lang="da">MRML-afspilningsliste</comment>
     <comment xml:lang="de">MRML-Wiedergabeliste</comment>
     <comment xml:lang="el">Λίστα αναπαραγωγής MRML</comment>
-    <comment xml:lang="en_GB">MRML playlist</comment>
+    <comment xml:lang="en-GB">MRML playlist</comment>
     <comment xml:lang="eo">MRML-ludlisto</comment>
     <comment xml:lang="es">lista de reproducción MRML</comment>
     <comment xml:lang="eu">MRML erreprodukzio-zerrenda</comment>
     <comment xml:lang="fi">MRML-soittolista</comment>
     <comment xml:lang="fo">MRML avspælingarlisti</comment>
     <comment xml:lang="fr">liste de lecture MRML</comment>
+    <comment xml:lang="fur">liste di riproduzion MRML</comment>
     <comment xml:lang="ga">seinmliosta MRML</comment>
     <comment xml:lang="gl">lista de reprodución MRML</comment>
     <comment xml:lang="he">רשימת השמעה MRML</comment>
@@ -20577,7 +21277,7 @@
     <comment xml:lang="oc">lista de lectura MRML</comment>
     <comment xml:lang="pl">Lista odtwarzania MRML</comment>
     <comment xml:lang="pt">lista de reprodução MRML</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução do MRML</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução do MRML</comment>
     <comment xml:lang="ro">Listă redare MRML</comment>
     <comment xml:lang="ru">Список воспроизведения MRML</comment>
     <comment xml:lang="sk">Zoznam skladieb MRML</comment>
@@ -20585,36 +21285,38 @@
     <comment xml:lang="sq">Listë titujsh MRML</comment>
     <comment xml:lang="sr">МРМЛ списак нумера</comment>
     <comment xml:lang="sv">MRML-spellista</comment>
-    <comment xml:lang="tr">MRML oynatma listesi</comment>
+    <comment xml:lang="tr">MRML çalma listesi</comment>
     <comment xml:lang="uk">список відтворення MRML</comment>
     <comment xml:lang="vi">Danh mục nhạc MRML</comment>
-    <comment xml:lang="zh_CN">MRML 播放列表</comment>
-    <comment xml:lang="zh_TW">MRML 播放清單</comment>
+    <comment xml:lang="zh-CN">MRML 播放列表</comment>
+    <comment xml:lang="zh-TW">MRML 播放清單</comment>
     <acronym>MRML</acronym>
     <expanded-acronym>Multimedia Retrieval Markup Language</expanded-acronym>
     <magic priority="50">
-      <match value="&lt;mrml " type="string" offset="0"/>
+      <match type="string" value="&lt;mrml " offset="0"/>
     </magic>
     <glob pattern="*.mrml"/>
     <glob pattern="*.mrl"/>
   </mime-type>
   <mime-type type="audio/x-xmf">
     <comment>XMF audio</comment>
+    <comment xml:lang="af">XMF-oudio</comment>
     <comment xml:lang="ar">XMF سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo XMF</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo XMF</comment>
     <comment xml:lang="bg">Аудио — XMF</comment>
     <comment xml:lang="ca">àudio XMF</comment>
     <comment xml:lang="cs">zvuk XMF</comment>
     <comment xml:lang="da">XMF-lyd</comment>
     <comment xml:lang="de">XMF-Audio</comment>
     <comment xml:lang="el">Ήχος XMF</comment>
-    <comment xml:lang="en_GB">XMF audio</comment>
+    <comment xml:lang="en-GB">XMF audio</comment>
     <comment xml:lang="eo">XMF-sondosiero</comment>
-    <comment xml:lang="es">sonido XMF</comment>
+    <comment xml:lang="es">audio XMF</comment>
     <comment xml:lang="eu">XMF audioa</comment>
     <comment xml:lang="fi">XMF-ääni</comment>
     <comment xml:lang="fo">XMF ljóður</comment>
     <comment xml:lang="fr">audio XMF</comment>
+    <comment xml:lang="fur">audio XMF</comment>
     <comment xml:lang="ga">fuaim XMF</comment>
     <comment xml:lang="gl">son XMF</comment>
     <comment xml:lang="he">שמע XMF</comment>
@@ -20634,7 +21336,7 @@
     <comment xml:lang="oc">àudio XMF</comment>
     <comment xml:lang="pl">Plik dźwiękowy XMF</comment>
     <comment xml:lang="pt">aúdio XMF</comment>
-    <comment xml:lang="pt_BR">Áudio XMF</comment>
+    <comment xml:lang="pt-BR">Áudio XMF</comment>
     <comment xml:lang="ro">Audio XMF</comment>
     <comment xml:lang="ru">Аудио XMF</comment>
     <comment xml:lang="sk">Zvuk XMF</comment>
@@ -20645,13 +21347,13 @@
     <comment xml:lang="tr">XMF sesi</comment>
     <comment xml:lang="uk">звук XMF</comment>
     <comment xml:lang="vi">Âm thanh XMF</comment>
-    <comment xml:lang="zh_CN">XMF 音频</comment>
-    <comment xml:lang="zh_TW">XMF 音訊</comment>
+    <comment xml:lang="zh-CN">XMF 音频</comment>
+    <comment xml:lang="zh-TW">XMF 音訊</comment>
     <acronym>XMF</acronym>
     <expanded-acronym>eXtensible Music Format</expanded-acronym>
     <magic priority="50">
-      <match value="XMF_" type="string" offset="0"/>
-      <match value="\130\115\106\137\062\056\060\060\000\000\000\002" type="string" offset="0"/>
+      <match type="string" value="XMF_" offset="0"/>
+      <match type="string" value="\130\115\106\137\062\056\060\060\000\000\000\002" offset="0"/>
     </magic>
     <glob pattern="*.xmf"/>
     <alias type="audio/xmf"/>
@@ -20659,23 +21361,25 @@
   </mime-type>
   <mime-type type="application/x-sv4cpio">
     <comment>SV4 CPIO archive</comment>
+    <comment xml:lang="af">SV4 CPIO-argief</comment>
     <comment xml:lang="ar">أرشيف SV4 CPIO</comment>
     <comment xml:lang="az">SV4 CPIO arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ SV4 CPIO</comment>
+    <comment xml:lang="be-Latn">Archiŭ SV4 CPIO</comment>
     <comment xml:lang="bg">Архив — SV4 CPIO</comment>
-    <comment xml:lang="ca">arxiu CPIO SV4</comment>
+    <comment xml:lang="ca">arxiu SV4 CPIO</comment>
     <comment xml:lang="cs">archiv SV4 CPIO</comment>
     <comment xml:lang="cy">Archif CPIO SV4</comment>
     <comment xml:lang="da">SV4 CPIO-arkiv</comment>
     <comment xml:lang="de">SV4-CPIO-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο SV4 CPIO</comment>
-    <comment xml:lang="en_GB">SV4 CPIO archive</comment>
+    <comment xml:lang="en-GB">SV4 CPIO archive</comment>
     <comment xml:lang="eo">SV4-CPIO-arkivo</comment>
     <comment xml:lang="es">archivador SV4 CPIO</comment>
     <comment xml:lang="eu">SV4 CPIO artxiboa</comment>
     <comment xml:lang="fi">SV4 CPIO -arkisto</comment>
     <comment xml:lang="fo">SV4 CPIO skjalasavn</comment>
     <comment xml:lang="fr">archive SV4 CPIO</comment>
+    <comment xml:lang="fur">archivi SV4 CPIO</comment>
     <comment xml:lang="ga">cartlann SV4 CPIO</comment>
     <comment xml:lang="gl">arquivo SV4 CPIO</comment>
     <comment xml:lang="he">ארכיון של SV4 SPIO</comment>
@@ -20696,7 +21400,7 @@
     <comment xml:lang="oc">archiu SV4 CPIO</comment>
     <comment xml:lang="pl">Archiwum SV4 CPIO</comment>
     <comment xml:lang="pt">arquivo SV4 CPIO</comment>
-    <comment xml:lang="pt_BR">Pacote SV4 CPIO</comment>
+    <comment xml:lang="pt-BR">Pacote SV4 CPIO</comment>
     <comment xml:lang="ro">Arhivă SV4 CPIO</comment>
     <comment xml:lang="ru">Архив SV4 CPIO</comment>
     <comment xml:lang="sk">Archív SV4 CPIO</comment>
@@ -20707,28 +21411,30 @@
     <comment xml:lang="tr">SV4 CPIO arşivi</comment>
     <comment xml:lang="uk">архів SV4 CPIO</comment>
     <comment xml:lang="vi">Kho nén CPIO SV4</comment>
-    <comment xml:lang="zh_CN">SV4 CPIO 归档文件</comment>
-    <comment xml:lang="zh_TW">SV4 CPIO 封存檔</comment>
+    <comment xml:lang="zh-CN">SV4 CPIO 归档文件</comment>
+    <comment xml:lang="zh-TW">SV4 CPIO 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.sv4cpio"/>
   </mime-type>
   <mime-type type="application/x-sv4crc">
     <comment>SV4 CPIO archive (with CRC)</comment>
+    <comment xml:lang="af">SV4 CPIO-argief (met CRC)</comment>
     <comment xml:lang="ar">أرشيف SV4 CPIO (مع CRC)</comment>
-    <comment xml:lang="be@latin">Archiŭ SV4 CPIO (z CRC)</comment>
+    <comment xml:lang="be-Latn">Archiŭ SV4 CPIO (z CRC)</comment>
     <comment xml:lang="bg">Архив — SV4 CPIO, проверка за грешки CRC</comment>
-    <comment xml:lang="ca">arxiu CPIO SV4 (amb CRC)</comment>
+    <comment xml:lang="ca">arxiu SV4 CPIO (amb CRC)</comment>
     <comment xml:lang="cs">archiv SV4 CPIO (s CRC)</comment>
     <comment xml:lang="da">SV4 CPIO-arkiv (med CRC)</comment>
     <comment xml:lang="de">SV4-CPIO-Archiv (mit CRC)</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο SV4 CPIO (με CRC)</comment>
-    <comment xml:lang="en_GB">SV4 CPIO archive (with CRC)</comment>
+    <comment xml:lang="en-GB">SV4 CPIO archive (with CRC)</comment>
     <comment xml:lang="eo">SV4-CPIO-arkivo (kun CRC)</comment>
     <comment xml:lang="es">archivador SV4 CPIO (con CRC)</comment>
     <comment xml:lang="eu">SV4 CPIO artxiboa (CRC-rekin)</comment>
     <comment xml:lang="fi">SV4 CPIO -arkisto (CRC:llä)</comment>
     <comment xml:lang="fo">SV4 CPIO skjalasavn (við CRC)</comment>
     <comment xml:lang="fr">archive SV4 CPIO (avec CRC)</comment>
+    <comment xml:lang="fur">archivi SV4 CPIO (cun CRC)</comment>
     <comment xml:lang="ga">cartlann SV4 CPIO (le CRC)</comment>
     <comment xml:lang="gl">Arquivador SV4 CPIO (con CRC)</comment>
     <comment xml:lang="he">ארכיון של SV4 SPIO (עם CRC)</comment>
@@ -20747,9 +21453,9 @@
     <comment xml:lang="nl">SV4 CPIO-archief (met CRC)</comment>
     <comment xml:lang="nn">SV4 CPIO arkiv (med CRC)</comment>
     <comment xml:lang="oc">archiu SV4 CPIO (avec CRC)</comment>
-    <comment xml:lang="pl">Archiwum SV4 CPIO (z sumą kontrolną)</comment>
+    <comment xml:lang="pl">Archiwum SV4 CPIO (z sumą kontrolną)</comment>
     <comment xml:lang="pt">arquivo SV4 CPIO (com CRC)</comment>
-    <comment xml:lang="pt_BR">Pacote SV4 CPIO (com CRC)</comment>
+    <comment xml:lang="pt-BR">Pacote SV4 CPIO (com CRC)</comment>
     <comment xml:lang="ro">Arhivă SV4 CPIO (cu CRC)</comment>
     <comment xml:lang="ru">Архив SV4 CPIO (с CRC)</comment>
     <comment xml:lang="sk">Archív SV4 CPIO (s CRC)</comment>
@@ -20760,16 +21466,17 @@
     <comment xml:lang="tr">SV4 CPIO arşivi (CRC ile)</comment>
     <comment xml:lang="uk">архів SV4 CPIO (з CRC)</comment>
     <comment xml:lang="vi">Kho nén CPIO SV4 (với CRC)</comment>
-    <comment xml:lang="zh_CN">SV4 CPIP 归档文件（带 CRC）</comment>
-    <comment xml:lang="zh_TW">SV4 CPIO 封存檔 (具有 CRC)</comment>
+    <comment xml:lang="zh-CN">SV4 CPIP 归档文件（带 CRC）</comment>
+    <comment xml:lang="zh-TW">SV4 CPIO 封存檔 (具有 CRC)</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.sv4crc"/>
   </mime-type>
   <mime-type type="application/x-tar">
     <comment>Tar archive</comment>
+    <comment xml:lang="af">Tar-argief</comment>
     <comment xml:lang="ar">أرشيف Tar</comment>
     <comment xml:lang="az">Tar arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ tar</comment>
+    <comment xml:lang="be-Latn">Archiŭ tar</comment>
     <comment xml:lang="bg">Архив — tar</comment>
     <comment xml:lang="ca">arxiu tar</comment>
     <comment xml:lang="cs">archiv Tar</comment>
@@ -20777,12 +21484,13 @@
     <comment xml:lang="da">Tar-arkiv</comment>
     <comment xml:lang="de">Tar-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Tar</comment>
-    <comment xml:lang="en_GB">Tar archive</comment>
+    <comment xml:lang="en-GB">Tar archive</comment>
     <comment xml:lang="es">archivador Tar</comment>
     <comment xml:lang="eu">Tar artxiboa</comment>
     <comment xml:lang="fi">Tar-arkisto</comment>
     <comment xml:lang="fo">Tar skjalasavn</comment>
     <comment xml:lang="fr">archive tar</comment>
+    <comment xml:lang="fur">archivi Tar</comment>
     <comment xml:lang="ga">cartlann Tar</comment>
     <comment xml:lang="gl">arquivo Tar</comment>
     <comment xml:lang="he">ארכיון Tar</comment>
@@ -20803,10 +21511,10 @@
     <comment xml:lang="oc">archiu tar</comment>
     <comment xml:lang="pl">Archiwum tar</comment>
     <comment xml:lang="pt">arquivo Tar</comment>
-    <comment xml:lang="pt_BR">Pacote Tar</comment>
+    <comment xml:lang="pt-BR">Pacote Tar</comment>
     <comment xml:lang="ro">Arhivă Tar</comment>
     <comment xml:lang="ru">Архив TAR</comment>
-    <comment xml:lang="sk">Archív tar</comment>
+    <comment xml:lang="sk">Archív Tar</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar</comment>
     <comment xml:lang="sq">Arkiv tar</comment>
     <comment xml:lang="sr">Тар архива</comment>
@@ -20814,13 +21522,13 @@
     <comment xml:lang="tr">Tar arşivi</comment>
     <comment xml:lang="uk">архів tar</comment>
     <comment xml:lang="vi">Kho nén tar</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <alias type="application/x-gtar"/>
     <magic priority="60">
-      <match value="ustar\0" type="string" offset="257"/>
-      <match value="ustar\040\040\0" type="string" offset="257"/>
+      <match type="string" value="ustar\0" offset="257"/>
+      <match type="string" value="ustar\040\040\0" offset="257"/>
     </magic>
     <glob pattern="*.tar"/>
     <glob pattern="*.gtar"/>
@@ -20828,20 +21536,22 @@
   </mime-type>
   <mime-type type="application/x-tarz">
     <comment>Tar archive (compressed)</comment>
+    <comment xml:lang="af">Tar-argief (saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط)</comment>
-    <comment xml:lang="be@latin">Archiŭ tar (skampresavany)</comment>
+    <comment xml:lang="be-Latn">Archiŭ tar (skampresavany)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió)</comment>
     <comment xml:lang="cs">archiv Tar (komprimovaný)</comment>
     <comment xml:lang="da">Tar-arkiv (komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο)</comment>
-    <comment xml:lang="en_GB">Tar archive (compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido)</comment>
     <comment xml:lang="eu">Tar artxiboa (konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn (stappað)</comment>
     <comment xml:lang="fr">archive tar (compressée)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ)</comment>
@@ -20861,10 +21571,10 @@
     <comment xml:lang="oc">archiu tar (compressat)</comment>
     <comment xml:lang="pl">Archiwum tar (skompresowane)</comment>
     <comment xml:lang="pt">arquivo Tar (comprimido)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen)</comment>
     <comment xml:lang="sq">Arkiv tar (i kompresuar)</comment>
     <comment xml:lang="sr">Тар архива (запакована)</comment>
@@ -20872,8 +21582,8 @@
     <comment xml:lang="tr">Tar arşivi (sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений)</comment>
     <comment xml:lang="vi">Kho nén tar (đã nén)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (UNIX 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (壓縮)</comment>
     <sub-class-of type="application/x-compress"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.tar.Z"/>
@@ -20881,25 +21591,27 @@
   </mime-type>
   <mime-type type="application/x-tex-gf">
     <comment>generic font file</comment>
+    <comment xml:lang="af">generiese skriftipelêer</comment>
     <comment xml:lang="ar">ملف الخط العام</comment>
-    <comment xml:lang="be@latin">zvyčajny fajł šryftu</comment>
+    <comment xml:lang="be-Latn">zvyčajny fajł šryftu</comment>
     <comment xml:lang="bg">Шрифт</comment>
     <comment xml:lang="ca">fitxer de lletra genèrica</comment>
     <comment xml:lang="cs">obecný soubor s fontem</comment>
     <comment xml:lang="da">general skrifttypefil</comment>
     <comment xml:lang="de">Allgemeine Schriftdatei</comment>
     <comment xml:lang="el">Γενικό αρχείο γραμματοσειράς</comment>
-    <comment xml:lang="en_GB">generic font file</comment>
+    <comment xml:lang="en-GB">generic font file</comment>
     <comment xml:lang="eo">genera tipara dosiero</comment>
     <comment xml:lang="es">tipo de letra genérico</comment>
     <comment xml:lang="eu">letra-tipo orokorra</comment>
     <comment xml:lang="fi">yleinen fonttitiedosto</comment>
     <comment xml:lang="fo">felagsstavasniðsfíla</comment>
     <comment xml:lang="fr">fichier de polices générique</comment>
+    <comment xml:lang="fur">file di caratar gjeneric</comment>
     <comment xml:lang="ga">comhad cló ginearálta</comment>
     <comment xml:lang="gl">ficheiro de tipo de fonte xenérica</comment>
     <comment xml:lang="he">קובץ גופן גנרי</comment>
-    <comment xml:lang="hr">Izvorna datoteka slova</comment>
+    <comment xml:lang="hr">generička datoteka fonta</comment>
     <comment xml:lang="hu">általános betűkészletfájl</comment>
     <comment xml:lang="ia">File de typo de litteras generic</comment>
     <comment xml:lang="id">berkas fonta generik</comment>
@@ -20916,7 +21628,7 @@
     <comment xml:lang="oc">fichièr de poliças generic</comment>
     <comment xml:lang="pl">Zwykły plik czcionki</comment>
     <comment xml:lang="pt">ficheiro genérico de letra</comment>
-    <comment xml:lang="pt_BR">Arquivo de fonte genérico</comment>
+    <comment xml:lang="pt-BR">Arquivo de fonte genérico</comment>
     <comment xml:lang="ro">fișier de font generic</comment>
     <comment xml:lang="ru">Обычный файл шрифта</comment>
     <comment xml:lang="sk">Obyčajný súbor písma</comment>
@@ -20927,32 +21639,34 @@
     <comment xml:lang="tr">genel yazı tipi dosyası</comment>
     <comment xml:lang="uk">загальний файл шрифту</comment>
     <comment xml:lang="vi">tập tin phông giống loài</comment>
-    <comment xml:lang="zh_CN">通用字体文件</comment>
-    <comment xml:lang="zh_TW">通用字型檔</comment>
+    <comment xml:lang="zh-CN">通用字体文件</comment>
+    <comment xml:lang="zh-TW">通用字型檔</comment>
     <generic-icon name="font-x-generic"/>
     <glob pattern="*.gf"/>
   </mime-type>
   <mime-type type="application/x-tex-pk">
     <comment>packed font file</comment>
+    <comment xml:lang="af">verpakte skriftipelêer</comment>
     <comment xml:lang="ar">ملف الخط المرزم</comment>
-    <comment xml:lang="be@latin">zapakavany fajł šryftu</comment>
+    <comment xml:lang="be-Latn">zapakavany fajł šryftu</comment>
     <comment xml:lang="bg">Шрифт — компресиран</comment>
     <comment xml:lang="ca">fitxer de lletra empaquetada</comment>
     <comment xml:lang="cs">komprimovaný soubor s fontem</comment>
     <comment xml:lang="da">pakket skrifttypefil</comment>
     <comment xml:lang="de">Gepackte Schriftdatei</comment>
     <comment xml:lang="el">Αρχείο συμπιεσμένης γραμματοσειράς</comment>
-    <comment xml:lang="en_GB">packed font file</comment>
+    <comment xml:lang="en-GB">packed font file</comment>
     <comment xml:lang="eo">pakigita tipara dosiero</comment>
     <comment xml:lang="es">tipo de letra empaquetado</comment>
     <comment xml:lang="eu">Letra-tipo fitxategi paketatua</comment>
     <comment xml:lang="fi">pakattu fonttitiedosto</comment>
     <comment xml:lang="fo">pakkað stavasniðsfíla</comment>
     <comment xml:lang="fr">fichier de polices empaquetées</comment>
+    <comment xml:lang="fur">file di caratar impachetât</comment>
     <comment xml:lang="ga">comhad cló pacáilte</comment>
     <comment xml:lang="gl">ficheiro de fonte empaquetada</comment>
     <comment xml:lang="he">קובץ גופן ארוז</comment>
-    <comment xml:lang="hr">Zapakirana datoteka slova</comment>
+    <comment xml:lang="hr">zapakirana datoteka fonta</comment>
     <comment xml:lang="hu">packed font-fájl</comment>
     <comment xml:lang="ia">File de typos de litteras impacchettate</comment>
     <comment xml:lang="id">berkas fonta terkemas</comment>
@@ -20969,7 +21683,7 @@
     <comment xml:lang="oc">fichièr de poliças empaquetadas</comment>
     <comment xml:lang="pl">Plik ze spakowaną czcionką</comment>
     <comment xml:lang="pt">ficheiro de letras empacotadas</comment>
-    <comment xml:lang="pt_BR">Arquivo de fonte empacotado</comment>
+    <comment xml:lang="pt-BR">Arquivo de fonte empacotado</comment>
     <comment xml:lang="ro">fișier font împachetat</comment>
     <comment xml:lang="ru">Сжатый файл шрифта</comment>
     <comment xml:lang="sk">Komprimovaný súbor písma</comment>
@@ -20980,29 +21694,31 @@
     <comment xml:lang="tr">paketlenmiş yazı tipi dosyası</comment>
     <comment xml:lang="uk">запакований файл шрифту</comment>
     <comment xml:lang="vi">tập tin phông chữ đã đóng gói</comment>
-    <comment xml:lang="zh_CN">打包的字体文件</comment>
-    <comment xml:lang="zh_TW">包裝字型檔</comment>
+    <comment xml:lang="zh-CN">打包的字体文件</comment>
+    <comment xml:lang="zh-TW">包裝字型檔</comment>
     <generic-icon name="font-x-generic"/>
     <glob pattern="*.pk"/>
   </mime-type>
   <mime-type type="application/x-tgif">
     <comment>TGIF document</comment>
+    <comment xml:lang="af">TGIF-dokument</comment>
     <comment xml:lang="ar">مستند TGIF</comment>
     <comment xml:lang="ast">Documentu de TGIF</comment>
-    <comment xml:lang="be@latin">Dakument TGIF</comment>
+    <comment xml:lang="be-Latn">Dakument TGIF</comment>
     <comment xml:lang="bg">Документ — TGIF</comment>
     <comment xml:lang="ca">document TGIF</comment>
     <comment xml:lang="cs">dokument TGIF</comment>
     <comment xml:lang="da">TGIF-dokument</comment>
     <comment xml:lang="de">TGIF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο TGIF</comment>
-    <comment xml:lang="en_GB">TGIF document</comment>
+    <comment xml:lang="en-GB">TGIF document</comment>
     <comment xml:lang="eo">TGIF-dokumento</comment>
     <comment xml:lang="es">documento TGIF</comment>
     <comment xml:lang="eu">TGIF dokumentua</comment>
     <comment xml:lang="fi">TGIF-asiakirja</comment>
     <comment xml:lang="fo">TGIF skjal</comment>
     <comment xml:lang="fr">document TGIF</comment>
+    <comment xml:lang="fur">document TGIF</comment>
     <comment xml:lang="ga">cáipéis TGIF</comment>
     <comment xml:lang="gl">documento TGIF</comment>
     <comment xml:lang="he">מסמך TGIF</comment>
@@ -21023,7 +21739,7 @@
     <comment xml:lang="oc">document TGIF</comment>
     <comment xml:lang="pl">Dokument TGIF</comment>
     <comment xml:lang="pt">documento TGIF</comment>
-    <comment xml:lang="pt_BR">Documento TGIF</comment>
+    <comment xml:lang="pt-BR">Documento TGIF</comment>
     <comment xml:lang="ro">Document TGIF</comment>
     <comment xml:lang="ru">Документ TGIF</comment>
     <comment xml:lang="sk">Dokument TGIF</comment>
@@ -21034,19 +21750,20 @@
     <comment xml:lang="tr">TGIF belgesi</comment>
     <comment xml:lang="uk">документ TGIF</comment>
     <comment xml:lang="vi">Tài liệu TGIF</comment>
-    <comment xml:lang="zh_CN">TGIF 文档</comment>
-    <comment xml:lang="zh_TW">TGIF 文件</comment>
+    <comment xml:lang="zh-CN">TGIF 文档</comment>
+    <comment xml:lang="zh-TW">TGIF 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="%TGIF" type="string" offset="0"/>
+      <match type="string" value="%TGIF" offset="0"/>
     </magic>
     <glob pattern="*.obj"/>
   </mime-type>
   <mime-type type="application/x-theme">
     <comment>theme</comment>
+    <comment xml:lang="af">tema</comment>
     <comment xml:lang="ar">سمة</comment>
     <comment xml:lang="az">örtük</comment>
-    <comment xml:lang="be@latin">matyŭ</comment>
+    <comment xml:lang="be-Latn">matyŭ</comment>
     <comment xml:lang="bg">Тема</comment>
     <comment xml:lang="ca">tema</comment>
     <comment xml:lang="cs">motiv</comment>
@@ -21054,13 +21771,14 @@
     <comment xml:lang="da">tema</comment>
     <comment xml:lang="de">Thema</comment>
     <comment xml:lang="el">Θέμα</comment>
-    <comment xml:lang="en_GB">theme</comment>
+    <comment xml:lang="en-GB">theme</comment>
     <comment xml:lang="eo">etoso</comment>
     <comment xml:lang="es">tema</comment>
     <comment xml:lang="eu">gaia</comment>
     <comment xml:lang="fi">teema</comment>
     <comment xml:lang="fo">tema</comment>
     <comment xml:lang="fr">thème</comment>
+    <comment xml:lang="fur">teme</comment>
     <comment xml:lang="ga">téama</comment>
     <comment xml:lang="gl">tema</comment>
     <comment xml:lang="he">ערכת נושא</comment>
@@ -21082,7 +21800,7 @@
     <comment xml:lang="oc">tèma</comment>
     <comment xml:lang="pl">Motyw</comment>
     <comment xml:lang="pt">tema</comment>
-    <comment xml:lang="pt_BR">Tema</comment>
+    <comment xml:lang="pt-BR">Tema</comment>
     <comment xml:lang="ro">temă</comment>
     <comment xml:lang="ru">Тема</comment>
     <comment xml:lang="sk">Motív</comment>
@@ -21093,18 +21811,19 @@
     <comment xml:lang="tr">tema</comment>
     <comment xml:lang="uk">тема</comment>
     <comment xml:lang="vi">sắc thái</comment>
-    <comment xml:lang="zh_CN">主题</comment>
-    <comment xml:lang="zh_TW">佈景主題</comment>
+    <comment xml:lang="zh-CN">主题</comment>
+    <comment xml:lang="zh-TW">佈景主題</comment>
     <sub-class-of type="application/x-desktop"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.theme"/>
   </mime-type>
   <mime-type type="application/x-toutdoux">
     <comment>ToutDoux document</comment>
+    <comment xml:lang="af">ToutDoux-dokument</comment>
     <comment xml:lang="ar">مستند ToutDoux</comment>
     <comment xml:lang="ast">Documentu de ToutDoux</comment>
     <comment xml:lang="az">ToutDoux sənədi</comment>
-    <comment xml:lang="be@latin">Dakument ToutDoux</comment>
+    <comment xml:lang="be-Latn">Dakument ToutDoux</comment>
     <comment xml:lang="bg">Документ — ToutDoux</comment>
     <comment xml:lang="ca">document ToutDoux</comment>
     <comment xml:lang="cs">dokument ToutDoux</comment>
@@ -21112,13 +21831,14 @@
     <comment xml:lang="da">ToutDoux-dokument</comment>
     <comment xml:lang="de">ToutDoux-Dokument</comment>
     <comment xml:lang="el">Έγγραφο ToutDoux</comment>
-    <comment xml:lang="en_GB">ToutDoux document</comment>
+    <comment xml:lang="en-GB">ToutDoux document</comment>
     <comment xml:lang="eo">ToutDoux-dokumento</comment>
     <comment xml:lang="es">documento de ToutDoux</comment>
     <comment xml:lang="eu">ToutDoux dokumentua</comment>
     <comment xml:lang="fi">ToutDoux-asiakirja</comment>
     <comment xml:lang="fo">ToutDoux skjal</comment>
     <comment xml:lang="fr">document ToutDoux</comment>
+    <comment xml:lang="fur">document ToutDoux</comment>
     <comment xml:lang="ga">cáipéis ToutDoux</comment>
     <comment xml:lang="gl">documento de ToutDoux</comment>
     <comment xml:lang="he">מסמך של ToutDoux</comment>
@@ -21139,7 +21859,7 @@
     <comment xml:lang="oc">document ToutDoux</comment>
     <comment xml:lang="pl">Dokument ToutDoux</comment>
     <comment xml:lang="pt">documento ToutDoux</comment>
-    <comment xml:lang="pt_BR">Documento do ToutDoux</comment>
+    <comment xml:lang="pt-BR">Documento do ToutDoux</comment>
     <comment xml:lang="ro">Document ToutDoux</comment>
     <comment xml:lang="ru">Документ ToutDoux</comment>
     <comment xml:lang="sk">Dokument ToutDoux</comment>
@@ -21150,27 +21870,29 @@
     <comment xml:lang="tr">ToutDoux belgesi</comment>
     <comment xml:lang="uk">документ ToutDoux</comment>
     <comment xml:lang="vi">Tài liệu ToutDoux</comment>
-    <comment xml:lang="zh_CN">ToutDoux 文档</comment>
-    <comment xml:lang="zh_TW">ToutDoux 文件</comment>
+    <comment xml:lang="zh-CN">ToutDoux 文档</comment>
+    <comment xml:lang="zh-TW">ToutDoux 文件</comment>
     <generic-icon name="x-office-document"/>
   </mime-type>
   <mime-type type="application/x-trash">
     <comment>backup file</comment>
+    <comment xml:lang="af">rugsteunlêer</comment>
     <comment xml:lang="ar">ملف النسخ الاحتياطي</comment>
-    <comment xml:lang="be@latin">zapasny fajł</comment>
+    <comment xml:lang="be-Latn">zapasny fajł</comment>
     <comment xml:lang="bg">Резервно копие</comment>
     <comment xml:lang="ca">fitxer de còpia de seguretat</comment>
     <comment xml:lang="cs">záložní soubor</comment>
     <comment xml:lang="da">sikkerhedskopi</comment>
     <comment xml:lang="de">Sicherungsdatei</comment>
     <comment xml:lang="el">Αντίγραφο ασφαλείας</comment>
-    <comment xml:lang="en_GB">backup file</comment>
+    <comment xml:lang="en-GB">backup file</comment>
     <comment xml:lang="eo">restaŭrkopio</comment>
     <comment xml:lang="es">archivo de respaldo</comment>
     <comment xml:lang="eu">babes-kopiako fitxategia</comment>
     <comment xml:lang="fi">varmuuskopio</comment>
     <comment xml:lang="fo">trygdarritsfíla</comment>
     <comment xml:lang="fr">fichier de sauvegarde</comment>
+    <comment xml:lang="fur">file di backup</comment>
     <comment xml:lang="ga">comhad cúltaca</comment>
     <comment xml:lang="gl">ficheiro de copia de seguridade</comment>
     <comment xml:lang="he">קובץ גיבוי</comment>
@@ -21191,7 +21913,7 @@
     <comment xml:lang="oc">fichièr de salvament</comment>
     <comment xml:lang="pl">Plik zapasowy</comment>
     <comment xml:lang="pt">cópia de segurança</comment>
-    <comment xml:lang="pt_BR">Arquivo de backup</comment>
+    <comment xml:lang="pt-BR">Arquivo de backup</comment>
     <comment xml:lang="ro">fișier de backup</comment>
     <comment xml:lang="ru">Резервная копия</comment>
     <comment xml:lang="sk">Záložný súbor</comment>
@@ -21202,8 +21924,8 @@
     <comment xml:lang="tr">yedek dosyası</comment>
     <comment xml:lang="uk">резервна копія</comment>
     <comment xml:lang="vi">tập tin sao lưu</comment>
-    <comment xml:lang="zh_CN">备份文件</comment>
-    <comment xml:lang="zh_TW">備份檔</comment>
+    <comment xml:lang="zh-CN">备份文件</comment>
+    <comment xml:lang="zh-TW">備份檔</comment>
     <glob pattern="*~"/>
     <glob pattern="*%"/>
     <glob pattern="*.bak"/>
@@ -21212,10 +21934,11 @@
   </mime-type>
   <mime-type type="text/troff">
     <comment>Troff document</comment>
+    <comment xml:lang="af">Troff-dokument</comment>
     <comment xml:lang="ar">مستند Troff</comment>
     <comment xml:lang="ast">Documentu de Troff</comment>
     <comment xml:lang="az">Troff sənədi</comment>
-    <comment xml:lang="be@latin">Dakument Troff</comment>
+    <comment xml:lang="be-Latn">Dakument Troff</comment>
     <comment xml:lang="bg">Документ — Troff</comment>
     <comment xml:lang="ca">document Troff</comment>
     <comment xml:lang="cs">dokument Troff</comment>
@@ -21223,13 +21946,14 @@
     <comment xml:lang="da">Troffdokument</comment>
     <comment xml:lang="de">Troff-Dokument</comment>
     <comment xml:lang="el">Έγγραφο troff</comment>
-    <comment xml:lang="en_GB">Troff document</comment>
+    <comment xml:lang="en-GB">Troff document</comment>
     <comment xml:lang="eo">Troff-dokumento</comment>
     <comment xml:lang="es">documento de Troff</comment>
     <comment xml:lang="eu">Troff dokumentua</comment>
     <comment xml:lang="fi">Troff-asiakirja</comment>
     <comment xml:lang="fo">Troff skjal</comment>
     <comment xml:lang="fr">document Troff</comment>
+    <comment xml:lang="fur">document Troff</comment>
     <comment xml:lang="ga">cáipéis Troff</comment>
     <comment xml:lang="gl">documento Troff</comment>
     <comment xml:lang="he">מסמך Troff</comment>
@@ -21250,7 +21974,7 @@
     <comment xml:lang="oc">document Troff</comment>
     <comment xml:lang="pl">Dokument Troff</comment>
     <comment xml:lang="pt">documento Troff</comment>
-    <comment xml:lang="pt_BR">Documento Troff</comment>
+    <comment xml:lang="pt-BR">Documento Troff</comment>
     <comment xml:lang="ro">Document Troff</comment>
     <comment xml:lang="ru">Документ Troff</comment>
     <comment xml:lang="sk">Dokument troff</comment>
@@ -21261,16 +21985,16 @@
     <comment xml:lang="tr">Troff belgesi</comment>
     <comment xml:lang="uk">документ Troff</comment>
     <comment xml:lang="vi">Tài liệu Troff</comment>
-    <comment xml:lang="zh_CN">Troff 文档</comment>
-    <comment xml:lang="zh_TW">Troff 文件</comment>
+    <comment xml:lang="zh-CN">Troff 文档</comment>
+    <comment xml:lang="zh-TW">Troff 文件</comment>
     <sub-class-of type="text/plain"/>
     <alias type="application/x-troff"/>
     <alias type="text/x-troff"/>
     <magic priority="50">
-      <match value='.\\\"' type="string" offset="0"/>
-      <match value="'\\\&quot;" type="string" offset="0"/>
-      <match value="'.\\\&quot;" type="string" offset="0"/>
-      <match value='\\\"' type="string" offset="0"/>
+      <match type="string" value=".\\\&quot;" offset="0"/>
+      <match type="string" value="'\\\&quot;" offset="0"/>
+      <match type="string" value="'.\\\&quot;" offset="0"/>
+      <match type="string" value="\\\&quot;" offset="0"/>
     </magic>
     <glob pattern="*.tr"/>
     <glob pattern="*.roff"/>
@@ -21278,15 +22002,19 @@
   </mime-type>
   <mime-type type="application/x-troff-man">
     <comment>Manpage manual document</comment>
+    <comment xml:lang="af">Manpage-handleiding</comment>
+    <comment xml:lang="bg">Страница от ръководството</comment>
     <comment xml:lang="ca">document de pàgina man</comment>
     <comment xml:lang="cs">manuálová stránka</comment>
     <comment xml:lang="da">Manpage-manualdokument</comment>
     <comment xml:lang="de">Manpage-Handbuchdokument</comment>
     <comment xml:lang="el">Έγγραφο βοήθειας manpage</comment>
-    <comment xml:lang="en_GB">Manpage manual document</comment>
+    <comment xml:lang="en-GB">Manpage manual document</comment>
     <comment xml:lang="es">documento de manual de Manpage</comment>
     <comment xml:lang="eu">Manpage eskuliburu dokumentua</comment>
+    <comment xml:lang="fi">Manpage manuaali dokumentit</comment>
     <comment xml:lang="fr">document manuel Manpage</comment>
+    <comment xml:lang="fur">document manuâl Manpage</comment>
     <comment xml:lang="ga">cáipéis lámhleabhair Man</comment>
     <comment xml:lang="he">מסמך תיעוד man</comment>
     <comment xml:lang="hr">Manpage dokument priručnika</comment>
@@ -21295,42 +22023,44 @@
     <comment xml:lang="id">Dokumen manual manpage</comment>
     <comment xml:lang="it">Documento di manuale manpage</comment>
     <comment xml:lang="kk">Manpage нұсқаулық құжаты</comment>
-    <comment xml:lang="ko">맨 페이지 설명서 문서</comment>
+    <comment xml:lang="ko">man 페이지 설명서 문서</comment>
     <comment xml:lang="oc">document de manual Manpage</comment>
     <comment xml:lang="pl">Dokument podręcznika stron pomocy</comment>
     <comment xml:lang="pt">documento de ajuda Manpage</comment>
-    <comment xml:lang="pt_BR">Documento Manpage</comment>
+    <comment xml:lang="pt-BR">Documento Manpage</comment>
     <comment xml:lang="ru">Документ справочной системы Manpage</comment>
     <comment xml:lang="sk">Dokument manuálu Manpage</comment>
     <comment xml:lang="sr">документ упутства странице упутства</comment>
     <comment xml:lang="sv">Manpage-manualdokument</comment>
     <comment xml:lang="tr">Man sayfası el kitabı belgesi</comment>
     <comment xml:lang="uk">документ підручника man</comment>
-    <comment xml:lang="zh_CN">Manpage 手册文档</comment>
-    <comment xml:lang="zh_TW">Manpage 手冊說明文件</comment>
+    <comment xml:lang="zh-CN">Manpage 手册文档</comment>
+    <comment xml:lang="zh-TW">Manpage 手冊說明文件</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.man"/>
   </mime-type>
   <mime-type type="application/x-troff-man-compressed">
     <comment>manual page (compressed)</comment>
+    <comment xml:lang="af">handleiding (saamgepers)</comment>
     <comment xml:lang="ar">صفحة المساعدة (مضغوطة)</comment>
     <comment xml:lang="az">man səhifəsi (sıxışdırılmış)</comment>
-    <comment xml:lang="be@latin">staronka dapamohi (skampresavanaja)</comment>
-    <comment xml:lang="bg">Страница от справочника, компресирана</comment>
+    <comment xml:lang="be-Latn">staronka dapamohi (skampresavanaja)</comment>
+    <comment xml:lang="bg">Страница от ръководството — компресирана</comment>
     <comment xml:lang="ca">pàgina de manual (amb compressió)</comment>
     <comment xml:lang="cs">manuálová stránka (komprimovaná)</comment>
     <comment xml:lang="cy">tudalen llawlyfr (wedi ei gywasgu)</comment>
     <comment xml:lang="da">manualside (komprimeret)</comment>
     <comment xml:lang="de">Handbuchseite (komprimiert)</comment>
     <comment xml:lang="el">Σελίδα οδηγιών (συμπιεσμένη)</comment>
-    <comment xml:lang="en_GB">manual page (compressed)</comment>
+    <comment xml:lang="en-GB">manual page (compressed)</comment>
     <comment xml:lang="eo">manpaĝo (kunpremita)</comment>
     <comment xml:lang="es">página de manual (comprimida)</comment>
     <comment xml:lang="eu">eskuliburu orria (konprimitua)</comment>
     <comment xml:lang="fi">manuaalisivu (pakattu)</comment>
     <comment xml:lang="fo">handbókasíða (stappað)</comment>
     <comment xml:lang="fr">page de manuel (compressée)</comment>
+    <comment xml:lang="fur">pagjine di manuâl (comprimude)</comment>
     <comment xml:lang="ga">leathanach lámhleabhair (comhbhrúite)</comment>
     <comment xml:lang="gl">páxina de manual (comprimida)</comment>
     <comment xml:lang="he">דף עזר (מכווץ)</comment>
@@ -21351,7 +22081,7 @@
     <comment xml:lang="oc">pagina de manual (compressat)</comment>
     <comment xml:lang="pl">Strona podręcznika (skompresowana)</comment>
     <comment xml:lang="pt">página de manual (comprimida)</comment>
-    <comment xml:lang="pt_BR">Página de manual (compactada)</comment>
+    <comment xml:lang="pt-BR">Página de manual (compactada)</comment>
     <comment xml:lang="ro">pagină de manual (comprimată)</comment>
     <comment xml:lang="ru">Страница руководства (сжатая)</comment>
     <comment xml:lang="sk">Manuálová stránka (komprimovaná)</comment>
@@ -21362,31 +22092,33 @@
     <comment xml:lang="tr">kılavuz dosyası (sıkıştırılmış)</comment>
     <comment xml:lang="uk">сторінка посібника (стиснена)</comment>
     <comment xml:lang="vi">trang hướng dẫn (đã nén)</comment>
-    <comment xml:lang="zh_CN">手册页（压缩）</comment>
-    <comment xml:lang="zh_TW">手冊頁面 (壓縮版)</comment>
+    <comment xml:lang="zh-CN">手册页（压缩）</comment>
+    <comment xml:lang="zh-TW">手冊頁面 (壓縮版)</comment>
     <generic-icon name="text-x-generic"/>
   </mime-type>
   <mime-type type="application/x-tzo">
     <comment>Tar archive (LZO-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (LZO-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط-LZO)</comment>
-    <comment xml:lang="be@latin">Archiŭ tar (LZO-skampresavany)</comment>
+    <comment xml:lang="be-Latn">Archiŭ tar (LZO-skampresavany)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран с LZO</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió LZO)</comment>
     <comment xml:lang="cs">archiv Tar (komprimovaný pomocí LZO)</comment>
     <comment xml:lang="da">Tar-arkiv (LZO-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (LZO-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο με LZO)</comment>
-    <comment xml:lang="en_GB">Tar archive (LZO-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (LZO-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con LZO)</comment>
     <comment xml:lang="eu">Tar artxiboa (LZO-rekin konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (LZO-pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn (LZO-stappað)</comment>
     <comment xml:lang="fr">archive tar (compression LZO)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun LZO)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le LZO)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido con LZO)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י LZO)</comment>
     <comment xml:lang="hr">Tar arhiva (LZO sažeta)</comment>
-    <comment xml:lang="hu">Tar archívum (LZO-val tömörítve)</comment>
+    <comment xml:lang="hu">Tar archívum (LZO tömörítésű)</comment>
     <comment xml:lang="ia">Archivo Tar (comprimite con LZO)</comment>
     <comment xml:lang="id">Arsip Tar (terkompresi LZO)</comment>
     <comment xml:lang="it">Archivio tar (compresso con LZO)</comment>
@@ -21401,10 +22133,10 @@
     <comment xml:lang="oc">archiu tar (compression LZO)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja LZO)</comment>
     <comment xml:lang="pt">arquivo Tar (compressão LZO)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado com LZO)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com LZO)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată LZO)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый lzo)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou LZO)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou LZO)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen z LZO)</comment>
     <comment xml:lang="sq">Arkiv tar (i kompresuar me LZO)</comment>
     <comment xml:lang="sr">Тар архива (запакована ЛЗО-ом)</comment>
@@ -21412,8 +22144,8 @@
     <comment xml:lang="tr">Tar arşivi (LZO ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений LZO)</comment>
     <comment xml:lang="vi">Kho nén tar (đã nén LZO)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（LZO 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (LZO 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（LZO 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (LZO 壓縮)</comment>
     <sub-class-of type="application/x-lzop"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.tar.lzo"/>
@@ -21421,6 +22153,7 @@
   </mime-type>
   <mime-type type="application/x-xz">
     <comment>XZ archive</comment>
+    <comment xml:lang="af">XZ-argief</comment>
     <comment xml:lang="ar">أرشيف XZ</comment>
     <comment xml:lang="bg">Архив — XZ</comment>
     <comment xml:lang="ca">arxiu XZ</comment>
@@ -21428,13 +22161,14 @@
     <comment xml:lang="da">XZ-arkiv</comment>
     <comment xml:lang="de">XZ-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο XZ</comment>
-    <comment xml:lang="en_GB">XZ archive</comment>
+    <comment xml:lang="en-GB">XZ archive</comment>
     <comment xml:lang="eo">XZ-arkivo</comment>
     <comment xml:lang="es">archivador XZ</comment>
     <comment xml:lang="eu">XZ artxiboa</comment>
     <comment xml:lang="fi">XZ-arkisto</comment>
     <comment xml:lang="fo">XZ skjalasavn</comment>
     <comment xml:lang="fr">archive XZ</comment>
+    <comment xml:lang="fur">archivi XZ</comment>
     <comment xml:lang="ga">cartlann XZ</comment>
     <comment xml:lang="gl">ficheiro XZ</comment>
     <comment xml:lang="he">ארכיון XZ</comment>
@@ -21452,7 +22186,7 @@
     <comment xml:lang="oc">archiu XZ</comment>
     <comment xml:lang="pl">Archiwum XZ</comment>
     <comment xml:lang="pt">arquivo XZ</comment>
-    <comment xml:lang="pt_BR">Pacote XZ</comment>
+    <comment xml:lang="pt-BR">Pacote XZ</comment>
     <comment xml:lang="ro">Arhivă XZ</comment>
     <comment xml:lang="ru">Архив XZ</comment>
     <comment xml:lang="sk">Archív XZ</comment>
@@ -21461,16 +22195,17 @@
     <comment xml:lang="sv">XZ-arkiv</comment>
     <comment xml:lang="tr">XZ arşivi</comment>
     <comment xml:lang="uk">архів XZ</comment>
-    <comment xml:lang="zh_CN">XZ 归档文件</comment>
-    <comment xml:lang="zh_TW">XZ 封存檔</comment>
+    <comment xml:lang="zh-CN">XZ 归档文件</comment>
+    <comment xml:lang="zh-TW">XZ 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="\xfd\x37\x7a\x58\x5a\x00" type="string" offset="0"/>
+      <match type="string" value="\xfd\x37\x7a\x58\x5a\x00" offset="0"/>
     </magic>
     <glob pattern="*.xz"/>
   </mime-type>
   <mime-type type="application/x-xz-compressed-tar">
     <comment>Tar archive (XZ-compressed)</comment>
+    <comment xml:lang="af">Tar-argief (XZ-saamgepers)</comment>
     <comment xml:lang="ar">أرشيف Tar (مضغوط-XZ)</comment>
     <comment xml:lang="bg">Архив — tar, компресиран с XZ</comment>
     <comment xml:lang="ca">arxiu tar (amb compressió XZ)</comment>
@@ -21478,17 +22213,18 @@
     <comment xml:lang="da">Tar-arkiv (XZ-komprimeret)</comment>
     <comment xml:lang="de">Tar-Archiv (XZ-komprimiert)</comment>
     <comment xml:lang="el">Αρχείο Tar (συμπιεσμένο με XZ)</comment>
-    <comment xml:lang="en_GB">Tar archive (XZ-compressed)</comment>
+    <comment xml:lang="en-GB">Tar archive (XZ-compressed)</comment>
     <comment xml:lang="es">archivador Tar (comprimido con XZ)</comment>
     <comment xml:lang="eu">Tar artxiboa (XZ-rekin konprimitua)</comment>
     <comment xml:lang="fi">Tar-arkisto (XZ-pakattu)</comment>
     <comment xml:lang="fo">Tar skjalasavn(XZ-stappað)</comment>
     <comment xml:lang="fr">archive tar (compression XZ)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun XZ)</comment>
     <comment xml:lang="ga">cartlann Tar (comhbhrúite le XZ)</comment>
     <comment xml:lang="gl">arquivo Tar (comprimido con XZ)</comment>
     <comment xml:lang="he">ארכיון Tar (מכווץ ע״י XZ)</comment>
     <comment xml:lang="hr">Tar arhiva ( XZ sažeta)</comment>
-    <comment xml:lang="hu">Tar archívum (XZ-vel tömörítve)</comment>
+    <comment xml:lang="hu">Tar archívum (XZ tömörítésű)</comment>
     <comment xml:lang="ia">Archivo Tar (comprimite con XZ)</comment>
     <comment xml:lang="id">Arsip Tar (terkompresi XZ)</comment>
     <comment xml:lang="it">Archivio tar (compresso con XZ)</comment>
@@ -21501,24 +22237,91 @@
     <comment xml:lang="oc">archiu tar (compression XZ)</comment>
     <comment xml:lang="pl">Archiwum tar (kompresja XZ)</comment>
     <comment xml:lang="pt">arquivo Tar (compressão XZ)</comment>
-    <comment xml:lang="pt_BR">Pacote Tar (compactado com XZ)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com XZ)</comment>
     <comment xml:lang="ro">Arhivă Tar (comprimată XZ)</comment>
     <comment xml:lang="ru">Архив TAR (сжатый xz)</comment>
-    <comment xml:lang="sk">Archív tar (komprimovaný pomocou XZ)</comment>
+    <comment xml:lang="sk">Archív Tar (komprimovaný pomocou XZ)</comment>
     <comment xml:lang="sl">Datoteka arhiva Tar (stisnjen z XZ)</comment>
     <comment xml:lang="sr">Тар архива (запакована ИксЗ-ом)</comment>
     <comment xml:lang="sv">Tar-arkiv (XZ-komprimerat)</comment>
     <comment xml:lang="tr">Tar arşivi (XZ ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">архів tar (стиснений XZ)</comment>
-    <comment xml:lang="zh_CN">Tar 归档文件（XZ 压缩）</comment>
-    <comment xml:lang="zh_TW">Tar 封存檔 (XZ 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（XZ 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (XZ 壓縮)</comment>
     <sub-class-of type="application/x-xz"/>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.tar.xz"/>
     <glob pattern="*.txz"/>
   </mime-type>
+  <mime-type type="application/zstd">
+    <comment>Zstandard archive</comment>
+    <comment xml:lang="bg">Архив — Zstandard</comment>
+    <comment xml:lang="ca">arxiu Zstandard</comment>
+    <comment xml:lang="cs">archiv Zstandard</comment>
+    <comment xml:lang="da">Zstandard-arkiv</comment>
+    <comment xml:lang="de">Zstandard-Archiv</comment>
+    <comment xml:lang="en-GB">Zstandard archive</comment>
+    <comment xml:lang="es">archivador Zstandard</comment>
+    <comment xml:lang="eu">Zstandard archive</comment>
+    <comment xml:lang="fi">Zstandard-arkisto</comment>
+    <comment xml:lang="fr">archive Zstandard</comment>
+    <comment xml:lang="fur">archivi Zstandard</comment>
+    <comment xml:lang="hr">Zstandard arhiva</comment>
+    <comment xml:lang="hu">Zstandard archívum</comment>
+    <comment xml:lang="id">Arsip Zstandard</comment>
+    <comment xml:lang="it">Archivio Zstandard</comment>
+    <comment xml:lang="kk">Zstandard архиві</comment>
+    <comment xml:lang="ko">Zstandard 압축 파일</comment>
+    <comment xml:lang="pl">Archiwum Zstandard</comment>
+    <comment xml:lang="pt-BR">Pacote Zstandard</comment>
+    <comment xml:lang="ru">Архив Zstandard</comment>
+    <comment xml:lang="sk">Archív Zstandard</comment>
+    <comment xml:lang="sv">Zstandard-arkiv</comment>
+    <comment xml:lang="tr">Zstandard arşivi</comment>
+    <comment xml:lang="uk">архів Zstandard</comment>
+    <comment xml:lang="zh-CN">Zstandard 归档文件</comment>
+    <comment xml:lang="zh-TW">Zstandard 封存檔</comment>
+    <generic-icon name="package-x-generic"/>
+    <magic priority="60">
+      <match type="little32" value="0xFD2FB528" offset="0"/>
+    </magic>
+    <glob pattern="*.zst"/>
+  </mime-type>
+  <mime-type type="application/x-zstd-compressed-tar">
+    <comment>Tar archive (Zstandard-compressed)</comment>
+    <comment xml:lang="bg">Архив — tar, компресиран със Zstandard</comment>
+    <comment xml:lang="ca">arxiu tar (amb compressió Zstandard)</comment>
+    <comment xml:lang="cs">archiv Tar (komprimovaný pomocí Zstandard)</comment>
+    <comment xml:lang="da">Tar-arkiv (Zstandard-komprimeret)</comment>
+    <comment xml:lang="de">Tar-Archiv (Zstandard-komprimiert)</comment>
+    <comment xml:lang="en-GB">Tar archive (Zstandard-compressed)</comment>
+    <comment xml:lang="es">archivador Tar (comprimido con Zstandard)</comment>
+    <comment xml:lang="eu">Tar artxiboa (Zstandard-rekin konprimitua)</comment>
+    <comment xml:lang="fi">Tar-arkisto (Zstandard-pakattu)</comment>
+    <comment xml:lang="fr">archive tar (compression Zstandard)</comment>
+    <comment xml:lang="fur">archivi Tar (comprimût cun Zstandard)</comment>
+    <comment xml:lang="hr">Tar arhiva (Zstandard-sažeta)</comment>
+    <comment xml:lang="hu">Tar archívum (Zstandard tömörítésű)</comment>
+    <comment xml:lang="id">Arsip Tar (terkompresi Zstandard)</comment>
+    <comment xml:lang="it">Archivio tar (compresso con Zstandard)</comment>
+    <comment xml:lang="kk">Tar архиві (Zstandard-пен сығылған)</comment>
+    <comment xml:lang="ko">TAR 묶음 파일(Zstandard 압축)</comment>
+    <comment xml:lang="pl">Archiwum tar (kompresja Zstandard)</comment>
+    <comment xml:lang="pt-BR">Pacote Tar (compactado com Zstandard)</comment>
+    <comment xml:lang="ru">Архив TAR (сжатый zstandard)</comment>
+    <comment xml:lang="sv">Tar-arkiv (Zstandard-komprimerat)</comment>
+    <comment xml:lang="tr">Tar arşivi (Zstandard ile sıkıştırılmış)</comment>
+    <comment xml:lang="uk">архів tar archive (стиснений Zstandard)</comment>
+    <comment xml:lang="zh-CN">Tar 归档文件（Zstandard 压缩）</comment>
+    <comment xml:lang="zh-TW">Tar 封存檔 (Zstandard 壓縮)</comment>
+    <generic-icon name="package-x-generic"/>
+    <sub-class-of type="application/zstd"/>
+    <glob pattern="*.tar.zst"/>
+    <glob pattern="*.tzst"/>
+  </mime-type>
   <mime-type type="application/x-xzpdf">
     <comment>PDF document (XZ-compressed)</comment>
+    <comment xml:lang="af">PDF-dokument (XZ-saamgepers)</comment>
     <comment xml:lang="ast">Documentu PDF (comprimíu en XZ)</comment>
     <comment xml:lang="bg">Документ — PDF, компресиран с XZ</comment>
     <comment xml:lang="ca">document PDF (amb compressió XZ)</comment>
@@ -21526,16 +22329,17 @@
     <comment xml:lang="da">PDF-dokument (XZ-komprimeret)</comment>
     <comment xml:lang="de">PDF-Dokument (XZ-komprimiert)</comment>
     <comment xml:lang="el">Έγγραφο PDF (συμπιεσμένο με XZ)</comment>
-    <comment xml:lang="en_GB">PDF document (XZ-compressed)</comment>
+    <comment xml:lang="en-GB">PDF document (XZ-compressed)</comment>
     <comment xml:lang="es">documento PDF (comprimido con XZ)</comment>
     <comment xml:lang="eu">PDF dokumentua (XZ-rekin konprimitua)</comment>
     <comment xml:lang="fi">PDF-asiakirja (XZ-pakattu)</comment>
     <comment xml:lang="fr">document PDF (compressé XZ)</comment>
+    <comment xml:lang="fur">document PDF (comprimût cun XZ)</comment>
     <comment xml:lang="ga">cáipéis PDF (comhbhrúite le XZ)</comment>
     <comment xml:lang="gl">documento PDF (comprimido en XZ)</comment>
     <comment xml:lang="he">מסמך PDF (מכווץ ע״י XZ)</comment>
     <comment xml:lang="hr">PDF dokument ( XZ sažet)</comment>
-    <comment xml:lang="hu">PDF dokumentum (XZ-vel tömörített)</comment>
+    <comment xml:lang="hu">PDF dokumentum (XZ tömörítésű)</comment>
     <comment xml:lang="ia">Documento PDF (comprimite con XZ)</comment>
     <comment xml:lang="id">Dokumen PDF (terkompresi XZ)</comment>
     <comment xml:lang="it">Documento PDF (compresso con XZ)</comment>
@@ -21548,7 +22352,7 @@
     <comment xml:lang="oc">document PDF (compressat XZ)</comment>
     <comment xml:lang="pl">Dokument PDF (kompresja XZ)</comment>
     <comment xml:lang="pt">documento PDF (compressão XZ)</comment>
-    <comment xml:lang="pt_BR">Documento PDF (compactado com XZ)</comment>
+    <comment xml:lang="pt-BR">Documento PDF (compactado com XZ)</comment>
     <comment xml:lang="ru">Документ PDF (сжатый xz)</comment>
     <comment xml:lang="sk">Dokument PDF (komprimovaný pomocou XZ)</comment>
     <comment xml:lang="sl">Dokument PDF (XZ-stisnjen)</comment>
@@ -21556,29 +22360,31 @@
     <comment xml:lang="sv">PDF-dokument (XZ-komprimerat)</comment>
     <comment xml:lang="tr">PDF belgesi (XZ ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">документ PDF (стиснений xz)</comment>
-    <comment xml:lang="zh_CN">PDF 文档（XZ）</comment>
-    <comment xml:lang="zh_TW">PDF 文件 (XZ 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">PDF 文档（XZ）</comment>
+    <comment xml:lang="zh-TW">PDF 文件 (XZ 壓縮)</comment>
     <sub-class-of type="application/x-xz"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.pdf.xz"/>
   </mime-type>
   <mime-type type="application/x-ustar">
     <comment>Ustar archive</comment>
+    <comment xml:lang="af">Ustar-argief</comment>
     <comment xml:lang="ar">أرشيف Ustar</comment>
-    <comment xml:lang="be@latin">Archiŭ ustar</comment>
+    <comment xml:lang="be-Latn">Archiŭ ustar</comment>
     <comment xml:lang="bg">Архив — ustar</comment>
     <comment xml:lang="ca">arxiu ustar</comment>
     <comment xml:lang="cs">archiv Ustar</comment>
-    <comment xml:lang="da">Ustararkiv</comment>
+    <comment xml:lang="da">Ustar-arkiv</comment>
     <comment xml:lang="de">Ustar-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Ustar</comment>
-    <comment xml:lang="en_GB">Ustar archive</comment>
+    <comment xml:lang="en-GB">Ustar archive</comment>
     <comment xml:lang="eo">Ustar-arkivo</comment>
     <comment xml:lang="es">archivador de Ustar</comment>
     <comment xml:lang="eu">Ustar artxiboa</comment>
     <comment xml:lang="fi">Ustar-arkisto</comment>
     <comment xml:lang="fo">Ustar skjalasavn</comment>
     <comment xml:lang="fr">archive Ustar</comment>
+    <comment xml:lang="fur">archivi Ustar</comment>
     <comment xml:lang="ga">cartlann Ustar</comment>
     <comment xml:lang="gl">arquivo Ustar</comment>
     <comment xml:lang="he">ארכיון Ustar</comment>
@@ -21598,10 +22404,10 @@
     <comment xml:lang="oc">archiu Ustar</comment>
     <comment xml:lang="pl">Archiwum ustar</comment>
     <comment xml:lang="pt">arquivo Ustar</comment>
-    <comment xml:lang="pt_BR">Pacote Ustar</comment>
+    <comment xml:lang="pt-BR">Pacote Ustar</comment>
     <comment xml:lang="ro">Arhivă Ustar</comment>
     <comment xml:lang="ru">Архив Ustar</comment>
-    <comment xml:lang="sk">Archív ustar</comment>
+    <comment xml:lang="sk">Archív Ustar</comment>
     <comment xml:lang="sl">Datoteka arhiva Ustar</comment>
     <comment xml:lang="sq">Arkiv Ustar</comment>
     <comment xml:lang="sr">Устар архива</comment>
@@ -21609,16 +22415,17 @@
     <comment xml:lang="tr">Ustar arşivi</comment>
     <comment xml:lang="uk">архів ustar</comment>
     <comment xml:lang="vi">Kho nén ustar</comment>
-    <comment xml:lang="zh_CN">Ustar 归档文件</comment>
-    <comment xml:lang="zh_TW">Ustar 封存檔</comment>
+    <comment xml:lang="zh-CN">Ustar 归档文件</comment>
+    <comment xml:lang="zh-TW">Ustar 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <glob pattern="*.ustar"/>
   </mime-type>
   <mime-type type="application/x-wais-source">
     <comment>WAIS source code</comment>
+    <comment xml:lang="af">WAIS-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر WAIS</comment>
     <comment xml:lang="az">WAIS mənbə faylı</comment>
-    <comment xml:lang="be@latin">Kryničny kod WAIS</comment>
+    <comment xml:lang="be-Latn">Kryničny kod WAIS</comment>
     <comment xml:lang="bg">Изходен код — WAIS</comment>
     <comment xml:lang="ca">codi font en WAIS</comment>
     <comment xml:lang="cs">zdrojový kód WAIS</comment>
@@ -21626,13 +22433,14 @@
     <comment xml:lang="da">WAIS-kildekode</comment>
     <comment xml:lang="de">WAIS-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας WAIS</comment>
-    <comment xml:lang="en_GB">WAIS source code</comment>
+    <comment xml:lang="en-GB">WAIS source code</comment>
     <comment xml:lang="eo">WAIS-fontkodo</comment>
     <comment xml:lang="es">código fuente en WAIS</comment>
     <comment xml:lang="eu">WAIS iturburu-kodea</comment>
     <comment xml:lang="fi">WAIS-lähdekoodi</comment>
     <comment xml:lang="fo">WAIS keldukota</comment>
     <comment xml:lang="fr">code source WAIS</comment>
+    <comment xml:lang="fur">codiç sorzint WAIS</comment>
     <comment xml:lang="ga">cód foinseach WAIS</comment>
     <comment xml:lang="gl">código fonte WAIS</comment>
     <comment xml:lang="he">קוד מקור של WAIS</comment>
@@ -21651,9 +22459,9 @@
     <comment xml:lang="nl">WAIS-broncode</comment>
     <comment xml:lang="nn">WAIS-kjeldekode</comment>
     <comment xml:lang="oc">còde font WAIS</comment>
-    <comment xml:lang="pl">Plik źródłowy WAIS</comment>
+    <comment xml:lang="pl">Kod źródłowy WAIS</comment>
     <comment xml:lang="pt">código origem WAIS</comment>
-    <comment xml:lang="pt_BR">Código-fonte WAIS</comment>
+    <comment xml:lang="pt-BR">Código-fonte WAIS</comment>
     <comment xml:lang="ro">Cod sursă WAIS</comment>
     <comment xml:lang="ru">Исходный код WAIS</comment>
     <comment xml:lang="sk">Zdrojový kód WAIS</comment>
@@ -21664,29 +22472,31 @@
     <comment xml:lang="tr">WAIS kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою WAIS</comment>
     <comment xml:lang="vi">Mã nguồn WAIS</comment>
-    <comment xml:lang="zh_CN">WAIS 源代码</comment>
-    <comment xml:lang="zh_TW">WAIS 源碼</comment>
+    <comment xml:lang="zh-CN">WAIS 源代码</comment>
+    <comment xml:lang="zh-TW">WAIS 源碼</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.src"/>
   </mime-type>
   <mime-type type="application/x-wpg">
     <comment>WordPerfect/Drawperfect image</comment>
+    <comment xml:lang="af">WordPerfect/Drawperfect-beeld</comment>
     <comment xml:lang="ar">صورة WordPerfect/Drawperfect</comment>
-    <comment xml:lang="be@latin">Vyjava WordPerfect/Drawperfect</comment>
+    <comment xml:lang="be-Latn">Vyjava WordPerfect/Drawperfect</comment>
     <comment xml:lang="bg">Изображение — WordPerfect/Drawperfect</comment>
     <comment xml:lang="ca">imatge de WordPerfect/Drawperfect</comment>
     <comment xml:lang="cs">obrázek WordPerfect/Drawperfect</comment>
     <comment xml:lang="da">WordPerfect/Drawperfect-billede</comment>
     <comment xml:lang="de">WordPerfect/DrawPerfect-Bild</comment>
     <comment xml:lang="el">Εικόνα WordPerfect/Drawperfect</comment>
-    <comment xml:lang="en_GB">WordPerfect/Drawperfect image</comment>
+    <comment xml:lang="en-GB">WordPerfect/Drawperfect image</comment>
     <comment xml:lang="eo">WordPerfect/Drawperfect-bildo</comment>
     <comment xml:lang="es">imagen de WordPerfect/Drawperfect</comment>
     <comment xml:lang="eu">WordPerfect/Drawperfect irudia</comment>
     <comment xml:lang="fi">WordPerfect/Drawperfect-kuva</comment>
     <comment xml:lang="fo">WordPerfect/Drawperfect mynd</comment>
     <comment xml:lang="fr">image WordPerfect/DrawPerfect</comment>
+    <comment xml:lang="fur">imagjin WordPerfect/Drawperfect</comment>
     <comment xml:lang="ga">íomhá WordPerfect/Drawperfect</comment>
     <comment xml:lang="gl">imaxe de WordPerfect/DrawPerfect</comment>
     <comment xml:lang="he">תמונה של WordPerfect/Drawperfect</comment>
@@ -21707,7 +22517,7 @@
     <comment xml:lang="oc">imatge WordPerfect/DrawPerfect</comment>
     <comment xml:lang="pl">Obraz WordPerfect/DrawPerfect</comment>
     <comment xml:lang="pt">imagem do WordPerfect/Drawperfect</comment>
-    <comment xml:lang="pt_BR">Imagem do WordPerfect/Drawperfect</comment>
+    <comment xml:lang="pt-BR">Imagem do WordPerfect/Drawperfect</comment>
     <comment xml:lang="ro">Imagine WordPerfect/Drawperfect</comment>
     <comment xml:lang="ru">Изображение WordPerfect/Drawperfect</comment>
     <comment xml:lang="sk">Obrázok WordPerfect/Drawperfect</comment>
@@ -21718,18 +22528,25 @@
     <comment xml:lang="tr">WordPerfect/DrawPerfect görüntüsü</comment>
     <comment xml:lang="uk">зображення WordPerfect/Drawperfect</comment>
     <comment xml:lang="vi">Ảnh WordPerfect/Drawperfect</comment>
-    <comment xml:lang="zh_CN">WordPerfect/Drawperfect 图像</comment>
-    <comment xml:lang="zh_TW">WordPerfect/Drawperfect 影像</comment>
+    <comment xml:lang="zh-CN">WordPerfect/Drawperfect 图像</comment>
+    <comment xml:lang="zh-TW">WordPerfect/Drawperfect 影像</comment>
     <generic-icon name="image-x-generic"/>
     <glob pattern="*.wpg"/>
   </mime-type>
   <mime-type type="application/x-wonderswan-rom">
     <comment>Bandai WonderSwan ROM</comment>
+    <comment xml:lang="bg">ROM — Bandai WonderSwan</comment>
     <comment xml:lang="ca">ROM de Bandai WonderSwan</comment>
     <comment xml:lang="cs">ROM pro Bandai WonderSwan</comment>
+    <comment xml:lang="da">Bandai WonderSwan-ROM</comment>
     <comment xml:lang="de">Bandai WonderSwan ROM</comment>
-    <comment xml:lang="en_GB">Bandai WonderSwan ROM</comment>
+    <comment xml:lang="en-GB">Bandai WonderSwan ROM</comment>
     <comment xml:lang="es">ROM de Bandai WonderSwan</comment>
+    <comment xml:lang="eu">Bandai WonderSwan ROM</comment>
+    <comment xml:lang="fi">Bandai WonderSwan ROM</comment>
+    <comment xml:lang="fr">ROM Bandai WonderSwan</comment>
+    <comment xml:lang="fur">ROM Bandai WonderSwan</comment>
+    <comment xml:lang="ga">ROM Bandai WonderSwan</comment>
     <comment xml:lang="hr">Bandai WonderSwan ROM</comment>
     <comment xml:lang="hu">Bandai WonderSwan ROM</comment>
     <comment xml:lang="id">ROM Bandai WonderSwan</comment>
@@ -21737,23 +22554,31 @@
     <comment xml:lang="kk">Bandai WonderSwan ROM</comment>
     <comment xml:lang="ko">반다이 원더스완 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Bandai WonderSwan</comment>
-    <comment xml:lang="pt_BR">ROM de WonderSwan da Bandai</comment>
+    <comment xml:lang="pt-BR">ROM de WonderSwan da Bandai</comment>
     <comment xml:lang="ru">Bandai WonderSwan ROM</comment>
     <comment xml:lang="sk">ROM pre Bandai WonderSwan</comment>
     <comment xml:lang="sv">Bandai WonderSwan-rom</comment>
+    <comment xml:lang="tr">Bandai WonderSwan ROM</comment>
     <comment xml:lang="uk">ROM Bandai WonderSwan</comment>
-    <comment xml:lang="zh_CN">万代 WonderSwan ROM</comment>
-    <comment xml:lang="zh_TW">Bandai WonderSwan ROM</comment>
+    <comment xml:lang="zh-CN">万代 WonderSwan ROM</comment>
+    <comment xml:lang="zh-TW">萬代 WonderSwan ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.ws"/>
   </mime-type>
   <mime-type type="application/x-wonderswan-color-rom">
     <comment>Bandai WonderSwan Color ROM</comment>
+    <comment xml:lang="bg">ROM — Bandai WonderSwan Color</comment>
     <comment xml:lang="ca">ROM de Bandai WonderSwan Color</comment>
     <comment xml:lang="cs">ROM pro Bandai WonderSwan Color</comment>
+    <comment xml:lang="da">Bandai WonderSwan Color-ROM</comment>
     <comment xml:lang="de">Bandai WonderSwan Color ROM</comment>
-    <comment xml:lang="en_GB">Bandai WonderSwan Color ROM</comment>
+    <comment xml:lang="en-GB">Bandai WonderSwan Color ROM</comment>
     <comment xml:lang="es">ROM de Bandai WonderSwan Color</comment>
+    <comment xml:lang="eu">Bandai WonderSwan Color ROM</comment>
+    <comment xml:lang="fi">Bandai WonderSwan Color ROM</comment>
+    <comment xml:lang="fr">ROM Bandai WonderSwan Color</comment>
+    <comment xml:lang="fur">ROM Bandai WonderSwan Color</comment>
+    <comment xml:lang="ga">ROM datha Bandai WonderSwan</comment>
     <comment xml:lang="hr">Bandai WonderSwan Color ROM</comment>
     <comment xml:lang="hu">Bandai WonderSwan Color ROM</comment>
     <comment xml:lang="id">ROM Bandai WonderSwan Color</comment>
@@ -21761,33 +22586,36 @@
     <comment xml:lang="kk">Bandai WonderSwan Color ROM</comment>
     <comment xml:lang="ko">반다이 원더스완 컬러 롬</comment>
     <comment xml:lang="pl">Plik ROM konsoli Bandai WonderSwan Color</comment>
-    <comment xml:lang="pt_BR">ROM de WonderSwan Color da Bandai</comment>
+    <comment xml:lang="pt-BR">ROM de WonderSwan Color da Bandai</comment>
     <comment xml:lang="ru">Bandai WonderSwan Color ROM</comment>
     <comment xml:lang="sk">ROM pre Bandai WonderSwan Color</comment>
     <comment xml:lang="sv">Bandai WonderSwan Color-rom</comment>
+    <comment xml:lang="tr">Bandai WonderSwan Color ROM</comment>
     <comment xml:lang="uk">ROM Bandai WonderSwan Color</comment>
-    <comment xml:lang="zh_CN">万代 WonderSwan Color ROM</comment>
-    <comment xml:lang="zh_TW">Bandai WonderSwan Color ROM</comment>
+    <comment xml:lang="zh-CN">万代 WonderSwan Color ROM</comment>
+    <comment xml:lang="zh-TW">萬代 WonderSwan Color ROM</comment>
     <generic-icon name="application-x-executable"/>
     <glob pattern="*.wsc"/>
   </mime-type>
   <mime-type type="application/x-x509-ca-cert">
     <comment>DER/PEM/Netscape-encoded X.509 certificate</comment>
+    <comment xml:lang="af">DER/PEM/Netscape-geënkodeerde X.509-sertifikaat</comment>
     <comment xml:lang="ar">شهادة DER/PEM/Netscape-encoded X.509</comment>
-    <comment xml:lang="be@latin">Sertyfikat X.509, zakadavany ŭ DER/PEM/Netscape</comment>
+    <comment xml:lang="be-Latn">Sertyfikat X.509, zakadavany ŭ DER/PEM/Netscape</comment>
     <comment xml:lang="bg">Сертификат — DER/PEM/Netscape X.509</comment>
     <comment xml:lang="ca">certificat X.509 codificat com DER/PEM/Netscape</comment>
     <comment xml:lang="cs">certifikát X.509 kódovaný jako DER/PEM/Netscape</comment>
-    <comment xml:lang="da">DER-/PEM-/Netscapekodet X.509-certifikat</comment>
+    <comment xml:lang="da">DER-/PEM-/Netscape-kodet X.509-certifikat</comment>
     <comment xml:lang="de">DER/PEM/Netscape-kodiertes X.509-Zertifikat</comment>
     <comment xml:lang="el">Ψηφιακό πιστοποιητικό X.509 κωδικοποιημένο κατά DER/PEM/Netscape</comment>
-    <comment xml:lang="en_GB">DER/PEM/Netscape-encoded X.509 certificate</comment>
+    <comment xml:lang="en-GB">DER/PEM/Netscape-encoded X.509 certificate</comment>
     <comment xml:lang="eo">DER/PEM/Netscape-kodigita X.509-atestilo</comment>
     <comment xml:lang="es">certificado X.509 codificado con DER/PEM/Netscape</comment>
     <comment xml:lang="eu">X.509rekin kodetutako DER, PEM edo Netscape zertifikatua</comment>
     <comment xml:lang="fi">DER/PEM/Netscape-koodattu X.509-varmenne</comment>
     <comment xml:lang="fo">DER/PEM/Netscape-encoded X.509 váttan</comment>
     <comment xml:lang="fr">certificat X.509 codé DER/PEM/Netscape</comment>
+    <comment xml:lang="fur">certificât X.509 codificât cun DER/PEM/Netscape</comment>
     <comment xml:lang="ga">teastas X.509 ionchódaithe le DER/PEM/Netscape</comment>
     <comment xml:lang="gl">certificado X.509 codificado con DER/PEM/Netscape</comment>
     <comment xml:lang="he">אישור מסוג X.509 של DER/PEM/Netscape-encoded</comment>
@@ -21809,7 +22637,7 @@
     <comment xml:lang="oc">certificat X.509 encodat DER/PEM/Netscape</comment>
     <comment xml:lang="pl">Zakodowany w DER/PEM/Netscape certyfikat X.509</comment>
     <comment xml:lang="pt">certificado X.509 codificado com DER/PEM/Netscape</comment>
-    <comment xml:lang="pt_BR">Certificado X.509 codificado com DER/PEM/Netscape</comment>
+    <comment xml:lang="pt-BR">Certificado X.509 codificado com DER/PEM/Netscape</comment>
     <comment xml:lang="ro">Certificat DER/PEM/Netscape-codat X.509</comment>
     <comment xml:lang="ru">Сертификат X.509 (DER/PEM/Netscape-закодированный)</comment>
     <comment xml:lang="sk">Certifikát X.509 kódovaný ako DER/PEM/Netscape</comment>
@@ -21820,8 +22648,8 @@
     <comment xml:lang="tr">DER/PEM/Netscape-kodlanmış X.509 sertfikası</comment>
     <comment xml:lang="uk">сертифікат X.509 у форматі DER/PEM/Netscape</comment>
     <comment xml:lang="vi">Chứng nhận X.509 mã hoá bằng Netscape/PEM/DER</comment>
-    <comment xml:lang="zh_CN">DER/PEM/Netscape-encoded X.509 证书</comment>
-    <comment xml:lang="zh_TW">DER/PEM/Netscape 編碼的 X.509 憑證</comment>
+    <comment xml:lang="zh-CN">DER/PEM/Netscape-encoded X.509 证书</comment>
+    <comment xml:lang="zh-TW">DER/PEM/Netscape 編碼的 X.509 憑證</comment>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.der"/>
     <glob pattern="*.crt"/>
@@ -21830,22 +22658,24 @@
   </mime-type>
   <mime-type type="application/x-zerosize">
     <comment>empty document</comment>
+    <comment xml:lang="af">leë dokument</comment>
     <comment xml:lang="ar">مستند فارغ</comment>
     <comment xml:lang="ast">documentu baleru</comment>
-    <comment xml:lang="be@latin">pusty dakument</comment>
+    <comment xml:lang="be-Latn">pusty dakument</comment>
     <comment xml:lang="bg">Празен документ</comment>
     <comment xml:lang="ca">document buit</comment>
     <comment xml:lang="cs">prázdný dokument</comment>
     <comment xml:lang="da">tomt dokument</comment>
     <comment xml:lang="de">Leeres Dokument</comment>
     <comment xml:lang="el">Κενό έγγραφο</comment>
-    <comment xml:lang="en_GB">empty document</comment>
+    <comment xml:lang="en-GB">empty document</comment>
     <comment xml:lang="eo">malplena dokumento</comment>
     <comment xml:lang="es">documento vacío</comment>
     <comment xml:lang="eu">dokumentu hutsa</comment>
     <comment xml:lang="fi">tyhjä asiakirja</comment>
     <comment xml:lang="fo">tómt skjal</comment>
     <comment xml:lang="fr">document vide</comment>
+    <comment xml:lang="fur">document vueit</comment>
     <comment xml:lang="ga">cáipéis fholamh</comment>
     <comment xml:lang="gl">documeto baleiro</comment>
     <comment xml:lang="he">מסמך ריק</comment>
@@ -21866,7 +22696,7 @@
     <comment xml:lang="oc">document void</comment>
     <comment xml:lang="pl">Pusty dokument</comment>
     <comment xml:lang="pt">documento vazio</comment>
-    <comment xml:lang="pt_BR">Documento vazio</comment>
+    <comment xml:lang="pt-BR">Documento vazio</comment>
     <comment xml:lang="ro">document gol</comment>
     <comment xml:lang="ru">Пустой документ</comment>
     <comment xml:lang="sk">Prázdny dokument</comment>
@@ -21877,28 +22707,30 @@
     <comment xml:lang="tr">boş belge</comment>
     <comment xml:lang="uk">порожній документ</comment>
     <comment xml:lang="vi">tài liệu rỗng</comment>
-    <comment xml:lang="zh_CN">空文档</comment>
-    <comment xml:lang="zh_TW">空白文件</comment>
+    <comment xml:lang="zh-CN">空文档</comment>
+    <comment xml:lang="zh-TW">空白文件</comment>
   </mime-type>
   <mime-type type="application/x-zoo">
     <comment>Zoo archive</comment>
+    <comment xml:lang="af">Zoo-argief</comment>
     <comment xml:lang="ar">أرشيف Zoo</comment>
     <comment xml:lang="az">Zoo arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ zoo</comment>
+    <comment xml:lang="be-Latn">Archiŭ zoo</comment>
     <comment xml:lang="bg">Архив — zoo</comment>
     <comment xml:lang="ca">arxiu zoo</comment>
     <comment xml:lang="cs">archiv Zoo</comment>
     <comment xml:lang="cy">Archif zoo</comment>
-    <comment xml:lang="da">Zooarkiv</comment>
+    <comment xml:lang="da">Zoo-arkiv</comment>
     <comment xml:lang="de">Zoo-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Zoo</comment>
-    <comment xml:lang="en_GB">Zoo archive</comment>
+    <comment xml:lang="en-GB">Zoo archive</comment>
     <comment xml:lang="eo">Zoo-arkivo</comment>
     <comment xml:lang="es">archivador Zoo</comment>
     <comment xml:lang="eu">Zoo artxiboa</comment>
     <comment xml:lang="fi">Zoo-arkisto</comment>
     <comment xml:lang="fo">Zoo skjalasavn</comment>
     <comment xml:lang="fr">archive zoo</comment>
+    <comment xml:lang="fur">archivi Zoo</comment>
     <comment xml:lang="ga">cartlann Zoo</comment>
     <comment xml:lang="gl">ficheiro Zoo</comment>
     <comment xml:lang="he">ארכיון Zoo</comment>
@@ -21918,10 +22750,10 @@
     <comment xml:lang="oc">archiu zoo</comment>
     <comment xml:lang="pl">Archiwum zoo</comment>
     <comment xml:lang="pt">arquivo Zoo</comment>
-    <comment xml:lang="pt_BR">Pacote Zoo</comment>
+    <comment xml:lang="pt-BR">Pacote Zoo</comment>
     <comment xml:lang="ro">Arhivă Zoo</comment>
     <comment xml:lang="ru">Архив ZOO</comment>
-    <comment xml:lang="sk">Archív zoo</comment>
+    <comment xml:lang="sk">Archív Zoo</comment>
     <comment xml:lang="sl">Datoteka arhiva ZOO</comment>
     <comment xml:lang="sq">Arkiv zoo</comment>
     <comment xml:lang="sr">Зoo архива</comment>
@@ -21929,31 +22761,33 @@
     <comment xml:lang="tr">Zoo arşivi</comment>
     <comment xml:lang="uk">архів zoo</comment>
     <comment xml:lang="vi">Kho nén zoo</comment>
-    <comment xml:lang="zh_CN">Zoo 归档文件</comment>
-    <comment xml:lang="zh_TW">Zoo 封存檔</comment>
+    <comment xml:lang="zh-CN">Zoo 归档文件</comment>
+    <comment xml:lang="zh-TW">Zoo 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="0xfdc4a7dc" type="little32" offset="20"/>
+      <match type="little32" value="0xfdc4a7dc" offset="20"/>
     </magic>
     <glob pattern="*.zoo"/>
   </mime-type>
   <mime-type type="application/xhtml+xml">
     <comment>XHTML page</comment>
+    <comment xml:lang="af">XHTML-bladsy</comment>
     <comment xml:lang="ar">صفحة XHTML</comment>
-    <comment xml:lang="be@latin">Staronka XHTML</comment>
+    <comment xml:lang="be-Latn">Staronka XHTML</comment>
     <comment xml:lang="bg">Страница — XHTML</comment>
     <comment xml:lang="ca">pàgina XHTML</comment>
     <comment xml:lang="cs">stránka XHTML</comment>
     <comment xml:lang="da">XHTML-side</comment>
     <comment xml:lang="de">XHTML-Seite</comment>
     <comment xml:lang="el">Σελίδα XHTML</comment>
-    <comment xml:lang="en_GB">XHTML page</comment>
+    <comment xml:lang="en-GB">XHTML page</comment>
     <comment xml:lang="eo">XHTML-paĝo</comment>
     <comment xml:lang="es">página XHTML</comment>
     <comment xml:lang="eu">XHTML orria</comment>
     <comment xml:lang="fi">XHTML-sivu</comment>
     <comment xml:lang="fo">XHTML síða</comment>
     <comment xml:lang="fr">page XHTML</comment>
+    <comment xml:lang="fur">pagjine XHTML</comment>
     <comment xml:lang="ga">leathanach XHTML</comment>
     <comment xml:lang="gl">Páxina XHTML</comment>
     <comment xml:lang="he">דף XHTML</comment>
@@ -21974,7 +22808,7 @@
     <comment xml:lang="oc">pagina XHTML</comment>
     <comment xml:lang="pl">Strona XHTML</comment>
     <comment xml:lang="pt">página XHTML</comment>
-    <comment xml:lang="pt_BR">Página XHTML</comment>
+    <comment xml:lang="pt-BR">Página XHTML</comment>
     <comment xml:lang="ro">Pagină XHTML</comment>
     <comment xml:lang="ru">Страница XHTML</comment>
     <comment xml:lang="sk">Stránka XHTML</comment>
@@ -21985,41 +22819,45 @@
     <comment xml:lang="tr">XHTML sayfası</comment>
     <comment xml:lang="uk">сторінка XHTML</comment>
     <comment xml:lang="vi">Trang XHTML</comment>
-    <comment xml:lang="zh_CN">XHTML 页面</comment>
-    <comment xml:lang="zh_TW">XHTML 網頁</comment>
+    <comment xml:lang="zh-CN">XHTML 页面</comment>
+    <comment xml:lang="zh-TW">XHTML 網頁</comment>
     <acronym>XHTML</acronym>
     <expanded-acronym>Extensible HyperText Markup Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
     <generic-icon name="text-html"/>
     <glob pattern="*.xhtml"/>
     <glob pattern="*.xht"/>
+    <glob pattern="*.html"/>
+    <glob pattern="*.htm"/>
     <magic priority="60">
-      <match value="//W3C//DTD XHTML " type="string" offset="0:256"/>
-      <match value="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" type="string" offset="0:256"/>
-      <match value="&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml" type="string" offset="0:256"/>
-      <match value="&lt;HTML xmlns=&quot;http://www.w3.org/1999/xhtml" type="string" offset="0:256"/>
+      <match type="string" value="//W3C//DTD XHTML " offset="0:256"/>
+      <match type="string" value="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" offset="0:256"/>
+      <match type="string" value="&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml" offset="0:256"/>
+      <match type="string" value="&lt;HTML xmlns=&quot;http://www.w3.org/1999/xhtml" offset="0:256"/>
     </magic>
-    <root-XML namespaceURI='http://www.w3.org/1999/xhtml' localName='html'/>
+    <root-XML namespaceURI="http://www.w3.org/1999/xhtml" localName="html"/>
   </mime-type>
   <mime-type type="application/zip">
     <comment>Zip archive</comment>
+    <comment xml:lang="af">Zip-argief</comment>
     <comment xml:lang="ar">أرشيف Zip</comment>
     <comment xml:lang="az">Zip arxivi</comment>
-    <comment xml:lang="be@latin">Archiŭ zip</comment>
+    <comment xml:lang="be-Latn">Archiŭ zip</comment>
     <comment xml:lang="bg">Архив — zip</comment>
     <comment xml:lang="ca">arxiu zip</comment>
     <comment xml:lang="cs">archiv ZIP</comment>
     <comment xml:lang="cy">Archif ZIP</comment>
-    <comment xml:lang="da">Ziparkiv</comment>
+    <comment xml:lang="da">Zip-arkiv</comment>
     <comment xml:lang="de">Zip-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο Zip</comment>
-    <comment xml:lang="en_GB">Zip archive</comment>
+    <comment xml:lang="en-GB">Zip archive</comment>
     <comment xml:lang="eo">Zip-arkivo</comment>
     <comment xml:lang="es">archivador Zip</comment>
     <comment xml:lang="eu">Zip artxiboa</comment>
     <comment xml:lang="fi">Zip-arkisto</comment>
     <comment xml:lang="fo">Zip skjalasavn</comment>
     <comment xml:lang="fr">archive zip</comment>
+    <comment xml:lang="fur">archivi Zip</comment>
     <comment xml:lang="ga">cartlann Zip</comment>
     <comment xml:lang="gl">ficheiro Zip</comment>
     <comment xml:lang="he">ארכיון Zip</comment>
@@ -22039,7 +22877,7 @@
     <comment xml:lang="oc">archiu zip</comment>
     <comment xml:lang="pl">Archiwum ZIP</comment>
     <comment xml:lang="pt">arquivo Zip</comment>
-    <comment xml:lang="pt_BR">Pacote Zip</comment>
+    <comment xml:lang="pt-BR">Pacote Zip</comment>
     <comment xml:lang="ro">Arhivă zip</comment>
     <comment xml:lang="ru">Архив ZIP</comment>
     <comment xml:lang="sk">Archív ZIP</comment>
@@ -22050,76 +22888,71 @@
     <comment xml:lang="tr">Zip arşivi</comment>
     <comment xml:lang="uk">архів zip</comment>
     <comment xml:lang="vi">Kho nén zip</comment>
-    <comment xml:lang="zh_CN">Zip 归档文件</comment>
-    <comment xml:lang="zh_TW">Zip 封存檔</comment>
+    <comment xml:lang="zh-CN">Zip 归档文件</comment>
+    <comment xml:lang="zh-TW">Zip 封存檔</comment>
     <alias type="application/x-zip-compressed"/>
     <alias type="application/x-zip"/>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="PK\003\004" type="string" offset="0"/>
+      <match type="string" value="PK\003\004" offset="0"/>
     </magic>
     <glob pattern="*.zip"/>
   </mime-type>
   <mime-type type="application/x-ms-wim">
-    <comment>WIM disk Image</comment>
+    <comment>WIM disk image</comment>
+    <comment xml:lang="bg">Диск — WIM</comment>
     <comment xml:lang="ca">imatge de disc WIM</comment>
-    <comment xml:lang="cs">obraz disku WIM</comment>
     <comment xml:lang="da">WIM-diskaftryk</comment>
     <comment xml:lang="de">WIM-Datenträgerabbild</comment>
-    <comment xml:lang="el">Εικόνα δίσκου WIM</comment>
-    <comment xml:lang="en_GB">WIM disk Image</comment>
+    <comment xml:lang="en-GB">WIM disk image</comment>
     <comment xml:lang="es">imagen de disco WIM</comment>
     <comment xml:lang="eu">WIM disko irudia</comment>
-    <comment xml:lang="fi">WIM-levytiedosto</comment>
+    <comment xml:lang="fi">WIM-levykuva</comment>
     <comment xml:lang="fr">image disque WIM</comment>
-    <comment xml:lang="ga">íomhá diosca WIM</comment>
-    <comment xml:lang="he">דמות דיסק WIM</comment>
     <comment xml:lang="hr">WIM slika diska</comment>
     <comment xml:lang="hu">WIM lemezkép</comment>
-    <comment xml:lang="ia">Imagine de disco WIM</comment>
     <comment xml:lang="id">Image disk WIM</comment>
     <comment xml:lang="it">Immagine disco WIM</comment>
     <comment xml:lang="kk">WIM диск бейнесі</comment>
     <comment xml:lang="ko">WIM 디스크 이미지</comment>
-    <comment xml:lang="oc">imatge disc WIM</comment>
     <comment xml:lang="pl">Obraz dysku WIM</comment>
-    <comment xml:lang="pt">imagem de disco WIM</comment>
-    <comment xml:lang="pt_BR">Imagem de disco WIM</comment>
+    <comment xml:lang="pt-BR">Imagem de disco WIM</comment>
     <comment xml:lang="ru">Образ диска WIM</comment>
     <comment xml:lang="sk">Obraz disku WIM</comment>
-    <comment xml:lang="sr">слика диска ВИМ-а</comment>
-    <comment xml:lang="sv">WIM-diskavbild</comment>
-    <comment xml:lang="tr">WIM disk kalıbı</comment>
+    <comment xml:lang="sv">WIM-diskavbildning</comment>
+    <comment xml:lang="tr">WIM disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска WIM</comment>
-    <comment xml:lang="zh_CN">WIM 磁盘映像</comment>
-    <comment xml:lang="zh_TW">WIM 磁碟映像檔</comment>
+    <comment xml:lang="zh-CN">WIM 磁盘映像</comment>
+    <comment xml:lang="zh-TW">WIM 磁碟映像檔</comment>
     <acronym>WIM</acronym>
     <expanded-acronym>Windows Imaging Format</expanded-acronym>
     <magic>
-      <match value="MSWIM\000\000\000" type="string" offset="0"/>
+      <match type="string" value="MSWIM\000\000\000" offset="0"/>
     </magic>
     <glob pattern="*.wim"/>
     <glob pattern="*.swm"/>
   </mime-type>
   <mime-type type="audio/ac3">
     <comment>Dolby Digital audio</comment>
+    <comment xml:lang="af">Dolby Digital-oudio</comment>
     <comment xml:lang="ar">Dolby Digital سمعي</comment>
     <comment xml:lang="az">Dolby Digital audio</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Dolby Digital</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Dolby Digital</comment>
     <comment xml:lang="bg">Аудио — Dolby Digital</comment>
-    <comment xml:lang="ca">àudio de Dolby Digital</comment>
+    <comment xml:lang="ca">àudio Dolby Digital</comment>
     <comment xml:lang="cs">zvuk Dolby Digital</comment>
     <comment xml:lang="cy">Sain Dolby Digital</comment>
     <comment xml:lang="da">Dolby Ditital-lyd</comment>
     <comment xml:lang="de">Dolby-Digital-Audio</comment>
     <comment xml:lang="el">Ψηφιακός Ήχος Dolby</comment>
-    <comment xml:lang="en_GB">Dolby Digital audio</comment>
+    <comment xml:lang="en-GB">Dolby Digital audio</comment>
     <comment xml:lang="eo">Sondosiero en Dolby Digital</comment>
-    <comment xml:lang="es">sonido Dolby Digital</comment>
+    <comment xml:lang="es">audio Dolby Digital</comment>
     <comment xml:lang="eu">Dolby audio digitala</comment>
     <comment xml:lang="fi">Dolby Digital -ääni</comment>
     <comment xml:lang="fo">Dolby Digital ljóður</comment>
     <comment xml:lang="fr">audio Dolby Digital</comment>
+    <comment xml:lang="fur">audio Dolby Digital</comment>
     <comment xml:lang="ga">fuaim Dolby Digital</comment>
     <comment xml:lang="gl">son Dolby Digital</comment>
     <comment xml:lang="he">שמע Dolby Digital</comment>
@@ -22141,7 +22974,7 @@
     <comment xml:lang="oc">àudio Dolby Digital</comment>
     <comment xml:lang="pl">Plik dźwiękowy Dolby Digital</comment>
     <comment xml:lang="pt">áudio Dolby Digital</comment>
-    <comment xml:lang="pt_BR">Áudio Dolby Digital</comment>
+    <comment xml:lang="pt-BR">Áudio Dolby Digital</comment>
     <comment xml:lang="ro">Audio Dolby Digital</comment>
     <comment xml:lang="ru">Аудио Dolby Digital</comment>
     <comment xml:lang="sk">Zvuk Dolby Digital</comment>
@@ -22152,25 +22985,28 @@
     <comment xml:lang="tr">Dolby Digital sesi</comment>
     <comment xml:lang="uk">звук Dolby Digital</comment>
     <comment xml:lang="vi">Âm thanh Dolby Digital</comment>
-    <comment xml:lang="zh_CN">杜比数字音频</comment>
-    <comment xml:lang="zh_TW">杜比數位音訊</comment>
+    <comment xml:lang="zh-CN">杜比数字音频</comment>
+    <comment xml:lang="zh-TW">杜比數位音訊</comment>
     <magic priority="50">
-      <match value="0x0b77" type="big16" offset="0"/>
+      <match type="big16" value="0x0b77" offset="0"/>
     </magic>
     <glob pattern="*.ac3"/>
   </mime-type>
   <mime-type type="audio/vnd.dts">
     <comment>DTS audio</comment>
+    <comment xml:lang="af">DTS-oudio</comment>
+    <comment xml:lang="bg">Аудио — DTS</comment>
     <comment xml:lang="ca">àudio DTS</comment>
     <comment xml:lang="cs">zvuk DTS</comment>
     <comment xml:lang="da">DTS-lyd</comment>
     <comment xml:lang="de">DTS-Audio</comment>
     <comment xml:lang="el">Ήχος DTS</comment>
-    <comment xml:lang="en_GB">DTS audio</comment>
-    <comment xml:lang="es">sonido DTS</comment>
+    <comment xml:lang="en-GB">DTS audio</comment>
+    <comment xml:lang="es">audio DTS</comment>
     <comment xml:lang="eu">DTS audioa</comment>
     <comment xml:lang="fi">DTS-ääni</comment>
     <comment xml:lang="fr">audio DTS</comment>
+    <comment xml:lang="fur">audio DTS</comment>
     <comment xml:lang="ga">fuaim DTS</comment>
     <comment xml:lang="gl">Son DTS</comment>
     <comment xml:lang="he">שמע DTS</comment>
@@ -22186,7 +23022,7 @@
     <comment xml:lang="oc">àudio DTS</comment>
     <comment xml:lang="pl">Plik dźwiękowy DTS</comment>
     <comment xml:lang="pt">aúdio DTS</comment>
-    <comment xml:lang="pt_BR">Áudio DTS</comment>
+    <comment xml:lang="pt-BR">Áudio DTS</comment>
     <comment xml:lang="ru">Аудио DTS</comment>
     <comment xml:lang="sk">Zvuk DTS</comment>
     <comment xml:lang="sl">Zvok DTS</comment>
@@ -22194,29 +23030,32 @@
     <comment xml:lang="sv">DTS-ljud</comment>
     <comment xml:lang="tr">DTS sesi</comment>
     <comment xml:lang="uk">звукові дані DTS</comment>
-    <comment xml:lang="zh_CN">DTS 音频</comment>
-    <comment xml:lang="zh_TW">DTS 音訊</comment>
+    <comment xml:lang="zh-CN">DTS 音频</comment>
+    <comment xml:lang="zh-TW">DTS 音訊</comment>
     <magic priority="50">
-      <match value="0x7FFE8001" type="big32" offset="0"/> 
-      <match value="0xFE7F0180" type="little32" offset="0"/> 
-      <match value="0x1FFFE800" type="big32" offset="0"/> 
-      <match value="0xFF1F00E8" type="little32" offset="0"/> 
+      <match type="big32" value="0x7FFE8001" offset="0"/> <!-- 16bits core be -->
+      <match type="little32" value="0xFE7F0180" offset="0"/> <!-- 16bits core le -->
+      <match type="big32" value="0x1FFFE800" offset="0"/> <!-- 14bits core be -->
+      <match type="little32" value="0xFF1F00E8" offset="0"/> <!-- 14bits core le -->
     </magic>
     <alias type="audio/x-dts"/>
     <glob pattern="*.dts"/>
   </mime-type>
   <mime-type type="audio/vnd.dts.hd">
     <comment>DTSHD audio</comment>
+    <comment xml:lang="af">DTSHD-oudio</comment>
+    <comment xml:lang="bg">Аудио — DTSHD</comment>
     <comment xml:lang="ca">àudio DTSHD</comment>
     <comment xml:lang="cs">zvuk DTSHD</comment>
     <comment xml:lang="da">DTSDH-lyd</comment>
     <comment xml:lang="de">DTSHD-Audio</comment>
     <comment xml:lang="el">Ήχος DTSHD</comment>
-    <comment xml:lang="en_GB">DTSHD audio</comment>
-    <comment xml:lang="es">sonido DTSHD</comment>
+    <comment xml:lang="en-GB">DTSHD audio</comment>
+    <comment xml:lang="es">audio DTSHD</comment>
     <comment xml:lang="eu">DTSHD audioa</comment>
     <comment xml:lang="fi">DTS-HD-ääni</comment>
     <comment xml:lang="fr">audio DTSHD</comment>
+    <comment xml:lang="fur">audio DTSHD</comment>
     <comment xml:lang="ga">fuaim DTSHD</comment>
     <comment xml:lang="gl">Son DTSHD</comment>
     <comment xml:lang="he">שמע DTSHD</comment>
@@ -22232,7 +23071,7 @@
     <comment xml:lang="oc">àudio DTSHD</comment>
     <comment xml:lang="pl">Plik dźwiękowy DTSHD</comment>
     <comment xml:lang="pt">áudio DTSHD</comment>
-    <comment xml:lang="pt_BR">Áudio DTSHD</comment>
+    <comment xml:lang="pt-BR">Áudio DTSHD</comment>
     <comment xml:lang="ru">Аудио DTSHD</comment>
     <comment xml:lang="sk">Zvuk DTSHD</comment>
     <comment xml:lang="sl">Zvok DTSHD</comment>
@@ -22240,32 +23079,34 @@
     <comment xml:lang="sv">DTSHD-ljud</comment>
     <comment xml:lang="tr">DTSHD sesi</comment>
     <comment xml:lang="uk">звукові дані DTSHD</comment>
-    <comment xml:lang="zh_CN">DTSHD 音频</comment>
-    <comment xml:lang="zh_TW">DTSHD 音訊</comment>
+    <comment xml:lang="zh-CN">DTSHD 音频</comment>
+    <comment xml:lang="zh-TW">DTSHD 音訊</comment>
     <sub-class-of type="audio/vnd.dts"/>
     <magic priority="60">
-      <match value="0x64582025" type="big32" offset="0:18725"/> 
+      <match type="big32" value="0x64582025" offset="0:18725"/> <!-- 16bits HD be -->
     </magic>
     <alias type="audio/x-dtshd"/>
     <glob pattern="*.dtshd"/>
   </mime-type>
   <mime-type type="audio/AMR">
     <comment>AMR audio</comment>
+    <comment xml:lang="af">AMR-oudio</comment>
     <comment xml:lang="ar">AMR سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo AMR</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo AMR</comment>
     <comment xml:lang="bg">Аудио — AMR</comment>
     <comment xml:lang="ca">àudio AMR</comment>
     <comment xml:lang="cs">zvuk AMR</comment>
     <comment xml:lang="da">AMR-lyd</comment>
     <comment xml:lang="de">AMR-Audio</comment>
     <comment xml:lang="el">Ήχος AMR</comment>
-    <comment xml:lang="en_GB">AMR audio</comment>
+    <comment xml:lang="en-GB">AMR audio</comment>
     <comment xml:lang="eo">AMR-sondosiero</comment>
-    <comment xml:lang="es">sonido AMR</comment>
+    <comment xml:lang="es">audio AMR</comment>
     <comment xml:lang="eu">AMR audioa</comment>
     <comment xml:lang="fi">AMR-ääni</comment>
     <comment xml:lang="fo">AMR ljóður</comment>
     <comment xml:lang="fr">audio AMR</comment>
+    <comment xml:lang="fur">audio AMR</comment>
     <comment xml:lang="ga">fuaim AMR</comment>
     <comment xml:lang="gl">son AMR</comment>
     <comment xml:lang="he">שמע AMR</comment>
@@ -22286,7 +23127,7 @@
     <comment xml:lang="oc">àudio AMR</comment>
     <comment xml:lang="pl">Plik dźwiękowy AMR</comment>
     <comment xml:lang="pt">áudio AMR</comment>
-    <comment xml:lang="pt_BR">Áudio AMR</comment>
+    <comment xml:lang="pt-BR">Áudio AMR</comment>
     <comment xml:lang="ro">Audio AMR</comment>
     <comment xml:lang="ru">Аудио AMR</comment>
     <comment xml:lang="sk">Zvuk AMR</comment>
@@ -22297,34 +23138,36 @@
     <comment xml:lang="tr">AMR sesi</comment>
     <comment xml:lang="uk">звук AMR</comment>
     <comment xml:lang="vi">Âm thanh AMR</comment>
-    <comment xml:lang="zh_CN">AMR 音频</comment>
-    <comment xml:lang="zh_TW">AMR 音訊</comment>
+    <comment xml:lang="zh-CN">AMR 音频</comment>
+    <comment xml:lang="zh-TW">AMR 音訊</comment>
     <acronym>AMR</acronym>
     <expanded-acronym>Adaptive Multi-Rate</expanded-acronym>
     <magic priority="50">
-      <match value="#!AMR\n" type="string" offset="0"/>
-      <match value="#!AMR_MC1.0\n" type="string" offset="0"/>
+      <match type="string" value="#!AMR\n" offset="0"/>
+      <match type="string" value="#!AMR_MC1.0\n" offset="0"/>
     </magic>
     <glob pattern="*.amr"/>
     <alias type="audio/amr-encrypted"/>
   </mime-type>
   <mime-type type="audio/AMR-WB">
     <comment>AMR-WB audio</comment>
+    <comment xml:lang="af">AMR-WB-oudio</comment>
     <comment xml:lang="ar">AMR-WB سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo AMR-WB</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo AMR-WB</comment>
     <comment xml:lang="bg">Аудио — AMR-WB</comment>
     <comment xml:lang="ca">àudio AMR-WB</comment>
     <comment xml:lang="cs">zvuk AMR-WB</comment>
     <comment xml:lang="da">AMR-WB-lyd</comment>
     <comment xml:lang="de">AMR-WB-Audio</comment>
     <comment xml:lang="el">Ήχος AMR-WB</comment>
-    <comment xml:lang="en_GB">AMR-WB audio</comment>
+    <comment xml:lang="en-GB">AMR-WB audio</comment>
     <comment xml:lang="eo">AMR-WB-sondosiero</comment>
-    <comment xml:lang="es">sonido AMR-WB</comment>
+    <comment xml:lang="es">audio AMR-WB</comment>
     <comment xml:lang="eu">AMR-WB audioa</comment>
     <comment xml:lang="fi">AMR-WB-ääni</comment>
     <comment xml:lang="fo">AMR-WB ljóður</comment>
     <comment xml:lang="fr">audio AMR-WB</comment>
+    <comment xml:lang="fur">audio AMR-WB</comment>
     <comment xml:lang="ga">fuaim AMR-WB</comment>
     <comment xml:lang="gl">son AMR-WB</comment>
     <comment xml:lang="he">שמע AMR-WN</comment>
@@ -22345,7 +23188,7 @@
     <comment xml:lang="oc">àudio AMR-WB</comment>
     <comment xml:lang="pl">Plik dźwiękowy AMR-WB</comment>
     <comment xml:lang="pt">áudio AMR-WB</comment>
-    <comment xml:lang="pt_BR">Áudio AMR-WB</comment>
+    <comment xml:lang="pt-BR">Áudio AMR-WB</comment>
     <comment xml:lang="ro">Audio AMR-WB</comment>
     <comment xml:lang="ru">Аудио AMR-WB</comment>
     <comment xml:lang="sk">Zvuk AMR-WB</comment>
@@ -22356,22 +23199,23 @@
     <comment xml:lang="tr">AMR-WB sesi</comment>
     <comment xml:lang="uk">звук AMR-WB</comment>
     <comment xml:lang="vi">Âm thanh AMR-WB</comment>
-    <comment xml:lang="zh_CN">AMR-WB 音频</comment>
-    <comment xml:lang="zh_TW">AMR-WB 音訊</comment>
+    <comment xml:lang="zh-CN">AMR-WB 音频</comment>
+    <comment xml:lang="zh-TW">AMR-WB 音訊</comment>
     <acronym>AMR-WB</acronym>
     <expanded-acronym>Adaptive Multi-Rate Wideband</expanded-acronym>
     <magic priority="50">
-      <match value="#!AMR-WB\n" type="string" offset="0"/>
-      <match value="#!AMR-WB_MC1.0\n" type="string" offset="0"/>
+      <match type="string" value="#!AMR-WB\n" offset="0"/>
+      <match type="string" value="#!AMR-WB_MC1.0\n" offset="0"/>
     </magic>
     <glob pattern="*.awb"/>
     <alias type="audio/amr-wb-encrypted"/>
   </mime-type>
   <mime-type type="audio/basic">
     <comment>ULAW (Sun) audio</comment>
+    <comment xml:lang="af">ULAW- (Sun) oudio</comment>
     <comment xml:lang="ar">ULAW (صن) سمعي</comment>
     <comment xml:lang="az">ULAW (Sun) audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo ULAW (Sun)</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo ULAW (Sun)</comment>
     <comment xml:lang="bg">Аудио — ULAW, Sun</comment>
     <comment xml:lang="ca">àudio ULAW (Sun)</comment>
     <comment xml:lang="cs">zvuk ULAW (Sun)</comment>
@@ -22379,13 +23223,14 @@
     <comment xml:lang="da">ULAW-lyd (Sun)</comment>
     <comment xml:lang="de">ULAW-Audio (Sun)</comment>
     <comment xml:lang="el">Ήχος ULAW (Sun)</comment>
-    <comment xml:lang="en_GB">ULAW (Sun) audio</comment>
+    <comment xml:lang="en-GB">ULAW (Sun) audio</comment>
     <comment xml:lang="eo">ULAW-sondosiero (Sun)</comment>
-    <comment xml:lang="es">sonido ULAW (Sun)</comment>
+    <comment xml:lang="es">audio ULAW (Sun)</comment>
     <comment xml:lang="eu">ULAW (sun) audioa</comment>
     <comment xml:lang="fi">ULAW (Sun) -ääni</comment>
     <comment xml:lang="fo">ULAW (Sun) ljóður</comment>
     <comment xml:lang="fr">audio ULAW (Sun)</comment>
+    <comment xml:lang="fur">audio ULAW (Sun)</comment>
     <comment xml:lang="ga">fuaim ULAW (Sun)</comment>
     <comment xml:lang="gl">son ULAW (Sun)</comment>
     <comment xml:lang="he">שמע ULAW (של Sun)</comment>
@@ -22406,7 +23251,7 @@
     <comment xml:lang="oc">àudio ULAW (Sun)</comment>
     <comment xml:lang="pl">Plik dźwiękowy ULAW (Sun)</comment>
     <comment xml:lang="pt">áudio ULAW (Sun)</comment>
-    <comment xml:lang="pt_BR">Áudio ULAW (Sun)</comment>
+    <comment xml:lang="pt-BR">Áudio ULAW (Sun)</comment>
     <comment xml:lang="ro">Fișier audio ULAW (Sun)</comment>
     <comment xml:lang="ru">Аудио ULAW (Sun)</comment>
     <comment xml:lang="sk">Zvuk ULAW (Sun)</comment>
@@ -22417,31 +23262,33 @@
     <comment xml:lang="tr">ULAW (Sun) sesi</comment>
     <comment xml:lang="uk">звук ULAW (Sun)</comment>
     <comment xml:lang="vi">Âm thanh ULAW (Sun)</comment>
-    <comment xml:lang="zh_CN">ULAW (Sun) 音频</comment>
-    <comment xml:lang="zh_TW">ULAW (Sun) 音訊</comment>
+    <comment xml:lang="zh-CN">ULAW (Sun) 音频</comment>
+    <comment xml:lang="zh-TW">ULAW (Sun) 音訊</comment>
     <magic priority="40">
-      <match value=".snd" type="string" offset="0"/>
+      <match type="string" value=".snd" offset="0"/>
     </magic>
     <glob pattern="*.au"/>
     <glob pattern="*.snd"/>
   </mime-type>
   <mime-type type="audio/prs.sid">
     <comment>Commodore 64 audio</comment>
+    <comment xml:lang="af">Commodore 64-oudio</comment>
     <comment xml:lang="ar">Commodore 64 سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Commodore 64</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Commodore 64</comment>
     <comment xml:lang="bg">Аудио — Commodore 64</comment>
     <comment xml:lang="ca">àudio de Commodore 64</comment>
     <comment xml:lang="cs">zvuk Commodore 64</comment>
     <comment xml:lang="da">Commodore 64-lyd</comment>
     <comment xml:lang="de">Commodore-64-Audio</comment>
     <comment xml:lang="el">Ήχος Commodore 64</comment>
-    <comment xml:lang="en_GB">Commodore 64 audio</comment>
+    <comment xml:lang="en-GB">Commodore 64 audio</comment>
     <comment xml:lang="eo">Sondosiero de Commodore 64</comment>
-    <comment xml:lang="es">sonido de Commodore 64</comment>
+    <comment xml:lang="es">audio de Commodore 64</comment>
     <comment xml:lang="eu">Commodore 64 Audioa</comment>
     <comment xml:lang="fi">Commodore 64 -ääni</comment>
     <comment xml:lang="fo">Commodore 64 ljóð</comment>
     <comment xml:lang="fr">audio Commodore 64</comment>
+    <comment xml:lang="fur">audio Commodore 64</comment>
     <comment xml:lang="ga">fuaim Commodore 64</comment>
     <comment xml:lang="gl">son de Commodore 64</comment>
     <comment xml:lang="he">שמע של Commodore 64</comment>
@@ -22463,7 +23310,7 @@
     <comment xml:lang="oc">àudio Commodore 64</comment>
     <comment xml:lang="pl">Plik dźwiękowy Commodore 64</comment>
     <comment xml:lang="pt">áudio Commodore 64</comment>
-    <comment xml:lang="pt_BR">Áudio Commodore 64</comment>
+    <comment xml:lang="pt-BR">Áudio Commodore 64</comment>
     <comment xml:lang="ro">Audio Commodore 64</comment>
     <comment xml:lang="ru">Аудио Commodore 64</comment>
     <comment xml:lang="sk">Zvuk Commodore 64</comment>
@@ -22474,19 +23321,20 @@
     <comment xml:lang="tr">Commodore 64 sesi</comment>
     <comment xml:lang="uk">звук Commodore 64</comment>
     <comment xml:lang="vi">Âm thanh Commodore 64</comment>
-    <comment xml:lang="zh_CN">Commodore 64 音频</comment>
-    <comment xml:lang="zh_TW">Commodore 64 音訊</comment>
+    <comment xml:lang="zh-CN">Commodore 64 音频</comment>
+    <comment xml:lang="zh-TW">Commodore 64 音訊</comment>
     <magic priority="50">
-      <match value="PSID" type="string" offset="0"/>
+      <match type="string" value="PSID" offset="0"/>
     </magic>
     <glob pattern="*.sid"/>
     <glob pattern="*.psid"/>
   </mime-type>
   <mime-type type="audio/x-adpcm">
     <comment>PCM audio</comment>
+    <comment xml:lang="af">PCM-oudio</comment>
     <comment xml:lang="ar">سمعي PCM</comment>
     <comment xml:lang="az">PCM audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo PCM</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo PCM</comment>
     <comment xml:lang="bg">Аудио — PCM</comment>
     <comment xml:lang="ca">àudio PCM</comment>
     <comment xml:lang="cs">zvuk PCM</comment>
@@ -22494,13 +23342,14 @@
     <comment xml:lang="da">PCM-lyd</comment>
     <comment xml:lang="de">PCM-Audio</comment>
     <comment xml:lang="el">Ήχος PCM</comment>
-    <comment xml:lang="en_GB">PCM audio</comment>
+    <comment xml:lang="en-GB">PCM audio</comment>
     <comment xml:lang="eo">PCM-sondosiero</comment>
-    <comment xml:lang="es">sonido PCM</comment>
+    <comment xml:lang="es">audio PCM</comment>
     <comment xml:lang="eu">PCM audioa</comment>
     <comment xml:lang="fi">PCM-ääni</comment>
     <comment xml:lang="fo">PCM ljóður</comment>
     <comment xml:lang="fr">audio PCM</comment>
+    <comment xml:lang="fur">audio PCM</comment>
     <comment xml:lang="ga">fuaim PCM</comment>
     <comment xml:lang="gl">son PCM</comment>
     <comment xml:lang="he">שמע PCM</comment>
@@ -22521,7 +23370,7 @@
     <comment xml:lang="oc">àudio PCM</comment>
     <comment xml:lang="pl">Plik dźwiękowy PCM</comment>
     <comment xml:lang="pt">áudio PCM</comment>
-    <comment xml:lang="pt_BR">Áudio PCM</comment>
+    <comment xml:lang="pt-BR">Áudio PCM</comment>
     <comment xml:lang="ro">Audio PCM</comment>
     <comment xml:lang="ru">Аудио PCM</comment>
     <comment xml:lang="sk">Zvuk PCM</comment>
@@ -22532,29 +23381,30 @@
     <comment xml:lang="tr">PCM sesi</comment>
     <comment xml:lang="uk">звук PCM</comment>
     <comment xml:lang="vi">Âm thanh PCM</comment>
-    <comment xml:lang="zh_CN">PCM 音频</comment>
-    <comment xml:lang="zh_TW">PCM 音訊</comment>
+    <comment xml:lang="zh-CN">PCM 音频</comment>
+    <comment xml:lang="zh-TW">PCM 音訊</comment>
     <magic priority="50">
-      <match value=".snd" type="string" offset="0">
-        <match value="23" type="big32" offset="12"/>
+      <match type="string" value=".snd" offset="0">
+        <match type="big32" value="23" offset="12"/>
       </match>
-      <match value="0x0064732E" type="little32" offset="0">
-        <match value="1" type="little32" offset="12"/>
-        <match value="2" type="little32" offset="12"/>
-        <match value="3" type="little32" offset="12"/>
-        <match value="4" type="little32" offset="12"/>
-        <match value="5" type="little32" offset="12"/>
-        <match value="6" type="little32" offset="12"/>
-        <match value="7" type="little32" offset="12"/>
-        <match value="23" type="little32" offset="12"/>
+      <match type="little32" value="0x0064732E" offset="0">
+        <match type="little32" value="1" offset="12"/>
+        <match type="little32" value="2" offset="12"/>
+        <match type="little32" value="3" offset="12"/>
+        <match type="little32" value="4" offset="12"/>
+        <match type="little32" value="5" offset="12"/>
+        <match type="little32" value="6" offset="12"/>
+        <match type="little32" value="7" offset="12"/>
+        <match type="little32" value="23" offset="12"/>
       </match>
     </magic>
   </mime-type>
   <mime-type type="audio/x-aifc">
     <comment>AIFC audio</comment>
+    <comment xml:lang="af">AIFC-oudio</comment>
     <comment xml:lang="ar">AIFC سمعي</comment>
     <comment xml:lang="az">AIFC audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo AIFC</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo AIFC</comment>
     <comment xml:lang="bg">Аудио — AIFC</comment>
     <comment xml:lang="ca">àudio AIFC</comment>
     <comment xml:lang="cs">zvuk AIFC</comment>
@@ -22562,13 +23412,14 @@
     <comment xml:lang="da">AIFC-lyd</comment>
     <comment xml:lang="de">AIFC-Audio</comment>
     <comment xml:lang="el">Ήχος AIFC</comment>
-    <comment xml:lang="en_GB">AIFC audio</comment>
+    <comment xml:lang="en-GB">AIFC audio</comment>
     <comment xml:lang="eo">AIFC-sondosiero</comment>
-    <comment xml:lang="es">sonido AIFC</comment>
+    <comment xml:lang="es">audio AIFC</comment>
     <comment xml:lang="eu">AIFC audioa</comment>
     <comment xml:lang="fi">AIFC-ääni</comment>
     <comment xml:lang="fo">AIFC ljóður</comment>
     <comment xml:lang="fr">audio AIFC</comment>
+    <comment xml:lang="fur">audio AIFC</comment>
     <comment xml:lang="ga">fuaim AIFC</comment>
     <comment xml:lang="gl">son AIFC</comment>
     <comment xml:lang="he">שמע AIFC</comment>
@@ -22590,7 +23441,7 @@
     <comment xml:lang="oc">àudio AIFC</comment>
     <comment xml:lang="pl">Plik dźwiękowy AIFC</comment>
     <comment xml:lang="pt">áudio AIFC</comment>
-    <comment xml:lang="pt_BR">Áudio AIFC</comment>
+    <comment xml:lang="pt-BR">Áudio AIFC</comment>
     <comment xml:lang="ro">Fișier audio AIFC</comment>
     <comment xml:lang="ru">Аудио AIFC</comment>
     <comment xml:lang="sk">Zvuk AIFC</comment>
@@ -22601,13 +23452,13 @@
     <comment xml:lang="tr">AIFC sesi</comment>
     <comment xml:lang="uk">звук AIFC</comment>
     <comment xml:lang="vi">Âm thanh AIFC</comment>
-    <comment xml:lang="zh_CN">AIFC 音频</comment>
-    <comment xml:lang="zh_TW">AIFC 音訊</comment>
+    <comment xml:lang="zh-CN">AIFC 音频</comment>
+    <comment xml:lang="zh-TW">AIFC 音訊</comment>
     <acronym>AIFC</acronym>
     <expanded-acronym>Audio Interchange File format Compressed</expanded-acronym>
     <sub-class-of type="application/x-iff"/>
     <magic priority="50">
-      <match value="AIFC" type="string" offset="8"/>
+      <match type="string" value="AIFC" offset="8"/>
     </magic>
     <glob pattern="*.aifc"/>
     <glob pattern="*.aiffc"/>
@@ -22615,23 +23466,25 @@
   </mime-type>
   <mime-type type="audio/x-aiff">
     <comment>AIFF/Amiga/Mac audio</comment>
+    <comment xml:lang="af">AIFF/Amiga/Mac-oudio</comment>
     <comment xml:lang="ar">AIFF/Amiga/Mac سمعي</comment>
     <comment xml:lang="az">AIFF/Amiga/Mac audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo AIFF/Amiga/Mac</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo AIFF/Amiga/Mac</comment>
     <comment xml:lang="bg">Аудио — AIFF/Amiga/Mac</comment>
     <comment xml:lang="ca">àudio AIFF/Amiga/Mac</comment>
     <comment xml:lang="cs">zvuk AIFF/Amiga/Mac</comment>
     <comment xml:lang="cy">Sain AIFF/Amiga/Mac</comment>
-    <comment xml:lang="da">AIFF-/Amiga-/Maclyd</comment>
+    <comment xml:lang="da">AIFF-/Amiga-/Mac-lyd</comment>
     <comment xml:lang="de">AIFF/Amiga/Mac-Audio</comment>
     <comment xml:lang="el">Ήχος AIFF/Amiga/Mac</comment>
-    <comment xml:lang="en_GB">AIFF/Amiga/Mac audio</comment>
+    <comment xml:lang="en-GB">AIFF/Amiga/Mac audio</comment>
     <comment xml:lang="eo">AIFF/Amiga/Mac-sondosiero</comment>
-    <comment xml:lang="es">sonido AIFF/Amiga/Mac</comment>
+    <comment xml:lang="es">audio AIFF/Amiga/Mac</comment>
     <comment xml:lang="eu">AIFF/Amiga/Mac audioa</comment>
     <comment xml:lang="fi">AIFF/Amiga/Mac-ääni</comment>
     <comment xml:lang="fo">AIFF/Amiga/Mac ljóður</comment>
     <comment xml:lang="fr">audio AIFF/Amiga/Mac</comment>
+    <comment xml:lang="fur">audio AIFF/Amiga/Mac</comment>
     <comment xml:lang="ga">fuaim AIFF/Amiga/Mac</comment>
     <comment xml:lang="gl">son AIFF/Amiga/Mac</comment>
     <comment xml:lang="he">שמע AIFF/Amiga/Mac</comment>
@@ -22653,7 +23506,7 @@
     <comment xml:lang="oc">àudio AIFF/Amiga/Mac</comment>
     <comment xml:lang="pl">Plik dźwiękowy AIFF/Amiga/Mac</comment>
     <comment xml:lang="pt">áudio AIFF/Amiga/Mac</comment>
-    <comment xml:lang="pt_BR">Áudio AIFF/Amiga/Mac</comment>
+    <comment xml:lang="pt-BR">Áudio AIFF/Amiga/Mac</comment>
     <comment xml:lang="ro">Audio AIFF/Amiga/Mac</comment>
     <comment xml:lang="ru">Аудио AIFF/Amiga/Mac</comment>
     <comment xml:lang="sk">Zvuk AIFF/Amiga/Mac</comment>
@@ -22664,14 +23517,14 @@
     <comment xml:lang="tr">AIFF/Amiga/Mac sesi</comment>
     <comment xml:lang="uk">звук AIFF/Amiga/Mac</comment>
     <comment xml:lang="vi">Âm thanh AIFF/Amiga/Mac</comment>
-    <comment xml:lang="zh_CN">AIFF/Amiga/Mac 音频</comment>
-    <comment xml:lang="zh_TW">AIFF/Amiga/Mac 音訊</comment>
+    <comment xml:lang="zh-CN">AIFF/Amiga/Mac 音频</comment>
+    <comment xml:lang="zh-TW">AIFF/Amiga/Mac 音訊</comment>
     <acronym>AIFF</acronym>
     <expanded-acronym>Audio Interchange File Format</expanded-acronym>
     <sub-class-of type="application/x-iff"/>
     <magic priority="50">
-      <match value="AIFF" type="string" offset="8"/>
-      <match value="8SVX" type="string" offset="8"/>
+      <match type="string" value="AIFF" offset="8"/>
+      <match type="string" value="8SVX" offset="8"/>
     </magic>
     <glob pattern="*.aiff"/>
     <glob pattern="*.aif"/>
@@ -22679,19 +23532,20 @@
   <mime-type type="audio/x-ape">
     <comment>Monkey's audio</comment>
     <comment xml:lang="ar">Monkey سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Monkey's</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Monkey's</comment>
     <comment xml:lang="bg">Аудио — Monkey</comment>
     <comment xml:lang="ca">àudio de Monkey</comment>
     <comment xml:lang="cs">zvuk Monkey's</comment>
-    <comment xml:lang="da">Monkeys lyd</comment>
+    <comment xml:lang="da">Monkey's-lyd</comment>
     <comment xml:lang="de">Monkey's-Audio</comment>
     <comment xml:lang="el">Ήχος Monkey's</comment>
-    <comment xml:lang="en_GB">Monkey's audio</comment>
-    <comment xml:lang="es">sonido de Monkey</comment>
+    <comment xml:lang="en-GB">Monkey's audio</comment>
+    <comment xml:lang="es">audio de Monkey</comment>
     <comment xml:lang="eu">Monkey audioa</comment>
     <comment xml:lang="fi">Monkey's Audio -ääni</comment>
     <comment xml:lang="fo">Monkey's ljóður</comment>
     <comment xml:lang="fr">audio Monkey</comment>
+    <comment xml:lang="fur">audio Monkey's</comment>
     <comment xml:lang="ga">fuaim Monkey's</comment>
     <comment xml:lang="gl">son de Monkey</comment>
     <comment xml:lang="he">שמע של Monkey's</comment>
@@ -22711,7 +23565,7 @@
     <comment xml:lang="oc">àudio Monkey</comment>
     <comment xml:lang="pl">Plik dźwiękowy Monkey's Audio</comment>
     <comment xml:lang="pt">áudio Monkey</comment>
-    <comment xml:lang="pt_BR">Áudio Monkey's</comment>
+    <comment xml:lang="pt-BR">Áudio Monkey's</comment>
     <comment xml:lang="ro">Audio Monkey's</comment>
     <comment xml:lang="ru">Аудио Monkey's</comment>
     <comment xml:lang="sk">Zvuk Monkey's</comment>
@@ -22722,20 +23576,27 @@
     <comment xml:lang="tr">Monkey's sesi</comment>
     <comment xml:lang="uk">звук Monkey's</comment>
     <comment xml:lang="vi">Âm thanh cua Monkey</comment>
-    <comment xml:lang="zh_CN">Monkey's Audio 音频</comment>
-    <comment xml:lang="zh_TW">Monkey's 音訊</comment>
+    <comment xml:lang="zh-CN">Monkey's Audio 音频</comment>
+    <comment xml:lang="zh-TW">Monkey's 音訊</comment>
     <magic priority="50">
-      <match value="MAC " type="string" offset="0"/>
+      <match type="string" value="MAC " offset="0"/>
     </magic>
     <glob pattern="*.ape"/>
   </mime-type>
   <mime-type type="audio/x-pn-audibleaudio">
     <comment>Audible.Com audio</comment>
-    <comment xml:lang="ca">àudio Audible.Com</comment>
+    <comment xml:lang="bg">Аудио — Audible.Com</comment>
+    <comment xml:lang="ca">àudio d'Audible.Com</comment>
     <comment xml:lang="cs">zvuk Audible.Com</comment>
+    <comment xml:lang="da">Audible.Com-lyd</comment>
     <comment xml:lang="de">Audible.Com-Audio</comment>
-    <comment xml:lang="en_GB">Audible.Com audio</comment>
-    <comment xml:lang="es">sonido de Audible.com</comment>
+    <comment xml:lang="en-GB">Audible.Com audio</comment>
+    <comment xml:lang="es">audio de Audible.com</comment>
+    <comment xml:lang="eu">Audible.Com audioa</comment>
+    <comment xml:lang="fi">Audible.Com-ääni</comment>
+    <comment xml:lang="fr">audio Audible.Com</comment>
+    <comment xml:lang="fur">audio Audible.Com</comment>
+    <comment xml:lang="ga">fuaim Audible.Com</comment>
     <comment xml:lang="hr">Audible.Com zvučni zapis</comment>
     <comment xml:lang="hu">Audible.Com hang</comment>
     <comment xml:lang="id">Audio Audible.Com</comment>
@@ -22743,28 +23604,46 @@
     <comment xml:lang="kk">Audible.Com аудиосы</comment>
     <comment xml:lang="ko">Audible.Com 오디오</comment>
     <comment xml:lang="pl">Plik dźwiękowy Audible.com</comment>
-    <comment xml:lang="pt_BR">Áudio de audible.com</comment>
+    <comment xml:lang="pt-BR">Áudio de audible.com</comment>
     <comment xml:lang="ru">Аудио Audible.Com</comment>
     <comment xml:lang="sk">Audio Audible.Com</comment>
     <comment xml:lang="sv">Audible.Com-ljud</comment>
+    <comment xml:lang="tr">Audible.Com sesi</comment>
     <comment xml:lang="uk">звук Audible.Com</comment>
-    <comment xml:lang="zh_CN">Audible.Com 音频</comment>
-    <comment xml:lang="zh_TW">Audible.Com 音訊</comment>
+    <comment xml:lang="zh-CN">Audible.Com 音频</comment>
+    <comment xml:lang="zh-TW">Audible.Com 音訊</comment>
     <magic priority="50">
-      
-      <match value="1469084982" type="big32" offset="4"/>
-      <match value="aax " type="string" offset="8"/>
+      <!-- https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/aadec.c#L33 -->
+      <match type="big32" value="1469084982" offset="4"/>
     </magic>
     <glob pattern="*.aa"/>
-    <glob pattern="*.aax"/>
     <alias type="audio/vnd.audible"/>
-    <alias type="audio/vnd.audible.aax"/>
+  </mime-type>
+  <mime-type type="audio/vnd.audible.aax">
+    <comment>Audible Enhanced audio</comment>
+    <comment xml:lang="ca">àudio d'Audible Enhanced</comment>
+    <comment xml:lang="da">Audible Enhanced-lyd</comment>
+    <comment xml:lang="de">Audible Erweitertes Audio</comment>
+    <comment xml:lang="en-GB">Audible Enhanced audio</comment>
+    <comment xml:lang="es">audio mejorado de Audible</comment>
+    <comment xml:lang="fi">Selvä parannettu ääni</comment>
+    <comment xml:lang="hr">Audible poboljšani zvučni zapis</comment>
+    <comment xml:lang="it">Audio Audible Enhanced</comment>
+    <comment xml:lang="pl">Plik dźwiękowy Audible Enhanced</comment>
+    <comment xml:lang="pt-BR">Áudio Audible Enhanced</comment>
+    <comment xml:lang="sv">Audible förbättrat ljud</comment>
+    <comment xml:lang="uk">звук Audible Enhanced</comment>
+    <comment xml:lang="zh-CN">Audible 增强音频</comment>
+    <magic priority="50">
+      <match type="string" value="ftypaax " offset="4"/>
+    </magic>
+    <glob pattern="*.aax"/>
   </mime-type>
   <mime-type type="audio/x-it">
     <comment>Impulse Tracker audio</comment>
     <comment xml:lang="ar">Impulse Tracker سمعي</comment>
     <comment xml:lang="az">Impulse Tracker audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Impulse Tracker</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Impulse Tracker</comment>
     <comment xml:lang="bg">Аудио — Impulse Tracker</comment>
     <comment xml:lang="ca">àudio d'Impulse Tracker</comment>
     <comment xml:lang="cs">zvuk Impulse Tracker</comment>
@@ -22772,13 +23651,14 @@
     <comment xml:lang="da">Impulse Tracker-lyd</comment>
     <comment xml:lang="de">Impulse-Tracker-Audio</comment>
     <comment xml:lang="el">Ήχος Impulse Tracker</comment>
-    <comment xml:lang="en_GB">Impulse Tracker audio</comment>
+    <comment xml:lang="en-GB">Impulse Tracker audio</comment>
     <comment xml:lang="eo">Sondosiero de Impulse Tracker</comment>
-    <comment xml:lang="es">sonido de Impulse Tracker</comment>
+    <comment xml:lang="es">audio de Impulse Tracker</comment>
     <comment xml:lang="eu">Impulse Tracker audioa</comment>
     <comment xml:lang="fi">Impulse Tracker -ääni</comment>
     <comment xml:lang="fo">Impulse Tracker ljóður</comment>
     <comment xml:lang="fr">audio Impulse Tracker</comment>
+    <comment xml:lang="fur">audio Impulse Tracker</comment>
     <comment xml:lang="ga">fuaim Impulse Tracker</comment>
     <comment xml:lang="gl">son de Impulse Tracker</comment>
     <comment xml:lang="he">שמע של Impulse Tracker</comment>
@@ -22799,7 +23679,7 @@
     <comment xml:lang="oc">àudio Impulse Tracker</comment>
     <comment xml:lang="pl">Plik dźwiękowy Impulse Tracker</comment>
     <comment xml:lang="pt">áudio Impulse Tracker</comment>
-    <comment xml:lang="pt_BR">Áudio Impulse Tracker</comment>
+    <comment xml:lang="pt-BR">Áudio Impulse Tracker</comment>
     <comment xml:lang="ro">Audio Impulse Tracker</comment>
     <comment xml:lang="ru">Аудио Impulse Tracker</comment>
     <comment xml:lang="sk">Zvuk Impulse Tracker</comment>
@@ -22810,30 +23690,32 @@
     <comment xml:lang="tr">Impulse Tracker sesi</comment>
     <comment xml:lang="uk">звук Impulse Tracker</comment>
     <comment xml:lang="vi">Âm thanh Impulse Tracker</comment>
-    <comment xml:lang="zh_CN">Impulse Tracker 音频</comment>
-    <comment xml:lang="zh_TW">Impulse Tracker 音訊</comment>
+    <comment xml:lang="zh-CN">Impulse Tracker 音频</comment>
+    <comment xml:lang="zh-TW">Impulse Tracker 音訊</comment>
     <magic priority="50">
-      <match value="IMPM" type="string" offset="0"/>
+      <match type="string" value="IMPM" offset="0"/>
     </magic>
     <glob pattern="*.it"/>
   </mime-type>
   <mime-type type="audio/flac">
     <comment>FLAC audio</comment>
+    <comment xml:lang="af">FLAC-oudio</comment>
     <comment xml:lang="ar">FLAC سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo FLAC</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo FLAC</comment>
     <comment xml:lang="bg">Аудио — FLAC</comment>
     <comment xml:lang="ca">àudio FLAC</comment>
     <comment xml:lang="cs">zvuk FLAC</comment>
     <comment xml:lang="da">FLAC-lyd</comment>
     <comment xml:lang="de">FLAC-Audio</comment>
     <comment xml:lang="el">Ήχος FLAC</comment>
-    <comment xml:lang="en_GB">FLAC audio</comment>
+    <comment xml:lang="en-GB">FLAC audio</comment>
     <comment xml:lang="eo">FLAC-sondosiero</comment>
-    <comment xml:lang="es">sonido FLAC</comment>
+    <comment xml:lang="es">audio FLAC</comment>
     <comment xml:lang="eu">FLAC audioa</comment>
     <comment xml:lang="fi">FLAC-ääni</comment>
     <comment xml:lang="fo">FLAC ljóður</comment>
     <comment xml:lang="fr">audio FLAC</comment>
+    <comment xml:lang="fur">audio FLAC</comment>
     <comment xml:lang="ga">fuaim FLAC</comment>
     <comment xml:lang="gl">son FLAC</comment>
     <comment xml:lang="he">קובץ שמע מסוג FLAC</comment>
@@ -22855,7 +23737,7 @@
     <comment xml:lang="oc">àudio FLAC</comment>
     <comment xml:lang="pl">Plik dźwiękowy FLAC</comment>
     <comment xml:lang="pt">áudio FLAC</comment>
-    <comment xml:lang="pt_BR">Áudio FLAC</comment>
+    <comment xml:lang="pt-BR">Áudio FLAC</comment>
     <comment xml:lang="ro">Audio FLAC</comment>
     <comment xml:lang="ru">Аудио FLAC</comment>
     <comment xml:lang="sk">Zvuk FLAC</comment>
@@ -22866,8 +23748,8 @@
     <comment xml:lang="tr">FLAC sesi</comment>
     <comment xml:lang="uk">звук FLAC</comment>
     <comment xml:lang="vi">Âm thanh FLAC</comment>
-    <comment xml:lang="zh_CN">FLAC 音频</comment>
-    <comment xml:lang="zh_TW">FLAC 音訊</comment>
+    <comment xml:lang="zh-CN">FLAC 音频</comment>
+    <comment xml:lang="zh-TW">FLAC 音訊</comment>
     <magic priority="50">
       <match value="fLaC" type="string" offset="0"/>
     </magic>
@@ -22876,21 +23758,23 @@
   </mime-type>
   <mime-type type="audio/x-wavpack">
     <comment>WavPack audio</comment>
+    <comment xml:lang="af">WavPack-oudio</comment>
     <comment xml:lang="ar">WavPack سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo WavPack</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo WavPack</comment>
     <comment xml:lang="bg">Аудио — WavPack</comment>
     <comment xml:lang="ca">àudio de WavPack</comment>
     <comment xml:lang="cs">zvuk WavPack</comment>
     <comment xml:lang="da">WavPack-lyd</comment>
     <comment xml:lang="de">WavPack-Audio</comment>
     <comment xml:lang="el">Ήχος WavePack</comment>
-    <comment xml:lang="en_GB">WavPack audio</comment>
+    <comment xml:lang="en-GB">WavPack audio</comment>
     <comment xml:lang="eo">WavPack-sondosiero</comment>
-    <comment xml:lang="es">sonido WavPack</comment>
+    <comment xml:lang="es">audio WavPack</comment>
     <comment xml:lang="eu">WavPack audioa</comment>
     <comment xml:lang="fi">WavPack-ääni</comment>
     <comment xml:lang="fo">WavPack ljóður</comment>
     <comment xml:lang="fr">audio WavPack</comment>
+    <comment xml:lang="fur">audio WavPack</comment>
     <comment xml:lang="ga">fuaim WavPack</comment>
     <comment xml:lang="gl">son WavPack</comment>
     <comment xml:lang="he">שמע WavPack</comment>
@@ -22910,7 +23794,7 @@
     <comment xml:lang="oc">àudio WavPack</comment>
     <comment xml:lang="pl">Plik dźwiękowy WavPack</comment>
     <comment xml:lang="pt">áudio WavPack</comment>
-    <comment xml:lang="pt_BR">Áudio WavPack</comment>
+    <comment xml:lang="pt-BR">Áudio WavPack</comment>
     <comment xml:lang="ro">Audio WavPack</comment>
     <comment xml:lang="ru">Аудио WavPack</comment>
     <comment xml:lang="sk">Zvuk WavPack</comment>
@@ -22921,10 +23805,10 @@
     <comment xml:lang="tr">WavPack sesi</comment>
     <comment xml:lang="uk">звук WavPack</comment>
     <comment xml:lang="vi">Âm thanh WavPack</comment>
-    <comment xml:lang="zh_CN">WavPack 音频</comment>
-    <comment xml:lang="zh_TW">WavPack 音訊</comment>
+    <comment xml:lang="zh-CN">WavPack 音频</comment>
+    <comment xml:lang="zh-TW">WavPack 音訊</comment>
     <magic priority="50">
-      <match value="wvpk" type="string" offset="0"/>
+      <match type="string" value="wvpk" offset="0"/>
     </magic>
     <glob pattern="*.wv"/>
     <glob pattern="*.wvp"/>
@@ -22932,19 +23816,20 @@
   <mime-type type="audio/x-wavpack-correction">
     <comment>WavPack audio correction file</comment>
     <comment xml:lang="ar">ملف تصحيح WavPack السمعي</comment>
-    <comment xml:lang="be@latin">Fajł aŭdyjokarekcyi WavPack</comment>
+    <comment xml:lang="be-Latn">Fajł aŭdyjokarekcyi WavPack</comment>
     <comment xml:lang="bg">Файл за корекции на аудио — WavPack</comment>
     <comment xml:lang="ca">fitxer de correcció d'àudio de WavPack</comment>
     <comment xml:lang="cs">opravný zvukový soubor WavPack</comment>
     <comment xml:lang="da">WavPack-lydkorrektionsfil</comment>
     <comment xml:lang="de">WavPack-Audiokorrekturdatei</comment>
     <comment xml:lang="el">Αρχείο διόρθωσης ήχου WavePack</comment>
-    <comment xml:lang="en_GB">WavPack audio correction file</comment>
-    <comment xml:lang="es">archivo de corrección de sonido WavPack</comment>
+    <comment xml:lang="en-GB">WavPack audio correction file</comment>
+    <comment xml:lang="es">archivo de corrección de audio WavPack</comment>
     <comment xml:lang="eu">WavPack audio-zuzenketaren fitxategia</comment>
     <comment xml:lang="fi">WavPack-äänikorjaustiedosto</comment>
     <comment xml:lang="fo">WavPack ljóðrættingarfíla</comment>
     <comment xml:lang="fr">fichier de correction audio WavPack</comment>
+    <comment xml:lang="fur">file di corezion audio WavPack</comment>
     <comment xml:lang="ga">comhad ceartúchán fuaime WavPack</comment>
     <comment xml:lang="gl">ficheiro de corrección de son WavPack</comment>
     <comment xml:lang="he">קובץ תיקון שמע של WavPack</comment>
@@ -22964,7 +23849,7 @@
     <comment xml:lang="oc">fichièr de correccion àudio WavPack</comment>
     <comment xml:lang="pl">Plik korekcji dźwięku WavPack</comment>
     <comment xml:lang="pt">ficheiro de correção áudio WavPack</comment>
-    <comment xml:lang="pt_BR">Arquivo de correção de áudio WavPack</comment>
+    <comment xml:lang="pt-BR">Arquivo de correção de áudio WavPack</comment>
     <comment xml:lang="ro">Fișier audio de corecție WavPack</comment>
     <comment xml:lang="ru">Файл коррекции аудио WavPack</comment>
     <comment xml:lang="sk">Opravný zvukový súbor WavPack</comment>
@@ -22975,18 +23860,19 @@
     <comment xml:lang="tr">WavPack ses düzeltme dosyası</comment>
     <comment xml:lang="uk">файл корекції звуку WavPack</comment>
     <comment xml:lang="vi">Tập tin sửa chữa âm thanh WavPack</comment>
-    <comment xml:lang="zh_CN">WavPack 音频校正文件</comment>
-    <comment xml:lang="zh_TW">WavPack 音訊校正檔</comment>
+    <comment xml:lang="zh-CN">WavPack 音频校正文件</comment>
+    <comment xml:lang="zh-TW">WavPack 音訊校正檔</comment>
     <magic priority="50">
-      <match value="wvpk" type="string" offset="0"/>
+      <match type="string" value="wvpk" offset="0"/>
     </magic>
     <glob pattern="*.wvc"/>
   </mime-type>
   <mime-type type="audio/midi">
     <comment>MIDI audio</comment>
+    <comment xml:lang="af">MIDI-oudio</comment>
     <comment xml:lang="ar">MIDI سمعي</comment>
     <comment xml:lang="az">MIDI audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo MIDI</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo MIDI</comment>
     <comment xml:lang="bg">Аудио — MIDI</comment>
     <comment xml:lang="ca">àudio MIDI</comment>
     <comment xml:lang="cs">zvuk MIDI</comment>
@@ -22994,13 +23880,14 @@
     <comment xml:lang="da">MIDI-lyd</comment>
     <comment xml:lang="de">MIDI-Audio</comment>
     <comment xml:lang="el">Ήχος MIDI</comment>
-    <comment xml:lang="en_GB">MIDI audio</comment>
+    <comment xml:lang="en-GB">MIDI audio</comment>
     <comment xml:lang="eo">MIDI-sondosiero</comment>
-    <comment xml:lang="es">sonido MIDI</comment>
+    <comment xml:lang="es">audio MIDI</comment>
     <comment xml:lang="eu">MIDI audioa</comment>
     <comment xml:lang="fi">MIDI-ääni</comment>
     <comment xml:lang="fo">MIDI ljóður</comment>
     <comment xml:lang="fr">audio MIDI</comment>
+    <comment xml:lang="fur">audio MIDI</comment>
     <comment xml:lang="ga">fuaim MIDI</comment>
     <comment xml:lang="gl">son MIDI</comment>
     <comment xml:lang="he">שמע MIDI</comment>
@@ -23021,7 +23908,7 @@
     <comment xml:lang="oc">àudio MIDI</comment>
     <comment xml:lang="pl">Plik dźwiękowy MIDI</comment>
     <comment xml:lang="pt">áudio MIDI</comment>
-    <comment xml:lang="pt_BR">Áudio MIDI</comment>
+    <comment xml:lang="pt-BR">Áudio MIDI</comment>
     <comment xml:lang="ro">Audio MIDI</comment>
     <comment xml:lang="ru">Аудио MIDI</comment>
     <comment xml:lang="sk">Zvuk MIDI</comment>
@@ -23032,11 +23919,11 @@
     <comment xml:lang="tr">MIDI sesi</comment>
     <comment xml:lang="uk">звук MIDI</comment>
     <comment xml:lang="vi">Âm thanh MIDI</comment>
-    <comment xml:lang="zh_CN">MIDI 音频</comment>
-    <comment xml:lang="zh_TW">MIDI 音訊</comment>
+    <comment xml:lang="zh-CN">MIDI 音频</comment>
+    <comment xml:lang="zh-TW">MIDI 音訊</comment>
     <alias type="audio/x-midi"/>
     <magic priority="50">
-      <match value="MThd" type="string" offset="0"/>
+      <match type="string" value="MThd" offset="0"/>
     </magic>
     <glob pattern="*.mid"/>
     <glob pattern="*.midi"/>
@@ -23045,19 +23932,20 @@
   <mime-type type="audio/x-mo3">
     <comment>compressed Tracker audio</comment>
     <comment xml:lang="ar">Tracker سمعي مضغوط</comment>
-    <comment xml:lang="be@latin">aŭdyjo skampresavanaha Trackera</comment>
+    <comment xml:lang="be-Latn">aŭdyjo skampresavanaha Trackera</comment>
     <comment xml:lang="bg">Аудио — Tracker, компресирано</comment>
     <comment xml:lang="ca">àudio Tracker amb compressió</comment>
     <comment xml:lang="cs">komprimovaný zvuk Tracker</comment>
-    <comment xml:lang="da">Trackerkomprimeret lyd</comment>
+    <comment xml:lang="da">komprimeret trackerlyd</comment>
     <comment xml:lang="de">Komprimiertes Tracker-Audio</comment>
     <comment xml:lang="el">Συμπιεσμένος ήχος Tracker</comment>
-    <comment xml:lang="en_GB">compressed Tracker audio</comment>
-    <comment xml:lang="es">sonido de Tracker comprimido</comment>
+    <comment xml:lang="en-GB">compressed Tracker audio</comment>
+    <comment xml:lang="es">audio de Tracker comprimido</comment>
     <comment xml:lang="eu">konprimitutako Tracker audioa</comment>
     <comment xml:lang="fi">pakattu Tracker-ääni</comment>
     <comment xml:lang="fo">stappað Tracker ljóður</comment>
     <comment xml:lang="fr">audio Tracker compressé</comment>
+    <comment xml:lang="fur">audio Tracker comprimût</comment>
     <comment xml:lang="ga">fuaim chomhbhrúite Tracker</comment>
     <comment xml:lang="gl">son comprimido de Tracker</comment>
     <comment xml:lang="he">שמע גשש מכווץ</comment>
@@ -23076,7 +23964,7 @@
     <comment xml:lang="oc">àudio Tracker compressat</comment>
     <comment xml:lang="pl">Skompresowany plik dźwiękowy Tracker</comment>
     <comment xml:lang="pt">áudio comprimido Tracker</comment>
-    <comment xml:lang="pt_BR">Áudio Tracker compactado</comment>
+    <comment xml:lang="pt-BR">Áudio Tracker compactado</comment>
     <comment xml:lang="ro">Tracker audio comprimat</comment>
     <comment xml:lang="ru">Сжатое аудио Tracker</comment>
     <comment xml:lang="sk">Komprimovaný zvuk Tracker</comment>
@@ -23087,25 +23975,28 @@
     <comment xml:lang="tr">sıkıştırılmış Tracker sesi</comment>
     <comment xml:lang="uk">стиснутий звук Tracker</comment>
     <comment xml:lang="vi">âm thanh Tracker đã nén</comment>
-    <comment xml:lang="zh_CN">压缩的 Tracker 音频</comment>
-    <comment xml:lang="zh_TW">壓縮版 Tracker 音訊</comment>
+    <comment xml:lang="zh-CN">压缩的 Tracker 音频</comment>
+    <comment xml:lang="zh-TW">壓縮版 Tracker 音訊</comment>
     <magic priority="50">
-      <match value="MO3" type="string" offset="0"/>
+      <match type="string" value="MO3" offset="0"/>
     </magic>
     <glob pattern="*.mo3"/>
   </mime-type>
   <mime-type type="audio/aac">
     <comment>AAC audio</comment>
+    <comment xml:lang="af">AAC-oudio</comment>
+    <comment xml:lang="bg">Аудио — AAC</comment>
     <comment xml:lang="ca">àudio AAC</comment>
     <comment xml:lang="cs">zvuk AAC</comment>
     <comment xml:lang="da">AAC-lyd</comment>
     <comment xml:lang="de">AAC-Audio</comment>
     <comment xml:lang="el">Ήχος AAC</comment>
-    <comment xml:lang="en_GB">AAC audio</comment>
-    <comment xml:lang="es">sonido AAC</comment>
+    <comment xml:lang="en-GB">AAC audio</comment>
+    <comment xml:lang="es">audio AAC</comment>
     <comment xml:lang="eu">AAC audioa</comment>
     <comment xml:lang="fi">AAC-ääni</comment>
     <comment xml:lang="fr">audio AAC</comment>
+    <comment xml:lang="fur">audio AAC</comment>
     <comment xml:lang="ga">fuaim AAC</comment>
     <comment xml:lang="gl">Son AAC</comment>
     <comment xml:lang="he">שמע AAC</comment>
@@ -23121,7 +24012,7 @@
     <comment xml:lang="oc">àudio AAC</comment>
     <comment xml:lang="pl">Plik dźwiękowy AAC</comment>
     <comment xml:lang="pt">áudio AAC</comment>
-    <comment xml:lang="pt_BR">Áudio AAC</comment>
+    <comment xml:lang="pt-BR">Áudio AAC</comment>
     <comment xml:lang="ru">Аудио AAC</comment>
     <comment xml:lang="sk">Zvuk AAC</comment>
     <comment xml:lang="sl">Zvok AAC</comment>
@@ -23129,21 +24020,49 @@
     <comment xml:lang="sv">AAC-ljud</comment>
     <comment xml:lang="tr">AAC sesi</comment>
     <comment xml:lang="uk">звукові дані AAC</comment>
-    <comment xml:lang="zh_CN">AAC 音频</comment>
-    <comment xml:lang="zh_TW">AAC 音訊</comment>
+    <comment xml:lang="zh-CN">AAC 音频</comment>
+    <comment xml:lang="zh-TW">AAC 音訊</comment>
     <acronym>AAC</acronym>
     <expanded-acronym>Advanced Audio Coding</expanded-acronym>
     <magic priority="50">
-      <match value="ADIF" type="string" offset="0"/>
-      <match value="0xFFF0" type="big16" offset="0" mask="0xFFF6"/>
+      <match type="string" value="ADIF" offset="0"/>
+      <match type="big16" value="0xFFF0" mask="0xFFF6" offset="0"/>
     </magic>
     <glob pattern="*.aac"/>
     <glob pattern="*.adts"/>
-    <glob weight="10" pattern="*.ass"/>
+    <glob pattern="*.ass" weight="10"/>
     <alias type="audio/x-aac"/>
   </mime-type>
   <mime-type type="audio/usac">
     <comment>USAC audio</comment>
+    <comment xml:lang="af">USAC-oudio</comment>
+    <comment xml:lang="bg">Аудио — USAC</comment>
+    <comment xml:lang="ca">àudio USAC</comment>
+    <comment xml:lang="cs">zvuk USAC</comment>
+    <comment xml:lang="da">USAC-lyd</comment>
+    <comment xml:lang="de">USAC-Audio</comment>
+    <comment xml:lang="en-GB">USAC audio</comment>
+    <comment xml:lang="es">audio USAC</comment>
+    <comment xml:lang="eu">USAC audioa</comment>
+    <comment xml:lang="fi">USAC-ääni</comment>
+    <comment xml:lang="fr">audio USAC</comment>
+    <comment xml:lang="fur">audio USAC</comment>
+    <comment xml:lang="ga">fuaim USAC</comment>
+    <comment xml:lang="hr">USAC zvučni zapis</comment>
+    <comment xml:lang="hu">USAC hang</comment>
+    <comment xml:lang="id">Audio USAC</comment>
+    <comment xml:lang="it">Audio USAC</comment>
+    <comment xml:lang="kk">USAC аудиосы</comment>
+    <comment xml:lang="ko">USAC 오디오</comment>
+    <comment xml:lang="pl">Plik dźwiękowy USAC</comment>
+    <comment xml:lang="pt-BR">Áudio USAC</comment>
+    <comment xml:lang="ru">Аудио USAC</comment>
+    <comment xml:lang="sk">Zvuk USAC</comment>
+    <comment xml:lang="sv">USAC-ljud</comment>
+    <comment xml:lang="tr">USAC sesi</comment>
+    <comment xml:lang="uk">звукові дані USAC</comment>
+    <comment xml:lang="zh-CN">USAC 音频</comment>
+    <comment xml:lang="zh-TW">USAC 音訊</comment>
     <acronym>USAC</acronym>
     <expanded-acronym>Unified Speech and Audio Coding</expanded-acronym>
     <glob pattern="*.loas"/>
@@ -23151,21 +24070,23 @@
   </mime-type>
   <mime-type type="audio/mp4">
     <comment>MPEG-4 audio</comment>
+    <comment xml:lang="af">MPEG-4-oudio</comment>
     <comment xml:lang="ar">MPEG-4 سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo MPEG-4</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo MPEG-4</comment>
     <comment xml:lang="bg">Аудио — MPEG-4</comment>
     <comment xml:lang="ca">àudio MPEG-4</comment>
     <comment xml:lang="cs">zvuk MPEG-4</comment>
     <comment xml:lang="da">MPEG4-lyd</comment>
     <comment xml:lang="de">MPEG-4-Audio</comment>
     <comment xml:lang="el">Ήχος MPEG-4</comment>
-    <comment xml:lang="en_GB">MPEG-4 audio</comment>
+    <comment xml:lang="en-GB">MPEG-4 audio</comment>
     <comment xml:lang="eo">MPEG4-sondosiero</comment>
-    <comment xml:lang="es">sonido MPEG-4</comment>
+    <comment xml:lang="es">audio MPEG-4</comment>
     <comment xml:lang="eu">MPEG-4 audioa</comment>
     <comment xml:lang="fi">MPEG-4-ääni</comment>
     <comment xml:lang="fo">MPEG-4 ljóður</comment>
     <comment xml:lang="fr">audio MPEG-4</comment>
+    <comment xml:lang="fur">audio MPEG-4</comment>
     <comment xml:lang="ga">fuaim MPEG-4</comment>
     <comment xml:lang="gl">son MPEG-4</comment>
     <comment xml:lang="he">שמע MPEG-4</comment>
@@ -23186,7 +24107,7 @@
     <comment xml:lang="oc">àudio MPEG-4</comment>
     <comment xml:lang="pl">Plik dźwiękowy MPEG-4</comment>
     <comment xml:lang="pt">áudio MPEG-4</comment>
-    <comment xml:lang="pt_BR">Áudio MPEG-4</comment>
+    <comment xml:lang="pt-BR">Áudio MPEG-4</comment>
     <comment xml:lang="ro">Audio MPEG-4</comment>
     <comment xml:lang="ru">Аудио MPEG-4</comment>
     <comment xml:lang="sk">Zvuk MPEG-4</comment>
@@ -23197,39 +24118,65 @@
     <comment xml:lang="tr">MPEG-4 sesi</comment>
     <comment xml:lang="uk">звук MPEG-4</comment>
     <comment xml:lang="vi">Âm thanh MPEG-4</comment>
-    <comment xml:lang="zh_CN">MPEG-4 音频</comment>
-    <comment xml:lang="zh_TW">MPEG-4 音訊</comment>
+    <comment xml:lang="zh-CN">MPEG-4 音频</comment>
+    <comment xml:lang="zh-TW">MPEG-4 音訊</comment>
     <alias type="audio/x-m4a"/>
     <alias type="audio/m4a"/>
     <magic priority="50">
-      <match value="ftypM4A" type="string" offset="4"/>
+      <match type="string" value="ftypM4A" offset="4"/>
     </magic>
     <glob pattern="*.m4a"/>
     <glob pattern="*.f4a"/>
   </mime-type>
   <mime-type type="audio/x-m4r">
-    <comment>MPEG-4 Ringtone</comment>
+    <comment>MPEG-4 ringtone</comment>
+    <comment xml:lang="bg">Аудио — MPEG-4, звънене</comment>
+    <comment xml:lang="ca">to de trucada MPEG-4</comment>
+    <comment xml:lang="da">MPEG-4-ringetone</comment>
+    <comment xml:lang="de">MPEG-4-Klingelton</comment>
+    <comment xml:lang="en-GB">MPEG-4 ringtone</comment>
+    <comment xml:lang="es">tono de llamada MPEG-4</comment>
+    <comment xml:lang="eu">MPEG-4 dei-tonua</comment>
+    <comment xml:lang="fi">MPEG-4-soittoääni</comment>
+    <comment xml:lang="fr">sonnerie MPEG-4</comment>
+    <comment xml:lang="hr">MPEG-4 melodija zvona</comment>
+    <comment xml:lang="hu">MPEG-4 csengőhang</comment>
+    <comment xml:lang="id">Nada panggil MPEG-4</comment>
+    <comment xml:lang="it">Suoneria MPEG-4</comment>
+    <comment xml:lang="kk">MPEG-4 рингтоны</comment>
+    <comment xml:lang="ko">MPEG-4 벨소리</comment>
+    <comment xml:lang="pl">Dzwonek MPEG-4</comment>
+    <comment xml:lang="pt-BR">Toque MPEG-4</comment>
+    <comment xml:lang="ru">Мелодия MPEG-4</comment>
+    <comment xml:lang="sk">Zvonenie MPEG-4</comment>
+    <comment xml:lang="sv">MPEG-4-ringsignal</comment>
+    <comment xml:lang="tr">MPEG-4 zil sesi</comment>
+    <comment xml:lang="uk">рингтон MPEG-4</comment>
+    <comment xml:lang="zh-CN">MPEG-4 铃声</comment>
+    <comment xml:lang="zh-TW">MPEG-4 鈴聲</comment>
     <glob pattern="*.m4r"/>
     <sub-class-of type="video/mp4"/>
   </mime-type>
   <mime-type type="video/mp4">
     <comment>MPEG-4 video</comment>
+    <comment xml:lang="af">MPEG-4-video</comment>
     <comment xml:lang="ar">MPEG-4 مرئي</comment>
     <comment xml:lang="ast">Videu en MPEG-4</comment>
-    <comment xml:lang="be@latin">Videa MPEG-4</comment>
+    <comment xml:lang="be-Latn">Videa MPEG-4</comment>
     <comment xml:lang="bg">Видео — MPEG-4</comment>
     <comment xml:lang="ca">vídeo MPEG-4</comment>
     <comment xml:lang="cs">video MPEG-4</comment>
     <comment xml:lang="da">MPEG4-video</comment>
     <comment xml:lang="de">MPEG-4-Video</comment>
     <comment xml:lang="el">Βίντεο MPEG-4</comment>
-    <comment xml:lang="en_GB">MPEG-4 video</comment>
+    <comment xml:lang="en-GB">MPEG-4 video</comment>
     <comment xml:lang="eo">MPEG-4-video</comment>
     <comment xml:lang="es">vídeo MPEG-4</comment>
     <comment xml:lang="eu">MPEG-4 bideoa</comment>
     <comment xml:lang="fi">MPEG-4-video</comment>
     <comment xml:lang="fo">MPEG-4 video</comment>
     <comment xml:lang="fr">vidéo MPEG-4</comment>
+    <comment xml:lang="fur">video MPEG-4</comment>
     <comment xml:lang="ga">físeán MPEG-4</comment>
     <comment xml:lang="gl">vídeo MPEG-4</comment>
     <comment xml:lang="he">וידאו MPEG-4</comment>
@@ -23250,7 +24197,7 @@
     <comment xml:lang="oc">vidèo MPEG-4</comment>
     <comment xml:lang="pl">Plik wideo MPEG-4</comment>
     <comment xml:lang="pt">vídeo MPEG-4</comment>
-    <comment xml:lang="pt_BR">Vídeo MPEG-4</comment>
+    <comment xml:lang="pt-BR">Vídeo MPEG-4</comment>
     <comment xml:lang="ro">Video MPEG-4</comment>
     <comment xml:lang="ru">Видео MPEG-4</comment>
     <comment xml:lang="sk">Video MPEG-4</comment>
@@ -23261,15 +24208,16 @@
     <comment xml:lang="tr">MPEG-4 video</comment>
     <comment xml:lang="uk">відеокліп MPEG-4</comment>
     <comment xml:lang="vi">Ảnh động MPEG-4</comment>
-    <comment xml:lang="zh_CN">MPEG-4 视频</comment>
-    <comment xml:lang="zh_TW">MPEG-4 視訊</comment>
+    <comment xml:lang="zh-CN">MPEG-4 视频</comment>
+    <comment xml:lang="zh-TW">MPEG-4 視訊</comment>
     <alias type="video/mp4v-es"/>
     <magic priority="50">
-      <match value="ftypisom" type="string" offset="4"/>
-      <match value="ftypmp42" type="string" offset="4"/>
-      <match value="ftypMSNV" type="string" offset="4"/>
-      <match value="ftypM4V " type="string" offset="4"/>
-      <match value="ftypf4v " type="string" offset="4"/>
+      <match type="string" value="ftypisom" offset="4"/>
+      <match type="string" value="ftypmp41" offset="4"/>
+      <match type="string" value="ftypmp42" offset="4"/>
+      <match type="string" value="ftypMSNV" offset="4"/>
+      <match type="string" value="ftypM4V " offset="4"/>
+      <match type="string" value="ftypf4v " offset="4"/>
     </magic>
     <glob pattern="*.mp4"/>
     <glob pattern="*.m4v"/>
@@ -23279,21 +24227,23 @@
   </mime-type>
   <mime-type type="audio/x-m4b">
     <comment>MPEG-4 audio book</comment>
+    <comment xml:lang="af">MPEG-4-oudioboek</comment>
     <comment xml:lang="ar">كتاب MPEG-4 السمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjokniha MPEG-4</comment>
+    <comment xml:lang="be-Latn">Aŭdyjokniha MPEG-4</comment>
     <comment xml:lang="bg">Аудио книга — MPEG-4</comment>
     <comment xml:lang="ca">llibre d'àudio MPEG-4</comment>
     <comment xml:lang="cs">zvuková kniha MPEG-4</comment>
     <comment xml:lang="da">MPEG4-lydbog</comment>
     <comment xml:lang="de">MPEG-4-Hörbuch</comment>
     <comment xml:lang="el">Ηχητικό βιβλίο MPEG-4</comment>
-    <comment xml:lang="en_GB">MPEG-4 audio book</comment>
+    <comment xml:lang="en-GB">MPEG-4 audio book</comment>
     <comment xml:lang="eo">MPEG-4-sonlibro</comment>
     <comment xml:lang="es">audiolibro MPEG-4</comment>
     <comment xml:lang="eu">MPEG-4 audio-liburua</comment>
     <comment xml:lang="fi">MPEG-4-äänikirja</comment>
     <comment xml:lang="fo">MPEG-4 ljóðbók</comment>
     <comment xml:lang="fr">livre audio MPEG-4</comment>
+    <comment xml:lang="fur">audio-libri MPEG-4</comment>
     <comment xml:lang="ga">closleabhar MPEG-4</comment>
     <comment xml:lang="gl">sonlibro de MPEG-4</comment>
     <comment xml:lang="he">ספר דיגיטלי MPEG-4</comment>
@@ -23314,7 +24264,7 @@
     <comment xml:lang="oc">libre àudio MPEG-4</comment>
     <comment xml:lang="pl">Książka dźwiękowa MPEG-4</comment>
     <comment xml:lang="pt">livro áudio MPEG-4</comment>
-    <comment xml:lang="pt_BR">Áudio livro MPEG-4</comment>
+    <comment xml:lang="pt-BR">Áudio livro MPEG-4</comment>
     <comment xml:lang="ro">Carte audio MPEG-4</comment>
     <comment xml:lang="ru">Аудиокнига MPEG-4</comment>
     <comment xml:lang="sk">Zvuková kniha MPEG-4</comment>
@@ -23325,31 +24275,33 @@
     <comment xml:lang="tr">MPEG-4 sesli kitabı</comment>
     <comment xml:lang="uk">аудіокнига MPEG-4</comment>
     <comment xml:lang="vi">Sách âm thanh MPEG-4</comment>
-    <comment xml:lang="zh_CN">MPEG-4 有声书</comment>
-    <comment xml:lang="zh_TW">MPEG-4 音訊書</comment>
+    <comment xml:lang="zh-CN">MPEG-4 有声书</comment>
+    <comment xml:lang="zh-TW">MPEG-4 音訊書</comment>
     <sub-class-of type="audio/mp4"/>
     <magic priority="50">
-      <match value="ftypM4B" type="string" offset="4"/>
+      <match type="string" value="ftypM4B" offset="4"/>
     </magic>
     <glob pattern="*.m4b"/>
     <glob pattern="*.f4b"/>
   </mime-type>
   <mime-type type="video/3gpp">
     <comment>3GPP multimedia file</comment>
+    <comment xml:lang="af">3GPP-multimedialêer</comment>
     <comment xml:lang="ar">ملف وسائط متعددة 3GPP</comment>
-    <comment xml:lang="be@latin">Multymedyjny fajł 3GPP</comment>
+    <comment xml:lang="be-Latn">Multymedyjny fajł 3GPP</comment>
     <comment xml:lang="bg">Мултимедия — 3GPP</comment>
     <comment xml:lang="ca">fitxer multimèdia 3GPP</comment>
     <comment xml:lang="cs">multimediální soubor 3GPP</comment>
     <comment xml:lang="da">3GPP multimedie-fil</comment>
     <comment xml:lang="de">3GPP-Multimediadatei</comment>
     <comment xml:lang="el">Αρχείο πολυμέσων 3GPP</comment>
-    <comment xml:lang="en_GB">3GPP multimedia file</comment>
+    <comment xml:lang="en-GB">3GPP multimedia file</comment>
     <comment xml:lang="es">archivo multimedia 3GPP</comment>
     <comment xml:lang="eu">3GPP multimediako fitxategia</comment>
     <comment xml:lang="fi">3GPP-multimediatiedosto</comment>
     <comment xml:lang="fo">3GGP margmiðlafíla</comment>
     <comment xml:lang="fr">fichier multimédia 3GPP</comment>
+    <comment xml:lang="fur">file multimediâl 3GPP</comment>
     <comment xml:lang="ga">comhad ilmheán 3GPP</comment>
     <comment xml:lang="gl">ficheiro multimedia 3GPP</comment>
     <comment xml:lang="he">קובץ מולטימדיה מסוג 3GPP</comment>
@@ -23370,7 +24322,7 @@
     <comment xml:lang="oc">fichièr multimèdia 3GPP</comment>
     <comment xml:lang="pl">Plik multimedialny 3GPP</comment>
     <comment xml:lang="pt">ficheiro multimédia 3GPP</comment>
-    <comment xml:lang="pt_BR">Arquivo multimídia 3GPP</comment>
+    <comment xml:lang="pt-BR">Arquivo multimídia 3GPP</comment>
     <comment xml:lang="ro">Fișier multimedia 3GPP</comment>
     <comment xml:lang="ru">Мультимедийный файл 3GPP</comment>
     <comment xml:lang="sk">Súbor multimédií 3GPP</comment>
@@ -23378,19 +24330,19 @@
     <comment xml:lang="sq">File multimedial 3GPP</comment>
     <comment xml:lang="sr">3ГПП мултимедијална датотека</comment>
     <comment xml:lang="sv">3GPP-multimediafil</comment>
-    <comment xml:lang="tr">3GPP multimedya dosyası</comment>
+    <comment xml:lang="tr">3GPP çoklu ortam dosyası</comment>
     <comment xml:lang="uk">файл мультимедійних даних 3GPP</comment>
     <comment xml:lang="vi">Tập tin đa phương tiện 3GPP</comment>
-    <comment xml:lang="zh_CN">3GPP 多媒体文件</comment>
-    <comment xml:lang="zh_TW">3GPP 多媒體檔案</comment>
+    <comment xml:lang="zh-CN">3GPP 多媒体文件</comment>
+    <comment xml:lang="zh-TW">3GPP 多媒體檔案</comment>
     <acronym>3GPP</acronym>
     <expanded-acronym>3rd Generation Partnership Project</expanded-acronym>
     <sub-class-of type="video/mp4"/>
     <magic priority="50">
-      <match value="ftyp3ge" type="string" offset="4"/>
-      <match value="ftyp3gg" type="string" offset="4"/>
-      <match value="ftyp3gp" type="string" offset="4"/>
-      <match value="ftyp3gs" type="string" offset="4"/>
+      <match type="string" value="ftyp3ge" offset="4"/>
+      <match type="string" value="ftyp3gg" offset="4"/>
+      <match type="string" value="ftyp3gp" offset="4"/>
+      <match type="string" value="ftyp3gs" offset="4"/>
     </magic>
     <glob pattern="*.3gp"/>
     <glob pattern="*.3gpp"/>
@@ -23406,6 +24358,7 @@
   </mime-type>
   <mime-type type="video/3gpp2">
     <comment>3GPP2 multimedia file</comment>
+    <comment xml:lang="af">3GPP2-multimedialêer</comment>
     <comment xml:lang="ar">ملف وسائط متعددة 3GPP2</comment>
     <comment xml:lang="bg">Мултимедия — 3GPP2</comment>
     <comment xml:lang="ca">fitxer multimèdia 3GPP2</comment>
@@ -23413,12 +24366,13 @@
     <comment xml:lang="da">3GPP2 multimedie-fil</comment>
     <comment xml:lang="de">3GPP2-Multimediadatei</comment>
     <comment xml:lang="el">Αρχείο πολυμέσων 3GPP2</comment>
-    <comment xml:lang="en_GB">3GPP2 multimedia file</comment>
+    <comment xml:lang="en-GB">3GPP2 multimedia file</comment>
     <comment xml:lang="es">archivo multimedia 3GPP2</comment>
     <comment xml:lang="eu">3GPP2 multimediako fitxategia</comment>
     <comment xml:lang="fi">3GPP2-multimediatiedosto</comment>
     <comment xml:lang="fo">3GGP2 margmiðlafíla</comment>
     <comment xml:lang="fr">fichier multimédia 3GPP2</comment>
+    <comment xml:lang="fur">file multimediâl 3GPP2</comment>
     <comment xml:lang="ga">comhad ilmheán 3GPP2</comment>
     <comment xml:lang="gl">ficheiro multimedia 3GPP2</comment>
     <comment xml:lang="he">קובץ מולטימדיה 3GPP2</comment>
@@ -23436,22 +24390,21 @@
     <comment xml:lang="oc">fichièr multimèdia 3GPP2</comment>
     <comment xml:lang="pl">Plik multimedialny 3GPP2</comment>
     <comment xml:lang="pt">ficheiro multimédia 3GPP2</comment>
-    <comment xml:lang="pt_BR">Arquivo multimídia 3GPP2</comment>
+    <comment xml:lang="pt-BR">Arquivo multimídia 3GPP2</comment>
     <comment xml:lang="ro">Fișier multimedia 3GPP2</comment>
     <comment xml:lang="ru">Мультимедийный файл 3GPP2</comment>
     <comment xml:lang="sk">Súbor multimédií 3GPP2</comment>
     <comment xml:lang="sl">Večpredstavnostna datoteka 3GPP2</comment>
     <comment xml:lang="sr">3ГПП2 мултимедијална датотека</comment>
     <comment xml:lang="sv">3GPP2-multimediafil</comment>
-    <comment xml:lang="tr">3GPP2 multimedya dosyası</comment>
+    <comment xml:lang="tr">3GPP2 çoklu ortam dosyası</comment>
     <comment xml:lang="uk">файл мультимедійних даних 3GPP2</comment>
-    <comment xml:lang="zh_CN">3GPP2 多媒体文件</comment>
-    <comment xml:lang="zh_TW">3GPP2 多媒體檔案</comment>
+    <comment xml:lang="zh-CN">3GPP2 多媒体文件</comment>
+    <comment xml:lang="zh-TW">3GPP2 多媒體檔案</comment>
     <acronym>3GPP2</acronym>
     <expanded-acronym>3rd Generation Partnership Project 2</expanded-acronym>
-    <sub-class-of type="video/mp4"/>
     <magic priority="50">
-      <match value="ftyp3g2" type="string" offset="4"/>
+      <match type="string" value="ftyp3g2" offset="4"/>
     </magic>
     <glob pattern="*.3g2"/>
     <glob pattern="*.3gp2"/>
@@ -23461,20 +24414,21 @@
   <mime-type type="audio/x-mod">
     <comment>Amiga SoundTracker audio</comment>
     <comment xml:lang="ar">مقتفي صوت Amiga السمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Amiga SoundTracker</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Amiga SoundTracker</comment>
     <comment xml:lang="bg">Аудио — Amiga SoundTracker</comment>
     <comment xml:lang="ca">àudio SoundTracker d'Amiga</comment>
     <comment xml:lang="cs">zvuk Amiga SoundTracker</comment>
     <comment xml:lang="da">Amiga SoundTracker-lyd</comment>
     <comment xml:lang="de">Amiga-SoundTracker-Audio</comment>
     <comment xml:lang="el">Ήχος Amiga SoundTracker</comment>
-    <comment xml:lang="en_GB">Amiga SoundTracker audio</comment>
+    <comment xml:lang="en-GB">Amiga SoundTracker audio</comment>
     <comment xml:lang="eo">Sondosiero de Amiga SoundTracker</comment>
-    <comment xml:lang="es">sonido de Amiga SoundTracker</comment>
+    <comment xml:lang="es">audio de Amiga SoundTracker</comment>
     <comment xml:lang="eu">Amiga soundtracker audioa</comment>
     <comment xml:lang="fi">Amiga SoundTracker -ääni</comment>
     <comment xml:lang="fo">Amiga SoundTracker ljóður</comment>
     <comment xml:lang="fr">audio SoundTracker Amiga</comment>
+    <comment xml:lang="fur">audio Amiga SoundTracker</comment>
     <comment xml:lang="ga">fuaim Amiga SoundTracker</comment>
     <comment xml:lang="gl">son de Amiga SoundTracker</comment>
     <comment xml:lang="he">קובץ שמע של Amiga SoundTracker</comment>
@@ -23496,7 +24450,7 @@
     <comment xml:lang="oc">àudio SoundTracker Amiga</comment>
     <comment xml:lang="pl">Plik dźwiękowy Amiga SoundTracker</comment>
     <comment xml:lang="pt">áudio SoundTracker do Amiga</comment>
-    <comment xml:lang="pt_BR">Áudio Amiga SoundTracker</comment>
+    <comment xml:lang="pt-BR">Áudio Amiga SoundTracker</comment>
     <comment xml:lang="ro">Audio Amiga SoundTracker</comment>
     <comment xml:lang="ru">Аудио Amiga SoundTracker</comment>
     <comment xml:lang="sk">Zvuk Amiga SoundTracker</comment>
@@ -23507,41 +24461,60 @@
     <comment xml:lang="tr">Amiga SoundTracker sesi</comment>
     <comment xml:lang="uk">звук Amiga SoundTracker</comment>
     <comment xml:lang="vi">Âm thanh Amiga SoundTracker</comment>
-    <comment xml:lang="zh_CN">Amiga SoundTracker 音频</comment>
-    <comment xml:lang="zh_TW">Amiga SoundTracker 音訊</comment>
+    <comment xml:lang="zh-CN">Amiga SoundTracker 音频</comment>
+    <comment xml:lang="zh-TW">Amiga SoundTracker 音訊</comment>
     <magic priority="40">
-      <match value="MTM" type="string" offset="0"/>
-      <match value="MMD0" type="string" offset="0"/>
-      <match value="MMD1" type="string" offset="0"/>
-      <match value="if" type="string" offset="0">
-        
-        <match value="0x0" type="byte" offset="110" mask="0xc0">
-          
-          <match value="0x0" type="byte" offset="111" mask="0x80"/>
-          <match value="0x80" type="byte" offset="111"/>
-        </match>
-        
-        <match value="0x40" type="byte" offset="110">
-          
-          <match value="0x0" type="byte" offset="111" mask="0x80"/>
-          <match value="0x80" type="byte" offset="111"/>
-        </match>
-      </match>
-      <match value="JN" type="string" offset="0">
-        
-        <match value="0x0" type="byte" offset="110" mask="0xc0">
-          
-          <match value="0x0" type="byte" offset="111" mask="0x80"/>
-          <match value="0x80" type="byte" offset="111"/>
+      <match type="string" value="MTM" offset="0"/>
+      <match type="string" value="MMD0" offset="0"/>
+      <match type="string" value="MMD1" offset="0"/>
+      <!-- 669 composer files: "if" and "JN" -->
+      <match type="byte" value="0x0" mask="0x80" offset="112">
+        <match type="string" value="if" offset="0">
+          <!-- tempo list last byte: 0-31 (0 = known false positive) -->
+          <match type="byte" value="0x0" mask="0xe0" offset="368">
+            <!-- number of samples: 0-63 -->
+            <match type="byte" value="0x0" mask="0xc0" offset="110">
+              <!-- number of patterns: 0-128 -->
+              <match type="byte" value="0x0" mask="0x80" offset="111"/>
+              <match type="byte" value="0x80" offset="111"/>
+            </match>
+            <!-- number of samples: 64 -->
+            <match type="byte" value="0x40" offset="110">
+              <match type="byte" value="0x0" mask="0x80" offset="111"/>
+              <match type="byte" value="0x80" offset="111"/>
+            </match>
+          </match>
+          <!-- tempo list last byte: 32 -->
+          <match type="byte" value="0x20" offset="368">
+            <!-- number of samples: 0-63 -->
+            <match type="byte" value="0x0" mask="0xc0" offset="110">
+              <!-- number of patterns: 0-128 -->
+              <match type="byte" value="0x0" mask="0x80" offset="111"/>
+              <match type="byte" value="0x80" offset="111"/>
+            </match>
+            <!-- number of samples: 64 -->
+            <match type="byte" value="0x40" offset="110">
+              <match type="byte" value="0x0" mask="0x80" offset="111"/>
+              <match type="byte" value="0x80" offset="111"/>
+            </match>
+          </match>
         </match>
-        
-        <match value="0x40" type="byte" offset="110">
-          
-          <match value="0x0" type="byte" offset="111" mask="0x80"/>
-          <match value="0x80" type="byte" offset="111"/>
+        <match type="string" value="JN" offset="0">
+          <match type="byte" value="0x0" mask="0xe0" offset="368">
+            <match type="byte" value="0x0" mask="0xc0" offset="110">
+              <match type="byte" value="0x0" mask="0x80" offset="111"/>
+              <match type="byte" value="0x80" offset="111"/>
+            </match>
+          </match>
+          <match type="byte" value="0x20" offset="368">
+            <match type="byte" value="0x40" offset="110">
+              <match type="byte" value="0x0" mask="0x80" offset="111"/>
+              <match type="byte" value="0x80" offset="111"/>
+            </match>
+          </match>
         </match>
       </match>
-      <match value="MAS_UTrack_V00" type="string" offset="0"/>
+      <match type="string" value="MAS_UTrack_V00" offset="0"/>
     </magic>
     <glob pattern="*.mod"/>
     <glob pattern="*.ult"/>
@@ -23553,21 +24526,23 @@
   </mime-type>
   <mime-type type="audio/mp2">
     <comment>MP2 audio</comment>
+    <comment xml:lang="af">MP2-oudio</comment>
     <comment xml:lang="ar">MP2 سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo MP2</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo MP2</comment>
     <comment xml:lang="bg">Аудио — MP2</comment>
     <comment xml:lang="ca">àudio MP2</comment>
     <comment xml:lang="cs">zvuk MP2</comment>
     <comment xml:lang="da">MP2-lyd</comment>
     <comment xml:lang="de">MP2-Audio</comment>
     <comment xml:lang="el">Ήχος MP2</comment>
-    <comment xml:lang="en_GB">MP2 audio</comment>
+    <comment xml:lang="en-GB">MP2 audio</comment>
     <comment xml:lang="eo">MP2-sondosiero</comment>
-    <comment xml:lang="es">sonido MP2</comment>
+    <comment xml:lang="es">audio MP2</comment>
     <comment xml:lang="eu">MP2 audioa</comment>
     <comment xml:lang="fi">MP2-ääni</comment>
     <comment xml:lang="fo">MP2 ljóður</comment>
     <comment xml:lang="fr">audio MP2</comment>
+    <comment xml:lang="fur">audio MP2</comment>
     <comment xml:lang="ga">fuaim MP2</comment>
     <comment xml:lang="gl">son MP2</comment>
     <comment xml:lang="he">שמע MP2</comment>
@@ -23587,7 +24562,7 @@
     <comment xml:lang="oc">àudio MP2</comment>
     <comment xml:lang="pl">Plik dźwiękowy MP2</comment>
     <comment xml:lang="pt">áudio MP2</comment>
-    <comment xml:lang="pt_BR">Áudio MP2</comment>
+    <comment xml:lang="pt-BR">Áudio MP2</comment>
     <comment xml:lang="ro">Audio MP2</comment>
     <comment xml:lang="ru">Аудио MP2</comment>
     <comment xml:lang="sk">Zvuk MP2</comment>
@@ -23598,16 +24573,17 @@
     <comment xml:lang="tr">MP2 sesi</comment>
     <comment xml:lang="uk">звук MP2</comment>
     <comment xml:lang="vi">Âm thanh MP2</comment>
-    <comment xml:lang="zh_CN">MP2 音频</comment>
-    <comment xml:lang="zh_TW">MP2 音訊</comment>
+    <comment xml:lang="zh-CN">MP2 音频</comment>
+    <comment xml:lang="zh-TW">MP2 音訊</comment>
     <alias type="audio/x-mp2"/>
     <glob pattern="*.mp2"/>
   </mime-type>
   <mime-type type="audio/mpeg">
     <comment>MP3 audio</comment>
+    <comment xml:lang="af">MP3-oudio</comment>
     <comment xml:lang="ar">MP3 سمعي</comment>
     <comment xml:lang="az">MP3 audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo MP3</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo MP3</comment>
     <comment xml:lang="bg">Аудио — MP3</comment>
     <comment xml:lang="ca">àudio MP3</comment>
     <comment xml:lang="cs">zvuk MP3</comment>
@@ -23615,13 +24591,14 @@
     <comment xml:lang="da">MP3-lyd</comment>
     <comment xml:lang="de">MP3-Audio</comment>
     <comment xml:lang="el">Ήχος MP3</comment>
-    <comment xml:lang="en_GB">MP3 audio</comment>
+    <comment xml:lang="en-GB">MP3 audio</comment>
     <comment xml:lang="eo">MP3-sondosiero</comment>
-    <comment xml:lang="es">sonido MP3</comment>
+    <comment xml:lang="es">audio MP3</comment>
     <comment xml:lang="eu">MP3 audioa</comment>
     <comment xml:lang="fi">MP3-ääni</comment>
     <comment xml:lang="fo">MP3 ljóður</comment>
     <comment xml:lang="fr">audio MP3</comment>
+    <comment xml:lang="fur">audio MP3</comment>
     <comment xml:lang="ga">fuaim MP3</comment>
     <comment xml:lang="gl">son MP3</comment>
     <comment xml:lang="he">שמע MP3</comment>
@@ -23643,7 +24620,7 @@
     <comment xml:lang="oc">àudio MP3</comment>
     <comment xml:lang="pl">Plik dźwiękowy MP3</comment>
     <comment xml:lang="pt">áudio MP3</comment>
-    <comment xml:lang="pt_BR">Áudio MP3</comment>
+    <comment xml:lang="pt-BR">Áudio MP3</comment>
     <comment xml:lang="ro">Audio MP3</comment>
     <comment xml:lang="ru">Аудио MP3</comment>
     <comment xml:lang="sk">Zvuk MP3</comment>
@@ -23654,70 +24631,26 @@
     <comment xml:lang="tr">MP3 sesi</comment>
     <comment xml:lang="uk">звук MP3</comment>
     <comment xml:lang="vi">Âm thanh MP3</comment>
-    <comment xml:lang="zh_CN">MP3 音频</comment>
-    <comment xml:lang="zh_TW">MP3 音訊</comment>
+    <comment xml:lang="zh-CN">MP3 音频</comment>
+    <comment xml:lang="zh-TW">MP3 音訊</comment>
     <alias type="audio/x-mp3"/>
     <alias type="audio/x-mpg"/>
     <alias type="audio/x-mpeg"/>
     <alias type="audio/mp3"/>
     <magic priority="50">
-      <match value="0xfffb" type="big16" offset="0"/>
-      <match value="ID3" type="string" offset="0"/>
+      <match type="big16" value="0xfffa" offset="0"/>
+      <match type="big16" value="0xfffb" offset="0"/>
+      <match type="big16" value="0xfff3" offset="0"/>
+      <match type="big16" value="0xfff2" offset="0"/>
+      <match type="big16" value="0xffe3" offset="0"/>
+      <match type="big16" value="0xffe2" offset="0"/>
+      <match type="string" value="ID3" offset="0"/>
     </magic>
     <glob pattern="*.mp3"/>
     <glob pattern="*.mpga"/>
   </mime-type>
   <mime-type type="audio/x-mpegurl">
-    <comment>MP3 audio (streamed)</comment>
-    <comment xml:lang="ar">MP3 سمعي (تدفق)</comment>
-    <comment xml:lang="be@latin">Aŭdyjo MP3 (płyń)</comment>
-    <comment xml:lang="bg">Аудио — MP3, поточно</comment>
-    <comment xml:lang="ca">àudio MP3 (flux)</comment>
-    <comment xml:lang="cs">zvuk MP3 (proud)</comment>
-    <comment xml:lang="da">MP3-lyd (strøm)</comment>
-    <comment xml:lang="de">MP3-Audio (Stream)</comment>
-    <comment xml:lang="el">Ήχος MP3 (εκπεμπόμενος)</comment>
-    <comment xml:lang="en_GB">MP3 audio (streamed)</comment>
-    <comment xml:lang="eo">MP3-sondosiero (fluigate)</comment>
-    <comment xml:lang="es">sonido MP3 (en transmisión)</comment>
-    <comment xml:lang="eu">MP3 audioa (korrontea)</comment>
-    <comment xml:lang="fi">MP3-ääni (virtaus)</comment>
-    <comment xml:lang="fo">MP3 ljóður (streymað)</comment>
-    <comment xml:lang="fr">audio MP3 (flux)</comment>
-    <comment xml:lang="ga">fuaim MP3 (sruthaithe)</comment>
-    <comment xml:lang="gl">son MP3 (en stream)</comment>
-    <comment xml:lang="he">שמע MP3  (מוזרם)</comment>
-    <comment xml:lang="hr">MP3 zvučni zapis (strujanje)</comment>
-    <comment xml:lang="hu">MP3 hang (sugárzott)</comment>
-    <comment xml:lang="ia">Audio MP3 (fluxo)</comment>
-    <comment xml:lang="id">Audio MP3 (stream)</comment>
-    <comment xml:lang="it">Audio MP3 (in streaming)</comment>
-    <comment xml:lang="ja">MP3 オーディオ (ストリーム)</comment>
-    <comment xml:lang="ka">MP3 აუდიო (ნაკადი)</comment>
-    <comment xml:lang="kk">MP3 аудиосы (ағымдық)</comment>
-    <comment xml:lang="ko">MP3 오디오(스트림)</comment>
-    <comment xml:lang="lt">MP3 garso įrašas (transliuojamas)</comment>
-    <comment xml:lang="lv">MP3 audio (straumēts)</comment>
-    <comment xml:lang="ms">Audio MP3 (aliran)</comment>
-    <comment xml:lang="nb">MP3-lyd (streaming)</comment>
-    <comment xml:lang="nl">MP3-audio (gestreamd)</comment>
-    <comment xml:lang="nn">Strauma MP3-lyd</comment>
-    <comment xml:lang="oc">àudio MP3 (flux)</comment>
-    <comment xml:lang="pl">Plik dźwiękowy MP3 (strumień)</comment>
-    <comment xml:lang="pt">áudio MP3 (em fluxo)</comment>
-    <comment xml:lang="pt_BR">Áudio MP3 (em fluxo)</comment>
-    <comment xml:lang="ro">Audio MP3 (flux)</comment>
-    <comment xml:lang="ru">Аудио MP3 (потоковое)</comment>
-    <comment xml:lang="sk">Zvuk MP3 (streamovaný)</comment>
-    <comment xml:lang="sl">Zvočna datoteka MP3 (pretočna)</comment>
-    <comment xml:lang="sq">Audio MP3 (streamed)</comment>
-    <comment xml:lang="sr">МП3 звук (проточан)</comment>
-    <comment xml:lang="sv">MP3-ljud (flöde)</comment>
-    <comment xml:lang="tr">MP3 sesi (akış)</comment>
-    <comment xml:lang="uk">звук MP3 (потоковий)</comment>
-    <comment xml:lang="vi">Âm thanh MP3 (chạy luồng)</comment>
-    <comment xml:lang="zh_CN">MP3 音频流媒体</comment>
-    <comment xml:lang="zh_TW">MP3 音訊 (串流)</comment>
+    <comment>Media playlist</comment>
     <sub-class-of type="text/plain"/>
     <alias type="audio/mpegurl"/>
     <alias type="application/m3u"/>
@@ -23728,77 +24661,38 @@
     <glob pattern="*.m3u8"/>
     <glob pattern="*.vlc"/>
     <magic priority="50">
-      <match value="#EXTM3U" type="string" offset="0"/>
+      <match type="string" value="#EXTM3U" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/vnd.apple.mpegurl">
-    <comment>HTTP Live Streaming playlist</comment>
-    <comment xml:lang="ar">قائمة بث HTTP حية</comment>
-    <comment xml:lang="bg">Списък за изпълнение — поток по HTTP</comment>
-    <comment xml:lang="ca">llista de reproducció en temps real HTTP</comment>
-    <comment xml:lang="cs">seznam k přehrání HTTP Live Streaming</comment>
-    <comment xml:lang="da">Afspilningsliste til HTTP-livestrøm</comment>
-    <comment xml:lang="de">HTTP Live-Streaming-Wiedergabeliste</comment>
-    <comment xml:lang="el">Λίστα αναπαραγωγής ζωντανής μετάδοσης σε HTTP</comment>
-    <comment xml:lang="en_GB">HTTP Live Streaming playlist</comment>
-    <comment xml:lang="es">lista de reproducción de flujo en directo HTTP</comment>
-    <comment xml:lang="eu">HTTP zuzeneko korrontearen erreprodukzio-zerrenda</comment>
-    <comment xml:lang="fo">HTTP beinleiðis streymaður avspælingarlisti</comment>
-    <comment xml:lang="fr">liste de lecture de flux HTTP Live</comment>
-    <comment xml:lang="ga">seinmliosta sruthaithe bheo HTTP</comment>
-    <comment xml:lang="gl">lista de reprodución de fluxo HTTP</comment>
-    <comment xml:lang="he">רשימת השמעה הזרימה של HTTP</comment>
-    <comment xml:lang="hr">HTTP popis izvođenja emitiranja uživo</comment>
-    <comment xml:lang="hu">HTTP élő lejátszólista</comment>
-    <comment xml:lang="ia">Lista de selection HTTP Live Streaming</comment>
-    <comment xml:lang="id">Daftar putar HTTP Live Streaming</comment>
-    <comment xml:lang="it">Playlist Live Steaming HTTP</comment>
-    <comment xml:lang="ja">HTTP ライブストリーミング再生リスト</comment>
-    <comment xml:lang="kk">HTTP тірі ағым ойнау тізімі</comment>
-    <comment xml:lang="ko">HTTP 라이브 스트리밍 재생 목록</comment>
-    <comment xml:lang="lt">HTTP tiesioginio transliavimo grojaraštis</comment>
-    <comment xml:lang="lv">HTTP dzīvās straumēšanas repertuārs</comment>
-    <comment xml:lang="nl">HTTP Live Streaming afspeellijst</comment>
-    <comment xml:lang="oc">lista de lectura de flux HTTP Live</comment>
-    <comment xml:lang="pl">Lista odtwarzania strumieniowego na żywo HTTP</comment>
-    <comment xml:lang="pt">lista de reprodução HTTP Live Streaming</comment>
-    <comment xml:lang="pt_BR">Lista de Reprodução Streaming ao Vivo de HTTP</comment>
-    <comment xml:lang="ro">Listă de redare difuzată ca flux HTTP</comment>
-    <comment xml:lang="ru">Список воспроизведения HTTP-потока</comment>
-    <comment xml:lang="sk">Zoznam stôp HTTP Live Streaming</comment>
-    <comment xml:lang="sl">Seznam predvajanja živega pretoka HTTP</comment>
-    <comment xml:lang="sr">ХТТП списак нумера Живог Протока</comment>
-    <comment xml:lang="sv">HTTP Live Streaming-spellista</comment>
-    <comment xml:lang="tr">HTTP Canlı Akış çalma listesi</comment>
-    <comment xml:lang="uk">список відтворення HTTP Live Streaming</comment>
-    <comment xml:lang="zh_CN">HTTP 实时流播放列表</comment>
-    <comment xml:lang="zh_TW">HTTP 即時串流播放清單</comment>
+    <comment>Media playlist</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.m3u"/>
     <glob pattern="*.m3u8"/>
     <magic priority="70">
-      <match value="#EXTM3U" type="string" offset="0">
-        <match value="#EXT-X-TARGETDURATION" type="string" offset="0:128"/>
-        <match value="#EXT-X-STREAM-INF" type="string" offset="0:128"/>
+      <match type="string" value="#EXTM3U" offset="0">
+        <match type="string" value="#EXT-X-TARGETDURATION" offset="0:128"/>
+        <match type="string" value="#EXT-X-STREAM-INF" offset="0:128"/>
       </match>
     </magic>
   </mime-type>
   <mime-type type="audio/x-ms-asx">
     <comment>Microsoft ASX playlist</comment>
     <comment xml:lang="ar">قائمة تشغيل مايكروسوفت ASX</comment>
-    <comment xml:lang="be@latin">Śpis Microsoft ASX</comment>
+    <comment xml:lang="be-Latn">Śpis Microsoft ASX</comment>
     <comment xml:lang="bg">Списък за изпълнение — Microsoft ASX</comment>
     <comment xml:lang="ca">llista de reproducció de Microsoft ASX</comment>
     <comment xml:lang="cs">seznam k přehrání Microsoft ASX</comment>
     <comment xml:lang="da">Microsoft ASX-afspilningsliste</comment>
     <comment xml:lang="de">Microsoft-ASX-Wiedergabeliste</comment>
     <comment xml:lang="el">Λίστα αναπαραγωγής Microsoft ASX</comment>
-    <comment xml:lang="en_GB">Microsoft ASX playlist</comment>
+    <comment xml:lang="en-GB">Microsoft ASX playlist</comment>
     <comment xml:lang="es">lista de reproducción ASX de Microsoft</comment>
     <comment xml:lang="eu">Microsoft ASX erreprodukzio-zerrenda</comment>
     <comment xml:lang="fi">Microsoft ASX -soittolista</comment>
     <comment xml:lang="fo">Microsoft ASX avspælingarlisti</comment>
     <comment xml:lang="fr">liste de lecture Microsoft ASX</comment>
+    <comment xml:lang="fur">liste di riproduzion Microsoft ASX</comment>
     <comment xml:lang="ga">seinmliosta Microsoft ASX</comment>
     <comment xml:lang="gl">lista de reprodución Microsoft ASX</comment>
     <comment xml:lang="he">רשימת השמעה ASX (מיקרוסופט)</comment>
@@ -23819,7 +24713,7 @@
     <comment xml:lang="oc">lista de lectura Microsoft ASX</comment>
     <comment xml:lang="pl">Lista odtwarzania Microsoft ASX</comment>
     <comment xml:lang="pt">lista de reprodução Microsoft ASX</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução do Microsoft ASX</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução do Microsoft ASX</comment>
     <comment xml:lang="ro">Listă redare Microsoft ASX</comment>
     <comment xml:lang="ru">Список воспроизведения Microsoft ASX</comment>
     <comment xml:lang="sk">Zoznam skladieb Microsoft ASX</comment>
@@ -23830,8 +24724,8 @@
     <comment xml:lang="tr">Microsoft ASX çalma listesi</comment>
     <comment xml:lang="uk">список відтворення ASX Microsoft</comment>
     <comment xml:lang="vi">Danh mục nhạc Microsoft ASX</comment>
-    <comment xml:lang="zh_CN">Microsoft ASX 播放列表</comment>
-    <comment xml:lang="zh_TW">微軟 ASX 播放清單</comment>
+    <comment xml:lang="zh-CN">Microsoft ASX 播放列表</comment>
+    <comment xml:lang="zh-TW">微軟 ASX 播放清單</comment>
     <alias type="video/x-ms-wvx"/>
     <alias type="video/x-ms-wax"/>
     <alias type="video/x-ms-wmx"/>
@@ -23841,29 +24735,31 @@
     <glob pattern="*.wvx"/>
     <glob pattern="*.wmx"/>
     <magic priority="51">
-      <match value="ASF " type="string" offset="0"/>
-      <match value="&lt;ASX" type="string" offset="0:64"/>
-      <match value="&lt;asx" type="string" offset="0:64"/>
-      <match value="&lt;Asx" type="string" offset="0:64"/>
+      <match type="string" value="ASF " offset="0"/>
+      <match type="string" value="&lt;ASX" offset="0:64"/>
+      <match type="string" value="&lt;asx" offset="0:64"/>
+      <match type="string" value="&lt;Asx" offset="0:64"/>
     </magic>
   </mime-type>
   <mime-type type="audio/x-psf">
     <comment>PSF audio</comment>
+    <comment xml:lang="af">PSF-oudio</comment>
     <comment xml:lang="ar">PSF سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo PSF</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo PSF</comment>
     <comment xml:lang="bg">Аудио — PSF</comment>
     <comment xml:lang="ca">àudio PSF</comment>
     <comment xml:lang="cs">zvuk PSF</comment>
     <comment xml:lang="da">PSF-lyd</comment>
     <comment xml:lang="de">PSF-Audio</comment>
     <comment xml:lang="el">Ήχος PSF</comment>
-    <comment xml:lang="en_GB">PSF audio</comment>
+    <comment xml:lang="en-GB">PSF audio</comment>
     <comment xml:lang="eo">PSF-sondosiero</comment>
-    <comment xml:lang="es">sonido PSF</comment>
+    <comment xml:lang="es">audio PSF</comment>
     <comment xml:lang="eu">PSF audioa</comment>
     <comment xml:lang="fi">PSF-ääni</comment>
     <comment xml:lang="fo">PSF ljóður</comment>
     <comment xml:lang="fr">audio PSF</comment>
+    <comment xml:lang="fur">audio PSF</comment>
     <comment xml:lang="ga">fuaim PSF</comment>
     <comment xml:lang="gl">son PSF</comment>
     <comment xml:lang="he">שמע PSF</comment>
@@ -23883,7 +24779,7 @@
     <comment xml:lang="oc">àudio PSF</comment>
     <comment xml:lang="pl">Plik dźwiękowy PSF</comment>
     <comment xml:lang="pt">áudio PSF</comment>
-    <comment xml:lang="pt_BR">Áudio PSF</comment>
+    <comment xml:lang="pt-BR">Áudio PSF</comment>
     <comment xml:lang="ro">Audio PSF</comment>
     <comment xml:lang="ru">Аудио PSF</comment>
     <comment xml:lang="sk">Zvuk PSF</comment>
@@ -23894,32 +24790,34 @@
     <comment xml:lang="tr">PSF sesi</comment>
     <comment xml:lang="uk">звук PSF</comment>
     <comment xml:lang="vi">Âm thanh PSF</comment>
-    <comment xml:lang="zh_CN">PSF 音频</comment>
-    <comment xml:lang="zh_TW">PSF 音訊</comment>
+    <comment xml:lang="zh-CN">PSF 音频</comment>
+    <comment xml:lang="zh-TW">PSF 音訊</comment>
     <acronym>PSF</acronym>
     <expanded-acronym>Portable Sound Format</expanded-acronym>
     <magic priority="50">
-      <match value="PSF" type="string" offset="0"/>
+      <match type="string" value="PSF" offset="0"/>
     </magic>
     <glob pattern="*.psf"/>
   </mime-type>
   <mime-type type="audio/x-minipsf">
     <comment>MiniPSF audio</comment>
+    <comment xml:lang="af">MiniPSF-oudio</comment>
     <comment xml:lang="ar">MiniPSF سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo MiniPSF</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo MiniPSF</comment>
     <comment xml:lang="bg">Аудио — MiniPSF</comment>
     <comment xml:lang="ca">àudio MiniPSF</comment>
     <comment xml:lang="cs">zvuk MiniPSF</comment>
     <comment xml:lang="da">MiniPSF-lyd</comment>
     <comment xml:lang="de">MiniPSF-Audio</comment>
     <comment xml:lang="el">Ήχος MiniPSF</comment>
-    <comment xml:lang="en_GB">MiniPSF audio</comment>
+    <comment xml:lang="en-GB">MiniPSF audio</comment>
     <comment xml:lang="eo">MiniPSF-sondosiero</comment>
-    <comment xml:lang="es">sonido MiniPSF</comment>
+    <comment xml:lang="es">audio MiniPSF</comment>
     <comment xml:lang="eu">MiniPSF audioa</comment>
     <comment xml:lang="fi">MiniPSF-ääni</comment>
     <comment xml:lang="fo">MiniPSF ljóður</comment>
     <comment xml:lang="fr">audio MiniPSF</comment>
+    <comment xml:lang="fur">audio MiniPSF</comment>
     <comment xml:lang="ga">fuaim MiniPSF</comment>
     <comment xml:lang="gl">son MiniPSF</comment>
     <comment xml:lang="he">שמע של MiniPSP</comment>
@@ -23940,7 +24838,7 @@
     <comment xml:lang="oc">àudio MiniPSF</comment>
     <comment xml:lang="pl">Plik dźwiękowy MiniPSF</comment>
     <comment xml:lang="pt">áudio MiniPSF</comment>
-    <comment xml:lang="pt_BR">Áudio MiniPSF</comment>
+    <comment xml:lang="pt-BR">Áudio MiniPSF</comment>
     <comment xml:lang="ro">Audio MiniPSF</comment>
     <comment xml:lang="ru">Аудио MiniPSF</comment>
     <comment xml:lang="sk">Zvuk MiniPSF</comment>
@@ -23951,8 +24849,8 @@
     <comment xml:lang="tr">MiniPSF sesi</comment>
     <comment xml:lang="uk">звук MiniPSF</comment>
     <comment xml:lang="vi">Âm thanh MiniPSF</comment>
-    <comment xml:lang="zh_CN">MiniPSF 音频</comment>
-    <comment xml:lang="zh_TW">MiniPSF 音訊</comment>
+    <comment xml:lang="zh-CN">MiniPSF 音频</comment>
+    <comment xml:lang="zh-TW">MiniPSF 音訊</comment>
     <acronym>MiniPSF</acronym>
     <expanded-acronym>Miniature Portable Sound Format</expanded-acronym>
     <sub-class-of type="audio/x-psf"/>
@@ -23960,20 +24858,22 @@
   </mime-type>
   <mime-type type="audio/x-psflib">
     <comment>PSFlib audio library</comment>
+    <comment xml:lang="af">PSFlib-oudiobiblioteek</comment>
     <comment xml:lang="ar">مكتبة PSFlib السمعية</comment>
-    <comment xml:lang="be@latin">Aŭdyjobiblijateka PSFlib</comment>
+    <comment xml:lang="be-Latn">Aŭdyjobiblijateka PSFlib</comment>
     <comment xml:lang="bg">Аудио библиотека — PSFlib</comment>
     <comment xml:lang="ca">biblioteca d'àudio PSFlib</comment>
     <comment xml:lang="cs">zvuková knihovna PSFlib</comment>
     <comment xml:lang="da">PSFlib-lydbibliotek</comment>
     <comment xml:lang="de">PSFlib-Audiobibliothek</comment>
     <comment xml:lang="el">Βιβλιοθήκη ήχου PSFlib</comment>
-    <comment xml:lang="en_GB">PSFlib audio library</comment>
-    <comment xml:lang="es">biblioteca de sonido PSFlib</comment>
+    <comment xml:lang="en-GB">PSFlib audio library</comment>
+    <comment xml:lang="es">biblioteca de audio PSFlib</comment>
     <comment xml:lang="eu">PSFlib audioaren liburutegia</comment>
     <comment xml:lang="fi">PSFlib-äänikirjasto</comment>
     <comment xml:lang="fo">PSFlib ljóðsavn</comment>
     <comment xml:lang="fr">bibliothèque audio PSFlib</comment>
+    <comment xml:lang="fur">librarie audio PSFlib</comment>
     <comment xml:lang="ga">leabharlann fhuaime PSFlib</comment>
     <comment xml:lang="gl">Biblioteca de son PSFlib</comment>
     <comment xml:lang="he">ספריית שמע PSFlib</comment>
@@ -23993,7 +24893,7 @@
     <comment xml:lang="oc">bibliotèca àudio PSFlib</comment>
     <comment xml:lang="pl">Biblioteka dźwiękowa PSFlib</comment>
     <comment xml:lang="pt">biblioteca áudio PSFlib</comment>
-    <comment xml:lang="pt_BR">Biblioteca de áudio PSFlib</comment>
+    <comment xml:lang="pt-BR">Biblioteca de áudio PSFlib</comment>
     <comment xml:lang="ro">Bibliotecă audio PSFlib</comment>
     <comment xml:lang="ru">Фонотека PSFlib</comment>
     <comment xml:lang="sk">Zvuková knižnica PSFlib</comment>
@@ -24004,8 +24904,8 @@
     <comment xml:lang="tr">PSFlib ses kitaplığı</comment>
     <comment xml:lang="uk">аудіобібліотека PSFlib</comment>
     <comment xml:lang="vi">Thư viện âm thanh PSFlib</comment>
-    <comment xml:lang="zh_CN">PSFlib 音频库</comment>
-    <comment xml:lang="zh_TW">PSFlib 音訊庫</comment>
+    <comment xml:lang="zh-CN">PSFlib 音频库</comment>
+    <comment xml:lang="zh-TW">PSFlib 音訊庫</comment>
     <acronym>PSFlib</acronym>
     <expanded-acronym>Portable Sound Format Library</expanded-acronym>
     <sub-class-of type="audio/x-psf"/>
@@ -24013,20 +24913,22 @@
   </mime-type>
   <mime-type type="audio/x-ms-wma">
     <comment>Windows Media audio</comment>
+    <comment xml:lang="af">Windows Media-oudio</comment>
     <comment xml:lang="ar">Windows Media سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Windows Media</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Windows Media</comment>
     <comment xml:lang="bg">Аудио — Windows Media</comment>
     <comment xml:lang="ca">àudio de Windows Media</comment>
     <comment xml:lang="cs">zvuk Windows Media</comment>
     <comment xml:lang="da">Windows Media-lyd</comment>
     <comment xml:lang="de">Windows-Media-Audio</comment>
     <comment xml:lang="el">Ήχος Windows Media</comment>
-    <comment xml:lang="en_GB">Windows Media audio</comment>
-    <comment xml:lang="es">sonido de Windows Media</comment>
+    <comment xml:lang="en-GB">Windows Media audio</comment>
+    <comment xml:lang="es">audio de Windows Media</comment>
     <comment xml:lang="eu">Windows Media audioa</comment>
     <comment xml:lang="fi">Windows Media -ääni</comment>
     <comment xml:lang="fo">Windows Media ljóður</comment>
     <comment xml:lang="fr">audio Windows Media</comment>
+    <comment xml:lang="fur">audio Windows Media</comment>
     <comment xml:lang="ga">fuaim Windows Media</comment>
     <comment xml:lang="gl">son de Windows Media</comment>
     <comment xml:lang="he">שמע של Windows Media</comment>
@@ -24046,7 +24948,7 @@
     <comment xml:lang="oc">àudio Windows Media</comment>
     <comment xml:lang="pl">Plik dźwiękowy Windows Media</comment>
     <comment xml:lang="pt">áudio Windows Media</comment>
-    <comment xml:lang="pt_BR">Áudio do Windows Media</comment>
+    <comment xml:lang="pt-BR">Áudio do Windows Media</comment>
     <comment xml:lang="ro">Audio Windows Media</comment>
     <comment xml:lang="ru">Аудио Windows Media</comment>
     <comment xml:lang="sk">Zvuk Windows Media</comment>
@@ -24057,28 +24959,30 @@
     <comment xml:lang="tr">Windows Media sesi</comment>
     <comment xml:lang="uk">звук Windows Media</comment>
     <comment xml:lang="vi">Âm thanh Windows Media</comment>
-    <comment xml:lang="zh_CN">Windows Media 音频</comment>
-    <comment xml:lang="zh_TW">Windows Media 音訊</comment>
+    <comment xml:lang="zh-CN">Windows Media 音频</comment>
+    <comment xml:lang="zh-TW">Windows Media 音訊</comment>
     <sub-class-of type="application/vnd.ms-asf"/>
     <glob pattern="*.wma"/>
     <alias type="audio/wma"/>
   </mime-type>
   <mime-type type="audio/x-musepack">
     <comment>Musepack audio</comment>
+    <comment xml:lang="af">Musepack-oudio</comment>
     <comment xml:lang="ar">Musepack سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Musepack</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Musepack</comment>
     <comment xml:lang="bg">Аудио — Musepack</comment>
     <comment xml:lang="ca">àudio de Musepack</comment>
     <comment xml:lang="cs">zvuk Musepack</comment>
-    <comment xml:lang="da">Musepacklyd</comment>
+    <comment xml:lang="da">Musepack-lyd</comment>
     <comment xml:lang="de">Musepack-Audio</comment>
     <comment xml:lang="el">Ήχος Musepack</comment>
-    <comment xml:lang="en_GB">Musepack audio</comment>
-    <comment xml:lang="es">sonido Musepack</comment>
+    <comment xml:lang="en-GB">Musepack audio</comment>
+    <comment xml:lang="es">audio Musepack</comment>
     <comment xml:lang="eu">Musepack audioa</comment>
     <comment xml:lang="fi">Musepack-ääni</comment>
     <comment xml:lang="fo">Musepack ljóður</comment>
     <comment xml:lang="fr">audio Musepack</comment>
+    <comment xml:lang="fur">audio Musepack</comment>
     <comment xml:lang="ga">fuaim Musepack</comment>
     <comment xml:lang="gl">son de Musepack</comment>
     <comment xml:lang="he">שמע של Musepack</comment>
@@ -24098,7 +25002,7 @@
     <comment xml:lang="oc">àudio Musepack</comment>
     <comment xml:lang="pl">Plik dźwiękowy Musepack</comment>
     <comment xml:lang="pt">áudio Musepack</comment>
-    <comment xml:lang="pt_BR">Áudio Musepack</comment>
+    <comment xml:lang="pt-BR">Áudio Musepack</comment>
     <comment xml:lang="ro">Audio Musepack</comment>
     <comment xml:lang="ru">Аудио Musepack</comment>
     <comment xml:lang="sk">Zvuk Musepack</comment>
@@ -24109,10 +25013,11 @@
     <comment xml:lang="tr">Musepack sesi</comment>
     <comment xml:lang="uk">звук Musepack</comment>
     <comment xml:lang="vi">Âm thanh Musepack</comment>
-    <comment xml:lang="zh_CN">Musepack 音频</comment>
-    <comment xml:lang="zh_TW">Musepack 音訊</comment>
+    <comment xml:lang="zh-CN">Musepack 音频</comment>
+    <comment xml:lang="zh-TW">Musepack 音訊</comment>
     <magic priority="50">
-      <match value="MP+" type="string" offset="0"/>
+      <match type="string" value="MP+" offset="0"/>
+      <match type="string" value="MPCK" offset="0"/>
     </magic>
     <glob pattern="*.mpc"/>
     <glob pattern="*.mpp"/>
@@ -24120,22 +25025,24 @@
   </mime-type>
   <mime-type type="audio/vnd.rn-realaudio">
     <comment>RealAudio document</comment>
+    <comment xml:lang="af">RealAudio-dokument</comment>
     <comment xml:lang="ar">مستند RealAudio</comment>
     <comment xml:lang="ast">Documentu RealAudio</comment>
-    <comment xml:lang="be@latin">Dakument RealAudio</comment>
+    <comment xml:lang="be-Latn">Dakument RealAudio</comment>
     <comment xml:lang="bg">Документ — RealAudio</comment>
     <comment xml:lang="ca">document RealAudio</comment>
     <comment xml:lang="cs">dokument RealAudio</comment>
     <comment xml:lang="da">RealAudio-dokument</comment>
     <comment xml:lang="de">RealAudio-Dokument</comment>
     <comment xml:lang="el">Έγγραφο RealAudio</comment>
-    <comment xml:lang="en_GB">RealAudio document</comment>
+    <comment xml:lang="en-GB">RealAudio document</comment>
     <comment xml:lang="eo">RealAudio-dokumento</comment>
     <comment xml:lang="es">documento RealAudio</comment>
     <comment xml:lang="eu">RealAudio dokumentua</comment>
     <comment xml:lang="fi">RealAudio-asiakirja</comment>
     <comment xml:lang="fo">RealAudio skjal</comment>
     <comment xml:lang="fr">document RealAudio</comment>
+    <comment xml:lang="fur">document RealAudio</comment>
     <comment xml:lang="ga">cáipéis RealAudio</comment>
     <comment xml:lang="gl">documento Realson</comment>
     <comment xml:lang="he">מסמך של RealAudio</comment>
@@ -24155,7 +25062,7 @@
     <comment xml:lang="oc">document RealAudio</comment>
     <comment xml:lang="pl">Dokument RealAudio</comment>
     <comment xml:lang="pt">documento RealAudio</comment>
-    <comment xml:lang="pt_BR">Documento RealAudio</comment>
+    <comment xml:lang="pt-BR">Documento RealAudio</comment>
     <comment xml:lang="ro">Document RealAudio</comment>
     <comment xml:lang="ru">Документ RealAudio</comment>
     <comment xml:lang="sk">Dokument RealAudio</comment>
@@ -24166,81 +25073,61 @@
     <comment xml:lang="tr">RealAudio belgesi</comment>
     <comment xml:lang="uk">документ RealAudio</comment>
     <comment xml:lang="vi">Tài liệu âm thanh RealAudio</comment>
-    <comment xml:lang="zh_CN">RealAudio 文档</comment>
-    <comment xml:lang="zh_TW">RealAudio 文件</comment>
+    <comment xml:lang="zh-CN">RealAudio 文档</comment>
+    <comment xml:lang="zh-TW">RealAudio 文件</comment>
     <glob pattern="*.ra"/>
     <glob pattern="*.rax"/>
     <alias type="audio/x-pn-realaudio"/>
     <alias type="audio/vnd.m-realaudio"/>
   </mime-type>
   <mime-type type="application/ram">
-    <comment>RealMedia Metafile</comment>
-    <comment xml:lang="ar">ملف تعريف RealMedia</comment>
-    <comment xml:lang="be@latin">Metafajł RealMedia</comment>
-    <comment xml:lang="bg">Метафайл — RealMedia</comment>
-    <comment xml:lang="ca">metafitxer RealMedia</comment>
-    <comment xml:lang="cs">RealMedia Metafile</comment>
-    <comment xml:lang="da">RealMedia-metafil</comment>
-    <comment xml:lang="de">RealMedia-Metadatei</comment>
-    <comment xml:lang="el">Metafile RealMedia</comment>
-    <comment xml:lang="en_GB">RealMedia Metafile</comment>
-    <comment xml:lang="es">metaarchivo RealMedia</comment>
-    <comment xml:lang="eu">RealMedia metafitxategia</comment>
-    <comment xml:lang="fi">RealMedia-metatiedosto</comment>
-    <comment xml:lang="fo">RealMedia metafíla</comment>
-    <comment xml:lang="fr">métafichier RealMedia</comment>
-    <comment xml:lang="ga">Meiteachomhad RealMedia</comment>
-    <comment xml:lang="gl">Metaficheiro RealMedia</comment>
-    <comment xml:lang="he">קובץ מטא של RealMedia</comment>
-    <comment xml:lang="hr">RealMedia meta datoteka</comment>
-    <comment xml:lang="hu">RealMedia metafájl</comment>
-    <comment xml:lang="ia">Metafile RealMedia</comment>
-    <comment xml:lang="id">RealMedia Metafile</comment>
-    <comment xml:lang="it">Metafile RealMedia</comment>
-    <comment xml:lang="ja">RealMedia メタファイル</comment>
-    <comment xml:lang="kk">RealMedia метафайлы</comment>
-    <comment xml:lang="ko">RealMedia 메타 파일</comment>
-    <comment xml:lang="lt">RealMedia metafailas</comment>
-    <comment xml:lang="lv">RealMedia metadatne</comment>
-    <comment xml:lang="nb">RealMedia-metafil</comment>
-    <comment xml:lang="nl">RealMedia-metabestand</comment>
-    <comment xml:lang="nn">RealMedia-metafil</comment>
-    <comment xml:lang="oc">metafichièr RealMedia</comment>
-    <comment xml:lang="pl">Metaplik RealMedia</comment>
-    <comment xml:lang="pt">metaficheiro RealMedia</comment>
-    <comment xml:lang="pt_BR">Meta arquivo do RealMedia</comment>
-    <comment xml:lang="ro">Metafișier RealMedia</comment>
-    <comment xml:lang="ru">Мета-файл RealMedia</comment>
-    <comment xml:lang="sk">RealMedia Metafile</comment>
-    <comment xml:lang="sl">Metadatoteka RealMedia</comment>
-    <comment xml:lang="sq">Metafile RealMedia</comment>
-    <comment xml:lang="sr">метадатотека Рил Медија</comment>
-    <comment xml:lang="sv">RealMedia-metafil</comment>
-    <comment xml:lang="tr">RealMedia Meta Dosyası</comment>
-    <comment xml:lang="uk">метафайл RealMedia</comment>
-    <comment xml:lang="vi">Siêu tập tin RealMedia</comment>
-    <comment xml:lang="zh_CN">RealMedia 元文件</comment>
-    <comment xml:lang="zh_TW">RealMedia 中介檔</comment>
+    <comment>RealMedia playlist</comment>
+    <comment xml:lang="bg">Списък за изпълнение — RealMedia</comment>
+    <comment xml:lang="ca">llista de reproducció RealMedia</comment>
+    <comment xml:lang="da">RealMedia-afspilningsliste</comment>
+    <comment xml:lang="de">RealMedia-Wiedergabeliste</comment>
+    <comment xml:lang="en-GB">RealMedia playlist</comment>
+    <comment xml:lang="es">lista de reproducción de RealMedia</comment>
+    <comment xml:lang="eu">RealMedia erreprodukzio-zerrenda</comment>
+    <comment xml:lang="fi">RealMedia-soittolista</comment>
+    <comment xml:lang="fr">liste de lecture RealMedia</comment>
+    <comment xml:lang="hr">RealMedia popis izvođenja</comment>
+    <comment xml:lang="hu">RealMedia lejátszólista</comment>
+    <comment xml:lang="id">Daftar putar RealMedia</comment>
+    <comment xml:lang="it">Playlist RealMedia</comment>
+    <comment xml:lang="kk">RealMedia ойнау тізімі</comment>
+    <comment xml:lang="ko">RealMedia 재생 목록</comment>
+    <comment xml:lang="pl">Lista odtwarzania RealMedia</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução do RealMedia</comment>
+    <comment xml:lang="ru">Список воспроизведения RealMedia</comment>
+    <comment xml:lang="sk">Zoznam skladieb RealMedia</comment>
+    <comment xml:lang="sv">RealMedia-spellista</comment>
+    <comment xml:lang="tr">RealMedia çalma listesi</comment>
+    <comment xml:lang="uk">список відтворення RealMedia</comment>
+    <comment xml:lang="zh-CN">RealMedia 播放列表</comment>
+    <comment xml:lang="zh-TW">RealMedia 播放清單</comment>
     <glob pattern="*.ram"/>
   </mime-type>
   <mime-type type="video/vnd.rn-realvideo">
     <comment>RealVideo document</comment>
+    <comment xml:lang="af">RealVideo-dokument</comment>
     <comment xml:lang="ar">مستند RealVideo</comment>
     <comment xml:lang="ast">Documentu RealVideo</comment>
-    <comment xml:lang="be@latin">Dakument RealVideo</comment>
+    <comment xml:lang="be-Latn">Dakument RealVideo</comment>
     <comment xml:lang="bg">Документ — RealVideo</comment>
     <comment xml:lang="ca">document RealVideo</comment>
     <comment xml:lang="cs">dokument RealVideo</comment>
     <comment xml:lang="da">RealAudio-dokument</comment>
     <comment xml:lang="de">RealVideo-Dokument</comment>
     <comment xml:lang="el">Έγγραφο RealVideo</comment>
-    <comment xml:lang="en_GB">RealVideo document</comment>
+    <comment xml:lang="en-GB">RealVideo document</comment>
     <comment xml:lang="eo">RealVideo-dokumento</comment>
     <comment xml:lang="es">documento RealVideo</comment>
     <comment xml:lang="eu">RealVideo dokumentua</comment>
     <comment xml:lang="fi">RealVideo-asiakirja</comment>
     <comment xml:lang="fo">RealVideo skjal</comment>
     <comment xml:lang="fr">document RealVideo</comment>
+    <comment xml:lang="fur">document RealVideo</comment>
     <comment xml:lang="ga">cáipéis RealVideo</comment>
     <comment xml:lang="gl">documento RealVideo</comment>
     <comment xml:lang="he">מסמך של RealVideo</comment>
@@ -24260,7 +25147,7 @@
     <comment xml:lang="oc">document RealVideo</comment>
     <comment xml:lang="pl">Dokument RealVideo</comment>
     <comment xml:lang="pt">documento RealVideo</comment>
-    <comment xml:lang="pt_BR">Documento RealVideo</comment>
+    <comment xml:lang="pt-BR">Documento RealVideo</comment>
     <comment xml:lang="ro">Document RealVideo</comment>
     <comment xml:lang="ru">Документ RealVideo</comment>
     <comment xml:lang="sk">Dokument RealVideo</comment>
@@ -24268,33 +25155,35 @@
     <comment xml:lang="sq">Dokument RealVideo</comment>
     <comment xml:lang="sr">документ Рил Видеа</comment>
     <comment xml:lang="sv">RealVideo-dokument</comment>
-    <comment xml:lang="tr">RealAudio belgesi</comment>
+    <comment xml:lang="tr">RealVideo belgesi</comment>
     <comment xml:lang="uk">документ RealVideo</comment>
     <comment xml:lang="vi">Tài liệu ảnh động RealVideo</comment>
-    <comment xml:lang="zh_CN">RealAudio 文档</comment>
-    <comment xml:lang="zh_TW">RealVideo 文件</comment>
+    <comment xml:lang="zh-CN">RealAudio 文档</comment>
+    <comment xml:lang="zh-TW">RealVideo 文件</comment>
     <glob pattern="*.rv"/>
     <glob pattern="*.rvx"/>
     <alias type="video/x-real-video"/>
   </mime-type>
   <mime-type type="application/vnd.rn-realmedia">
     <comment>RealMedia document</comment>
+    <comment xml:lang="af">RealMedia-dokument</comment>
     <comment xml:lang="ar">مستند RealMedia</comment>
     <comment xml:lang="ast">Documentu RealMedia</comment>
-    <comment xml:lang="be@latin">Dakument RealMedia</comment>
+    <comment xml:lang="be-Latn">Dakument RealMedia</comment>
     <comment xml:lang="bg">Документ — RealMedia</comment>
     <comment xml:lang="ca">document RealMedia</comment>
     <comment xml:lang="cs">dokument RealMedia</comment>
     <comment xml:lang="da">RealMedia-dokument</comment>
     <comment xml:lang="de">RealMedia-Dokument</comment>
     <comment xml:lang="el">Έγγραφο RealMedia</comment>
-    <comment xml:lang="en_GB">RealMedia document</comment>
+    <comment xml:lang="en-GB">RealMedia document</comment>
     <comment xml:lang="eo">RealMedia-dokumento</comment>
     <comment xml:lang="es">documento RealMedia</comment>
     <comment xml:lang="eu">RealMedia dokumentua</comment>
     <comment xml:lang="fi">RealMedia-asiakirja</comment>
     <comment xml:lang="fo">RealMedia skjal</comment>
     <comment xml:lang="fr">document RealMedia</comment>
+    <comment xml:lang="fur">document RealMedia</comment>
     <comment xml:lang="ga">cáipéis RealMedia</comment>
     <comment xml:lang="gl">documento RealMedia</comment>
     <comment xml:lang="he">מסמך של RealMedia</comment>
@@ -24314,7 +25203,7 @@
     <comment xml:lang="oc">document RealMedia</comment>
     <comment xml:lang="pl">Dokument RealMedia</comment>
     <comment xml:lang="pt">documento RealMedia</comment>
-    <comment xml:lang="pt_BR">Documento RealMedia</comment>
+    <comment xml:lang="pt-BR">Documento RealMedia</comment>
     <comment xml:lang="ro">Document RealMedia</comment>
     <comment xml:lang="ru">Документ RealMedia</comment>
     <comment xml:lang="sk">Dokument RealMedia</comment>
@@ -24325,11 +25214,11 @@
     <comment xml:lang="tr">RealMedia belgesi</comment>
     <comment xml:lang="uk">документ RealMedia</comment>
     <comment xml:lang="vi">Tài liệu RealMedia</comment>
-    <comment xml:lang="zh_CN">RealMedia 文档</comment>
-    <comment xml:lang="zh_TW">RealMedia 文件</comment>
+    <comment xml:lang="zh-CN">RealMedia 文档</comment>
+    <comment xml:lang="zh-TW">RealMedia 文件</comment>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      <match value=".RMF" type="string" offset="0"/>
+      <match type="string" value=".RMF" offset="0"/>
     </magic>
     <glob pattern="*.rm"/>
     <glob pattern="*.rmj"/>
@@ -24341,22 +25230,24 @@
   </mime-type>
   <mime-type type="image/vnd.rn-realpix">
     <comment>RealPix document</comment>
+    <comment xml:lang="af">RealPix-dokument</comment>
     <comment xml:lang="ar">مستند RealPix</comment>
     <comment xml:lang="ast">Documentu RealPix</comment>
-    <comment xml:lang="be@latin">Dakument RealPix</comment>
+    <comment xml:lang="be-Latn">Dakument RealPix</comment>
     <comment xml:lang="bg">Документ — RealPix</comment>
     <comment xml:lang="ca">document RealPix</comment>
     <comment xml:lang="cs">dokument RealPix</comment>
     <comment xml:lang="da">RealPix-dokument</comment>
     <comment xml:lang="de">RealPix-Dokument</comment>
     <comment xml:lang="el">Έγγραφο RealPix</comment>
-    <comment xml:lang="en_GB">RealPix document</comment>
+    <comment xml:lang="en-GB">RealPix document</comment>
     <comment xml:lang="eo">RealPix-dokumento</comment>
     <comment xml:lang="es">documento RealPix</comment>
     <comment xml:lang="eu">RealPix dokumentua</comment>
     <comment xml:lang="fi">RealPix-asiakirja</comment>
     <comment xml:lang="fo">RealPix skjal</comment>
     <comment xml:lang="fr">document RealPix</comment>
+    <comment xml:lang="fur">document RealPix</comment>
     <comment xml:lang="ga">cáipéis RealPix</comment>
     <comment xml:lang="gl">documento RealPix</comment>
     <comment xml:lang="he">מסמך של RealPix</comment>
@@ -24376,7 +25267,7 @@
     <comment xml:lang="oc">document RealPix</comment>
     <comment xml:lang="pl">Dokument RealPix</comment>
     <comment xml:lang="pt">documento RealPix</comment>
-    <comment xml:lang="pt_BR">Documento RealPix</comment>
+    <comment xml:lang="pt-BR">Documento RealPix</comment>
     <comment xml:lang="ro">Document RealPix</comment>
     <comment xml:lang="ru">Документ RealPix</comment>
     <comment xml:lang="sk">Dokument RealPix</comment>
@@ -24387,28 +25278,30 @@
     <comment xml:lang="tr">RealPix belgesi</comment>
     <comment xml:lang="uk">документ RealPix</comment>
     <comment xml:lang="vi">Tài liệu ảnh RealPix</comment>
-    <comment xml:lang="zh_CN">RealPix 文档</comment>
-    <comment xml:lang="zh_TW">RealPix 文件</comment>
+    <comment xml:lang="zh-CN">RealPix 文档</comment>
+    <comment xml:lang="zh-TW">RealPix 文件</comment>
     <glob pattern="*.rp"/>
   </mime-type>
   <mime-type type="text/vnd.rn-realtext">
     <comment>RealText document</comment>
+    <comment xml:lang="af">RealText-dokument</comment>
     <comment xml:lang="ar">مستند RealText</comment>
     <comment xml:lang="ast">Documentu RealText</comment>
-    <comment xml:lang="be@latin">Dakument RealText</comment>
+    <comment xml:lang="be-Latn">Dakument RealText</comment>
     <comment xml:lang="bg">Документ — RealText</comment>
     <comment xml:lang="ca">document RealText</comment>
     <comment xml:lang="cs">dokument RealText</comment>
     <comment xml:lang="da">RealText-dokument</comment>
     <comment xml:lang="de">RealText-Dokument</comment>
     <comment xml:lang="el">Έγγραφο RealText</comment>
-    <comment xml:lang="en_GB">RealText document</comment>
+    <comment xml:lang="en-GB">RealText document</comment>
     <comment xml:lang="eo">RealText-dokumento</comment>
     <comment xml:lang="es">documento RealText</comment>
     <comment xml:lang="eu">RealText dokumentua</comment>
     <comment xml:lang="fi">RealText-asiakirja</comment>
     <comment xml:lang="fo">RealText skjal</comment>
     <comment xml:lang="fr">document RealText</comment>
+    <comment xml:lang="fur">document RealText</comment>
     <comment xml:lang="ga">cáipéis RealText</comment>
     <comment xml:lang="gl">documento RealText</comment>
     <comment xml:lang="he">מסמך של RealText</comment>
@@ -24428,7 +25321,7 @@
     <comment xml:lang="oc">document RealText</comment>
     <comment xml:lang="pl">Dokument RealText</comment>
     <comment xml:lang="pt">documento RealText</comment>
-    <comment xml:lang="pt_BR">Documento RealText</comment>
+    <comment xml:lang="pt-BR">Documento RealText</comment>
     <comment xml:lang="ro">Document RealText</comment>
     <comment xml:lang="ru">Документ RealText</comment>
     <comment xml:lang="sk">Dokument RealText</comment>
@@ -24439,15 +25332,16 @@
     <comment xml:lang="tr">RealText belgesi</comment>
     <comment xml:lang="uk">документ RealText</comment>
     <comment xml:lang="vi">Tài liệu văn bản RealText</comment>
-    <comment xml:lang="zh_CN">RealText 文档</comment>
-    <comment xml:lang="zh_TW">RealText 文件</comment>
+    <comment xml:lang="zh-CN">RealText 文档</comment>
+    <comment xml:lang="zh-TW">RealText 文件</comment>
     <glob pattern="*.rt"/>
   </mime-type>
   <mime-type type="audio/x-riff">
     <comment>RIFF audio</comment>
+    <comment xml:lang="af">RIFF-oudio</comment>
     <comment xml:lang="ar">RIFF سمعي</comment>
     <comment xml:lang="az">RIFF audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo RIFF</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo RIFF</comment>
     <comment xml:lang="bg">Аудио — RIFF</comment>
     <comment xml:lang="ca">àudio RIFF</comment>
     <comment xml:lang="cs">zvuk RIFF</comment>
@@ -24455,13 +25349,14 @@
     <comment xml:lang="da">RIFF-lyd</comment>
     <comment xml:lang="de">RIFF-Audio</comment>
     <comment xml:lang="el">Ήχος RIFF</comment>
-    <comment xml:lang="en_GB">RIFF audio</comment>
+    <comment xml:lang="en-GB">RIFF audio</comment>
     <comment xml:lang="eo">RIFF-sondosiero</comment>
-    <comment xml:lang="es">sonido RIFF</comment>
+    <comment xml:lang="es">audio RIFF</comment>
     <comment xml:lang="eu">RIFF audioa</comment>
     <comment xml:lang="fi">RIFF-ääni</comment>
     <comment xml:lang="fo">RIFF ljóð</comment>
     <comment xml:lang="fr">audio RIFF</comment>
+    <comment xml:lang="fur">audio RIFF</comment>
     <comment xml:lang="ga">fuaim RIFF</comment>
     <comment xml:lang="gl">son RIFF</comment>
     <comment xml:lang="he">שמע RIFF</comment>
@@ -24482,7 +25377,7 @@
     <comment xml:lang="oc">àudio RIFF</comment>
     <comment xml:lang="pl">Plik dźwiękowy RIFF</comment>
     <comment xml:lang="pt">áudio RIFF</comment>
-    <comment xml:lang="pt_BR">Áudio RIFF</comment>
+    <comment xml:lang="pt-BR">Áudio RIFF</comment>
     <comment xml:lang="ro">Audio RIFF</comment>
     <comment xml:lang="ru">Аудио RIFF</comment>
     <comment xml:lang="sk">Zvuk RIFF</comment>
@@ -24493,20 +25388,24 @@
     <comment xml:lang="tr">RIFF sesi</comment>
     <comment xml:lang="uk">звук RIFF</comment>
     <comment xml:lang="vi">Âm thanh RIFF</comment>
-    <comment xml:lang="zh_CN">RIFF 音频</comment>
-    <comment xml:lang="zh_TW">RIFF 音訊</comment>
+    <comment xml:lang="zh-CN">RIFF 音频</comment>
+    <comment xml:lang="zh-TW">RIFF 音訊</comment>
   </mime-type>
   <mime-type type="application/x-riff">
     <comment>RIFF container</comment>
+    <comment xml:lang="af">RIFF-houer</comment>
+    <comment xml:lang="bg">Контейнер — RIFF</comment>
     <comment xml:lang="ca">contenidor RIFF</comment>
     <comment xml:lang="cs">kontejner RIFF</comment>
     <comment xml:lang="da">RIFF-container</comment>
     <comment xml:lang="de">RIFF-Container</comment>
     <comment xml:lang="el">Περιέκτης RIFF</comment>
-    <comment xml:lang="en_GB">RIFF container</comment>
+    <comment xml:lang="en-GB">RIFF container</comment>
     <comment xml:lang="es">contenedor RIFF</comment>
     <comment xml:lang="eu">RIFF edukitzailea</comment>
+    <comment xml:lang="fi">RIFF-kontti</comment>
     <comment xml:lang="fr">conteneur RIFF</comment>
+    <comment xml:lang="fur">contignidôr RIFF</comment>
     <comment xml:lang="ga">coimeádán RIFF</comment>
     <comment xml:lang="gl">Contenedor RIFF</comment>
     <comment xml:lang="he">מכולת RIFF</comment>
@@ -24520,7 +25419,7 @@
     <comment xml:lang="oc">contenidor RIFF</comment>
     <comment xml:lang="pl">Kontener RIFF</comment>
     <comment xml:lang="pt">contentor RIFF</comment>
-    <comment xml:lang="pt_BR">Contêiner RIFF</comment>
+    <comment xml:lang="pt-BR">Contêiner RIFF</comment>
     <comment xml:lang="ru">Контейнер RIFF</comment>
     <comment xml:lang="sk">Kontajner RIFF</comment>
     <comment xml:lang="sl">Vsebnik RIFF</comment>
@@ -24528,18 +25427,18 @@
     <comment xml:lang="sv">RIFF-behållare</comment>
     <comment xml:lang="tr">RIFF deposu</comment>
     <comment xml:lang="uk">контейнер RIFF</comment>
-    <comment xml:lang="zh_CN">RIFF 容器</comment>
-    <comment xml:lang="zh_TW">RIFF 容器</comment>
-    
+    <comment xml:lang="zh-CN">RIFF 容器</comment>
+    <comment xml:lang="zh-TW">RIFF 容器</comment>
+    <!-- need to be lower prio than avi -->
     <magic priority="45">
-      <match value="RIFF" type="string" offset="0"/>
+      <match type="string" value="RIFF" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="audio/x-s3m">
     <comment>Scream Tracker 3 audio</comment>
     <comment xml:lang="ar">Scream Tracker 3 سمعي</comment>
     <comment xml:lang="az">Scream Tracker 3 audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Scream Tracker 3</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Scream Tracker 3</comment>
     <comment xml:lang="bg">Аудио — Scream Tracker 3</comment>
     <comment xml:lang="ca">àudio de Scream Tracker 3</comment>
     <comment xml:lang="cs">skladba Scream Tracker 3</comment>
@@ -24547,13 +25446,14 @@
     <comment xml:lang="da">Scream Tracker 3-lyd</comment>
     <comment xml:lang="de">Scream-Tracker-3-Audio</comment>
     <comment xml:lang="el">Ήχος Scream Tracker 3</comment>
-    <comment xml:lang="en_GB">Scream Tracker 3 audio</comment>
+    <comment xml:lang="en-GB">Scream Tracker 3 audio</comment>
     <comment xml:lang="eo">Sondosiero de Scream Tracker 3</comment>
-    <comment xml:lang="es">sonido Scream Tracker 3</comment>
+    <comment xml:lang="es">audio Scream Tracker 3</comment>
     <comment xml:lang="eu">Scream Tracker 3 audioa</comment>
     <comment xml:lang="fi">Scream Tracker 3 -ääni</comment>
     <comment xml:lang="fo">Scream Tracker 3 ljóður</comment>
     <comment xml:lang="fr">audio Scream Tracker 3</comment>
+    <comment xml:lang="fur">audio Scream Tracker 3</comment>
     <comment xml:lang="ga">fuaim Scream Tracker 3</comment>
     <comment xml:lang="gl">son Scream Tracker 3</comment>
     <comment xml:lang="he">שמע של Scream Tracker 3</comment>
@@ -24574,7 +25474,7 @@
     <comment xml:lang="oc">àudio Scream Tracker 3</comment>
     <comment xml:lang="pl">Plik dźwiękowy Scream Tracker 3</comment>
     <comment xml:lang="pt">áudio Scream Tracker 3</comment>
-    <comment xml:lang="pt_BR">Áudio Scream Tracker 3</comment>
+    <comment xml:lang="pt-BR">Áudio Scream Tracker 3</comment>
     <comment xml:lang="ro">Audio Scream Tracker 3</comment>
     <comment xml:lang="ru">Аудио Scream Tracker 3</comment>
     <comment xml:lang="sk">Skladba Scream Tracker 3</comment>
@@ -24585,8 +25485,8 @@
     <comment xml:lang="tr">Scream Tracker 3 sesi</comment>
     <comment xml:lang="uk">звук Scream Tracker 3</comment>
     <comment xml:lang="vi">Âm thanh Scream Tracker 3</comment>
-    <comment xml:lang="zh_CN">Scheme Tracker 3 音频</comment>
-    <comment xml:lang="zh_TW">Scream Tracker 3 音訊</comment>
+    <comment xml:lang="zh-CN">Scheme Tracker 3 音频</comment>
+    <comment xml:lang="zh-TW">Scream Tracker 3 音訊</comment>
     <magic priority="50">
       <match value="SCRM" type="string" offset="44"/>
     </magic>
@@ -24595,20 +25495,21 @@
   <mime-type type="audio/x-scpls">
     <comment>MP3 ShoutCast playlist</comment>
     <comment xml:lang="ar">قائمة تشغيل MP3 ShoutCast</comment>
-    <comment xml:lang="be@latin">Śpis piesień dla tranślacyi MP3</comment>
+    <comment xml:lang="be-Latn">Śpis piesień dla tranślacyi MP3</comment>
     <comment xml:lang="bg">Списък за изпълнение — MP3 ShoutCast</comment>
     <comment xml:lang="ca">llista de reproducció MP3 ShoutCast</comment>
     <comment xml:lang="cs">seznam k přehrání MP3 ShoutCast</comment>
     <comment xml:lang="da">MP3 ShoutCast-afspilningsliste</comment>
     <comment xml:lang="de">MP3-ShoutCast-Wiedergabeliste</comment>
     <comment xml:lang="el">Λίστα αναπαραγωγής MP3 ShoutCast</comment>
-    <comment xml:lang="en_GB">MP3 ShoutCast playlist</comment>
+    <comment xml:lang="en-GB">MP3 ShoutCast playlist</comment>
     <comment xml:lang="eo">MP3-ludlisto de ShoutCast</comment>
     <comment xml:lang="es">lista de reproducción MP3 ShoutCast</comment>
     <comment xml:lang="eu">MP3 ShoutCast erreprodukzio-zerrenda</comment>
     <comment xml:lang="fi">MP3 ShoutCast -soittolista</comment>
     <comment xml:lang="fo">MP3 ShoutCast avspælingarlisti</comment>
     <comment xml:lang="fr">liste de lecture MP3 ShoutCast</comment>
+    <comment xml:lang="fur">liste di riproduzion MP3 ShoutCast</comment>
     <comment xml:lang="ga">seinmliosta MP3 ShoutCast</comment>
     <comment xml:lang="gl">lista de reprodución MP3 de ShoutCast</comment>
     <comment xml:lang="he">רשימת השמעה MP3 של ShoutCast</comment>
@@ -24629,7 +25530,7 @@
     <comment xml:lang="oc">lista de lectura MP3 ShoutCast</comment>
     <comment xml:lang="pl">Lista odtwarzania MP3 ShoutCast</comment>
     <comment xml:lang="pt">lista de reprodução MP3 ShoutCast</comment>
-    <comment xml:lang="pt_BR">Lista de reprodução MP3 ShoutCast</comment>
+    <comment xml:lang="pt-BR">Lista de reprodução MP3 ShoutCast</comment>
     <comment xml:lang="ro">Listă MP3 ShoutCast</comment>
     <comment xml:lang="ru">Список воспроизведения MP3 ShoutCast</comment>
     <comment xml:lang="sk">Zoznam skladieb MP3 ShoutCast</comment>
@@ -24640,14 +25541,14 @@
     <comment xml:lang="tr">MP3 ShoutCast çalma listesi</comment>
     <comment xml:lang="uk">список програвання MP3 ShoutCast</comment>
     <comment xml:lang="vi">Danh mục nhạc MP3 ShoutCast</comment>
-    <comment xml:lang="zh_CN">MP3 ShoutCast 播放列表</comment>
-    <comment xml:lang="zh_TW">MP3 ShoutCast 播放清單</comment>
+    <comment xml:lang="zh-CN">MP3 ShoutCast 播放列表</comment>
+    <comment xml:lang="zh-TW">MP3 ShoutCast 播放清單</comment>
     <alias type="application/pls"/>
     <alias type="audio/scpls"/>
     <magic priority="50">
-      <match value="[playlist]" type="string" offset="0"/>
-      <match value="[Playlist]" type="string" offset="0"/>
-      <match value="[PLAYLIST]" type="string" offset="0"/>
+      <match type="string" value="[playlist]" offset="0"/>
+      <match type="string" value="[Playlist]" offset="0"/>
+      <match type="string" value="[PLAYLIST]" offset="0"/>
     </magic>
     <glob pattern="*.pls"/>
   </mime-type>
@@ -24655,7 +25556,7 @@
     <comment>Scream Tracker audio</comment>
     <comment xml:lang="ar">Scream Tracker سمعي</comment>
     <comment xml:lang="az">Scream Tracker audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo Scream Tracker</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo Scream Tracker</comment>
     <comment xml:lang="bg">Аудио — Scream Tracker</comment>
     <comment xml:lang="ca">àudio de Scream Tracker</comment>
     <comment xml:lang="cs">skladba Scream Tracker</comment>
@@ -24663,13 +25564,14 @@
     <comment xml:lang="da">Scream Tracker-lyd</comment>
     <comment xml:lang="de">Scream-Tracker-Audio</comment>
     <comment xml:lang="el">Ήχος Scream Tracker</comment>
-    <comment xml:lang="en_GB">Scream Tracker audio</comment>
+    <comment xml:lang="en-GB">Scream Tracker audio</comment>
     <comment xml:lang="eo">Sondosiero de Scream Tracker</comment>
-    <comment xml:lang="es">sonido Scream Tracker</comment>
+    <comment xml:lang="es">audio Scream Tracker</comment>
     <comment xml:lang="eu">Scream Tracker audioa</comment>
     <comment xml:lang="fi">Scream Tracker -ääni</comment>
     <comment xml:lang="fo">Scream Tracker ljóður</comment>
     <comment xml:lang="fr">audio Scream Tracker</comment>
+    <comment xml:lang="fur">audio Scream Tracker</comment>
     <comment xml:lang="ga">fuaim Scream Tracker</comment>
     <comment xml:lang="gl">son Scream Tracker</comment>
     <comment xml:lang="he">שמע של Scream Tracker</comment>
@@ -24690,7 +25592,7 @@
     <comment xml:lang="oc">àudio Scream Tracker</comment>
     <comment xml:lang="pl">Plik dźwiękowy Scream Tracker</comment>
     <comment xml:lang="pt">áudio Scream Tracker</comment>
-    <comment xml:lang="pt_BR">Áudio Scream Tracker</comment>
+    <comment xml:lang="pt-BR">Áudio Scream Tracker</comment>
     <comment xml:lang="ro">Audio Scream Tracker</comment>
     <comment xml:lang="ru">Аудио Scream Tracker</comment>
     <comment xml:lang="sk">Skladba Scream Tracker</comment>
@@ -24701,20 +25603,21 @@
     <comment xml:lang="tr">Scream Tracker sesi</comment>
     <comment xml:lang="uk">звук Scream Tracker</comment>
     <comment xml:lang="vi">Âm thanh Scream Tracker</comment>
-    <comment xml:lang="zh_CN">Scream Tracker 音频</comment>
-    <comment xml:lang="zh_TW">Scream Tracker 音訊</comment>
+    <comment xml:lang="zh-CN">Scream Tracker 音频</comment>
+    <comment xml:lang="zh-TW">Scream Tracker 音訊</comment>
     <magic>
-      <match value="!Scream!\x1A" type="string" offset="20"/>
-      <match value="!SCREAM!\x1A" type="string" offset="20"/>
-      <match value="BMOD2STM\x1A" type="string" offset="20"/>
+      <match type="string" value="!Scream!\x1A" offset="20"/>
+      <match type="string" value="!SCREAM!\x1A" offset="20"/>
+      <match type="string" value="BMOD2STM\x1A" offset="20"/>
     </magic>
     <glob pattern="*.stm"/>
   </mime-type>
   <mime-type type="audio/x-voc">
     <comment>VOC audio</comment>
+    <comment xml:lang="af">VOC-oudio</comment>
     <comment xml:lang="ar">VOC سمعي</comment>
     <comment xml:lang="az">VOC audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo VOC</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo VOC</comment>
     <comment xml:lang="bg">Аудио — VOC</comment>
     <comment xml:lang="ca">àudio VOC</comment>
     <comment xml:lang="cs">zvuk VOC</comment>
@@ -24722,13 +25625,14 @@
     <comment xml:lang="da">VOC-lyd</comment>
     <comment xml:lang="de">VOC-Audio</comment>
     <comment xml:lang="el">Ήχος VOC</comment>
-    <comment xml:lang="en_GB">VOC audio</comment>
+    <comment xml:lang="en-GB">VOC audio</comment>
     <comment xml:lang="eo">VOC-sondosiero</comment>
-    <comment xml:lang="es">sonido VOC</comment>
+    <comment xml:lang="es">audio VOC</comment>
     <comment xml:lang="eu">VOC audioa</comment>
     <comment xml:lang="fi">VOC-ääni</comment>
     <comment xml:lang="fo">VOC ljóður</comment>
     <comment xml:lang="fr">audio VOC</comment>
+    <comment xml:lang="fur">audio VOC</comment>
     <comment xml:lang="ga">fuaim VOC</comment>
     <comment xml:lang="gl">son VOC</comment>
     <comment xml:lang="he">שמע VOC</comment>
@@ -24749,7 +25653,7 @@
     <comment xml:lang="oc">àudio VOC</comment>
     <comment xml:lang="pl">Plik dźwiękowy VOC</comment>
     <comment xml:lang="pt">áudio VOC</comment>
-    <comment xml:lang="pt_BR">Áudio VOC</comment>
+    <comment xml:lang="pt-BR">Áudio VOC</comment>
     <comment xml:lang="ro">Audio VOC</comment>
     <comment xml:lang="ru">Аудио VOC</comment>
     <comment xml:lang="sk">Zvuk VOC</comment>
@@ -24760,15 +25664,16 @@
     <comment xml:lang="tr">VOC sesi</comment>
     <comment xml:lang="uk">звук VOC</comment>
     <comment xml:lang="vi">Âm thanh VOC</comment>
-    <comment xml:lang="zh_CN">VOC 音频</comment>
-    <comment xml:lang="zh_TW">VOC 音訊</comment>
+    <comment xml:lang="zh-CN">VOC 音频</comment>
+    <comment xml:lang="zh-TW">VOC 音訊</comment>
     <glob pattern="*.voc"/>
   </mime-type>
   <mime-type type="audio/x-wav">
     <comment>WAV audio</comment>
+    <comment xml:lang="af">WAV-oudio</comment>
     <comment xml:lang="ar">WAV سمعي</comment>
     <comment xml:lang="az">WAV audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo WAV</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo WAV</comment>
     <comment xml:lang="bg">Аудио — WAV</comment>
     <comment xml:lang="ca">àudio WAV</comment>
     <comment xml:lang="cs">zvuk WAV</comment>
@@ -24776,13 +25681,14 @@
     <comment xml:lang="da">WAV-lyd</comment>
     <comment xml:lang="de">WAV-Audio</comment>
     <comment xml:lang="el">Ήχος WAV</comment>
-    <comment xml:lang="en_GB">WAV audio</comment>
+    <comment xml:lang="en-GB">WAV audio</comment>
     <comment xml:lang="eo">WAV-sonkodo</comment>
-    <comment xml:lang="es">sonido WAV</comment>
+    <comment xml:lang="es">audio WAV</comment>
     <comment xml:lang="eu">WAV audioa</comment>
     <comment xml:lang="fi">WAV-ääni</comment>
     <comment xml:lang="fo">WAV ljóður</comment>
     <comment xml:lang="fr">audio WAV</comment>
+    <comment xml:lang="fur">audio WAV</comment>
     <comment xml:lang="ga">fuaim WAV</comment>
     <comment xml:lang="gl">son WAV</comment>
     <comment xml:lang="he">שמע WAV</comment>
@@ -24803,7 +25709,7 @@
     <comment xml:lang="oc">àudio WAV</comment>
     <comment xml:lang="pl">Plik dźwiękowy WAV</comment>
     <comment xml:lang="pt">áudio WAV</comment>
-    <comment xml:lang="pt_BR">Áudio WAV</comment>
+    <comment xml:lang="pt-BR">Áudio WAV</comment>
     <comment xml:lang="ro">Audio WAV</comment>
     <comment xml:lang="ru">Аудио WAV</comment>
     <comment xml:lang="sk">Zvuk WAV</comment>
@@ -24814,13 +25720,13 @@
     <comment xml:lang="tr">WAV sesi</comment>
     <comment xml:lang="uk">звук WAV</comment>
     <comment xml:lang="vi">Âm thanh WAV</comment>
-    <comment xml:lang="zh_CN">WAV 音频</comment>
-    <comment xml:lang="zh_TW">WAV 音訊</comment>
+    <comment xml:lang="zh-CN">WAV 音频</comment>
+    <comment xml:lang="zh-TW">WAV 音訊</comment>
     <alias type="audio/wav"/>
     <alias type="audio/vnd.wave"/>
     <magic priority="50">
-      <match value="WAVE" type="string" offset="8"/>
-      <match value="WAV " type="string" offset="8"/>
+      <match type="string" value="WAVE" offset="8"/>
+      <match type="string" value="WAV " offset="8"/>
     </magic>
     <glob pattern="*.wav"/>
   </mime-type>
@@ -24828,7 +25734,7 @@
     <comment>Scream Tracker instrument</comment>
     <comment xml:lang="ar">آلة Scream Tracker</comment>
     <comment xml:lang="az">Scream Tracker instrumenti</comment>
-    <comment xml:lang="be@latin">Instrument Scream Tracker</comment>
+    <comment xml:lang="be-Latn">Instrument Scream Tracker</comment>
     <comment xml:lang="bg">Инструмент — Scream Tracker</comment>
     <comment xml:lang="ca">instrument de Scream Tracker</comment>
     <comment xml:lang="cs">nástroj pro Scream Tracker</comment>
@@ -24836,13 +25742,14 @@
     <comment xml:lang="da">Scream Tracker-instrument</comment>
     <comment xml:lang="de">Scream-Tracker-Instrument</comment>
     <comment xml:lang="el">Μουσικό όργανο Scream Tracker</comment>
-    <comment xml:lang="en_GB">Scream Tracker instrument</comment>
+    <comment xml:lang="en-GB">Scream Tracker instrument</comment>
     <comment xml:lang="eo">instrumento de Scream Tracker</comment>
     <comment xml:lang="es">instrumento Scream Tracker</comment>
     <comment xml:lang="eu">Scream Tracker instrumentua</comment>
     <comment xml:lang="fi">Scream Tracker -soitin</comment>
     <comment xml:lang="fo">Scream Tracker ljóðføri</comment>
     <comment xml:lang="fr">instrument Scream Tracker</comment>
+    <comment xml:lang="fur">strument Scream Tracker</comment>
     <comment xml:lang="ga">ionstraim Scream Tracker</comment>
     <comment xml:lang="gl">Instrumento Scream Tracker</comment>
     <comment xml:lang="he">כלי של Scream Tracker</comment>
@@ -24863,7 +25770,7 @@
     <comment xml:lang="oc">instrument Scream Tracker</comment>
     <comment xml:lang="pl">Instrument Scream Tracker</comment>
     <comment xml:lang="pt">instrumento Scream Tracker</comment>
-    <comment xml:lang="pt_BR">Instrumento Scream Tracker</comment>
+    <comment xml:lang="pt-BR">Instrumento Scream Tracker</comment>
     <comment xml:lang="ro">Instrument Scream Tracker</comment>
     <comment xml:lang="ru">Инструмент Scream Tracker</comment>
     <comment xml:lang="sk">Nástroj pre Scream Tracker</comment>
@@ -24874,8 +25781,8 @@
     <comment xml:lang="tr">Scream Tracker çalgısı</comment>
     <comment xml:lang="uk">інструмент Scream Tracker</comment>
     <comment xml:lang="vi">Nhạc khí Scream Tracker</comment>
-    <comment xml:lang="zh_CN">Scream Tracker 乐器</comment>
-    <comment xml:lang="zh_TW">Scream Tracker 樂器檔</comment>
+    <comment xml:lang="zh-CN">Scream Tracker 乐器</comment>
+    <comment xml:lang="zh-TW">Scream Tracker 樂器檔</comment>
     <magic priority="50">
       <match value="Extended Instrument:" type="string" offset="0"/>
     </magic>
@@ -24885,7 +25792,7 @@
     <comment>FastTracker II audio</comment>
     <comment xml:lang="ar">FastTracker II سمعي</comment>
     <comment xml:lang="az">FastTracker II audio faylı</comment>
-    <comment xml:lang="be@latin">Aŭdyjo FastTracker II</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo FastTracker II</comment>
     <comment xml:lang="bg">Аудио — FastTracker II</comment>
     <comment xml:lang="ca">àudio de FastTracker II</comment>
     <comment xml:lang="cs">zvuk FastTracker II</comment>
@@ -24893,13 +25800,14 @@
     <comment xml:lang="da">FastTracker II-lyd</comment>
     <comment xml:lang="de">FastTracker-II-Audio</comment>
     <comment xml:lang="el">Ήχος FastTracker II</comment>
-    <comment xml:lang="en_GB">FastTracker II audio</comment>
+    <comment xml:lang="en-GB">FastTracker II audio</comment>
     <comment xml:lang="eo">Sondosiero de FastTracker II</comment>
-    <comment xml:lang="es">sonido FastTracker II</comment>
+    <comment xml:lang="es">audio FastTracker II</comment>
     <comment xml:lang="eu">FastTracker II.ren audioa</comment>
     <comment xml:lang="fi">FastTracker II -ääni</comment>
     <comment xml:lang="fo">FastTracker II ljóður</comment>
     <comment xml:lang="fr">audio FastTracker II</comment>
+    <comment xml:lang="fur">audio FastTracker II</comment>
     <comment xml:lang="ga">fuaim FastTracker II</comment>
     <comment xml:lang="gl">son de FastTracker II</comment>
     <comment xml:lang="he">שמע FastTracker II</comment>
@@ -24921,7 +25829,7 @@
     <comment xml:lang="oc">àudio FastTracker II</comment>
     <comment xml:lang="pl">Plik dźwiękowy FastTracker II</comment>
     <comment xml:lang="pt">áudio FastTracker II</comment>
-    <comment xml:lang="pt_BR">Áudio FastTracker II</comment>
+    <comment xml:lang="pt-BR">Áudio FastTracker II</comment>
     <comment xml:lang="ro">Audio FastTracker II</comment>
     <comment xml:lang="ru">Аудио FastTracker II</comment>
     <comment xml:lang="sk">Zvuk FastTracker II</comment>
@@ -24932,8 +25840,8 @@
     <comment xml:lang="tr">FastTracker II sesi</comment>
     <comment xml:lang="uk">звук FastTracker II</comment>
     <comment xml:lang="vi">Âm thanh FastTracker II</comment>
-    <comment xml:lang="zh_CN">FastTracker II 音频</comment>
-    <comment xml:lang="zh_TW">FastTracker II 音訊</comment>
+    <comment xml:lang="zh-CN">FastTracker II 音频</comment>
+    <comment xml:lang="zh-TW">FastTracker II 音訊</comment>
     <magic priority="50">
       <match value="Extended Module:" type="string" offset="0"/>
     </magic>
@@ -24941,21 +25849,23 @@
   </mime-type>
   <mime-type type="audio/x-tta">
     <comment>TrueAudio audio</comment>
+    <comment xml:lang="af">TrueAudio-oudio</comment>
     <comment xml:lang="ar">TrueAudio سمعي</comment>
-    <comment xml:lang="be@latin">Aŭdyjo TrueAudio</comment>
+    <comment xml:lang="be-Latn">Aŭdyjo TrueAudio</comment>
     <comment xml:lang="bg">Аудио — TrueAudio</comment>
-    <comment xml:lang="ca">àudio de TrueAudio</comment>
+    <comment xml:lang="ca">àudio TrueAudio</comment>
     <comment xml:lang="cs">zvuk TrueAudio</comment>
     <comment xml:lang="da">TrueAudio-lyd</comment>
     <comment xml:lang="de">TrueAudio-Audio</comment>
     <comment xml:lang="el">Ήχος TrueAudio</comment>
-    <comment xml:lang="en_GB">TrueAudio audio</comment>
+    <comment xml:lang="en-GB">TrueAudio audio</comment>
     <comment xml:lang="eo">TrueAudio-sondosiero</comment>
-    <comment xml:lang="es">sonido TrueAudio</comment>
+    <comment xml:lang="es">audio TrueAudio</comment>
     <comment xml:lang="eu">TrueAudio audioa</comment>
     <comment xml:lang="fi">TrueAudio-ääni</comment>
     <comment xml:lang="fo">TrueAudio ljóður</comment>
     <comment xml:lang="fr">audio TrueAudio</comment>
+    <comment xml:lang="fur">audio TrueAudio</comment>
     <comment xml:lang="ga">fuaim TrueAudio</comment>
     <comment xml:lang="gl">son Trueson</comment>
     <comment xml:lang="he">שמע TrueAudio</comment>
@@ -24975,7 +25885,7 @@
     <comment xml:lang="oc">àudio TrueAudio</comment>
     <comment xml:lang="pl">Plik dźwiękowy TrueAudio</comment>
     <comment xml:lang="pt">áudio TrueAudio</comment>
-    <comment xml:lang="pt_BR">Áudio TrueAudio</comment>
+    <comment xml:lang="pt-BR">Áudio TrueAudio</comment>
     <comment xml:lang="ro">Audio TrueAudio</comment>
     <comment xml:lang="ru">Аудио TrueAudio</comment>
     <comment xml:lang="sk">Zvuk TrueAudio</comment>
@@ -24986,8 +25896,8 @@
     <comment xml:lang="tr">TrueAudio sesi</comment>
     <comment xml:lang="uk">звук TrueAudio</comment>
     <comment xml:lang="vi">Âm thanh TrueAudio</comment>
-    <comment xml:lang="zh_CN">TrueAudio 音频</comment>
-    <comment xml:lang="zh_TW">TrueAudio 音訊</comment>
+    <comment xml:lang="zh-CN">TrueAudio 音频</comment>
+    <comment xml:lang="zh-TW">TrueAudio 音訊</comment>
     <alias type="audio/tta"/>
     <magic priority="50">
       <match value="TTA1" type="string" offset="0"/>
@@ -24996,9 +25906,10 @@
   </mime-type>
   <mime-type type="image/bmp">
     <comment>Windows BMP image</comment>
+    <comment xml:lang="af">Windows BMP-beeld</comment>
     <comment xml:lang="ar">صورة Windows BMP</comment>
     <comment xml:lang="az">Windows BMP rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava Windows BMP</comment>
+    <comment xml:lang="be-Latn">Vyjava Windows BMP</comment>
     <comment xml:lang="bg">Изображение — Windows BMP</comment>
     <comment xml:lang="ca">imatge BMP de Windows</comment>
     <comment xml:lang="cs">obrázek Windows BMP</comment>
@@ -25006,13 +25917,14 @@
     <comment xml:lang="da">Windows BMP-billede</comment>
     <comment xml:lang="de">Windows-BMP-Bild</comment>
     <comment xml:lang="el">Εικόνα Windows BMP</comment>
-    <comment xml:lang="en_GB">Windows BMP image</comment>
+    <comment xml:lang="en-GB">Windows BMP image</comment>
     <comment xml:lang="eo">BMP-bildo de Vindozo</comment>
     <comment xml:lang="es">imagen BMP de Windows</comment>
     <comment xml:lang="eu">Windows BMP irudia</comment>
     <comment xml:lang="fi">Windows BMP -kuva</comment>
     <comment xml:lang="fo">Windows BMP mynd</comment>
     <comment xml:lang="fr">image Windows BMP</comment>
+    <comment xml:lang="fur">imagjin Windows BMP</comment>
     <comment xml:lang="ga">íomhá BMP Windows</comment>
     <comment xml:lang="gl">imaxe BMP de Windows</comment>
     <comment xml:lang="he">תמונת BMP של Windows</comment>
@@ -25033,7 +25945,7 @@
     <comment xml:lang="oc">imatge Windows BMP</comment>
     <comment xml:lang="pl">Obraz BMP Windows</comment>
     <comment xml:lang="pt">imagem BMP Windows</comment>
-    <comment xml:lang="pt_BR">Imagem BMP do Windows</comment>
+    <comment xml:lang="pt-BR">Imagem BMP do Windows</comment>
     <comment xml:lang="ro">Imagine Windows BMP</comment>
     <comment xml:lang="ru">Изображение Windows BMP</comment>
     <comment xml:lang="sk">Obrázok Windows BMP</comment>
@@ -25044,14 +25956,14 @@
     <comment xml:lang="tr">Windows BMP görüntüsü</comment>
     <comment xml:lang="uk">зображення Windows BMP</comment>
     <comment xml:lang="vi">Ảnh BMP Windows</comment>
-    <comment xml:lang="zh_CN">Windows BMP 图像</comment>
-    <comment xml:lang="zh_TW">Windows BMP 影像</comment>
-    <magic priority="50">
-      <match value="BMxxxx\000\000" type="string" offset="0" mask="0xffff00000000ffff"/>
-      <match value="BM" type="string" offset="0">
-        <match value="12" type="byte" offset="14"/>
-        <match value="64" type="byte" offset="14"/>
-        <match value="40" type="byte" offset="14"/>
+    <comment xml:lang="zh-CN">Windows BMP 图像</comment>
+    <comment xml:lang="zh-TW">Windows BMP 影像</comment>
+    <magic priority="50">
+      <match type="string" mask="0xffff00000000ffff" value="BMxxxx\000\000" offset="0"/>
+      <match type="string" value="BM" offset="0">
+        <match type="byte" value="12" offset="14"/>
+        <match type="byte" value="64" offset="14"/>
+        <match type="byte" value="40" offset="14"/>
       </match>
     </magic>
     <glob pattern="*.bmp"/>
@@ -25061,21 +25973,23 @@
   </mime-type>
   <mime-type type="image/vnd.wap.wbmp">
     <comment>WBMP image</comment>
+    <comment xml:lang="af">WBMP-beeld</comment>
     <comment xml:lang="ar">صورة WBMP</comment>
-    <comment xml:lang="be@latin">Vyjava WBMP</comment>
+    <comment xml:lang="be-Latn">Vyjava WBMP</comment>
     <comment xml:lang="bg">Изображение — WBMP</comment>
     <comment xml:lang="ca">imatge WBMP</comment>
     <comment xml:lang="cs">obrázek WBMP</comment>
     <comment xml:lang="da">WBMP-billede</comment>
     <comment xml:lang="de">WBMP-Bild</comment>
     <comment xml:lang="el">Εικόνα WBMP</comment>
-    <comment xml:lang="en_GB">WBMP image</comment>
+    <comment xml:lang="en-GB">WBMP image</comment>
     <comment xml:lang="eo">WBMP-bildo</comment>
     <comment xml:lang="es">imagen WBMP</comment>
     <comment xml:lang="eu">WBMP irudia</comment>
     <comment xml:lang="fi">WBMP-kuva</comment>
     <comment xml:lang="fo">WBMP mynd</comment>
     <comment xml:lang="fr">image WBMP</comment>
+    <comment xml:lang="fur">imagjin WBMP</comment>
     <comment xml:lang="ga">íomhá WBMP</comment>
     <comment xml:lang="gl">imaxe WBMP</comment>
     <comment xml:lang="he">תמונת WBMP</comment>
@@ -25095,7 +26009,7 @@
     <comment xml:lang="oc">imatge WBMP</comment>
     <comment xml:lang="pl">Obraz WBMP</comment>
     <comment xml:lang="pt">imagem WBMP</comment>
-    <comment xml:lang="pt_BR">Imagem WBMP</comment>
+    <comment xml:lang="pt-BR">Imagem WBMP</comment>
     <comment xml:lang="ro">Imagine WBMP</comment>
     <comment xml:lang="ru">Изображение WBMP</comment>
     <comment xml:lang="sk">Obrázok WBMP</comment>
@@ -25106,177 +26020,77 @@
     <comment xml:lang="tr">WBMP görüntüsü</comment>
     <comment xml:lang="uk">зображення WBMP</comment>
     <comment xml:lang="vi">Ảnh WBMP</comment>
-    <comment xml:lang="zh_CN">WBMP 图像</comment>
-    <comment xml:lang="zh_TW">WBMP 影像</comment>
+    <comment xml:lang="zh-CN">WBMP 图像</comment>
+    <comment xml:lang="zh-TW">WBMP 影像</comment>
     <acronym>WBMP</acronym>
     <expanded-acronym>WAP bitmap</expanded-acronym>
     <glob pattern="*.wbmp"/>
   </mime-type>
   <mime-type type="image/cgm">
-    <comment>Computer Graphics Metafile</comment>
-    <comment xml:lang="ar">ملف تعريف رسوميات الحاسوب</comment>
-    <comment xml:lang="az">Kompüter Qrafikası Meta Faylı</comment>
-    <comment xml:lang="be@latin">Metafajł Computer Graphics</comment>
-    <comment xml:lang="bg">Метафайл — Computer Graphics</comment>
-    <comment xml:lang="ca">metafitxer de Computer Graphics</comment>
-    <comment xml:lang="cs">Computer Graphics Metafile</comment>
-    <comment xml:lang="cy">Delwedd ffurf CGM</comment>
-    <comment xml:lang="da">Computer Graphics-metafil</comment>
-    <comment xml:lang="de">CGM-Datei</comment>
-    <comment xml:lang="el">Αρχείο Computer Graphics Metafile</comment>
-    <comment xml:lang="en_GB">Computer Graphics Metafile</comment>
-    <comment xml:lang="es">metaarchivo de Computer Graphics</comment>
-    <comment xml:lang="eu">Ordenagailuko grafikoen meta-fitxategia</comment>
-    <comment xml:lang="fi">Computer Graphics -metatiedosto</comment>
-    <comment xml:lang="fo">Teldugrafikk metafíla</comment>
-    <comment xml:lang="fr">métafichier Computer Graphics</comment>
-    <comment xml:lang="ga">Meiteachomhad Grafaicí Ríomhaire</comment>
-    <comment xml:lang="gl">metaficheiro de Computer Graphics</comment>
-    <comment xml:lang="he">קובץ-מטה מסוג Computer Graphics</comment>
-    <comment xml:lang="hr">Computer Graphics meta datoteka</comment>
-    <comment xml:lang="hu">Computer Graphics-metafájl</comment>
-    <comment xml:lang="ia">Metafile Computer Graphics</comment>
-    <comment xml:lang="id">Computer Graphics Metafile</comment>
-    <comment xml:lang="it">Computer Graphics Metafile</comment>
-    <comment xml:lang="ja">コンピューターグラフィックメタファイル</comment>
-    <comment xml:lang="kk">компьютерлік графика метафайлы</comment>
-    <comment xml:lang="ko">컴퓨터 그래픽스 메타 파일</comment>
-    <comment xml:lang="lt">Computer Graphics metafailas</comment>
-    <comment xml:lang="lv">Datorgrafikas metadatne</comment>
-    <comment xml:lang="ms">Failmeta Grafik Komputer</comment>
-    <comment xml:lang="nb">Computer Graphics Metafile</comment>
-    <comment xml:lang="nl">Computer Graphics-metabestand</comment>
-    <comment xml:lang="nn">Computer Graphics Metafile</comment>
-    <comment xml:lang="oc">metafichièr Computer Graphics</comment>
-    <comment xml:lang="pl">Metaplik grafiki komputerowej (CGM)</comment>
-    <comment xml:lang="pt">metaficheiro Computer Graphics</comment>
-    <comment xml:lang="pt_BR">Meta-arquivo do Computer Graphics</comment>
-    <comment xml:lang="ro">Metafișier Computer Graphics</comment>
-    <comment xml:lang="ru">Метафайл компьютерной графики</comment>
-    <comment xml:lang="sk">Computer Graphics Metafile</comment>
-    <comment xml:lang="sl">Metadatoteka računalniške grafike (CGM)</comment>
-    <comment xml:lang="sq">Metafile Computer Graphics</comment>
-    <comment xml:lang="sr">Метадатотека рачунарске графике</comment>
-    <comment xml:lang="sv">Computer Graphics Metafil</comment>
-    <comment xml:lang="tr">Computer Graphics Meta dosyası</comment>
-    <comment xml:lang="uk">метафайл комп'ютерної графіки</comment>
-    <comment xml:lang="vi">Siêu tập tin đồ họa máy tính (CMF)</comment>
-    <comment xml:lang="zh_CN">计算机图形图元文件 (CGM)</comment>
-    <comment xml:lang="zh_TW">CGM 影像</comment>
+    <comment>CGM image</comment>
+    <comment xml:lang="bg">Изображение — CGM</comment>
+    <comment xml:lang="ca">imatge CGM</comment>
+    <comment xml:lang="da">CGM-billede</comment>
+    <comment xml:lang="de">CGM-Bild</comment>
+    <comment xml:lang="en-GB">CGM image</comment>
+    <comment xml:lang="es">imagen CGM</comment>
+    <comment xml:lang="eu">CGM irudia</comment>
+    <comment xml:lang="fi">CGM-kuva</comment>
+    <comment xml:lang="fr">image CGM</comment>
+    <comment xml:lang="hr">CGM slika</comment>
+    <comment xml:lang="hu">CGM-kép</comment>
+    <comment xml:lang="id">Citra CGM</comment>
+    <comment xml:lang="it">Immagine CGM</comment>
+    <comment xml:lang="kk">CGM суреті</comment>
+    <comment xml:lang="ko">CGM 이미지</comment>
+    <comment xml:lang="pl">Obraz CGM</comment>
+    <comment xml:lang="pt-BR">Imagem CGM</comment>
+    <comment xml:lang="ru">Изображение CGM</comment>
+    <comment xml:lang="sk">Obrázok CGM</comment>
+    <comment xml:lang="sl">Slika CGM</comment>
+    <comment xml:lang="sv">CGM-bild</comment>
+    <comment xml:lang="tr">CGM görüntüsü</comment>
+    <comment xml:lang="uk">зображення CGM</comment>
+    <comment xml:lang="zh-CN">CGM 图像</comment>
+    <comment xml:lang="zh-TW">CGM 影像</comment>
+    <acronym>CGM</acronym>
+    <expanded-acronym>Computer Graphics Metafile</expanded-acronym>
     <glob pattern="*.cgm"/>
   </mime-type>
-  <mime-type type="image/fax-g3">
-    <comment>CCITT G3 fax</comment>
-    <comment xml:lang="ar">فاكس CCITT G3</comment>
-    <comment xml:lang="be@latin">Faks CCITT G3</comment>
-    <comment xml:lang="bg">Факс — CCITT G3</comment>
-    <comment xml:lang="ca">fax CCITT G3</comment>
-    <comment xml:lang="cs">fax CCITT G3</comment>
-    <comment xml:lang="da">CCITT G3-fax</comment>
-    <comment xml:lang="de">CCITT-G3-Fax</comment>
-    <comment xml:lang="el">φαξ σε μορφή CCITT G3</comment>
-    <comment xml:lang="en_GB">CCITT G3 fax</comment>
-    <comment xml:lang="eo">G3-fakso de CCITT</comment>
-    <comment xml:lang="es">fax de CCITT G3</comment>
-    <comment xml:lang="eu">CCITT G3 faxa</comment>
-    <comment xml:lang="fi">CCITT G3 -faksi</comment>
-    <comment xml:lang="fo">CCITT G3 telefaks</comment>
-    <comment xml:lang="fr">télécopie G3 CCITT</comment>
-    <comment xml:lang="ga">facs CCITT G3</comment>
-    <comment xml:lang="gl">fax de CCITT G3</comment>
-    <comment xml:lang="he">פקס של CCITT G3</comment>
-    <comment xml:lang="hr">CCITT G3 faks</comment>
-    <comment xml:lang="hu">CCITT G3-fax</comment>
-    <comment xml:lang="ia">Fax CCITT G3</comment>
-    <comment xml:lang="id">Faks CCITT G3</comment>
-    <comment xml:lang="it">Fax CCITT G3</comment>
-    <comment xml:lang="ja">CCITT G3 FAX</comment>
-    <comment xml:lang="ka">CCITT G3 ფაქსი</comment>
-    <comment xml:lang="kk">CCITT G3 факсі</comment>
-    <comment xml:lang="ko">CCITT G3 팩스</comment>
-    <comment xml:lang="lt">CCITT G3 faksas</comment>
-    <comment xml:lang="lv">CCITT G3 fakss</comment>
-    <comment xml:lang="ms">Faks g3 CCITT</comment>
-    <comment xml:lang="nb">CCITT G3-faks</comment>
-    <comment xml:lang="nl">CCITT G3-fax</comment>
-    <comment xml:lang="nn">CCITT G3-fax</comment>
-    <comment xml:lang="oc">telecòpia G3 CCITT</comment>
-    <comment xml:lang="pl">Faks CCITT G3</comment>
-    <comment xml:lang="pt">fax CCITT G3</comment>
-    <comment xml:lang="pt_BR">Fax do CCITT G3</comment>
-    <comment xml:lang="ro">Fax CCITT G3</comment>
-    <comment xml:lang="ru">Факс CCITT G3</comment>
-    <comment xml:lang="sk">Fax CCITT G3</comment>
-    <comment xml:lang="sl">Datoteka faksimila CCITT G3</comment>
-    <comment xml:lang="sq">Fax CCITT G3</comment>
-    <comment xml:lang="sr">ЦЦИТТ Г3 факс</comment>
-    <comment xml:lang="sv">CCITT G3-fax</comment>
-    <comment xml:lang="tr">CCITT G3 faksı</comment>
-    <comment xml:lang="uk">факс CCITT G3</comment>
-    <comment xml:lang="vi">Điện thư G3 CCITT</comment>
-    <comment xml:lang="zh_CN">CCITT G3 传真</comment>
-    <comment xml:lang="zh_TW">CCITT G3 傳真檔</comment>
-    <glob pattern="*.g3"/>
-  </mime-type>
   <mime-type type="image/g3fax">
-    <comment>G3 fax image</comment>
-    <comment xml:lang="ar">صورة فاكس G3</comment>
-    <comment xml:lang="az">G3 faks rəsmi</comment>
-    <comment xml:lang="be@latin">Faksavaja vyjava G3</comment>
-    <comment xml:lang="bg">Изображение — факс G3</comment>
-    <comment xml:lang="ca">imatge de fax G3</comment>
-    <comment xml:lang="cs">faxový obrázek G3</comment>
-    <comment xml:lang="cy">Delwedd Ffacs G3</comment>
-    <comment xml:lang="da">G3-faxbillede</comment>
-    <comment xml:lang="de">G3-Faxbild</comment>
-    <comment xml:lang="el">Εικόνα φαξ G3</comment>
-    <comment xml:lang="en_GB">G3 fax image</comment>
-    <comment xml:lang="eo">G3-faksbildo</comment>
-    <comment xml:lang="es">imagen de fax G3</comment>
-    <comment xml:lang="eu">G3 fax-irudia</comment>
-    <comment xml:lang="fi">G3-faksikuva</comment>
-    <comment xml:lang="fo">G3 fax mynd</comment>
-    <comment xml:lang="fr">image de télécopie G3</comment>
-    <comment xml:lang="ga">íomhá fhacs G3</comment>
-    <comment xml:lang="gl">imaxe de fax G3</comment>
-    <comment xml:lang="he">תמונת פקס של G3</comment>
-    <comment xml:lang="hr">G3 slika faksa</comment>
-    <comment xml:lang="hu">G3-faxkép</comment>
-    <comment xml:lang="ia">Imagine de fax G3</comment>
-    <comment xml:lang="id">Citra faks G3</comment>
-    <comment xml:lang="it">Immagine fax G3</comment>
-    <comment xml:lang="ja">G3 FAX 画像</comment>
-    <comment xml:lang="ka">G3 fax გამოსახულება</comment>
-    <comment xml:lang="kk">G3 факс суреті</comment>
-    <comment xml:lang="ko">G3 팩스 그림</comment>
-    <comment xml:lang="lt">G3 fax paveikslėlis</comment>
-    <comment xml:lang="lv">G3 faksa attēls</comment>
-    <comment xml:lang="ms">Imej fax G3</comment>
-    <comment xml:lang="nb">G3-faksbilde</comment>
-    <comment xml:lang="nl">G3 faxafbeelding</comment>
-    <comment xml:lang="nn">G3 faksbilete</comment>
-    <comment xml:lang="oc">imatge de telecòpia G3</comment>
-    <comment xml:lang="pl">Obraz faksowy G3</comment>
-    <comment xml:lang="pt">imagem de fax G3</comment>
-    <comment xml:lang="pt_BR">Imagem de fax G3</comment>
-    <comment xml:lang="ro">Imagine fax G3</comment>
-    <comment xml:lang="ru">Факсовое изображение G3</comment>
-    <comment xml:lang="sk">Obrázok fax G3</comment>
-    <comment xml:lang="sl">Slikovna datoteka G3 fax</comment>
-    <comment xml:lang="sq">Figurë Fax G3</comment>
-    <comment xml:lang="sr">слика Г3 факса</comment>
-    <comment xml:lang="sv">G3-faxbild</comment>
-    <comment xml:lang="tr">G3 fax görüntüsü</comment>
-    <comment xml:lang="uk">факс G3</comment>
-    <comment xml:lang="vi">Ảnh điện thư G3</comment>
-    <comment xml:lang="zh_CN">G3 传真图像</comment>
-    <comment xml:lang="zh_TW">G3 傳真圖</comment>
+    <comment>CCITT G3 fax image</comment>
+    <comment xml:lang="bg">Изображение — CCITT G3, факс</comment>
+    <comment xml:lang="ca">imatge de fax CCITT G3</comment>
+    <comment xml:lang="da">CCITT G3-faxbillede</comment>
+    <comment xml:lang="de">CCITT-G3-Faxbild</comment>
+    <comment xml:lang="en-GB">CCITT G3 fax image</comment>
+    <comment xml:lang="es">imagen de fax CCITT G3</comment>
+    <comment xml:lang="eu">CCITT G3 fax irudia</comment>
+    <comment xml:lang="fi">CCITT G3 -faksikuva</comment>
+    <comment xml:lang="fr">image de télécopie CCITT G3</comment>
+    <comment xml:lang="hr">CCITT G3 slika faksa</comment>
+    <comment xml:lang="hu">CCITT G3-faxkép</comment>
+    <comment xml:lang="id">Citra faks CCITT G3</comment>
+    <comment xml:lang="it">Immagine fax CCIT G3</comment>
+    <comment xml:lang="kk">CCITT G3 факс суреті</comment>
+    <comment xml:lang="ko">CCITT G3 팩스 이미지</comment>
+    <comment xml:lang="pl">Obraz faksowy G3 CCITT</comment>
+    <comment xml:lang="pt-BR">Imagem de fax CCITT G3</comment>
+    <comment xml:lang="ru">Факсовое изображение CCITT G3</comment>
+    <comment xml:lang="sv">CCITT G3 faxbild</comment>
+    <comment xml:lang="tr">CCITT G3 faks görüntüsü</comment>
+    <comment xml:lang="uk">зображення факсу G3 CCITT</comment>
+    <comment xml:lang="zh-CN">CCITT G3 传真图像</comment>
+    <comment xml:lang="zh-TW">CCITT G3 傳真影像</comment>
+    <glob pattern="*.g3"/>
+    <alias type="image/fax-g3"/>
   </mime-type>
   <mime-type type="image/gif">
     <comment>GIF image</comment>
+    <comment xml:lang="af">GIF-beeld</comment>
     <comment xml:lang="ar">صورة GIF</comment>
     <comment xml:lang="az">GIF rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava GIF</comment>
+    <comment xml:lang="be-Latn">Vyjava GIF</comment>
     <comment xml:lang="bg">Изображение — GIF</comment>
     <comment xml:lang="ca">imatge GIF</comment>
     <comment xml:lang="cs">obrázek GIF</comment>
@@ -25284,13 +26098,14 @@
     <comment xml:lang="da">GIF-billede</comment>
     <comment xml:lang="de">GIF-Bild</comment>
     <comment xml:lang="el">Εικόνα GIF</comment>
-    <comment xml:lang="en_GB">GIF image</comment>
+    <comment xml:lang="en-GB">GIF image</comment>
     <comment xml:lang="eo">GIF-bildo</comment>
     <comment xml:lang="es">imagen GIF</comment>
     <comment xml:lang="eu">GIF irudia</comment>
     <comment xml:lang="fi">GIF-kuva</comment>
     <comment xml:lang="fo">GIF mynd</comment>
     <comment xml:lang="fr">image GIF</comment>
+    <comment xml:lang="fur">imagjin GIF</comment>
     <comment xml:lang="ga">íomhá GIF</comment>
     <comment xml:lang="gl">imaxe GIF</comment>
     <comment xml:lang="he">תמונת GIF</comment>
@@ -25312,7 +26127,7 @@
     <comment xml:lang="oc">imatge GIF</comment>
     <comment xml:lang="pl">Obraz GIF</comment>
     <comment xml:lang="pt">imagem GIF</comment>
-    <comment xml:lang="pt_BR">Imagem GIF</comment>
+    <comment xml:lang="pt-BR">Imagem GIF</comment>
     <comment xml:lang="ro">Imagine GIF</comment>
     <comment xml:lang="ru">Изображение GIF</comment>
     <comment xml:lang="sk">Obrázok GIF</comment>
@@ -25323,15 +26138,44 @@
     <comment xml:lang="tr">GIF görüntüsü</comment>
     <comment xml:lang="uk">зображення GIF</comment>
     <comment xml:lang="vi">Ảnh GIF</comment>
-    <comment xml:lang="zh_CN">GIF 图像</comment>
-    <comment xml:lang="zh_TW">GIF 影像</comment>
+    <comment xml:lang="zh-CN">GIF 图像</comment>
+    <comment xml:lang="zh-TW">GIF 影像</comment>
     <magic priority="50">
-      <match value="GIF8" type="string" offset="0"/>
+      <match type="string" value="GIF8" offset="0"/>
     </magic>
     <glob pattern="*.gif"/>
   </mime-type>
   <mime-type type="image/heif">
     <comment>HEIF image</comment>
+    <comment xml:lang="af">HEIF-beeld</comment>
+    <comment xml:lang="bg">Изображение — HEIF</comment>
+    <comment xml:lang="ca">imatge HEIF</comment>
+    <comment xml:lang="cs">obrázek HEIF</comment>
+    <comment xml:lang="da">HEIF-billede</comment>
+    <comment xml:lang="de">HEIF-Bild</comment>
+    <comment xml:lang="en-GB">HEIF image</comment>
+    <comment xml:lang="es">imagen HEIF</comment>
+    <comment xml:lang="eu">HEIF irudia</comment>
+    <comment xml:lang="fi">HEIF-kuva</comment>
+    <comment xml:lang="fr">image HEIF</comment>
+    <comment xml:lang="fur">imagjin HEIF</comment>
+    <comment xml:lang="ga">íomhá HEIF</comment>
+    <comment xml:lang="hr">HEIF slika</comment>
+    <comment xml:lang="hu">HEIF kép</comment>
+    <comment xml:lang="id">Citra HEIF</comment>
+    <comment xml:lang="it">Immagine HEIF</comment>
+    <comment xml:lang="kk">HEIF суреті</comment>
+    <comment xml:lang="ko">HEIF 그림</comment>
+    <comment xml:lang="pl">Obraz HEIF</comment>
+    <comment xml:lang="pt-BR">Imagem HEIF</comment>
+    <comment xml:lang="ru">Изображение HEIF</comment>
+    <comment xml:lang="sk">Obrázok HEIF</comment>
+    <comment xml:lang="sl">Slika HEIF</comment>
+    <comment xml:lang="sv">HEIF-bild</comment>
+    <comment xml:lang="tr">HEIF görüntüsü</comment>
+    <comment xml:lang="uk">зображення HEIF</comment>
+    <comment xml:lang="zh-CN">HEIF 图像</comment>
+    <comment xml:lang="zh-TW">HEIF 影像</comment>
     <acronym>HEIF</acronym>
     <expanded-acronym>High Efficiency Image File</expanded-acronym>
     <glob pattern="*.heic"/>
@@ -25342,9 +26186,10 @@
   </mime-type>
   <mime-type type="image/ief">
     <comment>IEF image</comment>
+    <comment xml:lang="af">IEF-beeld</comment>
     <comment xml:lang="ar">صورة IEF</comment>
     <comment xml:lang="az">IEF rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava IEF</comment>
+    <comment xml:lang="be-Latn">Vyjava IEF</comment>
     <comment xml:lang="bg">Изображение — IEF</comment>
     <comment xml:lang="ca">imatge IEF</comment>
     <comment xml:lang="cs">obrázek IEF</comment>
@@ -25352,13 +26197,14 @@
     <comment xml:lang="da">IEF-billede</comment>
     <comment xml:lang="de">IEF-Bild</comment>
     <comment xml:lang="el">Εικόνα IEF</comment>
-    <comment xml:lang="en_GB">IEF image</comment>
+    <comment xml:lang="en-GB">IEF image</comment>
     <comment xml:lang="eo">IEF-bildo</comment>
     <comment xml:lang="es">imagen IEF</comment>
     <comment xml:lang="eu">IEF irudia</comment>
     <comment xml:lang="fi">IEF-kuva</comment>
     <comment xml:lang="fo">IEF mynd</comment>
     <comment xml:lang="fr">image IEF</comment>
+    <comment xml:lang="fur">imagjin IEF</comment>
     <comment xml:lang="ga">íomhá IEF</comment>
     <comment xml:lang="gl">imaxe IEF</comment>
     <comment xml:lang="he">תמונת IEF</comment>
@@ -25379,7 +26225,7 @@
     <comment xml:lang="oc">imatge IEF</comment>
     <comment xml:lang="pl">Obraz IEF</comment>
     <comment xml:lang="pt">imagem IEF</comment>
-    <comment xml:lang="pt_BR">Imagem IEF</comment>
+    <comment xml:lang="pt-BR">Imagem IEF</comment>
     <comment xml:lang="ro">Imagine IEF</comment>
     <comment xml:lang="ru">Изображение IEF</comment>
     <comment xml:lang="sk">Obrázok IEF</comment>
@@ -25390,15 +26236,16 @@
     <comment xml:lang="tr">IEF görüntüsü</comment>
     <comment xml:lang="uk">зображення IEF</comment>
     <comment xml:lang="vi">Ảnh IEF</comment>
-    <comment xml:lang="zh_CN">IEF 图像</comment>
-    <comment xml:lang="zh_TW">IEF 影像</comment>
+    <comment xml:lang="zh-CN">IEF 图像</comment>
+    <comment xml:lang="zh-TW">IEF 影像</comment>
     <glob pattern="*.ief"/>
   </mime-type>
   <mime-type type="image/jpeg">
     <comment>JPEG image</comment>
+    <comment xml:lang="af">JPEG-beeld</comment>
     <comment xml:lang="ar">صورة JPEG</comment>
     <comment xml:lang="az">JPEG rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava JPEG</comment>
+    <comment xml:lang="be-Latn">Vyjava JPEG</comment>
     <comment xml:lang="bg">Изображение — JPEG</comment>
     <comment xml:lang="ca">imatge JPEG</comment>
     <comment xml:lang="cs">obrázek JPEG</comment>
@@ -25406,13 +26253,14 @@
     <comment xml:lang="da">JPEG-billede</comment>
     <comment xml:lang="de">JPEG-Bild</comment>
     <comment xml:lang="el">Εικόνα JPEG</comment>
-    <comment xml:lang="en_GB">JPEG image</comment>
+    <comment xml:lang="en-GB">JPEG image</comment>
     <comment xml:lang="eo">JPEG-bildo</comment>
     <comment xml:lang="es">imagen JPEG</comment>
     <comment xml:lang="eu">JPEG irudia</comment>
     <comment xml:lang="fi">JPEG-kuva</comment>
     <comment xml:lang="fo">JPEG mynd</comment>
     <comment xml:lang="fr">image JPEG</comment>
+    <comment xml:lang="fur">imagjin JPEG</comment>
     <comment xml:lang="ga">íomhá JPEG</comment>
     <comment xml:lang="gl">imaxe JPEG</comment>
     <comment xml:lang="he">תמונת JPEG</comment>
@@ -25433,7 +26281,7 @@
     <comment xml:lang="oc">imatge JPEG</comment>
     <comment xml:lang="pl">Obraz JPEG</comment>
     <comment xml:lang="pt">imagem JPEG</comment>
-    <comment xml:lang="pt_BR">Imagem JPEG</comment>
+    <comment xml:lang="pt-BR">Imagem JPEG</comment>
     <comment xml:lang="ro">Imagine JPEG</comment>
     <comment xml:lang="ru">Изображение JPEG</comment>
     <comment xml:lang="sk">Obrázok JPEG</comment>
@@ -25444,19 +26292,47 @@
     <comment xml:lang="tr">JPEG görüntüsü</comment>
     <comment xml:lang="uk">зображення JPEG</comment>
     <comment xml:lang="vi">Ảnh JPEG</comment>
-    <comment xml:lang="zh_CN">JPEG 图像</comment>
-    <comment xml:lang="zh_TW">JPEG 影像</comment>
+    <comment xml:lang="zh-CN">JPEG 图像</comment>
+    <comment xml:lang="zh-TW">JPEG 影像</comment>
     <magic priority="50">
-      <match value="\377\330\377" type="string" offset="0"/>
-      <match value="0xffd8" type="big16" offset="0"/>
+      <match type="string" value="\377\330\377" offset="0"/>
+      <match type="big16" value="0xffd8" offset="0"/>
     </magic>
-    <glob pattern="*.jpeg"/>
     <glob pattern="*.jpg"/>
+    <glob pattern="*.jpeg"/>
     <glob pattern="*.jpe"/>
     <alias type="image/pjpeg"/>
   </mime-type>
   <mime-type type="video/x-mjpeg">
     <comment>MJPEG video stream</comment>
+    <comment xml:lang="af">MJPEG-videostroom</comment>
+    <comment xml:lang="bg">Поток — MJPEG, видео</comment>
+    <comment xml:lang="ca">flux de vídeo MJPEG</comment>
+    <comment xml:lang="cs">datový tok videa MJPEG</comment>
+    <comment xml:lang="da">MJPEG-videostrøm</comment>
+    <comment xml:lang="de">MJPEG-Videodatenstrom</comment>
+    <comment xml:lang="en-GB">MJPEG video stream</comment>
+    <comment xml:lang="es">videotransmisión MJPEG</comment>
+    <comment xml:lang="eu">MJPEG bideo korrontea</comment>
+    <comment xml:lang="fi">MJPEG-videon suoratoisto</comment>
+    <comment xml:lang="fr">flux vidéo MJPEG</comment>
+    <comment xml:lang="fur">trasmission video MJPEG</comment>
+    <comment xml:lang="ga">sruth físe MJPEG</comment>
+    <comment xml:lang="hr">Prijenos MJPEG videa</comment>
+    <comment xml:lang="hu">MJPEG videofolyam</comment>
+    <comment xml:lang="id">Stream video MJPEG</comment>
+    <comment xml:lang="it">Stream video MJPEG</comment>
+    <comment xml:lang="kk">MJPEG видео ағыны</comment>
+    <comment xml:lang="ko">MJPEG 비디오 스트림</comment>
+    <comment xml:lang="pl">Strumień wideo MJPEG</comment>
+    <comment xml:lang="pt-BR">Fluxo de vídeo MPEG</comment>
+    <comment xml:lang="ru">Видеопоток MJPEG</comment>
+    <comment xml:lang="sk">Stream videa MJPEG</comment>
+    <comment xml:lang="sv">MJPEG-videoström</comment>
+    <comment xml:lang="tr">MJPEG video akışı</comment>
+    <comment xml:lang="uk">відеопотік MJPEG</comment>
+    <comment xml:lang="zh-CN">MJPEG 视频流</comment>
+    <comment xml:lang="zh-TW">MJPEG 視訊串流</comment>
     <acronym>MJPEG</acronym>
     <expanded-acronym>Motion JPEG</expanded-acronym>
     <sub-class-of type="image/jpeg"/>
@@ -25465,27 +26341,35 @@
   </mime-type>
   <mime-type type="image/x-jp2-codestream">
     <comment>JPEG-2000 codestream</comment>
+    <comment xml:lang="bg">Поток — JPEG-2000, кодирано</comment>
     <comment xml:lang="ca">flux de codis JPEG-2000</comment>
     <comment xml:lang="cs">datový tok JPEG-2000</comment>
+    <comment xml:lang="da">JPEG-2000-kodestrøm</comment>
     <comment xml:lang="de">JPEG-2000 Codestream</comment>
-    <comment xml:lang="en_GB">JPEG-2000 codestream</comment>
+    <comment xml:lang="en-GB">JPEG-2000 codestream</comment>
     <comment xml:lang="es">secuencia de código JPEG-2000</comment>
+    <comment xml:lang="eu">JPEG-2000 kodekorrontea</comment>
+    <comment xml:lang="fi">JPEG-2000-koodivirta</comment>
+    <comment xml:lang="fr">flux de code JPEG-2000</comment>
+    <comment xml:lang="fur">trasmission codiç JPEG-2000</comment>
+    <comment xml:lang="ga">códsruth JPEG-2000</comment>
     <comment xml:lang="hr">JPEG-2000 kôd strujanja</comment>
     <comment xml:lang="hu">JPEG-2000 kódfolyam</comment>
-    <comment xml:lang="id">codestream JPEG-2000</comment>
+    <comment xml:lang="id">Codestream JPEG-2000</comment>
     <comment xml:lang="it">Codestream JPEG-2000</comment>
     <comment xml:lang="kk">JPEG-2000 код ағыны</comment>
     <comment xml:lang="ko">JPEG-2000 코드스트림</comment>
     <comment xml:lang="pl">Strumień kodu JPEG-2000</comment>
-    <comment xml:lang="pt_BR">Imagem JPEG-2000</comment>
+    <comment xml:lang="pt-BR">Imagem JPEG-2000</comment>
     <comment xml:lang="ru">Кодовый поток JPEG-2000</comment>
     <comment xml:lang="sk">JPEG-2000 codestream</comment>
     <comment xml:lang="sv">JPEG-2000-kodström</comment>
+    <comment xml:lang="tr">JPEG-2000 codestream</comment>
     <comment xml:lang="uk">потік коду JPEG-2000</comment>
-    <comment xml:lang="zh_CN">JPEG-2000 码流</comment>
-    <comment xml:lang="zh_TW">JPEG-2000 代碼串流</comment>
+    <comment xml:lang="zh-CN">JPEG-2000 码流</comment>
+    <comment xml:lang="zh-TW">JPEG-2000 代碼串流</comment>
     <magic priority="50">
-      <match value="0xff4fff51" type="big32" offset="0"/>
+      <match type="big32" value="0xff4fff51" offset="0"/>
     </magic>
     <glob pattern="*.j2c"/>
     <glob pattern="*.j2k"/>
@@ -25493,12 +26377,19 @@
   </mime-type>
   <mime-type type="image/jp2">
     <comment>JPEG-2000 JP2 image</comment>
+    <comment xml:lang="af">JPEG-2000 JP2-beeld</comment>
+    <comment xml:lang="bg">Изображение — JPEG-2000 JP2</comment>
     <comment xml:lang="ca">imatge JPEG-2000 JP2</comment>
     <comment xml:lang="cs">obrázek JPEG-2000 JP2</comment>
+    <comment xml:lang="da">JPEG-2000 JP2-billede</comment>
     <comment xml:lang="de">JPEG-2000 JP2-Bild</comment>
-    <comment xml:lang="en_GB">JPEG-2000 JP2 image</comment>
+    <comment xml:lang="en-GB">JPEG-2000 JP2 image</comment>
     <comment xml:lang="es">imagen JPEG-2000 JP2</comment>
+    <comment xml:lang="eu">JPEG-2000 JP2 irudia</comment>
     <comment xml:lang="fi">JPEG-2000 JP2 -kuva</comment>
+    <comment xml:lang="fr">image JPEG-2000 JP2</comment>
+    <comment xml:lang="fur">imagjin JPEG-2000 JP2</comment>
+    <comment xml:lang="ga">íomhá JPEG-2000 JP2</comment>
     <comment xml:lang="hr">JPEG-2000 JP2 slika</comment>
     <comment xml:lang="hu">JPEG-2000 JP2 kép</comment>
     <comment xml:lang="id">Citra JPEG-2000 JP2</comment>
@@ -25506,32 +26397,41 @@
     <comment xml:lang="kk">JPEG-2000 JP2 суреті</comment>
     <comment xml:lang="ko">JPEG-2000 JP2 그림</comment>
     <comment xml:lang="pl">Obraz JP2 JPEG-2000</comment>
-    <comment xml:lang="pt_BR">Imagem JP2 de JPEG-2000</comment>
+    <comment xml:lang="pt-BR">Imagem JP2 de JPEG-2000</comment>
     <comment xml:lang="ru">Изоражение JPEG-2000 JP2</comment>
     <comment xml:lang="sk">Obrázok JPEG-2000 JP2</comment>
+    <comment xml:lang="sl">Slika JPEG-2000 JP2</comment>
     <comment xml:lang="sv">JPEG-2000 JP2-bild</comment>
+    <comment xml:lang="tr">JPEG-2000 JP2 görüntüsü</comment>
     <comment xml:lang="uk">зображення JP2 JPEG-2000</comment>
-    <comment xml:lang="zh_CN">JPEG-2000 JP2 图像</comment>
-    <comment xml:lang="zh_TW">JPEG-2000 JP2 影像</comment>
+    <comment xml:lang="zh-CN">JPEG-2000 JP2 图像</comment>
+    <comment xml:lang="zh-TW">JPEG-2000 JP2 影像</comment>
     <acronym>JP2</acronym>
     <expanded-acronym>JPEG-2000</expanded-acronym>
     <alias type="image/jpeg2000"/>
     <alias type="image/jpeg2000-image"/>
     <alias type="image/x-jpeg2000-image"/>
     <magic priority="50">
-      <match value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        jp2\x20" type="string" offset="0" mask="0xffffffffffffffffffffffff0000000000000000ffffffff"/>
+      <match type="string" mask="0xffffffffffffffffffffffff0000000000000000ffffffff" value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        jp2\x20" offset="0"/>
     </magic>
     <glob pattern="*.jp2"/>
     <glob pattern="*.jpg2"/>
   </mime-type>
   <mime-type type="image/jpx">
     <comment>JPEG-2000 JPX image</comment>
+    <comment xml:lang="af">JPEG-2000 JPX-beeld</comment>
+    <comment xml:lang="bg">Изображение — JPEG-2000 JPX</comment>
     <comment xml:lang="ca">imatge JPEG-2000 JPX</comment>
     <comment xml:lang="cs">obrázek JPEG-2000 JPX</comment>
+    <comment xml:lang="da">JPEG-2000 JPX-billede</comment>
     <comment xml:lang="de">JPEG-2000 JPX-Bild</comment>
-    <comment xml:lang="en_GB">JPEG-2000 JPX image</comment>
+    <comment xml:lang="en-GB">JPEG-2000 JPX image</comment>
     <comment xml:lang="es">imagen JPEG-2000 JPX</comment>
+    <comment xml:lang="eu">JPEG-2000 JPX irudia</comment>
     <comment xml:lang="fi">JPEG-2000 JPX -kuva</comment>
+    <comment xml:lang="fr">image JPEG-2000 JPX</comment>
+    <comment xml:lang="fur">imagjinJPEG-2000 JPX</comment>
+    <comment xml:lang="ga">íomhá JPEG-2000 JPX</comment>
     <comment xml:lang="hr">JPEG-2000 JPX slika</comment>
     <comment xml:lang="hu">JPEG-2000 JPX kép</comment>
     <comment xml:lang="id">Citra JPEG-2000 JPX</comment>
@@ -25539,29 +26439,38 @@
     <comment xml:lang="kk">JPEG-2000 JPX суреті</comment>
     <comment xml:lang="ko">JPEG-2000 JPX 그림</comment>
     <comment xml:lang="pl">Obraz JPX JPEG-2000</comment>
-    <comment xml:lang="pt_BR">Imagem JPX de JPEG-2000</comment>
+    <comment xml:lang="pt-BR">Imagem JPX de JPEG-2000</comment>
     <comment xml:lang="ru">Изображение JPEG-2000 JPX</comment>
     <comment xml:lang="sk">Obrázok JPEG-2000 JPX</comment>
+    <comment xml:lang="sl">Slika JPEG-2000 JPX</comment>
     <comment xml:lang="sv">JPEG-2000 JPX-bild</comment>
+    <comment xml:lang="tr">JPEG-2000 JPX görüntüsü</comment>
     <comment xml:lang="uk">зображення JPX JPEG-2000</comment>
-    <comment xml:lang="zh_CN">JPEG-2000 JPX 图像</comment>
-    <comment xml:lang="zh_TW">JPEG-2000 JPX 影像</comment>
+    <comment xml:lang="zh-CN">JPEG-2000 JPX 图像</comment>
+    <comment xml:lang="zh-TW">JPEG-2000 JPX 影像</comment>
     <acronym>JPX</acronym>
     <expanded-acronym>JPEG-2000 eXtended</expanded-acronym>
     <magic priority="50">
-      <match value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        jpx\x20" type="string" offset="0" mask="0xffffffffffffffffffffffff0000000000000000ffffffff"/>
+      <match type="string" mask="0xffffffffffffffffffffffff0000000000000000ffffffff" value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        jpx\x20" offset="0"/>
     </magic>
     <glob pattern="*.jpf"/>
     <glob pattern="*.jpx"/>
   </mime-type>
   <mime-type type="image/jpm">
     <comment>JPEG-2000 JPM image</comment>
+    <comment xml:lang="af">JPEG-2000 JPM-beeld</comment>
+    <comment xml:lang="bg">Изображение — JPEG-2000 JPM</comment>
     <comment xml:lang="ca">imatge JPEG-2000 JPM</comment>
     <comment xml:lang="cs">obrázek JPEG-2000 JPM</comment>
+    <comment xml:lang="da">JPEG-2000 JPM-billede</comment>
     <comment xml:lang="de">JPEG-2000 JPM-Bild</comment>
-    <comment xml:lang="en_GB">JPEG-2000 JPM image</comment>
+    <comment xml:lang="en-GB">JPEG-2000 JPM image</comment>
     <comment xml:lang="es">imagen JPEG-2000 JPM</comment>
+    <comment xml:lang="eu">JPEG-2000 JPM irudia</comment>
     <comment xml:lang="fi">JPEG-2000 JPM -kuva</comment>
+    <comment xml:lang="fr">image JPEG-2000 JPM</comment>
+    <comment xml:lang="fur">imagjin JPEG-2000 JPM</comment>
+    <comment xml:lang="ga">íomhá JPEG-2000 JPM</comment>
     <comment xml:lang="hr">JPEG-2000 JPM slika</comment>
     <comment xml:lang="hu">JPEG-2000 JPM kép</comment>
     <comment xml:lang="id">Citra JPEG-2000 JPM</comment>
@@ -25569,29 +26478,38 @@
     <comment xml:lang="kk">JPEG-2000 JPM суреті</comment>
     <comment xml:lang="ko">JPEG-2000 JPM 그림</comment>
     <comment xml:lang="pl">Obraz JPM JPEG-2000</comment>
-    <comment xml:lang="pt_BR">Imagem JPM de JPEG-2000</comment>
+    <comment xml:lang="pt-BR">Imagem JPM de JPEG-2000</comment>
     <comment xml:lang="ru">Изображение JPEG-2000 JPM</comment>
     <comment xml:lang="sk">Obrázok JPEG-2000 JPM</comment>
+    <comment xml:lang="sl">Slika JPEG-2000 JPM</comment>
     <comment xml:lang="sv">JPEG-2000 JPM-bild</comment>
+    <comment xml:lang="tr">JPEG-2000 JPM görüntüsü</comment>
     <comment xml:lang="uk">зображення JPM JPEG-2000</comment>
-    <comment xml:lang="zh_CN">JPEG-2000 JPM 图像</comment>
-    <comment xml:lang="zh_TW">JPEG-2000 JPM 影像</comment>
+    <comment xml:lang="zh-CN">JPEG-2000 JPM 图像</comment>
+    <comment xml:lang="zh-TW">JPEG-2000 JPM 影像</comment>
     <acronym>JPM</acronym>
     <expanded-acronym>JPEG-2000 Mixed</expanded-acronym>
     <magic priority="50">
-      <match value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        jpm\x20" type="string" offset="0" mask="0xffffffffffffffffffffffff0000000000000000ffffffff"/>
+      <match type="string" mask="0xffffffffffffffffffffffff0000000000000000ffffffff" value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        jpm\x20" offset="0"/>
     </magic>
     <glob pattern="*.jpm"/>
     <glob pattern="*.jpgm"/>
   </mime-type>
   <mime-type type="video/mj2">
     <comment>JPEG-2000 MJ2 video</comment>
+    <comment xml:lang="af">JPEG-2000 MJ2-video</comment>
+    <comment xml:lang="bg">Видео — JPEG-2000 MJ2</comment>
     <comment xml:lang="ca">vídeo JPEG-2000 MJ2</comment>
     <comment xml:lang="cs">video JPEG-2000 MJ2</comment>
+    <comment xml:lang="da">JPEG-2000 MJ2-video</comment>
     <comment xml:lang="de">JPEG-2000 MJ2-Video</comment>
-    <comment xml:lang="en_GB">JPEG-2000 MJ2 video</comment>
+    <comment xml:lang="en-GB">JPEG-2000 MJ2 video</comment>
     <comment xml:lang="es">vídeo JPEG-2000 MJ2</comment>
+    <comment xml:lang="eu">JPEG-2000 MJ2 bideoa</comment>
     <comment xml:lang="fi">JPEG-2000 MJ2 -video</comment>
+    <comment xml:lang="fr">vidéo JPEG-2000 MJ2</comment>
+    <comment xml:lang="fur">video JPEG-2000 MJ2</comment>
+    <comment xml:lang="ga">íomhá JPEG-2000 MJ2</comment>
     <comment xml:lang="hr">JPEG-2000 MJ2 video snimka</comment>
     <comment xml:lang="hu">JPEG-2000 MJ2 videó</comment>
     <comment xml:lang="id">Video JPEG-2000 MJ2</comment>
@@ -25599,70 +26517,55 @@
     <comment xml:lang="kk">JPEG-2000 MJ2 видеосы</comment>
     <comment xml:lang="ko">JPEG-2000 MJ2 동영상</comment>
     <comment xml:lang="pl">Plik wideo MJ2 JPEG-2000</comment>
-    <comment xml:lang="pt_BR">Imagem MJ2 de JPEG-2000</comment>
+    <comment xml:lang="pt-BR">Imagem MJ2 de JPEG-2000</comment>
     <comment xml:lang="ru">Видео JPEG-2000 MJ2</comment>
     <comment xml:lang="sk">Video JPEG-2000 MJ2</comment>
+    <comment xml:lang="sl">Video JPEG-2000 MJ2</comment>
     <comment xml:lang="sv">JPEG-2000 MJ2-bild</comment>
+    <comment xml:lang="tr">JPEG-2000 MJ2 videosu</comment>
     <comment xml:lang="uk">зображення MJ2 JPEG-2000</comment>
-    <comment xml:lang="zh_CN">JPEG-2000 MJ2 视频</comment>
-    <comment xml:lang="zh_TW">JPEG-2000 MJ2 視訊</comment>
+    <comment xml:lang="zh-CN">JPEG-2000 MJ2 视频</comment>
+    <comment xml:lang="zh-TW">JPEG-2000 MJ2 視訊</comment>
     <acronym>MJ2</acronym>
     <expanded-acronym>Motion JPEG-2000</expanded-acronym>
     <magic priority="50">
-      <match value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        mjp2" type="string" offset="0" mask="0xffffffffffffffffffffffff0000000000000000ffffffff"/>
+      <match type="string" mask="0xffffffffffffffffffffffff0000000000000000ffffffff" value="\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a        mjp2" offset="0"/>
     </magic>
     <glob pattern="*.mj2"/>
     <glob pattern="*.mjp2"/>
   </mime-type>
   <mime-type type="image/openraster">
-    <comment>OpenRaster archiving image</comment>
-    <comment xml:lang="ar">صورة أرشيف OpenRaster</comment>
+    <comment>OpenRaster image</comment>
     <comment xml:lang="bg">Изображение — OpenRaster</comment>
-    <comment xml:lang="ca">imatge d'arxivat OpenRaster</comment>
-    <comment xml:lang="cs">archivační obraz OpenRaster</comment>
-    <comment xml:lang="da">OpenRaster-arkivaftryk</comment>
-    <comment xml:lang="de">OpenRaster-Archivierungsbild</comment>
-    <comment xml:lang="el">Εικόνα αρχειοθέτησης OpenRaster</comment>
-    <comment xml:lang="en_GB">OpenRaster archiving image</comment>
-    <comment xml:lang="es">imagen de archivado de OpenRaster</comment>
-    <comment xml:lang="eu">OpenRaster artxiboaren irudia</comment>
-    <comment xml:lang="fi">OpenRaster-arkistokuva</comment>
-    <comment xml:lang="fo">OpenRaster goymslumynd</comment>
-    <comment xml:lang="fr">image d'archive OpenRaster</comment>
-    <comment xml:lang="ga">íomhá chartlannaithe OpenRaster</comment>
-    <comment xml:lang="gl">imaxe arquivada de OpenRaster</comment>
-    <comment xml:lang="he">תמונת ארכיון של OpenRaster</comment>
-    <comment xml:lang="hr">OpenRaster slika arhive</comment>
-    <comment xml:lang="hu">OpenRaster archiválási kép</comment>
-    <comment xml:lang="ia">Imagine de archivo OpenRaster</comment>
-    <comment xml:lang="id">Gambar pengarsipan OpenRaster</comment>
-    <comment xml:lang="it">Immagine archiviazione OpenRaster</comment>
-    <comment xml:lang="ja">OpenRaster アーカイブイメージ</comment>
-    <comment xml:lang="ka">OpenRaster-ის საარქივო გამოსახულება</comment>
-    <comment xml:lang="kk">OpenRaster архивтеу суреті</comment>
-    <comment xml:lang="ko">OpenRaster 압축 이미지</comment>
-    <comment xml:lang="lt">OpenRaster archyvavimo paveikslėlis</comment>
-    <comment xml:lang="lv">OpenRaster arhivēšanas attēls</comment>
-    <comment xml:lang="nl">OpenRaster archiverings-image</comment>
-    <comment xml:lang="oc">imatge d'archiu OpenRaster</comment>
-    <comment xml:lang="pl">Archiwalny obraz OpenRaster</comment>
-    <comment xml:lang="pt">imagem arquivo OpenRaster</comment>
-    <comment xml:lang="pt_BR">Imagem de arquivamento OpenRaster</comment>
-    <comment xml:lang="ro">Arhivă imagine OpenRaster</comment>
-    <comment xml:lang="ru">Архивное изображение OpenRaster</comment>
-    <comment xml:lang="sk">Archivačný obrázok OpenRaster</comment>
-    <comment xml:lang="sl">Odtis arhiva OpenRaster</comment>
-    <comment xml:lang="sr">слика Опен Растер архивирања</comment>
-    <comment xml:lang="sv">OpenRaster-arkivbild</comment>
-    <comment xml:lang="tr">OpenRaster arşivleme görüntüsü</comment>
-    <comment xml:lang="uk">архівоване зображення OpenRaster</comment>
-    <comment xml:lang="zh_CN">OpenRaster 归档图像</comment>
-    <comment xml:lang="zh_TW">OpenRaster 封存影像</comment>
+    <comment xml:lang="ca">imatge OpenRaster</comment>
+    <comment xml:lang="da">OpenRaster-billede</comment>
+    <comment xml:lang="de">OpenRaster-Bild</comment>
+    <comment xml:lang="en-GB">OpenRaster image</comment>
+    <comment xml:lang="es">imagen OpenRaster</comment>
+    <comment xml:lang="eu">OpenRaster irudia</comment>
+    <comment xml:lang="fi">OpenRaster-kuva</comment>
+    <comment xml:lang="fr">image OpenRaster</comment>
+    <comment xml:lang="hr">OpenRaster slika</comment>
+    <comment xml:lang="hu">OpenRaster kép</comment>
+    <comment xml:lang="id">Citra OpenRaster</comment>
+    <comment xml:lang="it">Immagine OpenRaster</comment>
+    <comment xml:lang="kk">OpenRaster суреті</comment>
+    <comment xml:lang="ko">OpenRaster 그림</comment>
+    <comment xml:lang="pl">Obraz OpenRaster</comment>
+    <comment xml:lang="pt-BR">Imagem OpenRaster</comment>
+    <comment xml:lang="ru">Изображение OpenRaster</comment>
+    <comment xml:lang="sk">Obrázok OpenRaster</comment>
+    <comment xml:lang="sl">Slika OpenRaster</comment>
+    <comment xml:lang="sv">OpenRaster-bild</comment>
+    <comment xml:lang="tr">OpenRaster görüntüsü</comment>
+    <comment xml:lang="uk">зображення OpenRaster</comment>
+    <comment xml:lang="zh-CN">OpenRaster 图像</comment>
+    <comment xml:lang="zh-TW">OpenRaster 影像</comment>
     <sub-class-of type="application/zip"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="mimetype" type="string" offset="30">
-          <match value="image/openraster" type="string" offset="38"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="mimetype" offset="30">
+          <match type="string" value="image/openraster" offset="38"/>
         </match>
       </match>
     </magic>
@@ -25671,19 +26574,20 @@
   <mime-type type="image/x-dds">
     <comment>DirectDraw surface</comment>
     <comment xml:lang="ar">مساحة DirectDraw</comment>
-    <comment xml:lang="be@latin">Pavierchnia DirectDraw</comment>
+    <comment xml:lang="be-Latn">Pavierchnia DirectDraw</comment>
     <comment xml:lang="bg">Изображение — повърхност на DirectDraw</comment>
     <comment xml:lang="ca">superfície DirectDraw</comment>
     <comment xml:lang="cs">povrch DirectDraw</comment>
     <comment xml:lang="da">DirectDraw-overflade</comment>
     <comment xml:lang="de">DirectDraw-Oberfläche</comment>
     <comment xml:lang="el">Επιφάνεια DirectDraw</comment>
-    <comment xml:lang="en_GB">DirectDraw surface</comment>
+    <comment xml:lang="en-GB">DirectDraw surface</comment>
     <comment xml:lang="es">superficie de DirectDraw</comment>
     <comment xml:lang="eu">DirectDraw gainazala</comment>
     <comment xml:lang="fi">DirectDraw-piirtoalue</comment>
     <comment xml:lang="fo">DirectDraw yvirflata</comment>
     <comment xml:lang="fr">surface DirectDraw</comment>
+    <comment xml:lang="fur">superficie DirectDraw</comment>
     <comment xml:lang="ga">dromchla DirectDraw</comment>
     <comment xml:lang="gl">superficie de DirectDraw</comment>
     <comment xml:lang="he">משטח של DirectDraw</comment>
@@ -25704,7 +26608,7 @@
     <comment xml:lang="oc">surfàcia DirectDraw</comment>
     <comment xml:lang="pl">Powierzchnia DirectDraw</comment>
     <comment xml:lang="pt">superfície DirectDraw</comment>
-    <comment xml:lang="pt_BR">Superfície do DirectDraw</comment>
+    <comment xml:lang="pt-BR">Superfície do DirectDraw</comment>
     <comment xml:lang="ro">Suprafață DirectDraw</comment>
     <comment xml:lang="ru">Плоскость DirectDraw</comment>
     <comment xml:lang="sk">Plocha DirectDraw</comment>
@@ -25715,8 +26619,8 @@
     <comment xml:lang="tr">DirectDraw yüzeyi</comment>
     <comment xml:lang="uk">поверхня DirectDraw</comment>
     <comment xml:lang="vi">Mặt DirectDraw</comment>
-    <comment xml:lang="zh_CN">DirectDraw 表面</comment>
-    <comment xml:lang="zh_TW">DirectDraw 表面</comment>
+    <comment xml:lang="zh-CN">DirectDraw 表面</comment>
+    <comment xml:lang="zh-TW">DirectDraw 表面</comment>
     <magic priority="50">
       <match value="DDS" type="string" offset="0"/>
     </magic>
@@ -25724,20 +26628,22 @@
   </mime-type>
   <mime-type type="image/x-xcursor">
     <comment>X11 cursor</comment>
+    <comment xml:lang="af">X11-wyser</comment>
     <comment xml:lang="ar">مؤشر X11</comment>
-    <comment xml:lang="be@latin">Kursor X11</comment>
+    <comment xml:lang="be-Latn">Kursor X11</comment>
     <comment xml:lang="bg">Курсор — X11</comment>
-    <comment xml:lang="ca">cursor X11</comment>
+    <comment xml:lang="ca">cursor de X11</comment>
     <comment xml:lang="cs">kurzor X11</comment>
     <comment xml:lang="da">X11-markør</comment>
     <comment xml:lang="de">X11-Zeiger</comment>
     <comment xml:lang="el">Δρομέας X11</comment>
-    <comment xml:lang="en_GB">X11 cursor</comment>
+    <comment xml:lang="en-GB">X11 cursor</comment>
     <comment xml:lang="es">cursor de X11</comment>
     <comment xml:lang="eu">X11 kurtsorea</comment>
     <comment xml:lang="fi">X11-osoitin</comment>
     <comment xml:lang="fo">X11 vísi</comment>
     <comment xml:lang="fr">curseur X11</comment>
+    <comment xml:lang="fur">cursôr X11</comment>
     <comment xml:lang="ga">cúrsóir X11</comment>
     <comment xml:lang="gl">Cursor X11</comment>
     <comment xml:lang="he">סמן של X11</comment>
@@ -25757,7 +26663,7 @@
     <comment xml:lang="oc">cursor X11</comment>
     <comment xml:lang="pl">Kursor X11</comment>
     <comment xml:lang="pt">cursor X11</comment>
-    <comment xml:lang="pt_BR">Cursor do X11</comment>
+    <comment xml:lang="pt-BR">Cursor do X11</comment>
     <comment xml:lang="ro">Cursor X11</comment>
     <comment xml:lang="ru">Курсор X11</comment>
     <comment xml:lang="sk">Kurzor X11</comment>
@@ -25768,29 +26674,31 @@
     <comment xml:lang="tr">X11 imleci</comment>
     <comment xml:lang="uk">курсор X11</comment>
     <comment xml:lang="vi">Con chạy X11</comment>
-    <comment xml:lang="zh_CN">X11 指针</comment>
-    <comment xml:lang="zh_TW">X11 滑鼠游標</comment>
+    <comment xml:lang="zh-CN">X11 指针</comment>
+    <comment xml:lang="zh-TW">X11 滑鼠游標</comment>
     <magic priority="50">
-      <match value="Xcur" type="string" offset="0"/>
+      <match type="string" value="Xcur" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-exr">
     <comment>EXR image</comment>
+    <comment xml:lang="af">EXR-beeld</comment>
     <comment xml:lang="ar">صورة EXR</comment>
-    <comment xml:lang="be@latin">Vyjava EXR</comment>
+    <comment xml:lang="be-Latn">Vyjava EXR</comment>
     <comment xml:lang="bg">Изображение — EXR</comment>
     <comment xml:lang="ca">imatge EXR</comment>
     <comment xml:lang="cs">obrázek EXR</comment>
     <comment xml:lang="da">EXR-billede</comment>
     <comment xml:lang="de">EXR-Bild</comment>
     <comment xml:lang="el">Εικόνα EXR</comment>
-    <comment xml:lang="en_GB">EXR image</comment>
+    <comment xml:lang="en-GB">EXR image</comment>
     <comment xml:lang="eo">EXR-bildo</comment>
     <comment xml:lang="es">imagen EXR</comment>
     <comment xml:lang="eu">EXR irudia</comment>
     <comment xml:lang="fi">EXR-kuva</comment>
     <comment xml:lang="fo">EXR mynd</comment>
     <comment xml:lang="fr">image EXR</comment>
+    <comment xml:lang="fur">imagjin EXR</comment>
     <comment xml:lang="ga">íomhá EXR</comment>
     <comment xml:lang="gl">imaxe EXR</comment>
     <comment xml:lang="he">תמונת EXR</comment>
@@ -25811,7 +26719,7 @@
     <comment xml:lang="oc">imatge EXR</comment>
     <comment xml:lang="pl">Obraz EXR</comment>
     <comment xml:lang="pt">imagem EXR</comment>
-    <comment xml:lang="pt_BR">Imagem EXR</comment>
+    <comment xml:lang="pt-BR">Imagem EXR</comment>
     <comment xml:lang="ro">Imagine EXR</comment>
     <comment xml:lang="ru">Изображение EXR</comment>
     <comment xml:lang="sk">Obrázok EXR</comment>
@@ -25822,30 +26730,32 @@
     <comment xml:lang="tr">EXR görüntüsü</comment>
     <comment xml:lang="uk">зображення EXR</comment>
     <comment xml:lang="vi">Ảnh EXR</comment>
-    <comment xml:lang="zh_CN">EXR 图像</comment>
-    <comment xml:lang="zh_TW">EXR 影像</comment>
+    <comment xml:lang="zh-CN">EXR 图像</comment>
+    <comment xml:lang="zh-TW">EXR 影像</comment>
     <magic priority="50">
-      <match value="20000630" type="little32" offset="0"/>
+      <match type="little32" value="20000630" offset="0"/>
     </magic>
     <glob pattern="*.exr"/>
   </mime-type>
   <mime-type type="image/x-pict">
     <comment>Macintosh Quickdraw/PICT drawing</comment>
+    <comment xml:lang="af">Macintosh Quickdraw/PICT-tekening</comment>
     <comment xml:lang="ar">رسمة ماكنتوش Quickdraw/PICT</comment>
-    <comment xml:lang="be@latin">Rysunak Macintosh Quickdraw/PICT</comment>
+    <comment xml:lang="be-Latn">Rysunak Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="bg">Чертеж — Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="ca">dibuix Quickdraw/PICT de Macintosh</comment>
     <comment xml:lang="cs">kresba Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="da">Macintosh Quickdraw/PICT-tegning</comment>
     <comment xml:lang="de">Macintosh-Quickdraw/PICT-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο Macintosh Quickdraw/PICT</comment>
-    <comment xml:lang="en_GB">Macintosh Quickdraw/PICT drawing</comment>
+    <comment xml:lang="en-GB">Macintosh Quickdraw/PICT drawing</comment>
     <comment xml:lang="eo">Quickdraw/PICT-grafikaĵo de Macintosh</comment>
     <comment xml:lang="es">dibujo de Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="eu">Macintosh Quickdraw/PICT marrazkia</comment>
     <comment xml:lang="fi">Macintosh Quickdraw/PICT -piirros</comment>
     <comment xml:lang="fo">Macintosh Quickdraw/PICT tekning</comment>
     <comment xml:lang="fr">dessin Macintosh Quickdraw/PICT</comment>
+    <comment xml:lang="fur">dissen Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="ga">líníocht Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="gl">debuxo de Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="he">ציור של Macintosh Quickdraw/PICT</comment>
@@ -25866,7 +26776,7 @@
     <comment xml:lang="oc">dessenh Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="pl">Rysunek QuickDraw/PICT Macintosh</comment>
     <comment xml:lang="pt">desenho Quickdraw/PICT de Macintosh</comment>
-    <comment xml:lang="pt_BR">Desenho do Macintosh Quickdraw/PICT</comment>
+    <comment xml:lang="pt-BR">Desenho do Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="ro">Desen Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="ru">Рисунок Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="sk">Kresba Macintosh QuickDraw/PICT</comment>
@@ -25877,22 +26787,22 @@
     <comment xml:lang="tr">Macintosh Quickdraw/PICT çizimi</comment>
     <comment xml:lang="uk">малюнок Macintosh Quickdraw/PICT</comment>
     <comment xml:lang="vi">Bản vẽ Quickdraw/PICT của Macintosh</comment>
-    <comment xml:lang="zh_CN">Macintosh Quickdraw/PICT 绘图</comment>
-    <comment xml:lang="zh_TW">Macintosh Quickdraw/PICT 繪圖</comment>
+    <comment xml:lang="zh-CN">Macintosh Quickdraw/PICT 绘图</comment>
+    <comment xml:lang="zh-TW">Macintosh Quickdraw/PICT 繪圖</comment>
     <magic priority="50">
-      <match value="0x0011" type="big16" offset="10">
-        <match value="0x02FF" type="big16" offset="12">
-          <match value="0x0C00" type="big16" offset="14">
-            <match value="0xFFFE" type="big16" offset="16"/>
+      <match type="big16" value="0x0011" offset="10">
+        <match type="big16" value="0x02FF" offset="12">
+          <match type="big16" value="0x0C00" offset="14">
+            <match type="big16" value="0xFFFE" offset="16"/>
           </match>
         </match>
       </match>
     </magic>
     <magic priority="50">
-      <match value="0x0011" type="big16" offset="522">
-        <match value="0x02FF" type="big16" offset="524">
-          <match value="0x0C00" type="big16" offset="526">
-            <match value="0xFFFE" type="big16" offset="528"/>
+      <match type="big16" value="0x0011" offset="522">
+        <match type="big16" value="0x02FF" offset="524">
+          <match type="big16" value="0x0C00" offset="526">
+            <match type="big16" value="0xFFFE" offset="528"/>
           </match>
         </match>
       </match>
@@ -25904,20 +26814,22 @@
   </mime-type>
   <mime-type type="application/x-ufraw">
     <comment>UFRaw ID image</comment>
+    <comment xml:lang="af">UFRaw ID-beeld</comment>
     <comment xml:lang="ar">صورة UFRaw ID</comment>
-    <comment xml:lang="be@latin">Vyjava UFRaw ID</comment>
+    <comment xml:lang="be-Latn">Vyjava UFRaw ID</comment>
     <comment xml:lang="bg">Изображение — UFRaw ID</comment>
     <comment xml:lang="ca">imatge ID UFRaw</comment>
     <comment xml:lang="cs">obrázek ID UFRaw</comment>
     <comment xml:lang="da">UFRaw ID-billede</comment>
     <comment xml:lang="de">UFRaw-Bildbeschreibungsdatei</comment>
     <comment xml:lang="el">Εικόνα UFRaw</comment>
-    <comment xml:lang="en_GB">UFRaw ID image</comment>
+    <comment xml:lang="en-GB">UFRaw ID image</comment>
     <comment xml:lang="es">imagen de identificación UFRaw</comment>
     <comment xml:lang="eu">UFRaw ID irudia</comment>
     <comment xml:lang="fi">UFRaw ID -kuva</comment>
     <comment xml:lang="fo">UFRaw ID mynd</comment>
     <comment xml:lang="fr">image ID UFRaw</comment>
+    <comment xml:lang="fur">imagjin UFRaw ID</comment>
     <comment xml:lang="ga">íomhá aitheantais UFRaw</comment>
     <comment xml:lang="gl">imaxe de identificación UFRaw</comment>
     <comment xml:lang="he">תמונה של UFRaw ID</comment>
@@ -25937,7 +26849,7 @@
     <comment xml:lang="oc">imatge ID UFRaw</comment>
     <comment xml:lang="pl">Obraz UFRaw ID</comment>
     <comment xml:lang="pt">imagem UFRaw ID</comment>
-    <comment xml:lang="pt_BR">Imagem ID do UFRaw</comment>
+    <comment xml:lang="pt-BR">Imagem ID do UFRaw</comment>
     <comment xml:lang="ro">ID imagine UFRaw</comment>
     <comment xml:lang="ru">Изображение UFRaw ID</comment>
     <comment xml:lang="sk">Obrázok ID UFRaw</comment>
@@ -25948,8 +26860,8 @@
     <comment xml:lang="tr">UFRaw ID görüntüsü</comment>
     <comment xml:lang="uk">зображення UFRaw ID</comment>
     <comment xml:lang="vi">Ảnh ID UFRaw</comment>
-    <comment xml:lang="zh_CN">UFRaw ID 图像</comment>
-    <comment xml:lang="zh_TW">UFRaw ID 影像</comment>
+    <comment xml:lang="zh-CN">UFRaw ID 图像</comment>
+    <comment xml:lang="zh-TW">UFRaw ID 影像</comment>
     <acronym>UFRaw</acronym>
     <expanded-acronym>Unidentified Flying Raw</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -25958,20 +26870,22 @@
   </mime-type>
   <mime-type type="image/x-dcraw">
     <comment>digital raw image</comment>
+    <comment xml:lang="af">digitale rou beeld</comment>
     <comment xml:lang="ar">صورة رقمية خامة</comment>
-    <comment xml:lang="be@latin">suvoraja ličbavaja vyjava</comment>
+    <comment xml:lang="be-Latn">suvoraja ličbavaja vyjava</comment>
     <comment xml:lang="bg">Изображение — digital raw</comment>
     <comment xml:lang="ca">imatge digital en cru</comment>
     <comment xml:lang="cs">digitální surový obrázek</comment>
-    <comment xml:lang="da">digitalt råbillede</comment>
+    <comment xml:lang="da">digitalt raw-billede</comment>
     <comment xml:lang="de">Digitales Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη ψηφιακή εικόνα</comment>
-    <comment xml:lang="en_GB">digital raw image</comment>
+    <comment xml:lang="en-GB">digital raw image</comment>
     <comment xml:lang="es">imagen digital en bruto</comment>
     <comment xml:lang="eu">irudi gordin digitala</comment>
     <comment xml:lang="fi">digitaalinen raakakuva</comment>
     <comment xml:lang="fo">talgild rámynd</comment>
     <comment xml:lang="fr">image brute numérique</comment>
+    <comment xml:lang="fur">imagjin grese digjitâl</comment>
     <comment xml:lang="ga">amhíomhá dhigiteach</comment>
     <comment xml:lang="gl">imaxe en bruto dixital</comment>
     <comment xml:lang="he">תמונה דיגטלית גולמית</comment>
@@ -25991,7 +26905,7 @@
     <comment xml:lang="oc">imatge brut numeric</comment>
     <comment xml:lang="pl">Surowy obraz cyfrowy</comment>
     <comment xml:lang="pt">imagem digital em bruto</comment>
-    <comment xml:lang="pt_BR">Imagem digital bruta</comment>
+    <comment xml:lang="pt-BR">Imagem digital bruta</comment>
     <comment xml:lang="ro">imagine digitală brută</comment>
     <comment xml:lang="ru">Необработанное цифровое изображение</comment>
     <comment xml:lang="sk">Digitálny surový obrázok</comment>
@@ -26002,25 +26916,27 @@
     <comment xml:lang="tr">sayısal ham görüntü</comment>
     <comment xml:lang="uk">зображення цифрового негатива</comment>
     <comment xml:lang="vi">ảnh thô số</comment>
-    <comment xml:lang="zh_CN">数字化原始图像</comment>
-    <comment xml:lang="zh_TW">數位原生影像</comment>
+    <comment xml:lang="zh-CN">数字化原始图像</comment>
+    <comment xml:lang="zh-TW">數位原始影像</comment>
   </mime-type>
   <mime-type type="image/x-adobe-dng">
     <comment>Adobe DNG negative</comment>
+    <comment xml:lang="af">Adobe DNG-negatief</comment>
     <comment xml:lang="ar">Adobe DNG negative</comment>
-    <comment xml:lang="be@latin">Adobe DNG Negative</comment>
+    <comment xml:lang="be-Latn">Adobe DNG Negative</comment>
     <comment xml:lang="bg">Изображение — Adobe DNG negative</comment>
     <comment xml:lang="ca">negatiu DNG d'Adobe</comment>
     <comment xml:lang="cs">negativ Adobe (DNG)</comment>
     <comment xml:lang="da">Adobe DNG-negativ</comment>
     <comment xml:lang="de">Adobe Digitales Negativ</comment>
     <comment xml:lang="el">Αρνητικό Adobe DNG</comment>
-    <comment xml:lang="en_GB">Adobe DNG negative</comment>
+    <comment xml:lang="en-GB">Adobe DNG negative</comment>
     <comment xml:lang="es">negativo DNG de Adobe</comment>
     <comment xml:lang="eu">Adobe DNG negatiboa</comment>
     <comment xml:lang="fi">Adobe-DNG-negatiivi</comment>
     <comment xml:lang="fo">Adobe DNG negativ</comment>
     <comment xml:lang="fr">négatif DNG Adobe</comment>
+    <comment xml:lang="fur">negatîf Adobe DNG</comment>
     <comment xml:lang="ga">claonchló DNG Adobe</comment>
     <comment xml:lang="gl">negativo DNG de Adobe</comment>
     <comment xml:lang="he">תשליל Adobe DNG</comment>
@@ -26041,7 +26957,7 @@
     <comment xml:lang="oc">négatif DNG Adobe</comment>
     <comment xml:lang="pl">Negatyw DNG Adobe</comment>
     <comment xml:lang="pt">negativo Adobe DNG</comment>
-    <comment xml:lang="pt_BR">Negativo DNG da Adobe</comment>
+    <comment xml:lang="pt-BR">Negativo DNG da Adobe</comment>
     <comment xml:lang="ro">Negativ Adobe DNG</comment>
     <comment xml:lang="ru">Негатив Adobe DNG</comment>
     <comment xml:lang="sk">Adobe Digital Negative (DNG)</comment>
@@ -26052,32 +26968,34 @@
     <comment xml:lang="tr">Adobe DNG negatifi</comment>
     <comment xml:lang="uk">цифровий негатив DNG Adobe</comment>
     <comment xml:lang="vi">Âm bản Adobe DNG</comment>
-    <comment xml:lang="zh_CN">Adobe DNG 负片</comment>
-    <comment xml:lang="zh_TW">Adobe DNG 負片</comment>
+    <comment xml:lang="zh-CN">Adobe DNG 负片</comment>
+    <comment xml:lang="zh-TW">Adobe DNG 負片</comment>
     <acronym>DNG</acronym>
     <expanded-acronym>Digital Negative</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
     <sub-class-of type="image/tiff"/>
     <glob pattern="*.dng"/>
   </mime-type>
-  
-  
+  <!-- Canon has 2 format: CRW and CR2  !-->
+  <!-- CRW is easy !-->
   <mime-type type="image/x-canon-crw">
     <comment>Canon CRW raw image</comment>
+    <comment xml:lang="af">Canon CRW rou beeld</comment>
     <comment xml:lang="ar">صورة Canon CRW خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Canon CRW</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Canon CRW</comment>
     <comment xml:lang="bg">Изображение — Canon CRW raw</comment>
     <comment xml:lang="ca">imatge en cru de Canon CRW</comment>
     <comment xml:lang="cs">surový obrázek Canon CRW</comment>
-    <comment xml:lang="da">Canon CRW-råbillede</comment>
+    <comment xml:lang="da">Canon CRW raw-billede</comment>
     <comment xml:lang="de">Canon-CRW-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Canon CRW</comment>
-    <comment xml:lang="en_GB">Canon CRW raw image</comment>
+    <comment xml:lang="en-GB">Canon CRW raw image</comment>
     <comment xml:lang="es">imagen en bruto CRW de Canon</comment>
     <comment xml:lang="eu">Canon CRW irudi gordina</comment>
     <comment xml:lang="fi">Canon-CRW-raakakuva</comment>
     <comment xml:lang="fo">Canon CRW rámynd</comment>
     <comment xml:lang="fr">image brute CRW Canon</comment>
+    <comment xml:lang="fur">imagjin grese Canon CRW</comment>
     <comment xml:lang="ga">amhíomhá Canon CRW</comment>
     <comment xml:lang="gl">imaxe en bruto de Canon CRW</comment>
     <comment xml:lang="he">תמונה גולמית של Canon CRW</comment>
@@ -26098,7 +27016,7 @@
     <comment xml:lang="oc">imatge brut CRW Canon</comment>
     <comment xml:lang="pl">Surowy obraz CRW Canon</comment>
     <comment xml:lang="pt">imagem em bruto Canon CRW</comment>
-    <comment xml:lang="pt_BR">Imagem bruta CRW da Canon</comment>
+    <comment xml:lang="pt-BR">Imagem bruta CRW da Canon</comment>
     <comment xml:lang="ro">Imagine brută Canon CRW</comment>
     <comment xml:lang="ru">Необработанное изображение Canon CRW</comment>
     <comment xml:lang="sk">Surový obrázok Canon CRW</comment>
@@ -26109,8 +27027,8 @@
     <comment xml:lang="tr">Canon CRW ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив CRW Canon</comment>
     <comment xml:lang="vi">Ảnh thô Canon CRW</comment>
-    <comment xml:lang="zh_CN">佳能 CRW 原始图像</comment>
-    <comment xml:lang="zh_TW">Canon CRW 原生影像</comment>
+    <comment xml:lang="zh-CN">佳能 CRW 原始图像</comment>
+    <comment xml:lang="zh-TW">Canon CRW 原始影像</comment>
     <acronym>CRW</acronym>
     <expanded-acronym>Canon RaW</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26119,23 +27037,25 @@
     </magic>
     <glob pattern="*.crw"/>
   </mime-type>
-  
+  <!-- CR2 is a TIFF !-->
   <mime-type type="image/x-canon-cr2">
     <comment>Canon CR2 raw image</comment>
+    <comment xml:lang="af">Canon CR2 rou beeld</comment>
     <comment xml:lang="ar">صورة Canon CR2 خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Canon CR2</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Canon CR2</comment>
     <comment xml:lang="bg">Изображение — Canon CR2 raw</comment>
     <comment xml:lang="ca">imatge en cru de Canon CR2</comment>
     <comment xml:lang="cs">surový obrázek Canon CR2</comment>
-    <comment xml:lang="da">Canon CR2-råbillede</comment>
+    <comment xml:lang="da">Canon CR2 raw-billede</comment>
     <comment xml:lang="de">Canon-CR2-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Canon CR2</comment>
-    <comment xml:lang="en_GB">Canon CR2 raw image</comment>
+    <comment xml:lang="en-GB">Canon CR2 raw image</comment>
     <comment xml:lang="es">imagen en bruto CR2 de Canon</comment>
     <comment xml:lang="eu">Canon CR2 irudi gordina</comment>
     <comment xml:lang="fi">Canon-CR2-raakakuva</comment>
     <comment xml:lang="fo">Canon CR2 rámynd</comment>
     <comment xml:lang="fr">image brute CR2 Canon</comment>
+    <comment xml:lang="fur">imagjin grese Canon CR2</comment>
     <comment xml:lang="ga">amhíomhá Canon CR2</comment>
     <comment xml:lang="gl">imaxe en bruto de Canon CR2</comment>
     <comment xml:lang="he">תמונה גולמית של Canon CR2</comment>
@@ -26156,7 +27076,7 @@
     <comment xml:lang="oc">imatge brut CR2 Canon</comment>
     <comment xml:lang="pl">Surowy obraz CR2 Canon</comment>
     <comment xml:lang="pt">imagem em bruto Canon CR2</comment>
-    <comment xml:lang="pt_BR">Imagem bruta CR2 da Canon</comment>
+    <comment xml:lang="pt-BR">Imagem bruta CR2 da Canon</comment>
     <comment xml:lang="ro">Imagine brută Canon CR2</comment>
     <comment xml:lang="ru">Необработанное изображение Canon CR2</comment>
     <comment xml:lang="sk">Surový obrázok Canon CR2</comment>
@@ -26167,8 +27087,8 @@
     <comment xml:lang="tr">Canon CR2 ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив CR2 Canon</comment>
     <comment xml:lang="vi">Ảnh thô Canon CR2</comment>
-    <comment xml:lang="zh_CN">佳能 CR2 原始图像</comment>
-    <comment xml:lang="zh_TW">Canon CR2 原生影像</comment>
+    <comment xml:lang="zh-CN">佳能 CR2 原始图像</comment>
+    <comment xml:lang="zh-TW">Canon CR2 原始影像</comment>
     <acronym>CR2</acronym>
     <expanded-acronym>Canon Raw 2</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26177,20 +27097,22 @@
   </mime-type>
   <mime-type type="image/x-fuji-raf">
     <comment>Fuji RAF raw image</comment>
+    <comment xml:lang="af">Fuji RAF rou beeld</comment>
     <comment xml:lang="ar">صورة Fuji RAF خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Fuji RAF</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Fuji RAF</comment>
     <comment xml:lang="bg">Изображение — Fuji RAF raw</comment>
     <comment xml:lang="ca">imatge en cru de Fuji RAF</comment>
     <comment xml:lang="cs">surový obrázek Fuji RAF</comment>
-    <comment xml:lang="da">Fuji RAF-råbillede</comment>
+    <comment xml:lang="da">Fuji RAF raw-billede</comment>
     <comment xml:lang="de">Fuji-RAF-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Fuji RAF</comment>
-    <comment xml:lang="en_GB">Fuji RAF raw image</comment>
+    <comment xml:lang="en-GB">Fuji RAF raw image</comment>
     <comment xml:lang="es">imagen en bruto RAF de Fuji</comment>
     <comment xml:lang="eu">Fuji RAF irudi gordina</comment>
     <comment xml:lang="fi">Fuji-RAF-raakakuva</comment>
     <comment xml:lang="fo">Fuji RAF raw mynd</comment>
     <comment xml:lang="fr">image brute RAF Fuji</comment>
+    <comment xml:lang="fur">imagjin grese Fuji RAF</comment>
     <comment xml:lang="ga">amhíomhá Fuji RAF</comment>
     <comment xml:lang="gl">imaxe en bruto de Fuji RAF</comment>
     <comment xml:lang="he">תמונה גולמית של Fuji RAF</comment>
@@ -26211,7 +27133,7 @@
     <comment xml:lang="oc">imatge brut RAF Fuji</comment>
     <comment xml:lang="pl">Surowy obraz RAF Fuji</comment>
     <comment xml:lang="pt">imagem em bruto Fuji RAF</comment>
-    <comment xml:lang="pt_BR">Imagem bruta RAF da Fuji</comment>
+    <comment xml:lang="pt-BR">Imagem bruta RAF da Fuji</comment>
     <comment xml:lang="ro">Imagine brută Fuji RAF</comment>
     <comment xml:lang="ru">Необработанное изображение Fuji RAF</comment>
     <comment xml:lang="sk">Surový obrázok Fuji RAF</comment>
@@ -26222,8 +27144,8 @@
     <comment xml:lang="tr">Fuji RAF ham görüntüsü</comment>
     <comment xml:lang="uk">Цифровий негатив RAF Fuji</comment>
     <comment xml:lang="vi">Ảnh thô Fuji RAF</comment>
-    <comment xml:lang="zh_CN">富士 RAF 原始图像</comment>
-    <comment xml:lang="zh_TW">Fuji RAF 原生影像</comment>
+    <comment xml:lang="zh-CN">富士 RAF 原始图像</comment>
+    <comment xml:lang="zh-TW">Fuji RAF 原始影像</comment>
     <acronym>RAF</acronym>
     <expanded-acronym>RAw Format</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26234,20 +27156,22 @@
   </mime-type>
   <mime-type type="image/x-kodak-dcr">
     <comment>Kodak DCR raw image</comment>
+    <comment xml:lang="af">Kodak DCR rou beeld</comment>
     <comment xml:lang="ar">صورة Kodak DCR خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Kodak DCR</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Kodak DCR</comment>
     <comment xml:lang="bg">Изображение — Kodak DCR raw</comment>
     <comment xml:lang="ca">imatge en cru de Kodak DCR</comment>
     <comment xml:lang="cs">surový obrázek Kodak DCR</comment>
-    <comment xml:lang="da">Kodak DCR-råbillede</comment>
+    <comment xml:lang="da">Kodak DCR raw-billede</comment>
     <comment xml:lang="de">Kodak-DCR-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Kodak DCR</comment>
-    <comment xml:lang="en_GB">Kodak DCR raw image</comment>
+    <comment xml:lang="en-GB">Kodak DCR raw image</comment>
     <comment xml:lang="es">imagen en bruto DCR de Kodak</comment>
     <comment xml:lang="eu">Kodak DCR irudi gordina</comment>
     <comment xml:lang="fi">Kodak-DCR-raakakuva</comment>
     <comment xml:lang="fo">Kodak DCR rámynd</comment>
     <comment xml:lang="fr">image brute DCR Kodak</comment>
+    <comment xml:lang="fur">imagjin grese Kodak DCR</comment>
     <comment xml:lang="ga">amhíomhá Kodak DCR</comment>
     <comment xml:lang="gl">imaxe en bruto de Kodad DCR</comment>
     <comment xml:lang="he">תמונה גולמית של Kodak DCR</comment>
@@ -26267,7 +27191,7 @@
     <comment xml:lang="oc">imatge brut DCR Kodak</comment>
     <comment xml:lang="pl">Surowy obraz DCR Kodak</comment>
     <comment xml:lang="pt">imagem em bruto Kodak DCR</comment>
-    <comment xml:lang="pt_BR">Imagem bruta DCR da Kodak</comment>
+    <comment xml:lang="pt-BR">Imagem bruta DCR da Kodak</comment>
     <comment xml:lang="ro">Imagine brută Kodak DCR</comment>
     <comment xml:lang="ru">Необработанное изображение Kodak DCR</comment>
     <comment xml:lang="sk">Surový obrázok Kodak DCR</comment>
@@ -26278,8 +27202,8 @@
     <comment xml:lang="tr">Kodak DCR ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив DCR Kodak</comment>
     <comment xml:lang="vi">Ảnh thô Kodak DCR</comment>
-    <comment xml:lang="zh_CN">柯达 DCR 原始图像</comment>
-    <comment xml:lang="zh_TW">Kodak DCR 原生影像</comment>
+    <comment xml:lang="zh-CN">柯达 DCR 原始图像</comment>
+    <comment xml:lang="zh-TW">Kodak DCR 原始影像</comment>
     <acronym>DCR</acronym>
     <expanded-acronym>Digital Camera Raw</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26288,20 +27212,22 @@
   </mime-type>
   <mime-type type="image/x-kodak-k25">
     <comment>Kodak K25 raw image</comment>
+    <comment xml:lang="af">Kodak K25 rou beeld</comment>
     <comment xml:lang="ar">صورة Kodak K25 خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Kodak K25</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Kodak K25</comment>
     <comment xml:lang="bg">Изображение — Kodak K25 raw</comment>
     <comment xml:lang="ca">imatge en cru de Kodak K25</comment>
     <comment xml:lang="cs">surový obrázek Kodak K25</comment>
-    <comment xml:lang="da">Kodak K25-råbillede</comment>
+    <comment xml:lang="da">Kodak K25 raw-billede</comment>
     <comment xml:lang="de">Kodak-K25-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Kodak K25</comment>
-    <comment xml:lang="en_GB">Kodak K25 raw image</comment>
+    <comment xml:lang="en-GB">Kodak K25 raw image</comment>
     <comment xml:lang="es">imagen en bruto K25 de Kodak</comment>
     <comment xml:lang="eu">Kodak K25 raw image</comment>
     <comment xml:lang="fi">Kodak-K25-raakakuva</comment>
     <comment xml:lang="fo">Kodak K25 rámynd</comment>
     <comment xml:lang="fr">image brute K25 Kodak</comment>
+    <comment xml:lang="fur">imagjin grese Kodak K25</comment>
     <comment xml:lang="ga">amhíomhá Kodak K25</comment>
     <comment xml:lang="gl">imaxe en bruto de Kodad K25</comment>
     <comment xml:lang="he">תמונה גולמית של Kodak K25</comment>
@@ -26321,7 +27247,7 @@
     <comment xml:lang="oc">imatge brut K25 Kodak</comment>
     <comment xml:lang="pl">Surowy obraz K25 Kodak</comment>
     <comment xml:lang="pt">imagem em bruto Kodak K25</comment>
-    <comment xml:lang="pt_BR">Imagem bruta K25 da Kodak</comment>
+    <comment xml:lang="pt-BR">Imagem bruta K25 da Kodak</comment>
     <comment xml:lang="ro">Imagine brută Kodak K25</comment>
     <comment xml:lang="ru">Необработанное изображение Kodak K25</comment>
     <comment xml:lang="sk">Surový obrázok Kodak K25</comment>
@@ -26332,8 +27258,8 @@
     <comment xml:lang="tr">Kodak K25 ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив K25 Kodak</comment>
     <comment xml:lang="vi">Ảnh thô Kodak K25</comment>
-    <comment xml:lang="zh_CN">柯达 K25 原始图像</comment>
-    <comment xml:lang="zh_TW">Kodak K25 原生影像</comment>
+    <comment xml:lang="zh-CN">柯达 K25 原始图像</comment>
+    <comment xml:lang="zh-TW">Kodak K25 原始影像</comment>
     <acronym>K25</acronym>
     <expanded-acronym>Kodak DC25</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26342,20 +27268,22 @@
   </mime-type>
   <mime-type type="image/x-kodak-kdc">
     <comment>Kodak KDC raw image</comment>
+    <comment xml:lang="af">Kodak KDC rou beeld</comment>
     <comment xml:lang="ar">صورة Kodak KDC خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Kodak KDC</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Kodak KDC</comment>
     <comment xml:lang="bg">Изображение — Kodak KDC raw</comment>
     <comment xml:lang="ca">imatge en cru de Kodak KDC</comment>
     <comment xml:lang="cs">surový obrázek Kodak KDC</comment>
-    <comment xml:lang="da">Kodak KDC-råbillede</comment>
+    <comment xml:lang="da">Kodak KDC raw-billede</comment>
     <comment xml:lang="de">Kodak-KDC-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Kodak KDC</comment>
-    <comment xml:lang="en_GB">Kodak KDC raw image</comment>
+    <comment xml:lang="en-GB">Kodak KDC raw image</comment>
     <comment xml:lang="es">imagen en bruto KDC de Kodak</comment>
     <comment xml:lang="eu">Kodak KDC irudi gordina</comment>
     <comment xml:lang="fi">Kodak-KDC-raakakuva</comment>
     <comment xml:lang="fo">Kodak KDC rámynd</comment>
     <comment xml:lang="fr">image brute KDC Kodak</comment>
+    <comment xml:lang="fur">imagjin grese Kodak KDC</comment>
     <comment xml:lang="ga">amhíomhá Kodak KDC</comment>
     <comment xml:lang="gl">imaxe en bruto de Kodad KDC</comment>
     <comment xml:lang="he">תמונה גולמית של Kodak KDC</comment>
@@ -26375,7 +27303,7 @@
     <comment xml:lang="oc">imatge brut KDC Kodak</comment>
     <comment xml:lang="pl">Surowy obraz KDC Kodak</comment>
     <comment xml:lang="pt">imagem em bruto Kodak KDC</comment>
-    <comment xml:lang="pt_BR">Imagem bruta KDC da Kodak</comment>
+    <comment xml:lang="pt-BR">Imagem bruta KDC da Kodak</comment>
     <comment xml:lang="ro">Imagine brută Kodak KDC</comment>
     <comment xml:lang="ru">Необработанное изображение Kodak KDC</comment>
     <comment xml:lang="sk">Surový obrázok Kodak KDC</comment>
@@ -26386,8 +27314,8 @@
     <comment xml:lang="tr">Kodak KDC ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив KDC Kodak</comment>
     <comment xml:lang="vi">Ảnh thô Kodak KDC</comment>
-    <comment xml:lang="zh_CN">柯达 KDC 原始图像</comment>
-    <comment xml:lang="zh_TW">Kodak KDC 原生影像</comment>
+    <comment xml:lang="zh-CN">柯达 KDC 原始图像</comment>
+    <comment xml:lang="zh-TW">Kodak KDC 原始影像</comment>
     <acronym>KDC</acronym>
     <expanded-acronym>Kodak Digital Camera</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26399,20 +27327,22 @@
   </mime-type>
   <mime-type type="image/x-minolta-mrw">
     <comment>Minolta MRW raw image</comment>
+    <comment xml:lang="af">Minolta MRW rou beeld</comment>
     <comment xml:lang="ar">صورة Minolta MRW خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Minolta MRW</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Minolta MRW</comment>
     <comment xml:lang="bg">Изображение — Minolta MRW raw</comment>
     <comment xml:lang="ca">imatge en cru de Minolta MRW</comment>
     <comment xml:lang="cs">surový obrázek Minolta MRW</comment>
-    <comment xml:lang="da">Minolta MRW-råbillede</comment>
+    <comment xml:lang="da">Minolta MRW raw-billede</comment>
     <comment xml:lang="de">Minolta-MRW-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Minolta MRW</comment>
-    <comment xml:lang="en_GB">Minolta MRW raw image</comment>
+    <comment xml:lang="en-GB">Minolta MRW raw image</comment>
     <comment xml:lang="es">imagen en bruto MRW de Minolta</comment>
     <comment xml:lang="eu">Minolta MRW irudi gordina</comment>
     <comment xml:lang="fi">Minolta-MRW-raakakuva</comment>
     <comment xml:lang="fo">Minolta MRW rámynd</comment>
     <comment xml:lang="fr">image brute MRW Minolta</comment>
+    <comment xml:lang="fur">imagjin grese Minolta MRW</comment>
     <comment xml:lang="ga">amhíomhá Minolta MRW</comment>
     <comment xml:lang="gl">imaxe RAW de Minolta MRW</comment>
     <comment xml:lang="he">תמונה גולמית של Minolta MRW</comment>
@@ -26432,7 +27362,7 @@
     <comment xml:lang="oc">imatge brut MRW Minolta</comment>
     <comment xml:lang="pl">Surowy obraz MRW Minolta</comment>
     <comment xml:lang="pt">imagem em bruto Minolta MRW</comment>
-    <comment xml:lang="pt_BR">Imagem bruta MRW do Minolta</comment>
+    <comment xml:lang="pt-BR">Imagem bruta MRW do Minolta</comment>
     <comment xml:lang="ro">Imagine brută Minolta MRW</comment>
     <comment xml:lang="ru">Необработанное изображение Minolta MRW</comment>
     <comment xml:lang="sk">Surový obrázok Minolta MRW</comment>
@@ -26443,8 +27373,8 @@
     <comment xml:lang="tr">Minolta MRW ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив MRW Minolta</comment>
     <comment xml:lang="vi">Ảnh thô Minolta MRW</comment>
-    <comment xml:lang="zh_CN">美能达 MRW 原始图像</comment>
-    <comment xml:lang="zh_TW">Minolta MRW 原生影像</comment>
+    <comment xml:lang="zh-CN">美能达 MRW 原始图像</comment>
+    <comment xml:lang="zh-TW">Minolta MRW 原始影像</comment>
     <acronym>MRW</acronym>
     <expanded-acronym>Minolta RaW</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26455,20 +27385,22 @@
   </mime-type>
   <mime-type type="image/x-nikon-nef">
     <comment>Nikon NEF raw image</comment>
+    <comment xml:lang="af">Nikon NEF rou beeld</comment>
     <comment xml:lang="ar">صورة Nikon NEF خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Nikon NEF</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Nikon NEF</comment>
     <comment xml:lang="bg">Изображение — Nikon NEF raw</comment>
     <comment xml:lang="ca">imatge en cru de Nikon NEF</comment>
     <comment xml:lang="cs">surový obrázek Nikon NEF</comment>
-    <comment xml:lang="da">Nikon NEF-råbillede</comment>
+    <comment xml:lang="da">Nikon NEF raw-billede</comment>
     <comment xml:lang="de">Nikon-NEF-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Nikon NEF</comment>
-    <comment xml:lang="en_GB">Nikon NEF raw image</comment>
+    <comment xml:lang="en-GB">Nikon NEF raw image</comment>
     <comment xml:lang="es">imagen en bruto NEF de Nikon</comment>
     <comment xml:lang="eu">Nikon NEF irudi gordina</comment>
     <comment xml:lang="fi">Nikon-NEF-raakakuva</comment>
     <comment xml:lang="fo">Nikon NEF rámynd</comment>
     <comment xml:lang="fr">image brute NEF Nikon</comment>
+    <comment xml:lang="fur">imagjin grese Nikon NEF</comment>
     <comment xml:lang="ga">amhíomhá Nikon NEF</comment>
     <comment xml:lang="gl">imaxe RAW NEF Nikon</comment>
     <comment xml:lang="he">תמונה גולמית של Nikon NEF</comment>
@@ -26488,7 +27420,7 @@
     <comment xml:lang="oc">imatge brut NEF Nikon</comment>
     <comment xml:lang="pl">Surowy obraz NEF Nikon</comment>
     <comment xml:lang="pt">imagem em bruto Nikon NEF</comment>
-    <comment xml:lang="pt_BR">Imagem bruta NEF da Nikon</comment>
+    <comment xml:lang="pt-BR">Imagem bruta NEF da Nikon</comment>
     <comment xml:lang="ro">Imagine brută Nikon NEF</comment>
     <comment xml:lang="ru">Необработанное изображение Nikon NEF</comment>
     <comment xml:lang="sk">Surový obrázok Nikon NEF</comment>
@@ -26499,8 +27431,8 @@
     <comment xml:lang="tr">Nikon NEF ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив NEF Nikon</comment>
     <comment xml:lang="vi">Ảnh thô Nikon NEF</comment>
-    <comment xml:lang="zh_CN">尼康 NEF 原始图像</comment>
-    <comment xml:lang="zh_TW">Nikon NEF 原生影像</comment>
+    <comment xml:lang="zh-CN">尼康 NEF 原始图像</comment>
+    <comment xml:lang="zh-TW">Nikon NEF 原始影像</comment>
     <acronym>NEF</acronym>
     <expanded-acronym>Nikon Electronic Format</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26509,20 +27441,22 @@
   </mime-type>
   <mime-type type="image/x-olympus-orf">
     <comment>Olympus ORF raw image</comment>
+    <comment xml:lang="af">Olympus ORF rou beeld</comment>
     <comment xml:lang="ar">صورة Olympus ORF خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Olympus ORF</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Olympus ORF</comment>
     <comment xml:lang="bg">Изображение — Olympus ORF raw</comment>
     <comment xml:lang="ca">imatge en cru d'Olympus ORF</comment>
     <comment xml:lang="cs">surový obrázek Olympus ORF</comment>
-    <comment xml:lang="da">Olympus ORF-råbillede</comment>
+    <comment xml:lang="da">Olympus ORF raw-billede</comment>
     <comment xml:lang="de">Olympus-ORF-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Olympus ORF</comment>
-    <comment xml:lang="en_GB">Olympus ORF raw image</comment>
+    <comment xml:lang="en-GB">Olympus ORF raw image</comment>
     <comment xml:lang="es">imagen en bruto ORF de Olympus</comment>
     <comment xml:lang="eu">Olympus ORF irudi gordina</comment>
     <comment xml:lang="fi">Olympus-ORF-raakakuva</comment>
     <comment xml:lang="fo">Olympus ORF rámynd</comment>
     <comment xml:lang="fr">image brute ORF Olympus</comment>
+    <comment xml:lang="fur">imagjin grese Olympus ORF</comment>
     <comment xml:lang="ga">amhíomhá Olympus ORF</comment>
     <comment xml:lang="gl">imaxe en bruto de Olympus ORF</comment>
     <comment xml:lang="he">תמונה גולמית של Olympus ORF</comment>
@@ -26543,7 +27477,7 @@
     <comment xml:lang="oc">imatge brut ORF Olympus</comment>
     <comment xml:lang="pl">Surowy obraz Olympus ORF</comment>
     <comment xml:lang="pt">imagem em bruto Olympus ORF</comment>
-    <comment xml:lang="pt_BR">Imagem bruta ORF da Olympus</comment>
+    <comment xml:lang="pt-BR">Imagem bruta ORF da Olympus</comment>
     <comment xml:lang="ro">Imagine brută Olympus ORF</comment>
     <comment xml:lang="ru">Необработанное изображение Olympus ORF</comment>
     <comment xml:lang="sk">Surový obrázok Olympus ORF</comment>
@@ -26554,37 +27488,39 @@
     <comment xml:lang="tr">Olympus ORF ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив ORF Olympus</comment>
     <comment xml:lang="vi">Ảnh thô Olympus ORF</comment>
-    <comment xml:lang="zh_CN">奥林巴斯 ORF 原始图像</comment>
-    <comment xml:lang="zh_TW">Olympus ORF 原生影像</comment>
+    <comment xml:lang="zh-CN">奥林巴斯 ORF 原始图像</comment>
+    <comment xml:lang="zh-TW">Olympus ORF 原始影像</comment>
     <acronym>ORF</acronym>
     <expanded-acronym>Olympus Raw Format</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
     <magic priority="50">
-      
-      
-      
-      
-      
+      <!-- an ORF file is basically a TIFF file with a non standard !-->
+      <!-- header IIRO which is not nice since it is only composed  !-->
+      <!-- of ASCII codes. Fortunately, the TIFF header is followed !-->
+      <!-- by the offset of the first TIFF ifd which is always      !-->
+      <!-- 0x00000008 (Little endian) for an ORF                    !-->
       <match value="IIRO\x08\x00\x00\x00" type="string" offset="0"/>
     </magic>
     <glob pattern="*.orf"/>
   </mime-type>
   <mime-type type="image/x-panasonic-rw">
     <comment>Panasonic raw image</comment>
+    <comment xml:lang="af">Panasonic rou beeld</comment>
     <comment xml:lang="ar">صورة Panasonic خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Panasonic</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Panasonic</comment>
     <comment xml:lang="bg">Изображение — Panasonic raw</comment>
     <comment xml:lang="ca">imatge en cru de Panasonic</comment>
     <comment xml:lang="cs">surový obrázek Panasonic</comment>
-    <comment xml:lang="da">Panasonicråbillede (raw)</comment>
+    <comment xml:lang="da">Panasonic raw-billede</comment>
     <comment xml:lang="de">Panasonic-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Panasonic</comment>
-    <comment xml:lang="en_GB">Panasonic raw image</comment>
+    <comment xml:lang="en-GB">Panasonic raw image</comment>
     <comment xml:lang="es">imagen en bruto de Panasonic</comment>
     <comment xml:lang="eu">Panasonic irudi gordina</comment>
     <comment xml:lang="fi">Panasonic-raakakuva</comment>
     <comment xml:lang="fo">Panasonic rámynd</comment>
     <comment xml:lang="fr">image brute Panasonic</comment>
+    <comment xml:lang="fur">imagjin grese Panasonic</comment>
     <comment xml:lang="ga">amhíomhá Panasonic</comment>
     <comment xml:lang="gl">imaxe en bruto de Panasonic</comment>
     <comment xml:lang="he">תמונה גולמית של Panasonic</comment>
@@ -26604,7 +27540,7 @@
     <comment xml:lang="oc">imatge brut Panasonic</comment>
     <comment xml:lang="pl">Obraz raw Panasonic</comment>
     <comment xml:lang="pt">imagem em bruto Panasonic</comment>
-    <comment xml:lang="pt_BR">Imagem bruta da Panasonic</comment>
+    <comment xml:lang="pt-BR">Imagem bruta da Panasonic</comment>
     <comment xml:lang="ro">Imagine brută Panasonic</comment>
     <comment xml:lang="ru">Необработанное изображение Panasonic</comment>
     <comment xml:lang="sk">Surový obrázok Panasonic</comment>
@@ -26615,58 +27551,69 @@
     <comment xml:lang="tr">Panasonic ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив Panasonic</comment>
     <comment xml:lang="vi">Ảnh thô Panasonic</comment>
-    <comment xml:lang="zh_CN">松下原始图像</comment>
-    <comment xml:lang="zh_TW">Panasonic 原生影像</comment>
+    <comment xml:lang="zh-CN">松下原始图像</comment>
+    <comment xml:lang="zh-TW">Panasonic 原始影像</comment>
     <sub-class-of type="image/x-dcraw"/>
     <magic priority="50">
-      
+      <!-- Some kind of TIFF file with a non-standard version in prefix !-->
       <match value="IIU\x00\x08\x00\x00\x00" type="string" offset="0"/>
     </magic>
     <glob pattern="*.raw"/>
     <alias type="image/x-panasonic-raw"/>
   </mime-type>
   <mime-type type="image/x-panasonic-rw2">
-    <comment>Panasonic raw2 image</comment>
-    <comment xml:lang="bg">Изображение — Panasonic raw2</comment>
-    <comment xml:lang="ca">imatge «RAW2» de Panasonic</comment>
-    <comment xml:lang="cs">surový obrázek Panasonic raw2</comment>
-    <comment xml:lang="da">Panasonic-rå2-billede (raw)</comment>
-    <comment xml:lang="de">Panasonic raw2-Bild</comment>
-    <comment xml:lang="el">Ανεπεξέργαστη εικόνα Panasonic (raw2)</comment>
-    <comment xml:lang="en_GB">Panasonic raw2 image</comment>
-    <comment xml:lang="es">imagen en bruto raw2 de Panasonic</comment>
-    <comment xml:lang="eu">Panasonic raw2 irudia</comment>
-    <comment xml:lang="fi">Panasonic raw2 -kuva</comment>
-    <comment xml:lang="fr">image raw2 Panasonic</comment>
-    <comment xml:lang="ga">íomhá raw2 Panasonic</comment>
-    <comment xml:lang="gl">imaxe en bruto raw2 de Panasonic</comment>
-    <comment xml:lang="he">תמונת raw2 של Panasonic</comment>
-    <comment xml:lang="hr">Panasonic raw2 image</comment>
-    <comment xml:lang="hu">Panasonic raw2 kép</comment>
-    <comment xml:lang="ia">Imagine raw2 Panasonic</comment>
-    <comment xml:lang="id">Image Panasonic raw2</comment>
-    <comment xml:lang="it">Immagine raw2 Panasonic</comment>
-    <comment xml:lang="ja">Panasonic raw2 画像</comment>
-    <comment xml:lang="kk">Panasonic raw2 суреті</comment>
-    <comment xml:lang="ko">파나소닉 RAW2 사진</comment>
-    <comment xml:lang="lv">Panasonic raw2 jēlattēls</comment>
-    <comment xml:lang="nl">Panasonic raw2 image</comment>
-    <comment xml:lang="oc">imatge raw2 Panasonic</comment>
-    <comment xml:lang="pl">Obraz raw2 Panasonic</comment>
+    <comment>Panasonic raw image</comment>
+    <comment xml:lang="af">Panasonic rou beeld</comment>
+    <comment xml:lang="ar">صورة Panasonic خامة</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Panasonic</comment>
+    <comment xml:lang="bg">Изображение — Panasonic raw</comment>
+    <comment xml:lang="ca">imatge en cru de Panasonic</comment>
+    <comment xml:lang="cs">surový obrázek Panasonic</comment>
+    <comment xml:lang="da">Panasonic raw-billede</comment>
+    <comment xml:lang="de">Panasonic-Rohbild</comment>
+    <comment xml:lang="el">Ανεπεξέργαστη εικόνα Panasonic</comment>
+    <comment xml:lang="en-GB">Panasonic raw image</comment>
+    <comment xml:lang="es">imagen en bruto de Panasonic</comment>
+    <comment xml:lang="eu">Panasonic irudi gordina</comment>
+    <comment xml:lang="fi">Panasonic-raakakuva</comment>
+    <comment xml:lang="fo">Panasonic rámynd</comment>
+    <comment xml:lang="fr">image brute Panasonic</comment>
+    <comment xml:lang="fur">imagjin grese Panasonic</comment>
+    <comment xml:lang="ga">amhíomhá Panasonic</comment>
+    <comment xml:lang="gl">imaxe en bruto de Panasonic</comment>
+    <comment xml:lang="he">תמונה גולמית של Panasonic</comment>
+    <comment xml:lang="hr">Panasonic osnovna slika</comment>
+    <comment xml:lang="hu">Panasonic nyers kép</comment>
+    <comment xml:lang="ia">Imagine brute Panasonic</comment>
+    <comment xml:lang="id">Citra mentah Panasonic</comment>
+    <comment xml:lang="it">Immagine raw Panasonic</comment>
+    <comment xml:lang="ja">Panasonic raw 画像</comment>
+    <comment xml:lang="kk">Panasonic өңделмеген суреті</comment>
+    <comment xml:lang="ko">파나소닉 RAW 사진</comment>
+    <comment xml:lang="lt">Panasonic neapdorotas paveikslėlis</comment>
+    <comment xml:lang="lv">Panasonic jēlattēls</comment>
+    <comment xml:lang="nb">Panasonic raw-bilde</comment>
+    <comment xml:lang="nl">onbewerkt Panasonic-beeld</comment>
+    <comment xml:lang="nn">Panasonic råbilete</comment>
+    <comment xml:lang="oc">imatge brut Panasonic</comment>
+    <comment xml:lang="pl">Obraz raw Panasonic</comment>
     <comment xml:lang="pt">imagem em bruto Panasonic</comment>
-    <comment xml:lang="pt_BR">Imagem raw2 da Panasonic</comment>
-    <comment xml:lang="ru">Необработанное изображение Panasonic raw2</comment>
-    <comment xml:lang="sk">Surový obrázok Panasonic raw2</comment>
-    <comment xml:lang="sl">Slikovna datoteka Panasonic raw2</comment>
-    <comment xml:lang="sr">Панасоник сирова2 слика</comment>
-    <comment xml:lang="sv">Panasonic raw2-bild</comment>
-    <comment xml:lang="tr">Panasonic raw2 görüntüsü</comment>
-    <comment xml:lang="uk">зображення формату raw2 Panasonic</comment>
-    <comment xml:lang="zh_CN">松下 raw2 图像</comment>
-    <comment xml:lang="zh_TW">Panasonic raw2 影像</comment>
+    <comment xml:lang="pt-BR">Imagem bruta da Panasonic</comment>
+    <comment xml:lang="ro">Imagine brută Panasonic</comment>
+    <comment xml:lang="ru">Необработанное изображение Panasonic</comment>
+    <comment xml:lang="sk">Surový obrázok Panasonic</comment>
+    <comment xml:lang="sl">Surova slikovna datoteka Panasonic</comment>
+    <comment xml:lang="sq">Figurë raw Panasonic</comment>
+    <comment xml:lang="sr">Панасоник сирова слика</comment>
+    <comment xml:lang="sv">Panasonic-råbild</comment>
+    <comment xml:lang="tr">Panasonic ham görüntüsü</comment>
+    <comment xml:lang="uk">цифровий негатив Panasonic</comment>
+    <comment xml:lang="vi">Ảnh thô Panasonic</comment>
+    <comment xml:lang="zh-CN">松下原始图像</comment>
+    <comment xml:lang="zh-TW">Panasonic 原始影像</comment>
     <sub-class-of type="image/x-dcraw"/>
     <magic priority="50">
-      
+      <!-- Some kind of TIFF file with a non-standard version in prefix !-->
       <match value="IIU\x00\x18\x00\x00\x00" type="string" offset="0"/>
     </magic>
     <glob pattern="*.rw2"/>
@@ -26674,20 +27621,22 @@
   </mime-type>
   <mime-type type="image/x-pentax-pef">
     <comment>Pentax PEF raw image</comment>
+    <comment xml:lang="af">Pentax PEF rou beeld</comment>
     <comment xml:lang="ar">صورة Pentax PEF خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Pentax PEF</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Pentax PEF</comment>
     <comment xml:lang="bg">Изображение — Pentax PEF raw</comment>
     <comment xml:lang="ca">imatge en cru de Pentax PEF</comment>
     <comment xml:lang="cs">surový obrázek Pentax PEF</comment>
-    <comment xml:lang="da">Pentax PEF-råbillede</comment>
+    <comment xml:lang="da">Pentax PEF raw-billede</comment>
     <comment xml:lang="de">Pentax-PEF-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Pentax PEF</comment>
-    <comment xml:lang="en_GB">Pentax PEF raw image</comment>
+    <comment xml:lang="en-GB">Pentax PEF raw image</comment>
     <comment xml:lang="es">imagen en bruto PEF de Pentax</comment>
     <comment xml:lang="eu">Pentax PEF irudi gordina</comment>
     <comment xml:lang="fi">Pentax-PEF-raakakuva</comment>
     <comment xml:lang="fo">Pentax PEF rámynd</comment>
     <comment xml:lang="fr">image brute PEF Pentax</comment>
+    <comment xml:lang="fur">imagjin grese Pentax PEF</comment>
     <comment xml:lang="ga">amhíomhá Pentax PEF</comment>
     <comment xml:lang="gl">imaxe en bruto PEF de Pentax</comment>
     <comment xml:lang="he">תמונה גולמית של Pentax PEF</comment>
@@ -26707,7 +27656,7 @@
     <comment xml:lang="oc">imatge brut PEF Pentax</comment>
     <comment xml:lang="pl">Surowy obraz Pentax PEF</comment>
     <comment xml:lang="pt">imagem em bruto Pentax PEF</comment>
-    <comment xml:lang="pt_BR">Imagem bruta PEF da Pentax</comment>
+    <comment xml:lang="pt-BR">Imagem bruta PEF da Pentax</comment>
     <comment xml:lang="ro">Imagine brută Pentax PEF</comment>
     <comment xml:lang="ru">Необработанное изображение Pentax PEF</comment>
     <comment xml:lang="sk">Surový obrázok Pentax PEF</comment>
@@ -26718,8 +27667,8 @@
     <comment xml:lang="tr">Pentax PEF ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив PEF Pentax</comment>
     <comment xml:lang="vi">Ảnh thô Pentax PEF</comment>
-    <comment xml:lang="zh_CN">宾得 PEF 原始图像</comment>
-    <comment xml:lang="zh_TW">Pentax PEF 原生影像</comment>
+    <comment xml:lang="zh-CN">宾得 PEF 原始图像</comment>
+    <comment xml:lang="zh-TW">Pentax PEF 原始影像</comment>
     <acronym>PEF</acronym>
     <expanded-acronym>Pentax Electronic Format</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26728,20 +27677,22 @@
   </mime-type>
   <mime-type type="image/x-sigma-x3f">
     <comment>Sigma X3F raw image</comment>
+    <comment xml:lang="af">Sigma X3F rou beeld</comment>
     <comment xml:lang="ar">صورة Sigma X3F خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Sigma X3F</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Sigma X3F</comment>
     <comment xml:lang="bg">Изображение — Sigma X3F raw</comment>
     <comment xml:lang="ca">imatge en cru de Sigma X3F</comment>
     <comment xml:lang="cs">surový obrázek Sigma X3F</comment>
-    <comment xml:lang="da">Sigma X3F-råbillede</comment>
+    <comment xml:lang="da">Sigma X3F raw-billede</comment>
     <comment xml:lang="de">Sigma-X3F-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Sigma X3F</comment>
-    <comment xml:lang="en_GB">Sigma X3F raw image</comment>
+    <comment xml:lang="en-GB">Sigma X3F raw image</comment>
     <comment xml:lang="es">imagen en bruto X3F de Sigma</comment>
     <comment xml:lang="eu">Sigma X3F irudi gordina</comment>
     <comment xml:lang="fi">Sigma-X3F-raakakuva</comment>
     <comment xml:lang="fo">Sigma X3F rámynd</comment>
     <comment xml:lang="fr">image brute X3F Sigma</comment>
+    <comment xml:lang="fur">imagjin grese Sigma X3F</comment>
     <comment xml:lang="ga">amhíomhá Sigma X3F</comment>
     <comment xml:lang="gl">imaxe en bruto X3F de Sigma</comment>
     <comment xml:lang="he">תמונה גולמית של Sigma X3F</comment>
@@ -26761,7 +27712,7 @@
     <comment xml:lang="oc">imatge brut X3F Sigma</comment>
     <comment xml:lang="pl">Surowy obraz X3F Sigma</comment>
     <comment xml:lang="pt">imagem em bruto Sigma X3F</comment>
-    <comment xml:lang="pt_BR">Imagem bruta X3F da Sigma</comment>
+    <comment xml:lang="pt-BR">Imagem bruta X3F da Sigma</comment>
     <comment xml:lang="ro">Imagine brută Sigma X3F</comment>
     <comment xml:lang="ru">Необработанное изображение Sigma X3F</comment>
     <comment xml:lang="sk">Surový obrázok Sigma X3F</comment>
@@ -26772,15 +27723,15 @@
     <comment xml:lang="tr">Sigma X3F ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив X3F Sigma</comment>
     <comment xml:lang="vi">Ảnh thô Sigma X3F</comment>
-    <comment xml:lang="zh_CN">适马 X3F 原始图像</comment>
-    <comment xml:lang="zh_TW">Sigma X3F 原生影像</comment>
+    <comment xml:lang="zh-CN">适马 X3F 原始图像</comment>
+    <comment xml:lang="zh-TW">Sigma X3F 原始影像</comment>
     <acronym>X3F</acronym>
     <expanded-acronym>X3 Foveon</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
     <magic priority="50">
-      
+      <!-- The header is "FOVb" (Foveon) !-->
       <match value="FOVb" type="string" offset="0">
-        
+        <!-- Followed by a 32bit LSB specifying the version number (major.minor) !-->
         <match value="0x00FF00FF" type="little32" offset="4" mask="0xFF00FF00"/>
       </match>
     </magic>
@@ -26788,20 +27739,22 @@
   </mime-type>
   <mime-type type="image/x-sony-srf">
     <comment>Sony SRF raw image</comment>
+    <comment xml:lang="af">Sony SRF rou beeld</comment>
     <comment xml:lang="ar">صورة Sony SRF خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Sony SRF</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Sony SRF</comment>
     <comment xml:lang="bg">Изображение — Sony SRF raw</comment>
     <comment xml:lang="ca">imatge en cru de Sony SRF</comment>
     <comment xml:lang="cs">surový obrázek Sony SRF</comment>
-    <comment xml:lang="da">Sony SRF-råbillede</comment>
+    <comment xml:lang="da">Sony SRF raw-billede</comment>
     <comment xml:lang="de">Sony-SRF-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Sony SRF</comment>
-    <comment xml:lang="en_GB">Sony SRF raw image</comment>
+    <comment xml:lang="en-GB">Sony SRF raw image</comment>
     <comment xml:lang="es">imagen en bruto SRF de Sony</comment>
     <comment xml:lang="eu">Sony SRF irudi gordina</comment>
     <comment xml:lang="fi">Sony-SRF-raakakuva</comment>
     <comment xml:lang="fo">Sony SRF rámynd</comment>
     <comment xml:lang="fr">image brute SRF Sony</comment>
+    <comment xml:lang="fur">imagjin grese Sony SRF</comment>
     <comment xml:lang="ga">amhíomhá Sony SRF</comment>
     <comment xml:lang="gl">imaxe en bruto SRF de sony</comment>
     <comment xml:lang="he">תמונה גולמית של Sony SRF</comment>
@@ -26821,7 +27774,7 @@
     <comment xml:lang="oc">imatge brut SRF Sony</comment>
     <comment xml:lang="pl">Surowy obraz SRF Sony</comment>
     <comment xml:lang="pt">imagem em bruto Sony SRF</comment>
-    <comment xml:lang="pt_BR">Imagem bruta SRF da Sony</comment>
+    <comment xml:lang="pt-BR">Imagem bruta SRF da Sony</comment>
     <comment xml:lang="ro">Imagine brută Sony SRF</comment>
     <comment xml:lang="ru">Необработанное изображение Sony SRF</comment>
     <comment xml:lang="sk">Surový obrázok Sony SRF</comment>
@@ -26832,8 +27785,8 @@
     <comment xml:lang="tr">Sony SRF ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив SRF Sony</comment>
     <comment xml:lang="vi">Ảnh thô Sony SRF</comment>
-    <comment xml:lang="zh_CN">索尼 SRF 原始映像</comment>
-    <comment xml:lang="zh_TW">Sony SRF 原生影像</comment>
+    <comment xml:lang="zh-CN">索尼 SRF 原始映像</comment>
+    <comment xml:lang="zh-TW">Sony SRF 原始影像</comment>
     <acronym>SRF</acronym>
     <expanded-acronym>Sony Raw Format</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26842,20 +27795,22 @@
   </mime-type>
   <mime-type type="image/x-sony-sr2">
     <comment>Sony SR2 raw image</comment>
+    <comment xml:lang="af">Sony SR2 rou beeld</comment>
     <comment xml:lang="ar">صورة Sony SR2 خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Sony SR2</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Sony SR2</comment>
     <comment xml:lang="bg">Изображение — Sony SR2 raw</comment>
     <comment xml:lang="ca">imatge en cru de Sony SR2</comment>
     <comment xml:lang="cs">surový obrázek Sony SR2</comment>
-    <comment xml:lang="da">Sony SR2-råbillede</comment>
+    <comment xml:lang="da">Sony SR2 raw-billede</comment>
     <comment xml:lang="de">Sony-SR2-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Sony SR2</comment>
-    <comment xml:lang="en_GB">Sony SR2 raw image</comment>
+    <comment xml:lang="en-GB">Sony SR2 raw image</comment>
     <comment xml:lang="es">imagen en bruto SR2 de Sony</comment>
     <comment xml:lang="eu">Sony SR2 irudi gordina</comment>
     <comment xml:lang="fi">Sony-SR2-raakakuva</comment>
     <comment xml:lang="fo">Sony SR2 rámynd</comment>
     <comment xml:lang="fr">image brute SR2 Sony</comment>
+    <comment xml:lang="fur">imagjin grese Sony SR2</comment>
     <comment xml:lang="ga">amhíomhá Sony SR2</comment>
     <comment xml:lang="gl">imaxe en bruto SR2 de sony</comment>
     <comment xml:lang="he">תמונה גולמית של Sony SR2</comment>
@@ -26875,7 +27830,7 @@
     <comment xml:lang="oc">imatge brut SR2 Sony</comment>
     <comment xml:lang="pl">Surowy obraz SR2 Sony</comment>
     <comment xml:lang="pt">imagem em bruto Sony SR2</comment>
-    <comment xml:lang="pt_BR">Imagem bruta SR2 da Sony</comment>
+    <comment xml:lang="pt-BR">Imagem bruta SR2 da Sony</comment>
     <comment xml:lang="ro">Imagine brută Sony SR2</comment>
     <comment xml:lang="ru">Необработанное изображение Sony SR2</comment>
     <comment xml:lang="sk">Surový obrázok Sony SR2</comment>
@@ -26886,8 +27841,8 @@
     <comment xml:lang="tr">Sony SR2 ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив SR2 Sony</comment>
     <comment xml:lang="vi">Ảnh thô Sony SR2</comment>
-    <comment xml:lang="zh_CN">索尼 SR2 原始映像</comment>
-    <comment xml:lang="zh_TW">Sony SR2 原生影像</comment>
+    <comment xml:lang="zh-CN">索尼 SR2 原始映像</comment>
+    <comment xml:lang="zh-TW">Sony SR2 原始影像</comment>
     <acronym>SR2</acronym>
     <expanded-acronym>Sony Raw format 2</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26896,20 +27851,22 @@
   </mime-type>
   <mime-type type="image/x-sony-arw">
     <comment>Sony ARW raw image</comment>
+    <comment xml:lang="af">Sony ARW rou beeld</comment>
     <comment xml:lang="ar">صورة Sony ARW خامة</comment>
-    <comment xml:lang="be@latin">Suvoraja vyjava Sony ARW</comment>
+    <comment xml:lang="be-Latn">Suvoraja vyjava Sony ARW</comment>
     <comment xml:lang="bg">Изображение — Sony ARW raw</comment>
     <comment xml:lang="ca">imatge en cru de Sony ARW</comment>
     <comment xml:lang="cs">surový obrázek Sony ARW</comment>
-    <comment xml:lang="da">Sony ARW-råbillede</comment>
+    <comment xml:lang="da">Sony ARW raw-billede</comment>
     <comment xml:lang="de">Sony-ARW-Rohbild</comment>
     <comment xml:lang="el">Ανεπεξέργαστη εικόνα Sony ARW</comment>
-    <comment xml:lang="en_GB">Sony ARW raw image</comment>
+    <comment xml:lang="en-GB">Sony ARW raw image</comment>
     <comment xml:lang="es">imagen en bruto ARW de Sony</comment>
     <comment xml:lang="eu">Sony ARW irudi gordina</comment>
     <comment xml:lang="fi">Sony-ARW-raakakuva</comment>
     <comment xml:lang="fo">Sony ARW rámynd</comment>
     <comment xml:lang="fr">image brute ARW Sony</comment>
+    <comment xml:lang="fur">imagjin grese Sony ARW</comment>
     <comment xml:lang="ga">amhíomhá Sony ARW</comment>
     <comment xml:lang="gl">imaxe en bruto ARW de sony</comment>
     <comment xml:lang="he">תמונה גולמית של Sony ARW</comment>
@@ -26929,7 +27886,7 @@
     <comment xml:lang="oc">imatge brut ARW Sony</comment>
     <comment xml:lang="pl">Surowy obraz ARW Sony</comment>
     <comment xml:lang="pt">imagem em bruto Sony ARW</comment>
-    <comment xml:lang="pt_BR">Imagem bruta ARW da Sony</comment>
+    <comment xml:lang="pt-BR">Imagem bruta ARW da Sony</comment>
     <comment xml:lang="ro">Imagine brută Sony ARW</comment>
     <comment xml:lang="ru">Необработанное изображение Sony ARW</comment>
     <comment xml:lang="sk">Surový obrázok Sony ARW</comment>
@@ -26940,8 +27897,8 @@
     <comment xml:lang="tr">Sony ARW ham görüntüsü</comment>
     <comment xml:lang="uk">цифровий негатив ARW Sony</comment>
     <comment xml:lang="vi">Ảnh thô Sony ARW</comment>
-    <comment xml:lang="zh_CN">索尼 ARW 原始映像</comment>
-    <comment xml:lang="zh_TW">Sony ARW 原生影像</comment>
+    <comment xml:lang="zh-CN">索尼 ARW 原始映像</comment>
+    <comment xml:lang="zh-TW">Sony ARW 原始影像</comment>
     <acronym>ARW</acronym>
     <expanded-acronym>Alpha Raw format</expanded-acronym>
     <sub-class-of type="image/x-dcraw"/>
@@ -26950,9 +27907,10 @@
   </mime-type>
   <mime-type type="image/png">
     <comment>PNG image</comment>
+    <comment xml:lang="af">PNG-beeld</comment>
     <comment xml:lang="ar">صورة PNG</comment>
     <comment xml:lang="az">PNG rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava PNG</comment>
+    <comment xml:lang="be-Latn">Vyjava PNG</comment>
     <comment xml:lang="bg">Изображение — PNG</comment>
     <comment xml:lang="ca">imatge PNG</comment>
     <comment xml:lang="cs">obrázek PNG</comment>
@@ -26960,13 +27918,14 @@
     <comment xml:lang="da">PNG-billede</comment>
     <comment xml:lang="de">PNG-Bild</comment>
     <comment xml:lang="el">Εικόνα PNG</comment>
-    <comment xml:lang="en_GB">PNG image</comment>
+    <comment xml:lang="en-GB">PNG image</comment>
     <comment xml:lang="eo">PNG-bildo</comment>
     <comment xml:lang="es">imagen PNG</comment>
     <comment xml:lang="eu">PNG irudia</comment>
     <comment xml:lang="fi">PNG-kuva</comment>
     <comment xml:lang="fo">PNG mynd</comment>
     <comment xml:lang="fr">image PNG</comment>
+    <comment xml:lang="fur">imagjin PNG</comment>
     <comment xml:lang="ga">íomhá PNG</comment>
     <comment xml:lang="gl">imaxe PNG</comment>
     <comment xml:lang="he">תמונת PNG</comment>
@@ -26987,7 +27946,7 @@
     <comment xml:lang="oc">imatge PNG</comment>
     <comment xml:lang="pl">Obraz PNG</comment>
     <comment xml:lang="pt">imagem PNG</comment>
-    <comment xml:lang="pt_BR">Imagem PNG</comment>
+    <comment xml:lang="pt-BR">Imagem PNG</comment>
     <comment xml:lang="ro">Imagine PNG</comment>
     <comment xml:lang="ru">Изображение PNG</comment>
     <comment xml:lang="sk">Obrázok PNG</comment>
@@ -26998,79 +27957,62 @@
     <comment xml:lang="tr">PNG görüntüsü</comment>
     <comment xml:lang="uk">зображення PNG</comment>
     <comment xml:lang="vi">Ảnh PNG</comment>
-    <comment xml:lang="zh_CN">PNG 图像</comment>
-    <comment xml:lang="zh_TW">PNG 影像</comment>
+    <comment xml:lang="zh-CN">PNG 图像</comment>
+    <comment xml:lang="zh-TW">PNG 影像</comment>
     <magic priority="50">
-      <match value="\x89PNG" type="string" offset="0"/>
+      <match type="string" value="\x89PNG" offset="0"/>
     </magic>
     <glob pattern="*.png"/>
   </mime-type>
   <mime-type type="image/rle">
-    <comment>Run Length Encoded bitmap image</comment>
-    <comment xml:lang="ar">تشغيل صورة نقطية طولية الترميز</comment>
-    <comment xml:lang="be@latin">Bitmapnaja vyjava, zakadavanaja ŭ Run Length</comment>
-    <comment xml:lang="bg">Изображение — RLE Bitmap</comment>
-    <comment xml:lang="ca">imatge de mapa de bits «Run Lenght Encoded»</comment>
-    <comment xml:lang="cs">obrázek bitové mapy Run Length Encoded</comment>
-    <comment xml:lang="da">Run Length Encoded-bitmapbillede</comment>
+    <comment>RLE bitmap image</comment>
+    <comment xml:lang="bg">Изображение — RLE bitmap</comment>
+    <comment xml:lang="ca">imatge de mapa de bits RLE</comment>
+    <comment xml:lang="da">RLE bitmap-billede</comment>
     <comment xml:lang="de">Lauflängenkodiertes Bitmap-Bild</comment>
-    <comment xml:lang="el">Εικόνα bitmap κωδικοποιημένου μήκος εκτέλεσης</comment>
-    <comment xml:lang="en_GB">Run Length Encoded bitmap image</comment>
-    <comment xml:lang="es">mapa de bits con codificación del tamaño durante la ejecución</comment>
-    <comment xml:lang="eu">'Run Lenght Encoded' bitmap irudia</comment>
-    <comment xml:lang="fi">RLE-koodattu bittikartta</comment>
-    <comment xml:lang="fr">image matricielle Run Length Encoded</comment>
-    <comment xml:lang="ga">íomhá ghiotánmhapach ionchódaithe fad reatha</comment>
-    <comment xml:lang="gl">mapa de bits con codificación do tamaño durante a execución</comment>
-    <comment xml:lang="he">מקודד מפת סיביות של Run Length</comment>
-    <comment xml:lang="hr">Run Length Encoded bitmap slika</comment>
-    <comment xml:lang="hu">Run Length Encoded bitkép</comment>
-    <comment xml:lang="ia">Imagine raster in codification Run-Length</comment>
-    <comment xml:lang="id">Citra peta bit Run Length Encoded</comment>
-    <comment xml:lang="it">Immagine bitmap RLE (Run Length Encoded)</comment>
-    <comment xml:lang="ja">ランレングス符号化ビットマップ画像</comment>
-    <comment xml:lang="kk">RLE сығылған растрлік суреті</comment>
-    <comment xml:lang="ko">RLE 인코딩된 비트맵 그림</comment>
-    <comment xml:lang="lt">Run Length Encoded rastrinis paveikslėlis</comment>
-    <comment xml:lang="lv">Secīgo atkārtojumu kodēts bitkartes attēls</comment>
-    <comment xml:lang="nb">Run Length Encoded bitmap bilde</comment>
-    <comment xml:lang="nl">RLE-gecodeerde bitmap-afbeelding</comment>
-    <comment xml:lang="nn">Run Length Encoded punktgrafikk</comment>
-    <comment xml:lang="oc">imatge matriciala Run Length Encoded</comment>
+    <comment xml:lang="en-GB">RLE bitmap image</comment>
+    <comment xml:lang="es">imagen de mapa de bits RLE</comment>
+    <comment xml:lang="eu">RLE bitmap irudia</comment>
+    <comment xml:lang="fi">RLE-bittikarttakuva</comment>
+    <comment xml:lang="fr">image matricielle RLE</comment>
+    <comment xml:lang="hr">RLE bitmap slika</comment>
+    <comment xml:lang="hu">RLE bitkép</comment>
+    <comment xml:lang="id">Citra bitmap RLE</comment>
+    <comment xml:lang="it">Immagine bitmap RLE</comment>
+    <comment xml:lang="kk">RLE растрлық суреті</comment>
+    <comment xml:lang="ko">RLE 비트맵 그림</comment>
     <comment xml:lang="pl">Obraz bitmapy RLE</comment>
-    <comment xml:lang="pt">mapa de bitas Run Length Encoded</comment>
-    <comment xml:lang="pt_BR">Classe de comprimento imagem bitmap codificada</comment>
-    <comment xml:lang="ro">Imagine bitmap codată RLE</comment>
-    <comment xml:lang="ru">Растровое изображение, сжатое RLE</comment>
-    <comment xml:lang="sk">Bitmapový obrázok Run Length Encoded</comment>
-    <comment xml:lang="sl">Zaporedno kodirana bitna slika (RLE)</comment>
-    <comment xml:lang="sq">Figurë bitmap RLE (Run Length Encoded)</comment>
-    <comment xml:lang="sr">битмап слика кодирана дужином скупине</comment>
-    <comment xml:lang="sv">Körlängdskodad bitmappbild</comment>
-    <comment xml:lang="tr">Run Length Encoded bit eşlem görüntüsü</comment>
+    <comment xml:lang="pt-BR">Imagem bitmap RLE</comment>
+    <comment xml:lang="ru">Растровое изображение RLE</comment>
+    <comment xml:lang="sl">Bitna slika RLE</comment>
+    <comment xml:lang="sv">RLE bitmappsbild</comment>
+    <comment xml:lang="tr">RLE bit eşlem görüntüsü</comment>
     <comment xml:lang="uk">растрове зображення RLE</comment>
-    <comment xml:lang="vi">Ảnh mảng mã hóa chiều dài chạy (RLE)</comment>
-    <comment xml:lang="zh_CN">游程编码位图</comment>
-    <comment xml:lang="zh_TW">Run Length Encoded 點陣影像</comment>
+    <comment xml:lang="zh-CN">RLE 位图图像</comment>
+    <comment xml:lang="zh-TW">RLE 點陣影像</comment>
+    <acronym>RLE</acronym>
+    <expanded-acronym>Run Length Encoded</expanded-acronym>
     <glob pattern="*.rle"/>
   </mime-type>
   <mime-type type="image/svg+xml">
     <comment>SVG image</comment>
+    <comment xml:lang="af">SVG-beeld</comment>
     <comment xml:lang="ar">صورة SVG</comment>
-    <comment xml:lang="be@latin">Vyjava SVG</comment>
+    <comment xml:lang="be-Latn">Vyjava SVG</comment>
     <comment xml:lang="bg">Изображение — SVG</comment>
     <comment xml:lang="ca">imatge SVG</comment>
     <comment xml:lang="cs">obrázek SVG</comment>
     <comment xml:lang="da">SVG-billede</comment>
     <comment xml:lang="de">SVG-Bild</comment>
     <comment xml:lang="el">Εικόνα SVG</comment>
-    <comment xml:lang="en_GB">SVG image</comment>
+    <comment xml:lang="en-GB">SVG image</comment>
     <comment xml:lang="eo">SVG-bildo</comment>
     <comment xml:lang="es">imagen SVG</comment>
     <comment xml:lang="eu">SVG irudia</comment>
     <comment xml:lang="fi">SVG-kuva</comment>
     <comment xml:lang="fo">SVG mynd</comment>
     <comment xml:lang="fr">image SVG</comment>
+    <comment xml:lang="fur">imagjin SVG</comment>
     <comment xml:lang="ga">íomhá SVG</comment>
     <comment xml:lang="gl">imaxe SVG</comment>
     <comment xml:lang="he">תמונת SVG</comment>
@@ -27090,7 +28032,7 @@
     <comment xml:lang="oc">imatge SVG</comment>
     <comment xml:lang="pl">Obraz SVG</comment>
     <comment xml:lang="pt">imagem SVG</comment>
-    <comment xml:lang="pt_BR">Imagem SVG</comment>
+    <comment xml:lang="pt-BR">Imagem SVG</comment>
     <comment xml:lang="ro">Imagine SVG</comment>
     <comment xml:lang="ru">Изображение SVG</comment>
     <comment xml:lang="sk">Obrázok SVG</comment>
@@ -27101,41 +28043,49 @@
     <comment xml:lang="tr">SVG görüntüsü</comment>
     <comment xml:lang="uk">зображення SVG</comment>
     <comment xml:lang="vi">Ảnh SVG</comment>
-    <comment xml:lang="zh_CN">SVG 图像</comment>
-    <comment xml:lang="zh_TW">SVG 影像</comment>
+    <comment xml:lang="zh-CN">SVG 图像</comment>
+    <comment xml:lang="zh-TW">SVG 影像</comment>
     <acronym>SVG</acronym>
     <expanded-acronym>Scalable Vector Graphics</expanded-acronym>
     <sub-class-of type="application/xml"/>
     <magic priority="80">
-      <match value="&lt;!DOCTYPE svg" type="string" offset="0:256"/>
-      <match value="&lt;svg" type="string" offset="0:256"/>
+      <match type="string" value="&lt;!DOCTYPE svg" offset="0:256"/>
+    </magic>
+    <magic priority="80">
+      <match type="string" value="&lt;!-- Created with Inkscape" offset="0"/>
+      <match type="string" value="&lt;svg" offset="0"/>
+    </magic>
+    <magic priority="45">
+      <match type="string" value="&lt;svg" offset="1:256"/>
     </magic>
     <glob pattern="*.svg"/>
     <root-XML namespaceURI="http://www.w3.org/2000/svg" localName="svg"/>
   </mime-type>
   <mime-type type="image/svg+xml-compressed">
     <comment>compressed SVG image</comment>
+    <comment xml:lang="af">saamgepersde SVG-beeld</comment>
     <comment xml:lang="ar">صورة SVG مضغوطة</comment>
-    <comment xml:lang="be@latin">skampresavanaja vyjava SVG</comment>
+    <comment xml:lang="be-Latn">skampresavanaja vyjava SVG</comment>
     <comment xml:lang="bg">Изображение — SVG, компресирано</comment>
     <comment xml:lang="ca">imatge SVG amb compressió</comment>
     <comment xml:lang="cs">komprimovaný obrázek SVG</comment>
     <comment xml:lang="da">SVG-komprimeret billede</comment>
     <comment xml:lang="de">Komprimiertes SVG-Bild</comment>
     <comment xml:lang="el">Συμπιεσμένη εικόνα SVG</comment>
-    <comment xml:lang="en_GB">compressed SVG image</comment>
+    <comment xml:lang="en-GB">compressed SVG image</comment>
     <comment xml:lang="es">imagen SVG comprimida</comment>
     <comment xml:lang="eu">konprimitutako SVG irudia</comment>
     <comment xml:lang="fi">pakattu SVG-kuva</comment>
     <comment xml:lang="fo">stappað SVG mynd</comment>
     <comment xml:lang="fr">image SVG compressée</comment>
+    <comment xml:lang="fur">imagjin SVG comprimude</comment>
     <comment xml:lang="ga">íomhá SVG comhbhrúite</comment>
     <comment xml:lang="gl">imaxe SVG comprimida</comment>
     <comment xml:lang="he">תמונת SVG מכווצת</comment>
     <comment xml:lang="hr">Sažeta SVG slika</comment>
     <comment xml:lang="hu">tömörített SVG kép</comment>
     <comment xml:lang="ia">Imagine SVG comprimite</comment>
-    <comment xml:lang="id">Citra SVG terkompresi</comment>
+    <comment xml:lang="id">citra SVG terkompresi</comment>
     <comment xml:lang="it">Immagine SVG compressa</comment>
     <comment xml:lang="ja">圧縮 SVG 画像</comment>
     <comment xml:lang="kk">сығылған SVG суреті</comment>
@@ -27148,7 +28098,7 @@
     <comment xml:lang="oc">imatge SVG compressat</comment>
     <comment xml:lang="pl">Skompresowany obraz SVG</comment>
     <comment xml:lang="pt">imagem SVG comprimida</comment>
-    <comment xml:lang="pt_BR">Imagem SVG compactada</comment>
+    <comment xml:lang="pt-BR">Imagem SVG compactada</comment>
     <comment xml:lang="ro">imagine comprimată SVG</comment>
     <comment xml:lang="ru">Сжатое изображение SVG</comment>
     <comment xml:lang="sk">Komprimovaný obrázok SVG</comment>
@@ -27159,8 +28109,8 @@
     <comment xml:lang="tr">sıkıştırılmış SVG görüntüsü</comment>
     <comment xml:lang="uk">стиснене зображення SVG</comment>
     <comment xml:lang="vi">ảnh SVG đã nén</comment>
-    <comment xml:lang="zh_CN">压缩的 SVG 图像</comment>
-    <comment xml:lang="zh_TW">壓縮版 SVG 影像</comment>
+    <comment xml:lang="zh-CN">压缩的 SVG 图像</comment>
+    <comment xml:lang="zh-TW">壓縮版 SVG 影像</comment>
     <acronym>SVG</acronym>
     <expanded-acronym>Scalable Vector Graphics</expanded-acronym>
     <sub-class-of type="application/gzip"/>
@@ -27168,21 +28118,23 @@
   </mime-type>
   <mime-type type="image/tiff">
     <comment>TIFF image</comment>
+    <comment xml:lang="af">TIFF-beeld</comment>
     <comment xml:lang="ar">صورة TIFF</comment>
-    <comment xml:lang="be@latin">Vyjava TIFF</comment>
+    <comment xml:lang="be-Latn">Vyjava TIFF</comment>
     <comment xml:lang="bg">Изображение — TIFF</comment>
     <comment xml:lang="ca">imatge TIFF</comment>
     <comment xml:lang="cs">obrázek TIFF</comment>
     <comment xml:lang="da">TIFF-billede</comment>
     <comment xml:lang="de">TIFF-Bild</comment>
     <comment xml:lang="el">Εικόνα TIFF</comment>
-    <comment xml:lang="en_GB">TIFF image</comment>
+    <comment xml:lang="en-GB">TIFF image</comment>
     <comment xml:lang="eo">TIFF-bildo</comment>
     <comment xml:lang="es">imagen TIFF</comment>
     <comment xml:lang="eu">TIFF irudia</comment>
     <comment xml:lang="fi">TIFF-kuva</comment>
     <comment xml:lang="fo">TIFF mynd</comment>
     <comment xml:lang="fr">image TIFF</comment>
+    <comment xml:lang="fur">imagjin TIFF</comment>
     <comment xml:lang="ga">íomhá TIFF</comment>
     <comment xml:lang="gl">imaxe TIFF</comment>
     <comment xml:lang="he">תמונת TIFF</comment>
@@ -27203,7 +28155,7 @@
     <comment xml:lang="oc">imatge TIFF</comment>
     <comment xml:lang="pl">Obraz TIFF</comment>
     <comment xml:lang="pt">imagem TIFF</comment>
-    <comment xml:lang="pt_BR">Imagem TIFF</comment>
+    <comment xml:lang="pt-BR">Imagem TIFF</comment>
     <comment xml:lang="ro">Imagine TIFF</comment>
     <comment xml:lang="ru">Изображение TIFF</comment>
     <comment xml:lang="sk">Obrázok TIFF</comment>
@@ -27214,28 +28166,32 @@
     <comment xml:lang="tr">TIFF görüntüsü</comment>
     <comment xml:lang="uk">зображення TIFF</comment>
     <comment xml:lang="vi">Ảnh TIFF</comment>
-    <comment xml:lang="zh_CN">TIFF 图像</comment>
-    <comment xml:lang="zh_TW">TIFF 影像</comment>
+    <comment xml:lang="zh-CN">TIFF 图像</comment>
+    <comment xml:lang="zh-TW">TIFF 影像</comment>
     <acronym>TIFF</acronym>
     <expanded-acronym>Tagged Image File Format</expanded-acronym>
     <magic priority="50">
-      <match value="MM\x00\x2a" type="string" offset="0"/>
-      <match value="II\x2a\x00" type="string" offset="0"/>
+      <match type="string" value="MM\x00\x2a" offset="0"/>
+      <match type="string" value="II\x2a\x00" offset="0"/>
     </magic>
     <glob pattern="*.tif"/>
     <glob pattern="*.tiff"/>
   </mime-type>
   <mime-type type="image/x-tiff-multipage">
     <comment>Multi-page TIFF image</comment>
+    <comment xml:lang="af">Multibladsy TIFF-beeld</comment>
+    <comment xml:lang="bg">Изображение — TIFF, много страници</comment>
     <comment xml:lang="ca">imatge TIFF multipàgina</comment>
     <comment xml:lang="cs">vícestránkový obrázek TIFF</comment>
     <comment xml:lang="da">Flersidet TIFF-billede</comment>
     <comment xml:lang="de">Mehrseitiges TIFF-Bild</comment>
     <comment xml:lang="el">Πολυσέλιδη εικόνα TIFF</comment>
-    <comment xml:lang="en_GB">Multi-page TIFF image</comment>
+    <comment xml:lang="en-GB">Multi-page TIFF image</comment>
     <comment xml:lang="es">imagen TIFF de varias páginas</comment>
+    <comment xml:lang="eu">Multi-page TIFF irudia</comment>
     <comment xml:lang="fi">Monisivuinen TIFF-kuva</comment>
     <comment xml:lang="fr">Image TIFF multi-page</comment>
+    <comment xml:lang="fur">imagjin a plui pagjinis TIFF</comment>
     <comment xml:lang="ga">íomhá il-leathanach TIFF</comment>
     <comment xml:lang="gl">Imaxe TIFF multipáxina</comment>
     <comment xml:lang="he">תמונת TIFF עם ריבוי עמודים</comment>
@@ -27249,7 +28205,7 @@
     <comment xml:lang="oc">Imatge TIFF multipagina</comment>
     <comment xml:lang="pl">Wielostronnicowy obraz TIFF</comment>
     <comment xml:lang="pt">imagem TIFF multipágina</comment>
-    <comment xml:lang="pt_BR">Imagem TIFF multipágina</comment>
+    <comment xml:lang="pt-BR">Imagem TIFF multipágina</comment>
     <comment xml:lang="ru">Многостраничное изображение TIFF</comment>
     <comment xml:lang="sk">Viacstránkový obrázok TIFF</comment>
     <comment xml:lang="sl">Večstranska slika TIFF</comment>
@@ -27257,17 +28213,18 @@
     <comment xml:lang="sv">Flersidig TIFF-bild</comment>
     <comment xml:lang="tr">Çok sayfalı TIFF görüntüsü</comment>
     <comment xml:lang="uk">багатосторінкове зображення TIFF</comment>
-    <comment xml:lang="zh_CN">多页 TIFF 图像</comment>
-    <comment xml:lang="zh_TW">多頁 TIFF 影像</comment>
+    <comment xml:lang="zh-CN">多页 TIFF 图像</comment>
+    <comment xml:lang="zh-TW">多頁 TIFF 影像</comment>
     <acronym>TIFF</acronym>
     <expanded-acronym>Tagged Image File Format</expanded-acronym>
     <sub-class-of type="image/tiff"/>
   </mime-type>
   <mime-type type="image/vnd.dwg">
     <comment>AutoCAD image</comment>
+    <comment xml:lang="af">AutoCAD-beeld</comment>
     <comment xml:lang="ar">صورة AutoCAD</comment>
     <comment xml:lang="az">AutoCAD rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava AutoCAD</comment>
+    <comment xml:lang="be-Latn">Vyjava AutoCAD</comment>
     <comment xml:lang="bg">Изображение — AutoCAD</comment>
     <comment xml:lang="ca">imatge d'AutoCAD</comment>
     <comment xml:lang="cs">výkres AutoCAD</comment>
@@ -27275,13 +28232,14 @@
     <comment xml:lang="da">AutoCAD-billede</comment>
     <comment xml:lang="de">AutoCAD-Bild</comment>
     <comment xml:lang="el">Εικόνα AutoCAD</comment>
-    <comment xml:lang="en_GB">AutoCAD image</comment>
+    <comment xml:lang="en-GB">AutoCAD image</comment>
     <comment xml:lang="eo">AutoCAD-bildo</comment>
     <comment xml:lang="es">imagen de AutoCAD</comment>
     <comment xml:lang="eu">AutoCAD-eko irudia</comment>
     <comment xml:lang="fi">AutoCAD-kuva</comment>
     <comment xml:lang="fo">AutoCAD mynd</comment>
     <comment xml:lang="fr">image AutoCAD</comment>
+    <comment xml:lang="fur">imagjin AutoCAD</comment>
     <comment xml:lang="ga">íomhá AutoCAD</comment>
     <comment xml:lang="gl">imaxe de AutoCAD</comment>
     <comment xml:lang="he">תמונה של AutoCAD</comment>
@@ -27303,7 +28261,7 @@
     <comment xml:lang="oc">imatge AutoCAD</comment>
     <comment xml:lang="pl">Obraz AutoCAD</comment>
     <comment xml:lang="pt">imagem AutoCAD</comment>
-    <comment xml:lang="pt_BR">Imagem do AutoCAD</comment>
+    <comment xml:lang="pt-BR">Imagem do AutoCAD</comment>
     <comment xml:lang="ro">Imagine AutoCAD</comment>
     <comment xml:lang="ru">Изображение AutoCAD</comment>
     <comment xml:lang="sk">Obrázok AutoCAD</comment>
@@ -27314,27 +28272,29 @@
     <comment xml:lang="tr">AutoCAD görüntüsü</comment>
     <comment xml:lang="uk">зображення AutoCAD</comment>
     <comment xml:lang="vi">Ảnh AutoCAD</comment>
-    <comment xml:lang="zh_CN">AutoCAD 图像</comment>
-    <comment xml:lang="zh_TW">AutoCAD 影像</comment>
+    <comment xml:lang="zh-CN">AutoCAD 图像</comment>
+    <comment xml:lang="zh-TW">AutoCAD 影像</comment>
     <glob pattern="*.dwg"/>
   </mime-type>
   <mime-type type="image/vnd.dxf">
     <comment>DXF vector image</comment>
+    <comment xml:lang="af">DXF-vektorbeeld</comment>
     <comment xml:lang="ar">صورة DXF نقطية</comment>
-    <comment xml:lang="be@latin">Vektarnaja vyjava DXF</comment>
+    <comment xml:lang="be-Latn">Vektarnaja vyjava DXF</comment>
     <comment xml:lang="bg">Изображение — DXF</comment>
     <comment xml:lang="ca">imatge vectorial DXF</comment>
     <comment xml:lang="cs">vektorový obrázek DXF</comment>
     <comment xml:lang="da">DXF-vektorbillede</comment>
     <comment xml:lang="de">DXF-Vektorbild</comment>
     <comment xml:lang="el">Διανυσματική εικόνα DXF</comment>
-    <comment xml:lang="en_GB">DXF vector image</comment>
+    <comment xml:lang="en-GB">DXF vector image</comment>
     <comment xml:lang="eo">vektora DXF-bildo</comment>
     <comment xml:lang="es">imagen vectorial DXF</comment>
     <comment xml:lang="eu">DXF bektore-grafikoa</comment>
     <comment xml:lang="fi">DXF-vektorikuva</comment>
     <comment xml:lang="fo">DXF vektormynd</comment>
     <comment xml:lang="fr">image vectorielle DXF</comment>
+    <comment xml:lang="fur">imagjin vetoriâl DXF</comment>
     <comment xml:lang="ga">íomhá veicteoireach DXF</comment>
     <comment xml:lang="gl">imaxe de vector DXF</comment>
     <comment xml:lang="he">תמונת DXF וקטורית</comment>
@@ -27356,7 +28316,7 @@
     <comment xml:lang="oc">imatge vectorial DXF</comment>
     <comment xml:lang="pl">Obraz wektorowy DXF</comment>
     <comment xml:lang="pt">imagem de vectores DXF</comment>
-    <comment xml:lang="pt_BR">Imagem vetorial DXF</comment>
+    <comment xml:lang="pt-BR">Imagem vetorial DXF</comment>
     <comment xml:lang="ro">Imagine vectorială DXF</comment>
     <comment xml:lang="ru">Векторное изображение DXF</comment>
     <comment xml:lang="sk">Vektorový obrázok DXF</comment>
@@ -27367,78 +28327,63 @@
     <comment xml:lang="tr">DXF vektör görüntüsü</comment>
     <comment xml:lang="uk">векторне зображення DXF</comment>
     <comment xml:lang="vi">Ảnh véc-tơ DXF</comment>
-    <comment xml:lang="zh_CN">DXF 矢量图像</comment>
-    <comment xml:lang="zh_TW">DXF 向量圖</comment>
+    <comment xml:lang="zh-CN">DXF 矢量图像</comment>
+    <comment xml:lang="zh-TW">DXF 向量圖</comment>
     <glob pattern="*.dxf"/>
     <magic priority="50">
-      <match value="\nHEADER\n" type="string" offset="0:64"/>
-      <match value="\x0d\nHEADER\x0d\n" type="string" offset="0:64"/>
+      <match type="string" value="\nHEADER\n" offset="0:64"/>
+      <match type="string" value="\x0d\nHEADER\x0d\n" offset="0:64"/>
     </magic>
   </mime-type>
   <mime-type type="image/vnd.ms-modi">
-    <comment>Microsoft Document Imaging format</comment>
-    <comment xml:lang="ar">صيغة مستند تصوير مايكروسوفت</comment>
-    <comment xml:lang="ast">Formatu d'imáxenes de Microsoft Document</comment>
-    <comment xml:lang="bg">Изображение — Microsoft Document Imaging</comment>
-    <comment xml:lang="ca">format Microsoft Document Imaging</comment>
-    <comment xml:lang="cs">formát Microsoft Document Imaging</comment>
-    <comment xml:lang="da">Microsofts dokumentbilledformat</comment>
-    <comment xml:lang="de">Microsoft-Document-Imaging-Bildformat</comment>
-    <comment xml:lang="el">Μορφή Microsoft Document Imaging</comment>
-    <comment xml:lang="en_GB">Microsoft Document Imaging format</comment>
-    <comment xml:lang="es">formato de imagen para documentos de Microsoft</comment>
-    <comment xml:lang="eu">Microsoft Document Imaging formatua</comment>
-    <comment xml:lang="fi">Microsoft Document Imaging -muoto</comment>
-    <comment xml:lang="fo">Microsoft Document Imaging snið</comment>
-    <comment xml:lang="fr">format Document Imaging Microsoft</comment>
-    <comment xml:lang="ga">formáid Microsoft Document Imaging</comment>
-    <comment xml:lang="gl">formato de Microsoft Document Imaging</comment>
-    <comment xml:lang="he">תבנית של Microsoft Document Imaging</comment>
-    <comment xml:lang="hr">Microsoft Document Imaging format</comment>
-    <comment xml:lang="hu">Microsoft Document Imaging formátum</comment>
-    <comment xml:lang="ia">File in formato Microsoft Document Imaging</comment>
-    <comment xml:lang="id">Format Microsoft Document Imaging</comment>
-    <comment xml:lang="it">Formato MDI (Microsoft Document Imaging)</comment>
-    <comment xml:lang="ja">Microsoft ドキュメントイメージフォーマット</comment>
-    <comment xml:lang="kk">Microsoft Document Imaging пішімі</comment>
-    <comment xml:lang="ko">Microsoft 문서 이미지 형식</comment>
-    <comment xml:lang="lt">Microsoft Document Imaging formatas</comment>
-    <comment xml:lang="lv">Microsoft dokumentu attēlošanas formāts</comment>
-    <comment xml:lang="nl">Microsoft Document Imaging</comment>
-    <comment xml:lang="oc">format Document Imaging Microsoft</comment>
-    <comment xml:lang="pl">Format Microsoft Document Imaging</comment>
-    <comment xml:lang="pt">formato Microsoft Document Imaging</comment>
-    <comment xml:lang="pt_BR">Formato do Microsoft Document Imaging</comment>
-    <comment xml:lang="ro">Format Microsoft Document Imaging</comment>
-    <comment xml:lang="ru">Формат Microsoft Document Imaging</comment>
-    <comment xml:lang="sk">Formát Microsoft Document Imaging</comment>
-    <comment xml:lang="sl">Zapis Microsoft Document Imaging</comment>
-    <comment xml:lang="sr">запис слика Мајкрософтовог документа</comment>
-    <comment xml:lang="sv">Microsoft Document Imaging-format</comment>
-    <comment xml:lang="tr">Microsoft Belge Görüntüleme biçimi</comment>
-    <comment xml:lang="uk">формат Microsoft Document Imaging</comment>
-    <comment xml:lang="vi">Định dạng tạo ảnh tài liệu Microsoft</comment>
-    <comment xml:lang="zh_CN">Microsoft Document Imaging 格式</comment>
-    <comment xml:lang="zh_TW">微軟文件影像格式</comment>
+    <comment>MDI image</comment>
+    <comment xml:lang="bg">Изображение — MDI</comment>
+    <comment xml:lang="ca">imatge MDI</comment>
+    <comment xml:lang="da">MDI-billede</comment>
+    <comment xml:lang="de">MDI-Bild</comment>
+    <comment xml:lang="en-GB">MDI image</comment>
+    <comment xml:lang="es">imagen MDI</comment>
+    <comment xml:lang="eu">MDI irudia</comment>
+    <comment xml:lang="fi">MDI-kuva</comment>
+    <comment xml:lang="fr">image MDI</comment>
+    <comment xml:lang="hr">MDI slika</comment>
+    <comment xml:lang="hu">MDI-kép</comment>
+    <comment xml:lang="id">Citra MDI</comment>
+    <comment xml:lang="it">Immagine MDI</comment>
+    <comment xml:lang="kk">MDI суреті</comment>
+    <comment xml:lang="ko">MDI 그림</comment>
+    <comment xml:lang="pl">Obraz MDI</comment>
+    <comment xml:lang="pt-BR">Imagem MDI</comment>
+    <comment xml:lang="ru">Изображение MDI</comment>
+    <comment xml:lang="sk">Obrázok MDI</comment>
+    <comment xml:lang="sl">Slika MDI</comment>
+    <comment xml:lang="sv">MDI-bild</comment>
+    <comment xml:lang="tr">MDI görüntüsü</comment>
+    <comment xml:lang="uk">зображення MDI</comment>
+    <comment xml:lang="zh-CN">MDI 图像</comment>
+    <comment xml:lang="zh-TW">MDI 影像</comment>
     <acronym>MDI</acronym>
     <expanded-acronym>Microsoft Document Imaging</expanded-acronym>
     <glob pattern="*.mdi"/>
     <magic priority="50">
-      <match value="\x45\x50\x2A\x00" type="string" offset="0"/>
+      <match type="string" value="\x45\x50\x2A\x00" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/webp">
     <comment>WebP image</comment>
+    <comment xml:lang="af">WebP-beeld</comment>
+    <comment xml:lang="bg">Изображение — WebP</comment>
     <comment xml:lang="ca">imatge WebP</comment>
     <comment xml:lang="cs">obrázek WebP</comment>
     <comment xml:lang="da">WebP-billede</comment>
     <comment xml:lang="de">WebP-Bild</comment>
     <comment xml:lang="el">Εικόνα WebP</comment>
-    <comment xml:lang="en_GB">WebP image</comment>
+    <comment xml:lang="en-GB">WebP image</comment>
     <comment xml:lang="es">imagen WebP</comment>
     <comment xml:lang="eu">WebP irudia</comment>
     <comment xml:lang="fi">WebP-kuva</comment>
     <comment xml:lang="fr">image WebP</comment>
+    <comment xml:lang="fur">imagjin WebP</comment>
     <comment xml:lang="ga">íomhá WebP</comment>
     <comment xml:lang="gl">Imaxe WebP</comment>
     <comment xml:lang="he">תמונת WebP</comment>
@@ -27452,7 +28397,7 @@
     <comment xml:lang="oc">imatge WebP</comment>
     <comment xml:lang="pl">Obraz WebP</comment>
     <comment xml:lang="pt">imagem WebP</comment>
-    <comment xml:lang="pt_BR">Imagem WebP</comment>
+    <comment xml:lang="pt-BR">Imagem WebP</comment>
     <comment xml:lang="ru">Изображение WebP</comment>
     <comment xml:lang="sk">Obrázok WebP</comment>
     <comment xml:lang="sl">Slika WebP</comment>
@@ -27460,20 +28405,21 @@
     <comment xml:lang="sv">WebP-bild</comment>
     <comment xml:lang="tr">WebP görüntüsü</comment>
     <comment xml:lang="uk">зображення WebP</comment>
-    <comment xml:lang="zh_CN">WebP 图像</comment>
-    <comment xml:lang="zh_TW">WebP 影像</comment>
+    <comment xml:lang="zh-CN">WebP 图像</comment>
+    <comment xml:lang="zh-TW">WebP 影像</comment>
     <magic priority="50">
-      <match value="RIFF" type="string" offset="0">
-        <match value="WEBP" type="string" offset="8"/>
+      <match type="string" value="RIFF" offset="0">
+        <match type="string" value="WEBP" offset="8"/>
       </match>
     </magic>
     <glob pattern="*.webp"/>
   </mime-type>
   <mime-type type="image/x-3ds">
     <comment>3D Studio image</comment>
+    <comment xml:lang="af">3D Studio-beeld</comment>
     <comment xml:lang="ar">صورة استديو ثلاثية الأبعاد</comment>
     <comment xml:lang="az">3D Studio rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava 3D Studio</comment>
+    <comment xml:lang="be-Latn">Vyjava 3D Studio</comment>
     <comment xml:lang="bg">Изображение — 3D Studio</comment>
     <comment xml:lang="ca">imatge de 3D Studio</comment>
     <comment xml:lang="cs">obrázek 3D Studio</comment>
@@ -27481,13 +28427,14 @@
     <comment xml:lang="da">3D Studio-billede</comment>
     <comment xml:lang="de">3D-Studio-Bild</comment>
     <comment xml:lang="el">Εικόνα 3D Studio</comment>
-    <comment xml:lang="en_GB">3D Studio image</comment>
+    <comment xml:lang="en-GB">3D Studio image</comment>
     <comment xml:lang="eo">bildo de 3D Studio</comment>
     <comment xml:lang="es">imagen de 3D Studio</comment>
     <comment xml:lang="eu">3D Studio-ko irudia</comment>
     <comment xml:lang="fi">3D Studio -kuva</comment>
     <comment xml:lang="fo">3D Studio mynd</comment>
     <comment xml:lang="fr">image 3D Studio</comment>
+    <comment xml:lang="fur">imagjin 3D Studio</comment>
     <comment xml:lang="ga">íomhá 3D Studio</comment>
     <comment xml:lang="gl">Imaxe de 3D Studio</comment>
     <comment xml:lang="he">תמונת 3D Studio</comment>
@@ -27509,7 +28456,7 @@
     <comment xml:lang="oc">imatge 3D Studio</comment>
     <comment xml:lang="pl">Obraz 3D Studio</comment>
     <comment xml:lang="pt">imagem 3D Studio</comment>
-    <comment xml:lang="pt_BR">Imagem do 3D Studio</comment>
+    <comment xml:lang="pt-BR">Imagem do 3D Studio</comment>
     <comment xml:lang="ro">Imagine 3D Studio</comment>
     <comment xml:lang="ru">Сцена 3D Studio</comment>
     <comment xml:lang="sk">Obrázok 3D Studio</comment>
@@ -27520,27 +28467,32 @@
     <comment xml:lang="tr">3D Studio görüntüsü</comment>
     <comment xml:lang="uk">зображення 3D Studio</comment>
     <comment xml:lang="vi">Ảnh xuởng vẽ 3D</comment>
-    <comment xml:lang="zh_CN">3D Studio 图像</comment>
-    <comment xml:lang="zh_TW">3D Studio 影像</comment>
+    <comment xml:lang="zh-CN">3D Studio 图像</comment>
+    <comment xml:lang="zh-TW">3D Studio 影像</comment>
     <glob pattern="*.3ds"/>
+    <magic priority="30">
+      <match offset="0" type="big16" value="0x4d4d"/>
+    </magic>
   </mime-type>
   <mime-type type="image/x-applix-graphics">
     <comment>Applix Graphics image</comment>
+    <comment xml:lang="af">Applix Graphics-beeld</comment>
     <comment xml:lang="ar">صورة رسوميات Applix</comment>
-    <comment xml:lang="be@latin">Vyjava Applix Graphics</comment>
+    <comment xml:lang="be-Latn">Vyjava Applix Graphics</comment>
     <comment xml:lang="bg">Изображение — Applix Graphics</comment>
     <comment xml:lang="ca">imatge d'Applix Graphics</comment>
     <comment xml:lang="cs">obrázek Applix Graphics</comment>
     <comment xml:lang="da">Applix Graphics-billede</comment>
     <comment xml:lang="de">Applix-Graphics-Bild</comment>
     <comment xml:lang="el">Εικόνα Applix Graphics</comment>
-    <comment xml:lang="en_GB">Applix Graphics image</comment>
+    <comment xml:lang="en-GB">Applix Graphics image</comment>
     <comment xml:lang="eo">bildo de Applix Graphics</comment>
     <comment xml:lang="es">imagen de Applix Graphics</comment>
     <comment xml:lang="eu">Applix Graphics irudia</comment>
     <comment xml:lang="fi">Applix Graphics -kuva</comment>
     <comment xml:lang="fo">Applix Graphics mynd</comment>
     <comment xml:lang="fr">image Applix Graphics</comment>
+    <comment xml:lang="fur">imagjin Applix Graphics</comment>
     <comment xml:lang="ga">íomhá Applix Graphics</comment>
     <comment xml:lang="gl">imaxe de Applix Graphics</comment>
     <comment xml:lang="he">תמונה של Applix Graphics</comment>
@@ -27562,7 +28514,7 @@
     <comment xml:lang="oc">imatge Applix Graphics</comment>
     <comment xml:lang="pl">Obraz Applix Graphics</comment>
     <comment xml:lang="pt">imagem Applix Graphics</comment>
-    <comment xml:lang="pt_BR">Imagem do Applix Graphics</comment>
+    <comment xml:lang="pt-BR">Imagem do Applix Graphics</comment>
     <comment xml:lang="ro">Imagine Applix Graphics</comment>
     <comment xml:lang="ru">Изображение Applix Graphics</comment>
     <comment xml:lang="sk">Obrázok Applix Graphics</comment>
@@ -27573,36 +28525,38 @@
     <comment xml:lang="tr">Applix Graphics görüntüsü</comment>
     <comment xml:lang="uk">зображення Applix Graphics</comment>
     <comment xml:lang="vi">Ảnh Applix Graphics</comment>
-    <comment xml:lang="zh_CN">Applix Graphics 图像</comment>
-    <comment xml:lang="zh_TW">Applix Graphics 影像</comment>
+    <comment xml:lang="zh-CN">Applix Graphics 图像</comment>
+    <comment xml:lang="zh-TW">Applix Graphics 影像</comment>
     <magic priority="50">
-      <match value="*BEGIN" type="string" offset="0">
-        <match value="GRAPHICS" type="string" offset="7"/>
+      <match type="string" value="*BEGIN" offset="0">
+        <match type="string" value="GRAPHICS" offset="7"/>
       </match>
     </magic>
     <glob pattern="*.ag"/>
   </mime-type>
   <mime-type type="image/x-bzeps">
     <comment>EPS image (bzip-compressed)</comment>
+    <comment xml:lang="af">EPS-beeld (bzip-saamgepers)</comment>
     <comment xml:lang="ar">صورة EPS (مضغوط-bzip)</comment>
-    <comment xml:lang="be@latin">Vyjava EPS (bzip-skampresavanaja)</comment>
+    <comment xml:lang="be-Latn">Vyjava EPS (bzip-skampresavanaja)</comment>
     <comment xml:lang="bg">Изображение — EPS, компресирано с bzip</comment>
     <comment xml:lang="ca">imatge EPS (amb compressió bzip)</comment>
     <comment xml:lang="cs">obrázek EPS (komprimovaný pomocí bzip)</comment>
     <comment xml:lang="da">EPS-billede (bzip-komprimeret)</comment>
     <comment xml:lang="de">EPS-Bild (bzip-komprimiert)</comment>
     <comment xml:lang="el">Εικόνα EPS (συμπιεσμένη bzip)</comment>
-    <comment xml:lang="en_GB">EPS image (bzip-compressed)</comment>
+    <comment xml:lang="en-GB">EPS image (bzip-compressed)</comment>
     <comment xml:lang="es">imagen EPS (comprimida con bzip)</comment>
     <comment xml:lang="eu">EPS irudia (bzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">EPS-kuva (bzip-pakattu)</comment>
     <comment xml:lang="fo">EPS mynd (bzip-stappað)</comment>
     <comment xml:lang="fr">image EPS (compressée bzip)</comment>
+    <comment xml:lang="fur">imagjin EPS (comprimude cun bzip)</comment>
     <comment xml:lang="ga">íomhá EPS (comhbhrúite le bzip)</comment>
     <comment xml:lang="gl">imaxe EPS (comprimida con bzip)</comment>
     <comment xml:lang="he">תמונת EPS (מכווץ בbzip)</comment>
     <comment xml:lang="hr">EPS slika (bzip sažeta)</comment>
-    <comment xml:lang="hu">EPS kép (bzip-tömörítésű)</comment>
+    <comment xml:lang="hu">EPS kép (bzip tömörítésű)</comment>
     <comment xml:lang="ia">Imagine EPS (comprimite con bzip)</comment>
     <comment xml:lang="id">Citra EPS (terkompresi bzip)</comment>
     <comment xml:lang="it">Immagine EPS (compressa con bzip)</comment>
@@ -27618,7 +28572,7 @@
     <comment xml:lang="oc">imatge EPS (compressat bzip)</comment>
     <comment xml:lang="pl">Obraz EPS (kompresja bzip)</comment>
     <comment xml:lang="pt">imagem EPS (compressão bzip)</comment>
-    <comment xml:lang="pt_BR">Imagem EPS (compactada com bzip)</comment>
+    <comment xml:lang="pt-BR">Imagem EPS (compactada com bzip)</comment>
     <comment xml:lang="ro">Imagine EPS (compresie bzip)</comment>
     <comment xml:lang="ru">Изображение EPS (сжатое bzip)</comment>
     <comment xml:lang="sk">Obrázok EPS (komprimovaný pomocou bzip)</comment>
@@ -27629,8 +28583,8 @@
     <comment xml:lang="tr">EPS görüntüsü (bzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">зображення EPS (стиснене bzip)</comment>
     <comment xml:lang="vi">Ảnh EPS (đã nén bzip)</comment>
-    <comment xml:lang="zh_CN">EPS 图像（bzip 压缩）</comment>
-    <comment xml:lang="zh_TW">EPS 影像 (bzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">EPS 图像（bzip 压缩）</comment>
+    <comment xml:lang="zh-TW">EPS 影像 (bzip 壓縮)</comment>
     <sub-class-of type="application/x-bzip"/>
     <glob pattern="*.eps.bz2"/>
     <glob pattern="*.epsi.bz2"/>
@@ -27638,9 +28592,10 @@
   </mime-type>
   <mime-type type="image/x-cmu-raster">
     <comment>CMU raster image</comment>
+    <comment xml:lang="af">CMU-roosterbeeld</comment>
     <comment xml:lang="ar">صورة CMU نقطية</comment>
     <comment xml:lang="az">CMU raster rəsmi</comment>
-    <comment xml:lang="be@latin">Rastravaja vyjava CMU</comment>
+    <comment xml:lang="be-Latn">Rastravaja vyjava CMU</comment>
     <comment xml:lang="bg">Изображение — CMU raster</comment>
     <comment xml:lang="ca">imatge ràster CMU</comment>
     <comment xml:lang="cs">rastrový obrázek CMU</comment>
@@ -27648,13 +28603,14 @@
     <comment xml:lang="da">CMU-rasterbillede</comment>
     <comment xml:lang="de">CMU-Rasterbild</comment>
     <comment xml:lang="el">Εικόνα ράστερ CMU</comment>
-    <comment xml:lang="en_GB">CMU raster image</comment>
+    <comment xml:lang="en-GB">CMU raster image</comment>
     <comment xml:lang="eo">rastruma bildo de CMU</comment>
     <comment xml:lang="es">imagen ráster CMU</comment>
     <comment xml:lang="eu">CMU bilbe-irudia</comment>
     <comment xml:lang="fi">CMU-rasterikuva</comment>
     <comment xml:lang="fo">CMU raster mynd</comment>
     <comment xml:lang="fr">image raster CMU</comment>
+    <comment xml:lang="fur">imagjin raster CMU</comment>
     <comment xml:lang="ga">íomhá rastar CMU</comment>
     <comment xml:lang="gl">imaxe raster CMU</comment>
     <comment xml:lang="he">תמונת סריקה CMU</comment>
@@ -27676,7 +28632,7 @@
     <comment xml:lang="oc">imatge raster CMU</comment>
     <comment xml:lang="pl">Obraz rastrowy CMU</comment>
     <comment xml:lang="pt">imagem raster CMU</comment>
-    <comment xml:lang="pt_BR">Imagem raster CMU</comment>
+    <comment xml:lang="pt-BR">Imagem raster CMU</comment>
     <comment xml:lang="ro">Imagine raster CMU</comment>
     <comment xml:lang="ru">Растровое изображение CMU</comment>
     <comment xml:lang="sk">Rastrový obrázok CMU</comment>
@@ -27687,33 +28643,35 @@
     <comment xml:lang="tr">CMU tarama görüntüsü</comment>
     <comment xml:lang="uk">растрове зображення CMU</comment>
     <comment xml:lang="vi">Ảnh mành CMU</comment>
-    <comment xml:lang="zh_CN">CMU 光栅图像</comment>
-    <comment xml:lang="zh_TW">CMU raster 影像</comment>
+    <comment xml:lang="zh-CN">CMU 光栅图像</comment>
+    <comment xml:lang="zh-TW">CMU raster 影像</comment>
     <glob pattern="*.ras"/>
   </mime-type>
   <mime-type type="image/x-compressed-xcf">
     <comment>compressed GIMP image</comment>
+    <comment xml:lang="af">saamgepersde GIMP-beeld</comment>
     <comment xml:lang="ar">صورة GIMP مضغوطة</comment>
-    <comment xml:lang="be@latin">skampresavanaja vyjava GIMP</comment>
+    <comment xml:lang="be-Latn">skampresavanaja vyjava GIMP</comment>
     <comment xml:lang="bg">Изображение — GIMP, компресирано</comment>
     <comment xml:lang="ca">imatge GIMP amb compressió</comment>
     <comment xml:lang="cs">komprimovaný obrázek GIMP</comment>
     <comment xml:lang="da">komprimeret GIMP-billede</comment>
     <comment xml:lang="de">Komprimiertes GIMP-Bild</comment>
     <comment xml:lang="el">Συμπιεσμένη εικόνα GIMP</comment>
-    <comment xml:lang="en_GB">compressed GIMP image</comment>
+    <comment xml:lang="en-GB">compressed GIMP image</comment>
     <comment xml:lang="es">imagen GIMP comprimida</comment>
     <comment xml:lang="eu">konprimitutako GIMP irudia</comment>
     <comment xml:lang="fi">pakattu GIMP-kuva</comment>
     <comment xml:lang="fo">stappað GIMP mynd</comment>
     <comment xml:lang="fr">image GIMP compressée</comment>
+    <comment xml:lang="fur">imagjin GIMP comprimude</comment>
     <comment xml:lang="ga">íomhá GIMP comhbhrúite</comment>
     <comment xml:lang="gl">imaxe de GIMP comprimida</comment>
     <comment xml:lang="he">תמונת GIMP מכווצת</comment>
     <comment xml:lang="hr">Sažeta GIMP slika</comment>
     <comment xml:lang="hu">tömörített GIMP kép</comment>
     <comment xml:lang="ia">Imagine GIMP comprimite</comment>
-    <comment xml:lang="id">Citra GIMP terkompresi</comment>
+    <comment xml:lang="id">citra GIMP terkompresi</comment>
     <comment xml:lang="it">Immagine GIMP compressa</comment>
     <comment xml:lang="ja">圧縮 GIMP 画像</comment>
     <comment xml:lang="kk">сығылған GIMP суреті</comment>
@@ -27726,7 +28684,7 @@
     <comment xml:lang="oc">imatge GIMP compressat</comment>
     <comment xml:lang="pl">Skompresowany obraz GIMP</comment>
     <comment xml:lang="pt">imagem GIMP comprimida</comment>
-    <comment xml:lang="pt_BR">Imagem do GIMP compactada</comment>
+    <comment xml:lang="pt-BR">Imagem do GIMP compactada</comment>
     <comment xml:lang="ro">imagine comprimată GIMP</comment>
     <comment xml:lang="ru">Сжатое изображение GIMP</comment>
     <comment xml:lang="sk">Komprimovaný obrázok GIMP</comment>
@@ -27737,28 +28695,30 @@
     <comment xml:lang="tr">sıkıştırılmış GIMP görüntüsü</comment>
     <comment xml:lang="uk">стиснене зображення GIMP</comment>
     <comment xml:lang="vi">ảnh GIMP đã nén</comment>
-    <comment xml:lang="zh_CN">压缩的 GIMP 图像</comment>
-    <comment xml:lang="zh_TW">壓縮版 GIMP 影像</comment>
+    <comment xml:lang="zh-CN">压缩的 GIMP 图像</comment>
+    <comment xml:lang="zh-TW">壓縮版 GIMP 影像</comment>
     <glob pattern="*.xcf.gz"/>
     <glob pattern="*.xcf.bz2"/>
   </mime-type>
   <mime-type type="application/dicom">
     <comment>DICOM image</comment>
+    <comment xml:lang="af">DICOM-beeld</comment>
     <comment xml:lang="ar">صورة DICOM</comment>
-    <comment xml:lang="be@latin">Vyjava DICOM</comment>
+    <comment xml:lang="be-Latn">Vyjava DICOM</comment>
     <comment xml:lang="bg">Изображение — DICOM</comment>
     <comment xml:lang="ca">imatge DICOM</comment>
     <comment xml:lang="cs">obrázek DICOM</comment>
     <comment xml:lang="da">DICOM-billede</comment>
     <comment xml:lang="de">DICOM-Bild</comment>
     <comment xml:lang="el">Εικόνα DICOM</comment>
-    <comment xml:lang="en_GB">DICOM image</comment>
+    <comment xml:lang="en-GB">DICOM image</comment>
     <comment xml:lang="eo">DICOM-bildo</comment>
     <comment xml:lang="es">imagen DICOM</comment>
     <comment xml:lang="eu">DICOM irudia</comment>
     <comment xml:lang="fi">DICOM-kuva</comment>
     <comment xml:lang="fo">DICOM mynd</comment>
     <comment xml:lang="fr">image DICOM</comment>
+    <comment xml:lang="fur">imagjin DICOM</comment>
     <comment xml:lang="ga">íomhá DICOM</comment>
     <comment xml:lang="gl">imaxe DICOM</comment>
     <comment xml:lang="he">תמונת DICOM</comment>
@@ -27779,7 +28739,7 @@
     <comment xml:lang="oc">imatge DICOM</comment>
     <comment xml:lang="pl">Obraz DICOM</comment>
     <comment xml:lang="pt">imagem DICOM</comment>
-    <comment xml:lang="pt_BR">Imagem DICOM</comment>
+    <comment xml:lang="pt-BR">Imagem DICOM</comment>
     <comment xml:lang="ro">Imagine DICOM</comment>
     <comment xml:lang="ru">Изображение DICOM</comment>
     <comment xml:lang="sk">Obrázok DICOM</comment>
@@ -27790,35 +28750,37 @@
     <comment xml:lang="tr">DICOM görüntüsü</comment>
     <comment xml:lang="uk">зображення DICOM</comment>
     <comment xml:lang="vi">Ảnh DICOM</comment>
-    <comment xml:lang="zh_CN">DICOM 图像</comment>
-    <comment xml:lang="zh_TW">DICOM 影像</comment>
+    <comment xml:lang="zh-CN">DICOM 图像</comment>
+    <comment xml:lang="zh-TW">DICOM 影像</comment>
     <acronym>DICOM</acronym>
     <expanded-acronym>Digital Imaging and Communications in Medicine</expanded-acronym>
     <generic-icon name="image-x-generic"/>
     <glob pattern="dicomdir"/>
     <glob pattern="*.dcm"/>
     <magic priority="50">
-      <match value="DICM" type="string" offset="128"/>
+      <match type="string" value="DICM" offset="128"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-docbook+xml">
     <comment>DocBook document</comment>
+    <comment xml:lang="af">DocBook-dokument</comment>
     <comment xml:lang="ar">مستند DocBook</comment>
     <comment xml:lang="ast">Documentu DocBook</comment>
-    <comment xml:lang="be@latin">Dakument DocBook</comment>
+    <comment xml:lang="be-Latn">Dakument DocBook</comment>
     <comment xml:lang="bg">Документ — DocBook</comment>
     <comment xml:lang="ca">document DocBook</comment>
     <comment xml:lang="cs">dokument DocBook</comment>
     <comment xml:lang="da">DocBook-dokument</comment>
     <comment xml:lang="de">DocBook-Dokument</comment>
     <comment xml:lang="el">Έγγραφο DocBook</comment>
-    <comment xml:lang="en_GB">DocBook document</comment>
+    <comment xml:lang="en-GB">DocBook document</comment>
     <comment xml:lang="eo">DocBook-dokumento</comment>
     <comment xml:lang="es">documento DocBook</comment>
     <comment xml:lang="eu">DocBook dokumentua</comment>
     <comment xml:lang="fi">DocBook-asiakirja</comment>
     <comment xml:lang="fo">DocBook skjal</comment>
     <comment xml:lang="fr">document DocBook</comment>
+    <comment xml:lang="fur">document DocBook</comment>
     <comment xml:lang="ga">cáipéis DocBook</comment>
     <comment xml:lang="gl">documento de DocBook</comment>
     <comment xml:lang="he">מסמך DocBook</comment>
@@ -27839,7 +28801,7 @@
     <comment xml:lang="oc">document DocBook</comment>
     <comment xml:lang="pl">Dokument DocBook</comment>
     <comment xml:lang="pt">documento DocBook</comment>
-    <comment xml:lang="pt_BR">Documento DocBook</comment>
+    <comment xml:lang="pt-BR">Documento DocBook</comment>
     <comment xml:lang="ro">Document DocBook</comment>
     <comment xml:lang="ru">Документ DocBook</comment>
     <comment xml:lang="sk">Dokument DocBook</comment>
@@ -27850,8 +28812,8 @@
     <comment xml:lang="tr">DocBook belgesi</comment>
     <comment xml:lang="uk">документ DocBook</comment>
     <comment xml:lang="vi">Tài liệu DocBook</comment>
-    <comment xml:lang="zh_CN">DocBook 文档</comment>
-    <comment xml:lang="zh_TW">DocBook 文件</comment>
+    <comment xml:lang="zh-CN">DocBook 文档</comment>
+    <comment xml:lang="zh-TW">DocBook 文件</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="x-office-document"/>
     <magic priority="90">
@@ -27867,21 +28829,23 @@
   </mime-type>
   <mime-type type="image/x-dib">
     <comment>DIB image</comment>
+    <comment xml:lang="af">DIB-beeld</comment>
     <comment xml:lang="ar">صورة DIB</comment>
-    <comment xml:lang="be@latin">Vyjava DIB</comment>
+    <comment xml:lang="be-Latn">Vyjava DIB</comment>
     <comment xml:lang="bg">Изображение — DIB</comment>
     <comment xml:lang="ca">imatge DIB</comment>
     <comment xml:lang="cs">obrázek DIB</comment>
     <comment xml:lang="da">DIB-billede</comment>
     <comment xml:lang="de">DIB-Bild</comment>
     <comment xml:lang="el">Εικόνα DIB</comment>
-    <comment xml:lang="en_GB">DIB image</comment>
+    <comment xml:lang="en-GB">DIB image</comment>
     <comment xml:lang="eo">DIB-bildo</comment>
     <comment xml:lang="es">imagen DIB</comment>
     <comment xml:lang="eu">DIB irudia</comment>
     <comment xml:lang="fi">DIB-kuva</comment>
     <comment xml:lang="fo">DIB mynd</comment>
     <comment xml:lang="fr">image DIB</comment>
+    <comment xml:lang="fur">imagjin DIB</comment>
     <comment xml:lang="ga">íomhá DIB</comment>
     <comment xml:lang="gl">imaxe DIB</comment>
     <comment xml:lang="he">תמונת DIB</comment>
@@ -27902,7 +28866,7 @@
     <comment xml:lang="oc">imatge DIB</comment>
     <comment xml:lang="pl">Obraz DIB</comment>
     <comment xml:lang="pt">imagem DIB</comment>
-    <comment xml:lang="pt_BR">Imagem DIB</comment>
+    <comment xml:lang="pt-BR">Imagem DIB</comment>
     <comment xml:lang="ro">Imagine DIB</comment>
     <comment xml:lang="ru">Изображение DIB</comment>
     <comment xml:lang="sk">Obrázok DIB</comment>
@@ -27913,31 +28877,33 @@
     <comment xml:lang="tr">DIB görüntüsü</comment>
     <comment xml:lang="uk">зображення DIB</comment>
     <comment xml:lang="vi">Ảnh DIB</comment>
-    <comment xml:lang="zh_CN">DIB 图像</comment>
-    <comment xml:lang="zh_TW">DIB 影像</comment>
+    <comment xml:lang="zh-CN">DIB 图像</comment>
+    <comment xml:lang="zh-TW">DIB 影像</comment>
     <acronym>DIB</acronym>
     <expanded-acronym>Device Independent Bitmap</expanded-acronym>
     <magic priority="50">
-      <match value="\x28\00\00\00" type="string" offset="0"/>
+      <match type="string" value="\x28\00\00\00" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/vnd.djvu">
     <comment>DjVu image</comment>
+    <comment xml:lang="af">DjVu-beeld</comment>
     <comment xml:lang="ar">صورة DjVu</comment>
-    <comment xml:lang="be@latin">Vyjava DjVu</comment>
+    <comment xml:lang="be-Latn">Vyjava DjVu</comment>
     <comment xml:lang="bg">Изображение — DjVu</comment>
     <comment xml:lang="ca">imatge DjVu</comment>
     <comment xml:lang="cs">obrázek DjVu</comment>
     <comment xml:lang="da">DjVu-billede</comment>
     <comment xml:lang="de">DjVu-Bild</comment>
     <comment xml:lang="el">Εικόνα DjVu</comment>
-    <comment xml:lang="en_GB">DjVu image</comment>
+    <comment xml:lang="en-GB">DjVu image</comment>
     <comment xml:lang="eo">DjVu-bildo</comment>
     <comment xml:lang="es">imagen DjVu</comment>
     <comment xml:lang="eu">DjVU-ko irudia</comment>
     <comment xml:lang="fi">DjVu-kuva</comment>
     <comment xml:lang="fo">DjVu mynd</comment>
     <comment xml:lang="fr">image DjVu</comment>
+    <comment xml:lang="fur">imagjin DjVu</comment>
     <comment xml:lang="ga">íomhá DjVu</comment>
     <comment xml:lang="gl">imaxe de DjVu</comment>
     <comment xml:lang="he">תמונת DjVu</comment>
@@ -27959,7 +28925,7 @@
     <comment xml:lang="oc">imatge DjVu</comment>
     <comment xml:lang="pl">Obraz DjVu</comment>
     <comment xml:lang="pt">imagem DjVu</comment>
-    <comment xml:lang="pt_BR">Imagem DjVu</comment>
+    <comment xml:lang="pt-BR">Imagem DjVu</comment>
     <comment xml:lang="ro">Imagine DjVu</comment>
     <comment xml:lang="ru">Изображение DjVu</comment>
     <comment xml:lang="sk">Obrázok DjVu</comment>
@@ -27970,16 +28936,16 @@
     <comment xml:lang="tr">DjVu görüntüsü</comment>
     <comment xml:lang="uk">зображення DjVu</comment>
     <comment xml:lang="vi">Ảnh DjVu</comment>
-    <comment xml:lang="zh_CN">DjVu 图像</comment>
-    <comment xml:lang="zh_TW">DjVu 影像</comment>
+    <comment xml:lang="zh-CN">DjVu 图像</comment>
+    <comment xml:lang="zh-TW">DjVu 影像</comment>
     <alias type="image/x-djvu"/>
     <alias type="image/x.djvu"/>
     <magic priority="80">
-      <match value="AT&amp;TFORM" type="string" offset="0">
-        <match value="DJVU" type="string" offset="12"/>
+      <match type="string" offset="0" value="AT&amp;TFORM">
+        <match type="string" offset="12" value="DJVU"/>
       </match>
-      <match value="FORM" type="string" offset="0">
-        <match value="DJVU" type="string" offset="8"/>
+      <match type="string" offset="0" value="FORM">
+        <match type="string" offset="8" value="DJVU"/>
       </match>
     </magic>
     <glob pattern="*.djvu"/>
@@ -27987,17 +28953,20 @@
   </mime-type>
   <mime-type type="image/vnd.djvu+multipage">
     <comment>DjVu document</comment>
+    <comment xml:lang="af">DjVu-dokument</comment>
     <comment xml:lang="ast">Documentu DjVu</comment>
+    <comment xml:lang="bg">Документ — DjVu</comment>
     <comment xml:lang="ca">document DjVu</comment>
     <comment xml:lang="cs">dokument DjVu</comment>
     <comment xml:lang="da">DjVu-dokument</comment>
     <comment xml:lang="de">DjVu-Dokument</comment>
     <comment xml:lang="el">Έγγραφο DjVu</comment>
-    <comment xml:lang="en_GB">DjVu document</comment>
+    <comment xml:lang="en-GB">DjVu document</comment>
     <comment xml:lang="es">documento DjVu</comment>
     <comment xml:lang="eu">DjVu dokumentua</comment>
     <comment xml:lang="fi">DjVu-asiakirja</comment>
     <comment xml:lang="fr">document DjVu</comment>
+    <comment xml:lang="fur">document DjVu</comment>
     <comment xml:lang="ga">cáipéis DjVu</comment>
     <comment xml:lang="he">מסמך DjVu</comment>
     <comment xml:lang="hr">DjVu dokument</comment>
@@ -28010,22 +28979,23 @@
     <comment xml:lang="oc">document DjVu</comment>
     <comment xml:lang="pl">Dokument DjVu</comment>
     <comment xml:lang="pt">documento DjVu</comment>
-    <comment xml:lang="pt_BR">Documento DjVu</comment>
+    <comment xml:lang="pt-BR">Documento DjVu</comment>
     <comment xml:lang="ru">Документ DjVu</comment>
     <comment xml:lang="sk">Dokument DjVu</comment>
+    <comment xml:lang="sl">Dokument DjVu</comment>
     <comment xml:lang="sr">ДјВу документ</comment>
     <comment xml:lang="sv">DjVu-dokument</comment>
     <comment xml:lang="tr">DjVu belgesi</comment>
     <comment xml:lang="uk">документ DjVu</comment>
-    <comment xml:lang="zh_CN">DjVu 文档</comment>
-    <comment xml:lang="zh_TW">DjVu 文件</comment>
+    <comment xml:lang="zh-CN">DjVu 文档</comment>
+    <comment xml:lang="zh-TW">DjVu 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="80">
-      <match value="AT&amp;TFORM" type="string" offset="0">
-        <match value="DJVM" type="string" offset="12"/>
+      <match type="string" offset="0" value="AT&amp;TFORM">
+        <match type="string" offset="12" value="DJVM"/>
       </match>
-      <match value="FORM" type="string" offset="0">
-        <match value="DJVM" type="string" offset="8"/>
+      <match type="string" offset="0" value="FORM">
+        <match type="string" offset="8" value="DJVM"/>
       </match>
     </magic>
     <sub-class-of type="image/vnd.djvu"/>
@@ -28034,21 +29004,23 @@
   </mime-type>
   <mime-type type="image/dpx">
     <comment>DPX image</comment>
+    <comment xml:lang="af">DPX-beeld</comment>
     <comment xml:lang="ar">صورة DPX</comment>
-    <comment xml:lang="be@latin">Vyjava DPX</comment>
+    <comment xml:lang="be-Latn">Vyjava DPX</comment>
     <comment xml:lang="bg">Изображение — DPX</comment>
     <comment xml:lang="ca">imatge DPX</comment>
     <comment xml:lang="cs">obrázek DPX</comment>
     <comment xml:lang="da">DPX-billede</comment>
     <comment xml:lang="de">DPX-Bild</comment>
     <comment xml:lang="el">Εικόνα DPX</comment>
-    <comment xml:lang="en_GB">DPX image</comment>
+    <comment xml:lang="en-GB">DPX image</comment>
     <comment xml:lang="eo">DPX-bildo</comment>
     <comment xml:lang="es">imagen DPX</comment>
     <comment xml:lang="eu">DPX irudia</comment>
     <comment xml:lang="fi">DPX-kuva</comment>
     <comment xml:lang="fo">DPX mynd</comment>
     <comment xml:lang="fr">image DPX</comment>
+    <comment xml:lang="fur">imagjin DPX</comment>
     <comment xml:lang="ga">íomhá DPX</comment>
     <comment xml:lang="gl">imaxe DPX</comment>
     <comment xml:lang="he">תמונת DPX</comment>
@@ -28069,7 +29041,7 @@
     <comment xml:lang="oc">imatge DPX</comment>
     <comment xml:lang="pl">Obraz DPX</comment>
     <comment xml:lang="pt">imagem DPX</comment>
-    <comment xml:lang="pt_BR">Imagem DPX</comment>
+    <comment xml:lang="pt-BR">Imagem DPX</comment>
     <comment xml:lang="ro">Imagine DPX</comment>
     <comment xml:lang="ru">Изображение DPX</comment>
     <comment xml:lang="sk">Obrázok DPX</comment>
@@ -28080,31 +29052,33 @@
     <comment xml:lang="tr">DPX görüntüsü</comment>
     <comment xml:lang="uk">зображення DPX</comment>
     <comment xml:lang="vi">Ảnh DPX</comment>
-    <comment xml:lang="zh_CN">DPX 图像</comment>
-    <comment xml:lang="zh_TW">DPX 影像</comment>
+    <comment xml:lang="zh-CN">DPX 图像</comment>
+    <comment xml:lang="zh-TW">DPX 影像</comment>
     <acronym>DPX</acronym>
     <expanded-acronym>Digital Moving Picture Exchange</expanded-acronym>
     <magic priority="50">
-      <match value="0x53445058" type="big32" offset="0"/>
+      <match type="big32" value="0x53445058" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-eps">
     <comment>EPS image</comment>
+    <comment xml:lang="af">EPS-beeld</comment>
     <comment xml:lang="ar">صورة EPS</comment>
-    <comment xml:lang="be@latin">Vyjava EPS</comment>
+    <comment xml:lang="be-Latn">Vyjava EPS</comment>
     <comment xml:lang="bg">Изображение — EPS</comment>
     <comment xml:lang="ca">imatge EPS</comment>
     <comment xml:lang="cs">obrázek EPS</comment>
     <comment xml:lang="da">EPS-billede</comment>
     <comment xml:lang="de">EPS-Bild</comment>
     <comment xml:lang="el">Εικόνα EPS</comment>
-    <comment xml:lang="en_GB">EPS image</comment>
+    <comment xml:lang="en-GB">EPS image</comment>
     <comment xml:lang="eo">EPS-bildo</comment>
     <comment xml:lang="es">imagen EPS</comment>
     <comment xml:lang="eu">EPS irudia</comment>
     <comment xml:lang="fi">EPS-kuva</comment>
     <comment xml:lang="fo">EPS mynd</comment>
     <comment xml:lang="fr">image EPS</comment>
+    <comment xml:lang="fur">imagjin EPS</comment>
     <comment xml:lang="ga">íomhá EPS</comment>
     <comment xml:lang="gl">imaxe EPS</comment>
     <comment xml:lang="he">תמונת EPS</comment>
@@ -28125,7 +29099,7 @@
     <comment xml:lang="oc">imatge EPS</comment>
     <comment xml:lang="pl">Obraz EPS</comment>
     <comment xml:lang="pt">imagem EPS</comment>
-    <comment xml:lang="pt_BR">Imagem EPS</comment>
+    <comment xml:lang="pt-BR">Imagem EPS</comment>
     <comment xml:lang="ro">Imagine EPS</comment>
     <comment xml:lang="ru">Изображение EPS</comment>
     <comment xml:lang="sk">Obrázok EPS</comment>
@@ -28136,19 +29110,19 @@
     <comment xml:lang="tr">EPS görüntüsü</comment>
     <comment xml:lang="uk">зображення EPS</comment>
     <comment xml:lang="vi">Ảnh EPS</comment>
-    <comment xml:lang="zh_CN">EPS 图像</comment>
-    <comment xml:lang="zh_TW">EPS 影像</comment>
+    <comment xml:lang="zh-CN">EPS 图像</comment>
+    <comment xml:lang="zh-TW">EPS 影像</comment>
     <acronym>EPS</acronym>
     <expanded-acronym>Encapsulated PostScript</expanded-acronym>
     <sub-class-of type="application/postscript"/>
     <magic priority="90">
-      <match value="%!" type="string" offset="0">
-        <match value="EPS" type="string" offset="15"/>
+      <match type="string" value="%!" offset="0">
+        <match type="string" value="EPS" offset="15"/>
       </match>
-      <match value="\004%!" type="string" offset="0">
-        <match value="EPS" type="string" offset="16"/>
+      <match type="string" value="\004%!" offset="0">
+        <match type="string" value="EPS" offset="16"/>
       </match>
-      <match value="0xC5D0D3C6" type="big32" offset="0"/>
+      <match type="big32" value="0xC5D0D3C6" offset="0"/>
     </magic>
     <glob pattern="*.eps"/>
     <glob pattern="*.epsi"/>
@@ -28156,22 +29130,24 @@
   </mime-type>
   <mime-type type="image/fits">
     <comment>FITS document</comment>
+    <comment xml:lang="af">FITS-dokument</comment>
     <comment xml:lang="ar">مستند FITS</comment>
     <comment xml:lang="ast">Documentu FITS</comment>
-    <comment xml:lang="be@latin">Dakument FITS</comment>
+    <comment xml:lang="be-Latn">Dakument FITS</comment>
     <comment xml:lang="bg">Документ — FITS</comment>
     <comment xml:lang="ca">document FITS</comment>
     <comment xml:lang="cs">dokument FITS</comment>
     <comment xml:lang="da">FITS-dokument</comment>
     <comment xml:lang="de">FITS-Dokument</comment>
     <comment xml:lang="el">Έγγραφο FITS</comment>
-    <comment xml:lang="en_GB">FITS document</comment>
+    <comment xml:lang="en-GB">FITS document</comment>
     <comment xml:lang="eo">FITS-dokumento</comment>
     <comment xml:lang="es">documento FITS</comment>
     <comment xml:lang="eu">FITS dokumentua</comment>
     <comment xml:lang="fi">FITS-asiakirja</comment>
     <comment xml:lang="fo">FITS skjal</comment>
     <comment xml:lang="fr">document FITS</comment>
+    <comment xml:lang="fur">document FITS</comment>
     <comment xml:lang="ga">cáipéis FITS</comment>
     <comment xml:lang="gl">documento FICT</comment>
     <comment xml:lang="he">מסמך FITS</comment>
@@ -28192,7 +29168,7 @@
     <comment xml:lang="oc">document FITS</comment>
     <comment xml:lang="pl">Dokument FITS</comment>
     <comment xml:lang="pt">documento FITS</comment>
-    <comment xml:lang="pt_BR">Documento FITS</comment>
+    <comment xml:lang="pt-BR">Documento FITS</comment>
     <comment xml:lang="ro">Document FITS</comment>
     <comment xml:lang="ru">Документ FITS</comment>
     <comment xml:lang="sk">Dokument FITS</comment>
@@ -28203,33 +29179,35 @@
     <comment xml:lang="tr">FITS belgesi</comment>
     <comment xml:lang="uk">документ FITS</comment>
     <comment xml:lang="vi">Tài liệu FITS</comment>
-    <comment xml:lang="zh_CN">FITS 文档</comment>
-    <comment xml:lang="zh_TW">FITS 文件</comment>
+    <comment xml:lang="zh-CN">FITS 文档</comment>
+    <comment xml:lang="zh-TW">FITS 文件</comment>
     <acronym>FITS</acronym>
     <expanded-acronym>Flexible Image Transport System</expanded-acronym>
     <magic priority="50">
-      <match value="SIMPLE  =" type="string" offset="0"/>
+      <match type="string" value="SIMPLE  =" offset="0"/>
     </magic>
     <glob pattern="*.fits"/>
     <alias type="image/x-fits"/>
   </mime-type>
   <mime-type type="image/x-fpx">
     <comment>FPX image</comment>
+    <comment xml:lang="af">FPX-beeld</comment>
     <comment xml:lang="ar">صورة FPX</comment>
-    <comment xml:lang="be@latin">Vyjava FPX</comment>
+    <comment xml:lang="be-Latn">Vyjava FPX</comment>
     <comment xml:lang="bg">Изображение — FPX</comment>
     <comment xml:lang="ca">imatge FPX</comment>
     <comment xml:lang="cs">obrázek FPX</comment>
     <comment xml:lang="da">FPX-billede</comment>
     <comment xml:lang="de">FPX-Bild</comment>
     <comment xml:lang="el">Εικόνα FPX</comment>
-    <comment xml:lang="en_GB">FPX image</comment>
+    <comment xml:lang="en-GB">FPX image</comment>
     <comment xml:lang="eo">FPX-bildo</comment>
     <comment xml:lang="es">imagen FPX</comment>
     <comment xml:lang="eu">FPX irudia</comment>
     <comment xml:lang="fi">FPX-kuva</comment>
     <comment xml:lang="fo">FPX mynd</comment>
     <comment xml:lang="fr">image FPX</comment>
+    <comment xml:lang="fur">imagjin FPX</comment>
     <comment xml:lang="ga">íomhá FPX</comment>
     <comment xml:lang="gl">imaxe FPX</comment>
     <comment xml:lang="he">תמונת FPX</comment>
@@ -28250,7 +29228,7 @@
     <comment xml:lang="oc">imatge FPX</comment>
     <comment xml:lang="pl">Obraz FPX</comment>
     <comment xml:lang="pt">imagem FPX</comment>
-    <comment xml:lang="pt_BR">Imagem FPX</comment>
+    <comment xml:lang="pt-BR">Imagem FPX</comment>
     <comment xml:lang="ro">Imagine FPX</comment>
     <comment xml:lang="ru">Изображение FPX</comment>
     <comment xml:lang="sk">Obrázok FPX</comment>
@@ -28261,35 +29239,37 @@
     <comment xml:lang="tr">FPX görüntüsü</comment>
     <comment xml:lang="uk">зображення FPX</comment>
     <comment xml:lang="vi">Ảnh FPX</comment>
-    <comment xml:lang="zh_CN">FPX 图像</comment>
-    <comment xml:lang="zh_TW">FPX 影像</comment>
+    <comment xml:lang="zh-CN">FPX 图像</comment>
+    <comment xml:lang="zh-TW">FPX 影像</comment>
     <acronym>FPX</acronym>
     <expanded-acronym>FlashPiX</expanded-acronym>
     <magic priority="50">
-      <match value="0x46506978" type="big32" offset="0"/>
+      <match type="big32" value="0x46506978" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-gzeps">
     <comment>EPS image (gzip-compressed)</comment>
+    <comment xml:lang="af">EPS-beeld (gzip-saamgepers)</comment>
     <comment xml:lang="ar">صورة EPS (مضغوط-gzip)</comment>
-    <comment xml:lang="be@latin">Vyjava EPS (gzip-skampresavanaja)</comment>
+    <comment xml:lang="be-Latn">Vyjava EPS (gzip-skampresavanaja)</comment>
     <comment xml:lang="bg">Изображение — EPS, компресирано с gzip</comment>
     <comment xml:lang="ca">imatge EPS (amb compressió gzip)</comment>
     <comment xml:lang="cs">obrázek EPS (komprimovaný pomocí gzip)</comment>
     <comment xml:lang="da">EPS-billede (gzip-komprimeret)</comment>
     <comment xml:lang="de">EPS-Bild (gzip-komprimiert)</comment>
     <comment xml:lang="el">Εικόνα EPS (συμπιεσμένη gzip)</comment>
-    <comment xml:lang="en_GB">EPS image (gzip-compressed)</comment>
+    <comment xml:lang="en-GB">EPS image (gzip-compressed)</comment>
     <comment xml:lang="es">imagen EPS (comprimida con gzip)</comment>
     <comment xml:lang="eu">EPS irudia (gzip-ekin konprimitua)</comment>
     <comment xml:lang="fi">EPS-kuva (gzip-pakattu)</comment>
     <comment xml:lang="fo">EPS mynd (gzip-stappað)</comment>
     <comment xml:lang="fr">image EPS (compressée gzip)</comment>
+    <comment xml:lang="fur">imagjin EPS (comprimude cun gzip)</comment>
     <comment xml:lang="ga">íomhá EPS (comhbhrúite le gzip)</comment>
     <comment xml:lang="gl">imaxe EPS (comprimida con gzip)</comment>
     <comment xml:lang="he">תמונת EPS (מכווץ ע״י gzip)</comment>
     <comment xml:lang="hr">EPS slika (gzip sažeta)</comment>
-    <comment xml:lang="hu">EPS kép (gzip-tömörítésű)</comment>
+    <comment xml:lang="hu">EPS kép (gzip tömörítésű)</comment>
     <comment xml:lang="ia">Imagine EPS (comprimite con gzip)</comment>
     <comment xml:lang="id">Citra EPS (terkompresi gzip)</comment>
     <comment xml:lang="it">Immagine EPS (compressa con gzip)</comment>
@@ -28305,7 +29285,7 @@
     <comment xml:lang="oc">imatge EPS (compressat gzip)</comment>
     <comment xml:lang="pl">Obraz EPS (kompresja gzip)</comment>
     <comment xml:lang="pt">imagem EPS (compressão gzip)</comment>
-    <comment xml:lang="pt_BR">Imagem EPS (compactada com gzip)</comment>
+    <comment xml:lang="pt-BR">Imagem EPS (compactada com gzip)</comment>
     <comment xml:lang="ro">Imagine EPS (compresie gzip)</comment>
     <comment xml:lang="ru">Изображение EPS (сжатое gzip)</comment>
     <comment xml:lang="sk">Obrázok EPS (komprimovaný pomocou gzip)</comment>
@@ -28316,8 +29296,8 @@
     <comment xml:lang="tr">EPS görüntüsü (gzip ile sıkıştırılmış)</comment>
     <comment xml:lang="uk">зображення EPS (стиснене gzip)</comment>
     <comment xml:lang="vi">Ảnh EPS (đã nén gzip)</comment>
-    <comment xml:lang="zh_CN">EPS 图像（gzip 压缩）</comment>
-    <comment xml:lang="zh_TW">EPS 影像 (gzip 格式壓縮)</comment>
+    <comment xml:lang="zh-CN">EPS 图像（gzip 压缩）</comment>
+    <comment xml:lang="zh-TW">EPS 影像 (gzip 壓縮)</comment>
     <sub-class-of type="application/gzip"/>
     <glob pattern="*.eps.gz"/>
     <glob pattern="*.epsi.gz"/>
@@ -28325,16 +29305,19 @@
   </mime-type>
   <mime-type type="image/vnd.microsoft.icon">
     <comment>Windows icon</comment>
+    <comment xml:lang="af">Windows-ikoon</comment>
+    <comment xml:lang="bg">Икона — Windows</comment>
     <comment xml:lang="ca">icona de Windows</comment>
     <comment xml:lang="cs">ikona Windows</comment>
     <comment xml:lang="da">Windows-ikon</comment>
     <comment xml:lang="de">Windows-Symbol</comment>
     <comment xml:lang="el">Εικονίδιο Windows</comment>
-    <comment xml:lang="en_GB">Windows icon</comment>
+    <comment xml:lang="en-GB">Windows icon</comment>
     <comment xml:lang="es">icono de Windows</comment>
     <comment xml:lang="eu">Windows ikonoa</comment>
     <comment xml:lang="fi">Windows-kuvake</comment>
     <comment xml:lang="fr">icône Windows</comment>
+    <comment xml:lang="fur">icone Windows</comment>
     <comment xml:lang="ga">deilbhín Windows</comment>
     <comment xml:lang="he">סמל של Windows</comment>
     <comment xml:lang="hr">Windows ikona</comment>
@@ -28343,11 +29326,11 @@
     <comment xml:lang="id">Ikon Windows</comment>
     <comment xml:lang="it">Icona Windows</comment>
     <comment xml:lang="kk">Windows таңбашасы</comment>
-    <comment xml:lang="ko">윈도우 아이콘</comment>
+    <comment xml:lang="ko">Windows 아이콘</comment>
     <comment xml:lang="oc">icòna Windows</comment>
     <comment xml:lang="pl">Ikona Windows</comment>
     <comment xml:lang="pt">ícone Windows</comment>
-    <comment xml:lang="pt_BR">Ícone do Windows</comment>
+    <comment xml:lang="pt-BR">Ícone do Windows</comment>
     <comment xml:lang="ru">Значок Windows</comment>
     <comment xml:lang="sk">Ikona Windows</comment>
     <comment xml:lang="sl">Ikona Windows</comment>
@@ -28355,11 +29338,11 @@
     <comment xml:lang="sv">Windows-ikon</comment>
     <comment xml:lang="tr">Windows simgesi</comment>
     <comment xml:lang="uk">піктограма Windows</comment>
-    <comment xml:lang="zh_CN">Windows 图标</comment>
-    <comment xml:lang="zh_TW">Windows 圖示</comment>
+    <comment xml:lang="zh-CN">Windows 图标</comment>
+    <comment xml:lang="zh-TW">Windows 圖示</comment>
     <magic priority="50">
-      <match value="\0\0\1\0" type="string" offset="0">
-        <match value="\0" type="string" offset="5"/>
+      <match type="string" value="\0\0\1\0" offset="0">
+        <match type="string" value="\0" offset="5"/>
       </match>
     </magic>
     <glob pattern="*.ico"/>
@@ -28372,21 +29355,23 @@
   </mime-type>
   <mime-type type="image/x-icns">
     <comment>MacOS X icon</comment>
+    <comment xml:lang="af">MacOS X-ikoon</comment>
     <comment xml:lang="ar">أيقونة MacOS X</comment>
-    <comment xml:lang="be@latin">Ikona MacOS X</comment>
+    <comment xml:lang="be-Latn">Ikona MacOS X</comment>
     <comment xml:lang="bg">Икона — MacOS X</comment>
     <comment xml:lang="ca">icona MacOS X</comment>
     <comment xml:lang="cs">ikona MacOS X</comment>
     <comment xml:lang="da">MacOS X-ikon</comment>
     <comment xml:lang="de">MacOS-X-Symbol</comment>
     <comment xml:lang="el">Εικονίδιο MacOS X</comment>
-    <comment xml:lang="en_GB">MacOS X icon</comment>
+    <comment xml:lang="en-GB">MacOS X icon</comment>
     <comment xml:lang="eo">MacOS-X-piktogramo</comment>
     <comment xml:lang="es">icono de OS X</comment>
     <comment xml:lang="eu">MacOS X ikonoa</comment>
     <comment xml:lang="fi">MacOS X -kuvake</comment>
     <comment xml:lang="fo">MacOS X ímynd</comment>
     <comment xml:lang="fr">icône MacOS X</comment>
+    <comment xml:lang="fur">icone MacOS X</comment>
     <comment xml:lang="ga">deilbhín MacOS X</comment>
     <comment xml:lang="gl">Icona de MacOS X</comment>
     <comment xml:lang="he">סמל בתקן MacOS X</comment>
@@ -28407,7 +29392,7 @@
     <comment xml:lang="oc">icòna MacOS X</comment>
     <comment xml:lang="pl">Ikona Mac OS X</comment>
     <comment xml:lang="pt">ćone MacOS X</comment>
-    <comment xml:lang="pt_BR">Ícone do MacOS X</comment>
+    <comment xml:lang="pt-BR">Ícone do MacOS X</comment>
     <comment xml:lang="ro">Iconiță MacOS X</comment>
     <comment xml:lang="ru">Значок MacOS X</comment>
     <comment xml:lang="sk">Ikona MacOS X</comment>
@@ -28418,18 +29403,19 @@
     <comment xml:lang="tr">MacOS X simgesi</comment>
     <comment xml:lang="uk">піктограма MacOS X</comment>
     <comment xml:lang="vi">Biểu tượng MacOS X</comment>
-    <comment xml:lang="zh_CN">MacOS X 图标</comment>
-    <comment xml:lang="zh_TW">MacOS X 圖示</comment>
+    <comment xml:lang="zh-CN">MacOS X 图标</comment>
+    <comment xml:lang="zh-TW">MacOS X 圖示</comment>
     <glob pattern="*.icns"/>
     <magic priority="50">
-      <match value="icns" type="string" offset="0"/>
+      <match type="string" value="icns" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-ilbm">
     <comment>ILBM image</comment>
+    <comment xml:lang="af">ILBM-beeld</comment>
     <comment xml:lang="ar">صورة ILBM</comment>
     <comment xml:lang="az">ILBM rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava ILBM</comment>
+    <comment xml:lang="be-Latn">Vyjava ILBM</comment>
     <comment xml:lang="bg">Изображение — ILBM</comment>
     <comment xml:lang="ca">imatge ILBM</comment>
     <comment xml:lang="cs">obrázek ILMB</comment>
@@ -28437,13 +29423,14 @@
     <comment xml:lang="da">ILBM-billede</comment>
     <comment xml:lang="de">ILBM-Bild</comment>
     <comment xml:lang="el">Εικόνα ILBM</comment>
-    <comment xml:lang="en_GB">ILBM image</comment>
+    <comment xml:lang="en-GB">ILBM image</comment>
     <comment xml:lang="eo">ILBM-bildo</comment>
     <comment xml:lang="es">imagen ILBM</comment>
     <comment xml:lang="eu">ILBM irudia</comment>
     <comment xml:lang="fi">ILBM-kuva</comment>
     <comment xml:lang="fo">ILBM mynd</comment>
     <comment xml:lang="fr">image ILBM</comment>
+    <comment xml:lang="fur">imagjin ILBM</comment>
     <comment xml:lang="ga">íomhá ILBM</comment>
     <comment xml:lang="gl">imaxe  ILBM</comment>
     <comment xml:lang="he">תמונת ILBM</comment>
@@ -28464,7 +29451,7 @@
     <comment xml:lang="oc">imatge ILBM</comment>
     <comment xml:lang="pl">Obraz ILBM</comment>
     <comment xml:lang="pt">imagem ILBM</comment>
-    <comment xml:lang="pt_BR">Imagem ILBM</comment>
+    <comment xml:lang="pt-BR">Imagem ILBM</comment>
     <comment xml:lang="ro">Imagine ILBM</comment>
     <comment xml:lang="ru">Изображение ILBM</comment>
     <comment xml:lang="sk">Obrázok ILMB</comment>
@@ -28475,8 +29462,8 @@
     <comment xml:lang="tr">ILBM görüntüsü</comment>
     <comment xml:lang="uk">зображення ILBM</comment>
     <comment xml:lang="vi">Ảnh ILBM</comment>
-    <comment xml:lang="zh_CN">ILBM 图像</comment>
-    <comment xml:lang="zh_TW">ILBM 影像</comment>
+    <comment xml:lang="zh-CN">ILBM 图像</comment>
+    <comment xml:lang="zh-TW">ILBM 影像</comment>
     <acronym>ILBM</acronym>
     <expanded-acronym>InterLeaved BitMap</expanded-acronym>
     <sub-class-of type="application/x-iff"/>
@@ -28491,9 +29478,10 @@
   </mime-type>
   <mime-type type="image/x-jng">
     <comment>JNG image</comment>
+    <comment xml:lang="af">JNG-beeld</comment>
     <comment xml:lang="ar">صورة JNG</comment>
     <comment xml:lang="az">JNG rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava JNG</comment>
+    <comment xml:lang="be-Latn">Vyjava JNG</comment>
     <comment xml:lang="bg">Изображение — JNG</comment>
     <comment xml:lang="ca">imatge JNG</comment>
     <comment xml:lang="cs">obrázek JNG</comment>
@@ -28501,13 +29489,14 @@
     <comment xml:lang="da">JNG-billede</comment>
     <comment xml:lang="de">JNG-Bild</comment>
     <comment xml:lang="el">Εικόνα JNG</comment>
-    <comment xml:lang="en_GB">JNG image</comment>
+    <comment xml:lang="en-GB">JNG image</comment>
     <comment xml:lang="eo">JNG-bildo</comment>
     <comment xml:lang="es">imagen JNG</comment>
     <comment xml:lang="eu">JNG irudia</comment>
     <comment xml:lang="fi">JNG-kuva</comment>
     <comment xml:lang="fo">JNG mynd</comment>
     <comment xml:lang="fr">image JNG</comment>
+    <comment xml:lang="fur">imagjin JNG</comment>
     <comment xml:lang="ga">íomhá JNG</comment>
     <comment xml:lang="gl">imaxe JNG</comment>
     <comment xml:lang="he">תמונת JNG</comment>
@@ -28528,7 +29517,7 @@
     <comment xml:lang="oc">imatge JNG</comment>
     <comment xml:lang="pl">Obraz JNG</comment>
     <comment xml:lang="pt">imagem JNG</comment>
-    <comment xml:lang="pt_BR">Imagem JNG</comment>
+    <comment xml:lang="pt-BR">Imagem JNG</comment>
     <comment xml:lang="ro">Imagine JNG</comment>
     <comment xml:lang="ru">Изображение JNG</comment>
     <comment xml:lang="sk">Obrázok JNG</comment>
@@ -28539,17 +29528,18 @@
     <comment xml:lang="tr">JNG görüntüsü</comment>
     <comment xml:lang="uk">зображення JNG</comment>
     <comment xml:lang="vi">Ảnh JNG</comment>
-    <comment xml:lang="zh_CN">JNG 图像</comment>
-    <comment xml:lang="zh_TW">JNG 影像</comment>
+    <comment xml:lang="zh-CN">JNG 图像</comment>
+    <comment xml:lang="zh-TW">JNG 影像</comment>
     <acronym>JNG</acronym>
     <expanded-acronym>JPEG Network Graphics</expanded-acronym>
     <glob pattern="*.jng"/>
   </mime-type>
   <mime-type type="image/x-lwo">
     <comment>LightWave object</comment>
+    <comment xml:lang="af">LightWave-objek</comment>
     <comment xml:lang="ar">كائن LightWave</comment>
     <comment xml:lang="az">LightWave cismi</comment>
-    <comment xml:lang="be@latin">Abjekt LightWave</comment>
+    <comment xml:lang="be-Latn">Abjekt LightWave</comment>
     <comment xml:lang="bg">Обект — LightWave</comment>
     <comment xml:lang="ca">objecte de LightWave</comment>
     <comment xml:lang="cs">objekt LightWave</comment>
@@ -28557,13 +29547,14 @@
     <comment xml:lang="da">LightWave-objekt</comment>
     <comment xml:lang="de">LightWave-Objekt</comment>
     <comment xml:lang="el">Αντικείμενο LightWave</comment>
-    <comment xml:lang="en_GB">LightWave object</comment>
+    <comment xml:lang="en-GB">LightWave object</comment>
     <comment xml:lang="eo">LightWave-objekto</comment>
     <comment xml:lang="es">objeto de LightWave</comment>
     <comment xml:lang="eu">LightWave objektua</comment>
     <comment xml:lang="fi">LightWave-esine</comment>
     <comment xml:lang="fo">LightWave lutur</comment>
     <comment xml:lang="fr">objet LightWave</comment>
+    <comment xml:lang="fur">ogjet LightWave</comment>
     <comment xml:lang="ga">réad LightWave</comment>
     <comment xml:lang="gl">obxecto de LightWave</comment>
     <comment xml:lang="he">עצם LightWave</comment>
@@ -28584,7 +29575,7 @@
     <comment xml:lang="oc">objècte LightWave</comment>
     <comment xml:lang="pl">Obiekt LightWave</comment>
     <comment xml:lang="pt">Objecto LightWave</comment>
-    <comment xml:lang="pt_BR">Objeto LightWave</comment>
+    <comment xml:lang="pt-BR">Objeto LightWave</comment>
     <comment xml:lang="ro">Obiect LightWave</comment>
     <comment xml:lang="ru">Объект LightWave</comment>
     <comment xml:lang="sk">Objekt LightWave</comment>
@@ -28595,16 +29586,17 @@
     <comment xml:lang="tr">LightWave nesnesi</comment>
     <comment xml:lang="uk">об'єкт LightWave</comment>
     <comment xml:lang="vi">Đối tượng LightWave</comment>
-    <comment xml:lang="zh_CN">LightWave 对象</comment>
-    <comment xml:lang="zh_TW">LightWave 物件</comment>
+    <comment xml:lang="zh-CN">LightWave 对象</comment>
+    <comment xml:lang="zh-TW">LightWave 物件</comment>
     <glob pattern="*.lwo"/>
     <glob pattern="*.lwob"/>
   </mime-type>
   <mime-type type="image/x-lws">
     <comment>LightWave scene</comment>
+    <comment xml:lang="af">LightWave-toneel</comment>
     <comment xml:lang="ar">مشهد LightWave</comment>
     <comment xml:lang="az">LightWave səhnəsi</comment>
-    <comment xml:lang="be@latin">Scena LightWave</comment>
+    <comment xml:lang="be-Latn">Scena LightWave</comment>
     <comment xml:lang="bg">Сцена — LightWave</comment>
     <comment xml:lang="ca">escena de LightWave</comment>
     <comment xml:lang="cs">scéna LightWave</comment>
@@ -28612,13 +29604,14 @@
     <comment xml:lang="da">LightWave-scene</comment>
     <comment xml:lang="de">LightWave-Szene</comment>
     <comment xml:lang="el">Σκηνή LightWave</comment>
-    <comment xml:lang="en_GB">LightWave scene</comment>
+    <comment xml:lang="en-GB">LightWave scene</comment>
     <comment xml:lang="eo">LightWave-sceno</comment>
     <comment xml:lang="es">escena de LightWave</comment>
     <comment xml:lang="eu">LightWave eszena</comment>
     <comment xml:lang="fi">LightWave-maisema</comment>
     <comment xml:lang="fo">LightWave leikmynd</comment>
     <comment xml:lang="fr">scène LightWave</comment>
+    <comment xml:lang="fur">sene LightWave</comment>
     <comment xml:lang="ga">radharc LightWave</comment>
     <comment xml:lang="gl">escena de LightWave</comment>
     <comment xml:lang="he">סצנה של LightWave</comment>
@@ -28639,7 +29632,7 @@
     <comment xml:lang="oc">scèna LightWave</comment>
     <comment xml:lang="pl">Scena Lightwave</comment>
     <comment xml:lang="pt">cenário LightWave</comment>
-    <comment xml:lang="pt_BR">Cena LightWave</comment>
+    <comment xml:lang="pt-BR">Cena LightWave</comment>
     <comment xml:lang="ro">Scenă LightWave</comment>
     <comment xml:lang="ru">Сцена LightWave</comment>
     <comment xml:lang="sk">Scéna LightWave</comment>
@@ -28650,26 +29643,28 @@
     <comment xml:lang="tr">LightWave sahnesi</comment>
     <comment xml:lang="uk">сцена LightWave</comment>
     <comment xml:lang="vi">Cảnh LightWave</comment>
-    <comment xml:lang="zh_CN">LightWave 场景</comment>
-    <comment xml:lang="zh_TW">LightWave 場景</comment>
+    <comment xml:lang="zh-CN">LightWave 场景</comment>
+    <comment xml:lang="zh-TW">LightWave 場景</comment>
     <glob pattern="*.lws"/>
   </mime-type>
   <mime-type type="image/x-macpaint">
     <comment>MacPaint Bitmap image</comment>
+    <comment xml:lang="af">MacPaint-roosterbeeld</comment>
     <comment xml:lang="ar">صورة MacPaint Bitmap</comment>
-    <comment xml:lang="be@latin">Bitmapnaja vyjava MacPaint</comment>
+    <comment xml:lang="be-Latn">Bitmapnaja vyjava MacPaint</comment>
     <comment xml:lang="bg">Изображение — MacPaint Bitmap</comment>
     <comment xml:lang="ca">imatge de mapa de bits MacPaint</comment>
     <comment xml:lang="cs">obrázek MacPaint Bitmap</comment>
     <comment xml:lang="da">MacPaint BitMap-billede</comment>
     <comment xml:lang="de">MacPaint-Bitmap-Datei</comment>
     <comment xml:lang="el">Εικόνα Bitmap MacPaint</comment>
-    <comment xml:lang="en_GB">MacPaint Bitmap image</comment>
+    <comment xml:lang="en-GB">MacPaint Bitmap image</comment>
     <comment xml:lang="es">imagen de mapa de bits de MacPaint</comment>
     <comment xml:lang="eu">MacPaint Bitmap irudia</comment>
     <comment xml:lang="fi">MacPaint-bittikartta</comment>
     <comment xml:lang="fo">MacPaint Bitmap mynd</comment>
     <comment xml:lang="fr">image matricielle MacPaint</comment>
+    <comment xml:lang="fur">imagjin bitmap MacPaint</comment>
     <comment xml:lang="ga">íomhá ghiotánmhapach MacPaint</comment>
     <comment xml:lang="gl">imaxe de mapa de bits MacPaint</comment>
     <comment xml:lang="he">תמונת מפת-סיביות של MacPaint</comment>
@@ -28689,7 +29684,7 @@
     <comment xml:lang="oc">imatge matricial MacPaint</comment>
     <comment xml:lang="pl">Obraz bitmapowy MacPaint</comment>
     <comment xml:lang="pt">imagem MacPaint Bitmap</comment>
-    <comment xml:lang="pt_BR">Imagem de bitmap do MacPaint</comment>
+    <comment xml:lang="pt-BR">Imagem de bitmap do MacPaint</comment>
     <comment xml:lang="ro">Imagine MacPaint Bitmap</comment>
     <comment xml:lang="ru">Растровое изображение MacPaint</comment>
     <comment xml:lang="sk">Obrázok MacPaint Bitmap</comment>
@@ -28700,26 +29695,28 @@
     <comment xml:lang="tr">MacPaint bit eşlem görüntüsü</comment>
     <comment xml:lang="uk">растрове зображення MacPaint</comment>
     <comment xml:lang="vi">Ảnh mảng MacPaint</comment>
-    <comment xml:lang="zh_CN">MacPaint 位图</comment>
-    <comment xml:lang="zh_TW">MacPaint 點陣影像</comment>
+    <comment xml:lang="zh-CN">MacPaint 位图</comment>
+    <comment xml:lang="zh-TW">MacPaint 點陣影像</comment>
     <glob pattern="*.pntg"/>
   </mime-type>
   <mime-type type="image/x-msod">
     <comment>Office drawing</comment>
+    <comment xml:lang="af">Office-tekening</comment>
     <comment xml:lang="ar">تصميم أوفيس</comment>
-    <comment xml:lang="be@latin">Ofisny rysunak</comment>
+    <comment xml:lang="be-Latn">Ofisny rysunak</comment>
     <comment xml:lang="bg">Чертеж — Office</comment>
     <comment xml:lang="ca">dibuix d'Office</comment>
     <comment xml:lang="cs">kresba Office</comment>
     <comment xml:lang="da">Officetegning</comment>
     <comment xml:lang="de">Office-Zeichnung</comment>
     <comment xml:lang="el">Σχέδιο Office</comment>
-    <comment xml:lang="en_GB">Office drawing</comment>
+    <comment xml:lang="en-GB">Office drawing</comment>
     <comment xml:lang="es">dibujo de Office</comment>
     <comment xml:lang="eu">Office marrazkia</comment>
     <comment xml:lang="fi">Office-piirros</comment>
     <comment xml:lang="fo">Office tekning</comment>
     <comment xml:lang="fr">dessin Office</comment>
+    <comment xml:lang="fur">dissen di Office</comment>
     <comment xml:lang="ga">líníocht Office</comment>
     <comment xml:lang="gl">debuxo de Office</comment>
     <comment xml:lang="he">ציור של Office</comment>
@@ -28739,7 +29736,7 @@
     <comment xml:lang="oc">dessenh Office</comment>
     <comment xml:lang="pl">Rysunek Office</comment>
     <comment xml:lang="pt">desenho Office</comment>
-    <comment xml:lang="pt_BR">Desenho do Office</comment>
+    <comment xml:lang="pt-BR">Desenho do Office</comment>
     <comment xml:lang="ro">Desen Office</comment>
     <comment xml:lang="ru">Рисунок Office</comment>
     <comment xml:lang="sk">Kresba Office</comment>
@@ -28750,27 +29747,29 @@
     <comment xml:lang="tr">Ofis çizimi</comment>
     <comment xml:lang="uk">малюнок Office</comment>
     <comment xml:lang="vi">Bản vẽ Office</comment>
-    <comment xml:lang="zh_CN">Office 绘图</comment>
-    <comment xml:lang="zh_TW">Office 繪圖</comment>
+    <comment xml:lang="zh-CN">Office 绘图</comment>
+    <comment xml:lang="zh-TW">Office 繪圖</comment>
     <glob pattern="*.msod"/>
   </mime-type>
   <mime-type type="image/x-niff">
     <comment>NIFF image</comment>
+    <comment xml:lang="af">NIFF-beeld</comment>
     <comment xml:lang="ar">صورة NIFF</comment>
-    <comment xml:lang="be@latin">Vyjava NIFF</comment>
+    <comment xml:lang="be-Latn">Vyjava NIFF</comment>
     <comment xml:lang="bg">Изображение — NIFF</comment>
     <comment xml:lang="ca">imatge NIFF</comment>
     <comment xml:lang="cs">obrázek NIFF</comment>
     <comment xml:lang="da">NIFF-billede</comment>
     <comment xml:lang="de">NIFF-Bild</comment>
     <comment xml:lang="el">Εικόνα NIFF</comment>
-    <comment xml:lang="en_GB">NIFF image</comment>
+    <comment xml:lang="en-GB">NIFF image</comment>
     <comment xml:lang="eo">NIFF-bildo</comment>
     <comment xml:lang="es">imagen NIFF</comment>
     <comment xml:lang="eu">NIFF irudia</comment>
     <comment xml:lang="fi">NIFF-kuva</comment>
     <comment xml:lang="fo">NIFF mynd</comment>
     <comment xml:lang="fr">image NIFF</comment>
+    <comment xml:lang="fur">imagjin NIFF</comment>
     <comment xml:lang="ga">íomhá NIFF</comment>
     <comment xml:lang="gl">imaxe NIFF</comment>
     <comment xml:lang="he">תמונת NIFF</comment>
@@ -28790,7 +29789,7 @@
     <comment xml:lang="oc">imatge NIFF</comment>
     <comment xml:lang="pl">Obraz NIFF</comment>
     <comment xml:lang="pt">imagem NIFF</comment>
-    <comment xml:lang="pt_BR">Imagem NIFF</comment>
+    <comment xml:lang="pt-BR">Imagem NIFF</comment>
     <comment xml:lang="ro">Imagine NIF</comment>
     <comment xml:lang="ru">Изображение NIFF</comment>
     <comment xml:lang="sk">Obrázok NIFF</comment>
@@ -28801,29 +29800,31 @@
     <comment xml:lang="tr">NIFF görüntüsü</comment>
     <comment xml:lang="uk">зображення NIFF</comment>
     <comment xml:lang="vi">Ảnh NIFF</comment>
-    <comment xml:lang="zh_CN">NIFF 图像</comment>
-    <comment xml:lang="zh_TW">NIFF 影像</comment>
+    <comment xml:lang="zh-CN">NIFF 图像</comment>
+    <comment xml:lang="zh-TW">NIFF 影像</comment>
     <magic priority="80">
-      <match value="IIN1" type="string" offset="0"/>
+      <match type="string" value="IIN1" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/vnd.zbrush.pcx">
     <comment>PCX image</comment>
+    <comment xml:lang="af">PCX-beeld</comment>
     <comment xml:lang="ar">صورة PCX</comment>
-    <comment xml:lang="be@latin">Vyjava PCX</comment>
+    <comment xml:lang="be-Latn">Vyjava PCX</comment>
     <comment xml:lang="bg">Изображение — PCX</comment>
     <comment xml:lang="ca">imatge PCX</comment>
     <comment xml:lang="cs">obrázek PCX</comment>
     <comment xml:lang="da">PCX-billede</comment>
     <comment xml:lang="de">PCX-Bild</comment>
     <comment xml:lang="el">Εικόνα PCX</comment>
-    <comment xml:lang="en_GB">PCX image</comment>
+    <comment xml:lang="en-GB">PCX image</comment>
     <comment xml:lang="eo">PCX-bildo</comment>
     <comment xml:lang="es">imagen PCX</comment>
     <comment xml:lang="eu">PCX irudia</comment>
     <comment xml:lang="fi">PCX-kuva</comment>
     <comment xml:lang="fo">PCX mynd</comment>
     <comment xml:lang="fr">image PCX</comment>
+    <comment xml:lang="fur">imagjin PCX</comment>
     <comment xml:lang="ga">íomhá PCX</comment>
     <comment xml:lang="gl">imaxe PCX</comment>
     <comment xml:lang="he">תמונת PCX</comment>
@@ -28843,7 +29844,7 @@
     <comment xml:lang="oc">imatge PCX</comment>
     <comment xml:lang="pl">Obraz PCX</comment>
     <comment xml:lang="pt">imagem PCX</comment>
-    <comment xml:lang="pt_BR">Imagem PCX</comment>
+    <comment xml:lang="pt-BR">Imagem PCX</comment>
     <comment xml:lang="ro">Imagine PCX</comment>
     <comment xml:lang="ru">Изображение PCX</comment>
     <comment xml:lang="sk">Obrázok PCX</comment>
@@ -28854,16 +29855,16 @@
     <comment xml:lang="tr">PCX görüntüsü</comment>
     <comment xml:lang="uk">зображення PCX</comment>
     <comment xml:lang="vi">Ảnh PCX</comment>
-    <comment xml:lang="zh_CN">PCX 图像</comment>
-    <comment xml:lang="zh_TW">PCX 影像</comment>
+    <comment xml:lang="zh-CN">PCX 图像</comment>
+    <comment xml:lang="zh-TW">PCX 影像</comment>
     <acronym>PCX</acronym>
     <expanded-acronym>PiCture eXchange</expanded-acronym>
     <magic priority="50">
-      <match value="10" type="byte" offset="0">
-        <match value="0" type="byte" offset="1"/>
-        <match value="2" type="byte" offset="1"/>
-        <match value="3" type="byte" offset="1"/>
-        <match value="5" type="byte" offset="1"/>
+      <match type="byte" value="10" offset="0">
+        <match type="byte" value="0" offset="1"/>
+        <match type="byte" value="2" offset="1"/>
+        <match type="byte" value="3" offset="1"/>
+        <match type="byte" value="5" offset="1"/>
       </match>
     </magic>
     <glob pattern="*.pcx"/>
@@ -28871,21 +29872,23 @@
   </mime-type>
   <mime-type type="image/x-photo-cd">
     <comment>PCD image</comment>
+    <comment xml:lang="af">PCD-beeld</comment>
     <comment xml:lang="ar">صورة PCD</comment>
-    <comment xml:lang="be@latin">Vyjava PCD</comment>
+    <comment xml:lang="be-Latn">Vyjava PCD</comment>
     <comment xml:lang="bg">Изображение — PCD</comment>
     <comment xml:lang="ca">imatge PCD</comment>
     <comment xml:lang="cs">obrázek PCD</comment>
     <comment xml:lang="da">PCD-billede</comment>
     <comment xml:lang="de">PCD-Bild</comment>
     <comment xml:lang="el">Εικόνα PCD</comment>
-    <comment xml:lang="en_GB">PCD image</comment>
+    <comment xml:lang="en-GB">PCD image</comment>
     <comment xml:lang="eo">PCD-bildo</comment>
     <comment xml:lang="es">imagen PCD</comment>
     <comment xml:lang="eu">PCD irudia</comment>
     <comment xml:lang="fi">PCD-kuva</comment>
     <comment xml:lang="fo">PCD mynd</comment>
     <comment xml:lang="fr">image PCD</comment>
+    <comment xml:lang="fur">imagjin PCD</comment>
     <comment xml:lang="ga">íomhá PCD</comment>
     <comment xml:lang="gl">imaxe PCD</comment>
     <comment xml:lang="he">תמונת PCD</comment>
@@ -28906,7 +29909,7 @@
     <comment xml:lang="oc">imatge PCD</comment>
     <comment xml:lang="pl">Obraz PCD</comment>
     <comment xml:lang="pt">imagem PCD</comment>
-    <comment xml:lang="pt_BR">Imagem PCD</comment>
+    <comment xml:lang="pt-BR">Imagem PCD</comment>
     <comment xml:lang="ro">Imagine PCD</comment>
     <comment xml:lang="ru">Изображение PCD</comment>
     <comment xml:lang="sk">Obrázok PCD</comment>
@@ -28917,17 +29920,18 @@
     <comment xml:lang="tr">PCD görüntüsü</comment>
     <comment xml:lang="uk">зображення PCD</comment>
     <comment xml:lang="vi">Ảnh PCD</comment>
-    <comment xml:lang="zh_CN">PCD 图像</comment>
-    <comment xml:lang="zh_TW">PCD 影像</comment>
+    <comment xml:lang="zh-CN">PCD 图像</comment>
+    <comment xml:lang="zh-TW">PCD 影像</comment>
     <acronym>PCD</acronym>
     <expanded-acronym>PhotoCD</expanded-acronym>
     <glob pattern="*.pcd"/>
   </mime-type>
   <mime-type type="image/x-portable-anymap">
     <comment>PNM image</comment>
+    <comment xml:lang="af">PNM-beeld</comment>
     <comment xml:lang="ar">صورة PNM</comment>
     <comment xml:lang="az">PNM rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava PNM</comment>
+    <comment xml:lang="be-Latn">Vyjava PNM</comment>
     <comment xml:lang="bg">Изображение — PNM</comment>
     <comment xml:lang="ca">imatge PNM</comment>
     <comment xml:lang="cs">obrázek PNM</comment>
@@ -28935,13 +29939,14 @@
     <comment xml:lang="da">PNM-billede</comment>
     <comment xml:lang="de">PNM-Bild</comment>
     <comment xml:lang="el">Εικόνα PNM</comment>
-    <comment xml:lang="en_GB">PNM image</comment>
+    <comment xml:lang="en-GB">PNM image</comment>
     <comment xml:lang="eo">PNM-bildo</comment>
     <comment xml:lang="es">imagen PNM</comment>
     <comment xml:lang="eu">PNM irudia</comment>
     <comment xml:lang="fi">PNM-kuva</comment>
     <comment xml:lang="fo">PNM mynd</comment>
     <comment xml:lang="fr">image PNM</comment>
+    <comment xml:lang="fur">imagjin PNM</comment>
     <comment xml:lang="ga">íomhá PNM</comment>
     <comment xml:lang="gl">imaxe PNM</comment>
     <comment xml:lang="he">תמונת PNM</comment>
@@ -28962,7 +29967,7 @@
     <comment xml:lang="oc">imatge PNM</comment>
     <comment xml:lang="pl">Obraz PNM</comment>
     <comment xml:lang="pt">imagem PNM</comment>
-    <comment xml:lang="pt_BR">Imagem PNM</comment>
+    <comment xml:lang="pt-BR">Imagem PNM</comment>
     <comment xml:lang="ro">Imagine PNM</comment>
     <comment xml:lang="ru">Изображение PNM</comment>
     <comment xml:lang="sk">Obrázok PNM</comment>
@@ -28973,14 +29978,15 @@
     <comment xml:lang="tr">PNM görüntüsü</comment>
     <comment xml:lang="uk">зображення PNM</comment>
     <comment xml:lang="vi">Ảnh PNM</comment>
-    <comment xml:lang="zh_CN">PNM 图像</comment>
-    <comment xml:lang="zh_TW">PNM 影像</comment>
+    <comment xml:lang="zh-CN">PNM 图像</comment>
+    <comment xml:lang="zh-TW">PNM 影像</comment>
     <glob pattern="*.pnm"/>
   </mime-type>
   <mime-type type="image/x-portable-bitmap">
     <comment>PBM image</comment>
+    <comment xml:lang="af">PBM-beeld</comment>
     <comment xml:lang="ar">صورة PBM</comment>
-    <comment xml:lang="be@latin">Vyjava PBM</comment>
+    <comment xml:lang="be-Latn">Vyjava PBM</comment>
     <comment xml:lang="bg">Изображение — PBM</comment>
     <comment xml:lang="ca">imatge PBM</comment>
     <comment xml:lang="cs">obrázek PBM</comment>
@@ -28988,13 +29994,14 @@
     <comment xml:lang="da">PBM-billede</comment>
     <comment xml:lang="de">PBM-Bild</comment>
     <comment xml:lang="el">Εικόνα PBM</comment>
-    <comment xml:lang="en_GB">PBM image</comment>
+    <comment xml:lang="en-GB">PBM image</comment>
     <comment xml:lang="eo">PBM-bildo</comment>
     <comment xml:lang="es">imagen PBM</comment>
     <comment xml:lang="eu">PBM irudia</comment>
     <comment xml:lang="fi">PBM-kuva</comment>
     <comment xml:lang="fo">PBM mynd</comment>
     <comment xml:lang="fr">image PBM</comment>
+    <comment xml:lang="fur">imagjin PBM</comment>
     <comment xml:lang="ga">íomhá PBM</comment>
     <comment xml:lang="gl">imaxe PBM</comment>
     <comment xml:lang="he">תמונת PBM</comment>
@@ -29015,7 +30022,7 @@
     <comment xml:lang="oc">imatge PBM</comment>
     <comment xml:lang="pl">Obraz PBM</comment>
     <comment xml:lang="pt">imagem PBM</comment>
-    <comment xml:lang="pt_BR">Imagem PBM</comment>
+    <comment xml:lang="pt-BR">Imagem PBM</comment>
     <comment xml:lang="ro">Imagine PBM</comment>
     <comment xml:lang="ru">Изображение PBM</comment>
     <comment xml:lang="sk">Obrázok PBM</comment>
@@ -29026,31 +30033,32 @@
     <comment xml:lang="tr">PBM görüntüsü</comment>
     <comment xml:lang="uk">зображення PBM</comment>
     <comment xml:lang="vi">Ảnh PBM</comment>
-    <comment xml:lang="zh_CN">PBM 图像</comment>
-    <comment xml:lang="zh_TW">PBM 影像</comment>
+    <comment xml:lang="zh-CN">PBM 图像</comment>
+    <comment xml:lang="zh-TW">PBM 影像</comment>
     <acronym>PBM</acronym>
     <expanded-acronym>Portable BitMap</expanded-acronym>
     <sub-class-of type="image/x-portable-anymap"/>
     <magic priority="50">
-      <match value="P1" type="string" offset="0">
-        <match value="0x0a" type="byte" offset="2"/>
-        <match value="0x20" type="byte" offset="2"/>
-        <match value="0x09" type="byte" offset="2"/>
-        <match value="0x0d" type="byte" offset="2"/>
+      <match type="string" value="P1" offset="0">
+        <match type="byte" value="0x0a" offset="2"/>
+        <match type="byte" value="0x20" offset="2"/>
+        <match type="byte" value="0x09" offset="2"/>
+        <match type="byte" value="0x0d" offset="2"/>
       </match>
-      <match value="P4" type="string" offset="0">
-        <match value="0x0a" type="byte" offset="2"/>
-        <match value="0x20" type="byte" offset="2"/>
-        <match value="0x09" type="byte" offset="2"/>
-        <match value="0x0d" type="byte" offset="2"/>
+      <match type="string" value="P4" offset="0">
+        <match type="byte" value="0x0a" offset="2"/>
+        <match type="byte" value="0x20" offset="2"/>
+        <match type="byte" value="0x09" offset="2"/>
+        <match type="byte" value="0x0d" offset="2"/>
       </match>
     </magic>
     <glob pattern="*.pbm"/>
   </mime-type>
   <mime-type type="image/x-portable-graymap">
     <comment>PGM image</comment>
+    <comment xml:lang="af">PGM-beeld</comment>
     <comment xml:lang="ar">صورة PGM</comment>
-    <comment xml:lang="be@latin">Vyjava PGM</comment>
+    <comment xml:lang="be-Latn">Vyjava PGM</comment>
     <comment xml:lang="bg">Изображение — PGM</comment>
     <comment xml:lang="ca">imatge PGM</comment>
     <comment xml:lang="cs">obrázek PGM</comment>
@@ -29058,13 +30066,14 @@
     <comment xml:lang="da">PGM-billede</comment>
     <comment xml:lang="de">PGM-Bild</comment>
     <comment xml:lang="el">Εικόνα PGM</comment>
-    <comment xml:lang="en_GB">PGM image</comment>
+    <comment xml:lang="en-GB">PGM image</comment>
     <comment xml:lang="eo">PGM-bildo</comment>
     <comment xml:lang="es">imagen PGM</comment>
     <comment xml:lang="eu">PGM irudia</comment>
     <comment xml:lang="fi">PGM-kuva</comment>
     <comment xml:lang="fo">PGM mynd</comment>
     <comment xml:lang="fr">image PGM</comment>
+    <comment xml:lang="fur">imagjin PGM</comment>
     <comment xml:lang="ga">íomhá PGM</comment>
     <comment xml:lang="gl">imaxe PGM</comment>
     <comment xml:lang="he">תמונת PGM</comment>
@@ -29084,7 +30093,7 @@
     <comment xml:lang="oc">imatge PGM</comment>
     <comment xml:lang="pl">Obraz PGM</comment>
     <comment xml:lang="pt">imagem PGM</comment>
-    <comment xml:lang="pt_BR">Imagem PGM</comment>
+    <comment xml:lang="pt-BR">Imagem PGM</comment>
     <comment xml:lang="ro">Imagine PGM</comment>
     <comment xml:lang="ru">Изображение PGM</comment>
     <comment xml:lang="sk">Obrázok PGM</comment>
@@ -29095,31 +30104,32 @@
     <comment xml:lang="tr">PGM görüntüsü</comment>
     <comment xml:lang="uk">зображення PGM</comment>
     <comment xml:lang="vi">Ảnh PGM</comment>
-    <comment xml:lang="zh_CN">PGM 图像</comment>
-    <comment xml:lang="zh_TW">PGM 影像</comment>
+    <comment xml:lang="zh-CN">PGM 图像</comment>
+    <comment xml:lang="zh-TW">PGM 影像</comment>
     <acronym>PGM</acronym>
     <expanded-acronym>Portable GrayMap</expanded-acronym>
     <sub-class-of type="image/x-portable-anymap"/>
     <magic priority="50">
-      <match value="P2" type="string" offset="0">
-        <match value="0x0a" type="byte" offset="2"/>
-        <match value="0x20" type="byte" offset="2"/>
-        <match value="0x09" type="byte" offset="2"/>
-        <match value="0x0d" type="byte" offset="2"/>
+      <match type="string" value="P2" offset="0">
+        <match type="byte" value="0x0a" offset="2"/>
+        <match type="byte" value="0x20" offset="2"/>
+        <match type="byte" value="0x09" offset="2"/>
+        <match type="byte" value="0x0d" offset="2"/>
       </match>
-      <match value="P5" type="string" offset="0">
-        <match value="0x0a" type="byte" offset="2"/>
-        <match value="0x20" type="byte" offset="2"/>
-        <match value="0x09" type="byte" offset="2"/>
-        <match value="0x0d" type="byte" offset="2"/>
+      <match type="string" value="P5" offset="0">
+        <match type="byte" value="0x0a" offset="2"/>
+        <match type="byte" value="0x20" offset="2"/>
+        <match type="byte" value="0x09" offset="2"/>
+        <match type="byte" value="0x0d" offset="2"/>
       </match>
     </magic>
     <glob pattern="*.pgm"/>
   </mime-type>
   <mime-type type="image/x-portable-pixmap">
     <comment>PPM image</comment>
+    <comment xml:lang="af">PPM-beeld</comment>
     <comment xml:lang="ar">صورة PPM</comment>
-    <comment xml:lang="be@latin">Vyjava PPM</comment>
+    <comment xml:lang="be-Latn">Vyjava PPM</comment>
     <comment xml:lang="bg">Изображение — PPM</comment>
     <comment xml:lang="ca">imatge PPM</comment>
     <comment xml:lang="cs">obrázek PPM</comment>
@@ -29127,13 +30137,14 @@
     <comment xml:lang="da">PPM-billede</comment>
     <comment xml:lang="de">PPM-Bild</comment>
     <comment xml:lang="el">Εικόνα PPM</comment>
-    <comment xml:lang="en_GB">PPM image</comment>
+    <comment xml:lang="en-GB">PPM image</comment>
     <comment xml:lang="eo">PPM-bildo</comment>
     <comment xml:lang="es">imagen PPM</comment>
     <comment xml:lang="eu">PPM irudia</comment>
     <comment xml:lang="fi">PPM-kuva</comment>
     <comment xml:lang="fo">PPM mynd</comment>
     <comment xml:lang="fr">image PPM</comment>
+    <comment xml:lang="fur">imagjin PPM</comment>
     <comment xml:lang="ga">íomhá PPM</comment>
     <comment xml:lang="gl">imaxe PPM</comment>
     <comment xml:lang="he">תמונת PPM</comment>
@@ -29153,7 +30164,7 @@
     <comment xml:lang="oc">imatge PPM</comment>
     <comment xml:lang="pl">Obraz PPM</comment>
     <comment xml:lang="pt">imagem PPM</comment>
-    <comment xml:lang="pt_BR">Imagem PPM</comment>
+    <comment xml:lang="pt-BR">Imagem PPM</comment>
     <comment xml:lang="ro">Imagine PPM</comment>
     <comment xml:lang="ru">Изображение PPM</comment>
     <comment xml:lang="sk">Obrázok PPM</comment>
@@ -29164,29 +30175,30 @@
     <comment xml:lang="tr">PPM görüntüsü</comment>
     <comment xml:lang="uk">зображення PPM</comment>
     <comment xml:lang="vi">Ảnh PPM</comment>
-    <comment xml:lang="zh_CN">PPM 图像</comment>
-    <comment xml:lang="zh_TW">PPM 影像</comment>
+    <comment xml:lang="zh-CN">PPM 图像</comment>
+    <comment xml:lang="zh-TW">PPM 影像</comment>
     <acronym>PPM</acronym>
     <expanded-acronym>Portable PixMap</expanded-acronym>
     <sub-class-of type="image/x-portable-anymap"/>
     <magic priority="50">
-      <match value="P3" type="string" offset="0">
-        <match value="0x0a" type="byte" offset="2"/>
-        <match value="0x20" type="byte" offset="2"/>
-        <match value="0x09" type="byte" offset="2"/>
-        <match value="0x0d" type="byte" offset="2"/>
+      <match type="string" value="P3" offset="0">
+        <match type="byte" value="0x0a" offset="2"/>
+        <match type="byte" value="0x20" offset="2"/>
+        <match type="byte" value="0x09" offset="2"/>
+        <match type="byte" value="0x0d" offset="2"/>
       </match>
-      <match value="P6" type="string" offset="0">
-        <match value="0x0a" type="byte" offset="2"/>
-        <match value="0x20" type="byte" offset="2"/>
-        <match value="0x09" type="byte" offset="2"/>
-        <match value="0x0d" type="byte" offset="2"/>
+      <match type="string" value="P6" offset="0">
+        <match type="byte" value="0x0a" offset="2"/>
+        <match type="byte" value="0x20" offset="2"/>
+        <match type="byte" value="0x09" offset="2"/>
+        <match type="byte" value="0x0d" offset="2"/>
       </match>
     </magic>
     <glob pattern="*.ppm"/>
   </mime-type>
   <mime-type type="image/vnd.adobe.photoshop">
     <comment>Photoshop image</comment>
+    <comment xml:lang="af">Photoshop-beeld</comment>
     <comment xml:lang="ar">صورة فوتوشوب</comment>
     <comment xml:lang="bg">Изображение — Photoshop</comment>
     <comment xml:lang="ca">imatge de Photoshop</comment>
@@ -29194,13 +30206,14 @@
     <comment xml:lang="da">Photoshop-billede</comment>
     <comment xml:lang="de">Photoshop-Bild</comment>
     <comment xml:lang="el">Εικόνα Photoshop</comment>
-    <comment xml:lang="en_GB">Photoshop image</comment>
+    <comment xml:lang="en-GB">Photoshop image</comment>
     <comment xml:lang="eo">Photoshop-bildo</comment>
     <comment xml:lang="es">imagen de Photoshop</comment>
     <comment xml:lang="eu">Photoshop irudia</comment>
     <comment xml:lang="fi">Photoshop-kuva</comment>
     <comment xml:lang="fo">Photoshop mynd</comment>
     <comment xml:lang="fr">image Photoshop</comment>
+    <comment xml:lang="fur">imagjin Photoshop</comment>
     <comment xml:lang="ga">íomhá Photoshop</comment>
     <comment xml:lang="gl">imaxe de Photoshop</comment>
     <comment xml:lang="he">תמונת Photoshop</comment>
@@ -29219,7 +30232,7 @@
     <comment xml:lang="oc">imatge Photoshop</comment>
     <comment xml:lang="pl">Obraz Photoshop</comment>
     <comment xml:lang="pt">imagem Photoshop</comment>
-    <comment xml:lang="pt_BR">Imagem do Photoshop</comment>
+    <comment xml:lang="pt-BR">Imagem do Photoshop</comment>
     <comment xml:lang="ro">Imagine Photoshop</comment>
     <comment xml:lang="ru">Изображение Photoshop</comment>
     <comment xml:lang="sk">Obrázok Photoshop</comment>
@@ -29229,10 +30242,10 @@
     <comment xml:lang="tr">Photoshop görüntüsü</comment>
     <comment xml:lang="uk">зображення Photoshop</comment>
     <comment xml:lang="vi">Ảnh Photoshop</comment>
-    <comment xml:lang="zh_CN">Photoshop 图像</comment>
-    <comment xml:lang="zh_TW">Photoshop 影像</comment>
+    <comment xml:lang="zh-CN">Photoshop 图像</comment>
+    <comment xml:lang="zh-TW">Photoshop 影像</comment>
     <magic priority="50">
-      <match value="8BPS  \000\000\000\000" type="string" offset="0" mask="0xffffffff0000ffffffff"/>
+      <match type="string" mask="0xffffffff0000ffffffff" value="8BPS  \000\000\000\000" offset="0"/>
     </magic>
     <glob pattern="*.psd"/>
     <alias type="image/psd"/>
@@ -29244,9 +30257,10 @@
   </mime-type>
   <mime-type type="image/x-rgb">
     <comment>RGB image</comment>
+    <comment xml:lang="af">RGB-beeld</comment>
     <comment xml:lang="ar">صورة RGB</comment>
     <comment xml:lang="az">RGB rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava RGB</comment>
+    <comment xml:lang="be-Latn">Vyjava RGB</comment>
     <comment xml:lang="bg">Изображение — RGB</comment>
     <comment xml:lang="ca">imatge RGB</comment>
     <comment xml:lang="cs">obrázek RGB</comment>
@@ -29254,13 +30268,14 @@
     <comment xml:lang="da">RGB-billede</comment>
     <comment xml:lang="de">RGB-Bild</comment>
     <comment xml:lang="el">Εικόνα RGB</comment>
-    <comment xml:lang="en_GB">RGB image</comment>
+    <comment xml:lang="en-GB">RGB image</comment>
     <comment xml:lang="eo">RGB-bildo</comment>
     <comment xml:lang="es">imagen RGB</comment>
     <comment xml:lang="eu">RGB irudia</comment>
     <comment xml:lang="fi">RGB-kuva</comment>
     <comment xml:lang="fo">RGB mynd</comment>
     <comment xml:lang="fr">image RGB</comment>
+    <comment xml:lang="fur">imagjin RGB</comment>
     <comment xml:lang="ga">íomhá RGB</comment>
     <comment xml:lang="gl">imaxe RGB</comment>
     <comment xml:lang="he">תמונת RGB</comment>
@@ -29281,7 +30296,7 @@
     <comment xml:lang="oc">imatge RGB</comment>
     <comment xml:lang="pl">Obraz RGB</comment>
     <comment xml:lang="pt">imagem RGB</comment>
-    <comment xml:lang="pt_BR">Imagem RGB</comment>
+    <comment xml:lang="pt-BR">Imagem RGB</comment>
     <comment xml:lang="ro">Imagine RGB</comment>
     <comment xml:lang="ru">Изображение RGB</comment>
     <comment xml:lang="sk">Obrázok RGB</comment>
@@ -29292,27 +30307,29 @@
     <comment xml:lang="tr">RGB görüntüsü</comment>
     <comment xml:lang="uk">зображення RGB</comment>
     <comment xml:lang="vi">Ảnh kiểu RGB</comment>
-    <comment xml:lang="zh_CN">RGB 图像</comment>
-    <comment xml:lang="zh_TW">RGB 影像</comment>
+    <comment xml:lang="zh-CN">RGB 图像</comment>
+    <comment xml:lang="zh-TW">RGB 影像</comment>
     <glob pattern="*.rgb"/>
   </mime-type>
   <mime-type type="image/x-sgi">
     <comment>SGI image</comment>
+    <comment xml:lang="af">SGI-beeld</comment>
     <comment xml:lang="ar">صورة SGI</comment>
-    <comment xml:lang="be@latin">Vyjava SGI</comment>
+    <comment xml:lang="be-Latn">Vyjava SGI</comment>
     <comment xml:lang="bg">Изображение — SGI</comment>
     <comment xml:lang="ca">imatge SGI</comment>
     <comment xml:lang="cs">obrázek SGI</comment>
     <comment xml:lang="da">SGI-billede</comment>
     <comment xml:lang="de">SGI-Bild</comment>
     <comment xml:lang="el">Εικόνα SGI</comment>
-    <comment xml:lang="en_GB">SGI image</comment>
+    <comment xml:lang="en-GB">SGI image</comment>
     <comment xml:lang="eo">SGI-bildo</comment>
     <comment xml:lang="es">imagen SGI</comment>
     <comment xml:lang="eu">SGI irudia</comment>
     <comment xml:lang="fi">SGI-kuva</comment>
     <comment xml:lang="fo">SGI mynd</comment>
     <comment xml:lang="fr">image SGI</comment>
+    <comment xml:lang="fur">imagjin SGI</comment>
     <comment xml:lang="ga">íomhá SGI</comment>
     <comment xml:lang="gl">imaxe SGI</comment>
     <comment xml:lang="he">תמונת SGI</comment>
@@ -29332,7 +30349,7 @@
     <comment xml:lang="oc">imatge SGI</comment>
     <comment xml:lang="pl">Obraz SGI</comment>
     <comment xml:lang="pt">imagem SGI</comment>
-    <comment xml:lang="pt_BR">Imagem SGI</comment>
+    <comment xml:lang="pt-BR">Imagem SGI</comment>
     <comment xml:lang="ro">Imagine SGI</comment>
     <comment xml:lang="ru">Изображение SGI</comment>
     <comment xml:lang="sk">Obrázok SGI</comment>
@@ -29343,26 +30360,28 @@
     <comment xml:lang="tr">SGI görüntüsü</comment>
     <comment xml:lang="uk">зображення SGI</comment>
     <comment xml:lang="vi">Ảnh SGI</comment>
-    <comment xml:lang="zh_CN">SGI 图像</comment>
-    <comment xml:lang="zh_TW">SGI 影像</comment>
+    <comment xml:lang="zh-CN">SGI 图像</comment>
+    <comment xml:lang="zh-TW">SGI 影像</comment>
     <glob pattern="*.sgi"/>
   </mime-type>
   <mime-type type="image/x-sun-raster">
     <comment>Sun raster image</comment>
+    <comment xml:lang="af">Sun-roosterbeeld</comment>
     <comment xml:lang="ar">صورة Sun raster</comment>
-    <comment xml:lang="be@latin">Rastravaja vyjava Sun</comment>
+    <comment xml:lang="be-Latn">Rastravaja vyjava Sun</comment>
     <comment xml:lang="bg">Изображение — Sun raster</comment>
     <comment xml:lang="ca">imatge ràster Sun</comment>
     <comment xml:lang="cs">rastrový obrázek Sun</comment>
     <comment xml:lang="da">Sun rasterbillede</comment>
     <comment xml:lang="de">Sun-Rasterbild</comment>
     <comment xml:lang="el">Εικόνα Sun raster</comment>
-    <comment xml:lang="en_GB">Sun raster image</comment>
+    <comment xml:lang="en-GB">Sun raster image</comment>
     <comment xml:lang="es">imagen rasterizada de Sun</comment>
     <comment xml:lang="eu">Sun raster irudia</comment>
     <comment xml:lang="fi">Sun-rasterikuva</comment>
     <comment xml:lang="fo">Sun raster mynd</comment>
     <comment xml:lang="fr">image raster Sun</comment>
+    <comment xml:lang="fur">imagjin raster Sun</comment>
     <comment xml:lang="ga">íomhá rastar Sun</comment>
     <comment xml:lang="gl">imaxe ráster de Sun</comment>
     <comment xml:lang="he">תמונה סרוקה של Sun</comment>
@@ -29382,7 +30401,7 @@
     <comment xml:lang="oc">imatge raster Sun</comment>
     <comment xml:lang="pl">Obraz rastrowy Sun</comment>
     <comment xml:lang="pt">imagem raster Sun</comment>
-    <comment xml:lang="pt_BR">Imagem raster da Sun</comment>
+    <comment xml:lang="pt-BR">Imagem raster da Sun</comment>
     <comment xml:lang="ro">Imagine rasterizată Sun</comment>
     <comment xml:lang="ru">Растровое изображение Sun</comment>
     <comment xml:lang="sk">Rastrový obrázok Sun</comment>
@@ -29393,30 +30412,32 @@
     <comment xml:lang="tr">Sun raster görüntüsü</comment>
     <comment xml:lang="uk">растрове зображення Sun</comment>
     <comment xml:lang="vi">Ảnh mành Sun</comment>
-    <comment xml:lang="zh_CN">Sun 光栅图像</comment>
-    <comment xml:lang="zh_TW">Sun raster 影像</comment>
+    <comment xml:lang="zh-CN">Sun 光栅图像</comment>
+    <comment xml:lang="zh-TW">Sun raster 影像</comment>
     <magic priority="50">
-      <match value="0x59a66a95" type="big32" offset="0"/>
+      <match type="big32" value="0x59a66a95" offset="0"/>
     </magic>
     <glob pattern="*.sun"/>
   </mime-type>
   <mime-type type="image/x-tga">
     <comment>TGA image</comment>
+    <comment xml:lang="af">TGA-beeld</comment>
     <comment xml:lang="ar">صورة TGA</comment>
-    <comment xml:lang="be@latin">Vyjava TGA</comment>
+    <comment xml:lang="be-Latn">Vyjava TGA</comment>
     <comment xml:lang="bg">Изображение — TGA</comment>
     <comment xml:lang="ca">imatge TGA</comment>
     <comment xml:lang="cs">obrázek TGA</comment>
     <comment xml:lang="da">TGA-billede</comment>
     <comment xml:lang="de">TGA-Bild</comment>
     <comment xml:lang="el">Εικόνα TGA</comment>
-    <comment xml:lang="en_GB">TGA image</comment>
+    <comment xml:lang="en-GB">TGA image</comment>
     <comment xml:lang="eo">TGA-bildo</comment>
     <comment xml:lang="es">imagen TGA</comment>
     <comment xml:lang="eu">TGA irudia</comment>
     <comment xml:lang="fi">TGA-kuva</comment>
     <comment xml:lang="fo">TGA mynd</comment>
     <comment xml:lang="fr">image TGA</comment>
+    <comment xml:lang="fur">imagjin TGA</comment>
     <comment xml:lang="ga">íomhá TGA</comment>
     <comment xml:lang="gl">imaxe TGA</comment>
     <comment xml:lang="he">תמונת TGA</comment>
@@ -29436,7 +30457,7 @@
     <comment xml:lang="oc">imatge TGA</comment>
     <comment xml:lang="pl">Obraz TGA</comment>
     <comment xml:lang="pt">imagem TGA</comment>
-    <comment xml:lang="pt_BR">Imagem TGA</comment>
+    <comment xml:lang="pt-BR">Imagem TGA</comment>
     <comment xml:lang="ro">Imagine TGA</comment>
     <comment xml:lang="ru">Изображение TGA</comment>
     <comment xml:lang="sk">Obrázok TGA</comment>
@@ -29447,23 +30468,23 @@
     <comment xml:lang="tr">TGA görüntüsü</comment>
     <comment xml:lang="uk">зображення TGA</comment>
     <comment xml:lang="vi">Ảnh TGA</comment>
-    <comment xml:lang="zh_CN">TGA 图像</comment>
-    <comment xml:lang="zh_TW">TGA 影像</comment>
+    <comment xml:lang="zh-CN">TGA 图像</comment>
+    <comment xml:lang="zh-TW">TGA 影像</comment>
     <acronym>TGA</acronym>
     <expanded-acronym>Truevision Graphics Adapter</expanded-acronym>
     <magic priority="10">
-      <match value="\1\1" type="string" offset="1"/>
-      <match value="\1\11" type="string" offset="1"/>
-      <match value="\0\3" type="string" offset="1"/>
-      <match value="\0\xa" type="string" offset="1"/>
-      <match value="\0\xb" type="string" offset="1"/>
-    </magic>
-    <magic priority="50">
-      <match value="\0\2" type="string" offset="1">
-        <match value="0x08" type="byte" offset="16"/>
-        <match value="0x10" type="byte" offset="16"/>
-        <match value="0x18" type="byte" offset="16"/>
-        <match value="0x20" type="byte" offset="16"/>
+      <match type="string" value="\1\1" offset="1"/>
+      <match type="string" value="\1\11" offset="1"/>
+      <match type="string" value="\0\3" offset="1"/>
+      <match type="string" value="\0\xa" offset="1"/>
+      <match type="string" value="\0\xb" offset="1"/>
+    </magic>
+    <magic priority="50">
+      <match type="string" value="\0\2" offset="1">
+        <match type="byte" value="0x08" offset="16"/>
+        <match type="byte" value="0x10" offset="16"/>
+        <match type="byte" value="0x18" offset="16"/>
+        <match type="byte" value="0x20" offset="16"/>
       </match>
     </magic>
     <glob pattern="*.tga"/>
@@ -29471,25 +30492,33 @@
     <glob pattern="*.tpic"/>
     <glob pattern="*.vda"/>
     <glob pattern="*.vst"/>
+    <alias type="application/tga"/>
+    <alias type="application/x-targa"/>
+    <alias type="application/x-tga"/>
+    <alias type="image/targa"/>
+    <alias type="image/tga"/>
     <alias type="image/x-icb"/>
+    <alias type="image/x-targa"/>
   </mime-type>
   <mime-type type="image/x-win-bitmap">
     <comment>Windows cursor</comment>
+    <comment xml:lang="af">Windows-wyser</comment>
     <comment xml:lang="ar">مؤشر ويندوز</comment>
-    <comment xml:lang="be@latin">Kursor Windows</comment>
+    <comment xml:lang="be-Latn">Kursor Windows</comment>
     <comment xml:lang="bg">Курсор — Windows</comment>
     <comment xml:lang="ca">cursor de Windows</comment>
     <comment xml:lang="cs">kurzor Windows</comment>
     <comment xml:lang="da">Windowsmarkør</comment>
     <comment xml:lang="de">Windows-Cursor</comment>
     <comment xml:lang="el">Δρομέας Windows</comment>
-    <comment xml:lang="en_GB">Windows cursor</comment>
+    <comment xml:lang="en-GB">Windows cursor</comment>
     <comment xml:lang="eo">Windows-kursoro</comment>
     <comment xml:lang="es">cursor de Windows</comment>
     <comment xml:lang="eu">Windows kurtsorea</comment>
     <comment xml:lang="fi">Windows-osoitin</comment>
     <comment xml:lang="fo">Windows vísi</comment>
     <comment xml:lang="fr">curseur Windows</comment>
+    <comment xml:lang="fur">cursôr di Windows</comment>
     <comment xml:lang="ga">cúrsóir Windows</comment>
     <comment xml:lang="gl">Cursor de Windows</comment>
     <comment xml:lang="he">סמן של Windows</comment>
@@ -29510,7 +30539,7 @@
     <comment xml:lang="oc">cursor Windows</comment>
     <comment xml:lang="pl">Kursor Windows</comment>
     <comment xml:lang="pt">cursor Windows</comment>
-    <comment xml:lang="pt_BR">Cursor do Windows</comment>
+    <comment xml:lang="pt-BR">Cursor do Windows</comment>
     <comment xml:lang="ro">Cursor Windows</comment>
     <comment xml:lang="ru">Курсор Windows</comment>
     <comment xml:lang="sk">Kurzor Windows</comment>
@@ -29521,31 +30550,33 @@
     <comment xml:lang="tr">Windows imleci</comment>
     <comment xml:lang="uk">курсор Windows</comment>
     <comment xml:lang="vi">Con chạy Windows</comment>
-    <comment xml:lang="zh_CN">Windows 光标</comment>
-    <comment xml:lang="zh_TW">Windows 滑鼠游標</comment>
+    <comment xml:lang="zh-CN">Windows 光标</comment>
+    <comment xml:lang="zh-TW">Windows 滑鼠游標</comment>
     <magic priority="50">
-      <match value="\0\0\2\0" type="string" offset="0">
-        <match value="\0" type="string" offset="5"/>
+      <match type="string" value="\0\0\2\0" offset="0">
+        <match type="string" value="\0" offset="5"/>
       </match>
     </magic>
     <glob pattern="*.cur"/>
   </mime-type>
   <mime-type type="application/x-navi-animation">
     <comment>Windows animated cursor</comment>
+    <comment xml:lang="af">Windows geanimeerde wyser</comment>
     <comment xml:lang="ar">مؤشر ويندوز المتحرك</comment>
-    <comment xml:lang="be@latin">Animavany kursor Windows</comment>
+    <comment xml:lang="be-Latn">Animavany kursor Windows</comment>
     <comment xml:lang="bg">Курсор — Windows, анимиран</comment>
     <comment xml:lang="ca">cursor animat de Windows</comment>
     <comment xml:lang="cs">animovaný kurzor Windows</comment>
     <comment xml:lang="da">Windowsanimeret markør</comment>
     <comment xml:lang="de">Animierter Windows-Cursor</comment>
     <comment xml:lang="el">Κινούμενος δρομέας Windows</comment>
-    <comment xml:lang="en_GB">Windows animated cursor</comment>
+    <comment xml:lang="en-GB">Windows animated cursor</comment>
     <comment xml:lang="es">cursor animado de Windows</comment>
     <comment xml:lang="eu">Windows-eko kurtsore animatua</comment>
     <comment xml:lang="fi">animoitu Windows-osoitin</comment>
     <comment xml:lang="fo">Windows livindaigjørdur vísi</comment>
     <comment xml:lang="fr">curseur animé Windows</comment>
+    <comment xml:lang="fur">cursôr animât di Windows</comment>
     <comment xml:lang="ga">cúrsóir beoite Windows</comment>
     <comment xml:lang="gl">Cursor animado de Windows</comment>
     <comment xml:lang="he">סמן מונפש של Windows</comment>
@@ -29564,7 +30595,7 @@
     <comment xml:lang="oc">cursor animat Windows</comment>
     <comment xml:lang="pl">Animowany kursor Windows</comment>
     <comment xml:lang="pt">cursor animado Windows</comment>
-    <comment xml:lang="pt_BR">Cursor animado do Windows</comment>
+    <comment xml:lang="pt-BR">Cursor animado do Windows</comment>
     <comment xml:lang="ro">Cursor animat Windows</comment>
     <comment xml:lang="ru">Анимированный курсор Windows</comment>
     <comment xml:lang="sk">Animovaný kurzor Windows</comment>
@@ -29575,32 +30606,34 @@
     <comment xml:lang="tr">Windows canlandırmalı imleci</comment>
     <comment xml:lang="uk">анімований курсор Windows</comment>
     <comment xml:lang="vi">Con chạy hoạt họa Windows</comment>
-    <comment xml:lang="zh_CN">Windows 动态光标</comment>
-    <comment xml:lang="zh_TW">Windows 滑鼠動畫游標</comment>
+    <comment xml:lang="zh-CN">Windows 动态光标</comment>
+    <comment xml:lang="zh-TW">Windows 滑鼠動畫游標</comment>
     <magic priority="50">
-      <match value="RIFF" type="string" offset="0">
-        <match value="ACON" type="string" offset="8"/>
+      <match type="string" value="RIFF" offset="0">
+        <match type="string" value="ACON" offset="8"/>
       </match>
     </magic>
     <glob pattern="*.ani"/>
   </mime-type>
   <mime-type type="image/emf">
     <comment>EMF image</comment>
+    <comment xml:lang="af">EMF-beeld</comment>
     <comment xml:lang="ar">صورة EMF</comment>
-    <comment xml:lang="be@latin">Vyjava EMF</comment>
+    <comment xml:lang="be-Latn">Vyjava EMF</comment>
     <comment xml:lang="bg">Изображение — EMF</comment>
     <comment xml:lang="ca">imatge EMF</comment>
     <comment xml:lang="cs">obrázek EMF</comment>
     <comment xml:lang="da">EMF-billede</comment>
     <comment xml:lang="de">EMF-Bild</comment>
     <comment xml:lang="el">Εικόνα EMF</comment>
-    <comment xml:lang="en_GB">EMF image</comment>
+    <comment xml:lang="en-GB">EMF image</comment>
     <comment xml:lang="eo">EMF-bildo</comment>
     <comment xml:lang="es">imagen EMF</comment>
     <comment xml:lang="eu">EMF irudia</comment>
     <comment xml:lang="fi">EMF-kuva</comment>
     <comment xml:lang="fo">EMF mynd</comment>
     <comment xml:lang="fr">image EMF</comment>
+    <comment xml:lang="fur">imagjin EMF</comment>
     <comment xml:lang="ga">íomhá EMF</comment>
     <comment xml:lang="gl">imaxe EMF</comment>
     <comment xml:lang="he">תמונת EMF</comment>
@@ -29621,7 +30654,7 @@
     <comment xml:lang="oc">imatge EMF</comment>
     <comment xml:lang="pl">Obraz EMF</comment>
     <comment xml:lang="pt">imagem EMF</comment>
-    <comment xml:lang="pt_BR">Imagem EMF</comment>
+    <comment xml:lang="pt-BR">Imagem EMF</comment>
     <comment xml:lang="ro">Imagine EMF</comment>
     <comment xml:lang="ru">Изображение EMF</comment>
     <comment xml:lang="sk">Obrázok EMF</comment>
@@ -29632,8 +30665,8 @@
     <comment xml:lang="tr">EMF görüntüsü</comment>
     <comment xml:lang="uk">зображення EMF</comment>
     <comment xml:lang="vi">Ảnh EMF</comment>
-    <comment xml:lang="zh_CN">EMF 图像</comment>
-    <comment xml:lang="zh_TW">EMF 影像</comment>
+    <comment xml:lang="zh-CN">EMF 图像</comment>
+    <comment xml:lang="zh-TW">EMF 影像</comment>
     <acronym>EMF</acronym>
     <expanded-acronym>Enhanced MetaFile</expanded-acronym>
     <glob pattern="*.emf"/>
@@ -29641,10 +30674,10 @@
     <alias type="application/x-emf"/>
     <alias type="application/emf"/>
     <magic priority="50">
-      <match value="0x00000001" type="little32" offset="0">
-        <match value="0x464D4520" type="little32" offset="40">
-          <match value="0x00010000" type="little32" offset="44">
-            <match value="0x0000" type="little16" offset="58"/>
+      <match type="little32" offset="0" value="0x00000001">
+        <match type="little32" offset="40" value="0x464D4520">
+          <match type="little32" offset="44" value="0x00010000">
+            <match type="little16" offset="58" value="0x0000"/>
           </match>
         </match>
       </match>
@@ -29652,21 +30685,23 @@
   </mime-type>
   <mime-type type="image/wmf">
     <comment>WMF image</comment>
+    <comment xml:lang="af">WMF-beeld</comment>
     <comment xml:lang="ar">صورة WMF</comment>
-    <comment xml:lang="be@latin">Vyjava WMF</comment>
+    <comment xml:lang="be-Latn">Vyjava WMF</comment>
     <comment xml:lang="bg">Изображение — WMF</comment>
     <comment xml:lang="ca">imatge WMF</comment>
     <comment xml:lang="cs">obrázek WMF</comment>
     <comment xml:lang="da">WMF-billede</comment>
     <comment xml:lang="de">WMF-Bild</comment>
     <comment xml:lang="el">Εικόνα WML</comment>
-    <comment xml:lang="en_GB">WMF image</comment>
+    <comment xml:lang="en-GB">WMF image</comment>
     <comment xml:lang="eo">WMF-bildo</comment>
     <comment xml:lang="es">imagen WMF</comment>
     <comment xml:lang="eu">WMF irudia</comment>
     <comment xml:lang="fi">WMF-kuva</comment>
     <comment xml:lang="fo">WMF mynd</comment>
     <comment xml:lang="fr">image WMF</comment>
+    <comment xml:lang="fur">imagjin WMF</comment>
     <comment xml:lang="ga">íomhá WMF</comment>
     <comment xml:lang="gl">imaxe WMF</comment>
     <comment xml:lang="he">תמונת WMF</comment>
@@ -29686,7 +30721,7 @@
     <comment xml:lang="oc">imatge WMF</comment>
     <comment xml:lang="pl">Obraz WMF</comment>
     <comment xml:lang="pt">imagem WMF</comment>
-    <comment xml:lang="pt_BR">Imagem WMF</comment>
+    <comment xml:lang="pt-BR">Imagem WMF</comment>
     <comment xml:lang="ro">Imagine WMF</comment>
     <comment xml:lang="ru">Изображение WMF</comment>
     <comment xml:lang="sk">Obrázok WMF</comment>
@@ -29697,21 +30732,21 @@
     <comment xml:lang="tr">WMF görüntüsü</comment>
     <comment xml:lang="uk">зображення WMF</comment>
     <comment xml:lang="vi">Ảnh WMF</comment>
-    <comment xml:lang="zh_CN">WMF 图像</comment>
-    <comment xml:lang="zh_TW">WMF 影像</comment>
+    <comment xml:lang="zh-CN">WMF 图像</comment>
+    <comment xml:lang="zh-TW">WMF 影像</comment>
     <acronym>WMF</acronym>
     <expanded-acronym>Windows Metafile</expanded-acronym>
     <magic priority="50">
-      
-      <match value="0x9AC6CDD7" type="little32" offset="0">
-        
-        <match value="0x0001" type="little16" offset="22">
-          <match value="0x0009" type="little16" offset="24"/>
+      <!-- Placeable Metafile Header !-->
+      <match type="little32" offset="0" value="0x9AC6CDD7">
+        <!-- Followed by the standard Windows Metafile Header !-->
+        <match type="little16" offset="22" value="0x0001">
+          <match type="little16" offset="24" value="0x0009"/>
         </match>
       </match>
-      
-      <match value="0x0001" type="little16" offset="0">
-        <match value="0x0009" type="little16" offset="2"/>
+      <!-- or just the standard Windows Metafile Header !-->
+      <match type="little16" offset="0" value="0x0001">
+        <match type="little16" offset="2" value="0x0009"/>
       </match>
     </magic>
     <glob pattern="*.wmf"/>
@@ -29723,21 +30758,23 @@
   </mime-type>
   <mime-type type="image/x-xbitmap">
     <comment>XBM image</comment>
+    <comment xml:lang="af">XBM-beeld</comment>
     <comment xml:lang="ar">صورة XBM</comment>
-    <comment xml:lang="be@latin">Vyjava XBM</comment>
+    <comment xml:lang="be-Latn">Vyjava XBM</comment>
     <comment xml:lang="bg">Изображение — XBM</comment>
     <comment xml:lang="ca">imatge XBM</comment>
     <comment xml:lang="cs">obrázek XBM</comment>
     <comment xml:lang="da">XBM-billede</comment>
     <comment xml:lang="de">XBM-Bild</comment>
     <comment xml:lang="el">Εικόνα XBM</comment>
-    <comment xml:lang="en_GB">XBM image</comment>
+    <comment xml:lang="en-GB">XBM image</comment>
     <comment xml:lang="eo">XBM-bildo</comment>
     <comment xml:lang="es">imagen XBM</comment>
     <comment xml:lang="eu">XBM irudia</comment>
     <comment xml:lang="fi">XBM-kuva</comment>
     <comment xml:lang="fo">XBM mynd</comment>
     <comment xml:lang="fr">image XBM</comment>
+    <comment xml:lang="fur">imagjin XBM</comment>
     <comment xml:lang="ga">íomhá XBM</comment>
     <comment xml:lang="gl">imaxe XBM</comment>
     <comment xml:lang="he">תמונת XBM</comment>
@@ -29757,7 +30794,7 @@
     <comment xml:lang="oc">imatge XBM</comment>
     <comment xml:lang="pl">Obraz XBM</comment>
     <comment xml:lang="pt">imagem XBM</comment>
-    <comment xml:lang="pt_BR">Imagem XBM</comment>
+    <comment xml:lang="pt-BR">Imagem XBM</comment>
     <comment xml:lang="ro">Imagine XBM</comment>
     <comment xml:lang="ru">Изображение XBM</comment>
     <comment xml:lang="sk">Obrázok XBM</comment>
@@ -29768,29 +30805,31 @@
     <comment xml:lang="tr">XBM görüntüsü</comment>
     <comment xml:lang="uk">зображення XBM</comment>
     <comment xml:lang="vi">Ảnh XBM</comment>
-    <comment xml:lang="zh_CN">XBM 图像</comment>
-    <comment xml:lang="zh_TW">XBM 影像</comment>
+    <comment xml:lang="zh-CN">XBM 图像</comment>
+    <comment xml:lang="zh-TW">XBM 影像</comment>
     <acronym>XBM</acronym>
     <expanded-acronym>X BitMap</expanded-acronym>
     <glob pattern="*.xbm"/>
   </mime-type>
   <mime-type type="image/x-xcf">
     <comment>GIMP image</comment>
+    <comment xml:lang="af">GIMP-beeld</comment>
     <comment xml:lang="ar">صورة GIMP</comment>
-    <comment xml:lang="be@latin">Vyjava GIMP</comment>
+    <comment xml:lang="be-Latn">Vyjava GIMP</comment>
     <comment xml:lang="bg">Изображение — GIMP</comment>
     <comment xml:lang="ca">imatge de GIMP</comment>
     <comment xml:lang="cs">obrázek GIMP</comment>
     <comment xml:lang="da">GIMP-billede</comment>
     <comment xml:lang="de">GIMP-Bild</comment>
     <comment xml:lang="el">Εικόνα GIMP</comment>
-    <comment xml:lang="en_GB">GIMP image</comment>
+    <comment xml:lang="en-GB">GIMP image</comment>
     <comment xml:lang="eo">GIMP-bildo</comment>
     <comment xml:lang="es">imagen del GIMP</comment>
     <comment xml:lang="eu">GIMP irudia</comment>
     <comment xml:lang="fi">GIMP-kuva</comment>
     <comment xml:lang="fo">GIMP mynd</comment>
     <comment xml:lang="fr">image GIMP</comment>
+    <comment xml:lang="fur">imagjin GIMP</comment>
     <comment xml:lang="ga">íomhá GIMP</comment>
     <comment xml:lang="gl">imaxe de GIMP</comment>
     <comment xml:lang="he">תמונת GIMP</comment>
@@ -29812,7 +30851,7 @@
     <comment xml:lang="oc">imatge GIMP</comment>
     <comment xml:lang="pl">Obraz GIMP</comment>
     <comment xml:lang="pt">imagem GIMP</comment>
-    <comment xml:lang="pt_BR">Imagem do GIMP</comment>
+    <comment xml:lang="pt-BR">Imagem do GIMP</comment>
     <comment xml:lang="ro">Imagine GIMP</comment>
     <comment xml:lang="ru">Изображение GIMP</comment>
     <comment xml:lang="sk">Obrázok GIMP</comment>
@@ -29823,21 +30862,29 @@
     <comment xml:lang="tr">GIMP görüntüsü</comment>
     <comment xml:lang="uk">зображення GIMP</comment>
     <comment xml:lang="vi">Ảnh GIMP</comment>
-    <comment xml:lang="zh_CN">GIMP 图像</comment>
-    <comment xml:lang="zh_TW">GIMP 影像</comment>
+    <comment xml:lang="zh-CN">GIMP 图像</comment>
+    <comment xml:lang="zh-TW">GIMP 影像</comment>
     <glob pattern="*.xcf"/>
     <magic priority="50">
-      <match value="gimp xcf file" type="string" offset="0"/>
-      <match value="gimp xcf v" type="string" offset="0"/>
+      <match type="string" value="gimp xcf file" offset="0"/>
+      <match type="string" value="gimp xcf v" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-gimp-gbr">
     <comment>GIMP brush</comment>
+    <comment xml:lang="af">GIMP-kwas</comment>
+    <comment xml:lang="bg">Четка — GIMP</comment>
     <comment xml:lang="ca">pinzell de GIMP</comment>
     <comment xml:lang="cs">štětec GIMP</comment>
+    <comment xml:lang="da">GIMP-pensel</comment>
     <comment xml:lang="de">GIMP-Pinsel</comment>
-    <comment xml:lang="en_GB">GIMP brush</comment>
+    <comment xml:lang="en-GB">GIMP brush</comment>
     <comment xml:lang="es">pincel del GIMP</comment>
+    <comment xml:lang="eu">GIMP pintzela</comment>
+    <comment xml:lang="fi">GIMP-sivellin</comment>
+    <comment xml:lang="fr">brosse GIMP</comment>
+    <comment xml:lang="fur">pinel GIMP</comment>
+    <comment xml:lang="ga">scuab GIMP</comment>
     <comment xml:lang="hr">GIMP kist</comment>
     <comment xml:lang="hu">GIMP ecset</comment>
     <comment xml:lang="id">Kuas GIMP</comment>
@@ -29845,47 +30892,65 @@
     <comment xml:lang="kk">GIMP бояу жаққышы</comment>
     <comment xml:lang="ko">GIMP 붓</comment>
     <comment xml:lang="pl">Pędzel programu GIMP</comment>
-    <comment xml:lang="pt_BR">Pincel do GIMP</comment>
+    <comment xml:lang="pt-BR">Pincel do GIMP</comment>
     <comment xml:lang="ru">Кисть GIMP</comment>
     <comment xml:lang="sk">Štetec aplikácie GIMP</comment>
+    <comment xml:lang="sl">Čopič GIMP</comment>
     <comment xml:lang="sv">GIMP-pensel</comment>
+    <comment xml:lang="tr">GIMP fırçası</comment>
     <comment xml:lang="uk">пензель GIMP</comment>
-    <comment xml:lang="zh_CN">GIMP 笔刷</comment>
-    <comment xml:lang="zh_TW">GIMP 筆刷</comment>
+    <comment xml:lang="zh-CN">GIMP 笔刷</comment>
+    <comment xml:lang="zh-TW">GIMP 筆刷</comment>
     <glob pattern="*.gbr"/>
     <magic priority="50">
-      <match value="GIMP" type="string" offset="20"/>
+      <match type="string" value="GIMP" offset="20"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-gimp-gih">
     <comment>GIMP brush pipe</comment>
+    <comment xml:lang="bg">Конвейер с четки — GIMP</comment>
     <comment xml:lang="ca">conducte del pinzell de GIMP</comment>
     <comment xml:lang="cs">zřetězení štětců GIMP</comment>
+    <comment xml:lang="da">GIMP-penselrør</comment>
     <comment xml:lang="de">GIMP-Pinselanimation</comment>
-    <comment xml:lang="en_GB">GIMP brush pipe</comment>
+    <comment xml:lang="en-GB">GIMP brush pipe</comment>
     <comment xml:lang="es">pincel animado del GIMP</comment>
-    <comment xml:lang="hr">GIMP valjkasti kist</comment>
+    <comment xml:lang="eu">GIMP pintzel hodia pipe</comment>
+    <comment xml:lang="fi">GIMP-sivellinputki</comment>
+    <comment xml:lang="fr">brosse animée GIMP</comment>
+    <comment xml:lang="fur">condot pinel GIMP</comment>
+    <comment xml:lang="ga">píopa scuaba GIMP</comment>
+    <comment xml:lang="hr">Proces GIMP kista</comment>
     <comment xml:lang="hu">GIMP ecsetcsatorna</comment>
     <comment xml:lang="id">Pipa kuas GIMP</comment>
     <comment xml:lang="it">Pipe pennello GIMP</comment>
     <comment xml:lang="kk">GIMP бояу жаққыш түтігі</comment>
     <comment xml:lang="ko">GIMP 붓 파이프</comment>
     <comment xml:lang="pl">Potok pędzla programu GIMP</comment>
-    <comment xml:lang="pt_BR">Tubo de pincel do GIMP</comment>
+    <comment xml:lang="pt-BR">Tubo de pincel do GIMP</comment>
     <comment xml:lang="ru">Анимированная кисть GIMP</comment>
     <comment xml:lang="sv">GIMP-penselrör</comment>
+    <comment xml:lang="tr">GIMP fırça borusu</comment>
     <comment xml:lang="uk">канал пензлів GIMP</comment>
-    <comment xml:lang="zh_CN">GIMP 管刷</comment>
-    <comment xml:lang="zh_TW">GIMP 筆刷導管</comment>
+    <comment xml:lang="zh-CN">GIMP 管刷</comment>
+    <comment xml:lang="zh-TW">GIMP 筆刷導管</comment>
     <glob pattern="*.gih"/>
   </mime-type>
   <mime-type type="image/x-gimp-pat">
     <comment>GIMP pattern</comment>
+    <comment xml:lang="af">GIMP-patroon</comment>
+    <comment xml:lang="bg">Шарка — GIMP</comment>
     <comment xml:lang="ca">patró de GIMP</comment>
     <comment xml:lang="cs">vzorek GIMP</comment>
+    <comment xml:lang="da">GIMP-mønster</comment>
     <comment xml:lang="de">GIMP-Muster</comment>
-    <comment xml:lang="en_GB">GIMP pattern</comment>
+    <comment xml:lang="en-GB">GIMP pattern</comment>
     <comment xml:lang="es">patrón del GIMP</comment>
+    <comment xml:lang="eu">GIMP eredua</comment>
+    <comment xml:lang="fi">GIMP-kuvio</comment>
+    <comment xml:lang="fr">motif GIMP</comment>
+    <comment xml:lang="fur">motîf GIMP</comment>
+    <comment xml:lang="ga">patrún GIMP</comment>
     <comment xml:lang="hr">GIMP uzorak</comment>
     <comment xml:lang="hu">GIMP minta</comment>
     <comment xml:lang="id">Pola GIMP</comment>
@@ -29893,35 +30958,39 @@
     <comment xml:lang="kk">GIMP оюы</comment>
     <comment xml:lang="ko">GIMP 패턴</comment>
     <comment xml:lang="pl">Deseń programu GIMP</comment>
-    <comment xml:lang="pt_BR">Textura do GIMP</comment>
+    <comment xml:lang="pt-BR">Textura do GIMP</comment>
     <comment xml:lang="ru">Шаблон GIMP</comment>
     <comment xml:lang="sk">Vzor aplikácie GIMP</comment>
+    <comment xml:lang="sl">Vzorec GIMP</comment>
     <comment xml:lang="sv">GIMP-mönster</comment>
+    <comment xml:lang="tr">GIMP deseni</comment>
     <comment xml:lang="uk">візерунок GIMP</comment>
-    <comment xml:lang="zh_CN">GIMP 图案</comment>
-    <comment xml:lang="zh_TW">GIMP 樣式</comment>
+    <comment xml:lang="zh-CN">GIMP 图案</comment>
+    <comment xml:lang="zh-TW">GIMP 樣式</comment>
     <glob pattern="*.pat"/>
     <magic priority="50">
-      <match value="GPAT" type="string" offset="20"/>
+      <match type="string" value="GPAT" offset="20"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-xfig">
     <comment>XFig image</comment>
+    <comment xml:lang="af">XFig-beeld</comment>
     <comment xml:lang="ar">صورة XFig</comment>
-    <comment xml:lang="be@latin">Vyjava XFig</comment>
+    <comment xml:lang="be-Latn">Vyjava XFig</comment>
     <comment xml:lang="bg">Изображение — XFig</comment>
     <comment xml:lang="ca">imatge de XFig</comment>
     <comment xml:lang="cs">obrázek XFig</comment>
     <comment xml:lang="da">XFig-billede</comment>
     <comment xml:lang="de">XFig-Bild</comment>
     <comment xml:lang="el">Εικόνα XFig</comment>
-    <comment xml:lang="en_GB">XFig image</comment>
+    <comment xml:lang="en-GB">XFig image</comment>
     <comment xml:lang="eo">XFig-bildo</comment>
     <comment xml:lang="es">imagen de XFig</comment>
     <comment xml:lang="eu">XFig irudia</comment>
     <comment xml:lang="fi">XFig-kuva</comment>
     <comment xml:lang="fo">XFig mynd</comment>
     <comment xml:lang="fr">image XFig</comment>
+    <comment xml:lang="fur">imagjin XFig</comment>
     <comment xml:lang="ga">íomhá XFig</comment>
     <comment xml:lang="gl">imaxe de XFig</comment>
     <comment xml:lang="he">תמונת XFig</comment>
@@ -29942,7 +31011,7 @@
     <comment xml:lang="oc">imatge XFig</comment>
     <comment xml:lang="pl">Obraz XFig</comment>
     <comment xml:lang="pt">imagem XFig</comment>
-    <comment xml:lang="pt_BR">Imagem do XFig</comment>
+    <comment xml:lang="pt-BR">Imagem do XFig</comment>
     <comment xml:lang="ro">Imagine XFig</comment>
     <comment xml:lang="ru">Изображение XFig</comment>
     <comment xml:lang="sk">Obrázok XFig</comment>
@@ -29953,17 +31022,18 @@
     <comment xml:lang="tr">XFig görüntüsü</comment>
     <comment xml:lang="uk">зображення XFig</comment>
     <comment xml:lang="vi">Ảnh XFig</comment>
-    <comment xml:lang="zh_CN">XFig 图像</comment>
-    <comment xml:lang="zh_TW">XFig 影像</comment>
+    <comment xml:lang="zh-CN">XFig 图像</comment>
+    <comment xml:lang="zh-TW">XFig 影像</comment>
     <glob pattern="*.fig"/>
     <magic priority="50">
-      <match value="#FIG" type="string" offset="0"/>
+      <match type="string" value="#FIG" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="image/x-xpixmap">
     <comment>XPM image</comment>
+    <comment xml:lang="af">XPM-beeld</comment>
     <comment xml:lang="ar">صورة XPM</comment>
-    <comment xml:lang="be@latin">Vyjava XPM</comment>
+    <comment xml:lang="be-Latn">Vyjava XPM</comment>
     <comment xml:lang="bg">Изображение — XPM</comment>
     <comment xml:lang="ca">imatge XPM</comment>
     <comment xml:lang="cs">obrázek XPM</comment>
@@ -29971,13 +31041,14 @@
     <comment xml:lang="da">XPM-billede</comment>
     <comment xml:lang="de">XPM-Bild</comment>
     <comment xml:lang="el">Εικόνα XPM</comment>
-    <comment xml:lang="en_GB">XPM image</comment>
+    <comment xml:lang="en-GB">XPM image</comment>
     <comment xml:lang="eo">XPM-bildo</comment>
     <comment xml:lang="es">imagen XPM</comment>
     <comment xml:lang="eu">XPM irudia</comment>
     <comment xml:lang="fi">XPM-kuva</comment>
     <comment xml:lang="fo">XPM mynd</comment>
     <comment xml:lang="fr">image XPM</comment>
+    <comment xml:lang="fur">imagjin XPM</comment>
     <comment xml:lang="ga">íomhá XPM</comment>
     <comment xml:lang="gl">imaxe XPM</comment>
     <comment xml:lang="he">תמונת XPM</comment>
@@ -29997,7 +31068,7 @@
     <comment xml:lang="oc">imatge XPM</comment>
     <comment xml:lang="pl">Obraz XPM</comment>
     <comment xml:lang="pt">imagem XPM</comment>
-    <comment xml:lang="pt_BR">Imagem XPM</comment>
+    <comment xml:lang="pt-BR">Imagem XPM</comment>
     <comment xml:lang="ro">Imagine XPM</comment>
     <comment xml:lang="ru">Изображение XPM</comment>
     <comment xml:lang="sk">Obrázok XPM</comment>
@@ -30008,21 +31079,22 @@
     <comment xml:lang="tr">XPM görüntüsü</comment>
     <comment xml:lang="uk">зображення XPM</comment>
     <comment xml:lang="vi">Ảnh XPM</comment>
-    <comment xml:lang="zh_CN">XPM 图像</comment>
-    <comment xml:lang="zh_TW">XPM 影像</comment>
+    <comment xml:lang="zh-CN">XPM 图像</comment>
+    <comment xml:lang="zh-TW">XPM 影像</comment>
     <acronym>XPM</acronym>
     <expanded-acronym>X PixMap</expanded-acronym>
     <magic priority="50">
-      <match value="/* XPM" type="string" offset="0"/>
+      <match type="string" value="/* XPM" offset="0"/>
     </magic>
     <glob pattern="*.xpm"/>
     <alias type="image/x-xpm"/>
   </mime-type>
   <mime-type type="image/x-xwindowdump">
     <comment>X window image</comment>
+    <comment xml:lang="af">X window-beeld</comment>
     <comment xml:lang="ar">صورة X window</comment>
     <comment xml:lang="az">X window rəsmi</comment>
-    <comment xml:lang="be@latin">Vyjava vakna X</comment>
+    <comment xml:lang="be-Latn">Vyjava vakna X</comment>
     <comment xml:lang="bg">Изображение — X Window</comment>
     <comment xml:lang="ca">imatge de X window</comment>
     <comment xml:lang="cs">obrázek X window</comment>
@@ -30030,13 +31102,14 @@
     <comment xml:lang="da">X-billede</comment>
     <comment xml:lang="de">X-Window-Bild</comment>
     <comment xml:lang="el">Εικόνα περιβάλλοντος X</comment>
-    <comment xml:lang="en_GB">X window image</comment>
+    <comment xml:lang="en-GB">X window image</comment>
     <comment xml:lang="eo">bildo de X window</comment>
     <comment xml:lang="es">imagen de ventana de X</comment>
     <comment xml:lang="eu">X window irudia</comment>
     <comment xml:lang="fi">X-ikkunakuva</comment>
     <comment xml:lang="fo">X vindeyga mynd</comment>
     <comment xml:lang="fr">image X window</comment>
+    <comment xml:lang="fur">imagjin X window</comment>
     <comment xml:lang="ga">íomhá X-windows</comment>
     <comment xml:lang="gl">imaxe de X Window</comment>
     <comment xml:lang="he">תמונת חלון של X</comment>
@@ -30057,7 +31130,7 @@
     <comment xml:lang="oc">imatge X window</comment>
     <comment xml:lang="pl">Obraz X Window</comment>
     <comment xml:lang="pt">imagem de janela X</comment>
-    <comment xml:lang="pt_BR">Imagem de janela do X</comment>
+    <comment xml:lang="pt-BR">Imagem de janela do X</comment>
     <comment xml:lang="ro">Imagine X window</comment>
     <comment xml:lang="ru">Изображение X window</comment>
     <comment xml:lang="sk">Obrázok X window</comment>
@@ -30068,28 +31141,30 @@
     <comment xml:lang="tr">X pencere görüntüsü</comment>
     <comment xml:lang="uk">зображення X window</comment>
     <comment xml:lang="vi">Ảnh cửa sổ X</comment>
-    <comment xml:lang="zh_CN">X Window 图像</comment>
-    <comment xml:lang="zh_TW">X window 影像</comment>
+    <comment xml:lang="zh-CN">X Window 图像</comment>
+    <comment xml:lang="zh-TW">X window 影像</comment>
     <glob pattern="*.xwd"/>
   </mime-type>
   <mime-type type="inode/blockdevice">
     <comment>block device</comment>
+    <comment xml:lang="af">bloktoestel</comment>
     <comment xml:lang="ar">جهاز كتلي</comment>
     <comment xml:lang="ast">preséu de bloques</comment>
-    <comment xml:lang="be@latin">blokavaja pryłada</comment>
+    <comment xml:lang="be-Latn">blokavaja pryłada</comment>
     <comment xml:lang="bg">Блоково устройство</comment>
     <comment xml:lang="ca">dispositiu de blocs</comment>
     <comment xml:lang="cs">blokové zařízení</comment>
     <comment xml:lang="da">blokenhed</comment>
     <comment xml:lang="de">Blockorientiertes Gerät</comment>
     <comment xml:lang="el">Συσκευή block</comment>
-    <comment xml:lang="en_GB">block device</comment>
+    <comment xml:lang="en-GB">block device</comment>
     <comment xml:lang="eo">bloka disponaĵo</comment>
     <comment xml:lang="es">dispositivo de bloques</comment>
     <comment xml:lang="eu">bloke-gailua</comment>
     <comment xml:lang="fi">laitetiedosto</comment>
     <comment xml:lang="fo">blokka tóleind</comment>
     <comment xml:lang="fr">périphérique de blocs</comment>
+    <comment xml:lang="fur">dispositîf a blocs</comment>
     <comment xml:lang="ga">gléas bloc</comment>
     <comment xml:lang="gl">dispositivo de bloque</comment>
     <comment xml:lang="he">התקן בלוק</comment>
@@ -30110,7 +31185,7 @@
     <comment xml:lang="oc">periferic de blòts</comment>
     <comment xml:lang="pl">Urządzenie blokowe</comment>
     <comment xml:lang="pt">dispositivo de bloco</comment>
-    <comment xml:lang="pt_BR">Dispositivo de bloco</comment>
+    <comment xml:lang="pt-BR">Dispositivo de bloco</comment>
     <comment xml:lang="ro">dispozitiv bloc</comment>
     <comment xml:lang="ru">Блочное устройство</comment>
     <comment xml:lang="sk">Blokové zariadenie</comment>
@@ -30121,27 +31196,29 @@
     <comment xml:lang="tr">blok aygıtı</comment>
     <comment xml:lang="uk">блоковий пристрій</comment>
     <comment xml:lang="vi">thiết bị khối</comment>
-    <comment xml:lang="zh_CN">块设备</comment>
-    <comment xml:lang="zh_TW">區塊裝置</comment>
+    <comment xml:lang="zh-CN">块设备</comment>
+    <comment xml:lang="zh-TW">區塊裝置</comment>
   </mime-type>
   <mime-type type="inode/chardevice">
     <comment>character device</comment>
+    <comment xml:lang="af">karaktertoestel</comment>
     <comment xml:lang="ar">جهاز حرفي</comment>
     <comment xml:lang="ast">preséu de caráuteres</comment>
-    <comment xml:lang="be@latin">znakavaja pryłada</comment>
+    <comment xml:lang="be-Latn">znakavaja pryłada</comment>
     <comment xml:lang="bg">Символно устройство</comment>
     <comment xml:lang="ca">dispositiu de caràcters</comment>
     <comment xml:lang="cs">znakové zařízení</comment>
     <comment xml:lang="da">tegnenhed</comment>
     <comment xml:lang="de">Zeichenorientiertes Gerät</comment>
     <comment xml:lang="el">Συσκευή χαρακτήρων</comment>
-    <comment xml:lang="en_GB">character device</comment>
+    <comment xml:lang="en-GB">character device</comment>
     <comment xml:lang="eo">signa disponaĵo</comment>
     <comment xml:lang="es">dispositivo de caracteres</comment>
     <comment xml:lang="eu">karaktereen gailua</comment>
     <comment xml:lang="fi">merkkilaite</comment>
     <comment xml:lang="fo">stavatóleind</comment>
     <comment xml:lang="fr">périphérique de caractères</comment>
+    <comment xml:lang="fur">dispositîf a caratars</comment>
     <comment xml:lang="ga">gléas carachtar</comment>
     <comment xml:lang="gl">dispositivo de caracter</comment>
     <comment xml:lang="he">התקן תכונה</comment>
@@ -30162,7 +31239,7 @@
     <comment xml:lang="oc">periferic de caractèrs</comment>
     <comment xml:lang="pl">Urządzenie znakowe</comment>
     <comment xml:lang="pt">dispositivo de caracteres</comment>
-    <comment xml:lang="pt_BR">Dispositivo de caractere</comment>
+    <comment xml:lang="pt-BR">Dispositivo de caractere</comment>
     <comment xml:lang="ro">dispozitiv caracter</comment>
     <comment xml:lang="ru">Символьное устройство</comment>
     <comment xml:lang="sk">Znakové zariadenie</comment>
@@ -30173,27 +31250,29 @@
     <comment xml:lang="tr">karakter aygıtı</comment>
     <comment xml:lang="uk">символьний пристрій</comment>
     <comment xml:lang="vi">thiết bị ký tự</comment>
-    <comment xml:lang="zh_CN">字符设备</comment>
-    <comment xml:lang="zh_TW">字元裝置</comment>
+    <comment xml:lang="zh-CN">字符设备</comment>
+    <comment xml:lang="zh-TW">字元裝置</comment>
   </mime-type>
   <mime-type type="inode/directory">
     <comment>folder</comment>
+    <comment xml:lang="af">gids</comment>
     <comment xml:lang="ar">مجلّد</comment>
     <comment xml:lang="ast">carpeta</comment>
-    <comment xml:lang="be@latin">kataloh</comment>
+    <comment xml:lang="be-Latn">kataloh</comment>
     <comment xml:lang="bg">Папка</comment>
     <comment xml:lang="ca">carpeta</comment>
     <comment xml:lang="cs">složka</comment>
     <comment xml:lang="da">mappe</comment>
     <comment xml:lang="de">Ordner</comment>
     <comment xml:lang="el">Φάκελος</comment>
-    <comment xml:lang="en_GB">folder</comment>
+    <comment xml:lang="en-GB">folder</comment>
     <comment xml:lang="eo">dosierujo</comment>
     <comment xml:lang="es">carpeta</comment>
     <comment xml:lang="eu">karpeta</comment>
     <comment xml:lang="fi">kansio</comment>
     <comment xml:lang="fo">mappa</comment>
     <comment xml:lang="fr">dossier</comment>
+    <comment xml:lang="fur">cartele</comment>
     <comment xml:lang="ga">fillteán</comment>
     <comment xml:lang="gl">cartafol</comment>
     <comment xml:lang="he">תיקייה</comment>
@@ -30214,7 +31293,7 @@
     <comment xml:lang="oc">dorsièr</comment>
     <comment xml:lang="pl">Katalog</comment>
     <comment xml:lang="pt">pasta</comment>
-    <comment xml:lang="pt_BR">Pasta</comment>
+    <comment xml:lang="pt-BR">Pasta</comment>
     <comment xml:lang="ro">dosar</comment>
     <comment xml:lang="ru">Папка</comment>
     <comment xml:lang="sk">Priečinok</comment>
@@ -30225,28 +31304,30 @@
     <comment xml:lang="tr">dizin</comment>
     <comment xml:lang="uk">тека</comment>
     <comment xml:lang="vi">thư mục</comment>
-    <comment xml:lang="zh_CN">文件夹</comment>
-    <comment xml:lang="zh_TW">資料夾</comment>
+    <comment xml:lang="zh-CN">文件夹</comment>
+    <comment xml:lang="zh-TW">資料夾</comment>
     <generic-icon name="folder"/>
     <alias type="x-directory/normal"/>
   </mime-type>
   <mime-type type="inode/fifo">
     <comment>pipe</comment>
+    <comment xml:lang="af">pyp</comment>
     <comment xml:lang="ar">إنبوب</comment>
-    <comment xml:lang="be@latin">kanvejer</comment>
+    <comment xml:lang="be-Latn">kanvejer</comment>
     <comment xml:lang="bg">Конвейер</comment>
     <comment xml:lang="ca">conducte</comment>
     <comment xml:lang="cs">roura</comment>
     <comment xml:lang="da">datakanal</comment>
     <comment xml:lang="de">Pipe</comment>
     <comment xml:lang="el">Διοχέτευση</comment>
-    <comment xml:lang="en_GB">pipe</comment>
+    <comment xml:lang="en-GB">pipe</comment>
     <comment xml:lang="eo">dukto</comment>
-    <comment xml:lang="es">tubería</comment>
+    <comment xml:lang="es">canalización</comment>
     <comment xml:lang="eu">kanalizazioa</comment>
     <comment xml:lang="fi">putki</comment>
     <comment xml:lang="fo">rør</comment>
     <comment xml:lang="fr">tube</comment>
+    <comment xml:lang="fur">condot</comment>
     <comment xml:lang="ga">píopa</comment>
     <comment xml:lang="gl">tubería</comment>
     <comment xml:lang="he">צינור</comment>
@@ -30267,7 +31348,7 @@
     <comment xml:lang="oc">tub</comment>
     <comment xml:lang="pl">Potok</comment>
     <comment xml:lang="pt">canal</comment>
-    <comment xml:lang="pt_BR">Pipe</comment>
+    <comment xml:lang="pt-BR">Pipe</comment>
     <comment xml:lang="ro">canal pipe</comment>
     <comment xml:lang="ru">Канал</comment>
     <comment xml:lang="sk">Rúra</comment>
@@ -30278,27 +31359,29 @@
     <comment xml:lang="tr">boru</comment>
     <comment xml:lang="uk">канал</comment>
     <comment xml:lang="vi">ống dẫn</comment>
-    <comment xml:lang="zh_CN">管道</comment>
-    <comment xml:lang="zh_TW">管線</comment>
+    <comment xml:lang="zh-CN">管道</comment>
+    <comment xml:lang="zh-TW">管線</comment>
   </mime-type>
   <mime-type type="inode/mount-point">
     <comment>mount point</comment>
+    <comment xml:lang="af">hegpunt</comment>
     <comment xml:lang="ar">نقطة الوصْل</comment>
     <comment xml:lang="ast">puntu de montaxe</comment>
-    <comment xml:lang="be@latin">punkt mantavańnia</comment>
+    <comment xml:lang="be-Latn">punkt mantavańnia</comment>
     <comment xml:lang="bg">Точка на монтиране</comment>
     <comment xml:lang="ca">punt de muntatge</comment>
     <comment xml:lang="cs">přípojné místo</comment>
     <comment xml:lang="da">monteringspunkt</comment>
     <comment xml:lang="de">Einhängepunkt</comment>
     <comment xml:lang="el">Σημείο προσάρτησης</comment>
-    <comment xml:lang="en_GB">mount point</comment>
+    <comment xml:lang="en-GB">mount point</comment>
     <comment xml:lang="eo">surmetingo</comment>
     <comment xml:lang="es">punto de montaje</comment>
     <comment xml:lang="eu">muntatze-puntua</comment>
     <comment xml:lang="fi">liitospiste</comment>
     <comment xml:lang="fo">ísetingarpunkt</comment>
     <comment xml:lang="fr">point d'accès</comment>
+    <comment xml:lang="fur">pont di montaç</comment>
     <comment xml:lang="ga">pointe feistithe</comment>
     <comment xml:lang="gl">punto de montaxe</comment>
     <comment xml:lang="he">נקודת עיגון</comment>
@@ -30319,7 +31402,7 @@
     <comment xml:lang="oc">punt d'accès</comment>
     <comment xml:lang="pl">Punkt montowania</comment>
     <comment xml:lang="pt">ponto de montagem</comment>
-    <comment xml:lang="pt_BR">Ponto de montagem</comment>
+    <comment xml:lang="pt-BR">Ponto de montagem</comment>
     <comment xml:lang="ro">loc montare</comment>
     <comment xml:lang="ru">Точка монтирования</comment>
     <comment xml:lang="sk">Miesto pripojenia</comment>
@@ -30330,27 +31413,29 @@
     <comment xml:lang="tr">bağlama noktası</comment>
     <comment xml:lang="uk">точка монтування</comment>
     <comment xml:lang="vi">điểm lắp</comment>
-    <comment xml:lang="zh_CN">挂载点</comment>
-    <comment xml:lang="zh_TW">掛載點</comment>
+    <comment xml:lang="zh-CN">挂载点</comment>
+    <comment xml:lang="zh-TW">掛載點</comment>
     <sub-class-of type="inode/directory"/>
   </mime-type>
   <mime-type type="inode/socket">
     <comment>socket</comment>
+    <comment xml:lang="af">sok</comment>
     <comment xml:lang="ar">مقبس</comment>
-    <comment xml:lang="be@latin">sokiet</comment>
+    <comment xml:lang="be-Latn">sokiet</comment>
     <comment xml:lang="bg">Гнездо</comment>
     <comment xml:lang="ca">sòcol</comment>
     <comment xml:lang="cs">socket</comment>
     <comment xml:lang="da">sokkel</comment>
     <comment xml:lang="de">Socket</comment>
     <comment xml:lang="el">Υποδοχή</comment>
-    <comment xml:lang="en_GB">socket</comment>
+    <comment xml:lang="en-GB">socket</comment>
     <comment xml:lang="eo">kontaktoskatolo</comment>
     <comment xml:lang="es">socket</comment>
     <comment xml:lang="eu">socketa</comment>
     <comment xml:lang="fi">pistoke</comment>
     <comment xml:lang="fo">sokkul</comment>
     <comment xml:lang="fr">connecteur réseau</comment>
+    <comment xml:lang="fur">socket</comment>
     <comment xml:lang="ga">soicéad</comment>
     <comment xml:lang="gl">socket</comment>
     <comment xml:lang="he">נקודת חיבור</comment>
@@ -30371,7 +31456,7 @@
     <comment xml:lang="oc">connector ret</comment>
     <comment xml:lang="pl">Gniazdo</comment>
     <comment xml:lang="pt">tomada</comment>
-    <comment xml:lang="pt_BR">Socket</comment>
+    <comment xml:lang="pt-BR">Socket</comment>
     <comment xml:lang="ro">socket</comment>
     <comment xml:lang="ru">Сокет</comment>
     <comment xml:lang="sk">Soket</comment>
@@ -30382,15 +31467,16 @@
     <comment xml:lang="tr">soket</comment>
     <comment xml:lang="uk">сокет</comment>
     <comment xml:lang="vi">ổ cắm</comment>
-    <comment xml:lang="zh_CN">套接字</comment>
-    <comment xml:lang="zh_TW">socket</comment>
+    <comment xml:lang="zh-CN">套接字</comment>
+    <comment xml:lang="zh-TW">socket</comment>
   </mime-type>
   <mime-type type="inode/symlink">
     <comment>symbolic link</comment>
+    <comment xml:lang="af">simboliese skakel</comment>
     <comment xml:lang="ar">وصلة رمزية</comment>
     <comment xml:lang="ast">enllaz simbólicu</comment>
     <comment xml:lang="az">simvolik körpü</comment>
-    <comment xml:lang="be@latin">symbalnaja spasyłka</comment>
+    <comment xml:lang="be-Latn">symbalnaja spasyłka</comment>
     <comment xml:lang="bg">Символна връзка</comment>
     <comment xml:lang="ca">enllaç simbòlic</comment>
     <comment xml:lang="cs">symbolický odkaz</comment>
@@ -30398,13 +31484,14 @@
     <comment xml:lang="da">symbolsk henvisning</comment>
     <comment xml:lang="de">Symbolische Verknüpfung</comment>
     <comment xml:lang="el">Συμβολικός σύνδεσμος</comment>
-    <comment xml:lang="en_GB">symbolic link</comment>
+    <comment xml:lang="en-GB">symbolic link</comment>
     <comment xml:lang="eo">simbola ligilo</comment>
     <comment xml:lang="es">enlace simbólico</comment>
     <comment xml:lang="eu">esteka sinbolikoa</comment>
     <comment xml:lang="fi">symbolinen linkki</comment>
     <comment xml:lang="fo">tykislig leinkja</comment>
     <comment xml:lang="fr">lien symbolique</comment>
+    <comment xml:lang="fur">colegament simbolic</comment>
     <comment xml:lang="ga">nasc siombalach</comment>
     <comment xml:lang="gl">ligazón simbólica</comment>
     <comment xml:lang="he">קישור סימבולי</comment>
@@ -30426,7 +31513,7 @@
     <comment xml:lang="oc">ligam simbolic</comment>
     <comment xml:lang="pl">Dowiązanie symboliczne</comment>
     <comment xml:lang="pt">ligação simbólica</comment>
-    <comment xml:lang="pt_BR">Ligação simbólica</comment>
+    <comment xml:lang="pt-BR">Ligação simbólica</comment>
     <comment xml:lang="ro">legătură simbolică</comment>
     <comment xml:lang="ru">Символьная ссылка</comment>
     <comment xml:lang="sk">Symbolický odkaz</comment>
@@ -30434,17 +31521,18 @@
     <comment xml:lang="sq">Lidhje simbolike</comment>
     <comment xml:lang="sr">симболичка веза</comment>
     <comment xml:lang="sv">symbolisk länk</comment>
-    <comment xml:lang="tr">sembolik bağlantı</comment>
+    <comment xml:lang="tr">simgesel bağlantı</comment>
     <comment xml:lang="uk">символічне посилання</comment>
     <comment xml:lang="vi">liên kết tượng trưng</comment>
-    <comment xml:lang="zh_CN">符号链接</comment>
-    <comment xml:lang="zh_TW">符號鏈結</comment>
+    <comment xml:lang="zh-CN">符号链接</comment>
+    <comment xml:lang="zh-TW">符號連結</comment>
   </mime-type>
   <mime-type type="message/delivery-status">
     <comment>mail delivery report</comment>
+    <comment xml:lang="af">posafleweringverslag</comment>
     <comment xml:lang="ar">تقرير تسليم البريد</comment>
     <comment xml:lang="az">poçt yollama raportu</comment>
-    <comment xml:lang="be@latin">rapart ab dastaŭcy pošty</comment>
+    <comment xml:lang="be-Latn">rapart ab dastaŭcy pošty</comment>
     <comment xml:lang="bg">Отчет за пристигналата поща</comment>
     <comment xml:lang="ca">informe de lliurament de correu</comment>
     <comment xml:lang="cs">zpráva o doručení pošty</comment>
@@ -30452,13 +31540,14 @@
     <comment xml:lang="da">postleveringsrapport</comment>
     <comment xml:lang="de">E-Mail-Zustellungsbericht</comment>
     <comment xml:lang="el">Αναφορά παράδοσης μηνύματος</comment>
-    <comment xml:lang="en_GB">mail delivery report</comment>
+    <comment xml:lang="en-GB">mail delivery report</comment>
     <comment xml:lang="eo">raporto pri transdono de retpoŝto</comment>
     <comment xml:lang="es">informe de entrega de correo</comment>
     <comment xml:lang="eu">posta banaketako txostena</comment>
     <comment xml:lang="fi">viestin jakeluilmoitus</comment>
     <comment xml:lang="fo">post útberingarfrásøgn</comment>
     <comment xml:lang="fr">rapport de livraison de courriels</comment>
+    <comment xml:lang="fur">rapuart di consegne pueste</comment>
     <comment xml:lang="ga">tuairisc sheachadta r-phoist</comment>
     <comment xml:lang="gl">informe de entrega de correo</comment>
     <comment xml:lang="he">דוח העברת דואר</comment>
@@ -30479,7 +31568,7 @@
     <comment xml:lang="oc">rapòrt de liurason de corrièrs electronics</comment>
     <comment xml:lang="pl">Raport z dostarczenia poczty</comment>
     <comment xml:lang="pt">relatório de entrega de email</comment>
-    <comment xml:lang="pt_BR">Relatório de entrega de correspondência</comment>
+    <comment xml:lang="pt-BR">Relatório de entrega de correspondência</comment>
     <comment xml:lang="ro">raport de trimitere email</comment>
     <comment xml:lang="ru">Отчёт о доставке сообщения</comment>
     <comment xml:lang="sk">Správa o doručení pošty</comment>
@@ -30490,8 +31579,8 @@
     <comment xml:lang="tr">posta iletim raporu</comment>
     <comment xml:lang="uk">звіт про доставку пошти</comment>
     <comment xml:lang="vi">thông báo phát thư</comment>
-    <comment xml:lang="zh_CN">邮件投递报告</comment>
-    <comment xml:lang="zh_TW">郵件寄送回報</comment>
+    <comment xml:lang="zh-CN">邮件投递报告</comment>
+    <comment xml:lang="zh-TW">郵件寄送回報</comment>
     <generic-icon name="text-x-generic"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
@@ -30499,7 +31588,7 @@
     <comment>mail disposition report</comment>
     <comment xml:lang="ar">تقرير ترتيب البريد</comment>
     <comment xml:lang="az">poçt qayıtma raportu</comment>
-    <comment xml:lang="be@latin">rapart ab raźmiaščeńni pošty</comment>
+    <comment xml:lang="be-Latn">rapart ab raźmiaščeńni pošty</comment>
     <comment xml:lang="bg">Отчет за състоянието на пощата</comment>
     <comment xml:lang="ca">informe de disposició de correu</comment>
     <comment xml:lang="cs">zpráva o předání pošty</comment>
@@ -30507,13 +31596,14 @@
     <comment xml:lang="da">postdisponeringsrapport</comment>
     <comment xml:lang="de">E-Mail-Übertragungsbericht</comment>
     <comment xml:lang="el">Αναφορά διάθεσης μηνύματος</comment>
-    <comment xml:lang="en_GB">mail disposition report</comment>
+    <comment xml:lang="en-GB">mail disposition report</comment>
     <comment xml:lang="eo">raporto pri dispono de retpoŝto</comment>
     <comment xml:lang="es">informe de disposición de correo</comment>
     <comment xml:lang="eu">posta joerako txostena</comment>
     <comment xml:lang="fi">viestin kuittausilmoitus</comment>
     <comment xml:lang="fo">post avhendingarfrásøgn</comment>
     <comment xml:lang="fr">rapport de disposition de courriels</comment>
+    <comment xml:lang="fur">rapuart di disposizion pueste</comment>
     <comment xml:lang="ga">tuairisc chóirithe r-phoist</comment>
     <comment xml:lang="gl">informe de disposición de correo</comment>
     <comment xml:lang="he">דוח אספקת דואר</comment>
@@ -30534,7 +31624,7 @@
     <comment xml:lang="oc">rapòrt de disposicion de corrièrs electronics</comment>
     <comment xml:lang="pl">Raport z wysyłania poczty</comment>
     <comment xml:lang="pt">relatório de disposição de email</comment>
-    <comment xml:lang="pt_BR">Relatório de disposição de correspondência</comment>
+    <comment xml:lang="pt-BR">Relatório de disposição de correspondência</comment>
     <comment xml:lang="ro">confirmare primire email</comment>
     <comment xml:lang="ru">Отчёт о перемещении почты</comment>
     <comment xml:lang="sk">Správa o odovzdaní pošty</comment>
@@ -30545,16 +31635,17 @@
     <comment xml:lang="tr">posta silinme raporu</comment>
     <comment xml:lang="uk">звіт про розташування пошти</comment>
     <comment xml:lang="vi">thông báo chuyển nhượng thư</comment>
-    <comment xml:lang="zh_CN">邮件接收报告</comment>
-    <comment xml:lang="zh_TW">郵件處置回報</comment>
+    <comment xml:lang="zh-CN">邮件接收报告</comment>
+    <comment xml:lang="zh-TW">郵件處置回報</comment>
     <generic-icon name="text-x-generic"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="message/external-body">
     <comment>reference to remote file</comment>
+    <comment xml:lang="af">verwysing na afgeleë lêer</comment>
     <comment xml:lang="ar">مرجع إلى ملف بعيد</comment>
     <comment xml:lang="az">uzaq fayla göstəriş</comment>
-    <comment xml:lang="be@latin">spasyłka da addalenaha fajłu</comment>
+    <comment xml:lang="be-Latn">spasyłka da addalenaha fajłu</comment>
     <comment xml:lang="bg">Препратка към отдалечен файл</comment>
     <comment xml:lang="ca">referència a fitxer remot</comment>
     <comment xml:lang="cs">odkaz na vzdálený soubor</comment>
@@ -30562,13 +31653,14 @@
     <comment xml:lang="da">reference til fjern fil</comment>
     <comment xml:lang="de">Verweis auf entfernte Datei</comment>
     <comment xml:lang="el">Αναφορά σε απομακρυσμένο αρχείο</comment>
-    <comment xml:lang="en_GB">reference to remote file</comment>
+    <comment xml:lang="en-GB">reference to remote file</comment>
     <comment xml:lang="eo">referenco al fora dosiero</comment>
     <comment xml:lang="es">referencia a un archivo remoto</comment>
     <comment xml:lang="eu">erreferentzia urruneko fitxategiari</comment>
     <comment xml:lang="fi">viittaus etätiedostoon</comment>
     <comment xml:lang="fo">tilvísing til fjarfílu</comment>
     <comment xml:lang="fr">référence au fichier distant</comment>
+    <comment xml:lang="fur">riferiment a file rimot</comment>
     <comment xml:lang="ga">tagairt do chomhad cianda</comment>
     <comment xml:lang="gl">referencia a un ficheiro remoto</comment>
     <comment xml:lang="he">התיחסות לקובץ מרוחק</comment>
@@ -30589,7 +31681,7 @@
     <comment xml:lang="oc">referéncia al fichièr distant</comment>
     <comment xml:lang="pl">Odwołanie do pliku zdalnego</comment>
     <comment xml:lang="pt">referência a um ficheiro remoto</comment>
-    <comment xml:lang="pt_BR">Referência para arquivo remoto</comment>
+    <comment xml:lang="pt-BR">Referência para arquivo remoto</comment>
     <comment xml:lang="ro">referință fișier la distanță</comment>
     <comment xml:lang="ru">Ссылка на удалённый файл</comment>
     <comment xml:lang="sk">Odkaz na vzdialený súbor</comment>
@@ -30597,32 +31689,34 @@
     <comment xml:lang="sq">Referim për tek file në distancë</comment>
     <comment xml:lang="sr">упута на удаљену датотеку</comment>
     <comment xml:lang="sv">referens till fjärrfil</comment>
-    <comment xml:lang="tr">uzaktaki dosyaya başvuru</comment>
+    <comment xml:lang="tr">uzaktaki dosyaya atıf</comment>
     <comment xml:lang="uk">посилання на віддалений файл</comment>
     <comment xml:lang="vi">tham chiếu đến tập tin ở xa</comment>
-    <comment xml:lang="zh_CN">到远程文件的引用</comment>
-    <comment xml:lang="zh_TW">遠端檔案的參照</comment>
+    <comment xml:lang="zh-CN">到远程文件的引用</comment>
+    <comment xml:lang="zh-TW">遠端檔案的參照</comment>
     <generic-icon name="text-x-generic"/>
   </mime-type>
   <mime-type type="message/news">
     <comment>Usenet news message</comment>
+    <comment xml:lang="af">Usenet-nuusboodskap</comment>
     <comment xml:lang="ar">رسالة أخبار Usenet</comment>
     <comment xml:lang="az">Usenet xəbərlər ismarışı</comment>
-    <comment xml:lang="be@latin">Navina Usenet</comment>
+    <comment xml:lang="be-Latn">Navina Usenet</comment>
     <comment xml:lang="bg">Съобщение — Usenet</comment>
     <comment xml:lang="ca">missatge de notícies Usenet</comment>
     <comment xml:lang="cs">příspěvek do diskusních skupin Usenet</comment>
     <comment xml:lang="cy">Neges newyddion Usenet</comment>
-    <comment xml:lang="da">Usenetnyhedsmeddelelse</comment>
+    <comment xml:lang="da">Usenet-nyhedsmeddelelse</comment>
     <comment xml:lang="de">Usenet-News-Nachricht</comment>
     <comment xml:lang="el">Μήνυμα ομάδων συζητήσεων Usenet</comment>
-    <comment xml:lang="en_GB">Usenet news message</comment>
+    <comment xml:lang="en-GB">Usenet news message</comment>
     <comment xml:lang="eo">novaĵmesaĝo de Usenet</comment>
     <comment xml:lang="es">mensaje de noticias de Usenet</comment>
     <comment xml:lang="eu">Usenet berrien mezua</comment>
     <comment xml:lang="fi">nyyssiviesti</comment>
     <comment xml:lang="fo">Usenet news boð</comment>
     <comment xml:lang="fr">message de groupe d'échange Usenet</comment>
+    <comment xml:lang="fur">messaç gnovis Usenet</comment>
     <comment xml:lang="ga">teachtaireacht nuachta Usenet</comment>
     <comment xml:lang="gl">mensaxes de noticias de Usenet</comment>
     <comment xml:lang="he">הודעת חדשות של Usenet</comment>
@@ -30643,7 +31737,7 @@
     <comment xml:lang="oc">messatge de grop d'escambi Usenet</comment>
     <comment xml:lang="pl">Wiadomość grupy dyskusyjnej</comment>
     <comment xml:lang="pt">mensagem de notícias Usenet</comment>
-    <comment xml:lang="pt_BR">Mensagem de notícias da Usenet</comment>
+    <comment xml:lang="pt-BR">Mensagem de notícias da Usenet</comment>
     <comment xml:lang="ro">Mesaj Usenet de știri </comment>
     <comment xml:lang="ru">Новостное сообщение Usenet</comment>
     <comment xml:lang="sk">Príspevok do diskusných skupín Usenet</comment>
@@ -30654,21 +31748,22 @@
     <comment xml:lang="tr">Usenet haber iletisi</comment>
     <comment xml:lang="uk">повідомлення новин Usenet</comment>
     <comment xml:lang="vi">Thông điệp tin tức USENET</comment>
-    <comment xml:lang="zh_CN">Usenet 新闻信</comment>
-    <comment xml:lang="zh_TW">Usenet 新聞訊息</comment>
+    <comment xml:lang="zh-CN">Usenet 新闻信</comment>
+    <comment xml:lang="zh-TW">Usenet 新聞訊息</comment>
     <generic-icon name="text-x-generic"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="Article" type="string" offset="0"/>
-      <match value="Path:" type="string" offset="0"/>
-      <match value="Xref:" type="string" offset="0"/>
+      <match type="string" value="Article" offset="0"/>
+      <match type="string" value="Path:" offset="0"/>
+      <match type="string" value="Xref:" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="message/partial">
     <comment>partial email message</comment>
+    <comment xml:lang="af">gedeeltelike e-posboodskap</comment>
     <comment xml:lang="ar">رسالة البريد الإلكتروني الجزئية</comment>
     <comment xml:lang="az">qismi poçt ismarışı</comment>
-    <comment xml:lang="be@latin">niapoŭny list email</comment>
+    <comment xml:lang="be-Latn">niapoŭny list email</comment>
     <comment xml:lang="bg">Част от електронно писмо</comment>
     <comment xml:lang="ca">missatge de correu electrònic parcial</comment>
     <comment xml:lang="cs">částečná e-mailová zpráva</comment>
@@ -30676,12 +31771,13 @@
     <comment xml:lang="da">delvis postmeddelelse</comment>
     <comment xml:lang="de">E-Mail-Nachrichtenfragment</comment>
     <comment xml:lang="el">Τμηματικό ηλ. μήνυμα</comment>
-    <comment xml:lang="en_GB">partial email message</comment>
+    <comment xml:lang="en-GB">partial email message</comment>
     <comment xml:lang="eo">parta retpoŝta mesaĝo</comment>
     <comment xml:lang="es">mensaje de correo electrónico parcial</comment>
     <comment xml:lang="eu">posta mezu partziala</comment>
     <comment xml:lang="fi">osittainen sähköpostiviesti</comment>
     <comment xml:lang="fr">message partiel de courriel</comment>
+    <comment xml:lang="fur">messaç e-mail parziâl</comment>
     <comment xml:lang="ga">teachtaireacht ríomhphoist neamhiomlán</comment>
     <comment xml:lang="gl">mensaxe de correo electrónico parcial</comment>
     <comment xml:lang="he">מסר דוא״ל חלקי</comment>
@@ -30702,7 +31798,7 @@
     <comment xml:lang="oc">messatge parcial de corrièr electronic</comment>
     <comment xml:lang="pl">Częściowa wiadomość e-mail</comment>
     <comment xml:lang="pt">mensagem parcial de email</comment>
-    <comment xml:lang="pt_BR">Mensagem de e-mail parcial</comment>
+    <comment xml:lang="pt-BR">Mensagem de e-mail parcial</comment>
     <comment xml:lang="ro">mesaj de email parțial</comment>
     <comment xml:lang="ru">Фрагмент сообщения электронной почты</comment>
     <comment xml:lang="sk">Čiastočná e-mailová správa</comment>
@@ -30713,28 +31809,30 @@
     <comment xml:lang="tr">kısmi eposta iletisi</comment>
     <comment xml:lang="uk">часткове поштове повідомлення</comment>
     <comment xml:lang="vi">thư điện tử riêng phần</comment>
-    <comment xml:lang="zh_CN">部分电子邮件</comment>
-    <comment xml:lang="zh_TW">部份電子郵件訊息</comment>
+    <comment xml:lang="zh-CN">部分电子邮件</comment>
+    <comment xml:lang="zh-TW">部份電子郵件訊息</comment>
     <generic-icon name="text-x-generic"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="message/rfc822">
     <comment>email message</comment>
+    <comment xml:lang="af">e-posboodskap</comment>
     <comment xml:lang="ar">رسالة البريد الإلكتروني</comment>
-    <comment xml:lang="be@latin">list email</comment>
+    <comment xml:lang="be-Latn">list email</comment>
     <comment xml:lang="bg">Съобщение по електронната поща</comment>
     <comment xml:lang="ca">missatge de correu electrònic</comment>
     <comment xml:lang="cs">e-mailová zpráva</comment>
     <comment xml:lang="da">postmeddelelse</comment>
     <comment xml:lang="de">E-Mail-Nachricht</comment>
     <comment xml:lang="el">Ηλ. μήνυμα</comment>
-    <comment xml:lang="en_GB">email message</comment>
+    <comment xml:lang="en-GB">email message</comment>
     <comment xml:lang="eo">retpoŝta mesaĝo</comment>
     <comment xml:lang="es">mensaje de correo electrónico</comment>
     <comment xml:lang="eu">helbide elektronikoen mezua</comment>
     <comment xml:lang="fi">sähköpostiviesti</comment>
     <comment xml:lang="fo">t-post boð</comment>
     <comment xml:lang="fr">message de courriel</comment>
+    <comment xml:lang="fur">messaç e-mail</comment>
     <comment xml:lang="ga">teachtaireacht ríomhphoist</comment>
     <comment xml:lang="gl">mensaxe de correo electrónico</comment>
     <comment xml:lang="he">הודעת דואר אלקטרוני</comment>
@@ -30755,7 +31853,7 @@
     <comment xml:lang="oc">messatge de corrièr electronic</comment>
     <comment xml:lang="pl">Wiadomość e-mail</comment>
     <comment xml:lang="pt">mensagem de email</comment>
-    <comment xml:lang="pt_BR">Mensagem de e-mail</comment>
+    <comment xml:lang="pt-BR">Mensagem de e-mail</comment>
     <comment xml:lang="ro">mesaj email</comment>
     <comment xml:lang="ru">Почтовое сообщение</comment>
     <comment xml:lang="sk">E-mailová správa</comment>
@@ -30766,29 +31864,30 @@
     <comment xml:lang="tr">eposta iletisi</comment>
     <comment xml:lang="uk">повідомлення email</comment>
     <comment xml:lang="vi">thư điện tử</comment>
-    <comment xml:lang="zh_CN">电子邮件</comment>
-    <comment xml:lang="zh_TW">電子郵件內容</comment>
+    <comment xml:lang="zh-CN">电子邮件</comment>
+    <comment xml:lang="zh-TW">電子郵件內容</comment>
     <generic-icon name="text-x-generic"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="#! rnews" type="string" offset="0"/>
-      <match value="Forward to" type="string" offset="0"/>
-      <match value="From:" type="string" offset="0"/>
-      <match value="N#! rnews" type="string" offset="0"/>
-      <match value="Pipe to" type="string" offset="0"/>
-      <match value="Received:" type="string" offset="0"/>
-      <match value="Relay-Version:" type="string" offset="0"/>
-      <match value="Return-Path:" type="string" offset="0"/>
-      <match value="Return-path:" type="string" offset="0"/>
-      <match value="Subject: " type="string" offset="0"/>
+      <match type="string" value="#! rnews" offset="0"/>
+      <match type="string" value="Forward to" offset="0"/>
+      <match type="string" value="From:" offset="0"/>
+      <match type="string" value="N#! rnews" offset="0"/>
+      <match type="string" value="Pipe to" offset="0"/>
+      <match type="string" value="Received:" offset="0"/>
+      <match type="string" value="Relay-Version:" offset="0"/>
+      <match type="string" value="Return-Path:" offset="0"/>
+      <match type="string" value="Return-path:" offset="0"/>
+      <match type="string" value="Subject: " offset="0"/>
     </magic>
     <glob pattern="*.eml"/>
   </mime-type>
   <mime-type type="message/x-gnu-rmail">
     <comment>GNU mail message</comment>
+    <comment xml:lang="af">GNU-posboodskap</comment>
     <comment xml:lang="ar">رسالة بريد جنو</comment>
     <comment xml:lang="az">GNU poçt ismarışı</comment>
-    <comment xml:lang="be@latin">List GNU</comment>
+    <comment xml:lang="be-Latn">List GNU</comment>
     <comment xml:lang="bg">Съобщение — GNU mail</comment>
     <comment xml:lang="ca">missatge de GNU mail</comment>
     <comment xml:lang="cs">zpráva GNU mail</comment>
@@ -30796,13 +31895,14 @@
     <comment xml:lang="da">GNU-postmeddelelse</comment>
     <comment xml:lang="de">GNU-Mail-Nachricht</comment>
     <comment xml:lang="el">Μήνυμα αλληλογραφίας GNU</comment>
-    <comment xml:lang="en_GB">GNU mail message</comment>
+    <comment xml:lang="en-GB">GNU mail message</comment>
     <comment xml:lang="eo">mesaĝo de GNU mail</comment>
     <comment xml:lang="es">mensaje de correo de GNU</comment>
     <comment xml:lang="eu">GNU posta mezua</comment>
     <comment xml:lang="fi">GNU-postiviesti</comment>
     <comment xml:lang="fo">GNU mail boð</comment>
     <comment xml:lang="fr">message de courriel GNU</comment>
+    <comment xml:lang="fur">messaç di pueste GNU</comment>
     <comment xml:lang="ga">teachtaireacht r-phoist GNU</comment>
     <comment xml:lang="gl">mensaxe de correo electrónico de GNU</comment>
     <comment xml:lang="he">הודעת דואר של GNU</comment>
@@ -30824,7 +31924,7 @@
     <comment xml:lang="oc">messatge de corrièr electronic GNU</comment>
     <comment xml:lang="pl">Wiadomość pocztowa GNU</comment>
     <comment xml:lang="pt">mensagem de email GNU</comment>
-    <comment xml:lang="pt_BR">Mensagem de e-mail GNU</comment>
+    <comment xml:lang="pt-BR">Mensagem de e-mail GNU</comment>
     <comment xml:lang="ro">Mesaj GNU mail</comment>
     <comment xml:lang="ru">Почтовое сообщение GNU</comment>
     <comment xml:lang="sk">Správa GNU mail</comment>
@@ -30835,58 +31935,63 @@
     <comment xml:lang="tr">GNU posta iletisi</comment>
     <comment xml:lang="uk">поштове повідомлення GNU</comment>
     <comment xml:lang="vi">Thư điện tử của GNU</comment>
-    <comment xml:lang="zh_CN">GNU mail 信件</comment>
-    <comment xml:lang="zh_TW">GNU 郵件訊息</comment>
+    <comment xml:lang="zh-CN">GNU mail 信件</comment>
+    <comment xml:lang="zh-TW">GNU 郵件訊息</comment>
     <generic-icon name="text-x-generic"/>
     <glob pattern="RMAIL"/>
   </mime-type>
   <mime-type type="model/iges">
     <comment>IGES document</comment>
+    <comment xml:lang="af">IGES-dokument</comment>
     <comment xml:lang="ast">Documentu IGES</comment>
+    <comment xml:lang="bg">Документ — IGES</comment>
     <comment xml:lang="ca">document IGES</comment>
     <comment xml:lang="cs">dokument IGES</comment>
     <comment xml:lang="da">IGES-dokument</comment>
     <comment xml:lang="de">IGES-Dokument</comment>
-    <comment xml:lang="en_GB">IGES document</comment>
+    <comment xml:lang="en-GB">IGES document</comment>
     <comment xml:lang="es">documento IGES</comment>
     <comment xml:lang="eu">IGES dokumentua</comment>
     <comment xml:lang="fi">IGES-asiakirja</comment>
     <comment xml:lang="fr">document IGES</comment>
+    <comment xml:lang="fur">document IGES</comment>
     <comment xml:lang="ga">cáipéis IGES</comment>
     <comment xml:lang="he">מסמך IGES</comment>
     <comment xml:lang="hr">IGES dokument</comment>
     <comment xml:lang="hu">IGES dokumentum</comment>
-    <comment xml:lang="id">dokumen IGES</comment>
+    <comment xml:lang="id">Dokumen IGES</comment>
     <comment xml:lang="it">Documento IGES</comment>
     <comment xml:lang="kk">IGES құжаты</comment>
     <comment xml:lang="ko">IGES 문서</comment>
     <comment xml:lang="pl">Dokument IGES</comment>
-    <comment xml:lang="pt_BR">Documento IGES</comment>
+    <comment xml:lang="pt-BR">Documento IGES</comment>
     <comment xml:lang="ru">Документ IGES</comment>
     <comment xml:lang="sk">Dokument IGES</comment>
+    <comment xml:lang="sl">Dokument IGES</comment>
     <comment xml:lang="sr">ИГЕС документ</comment>
     <comment xml:lang="sv">IGES-dokument</comment>
     <comment xml:lang="tr">IGES belgesi</comment>
     <comment xml:lang="uk">документ IGES</comment>
-    <comment xml:lang="zh_CN">IGES 文档</comment>
-    <comment xml:lang="zh_TW">IGES 文件</comment>
+    <comment xml:lang="zh-CN">IGES 文档</comment>
+    <comment xml:lang="zh-TW">IGES 文件</comment>
     <acronym>IGES</acronym>
     <expanded-acronym>Initial Graphics Exchange Specification</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="S      1\x0a" type="string" offset="72"/>
-      <match value="S0000001\x0a" type="string" offset="72"/>
+      <match type="string" value="S      1\x0a" offset="72"/>
+      <match type="string" value="S0000001\x0a" offset="72"/>
     </magic>
     <glob pattern="*.igs"/>
     <glob pattern="*.iges"/>
   </mime-type>
   <mime-type type="model/vrml">
     <comment>VRML document</comment>
+    <comment xml:lang="af">VRML-dokument</comment>
     <comment xml:lang="ar">مستند VRML</comment>
     <comment xml:lang="ast">Documentu VRML</comment>
     <comment xml:lang="az">VRML sənədi</comment>
-    <comment xml:lang="be@latin">Dakument VRML</comment>
+    <comment xml:lang="be-Latn">Dakument VRML</comment>
     <comment xml:lang="bg">Документ — VRML</comment>
     <comment xml:lang="ca">document VRML</comment>
     <comment xml:lang="cs">dokument VRML</comment>
@@ -30894,13 +31999,14 @@
     <comment xml:lang="da">VRML-dokument</comment>
     <comment xml:lang="de">VRML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο VRML</comment>
-    <comment xml:lang="en_GB">VRML document</comment>
+    <comment xml:lang="en-GB">VRML document</comment>
     <comment xml:lang="eo">VRML-dokumento</comment>
     <comment xml:lang="es">documento VRML</comment>
     <comment xml:lang="eu">VRML dokumentua</comment>
     <comment xml:lang="fi">VRML-asiakirja</comment>
     <comment xml:lang="fo">VRML skjal</comment>
     <comment xml:lang="fr">document VRML</comment>
+    <comment xml:lang="fur">document VRML</comment>
     <comment xml:lang="ga">cáipéis VRML</comment>
     <comment xml:lang="gl">documento VRML</comment>
     <comment xml:lang="he">מסמך VRML</comment>
@@ -30921,7 +32027,7 @@
     <comment xml:lang="oc">document VRML</comment>
     <comment xml:lang="pl">Dokument VRML</comment>
     <comment xml:lang="pt">documento VRML</comment>
-    <comment xml:lang="pt_BR">Documento VRML</comment>
+    <comment xml:lang="pt-BR">Documento VRML</comment>
     <comment xml:lang="ro">Document VRML</comment>
     <comment xml:lang="ru">Документ VRML</comment>
     <comment xml:lang="sk">Dokument VRML</comment>
@@ -30932,14 +32038,14 @@
     <comment xml:lang="tr">VRML belgesi</comment>
     <comment xml:lang="uk">документ VRML</comment>
     <comment xml:lang="vi">Tài liệu VRML</comment>
-    <comment xml:lang="zh_CN">VRML 文档</comment>
-    <comment xml:lang="zh_TW">VRML 文件</comment>
+    <comment xml:lang="zh-CN">VRML 文档</comment>
+    <comment xml:lang="zh-TW">VRML 文件</comment>
     <acronym>VRML</acronym>
     <expanded-acronym>Virtual Reality Modeling Language</expanded-acronym>
     <generic-icon name="x-office-document"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="#VRML " type="string" offset="0"/>
+      <match type="string" value="#VRML " offset="0"/>
     </magic>
     <glob pattern="*.vrm"/>
     <glob pattern="*.vrml"/>
@@ -30947,9 +32053,10 @@
   </mime-type>
   <mime-type type="multipart/alternative">
     <comment>message in several formats</comment>
+    <comment xml:lang="af">boodskap in verskeie formate</comment>
     <comment xml:lang="ar">رسالة في عدة صيغ</comment>
     <comment xml:lang="az">verici formatlarında ismarış</comment>
-    <comment xml:lang="be@latin">paviedamleńnie ŭ niekalkich farmatach</comment>
+    <comment xml:lang="be-Latn">paviedamleńnie ŭ niekalkich farmatach</comment>
     <comment xml:lang="bg">Съобщение в няколко формата</comment>
     <comment xml:lang="ca">missatge en diversos formats</comment>
     <comment xml:lang="cs">zpráva v několika formátech</comment>
@@ -30957,13 +32064,14 @@
     <comment xml:lang="da">meddelelse i flere formater</comment>
     <comment xml:lang="de">Nachricht in mehreren Formaten</comment>
     <comment xml:lang="el">Μήνυμα σε διάφορες μορφές</comment>
-    <comment xml:lang="en_GB">message in several formats</comment>
+    <comment xml:lang="en-GB">message in several formats</comment>
     <comment xml:lang="eo">mesaĝo en pluraj formatoj</comment>
     <comment xml:lang="es">mensaje en varios formatos</comment>
     <comment xml:lang="eu">hainbat formatuko mezua</comment>
     <comment xml:lang="fi">viesti useissa muodoissa</comment>
     <comment xml:lang="fo">boð í fleiri sniðum</comment>
     <comment xml:lang="fr">message en formats divers</comment>
+    <comment xml:lang="fur">messaç in diviers formâts</comment>
     <comment xml:lang="ga">teachtaireacht i bhformáidí éagsúla</comment>
     <comment xml:lang="gl">mensaxe en varios formatos</comment>
     <comment xml:lang="he">הודעה במספר תבניות</comment>
@@ -30974,7 +32082,7 @@
     <comment xml:lang="it">Messaggio in diversi formati</comment>
     <comment xml:lang="ja">いくつかの形式でのメッセージ</comment>
     <comment xml:lang="kk">бірнеше пішімдегі мәлімдеме</comment>
-    <comment xml:lang="ko">여러가지 형식의 메시지</comment>
+    <comment xml:lang="ko">여러 가지 형식의 메시지</comment>
     <comment xml:lang="lt">laiškas keletu formatų</comment>
     <comment xml:lang="lv">ziņojums dažādos formātos</comment>
     <comment xml:lang="ms">Mesej dalam beberapa format</comment>
@@ -30984,7 +32092,7 @@
     <comment xml:lang="oc">messatge en formats divèrses</comment>
     <comment xml:lang="pl">Wiadomość w wielu formatach</comment>
     <comment xml:lang="pt">mensagem em vários formatos</comment>
-    <comment xml:lang="pt_BR">Mensagem em vários formatos</comment>
+    <comment xml:lang="pt-BR">Mensagem em vários formatos</comment>
     <comment xml:lang="ro">mesaj în diferite formate</comment>
     <comment xml:lang="ru">Сообщение в нескольких форматах</comment>
     <comment xml:lang="sk">Správa v niekoľkých formátoch</comment>
@@ -30995,14 +32103,15 @@
     <comment xml:lang="tr">farklı biçimlerde ileti</comment>
     <comment xml:lang="uk">повідомлення у кількох форматах</comment>
     <comment xml:lang="vi">thông điệp có vài định dạng</comment>
-    <comment xml:lang="zh_CN">各种格式的信件</comment>
-    <comment xml:lang="zh_TW">多種格式的訊息</comment>
+    <comment xml:lang="zh-CN">各种格式的信件</comment>
+    <comment xml:lang="zh-TW">多種格式的訊息</comment>
   </mime-type>
   <mime-type type="multipart/appledouble">
     <comment>Macintosh AppleDouble-encoded file</comment>
+    <comment xml:lang="af">Macintosh AppleDouble-geënkodeerde lêer</comment>
     <comment xml:lang="ar">ملف Macintosh AppleDouble مشفر</comment>
     <comment xml:lang="az">Macintosh AppleDouble-kodlanmış fayl</comment>
-    <comment xml:lang="be@latin">Fajł Macintosh, AppleDouble-zakadavany</comment>
+    <comment xml:lang="be-Latn">Fajł Macintosh, AppleDouble-zakadavany</comment>
     <comment xml:lang="bg">Файл — кодиран с Macintosh AppleDouble</comment>
     <comment xml:lang="ca">fitxer codificat AppleDouble de Macintosh</comment>
     <comment xml:lang="cs">soubor kódovaný pomocí Macintosh AppleDouble</comment>
@@ -31010,17 +32119,18 @@
     <comment xml:lang="da">Macintosh AppleDouble-kodet fil</comment>
     <comment xml:lang="de">Macintosh-Datei (AppleDouble-kodiert)</comment>
     <comment xml:lang="el">Αρχείο Macintosh κωδικοποίησης AppleDouble</comment>
-    <comment xml:lang="en_GB">Macintosh AppleDouble-encoded file</comment>
+    <comment xml:lang="en-GB">Macintosh AppleDouble-encoded file</comment>
     <comment xml:lang="eo">dosiero kodigita laŭ Macintosh AppleDouble</comment>
     <comment xml:lang="es">archivo Macintosh codificado con AppleDouble</comment>
     <comment xml:lang="eu">Macintosh AppleDouble-rekin kodetutako fitxategia</comment>
     <comment xml:lang="fi">Macintosh AppleDouble -koodattu tiedosto</comment>
     <comment xml:lang="fo">Macintosh AppleDouble-bronglað fíla</comment>
     <comment xml:lang="fr">fichier codé Macintosh AppleDouble</comment>
+    <comment xml:lang="fur">file codificât in Macintosh AppleDouble</comment>
     <comment xml:lang="ga">comhad ionchódaithe le Macintosh AppleDouble</comment>
     <comment xml:lang="gl">ficheiro de Macintosh codificado con AppleDouble</comment>
     <comment xml:lang="he">קובץ מסוג Macintosh AppleDouble-encoded</comment>
-    <comment xml:lang="hr">Macintosh AppleDouble-kodirana datoteka</comment>
+    <comment xml:lang="hr">Macintosh AppleDouble-kôdirana datoteka</comment>
     <comment xml:lang="hu">Macintosh AppleDouble kódolású fájl</comment>
     <comment xml:lang="ia">File codificate in AppleDouble de Macintosh</comment>
     <comment xml:lang="id">Berkas tersandi Macintosh AppleDouble</comment>
@@ -31037,7 +32147,7 @@
     <comment xml:lang="oc">fichièr encodat Macintosh AppleDouble</comment>
     <comment xml:lang="pl">Zakodowany w AppleDouble plik Macintosh</comment>
     <comment xml:lang="pt">ficheiro codificado em AppleDouble de Macintosh</comment>
-    <comment xml:lang="pt_BR">Arquivo do Macintosh codificado com AppleDouble</comment>
+    <comment xml:lang="pt-BR">Arquivo do Macintosh codificado com AppleDouble</comment>
     <comment xml:lang="ro">Fișier codat Macintosh AppleDouble</comment>
     <comment xml:lang="ru">Файл, закодированный Macintosh AppleDouble</comment>
     <comment xml:lang="sk">Súbor kódovaný pomocou Macintosh AppleDouble</comment>
@@ -31048,14 +32158,14 @@
     <comment xml:lang="tr">Macintosh AppleDouble-şifreli dosyası</comment>
     <comment xml:lang="uk">файл закодований Macintosh AppleDouble</comment>
     <comment xml:lang="vi">Tập tin đã mã hoá Apple-Double của Macintosh</comment>
-    <comment xml:lang="zh_CN">Macintosh AppleDouble 编码的文件</comment>
-    <comment xml:lang="zh_TW">Macintosh AppleDouble 編碼檔</comment>
+    <comment xml:lang="zh-CN">Macintosh AppleDouble 编码的文件</comment>
+    <comment xml:lang="zh-TW">Macintosh AppleDouble 編碼檔</comment>
   </mime-type>
   <mime-type type="multipart/digest">
     <comment>message digest</comment>
     <comment xml:lang="ar">خلاصة الرسالة</comment>
     <comment xml:lang="az">ismarış daycesti</comment>
-    <comment xml:lang="be@latin">digest paviedamleńniaŭ</comment>
+    <comment xml:lang="be-Latn">digest paviedamleńniaŭ</comment>
     <comment xml:lang="bg">Извадка от съобщение</comment>
     <comment xml:lang="ca">recopilació de missatges</comment>
     <comment xml:lang="cs">přehled zpráv</comment>
@@ -31063,13 +32173,14 @@
     <comment xml:lang="da">meddelelsessammendrag</comment>
     <comment xml:lang="de">Nachrichtensammlung</comment>
     <comment xml:lang="el">Περίληψη μηνύματος</comment>
-    <comment xml:lang="en_GB">message digest</comment>
+    <comment xml:lang="en-GB">message digest</comment>
     <comment xml:lang="eo">mesaĝaro</comment>
     <comment xml:lang="es">recopilación de mensajes</comment>
     <comment xml:lang="eu">mezu laburra</comment>
     <comment xml:lang="fi">viestikokoelma</comment>
     <comment xml:lang="fo">boð samandráttur</comment>
     <comment xml:lang="fr">condensé de message</comment>
+    <comment xml:lang="fur">sunt di messaç</comment>
     <comment xml:lang="ga">achoimre theachtaireachtaí</comment>
     <comment xml:lang="gl">recompilación de mensaxe</comment>
     <comment xml:lang="he">תקציר ההודעה</comment>
@@ -31090,7 +32201,7 @@
     <comment xml:lang="oc">condensé de messatge</comment>
     <comment xml:lang="pl">Wiadomość przetwarzania</comment>
     <comment xml:lang="pt">grupo de mensagens</comment>
-    <comment xml:lang="pt_BR">Resumo de mensagem</comment>
+    <comment xml:lang="pt-BR">Resumo de mensagem</comment>
     <comment xml:lang="ro">colecție mesaje email</comment>
     <comment xml:lang="ru">Дайджест сообщения</comment>
     <comment xml:lang="sk">Prehľad správ</comment>
@@ -31098,17 +32209,18 @@
     <comment xml:lang="sq">Shpërndarje mesazhesh</comment>
     <comment xml:lang="sr">гомила порука</comment>
     <comment xml:lang="sv">meddelandesamling</comment>
-    <comment xml:lang="tr">mesaj özeti</comment>
+    <comment xml:lang="tr">ileti özeti</comment>
     <comment xml:lang="uk">збірка повідомлень</comment>
     <comment xml:lang="vi">bản tóm tắt thông điệp</comment>
-    <comment xml:lang="zh_CN">信件摘要</comment>
-    <comment xml:lang="zh_TW">訊息摘要</comment>
+    <comment xml:lang="zh-CN">信件摘要</comment>
+    <comment xml:lang="zh-TW">訊息摘要</comment>
   </mime-type>
   <mime-type type="multipart/encrypted">
     <comment>encrypted message</comment>
+    <comment xml:lang="af">geënkripteerde boodskap</comment>
     <comment xml:lang="ar">رسالة مشفرة</comment>
     <comment xml:lang="az">şifrələnmiş ismarış</comment>
-    <comment xml:lang="be@latin">zašyfravanaje paviedamleńnie</comment>
+    <comment xml:lang="be-Latn">zašyfravanaje paviedamleńnie</comment>
     <comment xml:lang="bg">Шифрирано съобщение</comment>
     <comment xml:lang="ca">missatge xifrat</comment>
     <comment xml:lang="cs">zašifrovaná zpráva</comment>
@@ -31116,13 +32228,14 @@
     <comment xml:lang="da">krypteret meddelelse</comment>
     <comment xml:lang="de">Verschlüsselte Nachricht</comment>
     <comment xml:lang="el">Κρυπτογραφημένο μήνυμα</comment>
-    <comment xml:lang="en_GB">encrypted message</comment>
+    <comment xml:lang="en-GB">encrypted message</comment>
     <comment xml:lang="eo">ĉifrita mesaĝo</comment>
     <comment xml:lang="es">mensaje cifrado</comment>
-    <comment xml:lang="eu">mezu enkriptatua</comment>
+    <comment xml:lang="eu">zifratutako mezua</comment>
     <comment xml:lang="fi">salattu viesti</comment>
     <comment xml:lang="fo">bronglað boð</comment>
     <comment xml:lang="fr">message chiffré</comment>
+    <comment xml:lang="fur">messaç cifrât</comment>
     <comment xml:lang="ga">teachtaireacht chriptithe</comment>
     <comment xml:lang="gl">mensaxe cifrado</comment>
     <comment xml:lang="he">הודעה מוצפנת</comment>
@@ -31143,7 +32256,7 @@
     <comment xml:lang="oc">messatge chifrat</comment>
     <comment xml:lang="pl">Wiadomość zaszyfrowana</comment>
     <comment xml:lang="pt">mensagem encriptada</comment>
-    <comment xml:lang="pt_BR">Mensagem criptografada</comment>
+    <comment xml:lang="pt-BR">Mensagem criptografada</comment>
     <comment xml:lang="ro">mesaj criptat</comment>
     <comment xml:lang="ru">Зашифрованное сообщение</comment>
     <comment xml:lang="sk">Zašifrovaná správa</comment>
@@ -31151,30 +32264,32 @@
     <comment xml:lang="sq">Mesazh i kriptuar</comment>
     <comment xml:lang="sr">шифрована порука</comment>
     <comment xml:lang="sv">krypterat meddelande</comment>
-    <comment xml:lang="tr">şifrelenmiş mesaj</comment>
+    <comment xml:lang="tr">şifrelenmiş ileti</comment>
     <comment xml:lang="uk">шифроване повідомлення</comment>
     <comment xml:lang="vi">thông điệp đã mật mã</comment>
-    <comment xml:lang="zh_CN">加密信件</comment>
-    <comment xml:lang="zh_TW">加密訊息</comment>
+    <comment xml:lang="zh-CN">加密信件</comment>
+    <comment xml:lang="zh-TW">加密訊息</comment>
   </mime-type>
   <mime-type type="multipart/mixed">
     <comment>compound documents</comment>
+    <comment xml:lang="af">saamgestelde dokumente</comment>
     <comment xml:lang="ar">مستندات مركبة</comment>
     <comment xml:lang="ast">documentos compuestos</comment>
-    <comment xml:lang="be@latin">składanyja dakumenty</comment>
+    <comment xml:lang="be-Latn">składanyja dakumenty</comment>
     <comment xml:lang="bg">Съставни документи</comment>
     <comment xml:lang="ca">documents compostos</comment>
     <comment xml:lang="cs">složené dokumenty</comment>
     <comment xml:lang="da">sammensatte dokumenter</comment>
     <comment xml:lang="de">Verbunddokumente</comment>
     <comment xml:lang="el">Σύνθετα έγγραφα</comment>
-    <comment xml:lang="en_GB">compound documents</comment>
+    <comment xml:lang="en-GB">compound documents</comment>
     <comment xml:lang="eo">parentezaj dokumentoj</comment>
     <comment xml:lang="es">documentos compuestos</comment>
     <comment xml:lang="eu">konposatutako dokumentuak</comment>
     <comment xml:lang="fi">yhdisteasiakirjat</comment>
     <comment xml:lang="fo">samansett skjøl</comment>
     <comment xml:lang="fr">documents composés</comment>
+    <comment xml:lang="fur">documents composcj</comment>
     <comment xml:lang="ga">cáipéisí comhshuite</comment>
     <comment xml:lang="gl">documentos compostos</comment>
     <comment xml:lang="he">מסמכים מורכבים</comment>
@@ -31195,7 +32310,7 @@
     <comment xml:lang="oc">documents compausats</comment>
     <comment xml:lang="pl">Dokumenty złożone</comment>
     <comment xml:lang="pt">documentos compostos</comment>
-    <comment xml:lang="pt_BR">Documentos compostos</comment>
+    <comment xml:lang="pt-BR">Documentos compostos</comment>
     <comment xml:lang="ro">documente compuse</comment>
     <comment xml:lang="ru">Составные документы</comment>
     <comment xml:lang="sk">Zložené dokumenty</comment>
@@ -31203,18 +32318,19 @@
     <comment xml:lang="sq">dokumente të përbërë</comment>
     <comment xml:lang="sr">сједињени документи</comment>
     <comment xml:lang="sv">sammansatta dokument</comment>
-    <comment xml:lang="tr">birleşik belgeleri</comment>
+    <comment xml:lang="tr">bileşik belgeler</comment>
     <comment xml:lang="uk">складні документи</comment>
     <comment xml:lang="vi">tài liệu ghép</comment>
-    <comment xml:lang="zh_CN">组合文档</comment>
-    <comment xml:lang="zh_TW">複合文件</comment>
+    <comment xml:lang="zh-CN">组合文档</comment>
+    <comment xml:lang="zh-TW">複合文件</comment>
   </mime-type>
   <mime-type type="multipart/related">
     <comment>compound document</comment>
+    <comment xml:lang="af">saamgestelde dokument</comment>
     <comment xml:lang="ar">مستند مركب</comment>
     <comment xml:lang="ast">documentu compuestu</comment>
     <comment xml:lang="az">birləşik sənəd</comment>
-    <comment xml:lang="be@latin">składany dakument</comment>
+    <comment xml:lang="be-Latn">składany dakument</comment>
     <comment xml:lang="bg">Съставен документ</comment>
     <comment xml:lang="ca">document compost</comment>
     <comment xml:lang="cs">složený dokument</comment>
@@ -31222,13 +32338,14 @@
     <comment xml:lang="da">sammensat dokument</comment>
     <comment xml:lang="de">Verbunddokument</comment>
     <comment xml:lang="el">Σύνθετο έγγραφο</comment>
-    <comment xml:lang="en_GB">compound document</comment>
+    <comment xml:lang="en-GB">compound document</comment>
     <comment xml:lang="eo">parenteza dokumento</comment>
     <comment xml:lang="es">documento compuesto</comment>
     <comment xml:lang="eu">konposatutako dokumentua</comment>
     <comment xml:lang="fi">yhdisteasiakirja</comment>
     <comment xml:lang="fo">samansett skjal</comment>
     <comment xml:lang="fr">document composé</comment>
+    <comment xml:lang="fur">document compost</comment>
     <comment xml:lang="ga">cáipéis comhshuite</comment>
     <comment xml:lang="gl">documento composto</comment>
     <comment xml:lang="he">מסמך מורכב</comment>
@@ -31249,7 +32366,7 @@
     <comment xml:lang="oc">document compausat</comment>
     <comment xml:lang="pl">Dokument złożony</comment>
     <comment xml:lang="pt">documento composto</comment>
-    <comment xml:lang="pt_BR">Documento composto</comment>
+    <comment xml:lang="pt-BR">Documento composto</comment>
     <comment xml:lang="ro">document compus</comment>
     <comment xml:lang="ru">Составной документ</comment>
     <comment xml:lang="sk">Zložený dokument</comment>
@@ -31260,14 +32377,14 @@
     <comment xml:lang="tr">bileşik belge</comment>
     <comment xml:lang="uk">складний документ</comment>
     <comment xml:lang="vi">tài liệu ghép</comment>
-    <comment xml:lang="zh_CN">组合文档</comment>
-    <comment xml:lang="zh_TW">複合文件</comment>
+    <comment xml:lang="zh-CN">组合文档</comment>
+    <comment xml:lang="zh-TW">複合文件</comment>
   </mime-type>
   <mime-type type="multipart/report">
     <comment>mail system report</comment>
     <comment xml:lang="ar">تقرير نظام البريد</comment>
     <comment xml:lang="az">poçt sistemi raportu</comment>
-    <comment xml:lang="be@latin">rapart paštovaj systemy</comment>
+    <comment xml:lang="be-Latn">rapart paštovaj systemy</comment>
     <comment xml:lang="bg">Отчет за пощенската система</comment>
     <comment xml:lang="ca">informe de sistema de correu</comment>
     <comment xml:lang="cs">zpráva poštovního systému</comment>
@@ -31275,13 +32392,14 @@
     <comment xml:lang="da">postsystemrapport</comment>
     <comment xml:lang="de">E-Mail-Systembericht</comment>
     <comment xml:lang="el">Αναφορά συστήματος ηλ. ταχυδρομείου</comment>
-    <comment xml:lang="en_GB">mail system report</comment>
+    <comment xml:lang="en-GB">mail system report</comment>
     <comment xml:lang="eo">raporto de retpoŝta sistemo</comment>
     <comment xml:lang="es">informe del sistema de correo</comment>
     <comment xml:lang="eu">posta sistemako txostena</comment>
     <comment xml:lang="fi">viestijärjestelmän ilmoitus</comment>
     <comment xml:lang="fo">postkervisfrásøgn</comment>
     <comment xml:lang="fr">rapport système de courriels</comment>
+    <comment xml:lang="fur">rapuart di sisteme de pueste</comment>
     <comment xml:lang="ga">tuairisc chórais r-phoist</comment>
     <comment xml:lang="gl">informe do sistema de correo</comment>
     <comment xml:lang="he">דו״ח של מערכת הדואר</comment>
@@ -31302,7 +32420,7 @@
     <comment xml:lang="oc">rapòrt sistèma de corrièrs electronics</comment>
     <comment xml:lang="pl">Raport systemu pocztowego</comment>
     <comment xml:lang="pt">relatório de sistema de email</comment>
-    <comment xml:lang="pt_BR">Relatório do sistema de correspondência</comment>
+    <comment xml:lang="pt-BR">Relatório do sistema de correspondência</comment>
     <comment xml:lang="ro">raport sistem email</comment>
     <comment xml:lang="ru">Отчёт почтовой системы</comment>
     <comment xml:lang="sk">Správa poštového systému</comment>
@@ -31313,14 +32431,15 @@
     <comment xml:lang="tr">posta sistem raporu</comment>
     <comment xml:lang="uk">звіт поштової системи</comment>
     <comment xml:lang="vi">thông báo hệ thống thư</comment>
-    <comment xml:lang="zh_CN">邮件系统报告</comment>
-    <comment xml:lang="zh_TW">郵件系統回報</comment>
+    <comment xml:lang="zh-CN">邮件系统报告</comment>
+    <comment xml:lang="zh-TW">郵件系統回報</comment>
   </mime-type>
   <mime-type type="multipart/signed">
     <comment>signed message</comment>
+    <comment xml:lang="af">getekende boodskap</comment>
     <comment xml:lang="ar">رسالة موقّعة</comment>
     <comment xml:lang="az">imzalanmış ismarış</comment>
-    <comment xml:lang="be@latin">padpisanaje paviedamleńnie</comment>
+    <comment xml:lang="be-Latn">padpisanaje paviedamleńnie</comment>
     <comment xml:lang="bg">Подписано съобщение</comment>
     <comment xml:lang="ca">missatge signat</comment>
     <comment xml:lang="cs">podepsaná zpráva</comment>
@@ -31328,13 +32447,14 @@
     <comment xml:lang="da">signeret meddelelse</comment>
     <comment xml:lang="de">Signierte Nachricht</comment>
     <comment xml:lang="el">Υπογεγραμμένο μήνυμα</comment>
-    <comment xml:lang="en_GB">signed message</comment>
+    <comment xml:lang="en-GB">signed message</comment>
     <comment xml:lang="eo">pruvita mesaĝo</comment>
     <comment xml:lang="es">mensaje firmado</comment>
     <comment xml:lang="eu">sinatutako mezua</comment>
     <comment xml:lang="fi">allekirjoitettu viesti</comment>
     <comment xml:lang="fo">undirskrivað boð</comment>
     <comment xml:lang="fr">message signé</comment>
+    <comment xml:lang="fur">messaç firmât</comment>
     <comment xml:lang="ga">teachtaireacht sínithe</comment>
     <comment xml:lang="gl">mensaxe firmado</comment>
     <comment xml:lang="he">הודעה חתומה</comment>
@@ -31355,7 +32475,7 @@
     <comment xml:lang="oc">messatge signat</comment>
     <comment xml:lang="pl">Podpisana wiadomość</comment>
     <comment xml:lang="pt">mensagem assinada</comment>
-    <comment xml:lang="pt_BR">Mensagem assinada</comment>
+    <comment xml:lang="pt-BR">Mensagem assinada</comment>
     <comment xml:lang="ro">mesaj semnat</comment>
     <comment xml:lang="ru">Подписанное сообщение</comment>
     <comment xml:lang="sk">Podpísaná správa</comment>
@@ -31366,26 +32486,27 @@
     <comment xml:lang="tr">imzalı ileti</comment>
     <comment xml:lang="uk">підписане повідомлення</comment>
     <comment xml:lang="vi">thông điệp đã ký</comment>
-    <comment xml:lang="zh_CN">签名信件</comment>
-    <comment xml:lang="zh_TW">簽署的訊息</comment>
+    <comment xml:lang="zh-CN">签名信件</comment>
+    <comment xml:lang="zh-TW">已簽署的訊息</comment>
   </mime-type>
   <mime-type type="multipart/x-mixed-replace">
     <comment>stream of data (server push)</comment>
     <comment xml:lang="ar">دفق بيانات (دفع خادم)</comment>
-    <comment xml:lang="be@latin">płyń źviestak (ad servera)</comment>
-    <comment xml:lang="bg">Поток от данни, от страна на сървър</comment>
+    <comment xml:lang="be-Latn">płyń źviestak (ad servera)</comment>
+    <comment xml:lang="bg">Поток от данни — пратени от сървър</comment>
     <comment xml:lang="ca">flux de dades (enviat pel servidor)</comment>
     <comment xml:lang="cs">proud dat (posílaný serverem)</comment>
     <comment xml:lang="da">datastrøm (serverskubbet)</comment>
     <comment xml:lang="de">Datenstrom (Server-Push)</comment>
     <comment xml:lang="el">Ροή δεδομένων (στελλόμενα από διακομιστή)</comment>
-    <comment xml:lang="en_GB">stream of data (server push)</comment>
+    <comment xml:lang="en-GB">stream of data (server push)</comment>
     <comment xml:lang="eo">datumstrio (puŝata per servilo)</comment>
     <comment xml:lang="es">flujo de datos (por iniciativa del servidor)</comment>
     <comment xml:lang="eu">datu-korrontea (zerbitzari igortzailea)</comment>
     <comment xml:lang="fi">tietovirta (palvelin työntää)</comment>
     <comment xml:lang="fo">streymur av dáta (ambætara skump)</comment>
     <comment xml:lang="fr">flux de données (émis par le serveur)</comment>
+    <comment xml:lang="fur">flus di dâts (pe iniziative dal servidôr)</comment>
     <comment xml:lang="ga">sruth sonraí (brú freastalaí)</comment>
     <comment xml:lang="gl">fluxo de datos (por iniciativa do servidor)</comment>
     <comment xml:lang="he">מידע בזרימה (דחיפה ע״י השרת)</comment>
@@ -31406,7 +32527,7 @@
     <comment xml:lang="oc">flux de donadas (emés pel servidor)</comment>
     <comment xml:lang="pl">Strumień danych (wymuszenie serwera)</comment>
     <comment xml:lang="pt">fluxo de dados (empurrados pelo servidor)</comment>
-    <comment xml:lang="pt_BR">Fluxo de dados (por iniciativa do servidor)</comment>
+    <comment xml:lang="pt-BR">Fluxo de dados (por iniciativa do servidor)</comment>
     <comment xml:lang="ro">flux de date (de la server)</comment>
     <comment xml:lang="ru">Поток данных (server push)</comment>
     <comment xml:lang="sk">Prúd dát (posielaný serverom)</comment>
@@ -31417,26 +32538,28 @@
     <comment xml:lang="tr">veri akışı (sunucudan gönderilen)</comment>
     <comment xml:lang="uk">потік даних (від сервера)</comment>
     <comment xml:lang="vi">luồng dữ liệu (trình phục vụ đẩy)</comment>
-    <comment xml:lang="zh_CN">数据流（服务器推送）</comment>
-    <comment xml:lang="zh_TW">資料串流 (server push)</comment>
+    <comment xml:lang="zh-CN">数据流（服务器推送）</comment>
+    <comment xml:lang="zh-TW">資料串流 (server push)</comment>
   </mime-type>
   <mime-type type="text/calendar">
     <comment>VCS/ICS calendar</comment>
+    <comment xml:lang="af">VCS/ICS-kalender</comment>
     <comment xml:lang="ar">سجل VCS/ICS</comment>
-    <comment xml:lang="be@latin">Kalandar VCS/ICS</comment>
+    <comment xml:lang="be-Latn">Kalandar VCS/ICS</comment>
     <comment xml:lang="bg">Календар — VCS/ICS</comment>
     <comment xml:lang="ca">calendari VCS/ICS</comment>
     <comment xml:lang="cs">kalendář VCS/ICS</comment>
     <comment xml:lang="da">VCS/ICS-kalender</comment>
     <comment xml:lang="de">VCS/ICS-Kalender</comment>
     <comment xml:lang="el">Ημερολόγιο VCS/ICS</comment>
-    <comment xml:lang="en_GB">VCS/ICS calendar</comment>
+    <comment xml:lang="en-GB">VCS/ICS calendar</comment>
     <comment xml:lang="eo">VCS/ICS-kalendaro</comment>
     <comment xml:lang="es">calendario VCS/ICS</comment>
     <comment xml:lang="eu">VCS/ICS egutegia</comment>
     <comment xml:lang="fi">VCS/ICS-kalenteri</comment>
     <comment xml:lang="fo">VCS/ICS kalendari</comment>
     <comment xml:lang="fr">calendrier VCS/ICS</comment>
+    <comment xml:lang="fur">calendari VCS/ICS</comment>
     <comment xml:lang="ga">féilire VCS/ICS</comment>
     <comment xml:lang="gl">Calendario VCS/ICS</comment>
     <comment xml:lang="he">לוח שנה VCS/ICS</comment>
@@ -31456,7 +32579,7 @@
     <comment xml:lang="oc">calendièr VCS/ICS</comment>
     <comment xml:lang="pl">Kalendarz VCS/ICS</comment>
     <comment xml:lang="pt">calendário VCS/ICS</comment>
-    <comment xml:lang="pt_BR">Calendário VCS/ICS</comment>
+    <comment xml:lang="pt-BR">Calendário VCS/ICS</comment>
     <comment xml:lang="ro">Calendar VCS/ICS</comment>
     <comment xml:lang="ru">Календарь VCS/ICS</comment>
     <comment xml:lang="sk">Kalendár VCS/ICS</comment>
@@ -31467,37 +32590,39 @@
     <comment xml:lang="tr">VCS/ICS takvimi</comment>
     <comment xml:lang="uk">календар VCS/ICS</comment>
     <comment xml:lang="vi">Lịch VCS/ICS</comment>
-    <comment xml:lang="zh_CN">VCS/ICS 日历</comment>
-    <comment xml:lang="zh_TW">VCS/ICS 行事曆</comment>
+    <comment xml:lang="zh-CN">VCS/ICS 日历</comment>
+    <comment xml:lang="zh-TW">VCS/ICS 行事曆</comment>
     <acronym>VCS/ICS</acronym>
     <expanded-acronym>vCalendar/iCalendar</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <alias type="text/x-vcalendar"/>
     <alias type="application/ics"/>
     <magic priority="50">
-      <match value="BEGIN:VCALENDAR" type="string" offset="0"/>
-      <match value="begin:vcalendar" type="string" offset="0"/>
+      <match type="string" value="BEGIN:VCALENDAR" offset="0"/>
+      <match type="string" value="begin:vcalendar" offset="0"/>
     </magic>
     <glob pattern="*.vcs"/>
     <glob pattern="*.ics"/>
   </mime-type>
   <mime-type type="text/css">
     <comment>CSS stylesheet</comment>
+    <comment xml:lang="af">CSS-stylblad</comment>
     <comment xml:lang="ar">نمط CSS</comment>
-    <comment xml:lang="be@latin">Arkuš stylaŭ CSS</comment>
+    <comment xml:lang="be-Latn">Arkuš stylaŭ CSS</comment>
     <comment xml:lang="bg">Стилове — CSS</comment>
     <comment xml:lang="ca">llista d'estil CSS</comment>
     <comment xml:lang="cs">stylopis CSS</comment>
     <comment xml:lang="da">CSS-stilark</comment>
     <comment xml:lang="de">CSS-Stilvorlage</comment>
     <comment xml:lang="el">Φύλλο στυλ CSS</comment>
-    <comment xml:lang="en_GB">CSS stylesheet</comment>
+    <comment xml:lang="en-GB">CSS stylesheet</comment>
     <comment xml:lang="eo">CSS-stilfolio</comment>
     <comment xml:lang="es">hoja de estilos CSS</comment>
     <comment xml:lang="eu">CSS estilo-orria</comment>
     <comment xml:lang="fi">CSS-tyylitiedosto</comment>
     <comment xml:lang="fo">CSS sniðark</comment>
     <comment xml:lang="fr">feuille de style CSS</comment>
+    <comment xml:lang="fur">sfuei di stîl CSS</comment>
     <comment xml:lang="ga">stílbhileog CSS</comment>
     <comment xml:lang="gl">folla de estilos CSS</comment>
     <comment xml:lang="he">גליון עיצוב CSS</comment>
@@ -31518,7 +32643,7 @@
     <comment xml:lang="oc">fuèlh d'estil CSS</comment>
     <comment xml:lang="pl">Arkusz stylów CSS</comment>
     <comment xml:lang="pt">folha de estilos CSS</comment>
-    <comment xml:lang="pt_BR">Folha de estilo CSS</comment>
+    <comment xml:lang="pt-BR">Folha de estilo CSS</comment>
     <comment xml:lang="ro">Pagină de stil CSS</comment>
     <comment xml:lang="ru">Таблица стилей CSS</comment>
     <comment xml:lang="sk">Štýly CSS</comment>
@@ -31529,8 +32654,8 @@
     <comment xml:lang="tr">CSS stil kağıdı</comment>
     <comment xml:lang="uk">таблиця стилів CSS</comment>
     <comment xml:lang="vi">Tờ kiểu dáng CSS</comment>
-    <comment xml:lang="zh_CN">CSS 样式表</comment>
-    <comment xml:lang="zh_TW">CSS 樣式表</comment>
+    <comment xml:lang="zh-CN">CSS 样式表</comment>
+    <comment xml:lang="zh-TW">CSS 樣式表</comment>
     <acronym>CSS</acronym>
     <expanded-acronym>Cascading Style Sheets</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -31538,21 +32663,23 @@
   </mime-type>
   <mime-type type="text/vcard">
     <comment>electronic business card</comment>
+    <comment xml:lang="af">elektroniese beskigheidskaartjie</comment>
     <comment xml:lang="ar">بطاقة أعمال إلكترونية</comment>
-    <comment xml:lang="be@latin">elektronnaja biznes-kartka</comment>
+    <comment xml:lang="be-Latn">elektronnaja biznes-kartka</comment>
     <comment xml:lang="bg">Електронна визитна картичка</comment>
     <comment xml:lang="ca">targeta de visita electrònica</comment>
     <comment xml:lang="cs">elektronická navštívenka</comment>
     <comment xml:lang="da">elektronisk visitkort</comment>
     <comment xml:lang="de">Elektronische Visitenkarte</comment>
     <comment xml:lang="el">Ηλεκτρονική επαγγελματική κάρτα</comment>
-    <comment xml:lang="en_GB">electronic business card</comment>
+    <comment xml:lang="en-GB">electronic business card</comment>
     <comment xml:lang="eo">elektronika vizitkarto</comment>
     <comment xml:lang="es">tarjeta de visita electrónica</comment>
     <comment xml:lang="eu">enpresako txartel elektronikoa</comment>
     <comment xml:lang="fi">sähköinen käyntikortti</comment>
     <comment xml:lang="fo">elektroniskt handilskort</comment>
     <comment xml:lang="fr">carte de visite électronique</comment>
+    <comment xml:lang="fur">biliet di visite eletronic</comment>
     <comment xml:lang="ga">cárta gnó leictreonach</comment>
     <comment xml:lang="gl">tarxeta de negocio electrónica</comment>
     <comment xml:lang="he">כרטיס ביקור אלקטרוני</comment>
@@ -31571,7 +32698,7 @@
     <comment xml:lang="oc">carta de visita electronica</comment>
     <comment xml:lang="pl">Wizytówka elektroniczna</comment>
     <comment xml:lang="pt">cartão de visita eletrónico</comment>
-    <comment xml:lang="pt_BR">Cartão de visitas eletrônico</comment>
+    <comment xml:lang="pt-BR">Cartão de visitas eletrônico</comment>
     <comment xml:lang="ro">carte de vizită electronică</comment>
     <comment xml:lang="ru">Электронная визитная карточка</comment>
     <comment xml:lang="sk">Elektronická vizitka</comment>
@@ -31582,14 +32709,14 @@
     <comment xml:lang="tr">elektronik iş kartı</comment>
     <comment xml:lang="uk">електронна бізнес-картка</comment>
     <comment xml:lang="vi">danh thiếp điện tử</comment>
-    <comment xml:lang="zh_CN">电子商务卡</comment>
-    <comment xml:lang="zh_TW">電子商務名片</comment>
+    <comment xml:lang="zh-CN">电子商务卡</comment>
+    <comment xml:lang="zh-TW">電子商務名片</comment>
     <alias type="text/directory"/>
     <alias type="text/x-vcard"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="BEGIN:VCARD" type="string" offset="0"/>
-      <match value="begin:vcard" type="string" offset="0"/>
+      <match type="string" value="BEGIN:VCARD" offset="0"/>
+      <match type="string" value="begin:vcard" offset="0"/>
     </magic>
     <glob pattern="*.vcard"/>
     <glob pattern="*.vcf"/>
@@ -31598,17 +32725,20 @@
   </mime-type>
   <mime-type type="text/turtle">
     <comment>Turtle document</comment>
+    <comment xml:lang="af">Turtle-dokument</comment>
     <comment xml:lang="ast">Documentu Turtle</comment>
+    <comment xml:lang="bg">Документ — Turtle</comment>
     <comment xml:lang="ca">document Turtle</comment>
     <comment xml:lang="cs">dokument Turtle</comment>
     <comment xml:lang="da">Turtle-dokument</comment>
     <comment xml:lang="de">Turtle-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Turtle</comment>
-    <comment xml:lang="en_GB">Turtle document</comment>
+    <comment xml:lang="en-GB">Turtle document</comment>
     <comment xml:lang="es">documento de Turtle</comment>
     <comment xml:lang="eu">Turtle dokumentua</comment>
     <comment xml:lang="fi">Turtle-asiakirja</comment>
     <comment xml:lang="fr">document Turtle</comment>
+    <comment xml:lang="fur">document Turtle</comment>
     <comment xml:lang="ga">cáipéis Turtle</comment>
     <comment xml:lang="he">מסמך Turtle</comment>
     <comment xml:lang="hr">Turtle dokument</comment>
@@ -31621,43 +32751,46 @@
     <comment xml:lang="oc">document Turtle</comment>
     <comment xml:lang="pl">Dokument Turtle</comment>
     <comment xml:lang="pt">documento Turtle</comment>
-    <comment xml:lang="pt_BR">Documento Turtle</comment>
+    <comment xml:lang="pt-BR">Documento Turtle</comment>
     <comment xml:lang="ru">Документ Turtle</comment>
     <comment xml:lang="sk">Dokument Turtle</comment>
+    <comment xml:lang="sl">Dokument Turtle</comment>
     <comment xml:lang="sr">Тартл документ</comment>
     <comment xml:lang="sv">Turtle-dokument</comment>
     <comment xml:lang="tr">Turtle belgesi</comment>
     <comment xml:lang="uk">документ Turtle</comment>
-    <comment xml:lang="zh_CN">Turtle 文档</comment>
-    <comment xml:lang="zh_TW">Turtle 文件</comment>
+    <comment xml:lang="zh-CN">Turtle 文档</comment>
+    <comment xml:lang="zh-TW">Turtle 文件</comment>
     <glob pattern="*.ttl"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="text/x-txt2tags">
     <comment>txt2tags document</comment>
+    <comment xml:lang="af">txt2tags-dokument</comment>
     <comment xml:lang="ar">مستند txt2tags</comment>
     <comment xml:lang="ast">Documentu txt2tags</comment>
-    <comment xml:lang="be@latin">dakument txt2tags</comment>
+    <comment xml:lang="be-Latn">dakument txt2tags</comment>
     <comment xml:lang="bg">Документ — txt2tags</comment>
     <comment xml:lang="ca">document txt2tags</comment>
     <comment xml:lang="cs">dokument txt2tags</comment>
     <comment xml:lang="da">txt2tags-dokument</comment>
     <comment xml:lang="de">txt2tags-Dokument</comment>
     <comment xml:lang="el">Έγγραφο txt2tags</comment>
-    <comment xml:lang="en_GB">txt2tags document</comment>
+    <comment xml:lang="en-GB">txt2tags document</comment>
     <comment xml:lang="eo">txt2tags-dokumento</comment>
     <comment xml:lang="es">documento txt2tags</comment>
     <comment xml:lang="eu">txt2tags dokumentua</comment>
     <comment xml:lang="fi">txt2tags-asiakirja</comment>
     <comment xml:lang="fo">txt2tags skjal</comment>
     <comment xml:lang="fr">document txt2tags</comment>
+    <comment xml:lang="fur">document txt2tags</comment>
     <comment xml:lang="ga">cáipéis txt2tags</comment>
     <comment xml:lang="gl">documento txt2tags</comment>
     <comment xml:lang="he">מסמך txt2tags</comment>
     <comment xml:lang="hr">txt2tags dokument</comment>
     <comment xml:lang="hu">txt2tags dokumentum</comment>
     <comment xml:lang="ia">Documento txt2tags</comment>
-    <comment xml:lang="id">Dokumen txt2tags</comment>
+    <comment xml:lang="id">dokumen txt2tags</comment>
     <comment xml:lang="it">Documento txt2tags</comment>
     <comment xml:lang="ja">txt2tags ドキュメント</comment>
     <comment xml:lang="ka">txt2tags დოკუმენტი</comment>
@@ -31671,7 +32804,7 @@
     <comment xml:lang="oc">document txt2tags</comment>
     <comment xml:lang="pl">Dokument txt2tags</comment>
     <comment xml:lang="pt">documento txt2tags</comment>
-    <comment xml:lang="pt_BR">Documento do txt2tags</comment>
+    <comment xml:lang="pt-BR">Documento do txt2tags</comment>
     <comment xml:lang="ro">document txt2tags</comment>
     <comment xml:lang="ru">Документ txt2tags</comment>
     <comment xml:lang="sk">Dokument txt2tags</comment>
@@ -31682,29 +32815,31 @@
     <comment xml:lang="tr">txt2tags belgesi</comment>
     <comment xml:lang="uk">документ txt2tags</comment>
     <comment xml:lang="vi">tài liệu txt2tags</comment>
-    <comment xml:lang="zh_CN">txt2tags 文档</comment>
-    <comment xml:lang="zh_TW">txt2tags 文件</comment>
+    <comment xml:lang="zh-CN">txt2tags 文档</comment>
+    <comment xml:lang="zh-TW">txt2tags 文件</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="60">
-      <match value="%!postproc" type="string" offset="0"/>
-      <match value="%!encoding" type="string" offset="0"/>
+      <match type="string" value="%!postproc" offset="0"/>
+      <match type="string" value="%!encoding" offset="0"/>
     </magic>
     <glob pattern="*.t2t"/>
   </mime-type>
   <mime-type type="text/x-verilog">
     <comment>Verilog source code</comment>
+    <comment xml:lang="af">Verilog-bronkode</comment>
     <comment xml:lang="bg">Изходен код — Verilog</comment>
     <comment xml:lang="ca">codi font en Verilog</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Verilog</comment>
     <comment xml:lang="da">Verilog-kildekode</comment>
     <comment xml:lang="de">Verilog-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Verilog</comment>
-    <comment xml:lang="en_GB">Verilog source code</comment>
+    <comment xml:lang="en-GB">Verilog source code</comment>
     <comment xml:lang="eo">Verilog-fontkodo</comment>
     <comment xml:lang="es">código fuente en Verilog</comment>
     <comment xml:lang="eu">Verilog iturburu-kodea</comment>
     <comment xml:lang="fi">Verilog-lähdekoodi</comment>
     <comment xml:lang="fr">code source Verilog</comment>
+    <comment xml:lang="fur">codiç sorzint Verilog</comment>
     <comment xml:lang="ga">cód foinseach Verilog</comment>
     <comment xml:lang="gl">código fonte en Verilog</comment>
     <comment xml:lang="he">קוד מקור של </comment>
@@ -31721,7 +32856,7 @@
     <comment xml:lang="oc">còde font Verilog</comment>
     <comment xml:lang="pl">Kod źródłowy Verilog</comment>
     <comment xml:lang="pt">código origem Verilog</comment>
-    <comment xml:lang="pt_BR">Código-fonte Verilog</comment>
+    <comment xml:lang="pt-BR">Código-fonte Verilog</comment>
     <comment xml:lang="ru">Исходный код Verilog</comment>
     <comment xml:lang="sk">Zdrojový kód Verilog</comment>
     <comment xml:lang="sl">Datoteka izvorne kode Verilog</comment>
@@ -31729,24 +32864,25 @@
     <comment xml:lang="sv">Verilog-källkod</comment>
     <comment xml:lang="tr">Verilog kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Verilog</comment>
-    <comment xml:lang="zh_CN">Verilog 源代码</comment>
-    <comment xml:lang="zh_TW">Verilog 源碼</comment>
+    <comment xml:lang="zh-CN">Verilog 源代码</comment>
+    <comment xml:lang="zh-TW">Verilog 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.v"/>
   </mime-type>
   <mime-type type="text/x-svhdr">
     <comment>SystemVerilog header</comment>
     <comment xml:lang="bg">Заглавен файл — SystemVerilog</comment>
-    <comment xml:lang="ca">capçalera de SystemVerilog</comment>
+    <comment xml:lang="ca">capçalera en SystemVerilog</comment>
     <comment xml:lang="cs">záhlaví SystemVerilog</comment>
     <comment xml:lang="da">SystemVerilog-teksthoved</comment>
     <comment xml:lang="de">SystemVerilog-Header</comment>
     <comment xml:lang="el">Κεφαλίδα SystemVerilog</comment>
-    <comment xml:lang="en_GB">SystemVerilog header</comment>
+    <comment xml:lang="en-GB">SystemVerilog header</comment>
     <comment xml:lang="es">cabeceras de SystemVerilog</comment>
     <comment xml:lang="eu">SystemVerilog goiburua</comment>
     <comment xml:lang="fi">SystemVerilog-otsake</comment>
     <comment xml:lang="fr">en-tête </comment>
+    <comment xml:lang="fur">intestazion SystemVerilog</comment>
     <comment xml:lang="ga">ceanntásc SystemVerilog</comment>
     <comment xml:lang="gl">Cabeceiras de SystemVerilog</comment>
     <comment xml:lang="he">כותרת SystemVerilog</comment>
@@ -31763,7 +32899,7 @@
     <comment xml:lang="oc">entèsta SystemVerilog</comment>
     <comment xml:lang="pl">Nagłówek SystemVerilog</comment>
     <comment xml:lang="pt">cabeçalho SystemVerilog</comment>
-    <comment xml:lang="pt_BR">Cabeçalho de SystemVerilog</comment>
+    <comment xml:lang="pt-BR">Cabeçalho de SystemVerilog</comment>
     <comment xml:lang="ru">Заголовочный файл SystemVerilog</comment>
     <comment xml:lang="sk">Hlavičky SystemVerilog</comment>
     <comment xml:lang="sl">Datoteka glave SystemVerilog</comment>
@@ -31771,24 +32907,26 @@
     <comment xml:lang="sv">SystemVerilog-headerfil</comment>
     <comment xml:lang="tr">SystemVerilog başlığı</comment>
     <comment xml:lang="uk">заголовки SystemVerilog</comment>
-    <comment xml:lang="zh_CN">SystemVerilog 头文件</comment>
-    <comment xml:lang="zh_TW">SystemVerilog 標頭</comment>
+    <comment xml:lang="zh-CN">SystemVerilog 头文件</comment>
+    <comment xml:lang="zh-TW">SystemVerilog 標頭</comment>
     <sub-class-of type="text/x-verilog"/>
     <glob pattern="*.svh"/>
   </mime-type>
   <mime-type type="text/x-svsrc">
     <comment>SystemVerilog source code</comment>
+    <comment xml:lang="af">SystemVerilog-bronkode</comment>
     <comment xml:lang="bg">Изходен код — SystemVerilog</comment>
     <comment xml:lang="ca">codi font en SystemVerilog</comment>
     <comment xml:lang="cs">zdrojový kód SystemVerilog</comment>
     <comment xml:lang="da">SystemVerilog-kildekode</comment>
     <comment xml:lang="de">SystemVerilog-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας SystemVerilog</comment>
-    <comment xml:lang="en_GB">SystemVerilog source code</comment>
+    <comment xml:lang="en-GB">SystemVerilog source code</comment>
     <comment xml:lang="es">código fuente en SystemVerilog</comment>
     <comment xml:lang="eu">SystemVerilog iturburu-kodea</comment>
     <comment xml:lang="fi">SystemVerilog-lähdekoodi</comment>
     <comment xml:lang="fr">code source </comment>
+    <comment xml:lang="fur">codiç sorzint SystemVerilog</comment>
     <comment xml:lang="ga">cód foinseach SystemVerilog</comment>
     <comment xml:lang="gl">código fonte en SystemVerilog</comment>
     <comment xml:lang="he">קוד מקור של SystemVerilog</comment>
@@ -31805,7 +32943,7 @@
     <comment xml:lang="oc">còde font SystemVerilog</comment>
     <comment xml:lang="pl">Kod źródłowy SystemVerilog</comment>
     <comment xml:lang="pt">código origem SystemVerilog</comment>
-    <comment xml:lang="pt_BR">Código-fonte de SystemVerilog</comment>
+    <comment xml:lang="pt-BR">Código-fonte de SystemVerilog</comment>
     <comment xml:lang="ru">Исходный код SystemVerilog</comment>
     <comment xml:lang="sk">Zdrojový kód SystemVerilog</comment>
     <comment xml:lang="sl">Datoteka izvorne kode SystemVerilog</comment>
@@ -31813,25 +32951,27 @@
     <comment xml:lang="sv">SystemVerilog-källkod</comment>
     <comment xml:lang="tr">SystemVerilog kaynak kodu</comment>
     <comment xml:lang="uk">вихідний файл мовою SystemVerilog</comment>
-    <comment xml:lang="zh_CN">SystemVerilog 源代码</comment>
-    <comment xml:lang="zh_TW">SystemVerilog 源碼</comment>
+    <comment xml:lang="zh-CN">SystemVerilog 源代码</comment>
+    <comment xml:lang="zh-TW">SystemVerilog 源碼</comment>
     <sub-class-of type="text/x-verilog"/>
     <glob pattern="*.sv"/>
   </mime-type>
   <mime-type type="text/x-vhdl">
     <comment>VHDL source code</comment>
+    <comment xml:lang="af">VHDL-bronkode</comment>
     <comment xml:lang="bg">Изходен код — VHDL</comment>
     <comment xml:lang="ca">codi font en VHDL</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce VHDL</comment>
     <comment xml:lang="da">VHDL-kildekode</comment>
     <comment xml:lang="de">VHDL-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας VHDL</comment>
-    <comment xml:lang="en_GB">VHDL source code</comment>
+    <comment xml:lang="en-GB">VHDL source code</comment>
     <comment xml:lang="eo">VHDL-fontkodo</comment>
     <comment xml:lang="es">código fuente en VHDL</comment>
     <comment xml:lang="eu">VHDL iturburu-kodea</comment>
     <comment xml:lang="fi">VHDL-lähdekoodi</comment>
     <comment xml:lang="fr">code source VHDL</comment>
+    <comment xml:lang="fur">codiç sorzint VHDL</comment>
     <comment xml:lang="ga">cód foinseach VHDL</comment>
     <comment xml:lang="gl">código fonte en VHDL</comment>
     <comment xml:lang="he">קוד מקור של VHDL</comment>
@@ -31848,7 +32988,7 @@
     <comment xml:lang="oc">còde font VHDL</comment>
     <comment xml:lang="pl">Kod źródłowy VHDL</comment>
     <comment xml:lang="pt">código origem VHDL</comment>
-    <comment xml:lang="pt_BR">Código-fonte VHDL</comment>
+    <comment xml:lang="pt-BR">Código-fonte VHDL</comment>
     <comment xml:lang="ru">Исходный код VHDL</comment>
     <comment xml:lang="sk">Zdrojový kód VHDL</comment>
     <comment xml:lang="sl">Datoteka izvorne kode VHDL</comment>
@@ -31856,8 +32996,8 @@
     <comment xml:lang="sv">VHDL-källkod</comment>
     <comment xml:lang="tr">VHDL kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою VHDL</comment>
-    <comment xml:lang="zh_CN">VHDL 源代码</comment>
-    <comment xml:lang="zh_TW">VHDL 源碼</comment>
+    <comment xml:lang="zh-CN">VHDL 源代码</comment>
+    <comment xml:lang="zh-TW">VHDL 源碼</comment>
     <acronym>VHDL</acronym>
     <expanded-acronym>Very-High-Speed Integrated Circuit Hardware Description Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -31866,10 +33006,11 @@
   </mime-type>
   <mime-type type="text/enriched">
     <comment>enriched text document</comment>
+    <comment xml:lang="af">verrykte teksdokument</comment>
     <comment xml:lang="ar">مستند نصي مغنى</comment>
     <comment xml:lang="ast">documentu de testu arriquecíu</comment>
     <comment xml:lang="az">zəngin mətn sənədi</comment>
-    <comment xml:lang="be@latin">azdobleny tekstavy dakument</comment>
+    <comment xml:lang="be-Latn">azdobleny tekstavy dakument</comment>
     <comment xml:lang="bg">Документ с обогатен текст</comment>
     <comment xml:lang="ca">document de text enriquit</comment>
     <comment xml:lang="cs">rozšířený textový dokument</comment>
@@ -31877,13 +33018,14 @@
     <comment xml:lang="da">beriget tekstdokument</comment>
     <comment xml:lang="de">Angereichertes Textdokument</comment>
     <comment xml:lang="el">Έγγραφο εμπλουτισμένου κειμένου</comment>
-    <comment xml:lang="en_GB">enriched text document</comment>
+    <comment xml:lang="en-GB">enriched text document</comment>
     <comment xml:lang="eo">riĉigita teksta dokumento</comment>
     <comment xml:lang="es">documento de texto enriquecido</comment>
     <comment xml:lang="eu">aberastutako testu dokumentua</comment>
     <comment xml:lang="fi">rikastettu tekstiasiakirja</comment>
     <comment xml:lang="fo">ríkað tekstskjal</comment>
     <comment xml:lang="fr">document texte enrichi</comment>
+    <comment xml:lang="fur">document di test inricjît</comment>
     <comment xml:lang="ga">cáipéis téacs saibhrithe</comment>
     <comment xml:lang="gl">documento de texto enriquecido</comment>
     <comment xml:lang="he">מסמך טקסט מועשר</comment>
@@ -31904,7 +33046,7 @@
     <comment xml:lang="oc">document tèxte enriquit</comment>
     <comment xml:lang="pl">Wzbogacony dokument tekstowy</comment>
     <comment xml:lang="pt">documento de texto rico</comment>
-    <comment xml:lang="pt_BR">Documento de texto enriquecido</comment>
+    <comment xml:lang="pt-BR">Documento de texto enriquecido</comment>
     <comment xml:lang="ro">document text îmbogățit</comment>
     <comment xml:lang="ru">Форматированный текстовый документ</comment>
     <comment xml:lang="sk">Rozšírený textový dokument</comment>
@@ -31915,15 +33057,16 @@
     <comment xml:lang="tr">zenginleştirilmiş metin belgesi</comment>
     <comment xml:lang="uk">форматований текстовий документ</comment>
     <comment xml:lang="vi">tài liệu văn bản có kiểu dáng</comment>
-    <comment xml:lang="zh_CN">浓缩文本文档 (ETF)</comment>
-    <comment xml:lang="zh_TW">豐富化文字文件</comment>
+    <comment xml:lang="zh-CN">浓缩文本文档 (ETF)</comment>
+    <comment xml:lang="zh-TW">豐富化文字文件</comment>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="text/htmlh">
     <comment>help page</comment>
+    <comment xml:lang="af">hulpbladsy</comment>
     <comment xml:lang="ar">صفحة المساعدة</comment>
     <comment xml:lang="az">yardım səhifəsi</comment>
-    <comment xml:lang="be@latin">staronka dapamohi</comment>
+    <comment xml:lang="be-Latn">staronka dapamohi</comment>
     <comment xml:lang="bg">Страница от помощта</comment>
     <comment xml:lang="ca">pàgina d'ajuda</comment>
     <comment xml:lang="cs">stránka nápovědy</comment>
@@ -31931,13 +33074,14 @@
     <comment xml:lang="da">hjælpeside</comment>
     <comment xml:lang="de">Hilfeseite</comment>
     <comment xml:lang="el">Σελίδα βοήθειας</comment>
-    <comment xml:lang="en_GB">help page</comment>
+    <comment xml:lang="en-GB">help page</comment>
     <comment xml:lang="eo">help-paĝo</comment>
     <comment xml:lang="es">página de ayuda</comment>
     <comment xml:lang="eu">laguntzako orria</comment>
     <comment xml:lang="fi">ohjesivu</comment>
     <comment xml:lang="fo">hjálparsíða</comment>
     <comment xml:lang="fr">page d'aide</comment>
+    <comment xml:lang="fur">pagjine di jutori</comment>
     <comment xml:lang="ga">leathanach cabhrach</comment>
     <comment xml:lang="gl">páxina de axuda</comment>
     <comment xml:lang="he">דף עזרה</comment>
@@ -31958,7 +33102,7 @@
     <comment xml:lang="oc">pagina d'ajuda</comment>
     <comment xml:lang="pl">Strona pomocy</comment>
     <comment xml:lang="pt">página de ajuda</comment>
-    <comment xml:lang="pt_BR">Página de ajuda</comment>
+    <comment xml:lang="pt-BR">Página de ajuda</comment>
     <comment xml:lang="ro">pagină de ajutor</comment>
     <comment xml:lang="ru">Страница справки</comment>
     <comment xml:lang="sk">Stránka Pomocníka</comment>
@@ -31969,27 +33113,29 @@
     <comment xml:lang="tr">yardım sayfası</comment>
     <comment xml:lang="uk">сторінка довідки</comment>
     <comment xml:lang="vi">trang trợ giúp</comment>
-    <comment xml:lang="zh_CN">帮助页面</comment>
-    <comment xml:lang="zh_TW">求助頁面</comment>
+    <comment xml:lang="zh-CN">帮助页面</comment>
+    <comment xml:lang="zh-TW">求助頁面</comment>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="text/plain">
     <comment>plain text document</comment>
+    <comment xml:lang="af">skoonteksdokument</comment>
     <comment xml:lang="ar">مستند نصي مجرد</comment>
     <comment xml:lang="ast">documentu de testu planu</comment>
-    <comment xml:lang="be@latin">prosty tekstavy dakument</comment>
+    <comment xml:lang="be-Latn">prosty tekstavy dakument</comment>
     <comment xml:lang="bg">Документ с неформатиран текст</comment>
     <comment xml:lang="ca">document de text pla</comment>
     <comment xml:lang="cs">prostý textový dokument</comment>
     <comment xml:lang="da">rent tekstdokument</comment>
     <comment xml:lang="de">Einfaches Textdokument</comment>
     <comment xml:lang="el">Έγγραφο απλού κειμένου</comment>
-    <comment xml:lang="en_GB">plain text document</comment>
+    <comment xml:lang="en-GB">plain text document</comment>
     <comment xml:lang="eo">plata teksta dokumento</comment>
     <comment xml:lang="es">documento de texto sencillo</comment>
     <comment xml:lang="eu">testu soileko dokumentua</comment>
     <comment xml:lang="fi">perustekstiasiakirja</comment>
     <comment xml:lang="fr">document texte brut</comment>
+    <comment xml:lang="fur">document di test sempliç</comment>
     <comment xml:lang="ga">cáipéis ghnáth-théacs</comment>
     <comment xml:lang="gl">documento de texto sinxelo</comment>
     <comment xml:lang="he">מסמך טקסט פשוט</comment>
@@ -32010,7 +33156,7 @@
     <comment xml:lang="oc">document tèxte brut</comment>
     <comment xml:lang="pl">Zwykły dokument tekstowy</comment>
     <comment xml:lang="pt">documento em texto simples</comment>
-    <comment xml:lang="pt_BR">Documento de Texto</comment>
+    <comment xml:lang="pt-BR">Documento de Texto</comment>
     <comment xml:lang="ro">document text simplu</comment>
     <comment xml:lang="ru">Текстовый документ</comment>
     <comment xml:lang="sk">Obyčajný textový dokument</comment>
@@ -32021,11 +33167,11 @@
     <comment xml:lang="tr">düz metin belgesi</comment>
     <comment xml:lang="uk">звичайний текстовий документ</comment>
     <comment xml:lang="vi">tài liệu nhập thô</comment>
-    <comment xml:lang="zh_CN">纯文本文档</comment>
-    <comment xml:lang="zh_TW">純文字文件</comment>
+    <comment xml:lang="zh-CN">纯文本文档</comment>
+    <comment xml:lang="zh-TW">純文字文件</comment>
     <magic priority="50">
-      <match value="This is TeX," type="string" offset="0"/>
-      <match value="This is METAFONT," type="string" offset="0"/>
+      <match type="string" value="This is TeX," offset="0"/>
+      <match type="string" value="This is METAFONT," offset="0"/>
     </magic>
     <glob pattern="*.txt"/>
     <glob pattern="*.asc"/>
@@ -32033,21 +33179,23 @@
   </mime-type>
   <mime-type type="application/rdf+xml">
     <comment>RDF file</comment>
+    <comment xml:lang="af">RDF-lêer</comment>
     <comment xml:lang="ar">ملف RDF</comment>
-    <comment xml:lang="be@latin">Fajł RDF</comment>
+    <comment xml:lang="be-Latn">Fajł RDF</comment>
     <comment xml:lang="bg">Файл — RDF</comment>
     <comment xml:lang="ca">fitxer RDF</comment>
     <comment xml:lang="cs">soubor RDF</comment>
     <comment xml:lang="da">RDF-fil</comment>
     <comment xml:lang="de">RDF-Datei</comment>
     <comment xml:lang="el">Αρχείο RDF</comment>
-    <comment xml:lang="en_GB">RDF file</comment>
+    <comment xml:lang="en-GB">RDF file</comment>
     <comment xml:lang="eo">RDF-dosiero</comment>
     <comment xml:lang="es">archivo RDF</comment>
     <comment xml:lang="eu">RDF fitxategia</comment>
     <comment xml:lang="fi">RDF-tiedosto</comment>
     <comment xml:lang="fo">RDF fíla</comment>
     <comment xml:lang="fr">fichier RDF</comment>
+    <comment xml:lang="fur">file RDF</comment>
     <comment xml:lang="ga">comhad RDF</comment>
     <comment xml:lang="gl">ficheiro RDF</comment>
     <comment xml:lang="he">קובץ RDF</comment>
@@ -32067,7 +33215,7 @@
     <comment xml:lang="oc">fichièr RDF</comment>
     <comment xml:lang="pl">Plik RDF</comment>
     <comment xml:lang="pt">ficheiro RDF</comment>
-    <comment xml:lang="pt_BR">Arquivo RDF</comment>
+    <comment xml:lang="pt-BR">Arquivo RDF</comment>
     <comment xml:lang="ro">Fișier RDF</comment>
     <comment xml:lang="ru">Файл RDF</comment>
     <comment xml:lang="sk">Súbor RDF</comment>
@@ -32078,8 +33226,8 @@
     <comment xml:lang="tr">RDF dosyası</comment>
     <comment xml:lang="uk">файл RDF</comment>
     <comment xml:lang="vi">Tập tin RDF</comment>
-    <comment xml:lang="zh_CN">RDF 文件</comment>
-    <comment xml:lang="zh_TW">RDF 檔</comment>
+    <comment xml:lang="zh-CN">RDF 文件</comment>
+    <comment xml:lang="zh-TW">RDF 檔</comment>
     <acronym>RDF</acronym>
     <expanded-acronym>Resource Description Framework</expanded-acronym>
     <alias type="text/rdf"/>
@@ -32089,17 +33237,55 @@
     <glob pattern="*.owl"/>
     <root-XML namespaceURI="http://www.w3.org/1999/02/22-rdf-syntax-ns#" localName="RDF"/>
   </mime-type>
+  <mime-type type="text/x-rst">
+    <comment>reStructuredText document</comment>
+    <comment xml:lang="af">reStructuredText-dokument</comment>
+    <comment xml:lang="bg">Документ — reStructuredText</comment>
+    <comment xml:lang="ca">document reStructuredText</comment>
+    <comment xml:lang="cs">dokument reStructuredText</comment>
+    <comment xml:lang="da">reStructuredText-dokument</comment>
+    <comment xml:lang="de">reStructuredText-Dokument</comment>
+    <comment xml:lang="en-GB">reStructuredText document</comment>
+    <comment xml:lang="es">documento en reStructuredText</comment>
+    <comment xml:lang="eu">reStructuredText document</comment>
+    <comment xml:lang="fi">reStructuredText-asiakirja</comment>
+    <comment xml:lang="fr">document reStructuredText</comment>
+    <comment xml:lang="fur">document reStructuredText</comment>
+    <comment xml:lang="ga">cáipéis reStructuredText</comment>
+    <comment xml:lang="hr">reStructuredText dokument</comment>
+    <comment xml:lang="hu">reStructuredText dokumentum</comment>
+    <comment xml:lang="id">dokumen reStructuredText</comment>
+    <comment xml:lang="it">Documento reStructuredText</comment>
+    <comment xml:lang="kk">reStructuredText құжаты</comment>
+    <comment xml:lang="ko">reStructuredText 문서</comment>
+    <comment xml:lang="pl">Dokument reStructuredText</comment>
+    <comment xml:lang="pt-BR">Documento reStructuredText</comment>
+    <comment xml:lang="ru">Документ reStructuredText</comment>
+    <comment xml:lang="sk">Dokument reStructuredText</comment>
+    <comment xml:lang="sl">Dokument reStructuredText</comment>
+    <comment xml:lang="sv">reStructuredText-dokument</comment>
+    <comment xml:lang="tr">reStructuredText belgesi</comment>
+    <comment xml:lang="uk">документ reStructuredText</comment>
+    <comment xml:lang="zh-CN">reStructuredText 文档</comment>
+    <comment xml:lang="zh-TW">reStructuredText 文件</comment>
+    <sub-class-of type="text/plain"/>
+    <glob pattern="*.rst"/>
+  </mime-type>
   <mime-type type="application/owl+xml">
     <comment>OWL XML file</comment>
+    <comment xml:lang="af">OWL XML-lêer</comment>
+    <comment xml:lang="bg">Файл — OWL XML</comment>
     <comment xml:lang="ca">fitxer XML OWL</comment>
     <comment xml:lang="cs">soubor OWL XML</comment>
     <comment xml:lang="da">OWL XML-fil</comment>
     <comment xml:lang="de">OWL-XML-Datei</comment>
     <comment xml:lang="el">Αρχείο OWL XML</comment>
-    <comment xml:lang="en_GB">OWL XML file</comment>
+    <comment xml:lang="en-GB">OWL XML file</comment>
     <comment xml:lang="es">archivo en XML OWL</comment>
     <comment xml:lang="eu">OWL XML fitxategia</comment>
+    <comment xml:lang="fi">OWL XML -tiedosto</comment>
     <comment xml:lang="fr">fichier XML OWL</comment>
+    <comment xml:lang="fur">file OWL XML</comment>
     <comment xml:lang="ga">comhad XML OWL</comment>
     <comment xml:lang="hr">OWL XML datoteka</comment>
     <comment xml:lang="hu">OWL XML-fájl</comment>
@@ -32111,21 +33297,22 @@
     <comment xml:lang="oc">fichièr OWL XML</comment>
     <comment xml:lang="pl">Plik XML OWL</comment>
     <comment xml:lang="pt">ficheiro OWL XML</comment>
-    <comment xml:lang="pt_BR">Arquivo OWL XML</comment>
+    <comment xml:lang="pt-BR">Arquivo OWL XML</comment>
     <comment xml:lang="ru">Файл XML OWL</comment>
     <comment xml:lang="sk">Súbor XML OWL</comment>
+    <comment xml:lang="sl">Datoteka OWL XML</comment>
     <comment xml:lang="sr">ОВЛ ИксМЛ датотека</comment>
     <comment xml:lang="sv">OWL XML-fil</comment>
     <comment xml:lang="tr">OWL XML dosyası</comment>
     <comment xml:lang="uk">файл XML OWL</comment>
-    <comment xml:lang="zh_CN">OWL XML 文件</comment>
-    <comment xml:lang="zh_TW">OWL XML 檔案</comment>
+    <comment xml:lang="zh-CN">OWL XML 文件</comment>
+    <comment xml:lang="zh-TW">OWL XML 檔案</comment>
     <acronym>OWL</acronym>
     <expanded-acronym>Web Ontology Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
     <glob pattern="*.owx"/>
     <magic>
-      <match value="&lt;Ontology" type="string" offset="0:256"/>
+      <match type="string" value="&lt;Ontology" offset="0:256"/>
     </magic>
     <root-XML namespaceURI="http://www.w3.org/2002/07/owl#" localName="Ontology"/>
   </mime-type>
@@ -32133,7 +33320,7 @@
     <comment>email headers</comment>
     <comment xml:lang="ar">ترويسة البريد الإلكتروني</comment>
     <comment xml:lang="az">epoçt başlıqları</comment>
-    <comment xml:lang="be@latin">paštovyja zahałoŭki</comment>
+    <comment xml:lang="be-Latn">paštovyja zahałoŭki</comment>
     <comment xml:lang="bg">Заглавни части на електронни писма</comment>
     <comment xml:lang="ca">capçaleres de correu electrònic</comment>
     <comment xml:lang="cs">záhlaví e-mailu</comment>
@@ -32141,13 +33328,14 @@
     <comment xml:lang="da">posthoveder</comment>
     <comment xml:lang="de">E-Mail-Kopfzeilen</comment>
     <comment xml:lang="el">Κεφαλίδες ηλ. μηνυμάτων</comment>
-    <comment xml:lang="en_GB">email headers</comment>
+    <comment xml:lang="en-GB">email headers</comment>
     <comment xml:lang="eo">retpoŝtaj ĉapoj</comment>
     <comment xml:lang="es">cabeceras de correo electrónico</comment>
     <comment xml:lang="eu">helbide elektronikoen goiburuak</comment>
     <comment xml:lang="fi">sähköpostiotsakkeet</comment>
     <comment xml:lang="fo">t-post tekshøvd</comment>
     <comment xml:lang="fr">en-têtes de courriel</comment>
+    <comment xml:lang="fur">intestazions e-mail</comment>
     <comment xml:lang="ga">ceanntásca ríomhphoist</comment>
     <comment xml:lang="gl">cabeceiras de correo electrónico</comment>
     <comment xml:lang="he">כותרת דוא״ל</comment>
@@ -32168,7 +33356,7 @@
     <comment xml:lang="oc">entèstas de corrièr electronic</comment>
     <comment xml:lang="pl">Nagłówki wiadomości e-mail</comment>
     <comment xml:lang="pt">cabeçalhos de email</comment>
-    <comment xml:lang="pt_BR">Cabeçalhos de e-mail</comment>
+    <comment xml:lang="pt-BR">Cabeçalhos de e-mail</comment>
     <comment xml:lang="ro">antete email</comment>
     <comment xml:lang="ru">Почтовые заголовки</comment>
     <comment xml:lang="sk">Hlavičky e-mailu</comment>
@@ -32179,16 +33367,17 @@
     <comment xml:lang="tr">eposta başlığı</comment>
     <comment xml:lang="uk">заголовки email</comment>
     <comment xml:lang="vi">dòng đầu thư điện tử</comment>
-    <comment xml:lang="zh_CN">电子邮件头</comment>
-    <comment xml:lang="zh_TW">電子郵件標頭</comment>
+    <comment xml:lang="zh-CN">电子邮件头</comment>
+    <comment xml:lang="zh-TW">電子郵件標頭</comment>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="text/richtext">
     <comment>rich text document</comment>
+    <comment xml:lang="af">rykteksdokument</comment>
     <comment xml:lang="ar">مستند نصي غني</comment>
     <comment xml:lang="ast">documentu de testu ricu</comment>
     <comment xml:lang="az">zəngin mətn sənədi</comment>
-    <comment xml:lang="be@latin">azdobleny tekstavy dakument</comment>
+    <comment xml:lang="be-Latn">azdobleny tekstavy dakument</comment>
     <comment xml:lang="bg">Документ — rich text</comment>
     <comment xml:lang="ca">document de text enriquit</comment>
     <comment xml:lang="cs">textový dokument RTF</comment>
@@ -32196,12 +33385,13 @@
     <comment xml:lang="da">richtekstdokument</comment>
     <comment xml:lang="de">RTF-Textdokument</comment>
     <comment xml:lang="el">Έγγραφο εμπλουτισμένου κειμένου (RTF)</comment>
-    <comment xml:lang="en_GB">rich text document</comment>
+    <comment xml:lang="en-GB">rich text document</comment>
     <comment xml:lang="eo">riĉteksta dokumento</comment>
     <comment xml:lang="es">documento de texto enriquecido</comment>
     <comment xml:lang="eu">aberastutako testu formatua</comment>
     <comment xml:lang="fi">RTF-asiakirja</comment>
     <comment xml:lang="fr">document « rich text »</comment>
+    <comment xml:lang="fur">document rich text</comment>
     <comment xml:lang="ga">cáipéis mhéith-théacs</comment>
     <comment xml:lang="gl">documento do texto enriquecido</comment>
     <comment xml:lang="he">מסמך טקסט עשיר</comment>
@@ -32222,7 +33412,7 @@
     <comment xml:lang="oc">document « rich text »</comment>
     <comment xml:lang="pl">Dokument Rich Text</comment>
     <comment xml:lang="pt">documento em texto rico</comment>
-    <comment xml:lang="pt_BR">Documento rich text</comment>
+    <comment xml:lang="pt-BR">Documento rich text</comment>
     <comment xml:lang="ro">document text îmbogățit</comment>
     <comment xml:lang="ru">Документ с форматированным текстом</comment>
     <comment xml:lang="sk">Textový dokument RTF</comment>
@@ -32233,27 +33423,29 @@
     <comment xml:lang="tr">zengin metin belgesi</comment>
     <comment xml:lang="uk">форматований текстовий документ</comment>
     <comment xml:lang="vi">tài liệu văn bản có kiểu dáng (RTF)</comment>
-    <comment xml:lang="zh_CN">富文本文档 (RTF)</comment>
-    <comment xml:lang="zh_TW">豐富文字文件</comment>
+    <comment xml:lang="zh-CN">富文本文档 (RTF)</comment>
+    <comment xml:lang="zh-TW">豐富文字文件 (RTF)</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.rtx"/>
   </mime-type>
   <mime-type type="application/rss+xml">
     <comment>RSS summary</comment>
+    <comment xml:lang="af">RSS-opsomming</comment>
     <comment xml:lang="ar">ملخص RSS</comment>
-    <comment xml:lang="be@latin">Karotki ahlad RSS</comment>
+    <comment xml:lang="be-Latn">Karotki ahlad RSS</comment>
     <comment xml:lang="bg">Обобщение за сайтове — RSS</comment>
     <comment xml:lang="ca">resum RSS</comment>
     <comment xml:lang="cs">souhrn RSS</comment>
     <comment xml:lang="da">RSS-sammendrag</comment>
     <comment xml:lang="de">RSS-Zusammenfassung</comment>
     <comment xml:lang="el">Σύνοψη RSS</comment>
-    <comment xml:lang="en_GB">RSS summary</comment>
-    <comment xml:lang="es">resumen de RSS</comment>
+    <comment xml:lang="en-GB">RSS summary</comment>
+    <comment xml:lang="es">suministro RSS</comment>
     <comment xml:lang="eu">RSS laburpena</comment>
     <comment xml:lang="fi">RSS-tiivistelmä</comment>
     <comment xml:lang="fo">RSS samandráttur</comment>
     <comment xml:lang="fr">résumé RSS</comment>
+    <comment xml:lang="fur">somari RSS</comment>
     <comment xml:lang="ga">achoimre RSS</comment>
     <comment xml:lang="gl">Resumo RSS</comment>
     <comment xml:lang="he">תקציר RSS</comment>
@@ -32273,7 +33465,7 @@
     <comment xml:lang="oc">resumit RSS</comment>
     <comment xml:lang="pl">Podsumowanie RSS</comment>
     <comment xml:lang="pt">resumo RSS</comment>
-    <comment xml:lang="pt_BR">Resumo RSS</comment>
+    <comment xml:lang="pt-BR">Resumo RSS</comment>
     <comment xml:lang="ro">Rezumat RSS</comment>
     <comment xml:lang="ru">Сводка RSS</comment>
     <comment xml:lang="sk">Súhrn RSS</comment>
@@ -32284,8 +33476,8 @@
     <comment xml:lang="tr">RSS özeti</comment>
     <comment xml:lang="uk">зведення сайту RSS</comment>
     <comment xml:lang="vi">Bản tóm tắt RSS</comment>
-    <comment xml:lang="zh_CN">RSS 摘要</comment>
-    <comment xml:lang="zh_TW">RSS 摘要</comment>
+    <comment xml:lang="zh-CN">RSS 摘要</comment>
+    <comment xml:lang="zh-TW">RSS 摘要</comment>
     <acronym>RSS</acronym>
     <expanded-acronym>RDF Site Summary</expanded-acronym>
     <alias type="text/rss"/>
@@ -32293,25 +33485,26 @@
     <generic-icon name="text-html"/>
     <glob pattern="*.rss"/>
     <magic priority="70">
-      <match value="&lt;rss " type="string" offset="0:256"/>
-      <match value="&lt;RSS " type="string" offset="0:256"/>
+      <match type="string" value="&lt;rss " offset="0:256"/>
+      <match type="string" value="&lt;RSS " offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="application/atom+xml">
     <comment>Atom syndication feed</comment>
     <comment xml:lang="ar">مروج تغذية Atom</comment>
-    <comment xml:lang="be@latin">Syndykacyjny kanał navinaŭ Atom</comment>
+    <comment xml:lang="be-Latn">Syndykacyjny kanał navinaŭ Atom</comment>
     <comment xml:lang="bg">Емисия — Atom</comment>
     <comment xml:lang="ca">canal de sindicació Atom</comment>
     <comment xml:lang="cs">kanál Atom</comment>
-    <comment xml:lang="da">Atom syndication-feed</comment>
+    <comment xml:lang="da">Atom-syndikeringsfeed</comment>
     <comment xml:lang="de">Atom-Nachrichtenquelle</comment>
     <comment xml:lang="el">Τροφοδοσία διανομής Atom</comment>
-    <comment xml:lang="en_GB">Atom syndication feed</comment>
-    <comment xml:lang="es">canal de noticias Atom</comment>
+    <comment xml:lang="en-GB">Atom syndication feed</comment>
+    <comment xml:lang="es">suministro de sindicación Atom</comment>
     <comment xml:lang="eu">Atom harpidetze-iturria</comment>
     <comment xml:lang="fi">Atom-yhdistevirta</comment>
     <comment xml:lang="fr">fil de syndication Atom</comment>
+    <comment xml:lang="fur">canâl di notiziis Atom</comment>
     <comment xml:lang="ga">fotha sindeacáitithe Atom</comment>
     <comment xml:lang="gl">fonte de sindicación Atom</comment>
     <comment xml:lang="he">הזנה דרך הרשת של Atom</comment>
@@ -32331,7 +33524,7 @@
     <comment xml:lang="oc">fial de sindicacion Atom</comment>
     <comment xml:lang="pl">Kanał Atom</comment>
     <comment xml:lang="pt">feed Atom</comment>
-    <comment xml:lang="pt_BR">Fonte de notícias Atom</comment>
+    <comment xml:lang="pt-BR">Fonte de notícias Atom</comment>
     <comment xml:lang="ro">Flux agregare Atom</comment>
     <comment xml:lang="ru">Лента новостей Atom</comment>
     <comment xml:lang="sk">Kanál Atom</comment>
@@ -32342,31 +33535,32 @@
     <comment xml:lang="tr">Atom besleme kaynağı</comment>
     <comment xml:lang="uk">трансляція подач Atom</comment>
     <comment xml:lang="vi">Nguồn tin tức Atom</comment>
-    <comment xml:lang="zh_CN">Atom 聚合种子</comment>
-    <comment xml:lang="zh_TW">Atom 聯合供稿饋流</comment>
+    <comment xml:lang="zh-CN">Atom 聚合种子</comment>
+    <comment xml:lang="zh-TW">Atom 聯合供稿饋流</comment>
     <sub-class-of type="application/xml"/>
     <generic-icon name="text-html"/>
     <glob pattern="*.atom"/>
     <magic priority="70">
-      <match value="&lt;feed " type="string" offset="0:256"/>
+      <match type="string" value="&lt;feed " offset="0:256"/>
     </magic>
     <root-XML namespaceURI="http://www.w3.org/2005/Atom" localName="feed"/>
   </mime-type>
   <mime-type type="text/x-opml+xml">
     <comment>OPML syndication feed</comment>
     <comment xml:lang="ar">مروج تغذية OPML</comment>
-    <comment xml:lang="be@latin">Syndykacyjny kanał OPML</comment>
+    <comment xml:lang="be-Latn">Syndykacyjny kanał OPML</comment>
     <comment xml:lang="bg">Емисия — OPML</comment>
     <comment xml:lang="ca">canal de sindicació OPML</comment>
     <comment xml:lang="cs">kanál OPML</comment>
     <comment xml:lang="da">OPML-syndikeringsfeed</comment>
     <comment xml:lang="de">OPML-Nachrichtenquelle</comment>
     <comment xml:lang="el">Τροφοδοσία OPML</comment>
-    <comment xml:lang="en_GB">OPML syndication feed</comment>
-    <comment xml:lang="es">canal de noticias OPML</comment>
+    <comment xml:lang="en-GB">OPML syndication feed</comment>
+    <comment xml:lang="es">suministro de sindicación OPML</comment>
     <comment xml:lang="eu">OPML harpidetze-iturria</comment>
     <comment xml:lang="fi">OPML-yhdistevirta</comment>
     <comment xml:lang="fr">fil de syndication OPML</comment>
+    <comment xml:lang="fur">canâl di notiziis OPML</comment>
     <comment xml:lang="ga">fotha sindeacáitithe OPML</comment>
     <comment xml:lang="gl">fonte de sindicación OPML</comment>
     <comment xml:lang="he">הזנה דרך הרשת OPML</comment>
@@ -32386,7 +33580,7 @@
     <comment xml:lang="oc">fial de sindicacion OPML</comment>
     <comment xml:lang="pl">Kanał OPML</comment>
     <comment xml:lang="pt">feed OPML</comment>
-    <comment xml:lang="pt_BR">Fonte de notícias OPML</comment>
+    <comment xml:lang="pt-BR">Fonte de notícias OPML</comment>
     <comment xml:lang="ro">Flux OPML syndication</comment>
     <comment xml:lang="ru">Лента новостей OPML</comment>
     <comment xml:lang="sk">Kanál OPML</comment>
@@ -32397,21 +33591,22 @@
     <comment xml:lang="tr">OPML besleme kaynağı</comment>
     <comment xml:lang="uk">трансляція подач OPML</comment>
     <comment xml:lang="vi">Nguồn tin tức OPML</comment>
-    <comment xml:lang="zh_CN">OPML 聚合种子</comment>
-    <comment xml:lang="zh_TW">OPML 聯合供稿饋流</comment>
+    <comment xml:lang="zh-CN">OPML 聚合种子</comment>
+    <comment xml:lang="zh-TW">OPML 聯合供稿饋流</comment>
     <sub-class-of type="application/xml"/>
     <alias type="text/x-opml"/>
     <generic-icon name="text-html"/>
     <glob pattern="*.opml"/>
     <magic priority="70">
-      <match value="&lt;opml " type="string" offset="0:256"/>
+      <match type="string" value="&lt;opml " offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="text/sgml">
     <comment>SGML document</comment>
+    <comment xml:lang="af">SGML-dokument</comment>
     <comment xml:lang="ar">مستند SGML</comment>
     <comment xml:lang="ast">Documentu SGML</comment>
-    <comment xml:lang="be@latin">Dakument SGML</comment>
+    <comment xml:lang="be-Latn">Dakument SGML</comment>
     <comment xml:lang="bg">Документ — SGML</comment>
     <comment xml:lang="ca">document SGML</comment>
     <comment xml:lang="cs">dokument SGML</comment>
@@ -32419,13 +33614,14 @@
     <comment xml:lang="da">SGML-dokument</comment>
     <comment xml:lang="de">SGML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο SGML</comment>
-    <comment xml:lang="en_GB">SGML document</comment>
+    <comment xml:lang="en-GB">SGML document</comment>
     <comment xml:lang="eo">SGML-dokumento</comment>
     <comment xml:lang="es">documento SGML</comment>
     <comment xml:lang="eu">SGML dokumentua</comment>
     <comment xml:lang="fi">SGML-asiakirja</comment>
     <comment xml:lang="fo">SGML skjal</comment>
     <comment xml:lang="fr">document SGML</comment>
+    <comment xml:lang="fur">document SGML</comment>
     <comment xml:lang="ga">cáipéis SGML</comment>
     <comment xml:lang="gl">documento SGML</comment>
     <comment xml:lang="he">מסמך SGML</comment>
@@ -32446,7 +33642,7 @@
     <comment xml:lang="oc">document SGML</comment>
     <comment xml:lang="pl">Dokument SGML</comment>
     <comment xml:lang="pt">documento SGML</comment>
-    <comment xml:lang="pt_BR">Documento SGML</comment>
+    <comment xml:lang="pt-BR">Documento SGML</comment>
     <comment xml:lang="ro">Document SGML</comment>
     <comment xml:lang="ru">Документ SGML</comment>
     <comment xml:lang="sk">Dokument SGML</comment>
@@ -32457,8 +33653,8 @@
     <comment xml:lang="tr">SGML belgesi</comment>
     <comment xml:lang="uk">документ SGML</comment>
     <comment xml:lang="vi">Tài liệu SGML</comment>
-    <comment xml:lang="zh_CN">SGML 文档</comment>
-    <comment xml:lang="zh_TW">SGML 文件</comment>
+    <comment xml:lang="zh-CN">SGML 文档</comment>
+    <comment xml:lang="zh-TW">SGML 文件</comment>
     <acronym>SGML</acronym>
     <expanded-acronym>Standard Generalized Markup Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -32469,19 +33665,20 @@
     <comment>spreadsheet interchange document</comment>
     <comment xml:lang="ar">مستند تبادل الجدول</comment>
     <comment xml:lang="ast">documentu d'intercambéu de fueyes de cálculu</comment>
-    <comment xml:lang="be@latin">dakument dla abmienu raźlikovymi arkušami</comment>
-    <comment xml:lang="bg">Документ за обмяна между програми за електронни таблици</comment>
+    <comment xml:lang="be-Latn">dakument dla abmienu raźlikovymi arkušami</comment>
+    <comment xml:lang="bg">Документ — обмяна между електронни таблици</comment>
     <comment xml:lang="ca">document d'intercanvi de full de càlcul</comment>
     <comment xml:lang="cs">sešitový výměnný dokument</comment>
     <comment xml:lang="da">regnearksudvekslingsdokument</comment>
     <comment xml:lang="de">Tabellenkalkulations-Austauschdokument</comment>
     <comment xml:lang="el">Έγγραφο ανταλλαγής λογιστικού φύλλου</comment>
-    <comment xml:lang="en_GB">spreadsheet interchange document</comment>
-    <comment xml:lang="es">documento de intercambio de hojas de cálculo</comment>
+    <comment xml:lang="en-GB">spreadsheet interchange document</comment>
+    <comment xml:lang="es">documento de intercambio de hoja de cálculo</comment>
     <comment xml:lang="eu">kalkulu-orriak trukatzeko dokumentua</comment>
     <comment xml:lang="fi">taulukkovälitysasiakirja</comment>
     <comment xml:lang="fo">rokniarks umbýtisskjal</comment>
     <comment xml:lang="fr">document d'échange de feuilles de calcul</comment>
+    <comment xml:lang="fur">document di interscambi par sfuei di calcul</comment>
     <comment xml:lang="ga">cáipéis idirmhalartaithe scarbhileog</comment>
     <comment xml:lang="gl">documento de intercambio de follas de cálculo</comment>
     <comment xml:lang="he">מסמך גליון נתונים מתחלף</comment>
@@ -32501,7 +33698,7 @@
     <comment xml:lang="oc">document d'escambi de fuèlhs de calcul</comment>
     <comment xml:lang="pl">Dokument wymiany arkuszy kalkulacyjnych</comment>
     <comment xml:lang="pt">documento de troca interna de folhas de cálculo</comment>
-    <comment xml:lang="pt_BR">Documento de intercâmbio de planilhas</comment>
+    <comment xml:lang="pt-BR">Documento de intercâmbio de planilhas</comment>
     <comment xml:lang="ro">document schimb filă de calcul</comment>
     <comment xml:lang="ru">Документ Spreadsheet Interchange</comment>
     <comment xml:lang="sk">Zošitový prenosový dokument</comment>
@@ -32509,35 +33706,37 @@
     <comment xml:lang="sq">Dokument shkëmbimi për fletë llogaritje</comment>
     <comment xml:lang="sr">документ размене табеле</comment>
     <comment xml:lang="sv">spreadsheet interchange-dokument</comment>
-    <comment xml:lang="tr">hesap tablosu değişim belgesi</comment>
+    <comment xml:lang="tr">hesap çizelgesi değişim belgesi</comment>
     <comment xml:lang="uk">документ обміну ел. таблицями</comment>
     <comment xml:lang="vi">tài liệu hoán đổi bảng tính</comment>
-    <comment xml:lang="zh_CN">电子表格交换文档</comment>
-    <comment xml:lang="zh_TW">試算表交換文件</comment>
+    <comment xml:lang="zh-CN">电子表格交换文档</comment>
+    <comment xml:lang="zh-TW">試算表交換文件</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="ID;" type="string" offset="0"/>
+      <match type="string" value="ID;" offset="0"/>
     </magic>
     <glob pattern="*.sylk"/>
     <glob pattern="*.slk"/>
   </mime-type>
   <mime-type type="text/tab-separated-values">
     <comment>TSV document</comment>
+    <comment xml:lang="af">TSV-dokument</comment>
     <comment xml:lang="ar">مستند TSV</comment>
     <comment xml:lang="ast">Documentu TSV</comment>
-    <comment xml:lang="be@latin">Dakument TSV</comment>
+    <comment xml:lang="be-Latn">Dakument TSV</comment>
     <comment xml:lang="bg">Документ — TSV</comment>
     <comment xml:lang="ca">document TSV</comment>
     <comment xml:lang="cs">dokument TSV</comment>
     <comment xml:lang="da">TSV-dokument</comment>
     <comment xml:lang="de">TSV-Dokument</comment>
     <comment xml:lang="el">Έγγραφο TSV</comment>
-    <comment xml:lang="en_GB">TSV document</comment>
+    <comment xml:lang="en-GB">TSV document</comment>
     <comment xml:lang="es">documento TSV</comment>
     <comment xml:lang="eu">TSV dokumentua</comment>
     <comment xml:lang="fi">TSV-asiakirja</comment>
     <comment xml:lang="fo">TSV skjal</comment>
     <comment xml:lang="fr">document TSV</comment>
+    <comment xml:lang="fur">document TSV</comment>
     <comment xml:lang="ga">cáipéis TSV</comment>
     <comment xml:lang="gl">documento TSV</comment>
     <comment xml:lang="he">מסמך TSV</comment>
@@ -32557,7 +33756,7 @@
     <comment xml:lang="oc">document TSV</comment>
     <comment xml:lang="pl">Dokument TSV</comment>
     <comment xml:lang="pt">documento TSV</comment>
-    <comment xml:lang="pt_BR">Documento TSV</comment>
+    <comment xml:lang="pt-BR">Documento TSV</comment>
     <comment xml:lang="ro">Document TSV</comment>
     <comment xml:lang="ru">Документ TSV</comment>
     <comment xml:lang="sk">Dokument TSV</comment>
@@ -32568,8 +33767,8 @@
     <comment xml:lang="tr">TSV belgesi</comment>
     <comment xml:lang="uk">документ TSV</comment>
     <comment xml:lang="vi">Tài liệu TSV</comment>
-    <comment xml:lang="zh_CN">TSV 文档</comment>
-    <comment xml:lang="zh_TW">TSV 文件</comment>
+    <comment xml:lang="zh-CN">TSV 文档</comment>
+    <comment xml:lang="zh-TW">TSV 文件</comment>
     <acronym>TSV</acronym>
     <expanded-acronym>Tab Separated Values</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -32577,6 +33776,7 @@
   </mime-type>
   <mime-type type="text/vnd.graphviz">
     <comment>Graphviz DOT graph</comment>
+    <comment xml:lang="af">Graphviz DOT-grafiek</comment>
     <comment xml:lang="ar">مبيان Graphviz DOT</comment>
     <comment xml:lang="bg">Граф — Graphviz DOT</comment>
     <comment xml:lang="ca">gràfic Graphviz DOT</comment>
@@ -32584,12 +33784,13 @@
     <comment xml:lang="da">Graphviz DOT-graf</comment>
     <comment xml:lang="de">Graphviz-DOT-Graph</comment>
     <comment xml:lang="el">Γράφημα Graphviz DOT</comment>
-    <comment xml:lang="en_GB">Graphviz DOT graph</comment>
+    <comment xml:lang="en-GB">Graphviz DOT graph</comment>
     <comment xml:lang="es">gráfico de Graphviz DOT</comment>
     <comment xml:lang="eu">Graphviz DOT grafikoa</comment>
     <comment xml:lang="fi">Graphviz DOT -graafi</comment>
     <comment xml:lang="fo">Graphviz DOT ritmynd</comment>
     <comment xml:lang="fr">graphe Graphviz DOT</comment>
+    <comment xml:lang="fur">grafic Graphviz DOT</comment>
     <comment xml:lang="ga">graf DOT Graphviz</comment>
     <comment xml:lang="gl">gráfica DOT de Graphviz</comment>
     <comment xml:lang="he">תרשים של Graphviz DOT</comment>
@@ -32607,7 +33808,7 @@
     <comment xml:lang="oc">graf Graphviz DOT</comment>
     <comment xml:lang="pl">Wykres DOT Graphviz</comment>
     <comment xml:lang="pt">gráfico Graphviz DOT</comment>
-    <comment xml:lang="pt_BR">Gráfico do Graphviz DOT</comment>
+    <comment xml:lang="pt-BR">Gráfico do Graphviz DOT</comment>
     <comment xml:lang="ro">Grafic Graphviz DOT</comment>
     <comment xml:lang="ru">Диаграмма Graphviz DOT</comment>
     <comment xml:lang="sk">Graf Graphviz DOT</comment>
@@ -32617,36 +33818,38 @@
     <comment xml:lang="tr">Graphviz DOT grafiği</comment>
     <comment xml:lang="uk">граф DOT Graphviz</comment>
     <comment xml:lang="vi">Biểu đồ DOT Graphviz</comment>
-    <comment xml:lang="zh_CN">Graphviz DOT 图形</comment>
-    <comment xml:lang="zh_TW">Graphviz DOT 圖</comment>
+    <comment xml:lang="zh-CN">Graphviz DOT 图形</comment>
+    <comment xml:lang="zh-TW">Graphviz DOT 圖表</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="digraph " type="string" offset="0"/>
-      <match value="strict digraph " type="string" offset="0"/>
-      <match value="graph " type="string" offset="0"/>
-      <match value="strict graph " type="string" offset="0"/>
+      <match type="string" value="digraph " offset="0"/>
+      <match type="string" value="strict digraph " offset="0"/>
+      <match type="string" value="graph " offset="0"/>
+      <match type="string" value="strict graph " offset="0"/>
     </magic>
     <glob pattern="*.gv"/>
     <glob pattern="*.dot"/>
   </mime-type>
   <mime-type type="text/vnd.sun.j2me.app-descriptor">
     <comment>JAD document</comment>
+    <comment xml:lang="af">JAD-dokument</comment>
     <comment xml:lang="ar">مستند JAD</comment>
     <comment xml:lang="ast">Documentu JAD</comment>
-    <comment xml:lang="be@latin">Dakument JAD</comment>
+    <comment xml:lang="be-Latn">Dakument JAD</comment>
     <comment xml:lang="bg">Документ — JAD</comment>
     <comment xml:lang="ca">document JAD</comment>
     <comment xml:lang="cs">dokument JAD</comment>
     <comment xml:lang="da">JAD-dokument</comment>
     <comment xml:lang="de">JAD-Dokument</comment>
     <comment xml:lang="el">Έγγραφο JAD</comment>
-    <comment xml:lang="en_GB">JAD document</comment>
+    <comment xml:lang="en-GB">JAD document</comment>
     <comment xml:lang="eo">JAD-dokumento</comment>
     <comment xml:lang="es">documento JAD</comment>
     <comment xml:lang="eu">JAD dokumentua</comment>
     <comment xml:lang="fi">JAD-asiakirja</comment>
     <comment xml:lang="fo">JAD skjal</comment>
     <comment xml:lang="fr">document JAD</comment>
+    <comment xml:lang="fur">document JAD</comment>
     <comment xml:lang="ga">cáipéis JAD</comment>
     <comment xml:lang="gl">documento JAD</comment>
     <comment xml:lang="he">מסמך JAD</comment>
@@ -32666,7 +33869,7 @@
     <comment xml:lang="oc">document JAD</comment>
     <comment xml:lang="pl">Dokument JAD</comment>
     <comment xml:lang="pt">documento JAD</comment>
-    <comment xml:lang="pt_BR">Documento JAD</comment>
+    <comment xml:lang="pt-BR">Documento JAD</comment>
     <comment xml:lang="ro">Document JAD</comment>
     <comment xml:lang="ru">Документ JAD</comment>
     <comment xml:lang="sk">Dokument JAD</comment>
@@ -32677,21 +33880,22 @@
     <comment xml:lang="tr">JAD belgesi</comment>
     <comment xml:lang="uk">документ JAD</comment>
     <comment xml:lang="vi">Tài liệu JAD</comment>
-    <comment xml:lang="zh_CN">JAD 文档</comment>
-    <comment xml:lang="zh_TW">JAD 文件</comment>
+    <comment xml:lang="zh-CN">JAD 文档</comment>
+    <comment xml:lang="zh-TW">JAD 文件</comment>
     <acronym>JAD</acronym>
     <expanded-acronym>Java Application Descriptor</expanded-acronym>
     <magic priority="50">
-      <match value="MIDlet-" type="string" offset="0"/>
+      <match type="string" value="MIDlet-" offset="0"/>
     </magic>
     <glob pattern="*.jad"/>
   </mime-type>
   <mime-type type="text/vnd.wap.wml">
     <comment>WML document</comment>
+    <comment xml:lang="af">WML-dokument</comment>
     <comment xml:lang="ar">مستند WML</comment>
     <comment xml:lang="ast">Documentu WML</comment>
     <comment xml:lang="az">WML sənədi</comment>
-    <comment xml:lang="be@latin">Dakument WML</comment>
+    <comment xml:lang="be-Latn">Dakument WML</comment>
     <comment xml:lang="bg">Документ — WML</comment>
     <comment xml:lang="ca">document WML</comment>
     <comment xml:lang="cs">dokument WML</comment>
@@ -32699,13 +33903,14 @@
     <comment xml:lang="da">WML-dokument</comment>
     <comment xml:lang="de">WML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο WML</comment>
-    <comment xml:lang="en_GB">WML document</comment>
+    <comment xml:lang="en-GB">WML document</comment>
     <comment xml:lang="eo">WML-dokumento</comment>
     <comment xml:lang="es">documento WML</comment>
     <comment xml:lang="eu">WML dokumentua</comment>
     <comment xml:lang="fi">WML-asiakirja</comment>
     <comment xml:lang="fo">WML skjal</comment>
     <comment xml:lang="fr">document WML</comment>
+    <comment xml:lang="fur">document WML</comment>
     <comment xml:lang="ga">cáipéis WML</comment>
     <comment xml:lang="gl">documento WML</comment>
     <comment xml:lang="he">מסמך WML</comment>
@@ -32726,7 +33931,7 @@
     <comment xml:lang="oc">document WML</comment>
     <comment xml:lang="pl">Dokument WML</comment>
     <comment xml:lang="pt">documento WML</comment>
-    <comment xml:lang="pt_BR">Documento WML</comment>
+    <comment xml:lang="pt-BR">Documento WML</comment>
     <comment xml:lang="ro">Document WML</comment>
     <comment xml:lang="ru">Документ WML</comment>
     <comment xml:lang="sk">Dokument WML</comment>
@@ -32737,8 +33942,8 @@
     <comment xml:lang="tr">WML belgesi</comment>
     <comment xml:lang="uk">документ WML</comment>
     <comment xml:lang="vi">Tài liệu WML</comment>
-    <comment xml:lang="zh_CN">WML 文档</comment>
-    <comment xml:lang="zh_TW">WML 文件</comment>
+    <comment xml:lang="zh-CN">WML 文档</comment>
+    <comment xml:lang="zh-TW">WML 文件</comment>
     <acronym>WML</acronym>
     <expanded-acronym>Wireless Markup Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -32746,20 +33951,22 @@
   </mime-type>
   <mime-type type="text/vnd.wap.wmlscript">
     <comment>WMLScript program</comment>
+    <comment xml:lang="af">WMLScript-program</comment>
     <comment xml:lang="ar">برنامج WMLScript</comment>
-    <comment xml:lang="be@latin">Prahrama WMLScript</comment>
+    <comment xml:lang="be-Latn">Prahrama WMLScript</comment>
     <comment xml:lang="bg">Програма — WMLScript</comment>
     <comment xml:lang="ca">programa WMLScript</comment>
     <comment xml:lang="cs">program WMLScript</comment>
     <comment xml:lang="da">WMLScript-program</comment>
     <comment xml:lang="de">WMLScript-Programm</comment>
     <comment xml:lang="el">Πρόγραμμα WMLScript</comment>
-    <comment xml:lang="en_GB">WMLScript program</comment>
+    <comment xml:lang="en-GB">WMLScript program</comment>
     <comment xml:lang="es">programa en WMLScript</comment>
     <comment xml:lang="eu">WMLScript programa</comment>
     <comment xml:lang="fi">WMLScript-ohjelma</comment>
     <comment xml:lang="fo">WMLScript forrit</comment>
     <comment xml:lang="fr">programme WMLScript</comment>
+    <comment xml:lang="fur">program WMLScript</comment>
     <comment xml:lang="ga">ríomhchlár WMLScript</comment>
     <comment xml:lang="gl">programa en WMLScript</comment>
     <comment xml:lang="he">תכנית של WMLScript</comment>
@@ -32779,7 +33986,7 @@
     <comment xml:lang="oc">programa WMLEscript</comment>
     <comment xml:lang="pl">Pogram WMLScript</comment>
     <comment xml:lang="pt">programa WMLScript</comment>
-    <comment xml:lang="pt_BR">Programa WMLScript</comment>
+    <comment xml:lang="pt-BR">Programa WMLScript</comment>
     <comment xml:lang="ro">Program WMLScript</comment>
     <comment xml:lang="ru">Программа WMLScript</comment>
     <comment xml:lang="sk">Program WMLScript</comment>
@@ -32790,27 +33997,60 @@
     <comment xml:lang="tr">WMLScript programı</comment>
     <comment xml:lang="uk">програма мовою WMLScript</comment>
     <comment xml:lang="vi">Chương trình WMLScript</comment>
-    <comment xml:lang="zh_CN">WMLScript 程序</comment>
-    <comment xml:lang="zh_TW">WMLScript 程式</comment>
+    <comment xml:lang="zh-CN">WMLScript 程序</comment>
+    <comment xml:lang="zh-TW">WMLScript 程式</comment>
     <glob pattern="*.wmls"/>
   </mime-type>
+  <mime-type type="text/vnd.senx.warpscript">
+    <comment>WarpScript source code</comment>
+    <comment xml:lang="bg">Изходен код — WarpScript</comment>
+    <comment xml:lang="ca">codi font en WarpScript</comment>
+    <comment xml:lang="cs">zdrojový kód v jazyce WarpScript</comment>
+    <comment xml:lang="da">WarpScript-kildekode</comment>
+    <comment xml:lang="de">WarpScript-Quelltext</comment>
+    <comment xml:lang="en-GB">WarpScript source code</comment>
+    <comment xml:lang="es">código fuente en WarpScript</comment>
+    <comment xml:lang="eu">WarpScript iturburu-kodea</comment>
+    <comment xml:lang="fi">WarpScript-lähdekoodi</comment>
+    <comment xml:lang="fr">code source WarpScript</comment>
+    <comment xml:lang="fur">codiç sorzint WarpScript</comment>
+    <comment xml:lang="hr">WarpScript izvorni kôd</comment>
+    <comment xml:lang="hu">WarpScript forráskód</comment>
+    <comment xml:lang="id">Kode sumber WarpScript</comment>
+    <comment xml:lang="it">Codice sorgente WarpScript</comment>
+    <comment xml:lang="kk">WarpScript бастапқы коды</comment>
+    <comment xml:lang="ko">WarpScript 소스 코드</comment>
+    <comment xml:lang="pl">Kod źródłowy WarpScript</comment>
+    <comment xml:lang="pt-BR">Código-fonte WarpScript</comment>
+    <comment xml:lang="ru">Исходный код WarpScript</comment>
+    <comment xml:lang="sl">Izvorna koda WarpScript</comment>
+    <comment xml:lang="sv">WarpScript-källkod</comment>
+    <comment xml:lang="tr">WarpScript kaynak kodu</comment>
+    <comment xml:lang="uk">вихідний код мовою WarpScript</comment>
+    <comment xml:lang="zh-CN">WarpScript 源代码</comment>
+    <comment xml:lang="zh-TW">WarpScript 原始碼</comment>
+    <sub-class-of type="text/plain"/>
+    <glob pattern="*.mc2"/>
+  </mime-type>  
   <mime-type type="application/x-ace">
     <comment>ACE archive</comment>
+    <comment xml:lang="af">ACE-argief</comment>
     <comment xml:lang="ar">أرشيف ACE</comment>
-    <comment xml:lang="be@latin">Archiŭ ACE</comment>
+    <comment xml:lang="be-Latn">Archiŭ ACE</comment>
     <comment xml:lang="bg">Архив — ACE</comment>
     <comment xml:lang="ca">arxiu ACE</comment>
     <comment xml:lang="cs">archiv ACE</comment>
     <comment xml:lang="da">ACE-arkiv</comment>
     <comment xml:lang="de">ACE-Archiv</comment>
     <comment xml:lang="el">Συμπιεσμένο αρχείο ACE</comment>
-    <comment xml:lang="en_GB">ACE archive</comment>
+    <comment xml:lang="en-GB">ACE archive</comment>
     <comment xml:lang="eo">ACE-arkivo</comment>
     <comment xml:lang="es">archivador ACE</comment>
     <comment xml:lang="eu">ACE artxiboa</comment>
     <comment xml:lang="fi">ACE-arkisto</comment>
     <comment xml:lang="fo">ACE skjalasavn</comment>
     <comment xml:lang="fr">archive ACE</comment>
+    <comment xml:lang="fur">archivi ACE</comment>
     <comment xml:lang="ga">cartlann ACE</comment>
     <comment xml:lang="gl">arquivo ACE</comment>
     <comment xml:lang="he">ארכיון ACE</comment>
@@ -32831,7 +34071,7 @@
     <comment xml:lang="oc">archiu ACE</comment>
     <comment xml:lang="pl">Archiwum ACE</comment>
     <comment xml:lang="pt">arquivo ACE</comment>
-    <comment xml:lang="pt_BR">Pacote ACE</comment>
+    <comment xml:lang="pt-BR">Pacote ACE</comment>
     <comment xml:lang="ro">Arhivă ACE</comment>
     <comment xml:lang="ru">Архив ACE</comment>
     <comment xml:lang="sk">Archív ACE</comment>
@@ -32842,31 +34082,33 @@
     <comment xml:lang="tr">ACE arşivi</comment>
     <comment xml:lang="uk">архів ACE</comment>
     <comment xml:lang="vi">Kho nén ACE</comment>
-    <comment xml:lang="zh_CN">ACE 归档文件</comment>
-    <comment xml:lang="zh_TW">ACE 封存檔</comment>
+    <comment xml:lang="zh-CN">ACE 归档文件</comment>
+    <comment xml:lang="zh-TW">ACE 封存檔</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="60">
-      <match value="**ACE**" type="string" offset="7"/>
+      <match type="string" value="**ACE**" offset="7"/>
     </magic>
     <glob pattern="*.ace"/>
   </mime-type>
   <mime-type type="text/x-adasrc">
     <comment>Ada source code</comment>
+    <comment xml:lang="af">Ada-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Ada</comment>
-    <comment xml:lang="be@latin">Kryničny kod Ada</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Ada</comment>
     <comment xml:lang="bg">Изходен код — Ada</comment>
     <comment xml:lang="ca">codi font en Ada</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Ada</comment>
     <comment xml:lang="da">Ada-kildekode</comment>
     <comment xml:lang="de">Ada-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Ada</comment>
-    <comment xml:lang="en_GB">Ada source code</comment>
+    <comment xml:lang="en-GB">Ada source code</comment>
     <comment xml:lang="eo">Ada-fontkodo</comment>
     <comment xml:lang="es">código fuente en Ada</comment>
     <comment xml:lang="eu">Ada iturburu-kodea</comment>
     <comment xml:lang="fi">Ada-lähdekoodi</comment>
     <comment xml:lang="fo">Ada keldukota</comment>
     <comment xml:lang="fr">code source Ada</comment>
+    <comment xml:lang="fur">codiç sorzint Ada</comment>
     <comment xml:lang="ga">cód foinseach Ada</comment>
     <comment xml:lang="gl">código fonte en Ada</comment>
     <comment xml:lang="he">קוד מקור Ada</comment>
@@ -32888,7 +34130,7 @@
     <comment xml:lang="oc">còde font Ada</comment>
     <comment xml:lang="pl">Kod źródłowy Ada</comment>
     <comment xml:lang="pt">código origem Ada</comment>
-    <comment xml:lang="pt_BR">Código-fonte Ada</comment>
+    <comment xml:lang="pt-BR">Código-fonte Ada</comment>
     <comment xml:lang="ro">Cod sursă Ada</comment>
     <comment xml:lang="ru">Исходный код Ada</comment>
     <comment xml:lang="sk">Zdrojový kód jazyka Ada</comment>
@@ -32899,29 +34141,31 @@
     <comment xml:lang="tr">Ada kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Ada</comment>
     <comment xml:lang="vi">Mã nguồn Ada</comment>
-    <comment xml:lang="zh_CN">Ada 源代码</comment>
-    <comment xml:lang="zh_TW">Ada 源碼</comment>
+    <comment xml:lang="zh-CN">Ada 源代码</comment>
+    <comment xml:lang="zh-TW">Ada 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.adb"/>
     <glob pattern="*.ads"/>
   </mime-type>
   <mime-type type="text/x-authors">
     <comment>author list</comment>
+    <comment xml:lang="af">outeurlys</comment>
     <comment xml:lang="ar">لائحة المؤلف</comment>
-    <comment xml:lang="be@latin">śpis aŭtaraŭ</comment>
+    <comment xml:lang="be-Latn">śpis aŭtaraŭ</comment>
     <comment xml:lang="bg">Списък на авторите</comment>
     <comment xml:lang="ca">llista d'autors</comment>
     <comment xml:lang="cs">seznam autorů</comment>
     <comment xml:lang="da">forfatterliste</comment>
     <comment xml:lang="de">Autorenliste</comment>
     <comment xml:lang="el">Κατάλογος συγγραφέων</comment>
-    <comment xml:lang="en_GB">author list</comment>
+    <comment xml:lang="en-GB">author list</comment>
     <comment xml:lang="eo">listo de aŭtoroj</comment>
     <comment xml:lang="es">lista de autores</comment>
     <comment xml:lang="eu">egile-zerrenda</comment>
     <comment xml:lang="fi">tekijäluettelo</comment>
     <comment xml:lang="fo">høvundalisti</comment>
     <comment xml:lang="fr">liste d'auteurs</comment>
+    <comment xml:lang="fur">liste di autôrs</comment>
     <comment xml:lang="ga">liosta údar</comment>
     <comment xml:lang="gl">lista de autores</comment>
     <comment xml:lang="he">רשימת יוצרים</comment>
@@ -32942,7 +34186,7 @@
     <comment xml:lang="oc">lista d'autors</comment>
     <comment xml:lang="pl">Lista autorów</comment>
     <comment xml:lang="pt">lista de autores</comment>
-    <comment xml:lang="pt_BR">Lista de autores</comment>
+    <comment xml:lang="pt-BR">Lista de autores</comment>
     <comment xml:lang="ro">listă autori</comment>
     <comment xml:lang="ru">Список авторов</comment>
     <comment xml:lang="sk">Zoznam autorov</comment>
@@ -32953,29 +34197,31 @@
     <comment xml:lang="tr">yazar listesi</comment>
     <comment xml:lang="uk">перелік авторів</comment>
     <comment xml:lang="vi">danh sách tác giả</comment>
-    <comment xml:lang="zh_CN">作者列表</comment>
-    <comment xml:lang="zh_TW">作者清單</comment>
+    <comment xml:lang="zh-CN">作者列表</comment>
+    <comment xml:lang="zh-TW">作者清單</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="AUTHORS"/>
   </mime-type>
   <mime-type type="text/x-bibtex">
     <comment>BibTeX document</comment>
+    <comment xml:lang="af">BibTeX-dokument</comment>
     <comment xml:lang="ar">مستند BibTeX</comment>
     <comment xml:lang="ast">Documentu de BibTeX</comment>
-    <comment xml:lang="be@latin">Dakument BibTeX</comment>
+    <comment xml:lang="be-Latn">Dakument BibTeX</comment>
     <comment xml:lang="bg">Документ — BibTeX</comment>
     <comment xml:lang="ca">document BibTeX</comment>
     <comment xml:lang="cs">dokument BibTeX</comment>
     <comment xml:lang="da">BibTeX-dokument</comment>
     <comment xml:lang="de">BibTeX-Dokument</comment>
     <comment xml:lang="el">Έγγραφο BibTeX</comment>
-    <comment xml:lang="en_GB">BibTeX document</comment>
+    <comment xml:lang="en-GB">BibTeX document</comment>
     <comment xml:lang="eo">BibTeX-dokumento</comment>
     <comment xml:lang="es">documento BibTeX</comment>
     <comment xml:lang="eu">BibTeX dokumentua</comment>
     <comment xml:lang="fi">BibTeX-asiakirja</comment>
     <comment xml:lang="fo">BibTeX skjal</comment>
     <comment xml:lang="fr">document BibTeX</comment>
+    <comment xml:lang="fur">document BibTeX</comment>
     <comment xml:lang="ga">cáipéis BibTeX</comment>
     <comment xml:lang="gl">documento BibTex</comment>
     <comment xml:lang="he">מסמך BibTeX</comment>
@@ -32996,7 +34242,7 @@
     <comment xml:lang="oc">document BibTeX</comment>
     <comment xml:lang="pl">Dokument BibTeX</comment>
     <comment xml:lang="pt">documento BibTeX</comment>
-    <comment xml:lang="pt_BR">Documento BibTeX</comment>
+    <comment xml:lang="pt-BR">Documento BibTeX</comment>
     <comment xml:lang="ro">Document BibTeX</comment>
     <comment xml:lang="ru">Документ BibTeX</comment>
     <comment xml:lang="sk">Dokument BibTeX</comment>
@@ -33007,30 +34253,31 @@
     <comment xml:lang="tr">BibTeX belgesi</comment>
     <comment xml:lang="uk">документ BibTeX</comment>
     <comment xml:lang="vi">Tài liệu BibTeX</comment>
-    <comment xml:lang="zh_CN">BibTeX 文档</comment>
-    <comment xml:lang="zh_TW">BibTeX 文件</comment>
+    <comment xml:lang="zh-CN">BibTeX 文档</comment>
+    <comment xml:lang="zh-TW">BibTeX 文件</comment>
     <sub-class-of type="text/plain"/>
     <magic>
-      <match value="% This file was created with JabRef" type="string" offset="0"/>
+      <match type="string" value="% This file was created with JabRef" offset="0"/>
     </magic>
     <glob pattern="*.bib"/>
   </mime-type>
   <mime-type type="text/x-c++hdr">
     <comment>C++ header</comment>
     <comment xml:lang="ar">ترويسة سي++</comment>
-    <comment xml:lang="be@latin">Zahałoŭny fajł C++</comment>
+    <comment xml:lang="be-Latn">Zahałoŭny fajł C++</comment>
     <comment xml:lang="bg">Заглавен файл — C++</comment>
     <comment xml:lang="ca">capçalera en C++</comment>
     <comment xml:lang="cs">hlavičkový soubor C++</comment>
     <comment xml:lang="da">C++-posthoved</comment>
     <comment xml:lang="de">C++-Header</comment>
     <comment xml:lang="el">Κεφαλίδα C++</comment>
-    <comment xml:lang="en_GB">C++ header</comment>
+    <comment xml:lang="en-GB">C++ header</comment>
     <comment xml:lang="es">cabecera de código fuente en C++</comment>
     <comment xml:lang="eu">C++ goiburua</comment>
     <comment xml:lang="fi">C++-otsake</comment>
     <comment xml:lang="fo">C++ tekshøvd</comment>
     <comment xml:lang="fr">en-tête C++</comment>
+    <comment xml:lang="fur">intestazion C++</comment>
     <comment xml:lang="ga">ceanntásc C++</comment>
     <comment xml:lang="gl">cabeceira de código fonte en C++</comment>
     <comment xml:lang="he">כותר C++‎</comment>
@@ -33051,7 +34298,7 @@
     <comment xml:lang="oc">entèsta C++</comment>
     <comment xml:lang="pl">Plik nagłówkowy C++</comment>
     <comment xml:lang="pt">cabeçalho C++</comment>
-    <comment xml:lang="pt_BR">Cabeçalho C++</comment>
+    <comment xml:lang="pt-BR">Cabeçalho C++</comment>
     <comment xml:lang="ro">Antet C++</comment>
     <comment xml:lang="ru">Заголовочный файл C++</comment>
     <comment xml:lang="sk">Hlavičky jazyka C++</comment>
@@ -33062,8 +34309,8 @@
     <comment xml:lang="tr">C++ başlığı</comment>
     <comment xml:lang="uk">файл заголовків мовою C++</comment>
     <comment xml:lang="vi">Phần đầu mã nguồn C++</comment>
-    <comment xml:lang="zh_CN">C++ 头文件</comment>
-    <comment xml:lang="zh_TW">C++ 標頭檔</comment>
+    <comment xml:lang="zh-CN">C++ 头文件</comment>
+    <comment xml:lang="zh-TW">C++ 標頭檔</comment>
     <sub-class-of type="text/x-chdr"/>
     <glob pattern="*.hh"/>
     <glob pattern="*.hp"/>
@@ -33073,21 +34320,23 @@
   </mime-type>
   <mime-type type="text/x-c++src">
     <comment>C++ source code</comment>
+    <comment xml:lang="af">C++-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر سي++</comment>
-    <comment xml:lang="be@latin">Kryničny kod C++</comment>
+    <comment xml:lang="be-Latn">Kryničny kod C++</comment>
     <comment xml:lang="bg">Изходен код — C++</comment>
     <comment xml:lang="ca">codi font en C++</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce C++</comment>
     <comment xml:lang="da">C++-kildekode</comment>
     <comment xml:lang="de">C++-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας C++</comment>
-    <comment xml:lang="en_GB">C++ source code</comment>
+    <comment xml:lang="en-GB">C++ source code</comment>
     <comment xml:lang="eo">C++-fontkodo</comment>
     <comment xml:lang="es">código fuente en C++</comment>
     <comment xml:lang="eu">C++ iturburu-kodea</comment>
     <comment xml:lang="fi">C++-lähdekoodi</comment>
     <comment xml:lang="fo">C++ keldukota</comment>
     <comment xml:lang="fr">code source C++</comment>
+    <comment xml:lang="fur">codiç sorzint C++</comment>
     <comment xml:lang="ga">cód foinseach C++</comment>
     <comment xml:lang="gl">código fonte de C++</comment>
     <comment xml:lang="he">קוד מקור של C++‎</comment>
@@ -33109,7 +34358,7 @@
     <comment xml:lang="oc">còde font C++</comment>
     <comment xml:lang="pl">Kod źródłowy C++</comment>
     <comment xml:lang="pt">código origem C++</comment>
-    <comment xml:lang="pt_BR">Código-fonte C++</comment>
+    <comment xml:lang="pt-BR">Código-fonte C++</comment>
     <comment xml:lang="ro">Cod sursă C++</comment>
     <comment xml:lang="ru">Исходный код C++</comment>
     <comment xml:lang="sk">Zdrojový kód jazyka C++</comment>
@@ -33120,8 +34369,8 @@
     <comment xml:lang="tr">C++ kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою C++</comment>
     <comment xml:lang="vi">Mã nguồn C++</comment>
-    <comment xml:lang="zh_CN">C++ 源代码</comment>
-    <comment xml:lang="zh_TW">C++ 源碼</comment>
+    <comment xml:lang="zh-CN">C++ 源代码</comment>
+    <comment xml:lang="zh-TW">C++ 源碼</comment>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.cpp"/>
     <glob pattern="*.cxx"/>
@@ -33131,21 +34380,23 @@
   </mime-type>
   <mime-type type="text/x-changelog">
     <comment>ChangeLog document</comment>
+    <comment xml:lang="af">ChangeLog-dokument</comment>
     <comment xml:lang="ar">مستند ChangeLog</comment>
     <comment xml:lang="ast">Documentu de rexistru de cambeos</comment>
-    <comment xml:lang="be@latin">Dakument zafiksavanych źmienaŭ ChangeLog</comment>
+    <comment xml:lang="be-Latn">Dakument zafiksavanych źmienaŭ ChangeLog</comment>
     <comment xml:lang="bg">Дневник за промени — ChangeLog</comment>
     <comment xml:lang="ca">document de registre de canvis</comment>
     <comment xml:lang="cs">dokument ChangeLog</comment>
     <comment xml:lang="da">ChangeLot-dokument</comment>
     <comment xml:lang="de">Änderungsprotokoll-Dokument</comment>
     <comment xml:lang="el">Έγγραφο ChangeLog</comment>
-    <comment xml:lang="en_GB">ChangeLog document</comment>
+    <comment xml:lang="en-GB">ChangeLog document</comment>
     <comment xml:lang="es">documento de registro de cambios</comment>
     <comment xml:lang="eu">ChangeLog dokumentua</comment>
     <comment xml:lang="fi">Muutoslokiasiakirja</comment>
     <comment xml:lang="fo">ChangeLog skjal</comment>
     <comment xml:lang="fr">document ChangeLog</comment>
+    <comment xml:lang="fur">document ChangeLog</comment>
     <comment xml:lang="ga">cáipéis ChangeLog</comment>
     <comment xml:lang="gl">documento Changelog</comment>
     <comment xml:lang="he">מסמך של ChangeLog</comment>
@@ -33166,7 +34417,7 @@
     <comment xml:lang="oc">document ChangeLog</comment>
     <comment xml:lang="pl">Dokument zmian (ChangeLog)</comment>
     <comment xml:lang="pt">documento ChangeLog</comment>
-    <comment xml:lang="pt_BR">Documento ChangeLog</comment>
+    <comment xml:lang="pt-BR">Documento ChangeLog</comment>
     <comment xml:lang="ro">Document ChangeLog</comment>
     <comment xml:lang="ru">Протокол изменений</comment>
     <comment xml:lang="sk">Dokument ChangeLog</comment>
@@ -33174,30 +34425,31 @@
     <comment xml:lang="sq">Dokument ChangeLog</comment>
     <comment xml:lang="sr">документ дневника измена</comment>
     <comment xml:lang="sv">Ändringsloggsdokument</comment>
-    <comment xml:lang="tr">Değişim Günlüğü belgesi</comment>
+    <comment xml:lang="tr">ChangeLog belgesi</comment>
     <comment xml:lang="uk">документ ChangeLog</comment>
     <comment xml:lang="vi">Tài liệu ChangeLog (ghi lưu thay đổi)</comment>
-    <comment xml:lang="zh_CN">变更日志文档</comment>
-    <comment xml:lang="zh_TW">ChangeLog 文件</comment>
+    <comment xml:lang="zh-CN">变更日志文档</comment>
+    <comment xml:lang="zh-TW">ChangeLog 文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="ChangeLog"/>
   </mime-type>
   <mime-type type="text/x-chdr">
     <comment>C header</comment>
     <comment xml:lang="ar">ترويسة C</comment>
-    <comment xml:lang="be@latin">Zahałoŭny fajł C</comment>
+    <comment xml:lang="be-Latn">Zahałoŭny fajł C</comment>
     <comment xml:lang="bg">Заглавен файл — C</comment>
     <comment xml:lang="ca">capçalera en C</comment>
     <comment xml:lang="cs">hlavičkový soubor C</comment>
     <comment xml:lang="da">C-posthoved</comment>
     <comment xml:lang="de">C-Header</comment>
     <comment xml:lang="el">Κεφαλίδα C</comment>
-    <comment xml:lang="en_GB">C header</comment>
+    <comment xml:lang="en-GB">C header</comment>
     <comment xml:lang="es">cabecera de código fuente en C</comment>
     <comment xml:lang="eu">C goiburua</comment>
     <comment xml:lang="fi">C-otsake</comment>
     <comment xml:lang="fo">C tekshøvd</comment>
     <comment xml:lang="fr">en-tête C</comment>
+    <comment xml:lang="fur">intestazion C</comment>
     <comment xml:lang="ga">ceanntásc C</comment>
     <comment xml:lang="gl">cabeceira de códifo fonte de C</comment>
     <comment xml:lang="he">כותר C</comment>
@@ -33218,7 +34470,7 @@
     <comment xml:lang="oc">entèsta C</comment>
     <comment xml:lang="pl">Plik nagłówkowy C</comment>
     <comment xml:lang="pt">cabeçalho C</comment>
-    <comment xml:lang="pt_BR">Cabeçalho C</comment>
+    <comment xml:lang="pt-BR">Cabeçalho C</comment>
     <comment xml:lang="ro">Antet C</comment>
     <comment xml:lang="ru">Заголовочный файл C</comment>
     <comment xml:lang="sk">Hlavičky jazyka C</comment>
@@ -33229,28 +34481,30 @@
     <comment xml:lang="tr">C başlığı</comment>
     <comment xml:lang="uk">файл заголовків мовою C</comment>
     <comment xml:lang="vi">Phần đầu mã nguồn C</comment>
-    <comment xml:lang="zh_CN">C 程序头文件</comment>
-    <comment xml:lang="zh_TW">C 標頭檔</comment>
+    <comment xml:lang="zh-CN">C 程序头文件</comment>
+    <comment xml:lang="zh-TW">C 標頭檔</comment>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.h"/>
   </mime-type>
   <mime-type type="text/x-cmake">
     <comment>CMake source code</comment>
+    <comment xml:lang="af">CMake-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر CMake</comment>
-    <comment xml:lang="be@latin">Kryničny kod CMake</comment>
+    <comment xml:lang="be-Latn">Kryničny kod CMake</comment>
     <comment xml:lang="bg">Изходен код — CMake</comment>
     <comment xml:lang="ca">codi font en CMake</comment>
     <comment xml:lang="cs">zdrojový kód CMake</comment>
     <comment xml:lang="da">CMake-kildekode</comment>
     <comment xml:lang="de">CMake-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας CMake</comment>
-    <comment xml:lang="en_GB">CMake source code</comment>
+    <comment xml:lang="en-GB">CMake source code</comment>
     <comment xml:lang="eo">CMake-fontkodo</comment>
     <comment xml:lang="es">código fuente en CMake</comment>
     <comment xml:lang="eu">CMake iturburu-kodea</comment>
     <comment xml:lang="fi">CMake-lähdekoodi</comment>
     <comment xml:lang="fo">CMake keldukota</comment>
     <comment xml:lang="fr">code source CMake</comment>
+    <comment xml:lang="fur">codiç sorzint CMake</comment>
     <comment xml:lang="ga">cód foinseach CMake</comment>
     <comment xml:lang="gl">código fonte de CMake</comment>
     <comment xml:lang="he">קוד מקור של CMake</comment>
@@ -33271,7 +34525,7 @@
     <comment xml:lang="oc">còde font CMake</comment>
     <comment xml:lang="pl">Kod źródłowy CMake</comment>
     <comment xml:lang="pt">código origem CMake</comment>
-    <comment xml:lang="pt_BR">Código-fonte CMake</comment>
+    <comment xml:lang="pt-BR">Código-fonte CMake</comment>
     <comment xml:lang="ro">Cod sursă CMake</comment>
     <comment xml:lang="ru">Исходный код CMake</comment>
     <comment xml:lang="sk">Zdrojový kód CMake</comment>
@@ -33282,30 +34536,55 @@
     <comment xml:lang="tr">CMake kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код CMake</comment>
     <comment xml:lang="vi">Mã nguồn CMake</comment>
-    <comment xml:lang="zh_CN">CMake 源代码</comment>
-    <comment xml:lang="zh_TW">CMake 源碼</comment>
+    <comment xml:lang="zh-CN">CMake 源代码</comment>
+    <comment xml:lang="zh-TW">CMake 源碼</comment>
     <glob pattern="*.cmake"/>
     <glob pattern="CMakeLists.txt"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
+  <mime-type type="text/x-common-lisp">
+    <comment>Common Lisp source code</comment>
+    <comment xml:lang="ca">codi font en Common Lisp</comment>
+    <comment xml:lang="da">Common Lisp-kildekode</comment>
+    <comment xml:lang="de">Common-Lisp-Quelltext</comment>
+    <comment xml:lang="en-GB">Common Lisp source code</comment>
+    <comment xml:lang="es">código fuente en Common Lisp</comment>
+    <comment xml:lang="fi">Yleinen Lisp-lähdekoodi</comment>
+    <comment xml:lang="fr">code source Common Lisp</comment>
+    <comment xml:lang="hr">Common Lisp izvorni kôd</comment>
+    <comment xml:lang="it">Codice sorgente Common Lisp</comment>
+    <comment xml:lang="pl">Kod źródłowy Common Lisp</comment>
+    <comment xml:lang="pt-BR">Código-fonte Common Lisp</comment>
+    <comment xml:lang="sv">Common Lisp-källkod</comment>
+    <comment xml:lang="uk">вихідний код мовою Common Lisp</comment>
+    <comment xml:lang="zh-CN">Common Lisp 源代码</comment>
+    <comment xml:lang="zh-TW">Common Lisp 源碼</comment>
+    <sub-class-of type="text/plain"/>
+    <glob pattern="*.asd"/>
+    <glob pattern="*.fasl"/>
+    <glob pattern="*.lisp"/>
+    <glob pattern="*.ros"/>
+  </mime-type>
   <mime-type type="text/csv">
     <comment>CSV document</comment>
+    <comment xml:lang="af">CSV-dokument</comment>
     <comment xml:lang="ar">مستند CSV</comment>
     <comment xml:lang="ast">Documentu CVS</comment>
-    <comment xml:lang="be@latin">Dakument CSV</comment>
+    <comment xml:lang="be-Latn">Dakument CSV</comment>
     <comment xml:lang="bg">Документ — CSV</comment>
     <comment xml:lang="ca">document CSV</comment>
     <comment xml:lang="cs">dokument CSV</comment>
     <comment xml:lang="da">CSV-dokument</comment>
     <comment xml:lang="de">CSV-Dokument</comment>
     <comment xml:lang="el">Έγγραφο CSV</comment>
-    <comment xml:lang="en_GB">CSV document</comment>
+    <comment xml:lang="en-GB">CSV document</comment>
     <comment xml:lang="eo">CSV-dokumento</comment>
     <comment xml:lang="es">documento CSV</comment>
     <comment xml:lang="eu">CSV dokumentua</comment>
     <comment xml:lang="fi">CSV-asiakirja</comment>
     <comment xml:lang="fo">CSV skjal</comment>
     <comment xml:lang="fr">document CSV</comment>
+    <comment xml:lang="fur">document CSV</comment>
     <comment xml:lang="ga">cáipéis CSV</comment>
     <comment xml:lang="gl">documento CSV</comment>
     <comment xml:lang="he">מסמך CSV</comment>
@@ -33326,7 +34605,7 @@
     <comment xml:lang="oc">document CSV</comment>
     <comment xml:lang="pl">Dokument CSV</comment>
     <comment xml:lang="pt">documento CSV</comment>
-    <comment xml:lang="pt_BR">Documento CSV</comment>
+    <comment xml:lang="pt-BR">Documento CSV</comment>
     <comment xml:lang="ro">Document CSV</comment>
     <comment xml:lang="ru">Документ CSV</comment>
     <comment xml:lang="sk">Dokument CSV</comment>
@@ -33337,8 +34616,8 @@
     <comment xml:lang="tr">CSV belgesi</comment>
     <comment xml:lang="uk">документ CSV</comment>
     <comment xml:lang="vi">Tài liệu CSV</comment>
-    <comment xml:lang="zh_CN">CSV 文档</comment>
-    <comment xml:lang="zh_TW">CSV 文件</comment>
+    <comment xml:lang="zh-CN">CSV 文档</comment>
+    <comment xml:lang="zh-TW">CSV 文件</comment>
     <acronym>CSV</acronym>
     <expanded-acronym>Comma Separated Values</expanded-acronym>
     <alias type="text/x-comma-separated-values"/>
@@ -33348,15 +34627,19 @@
   </mime-type>
   <mime-type type="text/csv-schema">
     <comment>CSV Schema document</comment>
+    <comment xml:lang="af">CSV Schema-dokument</comment>
     <comment xml:lang="ast">Documentu d'esquema CSV</comment>
+    <comment xml:lang="bg">Документ — схема на CSV</comment>
     <comment xml:lang="ca">document Schema de CSV</comment>
     <comment xml:lang="cs">dokument schématu CSV</comment>
     <comment xml:lang="da">CSV Schema-dokument</comment>
     <comment xml:lang="de">CSV-Schemadokument</comment>
-    <comment xml:lang="en_GB">CSV Schema document</comment>
+    <comment xml:lang="en-GB">CSV Schema document</comment>
     <comment xml:lang="es">documento esquemático CSV</comment>
     <comment xml:lang="eu">CSV Schema dokumentua</comment>
+    <comment xml:lang="fi">CSV Schema asiakirja</comment>
     <comment xml:lang="fr">document schéma CSV</comment>
+    <comment xml:lang="fur">document scheme CSV</comment>
     <comment xml:lang="ga">cáipéis scéimre CSV</comment>
     <comment xml:lang="he">מסמך פריסת CSV</comment>
     <comment xml:lang="hr">CSV Shema dokument</comment>
@@ -33368,15 +34651,16 @@
     <comment xml:lang="ko">CSV 스키마 문서</comment>
     <comment xml:lang="pl">Dokument schematu CSV</comment>
     <comment xml:lang="pt">documento CSV Schema</comment>
-    <comment xml:lang="pt_BR">Documento CSV Schema</comment>
+    <comment xml:lang="pt-BR">Documento CSV Schema</comment>
     <comment xml:lang="ru">Документ CSV Schema</comment>
     <comment xml:lang="sk">Dokument schémy CSV</comment>
+    <comment xml:lang="sl">Dokument CSV Schema</comment>
     <comment xml:lang="sr">документ ЦСВ шеме</comment>
     <comment xml:lang="sv">CSV Schema-dokument</comment>
     <comment xml:lang="tr">CSV Şeması belgesi</comment>
     <comment xml:lang="uk">документ Schema у форматі CSV</comment>
-    <comment xml:lang="zh_CN">CSV 架构文档</comment>
-    <comment xml:lang="zh_TW">CSV Schema 文件</comment>
+    <comment xml:lang="zh-CN">CSV 架构文档</comment>
+    <comment xml:lang="zh-TW">CSV Schema 文件</comment>
     <acronym>CSV</acronym>
     <expanded-acronym>Comma Separated Values</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -33384,21 +34668,23 @@
   </mime-type>
   <mime-type type="text/x-copying">
     <comment>license terms</comment>
+    <comment xml:lang="af">lisensievoorwaardes</comment>
     <comment xml:lang="ar">شروط الترخيص</comment>
     <comment xml:lang="ast">términos de llicencia</comment>
-    <comment xml:lang="be@latin">licenzijnyja ŭmovy</comment>
+    <comment xml:lang="be-Latn">licenzijnyja ŭmovy</comment>
     <comment xml:lang="bg">Лицензни условия</comment>
     <comment xml:lang="ca">condicions de llicència</comment>
     <comment xml:lang="cs">licenční podmínky</comment>
     <comment xml:lang="da">licensbetingelser</comment>
     <comment xml:lang="de">Lizenzbedingungen</comment>
     <comment xml:lang="el">Όροι άδειας</comment>
-    <comment xml:lang="en_GB">licence terms</comment>
+    <comment xml:lang="en-GB">licence terms</comment>
     <comment xml:lang="es">términos de licencia</comment>
     <comment xml:lang="eu">lizentzia baldintzak</comment>
     <comment xml:lang="fi">lisenssiehdot</comment>
     <comment xml:lang="fo">loyvistreytir</comment>
     <comment xml:lang="fr">termes de licence</comment>
+    <comment xml:lang="fur">tiermins di licence</comment>
     <comment xml:lang="ga">téarmaí ceadúnais</comment>
     <comment xml:lang="gl">termos de licenza</comment>
     <comment xml:lang="he">תנאי רישיון</comment>
@@ -33418,7 +34704,7 @@
     <comment xml:lang="oc">tèrmes de licéncia</comment>
     <comment xml:lang="pl">Warunki licencji</comment>
     <comment xml:lang="pt">termos de licença</comment>
-    <comment xml:lang="pt_BR">Termos de licença</comment>
+    <comment xml:lang="pt-BR">Termos de licença</comment>
     <comment xml:lang="ro">termeni de licență</comment>
     <comment xml:lang="ru">Лицензионное соглашение</comment>
     <comment xml:lang="sk">Licenčné podmienky</comment>
@@ -33429,27 +34715,30 @@
     <comment xml:lang="tr">lisans koşulları</comment>
     <comment xml:lang="uk">ліцензійні умови</comment>
     <comment xml:lang="vi">điều kiện giấy phép</comment>
-    <comment xml:lang="zh_CN">软件许可条款</comment>
-    <comment xml:lang="zh_TW">授權條款</comment>
+    <comment xml:lang="zh-CN">软件许可条款</comment>
+    <comment xml:lang="zh-TW">授權條款</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="COPYING"/>
   </mime-type>
   <mime-type type="text/x-credits">
     <comment>author credits</comment>
+    <comment xml:lang="af">outeurerkenning</comment>
     <comment xml:lang="ar">شكر وتقدير المؤلف</comment>
     <comment xml:lang="ast">creitos del autor</comment>
-    <comment xml:lang="be@latin">zasłuhi aŭtara</comment>
+    <comment xml:lang="be-Latn">zasłuhi aŭtara</comment>
     <comment xml:lang="bg">Благодарности към авторите</comment>
     <comment xml:lang="ca">atribucions d'autor</comment>
     <comment xml:lang="cs">autorské zásluhy</comment>
     <comment xml:lang="da">bidragydere</comment>
     <comment xml:lang="de">Autorendanksagung</comment>
     <comment xml:lang="el">Μνεία συγγραφέων</comment>
-    <comment xml:lang="en_GB">author credits</comment>
+    <comment xml:lang="en-GB">author credits</comment>
     <comment xml:lang="es">reconocimiento de autoría</comment>
+    <comment xml:lang="eu">egile-kredituak</comment>
     <comment xml:lang="fi">tekijöiden kiitokset</comment>
     <comment xml:lang="fo">høvundaheiður</comment>
     <comment xml:lang="fr">remerciements</comment>
+    <comment xml:lang="fur">ricognossiments autôrs</comment>
     <comment xml:lang="ga">admhálacha údar</comment>
     <comment xml:lang="gl">créditos de autor</comment>
     <comment xml:lang="he">קרדיטים של היוצר</comment>
@@ -33469,7 +34758,7 @@
     <comment xml:lang="oc">mercejaments</comment>
     <comment xml:lang="pl">Podziękowania autorów programu</comment>
     <comment xml:lang="pt">créditos de autor</comment>
-    <comment xml:lang="pt_BR">Créditos do autor</comment>
+    <comment xml:lang="pt-BR">Créditos do autor</comment>
     <comment xml:lang="ro">mulțumiri autori</comment>
     <comment xml:lang="ru">Авторы программы</comment>
     <comment xml:lang="sk">Autorské zásluhy</comment>
@@ -33480,28 +34769,30 @@
     <comment xml:lang="tr">yazar bilgileri</comment>
     <comment xml:lang="uk">подяки авторам програми</comment>
     <comment xml:lang="vi">công trạng tác giả</comment>
-    <comment xml:lang="zh_CN">软件作者致谢</comment>
-    <comment xml:lang="zh_TW">作者致謝名單</comment>
+    <comment xml:lang="zh-CN">软件作者致谢</comment>
+    <comment xml:lang="zh-TW">作者致謝名單</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="CREDITS"/>
   </mime-type>
   <mime-type type="text/x-csrc">
     <comment>C source code</comment>
+    <comment xml:lang="af">C-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر سي</comment>
-    <comment xml:lang="be@latin">Kryničny kod C</comment>
+    <comment xml:lang="be-Latn">Kryničny kod C</comment>
     <comment xml:lang="bg">Изходен код — C</comment>
     <comment xml:lang="ca">codi font en C</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce C</comment>
     <comment xml:lang="da">C-kildekode</comment>
     <comment xml:lang="de">C-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας C</comment>
-    <comment xml:lang="en_GB">C source code</comment>
+    <comment xml:lang="en-GB">C source code</comment>
     <comment xml:lang="eo">C-fontkodo</comment>
     <comment xml:lang="es">código fuente en C</comment>
     <comment xml:lang="eu">C iturburu-kodea</comment>
     <comment xml:lang="fi">C-lähdekoodi</comment>
     <comment xml:lang="fo">C keldukota</comment>
     <comment xml:lang="fr">code source C</comment>
+    <comment xml:lang="fur">codiç sorzint C</comment>
     <comment xml:lang="ga">cód foinseach C</comment>
     <comment xml:lang="gl">código fonte en C</comment>
     <comment xml:lang="he">קוד מקור של C</comment>
@@ -33523,7 +34814,7 @@
     <comment xml:lang="oc">còde font C</comment>
     <comment xml:lang="pl">Kod źródłowy C</comment>
     <comment xml:lang="pt">código origem C</comment>
-    <comment xml:lang="pt_BR">Código-fonte C</comment>
+    <comment xml:lang="pt-BR">Código-fonte C</comment>
     <comment xml:lang="ro">Cod sursă C</comment>
     <comment xml:lang="ru">Исходный код C</comment>
     <comment xml:lang="sk">Zdrojový kód jazyka C</comment>
@@ -33534,34 +34825,36 @@
     <comment xml:lang="tr">C kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою C</comment>
     <comment xml:lang="vi">Mã nguồn C</comment>
-    <comment xml:lang="zh_CN">C 源代码</comment>
-    <comment xml:lang="zh_TW">C 源碼</comment>
+    <comment xml:lang="zh-CN">C 源代码</comment>
+    <comment xml:lang="zh-TW">C 源碼</comment>
     <sub-class-of type="text/plain"/>
     <alias type="text/x-c"/>
     <glob pattern="*.c" case-sensitive="true"/>
     <magic priority="30">
-      <match value="/*" type="string" offset="0"/>
-      <match value="//" type="string" offset="0"/>
-      <match value="#include" type="string" offset="0"/>
+      <match type="string" value="/*" offset="0"/>
+      <match type="string" value="//" offset="0"/>
+      <match type="string" value="#include" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="text/x-csharp">
     <comment>C# source code</comment>
+    <comment xml:lang="af">C#-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر سي#</comment>
-    <comment xml:lang="be@latin">Kryničny kod C#</comment>
+    <comment xml:lang="be-Latn">Kryničny kod C#</comment>
     <comment xml:lang="bg">Изходен код — C#</comment>
     <comment xml:lang="ca">codi font en C#</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce C#</comment>
     <comment xml:lang="da">C#-kildekode</comment>
     <comment xml:lang="de">C#-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας C#</comment>
-    <comment xml:lang="en_GB">C# source code</comment>
+    <comment xml:lang="en-GB">C# source code</comment>
     <comment xml:lang="eo">C#-fontkodo</comment>
     <comment xml:lang="es">código fuente en C#</comment>
     <comment xml:lang="eu">C# iturburu-kodea</comment>
     <comment xml:lang="fi">C#-lähdekoodi</comment>
     <comment xml:lang="fo">C# keldukota</comment>
     <comment xml:lang="fr">code source C#</comment>
+    <comment xml:lang="fur">codiç sorzint C#</comment>
     <comment xml:lang="ga">cód foinseach C#</comment>
     <comment xml:lang="gl">código fonte en C#</comment>
     <comment xml:lang="he">קוד מקור של C#‎</comment>
@@ -33583,7 +34876,7 @@
     <comment xml:lang="oc">còde font C#</comment>
     <comment xml:lang="pl">Kod źródłowy C#</comment>
     <comment xml:lang="pt">código origem C#</comment>
-    <comment xml:lang="pt_BR">Código-fonte C#</comment>
+    <comment xml:lang="pt-BR">Código-fonte C#</comment>
     <comment xml:lang="ro">Cod sursă C#</comment>
     <comment xml:lang="ru">Исходный код C#</comment>
     <comment xml:lang="sk">Zdrojový kód jazyka C#</comment>
@@ -33594,28 +34887,30 @@
     <comment xml:lang="tr">C# kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою C#</comment>
     <comment xml:lang="vi">Mã nguồn C#</comment>
-    <comment xml:lang="zh_CN">C# 源代码</comment>
-    <comment xml:lang="zh_TW">C# 源碼</comment>
+    <comment xml:lang="zh-CN">C# 源代码</comment>
+    <comment xml:lang="zh-TW">C# 源碼</comment>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.cs"/>
   </mime-type>
   <mime-type type="text/x-vala">
     <comment>Vala source code</comment>
+    <comment xml:lang="af">Vala-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Vala</comment>
-    <comment xml:lang="be@latin">Kryničny kod Vala</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Vala</comment>
     <comment xml:lang="bg">Изходен код — Vala</comment>
     <comment xml:lang="ca">codi font en Vala</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Vala</comment>
-    <comment xml:lang="da">Valakildekode</comment>
+    <comment xml:lang="da">Vala-kildekode</comment>
     <comment xml:lang="de">Vala-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Vala</comment>
-    <comment xml:lang="en_GB">Vala source code</comment>
+    <comment xml:lang="en-GB">Vala source code</comment>
     <comment xml:lang="eo">Vala-fontkodo</comment>
     <comment xml:lang="es">código fuente en Vala</comment>
     <comment xml:lang="eu">Vala iturburu-kodea</comment>
     <comment xml:lang="fi">Vala-lähdekoodi</comment>
     <comment xml:lang="fo">Vala keldukota</comment>
     <comment xml:lang="fr">code source Vala</comment>
+    <comment xml:lang="fur">codiç sorzint Vala</comment>
     <comment xml:lang="ga">cód foinseach Vala</comment>
     <comment xml:lang="gl">código fonte en Vala</comment>
     <comment xml:lang="he">קוד מקור של Vala</comment>
@@ -33635,7 +34930,7 @@
     <comment xml:lang="oc">còde font Vala</comment>
     <comment xml:lang="pl">Kod źródłowy Vala</comment>
     <comment xml:lang="pt">código origem Vala</comment>
-    <comment xml:lang="pt_BR">Código-fonte Vala</comment>
+    <comment xml:lang="pt-BR">Código-fonte Vala</comment>
     <comment xml:lang="ro">Cod sursă Vala</comment>
     <comment xml:lang="ru">Исходный код Vala</comment>
     <comment xml:lang="sk">Zdrojový kód Vala</comment>
@@ -33646,26 +34941,28 @@
     <comment xml:lang="tr">Vala kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Vala</comment>
     <comment xml:lang="vi">Mã nguồn Vala</comment>
-    <comment xml:lang="zh_CN">Vala 源代码</comment>
-    <comment xml:lang="zh_TW">Vala 源碼</comment>
+    <comment xml:lang="zh-CN">Vala 源代码</comment>
+    <comment xml:lang="zh-TW">Vala 源碼</comment>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.vala"/>
     <glob pattern="*.vapi"/>
   </mime-type>
   <mime-type type="text/x-ooc">
     <comment>OOC source code</comment>
+    <comment xml:lang="af">OOC-bronkode</comment>
     <comment xml:lang="bg">Изходен код — OOC</comment>
     <comment xml:lang="ca">codi font en OOC</comment>
     <comment xml:lang="cs">zdrojový kód OOC</comment>
     <comment xml:lang="da">OOC-kildekode</comment>
     <comment xml:lang="de">OOC-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας OOC</comment>
-    <comment xml:lang="en_GB">OOC source code</comment>
+    <comment xml:lang="en-GB">OOC source code</comment>
     <comment xml:lang="eo">OOC-fontkodo</comment>
     <comment xml:lang="es">código fuente en OOC</comment>
     <comment xml:lang="eu">OOC iturburu-kodea</comment>
     <comment xml:lang="fi">OOC-lähdekoodi</comment>
     <comment xml:lang="fr">source code OOC</comment>
+    <comment xml:lang="fur">codiç sorzint OOC</comment>
     <comment xml:lang="ga">cód foinseach OOC</comment>
     <comment xml:lang="gl">código fonte de OOC</comment>
     <comment xml:lang="he">קוד מקור של OOC</comment>
@@ -33683,7 +34980,7 @@
     <comment xml:lang="oc">font còde OOC</comment>
     <comment xml:lang="pl">Kod źródłowy OOC</comment>
     <comment xml:lang="pt">código origem OOC</comment>
-    <comment xml:lang="pt_BR">Código-fonte OOC</comment>
+    <comment xml:lang="pt-BR">Código-fonte OOC</comment>
     <comment xml:lang="ru">Исходный код OOC</comment>
     <comment xml:lang="sk">Zdrojový kód OOC</comment>
     <comment xml:lang="sl">Izvorna koda OOC</comment>
@@ -33691,8 +34988,8 @@
     <comment xml:lang="sv">OOC-källkod</comment>
     <comment xml:lang="tr">OOC kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою OOC</comment>
-    <comment xml:lang="zh_CN">OOC 源代码</comment>
-    <comment xml:lang="zh_TW">OOC 源碼</comment>
+    <comment xml:lang="zh-CN">OOC 源代码</comment>
+    <comment xml:lang="zh-TW">OOC 源碼</comment>
     <acronym>OOC</acronym>
     <expanded-acronym>Out Of Class</expanded-acronym>
     <sub-class-of type="text/x-csrc"/>
@@ -33700,9 +34997,10 @@
   </mime-type>
   <mime-type type="text/x-dcl">
     <comment>DCL script</comment>
+    <comment xml:lang="af">DCL-skrip</comment>
     <comment xml:lang="ar">سكربت DCL</comment>
     <comment xml:lang="az">DCL skripti</comment>
-    <comment xml:lang="be@latin">Skrypt DCL</comment>
+    <comment xml:lang="be-Latn">Skrypt DCL</comment>
     <comment xml:lang="bg">Скрипт — DCL</comment>
     <comment xml:lang="ca">script DCL</comment>
     <comment xml:lang="cs">skript DCL</comment>
@@ -33710,13 +35008,14 @@
     <comment xml:lang="da">DCL-program</comment>
     <comment xml:lang="de">DCL-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών DCL</comment>
-    <comment xml:lang="en_GB">DCL script</comment>
+    <comment xml:lang="en-GB">DCL script</comment>
     <comment xml:lang="eo">DCL-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en DCL</comment>
     <comment xml:lang="eu">DCL script-a</comment>
     <comment xml:lang="fi">DCL-komentotiedosto</comment>
     <comment xml:lang="fo">DCL boðrøð</comment>
     <comment xml:lang="fr">script DCL</comment>
+    <comment xml:lang="fur">script DCL</comment>
     <comment xml:lang="ga">script DCL</comment>
     <comment xml:lang="gl">script de DCL</comment>
     <comment xml:lang="he">תסריט DCL</comment>
@@ -33738,7 +35037,7 @@
     <comment xml:lang="oc">escript DCL</comment>
     <comment xml:lang="pl">Skrypt DCL</comment>
     <comment xml:lang="pt">script DCL</comment>
-    <comment xml:lang="pt_BR">Script DCL</comment>
+    <comment xml:lang="pt-BR">Script DCL</comment>
     <comment xml:lang="ro">Script DCL</comment>
     <comment xml:lang="ru">Сценарий DCL</comment>
     <comment xml:lang="sk">Skript DCL</comment>
@@ -33749,8 +35048,8 @@
     <comment xml:lang="tr">DCL betiği</comment>
     <comment xml:lang="uk">скрипт DCL</comment>
     <comment xml:lang="vi">Văn lệnh DCL</comment>
-    <comment xml:lang="zh_CN">DCL 脚本</comment>
-    <comment xml:lang="zh_TW">DCL 指令稿</comment>
+    <comment xml:lang="zh-CN">DCL 脚本</comment>
+    <comment xml:lang="zh-TW">DCL 指令稿</comment>
     <acronym>DCL</acronym>
     <expanded-acronym>Data Conversion Laboratory</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -33758,10 +35057,11 @@
   </mime-type>
   <mime-type type="text/x-dsl">
     <comment>DSSSL document</comment>
+    <comment xml:lang="af">DSSSL-dokument</comment>
     <comment xml:lang="ar">مستند DSSSL</comment>
     <comment xml:lang="ast">Documentu DSSSL</comment>
     <comment xml:lang="az">DSSSL sənədi</comment>
-    <comment xml:lang="be@latin">Dakument DSSSL</comment>
+    <comment xml:lang="be-Latn">Dakument DSSSL</comment>
     <comment xml:lang="bg">Документ — DSSSL</comment>
     <comment xml:lang="ca">document DSSSL</comment>
     <comment xml:lang="cs">dokument DSSSL</comment>
@@ -33769,13 +35069,14 @@
     <comment xml:lang="da">DSSSL-dokument</comment>
     <comment xml:lang="de">DSSSL-Dokument</comment>
     <comment xml:lang="el">Έγγραφο DSSSL</comment>
-    <comment xml:lang="en_GB">DSSSL document</comment>
+    <comment xml:lang="en-GB">DSSSL document</comment>
     <comment xml:lang="eo">DSSSL-dokumento</comment>
     <comment xml:lang="es">documento DSSSL</comment>
     <comment xml:lang="eu">DSSSL dokumentua</comment>
     <comment xml:lang="fi">DSSSL-asiakirja</comment>
     <comment xml:lang="fo">DSSSL skjal</comment>
     <comment xml:lang="fr">document DSSSL</comment>
+    <comment xml:lang="fur">document DSSSL</comment>
     <comment xml:lang="ga">cáipéis DSSSL</comment>
     <comment xml:lang="gl">documento DSSSL</comment>
     <comment xml:lang="he">מסמך DSSSL</comment>
@@ -33797,7 +35098,7 @@
     <comment xml:lang="oc">document DSSSL</comment>
     <comment xml:lang="pl">Dokument DSSSL</comment>
     <comment xml:lang="pt">documento DSSSL</comment>
-    <comment xml:lang="pt_BR">Documento DSSSL</comment>
+    <comment xml:lang="pt-BR">Documento DSSSL</comment>
     <comment xml:lang="ro">Document DSSSL</comment>
     <comment xml:lang="ru">Документ DSSSL</comment>
     <comment xml:lang="sk">Dokument DSSSL</comment>
@@ -33808,8 +35109,8 @@
     <comment xml:lang="tr">DSSSL belgesi</comment>
     <comment xml:lang="uk">документ DSSSL</comment>
     <comment xml:lang="vi">Tài liệu DSSSL</comment>
-    <comment xml:lang="zh_CN">DSSSL 文档</comment>
-    <comment xml:lang="zh_TW">DSSSL 文件</comment>
+    <comment xml:lang="zh-CN">DSSSL 文档</comment>
+    <comment xml:lang="zh-TW">DSSSL 文件</comment>
     <acronym>DSSSL</acronym>
     <expanded-acronym>Document Style Semantics and Specification Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -33817,21 +35118,23 @@
   </mime-type>
   <mime-type type="text/x-dsrc">
     <comment>D source code</comment>
+    <comment xml:lang="af">D-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر D</comment>
-    <comment xml:lang="be@latin">Kryničny kod D</comment>
+    <comment xml:lang="be-Latn">Kryničny kod D</comment>
     <comment xml:lang="bg">Изходен код — D</comment>
     <comment xml:lang="ca">codi font en D</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce D</comment>
     <comment xml:lang="da">D-kildekode</comment>
     <comment xml:lang="de">D-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας D</comment>
-    <comment xml:lang="en_GB">D source code</comment>
+    <comment xml:lang="en-GB">D source code</comment>
     <comment xml:lang="eo">D-fontkodo</comment>
     <comment xml:lang="es">código fuente en D</comment>
     <comment xml:lang="eu">D iturburu-kodea</comment>
     <comment xml:lang="fi">D-lähdekoodi</comment>
     <comment xml:lang="fo">D keldukota</comment>
     <comment xml:lang="fr">code source D</comment>
+    <comment xml:lang="fur">codiç sorzint D</comment>
     <comment xml:lang="ga">cód foinseach D</comment>
     <comment xml:lang="gl">código fonte de D</comment>
     <comment xml:lang="he">קוד מקור לשפת D</comment>
@@ -33852,7 +35155,7 @@
     <comment xml:lang="oc">còde font D</comment>
     <comment xml:lang="pl">Kod źródłowy D</comment>
     <comment xml:lang="pt">código origem D</comment>
-    <comment xml:lang="pt_BR">Código-fonte D</comment>
+    <comment xml:lang="pt-BR">Código-fonte D</comment>
     <comment xml:lang="ro">Cod sursă D</comment>
     <comment xml:lang="ru">Исходный код D</comment>
     <comment xml:lang="sk">Zdrojový kód jazyka D</comment>
@@ -33863,29 +35166,31 @@
     <comment xml:lang="tr">D kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою D</comment>
     <comment xml:lang="vi">Mã nguồn D</comment>
-    <comment xml:lang="zh_CN">D 源代码</comment>
-    <comment xml:lang="zh_TW">D 源碼</comment>
+    <comment xml:lang="zh-CN">D 源代码</comment>
+    <comment xml:lang="zh-TW">D 源碼</comment>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.d"/>
     <glob pattern="*.di"/>
   </mime-type>
   <mime-type type="application/xml-dtd">
     <comment>DTD file</comment>
+    <comment xml:lang="af">DTD-lêer</comment>
     <comment xml:lang="ar">ملف DTD</comment>
-    <comment xml:lang="be@latin">Fajł DTD</comment>
+    <comment xml:lang="be-Latn">Fajł DTD</comment>
     <comment xml:lang="bg">Документ — DTD</comment>
     <comment xml:lang="ca">fitxer DTD</comment>
     <comment xml:lang="cs">soubor DTD</comment>
     <comment xml:lang="da">DTD-fil</comment>
     <comment xml:lang="de">DTD-Datei</comment>
     <comment xml:lang="el">Αρχείο DTD</comment>
-    <comment xml:lang="en_GB">DTD file</comment>
+    <comment xml:lang="en-GB">DTD file</comment>
     <comment xml:lang="eo">DTD-dosiero</comment>
     <comment xml:lang="es">archivo DTD</comment>
     <comment xml:lang="eu">DTD fitxategia</comment>
     <comment xml:lang="fi">DTD-tiedosto</comment>
     <comment xml:lang="fo">DTD fíla</comment>
     <comment xml:lang="fr">fichier DTD</comment>
+    <comment xml:lang="fur">file DTD</comment>
     <comment xml:lang="ga">comhad DTD</comment>
     <comment xml:lang="gl">ficheiro DTD</comment>
     <comment xml:lang="he">מסמך DTD</comment>
@@ -33906,7 +35211,7 @@
     <comment xml:lang="oc">fichièr DTD</comment>
     <comment xml:lang="pl">Plik DTD</comment>
     <comment xml:lang="pt">ficheiro DTD</comment>
-    <comment xml:lang="pt_BR">Arquivo DTD</comment>
+    <comment xml:lang="pt-BR">Arquivo DTD</comment>
     <comment xml:lang="ro">Fișier DTD</comment>
     <comment xml:lang="ru">Файл DTD</comment>
     <comment xml:lang="sk">Súbor DTD</comment>
@@ -33917,8 +35222,8 @@
     <comment xml:lang="tr">DTD dosyası</comment>
     <comment xml:lang="uk">файл DTD</comment>
     <comment xml:lang="vi">Tập tin DTD</comment>
-    <comment xml:lang="zh_CN">DTD 文件</comment>
-    <comment xml:lang="zh_TW">DTD 檔</comment>
+    <comment xml:lang="zh-CN">DTD 文件</comment>
+    <comment xml:lang="zh-TW">DTD 檔</comment>
     <acronym>DTD</acronym>
     <expanded-acronym>Document Type Definition</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -33928,21 +35233,23 @@
   </mime-type>
   <mime-type type="text/x-eiffel">
     <comment>Eiffel source code</comment>
+    <comment xml:lang="af">Eiffel-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Eiffel</comment>
-    <comment xml:lang="be@latin">Kryničny kod Eiffel</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Eiffel</comment>
     <comment xml:lang="bg">Изходен код — Eiffel</comment>
     <comment xml:lang="ca">codi font en Eiffel</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Eiffel</comment>
-    <comment xml:lang="da">Eiffelkildekode</comment>
+    <comment xml:lang="da">Eiffel-kildekode</comment>
     <comment xml:lang="de">Eiffel-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Eiffel</comment>
-    <comment xml:lang="en_GB">Eiffel source code</comment>
+    <comment xml:lang="en-GB">Eiffel source code</comment>
     <comment xml:lang="eo">Eiffel-fontkodo</comment>
     <comment xml:lang="es">código fuente en Eiffel</comment>
     <comment xml:lang="eu">Eiffel iturburu-kodea</comment>
     <comment xml:lang="fi">Eiffel-lähdekoodi</comment>
     <comment xml:lang="fo">Eiffel keldukota</comment>
     <comment xml:lang="fr">code source Eiffel</comment>
+    <comment xml:lang="fur">codiç sorzint Eiffel</comment>
     <comment xml:lang="ga">cód foinseach Eiffel</comment>
     <comment xml:lang="gl">código fone de Eiffel</comment>
     <comment xml:lang="he">קוד מקור של Eiffel</comment>
@@ -33963,7 +35270,7 @@
     <comment xml:lang="oc">còde font Eiffel</comment>
     <comment xml:lang="pl">Kod źródłowy Eiffel</comment>
     <comment xml:lang="pt">código origem Eiffel</comment>
-    <comment xml:lang="pt_BR">Código-fonte Eiffel</comment>
+    <comment xml:lang="pt-BR">Código-fonte Eiffel</comment>
     <comment xml:lang="ro">Cod sursă Eiffel</comment>
     <comment xml:lang="ru">Исходный код Eiffel</comment>
     <comment xml:lang="sk">Zdrojový kód Eiffel</comment>
@@ -33974,17 +35281,18 @@
     <comment xml:lang="tr">Eiffel kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Eiffel</comment>
     <comment xml:lang="vi">Mã nguồn Eiffel</comment>
-    <comment xml:lang="zh_CN">Eiffel 源代码</comment>
-    <comment xml:lang="zh_TW">Eiffel 源碼</comment>
+    <comment xml:lang="zh-CN">Eiffel 源代码</comment>
+    <comment xml:lang="zh-TW">Eiffel 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.e"/>
     <glob pattern="*.eif"/>
   </mime-type>
   <mime-type type="text/x-emacs-lisp">
     <comment>Emacs Lisp source code</comment>
+    <comment xml:lang="af">Emacs Lisp-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Emacs Lisp</comment>
     <comment xml:lang="az">Emacs Lisp mənbə kodu</comment>
-    <comment xml:lang="be@latin">Kryničny kod Emacs Lisp</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Emacs Lisp</comment>
     <comment xml:lang="bg">Изходен код — Emacs Lisp</comment>
     <comment xml:lang="ca">codi font en Emacs Lisp</comment>
     <comment xml:lang="cs">zdrojový kód Emacs Lisp</comment>
@@ -33992,13 +35300,14 @@
     <comment xml:lang="da">Emacs Lisp-kildekode</comment>
     <comment xml:lang="de">Emacs-Lisp-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Emacs Lisp</comment>
-    <comment xml:lang="en_GB">Emacs Lisp source code</comment>
+    <comment xml:lang="en-GB">Emacs Lisp source code</comment>
     <comment xml:lang="eo">fontkodo en Emacs Lisp</comment>
     <comment xml:lang="es">código fuente en Lisp de Emacs</comment>
     <comment xml:lang="eu">Emacs Lisp iturburu-kodea</comment>
     <comment xml:lang="fi">Emacs Lisp -lähdekoodi</comment>
     <comment xml:lang="fo">Emacs Lisp keldukota</comment>
     <comment xml:lang="fr">code source Emacs Lisp</comment>
+    <comment xml:lang="fur">codiç sorzint Emacs Lisp</comment>
     <comment xml:lang="ga">cód foinseach Emacs Lisp</comment>
     <comment xml:lang="gl">código fonte de Emacs Lisp</comment>
     <comment xml:lang="he">קוד מקור של Emcas Lisp</comment>
@@ -34018,9 +35327,9 @@
     <comment xml:lang="nl">Emacs Lisp-broncode</comment>
     <comment xml:lang="nn">Emacs Lisp kjeldekode</comment>
     <comment xml:lang="oc">còde font Emacs Lisp</comment>
-    <comment xml:lang="pl">Plik źródłowy Emacs Lisp</comment>
+    <comment xml:lang="pl">Kod źródłowy Emacs Lisp</comment>
     <comment xml:lang="pt">código origem Emacs Lisp</comment>
-    <comment xml:lang="pt_BR">Código-fonte Lisp do Emacs</comment>
+    <comment xml:lang="pt-BR">Código-fonte Lisp do Emacs</comment>
     <comment xml:lang="ro">Cod sursă Emacs Lisp</comment>
     <comment xml:lang="ru">Исходный код Emacs Lisp</comment>
     <comment xml:lang="sk">Zdrojový kód Emacs Lisp</comment>
@@ -34031,32 +35340,34 @@
     <comment xml:lang="tr">Emacs Lisp kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Emacs Lisp</comment>
     <comment xml:lang="vi">Mã nguồn Lisp Emacs</comment>
-    <comment xml:lang="zh_CN">Emacs Lisp 源代码</comment>
-    <comment xml:lang="zh_TW">Emacs Lisp 源碼</comment>
+    <comment xml:lang="zh-CN">Emacs Lisp 源代码</comment>
+    <comment xml:lang="zh-TW">Emacs Lisp 源碼</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="\012(" type="string" offset="0"/>
-      <match value=";ELC\023\000\000\000" type="string" offset="0"/>
+      <match type="string" value="\012(" offset="0"/>
+      <match type="string" value=";ELC\023\000\000\000" offset="0"/>
     </magic>
     <glob pattern="*.el"/>
   </mime-type>
   <mime-type type="text/x-erlang">
     <comment>Erlang source code</comment>
+    <comment xml:lang="af">Erlang-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Erlang</comment>
-    <comment xml:lang="be@latin">Kryničny kod Erlang</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Erlang</comment>
     <comment xml:lang="bg">Изходен код — Erlang</comment>
     <comment xml:lang="ca">codi font en Erlang</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Erlang</comment>
-    <comment xml:lang="da">Erlangkildekode</comment>
+    <comment xml:lang="da">Erlang-kildekode</comment>
     <comment xml:lang="de">Erlang-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Erlang</comment>
-    <comment xml:lang="en_GB">Erlang source code</comment>
+    <comment xml:lang="en-GB">Erlang source code</comment>
     <comment xml:lang="eo">Erlang-fontkodo</comment>
     <comment xml:lang="es">código fuente en Erlang</comment>
     <comment xml:lang="eu">Erlang iturburu-kodea</comment>
     <comment xml:lang="fi">Erlang-lähdekoodi</comment>
     <comment xml:lang="fo">Erlang keldukota</comment>
     <comment xml:lang="fr">code source Erlang</comment>
+    <comment xml:lang="fur">codiç sorzint Erlang</comment>
     <comment xml:lang="ga">cód foinseach Erlang</comment>
     <comment xml:lang="gl">código fonte de Erlang</comment>
     <comment xml:lang="he">קוד מקור של Erlang</comment>
@@ -34077,7 +35388,7 @@
     <comment xml:lang="oc">còde font Erlang</comment>
     <comment xml:lang="pl">Kod źródłowy Erlang</comment>
     <comment xml:lang="pt">código origem Erlang</comment>
-    <comment xml:lang="pt_BR">Código-fonte Erlang</comment>
+    <comment xml:lang="pt-BR">Código-fonte Erlang</comment>
     <comment xml:lang="ro">Cod sursă Erlang</comment>
     <comment xml:lang="ru">Исходный код Erlang</comment>
     <comment xml:lang="sk">Zdrojový kód Erlang</comment>
@@ -34088,30 +35399,32 @@
     <comment xml:lang="tr">Erlang kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Erlang</comment>
     <comment xml:lang="vi">Mã nguồn Erlang</comment>
-    <comment xml:lang="zh_CN">Erlang 源代码</comment>
-    <comment xml:lang="zh_TW">Erlang 源碼</comment>
+    <comment xml:lang="zh-CN">Erlang 源代码</comment>
+    <comment xml:lang="zh-TW">Erlang 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.erl"/>
   </mime-type>
   <mime-type type="text/x-fortran">
     <comment>Fortran source code</comment>
+    <comment xml:lang="af">Fortran-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Fortran</comment>
     <comment xml:lang="az">Fortran mənbə kodu</comment>
-    <comment xml:lang="be@latin">Kryničny kod Fortran</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Fortran</comment>
     <comment xml:lang="bg">Изходен код — Fortran</comment>
     <comment xml:lang="ca">codi font en Fortran</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Fortran</comment>
     <comment xml:lang="cy">Ffynhonnell rhaglen FORTRAN</comment>
-    <comment xml:lang="da">Fortrankildekode</comment>
+    <comment xml:lang="da">Fortran-kildekode</comment>
     <comment xml:lang="de">Fortran-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Fortran</comment>
-    <comment xml:lang="en_GB">Fortran source code</comment>
+    <comment xml:lang="en-GB">Fortran source code</comment>
     <comment xml:lang="eo">Fotran-fontkodo</comment>
     <comment xml:lang="es">código fuente en Fortran</comment>
     <comment xml:lang="eu">Fortran-en iturburu-kodea</comment>
     <comment xml:lang="fi">Fortran-lähdekoodi</comment>
     <comment xml:lang="fo">Fortran keldukota</comment>
     <comment xml:lang="fr">code source Fortran</comment>
+    <comment xml:lang="fur">codiç sorzint Fortran</comment>
     <comment xml:lang="ga">cód foinseach Fortran</comment>
     <comment xml:lang="gl">código fonte de Fortran</comment>
     <comment xml:lang="he">קוד מקור של Fortran</comment>
@@ -34133,7 +35446,7 @@
     <comment xml:lang="oc">còde font Fortran</comment>
     <comment xml:lang="pl">Kod źródłowy Fortran</comment>
     <comment xml:lang="pt">código origem Fortran</comment>
-    <comment xml:lang="pt_BR">Código-fonte Fortran</comment>
+    <comment xml:lang="pt-BR">Código-fonte Fortran</comment>
     <comment xml:lang="ro">Cod sursă Fortran</comment>
     <comment xml:lang="ru">Исходный код Fortran</comment>
     <comment xml:lang="sk">Zdrojový kód Fortran</comment>
@@ -34144,8 +35457,8 @@
     <comment xml:lang="tr">Fortran kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Fortran</comment>
     <comment xml:lang="vi">Mã nguồn Fortran</comment>
-    <comment xml:lang="zh_CN">Fortran 源代码</comment>
-    <comment xml:lang="zh_TW">Fortran 源碼</comment>
+    <comment xml:lang="zh-CN">Fortran 源代码</comment>
+    <comment xml:lang="zh-TW">Fortran 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.f"/>
     <glob pattern="*.f90"/>
@@ -34154,16 +35467,19 @@
   </mime-type>
   <mime-type type="text/x-genie">
     <comment>Genie source code</comment>
-    <comment xml:lang="ca">codi font de Genius</comment>
+    <comment xml:lang="af">Genie-bronkode</comment>
+    <comment xml:lang="bg">Изходен код — Genie</comment>
+    <comment xml:lang="ca">codi font en Genie</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Genie</comment>
     <comment xml:lang="da">Genie-kildekode</comment>
     <comment xml:lang="de">Genie-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Genie</comment>
-    <comment xml:lang="en_GB">Genie source code</comment>
+    <comment xml:lang="en-GB">Genie source code</comment>
     <comment xml:lang="es">código fuente en Genie</comment>
     <comment xml:lang="eu">Genie iturburu-kodea</comment>
     <comment xml:lang="fi">Genie-lähdekoodi</comment>
     <comment xml:lang="fr">code source Genie</comment>
+    <comment xml:lang="fur">codiç sorzint Genie</comment>
     <comment xml:lang="ga">cód foinseach Genie</comment>
     <comment xml:lang="he">קוד מקור של Genie</comment>
     <comment xml:lang="hr">Genie izvorni kôd</comment>
@@ -34176,7 +35492,7 @@
     <comment xml:lang="oc">còde font Genie</comment>
     <comment xml:lang="pl">Kod źródłowy Genie</comment>
     <comment xml:lang="pt">código origem Genie</comment>
-    <comment xml:lang="pt_BR">Código-fonte Genie</comment>
+    <comment xml:lang="pt-BR">Código-fonte Genie</comment>
     <comment xml:lang="ru">Исходный код Genie</comment>
     <comment xml:lang="sk">Zdrojový kód Genie</comment>
     <comment xml:lang="sl">Izvorna koda Genie</comment>
@@ -34184,30 +35500,32 @@
     <comment xml:lang="sv">Genie-källkod</comment>
     <comment xml:lang="tr">Genie kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Genie</comment>
-    <comment xml:lang="zh_CN">Genie 源代码</comment>
-    <comment xml:lang="zh_TW">Genie 源碼</comment>
+    <comment xml:lang="zh-CN">Genie 源代码</comment>
+    <comment xml:lang="zh-TW">Genie 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.gs" case-sensitive="true"/>
     <generic-icon name="text-x-generic"/>
   </mime-type>
   <mime-type type="text/x-gettext-translation">
     <comment>translation file</comment>
+    <comment xml:lang="af">vertaallêer</comment>
     <comment xml:lang="ar">ملف الترجمة</comment>
     <comment xml:lang="ast">ficheru de traducción</comment>
-    <comment xml:lang="be@latin">fajł pierakładu</comment>
+    <comment xml:lang="be-Latn">fajł pierakładu</comment>
     <comment xml:lang="bg">Превод</comment>
     <comment xml:lang="ca">fitxer de traducció</comment>
     <comment xml:lang="cs">soubor překladu</comment>
     <comment xml:lang="da">oversættelsesfil</comment>
     <comment xml:lang="de">Übersetzungsdatei</comment>
     <comment xml:lang="el">Αρχείο μετάφρασης</comment>
-    <comment xml:lang="en_GB">translation file</comment>
+    <comment xml:lang="en-GB">translation file</comment>
     <comment xml:lang="eo">tradukad-dosiero</comment>
     <comment xml:lang="es">archivo de traducción</comment>
     <comment xml:lang="eu">itzulpen-fitxategia</comment>
     <comment xml:lang="fi">käännöstiedosto</comment>
     <comment xml:lang="fo">týðingarfíla</comment>
     <comment xml:lang="fr">fichier de traduction</comment>
+    <comment xml:lang="fur">file di traduzion</comment>
     <comment xml:lang="ga">comhad aistriúcháin</comment>
     <comment xml:lang="gl">ficheiro de tradución</comment>
     <comment xml:lang="he">קובץ תרגום</comment>
@@ -34228,7 +35546,7 @@
     <comment xml:lang="oc">fichièr de traduccion</comment>
     <comment xml:lang="pl">Plik tłumaczenia</comment>
     <comment xml:lang="pt">ficheiro de tradução</comment>
-    <comment xml:lang="pt_BR">Arquivo de tradução</comment>
+    <comment xml:lang="pt-BR">Arquivo de tradução</comment>
     <comment xml:lang="ro">fișier traducere</comment>
     <comment xml:lang="ru">Файл переводов</comment>
     <comment xml:lang="sk">Súbor prekladu</comment>
@@ -34239,8 +35557,8 @@
     <comment xml:lang="tr">çeviri dosyası</comment>
     <comment xml:lang="uk">файл перекладу</comment>
     <comment xml:lang="vi">tập tin dịch</comment>
-    <comment xml:lang="zh_CN">翻译文件</comment>
-    <comment xml:lang="zh_TW">翻譯檔</comment>
+    <comment xml:lang="zh-CN">翻译文件</comment>
+    <comment xml:lang="zh-TW">翻譯檔</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.po"/>
     <alias type="text/x-po"/>
@@ -34248,22 +35566,24 @@
   </mime-type>
   <mime-type type="text/x-gettext-translation-template">
     <comment>translation template</comment>
+    <comment xml:lang="af">vertaalsjabloon</comment>
     <comment xml:lang="ar">قالب الترجمة</comment>
     <comment xml:lang="ast">plantía de traducción</comment>
-    <comment xml:lang="be@latin">šablon dla pierakładu</comment>
+    <comment xml:lang="be-Latn">šablon dla pierakładu</comment>
     <comment xml:lang="bg">Шаблон за преводи</comment>
     <comment xml:lang="ca">plantilla de traducció</comment>
     <comment xml:lang="cs">šablona překladu</comment>
     <comment xml:lang="da">oversættelsesskabelon</comment>
     <comment xml:lang="de">Übersetzungsvorlage</comment>
     <comment xml:lang="el">Πρότυπο μετάφρασης</comment>
-    <comment xml:lang="en_GB">translation template</comment>
+    <comment xml:lang="en-GB">translation template</comment>
     <comment xml:lang="eo">tradukad-ŝablono</comment>
     <comment xml:lang="es">plantilla de traducción</comment>
     <comment xml:lang="eu">itzulpenen txantiloia</comment>
     <comment xml:lang="fi">käännösmalli</comment>
     <comment xml:lang="fo">týðingarformur</comment>
     <comment xml:lang="fr">modèle de traduction</comment>
+    <comment xml:lang="fur">model di traduzion</comment>
     <comment xml:lang="ga">teimpléad aistriúcháin</comment>
     <comment xml:lang="gl">plantilla de tradución</comment>
     <comment xml:lang="he">תבנית תרגום</comment>
@@ -34284,7 +35604,7 @@
     <comment xml:lang="oc">modèl de traduccion</comment>
     <comment xml:lang="pl">Szablon tłumaczenia</comment>
     <comment xml:lang="pt">modelo de tradução</comment>
-    <comment xml:lang="pt_BR">Modelo de tradução</comment>
+    <comment xml:lang="pt-BR">Modelo de tradução</comment>
     <comment xml:lang="ro">șablon de traducere</comment>
     <comment xml:lang="ru">Шаблон переводов</comment>
     <comment xml:lang="sk">Šablóna prekladu</comment>
@@ -34295,63 +35615,65 @@
     <comment xml:lang="tr">çeviri şablonu</comment>
     <comment xml:lang="uk">шаблон перекладу</comment>
     <comment xml:lang="vi">mẫu dịch</comment>
-    <comment xml:lang="zh_CN">翻译模板</comment>
-    <comment xml:lang="zh_TW">翻譯模版</comment>
+    <comment xml:lang="zh-CN">翻译模板</comment>
+    <comment xml:lang="zh-TW">翻譯模版</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.pot"/>
     <alias type="text/x-pot"/>
     <magic priority="50">
-      <match value='#, fuzzy\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version:' type="string" offset="0:256"/>
+      <match type="string" value="#, fuzzy\nmsgid \&quot;\&quot;\nmsgstr \&quot;\&quot;\n\&quot;Project-Id-Version:" offset="0:256"/>
     </magic>
   </mime-type>
   <mime-type type="text/x-gherkin">
-    <comment>feature specification in Gherkin format</comment>
-    <comment xml:lang="ca">especificació de funcionalitat en format Gherkin</comment>
-    <comment xml:lang="cs">specifikace vlastností ve formátu Gherkin</comment>
-    <comment xml:lang="da">funktionspecifikation i Gherkin-format</comment>
-    <comment xml:lang="de">Funktionsspezifikation im Gherkin-Format</comment>
-    <comment xml:lang="en_GB">feature specification in Gherkin format</comment>
-    <comment xml:lang="es">especificación de funcionalidad en formato Gherkin</comment>
-    <comment xml:lang="fr">spécification fonctionnelle au format Gherkin</comment>
-    <comment xml:lang="ga">sonraíocht gnéithe i bhformáid Gherkin</comment>
-    <comment xml:lang="he">פירוט תכונות בתבנית Gherkin</comment>
-    <comment xml:lang="hr">opis značajke u Gherkin formatu</comment>
-    <comment xml:lang="hu">funkcióleírás Gherkin formátumban</comment>
-    <comment xml:lang="id">spesifikasi fitur dalam format Gherkin</comment>
-    <comment xml:lang="it">Specifica di funzionalità in formato Gherkin</comment>
-    <comment xml:lang="kk">Gherkin пішіміндегі функционалды анықтамалар</comment>
-    <comment xml:lang="ko">Gherkin 형식의 기능 명세</comment>
-    <comment xml:lang="pl">Specyfikacja funkcji w formacie Gherkin</comment>
-    <comment xml:lang="pt_BR">Especificação de recurso no formato Gherkin</comment>
-    <comment xml:lang="ru">Функциональные определения в формате Gherkin</comment>
-    <comment xml:lang="sk">Špecifikácia funkcie vo formáte Gherkin</comment>
-    <comment xml:lang="sr">одредба функције у запису Геркина</comment>
-    <comment xml:lang="sv">egenskapsspecifikation i Gherkin-format</comment>
-    <comment xml:lang="tr">Gherkin biçiminde özellik belirtimi</comment>
-    <comment xml:lang="uk">специфікація можливості у форматі Gherkin</comment>
-    <comment xml:lang="zh_CN">Gherkin 格式中的功能规范</comment>
-    <comment xml:lang="zh_TW">Gherkin 格式的特徵規格</comment>
+    <comment>Gherkin document</comment>
+    <comment xml:lang="bg">Документ — Gherkin</comment>
+    <comment xml:lang="ca">document Gherkin</comment>
+    <comment xml:lang="da">Gherkin-dokument</comment>
+    <comment xml:lang="de">Gherkin-Dokument</comment>
+    <comment xml:lang="en-GB">Gherkin document</comment>
+    <comment xml:lang="es">documento de Gherkin</comment>
+    <comment xml:lang="eu">Gherkin dokumentua</comment>
+    <comment xml:lang="fi">Gherkin-asiakirja</comment>
+    <comment xml:lang="fr">document Gherkin</comment>
+    <comment xml:lang="hr">Gherkin dokument</comment>
+    <comment xml:lang="hu">Gherkin dokumentum</comment>
+    <comment xml:lang="id">Dokumen Gherkin</comment>
+    <comment xml:lang="it">Documento Gherkin</comment>
+    <comment xml:lang="kk">Gherkin құжаты</comment>
+    <comment xml:lang="ko">게르킨 문서</comment>
+    <comment xml:lang="pl">Dokument Gherkin</comment>
+    <comment xml:lang="pt-BR">Documento Gherkin</comment>
+    <comment xml:lang="ru">Документ Gherkin</comment>
+    <comment xml:lang="sk">Dokument Gherkin</comment>
+    <comment xml:lang="sl">Dokument Gherkin</comment>
+    <comment xml:lang="sv">Gherkin-dokument</comment>
+    <comment xml:lang="tr">Gherkin belgesi</comment>
+    <comment xml:lang="uk">документ Gherkin</comment>
+    <comment xml:lang="zh-CN">Gherkin 文档</comment>
+    <comment xml:lang="zh-TW">Gherkin 文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.feature"/>
   </mime-type>
   <mime-type type="text/html">
     <comment>HTML document</comment>
+    <comment xml:lang="af">HTML-dokument</comment>
     <comment xml:lang="ar">مستند HTML</comment>
     <comment xml:lang="ast">Documentu HTML</comment>
-    <comment xml:lang="be@latin">Dakument HTML</comment>
+    <comment xml:lang="be-Latn">Dakument HTML</comment>
     <comment xml:lang="bg">Документ — HTML</comment>
     <comment xml:lang="ca">document HTML</comment>
     <comment xml:lang="cs">dokument HTML</comment>
     <comment xml:lang="da">HTML-dokument</comment>
     <comment xml:lang="de">HTML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο HTML</comment>
-    <comment xml:lang="en_GB">HTML document</comment>
+    <comment xml:lang="en-GB">HTML document</comment>
     <comment xml:lang="eo">HTML-dokumento</comment>
     <comment xml:lang="es">documento HTML</comment>
     <comment xml:lang="eu">HTML dokumentua</comment>
     <comment xml:lang="fi">HTML-asiakirja</comment>
     <comment xml:lang="fo">HTML skjal</comment>
     <comment xml:lang="fr">document HTML</comment>
+    <comment xml:lang="fur">document HTML</comment>
     <comment xml:lang="ga">cáipéis HTML</comment>
     <comment xml:lang="gl">documento HTML</comment>
     <comment xml:lang="he">מסמך HTML</comment>
@@ -34371,7 +35693,7 @@
     <comment xml:lang="oc">document HTML</comment>
     <comment xml:lang="pl">Dokument HTML</comment>
     <comment xml:lang="pt">documento HTML</comment>
-    <comment xml:lang="pt_BR">Documento HTML</comment>
+    <comment xml:lang="pt-BR">Documento HTML</comment>
     <comment xml:lang="ro">Document HTML</comment>
     <comment xml:lang="ru">Документ HTML</comment>
     <comment xml:lang="sk">Dokument HTML</comment>
@@ -34382,161 +35704,122 @@
     <comment xml:lang="tr">HTML belgesi</comment>
     <comment xml:lang="uk">документ HTML</comment>
     <comment xml:lang="vi">Tài liệu HTML</comment>
-    <comment xml:lang="zh_CN">HTML 文档</comment>
-    <comment xml:lang="zh_TW">HTML 文件</comment>
+    <comment xml:lang="zh-CN">HTML 文档</comment>
+    <comment xml:lang="zh-TW">HTML 文件</comment>
     <acronym>HTML</acronym>
     <expanded-acronym>HyperText Markup Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="&lt;!DOCTYPE HTML" type="string" offset="0:256"/>
-      <match value="&lt;!doctype html" type="string" offset="0:256"/>
-      <match value="&lt;HEAD" type="string" offset="0:256"/>
-      <match value="&lt;head" type="string" offset="0:256"/>
-      <match value="&lt;TITLE" type="string" offset="0:256"/>
-      <match value="&lt;title" type="string" offset="0:256"/>
-      <match value="&lt;HTML" type="string" offset="0:256"/>
-      <match value="&lt;html" type="string" offset="0:256"/>
-      <match value="&lt;SCRIPT" type="string" offset="0:256"/>
-      <match value="&lt;script" type="string" offset="0:256"/>
-      <match value="&lt;BODY" type="string" offset="0"/>
-      <match value="&lt;body" type="string" offset="0"/>
-      <match value="&lt;!--" type="string" offset="0"/>
-      <match value="&lt;h1" type="string" offset="0"/>
-      <match value="&lt;H1" type="string" offset="0"/>
-      <match value="&lt;!doctype HTML" type="string" offset="0"/>
-      <match value="&lt;!DOCTYPE html" type="string" offset="0"/>
+      <match type="string" value="&lt;!DOCTYPE HTML" offset="0:256"/>
+      <match type="string" value="&lt;!doctype html" offset="0:256"/>
+      <match type="string" value="&lt;!DOCTYPE html" offset="0:256"/>
+      <match type="string" value="&lt;HEAD" offset="0:256"/>
+      <match type="string" value="&lt;head" offset="0:256"/>
+      <match type="string" value="&lt;HTML" offset="0:256"/>
+      <match type="string" value="&lt;html" offset="0:256"/>
+      <match type="string" value="&lt;SCRIPT" offset="0:256"/>
+      <match type="string" value="&lt;script" offset="0:256"/>
+      <match type="string" value="&lt;BODY" offset="0"/>
+      <match type="string" value="&lt;body" offset="0"/>
+      <match type="string" value="&lt;h1" offset="0"/>
+      <match type="string" value="&lt;H1" offset="0"/>
+      <match type="string" value="&lt;!doctype HTML" offset="0"/>
     </magic>
-    <glob pattern="*.html"/>
-    <glob pattern="*.htm"/>
+    <magic priority="40">
+      <match type="string" value="&lt;!--" offset="0"/>
+      <match type="string" value="&lt;TITLE" offset="0:256"/>
+      <match type="string" value="&lt;title" offset="0:256"/>
+    </magic>
+    <glob pattern="*.html" weight="80"/>
+    <glob pattern="*.htm" weight="80"/>
   </mime-type>
   <mime-type type="text/cache-manifest">
-    <comment>Web application cache manifest</comment>
-    <comment xml:lang="ar">قائمة التخزين الموقت لتطبيق الويب</comment>
-    <comment xml:lang="bg">Манифест за кеша на уеб приложение</comment>
-    <comment xml:lang="ca">manifest de memòria cau d'aplicació Web</comment>
-    <comment xml:lang="cs">manifest mezipaměti webové aplikace</comment>
-    <comment xml:lang="da">Manifest for internetprogrammellemlager</comment>
-    <comment xml:lang="de">Webanwendungscache-Manifest</comment>
-    <comment xml:lang="el">Δηλωτικό λανθάνουσας μνήμης εφαρμογής Ιστού</comment>
-    <comment xml:lang="en_GB">Web application cache manifest</comment>
-    <comment xml:lang="es">manifiesto de antememoria de aplicación web</comment>
-    <comment xml:lang="eu">Web aplikazioaren cache-aren agiria</comment>
-    <comment xml:lang="fo">Net nýtsluskipanarkova manifest</comment>
-    <comment xml:lang="fr">manifeste de cache d'application Web</comment>
-    <comment xml:lang="ga">lastliosta taisce d'fheidhmchlár Gréasáin</comment>
-    <comment xml:lang="gl">manifesto de caché de aplicativo web</comment>
-    <comment xml:lang="he">הצהרה של מטמון של תוכנית ברשת</comment>
-    <comment xml:lang="hr">Web aplikacija prikaza predmemorije</comment>
-    <comment xml:lang="hu">Webalkalmazás gyorsítótár-összefoglalója</comment>
-    <comment xml:lang="ia">Manifesto de cache de application web</comment>
-    <comment xml:lang="id">Manifes singgahan aplikasi web</comment>
-    <comment xml:lang="it">Manifesto cache applicazione Web</comment>
-    <comment xml:lang="ja">Web アプリケーションキャッシュ manifest</comment>
-    <comment xml:lang="kk">Веб қолданбасының кэш манифесті</comment>
-    <comment xml:lang="ko">웹 애플리케이션 캐시 정의</comment>
-    <comment xml:lang="lt">Žiniatinklio programos podėlio manifestas</comment>
-    <comment xml:lang="lv">Tīmekļa lietotņu keša manifests</comment>
-    <comment xml:lang="nl">Webapplicatie cache manifest</comment>
-    <comment xml:lang="oc">manifèste d'escondedor d'aplicacion Web</comment>
-    <comment xml:lang="pl">Manifest pamięci podręcznej aplikacji WWW</comment>
-    <comment xml:lang="pt">manifesto de cache de aplicação web</comment>
-    <comment xml:lang="pt_BR">Manifest de cache de aplicação web</comment>
-    <comment xml:lang="ro">Manifest de cache pentru aplicații web</comment>
-    <comment xml:lang="ru">Манифест кэша веб-приложения</comment>
-    <comment xml:lang="sk">Manifest vyrovnávacej pamäte webovej aplikácie</comment>
-    <comment xml:lang="sl">Predpomnilnik spletnega programa</comment>
-    <comment xml:lang="sr">проглас оставе Веб програма</comment>
-    <comment xml:lang="sv">Cachemanifest för webbapplikation</comment>
-    <comment xml:lang="tr">Web uygulama önbelleği bildirimi</comment>
-    <comment xml:lang="uk">маніфест кешу веб-програми</comment>
-    <comment xml:lang="zh_CN">网络应用程序缓存清单</comment>
-    <comment xml:lang="zh_TW">網頁應用程式快取聲明</comment>
+    <comment>Web application cache file</comment>
+    <comment xml:lang="bg">Кеш — уеб приложение</comment>
+    <comment xml:lang="ca">fitxer de memòria cau d'aplicació Web</comment>
+    <comment xml:lang="da">Webprogrammellemlagerfil</comment>
+    <comment xml:lang="de">Webanwendungscache-Datei</comment>
+    <comment xml:lang="en-GB">Web application cache file</comment>
+    <comment xml:lang="es">archivo de antememoria de aplicación web</comment>
+    <comment xml:lang="eu">Web-aplikazio katxe fitxategia</comment>
+    <comment xml:lang="fi">Web-sovelluksen välimuistitiedosto</comment>
+    <comment xml:lang="fr">fichier de cache d'application Web</comment>
+    <comment xml:lang="hr"> Web aplikacija datoteka predmemorije </comment>
+    <comment xml:lang="hu">Webalkalmazás gyorsítótárfájl</comment>
+    <comment xml:lang="id">Berkas singgahan aplikasi web</comment>
+    <comment xml:lang="it">File cache applicazione Web</comment>
+    <comment xml:lang="kk">Веб қолданбасының кэш файлы</comment>
+    <comment xml:lang="ko">웹 애플리케이션 캐시 파일</comment>
+    <comment xml:lang="pl">Plik pamięci podręcznej aplikacji WWW</comment>
+    <comment xml:lang="pt-BR">Arquivo de cache de aplicativo Web</comment>
+    <comment xml:lang="ru">Файл кэша веб-приложения</comment>
+    <comment xml:lang="sv">Webbapplikation cachefil</comment>
+    <comment xml:lang="tr">Web uygulama önbellek dosyası</comment>
+    <comment xml:lang="uk">файл кешу вебпрограми</comment>
+    <comment xml:lang="zh-CN">Web 应用缓存文件</comment>
     <sub-class-of type="text/plain"/>
     <magic>
-      <match value="CACHE MANIFEST" type="string" offset="0">
-        <match value="\x20" type="string" offset="14"/>
-        <match value="\x09" type="string" offset="14"/>
-        <match value="\x0a" type="string" offset="14"/>
-        <match value="\x0d" type="string" offset="14"/>
+      <match type="string" value="CACHE MANIFEST" offset="0">
+        <match type="string" value="\x20" offset="14"/>
+        <match type="string" value="\x09" offset="14"/>
+        <match type="string" value="\x0a" offset="14"/>
+        <match type="string" value="\x0d" offset="14"/>
       </match>
     </magic>
     <glob pattern="*.manifest"/>
   </mime-type>
   <mime-type type="text/x-google-video-pointer">
-    <comment>Google Video Pointer</comment>
-    <comment xml:lang="ar">مؤشر فيديو جوجل</comment>
-    <comment xml:lang="ast">Google Video Pointer</comment>
-    <comment xml:lang="be@latin">Pakazalnik Google Video</comment>
-    <comment xml:lang="bg">Документ-указател към видео на Google</comment>
-    <comment xml:lang="ca">apuntador a vídeo de Google</comment>
-    <comment xml:lang="cs">Google Video Pointer</comment>
-    <comment xml:lang="da">Google Video-peger</comment>
-    <comment xml:lang="de">Google Video-Zeiger</comment>
-    <comment xml:lang="el">Google Video Pointer</comment>
-    <comment xml:lang="en_GB">Google Video Pointer</comment>
-    <comment xml:lang="es">lista de reproducción de Google Video (GVP)</comment>
-    <comment xml:lang="eu">Google Video-ren erreprodukzio-zerrenda</comment>
-    <comment xml:lang="fi">Google-video-osoitin</comment>
-    <comment xml:lang="fo">Google Video Pointer</comment>
-    <comment xml:lang="fr">pointeur vidéo Google</comment>
-    <comment xml:lang="ga">pointeoir Google Video</comment>
-    <comment xml:lang="gl">punteiro de vídeo de Google</comment>
-    <comment xml:lang="he">מצביע וידאו של Google</comment>
-    <comment xml:lang="hr">Google Video pretraživač</comment>
-    <comment xml:lang="hu">Google Video Pointer</comment>
-    <comment xml:lang="ia">Punctator Google Video</comment>
-    <comment xml:lang="id">Google Video Pointer</comment>
-    <comment xml:lang="it">Puntatore Google Video</comment>
-    <comment xml:lang="ja">Google ビデオポインター</comment>
-    <comment xml:lang="kk">Google Video Pointer</comment>
-    <comment xml:lang="ko">Google 동영상 포인터</comment>
-    <comment xml:lang="lt">Google Video Pointer</comment>
-    <comment xml:lang="lv">Google Video Pointer</comment>
-    <comment xml:lang="nb">Peker til Google Video</comment>
-    <comment xml:lang="nl">Google-videoverwijzing</comment>
-    <comment xml:lang="nn">Google Video-peikar</comment>
-    <comment xml:lang="oc">puntador vidèo Google</comment>
-    <comment xml:lang="pl">Lista odtwarzania Google Video</comment>
-    <comment xml:lang="pt">Ponteiro Google Video</comment>
-    <comment xml:lang="pt_BR">Ponteiro do Google Vídeo</comment>
-    <comment xml:lang="ro">Indicator Google Video</comment>
-    <comment xml:lang="ru">Google Video Pointer</comment>
-    <comment xml:lang="sk">Google Video Pointer</comment>
-    <comment xml:lang="sl">Kazalec Google Video</comment>
-    <comment xml:lang="sq">Puntues Google Video</comment>
-    <comment xml:lang="sr">Гуглов видео показивач</comment>
-    <comment xml:lang="sv">Google Video-pekare</comment>
-    <comment xml:lang="tr">Google Video İşaretçisi</comment>
-    <comment xml:lang="uk">вказівник відео Google</comment>
-    <comment xml:lang="vi">Con trỏ ảnh động Google</comment>
-    <comment xml:lang="zh_CN">Google 视频指向</comment>
-    <comment xml:lang="zh_TW">Google Video Pointer</comment>
-    <magic priority="50">
-      <match value="#.download.the.free.Google.Video.Player" type="string" offset="0"/>
-      <match value="# download the free Google Video Player" type="string" offset="0"/>
+    <comment>Google Video Pointer shortcut</comment>
+    <comment xml:lang="bg">Отметка — Google Video</comment>
+    <comment xml:lang="ca">drecera d'apuntador a vídeo de Google</comment>
+    <comment xml:lang="da">Google Video Pointer-genvej</comment>
+    <comment xml:lang="de">Google-Video-Zeigerverweis</comment>
+    <comment xml:lang="en-GB">Google Video Pointer shortcut</comment>
+    <comment xml:lang="es">atajo de Google Video Pointer</comment>
+    <comment xml:lang="eu">Google Video Pointer lasterbidea</comment>
+    <comment xml:lang="fi">Google Video Pointer -pikakuvake</comment>
+    <comment xml:lang="fr">raccourci de pointeur vidéo Google</comment>
+    <comment xml:lang="hr">Google Video pretraživač prečac</comment>
+    <comment xml:lang="hu">Google Video Pointer parancsikon</comment>
+    <comment xml:lang="id">Pintasan Google Video Pointer</comment>
+    <comment xml:lang="it">Scorciatoia Google Video Pointer</comment>
+    <comment xml:lang="kk">Google Video Pointer жарлығы</comment>
+    <comment xml:lang="ko">구글 동영상 포인터 바로 가기</comment>
+    <comment xml:lang="pl">Skrót listy odtwarzania Google Video</comment>
+    <comment xml:lang="pt-BR">Atalho do Google Video Pointer</comment>
+    <comment xml:lang="ru">Ссылка Google Video Pointer</comment>
+    <comment xml:lang="sv">Google Video Pointer-genväg</comment>
+    <comment xml:lang="tr">Google Video Pointer kısayolu</comment>
+    <comment xml:lang="uk">скорочення вказівника відео Google</comment>
+    <comment xml:lang="zh-CN">Google Video Pointer 快捷方式</comment>
+    <magic priority="50">
+      <match type="string" value="#.download.the.free.Google.Video.Player" offset="0"/>
+      <match type="string" value="# download the free Google Video Player" offset="0"/>
     </magic>
     <glob pattern="*.gvp"/>
     <alias type="text/google-video-pointer"/>
   </mime-type>
   <mime-type type="text/x-haskell">
     <comment>Haskell source code</comment>
+    <comment xml:lang="af">Haskell-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Haskell</comment>
     <comment xml:lang="az">Haskell mənbə kodu</comment>
-    <comment xml:lang="be@latin">Kryničny kod Haskell</comment>
-    <comment xml:lang="bg">Изходен код на Haskell</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Haskell</comment>
+    <comment xml:lang="bg">Изходен код —  Haskell</comment>
     <comment xml:lang="ca">codi font en Haskell</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Haskell</comment>
     <comment xml:lang="cy">Ffynhonnell rhaglen Haskell</comment>
-    <comment xml:lang="da">Haskellkildekode</comment>
+    <comment xml:lang="da">Haskell-kildekode</comment>
     <comment xml:lang="de">Haskell-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Haskell</comment>
-    <comment xml:lang="en_GB">Haskell source code</comment>
+    <comment xml:lang="en-GB">Haskell source code</comment>
     <comment xml:lang="eo">Haskell-fontkodo</comment>
     <comment xml:lang="es">código fuente en Haskell</comment>
     <comment xml:lang="eu">Haskell iturburu-kodea</comment>
     <comment xml:lang="fi">Haskell-lähdekoodi</comment>
     <comment xml:lang="fo">Haskell keldukota</comment>
     <comment xml:lang="fr">code source Haskell</comment>
+    <comment xml:lang="fur">codiç sorzint Haskell</comment>
     <comment xml:lang="ga">cód foinseach Haskell</comment>
     <comment xml:lang="gl">código fonte de Haskell</comment>
     <comment xml:lang="he">קוד מקור של Haskell</comment>
@@ -34557,7 +35840,7 @@
     <comment xml:lang="oc">còde font Haskell</comment>
     <comment xml:lang="pl">Kod źródłowy Haskell</comment>
     <comment xml:lang="pt">código origem Haskell</comment>
-    <comment xml:lang="pt_BR">Código-fonte Haskell</comment>
+    <comment xml:lang="pt-BR">Código-fonte Haskell</comment>
     <comment xml:lang="ro">Cod sursă Haskell</comment>
     <comment xml:lang="ru">Исходный код Haskell</comment>
     <comment xml:lang="sk">Zdrojový kód Haskell</comment>
@@ -34568,17 +35851,18 @@
     <comment xml:lang="tr">Haskell kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Haskell</comment>
     <comment xml:lang="vi">Mã nguồn Haskell</comment>
-    <comment xml:lang="zh_CN">Haskell 源代码</comment>
-    <comment xml:lang="zh_TW">Haskell 源碼</comment>
+    <comment xml:lang="zh-CN">Haskell 源代码</comment>
+    <comment xml:lang="zh-TW">Haskell 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.hs"/>
   </mime-type>
   <mime-type type="text/x-idl">
     <comment>IDL document</comment>
+    <comment xml:lang="af">IDL-dokument</comment>
     <comment xml:lang="ar">مستند IDL</comment>
     <comment xml:lang="ast">Documentu IDL</comment>
     <comment xml:lang="az">IDL sənədi</comment>
-    <comment xml:lang="be@latin">Dakument IDL</comment>
+    <comment xml:lang="be-Latn">Dakument IDL</comment>
     <comment xml:lang="bg">Документ — IDL</comment>
     <comment xml:lang="ca">document IDL</comment>
     <comment xml:lang="cs">dokument IDL</comment>
@@ -34586,13 +35870,14 @@
     <comment xml:lang="da">IDL-dokument</comment>
     <comment xml:lang="de">IDL-Dokument</comment>
     <comment xml:lang="el">Έγγραφο IDL</comment>
-    <comment xml:lang="en_GB">IDL document</comment>
+    <comment xml:lang="en-GB">IDL document</comment>
     <comment xml:lang="eo">IDL-dokumento</comment>
     <comment xml:lang="es">documento IDL</comment>
     <comment xml:lang="eu">IDL dokumentua</comment>
     <comment xml:lang="fi">IDL-asiakirja</comment>
     <comment xml:lang="fo">IDL skjal</comment>
     <comment xml:lang="fr">document IDL</comment>
+    <comment xml:lang="fur">document IDL</comment>
     <comment xml:lang="ga">cáipéis IDL</comment>
     <comment xml:lang="gl">documento IDL</comment>
     <comment xml:lang="he">מסמך IDL</comment>
@@ -34613,7 +35898,7 @@
     <comment xml:lang="oc">document IDL</comment>
     <comment xml:lang="pl">Dokument IDL</comment>
     <comment xml:lang="pt">documento IDL</comment>
-    <comment xml:lang="pt_BR">Documento IDL</comment>
+    <comment xml:lang="pt-BR">Documento IDL</comment>
     <comment xml:lang="ro">Document IDL</comment>
     <comment xml:lang="ru">Документ IDL</comment>
     <comment xml:lang="sk">Dokument IDL</comment>
@@ -34624,8 +35909,8 @@
     <comment xml:lang="tr">IDL belgesi</comment>
     <comment xml:lang="uk">документ IDL</comment>
     <comment xml:lang="vi">Tài liệu IDL</comment>
-    <comment xml:lang="zh_CN">IDL 文档</comment>
-    <comment xml:lang="zh_TW">IDL 文件</comment>
+    <comment xml:lang="zh-CN">IDL 文档</comment>
+    <comment xml:lang="zh-TW">IDL 文件</comment>
     <acronym>IDL</acronym>
     <expanded-acronym>Interface Definition Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -34633,21 +35918,23 @@
   </mime-type>
   <mime-type type="text/x-install">
     <comment>installation instructions</comment>
+    <comment xml:lang="af">installasie-instruksies</comment>
     <comment xml:lang="ar">تعليمات التثبيت</comment>
     <comment xml:lang="ast">instrucciones d'instalación</comment>
-    <comment xml:lang="be@latin">instrukcyja dla instalavańnia</comment>
+    <comment xml:lang="be-Latn">instrukcyja dla instalavańnia</comment>
     <comment xml:lang="bg">Инструкции за инсталация</comment>
     <comment xml:lang="ca">instruccions d'instal·lació</comment>
     <comment xml:lang="cs">návod k instalaci</comment>
     <comment xml:lang="da">installationsinstruktioner</comment>
     <comment xml:lang="de">Installationsanleitung</comment>
     <comment xml:lang="el">Οδηγίες εγκατάστασης</comment>
-    <comment xml:lang="en_GB">installation instructions</comment>
+    <comment xml:lang="en-GB">installation instructions</comment>
     <comment xml:lang="es">instrucciones de instalación</comment>
     <comment xml:lang="eu">instalazioaren instrukzioak</comment>
     <comment xml:lang="fi">asennusohjeet</comment>
     <comment xml:lang="fo">innleggingar vegleiðing</comment>
     <comment xml:lang="fr">instructions d'installation</comment>
+    <comment xml:lang="fur">istruzions di instalazion</comment>
     <comment xml:lang="ga">treoracha suiteála</comment>
     <comment xml:lang="gl">instrucións de instalación</comment>
     <comment xml:lang="he">הוראות התקנה</comment>
@@ -34667,7 +35954,7 @@
     <comment xml:lang="oc">instructions d'installacion</comment>
     <comment xml:lang="pl">Instrukcje instalacji</comment>
     <comment xml:lang="pt">instruções de instalação</comment>
-    <comment xml:lang="pt_BR">Instruções de instalação</comment>
+    <comment xml:lang="pt-BR">Instruções de instalação</comment>
     <comment xml:lang="ro">instrucțiuni de instalare</comment>
     <comment xml:lang="ru">Инструкции по установке</comment>
     <comment xml:lang="sk">Návod na inštaláciu</comment>
@@ -34678,28 +35965,30 @@
     <comment xml:lang="tr">kurulum yönergeleri</comment>
     <comment xml:lang="uk">інструкції з встановлення</comment>
     <comment xml:lang="vi">hướng dẫn cài đặt</comment>
-    <comment xml:lang="zh_CN">软件安装指南</comment>
-    <comment xml:lang="zh_TW">安裝指引</comment>
+    <comment xml:lang="zh-CN">软件安装指南</comment>
+    <comment xml:lang="zh-TW">安裝指引</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="INSTALL"/>
   </mime-type>
   <mime-type type="text/x-java">
     <comment>Java source code</comment>
+    <comment xml:lang="af">Java-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Java</comment>
-    <comment xml:lang="be@latin">Kryničny kod Java</comment>
-    <comment xml:lang="bg">Изходен код на Java</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Java</comment>
+    <comment xml:lang="bg">Изходен код — Java</comment>
     <comment xml:lang="ca">codi font en Java</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Java</comment>
-    <comment xml:lang="da">Javakildekode</comment>
+    <comment xml:lang="da">Java-kildekode</comment>
     <comment xml:lang="de">Java-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Java</comment>
-    <comment xml:lang="en_GB">Java source code</comment>
+    <comment xml:lang="en-GB">Java source code</comment>
     <comment xml:lang="eo">Java-fontkodo</comment>
     <comment xml:lang="es">código fuente en Java</comment>
     <comment xml:lang="eu">Java iturburu-kodea</comment>
     <comment xml:lang="fi">Java-lähdekoodi</comment>
     <comment xml:lang="fo">Java keldukota</comment>
     <comment xml:lang="fr">code source Java</comment>
+    <comment xml:lang="fur">codiç sorzint Java</comment>
     <comment xml:lang="ga">cód foinseach Java</comment>
     <comment xml:lang="gl">código fonte de Java</comment>
     <comment xml:lang="he">קוד מקור ב־Java</comment>
@@ -34720,7 +36009,7 @@
     <comment xml:lang="oc">còde font Java</comment>
     <comment xml:lang="pl">Kod źródłowy Java</comment>
     <comment xml:lang="pt">código origem Java</comment>
-    <comment xml:lang="pt_BR">Código-fonte Java</comment>
+    <comment xml:lang="pt-BR">Código-fonte Java</comment>
     <comment xml:lang="ro">Cod sursă Java</comment>
     <comment xml:lang="ru">Исходный код Java</comment>
     <comment xml:lang="sk">Zdrojový kód Java</comment>
@@ -34731,28 +36020,30 @@
     <comment xml:lang="tr">Java kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Java</comment>
     <comment xml:lang="vi">Mã nguồn Java</comment>
-    <comment xml:lang="zh_CN">Java 源代码</comment>
-    <comment xml:lang="zh_TW">Java 源碼</comment>
+    <comment xml:lang="zh-CN">Java 源代码</comment>
+    <comment xml:lang="zh-TW">Java 源碼</comment>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.java"/>
   </mime-type>
   <mime-type type="text/x-ldif">
     <comment>LDIF address book</comment>
+    <comment xml:lang="af">LDIF-adresboek</comment>
     <comment xml:lang="ar">دفتر عناوين LDIF</comment>
-    <comment xml:lang="be@latin">Adrasnaja kniha LDIF</comment>
+    <comment xml:lang="be-Latn">Adrasnaja kniha LDIF</comment>
     <comment xml:lang="bg">Адресна книга — LDIF</comment>
     <comment xml:lang="ca">llibreta d'adreces LDIF</comment>
     <comment xml:lang="cs">adresář LDIF</comment>
     <comment xml:lang="da">LDIF-adressebog</comment>
     <comment xml:lang="de">LDIF-Adressbuch</comment>
     <comment xml:lang="el">Βιβλίο διευθύνσεων LDIF</comment>
-    <comment xml:lang="en_GB">LDIF address book</comment>
+    <comment xml:lang="en-GB">LDIF address book</comment>
     <comment xml:lang="eo">LDIF-adresaro</comment>
     <comment xml:lang="es">libreta de direcciones LDIF</comment>
     <comment xml:lang="eu">LDIF helbide-liburua</comment>
     <comment xml:lang="fi">LDIF-osoitekirja</comment>
     <comment xml:lang="fo">LDIF adressubók</comment>
     <comment xml:lang="fr">carnet d'adresses LDIF</comment>
+    <comment xml:lang="fur">rubriche LDIF</comment>
     <comment xml:lang="ga">leabhar seoltaí LDIF</comment>
     <comment xml:lang="gl">lista de enderezos LDIF</comment>
     <comment xml:lang="he">ספר כתובות של LDIF</comment>
@@ -34772,7 +36063,7 @@
     <comment xml:lang="oc">quasernet d'adreças LDIF</comment>
     <comment xml:lang="pl">Książka adresowa LDIF</comment>
     <comment xml:lang="pt">livro de endereços LDIF</comment>
-    <comment xml:lang="pt_BR">Livro de endereços LDIF</comment>
+    <comment xml:lang="pt-BR">Livro de endereços LDIF</comment>
     <comment xml:lang="ro">Agendă LDIF</comment>
     <comment xml:lang="ru">Адресная книга LDIF</comment>
     <comment xml:lang="sk">Adresár LDIF</comment>
@@ -34783,33 +36074,35 @@
     <comment xml:lang="tr">LDIF adres defteri</comment>
     <comment xml:lang="uk">адресна книга LDIF</comment>
     <comment xml:lang="vi">Sổ địa chỉ LDIF</comment>
-    <comment xml:lang="zh_CN">LDIF 地址簿</comment>
-    <comment xml:lang="zh_TW">LDIF 通訊錄</comment>
+    <comment xml:lang="zh-CN">LDIF 地址簿</comment>
+    <comment xml:lang="zh-TW">LDIF 通訊錄</comment>
     <acronym>LDIF</acronym>
     <expanded-acronym>LDAP Data Interchange Format</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="dn: cn=" type="string" offset="0"/>
-      <match value="dn: mail=" type="string" offset="0"/>
+      <match type="string" value="dn: cn=" offset="0"/>
+      <match type="string" value="dn: mail=" offset="0"/>
     </magic>
     <glob pattern="*.ldif"/>
   </mime-type>
   <mime-type type="text/x-lilypond">
     <comment>Lilypond music sheet</comment>
+    <comment xml:lang="af">Lilypond-musiekblad</comment>
     <comment xml:lang="ar">صفحة موسيقى Lilypond</comment>
-    <comment xml:lang="be@latin">Muzyčny arkuš Lilypond</comment>
+    <comment xml:lang="be-Latn">Muzyčny arkuš Lilypond</comment>
     <comment xml:lang="bg">Нотация на Lilypond</comment>
     <comment xml:lang="ca">full de música Lilypond</comment>
     <comment xml:lang="cs">notový papír Lilypond</comment>
     <comment xml:lang="da">Lilypondmusikkort</comment>
     <comment xml:lang="de">Lilypond-Notenblatt</comment>
     <comment xml:lang="el">Παρτιτούρα Lilypond</comment>
-    <comment xml:lang="en_GB">Lilypond music sheet</comment>
+    <comment xml:lang="en-GB">Lilypond music sheet</comment>
     <comment xml:lang="es">partitura de LilyPond</comment>
     <comment xml:lang="eu">Lilypond musika-orria</comment>
     <comment xml:lang="fi">Lilypond-nuotit</comment>
     <comment xml:lang="fo">Lilypond tónleika ark</comment>
     <comment xml:lang="fr">partition musicale Lilypond</comment>
+    <comment xml:lang="fur">spartît Lilypond</comment>
     <comment xml:lang="ga">bileog cheoil Lilypond</comment>
     <comment xml:lang="gl">folla de música de Lilypond</comment>
     <comment xml:lang="he">דף מוזיקה של Lilypond</comment>
@@ -34828,7 +36121,7 @@
     <comment xml:lang="oc">particion musicala Lilypond</comment>
     <comment xml:lang="pl">Plik partytury Lilypond</comment>
     <comment xml:lang="pt">folha de música Lilypond</comment>
-    <comment xml:lang="pt_BR">Partitura do Lilypond</comment>
+    <comment xml:lang="pt-BR">Partitura do Lilypond</comment>
     <comment xml:lang="ro">Fișă muzică Lilypond</comment>
     <comment xml:lang="ru">Список музыки Lilypond</comment>
     <comment xml:lang="sk">Notový papier Lilypond</comment>
@@ -34839,28 +36132,30 @@
     <comment xml:lang="tr">Lilypond müzik sayfası</comment>
     <comment xml:lang="uk">нотний запис Lilypond</comment>
     <comment xml:lang="vi">Bản nhạc Lilypond</comment>
-    <comment xml:lang="zh_CN">Lilypond 乐谱</comment>
-    <comment xml:lang="zh_TW">Lilypond 樂譜</comment>
+    <comment xml:lang="zh-CN">Lilypond 乐谱</comment>
+    <comment xml:lang="zh-TW">Lilypond 樂譜</comment>
     <glob pattern="*.ly"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="text/x-literate-haskell">
     <comment>LHS source code</comment>
+    <comment xml:lang="af">LHS-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر LHS</comment>
-    <comment xml:lang="be@latin">Kryničny kod LHS</comment>
-    <comment xml:lang="bg">Изходен код на LHS</comment>
+    <comment xml:lang="be-Latn">Kryničny kod LHS</comment>
+    <comment xml:lang="bg">Изходен код — LHS</comment>
     <comment xml:lang="ca">codi font en LHS</comment>
     <comment xml:lang="cs">zdrojový kód LHS</comment>
     <comment xml:lang="da">LHS-kildekode</comment>
     <comment xml:lang="de">LHS-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας LHS</comment>
-    <comment xml:lang="en_GB">LHS source code</comment>
+    <comment xml:lang="en-GB">LHS source code</comment>
     <comment xml:lang="eo">LHS-fontkodo</comment>
     <comment xml:lang="es">código fuente en LHS</comment>
     <comment xml:lang="eu">LHS iturburu-kodea</comment>
     <comment xml:lang="fi">LHS-lähdekoodi</comment>
     <comment xml:lang="fo">LHS keld</comment>
     <comment xml:lang="fr">code source LHS</comment>
+    <comment xml:lang="fur">codiç sorzint LHS</comment>
     <comment xml:lang="ga">cód foinseach LHS</comment>
     <comment xml:lang="gl">código fonte en LHS</comment>
     <comment xml:lang="he">קוד מקור של LHS</comment>
@@ -34880,7 +36175,7 @@
     <comment xml:lang="oc">còde font LHS</comment>
     <comment xml:lang="pl">Kod źródłowy LHS</comment>
     <comment xml:lang="pt">código origem LHS</comment>
-    <comment xml:lang="pt_BR">Código-fonte LHS</comment>
+    <comment xml:lang="pt-BR">Código-fonte LHS</comment>
     <comment xml:lang="ro">Cod sursă LHS</comment>
     <comment xml:lang="ru">Исходный код LHS</comment>
     <comment xml:lang="sk">Zdrojový kód LHS</comment>
@@ -34891,8 +36186,8 @@
     <comment xml:lang="tr">LHS kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код LHS</comment>
     <comment xml:lang="vi">Mã nguồn LHS</comment>
-    <comment xml:lang="zh_CN">LHS 源代码</comment>
-    <comment xml:lang="zh_TW">LHS 源碼</comment>
+    <comment xml:lang="zh-CN">LHS 源代码</comment>
+    <comment xml:lang="zh-TW">LHS 源碼</comment>
     <acronym>LHS</acronym>
     <expanded-acronym>Literate Haskell source code</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -34902,20 +36197,21 @@
     <comment>application log</comment>
     <comment xml:lang="ar">سجل التطبيق</comment>
     <comment xml:lang="ast">rexistru d'aplicación</comment>
-    <comment xml:lang="be@latin">časopis aplikacyi</comment>
-    <comment xml:lang="bg">Файл-дневник на приложение</comment>
+    <comment xml:lang="be-Latn">časopis aplikacyi</comment>
+    <comment xml:lang="bg">Журнал със съобщения</comment>
     <comment xml:lang="ca">registre d'aplicació</comment>
     <comment xml:lang="cs">záznam aplikace</comment>
     <comment xml:lang="da">programlog</comment>
     <comment xml:lang="de">Anwendungsprotokoll</comment>
     <comment xml:lang="el">Καταγραφή εφαρμογή</comment>
-    <comment xml:lang="en_GB">application log</comment>
+    <comment xml:lang="en-GB">application log</comment>
     <comment xml:lang="eo">protokolo de aplikaĵo</comment>
     <comment xml:lang="es">registro de aplicación</comment>
     <comment xml:lang="eu">aplikazio egunkaria</comment>
     <comment xml:lang="fi">sovelluksen lokitiedosto</comment>
     <comment xml:lang="fo">nýtsluskipan logg</comment>
     <comment xml:lang="fr">journal d'application</comment>
+    <comment xml:lang="fur">regjistri aplicazion</comment>
     <comment xml:lang="ga">logchomhad feidhmchláir</comment>
     <comment xml:lang="gl">rexistro de aplicativo</comment>
     <comment xml:lang="he">יומן יישום</comment>
@@ -34936,7 +36232,7 @@
     <comment xml:lang="oc">jornal d'aplicacion</comment>
     <comment xml:lang="pl">Dziennik programu</comment>
     <comment xml:lang="pt">diário de aplicação</comment>
-    <comment xml:lang="pt_BR">Registro de aplicativo</comment>
+    <comment xml:lang="pt-BR">Registro de aplicativo</comment>
     <comment xml:lang="ro">înregistrare aplicație</comment>
     <comment xml:lang="ru">Журнал сообщений</comment>
     <comment xml:lang="sk">Záznam aplikácie</comment>
@@ -34947,64 +36243,36 @@
     <comment xml:lang="tr">uygulama günlüğü</comment>
     <comment xml:lang="uk">журнал програми</comment>
     <comment xml:lang="vi">bản ghi ứng dụng</comment>
-    <comment xml:lang="zh_CN">应用程序日志</comment>
-    <comment xml:lang="zh_TW">程式紀錄檔</comment>
+    <comment xml:lang="zh-CN">应用程序日志</comment>
+    <comment xml:lang="zh-TW">程式紀錄檔</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.log"/>
   </mime-type>
   <mime-type type="text/x-makefile">
-    <comment>Makefile</comment>
-    <comment xml:lang="ar">ملف Makefile</comment>
-    <comment xml:lang="az">İnşa faylı</comment>
-    <comment xml:lang="be@latin">Makefile</comment>
-    <comment xml:lang="bg">Файл — make</comment>
-    <comment xml:lang="ca">Makefile</comment>
-    <comment xml:lang="cs">Makefile</comment>
-    <comment xml:lang="cy">Ffeil "make"</comment>
-    <comment xml:lang="da">Bygningsfil</comment>
-    <comment xml:lang="de">Makefile</comment>
-    <comment xml:lang="el">Makefile</comment>
-    <comment xml:lang="en_GB">Makefile</comment>
-    <comment xml:lang="eo">Muntodosiero</comment>
-    <comment xml:lang="es">Makefile</comment>
-    <comment xml:lang="eu">Makefile</comment>
-    <comment xml:lang="fi">Makefile</comment>
-    <comment xml:lang="fo">Makefile</comment>
-    <comment xml:lang="fr">makefile</comment>
-    <comment xml:lang="ga">Makefile</comment>
-    <comment xml:lang="gl">Makefile</comment>
-    <comment xml:lang="he">Makefile</comment>
-    <comment xml:lang="hr">Makefile</comment>
-    <comment xml:lang="hu">Makefile</comment>
-    <comment xml:lang="ia">Makefile</comment>
-    <comment xml:lang="id">Makefile</comment>
-    <comment xml:lang="it">Makefile</comment>
-    <comment xml:lang="ja">Makefile</comment>
-    <comment xml:lang="ka">Makefile</comment>
-    <comment xml:lang="kk">Makefile (жинау файлы)</comment>
-    <comment xml:lang="ko">Makefile</comment>
-    <comment xml:lang="lt">Makefile</comment>
-    <comment xml:lang="lv">Makefile</comment>
-    <comment xml:lang="ms">Makefile</comment>
-    <comment xml:lang="nb">Makefile</comment>
-    <comment xml:lang="nl">Makefile</comment>
-    <comment xml:lang="nn">Makefile</comment>
-    <comment xml:lang="oc">makefile</comment>
-    <comment xml:lang="pl">Plik make</comment>
-    <comment xml:lang="pt">Makefile</comment>
-    <comment xml:lang="pt_BR">Makefile (arquivo do make)</comment>
-    <comment xml:lang="ro">Makefile</comment>
-    <comment xml:lang="ru">Файл Makefile</comment>
-    <comment xml:lang="sk">Makefile</comment>
-    <comment xml:lang="sl">Datoteka Makefile</comment>
-    <comment xml:lang="sq">Makefile</comment>
-    <comment xml:lang="sr">датотека стварања</comment>
-    <comment xml:lang="sv">Makefil</comment>
-    <comment xml:lang="tr">Makefile</comment>
-    <comment xml:lang="uk">файл проекту make</comment>
-    <comment xml:lang="vi">Tập tin tạo ứng dụng (Makefile)</comment>
-    <comment xml:lang="zh_CN">Makefile</comment>
-    <comment xml:lang="zh_TW">Makefile</comment>
+    <comment>Makefile build file</comment>
+    <comment xml:lang="bg">Проект — Makefile</comment>
+    <comment xml:lang="ca">fitxer de construcció Makefile</comment>
+    <comment xml:lang="da">Makefile build-fil</comment>
+    <comment xml:lang="de">Makefile Build-Datei</comment>
+    <comment xml:lang="en-GB">Makefile build file</comment>
+    <comment xml:lang="es">archivo de generación Makefile</comment>
+    <comment xml:lang="eu">Makefile build fitxategia</comment>
+    <comment xml:lang="fi">Makefile rakennustiedosto</comment>
+    <comment xml:lang="fr">fichier de construction Makefile</comment>
+    <comment xml:lang="hr">Makefile datoteka izgradnje</comment>
+    <comment xml:lang="hu">Makefile összeállítási fájl</comment>
+    <comment xml:lang="id">Berkas build Makefile</comment>
+    <comment xml:lang="it">File compilazione Makefile</comment>
+    <comment xml:lang="kk">Makefile құрастыру файлы</comment>
+    <comment xml:lang="ko">Makefile 빌드 파일</comment>
+    <comment xml:lang="pl">Plik budowania Makefile</comment>
+    <comment xml:lang="pt-BR">Arquivo de compilação Makefile</comment>
+    <comment xml:lang="ru">Сборочный файл Makefile</comment>
+    <comment xml:lang="sk">Súbor zostavenia Makefile</comment>
+    <comment xml:lang="sv">Makefile-byggfil</comment>
+    <comment xml:lang="tr">Makefile derleme dosyası</comment>
+    <comment xml:lang="uk">файл збирання Makefile</comment>
+    <comment xml:lang="zh-CN">Makefile 构建文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="makefile"/>
     <glob pattern="GNUmakefile"/>
@@ -35012,12 +36280,13 @@
     <glob pattern="*.mak"/>
     <glob weight="10" pattern="Makefile.*"/>
     <magic priority="50">
-      <match value="#!/usr/bin/make" type="string" offset="0"/>
-      <match value="#! /usr/bin/make" type="string" offset="0"/>
+      <match type="string" value="#!/usr/bin/make" offset="0"/>
+      <match type="string" value="#! /usr/bin/make" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="text/markdown">
     <comment>Markdown document</comment>
+    <comment xml:lang="af">Markdown-dokument</comment>
     <comment xml:lang="ast">Documentu Markdown</comment>
     <comment xml:lang="bg">Документ — Markdown</comment>
     <comment xml:lang="ca">document Markdown</comment>
@@ -35025,11 +36294,12 @@
     <comment xml:lang="da">Markdown-dokument</comment>
     <comment xml:lang="de">Markdown-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Markdown</comment>
-    <comment xml:lang="en_GB">Markdown document</comment>
+    <comment xml:lang="en-GB">Markdown document</comment>
     <comment xml:lang="es">documento Markdown</comment>
     <comment xml:lang="eu">Markdown dokumentua</comment>
     <comment xml:lang="fi">Markdown-asiakirja</comment>
     <comment xml:lang="fr">document Markdown</comment>
+    <comment xml:lang="fur">document Markdown</comment>
     <comment xml:lang="ga">cáipéis Markdown</comment>
     <comment xml:lang="gl">documento de Markdown</comment>
     <comment xml:lang="he">מסמך Markdown</comment>
@@ -35046,7 +36316,7 @@
     <comment xml:lang="oc">document Markdown</comment>
     <comment xml:lang="pl">Dokument Markdown</comment>
     <comment xml:lang="pt">documento Markdown</comment>
-    <comment xml:lang="pt_BR">Documento Markdown</comment>
+    <comment xml:lang="pt-BR">Documento Markdown</comment>
     <comment xml:lang="ru">Документ Markdown</comment>
     <comment xml:lang="sk">Dokument Markdown</comment>
     <comment xml:lang="sl">Dokument Markdown</comment>
@@ -35054,8 +36324,8 @@
     <comment xml:lang="sv">Markdown-dokument</comment>
     <comment xml:lang="tr">Markdown belgesi</comment>
     <comment xml:lang="uk">документ Markdown</comment>
-    <comment xml:lang="zh_CN">Markdown 文档</comment>
-    <comment xml:lang="zh_TW">Markdown 文件</comment>
+    <comment xml:lang="zh-CN">Markdown 文档</comment>
+    <comment xml:lang="zh-TW">Markdown 文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.md"/>
     <glob pattern="*.mkd"/>
@@ -35065,19 +36335,20 @@
   <mime-type type="text/x-moc">
     <comment>Qt MOC file</comment>
     <comment xml:lang="ar">ملف Qt MOC</comment>
-    <comment xml:lang="be@latin">Fajł Qt MOC</comment>
+    <comment xml:lang="be-Latn">Fajł Qt MOC</comment>
     <comment xml:lang="bg">Файл — Qt MOC</comment>
     <comment xml:lang="ca">fitxer MOC de Qt</comment>
     <comment xml:lang="cs">soubor Qt MOC</comment>
     <comment xml:lang="da">Qt MOC-fil</comment>
     <comment xml:lang="de">Qt-MOC-Datei</comment>
     <comment xml:lang="el">Αρχείο Qt MOC</comment>
-    <comment xml:lang="en_GB">Qt MOC file</comment>
+    <comment xml:lang="en-GB">Qt MOC file</comment>
     <comment xml:lang="es">archivo MOC Qt</comment>
     <comment xml:lang="eu">Qt MOC fitxategia</comment>
     <comment xml:lang="fi">Qt MOC -tiedosto</comment>
     <comment xml:lang="fo">Qt MOC fíla</comment>
     <comment xml:lang="fr">fichier Qt MOC</comment>
+    <comment xml:lang="fur">file Qt MOC</comment>
     <comment xml:lang="ga">comhad MOC Qt</comment>
     <comment xml:lang="gl">ficheiro MOC Qt</comment>
     <comment xml:lang="he">קובץ Qt MOC</comment>
@@ -35097,7 +36368,7 @@
     <comment xml:lang="oc">fichièr Qt MOC</comment>
     <comment xml:lang="pl">Plik Qt MOC</comment>
     <comment xml:lang="pt">ficheiro Qt MOC</comment>
-    <comment xml:lang="pt_BR">Arquivo Qt MOC</comment>
+    <comment xml:lang="pt-BR">Arquivo Qt MOC</comment>
     <comment xml:lang="ro">Fișier Qt MOC</comment>
     <comment xml:lang="ru">Файл Qt MOC</comment>
     <comment xml:lang="sk">Súbor Qt MOC</comment>
@@ -35108,8 +36379,8 @@
     <comment xml:lang="tr">Qt MOC dosyası</comment>
     <comment xml:lang="uk">файл-метаоб'єкт Qt</comment>
     <comment xml:lang="vi">Tập tin MOC của Qt</comment>
-    <comment xml:lang="zh_CN">Qt 元对象编译器文件</comment>
-    <comment xml:lang="zh_TW">Qt MOC 檔</comment>
+    <comment xml:lang="zh-CN">Qt 元对象编译器文件</comment>
+    <comment xml:lang="zh-TW">Qt MOC 檔</comment>
     <acronym>Qt MOC</acronym>
     <expanded-acronym>Qt Meta Object Compiler</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -35117,20 +36388,22 @@
   </mime-type>
   <mime-type type="text/x-ms-regedit">
     <comment>Windows Registry extract</comment>
+    <comment xml:lang="af">Windows-registerlêeruittreksel</comment>
     <comment xml:lang="ar">استخراج مسجل ويندوز</comment>
-    <comment xml:lang="be@latin">Element rehistru Windows</comment>
+    <comment xml:lang="be-Latn">Element rehistru Windows</comment>
     <comment xml:lang="bg">Извадка от регистъра на Windows</comment>
     <comment xml:lang="ca">extracte de Windows Registry</comment>
     <comment xml:lang="cs">výtah registru Windows</comment>
-    <comment xml:lang="da">Windows Registy-udtrækning</comment>
+    <comment xml:lang="da">Windows registreringsdatabase-udtrækning</comment>
     <comment xml:lang="de">Windows-Registry-Auszug</comment>
     <comment xml:lang="el">Αποσυμπίεση Windows Registry</comment>
-    <comment xml:lang="en_GB">Windows Registry extract</comment>
+    <comment xml:lang="en-GB">Windows Registry extract</comment>
     <comment xml:lang="es">extracto del registro de Windows</comment>
     <comment xml:lang="eu">Windows-eko erregistro erauzlea</comment>
     <comment xml:lang="fi">Windows-rekisteritietue</comment>
     <comment xml:lang="fo">Windows Registry úrdráttur</comment>
     <comment xml:lang="fr">extrait de registre Windows</comment>
+    <comment xml:lang="fur">estrat dal regjistri di Windows</comment>
     <comment xml:lang="ga">sliocht as Clárlann Windows</comment>
     <comment xml:lang="gl">Extracto do rexistro de Windows</comment>
     <comment xml:lang="he">קובץ רשומות מערכת של Windows</comment>
@@ -35150,7 +36423,7 @@
     <comment xml:lang="oc">extrait de registre Windows</comment>
     <comment xml:lang="pl">Wycinek rejestru Windows</comment>
     <comment xml:lang="pt">extrato do registo do Windows</comment>
-    <comment xml:lang="pt_BR">Extrator de registro do Windows</comment>
+    <comment xml:lang="pt-BR">Extrator de registro do Windows</comment>
     <comment xml:lang="ro">Extras al registrului Windows</comment>
     <comment xml:lang="ru">Фрагмент Windows Registry</comment>
     <comment xml:lang="sk">Časť registrov Windows</comment>
@@ -35161,138 +36434,99 @@
     <comment xml:lang="tr">Windows Kayıt Defteri özü</comment>
     <comment xml:lang="uk">частина реєстру Windows</comment>
     <comment xml:lang="vi">Bản trích Registry Windows</comment>
-    <comment xml:lang="zh_CN">Windows 注册表提取</comment>
-    <comment xml:lang="zh_TW">Windows Registry 抽出</comment>
+    <comment xml:lang="zh-CN">Windows 注册表提取</comment>
+    <comment xml:lang="zh-TW">Windows Registry 抽出</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="REGEDIT" type="string" offset="0"/>
-      <match value="Windows Registry Editor Version 5.00" type="string" offset="0"/>
-      <match value="\xff\xfeW\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x00R\x00e\x00g\x00i\x00s\x00t\x00r\x00y\x00 \x00E\x00d\x00i\x00t\x00o\x00r\x00" type="string" offset="0"/>
+      <match type="string" value="REGEDIT" offset="0"/>
+      <match type="string" value="Windows Registry Editor Version 5.00" offset="0"/>
+      <match type="string" value="\xff\xfeW\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x00R\x00e\x00g\x00i\x00s\x00t\x00r\x00y\x00 \x00E\x00d\x00i\x00t\x00o\x00r\x00" offset="0"/>
     </magic>
     <glob pattern="*.reg"/>
   </mime-type>
   <mime-type type="text/x-mof">
-    <comment>Managed Object Format</comment>
-    <comment xml:lang="ar">صيغة كائن مدار</comment>
-    <comment xml:lang="be@latin">Farmat Managed Object</comment>
-    <comment xml:lang="bg">Управлявани обекти — MOF</comment>
-    <comment xml:lang="ca">format d'objecte gestionat</comment>
-    <comment xml:lang="cs">Managed Object Format</comment>
-    <comment xml:lang="da">Håndteret objektformat</comment>
-    <comment xml:lang="de">Managed Object Format</comment>
-    <comment xml:lang="el">Μορφή διαχειριζόμενου αντικειμένου</comment>
-    <comment xml:lang="en_GB">Managed Object Format</comment>
-    <comment xml:lang="es">formato de objeto gestionado</comment>
-    <comment xml:lang="eu">Kudeatutako objektu formatua</comment>
-    <comment xml:lang="fi">Managed Object Format</comment>
-    <comment xml:lang="fr">format Managed Object</comment>
-    <comment xml:lang="ga">formáid réada bainistithe</comment>
-    <comment xml:lang="gl">formato de obxecto xestionado</comment>
-    <comment xml:lang="he">תבנית פריט מנוהל</comment>
-    <comment xml:lang="hr">Managed Object Format</comment>
-    <comment xml:lang="hu">Felügyelt objektum (MO) formátum</comment>
-    <comment xml:lang="ia">File in formato Managed Object</comment>
-    <comment xml:lang="id">Managed Object Format</comment>
-    <comment xml:lang="it">Managed Object Format</comment>
-    <comment xml:lang="ja">管理オブジェクトフォーマット</comment>
-    <comment xml:lang="kk">Басқарылатын объект пішімі</comment>
-    <comment xml:lang="ko">관리되는 객체 형식</comment>
-    <comment xml:lang="lt">Sutvarkytų objektų formatas</comment>
-    <comment xml:lang="lv">Pārvaldītu objektu formāts</comment>
-    <comment xml:lang="nb">Managed Object Format</comment>
-    <comment xml:lang="nl">Managed Object Format</comment>
-    <comment xml:lang="nn">Managed Object Format</comment>
-    <comment xml:lang="oc">format Managed Object</comment>
-    <comment xml:lang="pl">Plik Managed Object Format</comment>
-    <comment xml:lang="pt">formato Managed Object</comment>
-    <comment xml:lang="pt_BR">Formato de objeto gerenciado</comment>
-    <comment xml:lang="ro">Managed Object Format</comment>
-    <comment xml:lang="ru">Формат управляемого объекта</comment>
-    <comment xml:lang="sk">Formát Managed Object</comment>
-    <comment xml:lang="sl">Datoteka Managed Object</comment>
-    <comment xml:lang="sq">Managed Object Format</comment>
-    <comment xml:lang="sr">запис управљаног објекта</comment>
-    <comment xml:lang="sv">Managed Object Format</comment>
-    <comment xml:lang="tr">Yönetilen Nesne Biçimi</comment>
-    <comment xml:lang="uk">формат керування об’єктами</comment>
-    <comment xml:lang="vi">Định dạng Đối tượng đã Quản lý</comment>
-    <comment xml:lang="zh_CN">托管对象格式</comment>
-    <comment xml:lang="zh_TW">Managed Object Format</comment>
+    <comment>MOF file</comment>
+    <comment xml:lang="bg">Модел — MOF</comment>
+    <comment xml:lang="ca">fitxer MOF</comment>
+    <comment xml:lang="da">MOF-fil</comment>
+    <comment xml:lang="de">MOF-Datei</comment>
+    <comment xml:lang="en-GB">MOF file</comment>
+    <comment xml:lang="es">archivo MOF</comment>
+    <comment xml:lang="eu">MOF fitxategia</comment>
+    <comment xml:lang="fi">MOF-tiedosto</comment>
+    <comment xml:lang="fr">fichier MOF</comment>
+    <comment xml:lang="hr">MOF datoteka</comment>
+    <comment xml:lang="hu">MOF fájl</comment>
+    <comment xml:lang="id">Berkas MOF</comment>
+    <comment xml:lang="it">File MOF</comment>
+    <comment xml:lang="kk">MOF файлы</comment>
+    <comment xml:lang="ko">MOF 파일</comment>
+    <comment xml:lang="pl">Plik MOF</comment>
+    <comment xml:lang="pt-BR">Arquivo MOF</comment>
+    <comment xml:lang="ru">Файл MOF</comment>
+    <comment xml:lang="sk">Súbor MOF</comment>
+    <comment xml:lang="sl">Datoteka MOF</comment>
+    <comment xml:lang="sv">MOF-fil</comment>
+    <comment xml:lang="tr">MOF dosyası</comment>
+    <comment xml:lang="uk">файл MOF</comment>
+    <comment xml:lang="zh-CN">MOF 文件</comment>
+    <comment xml:lang="zh-TW">MOF 檔</comment>
+    <acronym>MOF</acronym>
+    <expanded-acronym>Windows Managed Object File</expanded-acronym>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.mof"/>
   </mime-type>
   <mime-type type="text/x-mup">
-    <comment>Mup publication</comment>
-    <comment xml:lang="ar">منشور Mup</comment>
-    <comment xml:lang="be@latin">Publikacyja Mup</comment>
-    <comment xml:lang="bg">Издание — Mup</comment>
-    <comment xml:lang="ca">publicació Mup</comment>
-    <comment xml:lang="cs">publikace Mup</comment>
-    <comment xml:lang="da">Mupudgivelse</comment>
-    <comment xml:lang="de">Mup-Veröffentlichung</comment>
-    <comment xml:lang="el">Δημοσίευση Mup</comment>
-    <comment xml:lang="en_GB">Mup publication</comment>
-    <comment xml:lang="es">publicación Mup</comment>
-    <comment xml:lang="eu">Mup publikazioa</comment>
-    <comment xml:lang="fi">Mup-julkaisu</comment>
-    <comment xml:lang="fo">Mup útgáva</comment>
-    <comment xml:lang="fr">publication Mup</comment>
-    <comment xml:lang="ga">foilseachán Mup</comment>
-    <comment xml:lang="gl">publicación Mup</comment>
-    <comment xml:lang="he">פרסום של Mup</comment>
-    <comment xml:lang="hr">Mup publikacija</comment>
-    <comment xml:lang="hu">Mup publikáció</comment>
-    <comment xml:lang="ia">Publication Mup</comment>
-    <comment xml:lang="id">Publikasi Mup</comment>
-    <comment xml:lang="it">Pubblicazione Mup</comment>
-    <comment xml:lang="ja">Mup 出版ファイル</comment>
-    <comment xml:lang="kk">Mup жариялымы</comment>
-    <comment xml:lang="ko">Mup 출판물</comment>
-    <comment xml:lang="lt">Mup leidinys</comment>
-    <comment xml:lang="lv">Mup publikācija</comment>
-    <comment xml:lang="nb">Mup publikasjon</comment>
-    <comment xml:lang="nl">Mup-publicatie</comment>
-    <comment xml:lang="nn">Mup-publikasjon</comment>
-    <comment xml:lang="oc">publication Mup</comment>
-    <comment xml:lang="pl">Publikacja Mup</comment>
-    <comment xml:lang="pt">publicação Mup</comment>
-    <comment xml:lang="pt_BR">Publicação do Mup</comment>
-    <comment xml:lang="ro">Publicație Mup</comment>
-    <comment xml:lang="ru">Публикация Mup</comment>
-    <comment xml:lang="sk">Publikácie Mup</comment>
-    <comment xml:lang="sl">Datoteka objave Mup</comment>
-    <comment xml:lang="sq">Publikim Mup</comment>
-    <comment xml:lang="sr">Муп објава</comment>
-    <comment xml:lang="sv">Mup-publicering</comment>
-    <comment xml:lang="tr">Mup uygulaması</comment>
-    <comment xml:lang="uk">публікація Mup</comment>
-    <comment xml:lang="vi">Bản xuất Mup</comment>
-    <comment xml:lang="zh_CN">Mup 应用程序</comment>
-    <comment xml:lang="zh_TW">Mup 出版品</comment>
+    <comment>Mup musical composition document</comment>
+    <comment xml:lang="bg">Музикална композиция — Mup</comment>
+    <comment xml:lang="ca">document de composició musical Mup</comment>
+    <comment xml:lang="da">Mup-musiksamling-dokument</comment>
+    <comment xml:lang="de">Mup-Musikkompositions-Dokument</comment>
+    <comment xml:lang="en-GB">Mup musical composition document</comment>
+    <comment xml:lang="es">documento de composición musical de Mup</comment>
+    <comment xml:lang="eu">Mup konposizio musikal dokumentua</comment>
+    <comment xml:lang="fi">Mup-sävellysdokumentti</comment>
+    <comment xml:lang="fr">document de composition musicale Mup</comment>
+    <comment xml:lang="hr">Mup dokument glazbene kompozicije</comment>
+    <comment xml:lang="hu">Mup zenei kompozíciós dokumentum</comment>
+    <comment xml:lang="id">Dokumen komposisi musik Mup</comment>
+    <comment xml:lang="it">Documento composizione musicale Mup</comment>
+    <comment xml:lang="kk">Mup музыкалық композиция құжаты</comment>
+    <comment xml:lang="ko">mup 작곡 문서</comment>
+    <comment xml:lang="pl">Dokument kompozycji muzycznej Mup</comment>
+    <comment xml:lang="pt-BR">Documento de composição musical Mup</comment>
+    <comment xml:lang="sk">Dokument hudobnej kompozície Mup</comment>
+    <comment xml:lang="sv">Mup musikkompositionsdokument</comment>
+    <comment xml:lang="tr">Mup musical composition belgesi</comment>
+    <comment xml:lang="uk">документ музичного запису твору Mup</comment>
+    <comment xml:lang="zh-CN">Mup 乐曲文档</comment>
+    <comment xml:lang="zh-TW">Mup 音樂組合文件</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="//!Mup" type="string" offset="0"/>
+      <match type="string" value="//!Mup" offset="0"/>
     </magic>
     <glob pattern="*.mup"/>
     <glob pattern="*.not"/>
   </mime-type>
   <mime-type type="text/x-objcsrc">
     <comment>Objective-C source code</comment>
+    <comment xml:lang="af">Objective-C-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر الهدف-C </comment>
-    <comment xml:lang="be@latin">Kryničny kod Objective-C</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Objective-C</comment>
     <comment xml:lang="bg">Изходен код — Objective C</comment>
     <comment xml:lang="ca">codi font en Objective-C</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Objective-C</comment>
     <comment xml:lang="da">Objektiv C-kildekode</comment>
     <comment xml:lang="de">Objective-C-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Objective-C</comment>
-    <comment xml:lang="en_GB">Objective-C source code</comment>
+    <comment xml:lang="en-GB">Objective-C source code</comment>
     <comment xml:lang="eo">fontkodo en Objective-C</comment>
     <comment xml:lang="es">código fuente en Objective-C</comment>
     <comment xml:lang="eu">Objective-C iturburu-kodea</comment>
     <comment xml:lang="fi">Objective-C-lähdekoodi</comment>
     <comment xml:lang="fo">Objective-C keldukota</comment>
     <comment xml:lang="fr">code source Objective-C</comment>
+    <comment xml:lang="fur">codiç sorzint Objective-C</comment>
     <comment xml:lang="ga">cód foinseach Objective-C</comment>
     <comment xml:lang="gl">código fonte de Objective-C</comment>
     <comment xml:lang="he">קוד מקור של Objective-C</comment>
@@ -35314,7 +36548,7 @@
     <comment xml:lang="oc">còde font Objective-C</comment>
     <comment xml:lang="pl">Kod źródłowy Objective-C</comment>
     <comment xml:lang="pt">código origem Objective-C</comment>
-    <comment xml:lang="pt_BR">Código-fonte Objective-C</comment>
+    <comment xml:lang="pt-BR">Código-fonte Objective-C</comment>
     <comment xml:lang="ro">Cod sursă Objective-C</comment>
     <comment xml:lang="ru">Исходный код Objective-C</comment>
     <comment xml:lang="sk">Zdrojový kód Objective-C</comment>
@@ -35325,31 +36559,33 @@
     <comment xml:lang="tr">Objective-C kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Objective-C</comment>
     <comment xml:lang="vi">Mã nguồn Objective-C</comment>
-    <comment xml:lang="zh_CN">Objective-C 源代码</comment>
-    <comment xml:lang="zh_TW">Objective-C 源碼</comment>
+    <comment xml:lang="zh-CN">Objective-C 源代码</comment>
+    <comment xml:lang="zh-TW">Objective-C 源碼</comment>
     <sub-class-of type="text/x-csrc"/>
     <magic priority="30">
-      <match value="#import" type="string" offset="0"/>
+      <match type="string" value="#import" offset="0"/>
     </magic>
     <glob pattern="*.m"/>
   </mime-type>
   <mime-type type="text/x-ocaml">
     <comment>OCaml source code</comment>
+    <comment xml:lang="af">OCaml-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر OCaml</comment>
-    <comment xml:lang="be@latin">Kryničny kod OCaml</comment>
+    <comment xml:lang="be-Latn">Kryničny kod OCaml</comment>
     <comment xml:lang="bg">Изходен код — OCaml</comment>
     <comment xml:lang="ca">codi font en OCaml</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce OCaml</comment>
     <comment xml:lang="da">OCaml-kildekode</comment>
     <comment xml:lang="de">OCaml-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας OCaml</comment>
-    <comment xml:lang="en_GB">OCaml source code</comment>
+    <comment xml:lang="en-GB">OCaml source code</comment>
     <comment xml:lang="eo">OCaml-fontkodo</comment>
     <comment xml:lang="es">código fuente en OCaml</comment>
     <comment xml:lang="eu">OCaml iturburu-kodea</comment>
     <comment xml:lang="fi">OCaml-lähdekoodi</comment>
     <comment xml:lang="fo">OCaml keldukota</comment>
     <comment xml:lang="fr">code source OCaml</comment>
+    <comment xml:lang="fur">codiç sorzint OCaml</comment>
     <comment xml:lang="ga">cód foinseach OCaml</comment>
     <comment xml:lang="gl">código fonte de OCaml</comment>
     <comment xml:lang="he">קוד מקור של OCaml</comment>
@@ -35369,7 +36605,7 @@
     <comment xml:lang="oc">còde font OCaml</comment>
     <comment xml:lang="pl">Kod źródłowy OCaml</comment>
     <comment xml:lang="pt">código origem OCaml</comment>
-    <comment xml:lang="pt_BR">Código-fonte OCaml</comment>
+    <comment xml:lang="pt-BR">Código-fonte OCaml</comment>
     <comment xml:lang="ro">Cod sursă OCaml</comment>
     <comment xml:lang="ru">Исходный код OCaml</comment>
     <comment xml:lang="sk">Zdrojový kód OCaml</comment>
@@ -35380,19 +36616,26 @@
     <comment xml:lang="tr">OCaml kaynak kodu</comment>
     <comment xml:lang="uk">первинний код мовою OCaml</comment>
     <comment xml:lang="vi">Mã nguồn OCaml</comment>
-    <comment xml:lang="zh_CN">OCaml 源代码</comment>
-    <comment xml:lang="zh_TW">OCaml 源碼</comment>
+    <comment xml:lang="zh-CN">OCaml 源代码</comment>
+    <comment xml:lang="zh-TW">OCaml 源碼</comment>
     <glob pattern="*.ml"/>
     <glob pattern="*.mli"/>
   </mime-type>
   <mime-type type="text/x-opencl-src">
     <comment>OpenCL source code</comment>
+    <comment xml:lang="af">OpenCL-bronkode</comment>
+    <comment xml:lang="bg">Изходен код — OpenCL</comment>
     <comment xml:lang="ca">codi font en OpenCL</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce OpenCL</comment>
+    <comment xml:lang="da">OpenCL-kildekode</comment>
     <comment xml:lang="de">OpenCL-Quelltext</comment>
-    <comment xml:lang="en_GB">OpenCL source code</comment>
+    <comment xml:lang="en-GB">OpenCL source code</comment>
     <comment xml:lang="es">código fuente en OpenCL</comment>
+    <comment xml:lang="eu">OpenCL iturburu-kodea</comment>
     <comment xml:lang="fi">OpenCL-lähdekoodi</comment>
+    <comment xml:lang="fr">code source OpenCL</comment>
+    <comment xml:lang="fur">codiç sorzint OpenCL</comment>
+    <comment xml:lang="ga">cód foinseach OpenCL</comment>
     <comment xml:lang="hr">OpenCL izvorni kôd</comment>
     <comment xml:lang="hu">OpenCL forráskód</comment>
     <comment xml:lang="id">Kode sumber OpenCL</comment>
@@ -35400,91 +36643,75 @@
     <comment xml:lang="kk">OpenCL бастапқы коды</comment>
     <comment xml:lang="ko">OpenCL 소스 코드</comment>
     <comment xml:lang="pl">Kod źródłowy OpenCL</comment>
-    <comment xml:lang="pt_BR">Código-fonte do OpenCL</comment>
+    <comment xml:lang="pt-BR">Código-fonte OpenCL</comment>
     <comment xml:lang="ru">Исходный код OpenGL</comment>
     <comment xml:lang="sk">Zdrojový kód OpenCL</comment>
+    <comment xml:lang="sl">Izvorna koda OpenCL</comment>
     <comment xml:lang="sv">OpenCL-källkod</comment>
+    <comment xml:lang="tr">OpenCL kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою OpenCL</comment>
-    <comment xml:lang="zh_CN">OpenCL 源代码</comment>
-    <comment xml:lang="zh_TW">OpenCL 源碼</comment>
+    <comment xml:lang="zh-CN">OpenCL 源代码</comment>
+    <comment xml:lang="zh-TW">OpenCL 源碼</comment>
     <acronym>OpenCL</acronym>
     <expanded-acronym>Open Computing Language</expanded-acronym>
     <sub-class-of type="text/x-csrc"/>
     <glob pattern="*.cl"/>
   </mime-type>
   <mime-type type="text/x-matlab">
-    <comment>MATLAB script/function</comment>
-    <comment xml:lang="ar">سكربت/وظيفة MATLAB</comment>
-    <comment xml:lang="be@latin">Skrypt/funkcyja MATLAB</comment>
-    <comment xml:lang="bg">Скрипт/функция — MATLAB</comment>
-    <comment xml:lang="ca">script/funció MATLAB</comment>
-    <comment xml:lang="cs">skript/funkce MATLAB</comment>
-    <comment xml:lang="da">MATLAB-program/-funktion</comment>
-    <comment xml:lang="de">MATLAB-Skript/-Funktion</comment>
-    <comment xml:lang="el">Δέσμη ενεργειών/συνάρτηση MATLAB</comment>
-    <comment xml:lang="en_GB">MATLAB script/function</comment>
-    <comment xml:lang="es">secuencia de órdenes/función de MATLAB</comment>
-    <comment xml:lang="eu">MATLAB script/funtzioa</comment>
-    <comment xml:lang="fi">MATLAB-komentotiedosto/funktio</comment>
-    <comment xml:lang="fo">MATLAB boðrøð/funka</comment>
-    <comment xml:lang="fr">script/fonction MATLAB</comment>
-    <comment xml:lang="ga">script/feidhm MATLAB</comment>
-    <comment xml:lang="gl">función/script de MATLAB</comment>
-    <comment xml:lang="he">תסריט/פונקציית MATLAB</comment>
-    <comment xml:lang="hr">MATLAB skripta/funkcija</comment>
-    <comment xml:lang="hu">MATLAB parancsfájl/funkció</comment>
-    <comment xml:lang="ia">Script/function MATLAB</comment>
-    <comment xml:lang="id">Skrip/fungsi MATLAB</comment>
-    <comment xml:lang="it">Script/Funzione MATLAB</comment>
-    <comment xml:lang="ja">MATLAB スクリプト/関数</comment>
-    <comment xml:lang="kk">MATLAB сценарий/функциясы</comment>
-    <comment xml:lang="ko">MATLAB 스크립트/함수</comment>
-    <comment xml:lang="lt">MATLAB scenarijus / funkcija</comment>
-    <comment xml:lang="lv">MATLAB skripts/funkcija</comment>
-    <comment xml:lang="nb">Skript/funksjon for MATLAB</comment>
-    <comment xml:lang="nl">MATLAB-script/functie</comment>
-    <comment xml:lang="nn">MATLAB-skript/funksjon</comment>
-    <comment xml:lang="oc">escript/fonction MATLAB</comment>
-    <comment xml:lang="pl">Skrypt/funkcja MATLAB</comment>
-    <comment xml:lang="pt">script/função MATLAB</comment>
-    <comment xml:lang="pt_BR">Script/função do MATLAB</comment>
-    <comment xml:lang="ro">Funcție/script MATLAB</comment>
-    <comment xml:lang="ru">Сценарий/функция MATLAB</comment>
-    <comment xml:lang="sk">Skript/funkcia MATLAB</comment>
-    <comment xml:lang="sl">Skriptna datoteka MATLAB</comment>
-    <comment xml:lang="sq">Script/Funksion MATLAB</comment>
-    <comment xml:lang="sr">скрипта/функција МАТЛАБ-а</comment>
-    <comment xml:lang="sv">MATLAB-skript/funktion</comment>
-    <comment xml:lang="tr">MATLAB betiği/fonksiyonu</comment>
-    <comment xml:lang="uk">скрипт/функція MATLAB</comment>
-    <comment xml:lang="vi">Văn lệnh/chức năng MATLAB</comment>
-    <comment xml:lang="zh_CN">MATLAB 脚本/函数</comment>
-    <comment xml:lang="zh_TW">MATLAB 指令稿/函式</comment>
+    <comment>MATLAB file</comment>
+    <comment xml:lang="bg">Файл — MATLAB</comment>
+    <comment xml:lang="ca">fitxer MATLAB</comment>
+    <comment xml:lang="da">MATLAB-fil</comment>
+    <comment xml:lang="de">MATLAB-Datei</comment>
+    <comment xml:lang="en-GB">MATLAB file</comment>
+    <comment xml:lang="es">archivo de MATLAB</comment>
+    <comment xml:lang="eu">MATLAB fitxategia</comment>
+    <comment xml:lang="fi">MATLAB-tiedosto</comment>
+    <comment xml:lang="fr">fichier MATLAB</comment>
+    <comment xml:lang="hr">MATLAB datoteka</comment>
+    <comment xml:lang="hu">MATLAB fájl</comment>
+    <comment xml:lang="id">Berkas MATLAB</comment>
+    <comment xml:lang="it">File MATLAB</comment>
+    <comment xml:lang="kk">MATLAB файлы</comment>
+    <comment xml:lang="ko">MATLAB 파일</comment>
+    <comment xml:lang="pl">Plik MATLAB</comment>
+    <comment xml:lang="pt-BR">Arquivo do MATLAB</comment>
+    <comment xml:lang="ru">Файл MATLAB</comment>
+    <comment xml:lang="sk">Súbor MATLAB</comment>
+    <comment xml:lang="sl">Datoteka MATLAB</comment>
+    <comment xml:lang="sv">MATLAB-fil</comment>
+    <comment xml:lang="tr">MATLAB dosyası</comment>
+    <comment xml:lang="uk">файл MATLAB</comment>
+    <comment xml:lang="zh-CN">MATLAB 文件</comment>
+    <comment xml:lang="zh-TW">MATLAB 檔</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="10">
-      <match value="%" type="string" offset="0"/>
+      <match type="string" value="%" offset="0"/>
     </magic>
     <magic priority="10">
-      <match value="##" type="string" offset="0"/>
+      <match type="string" value="##" offset="0"/>
     </magic>
     <magic priority="50">
-      <match value="function" type="string" offset="0"/>
+      <match type="string" value="function" offset="0"/>
     </magic>
     <glob pattern="*.m"/>
     <alias type="text/x-octave"/>
   </mime-type>
   <mime-type type="text/x-meson">
     <comment>Meson source code</comment>
+    <comment xml:lang="af">Meson-bronkode</comment>
+    <comment xml:lang="bg">Изходен код — Meson</comment>
     <comment xml:lang="ca">codi font en Meson</comment>
     <comment xml:lang="cs">zdrojový kód Meson</comment>
     <comment xml:lang="da">Meson-kildekode</comment>
     <comment xml:lang="de">Meson-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Meson</comment>
-    <comment xml:lang="en_GB">Meson source code</comment>
+    <comment xml:lang="en-GB">Meson source code</comment>
     <comment xml:lang="es">código fuente en Meson</comment>
     <comment xml:lang="eu">Meson iturburu-kodea</comment>
     <comment xml:lang="fi">Meson-lähdekoodi</comment>
     <comment xml:lang="fr">code source Meson</comment>
+    <comment xml:lang="fur">codiç sorzint Meson</comment>
     <comment xml:lang="ga">cód foinseach Meson</comment>
     <comment xml:lang="he">קוד מקור Meson</comment>
     <comment xml:lang="hr">Meson izvorni kôd</comment>
@@ -35497,31 +36724,35 @@
     <comment xml:lang="oc">còde font Meson</comment>
     <comment xml:lang="pl">Kod źródłowy Meson</comment>
     <comment xml:lang="pt">código origem Meson</comment>
-    <comment xml:lang="pt_BR">Código-fonte Meson</comment>
+    <comment xml:lang="pt-BR">Código-fonte Meson</comment>
     <comment xml:lang="ru">Исходный код Meson</comment>
     <comment xml:lang="sk">Zdrojový kód Meson</comment>
+    <comment xml:lang="sl">Izvorna koda Meson</comment>
     <comment xml:lang="sr">Месон изворни ко̂д</comment>
     <comment xml:lang="sv">Meson-källkod</comment>
     <comment xml:lang="tr">Meson kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Meson</comment>
-    <comment xml:lang="zh_CN">Meson 源代码</comment>
-    <comment xml:lang="zh_TW">Meson 源碼</comment>
+    <comment xml:lang="zh-CN">Meson 源代码</comment>
+    <comment xml:lang="zh-TW">Meson 源碼</comment>
     <glob pattern="meson.build"/>
     <glob pattern="meson_options.txt"/>
     <sub-class-of type="text/plain"/>
   </mime-type>
   <mime-type type="text/x-modelica">
     <comment>Modelica model</comment>
+    <comment xml:lang="af">Modelica-model</comment>
+    <comment xml:lang="bg">Модел — Modelica</comment>
     <comment xml:lang="ca">model de Modelica</comment>
     <comment xml:lang="cs">model Modelica</comment>
     <comment xml:lang="da">Modelica-model</comment>
     <comment xml:lang="de">Modelica-Modell</comment>
     <comment xml:lang="el">Μοντέλο Modelica</comment>
-    <comment xml:lang="en_GB">Modelica model</comment>
+    <comment xml:lang="en-GB">Modelica model</comment>
     <comment xml:lang="es">modelo de Modelica</comment>
     <comment xml:lang="eu">Modelica modeloa</comment>
     <comment xml:lang="fi">Modelica-malli</comment>
     <comment xml:lang="fr">modèle Modelica</comment>
+    <comment xml:lang="fur">model Modelica</comment>
     <comment xml:lang="ga">samhail Modelica</comment>
     <comment xml:lang="gl">Modelo de Modelica</comment>
     <comment xml:lang="he">דגם של Modelica</comment>
@@ -35537,7 +36768,7 @@
     <comment xml:lang="oc">modèl Modelica</comment>
     <comment xml:lang="pl">Model Modelica</comment>
     <comment xml:lang="pt">modelo Modelica</comment>
-    <comment xml:lang="pt_BR">Modelo da Modelica</comment>
+    <comment xml:lang="pt-BR">Modelo da Modelica</comment>
     <comment xml:lang="ru">Модель Modelica</comment>
     <comment xml:lang="sk">Model Modelica</comment>
     <comment xml:lang="sl">Model Modelica</comment>
@@ -35545,43 +36776,45 @@
     <comment xml:lang="sv">Modelica-modell</comment>
     <comment xml:lang="tr">Modelica modeli</comment>
     <comment xml:lang="uk">модель Modelica</comment>
-    <comment xml:lang="zh_CN">Modelica 模型</comment>
-    <comment xml:lang="zh_TW">Modelica 模型</comment>
+    <comment xml:lang="zh-CN">Modelica 模型</comment>
+    <comment xml:lang="zh-TW">Modelica 模型</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="10">
-      <match value="//" type="string" offset="0"/>
+      <match type="string" value="//" offset="0"/>
     </magic>
     <magic priority="50">
-      <match value="function" type="string" offset="0"/>
+      <match type="string" value="function" offset="0"/>
     </magic>
     <magic priority="50">
-      <match value="class" type="string" offset="0"/>
+      <match type="string" value="class" offset="0"/>
     </magic>
     <magic priority="50">
-      <match value="model" type="string" offset="0"/>
+      <match type="string" value="model" offset="0"/>
     </magic>
     <magic priority="50">
-      <match value="record" type="string" offset="0"/>
+      <match type="string" value="record" offset="0"/>
     </magic>
     <glob pattern="*.mo"/>
   </mime-type>
   <mime-type type="text/x-pascal">
     <comment>Pascal source code</comment>
+    <comment xml:lang="af">Pascal-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر باسكال</comment>
-    <comment xml:lang="be@latin">Kryničny kod Pascal</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Pascal</comment>
     <comment xml:lang="bg">Изходен код — Pascal</comment>
     <comment xml:lang="ca">codi font en Pascal</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Pascal</comment>
-    <comment xml:lang="da">Pascalkildekode</comment>
+    <comment xml:lang="da">Pascal-kildekode</comment>
     <comment xml:lang="de">Pascal-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Pascal</comment>
-    <comment xml:lang="en_GB">Pascal source code</comment>
+    <comment xml:lang="en-GB">Pascal source code</comment>
     <comment xml:lang="eo">Pascal-fontkodo</comment>
     <comment xml:lang="es">código fuente en Pascal</comment>
     <comment xml:lang="eu">Pascal iturburu-kodea</comment>
     <comment xml:lang="fi">Pascal-lähdekoodi</comment>
     <comment xml:lang="fo">Pascal keldukota</comment>
     <comment xml:lang="fr">code source Pascal</comment>
+    <comment xml:lang="fur">codiç sorzint Pascal</comment>
     <comment xml:lang="ga">cód foinseach Pascal</comment>
     <comment xml:lang="gl">código fonte en Pascal</comment>
     <comment xml:lang="he">קוד מקור של Pascal</comment>
@@ -35602,7 +36835,7 @@
     <comment xml:lang="oc">còde font Pascal</comment>
     <comment xml:lang="pl">Kod źródłowy Pascal</comment>
     <comment xml:lang="pt">código origem Pascal</comment>
-    <comment xml:lang="pt_BR">Código-fonte Pascal</comment>
+    <comment xml:lang="pt-BR">Código-fonte Pascal</comment>
     <comment xml:lang="ro">Cod sursă Pascal</comment>
     <comment xml:lang="ru">Исходный код Pascal</comment>
     <comment xml:lang="sk">Zdrojový kód Pascal</comment>
@@ -35613,29 +36846,31 @@
     <comment xml:lang="tr">Pascal kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Pascal</comment>
     <comment xml:lang="vi">Mã nguồn Pascal</comment>
-    <comment xml:lang="zh_CN">Pascal 源代码</comment>
-    <comment xml:lang="zh_TW">Pascal 源碼</comment>
+    <comment xml:lang="zh-CN">Pascal 源代码</comment>
+    <comment xml:lang="zh-TW">Pascal 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.p"/>
     <glob pattern="*.pas"/>
   </mime-type>
   <mime-type type="text/x-patch">
     <comment>differences between files</comment>
+    <comment xml:lang="af">verskille tussen lêers</comment>
     <comment xml:lang="ar">الاختلافات بين الملفات</comment>
-    <comment xml:lang="be@latin">adroźnieńni pamiž fajłami</comment>
+    <comment xml:lang="be-Latn">adroźnieńni pamiž fajłami</comment>
     <comment xml:lang="bg">Разлики между файлове</comment>
     <comment xml:lang="ca">diferències entre fitxers</comment>
     <comment xml:lang="cs">rozdíly mezi soubory</comment>
     <comment xml:lang="da">forskel mellem filer</comment>
     <comment xml:lang="de">Unterschiede zwischen Dateien</comment>
     <comment xml:lang="el">Διαφορές μεταξύ αρχείων</comment>
-    <comment xml:lang="en_GB">differences between files</comment>
+    <comment xml:lang="en-GB">differences between files</comment>
     <comment xml:lang="eo">diferencoj inter dosieroj</comment>
     <comment xml:lang="es">diferencias entre archivos</comment>
     <comment xml:lang="eu">fitxategien arteko ezberdintasunak</comment>
     <comment xml:lang="fi">tiedostojen väliset erot</comment>
     <comment xml:lang="fo">munur millum fílur</comment>
     <comment xml:lang="fr">différences entre fichiers</comment>
+    <comment xml:lang="fur">diferencis tra file</comment>
     <comment xml:lang="ga">difríochtaí idir chomhaid</comment>
     <comment xml:lang="gl">diferenzas entre ficheiros</comment>
     <comment xml:lang="he">הבדל בין קבצים</comment>
@@ -35656,7 +36891,7 @@
     <comment xml:lang="oc">différences entre fichièrs</comment>
     <comment xml:lang="pl">Różnica pomiędzy plikami</comment>
     <comment xml:lang="pt">diferenças entre ficheiros</comment>
-    <comment xml:lang="pt_BR">Diferenças entre arquivos</comment>
+    <comment xml:lang="pt-BR">Diferenças entre arquivos</comment>
     <comment xml:lang="ro">diferențe între fișiere</comment>
     <comment xml:lang="ru">Различия между файлами</comment>
     <comment xml:lang="sk">Rozdiely medzi súbormi</comment>
@@ -35667,39 +36902,41 @@
     <comment xml:lang="tr">dosyalar arasındaki fark</comment>
     <comment xml:lang="uk">різниця між файлами</comment>
     <comment xml:lang="vi">khác biệt giữa các tập tin</comment>
-    <comment xml:lang="zh_CN">文件的区别</comment>
-    <comment xml:lang="zh_TW">檔案內容差異</comment>
+    <comment xml:lang="zh-CN">文件的区别</comment>
+    <comment xml:lang="zh-TW">檔案內容差異</comment>
     <alias type="text/x-diff"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="diff\t" type="string" offset="0"/>
-      <match value="diff " type="string" offset="0"/>
-      <match value="***\t" type="string" offset="0"/>
-      <match value="*** " type="string" offset="0"/>
-      <match value="=== " type="string" offset="0"/>
-      <match value="--- " type="string" offset="0"/>
-      <match value="Only in\t" type="string" offset="0"/>
-      <match value="Only in " type="string" offset="0"/>
-      <match value="Common subdirectories: " type="string" offset="0"/>
-      <match value="Index:" type="string" offset="0"/>
+      <match type="string" value="diff\t" offset="0"/>
+      <match type="string" value="diff " offset="0"/>
+      <match type="string" value="***\t" offset="0"/>
+      <match type="string" value="*** " offset="0"/>
+      <match type="string" value="=== " offset="0"/>
+      <match type="string" value="--- " offset="0"/>
+      <match type="string" value="Only in\t" offset="0"/>
+      <match type="string" value="Only in " offset="0"/>
+      <match type="string" value="Common subdirectories: " offset="0"/>
+      <match type="string" value="Index:" offset="0"/>
     </magic>
     <glob pattern="*.diff"/>
     <glob pattern="*.patch"/>
   </mime-type>
   <mime-type type="text/x-go">
     <comment>Go source code</comment>
+    <comment xml:lang="af">Go-bronkode</comment>
     <comment xml:lang="bg">Изходен код — Go</comment>
     <comment xml:lang="ca">codi font en Go</comment>
     <comment xml:lang="cs">zdrojový kód v jazyce Go</comment>
     <comment xml:lang="da">Go-kildekode</comment>
     <comment xml:lang="de">Go-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Go</comment>
-    <comment xml:lang="en_GB">Go source code</comment>
+    <comment xml:lang="en-GB">Go source code</comment>
     <comment xml:lang="eo">Go-fontkodo</comment>
     <comment xml:lang="es">código fuente en Go</comment>
     <comment xml:lang="eu">Go iturburu-kodea</comment>
     <comment xml:lang="fi">Go-lähdekoodi</comment>
     <comment xml:lang="fr">code source Go</comment>
+    <comment xml:lang="fur">codiç sorzint Go</comment>
     <comment xml:lang="ga">cód foinseach Go</comment>
     <comment xml:lang="gl">código fonte de Go</comment>
     <comment xml:lang="he">קוד מקור של Go</comment>
@@ -35717,7 +36954,7 @@
     <comment xml:lang="oc">còde font Go</comment>
     <comment xml:lang="pl">Kod źródłowy Go</comment>
     <comment xml:lang="pt">cigo origem Go</comment>
-    <comment xml:lang="pt_BR">Código-fonte Go</comment>
+    <comment xml:lang="pt-BR">Código-fonte Go</comment>
     <comment xml:lang="ru">Исходный код Go</comment>
     <comment xml:lang="sk">Zdrojový kód Go</comment>
     <comment xml:lang="sl">Izvorna koda Go</comment>
@@ -35725,23 +36962,26 @@
     <comment xml:lang="sv">Go-källkod</comment>
     <comment xml:lang="tr">Go kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Go</comment>
-    <comment xml:lang="zh_CN">Go 源代码</comment>
-    <comment xml:lang="zh_TW">Go 源碼</comment>
+    <comment xml:lang="zh-CN">Go 源代码</comment>
+    <comment xml:lang="zh-TW">Go 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.go"/>
   </mime-type>
   <mime-type type="text/x-scons">
     <comment>SCons configuration file</comment>
+    <comment xml:lang="af">SCons-opstellingslêer</comment>
+    <comment xml:lang="bg">Настройки — SCons</comment>
     <comment xml:lang="ca">fitxer de configuració de SCons</comment>
     <comment xml:lang="cs">konfigurační soubor SCons</comment>
     <comment xml:lang="da">SCons-konfigurationsfil</comment>
     <comment xml:lang="de">SCons-Konfigurationsdatei</comment>
     <comment xml:lang="el">Αρχείο ρυθμίσεων SCons</comment>
-    <comment xml:lang="en_GB">SCons configuration file</comment>
+    <comment xml:lang="en-GB">SCons configuration file</comment>
     <comment xml:lang="es">archivo de configuración de SCons</comment>
     <comment xml:lang="eu">SCons konfigurazio-fitxategia</comment>
     <comment xml:lang="fi">SCons-asetustiedosto</comment>
     <comment xml:lang="fr">fichier de configuration SCons</comment>
+    <comment xml:lang="fur">file di configurazion SCons</comment>
     <comment xml:lang="ga">comhad cumraíochta SCons</comment>
     <comment xml:lang="he">קובץ תצורה של SCons</comment>
     <comment xml:lang="hr">SCons datoteka podešavanja</comment>
@@ -35754,7 +36994,7 @@
     <comment xml:lang="oc">fichièr de configuracion SCons</comment>
     <comment xml:lang="pl">Plik konfiguracji SCons</comment>
     <comment xml:lang="pt">ficheiro de configuração SCons</comment>
-    <comment xml:lang="pt_BR">Arquivo de configuração do SCons</comment>
+    <comment xml:lang="pt-BR">Arquivo de configuração do SCons</comment>
     <comment xml:lang="ru">Файл настроек SCons</comment>
     <comment xml:lang="sk">Konfiguračný súbor SCons</comment>
     <comment xml:lang="sl">Prilagoditvena datoteka SCons</comment>
@@ -35762,8 +37002,8 @@
     <comment xml:lang="sv">SCons-konfigurationsfil</comment>
     <comment xml:lang="tr">SCons yapılandırma dosyası</comment>
     <comment xml:lang="uk">файл налаштувань SCons</comment>
-    <comment xml:lang="zh_CN">SCons 配置文件</comment>
-    <comment xml:lang="zh_TW">SCons 組態檔</comment>
+    <comment xml:lang="zh-CN">SCons 配置文件</comment>
+    <comment xml:lang="zh-TW">SCons 組態檔</comment>
     <sub-class-of type="text/x-python"/>
     <glob pattern="SConstruct"/>
     <glob pattern="SConscript"/>
@@ -35771,12 +37011,19 @@
   </mime-type>
   <mime-type type="text/x-python3">
     <comment>Python 3 script</comment>
+    <comment xml:lang="af">Python 3-skrip</comment>
+    <comment xml:lang="bg">Скрипт — Python 3</comment>
     <comment xml:lang="ca">script Python 3</comment>
     <comment xml:lang="cs">skript v jazyce Python 3</comment>
+    <comment xml:lang="da">Python 3-program</comment>
     <comment xml:lang="de">Python-3-Skript</comment>
-    <comment xml:lang="en_GB">Python 3 script</comment>
+    <comment xml:lang="en-GB">Python 3 script</comment>
     <comment xml:lang="es">secuencia de órdenes en Python 3</comment>
+    <comment xml:lang="eu">Python 3 script-a</comment>
     <comment xml:lang="fi">Python 3 -skripti</comment>
+    <comment xml:lang="fr">script Python 3</comment>
+    <comment xml:lang="fur">script Python 3</comment>
+    <comment xml:lang="ga">script Python 3</comment>
     <comment xml:lang="hr">Python3 skripta</comment>
     <comment xml:lang="hu">Python 3 parancsfájl</comment>
     <comment xml:lang="id">Skrip Python 3</comment>
@@ -35784,47 +37031,51 @@
     <comment xml:lang="kk">Python 3 скрипті</comment>
     <comment xml:lang="ko">파이썬 3 스크립트</comment>
     <comment xml:lang="pl">Skrypt Python 3</comment>
-    <comment xml:lang="pt_BR">Script Python 3</comment>
+    <comment xml:lang="pt-BR">Script Python 3</comment>
     <comment xml:lang="ru">Сценарий Python 3</comment>
     <comment xml:lang="sk">Skript Python 3</comment>
+    <comment xml:lang="sl">Skript Python 3</comment>
     <comment xml:lang="sv">Python 3-skript</comment>
+    <comment xml:lang="tr">Python 3 betiği</comment>
     <comment xml:lang="uk">скрипт мовою Python 3</comment>
-    <comment xml:lang="zh_CN">Python 3 脚本</comment>
-    <comment xml:lang="zh_TW">Python 3 指令稿</comment>
-    <sub-class-of type='text/x-python'/>
-    <magic priority="60">
-      <match value="#!/bin/python3" type="string" offset="0"/>
-      <match value="#! /bin/python3" type="string" offset="0"/>
-      <match value='eval \"exec /bin/python3' type="string" offset="0"/>
-      <match value="#!/usr/bin/python3" type="string" offset="0"/>
-      <match value="#! /usr/bin/python3" type="string" offset="0"/>
-      <match value='eval \"exec /usr/bin/python3' type="string" offset="0"/>
-      <match value="#!/usr/local/bin/python3" type="string" offset="0"/>
-      <match value="#! /usr/local/bin/python3" type="string" offset="0"/>
-      <match value='eval \"exec /usr/local/bin/python3' type="string" offset="0"/>
-      <match value='/bin/env python3' type="string" offset="2:16"/>
-    </magic>
-    <glob weight="50" pattern="*.py"/>
-    <glob weight="60" pattern="*.py3"/>
-    <glob weight="60" pattern="*.py3x"/>
+    <comment xml:lang="zh-CN">Python 3 脚本</comment>
+    <comment xml:lang="zh-TW">Python 3 指令稿</comment>
+    <sub-class-of type="text/x-python"/>
+    <magic priority="60"><!-- higher priority than text/x-python -->
+      <match type="string" value="#!/bin/python3" offset="0"/>
+      <match type="string" value="#! /bin/python3" offset="0"/>
+      <match type="string" value="eval \&quot;exec /bin/python3" offset="0"/>
+      <match type="string" value="#!/usr/bin/python3" offset="0"/>
+      <match type="string" value="#! /usr/bin/python3" offset="0"/>
+      <match type="string" value="eval \&quot;exec /usr/bin/python3" offset="0"/>
+      <match type="string" value="#!/usr/local/bin/python3" offset="0"/>
+      <match type="string" value="#! /usr/local/bin/python3" offset="0"/>
+      <match type="string" value="eval \&quot;exec /usr/local/bin/python3" offset="0"/>
+      <match type="string" value="/bin/env python3" offset="2:16"/>
+    </magic>
+    <glob pattern="*.py" weight="50"/><!-- lower priority than in text/x-python -->
+    <glob pattern="*.py3" weight="60"/>
+    <glob pattern="*.py3x" weight="60"/>
   </mime-type>
   <mime-type type="text/x-python">
     <comment>Python script</comment>
+    <comment xml:lang="af">Python-skrip</comment>
     <comment xml:lang="ar">سكربت بايثون</comment>
-    <comment xml:lang="be@latin">Skrypt Python</comment>
+    <comment xml:lang="be-Latn">Skrypt Python</comment>
     <comment xml:lang="bg">Скрипт — Python</comment>
     <comment xml:lang="ca">script Python</comment>
     <comment xml:lang="cs">skript v jazyce Python</comment>
-    <comment xml:lang="da">Pythonprogram</comment>
+    <comment xml:lang="da">Python-program</comment>
     <comment xml:lang="de">Python-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών Python</comment>
-    <comment xml:lang="en_GB">Python script</comment>
+    <comment xml:lang="en-GB">Python script</comment>
     <comment xml:lang="eo">Python-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en Python</comment>
     <comment xml:lang="eu">Python script-a</comment>
     <comment xml:lang="fi">Python-komentotiedosto</comment>
     <comment xml:lang="fo">Python boðrøð</comment>
     <comment xml:lang="fr">script Python</comment>
+    <comment xml:lang="fur">script Python</comment>
     <comment xml:lang="ga">script Python</comment>
     <comment xml:lang="gl">Script en Python</comment>
     <comment xml:lang="he">תסריט Python</comment>
@@ -35845,7 +37096,7 @@
     <comment xml:lang="oc">escript Python</comment>
     <comment xml:lang="pl">Skrypt Python</comment>
     <comment xml:lang="pt">script Python</comment>
-    <comment xml:lang="pt_BR">Script Python</comment>
+    <comment xml:lang="pt-BR">Script Python</comment>
     <comment xml:lang="ro">Script Python</comment>
     <comment xml:lang="ru">Сценарий Python</comment>
     <comment xml:lang="sk">Skript Python</comment>
@@ -35856,43 +37107,56 @@
     <comment xml:lang="tr">Python betiği</comment>
     <comment xml:lang="uk">скрипт мовою Python</comment>
     <comment xml:lang="vi">Văn lệnh Python</comment>
-    <comment xml:lang="zh_CN">Python 脚本</comment>
-    <comment xml:lang="zh_TW">Python 指令稿</comment>
-    <sub-class-of type='application/x-executable'/>
+    <comment xml:lang="zh-CN">Python 脚本</comment>
+    <comment xml:lang="zh-TW">Python 指令稿</comment>
+    <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="#!/bin/python" type="string" offset="0"/>
-      <match value="#! /bin/python" type="string" offset="0"/>
-      <match value='eval \"exec /bin/python' type="string" offset="0"/>
-      <match value="#!/usr/bin/python" type="string" offset="0"/>
-      <match value="#! /usr/bin/python" type="string" offset="0"/>
-      <match value='eval \"exec /usr/bin/python' type="string" offset="0"/>
-      <match value="#!/usr/local/bin/python" type="string" offset="0"/>
-      <match value="#! /usr/local/bin/python" type="string" offset="0"/>
-      <match value='eval \"exec /usr/local/bin/python' type="string" offset="0"/>
-      <match value='/bin/env python' type="string" offset="2:16"/>
-    </magic>
-    <glob weight="60" pattern="*.py"/>
-    <glob weight="60" pattern="*.pyx"/>
-    <glob weight="60" pattern="*.wsgi"/>
+      <match type="string" value="#!/bin/python" offset="0"/>
+      <match type="string" value="#! /bin/python" offset="0"/>
+      <match type="string" value="eval \&quot;exec /bin/python" offset="0"/>
+      <match type="string" value="#!/usr/bin/python" offset="0"/>
+      <match type="string" value="#! /usr/bin/python" offset="0"/>
+      <match type="string" value="eval \&quot;exec /usr/bin/python" offset="0"/>
+      <match type="string" value="#!/usr/local/bin/python" offset="0"/>
+      <match type="string" value="#! /usr/local/bin/python" offset="0"/>
+      <match type="string" value="eval \&quot;exec /usr/local/bin/python" offset="0"/>
+      <match type="string" value="/bin/env python" offset="2:16"/>
+    </magic>
+    <glob pattern="*.py" weight="60"/>
+    <glob pattern="*.pyx" weight="60"/>
+    <glob pattern="*.wsgi" weight="60"/>
+  </mime-type>
+  <mime-type type="text/x-sagemath">
+    <comment>SageMath script</comment>
+    <comment xml:lang="ca">script SageMath</comment>
+    <comment xml:lang="fi">SageMath skripti</comment>
+    <comment xml:lang="it">Script SageMath</comment>
+    <comment xml:lang="pl">Skrypt SageMath</comment>
+    <comment xml:lang="pt-BR">Script SageMath</comment>
+    <comment xml:lang="uk">скрипт SageMath</comment>
+    <sub-class-of type="text/x-python"/>
+    <glob pattern="*.sage" weight="60"/>
   </mime-type>
   <mime-type type="text/x-lua">
     <comment>Lua script</comment>
+    <comment xml:lang="af">Lua-skrip</comment>
     <comment xml:lang="ar">سكربت Lua</comment>
-    <comment xml:lang="be@latin">Skrypt Lua</comment>
+    <comment xml:lang="be-Latn">Skrypt Lua</comment>
     <comment xml:lang="bg">Скрипт на Lua</comment>
     <comment xml:lang="ca">script Lua</comment>
     <comment xml:lang="cs">skript v jazyce Lua</comment>
-    <comment xml:lang="da">Luaprogram</comment>
+    <comment xml:lang="da">Lua-program</comment>
     <comment xml:lang="de">Lua-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών Lua</comment>
-    <comment xml:lang="en_GB">Lua script</comment>
+    <comment xml:lang="en-GB">Lua script</comment>
     <comment xml:lang="eo">Lua-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en Lua</comment>
     <comment xml:lang="eu">Lua script-a</comment>
     <comment xml:lang="fi">Lua-komentotiedosto</comment>
     <comment xml:lang="fo">Lua boðrøð</comment>
     <comment xml:lang="fr">script Lua</comment>
+    <comment xml:lang="fur">script Lua</comment>
     <comment xml:lang="ga">script Lua</comment>
     <comment xml:lang="gl">script de Lua</comment>
     <comment xml:lang="he">תסריט Lua</comment>
@@ -35912,7 +37176,7 @@
     <comment xml:lang="oc">escript Lua</comment>
     <comment xml:lang="pl">Skrypt Lua</comment>
     <comment xml:lang="pt">script Lua</comment>
-    <comment xml:lang="pt_BR">Script Lua</comment>
+    <comment xml:lang="pt-BR">Script Lua</comment>
     <comment xml:lang="ro">Script Lua</comment>
     <comment xml:lang="ru">Сценарий Lua</comment>
     <comment xml:lang="sk">Skript Lua</comment>
@@ -35923,24 +37187,25 @@
     <comment xml:lang="tr">Lua betiği</comment>
     <comment xml:lang="uk">скрипт Lua</comment>
     <comment xml:lang="vi">Văn lệnh Lua</comment>
-    <comment xml:lang="zh_CN">Lua 脚本</comment>
-    <comment xml:lang="zh_TW">Lua 指令稿</comment>
-    <sub-class-of type='application/x-executable'/>
+    <comment xml:lang="zh-CN">Lua 脚本</comment>
+    <comment xml:lang="zh-TW">Lua 指令稿</comment>
+    <sub-class-of type="application/x-executable"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="/bin/lua" type="string" offset="2:16"/>
-      <match value="/bin/luajit" type="string" offset="2:16"/>
-      <match value="/bin/env lua" type="string" offset="2:16"/>
-      <match value="/bin/env luajit" type="string" offset="2:16"/>
+      <match type="string" value="/bin/lua" offset="2:16"/>
+      <match type="string" value="/bin/luajit" offset="2:16"/>
+      <match type="string" value="/bin/env lua" offset="2:16"/>
+      <match type="string" value="/bin/env luajit" offset="2:16"/>
     </magic>
     <glob pattern="*.lua"/>
   </mime-type>
   <mime-type type="text/x-readme">
     <comment>README document</comment>
+    <comment xml:lang="af">README-dokument</comment>
     <comment xml:lang="ar">مستند README</comment>
     <comment xml:lang="ast">Documentu LLEIME</comment>
     <comment xml:lang="az">README sənədi</comment>
-    <comment xml:lang="be@latin">Dakument README</comment>
+    <comment xml:lang="be-Latn">Dakument README</comment>
     <comment xml:lang="bg">Документ — „Да се прочете“</comment>
     <comment xml:lang="ca">document README</comment>
     <comment xml:lang="cs">dokument README</comment>
@@ -35948,13 +37213,14 @@
     <comment xml:lang="da">README-dokument</comment>
     <comment xml:lang="de">README-Dokument</comment>
     <comment xml:lang="el">Έγγραφο README</comment>
-    <comment xml:lang="en_GB">README document</comment>
+    <comment xml:lang="en-GB">README document</comment>
     <comment xml:lang="eo">README-dokumento</comment>
     <comment xml:lang="es">documento README</comment>
     <comment xml:lang="eu">README dokumentua</comment>
     <comment xml:lang="fi">LUEMINUT-asiakirja</comment>
     <comment xml:lang="fo">README skjal</comment>
     <comment xml:lang="fr">document LISEZ-MOI</comment>
+    <comment xml:lang="fur">document README</comment>
     <comment xml:lang="ga">cáipéis README</comment>
     <comment xml:lang="gl">documento README</comment>
     <comment xml:lang="he">מסמך README</comment>
@@ -35975,7 +37241,7 @@
     <comment xml:lang="oc">document LISEZ-MOI</comment>
     <comment xml:lang="pl">Dokument README</comment>
     <comment xml:lang="pt">documento LEIA-ME</comment>
-    <comment xml:lang="pt_BR">Documento README</comment>
+    <comment xml:lang="pt-BR">Documento README</comment>
     <comment xml:lang="ro">Document README</comment>
     <comment xml:lang="ru">Документ README</comment>
     <comment xml:lang="sk">Dokument README</comment>
@@ -35983,32 +37249,34 @@
     <comment xml:lang="sq">Dokument README</comment>
     <comment xml:lang="sr">документ ПРОЧИТАЈМЕ</comment>
     <comment xml:lang="sv">README-dokument</comment>
-    <comment xml:lang="tr">BENİOKU belgesi</comment>
+    <comment xml:lang="tr">README belgesi</comment>
     <comment xml:lang="uk">документ README</comment>
     <comment xml:lang="vi">Tài liệu Đọc Đi (README)</comment>
-    <comment xml:lang="zh_CN">README 文档</comment>
-    <comment xml:lang="zh_TW">README 說明文件</comment>
+    <comment xml:lang="zh-CN">README 文档</comment>
+    <comment xml:lang="zh-TW">README 說明文件</comment>
     <sub-class-of type="text/plain"/>
     <glob weight="10" pattern="README*"/>
   </mime-type>
   <mime-type type="text/x-nfo">
     <comment>NFO document</comment>
+    <comment xml:lang="af">NFO-dokument</comment>
     <comment xml:lang="ar">مستند NFO</comment>
     <comment xml:lang="ast">Documentu NFO</comment>
-    <comment xml:lang="be@latin">Dakument NFO</comment>
+    <comment xml:lang="be-Latn">Dakument NFO</comment>
     <comment xml:lang="bg">Документ — NFO</comment>
     <comment xml:lang="ca">document NFO</comment>
     <comment xml:lang="cs">dokument NFO</comment>
     <comment xml:lang="da">NFO-dokument</comment>
     <comment xml:lang="de">NFO-Dokument</comment>
     <comment xml:lang="el">Έγγραφο NFO</comment>
-    <comment xml:lang="en_GB">NFO document</comment>
+    <comment xml:lang="en-GB">NFO document</comment>
     <comment xml:lang="eo">NFO-dokumento</comment>
     <comment xml:lang="es">documento NFO</comment>
     <comment xml:lang="eu">NFO dokumentua</comment>
     <comment xml:lang="fi">NFO-asiakirja</comment>
     <comment xml:lang="fo">NFO skjal</comment>
     <comment xml:lang="fr">document NFO</comment>
+    <comment xml:lang="fur">document NFO</comment>
     <comment xml:lang="ga">cáipéis NFO</comment>
     <comment xml:lang="gl">documento NFO</comment>
     <comment xml:lang="he">מסמך NFO</comment>
@@ -36028,7 +37296,7 @@
     <comment xml:lang="oc">document NFO</comment>
     <comment xml:lang="pl">Dokument NFO</comment>
     <comment xml:lang="pt">documento NFO</comment>
-    <comment xml:lang="pt_BR">Documento NFO</comment>
+    <comment xml:lang="pt-BR">Documento NFO</comment>
     <comment xml:lang="ro">Document NFO</comment>
     <comment xml:lang="ru">Документ NFO</comment>
     <comment xml:lang="sk">Dokument NFO</comment>
@@ -36039,27 +37307,29 @@
     <comment xml:lang="tr">NFO belgesi</comment>
     <comment xml:lang="uk">документ NFO</comment>
     <comment xml:lang="vi">Tài liệu NFO</comment>
-    <comment xml:lang="zh_CN">NFO 文档</comment>
-    <comment xml:lang="zh_TW">NFO 文件</comment>
+    <comment xml:lang="zh-CN">NFO 文档</comment>
+    <comment xml:lang="zh-TW">NFO 文件</comment>
     <sub-class-of type="text/x-readme"/>
     <glob pattern="*.nfo"/>
   </mime-type>
   <mime-type type="text/x-rpm-spec">
     <comment>RPM spec file</comment>
+    <comment xml:lang="af">RPM-spesifikasielêer</comment>
     <comment xml:lang="ar">ملف مواصفات RPM</comment>
-    <comment xml:lang="be@latin">Specyfikacyjny fajł RPM</comment>
+    <comment xml:lang="be-Latn">Specyfikacyjny fajł RPM</comment>
     <comment xml:lang="bg">Файл — спецификация за RPM</comment>
     <comment xml:lang="ca">fitxer spec RPM</comment>
     <comment xml:lang="cs">soubor specifikace RPM</comment>
     <comment xml:lang="da">RPM spec-fil</comment>
     <comment xml:lang="de">RPM-Spezifikationsdatei</comment>
     <comment xml:lang="el">Αρχείο spec RPM</comment>
-    <comment xml:lang="en_GB">RPM spec file</comment>
+    <comment xml:lang="en-GB">RPM spec file</comment>
     <comment xml:lang="es">archivo de especificaciones RPM</comment>
     <comment xml:lang="eu">RPM espezifikazio fitxategia</comment>
     <comment xml:lang="fi">RPM spec -tiedosto</comment>
     <comment xml:lang="fo">RPM tøknilýsingarfíla</comment>
     <comment xml:lang="fr">fichier de spécification RPM</comment>
+    <comment xml:lang="fur">file di specifiche RPM</comment>
     <comment xml:lang="ga">comhad spec RPM</comment>
     <comment xml:lang="gl">ficheiro de especificacións RPM</comment>
     <comment xml:lang="he">קובץ מפרט RPM</comment>
@@ -36079,7 +37349,7 @@
     <comment xml:lang="oc">fichièr d'especificacion RPM</comment>
     <comment xml:lang="pl">Plik spec RPM</comment>
     <comment xml:lang="pt">ficheiro de especificações RPM</comment>
-    <comment xml:lang="pt_BR">Arquivo de especificação RPM</comment>
+    <comment xml:lang="pt-BR">Arquivo de especificação RPM</comment>
     <comment xml:lang="ro">Fișier RPM spec</comment>
     <comment xml:lang="ru">Файл описания RPM</comment>
     <comment xml:lang="sk">Súbor RPM spec</comment>
@@ -36090,61 +37360,70 @@
     <comment xml:lang="tr">RPM spec dosyası</comment>
     <comment xml:lang="uk">spec-файл RPM</comment>
     <comment xml:lang="vi">Tập tin đặc tả RPM</comment>
-    <comment xml:lang="zh_CN">RPM spec 文件</comment>
-    <comment xml:lang="zh_TW">RPM spec 規格檔</comment>
+    <comment xml:lang="zh-CN">RPM spec 文件</comment>
+    <comment xml:lang="zh-TW">RPM spec 規格檔</comment>
     <acronym>RPM</acronym>
     <expanded-acronym>Red Hat Package Manager</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.spec"/>
     <magic priority="50">
-      <match value="Summary: " type="string" offset="0"/>
-      <match value="%define " type="string" offset="0"/>
+      <match type="string" value="Summary: " offset="0"/>
+      <match type="string" value="%define " offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="text/x-sass">
     <comment>Sass CSS pre-processor file</comment>
+    <comment xml:lang="af">Sass CSS-voorverwerkerlêer</comment>
+    <comment xml:lang="bg">Директиви за препроцесора — Sass CSS</comment>
     <comment xml:lang="ca">fitxer preprocessador CSS Sass</comment>
     <comment xml:lang="cs">soubor preprocesoru Sass CSS</comment>
-    <comment xml:lang="da">Sass CSS-forbrænderfil</comment>
+    <comment xml:lang="da">Sass CSS pre-processor-fil</comment>
     <comment xml:lang="de">Sass-CSS-Präprozessordatei</comment>
-    <comment xml:lang="en_GB">Sass CSS pre-processor file</comment>
+    <comment xml:lang="en-GB">Sass CSS pre-processor file</comment>
     <comment xml:lang="es">archivo de preprocesador de CSS Sass</comment>
+    <comment xml:lang="eu">Sass CSS fitxategi prozesatu gabea</comment>
+    <comment xml:lang="fi">Sass CSS pre-processor -tiedosto</comment>
     <comment xml:lang="fr">fichier de prétraitement CSS Sass</comment>
+    <comment xml:lang="fur">file di pre-elaborazion di CSS Sass</comment>
     <comment xml:lang="ga">comhad réamhphróiseálaí CSS Sass</comment>
     <comment xml:lang="he">קובץ קדם עיבוד Sass CSS</comment>
     <comment xml:lang="hr">Sass CSS datoteka predobrade</comment>
     <comment xml:lang="hu">Sass CSS előfeldolgozó fájl</comment>
-    <comment xml:lang="id">berkas pre-processor Sass CSS</comment>
+    <comment xml:lang="id">Berkas pre-processor Sass CSS</comment>
     <comment xml:lang="it">File CSS Sass</comment>
     <comment xml:lang="kk">Sass CSS препроцессор файлы</comment>
     <comment xml:lang="ko">Sass CSS 전처리기 파일</comment>
     <comment xml:lang="pl">Plik preprocesora CSS Sass</comment>
-    <comment xml:lang="pt_BR">Arquivo de pré-processamento Sass CSS</comment>
+    <comment xml:lang="pt-BR">Arquivo de pré-processamento Sass CSS</comment>
     <comment xml:lang="ru">Файл препроцессора Sass CSS</comment>
     <comment xml:lang="sk">Súbor Sass CSS pre-procesora</comment>
     <comment xml:lang="sr">датотека Сас ЦСС пре-процесора</comment>
     <comment xml:lang="sv">Sass CSS-preprocessorfil</comment>
     <comment xml:lang="tr">Sass CSS önişlemci dosyası</comment>
     <comment xml:lang="uk">файл препроцесора CSS Sass</comment>
-    <comment xml:lang="zh_CN">Sass CSS 预处理器文件</comment>
-    <comment xml:lang="zh_TW">Sass CSS 處理器前檔案</comment>
+    <comment xml:lang="zh-CN">Sass CSS 预处理器文件</comment>
+    <comment xml:lang="zh-TW">Sass CSS 處理器前檔案</comment>
+    <acronym>Sass</acronym>
+    <expanded-acronym>Syntactically Awesome Style Sheets</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.sass"/>
     <generic-icon name="text-x-generic"/>
   </mime-type>
   <mime-type type="text/x-scala">
     <comment>Scala source code</comment>
+    <comment xml:lang="af">Scala-bronkode</comment>
     <comment xml:lang="bg">Изходен код — Scala</comment>
     <comment xml:lang="ca">codi font en Scala</comment>
     <comment xml:lang="cs">zdrojový kód Scala</comment>
     <comment xml:lang="da">Scala-kildekode</comment>
     <comment xml:lang="de">Scala-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Scala</comment>
-    <comment xml:lang="en_GB">Scala source code</comment>
+    <comment xml:lang="en-GB">Scala source code</comment>
     <comment xml:lang="es">código fuente en Scala</comment>
     <comment xml:lang="eu">Scala iturburu-kodea</comment>
     <comment xml:lang="fi">Scala-lähdekoodi</comment>
     <comment xml:lang="fr">code source Scala</comment>
+    <comment xml:lang="fur">codiç sorzint Scala</comment>
     <comment xml:lang="ga">cód foinseach Scala</comment>
     <comment xml:lang="gl">código fnote en Scala</comment>
     <comment xml:lang="he">קוד מקור של Scala</comment>
@@ -36162,7 +37441,7 @@
     <comment xml:lang="oc">còde font Scala</comment>
     <comment xml:lang="pl">Kod źródłowy Scala</comment>
     <comment xml:lang="pt">código origem Scala</comment>
-    <comment xml:lang="pt_BR">Código-fonte Scala</comment>
+    <comment xml:lang="pt-BR">Código-fonte Scala</comment>
     <comment xml:lang="ru">Исходный код Scala</comment>
     <comment xml:lang="sk">Zdrojový kód Scala</comment>
     <comment xml:lang="sl">Izvorna koda Scala</comment>
@@ -36170,30 +37449,32 @@
     <comment xml:lang="sv">Scala-källkod</comment>
     <comment xml:lang="tr">Scala kaynak kodu</comment>
     <comment xml:lang="uk">вихідний код мовою Scala</comment>
-    <comment xml:lang="zh_CN">Scala 源代码</comment>
-    <comment xml:lang="zh_TW">Scala 源碼</comment>
+    <comment xml:lang="zh-CN">Scala 源代码</comment>
+    <comment xml:lang="zh-TW">Scala 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.scala"/>
   </mime-type>
   <mime-type type="text/x-scheme">
     <comment>Scheme source code</comment>
+    <comment xml:lang="af">Scheme-bronkode</comment>
     <comment xml:lang="ar">شفرة مصدر Scheme</comment>
     <comment xml:lang="az">Sxem mənbə kodu</comment>
-    <comment xml:lang="be@latin">Kryničny kod Scheme</comment>
+    <comment xml:lang="be-Latn">Kryničny kod Scheme</comment>
     <comment xml:lang="bg">Изходен код — Scheme</comment>
     <comment xml:lang="ca">codi font en Scheme</comment>
     <comment xml:lang="cs">zdrojový kód Scheme</comment>
     <comment xml:lang="cy">Ffynhonnell Rhaglen Scheme</comment>
-    <comment xml:lang="da">Schemekildekode</comment>
+    <comment xml:lang="da">Scheme-kildekode</comment>
     <comment xml:lang="de">Scheme-Quelltext</comment>
     <comment xml:lang="el">Πηγαίος κώδικας Scheme</comment>
-    <comment xml:lang="en_GB">Scheme source code</comment>
+    <comment xml:lang="en-GB">Scheme source code</comment>
     <comment xml:lang="eo">Scheme-fontkodo</comment>
     <comment xml:lang="es">código fuente en Scheme</comment>
     <comment xml:lang="eu">Scheme iturburu-kodea</comment>
     <comment xml:lang="fi">Scheme-lähdekoodi</comment>
     <comment xml:lang="fo">Scheme keldukota</comment>
     <comment xml:lang="fr">code source Scheme</comment>
+    <comment xml:lang="fur">codiç sorzint Scheme</comment>
     <comment xml:lang="ga">cód foinseach Scheme</comment>
     <comment xml:lang="gl">código fonte en Scheme</comment>
     <comment xml:lang="he">קוד מקור של Scheme</comment>
@@ -36214,7 +37495,7 @@
     <comment xml:lang="oc">còde font Scheme</comment>
     <comment xml:lang="pl">Kod źródłowy Scheme</comment>
     <comment xml:lang="pt">código origem Scheme</comment>
-    <comment xml:lang="pt_BR">Código-fonte Scheme</comment>
+    <comment xml:lang="pt-BR">Código-fonte Scheme</comment>
     <comment xml:lang="ro">Cod sursă Scheme</comment>
     <comment xml:lang="ru">Исходный код Scheme</comment>
     <comment xml:lang="sk">Zdrojový kód Scheme</comment>
@@ -36225,49 +37506,50 @@
     <comment xml:lang="tr">Scheme kaynak kodu</comment>
     <comment xml:lang="uk">вихідний файл мовою Scheme</comment>
     <comment xml:lang="vi">Mã nguồn Scheme</comment>
-    <comment xml:lang="zh_CN">Scheme 源代码</comment>
-    <comment xml:lang="zh_TW">Scheme 源碼</comment>
+    <comment xml:lang="zh-CN">Scheme 源代码</comment>
+    <comment xml:lang="zh-TW">Scheme 源碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.scm"/>
     <glob pattern="*.ss"/>
   </mime-type>
   <mime-type type="text/x-scss">
-    <comment>Sass CSS pre-processor file</comment>
-    <comment xml:lang="ca">fitxer preprocessador CSS Sass</comment>
-    <comment xml:lang="cs">soubor preprocesoru Sass CSS</comment>
-    <comment xml:lang="da">Sass CSS-forbrænderfil</comment>
-    <comment xml:lang="de">Sass-CSS-Präprozessordatei</comment>
-    <comment xml:lang="en_GB">Sass CSS pre-processor file</comment>
-    <comment xml:lang="es">archivo de preprocesador de CSS Sass</comment>
-    <comment xml:lang="fr">fichier de prétraitement CSS Sass</comment>
-    <comment xml:lang="ga">comhad réamhphróiseálaí CSS Sass</comment>
-    <comment xml:lang="he">קובץ קדם עיבוד Sass CSS</comment>
-    <comment xml:lang="hr">Sass CSS datoteka predobrade</comment>
-    <comment xml:lang="hu">Sass CSS előfeldolgozó fájl</comment>
-    <comment xml:lang="id">berkas pre-processor Sass CSS</comment>
-    <comment xml:lang="it">File CSS Sass</comment>
-    <comment xml:lang="kk">Sass CSS препроцессор файлы</comment>
-    <comment xml:lang="ko">Sass CSS 전처리기 파일</comment>
-    <comment xml:lang="pl">Plik preprocesora CSS Sass</comment>
-    <comment xml:lang="pt_BR">Arquivo de pré-processamento Sass CSS</comment>
-    <comment xml:lang="ru">Файл препроцессора Sass CSS</comment>
-    <comment xml:lang="sk">Súbor Sass CSS pre-procesora</comment>
-    <comment xml:lang="sr">датотека Сас ЦСС пре-процесора</comment>
-    <comment xml:lang="sv">Sass CSS-preprocessorfil</comment>
-    <comment xml:lang="tr">Sass CSS önişlemci dosyası</comment>
-    <comment xml:lang="uk">файл препроцесора CSS Sass</comment>
-    <comment xml:lang="zh_CN">Sass CSS 预处理器文件</comment>
-    <comment xml:lang="zh_TW">Sass CSS 處理器前檔案</comment>
+    <comment>SCSS pre-processor file</comment>
+    <comment xml:lang="bg">Директиви за препроцесора — SCSS</comment>
+    <comment xml:lang="ca">fitxer preprocessador SCSS</comment>
+    <comment xml:lang="da">SCSS pre-processor-fil</comment>
+    <comment xml:lang="de">SCSS-Präprozessordatei</comment>
+    <comment xml:lang="en-GB">SCSS pre-processor file</comment>
+    <comment xml:lang="es">archivo de preprocesador SCSS</comment>
+    <comment xml:lang="eu">SCSS fitxategi prozesatu gabea</comment>
+    <comment xml:lang="fi">SCSS pre-processor -tiedosto</comment>
+    <comment xml:lang="fr">fichier de prétraitement SCSS</comment>
+    <comment xml:lang="hr">SCSS datoteka predobrade</comment>
+    <comment xml:lang="hu">SCSS előfeldolgozófájl</comment>
+    <comment xml:lang="id">Berkas preprosesor SCSS</comment>
+    <comment xml:lang="it">File SCSS</comment>
+    <comment xml:lang="kk">SCSS препроцессор файлы</comment>
+    <comment xml:lang="ko">SCSS 전처리 파일</comment>
+    <comment xml:lang="pl">Plik preprocesora SCSS</comment>
+    <comment xml:lang="pt-BR">Arquivo de pré-processamento SCSS</comment>
+    <comment xml:lang="ru">Файл препроцессора SCSS</comment>
+    <comment xml:lang="sv">SCSS förprocessorfil</comment>
+    <comment xml:lang="tr">SCSS ön işleyici dosyası</comment>
+    <comment xml:lang="uk">файл засобу попередньої обробки SCSS</comment>
+    <comment xml:lang="zh-CN">SCSS 预处理文件</comment>
+    <comment xml:lang="zh-TW">SCSS 前處理器檔</comment>
+    <acronym>SCSS</acronym>
+    <expanded-acronym>Sassy CSS</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.scss"/>
     <generic-icon name="text-x-generic"/>
   </mime-type>
   <mime-type type="text/x-setext">
     <comment>Setext document</comment>
+    <comment xml:lang="af">Setext-dokument</comment>
     <comment xml:lang="ar">مستند Setext</comment>
     <comment xml:lang="ast">Documentu Setext</comment>
     <comment xml:lang="az">Setext sənədi</comment>
-    <comment xml:lang="be@latin">Dakument Setext</comment>
+    <comment xml:lang="be-Latn">Dakument Setext</comment>
     <comment xml:lang="bg">Документ — Setext</comment>
     <comment xml:lang="ca">document Setext</comment>
     <comment xml:lang="cs">dokument Setext</comment>
@@ -36275,13 +37557,14 @@
     <comment xml:lang="da">Setextdokument</comment>
     <comment xml:lang="de">Setext-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Setext</comment>
-    <comment xml:lang="en_GB">Setext document</comment>
+    <comment xml:lang="en-GB">Setext document</comment>
     <comment xml:lang="eo">Setext-dokumento</comment>
     <comment xml:lang="es">documento Setext</comment>
     <comment xml:lang="eu">Setext dokumentua</comment>
     <comment xml:lang="fi">Setext-asiakirja</comment>
     <comment xml:lang="fo">Setext skjal</comment>
     <comment xml:lang="fr">document Setext</comment>
+    <comment xml:lang="fur">document Setext</comment>
     <comment xml:lang="ga">cáipéis Setext</comment>
     <comment xml:lang="gl">documento Settext</comment>
     <comment xml:lang="he">מסמך של Setext</comment>
@@ -36302,7 +37585,7 @@
     <comment xml:lang="oc">document Setext</comment>
     <comment xml:lang="pl">Dokument Setext</comment>
     <comment xml:lang="pt">documento Setext</comment>
-    <comment xml:lang="pt_BR">Documento Setext</comment>
+    <comment xml:lang="pt-BR">Documento Setext</comment>
     <comment xml:lang="ro">Document Setext</comment>
     <comment xml:lang="ru">Документ Setext</comment>
     <comment xml:lang="sk">Dokument Setext</comment>
@@ -36313,16 +37596,17 @@
     <comment xml:lang="tr">Setext belgesi</comment>
     <comment xml:lang="uk">документ Setext</comment>
     <comment xml:lang="vi">Tài liệu Setext</comment>
-    <comment xml:lang="zh_CN">Setext 文档</comment>
-    <comment xml:lang="zh_TW">Setext 文件</comment>
+    <comment xml:lang="zh-CN">Setext 文档</comment>
+    <comment xml:lang="zh-TW">Setext 文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.etx"/>
   </mime-type>
   <mime-type type="application/sql">
     <comment>SQL code</comment>
+    <comment xml:lang="af">SQL-kode</comment>
     <comment xml:lang="ar">شفرة SQL</comment>
     <comment xml:lang="az">SQL kodu</comment>
-    <comment xml:lang="be@latin">Kod SQL</comment>
+    <comment xml:lang="be-Latn">Kod SQL</comment>
     <comment xml:lang="bg">Код — SQL</comment>
     <comment xml:lang="ca">codi en SQL</comment>
     <comment xml:lang="cs">kód SQL</comment>
@@ -36330,13 +37614,14 @@
     <comment xml:lang="da">SQL-kode</comment>
     <comment xml:lang="de">SQL-Befehle</comment>
     <comment xml:lang="el">Κώδικας SQL</comment>
-    <comment xml:lang="en_GB">SQL code</comment>
+    <comment xml:lang="en-GB">SQL code</comment>
     <comment xml:lang="eo">SQL-kodo</comment>
     <comment xml:lang="es">código SQL</comment>
     <comment xml:lang="eu">SQL kodea</comment>
     <comment xml:lang="fi">SQL-koodi</comment>
     <comment xml:lang="fo">SQL kota</comment>
     <comment xml:lang="fr">code SQL</comment>
+    <comment xml:lang="fur">codiç SQL</comment>
     <comment xml:lang="ga">cód SQL</comment>
     <comment xml:lang="gl">código SQL</comment>
     <comment xml:lang="he">קוד SQL</comment>
@@ -36357,7 +37642,7 @@
     <comment xml:lang="oc">còde SQL</comment>
     <comment xml:lang="pl">Kod SQL</comment>
     <comment xml:lang="pt">código SQL</comment>
-    <comment xml:lang="pt_BR">Código SQL</comment>
+    <comment xml:lang="pt-BR">Código SQL</comment>
     <comment xml:lang="ro">Cod SQL</comment>
     <comment xml:lang="ru">Код SQL</comment>
     <comment xml:lang="sk">Kód SQL</comment>
@@ -36368,29 +37653,31 @@
     <comment xml:lang="tr">SQL kodu</comment>
     <comment xml:lang="uk">код SQL</comment>
     <comment xml:lang="vi">Mã SQL</comment>
-    <comment xml:lang="zh_CN">SQL 代码</comment>
-    <comment xml:lang="zh_TW">SQL 程式碼</comment>
+    <comment xml:lang="zh-CN">SQL 代码</comment>
+    <comment xml:lang="zh-TW">SQL 程式碼</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.sql"/>
     <alias type="text/x-sql"/>
   </mime-type>
-  <mime-type type="text/x-tcl">
+  <mime-type type="text/tcl">
     <comment>Tcl script</comment>
+    <comment xml:lang="af">Tcl-skrip</comment>
     <comment xml:lang="ar">سكربت Tcl</comment>
-    <comment xml:lang="be@latin">Skrypt Tcl</comment>
+    <comment xml:lang="be-Latn">Skrypt Tcl</comment>
     <comment xml:lang="bg">Скрипт — Tcl</comment>
     <comment xml:lang="ca">script Tcl</comment>
     <comment xml:lang="cs">skript Tcl</comment>
     <comment xml:lang="da">Tcl-program</comment>
     <comment xml:lang="de">Tcl-Skript</comment>
     <comment xml:lang="el">Δέσμη ενεργειών Tcl</comment>
-    <comment xml:lang="en_GB">Tcl script</comment>
+    <comment xml:lang="en-GB">Tcl script</comment>
     <comment xml:lang="eo">Tcl-skripto</comment>
     <comment xml:lang="es">secuencia de órdenes en Tcl</comment>
     <comment xml:lang="eu">Tcl script-a</comment>
     <comment xml:lang="fi">Tcl-komentotiedosto</comment>
     <comment xml:lang="fo">Tcl boðrøð</comment>
     <comment xml:lang="fr">script Tcl</comment>
+    <comment xml:lang="fur">script Tcl</comment>
     <comment xml:lang="ga">script Tcl</comment>
     <comment xml:lang="gl">Script en Tcl</comment>
     <comment xml:lang="he">תסריט Tcl</comment>
@@ -36411,7 +37698,7 @@
     <comment xml:lang="oc">escript Tcl</comment>
     <comment xml:lang="pl">Skrypt Tcl</comment>
     <comment xml:lang="pt">script Tcl</comment>
-    <comment xml:lang="pt_BR">Script Tcl</comment>
+    <comment xml:lang="pt-BR">Script Tcl</comment>
     <comment xml:lang="ro">Script Tcl</comment>
     <comment xml:lang="ru">Сценарий Tcl</comment>
     <comment xml:lang="sk">Skript Tcl</comment>
@@ -36422,17 +37709,19 @@
     <comment xml:lang="tr">Tcl betiği</comment>
     <comment xml:lang="uk">скрипт Tcl</comment>
     <comment xml:lang="vi">Văn lệnh Tcl</comment>
-    <comment xml:lang="zh_CN">Tcl 脚本</comment>
-    <comment xml:lang="zh_TW">Tcl 描述語言檔</comment>
+    <comment xml:lang="zh-CN">Tcl 脚本</comment>
+    <comment xml:lang="zh-TW">Tcl 描述語言檔</comment>
+    <alias type="text/x-tcl"/>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.tcl"/>
     <glob pattern="*.tk"/>
   </mime-type>
   <mime-type type="text/x-tex">
     <comment>TeX document</comment>
+    <comment xml:lang="af">TeX-dokument</comment>
     <comment xml:lang="ar">مستند TeX</comment>
     <comment xml:lang="ast">Documentu TeX</comment>
-    <comment xml:lang="be@latin">Dakument TeX</comment>
+    <comment xml:lang="be-Latn">Dakument TeX</comment>
     <comment xml:lang="bg">Документ — TeX</comment>
     <comment xml:lang="ca">document TeX</comment>
     <comment xml:lang="cs">dokument TeX</comment>
@@ -36440,13 +37729,14 @@
     <comment xml:lang="da">TeX-dokument</comment>
     <comment xml:lang="de">TeX-Dokument</comment>
     <comment xml:lang="el">Έγγραφο TeX</comment>
-    <comment xml:lang="en_GB">TeX document</comment>
+    <comment xml:lang="en-GB">TeX document</comment>
     <comment xml:lang="eo">TeX-dokumento</comment>
     <comment xml:lang="es">documento de TeX</comment>
     <comment xml:lang="eu">TeX dokumentua</comment>
     <comment xml:lang="fi">TeX-asiakirja</comment>
     <comment xml:lang="fo">TeX skjal</comment>
     <comment xml:lang="fr">document TeX</comment>
+    <comment xml:lang="fur">document TeX</comment>
     <comment xml:lang="ga">cáipéis TeX</comment>
     <comment xml:lang="gl">documenton TeX</comment>
     <comment xml:lang="he">מסמך TeX</comment>
@@ -36467,7 +37757,7 @@
     <comment xml:lang="oc">document TeX</comment>
     <comment xml:lang="pl">Dokument TeX</comment>
     <comment xml:lang="pt">documento TeX</comment>
-    <comment xml:lang="pt_BR">Documento TeX</comment>
+    <comment xml:lang="pt-BR">Documento TeX</comment>
     <comment xml:lang="ro">Document TeX</comment>
     <comment xml:lang="ru">Документ TeX</comment>
     <comment xml:lang="sk">Dokument TeX</comment>
@@ -36478,8 +37768,8 @@
     <comment xml:lang="tr">TeX belgesi</comment>
     <comment xml:lang="uk">документ TeX</comment>
     <comment xml:lang="vi">Tài liệu TeX</comment>
-    <comment xml:lang="zh_CN">TeX 文档</comment>
-    <comment xml:lang="zh_TW">TeX 文件</comment>
+    <comment xml:lang="zh-CN">TeX 文档</comment>
+    <comment xml:lang="zh-TW">TeX 文件</comment>
     <sub-class-of type="text/plain"/>
     <alias type="application/x-tex"/>
     <glob pattern="*.tex"/>
@@ -36490,18 +37780,19 @@
     <glob pattern="*.ins"/>
     <glob pattern="*.latex"/>
     <magic priority="10">
-      <match value="%" type="string" offset="0"/>
+      <match type="string" value="%" offset="0"/>
     </magic>
     <magic priority="50">
-      <match value="documentclass" type="string" offset="1"/>
+      <match type="string" value="documentclass" offset="1"/>
     </magic>
   </mime-type>
   <mime-type type="text/x-texinfo">
     <comment>TeXInfo document</comment>
+    <comment xml:lang="af">TeXInfo-dokument</comment>
     <comment xml:lang="ar">مستند TeXInfo</comment>
     <comment xml:lang="ast">Documentu TeXInfo</comment>
     <comment xml:lang="az">TeXInfo sənədi</comment>
-    <comment xml:lang="be@latin">Dakument TeXInfo</comment>
+    <comment xml:lang="be-Latn">Dakument TeXInfo</comment>
     <comment xml:lang="bg">Документ — TeXInfo</comment>
     <comment xml:lang="ca">document TeXInfo</comment>
     <comment xml:lang="cs">dokument TeXInfo</comment>
@@ -36509,13 +37800,14 @@
     <comment xml:lang="da">TeXInfo-dokument</comment>
     <comment xml:lang="de">TeXInfo-Dokument</comment>
     <comment xml:lang="el">Έγγραφο TeXInfo</comment>
-    <comment xml:lang="en_GB">TeXInfo document</comment>
+    <comment xml:lang="en-GB">TeXInfo document</comment>
     <comment xml:lang="eo">TeXInfo-dokumento</comment>
     <comment xml:lang="es">documento de TeXInfo</comment>
     <comment xml:lang="eu">TeXInfo dokumentua</comment>
     <comment xml:lang="fi">TeXInfo-asiakirja</comment>
     <comment xml:lang="fo">TeXInfo skjal</comment>
     <comment xml:lang="fr">document TeXInfo</comment>
+    <comment xml:lang="fur">document TeXInfo</comment>
     <comment xml:lang="ga">cáipéis TeXInfo</comment>
     <comment xml:lang="gl">documento TeXInfo</comment>
     <comment xml:lang="he">מסמך של TeXInfo</comment>
@@ -36536,7 +37828,7 @@
     <comment xml:lang="oc">document TeXInfo</comment>
     <comment xml:lang="pl">Dokument TeXInfo</comment>
     <comment xml:lang="pt">documento TeXInfo</comment>
-    <comment xml:lang="pt_BR">Documento TeXInfo</comment>
+    <comment xml:lang="pt-BR">Documento TeXInfo</comment>
     <comment xml:lang="ro">Document TexInfo</comment>
     <comment xml:lang="ru">Документ TeXInfo</comment>
     <comment xml:lang="sk">Dokument TeXInfo</comment>
@@ -36547,30 +37839,32 @@
     <comment xml:lang="tr">TeXInfo belgesi</comment>
     <comment xml:lang="uk">документ TeXInfo</comment>
     <comment xml:lang="vi">Tài liệu TeXInfo</comment>
-    <comment xml:lang="zh_CN">TeXInfo 文档</comment>
-    <comment xml:lang="zh_TW">TeXInfo 文件</comment>
+    <comment xml:lang="zh-CN">TeXInfo 文档</comment>
+    <comment xml:lang="zh-TW">TeXInfo 文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.texi"/>
     <glob pattern="*.texinfo"/>
   </mime-type>
   <mime-type type="text/x-troff-me">
     <comment>Troff ME input document</comment>
+    <comment xml:lang="af">Troff ME-toevoerdokument</comment>
     <comment xml:lang="ar">مستند Troff ME input</comment>
     <comment xml:lang="ast">Documentu d'entrada de Troff ME</comment>
-    <comment xml:lang="be@latin">Uvodny dakument Troff ME</comment>
+    <comment xml:lang="be-Latn">Uvodny dakument Troff ME</comment>
     <comment xml:lang="bg">Изходен документ — Troff ME</comment>
     <comment xml:lang="ca">document d'entrada Troff ME</comment>
     <comment xml:lang="cs">vstupní dokument Troff ME</comment>
     <comment xml:lang="da">Troff ME inddata-dokument</comment>
     <comment xml:lang="de">Troff-ME-Eingabedokument</comment>
     <comment xml:lang="el">Έγγραφο εντολών troff ME</comment>
-    <comment xml:lang="en_GB">Troff ME input document</comment>
+    <comment xml:lang="en-GB">Troff ME input document</comment>
     <comment xml:lang="eo">eniga dokumento de Troff ME</comment>
     <comment xml:lang="es">documento de entrada Troff ME</comment>
     <comment xml:lang="eu">Troff ME sarrerako dokumentua</comment>
     <comment xml:lang="fi">Troff ME -syöteasiakirja</comment>
     <comment xml:lang="fo">Troff ME inntaksskjal</comment>
     <comment xml:lang="fr">document d'entrée Troff ME</comment>
+    <comment xml:lang="fur">document di jentrade Troff ME</comment>
     <comment xml:lang="ga">cáipéis ionchurtha Troff ME</comment>
     <comment xml:lang="gl">documento de entrada Troff ME</comment>
     <comment xml:lang="he">מסמך קלט של Troff ME</comment>
@@ -36591,7 +37885,7 @@
     <comment xml:lang="oc">document d'entrada Troff ME</comment>
     <comment xml:lang="pl">Dokument wejściowy Troff ME</comment>
     <comment xml:lang="pt">documento origem Troff ME</comment>
-    <comment xml:lang="pt_BR">Documento de entrada Troff ME</comment>
+    <comment xml:lang="pt-BR">Documento de entrada Troff ME</comment>
     <comment xml:lang="ro">Document intrare Troff ME</comment>
     <comment xml:lang="ru">Входной документ Troff ME</comment>
     <comment xml:lang="sk">Vstupný dokument Troff ME</comment>
@@ -36602,29 +37896,31 @@
     <comment xml:lang="tr">Troff ME girdi belgesi</comment>
     <comment xml:lang="uk">вхідний документ Troff ME</comment>
     <comment xml:lang="vi">Tài liệu nhập ME Troff</comment>
-    <comment xml:lang="zh_CN">Troff ME 输入文档</comment>
-    <comment xml:lang="zh_TW">Troff ME 輸入文件</comment>
+    <comment xml:lang="zh-CN">Troff ME 输入文档</comment>
+    <comment xml:lang="zh-TW">Troff ME 輸入文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.me"/>
   </mime-type>
   <mime-type type="text/x-troff-mm">
     <comment>Troff MM input document</comment>
+    <comment xml:lang="af">Troff MM-toevoerdokument</comment>
     <comment xml:lang="ar">مستند Troff MM input</comment>
     <comment xml:lang="ast">Documentu d'entrada de Troff MM</comment>
-    <comment xml:lang="be@latin">Uvodny dakument Troff MM</comment>
+    <comment xml:lang="be-Latn">Uvodny dakument Troff MM</comment>
     <comment xml:lang="bg">Изходен документ — Troff MM</comment>
     <comment xml:lang="ca">document d'entrada Troff MM</comment>
     <comment xml:lang="cs">vstupní dokument Troff MM</comment>
     <comment xml:lang="da">Troff MM inddata-dokument</comment>
     <comment xml:lang="de">Troff-MM-Eingabedokument</comment>
     <comment xml:lang="el">Έγγραφο εντολών troff MM</comment>
-    <comment xml:lang="en_GB">Troff MM input document</comment>
+    <comment xml:lang="en-GB">Troff MM input document</comment>
     <comment xml:lang="eo">eniga dokumento de Troff MM</comment>
     <comment xml:lang="es">documento de entrada Troff MM</comment>
     <comment xml:lang="eu">Troff MM sarrerako dokumentua</comment>
     <comment xml:lang="fi">Troff MM -syöteasiakirja</comment>
     <comment xml:lang="fo">Troff MM inntaksskjal</comment>
     <comment xml:lang="fr">document d'entrée Troff MM</comment>
+    <comment xml:lang="fur">document di jentrade Troff MM</comment>
     <comment xml:lang="ga">cáipéis ionchurtha Troff MM</comment>
     <comment xml:lang="gl">documento de entrada Troff MM</comment>
     <comment xml:lang="he">מסמך קלט של Troff MM</comment>
@@ -36645,7 +37941,7 @@
     <comment xml:lang="oc">document d'entrada Troff MM</comment>
     <comment xml:lang="pl">Dokument wejściowy Troff MM</comment>
     <comment xml:lang="pt">documento origem Troff MM</comment>
-    <comment xml:lang="pt_BR">Documento de entrada Troff MM</comment>
+    <comment xml:lang="pt-BR">Documento de entrada Troff MM</comment>
     <comment xml:lang="ro">Document intrare Troff MM</comment>
     <comment xml:lang="ru">Входной документ Troff MM</comment>
     <comment xml:lang="sk">Vstupný dokument Troff MM</comment>
@@ -36656,29 +37952,31 @@
     <comment xml:lang="tr">Troff MM girdi belgesi</comment>
     <comment xml:lang="uk">вхідний документ Troff MM</comment>
     <comment xml:lang="vi">Tài liệu nhập MM Troff</comment>
-    <comment xml:lang="zh_CN">Troff MM 输入文档</comment>
-    <comment xml:lang="zh_TW">Troff MM 輸入文件</comment>
+    <comment xml:lang="zh-CN">Troff MM 输入文档</comment>
+    <comment xml:lang="zh-TW">Troff MM 輸入文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.mm"/>
   </mime-type>
   <mime-type type="text/x-troff-ms">
     <comment>Troff MS input document</comment>
+    <comment xml:lang="af">Troff MS-toevoerdokument</comment>
     <comment xml:lang="ar">مستند Troff MS input</comment>
     <comment xml:lang="ast">Documentu d'entrada de Troff MS</comment>
-    <comment xml:lang="be@latin">Uvodny dakument Troff MS</comment>
+    <comment xml:lang="be-Latn">Uvodny dakument Troff MS</comment>
     <comment xml:lang="bg">Изходен документ — Troff MS</comment>
     <comment xml:lang="ca">document d'entrada Troff MS</comment>
     <comment xml:lang="cs">vstupní dokument Troff MS</comment>
     <comment xml:lang="da">Troff MS inddata-dokument</comment>
     <comment xml:lang="de">Troff-MS-Eingabedokument</comment>
     <comment xml:lang="el">Έγγραφο εντολών troff MS</comment>
-    <comment xml:lang="en_GB">Troff MS input document</comment>
+    <comment xml:lang="en-GB">Troff MS input document</comment>
     <comment xml:lang="eo">eniga dokumento de Troff MS</comment>
     <comment xml:lang="es">documento de entrada Troff MS</comment>
     <comment xml:lang="eu">Troff MS sarrerako dokumentua</comment>
     <comment xml:lang="fi">Troff MS -syöteasiakirja</comment>
     <comment xml:lang="fo">Troff MS inntaksskjal</comment>
     <comment xml:lang="fr">document d'entrée Troff MS</comment>
+    <comment xml:lang="fur">document di jentrade Troff MS</comment>
     <comment xml:lang="ga">cáipéis ionchurtha Troff MS</comment>
     <comment xml:lang="gl">documento de entrada Troff MS</comment>
     <comment xml:lang="he">מסמך קלט של Troff MS</comment>
@@ -36699,7 +37997,7 @@
     <comment xml:lang="oc">document d'entrada Troff MS</comment>
     <comment xml:lang="pl">Dokument wejściowy Troff MS</comment>
     <comment xml:lang="pt">documento origem Troff MS</comment>
-    <comment xml:lang="pt_BR">Documento de entrada Troff MS</comment>
+    <comment xml:lang="pt-BR">Documento de entrada Troff MS</comment>
     <comment xml:lang="ro">Document intrare Troff MS</comment>
     <comment xml:lang="ru">Входной документ Troff MS</comment>
     <comment xml:lang="sk">Vstupný dokument Troff MS</comment>
@@ -36710,59 +38008,65 @@
     <comment xml:lang="tr">Troff MS girdi belgesi</comment>
     <comment xml:lang="uk">вхідний документ Troff MS</comment>
     <comment xml:lang="vi">Tài liệu nhập MS Troff</comment>
-    <comment xml:lang="zh_CN">Troff MS 输入文档</comment>
-    <comment xml:lang="zh_TW">Troff MS 輸入文件</comment>
+    <comment xml:lang="zh-CN">Troff MS 输入文档</comment>
+    <comment xml:lang="zh-TW">Troff MS 輸入文件</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.ms"/>
   </mime-type>
   <mime-type type="text/x-twig">
     <comment>Twig template</comment>
+    <comment xml:lang="af">Twig-sjabloon</comment>
+    <comment xml:lang="bg">Шаблон — Twig</comment>
     <comment xml:lang="ca">plantilla Twig</comment>
     <comment xml:lang="cs">šablona Twig</comment>
     <comment xml:lang="da">Twig-skabelon</comment>
     <comment xml:lang="de">Twig-Vorlage</comment>
-    <comment xml:lang="en_GB">Twig template</comment>
+    <comment xml:lang="en-GB">Twig template</comment>
     <comment xml:lang="es">plantilla de Twig</comment>
     <comment xml:lang="eu">Twig txantiloia</comment>
+    <comment xml:lang="fi">Twig-malli</comment>
     <comment xml:lang="fr">modèle Twig</comment>
+    <comment xml:lang="fur">model Twig</comment>
     <comment xml:lang="ga">teimpléad Twig</comment>
     <comment xml:lang="he">תבנית Twig</comment>
     <comment xml:lang="hr">Twig predložak</comment>
     <comment xml:lang="hu">Twig-sablon</comment>
-    <comment xml:lang="id">templat Twig</comment>
+    <comment xml:lang="id">Templat Twig</comment>
     <comment xml:lang="it">Modello twig</comment>
     <comment xml:lang="kk">Twig үлгісі</comment>
     <comment xml:lang="ko">Twig 문서 서식</comment>
     <comment xml:lang="pl">Szablon Twig</comment>
-    <comment xml:lang="pt_BR">Modelo Twig</comment>
+    <comment xml:lang="pt-BR">Modelo Twig</comment>
     <comment xml:lang="ru">Шаблон Twig</comment>
     <comment xml:lang="sk">Šablóna Twig</comment>
     <comment xml:lang="sr">Твиг шаблон</comment>
     <comment xml:lang="sv">Twig-mall</comment>
     <comment xml:lang="tr">Twig şablonu</comment>
     <comment xml:lang="uk">шаблон twig</comment>
-    <comment xml:lang="zh_CN">Twig 模板</comment>
-    <comment xml:lang="zh_TW">Twig 範本</comment>
+    <comment xml:lang="zh-CN">Twig 模板</comment>
+    <comment xml:lang="zh-TW">Twig 範本</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.twig"/>
     <generic-icon name="text-x-generic-template"/>
   </mime-type>
   <mime-type type="text/x-uil">
     <comment>X-Motif UIL table</comment>
+    <comment xml:lang="af">X-Motif UIL-tabel</comment>
     <comment xml:lang="ar">جدول X-Motif UIL</comment>
-    <comment xml:lang="be@latin">Tablica X-Motif UIL</comment>
+    <comment xml:lang="be-Latn">Tablica X-Motif UIL</comment>
     <comment xml:lang="bg">Таблица — X-Motif UIL</comment>
     <comment xml:lang="ca">taula UIL de X-Motif</comment>
     <comment xml:lang="cs">tabulka X-Motif UIL</comment>
     <comment xml:lang="da">X-Motif UIL-tabel</comment>
     <comment xml:lang="de">X-Motif-UIL-Tabelle</comment>
     <comment xml:lang="el">Πίνακας X-Motif UIL</comment>
-    <comment xml:lang="en_GB">X-Motif UIL table</comment>
+    <comment xml:lang="en-GB">X-Motif UIL table</comment>
     <comment xml:lang="es">tabla de X-Motif UIL</comment>
     <comment xml:lang="eu">X-Motif UIL taula</comment>
     <comment xml:lang="fi">X-Motif UIL -taulukko</comment>
     <comment xml:lang="fo">X-Motif UIL talva</comment>
     <comment xml:lang="fr">table X-Motif UIL</comment>
+    <comment xml:lang="fur">tabele X-Motif UIL</comment>
     <comment xml:lang="ga">tábla X-Motif UIL</comment>
     <comment xml:lang="gl">Táboa de X-Motif UIL</comment>
     <comment xml:lang="he">טבלה של X-Motif UIL</comment>
@@ -36783,7 +38087,7 @@
     <comment xml:lang="oc">taula X-Motif UIL</comment>
     <comment xml:lang="pl">Tabela UIL X-Motif</comment>
     <comment xml:lang="pt">tabela UIL do X-Motif</comment>
-    <comment xml:lang="pt_BR">Tabela UIL do X-Motif</comment>
+    <comment xml:lang="pt-BR">Tabela UIL do X-Motif</comment>
     <comment xml:lang="ro">Tabel X-Motif UIL</comment>
     <comment xml:lang="ru">Таблица UIL X-Motif</comment>
     <comment xml:lang="sk">Tabuľka X-Motif UIL</comment>
@@ -36794,28 +38098,29 @@
     <comment xml:lang="tr">X-Motif UIL tablosu</comment>
     <comment xml:lang="uk">таблиця X-Motif UIL</comment>
     <comment xml:lang="vi">Bảng UIL X-Motif</comment>
-    <comment xml:lang="zh_CN">X-Motif UIL 表</comment>
-    <comment xml:lang="zh_TW">X-Motif UIL 表格</comment>
+    <comment xml:lang="zh-CN">X-Motif UIL 表</comment>
+    <comment xml:lang="zh-TW">X-Motif UIL 表格</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.uil"/>
   </mime-type>
   <mime-type type="text/x-uri">
     <comment>resource location</comment>
     <comment xml:lang="ar">موقع المورد</comment>
-    <comment xml:lang="be@latin">pałažeńnie resursu</comment>
+    <comment xml:lang="be-Latn">pałažeńnie resursu</comment>
     <comment xml:lang="bg">Местоположение на ресурс</comment>
     <comment xml:lang="ca">localització de recurs</comment>
     <comment xml:lang="cs">umístění prostředku</comment>
     <comment xml:lang="da">resurseplacering</comment>
     <comment xml:lang="de">Ressourcenort</comment>
     <comment xml:lang="el">Τοποθεσία πόρου</comment>
-    <comment xml:lang="en_GB">resource location</comment>
+    <comment xml:lang="en-GB">resource location</comment>
     <comment xml:lang="eo">loko de risurco</comment>
     <comment xml:lang="es">ubicación del recurso</comment>
     <comment xml:lang="eu">baliabidearen kokalekua</comment>
     <comment xml:lang="fi">resurssisijainti</comment>
     <comment xml:lang="fo">tilfeingisstaður</comment>
     <comment xml:lang="fr">localisation de ressource</comment>
+    <comment xml:lang="fur">posizion risorse</comment>
     <comment xml:lang="ga">suíomh acmhainne</comment>
     <comment xml:lang="gl">localización do recurso</comment>
     <comment xml:lang="he">מיקום של משאב</comment>
@@ -36836,7 +38141,7 @@
     <comment xml:lang="oc">localizacion de ressorsa</comment>
     <comment xml:lang="pl">Położenie zasobu</comment>
     <comment xml:lang="pt">localização de recurso</comment>
-    <comment xml:lang="pt_BR">Localização de recurso</comment>
+    <comment xml:lang="pt-BR">Localização de recurso</comment>
     <comment xml:lang="ro">locație de resursă</comment>
     <comment xml:lang="ru">Расположение ресурса</comment>
     <comment xml:lang="sk">Umiestnenie zdroja</comment>
@@ -36847,29 +38152,33 @@
     <comment xml:lang="tr">kaynak ayırma</comment>
     <comment xml:lang="uk">розташування ресурсу</comment>
     <comment xml:lang="vi">địa điểm tài nguyên</comment>
-    <comment xml:lang="zh_CN">资源位置</comment>
-    <comment xml:lang="zh_TW">資源位置</comment>
+    <comment xml:lang="zh-CN">资源位置</comment>
+    <comment xml:lang="zh-TW">資源位置</comment>
     <sub-class-of type="text/plain"/>
-    
+    <!-- Note: text/uri-list is reserved by the XDND protocol! -->
   </mime-type>
   <mime-type type="text/x-uuencode">
     <comment>uuencoded file</comment>
+    <comment xml:lang="af">uu-geënkodeerde lêer</comment>
+    <comment xml:lang="bg">Файл — кодиран с uuencode</comment>
     <comment xml:lang="ca">fitxer uuencoded</comment>
     <comment xml:lang="cs">soubor kódovaný pomocí uuencoding</comment>
     <comment xml:lang="da">uuencodede-fil</comment>
     <comment xml:lang="de">Datei im uuencode-Format</comment>
     <comment xml:lang="el">Αρχείο κωδικοποιημένο unix σε unix (uuencoded)</comment>
-    <comment xml:lang="en_GB">uuencoded file</comment>
+    <comment xml:lang="en-GB">uuencoded file</comment>
     <comment xml:lang="es">archivo codificado con uuencode</comment>
     <comment xml:lang="eu">uuencode-aturiko fitxategia</comment>
+    <comment xml:lang="fi">uuencoded tiedosto</comment>
     <comment xml:lang="fr">fichier uuencodé</comment>
+    <comment xml:lang="fur">file codificât cun uuencode</comment>
     <comment xml:lang="ga">comhad uuencoded</comment>
     <comment xml:lang="gl">Ficheiro uuencoded</comment>
     <comment xml:lang="he">קובץ בקידוד uu</comment>
     <comment xml:lang="hr">uuencoded datoteka</comment>
     <comment xml:lang="hu">uuencode-olt fájl</comment>
     <comment xml:lang="ia">File in uuencode</comment>
-    <comment xml:lang="id">Berkas ter-uuencode</comment>
+    <comment xml:lang="id">berkas ter-uuencode</comment>
     <comment xml:lang="it">File uuencoded</comment>
     <comment xml:lang="ja">未エンコードファイル</comment>
     <comment xml:lang="kk">uuencode кодталған файлы</comment>
@@ -36878,7 +38187,7 @@
     <comment xml:lang="oc">fichièr uuencodat</comment>
     <comment xml:lang="pl">Plik zakodowany za pomocą uuencode</comment>
     <comment xml:lang="pt">ficheiro uuencoded</comment>
-    <comment xml:lang="pt_BR">Arquivo codificado UUE</comment>
+    <comment xml:lang="pt-BR">Arquivo codificado UUE</comment>
     <comment xml:lang="ru">Файл, кодированный uuencode</comment>
     <comment xml:lang="sk">Súbor v kódovaní uuencode</comment>
     <comment xml:lang="sl">Datoteka uuencode</comment>
@@ -36886,32 +38195,56 @@
     <comment xml:lang="sv">uuencode-fil</comment>
     <comment xml:lang="tr">uuencoded dosyası</comment>
     <comment xml:lang="uk">файл даних у форматі UUE</comment>
-    <comment xml:lang="zh_CN">Uuencode 文件</comment>
-    <comment xml:lang="zh_TW">uuencoded 檔</comment>
+    <comment xml:lang="zh-CN">Uuencode 文件</comment>
+    <comment xml:lang="zh-TW">uuencoded 檔</comment>
     <sub-class-of type="text/plain"/>
     <glob pattern="*.uue"/>
     <magic priority="50">
-      <match value="begin " type="string" offset="0"/>
+      <match type="string" value="begin " offset="0"/>
     </magic>
     <alias type="zz-application/zz-winassoc-uu"/>
   </mime-type>
+  <mime-type type="text/vbscript">
+    <comment>VBScript program</comment>
+    <comment xml:lang="ca">programa VBScript</comment>
+    <comment xml:lang="da">VBScript-program</comment>
+    <comment xml:lang="de">VBScript-Programm</comment>
+    <comment xml:lang="en-GB">VBScript program</comment>
+    <comment xml:lang="es">programa en VBScript</comment>
+    <comment xml:lang="fi">VBScript-ohjelma</comment>
+    <comment xml:lang="fr">programme VBScript</comment>
+    <comment xml:lang="hr">VBScript program</comment>
+    <comment xml:lang="it">Programma VBScript</comment>
+    <comment xml:lang="pl">Pogram VBScript</comment>
+    <comment xml:lang="pt-BR">Programa VBScript</comment>
+    <comment xml:lang="sv">VBScript-program</comment>
+    <comment xml:lang="uk">програма мовою VBScript</comment>
+    <comment xml:lang="zh-CN">VBScript 程序</comment>
+    <comment xml:lang="zh-TW">VBScript 程式</comment>
+    <alias type="text/vbs"/>
+    <sub-class-of type="text/plain"/>
+    <generic-icon name="text-x-script"/>
+    <glob pattern="*.vbs"/>
+  </mime-type>
   <mime-type type="text/x-xmi">
     <comment>XMI file</comment>
+    <comment xml:lang="af">XMI-lêer</comment>
     <comment xml:lang="ar">ملف XMI</comment>
-    <comment xml:lang="be@latin">Fajł XMI</comment>
+    <comment xml:lang="be-Latn">Fajł XMI</comment>
     <comment xml:lang="bg">Файл — XMI</comment>
     <comment xml:lang="ca">fitxer XMI</comment>
     <comment xml:lang="cs">soubor XMI</comment>
     <comment xml:lang="da">XMI-fil</comment>
     <comment xml:lang="de">XMI-Datei</comment>
     <comment xml:lang="el">Αρχείο XML</comment>
-    <comment xml:lang="en_GB">XMI file</comment>
+    <comment xml:lang="en-GB">XMI file</comment>
     <comment xml:lang="eo">XMI-dosiero</comment>
     <comment xml:lang="es">archivo XMI</comment>
     <comment xml:lang="eu">XMI fitxategia</comment>
     <comment xml:lang="fi">XMI-tiedosto</comment>
     <comment xml:lang="fo">XMI fíla</comment>
     <comment xml:lang="fr">fichier XMI</comment>
+    <comment xml:lang="fur">file XMI</comment>
     <comment xml:lang="ga">comhad XMI</comment>
     <comment xml:lang="gl">ficheiro XMI</comment>
     <comment xml:lang="he">קובץ XMI</comment>
@@ -36931,7 +38264,7 @@
     <comment xml:lang="oc">fichièr XMI</comment>
     <comment xml:lang="pl">Plik XMI</comment>
     <comment xml:lang="pt">ficheiro XMI</comment>
-    <comment xml:lang="pt_BR">Arquivo XMI</comment>
+    <comment xml:lang="pt-BR">Arquivo XMI</comment>
     <comment xml:lang="ro">Fișier XMI</comment>
     <comment xml:lang="ru">Файл XMI</comment>
     <comment xml:lang="sk">Súbor XMI</comment>
@@ -36942,8 +38275,8 @@
     <comment xml:lang="tr">XMI dosyası</comment>
     <comment xml:lang="uk">файл XMI</comment>
     <comment xml:lang="vi">Tập tin XMI</comment>
-    <comment xml:lang="zh_CN">XMI 文件</comment>
-    <comment xml:lang="zh_TW">XMI 檔</comment>
+    <comment xml:lang="zh-CN">XMI 文件</comment>
+    <comment xml:lang="zh-TW">XMI 檔</comment>
     <acronym>XMI</acronym>
     <expanded-acronym>XML Metadata Interchange</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -36953,21 +38286,23 @@
   </mime-type>
   <mime-type type="text/x-xslfo">
     <comment>XSL FO file</comment>
+    <comment xml:lang="af">XSL FO-lêer</comment>
     <comment xml:lang="ar">ملف XSL FO</comment>
-    <comment xml:lang="be@latin">Fajł XSL FO</comment>
+    <comment xml:lang="be-Latn">Fajł XSL FO</comment>
     <comment xml:lang="bg">Форматиращ файл — XSL FO</comment>
     <comment xml:lang="ca">fitxer FO XSL</comment>
     <comment xml:lang="cs">soubor XSL FO</comment>
     <comment xml:lang="da">XML FO-fil</comment>
     <comment xml:lang="de">XSL-FO-Datei</comment>
     <comment xml:lang="el">Αρχείο XSL FO</comment>
-    <comment xml:lang="en_GB">XSL FO file</comment>
+    <comment xml:lang="en-GB">XSL FO file</comment>
     <comment xml:lang="eo">XSL-FO-dosiero</comment>
     <comment xml:lang="es">archivo XSL FO</comment>
     <comment xml:lang="eu">XSL FO fitxategia</comment>
     <comment xml:lang="fi">XSL FO -tiedosto</comment>
     <comment xml:lang="fo">XSL FO fíla</comment>
     <comment xml:lang="fr">fichier XSL FO</comment>
+    <comment xml:lang="fur">file XSL FO</comment>
     <comment xml:lang="ga">comhad XSL FO</comment>
     <comment xml:lang="gl">ficheiro XSL FO</comment>
     <comment xml:lang="he">קובץ XSL FO</comment>
@@ -36987,7 +38322,7 @@
     <comment xml:lang="oc">fichièr XSL FO</comment>
     <comment xml:lang="pl">Plik XSL FO</comment>
     <comment xml:lang="pt">ficheiro XSL FO</comment>
-    <comment xml:lang="pt_BR">Arquivo XSL FO</comment>
+    <comment xml:lang="pt-BR">Arquivo XSL FO</comment>
     <comment xml:lang="ro">Fișier XSL FO</comment>
     <comment xml:lang="ru">Файл XSL FO</comment>
     <comment xml:lang="sk">Súbor XSL FO</comment>
@@ -36998,8 +38333,8 @@
     <comment xml:lang="tr">XSL FO dosyası</comment>
     <comment xml:lang="uk">файл XSL FO</comment>
     <comment xml:lang="vi">Tập tin FO của XSL (XFO)</comment>
-    <comment xml:lang="zh_CN">XSL 格式化对象文件</comment>
-    <comment xml:lang="zh_TW">XSL FO 檔</comment>
+    <comment xml:lang="zh-CN">XSL 格式化对象文件</comment>
+    <comment xml:lang="zh-TW">XSL FO 檔</comment>
     <acronym>XSL FO</acronym>
     <expanded-acronym>XSL Formatting Objects</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -37009,21 +38344,23 @@
   </mime-type>
   <mime-type type="text/x-iptables">
     <comment>iptables configuration file</comment>
+    <comment xml:lang="af">iptables-opstellingslêer</comment>
     <comment xml:lang="ar">ملف تضبيط iptables</comment>
     <comment xml:lang="ast">ficheru de configuración d'iptables</comment>
-    <comment xml:lang="be@latin">kanfihuracyjny fajł iptables</comment>
+    <comment xml:lang="be-Latn">kanfihuracyjny fajł iptables</comment>
     <comment xml:lang="bg">Настройки за iptables</comment>
     <comment xml:lang="ca">fitxer de configuració d'iptables</comment>
     <comment xml:lang="cs">soubor nastavení iptables</comment>
     <comment xml:lang="da">iptableskonfigurationsfil</comment>
     <comment xml:lang="de">iptables-Konfigurationsdatei</comment>
     <comment xml:lang="el">Αρχείο ρυθμίσεων iptables</comment>
-    <comment xml:lang="en_GB">iptables configuration file</comment>
+    <comment xml:lang="en-GB">iptables configuration file</comment>
     <comment xml:lang="es">archivo de configuración de iptables</comment>
     <comment xml:lang="eu">iptables konfigurazio-fitxategia</comment>
     <comment xml:lang="fi">iptables-asetustiedosto</comment>
     <comment xml:lang="fo">iptables samansetingarfíla</comment>
     <comment xml:lang="fr">fichier de configuration iptables</comment>
+    <comment xml:lang="fur">file di configurazion di iptables</comment>
     <comment xml:lang="ga">comhad cumraíochta iptables</comment>
     <comment xml:lang="gl">ficheiro de configuración de iptables</comment>
     <comment xml:lang="he">קובץ הגדרה של iptables</comment>
@@ -37043,7 +38380,7 @@
     <comment xml:lang="oc">fichièr de configuracion iptables</comment>
     <comment xml:lang="pl">Plik konfiguracji iptables</comment>
     <comment xml:lang="pt">ficheiro de configuração iptables</comment>
-    <comment xml:lang="pt_BR">Arquivo de configuração do iptables</comment>
+    <comment xml:lang="pt-BR">Arquivo de configuração do iptables</comment>
     <comment xml:lang="ro">fișier configurare iptables</comment>
     <comment xml:lang="ru">Файл настроек iptables</comment>
     <comment xml:lang="sk">Súbor nastavení iptables</comment>
@@ -37054,26 +38391,26 @@
     <comment xml:lang="tr">iptables yapılandırma dosyası</comment>
     <comment xml:lang="uk">файл налаштувань iptables</comment>
     <comment xml:lang="vi">tập tin cấu hình iptables</comment>
-    <comment xml:lang="zh_CN">iptables 防火墙配置文件</comment>
-    <comment xml:lang="zh_TW">iptables 組態檔</comment>
+    <comment xml:lang="zh-CN">iptables 防火墙配置文件</comment>
+    <comment xml:lang="zh-TW">iptables 組態檔</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="/etc/sysconfig/iptables" type="string" offset="0:256"/>
-      <match value="*filter" type="string" offset="0:256">
-        <match value=":INPUT" type="string" offset="0:256">
-          <match value=":FORWARD" type="string" offset="0:256">
-            <match value=":OUTPUT" type="string" offset="0:256"/>
+      <match type="string" value="/etc/sysconfig/iptables" offset="0:256"/>
+      <match type="string" value="*filter" offset="0:256">
+        <match type="string" value=":INPUT" offset="0:256">
+          <match type="string" value=":FORWARD" offset="0:256">
+            <match type="string" value=":OUTPUT" offset="0:256"/>
           </match>
         </match>
       </match>
-      <match value="-A INPUT" type="string" offset="0:256">
-        <match value="-A FORWARD" type="string" offset="0:256">
-          <match value="-A OUTPUT" type="string" offset="0:256"/>
+      <match type="string" value="-A INPUT" offset="0:256">
+        <match type="string" value="-A FORWARD" offset="0:256">
+          <match type="string" value="-A OUTPUT" offset="0:256"/>
         </match>
       </match>
-      <match value="-P INPUT" type="string" offset="0:256">
-        <match value="-P FORWARD" type="string" offset="0:256">
-          <match value="-P OUTPUT" type="string" offset="0:256"/>
+      <match type="string" value="-P INPUT" offset="0:256">
+        <match type="string" value="-P FORWARD" offset="0:256">
+          <match type="string" value="-P OUTPUT" offset="0:256"/>
         </match>
       </match>
     </magic>
@@ -37081,49 +38418,57 @@
   </mime-type>
   <mime-type type="text/x-dbus-service">
     <comment>D-Bus service file</comment>
+    <comment xml:lang="af">D-Bus-dienslêer</comment>
+    <comment xml:lang="bg">Услуга — D-Bus</comment>
     <comment xml:lang="ca">fitxer de servei de D-Bus</comment>
     <comment xml:lang="cs">soubor služby D-Bus</comment>
+    <comment xml:lang="da">D-Bus-tjenestefil</comment>
     <comment xml:lang="de">D-Bus-Dienstdatei</comment>
-    <comment xml:lang="en_GB">D-Bus service file</comment>
+    <comment xml:lang="en-GB">D-Bus service file</comment>
     <comment xml:lang="es">archivo de servicio de D-Bus</comment>
     <comment xml:lang="eu">D-Bus zerbitzu fitxategia</comment>
     <comment xml:lang="fi">D-Bus-palvelutiedosto</comment>
     <comment xml:lang="fr">fichier de service D-Bus</comment>
+    <comment xml:lang="fur">file di servizi D-Bus</comment>
     <comment xml:lang="ga">comhad seirbhíse D-Bus</comment>
     <comment xml:lang="hr">Datoteka D-Bus usluge</comment>
     <comment xml:lang="hu">D-Bus szolgáltatás fájl</comment>
-    <comment xml:lang="id">berkas layanan D-Bus</comment>
+    <comment xml:lang="id">Berkas layanan D-Bus</comment>
     <comment xml:lang="it">File servizio D-Bus</comment>
     <comment xml:lang="kk">D-Bus қызметтік файлы</comment>
     <comment xml:lang="ko">D-Bus 서비스 파일</comment>
     <comment xml:lang="pl">Plik usługi D-Bus</comment>
-    <comment xml:lang="pt_BR">Arquivo de serviço do D-Bus</comment>
+    <comment xml:lang="pt-BR">Arquivo de serviço do D-Bus</comment>
     <comment xml:lang="ru">Файл службы D-Bus</comment>
     <comment xml:lang="sk">Súbor služby D-Bus</comment>
     <comment xml:lang="sr">датотека услуге Д-сабирнице</comment>
     <comment xml:lang="sv">D-BUS-tjänstfil</comment>
     <comment xml:lang="tr">D-Bus hizmeti dosyası</comment>
     <comment xml:lang="uk">файл служби D-Bus</comment>
-    <comment xml:lang="zh_CN">D-Bus 服务文件</comment>
-    <comment xml:lang="zh_TW">D-Bus 服務檔</comment>
+    <comment xml:lang="zh-CN">D-Bus 服务文件</comment>
+    <comment xml:lang="zh-TW">D-Bus 服務檔</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="\n[D-BUS Service]\n" type="string" offset="0:256"/>
-      <match value="[D-BUS Service]\n" type="string" offset="0"/>
+      <match type="string" value="\n[D-BUS Service]\n" offset="0:256"/>
+      <match type="string" value="[D-BUS Service]\n" offset="0"/>
     </magic>
     <glob pattern="*.service"/>
   </mime-type>
   <mime-type type="text/x-systemd-unit">
     <comment>systemd unit file</comment>
+    <comment xml:lang="af">systemd-eenheidlêer</comment>
     <comment xml:lang="ast">ficheru d'unidaes de systemd</comment>
+    <comment xml:lang="bg">Елемент — systemd</comment>
     <comment xml:lang="ca">fitxer d'unitat de systemd</comment>
     <comment xml:lang="cs">jednotkový soubor systemd</comment>
+    <comment xml:lang="da">systemd unit-fil</comment>
     <comment xml:lang="de">systemd-Einheitsdatei</comment>
-    <comment xml:lang="en_GB">systemd unit file</comment>
+    <comment xml:lang="en-GB">systemd unit file</comment>
     <comment xml:lang="es">archivo de unidad de systemd</comment>
     <comment xml:lang="eu">systemd unitate fitxategia</comment>
     <comment xml:lang="fi">systemd-yksikkötiedosto</comment>
     <comment xml:lang="fr">fichier d'unité systemd</comment>
+    <comment xml:lang="fur">file unitât di systemd</comment>
     <comment xml:lang="ga">comhad aonaid systemd</comment>
     <comment xml:lang="hr">Datoteka systemd jedinice</comment>
     <comment xml:lang="hu">systemd egység fájl</comment>
@@ -37132,44 +38477,44 @@
     <comment xml:lang="kk">systemd юнит файлы</comment>
     <comment xml:lang="ko">systemd 유닛 파일</comment>
     <comment xml:lang="pl">Plik jednostki systemd</comment>
-    <comment xml:lang="pt_BR">Arquivo de unit do systemd</comment>
+    <comment xml:lang="pt-BR">Arquivo de unit do systemd</comment>
     <comment xml:lang="ru">Модульный файл Systemd</comment>
     <comment xml:lang="sk">Súbor jednotky systemd</comment>
     <comment xml:lang="sr">датотека јединице системд-а</comment>
     <comment xml:lang="sv">systemd-enhetsfil</comment>
     <comment xml:lang="tr">systemd birim dosyası</comment>
     <comment xml:lang="uk">файл модуля systemd</comment>
-    <comment xml:lang="zh_CN">systemd 单元文件</comment>
-    <comment xml:lang="zh_TW">systemd 單位檔</comment>
+    <comment xml:lang="zh-CN">systemd 单元文件</comment>
+    <comment xml:lang="zh-TW">systemd 單位檔</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      
-      <match value="\n[Unit]\n" type="string" offset="0:256"/>
-      <match value="\n[Install]\n" type="string" offset="0:256"/>
-      <match value="\n[Automount]\n" type="string" offset="0:256"/>
-      
-      <match value="\n[Mount]\n" type="string" offset="0:256"/>
-      <match value="\n[Path]\n" type="string" offset="0:256"/>
-      <match value="\n[Scope]\n" type="string" offset="0:256"/>
-      <match value="\n[Service]\n" type="string" offset="0:256"/>
-      <match value="\n[Slice]\n" type="string" offset="0:256"/>
-      <match value="\n[Socket]\n" type="string" offset="0:256"/>
-      <match value="\n[Swap]\n" type="string" offset="0:256"/>
-      
-      <match value="\n[Timer]\n" type="string" offset="0:256"/>
+      <!-- Matches part-way through the file. -->
+      <match type="string" value="\n[Unit]\n" offset="0:256"/>
+      <match type="string" value="\n[Install]\n" offset="0:256"/>
+      <match type="string" value="\n[Automount]\n" offset="0:256"/>
+      <!-- Note no [Device] section exists (https://www.freedesktop.org/software/systemd/man/systemd.device.html) -->
+      <match type="string" value="\n[Mount]\n" offset="0:256"/>
+      <match type="string" value="\n[Path]\n" offset="0:256"/>
+      <match type="string" value="\n[Scope]\n" offset="0:256"/>
+      <match type="string" value="\n[Service]\n" offset="0:256"/>
+      <match type="string" value="\n[Slice]\n" offset="0:256"/>
+      <match type="string" value="\n[Socket]\n" offset="0:256"/>
+      <match type="string" value="\n[Swap]\n" offset="0:256"/>
+      <!-- Note no [Target] section exists (https://www.freedesktop.org/software/systemd/man/systemd.target.html) -->
+      <match type="string" value="\n[Timer]\n" offset="0:256"/>
 
-      
-      <match value="[Unit]\n" type="string" offset="0"/>
-      <match value="[Install]\n" type="string" offset="0"/>
-      <match value="[Automount]\n" type="string" offset="0"/>
-      <match value="[Mount]\n" type="string" offset="0"/>
-      <match value="[Path]\n" type="string" offset="0"/>
-      <match value="[Scope]\n" type="string" offset="0"/>
-      <match value="[Service]\n" type="string" offset="0"/>
-      <match value="[Slice]\n" type="string" offset="0"/>
-      <match value="[Socket]\n" type="string" offset="0"/>
-      <match value="[Swap]\n" type="string" offset="0"/>
-      <match value="[Timer]\n" type="string" offset="0"/>
+      <!-- Matches at the start of the file. -->
+      <match type="string" value="[Unit]\n" offset="0"/>
+      <match type="string" value="[Install]\n" offset="0"/>
+      <match type="string" value="[Automount]\n" offset="0"/>
+      <match type="string" value="[Mount]\n" offset="0"/>
+      <match type="string" value="[Path]\n" offset="0"/>
+      <match type="string" value="[Scope]\n" offset="0"/>
+      <match type="string" value="[Service]\n" offset="0"/>
+      <match type="string" value="[Slice]\n" offset="0"/>
+      <match type="string" value="[Socket]\n" offset="0"/>
+      <match type="string" value="[Swap]\n" offset="0"/>
+      <match type="string" value="[Timer]\n" offset="0"/>
     </magic>
     <glob pattern="*.automount"/>
     <glob pattern="*.device"/>
@@ -37185,21 +38530,23 @@
   </mime-type>
   <mime-type type="application/xslt+xml">
     <comment>XSLT stylesheet</comment>
+    <comment xml:lang="af">XSLT-stylblad</comment>
     <comment xml:lang="ar">نمط XSLT</comment>
-    <comment xml:lang="be@latin">Arkuš stylaŭ XSLT</comment>
+    <comment xml:lang="be-Latn">Arkuš stylaŭ XSLT</comment>
     <comment xml:lang="bg">Стилове — XSLT</comment>
     <comment xml:lang="ca">full d'estil XSLT</comment>
     <comment xml:lang="cs">stylopis XSLT</comment>
     <comment xml:lang="da">XSLT-stilark</comment>
     <comment xml:lang="de">XSLT-Stylesheet</comment>
     <comment xml:lang="el">Φύλλο στυλ XSLT</comment>
-    <comment xml:lang="en_GB">XSLT stylesheet</comment>
+    <comment xml:lang="en-GB">XSLT stylesheet</comment>
     <comment xml:lang="eo">XSLT-stilfolio</comment>
     <comment xml:lang="es">hoja de estilos XSLT</comment>
     <comment xml:lang="eu">XSLT estilo-orria</comment>
     <comment xml:lang="fi">XSLT-tyylitiedosto</comment>
     <comment xml:lang="fo">XSLT sniðark</comment>
     <comment xml:lang="fr">feuille de style XSLT</comment>
+    <comment xml:lang="fur">sfuei di calcul XSLT</comment>
     <comment xml:lang="ga">stílbhileog XSLT</comment>
     <comment xml:lang="gl">folla de estilo XSLT</comment>
     <comment xml:lang="he">גליון סגנון XSLT</comment>
@@ -37220,7 +38567,7 @@
     <comment xml:lang="oc">fuèlh d'estil XSLT</comment>
     <comment xml:lang="pl">Arkusz stylów XSLT</comment>
     <comment xml:lang="pt">folha de estilos XSLT</comment>
-    <comment xml:lang="pt_BR">Folha de estilo XSLT</comment>
+    <comment xml:lang="pt-BR">Folha de estilo XSLT</comment>
     <comment xml:lang="ro">Fișă de stil XSLT</comment>
     <comment xml:lang="ru">Таблица стилей XSLT</comment>
     <comment xml:lang="sk">Štýl XSLT</comment>
@@ -37231,35 +38578,72 @@
     <comment xml:lang="tr">XSLT çalışma sayfası</comment>
     <comment xml:lang="uk">таблиця стилів XSLT</comment>
     <comment xml:lang="vi">Tờ kiểu dáng XSLT</comment>
-    <comment xml:lang="zh_CN">XSLT 样式表</comment>
-    <comment xml:lang="zh_TW">XSLT 樣式表</comment>
+    <comment xml:lang="zh-CN">XSLT 样式表</comment>
+    <comment xml:lang="zh-TW">XSLT 樣式表</comment>
     <acronym>XSLT</acronym>
     <expanded-acronym>eXtensible Stylesheet Language Transformation</expanded-acronym>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="&lt;xsl:stylesheet" type="string" offset="0:256"/>
+      <match type="string" value="&lt;xsl:stylesheet" offset="0:256"/>
     </magic>
     <glob pattern="*.xsl"/>
     <glob pattern="*.xslt"/>
     <root-XML namespaceURI="http://www.w3.org/1999/XSL/Transform" localName="stylesheet"/>
     <sub-class-of type="application/xml"/>
   </mime-type>
+  <mime-type type="text/x-maven+xml">
+    <comment>Maven description file</comment>
+    <comment xml:lang="af">Maven-beskrywingslêer</comment>
+    <comment xml:lang="bg">Модел — Maven</comment>
+    <comment xml:lang="ca">fitxer de descripció Maven</comment>
+    <comment xml:lang="cs">popisný soubor Maven</comment>
+    <comment xml:lang="da">Maven-beskrivelsesfil</comment>
+    <comment xml:lang="de">Maven-Beschreibungsdatei</comment>
+    <comment xml:lang="en-GB">Maven description file</comment>
+    <comment xml:lang="es">archivo de descripción de Maven</comment>
+    <comment xml:lang="eu">Maven azalpen fitxategia</comment>
+    <comment xml:lang="fi">Maven-kuvaustiedosto</comment>
+    <comment xml:lang="fr">fichier de description Maven</comment>
+    <comment xml:lang="fur">file di descrizion Maven</comment>
+    <comment xml:lang="ga">cur síos Maven</comment>
+    <comment xml:lang="hr">Maven datoteka opisa</comment>
+    <comment xml:lang="hu">Maven leírófájl</comment>
+    <comment xml:lang="id">Berkas deskripsi Maven</comment>
+    <comment xml:lang="it">File descrizione Mave</comment>
+    <comment xml:lang="kk">Maven сипаттама файлы</comment>
+    <comment xml:lang="ko">Maven 설명 파일</comment>
+    <comment xml:lang="pl">Plik opisu Maven</comment>
+    <comment xml:lang="pt-BR">Arquivo de descrição Maven</comment>
+    <comment xml:lang="ru">Файл описания Maven</comment>
+    <comment xml:lang="sk">Súbor popisu Maven</comment>
+    <comment xml:lang="sv">Maven-beskrivningsfil</comment>
+    <comment xml:lang="tr">Maven açıklama dosyası</comment>
+    <comment xml:lang="uk">файл опису Maven</comment>
+    <comment xml:lang="zh-CN">Maven 描述文件</comment>
+    <comment xml:lang="zh-TW">Maven 描述檔</comment>
+    <generic-icon name="text-x-generic"/>
+    <glob pattern="pom.xml"/>
+    <glob pattern="settings.xml"/>
+    <sub-class-of type="application/xml"/>
+  </mime-type>
   <mime-type type="text/xmcd">
     <comment>XMCD CD database</comment>
+    <comment xml:lang="af">XMCD CD-databasis</comment>
     <comment xml:lang="ar">قاعدة بيانات XMCD CD</comment>
-    <comment xml:lang="be@latin">Baza źviestak ab dyskach XMCD</comment>
+    <comment xml:lang="be-Latn">Baza źviestak ab dyskach XMCD</comment>
     <comment xml:lang="bg">База от данни за CD-та — XMCD</comment>
     <comment xml:lang="ca">base de dades de CD XMCD</comment>
     <comment xml:lang="cs">databáze XMCD CD</comment>
     <comment xml:lang="da">XMCD-cd-database</comment>
     <comment xml:lang="de">XMCD-CD-Datenbank</comment>
     <comment xml:lang="el">Βάση δεδομένων CD XMCD</comment>
-    <comment xml:lang="en_GB">XMCD CD database</comment>
+    <comment xml:lang="en-GB">XMCD CD database</comment>
     <comment xml:lang="es">base de datos de CD XMCD</comment>
     <comment xml:lang="eu">XMCD CD datu-basea</comment>
     <comment xml:lang="fi">XMCD CD -tietokanta</comment>
     <comment xml:lang="fo">XMCD fløgu dátustovnur</comment>
     <comment xml:lang="fr">base de données de CD XMCD</comment>
+    <comment xml:lang="fur">base di dâts XMCD CD</comment>
     <comment xml:lang="ga">bunachar sonraí XMCD CD</comment>
     <comment xml:lang="gl">base de datos de CD XMCD</comment>
     <comment xml:lang="he">מסד נתונים XMCD CD</comment>
@@ -37279,7 +38663,7 @@
     <comment xml:lang="oc">banca de donadas de CD XMCD</comment>
     <comment xml:lang="pl">Baza danych CD XMCD</comment>
     <comment xml:lang="pt">base de dados XMCD CD</comment>
-    <comment xml:lang="pt_BR">Banco de dados de CD XMCD</comment>
+    <comment xml:lang="pt-BR">Banco de dados de CD XMCD</comment>
     <comment xml:lang="ro">Bază de date XMCD CD</comment>
     <comment xml:lang="ru">База данных компакт-дисков XMCD</comment>
     <comment xml:lang="sk">Databáza XMCD CD</comment>
@@ -37287,34 +38671,36 @@
     <comment xml:lang="sq">Bazë me të dhëna XMCD CD</comment>
     <comment xml:lang="sr">ИксМЦД ЦД база података</comment>
     <comment xml:lang="sv">XMCD cd-databas</comment>
-    <comment xml:lang="tr">XMCD CD veritabanı</comment>
+    <comment xml:lang="tr">XMCD CD veri tabanı</comment>
     <comment xml:lang="uk">база даних XMCD CD</comment>
     <comment xml:lang="vi">Cơ sở dữ liệu CD XMCD</comment>
-    <comment xml:lang="zh_CN">XMCD CD 数据库</comment>
-    <comment xml:lang="zh_TW">XMCD CD 資料庫</comment>
+    <comment xml:lang="zh-CN">XMCD CD 数据库</comment>
+    <comment xml:lang="zh-TW">XMCD CD 資料庫</comment>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="# xmcd" type="string" offset="0"/>
+      <match type="string" value="# xmcd" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/xml">
     <comment>XML document</comment>
+    <comment xml:lang="af">XML-dokument</comment>
     <comment xml:lang="ar">مستند XML</comment>
     <comment xml:lang="ast">Documentu XML</comment>
-    <comment xml:lang="be@latin">Dakument XML</comment>
+    <comment xml:lang="be-Latn">Dakument XML</comment>
     <comment xml:lang="bg">Документ — XML</comment>
     <comment xml:lang="ca">document XML</comment>
     <comment xml:lang="cs">dokument XML</comment>
     <comment xml:lang="da">XML-dokument</comment>
     <comment xml:lang="de">XML-Dokument</comment>
     <comment xml:lang="el">Έγγραφο XML</comment>
-    <comment xml:lang="en_GB">XML document</comment>
+    <comment xml:lang="en-GB">XML document</comment>
     <comment xml:lang="eo">XML-dokumento</comment>
     <comment xml:lang="es">documento XML</comment>
     <comment xml:lang="eu">XML dokumentua</comment>
     <comment xml:lang="fi">XML-asiakirja</comment>
     <comment xml:lang="fo">XML skjal</comment>
     <comment xml:lang="fr">document XML</comment>
+    <comment xml:lang="fur">document XML</comment>
     <comment xml:lang="ga">cáipéis XML</comment>
     <comment xml:lang="gl">documento XML</comment>
     <comment xml:lang="he">מסמך XML</comment>
@@ -37334,7 +38720,7 @@
     <comment xml:lang="oc">document XML</comment>
     <comment xml:lang="pl">Dokument XML</comment>
     <comment xml:lang="pt">documento XML</comment>
-    <comment xml:lang="pt_BR">Documento XML</comment>
+    <comment xml:lang="pt-BR">Documento XML</comment>
     <comment xml:lang="ro">Document XML</comment>
     <comment xml:lang="ru">Документ XML</comment>
     <comment xml:lang="sk">Dokument XML</comment>
@@ -37345,15 +38731,14 @@
     <comment xml:lang="tr">XML belgesi</comment>
     <comment xml:lang="uk">документ XML</comment>
     <comment xml:lang="vi">Tài liệu XML</comment>
-    <comment xml:lang="zh_CN">XML 文档</comment>
-    <comment xml:lang="zh_TW">XML 文件</comment>
+    <comment xml:lang="zh-CN">XML 文档</comment>
+    <comment xml:lang="zh-TW">XML 文件</comment>
     <acronym>XML</acronym>
     <expanded-acronym>eXtensible Markup Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-html"/>
     <magic priority="40">
-      <match value="&lt;?xml" type="string" offset="0"/>
-      <match value="&lt;!--" type="string" offset="0"/>
+      <match type="string" value="&lt;?xml" offset="0"/>
     </magic>
     <glob pattern="*.xml"/>
     <glob pattern="*.xbl"/>
@@ -37363,21 +38748,23 @@
   </mime-type>
   <mime-type type="application/xml-external-parsed-entity">
     <comment>XML entities document</comment>
+    <comment xml:lang="af">XML-entiteitedokument</comment>
     <comment xml:lang="ar">مستند كيانات XML</comment>
     <comment xml:lang="ast">Documentu d'entidaes XML</comment>
-    <comment xml:lang="be@latin">Dakument elementaŭ XML</comment>
+    <comment xml:lang="be-Latn">Dakument elementaŭ XML</comment>
     <comment xml:lang="bg">Документ — заместващи последователности в XML</comment>
     <comment xml:lang="ca">document d'entitats XML</comment>
     <comment xml:lang="cs">dokument entit XML</comment>
     <comment xml:lang="da">XML-enhedsdokument</comment>
     <comment xml:lang="de">XML-Dokument-Entitäten</comment>
     <comment xml:lang="el">Έγγραφο οντοτήτων XML</comment>
-    <comment xml:lang="en_GB">XML entities document</comment>
+    <comment xml:lang="en-GB">XML entities document</comment>
     <comment xml:lang="es">documento de entidades XML</comment>
     <comment xml:lang="eu">XML entitateen dokumentua</comment>
     <comment xml:lang="fi">XML-entiteettiasiakirja</comment>
     <comment xml:lang="fo">XML einindisskjal</comment>
     <comment xml:lang="fr">document d'entités XML</comment>
+    <comment xml:lang="fur">document entitâts XML</comment>
     <comment xml:lang="ga">cáipéis aonán XML</comment>
     <comment xml:lang="gl">documento de entidades XML</comment>
     <comment xml:lang="he">מסמך ישויות XML</comment>
@@ -37397,7 +38784,7 @@
     <comment xml:lang="oc">document d'entitats XML</comment>
     <comment xml:lang="pl">Dokument jednostek XML</comment>
     <comment xml:lang="pt">documento de entidades XML</comment>
-    <comment xml:lang="pt_BR">Documento de entidades XML</comment>
+    <comment xml:lang="pt-BR">Documento de entidades XML</comment>
     <comment xml:lang="ro">Document entități XML</comment>
     <comment xml:lang="ru">Файл сущностей XML</comment>
     <comment xml:lang="sk">Dokument entít XML</comment>
@@ -37408,8 +38795,8 @@
     <comment xml:lang="tr">XML varlıklar belgesi</comment>
     <comment xml:lang="uk">документ об’єктів XML</comment>
     <comment xml:lang="vi">Tài liệu thực thể XML</comment>
-    <comment xml:lang="zh_CN">XML 特征文档</comment>
-    <comment xml:lang="zh_TW">XML 實體文件</comment>
+    <comment xml:lang="zh-CN">XML 特征文档</comment>
+    <comment xml:lang="zh-TW">XML 實體文件</comment>
     <acronym>XML</acronym>
     <expanded-acronym>eXtensible Markup Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -37419,22 +38806,24 @@
   </mime-type>
   <mime-type type="video/dv">
     <comment>DV video</comment>
+    <comment xml:lang="af">DV-video</comment>
     <comment xml:lang="ar">DV مرئي</comment>
     <comment xml:lang="ast">Videu en DV</comment>
-    <comment xml:lang="be@latin">Videa DV</comment>
+    <comment xml:lang="be-Latn">Videa DV</comment>
     <comment xml:lang="bg">Видео — DV</comment>
     <comment xml:lang="ca">vídeo DV</comment>
     <comment xml:lang="cs">video DV</comment>
     <comment xml:lang="da">DV-video</comment>
     <comment xml:lang="de">DV-Video</comment>
     <comment xml:lang="el">Βίντεο DV</comment>
-    <comment xml:lang="en_GB">DV video</comment>
+    <comment xml:lang="en-GB">DV video</comment>
     <comment xml:lang="eo">DV-video</comment>
     <comment xml:lang="es">vídeo DV</comment>
     <comment xml:lang="eu">DV bideoa</comment>
     <comment xml:lang="fi">DV-video</comment>
     <comment xml:lang="fo">DV video</comment>
     <comment xml:lang="fr">vidéo DV</comment>
+    <comment xml:lang="fur">video DV</comment>
     <comment xml:lang="ga">físeán DV</comment>
     <comment xml:lang="gl">vídeo DV</comment>
     <comment xml:lang="he">וידאו DV</comment>
@@ -37455,7 +38844,7 @@
     <comment xml:lang="oc">vidèo DV</comment>
     <comment xml:lang="pl">Plik wideo DV</comment>
     <comment xml:lang="pt">vídeo DV</comment>
-    <comment xml:lang="pt_BR">Vídeo DV</comment>
+    <comment xml:lang="pt-BR">Vídeo DV</comment>
     <comment xml:lang="ro">Video DV</comment>
     <comment xml:lang="ru">Видео DV</comment>
     <comment xml:lang="sk">Video DV</comment>
@@ -37466,21 +38855,22 @@
     <comment xml:lang="tr">DV video</comment>
     <comment xml:lang="uk">відеокліп DV</comment>
     <comment xml:lang="vi">Ảnh động DV</comment>
-    <comment xml:lang="zh_CN">DV 视频</comment>
-    <comment xml:lang="zh_TW">DV 視訊</comment>
+    <comment xml:lang="zh-CN">DV 视频</comment>
+    <comment xml:lang="zh-TW">DV 視訊</comment>
     <acronym>DV</acronym>
     <expanded-acronym>Digital Video</expanded-acronym>
     <magic priority="50">
-      <match value="0x1f070000" type="big32" offset="0" mask="0xffffff00"/>
+      <match type="big32" value="0x1f070000" mask="0xffffff00" offset="0"/>
     </magic>
     <glob pattern="*.dv"/>
   </mime-type>
   <mime-type type="video/isivideo">
     <comment>ISI video</comment>
+    <comment xml:lang="af">ISI-video</comment>
     <comment xml:lang="ar">مرئي ISI</comment>
     <comment xml:lang="ast">Videu n'ISI</comment>
     <comment xml:lang="az">ISI video faylı</comment>
-    <comment xml:lang="be@latin">Videa ISI</comment>
+    <comment xml:lang="be-Latn">Videa ISI</comment>
     <comment xml:lang="bg">Видео — ISI</comment>
     <comment xml:lang="ca">vídeo ISI</comment>
     <comment xml:lang="cs">video ISI</comment>
@@ -37488,13 +38878,14 @@
     <comment xml:lang="da">ISI-video</comment>
     <comment xml:lang="de">ISI-Video</comment>
     <comment xml:lang="el">Βίντεο ISI</comment>
-    <comment xml:lang="en_GB">ISI video</comment>
+    <comment xml:lang="en-GB">ISI video</comment>
     <comment xml:lang="eo">ISI-video</comment>
     <comment xml:lang="es">vídeo ISI</comment>
     <comment xml:lang="eu">ISI bideoa</comment>
     <comment xml:lang="fi">ISI-video</comment>
     <comment xml:lang="fo">ISI video</comment>
     <comment xml:lang="fr">vidéo ISI</comment>
+    <comment xml:lang="fur">video ISI</comment>
     <comment xml:lang="ga">físeán ISI</comment>
     <comment xml:lang="gl">vídeo ISI</comment>
     <comment xml:lang="he">וידאו ISI</comment>
@@ -37515,7 +38906,7 @@
     <comment xml:lang="oc">vidèo ISI</comment>
     <comment xml:lang="pl">Plik wideo ISI</comment>
     <comment xml:lang="pt">vídeo ISI</comment>
-    <comment xml:lang="pt_BR">Vídeo ISI</comment>
+    <comment xml:lang="pt-BR">Vídeo ISI</comment>
     <comment xml:lang="ro">Video ISI</comment>
     <comment xml:lang="ru">Видео ISI</comment>
     <comment xml:lang="sk">Video ISI</comment>
@@ -37526,11 +38917,12 @@
     <comment xml:lang="tr">ISI videosu</comment>
     <comment xml:lang="uk">відеокліп ISI</comment>
     <comment xml:lang="vi">Ảnh động ISI</comment>
-    <comment xml:lang="zh_CN">ISI 视频</comment>
-    <comment xml:lang="zh_TW">ISI 視訊</comment>
+    <comment xml:lang="zh-CN">ISI 视频</comment>
+    <comment xml:lang="zh-TW">ISI 視訊</comment>
   </mime-type>
   <mime-type type="video/mp2t">
     <comment>MPEG-2 transport stream</comment>
+    <comment xml:lang="af">MPEG-2-vervoerstroom</comment>
     <comment xml:lang="ar">بث نقل MPEG-2</comment>
     <comment xml:lang="bg">Поток — транспорт по MPEG-2</comment>
     <comment xml:lang="ca">flux de transport MPEG-2</comment>
@@ -37538,12 +38930,13 @@
     <comment xml:lang="da">MPEG-2-transportstrøm</comment>
     <comment xml:lang="de">MPEG-2-Transportstrom</comment>
     <comment xml:lang="el">Ροή μεταφοράς MPEG-2</comment>
-    <comment xml:lang="en_GB">MPEG-2 transport stream</comment>
+    <comment xml:lang="en-GB">MPEG-2 transport stream</comment>
     <comment xml:lang="es">flujo de transporte MPEG-2</comment>
     <comment xml:lang="eu">MPEG-2 korronte garraioa</comment>
     <comment xml:lang="fi">MPEG-2 -siirtobittivirta</comment>
     <comment xml:lang="fo">MPEG-2 flutningsstreymur</comment>
     <comment xml:lang="fr">flux de transport MPEG-2</comment>
+    <comment xml:lang="fur">flus di traspuart MPEG-2</comment>
     <comment xml:lang="ga">sruth aistrithe MPEG-2</comment>
     <comment xml:lang="gl">fluxo de transporte MPEG-2</comment>
     <comment xml:lang="he">העברת זרימה של MPEG-2</comment>
@@ -37562,7 +38955,7 @@
     <comment xml:lang="oc">flux de transpòrt MPEG-2</comment>
     <comment xml:lang="pl">Strumień przesyłania MPEG-2</comment>
     <comment xml:lang="pt">fluxo de transporte MPEG-2</comment>
-    <comment xml:lang="pt_BR">Fluxo de transporte de MPEG-2</comment>
+    <comment xml:lang="pt-BR">Fluxo de transporte de MPEG-2</comment>
     <comment xml:lang="ro">Flux transport MPEG-2</comment>
     <comment xml:lang="ru">Транспортный поток MPEG-2</comment>
     <comment xml:lang="sk">MPEG-2 Transport Stream</comment>
@@ -37571,25 +38964,25 @@
     <comment xml:lang="sv">MPEG-2 transportström</comment>
     <comment xml:lang="tr">MPEG-2 aktarım akışı</comment>
     <comment xml:lang="uk">потік передавання даних MPEG-2</comment>
-    <comment xml:lang="zh_CN">MPEG-2 传输流</comment>
-    <comment xml:lang="zh_TW">MPEG-2 傳輸串流</comment>
+    <comment xml:lang="zh-CN">MPEG-2 传输流</comment>
+    <comment xml:lang="zh-TW">MPEG-2 傳輸串流</comment>
     <acronym>MPEG-2 TS</acronym>
     <expanded-acronym>Moving Picture Experts Group 2 Transport Stream</expanded-acronym>
     <magic priority="50">
-      <match value="0x47" type="byte" offset="0">
-        <match value="0x47" type="byte" offset="188">
-          <match value="0x47" type="byte" offset="376">
-            <match value="0x47" type="byte" offset="564">
-              <match value="0x47" type="byte" offset="752"/>
+      <match type="byte" value="0x47" offset="0">
+        <match type="byte" value="0x47" offset="188">
+          <match type="byte" value="0x47" offset="376">
+            <match type="byte" value="0x47" offset="564">
+              <match type="byte" value="0x47" offset="752"/>
             </match>
           </match>
         </match>
       </match>
-      <match value="0x47" type="byte" offset="4">
-        <match value="0x47" type="byte" offset="196">
-          <match value="0x47" type="byte" offset="388">
-            <match value="0x47" type="byte" offset="580">
-              <match value="0x47" type="byte" offset="772"/>
+      <match type="byte" value="0x47" offset="4">
+        <match type="byte" value="0x47" offset="196">
+          <match type="byte" value="0x47" offset="388">
+            <match type="byte" value="0x47" offset="580">
+              <match type="byte" value="0x47" offset="772"/>
             </match>
           </match>
         </match>
@@ -37608,22 +39001,24 @@
   </mime-type>
   <mime-type type="video/mpeg">
     <comment>MPEG video</comment>
+    <comment xml:lang="af">MPEG-video</comment>
     <comment xml:lang="ar">MPEG مرئي</comment>
     <comment xml:lang="ast">Videu en MPEG</comment>
-    <comment xml:lang="be@latin">Videa MPEG</comment>
+    <comment xml:lang="be-Latn">Videa MPEG</comment>
     <comment xml:lang="bg">Видео — MPEG</comment>
     <comment xml:lang="ca">vídeo MPEG</comment>
     <comment xml:lang="cs">video MPEG</comment>
     <comment xml:lang="da">MPEG-video</comment>
     <comment xml:lang="de">MPEG-Video</comment>
     <comment xml:lang="el">Βίντεο MPEG</comment>
-    <comment xml:lang="en_GB">MPEG video</comment>
+    <comment xml:lang="en-GB">MPEG video</comment>
     <comment xml:lang="eo">MPEG-video</comment>
     <comment xml:lang="es">vídeo MPEG</comment>
     <comment xml:lang="eu">MPEG bideoa</comment>
     <comment xml:lang="fi">MPEG-video</comment>
     <comment xml:lang="fo">MPEG video</comment>
     <comment xml:lang="fr">vidéo MPEG</comment>
+    <comment xml:lang="fur">video MPEG</comment>
     <comment xml:lang="ga">físeán MPEG</comment>
     <comment xml:lang="gl">vídeo MPEG</comment>
     <comment xml:lang="he">וידאו MPEG</comment>
@@ -37645,7 +39040,7 @@
     <comment xml:lang="oc">vidèo MPEG</comment>
     <comment xml:lang="pl">Plik wideo MPEG</comment>
     <comment xml:lang="pt">vídeo MPEG</comment>
-    <comment xml:lang="pt_BR">Vídeo MPEG</comment>
+    <comment xml:lang="pt-BR">Vídeo MPEG</comment>
     <comment xml:lang="ro">Video MPEG</comment>
     <comment xml:lang="ru">Видео MPEG</comment>
     <comment xml:lang="sk">Video MPEG</comment>
@@ -37656,8 +39051,8 @@
     <comment xml:lang="tr">MPEG videosu</comment>
     <comment xml:lang="uk">відеокліп MPEG</comment>
     <comment xml:lang="vi">Ảnh động MPEG</comment>
-    <comment xml:lang="zh_CN">MPEG 视频</comment>
-    <comment xml:lang="zh_TW">MPEG 視訊</comment>
+    <comment xml:lang="zh-CN">MPEG 视频</comment>
+    <comment xml:lang="zh-TW">MPEG 視訊</comment>
     <acronym>MPEG</acronym>
     <expanded-acronym>Moving Picture Experts Group</expanded-acronym>
     <alias type="video/x-mpeg"/>
@@ -37665,9 +39060,9 @@
     <alias type="video/x-mpeg-system"/>
     <alias type="video/x-mpeg2"/>
     <magic priority="50">
-      <match value="\x47\x3f\xff\x10" type="string" offset="0"/>
-      <match value="0x000001b3" type="big32" offset="0"/>
-      <match value="0x000001ba" type="big32" offset="0"/>
+      <match type="string" value="\x47\x3f\xff\x10" offset="0"/>
+      <match type="big32" value="0x000001b3" offset="0"/>
+      <match type="big32" value="0x000001ba" offset="0"/>
     </magic>
     <glob pattern="*.mpeg"/>
     <glob pattern="*.mpg"/>
@@ -37677,50 +39072,11 @@
     <glob pattern="[0-9][0-9][0-9].vdr"/>
   </mime-type>
   <mime-type type="video/vnd.mpegurl">
-    <comment>MPEG video (streamed)</comment>
-    <comment xml:lang="ast">Videu en MPEG (tresmitíu)</comment>
-    <comment xml:lang="bg">Видео — MPEG, поточно</comment>
-    <comment xml:lang="ca">vídeo MPEG (flux)</comment>
-    <comment xml:lang="cs">video MPEG (proud)</comment>
-    <comment xml:lang="da">MPEG-video (streamet)</comment>
-    <comment xml:lang="de">MPEG-Video (Datenstrom)</comment>
-    <comment xml:lang="el">Βίντεο MPEG (εκπεμπόμενο)</comment>
-    <comment xml:lang="en_GB">MPEG video (streamed)</comment>
-    <comment xml:lang="es">vídeo MPEG (transmisión)</comment>
-    <comment xml:lang="eu">MPEG bideoa (korronte bidez)</comment>
-    <comment xml:lang="fi">MPEG-video (virtaus)</comment>
-    <comment xml:lang="fr">vidéo MPEG (flux)</comment>
-    <comment xml:lang="ga">físeán MPEG (sruthaithe)</comment>
-    <comment xml:lang="gl">vídeo MPEG (en stream)</comment>
-    <comment xml:lang="he">קובץ MPEG (בהזרמה)</comment>
-    <comment xml:lang="hr">MPEG video snimka (strujanje)</comment>
-    <comment xml:lang="hu">MPEG videó (szórt)</comment>
-    <comment xml:lang="ia">Video MPEG (in fluxo)</comment>
-    <comment xml:lang="id">Video MPEG (di-stream-kan)</comment>
-    <comment xml:lang="it">Video MPEG (streamed)</comment>
-    <comment xml:lang="ja">MPEG ビデオ（ストリーム）</comment>
-    <comment xml:lang="ka">MPEG ვიდეო (ნაკადი)</comment>
-    <comment xml:lang="kk">MPEG видео (ағымдық)</comment>
-    <comment xml:lang="ko">MPEG 동영상(스트리밍)</comment>
-    <comment xml:lang="lv">MPEG video (straumēts)</comment>
-    <comment xml:lang="nl">MPEG video (streamed)</comment>
-    <comment xml:lang="oc">vidèo MPEG (flux)</comment>
-    <comment xml:lang="pl">Plik wideo MPEG (strumień)</comment>
-    <comment xml:lang="pt">vídeo MPEG (em fluxo)</comment>
-    <comment xml:lang="pt_BR">Vídeo MPEG (fluxo)</comment>
-    <comment xml:lang="ru">Видео MPEG (потоковое)</comment>
-    <comment xml:lang="sk">MPEG video (streamované)</comment>
-    <comment xml:lang="sl">MPEG-video (pretočni)</comment>
-    <comment xml:lang="sr">МПЕГ видео (проточни)</comment>
-    <comment xml:lang="sv">MPEG-video (strömmad)</comment>
-    <comment xml:lang="tr">MPEG videosu (akış)</comment>
-    <comment xml:lang="uk">відеокліп MPEG (потоковий)</comment>
-    <comment xml:lang="zh_CN">MPEG 视频流媒体</comment>
-    <comment xml:lang="zh_TW">MPEG 視訊 (串流)</comment>
+    <comment>Video playlist</comment>
     <sub-class-of type="text/plain"/>
     <alias type="video/x-mpegurl"/>
     <magic priority="50">
-      <match value="#EXTM4U" type="string" offset="0"/>
+      <match type="string" value="#EXTM4U" offset="0"/>
     </magic>
     <glob pattern="*.m1u"/>
     <glob pattern="*.m4u"/>
@@ -37728,22 +39084,24 @@
   </mime-type>
   <mime-type type="video/quicktime">
     <comment>QuickTime video</comment>
+    <comment xml:lang="af">QuickTime-video</comment>
     <comment xml:lang="ar">QuickTime مرئي</comment>
     <comment xml:lang="ast">Videu en QuickTime</comment>
-    <comment xml:lang="be@latin">Videa QuickTime</comment>
+    <comment xml:lang="be-Latn">Videa QuickTime</comment>
     <comment xml:lang="bg">Видео — QuickTime</comment>
     <comment xml:lang="ca">vídeo QuickTime</comment>
     <comment xml:lang="cs">video QuickTime</comment>
     <comment xml:lang="da">QuickTime-video</comment>
     <comment xml:lang="de">QuickTime-Video</comment>
     <comment xml:lang="el">Βίντεο QuickTime</comment>
-    <comment xml:lang="en_GB">QuickTime video</comment>
+    <comment xml:lang="en-GB">QuickTime video</comment>
     <comment xml:lang="eo">QuickTime-video</comment>
     <comment xml:lang="es">vídeo QuickTime</comment>
     <comment xml:lang="eu">QuickTime bideoa</comment>
     <comment xml:lang="fi">QuickTime-video</comment>
     <comment xml:lang="fo">QuickTime video</comment>
     <comment xml:lang="fr">vidéo QuickTime</comment>
+    <comment xml:lang="fur">video QuickTime</comment>
     <comment xml:lang="ga">físeán QuickTime</comment>
     <comment xml:lang="gl">vídeo QuickTime</comment>
     <comment xml:lang="he">וידאו של QuickTime</comment>
@@ -37764,7 +39122,7 @@
     <comment xml:lang="oc">vidèo QuickTime</comment>
     <comment xml:lang="pl">Plik wideo QuickTime</comment>
     <comment xml:lang="pt">vídeo QuickTime</comment>
-    <comment xml:lang="pt_BR">Vídeo do QuickTime</comment>
+    <comment xml:lang="pt-BR">Vídeo do QuickTime</comment>
     <comment xml:lang="ro">Video QuickTime</comment>
     <comment xml:lang="ru">Видео QuickTime</comment>
     <comment xml:lang="sk">Video QuickTime</comment>
@@ -37775,13 +39133,13 @@
     <comment xml:lang="tr">QuickTime videosu</comment>
     <comment xml:lang="uk">відеокліп QuickTime</comment>
     <comment xml:lang="vi">Ảnh động QuickTime</comment>
-    <comment xml:lang="zh_CN">QuickTime 视频</comment>
-    <comment xml:lang="zh_TW">QuickTime 視訊</comment>
+    <comment xml:lang="zh-CN">QuickTime 视频</comment>
+    <comment xml:lang="zh-TW">QuickTime 視訊</comment>
     <magic priority="50">
-      <match value="mdat" type="string" offset="12"/>
-      <match value="mdat" type="string" offset="4"/>
-      <match value="moov" type="string" offset="4"/>
-      <match value="ftypqt" type="string" offset="4"/>
+      <match type="string" value="mdat" offset="12"/>
+      <match type="string" value="mdat" offset="4"/>
+      <match type="string" value="moov" offset="4"/>
+      <match type="string" value="ftypqt" offset="4"/>
     </magic>
     <glob pattern="*.qt"/>
     <glob pattern="*.mov"/>
@@ -37790,21 +39148,23 @@
   </mime-type>
   <mime-type type="image/x-quicktime">
     <comment>QuickTime image</comment>
+    <comment xml:lang="af">QuickTime-beeld</comment>
     <comment xml:lang="ar">صورة QuickTime</comment>
-    <comment xml:lang="be@latin">Vyjava QuickTime</comment>
+    <comment xml:lang="be-Latn">Vyjava QuickTime</comment>
     <comment xml:lang="bg">Изображение — QuickTime</comment>
     <comment xml:lang="ca">imatge QuickTime</comment>
     <comment xml:lang="cs">obrázek QuickTime</comment>
     <comment xml:lang="da">QuickTime-billede</comment>
     <comment xml:lang="de">QuickTime-Bild</comment>
     <comment xml:lang="el">Εικόνα QuickTime</comment>
-    <comment xml:lang="en_GB">QuickTime image</comment>
+    <comment xml:lang="en-GB">QuickTime image</comment>
     <comment xml:lang="eo">QuickTime-bildo</comment>
     <comment xml:lang="es">imagen de QuickTime</comment>
     <comment xml:lang="eu">QuickTime irudia</comment>
     <comment xml:lang="fi">QuickTime-kuva</comment>
     <comment xml:lang="fo">QuickTime mynd</comment>
     <comment xml:lang="fr">image QuickTime</comment>
+    <comment xml:lang="fur">imagjin QuickTime</comment>
     <comment xml:lang="ga">íomhá QuickTime</comment>
     <comment xml:lang="gl">imaxe QuickTime</comment>
     <comment xml:lang="he">תמונה של QuickTime</comment>
@@ -37824,7 +39184,7 @@
     <comment xml:lang="oc">imatge QuickTime</comment>
     <comment xml:lang="pl">Obraz QuickTime</comment>
     <comment xml:lang="pt">imagem QuickTime</comment>
-    <comment xml:lang="pt_BR">Imagem do QuickTime</comment>
+    <comment xml:lang="pt-BR">Imagem do QuickTime</comment>
     <comment xml:lang="ro">Imagine QuickTime</comment>
     <comment xml:lang="ru">Изображение QuickTime</comment>
     <comment xml:lang="sk">Obrázok QuickTime</comment>
@@ -37835,54 +39195,116 @@
     <comment xml:lang="tr">QuickTime görüntüsü</comment>
     <comment xml:lang="uk">зображення QuickTime</comment>
     <comment xml:lang="vi">Ảnh QuickTime</comment>
-    <comment xml:lang="zh_CN">QuickTime 图像</comment>
-    <comment xml:lang="zh_TW">QuickTime 影像</comment>
+    <comment xml:lang="zh-CN">QuickTime 图像</comment>
+    <comment xml:lang="zh-TW">QuickTime 影像</comment>
     <magic priority="50">
-      <match value="idat" type="string" offset="4"/>
+      <match type="string" value="idat" offset="4"/>
     </magic>
     <glob pattern="*.qtif"/>
     <glob pattern="*.qif"/>
   </mime-type>
   <mime-type type="image/ktx">
     <comment>Khronos texture image</comment>
+    <comment xml:lang="af">Khronos-tekstuurbeeld</comment>
+    <comment xml:lang="bg">Изображение — текстура за Khronos</comment>
     <comment xml:lang="ca">imatge de textura de Khronos</comment>
     <comment xml:lang="cs">obrázek s texturou Khronos</comment>
+    <comment xml:lang="da">Khronos-strukturbillede</comment>
     <comment xml:lang="de">Khronos-Texturbild</comment>
-    <comment xml:lang="en_GB">Khronos texture image</comment>
+    <comment xml:lang="en-GB">Khronos texture image</comment>
     <comment xml:lang="es">imagen de textura de Khronos</comment>
+    <comment xml:lang="eu">Khronos testura irudia</comment>
+    <comment xml:lang="fi">Khronos-tekstuurikuva</comment>
     <comment xml:lang="fr">image de texture Khronos</comment>
+    <comment xml:lang="fur">imagjin di struture/texture Khronos</comment>
     <comment xml:lang="ga">íomhá uigeachta Khronos</comment>
     <comment xml:lang="hr">Khronos tekstura slika</comment>
     <comment xml:lang="hu">Khronos textúra kép</comment>
-    <comment xml:lang="id">citra tekstur Khronos</comment>
+    <comment xml:lang="id">Citra tekstur Khronos</comment>
     <comment xml:lang="it">Immagine texture Khronos</comment>
     <comment xml:lang="kk">Khronos текстура суреті</comment>
     <comment xml:lang="ko">크로노스 텍스처 파일</comment>
     <comment xml:lang="pl">Obraz tekstury Khronos</comment>
-    <comment xml:lang="pt_BR">Imagem de textura do Khronos</comment>
+    <comment xml:lang="pt-BR">Imagem de textura do Khronos</comment>
     <comment xml:lang="ru">Изображение текстуры Khronos</comment>
     <comment xml:lang="sk">Obrázok textúry Khronos</comment>
     <comment xml:lang="sr">слика Кронос текстуре</comment>
     <comment xml:lang="sv">Khronos-texturbild</comment>
     <comment xml:lang="tr">Khronos kaplama görüntüsü</comment>
     <comment xml:lang="uk">зображення текстури Khronos</comment>
-    <comment xml:lang="zh_CN">Khronos 纹理图像</comment>
-    <comment xml:lang="zh_TW">Khronos 紋理影像</comment>
+    <comment xml:lang="zh-CN">Khronos 纹理图像</comment>
+    <comment xml:lang="zh-TW">Khronos 紋理影像</comment>
     <magic priority="80">
-      <match value="0xAB4B5458" type="big32" offset="0">
-        <match value="0x203131BB" type="big32" offset="4">
-          <match value="0x0D0A1A0A" type="big32" offset="8"/>
+      <match type="big32" value="0xAB4B5458" offset="0">
+        <match type="big32" value="0x203131BB" offset="4">
+          <match type="big32" value="0x0D0A1A0A" offset="8"/>
         </match>
       </match>
     </magic>
     <glob pattern="*.ktx"/>
   </mime-type>
+  <mime-type type="image/ktx2">
+    <comment>Khronos texture image</comment>
+    <comment xml:lang="af">Khronos-tekstuurbeeld</comment>
+    <comment xml:lang="bg">Изображение — текстура за Khronos</comment>
+    <comment xml:lang="ca">imatge de textura de Khronos</comment>
+    <comment xml:lang="cs">obrázek s texturou Khronos</comment>
+    <comment xml:lang="da">Khronos-strukturbillede</comment>
+    <comment xml:lang="de">Khronos-Texturbild</comment>
+    <comment xml:lang="en-GB">Khronos texture image</comment>
+    <comment xml:lang="es">imagen de textura de Khronos</comment>
+    <comment xml:lang="eu">Khronos testura irudia</comment>
+    <comment xml:lang="fi">Khronos-tekstuurikuva</comment>
+    <comment xml:lang="fr">image de texture Khronos</comment>
+    <comment xml:lang="fur">imagjin di struture/texture Khronos</comment>
+    <comment xml:lang="ga">íomhá uigeachta Khronos</comment>
+    <comment xml:lang="hr">Khronos tekstura slika</comment>
+    <comment xml:lang="hu">Khronos textúra kép</comment>
+    <comment xml:lang="id">Citra tekstur Khronos</comment>
+    <comment xml:lang="it">Immagine texture Khronos</comment>
+    <comment xml:lang="kk">Khronos текстура суреті</comment>
+    <comment xml:lang="ko">크로노스 텍스처 파일</comment>
+    <comment xml:lang="pl">Obraz tekstury Khronos</comment>
+    <comment xml:lang="pt-BR">Imagem de textura do Khronos</comment>
+    <comment xml:lang="ru">Изображение текстуры Khronos</comment>
+    <comment xml:lang="sk">Obrázok textúry Khronos</comment>
+    <comment xml:lang="sr">слика Кронос текстуре</comment>
+    <comment xml:lang="sv">Khronos-texturbild</comment>
+    <comment xml:lang="tr">Khronos kaplama görüntüsü</comment>
+    <comment xml:lang="uk">зображення текстури Khronos</comment>
+    <comment xml:lang="zh-CN">Khronos 纹理图像</comment>
+    <comment xml:lang="zh-TW">Khronos 紋理影像</comment>
+    <magic priority="80">
+      <match type="big32" value="0xAB4B5458" offset="0">
+        <match type="big32" value="0x203230BB" offset="4">
+          <match type="big32" value="0x0D0A1A0A" offset="8"/>
+        </match>
+      </match>
+    </magic>
+    <glob pattern="*.ktx2"/>
+  </mime-type>
+  <mime-type type="image/astc">
+    <comment>ASTC texture</comment>
+    <comment xml:lang="ca">textura ASTC</comment>
+    <comment xml:lang="fi">ASTC tekstuuri</comment>
+    <comment xml:lang="it">Texture ASTC</comment>
+    <comment xml:lang="pl">Tekstura ASTC</comment>
+    <comment xml:lang="pt-BR">Textura ASTC</comment>
+    <comment xml:lang="uk">текстура ASTC</comment>
+    <acronym>ASTC</acronym>
+    <expanded-acronym>Advanced Scalable Texture Compression</expanded-acronym>
+    <glob pattern="*.astc"/>
+    <magic priority="80">
+      <match type="little32" value="0x5CA1AB13" offset="0"/>
+    </magic>
+  </mime-type>
   <mime-type type="video/vnd.vivo">
     <comment>Vivo video</comment>
+    <comment xml:lang="af">Vivo-video</comment>
     <comment xml:lang="ar">Vivo مرئي</comment>
     <comment xml:lang="ast">Videu en Vivo</comment>
     <comment xml:lang="az">Vivo video faylı</comment>
-    <comment xml:lang="be@latin">Videa Vivo</comment>
+    <comment xml:lang="be-Latn">Videa Vivo</comment>
     <comment xml:lang="bg">Видео — Vivo</comment>
     <comment xml:lang="ca">vídeo Vivo</comment>
     <comment xml:lang="cs">video Vivo</comment>
@@ -37890,13 +39312,14 @@
     <comment xml:lang="da">Vivo-video</comment>
     <comment xml:lang="de">Vivo-Video</comment>
     <comment xml:lang="el">Βίντεο Vivo</comment>
-    <comment xml:lang="en_GB">Vivo video</comment>
+    <comment xml:lang="en-GB">Vivo video</comment>
     <comment xml:lang="eo">Vivo-video</comment>
     <comment xml:lang="es">vídeo Vivo</comment>
     <comment xml:lang="eu">Vivo bideoa</comment>
     <comment xml:lang="fi">Vivo-video</comment>
     <comment xml:lang="fo">Vivo video</comment>
     <comment xml:lang="fr">vidéo Vivo</comment>
+    <comment xml:lang="fur">video Vivo</comment>
     <comment xml:lang="ga">físeán Vivo</comment>
     <comment xml:lang="gl">vídeo Vivo</comment>
     <comment xml:lang="he">וידאו של Vivo</comment>
@@ -37917,7 +39340,7 @@
     <comment xml:lang="oc">vidèo Vivo</comment>
     <comment xml:lang="pl">Plik wideo Vivo</comment>
     <comment xml:lang="pt">vídeo Vivo</comment>
-    <comment xml:lang="pt_BR">Vídeo Vivo</comment>
+    <comment xml:lang="pt-BR">Vídeo Vivo</comment>
     <comment xml:lang="ro">Video Vivo</comment>
     <comment xml:lang="ru">Видео Vivo</comment>
     <comment xml:lang="sk">Video Vivo</comment>
@@ -37928,32 +39351,34 @@
     <comment xml:lang="tr">Vivo videosu</comment>
     <comment xml:lang="uk">відео Vivo</comment>
     <comment xml:lang="vi">Ảnh động Vivo</comment>
-    <comment xml:lang="zh_CN">Vivo 视频</comment>
-    <comment xml:lang="zh_TW">Vivo 視訊</comment>
+    <comment xml:lang="zh-CN">Vivo 视频</comment>
+    <comment xml:lang="zh-TW">Vivo 視訊</comment>
     <alias type="video/vivo"/>
     <glob pattern="*.viv"/>
     <glob pattern="*.vivo"/>
   </mime-type>
   <mime-type type="video/wavelet">
     <comment>Wavelet video</comment>
+    <comment xml:lang="af">Wavelet-video</comment>
     <comment xml:lang="ar">Wavelet مرئي</comment>
     <comment xml:lang="ast">Videu en Wavelet</comment>
     <comment xml:lang="az">Wavelet video faylı</comment>
-    <comment xml:lang="be@latin">Videa Wavelet</comment>
+    <comment xml:lang="be-Latn">Videa Wavelet</comment>
     <comment xml:lang="bg">Видео — Wavelet</comment>
     <comment xml:lang="ca">vídeo Wavelet</comment>
     <comment xml:lang="cs">video Wavelet</comment>
     <comment xml:lang="cy">Fideo Wavelet</comment>
-    <comment xml:lang="da">Waveletvideo</comment>
+    <comment xml:lang="da">Wavelet-video</comment>
     <comment xml:lang="de">Wavelet-Video</comment>
     <comment xml:lang="el">Βίντεο Wavelet</comment>
-    <comment xml:lang="en_GB">Wavelet video</comment>
+    <comment xml:lang="en-GB">Wavelet video</comment>
     <comment xml:lang="eo">Wavelet-video</comment>
     <comment xml:lang="es">vídeo Wavelet</comment>
     <comment xml:lang="eu">Wavelet bideoa</comment>
     <comment xml:lang="fi">Wavelet-video</comment>
     <comment xml:lang="fo">Wavelet video</comment>
     <comment xml:lang="fr">vidéo Wavelet</comment>
+    <comment xml:lang="fur">video Wavelet</comment>
     <comment xml:lang="ga">físeán Wavelet</comment>
     <comment xml:lang="gl">vídeo Wavelet</comment>
     <comment xml:lang="he">וידאו של Wavelet</comment>
@@ -37974,7 +39399,7 @@
     <comment xml:lang="oc">vidèo Wavelet</comment>
     <comment xml:lang="pl">Plik wideo Wavelet</comment>
     <comment xml:lang="pt">vídeo Wavelet</comment>
-    <comment xml:lang="pt_BR">Vídeo Wavelet</comment>
+    <comment xml:lang="pt-BR">Vídeo Wavelet</comment>
     <comment xml:lang="ro">Video Wavelet</comment>
     <comment xml:lang="ru">Видео Wavelet</comment>
     <comment xml:lang="sk">Video Wavelet</comment>
@@ -37985,14 +39410,15 @@
     <comment xml:lang="tr">Wavelet videosu</comment>
     <comment xml:lang="uk">відеокліп Wavelet</comment>
     <comment xml:lang="vi">Ảnh động Wavelet</comment>
-    <comment xml:lang="zh_CN">Wavelet 视频</comment>
-    <comment xml:lang="zh_TW">Wavelet 視訊</comment>
+    <comment xml:lang="zh-CN">Wavelet 视频</comment>
+    <comment xml:lang="zh-TW">Wavelet 視訊</comment>
   </mime-type>
   <mime-type type="video/x-anim">
     <comment>ANIM animation</comment>
+    <comment xml:lang="af">ANIM-animasie</comment>
     <comment xml:lang="ar">تحريكة ANIM</comment>
     <comment xml:lang="az">ANIM animasiyası</comment>
-    <comment xml:lang="be@latin">Animacyja ANIM</comment>
+    <comment xml:lang="be-Latn">Animacyja ANIM</comment>
     <comment xml:lang="bg">Анимация — ANIM</comment>
     <comment xml:lang="ca">animació ANIM</comment>
     <comment xml:lang="cs">animace ANIM</comment>
@@ -38000,13 +39426,14 @@
     <comment xml:lang="da">ANIM-animation</comment>
     <comment xml:lang="de">ANIM-Animation</comment>
     <comment xml:lang="el">Κινούμενο σχέδιο ANIM</comment>
-    <comment xml:lang="en_GB">ANIM animation</comment>
+    <comment xml:lang="en-GB">ANIM animation</comment>
     <comment xml:lang="eo">ANIM-animacio</comment>
     <comment xml:lang="es">animación ANIM</comment>
     <comment xml:lang="eu">ANIM animazioa</comment>
     <comment xml:lang="fi">ANIM-animaatio</comment>
     <comment xml:lang="fo">ANIM teknmyndagerð</comment>
     <comment xml:lang="fr">animation ANIM</comment>
+    <comment xml:lang="fur">animazion ANIM</comment>
     <comment xml:lang="ga">beochan ANIM</comment>
     <comment xml:lang="gl">animación ANIM</comment>
     <comment xml:lang="he">הנפשת ANIM</comment>
@@ -38028,7 +39455,7 @@
     <comment xml:lang="oc">animacion ANIM</comment>
     <comment xml:lang="pl">Plik animacji ANIM</comment>
     <comment xml:lang="pt">animação ANIM</comment>
-    <comment xml:lang="pt_BR">Animação ANIM</comment>
+    <comment xml:lang="pt-BR">Animação ANIM</comment>
     <comment xml:lang="ro">Animație ANIM</comment>
     <comment xml:lang="ru">Анимация ANIM</comment>
     <comment xml:lang="sk">Animácia ANIM</comment>
@@ -38039,26 +39466,28 @@
     <comment xml:lang="tr">ANIM canlandırması</comment>
     <comment xml:lang="uk">анімація ANIM</comment>
     <comment xml:lang="vi">Hoạt ảnh ANIM</comment>
-    <comment xml:lang="zh_CN">ANIM 动画</comment>
-    <comment xml:lang="zh_TW">ANIM 動畫</comment>
+    <comment xml:lang="zh-CN">ANIM 动画</comment>
+    <comment xml:lang="zh-TW">ANIM 動畫</comment>
     <glob pattern="*.anim[1-9j]"/>
   </mime-type>
   <mime-type type="video/x-flic">
     <comment>FLIC animation</comment>
+    <comment xml:lang="af">FLIC-animasie</comment>
     <comment xml:lang="ar">تحريكة FLIC</comment>
-    <comment xml:lang="be@latin">Animacyja FLIC</comment>
+    <comment xml:lang="be-Latn">Animacyja FLIC</comment>
     <comment xml:lang="bg">Анимация — FLIC</comment>
     <comment xml:lang="ca">animació FLIC</comment>
     <comment xml:lang="cs">animace FLIC</comment>
     <comment xml:lang="da">FLIC-animation</comment>
     <comment xml:lang="de">FLIC-Animation</comment>
     <comment xml:lang="el">Κινούμενο σχέδιο FLIC</comment>
-    <comment xml:lang="en_GB">FLIC animation</comment>
+    <comment xml:lang="en-GB">FLIC animation</comment>
     <comment xml:lang="es">animación FLIC</comment>
     <comment xml:lang="eu">FLIC animazioa</comment>
     <comment xml:lang="fi">FLIC-animaatio</comment>
     <comment xml:lang="fo">FLIC teknimyndagerð</comment>
     <comment xml:lang="fr">animation FLIC</comment>
+    <comment xml:lang="fur">animazion FLIC</comment>
     <comment xml:lang="ga">beochan FLIC</comment>
     <comment xml:lang="gl">animación FLIC</comment>
     <comment xml:lang="he">הנפשת FLIC</comment>
@@ -38079,7 +39508,7 @@
     <comment xml:lang="oc">animacion FLIC</comment>
     <comment xml:lang="pl">Plik animacji FLIC</comment>
     <comment xml:lang="pt">animação FLIC</comment>
-    <comment xml:lang="pt_BR">Animação FLIC</comment>
+    <comment xml:lang="pt-BR">Animação FLIC</comment>
     <comment xml:lang="ro">Animație FLIC</comment>
     <comment xml:lang="ru">Анимация FLIC</comment>
     <comment xml:lang="sk">Animácia FLIC</comment>
@@ -38090,34 +39519,36 @@
     <comment xml:lang="tr">FLIC animasyonu</comment>
     <comment xml:lang="uk">анімація FLIC</comment>
     <comment xml:lang="vi">Hoạt ảnh FLIC</comment>
-    <comment xml:lang="zh_CN">FLIC 动画</comment>
-    <comment xml:lang="zh_TW">FLIC 動畫</comment>
+    <comment xml:lang="zh-CN">FLIC 动画</comment>
+    <comment xml:lang="zh-TW">FLIC 動畫</comment>
     <alias type="video/fli"/>
     <alias type="video/x-fli"/>
     <magic priority="50">
-      <match value="0xAF11" type="little16" offset="0"/>
-      <match value="0xAF12" type="little16" offset="0"/>
+      <match type="little16" value="0xAF11" offset="0"/>
+      <match type="little16" value="0xAF12" offset="0"/>
     </magic>
     <glob pattern="*.fli"/>
     <glob pattern="*.flc"/>
   </mime-type>
   <mime-type type="application/x-hwp">
     <comment>Haansoft Hangul document</comment>
+    <comment xml:lang="af">Haansoft Hangul-dokument</comment>
     <comment xml:lang="ar">مستند Haansoft Hangul</comment>
     <comment xml:lang="ast">Documentu de Haansoft Hangul</comment>
-    <comment xml:lang="be@latin">Dakument Haansoft Hangul</comment>
+    <comment xml:lang="be-Latn">Dakument Haansoft Hangul</comment>
     <comment xml:lang="bg">Документ — Haansoft Hangul</comment>
     <comment xml:lang="ca">document d'Haansoft Hangul</comment>
     <comment xml:lang="cs">dokument Haansoft Hangul</comment>
     <comment xml:lang="da">Haansoft Hangul-dokument</comment>
     <comment xml:lang="de">Haansoft-Hangul-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Haansoft Hangul</comment>
-    <comment xml:lang="en_GB">Haansoft Hangul document</comment>
+    <comment xml:lang="en-GB">Haansoft Hangul document</comment>
     <comment xml:lang="es">documento de Haansoft Hangul</comment>
     <comment xml:lang="eu">Haansoft Hangul dokumentua</comment>
     <comment xml:lang="fi">Haansoft Hangul -asiakirja</comment>
     <comment xml:lang="fo">Haansoft Hangul skjal</comment>
     <comment xml:lang="fr">document Haansoft Hangul</comment>
+    <comment xml:lang="fur">document Haansoft Hangul</comment>
     <comment xml:lang="ga">cáipéis Haansoft Hangul</comment>
     <comment xml:lang="gl">documento de Haansoft Hangul</comment>
     <comment xml:lang="he">מסמך Haansoft Hangul</comment>
@@ -38137,7 +39568,7 @@
     <comment xml:lang="oc">document Haansoft Hangul</comment>
     <comment xml:lang="pl">Dokument Haansoft Hangul</comment>
     <comment xml:lang="pt">documento Haansoft Hangul</comment>
-    <comment xml:lang="pt_BR">Documento do Haansoft Hangul</comment>
+    <comment xml:lang="pt-BR">Documento do Haansoft Hangul</comment>
     <comment xml:lang="ro">Document Haansoft Hangul</comment>
     <comment xml:lang="ru">Документ Haansoft Hangul</comment>
     <comment xml:lang="sk">Dokument Haansoft Hangul</comment>
@@ -38148,32 +39579,34 @@
     <comment xml:lang="tr">Haansoft Hangul belgesi</comment>
     <comment xml:lang="uk">документ Haansoft Hangul</comment>
     <comment xml:lang="vi">Tài liệu Hangul Haansoft</comment>
-    <comment xml:lang="zh_CN">Haansoft Hangul 文档</comment>
-    <comment xml:lang="zh_TW">Haansoft 韓文文件</comment>
+    <comment xml:lang="zh-CN">Haansoft Hangul 文档</comment>
+    <comment xml:lang="zh-TW">Haansoft 韓文文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="HWP Document File" type="string" offset="0"/>
+      <match type="string" value="HWP Document File" offset="0"/>
     </magic>
     <glob pattern="*.hwp"/>
     <alias type="application/vnd.haansoft-hwp"/>
   </mime-type>
   <mime-type type="application/x-hwt">
     <comment>Haansoft Hangul document template</comment>
+    <comment xml:lang="af">Haansoft Hangul-dokumentsjabloon</comment>
     <comment xml:lang="ar">قالب مستند Haansoft Hangul</comment>
     <comment xml:lang="ast">Plantía de documentu de Haansoft Hangul</comment>
-    <comment xml:lang="be@latin">Šablon dakumentu Haansoft Hangul</comment>
+    <comment xml:lang="be-Latn">Šablon dakumentu Haansoft Hangul</comment>
     <comment xml:lang="bg">Шаблон за документи — Haansoft Hangul</comment>
     <comment xml:lang="ca">plantilla de document d'Haansoft Hangul</comment>
     <comment xml:lang="cs">šablona dokumentu Haansoft Hangul</comment>
     <comment xml:lang="da">Haansoft Hangul-dokumentskabelon</comment>
     <comment xml:lang="de">Haansoft-Hangul-Dokumentvorlage</comment>
     <comment xml:lang="el">Πρότυπο εγγράφου Haansoft Hangul</comment>
-    <comment xml:lang="en_GB">Haansoft Hangul document template</comment>
+    <comment xml:lang="en-GB">Haansoft Hangul document template</comment>
     <comment xml:lang="es">plantilla de documento de Haansoft Hangul</comment>
     <comment xml:lang="eu">Haansoft Hangul dokumentuaren txantiloia</comment>
     <comment xml:lang="fi">Haansoft Hangul -asiakirjamalli</comment>
     <comment xml:lang="fo">Haansoft Hangul skjalaformur</comment>
     <comment xml:lang="fr">modèle de document Haansoft Hangul</comment>
+    <comment xml:lang="fur">model document Haansoft Hangul</comment>
     <comment xml:lang="ga">teimpléad cháipéis Haansoft Hangul</comment>
     <comment xml:lang="gl">modelo de documento de Haansoft Hangul</comment>
     <comment xml:lang="he">תבנית מסמך של Haansoft Hangul</comment>
@@ -38193,7 +39626,7 @@
     <comment xml:lang="oc">modèl de document Haansoft Hangul</comment>
     <comment xml:lang="pl">Szablon dokumentu Haansoft Hangul</comment>
     <comment xml:lang="pt">modelo de documento Haansoft Hangul</comment>
-    <comment xml:lang="pt_BR">Modelo de documento do Haansoft Hangul</comment>
+    <comment xml:lang="pt-BR">Modelo de documento do Haansoft Hangul</comment>
     <comment xml:lang="ro">Document șablon Haansoft Hangul</comment>
     <comment xml:lang="ru">Шаблон документа Haansoft Hangul</comment>
     <comment xml:lang="sk">Šablóna dokumentu Haansoft Hangul</comment>
@@ -38204,29 +39637,31 @@
     <comment xml:lang="tr">Haansoft Hangul belge şablonu</comment>
     <comment xml:lang="uk">шаблон документа Haansoft Hangul</comment>
     <comment xml:lang="vi">Mẫu tài liệu Hangul Haansoft</comment>
-    <comment xml:lang="zh_CN">Haansoft Hangul 文档模板</comment>
-    <comment xml:lang="zh_TW">Haansoft 韓文文件範本</comment>
+    <comment xml:lang="zh-CN">Haansoft Hangul 文档模板</comment>
+    <comment xml:lang="zh-TW">Haansoft 韓文文件範本</comment>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.hwt"/>
     <alias type="application/vnd.haansoft-hwt"/>
   </mime-type>
   <mime-type type="video/x-mng">
     <comment>MNG animation</comment>
+    <comment xml:lang="af">MNG-animasie</comment>
     <comment xml:lang="ar">تحريكة MNG</comment>
-    <comment xml:lang="be@latin">Animacyja MNG</comment>
+    <comment xml:lang="be-Latn">Animacyja MNG</comment>
     <comment xml:lang="bg">Анимация — MNG</comment>
     <comment xml:lang="ca">animació MNG</comment>
     <comment xml:lang="cs">animace MNG</comment>
     <comment xml:lang="da">MNG-animation</comment>
     <comment xml:lang="de">MNG-Animation</comment>
     <comment xml:lang="el">Κινούμενο σχέδιο MNG</comment>
-    <comment xml:lang="en_GB">MNG animation</comment>
+    <comment xml:lang="en-GB">MNG animation</comment>
     <comment xml:lang="eo">MNG-animacio</comment>
     <comment xml:lang="es">animación MNG</comment>
     <comment xml:lang="eu">MNG animazioa</comment>
     <comment xml:lang="fi">MNG-animaatio</comment>
     <comment xml:lang="fo">MNG teknimyndagerð</comment>
     <comment xml:lang="fr">animation MNG</comment>
+    <comment xml:lang="fur">animazion MNG</comment>
     <comment xml:lang="ga">beochan MNG</comment>
     <comment xml:lang="gl">animación MNG</comment>
     <comment xml:lang="he">הנפשת MNG</comment>
@@ -38247,7 +39682,7 @@
     <comment xml:lang="oc">animacion MNG</comment>
     <comment xml:lang="pl">Animacja MNG</comment>
     <comment xml:lang="pt">animação MNG</comment>
-    <comment xml:lang="pt_BR">Animação MNG</comment>
+    <comment xml:lang="pt-BR">Animação MNG</comment>
     <comment xml:lang="ro">Animație MNG</comment>
     <comment xml:lang="ru">Анимация MNG</comment>
     <comment xml:lang="sk">Animácia MNG</comment>
@@ -38258,33 +39693,35 @@
     <comment xml:lang="tr">MNG canlandırması</comment>
     <comment xml:lang="uk">анімація MNG</comment>
     <comment xml:lang="vi">Hoạt ảnh MNG</comment>
-    <comment xml:lang="zh_CN">MNG 动画</comment>
-    <comment xml:lang="zh_TW">MNG 動畫</comment>
+    <comment xml:lang="zh-CN">MNG 动画</comment>
+    <comment xml:lang="zh-TW">MNG 動畫</comment>
     <acronym>MNG</acronym>
     <expanded-acronym>Multiple-Image Network Graphics</expanded-acronym>
     <magic priority="50">
-      <match value="\x8AMNG\x0D\x0A\x1A\x0A" type="string" offset="0"/>
+      <match type="string" value="\x8AMNG\x0D\x0A\x1A\x0A" offset="0"/>
     </magic>
     <glob pattern="*.mng"/>
   </mime-type>
   <mime-type type="application/vnd.ms-asf">
     <comment>ASF video</comment>
+    <comment xml:lang="af">ASF-video</comment>
     <comment xml:lang="ar">ASF مرئي</comment>
     <comment xml:lang="ast">Videu n'ASF</comment>
-    <comment xml:lang="be@latin">Videa ASF</comment>
+    <comment xml:lang="be-Latn">Videa ASF</comment>
     <comment xml:lang="bg">Видео — ASF</comment>
     <comment xml:lang="ca">vídeo ASF</comment>
     <comment xml:lang="cs">video ASF</comment>
     <comment xml:lang="da">ASF-video</comment>
     <comment xml:lang="de">ASF-Video</comment>
     <comment xml:lang="el">Βίντεο ASF</comment>
-    <comment xml:lang="en_GB">ASF video</comment>
+    <comment xml:lang="en-GB">ASF video</comment>
     <comment xml:lang="eo">ASF-video</comment>
     <comment xml:lang="es">vídeo ASF</comment>
     <comment xml:lang="eu">ASF bideoa</comment>
     <comment xml:lang="fi">ASF-video</comment>
     <comment xml:lang="fo">ASF video</comment>
     <comment xml:lang="fr">vidéo ASF</comment>
+    <comment xml:lang="fur">video ASF</comment>
     <comment xml:lang="ga">físeán ASF</comment>
     <comment xml:lang="gl">vídeo ASF</comment>
     <comment xml:lang="he">וידאו ASF</comment>
@@ -38305,7 +39742,7 @@
     <comment xml:lang="oc">vidèo ASF</comment>
     <comment xml:lang="pl">Plik wideo ASF</comment>
     <comment xml:lang="pt">vídeo ASF</comment>
-    <comment xml:lang="pt_BR">Vídeo ASF</comment>
+    <comment xml:lang="pt-BR">Vídeo ASF</comment>
     <comment xml:lang="ro">Video ASF</comment>
     <comment xml:lang="ru">Видео ASF</comment>
     <comment xml:lang="sk">Video ASF</comment>
@@ -38316,8 +39753,8 @@
     <comment xml:lang="tr">ASF videosu</comment>
     <comment xml:lang="uk">відеокліп ASF</comment>
     <comment xml:lang="vi">Ảnh động ASF</comment>
-    <comment xml:lang="zh_CN">ASF 视频</comment>
-    <comment xml:lang="zh_TW">ASF 視訊</comment>
+    <comment xml:lang="zh-CN">ASF 视频</comment>
+    <comment xml:lang="zh-TW">ASF 視訊</comment>
     <acronym>ASF</acronym>
     <expanded-acronym>Advanced Streaming Format</expanded-acronym>
     <alias type="video/x-ms-wm"/>
@@ -38325,26 +39762,28 @@
     <alias type="video/x-ms-asf-plugin"/>
     <glob pattern="*.asf"/>
     <magic priority="50">
-      <match value="0x3026b275" type="big32" offset="0"/>
-      <match value="[Reference]" type="string" offset="0"/>
+      <match type="big32" value="0x3026b275" offset="0"/>
+      <match type="string" value="[Reference]" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="application/x-netshow-channel">
     <comment>Windows Media Station file</comment>
+    <comment xml:lang="af">Windows Media Station-lêer</comment>
     <comment xml:lang="ar">ملف محطة Windows Media</comment>
-    <comment xml:lang="be@latin">Fajł Windows Media Station</comment>
+    <comment xml:lang="be-Latn">Fajł Windows Media Station</comment>
     <comment xml:lang="bg">Файл — Windows Media Station</comment>
     <comment xml:lang="ca">fitxer de Windows Media Station</comment>
     <comment xml:lang="cs">soubor Windows Media Station</comment>
     <comment xml:lang="da">Windows Media Station-fil</comment>
     <comment xml:lang="de">Windows-Media-Streamingbeschreibung</comment>
     <comment xml:lang="el">Αρχείο Windows Media Station</comment>
-    <comment xml:lang="en_GB">Windows Media Station file</comment>
+    <comment xml:lang="en-GB">Windows Media Station file</comment>
     <comment xml:lang="es">archivo de emisora de Windows Media</comment>
     <comment xml:lang="eu">Windows Media Station fitxategia</comment>
     <comment xml:lang="fi">Windows Media Station-tiedosto</comment>
     <comment xml:lang="fo">Windows Media Station fíla</comment>
     <comment xml:lang="fr">fichier Windows Media Station</comment>
+    <comment xml:lang="fur">file Windows Media Station</comment>
     <comment xml:lang="ga">comhad Windows Media Station</comment>
     <comment xml:lang="gl">ficheiro de emisora de Windows Media</comment>
     <comment xml:lang="he">קובץ תחנה של Windows Media</comment>
@@ -38364,7 +39803,7 @@
     <comment xml:lang="oc">fichièr Windows Media Station</comment>
     <comment xml:lang="pl">Plik Windows Media Station</comment>
     <comment xml:lang="pt">ficheiro Windows Media Station</comment>
-    <comment xml:lang="pt_BR">Arquivo de estação do Windows Media</comment>
+    <comment xml:lang="pt-BR">Arquivo de estação do Windows Media</comment>
     <comment xml:lang="ro">Fișier Windows Media Station</comment>
     <comment xml:lang="ru">Файл Windows Media Station</comment>
     <comment xml:lang="sk">Súbor Windows Media Station</comment>
@@ -38375,32 +39814,34 @@
     <comment xml:lang="tr">Windows Media Station dosyası</comment>
     <comment xml:lang="uk">файл Windows Media Station</comment>
     <comment xml:lang="vi">Tập tin Windows Media Station</comment>
-    <comment xml:lang="zh_CN">Windows 媒体工作站文件</comment>
-    <comment xml:lang="zh_TW">Windows Media Station 檔</comment>
+    <comment xml:lang="zh-CN">Windows 媒体工作站文件</comment>
+    <comment xml:lang="zh-TW">Windows Media Station 檔</comment>
     <sub-class-of type="application/vnd.ms-asf"/>
     <generic-icon name="video-x-generic"/>
     <glob pattern="*.nsc"/>
     <magic priority="50">
-      <match value="[Address]" type="string" offset="0"/>
+      <match type="string" value="[Address]" offset="0"/>
     </magic>
   </mime-type>
   <mime-type type="video/x-ms-wmv">
     <comment>Windows Media video</comment>
+    <comment xml:lang="af">Windows Media-video</comment>
     <comment xml:lang="ar">Windows Media مرئي</comment>
     <comment xml:lang="ast">Videu de Windows Media</comment>
-    <comment xml:lang="be@latin">Videa Windows Media</comment>
+    <comment xml:lang="be-Latn">Videa Windows Media</comment>
     <comment xml:lang="bg">Видео — Windows Media</comment>
     <comment xml:lang="ca">vídeo de Windows Media</comment>
     <comment xml:lang="cs">video Windows Media</comment>
     <comment xml:lang="da">Windows Medie-video</comment>
     <comment xml:lang="de">Windows-Media-Video</comment>
     <comment xml:lang="el">Βίντεο Windows Media</comment>
-    <comment xml:lang="en_GB">Windows Media video</comment>
+    <comment xml:lang="en-GB">Windows Media video</comment>
     <comment xml:lang="es">vídeo de Windows Media</comment>
     <comment xml:lang="eu">Windows Media bideoa</comment>
     <comment xml:lang="fi">Windows Media -video</comment>
     <comment xml:lang="fo">Windows Media video</comment>
     <comment xml:lang="fr">vidéo Windows Media</comment>
+    <comment xml:lang="fur">video Windows Media</comment>
     <comment xml:lang="ga">físeán Windows Media</comment>
     <comment xml:lang="gl">vídeo de Windows Media</comment>
     <comment xml:lang="he">וידאו של Windows Media</comment>
@@ -38420,7 +39861,7 @@
     <comment xml:lang="oc">vidèo Windows Media</comment>
     <comment xml:lang="pl">Plik wideo Windows Media</comment>
     <comment xml:lang="pt">vídeo Windows Media</comment>
-    <comment xml:lang="pt_BR">Vídeo do Windows Media</comment>
+    <comment xml:lang="pt-BR">Vídeo do Windows Media</comment>
     <comment xml:lang="ro">Video Windows Media</comment>
     <comment xml:lang="ru">Видео Windows Media</comment>
     <comment xml:lang="sk">Video Windows Media</comment>
@@ -38431,17 +39872,18 @@
     <comment xml:lang="tr">Windows Media videosu</comment>
     <comment xml:lang="uk">відеокліп Windows Media</comment>
     <comment xml:lang="vi">Ảnh động Windows Media</comment>
-    <comment xml:lang="zh_CN">Windows Media 视频</comment>
-    <comment xml:lang="zh_TW">Windows Media 視訊</comment>
+    <comment xml:lang="zh-CN">Windows Media 视频</comment>
+    <comment xml:lang="zh-TW">Windows Media 視訊</comment>
     <sub-class-of type="application/vnd.ms-asf"/>
     <glob pattern="*.wmv"/>
   </mime-type>
   <mime-type type="video/x-msvideo">
     <comment>AVI video</comment>
+    <comment xml:lang="af">AVI-video</comment>
     <comment xml:lang="ar">AVI مرئي</comment>
     <comment xml:lang="ast">Videu n'AVI</comment>
     <comment xml:lang="az">AVI video faylı</comment>
-    <comment xml:lang="be@latin">Videa AVI</comment>
+    <comment xml:lang="be-Latn">Videa AVI</comment>
     <comment xml:lang="bg">Видео — AVI</comment>
     <comment xml:lang="ca">vídeo AVI</comment>
     <comment xml:lang="cs">video AVI</comment>
@@ -38449,13 +39891,14 @@
     <comment xml:lang="da">AVI-video</comment>
     <comment xml:lang="de">AVI-Video</comment>
     <comment xml:lang="el">Βίντεο AVI</comment>
-    <comment xml:lang="en_GB">AVI video</comment>
+    <comment xml:lang="en-GB">AVI video</comment>
     <comment xml:lang="eo">AVI-video</comment>
     <comment xml:lang="es">vídeo AVI</comment>
     <comment xml:lang="eu">AVI bideoa</comment>
     <comment xml:lang="fi">AVI-video</comment>
     <comment xml:lang="fo">AVI video</comment>
     <comment xml:lang="fr">vidéo AVI</comment>
+    <comment xml:lang="fur">video AVI</comment>
     <comment xml:lang="ga">físeán AVI</comment>
     <comment xml:lang="gl">vídeo AVI</comment>
     <comment xml:lang="he">וידאו AVI</comment>
@@ -38477,7 +39920,7 @@
     <comment xml:lang="oc">vidèo AVI</comment>
     <comment xml:lang="pl">Plik wideo AVI</comment>
     <comment xml:lang="pt">vídeo AVI</comment>
-    <comment xml:lang="pt_BR">Vídeo AVI</comment>
+    <comment xml:lang="pt-BR">Vídeo AVI</comment>
     <comment xml:lang="ro">Video AVI</comment>
     <comment xml:lang="ru">Видео AVI</comment>
     <comment xml:lang="sk">Video AVI</comment>
@@ -38488,8 +39931,8 @@
     <comment xml:lang="tr">AVI videosu</comment>
     <comment xml:lang="uk">відеокліп AVI</comment>
     <comment xml:lang="vi">Ảnh động AVI</comment>
-    <comment xml:lang="zh_CN">AVI 视频</comment>
-    <comment xml:lang="zh_TW">AVI 視訊</comment>
+    <comment xml:lang="zh-CN">AVI 视频</comment>
+    <comment xml:lang="zh-TW">AVI 視訊</comment>
     <acronym>AVI</acronym>
     <expanded-acronym>Audio Video Interleave</expanded-acronym>
     <alias type="video/x-avi"/>
@@ -38498,11 +39941,11 @@
     <alias type="video/msvideo"/>
     <alias type="video/vnd.divx"/>
     <magic priority="50">
-      <match value="RIFF" type="string" offset="0">
-        <match value="AVI " type="string" offset="8"/>
+      <match type="string" value="RIFF" offset="0">
+        <match type="string" value="AVI " offset="8"/>
       </match>
-      <match value="AVF0" type="string" offset="0">
-        <match value="AVI " type="string" offset="8"/>
+      <match type="string" value="AVF0" offset="0">
+        <match type="string" value="AVI " offset="8"/>
       </match>
     </magic>
     <glob pattern="*.avi"/>
@@ -38511,22 +39954,24 @@
   </mime-type>
   <mime-type type="video/x-nsv">
     <comment>NullSoft video</comment>
+    <comment xml:lang="af">NullSoft-video</comment>
     <comment xml:lang="ar">NullSoft مرئي</comment>
     <comment xml:lang="ast">Videu de NullSoft</comment>
-    <comment xml:lang="be@latin">Videa NullSoft</comment>
+    <comment xml:lang="be-Latn">Videa NullSoft</comment>
     <comment xml:lang="bg">Видео — NullSoft</comment>
     <comment xml:lang="ca">vídeo NullSoft</comment>
     <comment xml:lang="cs">video NullSoft</comment>
     <comment xml:lang="da">NullSoft-video</comment>
     <comment xml:lang="de">NullSoft-Video</comment>
     <comment xml:lang="el">Βίντεο Nullsoft</comment>
-    <comment xml:lang="en_GB">NullSoft video</comment>
+    <comment xml:lang="en-GB">NullSoft video</comment>
     <comment xml:lang="eo">NullSoft-video</comment>
     <comment xml:lang="es">vídeo NullSoft</comment>
     <comment xml:lang="eu">NullSoft bideoa</comment>
     <comment xml:lang="fi">NullSoft-video</comment>
     <comment xml:lang="fo">NullSoft video</comment>
     <comment xml:lang="fr">vidéo NullSoft</comment>
+    <comment xml:lang="fur">video NullSoft</comment>
     <comment xml:lang="ga">físeán NullSoft</comment>
     <comment xml:lang="gl">vídeo de NullSoft</comment>
     <comment xml:lang="he">וידאו של NullSot</comment>
@@ -38546,7 +39991,7 @@
     <comment xml:lang="oc">vidèo NullSoft</comment>
     <comment xml:lang="pl">Plik wideo NullSoft</comment>
     <comment xml:lang="pt">vídeo NullSoft</comment>
-    <comment xml:lang="pt_BR">Vídeo do NullSoft</comment>
+    <comment xml:lang="pt-BR">Vídeo do NullSoft</comment>
     <comment xml:lang="ro">Video NullSoft</comment>
     <comment xml:lang="ru">Видео Nullsoft</comment>
     <comment xml:lang="sk">Video NullSoft</comment>
@@ -38557,29 +40002,30 @@
     <comment xml:lang="tr">Nullsoft videosu</comment>
     <comment xml:lang="uk">відеокліп NullSoft</comment>
     <comment xml:lang="vi">Ảnh động NullSoft</comment>
-    <comment xml:lang="zh_CN">NullSoft 视频</comment>
-    <comment xml:lang="zh_TW">NullSoft 視訊</comment>
+    <comment xml:lang="zh-CN">NullSoft 视频</comment>
+    <comment xml:lang="zh-TW">NullSoft 視訊</comment>
     <magic priority="50">
-      <match value="NSVf" type="string" offset="0"/>
+      <match type="string" value="NSVf" offset="0"/>
     </magic>
     <glob pattern="*.nsv"/>
   </mime-type>
   <mime-type type="application/sdp">
     <comment>SDP multicast stream file</comment>
     <comment xml:lang="ar">ملف دفق متعدد البث SDP</comment>
-    <comment xml:lang="be@latin">Šmatadrasny płynievy fajł SDP</comment>
-    <comment xml:lang="bg">Файл за поток — SDP multicast</comment>
+    <comment xml:lang="be-Latn">Šmatadrasny płynievy fajł SDP</comment>
+    <comment xml:lang="bg">Поток — SDP multicast</comment>
     <comment xml:lang="ca">fitxer de flux de multidifusió SDP</comment>
     <comment xml:lang="cs">soubor vícesměrového vysílání proudu SDP</comment>
     <comment xml:lang="da">SDP multicast-strømfil</comment>
     <comment xml:lang="de">SDP-Multicast-Datenstromdatei</comment>
     <comment xml:lang="el">Αρχείο ροής πολλαπλής αναμετάδοσης SDP</comment>
-    <comment xml:lang="en_GB">SDP multicast stream file</comment>
+    <comment xml:lang="en-GB">SDP multicast stream file</comment>
     <comment xml:lang="es">archivo de flujo multicast SDP</comment>
     <comment xml:lang="eu">SDP multicast korrontearen fitxategia</comment>
     <comment xml:lang="fi">SDP-monilähetysvirran tiedosto</comment>
     <comment xml:lang="fo">SDP margvarpað streymafíla</comment>
     <comment xml:lang="fr">fichier de flux multidiffusion SDP</comment>
+    <comment xml:lang="fur">file di flus a trasmission multiple SDP</comment>
     <comment xml:lang="ga">comhad shruth ilchraolacháin SDP</comment>
     <comment xml:lang="gl">ficheiro de fluxo multicast SDP</comment>
     <comment xml:lang="he">קובץ שידור בזרימה SDP</comment>
@@ -38599,7 +40045,7 @@
     <comment xml:lang="oc">fichièr de flux multidifusion SDP</comment>
     <comment xml:lang="pl">Plik strumienia multicast SDP</comment>
     <comment xml:lang="pt">ficheiro de fluxo SDP multicast</comment>
-    <comment xml:lang="pt_BR">Arquivo de canal multicast SDP</comment>
+    <comment xml:lang="pt-BR">Arquivo de canal multicast SDP</comment>
     <comment xml:lang="ro">Fișier flux multicast SDP</comment>
     <comment xml:lang="ru">Файл мультикаст-потока SDP</comment>
     <comment xml:lang="sk">Súbor viacsmerového vysielania prúdu SDP</comment>
@@ -38610,8 +40056,8 @@
     <comment xml:lang="tr">SDP çoklu yayın akışı dosyası</comment>
     <comment xml:lang="uk">файл потокової трансляції SDP</comment>
     <comment xml:lang="vi">Tập tin luồng truyền một-nhiều SDP</comment>
-    <comment xml:lang="zh_CN">SDP 多播流文件</comment>
-    <comment xml:lang="zh_TW">SDP multicast 串流檔</comment>
+    <comment xml:lang="zh-CN">SDP 多播流文件</comment>
+    <comment xml:lang="zh-TW">SDP multicast 串流檔</comment>
     <acronym>SDP</acronym>
     <expanded-acronym>Session Description Protocol</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -38619,18 +40065,19 @@
     <alias type="application/vnd.sdp"/>
     <generic-icon name="video-x-generic"/>
     <magic priority="50">
-      <match value="v=" type="string" offset="0">
-        <match value="s=" type="string" offset="0:256"/>
+      <match type="string" value="v=" offset="0">
+        <match type="string" value="s=" offset="0:256"/>
       </match>
     </magic>
     <glob pattern="*.sdp"/>
   </mime-type>
   <mime-type type="video/x-sgi-movie">
     <comment>SGI video</comment>
+    <comment xml:lang="af">SGI-video</comment>
     <comment xml:lang="ar">SGI مرئي</comment>
     <comment xml:lang="ast">Videu en SGI</comment>
     <comment xml:lang="az">SGI video faylı</comment>
-    <comment xml:lang="be@latin">Videa SGI</comment>
+    <comment xml:lang="be-Latn">Videa SGI</comment>
     <comment xml:lang="bg">Видео — SGI</comment>
     <comment xml:lang="ca">vídeo SGI</comment>
     <comment xml:lang="cs">video SGI</comment>
@@ -38638,13 +40085,14 @@
     <comment xml:lang="da">SGI-video</comment>
     <comment xml:lang="de">SGI-Video</comment>
     <comment xml:lang="el">Βίντεο SGI</comment>
-    <comment xml:lang="en_GB">SGI video</comment>
+    <comment xml:lang="en-GB">SGI video</comment>
     <comment xml:lang="eo">SGI-video</comment>
     <comment xml:lang="es">vídeo SGI</comment>
     <comment xml:lang="eu">SGI bideoa</comment>
     <comment xml:lang="fi">SGI-video</comment>
     <comment xml:lang="fo">SGI video</comment>
     <comment xml:lang="fr">vidéo SGI</comment>
+    <comment xml:lang="fur">video SGI</comment>
     <comment xml:lang="ga">físeán SGI</comment>
     <comment xml:lang="gl">vídeo SGI</comment>
     <comment xml:lang="he">וידאו SGI</comment>
@@ -38665,7 +40113,7 @@
     <comment xml:lang="oc">vidèo SGI</comment>
     <comment xml:lang="pl">Plik wideo SGI</comment>
     <comment xml:lang="pt">vídeo SGI</comment>
-    <comment xml:lang="pt_BR">Vídeo SGI</comment>
+    <comment xml:lang="pt-BR">Vídeo SGI</comment>
     <comment xml:lang="ro">Video SGI</comment>
     <comment xml:lang="ru">Видео SGI</comment>
     <comment xml:lang="sk">Video SGI</comment>
@@ -38676,29 +40124,31 @@
     <comment xml:lang="tr">SGI videosu</comment>
     <comment xml:lang="uk">відеокліп SGI</comment>
     <comment xml:lang="vi">Ảnh động SGI</comment>
-    <comment xml:lang="zh_CN">SGI 视频</comment>
-    <comment xml:lang="zh_TW">SGI 視訊</comment>
+    <comment xml:lang="zh-CN">SGI 视频</comment>
+    <comment xml:lang="zh-TW">SGI 視訊</comment>
     <magic priority="50">
-      <match value="MOVI" type="string" offset="0"/>
+      <match type="string" value="MOVI" offset="0"/>
     </magic>
     <glob pattern="*.movie"/>
   </mime-type>
   <mime-type type="application/vnd.emusic-emusic_package">
     <comment>eMusic download package</comment>
+    <comment xml:lang="af">eMusic-aflaaipakket</comment>
     <comment xml:lang="ar">حزمة تنزيل eMusic</comment>
-    <comment xml:lang="be@latin">pakunak zahruzki eMusic</comment>
+    <comment xml:lang="be-Latn">pakunak zahruzki eMusic</comment>
     <comment xml:lang="bg">Пакет за сваляне — eMusic</comment>
-    <comment xml:lang="ca">paquet de descàrrega eMusic</comment>
+    <comment xml:lang="ca">paquet de baixades d'eMusic</comment>
     <comment xml:lang="cs">balíček stahování eMusic</comment>
-    <comment xml:lang="da">eMusic-hentpakke</comment>
+    <comment xml:lang="da">eMusic-downloadpakke</comment>
     <comment xml:lang="de">eMusic-Download-Paket</comment>
     <comment xml:lang="el">Πακέτο λήψης eMusic</comment>
-    <comment xml:lang="en_GB">eMusic download package</comment>
+    <comment xml:lang="en-GB">eMusic download package</comment>
     <comment xml:lang="es">paquete de descarga eMusic</comment>
     <comment xml:lang="eu">eMusic deskargaren paketea</comment>
     <comment xml:lang="fi">eMusic-imurointipaketti</comment>
     <comment xml:lang="fo">eMusic niðurtøkupakki</comment>
     <comment xml:lang="fr">paquet de téléchargement eMusic</comment>
+    <comment xml:lang="fur">pachet di discjariament eMusic</comment>
     <comment xml:lang="ga">pacáiste íosluchtú eMusic</comment>
     <comment xml:lang="gl">paquete de descarga de eMusic</comment>
     <comment xml:lang="he">חבילת הורדה של eMusic</comment>
@@ -38718,7 +40168,7 @@
     <comment xml:lang="oc">paquet de telecargament eMusic</comment>
     <comment xml:lang="pl">Pobrany pakiet eMusic</comment>
     <comment xml:lang="pt">pacote transferido eMusic</comment>
-    <comment xml:lang="pt_BR">Pacote de download do eMusic</comment>
+    <comment xml:lang="pt-BR">Pacote de download do eMusic</comment>
     <comment xml:lang="ro">pachet descărcare eMusic</comment>
     <comment xml:lang="ru">Пакет загрузок eMusic</comment>
     <comment xml:lang="sk">Balíček sťahovania eMusic</comment>
@@ -38729,16 +40179,17 @@
     <comment xml:lang="tr">eMusic indirme paketi</comment>
     <comment xml:lang="uk">пакунок завантаження eMusic</comment>
     <comment xml:lang="vi">gói nhạc tải xuống eMusic</comment>
-    <comment xml:lang="zh_CN">eMusic 下载包</comment>
-    <comment xml:lang="zh_TW">eMusic 下載包</comment>
+    <comment xml:lang="zh-CN">eMusic 下载包</comment>
+    <comment xml:lang="zh-TW">eMusic 下載包</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="nF7YLao" type="string" offset="0"/>
+      <match type="string" value="nF7YLao" offset="0"/>
     </magic>
     <glob pattern="*.emp"/>
   </mime-type>
   <mime-type type="application/vnd.google-earth.kml+xml">
     <comment>KML geographic data</comment>
+    <comment xml:lang="af">KML geografiese data</comment>
     <comment xml:lang="ar">بيانات جغرافية KML</comment>
     <comment xml:lang="bg">Географски данни — KML</comment>
     <comment xml:lang="ca">dades geogràfiques KML</comment>
@@ -38746,12 +40197,13 @@
     <comment xml:lang="da">Geografiske data i KML-format</comment>
     <comment xml:lang="de">KML geographische Daten</comment>
     <comment xml:lang="el">Γεωγραφικά δεδομένα KML</comment>
-    <comment xml:lang="en_GB">KML geographic data</comment>
+    <comment xml:lang="en-GB">KML geographic data</comment>
     <comment xml:lang="es">datos geográficos KML</comment>
     <comment xml:lang="eu">KML datu geografikoak</comment>
     <comment xml:lang="fi">KML-paikkatieto</comment>
     <comment xml:lang="fo">KML landafrøðilig dáta</comment>
     <comment xml:lang="fr">données géographiques KML</comment>
+    <comment xml:lang="fur">dâts gjeografics KML</comment>
     <comment xml:lang="ga">sonraí geografacha KML</comment>
     <comment xml:lang="gl">datos xeográficos KML</comment>
     <comment xml:lang="he">מידע גאוגרפי KML</comment>
@@ -38769,7 +40221,7 @@
     <comment xml:lang="oc">donadas geograficas KML</comment>
     <comment xml:lang="pl">Dane geograficzne KML</comment>
     <comment xml:lang="pt">dados geográficos KML</comment>
-    <comment xml:lang="pt_BR">Dados geográficos KML</comment>
+    <comment xml:lang="pt-BR">Dados geográficos KML</comment>
     <comment xml:lang="ro">Date geografice KML</comment>
     <comment xml:lang="ru">Географические данные KML</comment>
     <comment xml:lang="sk">Zemepisné údaje KML</comment>
@@ -38778,8 +40230,8 @@
     <comment xml:lang="sv">KML geografisk data</comment>
     <comment xml:lang="tr">KML coğrafi verisi</comment>
     <comment xml:lang="uk">географічні дані KML</comment>
-    <comment xml:lang="zh_CN">KML 地理数据</comment>
-    <comment xml:lang="zh_TW">KML 地理資料</comment>
+    <comment xml:lang="zh-CN">KML 地理数据</comment>
+    <comment xml:lang="zh-TW">KML 地理資料</comment>
     <acronym>KML</acronym>
     <expanded-acronym>Keyhole Markup Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -38788,6 +40240,7 @@
   </mime-type>
   <mime-type type="application/vnd.google-earth.kmz">
     <comment>KML geographic compressed data</comment>
+    <comment xml:lang="af">KML saamgepersde geografiese data</comment>
     <comment xml:lang="ar">بيانات جغرافية مضغوطة KML</comment>
     <comment xml:lang="bg">Географски данни — KML, компресирани</comment>
     <comment xml:lang="ca">dades geogràfiques KML amb compressió</comment>
@@ -38795,12 +40248,13 @@
     <comment xml:lang="da">KML-geografiske komprimerede data</comment>
     <comment xml:lang="de">KML geographische komprimierte Daten</comment>
     <comment xml:lang="el">Γεωγραφικά συμπιεσμένα δεδομένα KML</comment>
-    <comment xml:lang="en_GB">KML geographic compressed data</comment>
+    <comment xml:lang="en-GB">KML geographic compressed data</comment>
     <comment xml:lang="es">datos geográficos comprimidos KML</comment>
     <comment xml:lang="eu">KML datu geografiko konprimituak</comment>
     <comment xml:lang="fi">Pakattu KML-paikkatieto</comment>
     <comment xml:lang="fo">KML landafrøðilig stappað dáta</comment>
     <comment xml:lang="fr">données géographiques KML compressées</comment>
+    <comment xml:lang="fur">dâts gjeografics KML comprimûts</comment>
     <comment xml:lang="ga">sonraí comhbhrúite geografacha KML</comment>
     <comment xml:lang="gl">datos xeográficos KML comprimidos </comment>
     <comment xml:lang="he">מידע גאוגרפי דחוס KML</comment>
@@ -38818,7 +40272,7 @@
     <comment xml:lang="oc">donadas geograficas KML compressats</comment>
     <comment xml:lang="pl">Skompresowane dane geograficzne KML</comment>
     <comment xml:lang="pt">dados geográficos comprimidos KML</comment>
-    <comment xml:lang="pt_BR">Dados geográficos KML compactados</comment>
+    <comment xml:lang="pt-BR">Dados geográficos KML compactados</comment>
     <comment xml:lang="ro">Date geografice comprimate KML</comment>
     <comment xml:lang="ru">Сжатые географические данные KML</comment>
     <comment xml:lang="sk">Komprimované zemepisné údaje KML</comment>
@@ -38827,8 +40281,8 @@
     <comment xml:lang="sv">KML geografiskt komprimerat data</comment>
     <comment xml:lang="tr">KML sıkıştırılmış coğrafi verisi</comment>
     <comment xml:lang="uk">стиснуті географічні дані KML</comment>
-    <comment xml:lang="zh_CN">KML 地理压缩数据</comment>
-    <comment xml:lang="zh_TW">KML 地理壓縮資料</comment>
+    <comment xml:lang="zh-CN">KML 地理压缩数据</comment>
+    <comment xml:lang="zh-TW">KML 地理壓縮資料</comment>
     <acronym>KML</acronym>
     <expanded-acronym>Keyhole Markup Language</expanded-acronym>
     <sub-class-of type="application/zip"/>
@@ -38836,13 +40290,18 @@
   </mime-type>
   <mime-type type="application/geo+json">
     <comment>GeoJSON geospatial data</comment>
+    <comment xml:lang="af">GeoJSON georuimtelike data</comment>
+    <comment xml:lang="bg">Географски данни — GeoJSON</comment>
     <comment xml:lang="ca">dades geomàtiques GeoJSON</comment>
     <comment xml:lang="cs">geoprostorová data GeoJSON</comment>
     <comment xml:lang="da">GEoJSON-geospatiale data</comment>
     <comment xml:lang="de">GeoJSON raumbezogene Daten</comment>
-    <comment xml:lang="en_GB">GeoJSON geospatial data</comment>
+    <comment xml:lang="en-GB">GeoJSON geospatial data</comment>
     <comment xml:lang="es">datos geoespaciales en GeoJSON</comment>
+    <comment xml:lang="eu">GeoJSON geomatika datua</comment>
+    <comment xml:lang="fi">GeoJSON-paikkatiedot</comment>
     <comment xml:lang="fr">données géospatiales GeoJSON</comment>
+    <comment xml:lang="fur">dâts gjeo-spaziâls GeoJSON</comment>
     <comment xml:lang="ga">sonraí geospásúla GeoJSON</comment>
     <comment xml:lang="hr">GeoJSON geoprostorni podaci</comment>
     <comment xml:lang="hu">GeoJSON téradatok</comment>
@@ -38851,15 +40310,15 @@
     <comment xml:lang="kk">GeoJSON геокеңістіктік деректері</comment>
     <comment xml:lang="ko">GeoJSON 지리 정보 데이터</comment>
     <comment xml:lang="pl">Dane geoprzestrzenne GeoJSON</comment>
-    <comment xml:lang="pt_BR">Dados geoespaciais GeoJSON</comment>
+    <comment xml:lang="pt-BR">Dados geoespaciais GeoJSON</comment>
     <comment xml:lang="ru">Геопространственные данные GeoJSON</comment>
     <comment xml:lang="sk">Geopriestorové údaje GeoJSON</comment>
     <comment xml:lang="sr">ГеоЈСОН геопросторни подаци</comment>
     <comment xml:lang="sv">Geospatialt GeoJSON-data</comment>
-    <comment xml:lang="tr">GeoJSON coğrafi veriler</comment>
+    <comment xml:lang="tr">GeoJSON coğrafi verileri</comment>
     <comment xml:lang="uk">геопросторові дані GeoJSON</comment>
-    <comment xml:lang="zh_CN">GeoJSON 地理空间数据</comment>
-    <comment xml:lang="zh_TW">GeoJSON 地理空間資料</comment>
+    <comment xml:lang="zh-CN">GeoJSON 地理空间数据</comment>
+    <comment xml:lang="zh-TW">GeoJSON 地理空間資料</comment>
     <sub-class-of type="application/json"/>
     <glob pattern="*.geojson"/>
     <glob pattern="*.geo.json"/>
@@ -38867,15 +40326,18 @@
   </mime-type>
   <mime-type type="application/gpx+xml">
     <comment>GPX geographic data</comment>
+    <comment xml:lang="af">GPX geografiese data</comment>
+    <comment xml:lang="bg">Географски данни — GPX</comment>
     <comment xml:lang="ca">dades geogràfiques GPX</comment>
     <comment xml:lang="cs">geografická data GPX</comment>
     <comment xml:lang="da">GPX-geografiske data</comment>
     <comment xml:lang="de">GPX geographische Daten</comment>
-    <comment xml:lang="en_GB">GPX geographic data</comment>
+    <comment xml:lang="en-GB">GPX geographic data</comment>
     <comment xml:lang="es">datos geográficos en GPX</comment>
     <comment xml:lang="eu">GPX datu geografikoak</comment>
     <comment xml:lang="fi">GPX-paikkatieto</comment>
     <comment xml:lang="fr">données géographiques GPX</comment>
+    <comment xml:lang="fur">dâts gjeografics GPX</comment>
     <comment xml:lang="ga">sonraí geografacha GPX</comment>
     <comment xml:lang="he">נתונים גאוגרפיים GPX</comment>
     <comment xml:lang="hr">GPX geografski podaci</comment>
@@ -38886,15 +40348,15 @@
     <comment xml:lang="ko">GPX 지리 공간정보 데이터</comment>
     <comment xml:lang="oc">Donadas geograficas GPX</comment>
     <comment xml:lang="pl">Dane geograficzne GPX</comment>
-    <comment xml:lang="pt_BR">Dados geográficos GPX</comment>
+    <comment xml:lang="pt-BR">Dados geográficos GPX</comment>
     <comment xml:lang="ru">Географические данные GPX</comment>
     <comment xml:lang="sk">Zemepisné údaje GPX</comment>
     <comment xml:lang="sr">ГПИкс географски подаци</comment>
     <comment xml:lang="sv">GPX geografisk data</comment>
     <comment xml:lang="tr">GPX coğrafi verileri</comment>
     <comment xml:lang="uk">географічні дані GPX</comment>
-    <comment xml:lang="zh_CN">GPX 地理数据</comment>
-    <comment xml:lang="zh_TW">GPX 地理資料</comment>
+    <comment xml:lang="zh-CN">GPX 地理数据</comment>
+    <comment xml:lang="zh-TW">GPX 地理資料</comment>
     <acronym>GPX</acronym>
     <expanded-acronym>GPS Exchange Format</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -38907,20 +40369,22 @@
   </mime-type>
   <mime-type type="application/x-ica">
     <comment>Citrix ICA settings file</comment>
+    <comment xml:lang="af">Citrix ICA-instellingslêer</comment>
     <comment xml:lang="ar">ملف إعدادات Citrix ICA</comment>
-    <comment xml:lang="be@latin">Fajł naładaŭ Citrix ICA</comment>
+    <comment xml:lang="be-Latn">Fajł naładaŭ Citrix ICA</comment>
     <comment xml:lang="bg">Настройки — Citrix ICA</comment>
     <comment xml:lang="ca">fitxer d'ajusts de Citrix ICA</comment>
     <comment xml:lang="cs">soubor nastavení Citrix ICA</comment>
     <comment xml:lang="da">Citrix ICA-opsætningsfil</comment>
     <comment xml:lang="de">Citrix-ICA-Einstellungsdatei</comment>
     <comment xml:lang="el">Αρχείο ρυθμίσεων Citrix ICA</comment>
-    <comment xml:lang="en_GB">Citrix ICA settings file</comment>
+    <comment xml:lang="en-GB">Citrix ICA settings file</comment>
     <comment xml:lang="es">archivo de configuración de Citrix ICA</comment>
     <comment xml:lang="eu">Citrix ICA ezarpenen fitxategia</comment>
     <comment xml:lang="fi">Citrix ICA -asetustiedosto</comment>
     <comment xml:lang="fo">Citrix ICA stillingarfíla</comment>
     <comment xml:lang="fr">fichier de paramètres ICA Citrix</comment>
+    <comment xml:lang="fur">file impostazions Citrix ICA</comment>
     <comment xml:lang="ga">comhad socruithe Citrix ICA</comment>
     <comment xml:lang="gl">ficheiro de configuracións de Citrix ICA</comment>
     <comment xml:lang="he">קובץ הגדרות של Citrix ICA</comment>
@@ -38941,7 +40405,7 @@
     <comment xml:lang="oc">fichièr de paramètres ICA Citrix</comment>
     <comment xml:lang="pl">Plik ustawień Citrix ICA</comment>
     <comment xml:lang="pt">ficheiro de definições Citrix ICA</comment>
-    <comment xml:lang="pt_BR">Arquivo de configuração do Citrix ICA</comment>
+    <comment xml:lang="pt-BR">Arquivo de configuração do Citrix ICA</comment>
     <comment xml:lang="ro">Fișier de configurări Citrix ICA</comment>
     <comment xml:lang="ru">Файл настроек Citrix ICA</comment>
     <comment xml:lang="sk">Súbor nastavení Citrix ICA</comment>
@@ -38952,8 +40416,8 @@
     <comment xml:lang="tr">Citrix ICA ayar dosyası</comment>
     <comment xml:lang="uk">файл параметрів ICA Citrix</comment>
     <comment xml:lang="vi">Tập tin thiết lập ICA Citrix</comment>
-    <comment xml:lang="zh_CN">Citrix ICA 设置文件</comment>
-    <comment xml:lang="zh_TW">Citrix ICA 設定值檔案</comment>
+    <comment xml:lang="zh-CN">Citrix ICA 设置文件</comment>
+    <comment xml:lang="zh-TW">Citrix ICA 設定值檔案</comment>
     <acronym>ICA</acronym>
     <expanded-acronym>Independent Computing Architecture</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -38962,21 +40426,23 @@
   </mime-type>
   <mime-type type="application/vnd.mozilla.xul+xml">
     <comment>XUL interface document</comment>
+    <comment xml:lang="af">XUL-koppelvlakdokument</comment>
     <comment xml:lang="ar">مستند واجهة XUL</comment>
     <comment xml:lang="ast">Documentu d'interfaz XUL</comment>
-    <comment xml:lang="be@latin">Interfejsny dakument XUL</comment>
-    <comment xml:lang="bg">Документ — интерфейс за XUL</comment>
+    <comment xml:lang="be-Latn">Interfejsny dakument XUL</comment>
+    <comment xml:lang="bg">Документ — интерфейс, XUL</comment>
     <comment xml:lang="ca">document d'interfície XUL</comment>
     <comment xml:lang="cs">dokument rozhraní XUL</comment>
     <comment xml:lang="da">XUL-grænsefladedokument</comment>
     <comment xml:lang="de">XUL-Oberflächendokument</comment>
     <comment xml:lang="el">Έγγραφο διεπαφής XUL</comment>
-    <comment xml:lang="en_GB">XUL interface document</comment>
+    <comment xml:lang="en-GB">XUL interface document</comment>
     <comment xml:lang="es">documento de interfaz XUL</comment>
     <comment xml:lang="eu">XUL interfazearen dokumentua</comment>
     <comment xml:lang="fi">XUL-käyttöliittymäasiakirja</comment>
     <comment xml:lang="fo">XUL markamótsskjal</comment>
     <comment xml:lang="fr">document d'interface XUL</comment>
+    <comment xml:lang="fur">document di interface XUL</comment>
     <comment xml:lang="ga">cáipéis chomhéadan XUL</comment>
     <comment xml:lang="gl">documento de interface XUL</comment>
     <comment xml:lang="he">מסמך ממשק XUL</comment>
@@ -38996,7 +40462,7 @@
     <comment xml:lang="oc">document d'interfàcia XUL</comment>
     <comment xml:lang="pl">Dokument interfejsu XUL</comment>
     <comment xml:lang="pt">documento de ambiente XUL</comment>
-    <comment xml:lang="pt_BR">Documento de interface XUL</comment>
+    <comment xml:lang="pt-BR">Documento de interface XUL</comment>
     <comment xml:lang="ro">Document interfață XUL</comment>
     <comment xml:lang="ru">Документ интерфейса XUL</comment>
     <comment xml:lang="sk">Dokument rozhrania XUL</comment>
@@ -39007,8 +40473,8 @@
     <comment xml:lang="tr">XUL arayüz belgesi</comment>
     <comment xml:lang="uk">документ інтерфейсу XUL</comment>
     <comment xml:lang="vi">Tài liệu giao diện XUL</comment>
-    <comment xml:lang="zh_CN">XUL 界面文档</comment>
-    <comment xml:lang="zh_TW">XUL 介面文件</comment>
+    <comment xml:lang="zh-CN">XUL 界面文档</comment>
+    <comment xml:lang="zh-TW">XUL 介面文件</comment>
     <acronym>XUL</acronym>
     <expanded-acronym>XML User interface markup Language</expanded-acronym>
     <sub-class-of type="application/xml"/>
@@ -39018,6 +40484,7 @@
   </mime-type>
   <mime-type type="application/x-xpinstall">
     <comment>XPInstall installer module</comment>
+    <comment xml:lang="af">XPInstall-installasiemodule</comment>
     <comment xml:lang="ar">وحدة مثبت XPInstall </comment>
     <comment xml:lang="bg">Пакет — инсталация XPInstall</comment>
     <comment xml:lang="ca">mòdul de l'instal·lador XPinstall</comment>
@@ -39025,12 +40492,13 @@
     <comment xml:lang="da">XPInstall-installationsmodul</comment>
     <comment xml:lang="de">XPInstall-Installationsmodul</comment>
     <comment xml:lang="el">Άρθρωμα εγκατάστασης XPInstall</comment>
-    <comment xml:lang="en_GB">XPInstall installer module</comment>
+    <comment xml:lang="en-GB">XPInstall installer module</comment>
     <comment xml:lang="es">módulo del instalador XPInstall</comment>
     <comment xml:lang="eu">XPInstall instalatzailearen modulua</comment>
     <comment xml:lang="fi">XPInstall-asennuspaketti</comment>
     <comment xml:lang="fo">XPInstall innleggjaramótul</comment>
     <comment xml:lang="fr">module d'installation XPInstall</comment>
+    <comment xml:lang="fur">modul instaladôr XPInstall</comment>
     <comment xml:lang="ga">modúl suiteála XPInstall</comment>
     <comment xml:lang="gl">Módulo do instalador XPInstall</comment>
     <comment xml:lang="he">מודול התקנה של XPInstall</comment>
@@ -39048,7 +40516,7 @@
     <comment xml:lang="oc">modul d'installacion XPInstall</comment>
     <comment xml:lang="pl">Moduł instalatora XPInstall</comment>
     <comment xml:lang="pt">módulo de instalador XPInstall</comment>
-    <comment xml:lang="pt_BR">Módulo de instalador XPInstall</comment>
+    <comment xml:lang="pt-BR">Módulo de instalador XPInstall</comment>
     <comment xml:lang="ro">Modul de instalare XPInstall</comment>
     <comment xml:lang="ru">Модуль установщика XPInstall</comment>
     <comment xml:lang="sk">Modul inštalátora XPInstall</comment>
@@ -39057,13 +40525,14 @@
     <comment xml:lang="sv">XPInstall-installeringsmodul</comment>
     <comment xml:lang="tr">XPInstall kurulum modülü</comment>
     <comment xml:lang="uk">модуль засобу встановлення XPInstall</comment>
-    <comment xml:lang="zh_CN">XPInstall 安装工具模块</comment>
-    <comment xml:lang="zh_TW">XPInstall 安裝程式模組</comment>
+    <comment xml:lang="zh-CN">XPInstall 安装工具模块</comment>
+    <comment xml:lang="zh-TW">XPInstall 安裝程式模組</comment>
     <sub-class-of type="application/zip"/>
     <glob pattern="*.xpi"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.wordprocessingml.document">
     <comment>Word 2007 document</comment>
+    <comment xml:lang="af">Word 2007-dokument</comment>
     <comment xml:lang="ar">مستند Word 2007</comment>
     <comment xml:lang="ast">Documentu de Word 2007</comment>
     <comment xml:lang="bg">Документ — Word 2007</comment>
@@ -39072,12 +40541,13 @@
     <comment xml:lang="da">Word 2007-dokument</comment>
     <comment xml:lang="de">Word-2007-Dokument</comment>
     <comment xml:lang="el">Έγγραφο Word 2007</comment>
-    <comment xml:lang="en_GB">Word 2007 document</comment>
+    <comment xml:lang="en-GB">Word 2007 document</comment>
     <comment xml:lang="es">documento de Word 2007</comment>
     <comment xml:lang="eu">Word 2007 dokumentua</comment>
     <comment xml:lang="fi">Word 2007 -asiakirja</comment>
     <comment xml:lang="fo">Word 2007 skjal</comment>
     <comment xml:lang="fr">document Word 2007</comment>
+    <comment xml:lang="fur">document Word 2007</comment>
     <comment xml:lang="ga">cáipéis Word 2007</comment>
     <comment xml:lang="gl">documento de Word 2007</comment>
     <comment xml:lang="he">מסמך Word 2007</comment>
@@ -39095,7 +40565,7 @@
     <comment xml:lang="oc">document Word 2007</comment>
     <comment xml:lang="pl">Dokument Word 2007</comment>
     <comment xml:lang="pt">documento Word 2007</comment>
-    <comment xml:lang="pt_BR">Documento do Word 2007</comment>
+    <comment xml:lang="pt-BR">Documento do Word 2007</comment>
     <comment xml:lang="ro">Document Word 2007</comment>
     <comment xml:lang="ru">Документ Word 2007</comment>
     <comment xml:lang="sk">Dokument Word 2007</comment>
@@ -39105,14 +40575,15 @@
     <comment xml:lang="tr">Word 2007 belgesi</comment>
     <comment xml:lang="uk">документ Word 2007</comment>
     <comment xml:lang="vi">Tài liệu Word 2007</comment>
-    <comment xml:lang="zh_CN">Word 2007 文档</comment>
-    <comment xml:lang="zh_TW">Word 2007 文件</comment>
+    <comment xml:lang="zh-CN">Word 2007 文档</comment>
+    <comment xml:lang="zh-TW">Word 2007 文件</comment>
     <glob pattern="*.docx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.wordprocessingml.template">
     <comment>Word 2007 document template</comment>
+    <comment xml:lang="af">Word 2007-dokumentsjabloon</comment>
     <comment xml:lang="ast">Plantía de documentu de Word 2007</comment>
     <comment xml:lang="bg">Шаблон за документи — Word 2007</comment>
     <comment xml:lang="ca">plantilla de document de Word 2007</comment>
@@ -39120,11 +40591,12 @@
     <comment xml:lang="da">Word 2007-dokumentskabelon</comment>
     <comment xml:lang="de">Word-2007-Dokumentvorlage</comment>
     <comment xml:lang="el">Πρότυπο έγγραφο Word 2007</comment>
-    <comment xml:lang="en_GB">Word 2007 document template</comment>
+    <comment xml:lang="en-GB">Word 2007 document template</comment>
     <comment xml:lang="es">plantilla de documento de Word 2007</comment>
     <comment xml:lang="eu">Word 2007 dokumentuaren txantiloia</comment>
     <comment xml:lang="fi">Word 2007 -asiakirjamalli</comment>
     <comment xml:lang="fr">modèle de document Word 2007</comment>
+    <comment xml:lang="fur">model document Word 2007</comment>
     <comment xml:lang="ga">teimpléad cháipéis Word 2007</comment>
     <comment xml:lang="gl">Plantilla de documento de Word 2007</comment>
     <comment xml:lang="he">תבנית מסמך של Word 2007</comment>
@@ -39142,7 +40614,7 @@
     <comment xml:lang="oc">modèl de document Word 2007</comment>
     <comment xml:lang="pl">Szablon dokumentu Word 2007</comment>
     <comment xml:lang="pt">modelo de documento Word 2007</comment>
-    <comment xml:lang="pt_BR">Modelo de documento do Word 2007</comment>
+    <comment xml:lang="pt-BR">Modelo de documento do Word 2007</comment>
     <comment xml:lang="ru">Шаблон документа Word 2007</comment>
     <comment xml:lang="sk">Šablóna dokumentu Word 2007</comment>
     <comment xml:lang="sl">Predloga dokumenta Word 2007</comment>
@@ -39150,14 +40622,15 @@
     <comment xml:lang="sv">Word 2007-dokumentmall</comment>
     <comment xml:lang="tr">Word 2007 belge şablonu</comment>
     <comment xml:lang="uk">шаблон документа Word 2007</comment>
-    <comment xml:lang="zh_CN">Word 2007 文档模板</comment>
-    <comment xml:lang="zh_TW">Word 2007 文件範本</comment>
+    <comment xml:lang="zh-CN">Word 2007 文档模板</comment>
+    <comment xml:lang="zh-TW">Word 2007 文件範本</comment>
     <glob pattern="*.dotx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-document"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.presentationml.presentation">
     <comment>PowerPoint 2007 presentation</comment>
+    <comment xml:lang="af">PowerPoint 2007-voorlegging</comment>
     <comment xml:lang="ar">عرض تقديمي PowerPoint 2007</comment>
     <comment xml:lang="bg">Презентация — PowerPoint 2007</comment>
     <comment xml:lang="ca">presentació de PowerPoint 2007</comment>
@@ -39165,12 +40638,13 @@
     <comment xml:lang="da">PowerPoint 2007-præsentation</comment>
     <comment xml:lang="de">PowerPoint-2007-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση PowerPoint 2007</comment>
-    <comment xml:lang="en_GB">PowerPoint 2007 presentation</comment>
+    <comment xml:lang="en-GB">PowerPoint 2007 presentation</comment>
     <comment xml:lang="es">presentación de PowerPoint 2007</comment>
     <comment xml:lang="eu">PowerPoint 2007 aurkezpena</comment>
     <comment xml:lang="fi">PowerPoint 2007 -esitys</comment>
     <comment xml:lang="fo">PowerPoint 2007 framløga</comment>
     <comment xml:lang="fr">présentation PowerPoint 2007</comment>
+    <comment xml:lang="fur">presentazion PowerPoint 2007</comment>
     <comment xml:lang="ga">láithreoireacht PowerPoint 2007</comment>
     <comment xml:lang="gl">presentación de PowerPoint 2007</comment>
     <comment xml:lang="he">מצגת של PowerPoint 2007</comment>
@@ -39188,7 +40662,7 @@
     <comment xml:lang="oc">presentacion PowerPoint 2007</comment>
     <comment xml:lang="pl">Prezentacja PowerPoint 2007</comment>
     <comment xml:lang="pt">apresentação PowerPoint 2007</comment>
-    <comment xml:lang="pt_BR">Apresentação do PowerPoint 2007</comment>
+    <comment xml:lang="pt-BR">Apresentação do PowerPoint 2007</comment>
     <comment xml:lang="ro">Prezentare PowerPoint 2007</comment>
     <comment xml:lang="ru">Презентация PowerPoint 2007</comment>
     <comment xml:lang="sk">Prezentácia PowerPoint 2007</comment>
@@ -39198,25 +40672,27 @@
     <comment xml:lang="tr">PowerPoint 2007 sunumu</comment>
     <comment xml:lang="uk">презентація PowerPoint 2007</comment>
     <comment xml:lang="vi">Trình diễn PowerPoint 2007</comment>
-    <comment xml:lang="zh_CN">PowerPoint 2007 演示文稿</comment>
-    <comment xml:lang="zh_TW">PowerPoint 2007 簡報</comment>
+    <comment xml:lang="zh-CN">PowerPoint 2007 演示文稿</comment>
+    <comment xml:lang="zh-TW">PowerPoint 2007 簡報</comment>
     <glob pattern="*.pptx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.presentationml.slide">
     <comment>PowerPoint 2007 slide</comment>
+    <comment xml:lang="af">PowerPoint 2007-skyfie</comment>
     <comment xml:lang="bg">Кадър — PoerPoint 2007</comment>
     <comment xml:lang="ca">dispositiva de PowerPoint 2007</comment>
     <comment xml:lang="cs">snímek PowerPoint 2007</comment>
     <comment xml:lang="da">PowerPoint 2007-slide</comment>
     <comment xml:lang="de">PowerPoint 2007-Folie</comment>
     <comment xml:lang="el">Διαφάνεια PowerPoint 2007</comment>
-    <comment xml:lang="en_GB">PowerPoint 2007 slide</comment>
+    <comment xml:lang="en-GB">PowerPoint 2007 slide</comment>
     <comment xml:lang="es">diapositiva de PowerPoint 2007</comment>
     <comment xml:lang="eu">PowerPoint 2007 diapositiba</comment>
     <comment xml:lang="fi">PowerPoint 2007 -dia</comment>
     <comment xml:lang="fr">diapositive PowerPoint 2007</comment>
+    <comment xml:lang="fur">diapositive PowerPoint 2007</comment>
     <comment xml:lang="ga">sleamhnán PowerPoint 2007</comment>
     <comment xml:lang="gl">Diaporama de PowerPoint 2007</comment>
     <comment xml:lang="he">שקופית של PowerPoint 2007</comment>
@@ -39234,7 +40710,7 @@
     <comment xml:lang="oc">diapositive PowerPoint 2007</comment>
     <comment xml:lang="pl">Slajd PowerPoint 2007</comment>
     <comment xml:lang="pt">diapositivo PowerPoint 2007</comment>
-    <comment xml:lang="pt_BR">Slide do PowerPoint 2007</comment>
+    <comment xml:lang="pt-BR">Slide do PowerPoint 2007</comment>
     <comment xml:lang="ru">Слайд PowerPoint 2007</comment>
     <comment xml:lang="sk">Snímka PowerPoint 2007</comment>
     <comment xml:lang="sl">Prosojnica PowerPoint 2007</comment>
@@ -39242,14 +40718,15 @@
     <comment xml:lang="sv">PowerPoint 2007-bildspel</comment>
     <comment xml:lang="tr">PowerPoint 2007 slaytı</comment>
     <comment xml:lang="uk">слайд PowerPoint 2007</comment>
-    <comment xml:lang="zh_CN">PowerPoint 2007 幻灯片</comment>
-    <comment xml:lang="zh_TW">PowerPoint 2007 投影片</comment>
+    <comment xml:lang="zh-CN">PowerPoint 2007 幻灯片</comment>
+    <comment xml:lang="zh-TW">PowerPoint 2007 投影片</comment>
     <glob pattern="*.sldx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.presentationml.slideshow">
     <comment>PowerPoint 2007 show</comment>
+    <comment xml:lang="af">PowerPoint 2007-vertoning</comment>
     <comment xml:lang="ar">عرض PowerPoint 2007</comment>
     <comment xml:lang="bg">Презентация-шоу — PowerPoint 2007</comment>
     <comment xml:lang="ca">exposició de PowerPoint 2007</comment>
@@ -39257,12 +40734,13 @@
     <comment xml:lang="da">PowerPoint 2007-dias</comment>
     <comment xml:lang="de">PowerPoint-2007-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση PowerPoint 2007</comment>
-    <comment xml:lang="en_GB">PowerPoint 2007 show</comment>
+    <comment xml:lang="en-GB">PowerPoint 2007 show</comment>
     <comment xml:lang="es">presentación autoejecutable de PowerPoint 2007</comment>
     <comment xml:lang="eu">PowerPoint 2007 ikuskizuna</comment>
     <comment xml:lang="fi">PowerPoint 2007 -diaesitys</comment>
     <comment xml:lang="fo">PowerPoint 2007 framsýning</comment>
     <comment xml:lang="fr">diaporama PowerPoint 2007</comment>
+    <comment xml:lang="fur">esecuzion presentazion PowerPoint 2007</comment>
     <comment xml:lang="ga">taispeántas PowerPoint 2007</comment>
     <comment xml:lang="gl">Exposición de PowerPoint 2007</comment>
     <comment xml:lang="he">תצוגה של PowerPoint 2007</comment>
@@ -39280,7 +40758,7 @@
     <comment xml:lang="oc">diaporama PowerPoint 2007</comment>
     <comment xml:lang="pl">Pokaz PowerPoint 2007</comment>
     <comment xml:lang="pt">espetáculo PowerPoint 2007</comment>
-    <comment xml:lang="pt_BR">Apresentação do PowerPoint 2007</comment>
+    <comment xml:lang="pt-BR">Apresentação do PowerPoint 2007</comment>
     <comment xml:lang="ro">Prezentare PowerPoint 2007</comment>
     <comment xml:lang="ru">Презентация PowerPoint 2007</comment>
     <comment xml:lang="sk">Ukážka PowerPoint 2007</comment>
@@ -39289,25 +40767,27 @@
     <comment xml:lang="sv">PowerPoint 2007-visning</comment>
     <comment xml:lang="tr">PowerPoint 2007 gösterisi</comment>
     <comment xml:lang="uk">показ слайдів PowerPoint 2007</comment>
-    <comment xml:lang="zh_CN">PowerPoint 2007 放映</comment>
-    <comment xml:lang="zh_TW">PowerPoint 2007 展示</comment>
+    <comment xml:lang="zh-CN">PowerPoint 2007 放映</comment>
+    <comment xml:lang="zh-TW">PowerPoint 2007 展示</comment>
     <glob pattern="*.ppsx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.presentationml.template">
     <comment>PowerPoint 2007 presentation template</comment>
+    <comment xml:lang="af">PowerPoint 2007-voorleggingsjabloon</comment>
     <comment xml:lang="bg">Шаблон за презентации — PowerPoint 2007</comment>
     <comment xml:lang="ca">plantilla de presentació de PowerPoint 2007</comment>
     <comment xml:lang="cs">šablona prezentace PowerPoint 2007</comment>
     <comment xml:lang="da">PowerPoint 2007-præsentationsskabelon</comment>
     <comment xml:lang="de">PowerPoint 2007-Präsentationsvorlage</comment>
     <comment xml:lang="el">Πρότυπο παρουσίασης PowerPoint 2007</comment>
-    <comment xml:lang="en_GB">PowerPoint 2007 presentation template</comment>
+    <comment xml:lang="en-GB">PowerPoint 2007 presentation template</comment>
     <comment xml:lang="es">plantilla de presentación de PowerPoint 2007</comment>
     <comment xml:lang="eu">PowerPoint 2007 aurkezpen txantiloia</comment>
     <comment xml:lang="fi">PowerPoint 2007 -esitysmalli</comment>
     <comment xml:lang="fr">modèle de présentation PowerPoint 2007</comment>
+    <comment xml:lang="fur">model presentazion PowerPoint 2007</comment>
     <comment xml:lang="ga">teimpléad láithreoireachta PowerPoint 2007</comment>
     <comment xml:lang="gl">modelo de presentación de PowerPoint 2007</comment>
     <comment xml:lang="he">תבנית למצגת של PowerPoint 2007</comment>
@@ -39325,7 +40805,7 @@
     <comment xml:lang="oc">modèl de presentacion PowerPoint 2007</comment>
     <comment xml:lang="pl">Szablon prezentacji PowerPoint 2007</comment>
     <comment xml:lang="pt">modelo de apresentação PowerPoint 2007</comment>
-    <comment xml:lang="pt_BR">Modelo de apresentação do PowerPoint 2007</comment>
+    <comment xml:lang="pt-BR">Modelo de apresentação do PowerPoint 2007</comment>
     <comment xml:lang="ru">Шаблон презентации PowerPoint 2007</comment>
     <comment xml:lang="sk">Šablóna prezentácie PowerPoint 2007</comment>
     <comment xml:lang="sl">Predloga predstavitve PowerPoint 2007</comment>
@@ -39333,14 +40813,15 @@
     <comment xml:lang="sv">PowerPoint 2007-presentationsmall</comment>
     <comment xml:lang="tr">PowerPoint 2007 sunum şablonu</comment>
     <comment xml:lang="uk">шаблон презентації PowerPoint 2007</comment>
-    <comment xml:lang="zh_CN">PowerPoint 2007 演示文稿模板</comment>
-    <comment xml:lang="zh_TW">PowerPoint 2007 簡報範本</comment>
+    <comment xml:lang="zh-CN">PowerPoint 2007 演示文稿模板</comment>
+    <comment xml:lang="zh-TW">PowerPoint 2007 簡報範本</comment>
     <glob pattern="*.potx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
     <comment>Excel 2007 spreadsheet</comment>
+    <comment xml:lang="af">Excel 2007-sigblad</comment>
     <comment xml:lang="ar">جدول Excel 2007</comment>
     <comment xml:lang="bg">Таблица — Excel 2007</comment>
     <comment xml:lang="ca">full de càlcul d'Excel 2007</comment>
@@ -39348,12 +40829,13 @@
     <comment xml:lang="da">Excel 2007-regneark</comment>
     <comment xml:lang="de">Excel-2007-Tabelle</comment>
     <comment xml:lang="el">Λογιστικό φύλλο Excel 2007</comment>
-    <comment xml:lang="en_GB">Excel 2007 spreadsheet</comment>
+    <comment xml:lang="en-GB">Excel 2007 spreadsheet</comment>
     <comment xml:lang="es">hoja de cálculo de Excel 2007</comment>
     <comment xml:lang="eu">Excel 2007 kalkulu-orria</comment>
     <comment xml:lang="fi">Excel 2007 -taulukko</comment>
     <comment xml:lang="fo">Excel 2007 rokniark</comment>
     <comment xml:lang="fr">feuille de calcul Excel 2007</comment>
+    <comment xml:lang="fur">sfuei di calcul Excel 2007</comment>
     <comment xml:lang="ga">scarbhileog Excel 2007</comment>
     <comment xml:lang="gl">folla de cálculo de Excel 2007</comment>
     <comment xml:lang="he">גליון נתונים של Excel 2007</comment>
@@ -39372,35 +40854,37 @@
     <comment xml:lang="oc">fuèlh de calcul Excel 2007</comment>
     <comment xml:lang="pl">Arkusz Excel 2007</comment>
     <comment xml:lang="pt">folha de cálculo Excel 2007</comment>
-    <comment xml:lang="pt_BR">Planilha do Excel 2007</comment>
+    <comment xml:lang="pt-BR">Planilha do Excel 2007</comment>
     <comment xml:lang="ro">Foaie de calcul Excel 2007</comment>
     <comment xml:lang="ru">Электронная таблица Excel 2007</comment>
     <comment xml:lang="sk">Zošit Excel 2007</comment>
     <comment xml:lang="sl">Razpredelnica Microsoft Excel 2007</comment>
     <comment xml:lang="sr">табела Ексела 2007</comment>
     <comment xml:lang="sv">Excel 2007-kalkylblad</comment>
-    <comment xml:lang="tr">Excel 2007 çalışma sayfası</comment>
+    <comment xml:lang="tr">Excel 2007 hesap çizelgesi sayfası</comment>
     <comment xml:lang="uk">ел. таблиця Excel 2007</comment>
     <comment xml:lang="vi">Bảng tính Excel 2007</comment>
-    <comment xml:lang="zh_CN">Excel 2007 电子表格</comment>
-    <comment xml:lang="zh_TW">Excel 2007 試算表</comment>
+    <comment xml:lang="zh-CN">Excel 2007 电子表格</comment>
+    <comment xml:lang="zh-TW">Excel 2007 試算表</comment>
     <glob pattern="*.xlsx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
   </mime-type>
   <mime-type type="application/vnd.openxmlformats-officedocument.spreadsheetml.template">
     <comment>Excel 2007 spreadsheet template</comment>
+    <comment xml:lang="af">Excel 2007-sigbladsjabloon</comment>
     <comment xml:lang="bg">Шаблон за таблици — Excel 2007</comment>
     <comment xml:lang="ca">plantilla de full de càlcul d'Excel 2007</comment>
     <comment xml:lang="cs">šablona sešitu Excel 2007</comment>
     <comment xml:lang="da">Excel 2007-regnearksskabelon</comment>
     <comment xml:lang="de">Excel 2007-Tabellenvorlage</comment>
     <comment xml:lang="el">Πρότυπο λογιστικού φύλλου Excel 2007</comment>
-    <comment xml:lang="en_GB">Excel 2007 spreadsheet template</comment>
+    <comment xml:lang="en-GB">Excel 2007 spreadsheet template</comment>
     <comment xml:lang="es">plantilla de hoja de cálculo de Excel 2007</comment>
     <comment xml:lang="eu">Excel 2007 kalkulu-orri txantiloia</comment>
     <comment xml:lang="fi">Excel 2007 -taulukkomalli</comment>
     <comment xml:lang="fr">modèle de feuille de calcul Excel 2007</comment>
+    <comment xml:lang="fur">model sfuei di calcul Excel 2007</comment>
     <comment xml:lang="ga">teimpléad scarbhileoige Excel 2007</comment>
     <comment xml:lang="gl">modelo de folla de cálculo Excel 2007</comment>
     <comment xml:lang="he">תבנית של גיליון נתונים של Excel 2007</comment>
@@ -39418,38 +40902,40 @@
     <comment xml:lang="oc">modèl de fuèlh de calcul Excel 2007</comment>
     <comment xml:lang="pl">Szablon arkusza Excel 2007</comment>
     <comment xml:lang="pt">modelo de folha de cálculo Excel 2007</comment>
-    <comment xml:lang="pt_BR">Modelo de planilha do Excel 2007</comment>
+    <comment xml:lang="pt-BR">Modelo de planilha do Excel 2007</comment>
     <comment xml:lang="ru">Шаблон электронной таблицы Excel 2007</comment>
     <comment xml:lang="sk">Šablóna zošitu Excel 2007</comment>
     <comment xml:lang="sl">Predloga razpredelnice Excel 2007</comment>
     <comment xml:lang="sr">шаблон табеле Ексела 2007</comment>
     <comment xml:lang="sv">Excel 2007-kalkylarksmall</comment>
-    <comment xml:lang="tr">Excel 2007 çalışma sayfası şablonu</comment>
+    <comment xml:lang="tr">Excel 2007 hesap çizelgesi şablonu</comment>
     <comment xml:lang="uk">шаблон електронної таблиці Excel 2007</comment>
-    <comment xml:lang="zh_CN">Excel 2007 电子表格模板</comment>
-    <comment xml:lang="zh_TW">Excel 2007 試算表範本</comment>
+    <comment xml:lang="zh-CN">Excel 2007 电子表格模板</comment>
+    <comment xml:lang="zh-TW">Excel 2007 試算表範本</comment>
     <glob pattern="*.xltx"/>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-spreadsheet"/>
   </mime-type>
   <mime-type type="application/x-t602">
     <comment>T602 document</comment>
+    <comment xml:lang="af">T602-dokument</comment>
     <comment xml:lang="ar">مستند T602</comment>
     <comment xml:lang="ast">Documentu T602</comment>
-    <comment xml:lang="be@latin">Dakument T602</comment>
+    <comment xml:lang="be-Latn">Dakument T602</comment>
     <comment xml:lang="bg">Документ — T602</comment>
     <comment xml:lang="ca">document T602</comment>
     <comment xml:lang="cs">dokument T602</comment>
     <comment xml:lang="da">T602-dokument</comment>
     <comment xml:lang="de">T602-Dokument</comment>
     <comment xml:lang="el">Έγγραφο T602</comment>
-    <comment xml:lang="en_GB">T602 document</comment>
+    <comment xml:lang="en-GB">T602 document</comment>
     <comment xml:lang="eo">T602-dokumento</comment>
     <comment xml:lang="es">documento T602</comment>
     <comment xml:lang="eu">T602 dokumentua</comment>
     <comment xml:lang="fi">T602-asiakirja</comment>
     <comment xml:lang="fo">T602 skjal</comment>
     <comment xml:lang="fr">document T602</comment>
+    <comment xml:lang="fur">document T602</comment>
     <comment xml:lang="ga">cáipéis T602</comment>
     <comment xml:lang="gl">documento T602</comment>
     <comment xml:lang="he">מסמך T602</comment>
@@ -39469,7 +40955,7 @@
     <comment xml:lang="oc">document T602</comment>
     <comment xml:lang="pl">Dokument T602</comment>
     <comment xml:lang="pt">documento T602</comment>
-    <comment xml:lang="pt_BR">Documento T602</comment>
+    <comment xml:lang="pt-BR">Documento T602</comment>
     <comment xml:lang="ro">Document T602</comment>
     <comment xml:lang="ru">Документ T602</comment>
     <comment xml:lang="sk">Dokument T602</comment>
@@ -39480,75 +40966,54 @@
     <comment xml:lang="tr">T602 belgesi</comment>
     <comment xml:lang="uk">документ T602</comment>
     <comment xml:lang="vi">Tài liệu T602</comment>
-    <comment xml:lang="zh_CN">T602 文档</comment>
-    <comment xml:lang="zh_TW">T602 文件</comment>
+    <comment xml:lang="zh-CN">T602 文档</comment>
+    <comment xml:lang="zh-TW">T602 文件</comment>
     <generic-icon name="x-office-document"/>
     <magic priority="50">
-      <match value="@CT 0" type="string" offset="0"/>
-      <match value="@CT 1" type="string" offset="0"/>
-      <match value="@CT 2" type="string" offset="0"/>
+      <match offset="0" type="string" value="@CT 0"/>
+      <match offset="0" type="string" value="@CT 1"/>
+      <match offset="0" type="string" value="@CT 2"/>
     </magic>
     <glob pattern="*.602"/>
   </mime-type>
   <mime-type type="application/x-cisco-vpn-settings">
-    <comment>Cisco VPN Settings</comment>
-    <comment xml:lang="ar">إعدادات Cisco VPN</comment>
-    <comment xml:lang="be@latin">Nałady Cisco VPN</comment>
+    <comment>Cisco VPN settings</comment>
     <comment xml:lang="bg">Настройки — ВЧМ на Cisco</comment>
     <comment xml:lang="ca">ajusts VPN de Cisco</comment>
-    <comment xml:lang="cs">nastavení Cisco VPN</comment>
-    <comment xml:lang="da">Cisco VPN-opsætning</comment>
+    <comment xml:lang="da">Cisco VPN-indstillinger</comment>
     <comment xml:lang="de">Cisco-VPN-Einstellungen</comment>
-    <comment xml:lang="el">Ρυθμίσεις Cisco VPN</comment>
-    <comment xml:lang="en_GB">Cisco VPN Settings</comment>
-    <comment xml:lang="es">configuración de VPN de Cisco</comment>
+    <comment xml:lang="en-GB">Cisco VPN settings</comment>
+    <comment xml:lang="es">configuración de Cisco VPN</comment>
     <comment xml:lang="eu">Cisco VPN ezarpenak</comment>
-    <comment xml:lang="fi">Cisco VPN -asetukset</comment>
-    <comment xml:lang="fo">Cisco VPN stillingar</comment>
+    <comment xml:lang="fi">Ciscon VPN-asetukset</comment>
     <comment xml:lang="fr">paramètres VPN Cisco</comment>
-    <comment xml:lang="ga">socruithe VPN Cisco</comment>
-    <comment xml:lang="gl">configuracións de VPN de Cisco</comment>
-    <comment xml:lang="he">הגדרות של Cisco VPN</comment>
     <comment xml:lang="hr">Cisco VPN postavke</comment>
     <comment xml:lang="hu">Cisco VPN beállítások</comment>
-    <comment xml:lang="ia">Configuration VPN Cisco</comment>
-    <comment xml:lang="id">Penataan Cisco VPN</comment>
+    <comment xml:lang="id">Pengaturan VPN Cisco</comment>
     <comment xml:lang="it">Impostazioni VPN Cisco</comment>
-    <comment xml:lang="ja">Cisco VPN 設定</comment>
-    <comment xml:lang="ka">Cisco VPN-ის პარამეტრები</comment>
     <comment xml:lang="kk">Cisco VPN баптаулары</comment>
-    <comment xml:lang="ko">Cisco VPN 설정</comment>
-    <comment xml:lang="lt">Cisco VPN parametrai</comment>
-    <comment xml:lang="lv">Cisco VPN iestatījumi</comment>
-    <comment xml:lang="nb">Cisco VPN-innstillinger</comment>
-    <comment xml:lang="nl">Cisco VPN-instellingen</comment>
-    <comment xml:lang="nn">Cisco VPN-innstillingar</comment>
-    <comment xml:lang="oc">paramètres VPN Cisco</comment>
+    <comment xml:lang="ko">시스코 VPN 설정</comment>
     <comment xml:lang="pl">Ustawienia VPN Cisco</comment>
-    <comment xml:lang="pt">definições de Cisco VPN</comment>
-    <comment xml:lang="pt_BR">Configurações de VPN da Cisco</comment>
-    <comment xml:lang="ro">Configurări VPN Cisco</comment>
+    <comment xml:lang="pt-BR">Configurações de VPN da Cisco</comment>
     <comment xml:lang="ru">Файл настроек Cisco VPN</comment>
     <comment xml:lang="sk">Nastavenia Cisco VPN</comment>
-    <comment xml:lang="sl">Datoteka nastavitev Cisco VPN</comment>
-    <comment xml:lang="sq">Rregullime VPN Cisco</comment>
-    <comment xml:lang="sr">подешавања Циско ВПН-а</comment>
+    <comment xml:lang="sl">Nastavitve Cisco VPN</comment>
     <comment xml:lang="sv">Cisco VPN-inställningar</comment>
-    <comment xml:lang="tr">Cisco VPN Ayarları</comment>
+    <comment xml:lang="tr">Cisco VPN ayarları</comment>
     <comment xml:lang="uk">параметри VPN Cisco</comment>
-    <comment xml:lang="vi">Thiết lập VPN Cisco</comment>
-    <comment xml:lang="zh_CN">Cisco VPN 设置</comment>
-    <comment xml:lang="zh_TW">Cisco VPN 設定值</comment>
+    <comment xml:lang="zh-CN">Cisco VPN 设置</comment>
+    <comment xml:lang="zh-TW">Cisco VPN 設定</comment>
     <generic-icon name="text-x-generic"/>
     <magic priority="50">
-      <match value="[main]" type="string" offset="0">
-        <match value="AuthType=" type="string" offset="0:256"/>
+      <match type="string" value="[main]" offset="0">
+        <match type="string" value="AuthType=" offset="0:256"/>
       </match>
     </magic>
     <glob pattern="*.pcf"/>
   </mime-type>
   <mime-type type="application/vnd.iccprofile">
     <comment>ICC profile</comment>
+    <comment xml:lang="af">ICC-profiel</comment>
     <comment xml:lang="ar">تشكيلة OCL</comment>
     <comment xml:lang="ast">Perfil ICC</comment>
     <comment xml:lang="bg">Цветови профил — OCL</comment>
@@ -39557,13 +41022,14 @@
     <comment xml:lang="da">ICC-profil</comment>
     <comment xml:lang="de">ICC-Profil</comment>
     <comment xml:lang="el">Προφίλ ICC</comment>
-    <comment xml:lang="en_GB">ICC profile</comment>
+    <comment xml:lang="en-GB">ICC profile</comment>
     <comment xml:lang="eo">ICC-profilo</comment>
     <comment xml:lang="es">perfil ICC</comment>
     <comment xml:lang="eu">ICC profila</comment>
     <comment xml:lang="fi">ICC-profiili</comment>
     <comment xml:lang="fo">ICC umhvarv</comment>
     <comment xml:lang="fr">profil ICC</comment>
+    <comment xml:lang="fur">profîl ICC</comment>
     <comment xml:lang="ga">próifíl ICC</comment>
     <comment xml:lang="gl">perfíl ICC</comment>
     <comment xml:lang="he">פרופיל ICC</comment>
@@ -39581,7 +41047,7 @@
     <comment xml:lang="oc">perfil ICC</comment>
     <comment xml:lang="pl">Profil ICC</comment>
     <comment xml:lang="pt">perfil ICC</comment>
-    <comment xml:lang="pt_BR">Perfil ICC</comment>
+    <comment xml:lang="pt-BR">Perfil ICC</comment>
     <comment xml:lang="ro">Profil ICC</comment>
     <comment xml:lang="ru">Профиль ICC</comment>
     <comment xml:lang="sk">Profil farieb ICC</comment>
@@ -39590,10 +41056,10 @@
     <comment xml:lang="sv">ICC-profil</comment>
     <comment xml:lang="tr">ICC profili</comment>
     <comment xml:lang="uk">профіль ICC</comment>
-    <comment xml:lang="zh_CN">ICC 配置文件</comment>
-    <comment xml:lang="zh_TW">ICC 設定檔</comment>
+    <comment xml:lang="zh-CN">ICC 配置文件</comment>
+    <comment xml:lang="zh-TW">ICC 設定組合</comment>
     <magic priority="50">
-      <match value="acsp" type="string" offset="36"/>
+      <match type="string" value="acsp" offset="36"/>
     </magic>
     <glob pattern="*.icc"/>
     <glob pattern="*.icm"/>
@@ -39601,18 +41067,19 @@
   <mime-type type="application/x-it87">
     <comment>IT 8.7 color calibration file</comment>
     <comment xml:lang="ar">ملف ضبط ألوان IT 8.7</comment>
-    <comment xml:lang="bg">Файл за цветово калибриране — IT 8.7</comment>
+    <comment xml:lang="bg">Цветово калибриране — IT 8.7</comment>
     <comment xml:lang="ca">fitxer de calibratge de color IT 8.7</comment>
     <comment xml:lang="cs">soubor kalibrace barev IT 8.7</comment>
     <comment xml:lang="da">IT 8.7 farvekalibreringsfil</comment>
     <comment xml:lang="de">IT 8.7-Farbkalibrierungsdatei</comment>
     <comment xml:lang="el">Αρχείο βαθμονόμησης χρώματος ΙΤ 8.7</comment>
-    <comment xml:lang="en_GB">IT 8.7 color calibration file</comment>
+    <comment xml:lang="en-GB">IT 8.7 color calibration file</comment>
     <comment xml:lang="es">archivo de calibración de color IT 8.7</comment>
     <comment xml:lang="eu">IT 8.7 kolore-kalibrazioaren fitxategia</comment>
     <comment xml:lang="fi">IT 8.7 -värikalibrointitiedosto</comment>
     <comment xml:lang="fo">IT 8.7 litstillingarfíla</comment>
     <comment xml:lang="fr">fichier de calibration couleur IT 8.7</comment>
+    <comment xml:lang="fur">file calibradure colôr IT 8.7</comment>
     <comment xml:lang="ga">comhad calabraithe dathanna IT 8.7</comment>
     <comment xml:lang="gl">ficheiro de calibración de cor IT 8.7</comment>
     <comment xml:lang="he">קובץ כיול צבע IT 8.7</comment>
@@ -39630,7 +41097,7 @@
     <comment xml:lang="oc">fichièr de calibracion color IT 8.7</comment>
     <comment xml:lang="pl">Plik kalibracji kolorów IT 8.7</comment>
     <comment xml:lang="pt">ficheiro de calibração de cor IT 8.7</comment>
-    <comment xml:lang="pt_BR">Arquivo de calibração de cor IT 8.7</comment>
+    <comment xml:lang="pt-BR">Arquivo de calibração de cor IT 8.7</comment>
     <comment xml:lang="ro">Fișier de calibrare a culorii IT 8.7</comment>
     <comment xml:lang="ru">Файл калибровки цвета IT 8.7</comment>
     <comment xml:lang="sk">Súbor kalibrácie farieb IT 8.7</comment>
@@ -39639,10 +41106,10 @@
     <comment xml:lang="sv">IT 8.7-färgkalibreringsfil</comment>
     <comment xml:lang="tr">IT 8.7 renk kalibrasyon dosyası</comment>
     <comment xml:lang="uk">файл калібрування кольорів IT 8.7</comment>
-    <comment xml:lang="zh_CN">IT 8.7 色彩校准文件</comment>
-    <comment xml:lang="zh_TW">IT 8.7 色彩校正檔</comment>
+    <comment xml:lang="zh-CN">IT 8.7 色彩校准文件</comment>
+    <comment xml:lang="zh-TW">IT 8.7 色彩校正檔</comment>
     <magic priority="50">
-      <match value="IT8.7" type="string" offset="0"/>
+      <match type="string" value="IT8.7" offset="0"/>
     </magic>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
@@ -39650,16 +41117,18 @@
   </mime-type>
   <mime-type type="application/x-ccmx">
     <comment>CCMX color correction file</comment>
+    <comment xml:lang="bg">Цветови поправки — CCMX</comment>
     <comment xml:lang="ca">fitxer de correcció de color CCMX</comment>
     <comment xml:lang="cs">soubor korekce barev CCMX</comment>
     <comment xml:lang="da">CCMX-farvekorrektionsfil</comment>
     <comment xml:lang="de">CCMX-Farbkorrekturdatei</comment>
     <comment xml:lang="el">Αρχείο διόρθωσης χρωμάτων CCMX</comment>
-    <comment xml:lang="en_GB">CCMX colour correction file</comment>
+    <comment xml:lang="en-GB">CCMX colour correction file</comment>
     <comment xml:lang="es">archivo de corrección de color CCMX</comment>
     <comment xml:lang="eu">CCMX kolore-kalibrazioaren fitxategia</comment>
     <comment xml:lang="fi">CCMX-värikorjaustiedosto</comment>
     <comment xml:lang="fr">fichier de correction colorimétrique CCMX</comment>
+    <comment xml:lang="fur">file corezion colôr CCMX</comment>
     <comment xml:lang="ga">comhad ceartúchán dathanna CCMX</comment>
     <comment xml:lang="gl">Ficheiro de corrección de cor CCMX</comment>
     <comment xml:lang="he">קובץ תיקון צבע מסוג CCMX</comment>
@@ -39675,7 +41144,7 @@
     <comment xml:lang="oc">fichièr de correccion colorimetrica CCMX</comment>
     <comment xml:lang="pl">Plik korekcji kolorów CCMX</comment>
     <comment xml:lang="pt">ficheiro de correção de cor CCMX</comment>
-    <comment xml:lang="pt_BR">Arquivo de correção de cor CCMX</comment>
+    <comment xml:lang="pt-BR">Arquivo de correção de cor CCMX</comment>
     <comment xml:lang="ru">Файл цветовой коррекции CCMX</comment>
     <comment xml:lang="sk">Súbor korekcie farieb CCMX</comment>
     <comment xml:lang="sl">Datoteka barvne poprave CCMX</comment>
@@ -39683,10 +41152,10 @@
     <comment xml:lang="sv">CCMX-färgkorrigeringsfil</comment>
     <comment xml:lang="tr">CCMX renk düzeltme dosyası</comment>
     <comment xml:lang="uk">файл даних виправлення кольорів CCMX</comment>
-    <comment xml:lang="zh_CN">CCMX 色彩校准文件</comment>
-    <comment xml:lang="zh_TW">CCMX 色彩校正檔</comment>
+    <comment xml:lang="zh-CN">CCMX 色彩校准文件</comment>
+    <comment xml:lang="zh-TW">CCMX 色彩校正檔</comment>
     <magic priority="50">
-      <match value="CCMX" type="string" offset="0"/>
+      <match type="string" value="CCMX" offset="0"/>
     </magic>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
@@ -39694,16 +41163,19 @@
   </mime-type>
   <mime-type type="application/winhlp">
     <comment>WinHelp help file</comment>
+    <comment xml:lang="af">WinHelp-hulplêer</comment>
+    <comment xml:lang="bg">Помощен файл — WinHelp</comment>
     <comment xml:lang="ca">fitxer d'ajuda WinHelp</comment>
     <comment xml:lang="cs">soubor nápovědy WinHelp</comment>
     <comment xml:lang="da">WinHelp-hjælpefil</comment>
     <comment xml:lang="de">WinHelp-Hilfedatei</comment>
     <comment xml:lang="el">Αρχείο βοήθειας WinHelp</comment>
-    <comment xml:lang="en_GB">WinHelp help file</comment>
+    <comment xml:lang="en-GB">WinHelp help file</comment>
     <comment xml:lang="es">archivo de ayuda de WinHelp</comment>
     <comment xml:lang="eu">WinHelp laguntza fitxategia</comment>
     <comment xml:lang="fi">WinHelp-ohjetiedosto</comment>
     <comment xml:lang="fr">fichier d'aide WinHelp</comment>
+    <comment xml:lang="fur">file di jutori WinHelp</comment>
     <comment xml:lang="ga">comhad cabhrach WinHelp</comment>
     <comment xml:lang="gl">Ficheiro de axuda WinHelp</comment>
     <comment xml:lang="he">קובץ עזרה מסוג WinHelp</comment>
@@ -39719,7 +41191,7 @@
     <comment xml:lang="oc">fichièr d'ajuda WinHelp</comment>
     <comment xml:lang="pl">Plik pomocy WinHelp</comment>
     <comment xml:lang="pt">ficheiro de ajuda WinHelp</comment>
-    <comment xml:lang="pt_BR">Arquivo de ajuda WinHelp</comment>
+    <comment xml:lang="pt-BR">Arquivo de ajuda WinHelp</comment>
     <comment xml:lang="ru">Файл справки WinHelp</comment>
     <comment xml:lang="sk">Súbor Pomocníka WinHelp</comment>
     <comment xml:lang="sl">Datoteka pomoči WinHelp</comment>
@@ -39727,24 +41199,27 @@
     <comment xml:lang="sv">WinHelp-hjälpfil</comment>
     <comment xml:lang="tr">WinHelp yardım dosyası</comment>
     <comment xml:lang="uk">файл довідки WinHelp</comment>
-    <comment xml:lang="zh_CN">WinHelp 帮助文件</comment>
-    <comment xml:lang="zh_TW">WinHelp 說明檔</comment>
+    <comment xml:lang="zh-CN">WinHelp 帮助文件</comment>
+    <comment xml:lang="zh-TW">WinHelp 說明檔</comment>
     <magic priority="50">
-      <match value="0x00035f3f" type="little32" offset="0"/>
+      <match type="little32" value="0x00035f3f" offset="0"/>
     </magic>
     <glob pattern="*.hlp"/>
     <alias type="zz-application/zz-winassoc-hlp"/>
   </mime-type>
   <mime-type type="application/x-bsdiff">
     <comment>binary differences between files</comment>
+    <comment xml:lang="bg">двоична разлика между файлове</comment>
     <comment xml:lang="ca">diferencies binàries entre fitxers</comment>
     <comment xml:lang="cs">binární rozdíl mezi soubory</comment>
     <comment xml:lang="da">binære forskelle mellem filer</comment>
     <comment xml:lang="de">binäre Unterschiede zwischen Dateien</comment>
-    <comment xml:lang="en_GB">binary differences between files</comment>
+    <comment xml:lang="en-GB">binary differences between files</comment>
     <comment xml:lang="es">diferencias entre archivos binarios</comment>
     <comment xml:lang="eu">fitxategi binarioen arteko ezberdinstasunak</comment>
+    <comment xml:lang="fi">binaariset erot tiedostojen välillä</comment>
     <comment xml:lang="fr">différences binaires entre fichiers</comment>
+    <comment xml:lang="fur">diferencis binariis tra file</comment>
     <comment xml:lang="ga">difríochtaí dénártha idir comhaid</comment>
     <comment xml:lang="he">הבדלים בינריים בין קבצים</comment>
     <comment xml:lang="hr">Binarne razlike između datoteka</comment>
@@ -39754,40 +41229,42 @@
     <comment xml:lang="kk">файлдар арасындағы бинарлық айырмашылықтар</comment>
     <comment xml:lang="ko">바이너리 차이 비교 파일</comment>
     <comment xml:lang="pl">Binarna różnica pomiędzy plikami</comment>
-    <comment xml:lang="pt_BR">Diferenças binárias entre arquivos</comment>
+    <comment xml:lang="pt-BR">Diferenças binárias entre arquivos</comment>
     <comment xml:lang="ru">Двоичные различия между файлами</comment>
     <comment xml:lang="sk">Binárne rozdiely medzi súbormi</comment>
     <comment xml:lang="sr">бинарне разлике датотека</comment>
     <comment xml:lang="sv">binära skillnader mellan filer</comment>
     <comment xml:lang="tr">dosyalar arasındaki ikilik farklar</comment>
     <comment xml:lang="uk">двійкова різниця між файлами</comment>
-    <comment xml:lang="zh_CN">文件的二进制区别</comment>
-    <comment xml:lang="zh_TW">檔案間的二進位差異</comment>
+    <comment xml:lang="zh-CN">文件的二进制区别</comment>
+    <comment xml:lang="zh-TW">檔案間的二進位差異</comment>
     <magic>
-      <match value="BSDIFF40" type="string" offset="0"/>
-      <match value="BSDIFN40" type="string" offset="0"/>
+      <match type="string" value="BSDIFF40" offset="0"/>
+      <match type="string" value="BSDIFN40" offset="0"/>
     </magic>
     <glob pattern="*.bsdiff"/>
   </mime-type>
 
-  
+  <!-- Tree content-types -->
   <mime-type type="x-content/image-dcf">
-    
+    <!-- http://en.wikipedia.org/wiki/Design_rule_for_Camera_File_system -->
     <comment>digital photos</comment>
+    <comment xml:lang="af">digitale foto’s</comment>
     <comment xml:lang="ar">الصور الرقمية</comment>
-    <comment xml:lang="be@latin">ličbavyja zdymki</comment>
+    <comment xml:lang="be-Latn">ličbavyja zdymki</comment>
     <comment xml:lang="bg">Цифрови фотографии</comment>
     <comment xml:lang="ca">fotos digitals</comment>
     <comment xml:lang="cs">digitální fotografie</comment>
     <comment xml:lang="da">digitale billeder</comment>
     <comment xml:lang="de">Digitale Fotos</comment>
     <comment xml:lang="el">Ψηφιακές φωτογραφίες</comment>
-    <comment xml:lang="en_GB">digital photos</comment>
+    <comment xml:lang="en-GB">digital photos</comment>
     <comment xml:lang="es">fotos digitales</comment>
     <comment xml:lang="eu">argazki digitalak</comment>
     <comment xml:lang="fi">digivalokuvia</comment>
     <comment xml:lang="fo">talgildar myndir</comment>
     <comment xml:lang="fr">photos numériques</comment>
+    <comment xml:lang="fur">fotos digjitâls</comment>
     <comment xml:lang="ga">grianghraif dhigiteacha</comment>
     <comment xml:lang="gl">fotos dixitais</comment>
     <comment xml:lang="he">תמונות דיגיטליות</comment>
@@ -39806,7 +41283,7 @@
     <comment xml:lang="oc">fòtos numericas</comment>
     <comment xml:lang="pl">Zdjęcia cyfrowe</comment>
     <comment xml:lang="pt">fotografias digitais</comment>
-    <comment xml:lang="pt_BR">Fotos digitais</comment>
+    <comment xml:lang="pt-BR">Fotos digitais</comment>
     <comment xml:lang="ro">fotografii digitale</comment>
     <comment xml:lang="ru">Цифровые фотографии</comment>
     <comment xml:lang="sk">Digitálne fotografie</comment>
@@ -39817,32 +41294,36 @@
     <comment xml:lang="tr">sayısal fotoğraflar</comment>
     <comment xml:lang="uk">цифрові фотографії</comment>
     <comment xml:lang="vi">ảnh chụp số</comment>
-    <comment xml:lang="zh_CN">数字化图像</comment>
-    <comment xml:lang="zh_TW">數位相片</comment>
+    <comment xml:lang="zh-CN">数字化图像</comment>
+    <comment xml:lang="zh-TW">數位相片</comment>
     <treemagic>
-      <treematch type="directory" path="dcim" non-empty="true"/>
+      <treematch path="dcim" type="directory" non-empty="true"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/video-vcd">
-    
+    <!-- TRANSLATORS: This is a brand-name, not a generic term. Please see
+         http://en.wikipedia.org/wiki/Video_CD
+         http://www.herongyang.com/CD-DVD/VCD-Movie-File-Directory-Structure.html -->
     <comment>Video CD</comment>
+    <comment xml:lang="af">Video-CD</comment>
     <comment xml:lang="ar">Video CD</comment>
     <comment xml:lang="ast">CD de videu</comment>
-    <comment xml:lang="be@latin">Videa CD</comment>
+    <comment xml:lang="be-Latn">Videa CD</comment>
     <comment xml:lang="bg">CD — видео</comment>
     <comment xml:lang="ca">Video CD</comment>
     <comment xml:lang="cs">Video CD</comment>
     <comment xml:lang="da">Video-cd</comment>
     <comment xml:lang="de">Video-CD</comment>
     <comment xml:lang="el">Video CD</comment>
-    <comment xml:lang="en_GB">Video CD</comment>
+    <comment xml:lang="en-GB">Video CD</comment>
     <comment xml:lang="eo">Video-KD</comment>
     <comment xml:lang="es">Video CD</comment>
     <comment xml:lang="eu">Bideo CDa</comment>
     <comment xml:lang="fi">Video CD</comment>
     <comment xml:lang="fo">Video CD</comment>
     <comment xml:lang="fr">CD vidéo</comment>
+    <comment xml:lang="fur">Video CD</comment>
     <comment xml:lang="ga">dlúthdhiosca físe</comment>
     <comment xml:lang="gl">Video CD</comment>
     <comment xml:lang="he">תקליטור וידאו</comment>
@@ -39861,7 +41342,7 @@
     <comment xml:lang="oc">CD vidèo</comment>
     <comment xml:lang="pl">Video CD</comment>
     <comment xml:lang="pt">Video CD</comment>
-    <comment xml:lang="pt_BR">CD de vídeo</comment>
+    <comment xml:lang="pt-BR">CD de vídeo</comment>
     <comment xml:lang="ro">CD video</comment>
     <comment xml:lang="ru">Видео CD</comment>
     <comment xml:lang="sk">Video CD</comment>
@@ -39872,32 +41353,36 @@
     <comment xml:lang="tr">Video CD</comment>
     <comment xml:lang="uk">Video CD</comment>
     <comment xml:lang="vi">Đĩa CD ảnh động</comment>
-    <comment xml:lang="zh_CN">VCD</comment>
-    <comment xml:lang="zh_TW">Video CD</comment>
+    <comment xml:lang="zh-CN">VCD</comment>
+    <comment xml:lang="zh-TW">Video CD</comment>
     <treemagic>
-      <treematch type="file" path="mpegav/AVSEQ01.DAT"/>
+      <treematch path="mpegav/AVSEQ01.DAT" type="file"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/video-svcd">
-    
+    <!-- TRANSLATORS: This is a brand-name, not a generic term. Please see
+         http://en.wikipedia.org/wiki/Super_Video_CD
+         http://everything2.com/index.pl?node_id=1009222 -->
     <comment>Super Video CD</comment>
+    <comment xml:lang="af">Super Video-CD</comment>
     <comment xml:lang="ar">Super Video CD</comment>
     <comment xml:lang="ast">CD de Super Video</comment>
-    <comment xml:lang="be@latin">Super Video CD</comment>
+    <comment xml:lang="be-Latn">Super Video CD</comment>
     <comment xml:lang="bg">CD — супер видео</comment>
     <comment xml:lang="ca">Super Video CD</comment>
     <comment xml:lang="cs">Super Video CD</comment>
     <comment xml:lang="da">Super Video-cd</comment>
     <comment xml:lang="de">Super-Video-CD</comment>
     <comment xml:lang="el">Super Video CD</comment>
-    <comment xml:lang="en_GB">Super Video CD</comment>
+    <comment xml:lang="en-GB">Super Video CD</comment>
     <comment xml:lang="eo">Super-Video-KD</comment>
     <comment xml:lang="es">Super Video CD</comment>
     <comment xml:lang="eu">Super Bideo CDa</comment>
     <comment xml:lang="fi">Super Video CD</comment>
     <comment xml:lang="fo">Super Video CD</comment>
     <comment xml:lang="fr">Super VCD</comment>
+    <comment xml:lang="fur">Super Video CD</comment>
     <comment xml:lang="ga">dlúthdhiosca Super Video</comment>
     <comment xml:lang="gl">Super vídeo CD</comment>
     <comment xml:lang="he">Super Video CD</comment>
@@ -39916,7 +41401,7 @@
     <comment xml:lang="oc">Super VCD</comment>
     <comment xml:lang="pl">Super Video CD</comment>
     <comment xml:lang="pt">Super Video CD</comment>
-    <comment xml:lang="pt_BR">CD de Super Vídeo (SVCD)</comment>
+    <comment xml:lang="pt-BR">CD de Super Vídeo (SVCD)</comment>
     <comment xml:lang="ro">Super Video CD</comment>
     <comment xml:lang="ru">Super Video CD</comment>
     <comment xml:lang="sk">Super Video CD</comment>
@@ -39927,32 +41412,34 @@
     <comment xml:lang="tr">Super Video CD</comment>
     <comment xml:lang="uk">Super Video CD</comment>
     <comment xml:lang="vi">Đĩa CD siêu ảnh động</comment>
-    <comment xml:lang="zh_CN">SVCD</comment>
-    <comment xml:lang="zh_TW">Super Video CD</comment>
+    <comment xml:lang="zh-CN">SVCD</comment>
+    <comment xml:lang="zh-TW">Super Video CD</comment>
     <treemagic>
-      <treematch type="file" path="MPEG2/AVSEQ01.MPG"/>
+      <treematch path="MPEG2/AVSEQ01.MPG" type="file"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/video-dvd">
-    
+    <!-- http://en.wikipedia.org/wiki/DVD-Video -->
     <comment>video DVD</comment>
+    <comment xml:lang="af">video-DVD</comment>
     <comment xml:lang="ar">DVD مرئي</comment>
     <comment xml:lang="ast">DVD de videu</comment>
-    <comment xml:lang="be@latin">videa DVD</comment>
+    <comment xml:lang="be-Latn">videa DVD</comment>
     <comment xml:lang="bg">DVD — видео</comment>
-    <comment xml:lang="ca">DVD-Video</comment>
+    <comment xml:lang="ca">DVD de video</comment>
     <comment xml:lang="cs">videodisk DVD</comment>
     <comment xml:lang="da">video-dvd</comment>
     <comment xml:lang="de">Video-DVD</comment>
     <comment xml:lang="el">Βίντεο DVD</comment>
-    <comment xml:lang="en_GB">video DVD</comment>
+    <comment xml:lang="en-GB">video DVD</comment>
     <comment xml:lang="eo">video-DVD</comment>
     <comment xml:lang="es">DVD de vídeo</comment>
     <comment xml:lang="eu">bideo DVDa</comment>
     <comment xml:lang="fi">video-DVD</comment>
     <comment xml:lang="fo">video DVD</comment>
     <comment xml:lang="fr">DVD vidéo</comment>
+    <comment xml:lang="fur">DVD video</comment>
     <comment xml:lang="ga">DVD físe</comment>
     <comment xml:lang="gl">DVD de vídeo</comment>
     <comment xml:lang="he">DVD וידאו</comment>
@@ -39972,7 +41459,7 @@
     <comment xml:lang="oc">DVD vidèo</comment>
     <comment xml:lang="pl">DVD-Video</comment>
     <comment xml:lang="pt">DVD vídeo</comment>
-    <comment xml:lang="pt_BR">DVD de vídeo</comment>
+    <comment xml:lang="pt-BR">DVD de vídeo</comment>
     <comment xml:lang="ro">DVD video</comment>
     <comment xml:lang="ru">Видео DVD</comment>
     <comment xml:lang="sk">DVD-Video</comment>
@@ -39983,34 +41470,36 @@
     <comment xml:lang="tr">video DVD</comment>
     <comment xml:lang="uk">відео-DVD</comment>
     <comment xml:lang="vi">đĩa DVD ảnh động</comment>
-    <comment xml:lang="zh_CN">视频 DVD</comment>
-    <comment xml:lang="zh_TW">視訊 DVD</comment>
+    <comment xml:lang="zh-CN">视频 DVD</comment>
+    <comment xml:lang="zh-TW">視訊 DVD</comment>
     <treemagic>
-      <treematch type="file" path="VIDEO_TS/VIDEO_TS.IFO"/>
-      <treematch type="file" path="VIDEO_TS/VIDEO_TS.IFO;1"/>
-      <treematch type="file" path="VIDEO_TS.IFO"/>
-      <treematch type="file" path="VIDEO_TS.IFO;1"/>
+      <treematch path="VIDEO_TS/VIDEO_TS.IFO" type="file"/>
+      <treematch path="VIDEO_TS/VIDEO_TS.IFO;1" type="file"/>
+      <treematch path="VIDEO_TS.IFO" type="file"/>
+      <treematch path="VIDEO_TS.IFO;1" type="file"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/audio-cdda">
-    
+    <!-- http://en.wikipedia.org/wiki/Red_Book_(audio_CD_standard) -->
     <comment>audio CD</comment>
+    <comment xml:lang="af">oudio-CD</comment>
     <comment xml:lang="ar">CD سمعي</comment>
-    <comment xml:lang="be@latin">aŭdyjo CD</comment>
+    <comment xml:lang="be-Latn">aŭdyjo CD</comment>
     <comment xml:lang="bg">CD — аудио</comment>
     <comment xml:lang="ca">CD d'àudio</comment>
     <comment xml:lang="cs">zvukové CD</comment>
     <comment xml:lang="da">lyd-cd</comment>
     <comment xml:lang="de">Audio-CD</comment>
     <comment xml:lang="el">CD ήχου</comment>
-    <comment xml:lang="en_GB">audio CD</comment>
+    <comment xml:lang="en-GB">audio CD</comment>
     <comment xml:lang="eo">Son-KD</comment>
-    <comment xml:lang="es">CD de sonido</comment>
+    <comment xml:lang="es">CD de audio</comment>
     <comment xml:lang="eu">Audio CDa</comment>
     <comment xml:lang="fi">ääni-CD</comment>
     <comment xml:lang="fo">audio CD</comment>
     <comment xml:lang="fr">CD audio</comment>
+    <comment xml:lang="fur">CD audio</comment>
     <comment xml:lang="ga">dlúthdhiosca fuaime</comment>
     <comment xml:lang="gl">CD de son</comment>
     <comment xml:lang="he">תקליטור שמע</comment>
@@ -40029,7 +41518,7 @@
     <comment xml:lang="oc">CD àudio</comment>
     <comment xml:lang="pl">CD-Audio</comment>
     <comment xml:lang="pt">CD áudio</comment>
-    <comment xml:lang="pt_BR">CD de áudio</comment>
+    <comment xml:lang="pt-BR">CD de áudio</comment>
     <comment xml:lang="ro">CD audio</comment>
     <comment xml:lang="ru">Аудио CD</comment>
     <comment xml:lang="sk">Zvukové CD</comment>
@@ -40037,30 +41526,32 @@
     <comment xml:lang="sq">CD audio</comment>
     <comment xml:lang="sr">звучни ЦД</comment>
     <comment xml:lang="sv">ljud-cd</comment>
-    <comment xml:lang="tr">Müzik CD'si</comment>
+    <comment xml:lang="tr">ses CD'si</comment>
     <comment xml:lang="uk">звуковий CD</comment>
     <comment xml:lang="vi">đĩa CD âm thanh</comment>
-    <comment xml:lang="zh_CN">音频 CD</comment>
-    <comment xml:lang="zh_TW">音訊 CD</comment>
+    <comment xml:lang="zh-CN">音频 CD</comment>
+    <comment xml:lang="zh-TW">音訊 CD</comment>
   </mime-type>
 
   <mime-type type="x-content/blank-cd">
-    
+    <!-- http://en.wikipedia.org/wiki/Compact_Disc -->
     <comment>blank CD disc</comment>
+    <comment xml:lang="af">skoon CD-skyf</comment>
     <comment xml:lang="ar">قرص CD فارغ</comment>
-    <comment xml:lang="be@latin">čysty dysk CD</comment>
+    <comment xml:lang="be-Latn">čysty dysk CD</comment>
     <comment xml:lang="bg">CD — празно</comment>
     <comment xml:lang="ca">disc CD en blanc</comment>
     <comment xml:lang="cs">prázdný disk CD</comment>
     <comment xml:lang="da">tom cd-disk</comment>
     <comment xml:lang="de">Leere CD</comment>
     <comment xml:lang="el">Κενό CD</comment>
-    <comment xml:lang="en_GB">blank CD disc</comment>
+    <comment xml:lang="en-GB">blank CD disc</comment>
     <comment xml:lang="es">disco CD en blanco</comment>
     <comment xml:lang="eu">CD disko hutsa</comment>
     <comment xml:lang="fi">tyhjä CD-levy</comment>
     <comment xml:lang="fo">blonk fløga</comment>
     <comment xml:lang="fr">CD vierge</comment>
+    <comment xml:lang="fur">disc CD vueit</comment>
     <comment xml:lang="ga">dlúthdhiosca folamh</comment>
     <comment xml:lang="gl">disco de CD en brancho</comment>
     <comment xml:lang="he">תקליטור ריק</comment>
@@ -40079,7 +41570,7 @@
     <comment xml:lang="oc">CD verge</comment>
     <comment xml:lang="pl">Pusta płyta CD</comment>
     <comment xml:lang="pt">CD vazio</comment>
-    <comment xml:lang="pt_BR">Disco CD vazio</comment>
+    <comment xml:lang="pt-BR">Disco CD vazio</comment>
     <comment xml:lang="ro">disc gol CD</comment>
     <comment xml:lang="ru">Чистый диск CD</comment>
     <comment xml:lang="sk">Prázdny disk CD</comment>
@@ -40090,27 +41581,29 @@
     <comment xml:lang="tr">boş CD diski</comment>
     <comment xml:lang="uk">порожній компакт-диск</comment>
     <comment xml:lang="vi">đĩa CD trống</comment>
-    <comment xml:lang="zh_CN">空 CD 光盘</comment>
-    <comment xml:lang="zh_TW">空白 CD 光碟</comment>
+    <comment xml:lang="zh-CN">空 CD 光盘</comment>
+    <comment xml:lang="zh-TW">空白 CD 光碟</comment>
   </mime-type>
 
   <mime-type type="x-content/blank-dvd">
-    
+    <!-- http://en.wikipedia.org/wiki/DVD -->
     <comment>blank DVD disc</comment>
+    <comment xml:lang="af">skoon DVD-skyf</comment>
     <comment xml:lang="ar">قرص DVD فارغ</comment>
-    <comment xml:lang="be@latin">čysty dysk DVD</comment>
+    <comment xml:lang="be-Latn">čysty dysk DVD</comment>
     <comment xml:lang="bg">DVD — празно</comment>
     <comment xml:lang="ca">disc DVD en blanc</comment>
     <comment xml:lang="cs">prázdný disk DVD</comment>
     <comment xml:lang="da">tom dvd-disk</comment>
     <comment xml:lang="de">Leere DVD</comment>
     <comment xml:lang="el">Κενό DVD</comment>
-    <comment xml:lang="en_GB">blank DVD disc</comment>
+    <comment xml:lang="en-GB">blank DVD disc</comment>
     <comment xml:lang="es">disco DVD en blanco</comment>
     <comment xml:lang="eu">DVD disko hutsa</comment>
     <comment xml:lang="fi">tyhjä DVD-levy</comment>
     <comment xml:lang="fo">blonk margfløga</comment>
     <comment xml:lang="fr">DVD vierge</comment>
+    <comment xml:lang="fur">disc DVD vueit</comment>
     <comment xml:lang="ga">DVD folamh</comment>
     <comment xml:lang="gl">disco de DVD en branco</comment>
     <comment xml:lang="he">תקליטור DVD ריק</comment>
@@ -40129,7 +41622,7 @@
     <comment xml:lang="oc">DVD verge</comment>
     <comment xml:lang="pl">Pusta płyta DVD</comment>
     <comment xml:lang="pt">DVD vazio</comment>
-    <comment xml:lang="pt_BR">Disco DVD vazio</comment>
+    <comment xml:lang="pt-BR">Disco DVD vazio</comment>
     <comment xml:lang="ro">disc gol DVD</comment>
     <comment xml:lang="ru">Чистый диск DVD</comment>
     <comment xml:lang="sk">Prázdny disk DVD</comment>
@@ -40140,27 +41633,29 @@
     <comment xml:lang="tr">boş DVD diski</comment>
     <comment xml:lang="uk">порожній диск DVD</comment>
     <comment xml:lang="vi">đĩa DVD trống</comment>
-    <comment xml:lang="zh_CN">空 DVD 光盘</comment>
-    <comment xml:lang="zh_TW">空白 DVD 光碟</comment>
+    <comment xml:lang="zh-CN">空 DVD 光盘</comment>
+    <comment xml:lang="zh-TW">空白 DVD 光碟</comment>
   </mime-type>
 
   <mime-type type="x-content/blank-bd">
-    
+    <!-- http://en.wikipedia.org/wiki/Blu-ray_Disc -->
     <comment>blank Blu-ray disc</comment>
+    <comment xml:lang="af">skoon Blu-ray-skyf</comment>
     <comment xml:lang="ar">قرص بلو-راي فارغ</comment>
-    <comment xml:lang="be@latin">čysty dysk Blu-ray</comment>
+    <comment xml:lang="be-Latn">čysty dysk Blu-ray</comment>
     <comment xml:lang="bg">Blu-ray — празно</comment>
     <comment xml:lang="ca">disc Blu-Ray en blanc</comment>
     <comment xml:lang="cs">prázdný disk Blu-ray</comment>
     <comment xml:lang="da">tom Blu-ray-disk</comment>
     <comment xml:lang="de">Leere Blu-ray-Scheibe</comment>
     <comment xml:lang="el">Κενό Blu-ray</comment>
-    <comment xml:lang="en_GB">blank Blu-ray disc</comment>
+    <comment xml:lang="en-GB">blank Blu-ray disc</comment>
     <comment xml:lang="es">disco Blu-ray en blanco</comment>
     <comment xml:lang="eu">Blu-ray disko hutsa</comment>
     <comment xml:lang="fi">tyhjä Blu-ray-levy</comment>
     <comment xml:lang="fo">blankur Blu-ray diskur</comment>
     <comment xml:lang="fr">disque Blu-Ray vierge</comment>
+    <comment xml:lang="fur">disc Blu-ray vueit</comment>
     <comment xml:lang="ga">diosca folamh Blu-Ray</comment>
     <comment xml:lang="gl">disco Blu-ray en branco</comment>
     <comment xml:lang="he">תקליטור בלו־ריי ריק</comment>
@@ -40179,7 +41674,7 @@
     <comment xml:lang="oc">disc Blu-Ray verge</comment>
     <comment xml:lang="pl">Pusta płyta Blu-ray</comment>
     <comment xml:lang="pt">Blu-Ray vazio</comment>
-    <comment xml:lang="pt_BR">Disco Blu-ray vazio</comment>
+    <comment xml:lang="pt-BR">Disco Blu-ray vazio</comment>
     <comment xml:lang="ro">disc gol Blu-ray</comment>
     <comment xml:lang="ru">Чистый диск Blu-ray</comment>
     <comment xml:lang="sk">Prázdny disk Blu-ray</comment>
@@ -40187,30 +41682,32 @@
     <comment xml:lang="sq">Disk bosh Blu-ray</comment>
     <comment xml:lang="sr">празан Блу-реј диск</comment>
     <comment xml:lang="sv">tom Blu-ray-skiva</comment>
-    <comment xml:lang="tr">boş Blue-ray diski</comment>
+    <comment xml:lang="tr">boş Blu-ray diski</comment>
     <comment xml:lang="uk">порожній диск Blu-ray</comment>
     <comment xml:lang="vi">đĩa Blu-ray trống</comment>
-    <comment xml:lang="zh_CN">空蓝光 DVD</comment>
-    <comment xml:lang="zh_TW">空白 Blu-ray 光碟</comment>
+    <comment xml:lang="zh-CN">空蓝光 DVD</comment>
+    <comment xml:lang="zh-TW">空白 Blu-ray 光碟</comment>
   </mime-type>
 
   <mime-type type="x-content/blank-hddvd">
-    
+    <!-- http://en.wikipedia.org/wiki/HD_DVD -->
     <comment>blank HD DVD disc</comment>
+    <comment xml:lang="af">skoon HD-DVD-skyf</comment>
     <comment xml:lang="ar">قرص HD DVD فارغ</comment>
-    <comment xml:lang="be@latin">čysty dysk HD DVD</comment>
+    <comment xml:lang="be-Latn">čysty dysk HD DVD</comment>
     <comment xml:lang="bg">HD DVD — празно</comment>
     <comment xml:lang="ca">disc HD-DVD en blanc</comment>
     <comment xml:lang="cs">prázdný disk HD DVD</comment>
     <comment xml:lang="da">tom HD dvd-disk</comment>
     <comment xml:lang="de">Leere HD-DVD</comment>
     <comment xml:lang="el">Κενό HD DVD</comment>
-    <comment xml:lang="en_GB">blank HD DVD disc</comment>
+    <comment xml:lang="en-GB">blank HD DVD disc</comment>
     <comment xml:lang="es">disco HD DVD en blanco</comment>
     <comment xml:lang="eu">HD DVD disko hutsa</comment>
     <comment xml:lang="fi">tyhjä HD DVD -levy</comment>
     <comment xml:lang="fo">blankur HD DVD diskur</comment>
     <comment xml:lang="fr">disque HD-DVD vierge</comment>
+    <comment xml:lang="fur">disc HD DVD vueit</comment>
     <comment xml:lang="ga">HD DVD folamh</comment>
     <comment xml:lang="gl">disco de HD DVD en branco</comment>
     <comment xml:lang="he">דיסק HD DVD ריק</comment>
@@ -40229,7 +41726,7 @@
     <comment xml:lang="oc">disc HD-DVD verge</comment>
     <comment xml:lang="pl">Pusta płyta HD DVD</comment>
     <comment xml:lang="pt">HD DVD vazio</comment>
-    <comment xml:lang="pt_BR">Disco HD DVD vazio</comment>
+    <comment xml:lang="pt-BR">Disco HD DVD vazio</comment>
     <comment xml:lang="ro">disc gol HD DVD</comment>
     <comment xml:lang="ru">Чистый диск HD DVD</comment>
     <comment xml:lang="sk">Prázdny disk HD DVD</comment>
@@ -40240,28 +41737,30 @@
     <comment xml:lang="tr">boş HD DVD diski</comment>
     <comment xml:lang="uk">порожній диск HD DVD</comment>
     <comment xml:lang="vi">đĩa DVD HD trống</comment>
-    <comment xml:lang="zh_CN">空 HD DVD 光盘</comment>
-    <comment xml:lang="zh_TW">空白 HD DVD 光碟</comment>
+    <comment xml:lang="zh-CN">空 HD DVD 光盘</comment>
+    <comment xml:lang="zh-TW">空白 HD DVD 光碟</comment>
   </mime-type>
 
   <mime-type type="x-content/audio-dvd">
-    
+    <!-- http://en.wikipedia.org/wiki/DVD-Audio -->
     <comment>audio DVD</comment>
+    <comment xml:lang="af">oudio-DVD</comment>
     <comment xml:lang="ar">DVD سمعي</comment>
-    <comment xml:lang="be@latin">aŭdyjo DVD</comment>
+    <comment xml:lang="be-Latn">aŭdyjo DVD</comment>
     <comment xml:lang="bg">DVD — аудио</comment>
     <comment xml:lang="ca">DVD d'àudio</comment>
     <comment xml:lang="cs">zvukové DVD</comment>
     <comment xml:lang="da">lyd-dvd</comment>
     <comment xml:lang="de">Audio-DVD</comment>
     <comment xml:lang="el">DVD ήχου</comment>
-    <comment xml:lang="en_GB">audio DVD</comment>
+    <comment xml:lang="en-GB">audio DVD</comment>
     <comment xml:lang="eo">Son-DVD</comment>
-    <comment xml:lang="es">DVD de sonido</comment>
+    <comment xml:lang="es">DVD de audio</comment>
     <comment xml:lang="eu">audio DVDa</comment>
     <comment xml:lang="fi">ääni-DVD</comment>
     <comment xml:lang="fo">Ljóð DVD</comment>
     <comment xml:lang="fr">DVD audio</comment>
+    <comment xml:lang="fur">DVD audio</comment>
     <comment xml:lang="ga">DVD fuaime</comment>
     <comment xml:lang="gl">DVD de son</comment>
     <comment xml:lang="he">DVD שמע</comment>
@@ -40280,7 +41779,7 @@
     <comment xml:lang="oc">DVD àudio</comment>
     <comment xml:lang="pl">DVD-Audio</comment>
     <comment xml:lang="pt">DVD áudio</comment>
-    <comment xml:lang="pt_BR">DVD de áudio</comment>
+    <comment xml:lang="pt-BR">DVD de áudio</comment>
     <comment xml:lang="ro">DVD audio</comment>
     <comment xml:lang="ru">Аудио DVD</comment>
     <comment xml:lang="sk">Zvukové DVD</comment>
@@ -40288,35 +41787,38 @@
     <comment xml:lang="sq">DVD audio</comment>
     <comment xml:lang="sr">звучни ДВД</comment>
     <comment xml:lang="sv">ljud-dvd</comment>
-    <comment xml:lang="tr">Müzik DVD'si</comment>
+    <comment xml:lang="tr">ses DVD'si</comment>
     <comment xml:lang="uk">звуковий DVD</comment>
     <comment xml:lang="vi">đĩa DVD âm thanh</comment>
-    <comment xml:lang="zh_CN">音频 DVD</comment>
-    <comment xml:lang="zh_TW">音訊 DVD</comment>
+    <comment xml:lang="zh-CN">音频 DVD</comment>
+    <comment xml:lang="zh-TW">音訊 DVD</comment>
     <treemagic>
-      <treematch type="file" path="AUDIO_TS/AUDIO_TS.IFO"/>
-      <treematch type="file" path="AUDIO_TS/AUDIO_TS.IFO;1"/>
+      <treematch path="AUDIO_TS/AUDIO_TS.IFO" type="file"/>
+      <treematch path="AUDIO_TS/AUDIO_TS.IFO;1" type="file"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/video-bluray">
-    
+    <!-- http://en.wikipedia.org/wiki/Blu-ray_Disc
+         http://www.blu-raydisc.com/Section-13470/Section-13890/Index.html -->
     <comment>Blu-ray video disc</comment>
+    <comment xml:lang="af">Blu-ray-videoskyf</comment>
     <comment xml:lang="ar">قرص بلو-راي مرئي</comment>
     <comment xml:lang="ast">Discu Blu-ray de videu</comment>
-    <comment xml:lang="be@latin">Videadysk Blu-ray</comment>
+    <comment xml:lang="be-Latn">Videadysk Blu-ray</comment>
     <comment xml:lang="bg">Blu-ray — видео</comment>
     <comment xml:lang="ca">disc de vídeo Blu-Ray</comment>
     <comment xml:lang="cs">videodisk Blu-ray</comment>
-    <comment xml:lang="da">Blu-ray video-disk</comment>
+    <comment xml:lang="da">Blu-ray-videodisk</comment>
     <comment xml:lang="de">Blu-ray-Videoscheibe</comment>
     <comment xml:lang="el">Δίσκος βίντεο Blu-ray</comment>
-    <comment xml:lang="en_GB">Blu-ray video disc</comment>
+    <comment xml:lang="en-GB">Blu-ray video disc</comment>
     <comment xml:lang="es">disco de vídeo Blu-ray</comment>
     <comment xml:lang="eu">Blu-ray bideo-diskoa</comment>
     <comment xml:lang="fi">Blu-ray-videolevy</comment>
     <comment xml:lang="fo">Blu-ray diskur</comment>
     <comment xml:lang="fr">disque vidéo Blu-Ray</comment>
+    <comment xml:lang="fur">disc video Blu-ray</comment>
     <comment xml:lang="ga">diosca físe Blu-Ray</comment>
     <comment xml:lang="gl">disco de vídeo Blu-ray</comment>
     <comment xml:lang="he">תקליטור וידאו מסוג בלו־ריי</comment>
@@ -40336,7 +41838,7 @@
     <comment xml:lang="oc">disc vidèo Blu-Ray</comment>
     <comment xml:lang="pl">Płyta wideo Blu-ray</comment>
     <comment xml:lang="pt">Blu-ray de vídeo</comment>
-    <comment xml:lang="pt_BR">Disco de vídeo Blu-ray</comment>
+    <comment xml:lang="pt-BR">Disco de vídeo Blu-ray</comment>
     <comment xml:lang="ro">Disc video Blu-ray</comment>
     <comment xml:lang="ru">Видеодиск Blu-ray</comment>
     <comment xml:lang="sk">Videodisk Blu-ray</comment>
@@ -40347,32 +41849,35 @@
     <comment xml:lang="tr">Blu-ray video diski</comment>
     <comment xml:lang="uk">відеодиск Blu-ray</comment>
     <comment xml:lang="vi">Đĩa ảnh động Blu-ray</comment>
-    <comment xml:lang="zh_CN">蓝光视频光盘</comment>
-    <comment xml:lang="zh_TW">Blu-ray 視訊光碟</comment>
+    <comment xml:lang="zh-CN">蓝光视频光盘</comment>
+    <comment xml:lang="zh-TW">Blu-ray 視訊光碟</comment>
     <treemagic>
-      <treematch type="directory" path="BDAV" non-empty="true"/>
-      <treematch type="directory" path="BDMV" non-empty="true"/>
+      <treematch path="BDAV" type="directory" non-empty="true"/>
+      <treematch path="BDMV" type="directory" non-empty="true"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/video-hddvd">
-    
+    <!-- http://en.wikipedia.org/wiki/HD_DVD
+         http://www.dvdafteredit.com/wiki/The_HVDVD_TS_Folder -->
     <comment>HD DVD video disc</comment>
+    <comment xml:lang="af">HD-DVD-videoskyf</comment>
     <comment xml:lang="ar">قرص HD DVD مرئي</comment>
     <comment xml:lang="ast">Discu HD DVD de videu</comment>
-    <comment xml:lang="be@latin">Videadysk HD DVD</comment>
+    <comment xml:lang="be-Latn">Videadysk HD DVD</comment>
     <comment xml:lang="bg">HD DVD — видео</comment>
     <comment xml:lang="ca">disc de vídeo HD-DVD</comment>
     <comment xml:lang="cs">Videodisk HD DVD</comment>
     <comment xml:lang="da">HD DVD-videodisk</comment>
     <comment xml:lang="de">HD-DVD-Videoscheibe</comment>
     <comment xml:lang="el">Δίσκος βίντεο HD DVD</comment>
-    <comment xml:lang="en_GB">HD DVD video disc</comment>
+    <comment xml:lang="en-GB">HD DVD video disc</comment>
     <comment xml:lang="es">disco de vídeo HD DVD</comment>
     <comment xml:lang="eu">HD DVD bideo-diskoa</comment>
     <comment xml:lang="fi">HD DVD -videolevy</comment>
     <comment xml:lang="fo">HD DVD video diskur</comment>
     <comment xml:lang="fr">disque vidéo HD DVD</comment>
+    <comment xml:lang="fur">disc video HD DVD</comment>
     <comment xml:lang="ga">diosca físe HD DVD</comment>
     <comment xml:lang="gl">disco de vídeo HD DVD</comment>
     <comment xml:lang="he">תקליטור וידאו HD DVD</comment>
@@ -40391,7 +41896,7 @@
     <comment xml:lang="oc">disc vidèo HD DVD</comment>
     <comment xml:lang="pl">Płyta wideo HD DVD</comment>
     <comment xml:lang="pt">HD DVD de vídeo</comment>
-    <comment xml:lang="pt_BR">Disco de vídeo HD DVD</comment>
+    <comment xml:lang="pt-BR">Disco de vídeo HD DVD</comment>
     <comment xml:lang="ro">Disc video HD DVD</comment>
     <comment xml:lang="ru">Видеодиск HD DVD</comment>
     <comment xml:lang="sk">Videodisk HD DVD</comment>
@@ -40402,36 +41907,38 @@
     <comment xml:lang="tr">HD DVD vidyo diski</comment>
     <comment xml:lang="uk">відеодиск HD DVD</comment>
     <comment xml:lang="vi">Đĩa ảnh động DVD HD</comment>
-    <comment xml:lang="zh_CN">HD DVD 视频光盘</comment>
-    <comment xml:lang="zh_TW">HD DVD 視訊光碟</comment>
+    <comment xml:lang="zh-CN">HD DVD 视频光盘</comment>
+    <comment xml:lang="zh-TW">HD DVD 視訊光碟</comment>
     <treemagic>
-      <treematch type="file" path="HVDVD_TS/HV000I01.IFO"/>
-      <treematch type="file" path="HVDVD_TS/HV001I01.IFO"/>
-      <treematch type="file" path="HVDVD_TS/HVA00001.VTI"/>
+      <treematch path="HVDVD_TS/HV000I01.IFO" type="file"/>
+      <treematch path="HVDVD_TS/HV001I01.IFO" type="file"/>
+      <treematch path="HVDVD_TS/HVA00001.VTI" type="file"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/ebook-reader">
-    
+    <!-- see fd.o hal spec -->
     <comment>e-book reader</comment>
+    <comment xml:lang="af">e-boekleser</comment>
     <comment xml:lang="bg">Четец на е-книги</comment>
     <comment xml:lang="ca">lector de llibres electrònics</comment>
     <comment xml:lang="cs">čtečka elektronických knih</comment>
     <comment xml:lang="da">e-bogslæser</comment>
     <comment xml:lang="de">E-Book-Leser</comment>
     <comment xml:lang="el">Αναγνώστης ηλεκτρονικών βιβλίων</comment>
-    <comment xml:lang="en_GB">e-book reader</comment>
+    <comment xml:lang="en-GB">e-book reader</comment>
     <comment xml:lang="es">lector de libros electrónicos</comment>
     <comment xml:lang="eu">e-book irakurlea</comment>
     <comment xml:lang="fi">e-kirjan lukulaite</comment>
     <comment xml:lang="fr">lecteur de livre numérique</comment>
+    <comment xml:lang="fur">letôr e-book</comment>
     <comment xml:lang="ga">léitheoir r-leabhair</comment>
     <comment xml:lang="gl">lector de libros electrónicos</comment>
     <comment xml:lang="he">קורא ספרים אלקטרוניים</comment>
     <comment xml:lang="hr">Čitač e-knjiga</comment>
     <comment xml:lang="hu">e-könyvolvasó</comment>
     <comment xml:lang="ia">Lector de libro electronic</comment>
-    <comment xml:lang="id">Pembaca e-book</comment>
+    <comment xml:lang="id">pembaca e-book</comment>
     <comment xml:lang="it">Lettore e-book</comment>
     <comment xml:lang="ja">電子書籍リーダー</comment>
     <comment xml:lang="kk">электронды кітаптарды оқу құрылғысы</comment>
@@ -40441,7 +41948,7 @@
     <comment xml:lang="oc">lector de libre numeric</comment>
     <comment xml:lang="pl">Czytnik e-booków</comment>
     <comment xml:lang="pt">leitor de ebooks</comment>
-    <comment xml:lang="pt_BR">Leitor de e-book</comment>
+    <comment xml:lang="pt-BR">Leitor de e-book</comment>
     <comment xml:lang="ru">Устройство для чтения электронных книг</comment>
     <comment xml:lang="sk">Čítačka e-kníh</comment>
     <comment xml:lang="sl">Bralnik elektronskih knjig</comment>
@@ -40449,31 +41956,35 @@
     <comment xml:lang="sv">e-bokläsare</comment>
     <comment xml:lang="tr">e-kitap okuyucu</comment>
     <comment xml:lang="uk">пристрій для читання електронних книг</comment>
-    <comment xml:lang="zh_CN">电子书阅读器</comment>
-    <comment xml:lang="zh_TW">e-book 閱讀器</comment>
+    <comment xml:lang="zh-CN">电子书阅读器</comment>
+    <comment xml:lang="zh-TW">e-book 閱讀器</comment>
     <treemagic>
-      <treematch type="directory" path=".kobo" non-empty="true"/>
+      <treematch path=".kobo" type="directory" non-empty="true"/>
       <treematch path="system/com.amazon.ebook.booklet.reader" non-empty="false"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/image-picturecd">
-    
+    <!-- TRANSLATORS: This is a brand-name, not a generic term. Please see
+         http://en.wikipedia.org/wiki/Picture_CD
+         http://www.re.org/kristin/picturecd.html  -->
     <comment>Picture CD</comment>
+    <comment xml:lang="af">Picture CD</comment>
     <comment xml:lang="ar">Picture CD</comment>
-    <comment xml:lang="be@latin">Picture CD</comment>
-    <comment xml:lang="bg">CD — изображения</comment>
-    <comment xml:lang="ca">Picture CD</comment>
+    <comment xml:lang="be-Latn">Picture CD</comment>
+    <comment xml:lang="bg">Picture CD — изображения</comment>
+    <comment xml:lang="ca">CD d'imatges</comment>
     <comment xml:lang="cs">Picture CD</comment>
     <comment xml:lang="da">Billedcd</comment>
     <comment xml:lang="de">Picture CD</comment>
     <comment xml:lang="el">CD εικόνων</comment>
-    <comment xml:lang="en_GB">Picture CD</comment>
+    <comment xml:lang="en-GB">Picture CD</comment>
     <comment xml:lang="es">Picture CD</comment>
     <comment xml:lang="eu">Picture CD</comment>
     <comment xml:lang="fi">Picture CD</comment>
     <comment xml:lang="fo">Picture CD</comment>
     <comment xml:lang="fr">CD Picture</comment>
+    <comment xml:lang="fur">Picture CD</comment>
     <comment xml:lang="ga">dlúthdhiosca grianghraf</comment>
     <comment xml:lang="gl">Picture CD</comment>
     <comment xml:lang="he">תקליטור תמונות</comment>
@@ -40492,7 +42003,7 @@
     <comment xml:lang="oc">CD Picture</comment>
     <comment xml:lang="pl">Picture CD</comment>
     <comment xml:lang="pt">Picture CD</comment>
-    <comment xml:lang="pt_BR">CD de Fotos</comment>
+    <comment xml:lang="pt-BR">CD de Fotos</comment>
     <comment xml:lang="ro">CD cu fotografii</comment>
     <comment xml:lang="ru">Picture CD</comment>
     <comment xml:lang="sk">Picture CD</comment>
@@ -40503,30 +42014,32 @@
     <comment xml:lang="tr">Resim CD'si</comment>
     <comment xml:lang="uk">CD з зображеннями</comment>
     <comment xml:lang="vi">Đĩa CD ảnh</comment>
-    <comment xml:lang="zh_CN">柯达 Picture CD</comment>
-    <comment xml:lang="zh_TW">圖片 CD</comment>
+    <comment xml:lang="zh-CN">柯达 Picture CD</comment>
+    <comment xml:lang="zh-TW">圖片 CD</comment>
     <treemagic>
-      <treematch type="directory" path="PICTURES" non-empty="true" match-case="true"/>
+      <treematch path="PICTURES" type="directory" non-empty="true" match-case="true"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/audio-player">
-    
+    <!-- see fd.o hal spec -->
     <comment>portable audio player</comment>
+    <comment xml:lang="af">draagbare oudiospeler</comment>
     <comment xml:lang="ar">مشغل الملفات المسموعة المحمولة</comment>
-    <comment xml:lang="be@latin">pieranosny aŭdyjoplayer</comment>
+    <comment xml:lang="be-Latn">pieranosny aŭdyjoplayer</comment>
     <comment xml:lang="bg">Преносим аудио плеър</comment>
     <comment xml:lang="ca">reproductor d'àudio portàtil</comment>
     <comment xml:lang="cs">přenosný zvukový přehrávač</comment>
     <comment xml:lang="da">bærbar lydafspiller</comment>
     <comment xml:lang="de">Portables Audio-Wiedergabegerät</comment>
     <comment xml:lang="el">Φορητός αναπαραγωγέας μουσικής</comment>
-    <comment xml:lang="en_GB">portable audio player</comment>
-    <comment xml:lang="es">dispositivo de sonido portátil</comment>
+    <comment xml:lang="en-GB">portable audio player</comment>
+    <comment xml:lang="es">reproductor de audio portátil</comment>
     <comment xml:lang="eu">audio erreproduzigailu eramangarria</comment>
     <comment xml:lang="fi">siirrettävä äänisoitin</comment>
     <comment xml:lang="fo">leysur ljóðavspælari</comment>
     <comment xml:lang="fr">lecteur audio portable</comment>
+    <comment xml:lang="fur">riprodutôr audio portatil</comment>
     <comment xml:lang="ga">seinnteoir iniompartha fuaime</comment>
     <comment xml:lang="gl">dispositivo de son portábel</comment>
     <comment xml:lang="he">נגן מוזיקה נייד</comment>
@@ -40545,7 +42058,7 @@
     <comment xml:lang="oc">lector àudio portable</comment>
     <comment xml:lang="pl">Przenośny odtwarzacz dźwięku</comment>
     <comment xml:lang="pt">reprodutor áudio portátil</comment>
-    <comment xml:lang="pt_BR">Reprodutor de áudio portátil</comment>
+    <comment xml:lang="pt-BR">Reprodutor de áudio portátil</comment>
     <comment xml:lang="ro">player audio portabil</comment>
     <comment xml:lang="ru">Портативный аудиопроигрыватель</comment>
     <comment xml:lang="sk">Prenosný hudobný prehrávač</comment>
@@ -40556,27 +42069,62 @@
     <comment xml:lang="tr">taşınabilir ses oynatıcısı</comment>
     <comment xml:lang="uk">портативний аудіопрогравач</comment>
     <comment xml:lang="vi">bộ phát nhạc di động</comment>
-    <comment xml:lang="zh_CN">便携式音频播放器</comment>
-    <comment xml:lang="zh_TW">可攜式音訊播放程式</comment>
+    <comment xml:lang="zh-CN">便携式音频播放器</comment>
+    <comment xml:lang="zh-TW">可攜式音訊播放程式</comment>
+  </mime-type>
+
+  <mime-type type="x-content/ostree-repository">
+    <!-- https://github.com/ostreedev/ostree/blob/master/man/ostree-create-usb.xml -->
+    <comment>OSTree software updates</comment>
+    <comment xml:lang="bg">Обновление — OSTree</comment>
+    <comment xml:lang="ca">actualitzacions de programari OSTree</comment>
+    <comment xml:lang="da">OSTree-softwareopdateringer</comment>
+    <comment xml:lang="de">OSTree-Softwareaktualisierungen</comment>
+    <comment xml:lang="en-GB">OSTree software updates</comment>
+    <comment xml:lang="es">actualizaciones de programas de OSTree</comment>
+    <comment xml:lang="eu">OSTree software eguneraketak</comment>
+    <comment xml:lang="fi">OSTree-ohjelmistopäivitykset</comment>
+    <comment xml:lang="fr">mises à jour logicielles OSTree</comment>
+    <comment xml:lang="hr">OSTree nadopune softvera</comment>
+    <comment xml:lang="hu">OSTree szoftverfrissítések</comment>
+    <comment xml:lang="id">Pemutakhiran perangkat lunak OSTree</comment>
+    <comment xml:lang="it">Aggiornamenti software OSTree</comment>
+    <comment xml:lang="kk">OSTree бағдарламалық қамтама жаңартулары</comment>
+    <comment xml:lang="ko">OSTree 소프트웨어 업데이트</comment>
+    <comment xml:lang="pl">Aktualizacje oprogramowania OSTree</comment>
+    <comment xml:lang="pt-BR">Atualizações de software OSTree</comment>
+    <comment xml:lang="sv">OSTree programvaruuppdateringar</comment>
+    <comment xml:lang="tr">OSTree yazılım güncellemeleri</comment>
+    <comment xml:lang="uk">оновлення програмного забезпечення OSTree</comment>
+    <comment xml:lang="zh-CN">OSTree 软件更新</comment>
+    <comment xml:lang="zh-TW">OSTree 軟體更新</comment>
+    <treemagic>
+      <treematch path=".ostree" type="directory" non-empty="true" match-case="true"/>
+      <treematch path="ostree/repo" type="directory" non-empty="true" match-case="true"/>
+      <treematch path="var/lib/flatpak/repo" type="directory" non-empty="true" match-case="true"/>
+    </treemagic>
   </mime-type>
 
   <mime-type type="x-content/software">
-    
+    <!-- http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
+         http://bugzilla.gnome.org/show_bug.cgi?id=509823#c3 -->
     <comment>software</comment>
+    <comment xml:lang="af">sagteware</comment>
     <comment xml:lang="ar">برنامج</comment>
-    <comment xml:lang="be@latin">prahrama</comment>
+    <comment xml:lang="be-Latn">prahrama</comment>
     <comment xml:lang="bg">Софтуер</comment>
     <comment xml:lang="ca">programari</comment>
     <comment xml:lang="cs">software</comment>
     <comment xml:lang="da">software</comment>
     <comment xml:lang="de">Software</comment>
     <comment xml:lang="el">Λογισμικό</comment>
-    <comment xml:lang="en_GB">software</comment>
+    <comment xml:lang="en-GB">software</comment>
     <comment xml:lang="es">software</comment>
     <comment xml:lang="eu">softwarea</comment>
     <comment xml:lang="fi">ohjelmisto</comment>
     <comment xml:lang="fo">ritbúnaður</comment>
     <comment xml:lang="fr">logiciel</comment>
+    <comment xml:lang="fur">software</comment>
     <comment xml:lang="ga">bogearraí</comment>
     <comment xml:lang="gl">software</comment>
     <comment xml:lang="he">תכנה</comment>
@@ -40596,7 +42144,7 @@
     <comment xml:lang="oc">logicial</comment>
     <comment xml:lang="pl">Oprogramowanie</comment>
     <comment xml:lang="pt">programa</comment>
-    <comment xml:lang="pt_BR">Aplicativo</comment>
+    <comment xml:lang="pt-BR">Aplicativo</comment>
     <comment xml:lang="ro">software</comment>
     <comment xml:lang="ru">Программное обеспечение</comment>
     <comment xml:lang="sk">Softvér</comment>
@@ -40607,26 +42155,29 @@
     <comment xml:lang="tr">yazılım</comment>
     <comment xml:lang="uk">програмне забезпечення</comment>
     <comment xml:lang="vi">phần mềm</comment>
-    <comment xml:lang="zh_CN">软件</comment>
-    <comment xml:lang="zh_TW">軟體</comment>
+    <comment xml:lang="zh-CN">软件</comment>
+    <comment xml:lang="zh-TW">軟體</comment>
   </mime-type>
 
   <mime-type type="x-content/unix-software">
-    
+    <!-- http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
+         http://bugzilla.gnome.org/show_bug.cgi?id=509823#c3 -->
     <comment>UNIX software</comment>
+    <comment xml:lang="af">UNIX-sagteware</comment>
     <comment xml:lang="ar">برنامج يونكس</comment>
-    <comment xml:lang="bg">Софтуер за UNIX</comment>
+    <comment xml:lang="bg">Софтуер — UNIX</comment>
     <comment xml:lang="ca">programari d'UNIX</comment>
     <comment xml:lang="cs">software systému UNIX</comment>
     <comment xml:lang="da">UNIX-programmer</comment>
     <comment xml:lang="de">UNIX-Software</comment>
     <comment xml:lang="el">Λογισμικό UNIX</comment>
-    <comment xml:lang="en_GB">UNIX software</comment>
+    <comment xml:lang="en-GB">UNIX software</comment>
     <comment xml:lang="es">software de UNIX</comment>
     <comment xml:lang="eu">UNIXeko softwarea</comment>
     <comment xml:lang="fi">UNIX-ohjelmisto</comment>
     <comment xml:lang="fo">UNIX ritbúnaður</comment>
     <comment xml:lang="fr">logiciel UNIX</comment>
+    <comment xml:lang="fur">software UNIX</comment>
     <comment xml:lang="ga">bogearraí UNIX</comment>
     <comment xml:lang="gl">Software de UNIX</comment>
     <comment xml:lang="he">תכנה ל־UNIX</comment>
@@ -40644,7 +42195,7 @@
     <comment xml:lang="oc">logicial UNIX</comment>
     <comment xml:lang="pl">Oprogramowanie systemu UNIX</comment>
     <comment xml:lang="pt">programa UNIX</comment>
-    <comment xml:lang="pt_BR">Aplicativo UNIX</comment>
+    <comment xml:lang="pt-BR">Aplicativo UNIX</comment>
     <comment xml:lang="ro">Software UNIX</comment>
     <comment xml:lang="ru">Программа UNIX</comment>
     <comment xml:lang="sk">Softvér UNIX</comment>
@@ -40653,19 +42204,21 @@
     <comment xml:lang="sv">UNIX-programvara</comment>
     <comment xml:lang="tr">UNIX yazılımı</comment>
     <comment xml:lang="uk">програмне забезпечення UNIX</comment>
-    <comment xml:lang="zh_CN">UNIX 软件</comment>
-    <comment xml:lang="zh_TW">UNIX 軟體</comment>
+    <comment xml:lang="zh-CN">UNIX 软件</comment>
+    <comment xml:lang="zh-TW">UNIX 軟體</comment>
     <sub-class-of type="x-content/software"/>
     <treemagic>
-      <treematch type="file" path=".autorun" match-case="true"/>
-      <treematch type="file" path="autorun" match-case="true"/>
-      <treematch type="file" path="autorun.sh" match-case="true"/>
+      <treematch path=".autorun" type="file" match-case="true"/>
+      <treematch path="autorun" type="file" match-case="true"/>
+      <treematch path="autorun.sh" type="file" match-case="true"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="x-content/win32-software">
-    
+    <!-- http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
+         http://bugzilla.gnome.org/show_bug.cgi?id=509823#c3 -->
     <comment>Windows software</comment>
+    <comment xml:lang="af">Windows-sagteware</comment>
     <comment xml:lang="ar">برنامج ويندوز</comment>
     <comment xml:lang="bg">Софтуер — Windows</comment>
     <comment xml:lang="ca">programari de Windows</comment>
@@ -40673,12 +42226,13 @@
     <comment xml:lang="da">Windowsprogram</comment>
     <comment xml:lang="de">Windows-Software</comment>
     <comment xml:lang="el">Λογισμικό Windows</comment>
-    <comment xml:lang="en_GB">Windows software</comment>
+    <comment xml:lang="en-GB">Windows software</comment>
     <comment xml:lang="es">software de Windows</comment>
     <comment xml:lang="eu">Windows-eko softwarea</comment>
     <comment xml:lang="fi">Windows-ohjelmisto</comment>
     <comment xml:lang="fo">Windows ritbúnaður</comment>
     <comment xml:lang="fr">logiciel Windows</comment>
+    <comment xml:lang="fur">software Windows</comment>
     <comment xml:lang="ga">bogearraí Windows</comment>
     <comment xml:lang="gl">Software de Windows</comment>
     <comment xml:lang="he">תכנה ל־Windows</comment>
@@ -40696,7 +42250,7 @@
     <comment xml:lang="oc">logicial Windows</comment>
     <comment xml:lang="pl">Oprogramowanie systemu Windows</comment>
     <comment xml:lang="pt">programa Windows</comment>
-    <comment xml:lang="pt_BR">Programa do Windows</comment>
+    <comment xml:lang="pt-BR">Programa do Windows</comment>
     <comment xml:lang="ro">Software Windows</comment>
     <comment xml:lang="ru">Программа Windows</comment>
     <comment xml:lang="sk">Softvér Windows</comment>
@@ -40705,28 +42259,31 @@
     <comment xml:lang="sv">Windows-program</comment>
     <comment xml:lang="tr">Windows yazılımı</comment>
     <comment xml:lang="uk">програмне забезпечення Windows</comment>
-    <comment xml:lang="zh_CN">Windows 软件</comment>
-    <comment xml:lang="zh_TW">Windows 軟體</comment>
+    <comment xml:lang="zh-CN">Windows 软件</comment>
+    <comment xml:lang="zh-TW">Windows 軟體</comment>
     <sub-class-of type="x-content/software"/>
     <treemagic>
-      <treematch type="file" path="autorun.exe" executable="true"/>
-      <treematch type="file" path="autorun.inf"/>
+      <treematch path="autorun.exe" type="file" executable="true"/>
+      <treematch path="autorun.inf" type="file"/>
     </treemagic>
   </mime-type>
 
   <mime-type type="application/trig">
     <comment>TriG RDF document</comment>
+    <comment xml:lang="af">TriG RDF-dokument</comment>
     <comment xml:lang="ast">Documentu RDF TriG</comment>
+    <comment xml:lang="bg">Документ — TriG RDF</comment>
     <comment xml:lang="ca">document TriG RDF</comment>
     <comment xml:lang="cs">dokument Trig RDF</comment>
     <comment xml:lang="da">TriG RDF-dokument</comment>
     <comment xml:lang="de">TriG-RDF-Dokument</comment>
     <comment xml:lang="el">Έγγραφο TriG RDF</comment>
-    <comment xml:lang="en_GB">TriG RDF document</comment>
+    <comment xml:lang="en-GB">TriG RDF document</comment>
     <comment xml:lang="es">documento RDF de TriG</comment>
     <comment xml:lang="eu">TriG RDF dokumentua</comment>
     <comment xml:lang="fi">TriG RDF -asiakirja</comment>
     <comment xml:lang="fr">document RDF TriG</comment>
+    <comment xml:lang="fur">document TriG RDF</comment>
     <comment xml:lang="ga">cáipéis RDF TriG</comment>
     <comment xml:lang="gl">Documento RDF TriG</comment>
     <comment xml:lang="he">מסמך RDF של TriG</comment>
@@ -40740,7 +42297,7 @@
     <comment xml:lang="oc">document RDF TriG</comment>
     <comment xml:lang="pl">Dokument RDF TriG</comment>
     <comment xml:lang="pt">documento TriG RDF</comment>
-    <comment xml:lang="pt_BR">Documento RDF do TriG</comment>
+    <comment xml:lang="pt-BR">Documento RDF do TriG</comment>
     <comment xml:lang="ru">Документ TriG RDF</comment>
     <comment xml:lang="sk">RDF dokument TriG</comment>
     <comment xml:lang="sl">Dokument TriG RDF</comment>
@@ -40748,8 +42305,8 @@
     <comment xml:lang="sv">TriG RDF-dokument</comment>
     <comment xml:lang="tr">TriG RDF belgesi</comment>
     <comment xml:lang="uk">документ RDF TriG</comment>
-    <comment xml:lang="zh_CN">TriG RDF 文档</comment>
-    <comment xml:lang="zh_TW">TriG RDF 文件</comment>
+    <comment xml:lang="zh-CN">TriG RDF 文档</comment>
+    <comment xml:lang="zh-TW">TriG RDF 文件</comment>
     <acronym>TriG</acronym>
     <expanded-acronym>TriG RDF Graph Triple Language</expanded-acronym>
     <sub-class-of type="text/plain"/>
@@ -40757,18 +42314,21 @@
     <alias type="application/x-trig"/>
   </mime-type>
 
-  <mime-type type="application/x-iwork-keynote-sffkey">
+  <mime-type type="application/vnd.apple.keynote">
     <comment>Apple Keynote 5 presentation</comment>
-    <comment xml:lang="ca">presentació Keynote 5 d'Apple</comment>
+    <comment xml:lang="af">Apple Keynote 5-voorlegging</comment>
+    <comment xml:lang="bg">Презентация — Apple Keynote 5</comment>
+    <comment xml:lang="ca">presentació d'Apple Keynote 5</comment>
     <comment xml:lang="cs">prezentace Apple Keynote 5</comment>
     <comment xml:lang="da">Apple Keynote 5-præsentation</comment>
     <comment xml:lang="de">Apple-Keynote-5-Präsentation</comment>
     <comment xml:lang="el">Παρουσίαση Apple Keynote 5</comment>
-    <comment xml:lang="en_GB">Apple Keynote 5 presentation</comment>
+    <comment xml:lang="en-GB">Apple Keynote 5 presentation</comment>
     <comment xml:lang="es">presentación de Apple Keynote 5</comment>
     <comment xml:lang="eu">Apple Keynote 5 aurkezpena</comment>
     <comment xml:lang="fi">Apple Keynote 5 -esitys</comment>
     <comment xml:lang="fr">présentation Apple Keynote 5</comment>
+    <comment xml:lang="fur">presentazion Apple Keynote 5</comment>
     <comment xml:lang="ga">láithreoireacht Apple Keynote 5</comment>
     <comment xml:lang="gl">Presentación de Apple Keynote 5</comment>
     <comment xml:lang="he">מצגת Apple Keynote 5</comment>
@@ -40782,7 +42342,7 @@
     <comment xml:lang="oc">presentacion Apple Keynote 5</comment>
     <comment xml:lang="pl">Prezentacja Apple Keynote 5</comment>
     <comment xml:lang="pt">apresentação Apple Keynote 5</comment>
-    <comment xml:lang="pt_BR">Apresentação do Apple Keynote 5</comment>
+    <comment xml:lang="pt-BR">Apresentação do Apple Keynote 5</comment>
     <comment xml:lang="ru">Презентация Apple Keynote 5</comment>
     <comment xml:lang="sk">Prezentácia Apple Keynote 5</comment>
     <comment xml:lang="sl">Predstavitev Apple Keynote 5</comment>
@@ -40790,54 +42350,45 @@
     <comment xml:lang="sv">Apple Keynote 5-presentation</comment>
     <comment xml:lang="tr">Apple Keynote 5 sunumu</comment>
     <comment xml:lang="uk">презентація Apple Keynote 5</comment>
-    <comment xml:lang="zh_CN">Apple Keynote 5 演示文稿</comment>
-    <comment xml:lang="zh_TW">Apple Keynote 5 簡報</comment>
+    <comment xml:lang="zh-CN">Apple Keynote 5 演示文稿</comment>
+    <comment xml:lang="zh-TW">Apple Keynote 5 簡報</comment>
     <sub-class-of type="application/zip"/>
     <generic-icon name="x-office-presentation"/>
     <magic priority="70">
-      <match value="PK\003\004" type="string" offset="0">
-        <match value="index.apxl" type="string" offset="30"/>
+      <match type="string" value="PK\003\004" offset="0">
+        <match type="string" value="index.apxl" offset="30"/>
       </match>
     </magic>
-    <glob pattern="*.key"/>
-    <alias type="application/vnd.apple.keynote"/>
+    <glob pattern="*.key" weight="80"/>
+    <alias type="application/x-iwork-keynote-sffkey"/>
   </mime-type>
 
   <mime-type type="application/x-pagemaker">
-    <comment>Adobe PageMaker</comment>
-    <comment xml:lang="ca">Adobe PageMaker</comment>
-    <comment xml:lang="cs">Adobe PageMaker</comment>
-    <comment xml:lang="da">Adobe PageMaker</comment>
-    <comment xml:lang="de">Adobe PageMaker</comment>
-    <comment xml:lang="el">Adobe PageMaker</comment>
-    <comment xml:lang="en_GB">Adobe PageMaker</comment>
-    <comment xml:lang="es">Adobe PageMaker</comment>
-    <comment xml:lang="eu">Adobe PageMaker</comment>
-    <comment xml:lang="fi">Adobe PageMaker</comment>
-    <comment xml:lang="fr">Adobe PageMaker</comment>
-    <comment xml:lang="ga">Adobe PageMaker</comment>
-    <comment xml:lang="gl">Adobe PageMaker</comment>
-    <comment xml:lang="he">Adobe PageMaker</comment>
-    <comment xml:lang="hr">Adobe PageMaker</comment>
-    <comment xml:lang="hu">Adobe PageMaker</comment>
-    <comment xml:lang="ia">Adobe PageMaker</comment>
-    <comment xml:lang="id">Adobe PageMaker</comment>
-    <comment xml:lang="it">Adobe PageMaker</comment>
-    <comment xml:lang="kk">Adobe PageMaker</comment>
-    <comment xml:lang="ko">Adobe 페이지메이커</comment>
-    <comment xml:lang="oc">Adobe PageMaker</comment>
-    <comment xml:lang="pl">Adobe PageMaker</comment>
-    <comment xml:lang="pt">Adobe PageMaker</comment>
-    <comment xml:lang="pt_BR">Adobe PageMaker</comment>
-    <comment xml:lang="ru">Adobe PageMaker</comment>
-    <comment xml:lang="sk">Adobe PageMaker</comment>
-    <comment xml:lang="sl">Dokument Adobe PageMaker</comment>
-    <comment xml:lang="sr">Адобе Пејџ Мејкер</comment>
-    <comment xml:lang="sv">Adobe PageMaker</comment>
-    <comment xml:lang="tr">Adobe PageMaker</comment>
-    <comment xml:lang="uk">Adobe PageMaker</comment>
-    <comment xml:lang="zh_CN">Adobe PageMaker</comment>
-    <comment xml:lang="zh_TW">Adobe PageMaker</comment>
+    <comment>Adobe PageMaker document</comment>
+    <comment xml:lang="bg">Документ — Adobe PageMaker</comment>
+    <comment xml:lang="ca">document d'Adobe PageMaker</comment>
+    <comment xml:lang="da">Adobe PageMaker-dokument</comment>
+    <comment xml:lang="de">Adobe-PageMaker-Dokument</comment>
+    <comment xml:lang="en-GB">Adobe PageMaker document</comment>
+    <comment xml:lang="es">documento de Adobe PageMaker</comment>
+    <comment xml:lang="eu">Adobe PageMaker dokumentua</comment>
+    <comment xml:lang="fi">Adobe PageMaker -asiakirja</comment>
+    <comment xml:lang="fr">document Adobe PageMaker</comment>
+    <comment xml:lang="hr">Adobe PageMaker dokument</comment>
+    <comment xml:lang="hu">Adobe PageMaker dokumentum</comment>
+    <comment xml:lang="id">Dokume Adobe PageMaker</comment>
+    <comment xml:lang="it">Documento Adobe PageMaker</comment>
+    <comment xml:lang="kk">Adobe PageMaker құжаты</comment>
+    <comment xml:lang="ko">어도비 페이지메이커 문서</comment>
+    <comment xml:lang="pl">Dokument Adobe PageMaker</comment>
+    <comment xml:lang="pt-BR">Documento do Adobe PageMaker</comment>
+    <comment xml:lang="ru">Документ Adobe PageMaker</comment>
+    <comment xml:lang="sk">Dokument Adobe PageMaker</comment>
+    <comment xml:lang="sv">Adobe PageMaker-dokument</comment>
+    <comment xml:lang="tr">Adobe PageMaker belgesi</comment>
+    <comment xml:lang="uk">документ Adobe PageMaker</comment>
+    <comment xml:lang="zh-CN">Adobe PageMaker 文档</comment>
+    <comment xml:lang="zh-TW">Adobe PageMaker 文件</comment>
     <sub-class-of type="application/x-ole-storage"/>
     <generic-icon name="x-office-document"/>
     <glob pattern="*.p65"/>
@@ -40847,56 +42398,55 @@
   </mime-type>
 
   <mime-type type="application/x-doom-wad">
-    <comment>Doom WAD</comment>
-    <comment xml:lang="ca">WAD de Doom</comment>
-    <comment xml:lang="cs">datový balík WAD hry Doom</comment>
-    <comment xml:lang="da">Doom WAD</comment>
-    <comment xml:lang="de">Doom WAD</comment>
-    <comment xml:lang="en_GB">Doom WAD</comment>
-    <comment xml:lang="es">WAD de Doom</comment>
-    <comment xml:lang="eu">Doom WAD</comment>
-    <comment xml:lang="fr">WAD Doom</comment>
-    <comment xml:lang="ga">WAD Doom</comment>
-    <comment xml:lang="hr">Doom WAD</comment>
-    <comment xml:lang="hu">Doom WAD</comment>
-    <comment xml:lang="ia">WAD pro Doom</comment>
-    <comment xml:lang="id">WAD Doom</comment>
-    <comment xml:lang="it">WAD Doom</comment>
-    <comment xml:lang="kk">Doom WAD</comment>
-    <comment xml:lang="ko">둠 WAD</comment>
+    <comment>Doom WAD file</comment>
+    <comment xml:lang="bg">Ниво — Doom</comment>
+    <comment xml:lang="ca">fitxer WAD de Doom</comment>
+    <comment xml:lang="da">Doom WAD-fil</comment>
+    <comment xml:lang="de">Doom-WAD-Datei</comment>
+    <comment xml:lang="en-GB">Doom WAD file</comment>
+    <comment xml:lang="es">archivo WAD de Doom</comment>
+    <comment xml:lang="eu">Doom WAD fitxategia</comment>
+    <comment xml:lang="fi">Doom WAD -tiedosto</comment>
+    <comment xml:lang="fr">fichier Doom WAD</comment>
+    <comment xml:lang="hr">Doom WAD datoteka</comment>
+    <comment xml:lang="hu">Doom WAD fájl</comment>
+    <comment xml:lang="id">Berkas WAD Doom</comment>
+    <comment xml:lang="it">File WAD Doom</comment>
+    <comment xml:lang="kk">Doom WAD файлы</comment>
+    <comment xml:lang="ko">둠 WAD 파일</comment>
     <comment xml:lang="pl">Plik WAD gry Doom</comment>
-    <comment xml:lang="pt">Doom WAD</comment>
-    <comment xml:lang="pt_BR">Doom WAD</comment>
-    <comment xml:lang="ru">WAD Doom</comment>
-    <comment xml:lang="sk">Doom WAD</comment>
-    <comment xml:lang="sr">Дум ВАД</comment>
-    <comment xml:lang="sv">Doom-WAD</comment>
-    <comment xml:lang="tr">Doom WAD</comment>
-    <comment xml:lang="uk">WAD Doom</comment>
-    <comment xml:lang="zh_CN">Doom WAD</comment>
-    <comment xml:lang="zh_TW">Doom WAD</comment>
+    <comment xml:lang="pt-BR">Arquivo Doom WAD</comment>
+    <comment xml:lang="ru">Файл Doom WAD</comment>
+    <comment xml:lang="sv">Doom WAD-fil</comment>
+    <comment xml:lang="tr">Doom WAD dosyası</comment>
+    <comment xml:lang="uk">файл WAD Doom</comment>
+    <comment xml:lang="zh-CN">Doom WAD 文件</comment>
+    <comment xml:lang="zh-TW">Doom WAD 檔</comment>
     <acronym>WAD</acronym>
     <expanded-acronym>Where's All the Data</expanded-acronym>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="IWAD" type="string" offset="0"/>
-      <match value="PWAD" type="string" offset="0"/>
+      <match type="string" value="IWAD" offset="0"/>
+      <match type="string" value="PWAD" offset="0"/>
     </magic>
-    <glob weight="80" pattern="*.wad"/>
+    <glob pattern="*.wad" weight="80"/>
   </mime-type>
 
   <mime-type type="application/x-amiga-disk-format">
     <comment>Amiga disk image</comment>
+    <comment xml:lang="af">Amiga-skyfbeeldlêer</comment>
+    <comment xml:lang="bg">Диск — Amiga</comment>
     <comment xml:lang="ca">imatge de disc d'Amiga</comment>
     <comment xml:lang="cs">obraz disku pro Amigu</comment>
     <comment xml:lang="da">Amiga-diskaftryk</comment>
     <comment xml:lang="de">Amiga-Datenträgerabbild</comment>
     <comment xml:lang="el">Εικόνα δίσκου Amiga</comment>
-    <comment xml:lang="en_GB">Amiga disk image</comment>
+    <comment xml:lang="en-GB">Amiga disk image</comment>
     <comment xml:lang="es">imagen de disco de Amiga</comment>
     <comment xml:lang="eu">Amiga disko irudia</comment>
     <comment xml:lang="fi">Amiga-levytiedosto</comment>
     <comment xml:lang="fr">image disque Amiga</comment>
+    <comment xml:lang="fur">imagjin disc Amiga</comment>
     <comment xml:lang="ga">íomhá diosca Amiga</comment>
     <comment xml:lang="he">דמות כונן Amiga</comment>
     <comment xml:lang="hr">Amiga slika diska</comment>
@@ -40909,54 +42459,57 @@
     <comment xml:lang="oc">imatge disc Amiga</comment>
     <comment xml:lang="pl">Obraz dysku Amiga</comment>
     <comment xml:lang="pt">imagem de disco Amiga</comment>
-    <comment xml:lang="pt_BR">Imagem de disco Amiga</comment>
+    <comment xml:lang="pt-BR">Imagem de disco Amiga</comment>
     <comment xml:lang="ru">Образ диска Amiga</comment>
     <comment xml:lang="sk">Obraz disku Amiga</comment>
     <comment xml:lang="sr">слика диска Амиге</comment>
     <comment xml:lang="sv">Amiga-diskavbild</comment>
-    <comment xml:lang="tr">Amiga disk kalıbı</comment>
+    <comment xml:lang="tr">Amiga disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска Amiga</comment>
-    <comment xml:lang="zh_CN">Amiga 磁盘映像</comment>
-    <comment xml:lang="zh_TW">Amiga 磁碟映像檔</comment>
+    <comment xml:lang="zh-CN">Amiga 磁盘映像</comment>
+    <comment xml:lang="zh-TW">Amiga 磁碟映像檔</comment>
     <magic priority="50">
-      <match value="DOS\x00" type="string" offset="0"/>
+      <match type="string" value="DOS\x00" offset="0"/>
     </magic>
     <glob pattern="*.adf"/>
   </mime-type>
 
   <mime-type type="application/vnd.flatpak">
     <comment>Flatpak application bundle</comment>
+    <comment xml:lang="af">Flatpak-toepassingsbundel</comment>
+    <comment xml:lang="bg">Програмен пакет — Flatpak</comment>
     <comment xml:lang="ca">paquet d'aplicació Flatpak</comment>
     <comment xml:lang="cs">balíček Flatpak s aplikací</comment>
     <comment xml:lang="da">Flatpak-programsamling</comment>
     <comment xml:lang="de">Flatpak-Anwendungspaket</comment>
-    <comment xml:lang="en_GB">Flatpak application bundle</comment>
+    <comment xml:lang="en-GB">Flatpak application bundle</comment>
     <comment xml:lang="es">paquete de aplicación Flatpak</comment>
     <comment xml:lang="eu">Flatpak aplikazio bilduma</comment>
     <comment xml:lang="fi">Flatpak-sovelluspaketti</comment>
     <comment xml:lang="fr">lot applicatif Flatpak</comment>
+    <comment xml:lang="fur">côl di aplicazions Flatpak</comment>
     <comment xml:lang="ga">burla feidhmchláir Flatpak</comment>
     <comment xml:lang="he">חבילת יישומי Flatpak</comment>
     <comment xml:lang="hr">Flatpak paket aplikacije</comment>
     <comment xml:lang="hu">Flatpak alkalmazáscsomag</comment>
-    <comment xml:lang="id">bundel aplikasi Flatpak</comment>
+    <comment xml:lang="id">Bundel aplikasi Flatpak</comment>
     <comment xml:lang="it">Bundle applicazione Flatpak</comment>
     <comment xml:lang="kk">Flatpak қолданбалар дестесі</comment>
     <comment xml:lang="ko">Flatpak 프로그램 번들</comment>
     <comment xml:lang="pl">Pakiet programu Flatpak</comment>
-    <comment xml:lang="pt_BR">Pacote de aplicativo Flatpak</comment>
+    <comment xml:lang="pt-BR">Pacote de aplicativo Flatpak</comment>
     <comment xml:lang="ru">Пакет приложения Flatpak</comment>
     <comment xml:lang="sk">Balík aplikácií Flatpak</comment>
     <comment xml:lang="sr">скуп програма Флатпака</comment>
     <comment xml:lang="sv">Flatpak-programbunt</comment>
     <comment xml:lang="tr">Flatpak uygulama paketi</comment>
     <comment xml:lang="uk">пакунок із програмами Flatpak</comment>
-    <comment xml:lang="zh_CN">Flatpak 应用组合包</comment>
-    <comment xml:lang="zh_TW">Flatpak 應用程式套組</comment>
+    <comment xml:lang="zh-CN">Flatpak 应用组合包</comment>
+    <comment xml:lang="zh-TW">Flatpak 應用程式套組</comment>
     <generic-icon name="package-x-generic"/>
     <magic priority="50">
-      <match value="xdg-app\x00\x01\x00\x89\xe5" type="string" offset="0"/>
-      <match value="flatpak\x00\x01\x00\x89\xe5" type="string" offset="0"/>
+      <match type="string" value="xdg-app\x00\x01\x00\x89\xe5" offset="0"/>
+      <match type="string" value="flatpak\x00\x01\x00\x89\xe5" offset="0"/>
     </magic>
     <glob pattern="*.flatpak"/>
     <glob pattern="*.xdgapp"/>
@@ -40965,142 +42518,148 @@
 
   <mime-type type="application/vnd.flatpak.repo">
     <comment>Flatpak repository description</comment>
+    <comment xml:lang="bg">Описание на хранилище — Flatpak</comment>
     <comment xml:lang="ca">descripció de dipòsit de Flatpak</comment>
     <comment xml:lang="cs">popis repozitáře Flatpak</comment>
     <comment xml:lang="da">Flatpak-arkivbeskrivelse</comment>
     <comment xml:lang="de">Flatpak-Repositoriumsbeschreibung</comment>
-    <comment xml:lang="en_GB">Flatpak repository description</comment>
+    <comment xml:lang="en-GB">Flatpak repository description</comment>
     <comment xml:lang="es">descripción de repositorio de Flatpak</comment>
     <comment xml:lang="eu">Flatpak biltegi deskribapena</comment>
     <comment xml:lang="fi">Flatpak-ohjelmistolähdekuvaus</comment>
     <comment xml:lang="fr">description de dépôt Flatpak</comment>
+    <comment xml:lang="fur">descrizion dipuesit Flatpak</comment>
     <comment xml:lang="ga">cur síos ar stórlann Flatpak</comment>
     <comment xml:lang="he">תיאור מאגר Flatpak</comment>
     <comment xml:lang="hr">Flatpak opis repozitorija</comment>
     <comment xml:lang="hu">Flatpak tárolóleírás</comment>
-    <comment xml:lang="id">deskripsi repositori Flatpak</comment>
+    <comment xml:lang="id">Deskripsi repositori Flatpak</comment>
     <comment xml:lang="it">Descrizione repository Flatpack</comment>
     <comment xml:lang="kk">Flatpak репозиторийі сипаттамасы</comment>
     <comment xml:lang="ko">Flatpak 저장소 디스크립션</comment>
     <comment xml:lang="pl">Opis repozytorium Flatpak</comment>
-    <comment xml:lang="pt_BR">Descrição de repositório Flatpak</comment>
+    <comment xml:lang="pt-BR">Descrição de repositório Flatpak</comment>
     <comment xml:lang="ru">Описание репозитория Flatpak</comment>
     <comment xml:lang="sk">Popis repozitára Flatpak</comment>
     <comment xml:lang="sr">опис ризнице Флатпака</comment>
     <comment xml:lang="sv">Flatpak-förrådsbeskrivning</comment>
     <comment xml:lang="tr">Flatpak depo açıklaması</comment>
     <comment xml:lang="uk">опис сховища Flatpak</comment>
-    <comment xml:lang="zh_CN">Flatpak 软件库描述</comment>
-    <comment xml:lang="zh_TW">Flatpak 軟體庫描述</comment>
+    <comment xml:lang="zh-CN">Flatpak 软件库描述</comment>
+    <comment xml:lang="zh-TW">Flatpak 軟體庫描述</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="[Flatpak Repo]" type="string" offset="0:256"/>
+      <match type="string" value="[Flatpak Repo]" offset="0:256"/>
     </magic>
     <glob pattern="*.flatpakrepo"/>
   </mime-type>
 
   <mime-type type="application/vnd.flatpak.ref">
     <comment>Flatpak repository reference</comment>
+    <comment xml:lang="bg">Указател към хранилище — Flatpak</comment>
     <comment xml:lang="ca">referència de dipòsit Flatpak</comment>
     <comment xml:lang="cs">odkaz na repozitář Flatpak</comment>
+    <comment xml:lang="da">Flatpak-arkivreference</comment>
     <comment xml:lang="de">Flatpak-Repositoriumsreferenz</comment>
-    <comment xml:lang="en_GB">Flatpak repository reference</comment>
+    <comment xml:lang="en-GB">Flatpak repository reference</comment>
     <comment xml:lang="es">referencia a repositorio de Flatpak</comment>
     <comment xml:lang="eu">Flatpak biltegi erreferentzia</comment>
     <comment xml:lang="fi">Flatpak-ohjelmistolähdeviite</comment>
     <comment xml:lang="fr">référence de dépôt Flatpak</comment>
+    <comment xml:lang="fur">riferiment dipuesit Flatpak</comment>
     <comment xml:lang="ga">tagairt do stórlann Flatpak</comment>
     <comment xml:lang="hr">Flatpak preporučeni repozitorij</comment>
     <comment xml:lang="hu">Flatpak tárolóhivatkozás</comment>
-    <comment xml:lang="id">acuan repositori Flatpak</comment>
+    <comment xml:lang="id">Acuan repositori Flatpak</comment>
     <comment xml:lang="it">Riferimento repository Flatpack</comment>
     <comment xml:lang="kk">Flatpak репозиторийіне сілтеме</comment>
     <comment xml:lang="ko">Flatpak 저장소 참조</comment>
     <comment xml:lang="pl">Odwołanie do repozytorium Flatpak</comment>
-    <comment xml:lang="pt_BR">Referência de repositório Flatpak</comment>
+    <comment xml:lang="pt-BR">Referência de repositório Flatpak</comment>
     <comment xml:lang="ru">Ссылка на репозиторий Flatpak</comment>
     <comment xml:lang="sk">Referencia repozitára Flatpak</comment>
     <comment xml:lang="sr">упута ризнице Флатпака</comment>
     <comment xml:lang="sv">Flatpak-förrådsreferens</comment>
-    <comment xml:lang="tr">Flatpak depo başvurusu</comment>
+    <comment xml:lang="tr">Flatpak depo atfı</comment>
     <comment xml:lang="uk">посилання на сховище Flatpak</comment>
-    <comment xml:lang="zh_CN">Flatpak 软件库引用</comment>
-    <comment xml:lang="zh_TW">Flatpak 軟體庫參照</comment>
+    <comment xml:lang="zh-CN">Flatpak 软件库引用</comment>
+    <comment xml:lang="zh-TW">Flatpak 軟體庫參照</comment>
     <generic-icon name="package-x-generic"/>
     <sub-class-of type="text/plain"/>
     <magic priority="50">
-      <match value="[Flatpak Ref]" type="string" offset="0:256"/>
+      <match type="string" value="[Flatpak Ref]" offset="0:256"/>
     </magic>
     <glob pattern="*.flatpakref"/>
   </mime-type>
 
   <mime-type type="application/vnd.squashfs">
-    <comment>Squashfs filesystem</comment>
-    <comment xml:lang="ca">Sistema de fitxers Squashfs</comment>
-    <comment xml:lang="cs">souborový systém Squashfs</comment>
-    <comment xml:lang="da">Squashfs-filsystem</comment>
-    <comment xml:lang="de">Squashfs-Dateisystem</comment>
-    <comment xml:lang="en_GB">Squashfs filesystem</comment>
-    <comment xml:lang="es">sistema de archivos Squashfs</comment>
-    <comment xml:lang="eu">Squashfs fitxategi sistema</comment>
-    <comment xml:lang="fi">Squashfs-tiedostojärjestelmä</comment>
-    <comment xml:lang="fr">système de fichiers Squashfs</comment>
-    <comment xml:lang="ga">córas comhad Squashfs</comment>
-    <comment xml:lang="he">מערכת קבצים Squashfs</comment>
-    <comment xml:lang="hr">Squashfs datotečni sustav</comment>
-    <comment xml:lang="hu">Squashfs fájlrendszer</comment>
-    <comment xml:lang="id">sistem berkas Squashfs</comment>
-    <comment xml:lang="it">File system squashfs</comment>
-    <comment xml:lang="kk">Squashfs файлдық жүйесі</comment>
-    <comment xml:lang="ko">Squashfs 파일 시스템</comment>
-    <comment xml:lang="pl">System plików SquashFS</comment>
-    <comment xml:lang="pt_BR">Sistema de arquivos Squashfs</comment>
-    <comment xml:lang="ru">Файловая система Squashfs</comment>
-    <comment xml:lang="sk">Systém súborov Squashfs</comment>
-    <comment xml:lang="sr">систем датотека Сквошфс</comment>
-    <comment xml:lang="sv">Squashfs-filsystem</comment>
-    <comment xml:lang="tr">Squashfs dosya sistemi</comment>
-    <comment xml:lang="uk">файлова система squashfs</comment>
-    <comment xml:lang="zh_CN">Squashfs 文件系统</comment>
-    <comment xml:lang="zh_TW">Squashfs 檔案系統</comment>
-    <magic priority="50">
-      <match value="sqsh" type="string" offset="0"/>
-      <match value="hsqs" type="string" offset="0"/>
+    <comment>Squashfs filesystem image</comment>
+    <comment xml:lang="bg">Диск — Squashfs</comment>
+    <comment xml:lang="ca">imatge de sistema de fitxers Squashfs</comment>
+    <comment xml:lang="da">Squashfs-filsystemaftryk</comment>
+    <comment xml:lang="de">Squashfs-Dateisystemabbild</comment>
+    <comment xml:lang="en-GB">Squashfs filesystem image</comment>
+    <comment xml:lang="es">imagen de sistema de archivos de Squashfs</comment>
+    <comment xml:lang="eu">Squashfs fitxategi sistema irudia</comment>
+    <comment xml:lang="fi">Squashfs-tiedostojärjestelmän levykuva</comment>
+    <comment xml:lang="fr">image de système de fichiers Squashfs</comment>
+    <comment xml:lang="hr">Squashfs slika datotečnog sustava</comment>
+    <comment xml:lang="hu">Squashfs fájlrenszerkép</comment>
+    <comment xml:lang="id">Image sistem berkas Squashfs</comment>
+    <comment xml:lang="it">Immagine file system squashfs</comment>
+    <comment xml:lang="kk">Squashfs файлдық жүйе бейнесі</comment>
+    <comment xml:lang="ko">Squashfs 파일 시스템 이미지</comment>
+    <comment xml:lang="pl">Obraz systemu plików SquashFS</comment>
+    <comment xml:lang="pt-BR">Imagem de sistema de arquivos Squashfs</comment>
+    <comment xml:lang="ru">Образ файловой системы Squashfs</comment>
+    <comment xml:lang="sk">Obraz systému súborov Squashfs</comment>
+    <comment xml:lang="sv">Squashfs filsystemsavbildning</comment>
+    <comment xml:lang="tr">Squashfs dosya sistemi görüntüsü</comment>
+    <comment xml:lang="uk">образ файлової системи squashfs</comment>
+    <comment xml:lang="zh-CN">Squashfs 文件系统映像</comment>
+    <comment xml:lang="zh-TW">Squashfs 檔案系統映像</comment>
+    <magic priority="50">
+      <match type="string" value="sqsh" offset="0"/>
+      <match type="string" value="hsqs" offset="0"/>
     </magic>
     <glob pattern="*.sqsh"/>
   </mime-type>
 
-  
+  <!-- AppImage application bundle (Type 2) -->
   <mime-type type="application/vnd.appimage">
     <comment>AppImage application bundle</comment>
+    <comment xml:lang="af">AppImage-toepassingsbundel</comment>
+    <comment xml:lang="bg">Програмен пакет — AppImage</comment>
     <comment xml:lang="ca">paquet d'aplicació AppImage</comment>
     <comment xml:lang="cs">balíček AppImage s aplikací</comment>
-    <comment xml:lang="da">Applmage-programsamling</comment>
+    <comment xml:lang="da">AppImage-programsamling</comment>
     <comment xml:lang="de">AppImage-Anwendungspaket</comment>
-    <comment xml:lang="en_GB">AppImage application bundle</comment>
+    <comment xml:lang="en-GB">AppImage application bundle</comment>
     <comment xml:lang="es">paquete de aplicación AppImage</comment>
     <comment xml:lang="eu">AppImage aplikazio bilduma</comment>
     <comment xml:lang="fi">AppImage-sovelluspaketti</comment>
     <comment xml:lang="fr">lot applicatif AppImage</comment>
+    <comment xml:lang="fur">côl di aplicazions AppImage</comment>
     <comment xml:lang="ga">burla feidhmchláir AppImage</comment>
     <comment xml:lang="he">חבילת יישומי AppImage</comment>
     <comment xml:lang="hr">AppImage paket aplikacije</comment>
     <comment xml:lang="hu">AppImage alkalmazáscsomag</comment>
-    <comment xml:lang="id">bundel aplikasi AppImage</comment>
+    <comment xml:lang="id">Bundel aplikasi AppImage</comment>
     <comment xml:lang="it">Bundle applicazione AppImage</comment>
     <comment xml:lang="kk">AppImage қолданбалар дестесі</comment>
     <comment xml:lang="ko">AppImage 프로그램 번들</comment>
     <comment xml:lang="pl">Pakiet programu AppImage</comment>
-    <comment xml:lang="pt_BR">Pacote de aplicativo AppImage</comment>
+    <comment xml:lang="pt">pacote de aplicação AppImage</comment>
+    <comment xml:lang="pt-BR">Pacote de aplicativo AppImage</comment>
     <comment xml:lang="ru">Пакет приложения AppImage</comment>
     <comment xml:lang="sk">Balík aplikácií AppImage</comment>
     <comment xml:lang="sr">скуп програма Ап-слике</comment>
     <comment xml:lang="sv">AppImage-programbunt</comment>
     <comment xml:lang="tr">AppImage uygulama paketi</comment>
     <comment xml:lang="uk">пакунок із програмами AppImage</comment>
-    <comment xml:lang="zh_CN">AppImage 应用组合包</comment>
-    <comment xml:lang="zh_TW">AppImage 應用程式套組</comment>
+    <comment xml:lang="zh-CN">AppImage 应用组合包</comment>
+    <comment xml:lang="zh-TW">AppImage 應用程式套組</comment>
     <sub-class-of type="application/x-executable"/>
     <sub-class-of type="application/vnd.squashfs"/>
     <generic-icon name="application-x-executable"/>
@@ -41118,45 +42677,78 @@
 
   <mime-type type="application/vnd.snap">
     <comment>Snap package</comment>
-    <comment xml:lang="ca">Paquet Snap</comment>
+    <comment xml:lang="af">Snap-pakket</comment>
+    <comment xml:lang="bg">Пакет — Snap</comment>
+    <comment xml:lang="ca">paquet snap</comment>
     <comment xml:lang="cs">balíček Snap</comment>
     <comment xml:lang="da">Snap-pakke</comment>
     <comment xml:lang="de">Snap-Paket</comment>
-    <comment xml:lang="en_GB">Snap package</comment>
+    <comment xml:lang="en-GB">Snap package</comment>
     <comment xml:lang="es">paquete Snap</comment>
     <comment xml:lang="eu">Snap paketea</comment>
     <comment xml:lang="fi">Snap-paketti</comment>
     <comment xml:lang="fr">paquet Snap</comment>
+    <comment xml:lang="fur">pachet Snap</comment>
     <comment xml:lang="ga">pacáiste Snap</comment>
     <comment xml:lang="he">חבילת Snap</comment>
     <comment xml:lang="hr">Snap paket</comment>
     <comment xml:lang="hu">Snap-csomag</comment>
-    <comment xml:lang="id">paket Snap</comment>
+    <comment xml:lang="id">Paket Snap</comment>
     <comment xml:lang="it">Pacchetto snap</comment>
     <comment xml:lang="kk">Snap дестесі</comment>
     <comment xml:lang="ko">Snap 패키지</comment>
     <comment xml:lang="pl">Pakiet Snap</comment>
-    <comment xml:lang="pt_BR">Pacote Snap</comment>
+    <comment xml:lang="pt-BR">Pacote Snap</comment>
     <comment xml:lang="ru">Пакет Snap</comment>
     <comment xml:lang="sk">Balík Snap</comment>
+    <comment xml:lang="sl">Paket Snap</comment>
     <comment xml:lang="sr">Снап пакет</comment>
     <comment xml:lang="sv">Snap-paket</comment>
     <comment xml:lang="tr">Snap paketi</comment>
     <comment xml:lang="uk">пакунок snap</comment>
-    <comment xml:lang="zh_CN">Snap 软件包</comment>
-    <comment xml:lang="zh_TW">Snap 軟體包</comment>
+    <comment xml:lang="zh-CN">Snap 软件包</comment>
+    <comment xml:lang="zh-TW">Snap 軟體包</comment>
     <glob pattern="*.snap"/>
     <sub-class-of type="application/vnd.squashfs"/>
   </mime-type>
 
-  
+  <!-- 3D models and GCODEs -->
   <mime-type type="model/stl">
     <comment>STL 3D model</comment>
+    <comment xml:lang="af">STL 3D-model</comment>
+    <comment xml:lang="bg">Модел — STL 3D</comment>
+    <comment xml:lang="ca">model 3D STL</comment>
+    <comment xml:lang="cs">3D model STL</comment>
+    <comment xml:lang="da">STL 3D-model</comment>
+    <comment xml:lang="de">STL 3D-Modell</comment>
+    <comment xml:lang="en-GB">STL 3D model</comment>
+    <comment xml:lang="es">modelo 3D de STL</comment>
+    <comment xml:lang="eu">STL 3D modeloa</comment>
+    <comment xml:lang="fi">STL 3D malli</comment>
+    <comment xml:lang="fr">modèle 3D STL</comment>
+    <comment xml:lang="fur">model STL 3D</comment>
+    <comment xml:lang="ga">samhail 3T STL</comment>
+    <comment xml:lang="hr">STL 3D model</comment>
+    <comment xml:lang="hu">STL 3D modell</comment>
+    <comment xml:lang="id">Model 3D STL</comment>
+    <comment xml:lang="it">Modello 3D STL</comment>
+    <comment xml:lang="kk">STL 3D моделі</comment>
+    <comment xml:lang="ko">STL 3D 모델</comment>
+    <comment xml:lang="pl">Model 3D STL</comment>
+    <comment xml:lang="pt-BR">Modelo 3D STL</comment>
+    <comment xml:lang="ru">3D-модель STL</comment>
+    <comment xml:lang="sk">STL 3D model</comment>
+    <comment xml:lang="sl">Model STL 3D</comment>
+    <comment xml:lang="sv">STL-3D-modell</comment>
+    <comment xml:lang="tr">STL 3D modeli</comment>
+    <comment xml:lang="uk">просторова модель STL</comment>
+    <comment xml:lang="zh-CN">STL 3D 模型</comment>
+    <comment xml:lang="zh-TW">STL 3D 模型</comment>
     <acronym>STL</acronym>
     <expanded-acronym>StereoLithography</expanded-acronym>
     <magic priority="50">
-      <match value="solid" type="string" offset="0"/>
-      <match value="SOLID" type="string" offset="0"/>
+      <match type="string" value="solid" offset="0"/>
+      <match type="string" value="SOLID" offset="0"/>
     </magic>
     <glob pattern="*.stl"/>
     <alias type="model/x.stl-ascii"/>
@@ -41165,31 +42757,35 @@
 
   <mime-type type="text/x.gcode">
     <comment>G-code file</comment>
+    <comment xml:lang="bg">Модел — G-code</comment>
     <comment xml:lang="ca">fitxer G-code</comment>
     <comment xml:lang="cs">soubor G-code</comment>
+    <comment xml:lang="da">G-code-fil</comment>
     <comment xml:lang="de">G-Code-Datei</comment>
-    <comment xml:lang="en_GB">G-code file</comment>
+    <comment xml:lang="en-GB">G-code file</comment>
     <comment xml:lang="es">archivo G-code</comment>
     <comment xml:lang="eu">G-code fitxategia</comment>
     <comment xml:lang="fi">G-code-tiedosto</comment>
     <comment xml:lang="fr">fichier G-code</comment>
+    <comment xml:lang="fur">file G-code</comment>
     <comment xml:lang="ga">comhad G-code</comment>
     <comment xml:lang="hr">G-kôd datoteka</comment>
     <comment xml:lang="hu">G-code fájl</comment>
-    <comment xml:lang="id">berkas G-code</comment>
+    <comment xml:lang="id">Berkas G-code</comment>
     <comment xml:lang="it">File G-code</comment>
     <comment xml:lang="kk">G-code файлы</comment>
-    <comment xml:lang="ko">지-코드 파일</comment>
+    <comment xml:lang="ko">G-code 파일</comment>
     <comment xml:lang="pl">Plik G-code</comment>
-    <comment xml:lang="pt_BR">Arquivo G-code</comment>
+    <comment xml:lang="pt-BR">Arquivo G-code</comment>
     <comment xml:lang="ru">Файл G-code</comment>
     <comment xml:lang="sk">Súbor G-code</comment>
+    <comment xml:lang="sl">Datoteka G-code</comment>
     <comment xml:lang="sr">датотека Г-ко̂да</comment>
     <comment xml:lang="sv">G-code-fil</comment>
     <comment xml:lang="tr">G-code dosyası</comment>
     <comment xml:lang="uk">файл G-code</comment>
-    <comment xml:lang="zh_CN">G-code 文件</comment>
-    <comment xml:lang="zh_TW">G-code 檔案</comment>
+    <comment xml:lang="zh-CN">G-code 文件</comment>
+    <comment xml:lang="zh-TW">G-code 檔案</comment>
     <sub-class-of type="text/plain"/>
     <generic-icon name="text-x-generic"/>
     <glob pattern="*.gcode"/>
@@ -41197,37 +42793,260 @@
 
   <mime-type type="application/x-fds-disk">
     <comment>Nintendo FDS disk image</comment>
-    <comment xml:lang="ca">Imatge de disc Nintendo FDS</comment>
+    <comment xml:lang="af">Nintendo FDS-skyfbeeldlêer</comment>
+    <comment xml:lang="bg">Диск — Nintendo FDS</comment>
+    <comment xml:lang="ca">imatge de disc Nintendo FDS</comment>
     <comment xml:lang="cs">obraz disku pro Nintendo FDS</comment>
+    <comment xml:lang="da">Nintendo FDS-diskaftryk</comment>
     <comment xml:lang="de">Nintendo-FDS-Datenträgerabbild</comment>
-    <comment xml:lang="en_GB">Nintendo FDS disk image</comment>
+    <comment xml:lang="en-GB">Nintendo FDS disk image</comment>
     <comment xml:lang="es">imagen de disco FDS de Nintendo</comment>
     <comment xml:lang="eu">Nintendo FDS disko irudia</comment>
     <comment xml:lang="fi">Nintendo FDS -levykuva</comment>
     <comment xml:lang="fr">image disque Nintendo FDS</comment>
+    <comment xml:lang="fur">imagjin disc Nintendo FDS</comment>
     <comment xml:lang="ga">íomhá diosca Nintendo FDS</comment>
     <comment xml:lang="hr">Nintendo FDS slika diska</comment>
     <comment xml:lang="hu">Nintendo FDS lemezkép</comment>
-    <comment xml:lang="id">image disk Nintendo FDS</comment>
+    <comment xml:lang="id">Image disk Nintendo FDS</comment>
     <comment xml:lang="it">Immagine disco Nintendo FDS</comment>
     <comment xml:lang="kk">Nintendo FDS диск бейнесі</comment>
     <comment xml:lang="ko">닌텐도 FDS 디스크 이미지</comment>
     <comment xml:lang="pl">Obraz dysku Nintendo FDS</comment>
-    <comment xml:lang="pt_BR">Imagem de disco Nintendo FDS</comment>
+    <comment xml:lang="pt-BR">Imagem de disco Nintendo FDS</comment>
     <comment xml:lang="ru">Образ диска Nintendo FDS</comment>
     <comment xml:lang="sk">Obraz disku Nintendo FDS</comment>
     <comment xml:lang="sr">Нинтендо ФДС слика диска</comment>
     <comment xml:lang="sv">Nintendo FDS-diskavbild</comment>
-    <comment xml:lang="tr">Nintendo FDS disk kalıbı</comment>
+    <comment xml:lang="tr">Nintendo FDS disk görüntüsü</comment>
     <comment xml:lang="uk">образ диска FDS Nintendo</comment>
-    <comment xml:lang="zh_CN">任天堂 FDS 磁盘映像</comment>
-    <comment xml:lang="zh_TW">Nintendo FDS 磁碟映像檔</comment>
+    <comment xml:lang="zh-CN">任天堂 FDS 磁盘映像</comment>
+    <comment xml:lang="zh-TW">Nintendo FDS 磁碟映像檔</comment>
     <acronym>FDS</acronym>
     <expanded-acronym>Famicom Disk System</expanded-acronym>
     <glob pattern="*.fds"/>
     <magic>
-      <match value="*NINTENDO-HVC*" type="string" offset="1"/>
+      <match type="string" value="*NINTENDO-HVC*" offset="1"/>
+    </magic>
+  </mime-type>
+
+  <mime-type type="application/x-qemu-disk">
+    <comment>QEMU QCOW disk image</comment>
+    <comment xml:lang="ca">imatge de disc QEMU QCOW</comment>
+    <comment xml:lang="da">QEMU QCOW-diskaftryk</comment>
+    <comment xml:lang="de">QEMU QCOW-Datenträgerabbild</comment>
+    <comment xml:lang="en-GB">QEMU QCOW disk image</comment>
+    <comment xml:lang="es">imagen de disco QCOW de QEMU</comment>
+    <comment xml:lang="fi">QEMU QCOW -levykuva</comment>
+    <comment xml:lang="fr">image disque QEMU QCOW</comment>
+    <comment xml:lang="hr">QEMU QCOW slika diska</comment>
+    <comment xml:lang="hu">QEMU QCOW lemezkép</comment>
+    <comment xml:lang="id">Image disk QCOW QEMU</comment>
+    <comment xml:lang="it">Immagine disco QEMU QCOW</comment>
+    <comment xml:lang="kk">QEMU QCOW диск бейнесі</comment>
+    <comment xml:lang="ko">QEMU QCOW 디스크 이미지</comment>
+    <comment xml:lang="pl">Obraz dysku QCOW QEMU</comment>
+    <comment xml:lang="pt-BR">Imagem de disco QEMU QCOW</comment>
+    <comment xml:lang="ru">Образ диска QEMU QCOW</comment>
+    <comment xml:lang="sv">QEMU QCOW-diskavbildning</comment>
+    <comment xml:lang="tr">QEMU QCOW disk görüntüsü</comment>
+    <comment xml:lang="uk">образ диска QCOW QEMU</comment>
+    <comment xml:lang="zh-CN">QEMU QCOW 磁盘映像</comment>
+    <comment xml:lang="zh-TW">QEMU QCOW 磁碟映像檔</comment>
+    <acronym>QCOW</acronym>
+    <expanded-acronym>QEMU Copy On Write</expanded-acronym>
+    <glob pattern="*.qcow2"/>
+    <glob pattern="*.qcow"/>
+    <magic>
+      <match type="string" value="QFI" offset="0">
+        <match value="0xfb" type="byte" offset="3"/>
+      </match>
+    </magic>
+  </mime-type>
+
+  <mime-type type="application/x-appleworks-document">
+    <comment>AppleWorks document</comment>
+    <comment xml:lang="ca">document AppleWorks</comment>
+    <comment xml:lang="da">AppleWorks-dokument</comment>
+    <comment xml:lang="de">AppleWorks-Dokument</comment>
+    <comment xml:lang="en-GB">AppleWorks document</comment>
+    <comment xml:lang="es">documento de AppleWorks</comment>
+    <comment xml:lang="fi">AppleWorks-asiakirja</comment>
+    <comment xml:lang="fr">document AppleWorks</comment>
+    <comment xml:lang="hr">AppleWorks dokument</comment>
+    <comment xml:lang="hu">AppleWorks-dokumentum</comment>
+    <comment xml:lang="id">Dokumen AppleWorks</comment>
+    <comment xml:lang="it">Documento AppleWorks</comment>
+    <comment xml:lang="kk">AppleWorks құжаты</comment>
+    <comment xml:lang="ko">AppleWorks 문서</comment>
+    <comment xml:lang="pl">Dokument AppleWorks</comment>
+    <comment xml:lang="pt-BR">Documento AppleWorks</comment>
+    <comment xml:lang="ru">Документ AppleWorks</comment>
+    <comment xml:lang="sl">Dokument AppleWorks</comment>
+    <comment xml:lang="sv">AppleWorks-dokument</comment>
+    <comment xml:lang="tr">AppleWorks belgesi</comment>
+    <comment xml:lang="uk">документ AppleWorks</comment>
+    <comment xml:lang="zh-CN">AppleWorks 文档</comment>
+    <comment xml:lang="zh-TW">AppleWorks 文件</comment>
+    <generic-icon name="x-office-document"/>
+    <glob pattern="*.cwk"/>
+  </mime-type>
+
+  <mime-type type="application/x-bps-patch">
+    <comment>BPS patch</comment>
+    <comment xml:lang="ca">pedaç de BPS</comment>
+    <comment xml:lang="da">BPS-rettelse</comment>
+    <comment xml:lang="de">BPS-Patch</comment>
+    <comment xml:lang="en-GB">BPS patch</comment>
+    <comment xml:lang="es">parche BPS</comment>
+    <comment xml:lang="fi">BPS-korjaus</comment>
+    <comment xml:lang="fr">correctif BPS</comment>
+    <comment xml:lang="hr">BPS zakrpa</comment>
+    <comment xml:lang="hu">BPS javítócsomag</comment>
+    <comment xml:lang="id">Patch BPS</comment>
+    <comment xml:lang="it">Patch BPS</comment>
+    <comment xml:lang="kk">BPS өзгерісі</comment>
+    <comment xml:lang="ko">BPS 패치</comment>
+    <comment xml:lang="pl">Łata BPS</comment>
+    <comment xml:lang="pt-BR">Patch BPS</comment>
+    <comment xml:lang="ru">Патч BPS</comment>
+    <comment xml:lang="sv">BPS patch</comment>
+    <comment xml:lang="tr">BPS yaması</comment>
+    <comment xml:lang="uk">латка BPS</comment>
+    <comment xml:lang="zh-CN">BPS 补丁</comment>
+    <comment xml:lang="zh-TW">BPS 修補檔</comment>
+    <acronym>BPS</acronym>
+    <expanded-acronym>Binary Patching System</expanded-acronym>
+    <glob pattern="*.bps"/>
+    <magic>
+      <match type="string" value="BPS1" offset="0"/>
+    </magic>
+  </mime-type>
+
+  <mime-type type="application/x-ips-patch">
+    <comment>IPS patch</comment>
+    <comment xml:lang="ca">pedaç d'IPS</comment>
+    <comment xml:lang="da">IPS-rettelse</comment>
+    <comment xml:lang="de">IPS-Patch</comment>
+    <comment xml:lang="en-GB">IPS patch</comment>
+    <comment xml:lang="es">parche IPS</comment>
+    <comment xml:lang="fi">IPS-korjaus</comment>
+    <comment xml:lang="fr">correctif IPS</comment>
+    <comment xml:lang="hr">IPS zakrpa</comment>
+    <comment xml:lang="hu">IPS javítócsomag</comment>
+    <comment xml:lang="id">Patch IPS</comment>
+    <comment xml:lang="it">Patch IPS</comment>
+    <comment xml:lang="kk">IPS өзгерісі</comment>
+    <comment xml:lang="ko">IPS 패치</comment>
+    <comment xml:lang="pl">Łata IPS</comment>
+    <comment xml:lang="pt-BR">Patch IPS</comment>
+    <comment xml:lang="ru">Патч IPS</comment>
+    <comment xml:lang="sv">IPS patch</comment>
+    <comment xml:lang="tr">IPS yaması</comment>
+    <comment xml:lang="uk">латка IPS</comment>
+    <comment xml:lang="zh-CN">IPS 补丁</comment>
+    <comment xml:lang="zh-TW">IPS 修補檔</comment>
+    <acronym>IPS</acronym>
+    <expanded-acronym>International Patching System</expanded-acronym>
+    <glob pattern="*.ips"/>
+    <magic>
+      <match type="string" value="PATCH" offset="0"/>
+    </magic>
+  </mime-type>
+
+  <mime-type type="application/x-pyspread-spreadsheet">
+    <comment>Pyspread spreadsheet</comment>
+    <comment xml:lang="ca">full de càlcul de Pyspread</comment>
+    <comment xml:lang="da">Pyspread-regneark</comment>
+    <comment xml:lang="de">Pyspread-Tabelle</comment>
+    <comment xml:lang="en-GB">Pyspread spreadsheet</comment>
+    <comment xml:lang="es">hoja de cálculo de Pyspread</comment>
+    <comment xml:lang="fi">Pyspread-taulukko</comment>
+    <comment xml:lang="fr">feuille de calcul Pyspread</comment>
+    <comment xml:lang="hr">Pyspread proračunska tablica</comment>
+    <comment xml:lang="it">Foglio di calcolo Pyspread</comment>
+    <comment xml:lang="pl">Arkusz pyspread</comment>
+    <comment xml:lang="pt-BR">Planilha do Pyspread</comment>
+    <comment xml:lang="sv">Pyspread-kalkylblad</comment>
+    <comment xml:lang="uk">ел. таблиця Pyspread</comment>
+    <comment xml:lang="zh-CN">Pyspread 电子表格</comment>
+    <comment xml:lang="zh-TW">Pyspread 試算表</comment>
+    <glob pattern="*.pysu"/>
+    <magic>
+      <match type="string" value="[Pyspread save file version]" offset="0"/>
     </magic>
+    <generic-icon name="x-office-spreadsheet"/>
+  </mime-type>
+  <mime-type type="application/x-pyspread-bz-spreadsheet">
+    <comment>Pyspread spreadsheet (bzip-compressed)</comment>
+    <comment xml:lang="ca">full de càlcul de Pyspread (amb compressió bzip)</comment>
+    <comment xml:lang="da">Pyspread-regneark (bzip-komprimeret)</comment>
+    <comment xml:lang="de">Pyspread-Tabelle (bzip-komprimiert)</comment>
+    <comment xml:lang="en-GB">Pyspread spreadsheet (bzip-compressed)</comment>
+    <comment xml:lang="es">hoja de cálculo de Pyspread (comprimida con bzip)</comment>
+    <comment xml:lang="fi">Pyspread-taulukko (bzip-pakattu)</comment>
+    <comment xml:lang="fr">feuille de calcul Pyspread (compressée bzip)</comment>
+    <comment xml:lang="hr">Pyspread proračunska tablica (bzip sažeta)</comment>
+    <comment xml:lang="it">Foglio di calcolo Pyspread (compresso con bzip)</comment>
+    <comment xml:lang="pl">Arkusz pyspread (kompresja bzip)</comment>
+    <comment xml:lang="pt-BR">Planilha do Pyspread (compactada com bzip)</comment>
+    <comment xml:lang="sv">Pyspread-kalkylblad (bzip-komprimerat)</comment>
+    <comment xml:lang="uk">ел. таблиця Pyspread (стиснена bzip)</comment>
+    <comment xml:lang="zh-CN">Pyspread 电子表格（bzip 压缩）</comment>
+    <comment xml:lang="zh-TW">Pyspread 試算表 (bzip 壓縮)</comment>
+    <sub-class-of type="application/x-bzip"/>
+    <glob pattern="*.pys"/>
+    <generic-icon name="x-office-spreadsheet"/>
+  </mime-type>
+
+  <mime-type type="text/x-kotlin">
+    <comment>Kotlin source code</comment>
+    <comment xml:lang="ca">codi font en Kotlin</comment>
+    <comment xml:lang="da">Kotlin-kildekode</comment>
+    <comment xml:lang="de">Kotlin-Quelltext</comment>
+    <comment xml:lang="en-GB">Kotlin source code</comment>
+    <comment xml:lang="es">código fuente en Kotlin</comment>
+    <comment xml:lang="fi">Kotlin-lähdekoodi</comment>
+    <comment xml:lang="fr">code source Kotlin</comment>
+    <comment xml:lang="hr">Kotlin izvorni kôd</comment>
+    <comment xml:lang="it">Codice sorgente Kotlin</comment>
+    <comment xml:lang="pl">Kod źródłowy Kotlin</comment>
+    <comment xml:lang="pt-BR">Código-fonte Kotlin</comment>
+    <comment xml:lang="sv">Kotlin-källkod</comment>
+    <comment xml:lang="uk">вихідний код мовою Kotlin</comment>
+    <comment xml:lang="zh-CN">Kotlin 源代码</comment>
+    <comment xml:lang="zh-TW">Kotlin 源碼</comment>
+    <sub-class-of type="text/plain"/>
+    <glob pattern="*.kt"/>
   </mime-type>
 
+  <mime-type type="image/avif">
+    <comment>AV1 Image File Format (AVIF)</comment>
+    <comment xml:lang="ca">format de fitxer d'imatge AV1 (AVIF)</comment>
+    <comment xml:lang="da">AV1-billedfilformat (AVIF)</comment>
+    <comment xml:lang="de">AV1-Bilddateiformat (AVIF)</comment>
+    <comment xml:lang="en-GB">AV1 Image File Format (AVIF)</comment>
+    <comment xml:lang="es">formato de archivo de imagen AV1 (AVIF)</comment>
+    <comment xml:lang="fi">AV1-kuvatiedostomuoto (AVIF)</comment>
+    <comment xml:lang="hr">AV1 format datoteke slike (AVIF)</comment>
+    <comment xml:lang="it">AV1 Image File Format (AVIF)</comment>
+    <comment xml:lang="pl">Format pliku obrazu AV1 (AVIF)</comment>
+    <comment xml:lang="pt-BR">Formato de arquivo de imagem AV1 (AVIF)</comment>
+    <comment xml:lang="sv">AV1-bildfilformat (AVIF)</comment>
+    <comment xml:lang="uk">формат файлів зображень AV1 (AVIF)</comment>
+    <comment xml:lang="zh-CN">AV1 图像文件格式（AVIF）</comment>
+    <comment xml:lang="zh-TW">AV1 影像檔案格式 (AVIF)</comment>
+    <magic priority="50">
+      <match type="string" value="ftypavif" offset="4"/>
+      <match type="string" value="ftypavis" offset="4"/>
+      <match type="string" value="ftypmif1" offset="4">
+        <match type="string" value="avif" offset="16"/>
+        <match type="string" value="avif" offset="20"/>
+        <match type="string" value="avif" offset="24"/>
+      </match>
+    </magic>
+    <glob pattern="*.avif"/>
+    <glob pattern="*.avifs"/>
+    <alias type="image/avif-sequence"/>
+  </mime-type>
 </mime-info>
diff --git a/qtbase/src/corelib/mimetypes/qmimedatabase.cpp b/qtbase/src/corelib/mimetypes/qmimedatabase.cpp
index 9de22cef33..ff868a3268 100644
--- a/qtbase/src/corelib/mimetypes/qmimedatabase.cpp
+++ b/qtbase/src/corelib/mimetypes/qmimedatabase.cpp
@@ -389,20 +389,23 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa
         // Disambiguate conflicting extensions (if magic matching found something)
         if (candidateByData.isValid() && magicAccuracy > 0) {
             const QString sniffedMime = candidateByData.name();
-            // If the sniffedMime matches a glob match, use it
+            // If the sniffedMime matches a highest-weight glob match, use it
             if (candidatesByName.m_matchingMimeTypes.contains(sniffedMime)) {
                 *accuracyPtr = 100;
                 return candidateByData;
             }
-            for (const QString &m : qAsConst(candidatesByName.m_matchingMimeTypes)) {
+            for (const QString &m : qAsConst(candidatesByName.m_allMatchingMimeTypes)) {
                 if (inherits(m, sniffedMime)) {
                     // We have magic + pattern pointing to this, so it's a pretty good match
                     *accuracyPtr = 100;
                     return mimeTypeForName(m);
                 }
             }
-            *accuracyPtr = magicAccuracy;
-            return candidateByData;
+            if (candidatesByName.m_allMatchingMimeTypes.isEmpty()) {
+                // No glob, use magic
+                *accuracyPtr = magicAccuracy;
+                return candidateByData;
+            }
         }
     }
 
diff --git a/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp b/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp
index 1016884437..fa8f4c545d 100644
--- a/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp
+++ b/qtbase/src/corelib/mimetypes/qmimeglobpattern.cpp
@@ -83,11 +83,48 @@ void QMimeGlobMatchResult::addMatch(const QString &mimeType, int weight, const Q
     }
     if (!m_matchingMimeTypes.contains(mimeType)) {
         m_matchingMimeTypes.append(mimeType);
-        m_allMatchingMimeTypes.append(mimeType);
+        if (replace)
+            m_allMatchingMimeTypes.prepend(mimeType); // highest-weight first
+        else
+            m_allMatchingMimeTypes.append(mimeType);
         m_knownSuffixLength = knownSuffixLength;
     }
 }
 
+QMimeGlobPattern::PatternType QMimeGlobPattern::detectPatternType(const QString &pattern) const
+{
+    const int patternLength = pattern.length();
+    if (!patternLength)
+        return OtherPattern;
+
+    const int starCount = pattern.count(QLatin1Char('*'));
+    const bool hasSquareBracket = pattern.indexOf(QLatin1Char('[')) != -1;
+    const bool hasQuestionMark = pattern.indexOf(QLatin1Char('?')) != -1;
+
+    if (!hasSquareBracket && !hasQuestionMark) {
+        if (starCount == 1) {
+            // Patterns like "*~", "*.extension"
+            if (pattern.at(0) == QLatin1Char('*'))
+                return SuffixPattern;
+            // Patterns like "README*" (well this is currently the only one like that...)
+            if (pattern.at(patternLength - 1) == QLatin1Char('*'))
+                return PrefixPattern;
+        } else if (starCount == 0) {
+            // Names without any wildcards like "README"
+            return LiteralPattern;
+        }
+    }
+
+    if (pattern == QLatin1String("[0-9][0-9][0-9].vdr"))
+        return VdrPattern;
+
+    if (pattern == QLatin1String("*.anim[1-9j]"))
+        return AnimPattern;
+
+    return OtherPattern;
+}
+
+
 /*!
     \internal
     \class QMimeGlobPattern
@@ -97,58 +134,66 @@ void QMimeGlobMatchResult::addMatch(const QString &mimeType, int weight, const Q
     \sa QMimeType, QMimeDatabase, QMimeMagicRuleMatcher, QMimeMagicRule
 */
 
-bool QMimeGlobPattern::matchFileName(const QString &inputFilename) const
+bool QMimeGlobPattern::matchFileName(const QString &inputFileName) const
 {
     // "Applications MUST match globs case-insensitively, except when the case-sensitive
     // attribute is set to true."
     // The constructor takes care of putting case-insensitive patterns in lowercase.
-    const QString filename = m_caseSensitivity == Qt::CaseInsensitive ? inputFilename.toLower() : inputFilename;
+    const QString fileName = m_caseSensitivity == Qt::CaseInsensitive
+            ? inputFileName.toLower() : inputFileName;
 
-    const int pattern_len = m_pattern.length();
-    if (!pattern_len)
+    const int patternLength = m_pattern.length();
+    if (!patternLength)
         return false;
-    const int len = filename.length();
-
-    const int starCount = m_pattern.count(QLatin1Char('*'));
+    const int fileNameLength = fileName.length();
 
-    // Patterns like "*~", "*.extension"
-    if (m_pattern[0] == QLatin1Char('*') && m_pattern.indexOf(QLatin1Char('[')) == -1 && starCount == 1)
-    {
-        if (len + 1 < pattern_len) return false;
+    switch (m_patternType) {
+    case SuffixPattern: {
+        if (fileNameLength + 1 < patternLength)
+            return false;
 
-        const QChar *c1 = m_pattern.unicode() + pattern_len - 1;
-        const QChar *c2 = filename.unicode() + len - 1;
+        const QChar *c1 = m_pattern.unicode() + patternLength - 1;
+        const QChar *c2 = fileName.unicode() + fileNameLength - 1;
         int cnt = 1;
-        while (cnt < pattern_len && *c1-- == *c2--)
+        while (cnt < patternLength && *c1-- == *c2--)
             ++cnt;
-        return cnt == pattern_len;
+        return cnt == patternLength;
     }
-
-    // Patterns like "README*" (well this is currently the only one like that...)
-    if (starCount == 1 && m_pattern.at(pattern_len - 1) == QLatin1Char('*')) {
-        if (len + 1 < pattern_len) return false;
-        if (m_pattern.at(0) == QLatin1Char('*'))
-            return filename.indexOf(m_pattern.midRef(1, pattern_len - 2)) != -1;
+    case PrefixPattern: {
+        if (fileNameLength + 1 < patternLength)
+            return false;
 
         const QChar *c1 = m_pattern.unicode();
-        const QChar *c2 = filename.unicode();
+        const QChar *c2 = fileName.unicode();
         int cnt = 1;
-        while (cnt < pattern_len && *c1++ == *c2++)
+        while (cnt < patternLength && *c1++ == *c2++)
            ++cnt;
-        return cnt == pattern_len;
+        return cnt == patternLength;
     }
-
-    // Names without any wildcards like "README"
-    if (m_pattern.indexOf(QLatin1Char('[')) == -1 && starCount == 0 && m_pattern.indexOf(QLatin1Char('?')))
-        return (m_pattern == filename);
-
-    // Other (quite rare) patterns, like "*.anim[1-9j]": use slow but correct method
+    case LiteralPattern:
+        return (m_pattern == fileName);
+    case VdrPattern: // "[0-9][0-9][0-9].vdr" case
+        return fileNameLength == 7
+                && fileName.at(0).isDigit() && fileName.at(1).isDigit() && fileName.at(2).isDigit()
+                && QStringView{fileName}.mid(3, 4) == QLatin1String(".vdr");
+    case AnimPattern: { // "*.anim[1-9j]" case
+        if (fileNameLength < 6)
+            return false;
+        const QChar lastChar = fileName.at(fileNameLength - 1);
+        const bool lastCharOK = (lastChar.isDigit() && lastChar != QLatin1Char('0'))
+                              || lastChar == QLatin1Char('j');
+        return lastCharOK && QStringView{fileName}.mid(fileNameLength - 6, 5) == QLatin1String(".anim");
+    }
+    case OtherPattern:
+        // Other fallback patterns: slow but correct method
 #if QT_CONFIG(regularexpression)
-    QRegularExpression rx(QRegularExpression::wildcardToRegularExpression(m_pattern));
-    return rx.match(filename).hasMatch();
+        QRegularExpression rx(QRegularExpression::wildcardToRegularExpression(m_pattern));
+        return rx.match(fileName).hasMatch();
 #else
-    return false;
+        return false;
 #endif
+    }
+    return false;
 }
 
 static bool isSimplePattern(const QString &pattern)
diff --git a/qtbase/src/corelib/mimetypes/qmimeglobpattern_p.h b/qtbase/src/corelib/mimetypes/qmimeglobpattern_p.h
index 49f145e8db..88d032c787 100644
--- a/qtbase/src/corelib/mimetypes/qmimeglobpattern_p.h
+++ b/qtbase/src/corelib/mimetypes/qmimeglobpattern_p.h
@@ -80,7 +80,10 @@ public:
 
     explicit QMimeGlobPattern(const QString &thePattern, const QString &theMimeType, unsigned theWeight = DefaultWeight, Qt::CaseSensitivity s = Qt::CaseInsensitive) :
         m_pattern(s == Qt::CaseInsensitive ? thePattern.toLower() : thePattern),
-        m_mimeType(theMimeType), m_weight(theWeight), m_caseSensitivity(s)
+        m_mimeType(theMimeType),
+        m_weight(theWeight),
+        m_caseSensitivity(s),
+        m_patternType(detectPatternType(m_pattern))
     {
     }
 
@@ -90,9 +93,10 @@ public:
         qSwap(m_mimeType,        other.m_mimeType);
         qSwap(m_weight,          other.m_weight);
         qSwap(m_caseSensitivity, other.m_caseSensitivity);
+        qSwap(m_patternType,     other.m_patternType);
     }
 
-    bool matchFileName(const QString &filename) const;
+    bool matchFileName(const QString &inputFileName) const;
 
     inline const QString &pattern() const { return m_pattern; }
     inline unsigned weight() const { return m_weight; }
@@ -100,10 +104,21 @@ public:
     inline bool isCaseSensitive() const { return m_caseSensitivity == Qt::CaseSensitive; }
 
 private:
+    enum PatternType {
+        SuffixPattern,
+        PrefixPattern,
+        LiteralPattern,
+        VdrPattern,        // special handling for "[0-9][0-9][0-9].vdr" pattern
+        AnimPattern,       // special handling for "*.anim[1-9j]" pattern
+        OtherPattern
+    };
+    PatternType detectPatternType(const QString &pattern) const;
+
     QString m_pattern;
     QString m_mimeType;
     int m_weight;
     Qt::CaseSensitivity m_caseSensitivity;
+    PatternType m_patternType;
 };
 Q_DECLARE_SHARED(QMimeGlobPattern)
 
diff --git a/qtbase/src/corelib/mimetypes/qmimeprovider.cpp b/qtbase/src/corelib/mimetypes/qmimeprovider.cpp
index 12ce442f70..4642d0f2d0 100644
--- a/qtbase/src/corelib/mimetypes/qmimeprovider.cpp
+++ b/qtbase/src/corelib/mimetypes/qmimeprovider.cpp
@@ -244,15 +244,18 @@ void QMimeBinaryProvider::addFileNameMatches(const QString &fileName, QMimeGlobM
     const QString lowerFileName = fileName.toLower();
     // Check literals (e.g. "Makefile")
     matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosLiteralListOffset), fileName);
-    // Check complex globs (e.g. "callgrind.out[0-9]*")
-    matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName);
     // Check the very common *.txt cases with the suffix tree
-    const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
-    const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
-    const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
-    matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false);
+    if (result.m_matchingMimeTypes.isEmpty()) {
+        const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
+        const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
+        const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
+        matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false);
+        if (result.m_matchingMimeTypes.isEmpty())
+            matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
+    }
+    // Check complex globs (e.g. "callgrind.out[0-9]*" or "README*")
     if (result.m_matchingMimeTypes.isEmpty())
-        matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
+        matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName);
 }
 
 void QMimeBinaryProvider::matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int off, const QString &fileName)
@@ -272,7 +275,6 @@ void QMimeBinaryProvider::matchGlobList(QMimeGlobMatchResult &result, CacheFile
         //qDebug() << pattern << mimeType << weight << caseSensitive;
         QMimeGlobPattern glob(pattern, QString() /*unused*/, weight, qtCaseSensitive);
 
-        // TODO: this could be done faster for literals where a simple == would do.
         if (glob.matchFileName(fileName))
             result.addMatch(QLatin1String(mimeType), weight, pattern);
     }
diff --git a/qtbase/src/corelib/serialization/qjsonparser.cpp b/qtbase/src/corelib/serialization/qjsonparser.cpp
index 17e6f111ab..2e40b6c8fb 100644
--- a/qtbase/src/corelib/serialization/qjsonparser.cpp
+++ b/qtbase/src/corelib/serialization/qjsonparser.cpp
@@ -379,10 +379,30 @@ error:
     return QCborValue();
 }
 
+// We need to retain the _last_ value for any duplicate keys and we need to deref containers.
+// Therefore the manual implementation of std::unique().
+template<typename Iterator, typename Compare, typename Assign>
+static Iterator customAssigningUniqueLast(Iterator first, Iterator last,
+                                          Compare compare, Assign assign)
+{
+    first = std::adjacent_find(first, last, compare);
+    if (first == last)
+        return last;
+
+    Iterator result = first;
+    while (++first != last) {
+        if (!compare(*result, *first))
+            ++result;
+        if (result != first)
+            assign(*result, *first);
+    }
+
+    return ++result;
+}
+
 static void sortContainer(QCborContainerPrivate *container)
 {
     using Forward = QJsonPrivate::KeyIterator;
-    using Reverse = std::reverse_iterator<Forward>;
     using Value = Forward::value_type;
 
     auto compare = [container](const Value &a, const Value &b)
@@ -420,17 +440,31 @@ static void sortContainer(QCborContainerPrivate *container)
         }
     };
 
-    std::sort(Forward(container->elements.begin()), Forward(container->elements.end()),
-              [&compare](const Value &a, const Value &b) { return compare(a, b) < 0; });
+    // The elements' containers are owned by the outer container, not by the elements themselves.
+    auto move = [](Forward::reference target, Forward::reference source)
+    {
+        QtCbor::Element &targetValue = target.value();
+
+        // If the target has a container, deref it before overwriting, so that we don't leak.
+        if (targetValue.flags & QtCbor::Element::IsContainer)
+            targetValue.container->deref();
+
+        // Do not move, so that we can clear the value afterwards.
+        target = source;
+
+        // Clear the source value, so that we don't store the same container twice.
+        source.value() = QtCbor::Element();
+    };
+
+    std::stable_sort(
+                Forward(container->elements.begin()), Forward(container->elements.end()),
+                [&compare](const Value &a, const Value &b) { return compare(a, b) < 0; });
 
-    // We need to retain the _last_ value for any duplicate keys. Therefore the reverse dance here.
-    auto it = std::unique(Reverse(container->elements.end()), Reverse(container->elements.begin()),
-                          [&compare](const Value &a, const Value &b) {
-        return compare(a, b) == 0;
-    }).base().elementsIterator();
+    Forward result = customAssigningUniqueLast(
+                Forward(container->elements.begin()),  Forward(container->elements.end()),
+                [&compare](const Value &a, const Value &b) { return compare(a, b) == 0; }, move);
 
-    // The erase from beginning is expensive but hopefully rare.
-    container->elements.erase(container->elements.begin(), it);
+    container->elements.erase(result.elementsIterator(), container->elements.end());
 }
 
 
diff --git a/qtbase/src/corelib/serialization/qxmlstream.cpp b/qtbase/src/corelib/serialization/qxmlstream.cpp
index b2f846544d..7cd457ba3a 100644
--- a/qtbase/src/corelib/serialization/qxmlstream.cpp
+++ b/qtbase/src/corelib/serialization/qxmlstream.cpp
@@ -980,7 +980,7 @@ inline uint QXmlStreamReaderPrivate::peekChar()
 bool QXmlStreamReaderPrivate::scanUntil(const char *str, short tokenToInject)
 {
     int pos = textBuffer.size();
-    int oldLineNumber = lineNumber;
+    const auto oldLineNumber = lineNumber;
 
     uint c;
     while ((c = getChar()) != StreamEOF) {
diff --git a/qtbase/src/corelib/text/qstring.cpp b/qtbase/src/corelib/text/qstring.cpp
index 3e88ab4859..8deeae47bb 100644
--- a/qtbase/src/corelib/text/qstring.cpp
+++ b/qtbase/src/corelib/text/qstring.cpp
@@ -12312,7 +12312,7 @@ static qsizetype qLastIndexOf(Haystack haystack0, qsizetype from,
     const auto needle = needle0.data();
     const auto *end = haystack;
     haystack += from;
-    const std::size_t sl_minus_1 = sl - 1;
+    const std::size_t sl_minus_1 = sl ? sl - 1 : 0;
     const auto *n = needle + sl_minus_1;
     const auto *h = haystack + sl_minus_1;
     std::size_t hashNeedle = 0, hashHaystack = 0;
diff --git a/qtbase/src/corelib/text/qstringiterator_p.h b/qtbase/src/corelib/text/qstringiterator_p.h
index 219589b6e4..1d0c66cc78 100644
--- a/qtbase/src/corelib/text/qstringiterator_p.h
+++ b/qtbase/src/corelib/text/qstringiterator_p.h
@@ -61,6 +61,8 @@ class QStringIterator
 {
     QString::const_iterator i, pos, e;
     Q_STATIC_ASSERT((std::is_same<QString::const_iterator, const QChar *>::value));
+    static bool less(const QChar *lhs, const QChar *rhs) noexcept
+    { return std::less<QString::const_iterator>{}(lhs, rhs); }
 public:
     explicit QStringIterator(QStringView string, qsizetype idx = 0)
         : i(string.begin()),
@@ -95,7 +97,8 @@ public:
 
     inline void setPosition(QString::const_iterator position)
     {
-        Q_ASSERT_X(i <= position && position <= e, Q_FUNC_INFO, "position out of bounds");
+        Q_ASSERT_X(!less(position, i) && !less(e, position),
+                   Q_FUNC_INFO, "position out of bounds");
         pos = position;
     }
 
@@ -103,7 +106,7 @@ public:
 
     inline bool hasNext() const
     {
-        return pos < e;
+        return less(pos, e);
     }
 
     inline void advance()
@@ -120,16 +123,20 @@ public:
     {
         Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item");
 
-        if (Q_UNLIKELY((pos++)->isHighSurrogate()))
+        if (Q_UNLIKELY((pos++)->isHighSurrogate())) {
+            Q_ASSERT(hasNext() && pos->isLowSurrogate());
             ++pos;
+        }
     }
 
     inline uint peekNextUnchecked() const
     {
         Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item");
 
-        if (Q_UNLIKELY(pos->isHighSurrogate()))
+        if (Q_UNLIKELY(pos->isHighSurrogate())) {
+            Q_ASSERT(less(pos + 1, e) && pos[1].isLowSurrogate());
             return QChar::surrogateToUcs4(pos[0], pos[1]);
+        }
 
         return pos->unicode();
     }
@@ -155,8 +162,10 @@ public:
         Q_ASSERT_X(hasNext(), Q_FUNC_INFO, "iterator hasn't a next item");
 
         const QChar cur = *pos++;
-        if (Q_UNLIKELY(cur.isHighSurrogate()))
+        if (Q_UNLIKELY(cur.isHighSurrogate())) {
+            Q_ASSERT(hasNext() && pos->isLowSurrogate());
             return QChar::surrogateToUcs4(cur, *pos++);
+        }
         return cur.unicode();
     }
 
@@ -166,7 +175,7 @@ public:
 
         const QChar uc = *pos++;
         if (Q_UNLIKELY(uc.isSurrogate())) {
-            if (Q_LIKELY(uc.isHighSurrogate() && pos < e && pos->isLowSurrogate()))
+            if (Q_LIKELY(uc.isHighSurrogate() && hasNext() && pos->isLowSurrogate()))
                 return QChar::surrogateToUcs4(uc, *pos++);
             return invalidAs;
         }
@@ -178,7 +187,7 @@ public:
 
     inline bool hasPrevious() const
     {
-        return pos > i;
+        return less(i, pos);
     }
 
     inline void recede()
@@ -196,16 +205,20 @@ public:
     {
         Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item");
 
-        if (Q_UNLIKELY((--pos)->isLowSurrogate()))
+        if (Q_UNLIKELY((--pos)->isLowSurrogate())) {
+            Q_ASSERT(hasPrevious() && pos[-1].isHighSurrogate());
             --pos;
+        }
     }
 
     inline uint peekPreviousUnchecked() const
     {
         Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item");
 
-        if (Q_UNLIKELY(pos[-1].isLowSurrogate()))
+        if (Q_UNLIKELY(pos[-1].isLowSurrogate())) {
+            Q_ASSERT(less(i + 1, pos) && pos[-2].isHighSurrogate());
             return QChar::surrogateToUcs4(pos[-2], pos[-1]);
+        }
         return pos[-1].unicode();
     }
 
@@ -230,8 +243,10 @@ public:
         Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO, "iterator hasn't a previous item");
 
         const QChar cur = *--pos;
-        if (Q_UNLIKELY(cur.isLowSurrogate()))
+        if (Q_UNLIKELY(cur.isLowSurrogate())) {
+            Q_ASSERT(hasPrevious() && pos[-1].isHighSurrogate());
             return QChar::surrogateToUcs4(*--pos, cur);
+        }
         return cur.unicode();
     }
 
@@ -241,7 +256,7 @@ public:
 
         const QChar uc = *--pos;
         if (Q_UNLIKELY(uc.isSurrogate())) {
-            if (Q_LIKELY(uc.isLowSurrogate() && pos > i && pos[-1].isHighSurrogate()))
+            if (Q_LIKELY(uc.isLowSurrogate() && hasPrevious() && pos[-1].isHighSurrogate()))
                 return QChar::surrogateToUcs4(*--pos, uc);
             return invalidAs;
         }
diff --git a/qtbase/src/corelib/thread/qmutex.cpp b/qtbase/src/corelib/thread/qmutex.cpp
index 310d1cb14f..7097122d8e 100644
--- a/qtbase/src/corelib/thread/qmutex.cpp
+++ b/qtbase/src/corelib/thread/qmutex.cpp
@@ -152,6 +152,7 @@ public:
 
 /*!
     \enum QMutex::RecursionMode
+    \obsolete Use QRecursiveMutex to create a recursive mutex.
 
     \value Recursive  In this mode, a thread can lock the same mutex
                       multiple times and the mutex won't be unlocked
@@ -173,6 +174,7 @@ public:
 
 /*!
     Constructs a new mutex. The mutex is created in an unlocked state.
+    \obsolete Use QRecursiveMutex to create a recursive mutex.
 
     If \a mode is QMutex::Recursive, a thread can lock the same mutex
     multiple times and the mutex won't be unlocked until a
@@ -197,7 +199,7 @@ QMutex::QMutex(RecursionMode mode)
 QMutex::~QMutex()
 {
     QMutexData *d = d_ptr.loadRelaxed();
-    if (isRecursive()) {
+    if (QBasicMutex::isRecursive()) {
         delete static_cast<QRecursiveMutexPrivate *>(d);
     } else if (d) {
 #ifndef QT_LINUX_FUTEX
diff --git a/qtbase/src/corelib/thread/qmutex.h b/qtbase/src/corelib/thread/qmutex.h
index 73c9e00663..b2e2640ba2 100644
--- a/qtbase/src/corelib/thread/qmutex.h
+++ b/qtbase/src/corelib/thread/qmutex.h
@@ -134,8 +134,16 @@ public:
 #else
     QMutex() { d_ptr.storeRelaxed(nullptr); }
 #endif
+#if QT_DEPRECATED_SINCE(5,15)
     enum RecursionMode { NonRecursive, Recursive };
+    QT_DEPRECATED_VERSION_X(5, 15, "Use QRecursiveMutex instead of a recursive QMutex")
     explicit QMutex(RecursionMode mode);
+
+    QT_DEPRECATED_VERSION_X(5, 15, "Use QRecursiveMutex instead of a recursive QMutex")
+    bool isRecursive() const noexcept
+    { return QBasicMutex::isRecursive(); }
+#endif
+
     ~QMutex();
 
     // BasicLockable concept
@@ -166,9 +174,6 @@ public:
     }
 #endif
 
-    bool isRecursive() const noexcept
-    { return QBasicMutex::isRecursive(); }
-
 private:
     Q_DISABLE_COPY(QMutex)
     friend class QMutexLocker;
diff --git a/qtbase/src/corelib/thread/qreadwritelock.cpp b/qtbase/src/corelib/thread/qreadwritelock.cpp
index 8c28507d5a..9dd8503116 100644
--- a/qtbase/src/corelib/thread/qreadwritelock.cpp
+++ b/qtbase/src/corelib/thread/qreadwritelock.cpp
@@ -155,7 +155,7 @@ QReadWriteLock::QReadWriteLock(RecursionMode recursionMode)
 */
 QReadWriteLock::~QReadWriteLock()
 {
-    auto d = d_ptr.loadRelaxed();
+    auto d = d_ptr.loadAcquire();
     if (isUncontendedLocked(d)) {
         qWarning("QReadWriteLock: destroying locked QReadWriteLock");
         return;
@@ -445,7 +445,7 @@ void QReadWriteLock::unlock()
 /*! \internal  Helper for QWaitCondition::wait */
 QReadWriteLock::StateForWaitCondition QReadWriteLock::stateForWaitCondition() const
 {
-    QReadWriteLockPrivate *d = d_ptr.loadRelaxed();
+    QReadWriteLockPrivate *d = d_ptr.loadAcquire();
     switch (quintptr(d) & StateMask) {
     case StateLockedForRead: return LockedForRead;
     case StateLockedForWrite: return LockedForWrite;
@@ -453,6 +453,7 @@ QReadWriteLock::StateForWaitCondition QReadWriteLock::stateForWaitCondition() co
 
     if (!d)
         return Unlocked;
+    const auto lock = qt_scoped_lock(d->mutex);
     if (d->writerCount > 1)
         return RecursivelyLocked;
     else if (d->writerCount == 1)
diff --git a/qtbase/src/corelib/thread/qsemaphore.cpp b/qtbase/src/corelib/thread/qsemaphore.cpp
index 1d01fc1b28..3ecdee3747 100644
--- a/qtbase/src/corelib/thread/qsemaphore.cpp
+++ b/qtbase/src/corelib/thread/qsemaphore.cpp
@@ -354,7 +354,12 @@ void QSemaphore::release(int n)
         quintptr nn = unsigned(n);
         if (futexHasWaiterCount)
             nn |= quint64(nn) << 32;    // token count replicated in high word
-        quintptr prevValue = u.fetchAndAddRelease(nn);
+        quintptr prevValue = u.loadRelaxed();
+        quintptr newValue;
+        do { // loop just to ensure the operations are done atomically
+            newValue = prevValue + nn;
+            newValue &= (futexNeedsWakeAllBit - 1);
+        } while (!u.testAndSetRelease(prevValue, newValue, prevValue));
         if (futexNeedsWake(prevValue)) {
 #ifdef FUTEX_OP
             if (futexHasWaiterCount) {
@@ -376,7 +381,6 @@ void QSemaphore::release(int n)
                 quint32 oparg = 0;
                 quint32 cmp = FUTEX_OP_CMP_NE;
                 quint32 cmparg = 0;
-                u.fetchAndAndRelease(futexNeedsWakeAllBit - 1);
                 futexWakeOp(*futexLow32(&u), n, INT_MAX, *futexHigh32(&u), FUTEX_OP(op, oparg, cmp, cmparg));
                 return;
             }
@@ -388,7 +392,6 @@ void QSemaphore::release(int n)
             //    its acquisition anyway, so it has to wait;
             // 2) it did not see the new counter value, in which case its
             //    futexWait will fail.
-            u.fetchAndAndRelease(futexNeedsWakeAllBit - 1);
             if (futexHasWaiterCount) {
                 futexWakeAll(*futexLow32(&u));
                 futexWakeAll(*futexHigh32(&u));
diff --git a/qtbase/src/corelib/thread/qthread_p.h b/qtbase/src/corelib/thread/qthread_p.h
index b2d1628e6e..f32f6f0460 100644
--- a/qtbase/src/corelib/thread/qthread_p.h
+++ b/qtbase/src/corelib/thread/qthread_p.h
@@ -174,7 +174,7 @@ public:
     int returnCode;
 
     uint stackSize;
-    QThread::Priority priority;
+    std::underlying_type<QThread::Priority>::type priority;
 
     static QThread *threadForId(int id);
 
@@ -213,6 +213,13 @@ public:
             QCoreApplication::instance()->postEvent(q_ptr, new QEvent(QEvent::Quit));
         }
     }
+
+#ifndef Q_OS_INTEGRITY
+private:
+    // Used in QThread(Private)::start to avoid racy access to QObject::objectName,
+    // unset afterwards. On INTEGRITY we set the thread name before starting it.
+    QString objectName;
+#endif
 };
 
 #else // QT_CONFIG(thread)
diff --git a/qtbase/src/corelib/thread/qthread_unix.cpp b/qtbase/src/corelib/thread/qthread_unix.cpp
index 56a8e0a038..610117a640 100644
--- a/qtbase/src/corelib/thread/qthread_unix.cpp
+++ b/qtbase/src/corelib/thread/qthread_unix.cpp
@@ -169,8 +169,7 @@ static void set_thread_data(QThreadData *data)
 
 static void clear_thread_data()
 {
-    currentThreadData = nullptr;
-    pthread_setspecific(current_thread_data_key, nullptr);
+    set_thread_data(nullptr);
 }
 
 template <typename T>
@@ -296,7 +295,7 @@ void *QThreadPrivate::start(void *arg)
             QMutexLocker locker(&thr->d_func()->mutex);
 
             // do we need to reset the thread priority?
-            if (int(thr->d_func()->priority) & ThreadPriorityResetFlag) {
+            if (thr->d_func()->priority & ThreadPriorityResetFlag) {
                 thr->d_func()->setPriority(QThread::Priority(thr->d_func()->priority & ~ThreadPriorityResetFlag));
             }
 
@@ -316,10 +315,10 @@ void *QThreadPrivate::start(void *arg)
             // Sets the name of the current thread. We can only do this
             // when the thread is starting, as we don't have a cross
             // platform way of setting the name of an arbitrary thread.
-            if (Q_LIKELY(thr->objectName().isEmpty()))
+            if (Q_LIKELY(thr->d_func()->objectName.isEmpty()))
                 setCurrentThreadName(thr->metaObject()->className());
             else
-                setCurrentThreadName(thr->objectName().toLocal8Bit());
+                setCurrentThreadName(std::exchange(thr->d_func()->objectName, {}).toLocal8Bit());
         }
 #endif
 
@@ -671,7 +670,7 @@ void QThread::start(Priority priority)
                 // could not set scheduling hints, fallback to inheriting them
                 // we'll try again from inside the thread
                 pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
-                d->priority = Priority(priority | ThreadPriorityResetFlag);
+                d->priority = static_cast<std::underlying_type<QThread::Priority>::type>(priority) | ThreadPriorityResetFlag;
             }
             break;
         }
@@ -702,7 +701,10 @@ void QThread::start(Priority priority)
         pthread_attr_setthreadname(&attr, metaObject()->className());
     else
         pthread_attr_setthreadname(&attr, objectName().toLocal8Bit());
+#else
+    d->objectName = objectName();
 #endif
+
     pthread_t threadId;
     int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this);
     if (code == EPERM) {
diff --git a/qtbase/src/corelib/thread/qthread_win.cpp b/qtbase/src/corelib/thread/qthread_win.cpp
index bc70e3178a..4e76972498 100644
--- a/qtbase/src/corelib/thread/qthread_win.cpp
+++ b/qtbase/src/corelib/thread/qthread_win.cpp
@@ -394,10 +394,9 @@ unsigned int __stdcall QT_ENSURE_STACK_ALIGNED_FOR_SSE QThreadPrivate::start(voi
 
 #if !defined(QT_NO_DEBUG) && defined(Q_CC_MSVC) && !defined(Q_OS_WINRT)
     // sets the name of the current thread.
-    QByteArray objectName = thr->objectName().toLocal8Bit();
-    qt_set_thread_name(HANDLE(-1),
-                       objectName.isEmpty() ?
-                       thr->metaObject()->className() : objectName.constData());
+    qt_set_thread_name(HANDLE(-1), thr->d_func()->objectName.isEmpty()
+                        ? thr->metaObject()->className()
+                        : std::exchange(thr->d_func()->objectName, {}).toLocal8Bit().constData());
 #endif
 
     emit thr->started(QThread::QPrivateSignal());
@@ -503,6 +502,7 @@ void QThread::start(Priority priority)
     if (d->running)
         return;
 
+    d->objectName = objectName();
     d->running = true;
     d->finished = false;
     d->exited = false;
@@ -548,7 +548,7 @@ void QThread::start(Priority priority)
 
     int prio;
     d->priority = priority;
-    switch (d->priority) {
+    switch (priority) {
     case IdlePriority:
         prio = THREAD_PRIORITY_IDLE;
         break;
@@ -686,7 +686,7 @@ void QThreadPrivate::setPriority(QThread::Priority threadPriority)
 
     int prio;
     priority = threadPriority;
-    switch (priority) {
+    switch (threadPriority) {
     case QThread::IdlePriority:
         prio = THREAD_PRIORITY_IDLE;
         break;
diff --git a/qtbase/src/corelib/thread/qwaitcondition_unix.cpp b/qtbase/src/corelib/thread/qwaitcondition_unix.cpp
index 88b058f410..0f1da4dc9b 100644
--- a/qtbase/src/corelib/thread/qwaitcondition_unix.cpp
+++ b/qtbase/src/corelib/thread/qwaitcondition_unix.cpp
@@ -213,7 +213,7 @@ bool QWaitCondition::wait(QMutex *mutex, QDeadlineTimer deadline)
 {
     if (! mutex)
         return false;
-    if (mutex->isRecursive()) {
+    if (static_cast<QBasicMutex *>(mutex)->isRecursive()) {
         qWarning("QWaitCondition: cannot wait on recursive mutexes");
         return false;
     }
diff --git a/qtbase/src/corelib/time/qdatetime.cpp b/qtbase/src/corelib/time/qdatetime.cpp
index ec12569e3f..2c0b098079 100644
--- a/qtbase/src/corelib/time/qdatetime.cpp
+++ b/qtbase/src/corelib/time/qdatetime.cpp
@@ -43,6 +43,7 @@
 #if QT_CONFIG(datetimeparser)
 #include "private/qdatetimeparser_p.h"
 #endif
+#include <private/qnumeric_p.h>
 
 #include "qdatastream.h"
 #include "qset.h"
@@ -1429,9 +1430,11 @@ QDate QDate::addDays(qint64 ndays) const
     if (isNull())
         return QDate();
 
-    // Due to limits on minJd() and maxJd() we know that any overflow
-    // will be invalid and caught by fromJulianDay().
-    return fromJulianDay(jd + ndays);
+    qint64 r;
+    if (Q_UNLIKELY(add_overflow(jd, ndays, &r)))
+        return QDate();
+    else
+        return fromJulianDay(r);
 }
 
 /*!
diff --git a/qtbase/src/corelib/time/qtimezone.cpp b/qtbase/src/corelib/time/qtimezone.cpp
index 0309e43e52..3d451696a1 100644
--- a/qtbase/src/corelib/time/qtimezone.cpp
+++ b/qtbase/src/corelib/time/qtimezone.cpp
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2013 John Layt <jlayt@kde.org>
+** Copyright (C) 2020 John Layt <jlayt@kde.org>
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtCore module of the Qt Toolkit.
@@ -975,9 +975,15 @@ QList<QByteArray> QTimeZone::windowsIdToIanaIds(const QByteArray &windowsId,
 }
 
 #ifndef QT_NO_DATASTREAM
+// Invalid, as an IANA ID: too long, starts with - and has other invalid characters in it
+static inline QString invalidId() { return QStringLiteral("-No Time Zone Specified!"); }
+
 QDataStream &operator<<(QDataStream &ds, const QTimeZone &tz)
 {
-    tz.d->serialize(ds);
+    if (tz.isValid())
+        tz.d->serialize(ds);
+    else
+        ds << invalidId();
     return ds;
 }
 
@@ -985,7 +991,9 @@ QDataStream &operator>>(QDataStream &ds, QTimeZone &tz)
 {
     QString ianaId;
     ds >> ianaId;
-    if (ianaId == QLatin1String("OffsetFromUtc")) {
+    if (ianaId == invalidId()) {
+        tz = QTimeZone();
+    } else if (ianaId == QLatin1String("OffsetFromUtc")) {
         int utcOffset;
         QString name;
         QString abbreviation;
diff --git a/qtbase/src/corelib/time/qtimezoneprivate_tz.cpp b/qtbase/src/corelib/time/qtimezoneprivate_tz.cpp
index b1611d7ddb..a7a6a72ccf 100644
--- a/qtbase/src/corelib/time/qtimezoneprivate_tz.cpp
+++ b/qtbase/src/corelib/time/qtimezoneprivate_tz.cpp
@@ -42,6 +42,7 @@
 #include "qtimezone.h"
 #include "qtimezoneprivate_p.h"
 #include "private/qlocale_tools_p.h"
+#include "private/qlocking_p.h"
 
 #include <QtCore/QDataStream>
 #include <QtCore/QDateTime>
@@ -62,6 +63,10 @@
 
 QT_BEGIN_NAMESPACE
 
+#if QT_CONFIG(icu)
+static QBasicMutex s_icu_mutex;
+#endif
+
 /*
     Private
 
@@ -670,6 +675,9 @@ QTzTimeZonePrivate::~QTzTimeZonePrivate()
 
 QTzTimeZonePrivate *QTzTimeZonePrivate::clone() const
 {
+#if QT_CONFIG(icu)
+    const auto lock = qt_scoped_lock(s_icu_mutex);
+#endif
     return new QTzTimeZonePrivate(*this);
 }
 
@@ -913,12 +921,14 @@ QString QTzTimeZonePrivate::displayName(qint64 atMSecsSinceEpoch,
                                         const QLocale &locale) const
 {
 #if QT_CONFIG(icu)
+    auto lock = qt_unique_lock(s_icu_mutex);
     if (!m_icu)
         m_icu = new QIcuTimeZonePrivate(m_id);
     // TODO small risk may not match if tran times differ due to outdated files
     // TODO Some valid TZ names are not valid ICU names, use translation table?
     if (m_icu->isValid())
         return m_icu->displayName(atMSecsSinceEpoch, nameType, locale);
+    lock.unlock();
 #else
     Q_UNUSED(nameType)
     Q_UNUSED(locale)
@@ -932,12 +942,14 @@ QString QTzTimeZonePrivate::displayName(QTimeZone::TimeType timeType,
                                         const QLocale &locale) const
 {
 #if QT_CONFIG(icu)
+    auto lock = qt_unique_lock(s_icu_mutex);
     if (!m_icu)
         m_icu = new QIcuTimeZonePrivate(m_id);
     // TODO small risk may not match if tran times differ due to outdated files
     // TODO Some valid TZ names are not valid ICU names, use translation table?
     if (m_icu->isValid())
         return m_icu->displayName(timeType, nameType, locale);
+    lock.unlock();
 #else
     Q_UNUSED(timeType)
     Q_UNUSED(nameType)
diff --git a/qtbase/src/corelib/tools/qarraydata.h b/qtbase/src/corelib/tools/qarraydata.h
index dcd95924c1..d01739e7e6 100644
--- a/qtbase/src/corelib/tools/qarraydata.h
+++ b/qtbase/src/corelib/tools/qarraydata.h
@@ -42,6 +42,7 @@
 
 #include <QtCore/qrefcount.h>
 #include <string.h>
+#include <cstdint>
 
 QT_BEGIN_NAMESPACE
 
@@ -58,14 +59,14 @@ struct Q_CORE_EXPORT QArrayData
     {
         Q_ASSERT(size == 0
                 || offset < 0 || size_t(offset) >= sizeof(QArrayData));
-        return reinterpret_cast<char *>(this) + offset;
+        return reinterpret_cast<void *> (reinterpret_cast<uintptr_t>(this) + offset);
     }
 
     const void *data() const
     {
         Q_ASSERT(size == 0
                 || offset < 0 || size_t(offset) >= sizeof(QArrayData));
-        return reinterpret_cast<const char *>(this) + offset;
+        return reinterpret_cast<void *> (reinterpret_cast<uintptr_t>(this) + offset);
     }
 
     // This refers to array data mutability, not "header data" represented by
diff --git a/qtbase/src/corelib/tools/qfreelist_p.h b/qtbase/src/corelib/tools/qfreelist_p.h
index 5ba23b344b..9974102136 100644
--- a/qtbase/src/corelib/tools/qfreelist_p.h
+++ b/qtbase/src/corelib/tools/qfreelist_p.h
@@ -161,7 +161,7 @@ class QFreeList
                 return i;
             x -= size;
         }
-        Q_ASSERT(false);
+        Q_UNREACHABLE();
         return -1;
     }
 
diff --git a/qtbase/src/corelib/tools/qvarlengtharray.h b/qtbase/src/corelib/tools/qvarlengtharray.h
index 0110956b77..2b30da0d2c 100644
--- a/qtbase/src/corelib/tools/qvarlengtharray.h
+++ b/qtbase/src/corelib/tools/qvarlengtharray.h
@@ -152,19 +152,18 @@ public:
         if (s == a) {   // i.e. s != 0
             T copy(t);
             realloc(s, s<<1);
-            const int idx = s++;
-            new (ptr + idx) T(std::move(copy));
+            new (end()) T(std::move(copy));
         } else {
-            const int idx = s++;
-            new (ptr + idx) T(t);
+            new (end()) T(t);
         }
+        ++s;
     }
 
     void append(T &&t) {
         if (s == a)
             realloc(s, s << 1);
-        const int idx = s++;
-        new (ptr + idx) T(std::move(t));
+        new (end()) T(std::move(t));
+        ++s;
     }
 
     void append(const T *buf, int size);
@@ -501,7 +500,7 @@ Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthA
 }
 
 template <class T, int Prealloc>
-Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, size_type n, const T &t)
+Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, int n, const T &t)
 {
     Q_ASSERT_X(isValidIterator(before), "QVarLengthArray::insert", "The specified const_iterator argument 'before' is invalid");
 
@@ -538,6 +537,11 @@ Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthA
     int f = int(abegin - ptr);
     int l = int(aend - ptr);
     int n = l - f;
+    if (n == 0) // avoid UB in std::copy() below
+        return ptr + f;
+
+    Q_ASSERT(n > 0); // aend must be reachable from abegin
+
     if (QTypeInfo<T>::isComplex) {
         std::copy(ptr + l, ptr + s, QT_MAKE_CHECKED_ARRAY_ITERATOR(ptr + f, s - f));
         T *i = ptr + s;
diff --git a/qtbase/src/corelib/tools/qversionnumber.h b/qtbase/src/corelib/tools/qversionnumber.h
index d43b86ba51..2843f2b043 100644
--- a/qtbase/src/corelib/tools/qversionnumber.h
+++ b/qtbase/src/corelib/tools/qversionnumber.h
@@ -273,10 +273,10 @@ public:
 
     Q_REQUIRED_RESULT Q_CORE_EXPORT QString toString() const;
 #if QT_STRINGVIEW_LEVEL < 2
-    Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = nullptr);
+    Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber fromString(const QString &string, int *suffixIndex = nullptr);
 #endif
-    Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QLatin1String string, int *suffixIndex = nullptr);
-    Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QStringView string, int *suffixIndex = nullptr);
+    Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber fromString(QLatin1String string, int *suffixIndex = nullptr);
+    Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber fromString(QStringView string, int *suffixIndex = nullptr);
 
 private:
 #ifndef QT_NO_DATASTREAM
diff --git a/qtbase/src/dbus/qdbusintegrator.cpp b/qtbase/src/dbus/qdbusintegrator.cpp
index 5b66ce971b..28a3b0ffea 100644
--- a/qtbase/src/dbus/qdbusintegrator.cpp
+++ b/qtbase/src/dbus/qdbusintegrator.cpp
@@ -1135,7 +1135,13 @@ void QDBusConnectionPrivate::closeConnection()
         }
     }
 
-    qDeleteAll(pendingCalls);
+    for (auto it = pendingCalls.begin(); it != pendingCalls.end(); ++it) {
+        auto call = *it;
+        if (!call->ref.deref()) {
+            delete call;
+        }
+    }
+    pendingCalls.clear();
 
     // Disconnect all signals from signal hooks and from the object tree to
     // avoid QObject::destroyed being sent to dbus daemon thread which has
@@ -2584,6 +2590,11 @@ QDBusConnectionPrivate::findMetaObject(const QString &service, const QString &pa
         if (mo)
             return mo;
     }
+    if (path.isEmpty()) {
+        error = QDBusError(QDBusError::InvalidObjectPath, QLatin1String("Object path cannot be empty"));
+        lastError = error;
+        return nullptr;
+    }
 
     // introspect the target object
     QDBusMessage msg = QDBusMessage::createMethodCall(service, path,
diff --git a/qtbase/src/dbus/qdbusmetaobject.cpp b/qtbase/src/dbus/qdbusmetaobject.cpp
index 5265568f42..7e9f0f1acc 100644
--- a/qtbase/src/dbus/qdbusmetaobject.cpp
+++ b/qtbase/src/dbus/qdbusmetaobject.cpp
@@ -210,6 +210,9 @@ QDBusMetaObjectGenerator::findType(const QByteArray &signature,
         } else if (signature == "a{ss}") {
             result.name = "QMap<QString,QString>";
             type = qMetaTypeId<QMap<QString, QString> >();
+        } else if (signature == "aay") {
+            result.name = "QByteArrayList";
+            type = qMetaTypeId<QByteArrayList>();
         } else {
             result.name = "{D-Bus type \"" + signature + "\"}";
             type = registerComplexDBusType(result.name);
diff --git a/qtbase/src/gui/accessible/qaccessible.cpp b/qtbase/src/gui/accessible/qaccessible.cpp
index d705bfccb5..0caf3c808c 100644
--- a/qtbase/src/gui/accessible/qaccessible.cpp
+++ b/qtbase/src/gui/accessible/qaccessible.cpp
@@ -54,6 +54,7 @@
 #include <QtCore/qdebug.h>
 #include <QtCore/qloggingcategory.h>
 #include <QtCore/qmetaobject.h>
+#include <QtCore/private/qmetaobject_p.h>
 #include <QtCore/qhash.h>
 #include <private/qfactoryloader_p.h>
 
@@ -681,6 +682,25 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object)
     // Create a QAccessibleInterface for the object class. Start by the most
     // derived class and walk up the class hierarchy.
     const QMetaObject *mo = object->metaObject();
+    const auto *objectPriv = QObjectPrivate::get(object);
+    /*
+     We do not want to cache each and every QML metaobject (Button_QMLTYPE_124,
+     Button_QMLTYPE_125, etc.). Those dynamic metaobjects shouldn't have an
+     accessible interface in any case. Instead, we start the whole checking
+     with the first non-dynamic meta-object. To avoid potential regressions
+     in other areas of Qt that also use dynamic metaobjects, we only do this
+     for objects that are QML-related (approximated by checking whether they
+     have ddata set).
+    */
+    const bool qmlRelated = !objectPriv->isDeletingChildren &&
+                            objectPriv->declarativeData;
+    while (qmlRelated && mo) {
+        auto mop = QMetaObjectPrivate::get(mo);
+        if (!mop || !(mop->flags & DynamicMetaObject))
+            break;
+
+        mo = mo->superClass();
+    };
     while (mo) {
         const QString cn = QLatin1String(mo->className());
 
@@ -696,14 +716,15 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object)
         // Find a QAccessiblePlugin (factory) for the class name. If there's
         // no entry in the cache try to create it using the plugin loader.
         if (!qAccessiblePlugins()->contains(cn)) {
+            QAccessiblePlugin *factory = nullptr; // 0 means "no plugin found". This is cached as well.
             const int index = loader()->indexOf(cn);
-            if (index != -1) {
-                QAccessiblePlugin *factory = qobject_cast<QAccessiblePlugin *>(loader()->instance(index));
-                qAccessiblePlugins()->insert(cn, factory);
-            }
+            if (index != -1)
+                factory = qobject_cast<QAccessiblePlugin *>(loader()->instance(index));
+            qAccessiblePlugins()->insert(cn, factory);
         }
 
         // At this point the cache should contain a valid factory pointer or 0:
+        Q_ASSERT(qAccessiblePlugins()->contains(cn));
         QAccessiblePlugin *factory = qAccessiblePlugins()->value(cn);
         if (factory) {
             QAccessibleInterface *result = factory->create(cn, object);
diff --git a/qtbase/src/gui/configure.json b/qtbase/src/gui/configure.json
index 1f08795c57..12c95742d2 100644
--- a/qtbase/src/gui/configure.json
+++ b/qtbase/src/gui/configure.json
@@ -834,7 +834,8 @@
                     "// embedded devices, are not intended to be used together with X. EGL support",
                     "// has to be disabled in plugins like xcb in this case since the native display,",
                     "// window and pixmap types will be different than what an X-based platform",
-                    "// plugin would expect."
+                    "// plugin would expect.",
+                    "#define USE_X11"
                 ],
                 "include": [ "EGL/egl.h", "X11/Xlib.h" ],
                 "main": [
diff --git a/qtbase/src/gui/image/qimage.cpp b/qtbase/src/gui/image/qimage.cpp
index 64efc17fe5..7152ac1607 100644
--- a/qtbase/src/gui/image/qimage.cpp
+++ b/qtbase/src/gui/image/qimage.cpp
@@ -2258,6 +2258,7 @@ bool QImage::reinterpretAsFormat(Format format)
         // In case detach() ran out of memory
         if (!d) {
             d = oldD;
+            d->ref.ref();
             return false;
         }
     }
diff --git a/qtbase/src/gui/image/qppmhandler.cpp b/qtbase/src/gui/image/qppmhandler.cpp
index 728259ba9e..b03458bdd9 100644
--- a/qtbase/src/gui/image/qppmhandler.cpp
+++ b/qtbase/src/gui/image/qppmhandler.cpp
@@ -63,7 +63,7 @@ static void discard_pbm_line(QIODevice *d)
     } while (res > 0 && buf[res-1] != '\n');
 }
 
-static int read_pbm_int(QIODevice *d)
+static int read_pbm_int(QIODevice *d, bool *ok)
 {
     char c;
     int          val = -1;
@@ -97,6 +97,8 @@ static int read_pbm_int(QIODevice *d)
         else
             break;
     }
+    if (val < 0)
+        *ok = false;
     return hasOverflow ? -1 : val;
 }
 
@@ -113,16 +115,17 @@ static bool read_pbm_header(QIODevice *device, char& type, int& w, int& h, int&
     if (type < '1' || type > '6')
         return false;
 
-    w = read_pbm_int(device);                        // get image width
-    h = read_pbm_int(device);                        // get image height
+    bool ok = true;
+    w = read_pbm_int(device, &ok);                // get image width
+    h = read_pbm_int(device, &ok);                // get image height
 
     if (type == '1' || type == '4')
         mcc = 1;                                  // ignore max color component
     else
-        mcc = read_pbm_int(device);               // get max color component
+        mcc = read_pbm_int(device, &ok);          // get max color component
 
-    if (w <= 0 || w > 32767 || h <= 0 || h > 32767 || mcc <= 0 || mcc > 0xffff)
-        return false;                                        // weird P.M image
+    if (!ok || w <= 0 || w > 32767 || h <= 0 || h > 32767 || mcc <= 0 || mcc > 0xffff)
+        return false;                             // weird P.M image
 
     return true;
 }
@@ -233,18 +236,18 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
     } else {                                        // read ascii data
         uchar *p;
         int n;
-        char buf;
-        for (y = 0; (y < h) && (device->peek(&buf, 1) == 1); y++) {
+        bool ok = true;
+        for (y = 0; y < h && ok; y++) {
             p = outImage->scanLine(y);
             n = pbm_bpl;
             if (nbits == 1) {
                 int b;
                 int bitsLeft = w;
-                while (n--) {
+                while (n-- && ok) {
                     b = 0;
                     for (int i=0; i<8; i++) {
                         if (i < bitsLeft)
-                            b = (b << 1) | (read_pbm_int(device) & 1);
+                            b = (b << 1) | (read_pbm_int(device, &ok) & 1);
                         else
                             b = (b << 1) | (0 & 1); // pad it our self if we need to
                     }
@@ -253,36 +256,38 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
                 }
             } else if (nbits == 8) {
                 if (mcc == 255) {
-                    while (n--) {
-                        *p++ = read_pbm_int(device);
+                    while (n-- && ok) {
+                        *p++ = read_pbm_int(device, &ok);
                     }
                 } else {
-                    while (n--) {
-                        *p++ = (read_pbm_int(device) & 0xffff) * 255 / mcc;
+                    while (n-- && ok) {
+                        *p++ = (read_pbm_int(device, &ok) & 0xffff) * 255 / mcc;
                     }
                 }
             } else {                                // 32 bits
                 n /= 4;
                 int r, g, b;
                 if (mcc == 255) {
-                    while (n--) {
-                        r = read_pbm_int(device);
-                        g = read_pbm_int(device);
-                        b = read_pbm_int(device);
+                    while (n-- && ok) {
+                        r = read_pbm_int(device, &ok);
+                        g = read_pbm_int(device, &ok);
+                        b = read_pbm_int(device, &ok);
                         *((QRgb*)p) = qRgb(r, g, b);
                         p += 4;
                     }
                 } else {
-                    while (n--) {
-                        r = read_pbm_int(device);
-                        g = read_pbm_int(device);
-                        b = read_pbm_int(device);
+                    while (n-- && ok) {
+                        r = read_pbm_int(device, &ok);
+                        g = read_pbm_int(device, &ok);
+                        b = read_pbm_int(device, &ok);
                         *((QRgb*)p) = scale_pbm_color(mcc, r, g, b);
                         p += 4;
                     }
                 }
             }
         }
+        if (!ok)
+            return false;
     }
 
     if (format == QImage::Format_Mono) {
diff --git a/qtbase/src/gui/kernel/qcursor.cpp b/qtbase/src/gui/kernel/qcursor.cpp
index d6ccaff8ed..455088241c 100644
--- a/qtbase/src/gui/kernel/qcursor.cpp
+++ b/qtbase/src/gui/kernel/qcursor.cpp
@@ -251,7 +251,8 @@ void QCursor::setPos(QScreen *screen, int x, int y)
 {
     if (screen) {
         if (QPlatformCursor *cursor = screen->handle()->cursor()) {
-            const QPoint devicePos = QHighDpi::toNativePixels(QPoint(x, y), screen);
+            const QPoint pos(x, y);
+            const QPoint devicePos = QHighDpi::toNativePixels(pos, screen->virtualSiblingAt(pos));
             // Need to check, since some X servers generate null mouse move
             // events, causing looping in applications which call setPos() on
             // every mouse move event.
diff --git a/qtbase/src/gui/kernel/qhighdpiscaling.cpp b/qtbase/src/gui/kernel/qhighdpiscaling.cpp
index 9bbf2773a9..3ac4a4d8b6 100644
--- a/qtbase/src/gui/kernel/qhighdpiscaling.cpp
+++ b/qtbase/src/gui/kernel/qhighdpiscaling.cpp
@@ -580,9 +580,8 @@ void QHighDpiScaling::setScreenFactor(QScreen *screen, qreal factor)
     else
         qNamedScreenScaleFactors()->insert(name, factor);
 
-    // hack to force re-evaluation of screen geometry
     if (screen->handle())
-        screen->d_func()->setPlatformScreen(screen->handle()); // updates geometries based on scale factor
+        screen->d_func()->updateLogicalDpi();
 }
 
 QPoint QHighDpiScaling::mapPositionToNative(const QPoint &pos, const QPlatformScreen *platformScreen)
diff --git a/qtbase/src/gui/kernel/qplatformservices.cpp b/qtbase/src/gui/kernel/qplatformservices.cpp
index fdc6a6c4aa..ac47f98c5d 100644
--- a/qtbase/src/gui/kernel/qplatformservices.cpp
+++ b/qtbase/src/gui/kernel/qplatformservices.cpp
@@ -55,6 +55,19 @@ QT_BEGIN_NAMESPACE
     \brief The QPlatformServices provides the backend for desktop-related functionality.
 */
 
+/*!
+    \enum QPlatformServices::Capability
+
+    Capabilities are used to determine a specific platform service's availability.
+
+    \value ColorPickingFromScreen The platform natively supports color picking from screen.
+    This capability indicates that the platform supports "opaque" color picking, where the
+    platform implements a complete user experience for color picking and outputs a color.
+    This is in contrast to the application implementing the color picking user experience
+    (taking care of showing a cross hair, instructing the platform integration to obtain
+    the color at a given pixel, etc.). The related service function is pickColor().
+ */
+
 QPlatformServices::QPlatformServices()
 { }
 
@@ -85,5 +98,16 @@ QByteArray QPlatformServices::desktopEnvironment() const
     return QByteArray("UNKNOWN");
 }
 
+QPlatformServiceColorPicker *QPlatformServices::colorPicker(QWindow *parent)
+{
+    Q_UNUSED(parent);
+    return nullptr;
+}
+
+bool QPlatformServices::hasCapability(Capability capability) const
+{
+    Q_UNUSED(capability)
+    return false;
+}
 
 QT_END_NAMESPACE
diff --git a/qtbase/src/gui/kernel/qplatformservices.h b/qtbase/src/gui/kernel/qplatformservices.h
index 5de96cfa7d..a8b2a4ce71 100644
--- a/qtbase/src/gui/kernel/qplatformservices.h
+++ b/qtbase/src/gui/kernel/qplatformservices.h
@@ -50,16 +50,32 @@
 //
 
 #include <QtGui/qtguiglobal.h>
+#include <QtCore/qobject.h>
 
 QT_BEGIN_NAMESPACE
 
 class QUrl;
+class QWindow;
+
+class Q_GUI_EXPORT QPlatformServiceColorPicker : public QObject
+{
+    Q_OBJECT
+public:
+    using QObject::QObject;
+    virtual void pickColor() = 0;
+Q_SIGNALS:
+    void colorPicked(const QColor &color);
+};
 
 class Q_GUI_EXPORT QPlatformServices
 {
 public:
     Q_DISABLE_COPY_MOVE(QPlatformServices)
 
+    enum Capability {
+        ColorPicking,
+    };
+
     QPlatformServices();
     virtual ~QPlatformServices() { }
 
@@ -67,6 +83,10 @@ public:
     virtual bool openDocument(const QUrl &url);
 
     virtual QByteArray desktopEnvironment() const;
+
+    virtual bool hasCapability(Capability capability) const;
+
+    virtual QPlatformServiceColorPicker *colorPicker(QWindow *parent = nullptr);
 };
 
 QT_END_NAMESPACE
diff --git a/qtbase/src/gui/kernel/qplatformtheme.cpp b/qtbase/src/gui/kernel/qplatformtheme.cpp
index 71521c0339..2325873245 100644
--- a/qtbase/src/gui/kernel/qplatformtheme.cpp
+++ b/qtbase/src/gui/kernel/qplatformtheme.cpp
@@ -163,6 +163,8 @@ QT_BEGIN_NAMESPACE
 
     \value ShowShortcutsInContextMenus (bool) Whether to display shortcut key sequences in context menus.
 
+    \value ButtonPressKeys (QList<Qt::Key>) A list of keys that can be used to press buttons via keyboard input.
+
     \sa themeHint(), QStyle::pixelMetric()
 */
 
@@ -563,6 +565,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
         }
     case MouseQuickSelectionThreshold:
         return QVariant(10);
+    case ButtonPressKeys:
+        return QVariant::fromValue(QList<Qt::Key>({ Qt::Key_Space, Qt::Key_Select }));
     }
     return QVariant();
 }
diff --git a/qtbase/src/gui/kernel/qplatformtheme.h b/qtbase/src/gui/kernel/qplatformtheme.h
index 3185fc4541..7e6c9d5740 100644
--- a/qtbase/src/gui/kernel/qplatformtheme.h
+++ b/qtbase/src/gui/kernel/qplatformtheme.h
@@ -120,7 +120,8 @@ public:
         TouchDoubleTapDistance,
         ShowShortcutsInContextMenus,
         IconFallbackSearchPaths,
-        MouseQuickSelectionThreshold
+        MouseQuickSelectionThreshold,
+        ButtonPressKeys
     };
 
     enum DialogType {
diff --git a/qtbase/src/gui/kernel/qscreen.cpp b/qtbase/src/gui/kernel/qscreen.cpp
index 8e0eb35116..5d172a58dd 100644
--- a/qtbase/src/gui/kernel/qscreen.cpp
+++ b/qtbase/src/gui/kernel/qscreen.cpp
@@ -77,6 +77,12 @@ QScreen::QScreen(QPlatformScreen *screen)
     d->setPlatformScreen(screen);
 }
 
+void QScreenPrivate::updateLogicalDpi()
+{
+    logicalDpi = QPlatformScreen::overrideDpi(platformScreen->logicalDpi());
+    updateGeometriesWithSignals(); // updates geometries based on scale factor
+}
+
 void QScreenPrivate::updateGeometriesWithSignals()
 {
     const QRect oldGeometry = geometry;
diff --git a/qtbase/src/gui/kernel/qscreen_p.h b/qtbase/src/gui/kernel/qscreen_p.h
index 7da542c25e..e50fc3190b 100644
--- a/qtbase/src/gui/kernel/qscreen_p.h
+++ b/qtbase/src/gui/kernel/qscreen_p.h
@@ -70,6 +70,7 @@ public:
         geometry = platformScreen->deviceIndependentGeometry();
         availableGeometry = QHighDpi::fromNative(platformScreen->availableGeometry(), QHighDpiScaling::factor(platformScreen), geometry.topLeft());
     }
+    void updateLogicalDpi();
 
     void updatePrimaryOrientation();
     void updateGeometriesWithSignals();
diff --git a/qtbase/src/gui/painting/qblendfunctions_p.h b/qtbase/src/gui/painting/qblendfunctions_p.h
index 080da98ec4..6997d62b3c 100644
--- a/qtbase/src/gui/painting/qblendfunctions_p.h
+++ b/qtbase/src/gui/painting/qblendfunctions_p.h
@@ -246,25 +246,32 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl,
                                   int dudx, int dvdx, int dudy, int dvdy, int u0, int v0,
                                   Blender blender)
 {
-    int fromY = qMax(qRound(topY), clip.top());
-    int toY = qMin(qRound(bottomY), clip.top() + clip.height());
+    qint64 fromY = qMax(qRound(topY), clip.top());
+    qint64 toY = qMin(qRound(bottomY), clip.top() + clip.height());
     if (fromY >= toY)
         return;
 
     qreal leftSlope = (bottomLeft.x - topLeft.x) / (bottomLeft.y - topLeft.y);
     qreal rightSlope = (bottomRight.x - topRight.x) / (bottomRight.y - topRight.y);
-    int dx_l = int(leftSlope * 0x10000);
-    int dx_r = int(rightSlope * 0x10000);
-    int x_l = int((topLeft.x + (qreal(0.5) + fromY - topLeft.y) * leftSlope + qreal(0.5)) * 0x10000);
-    int x_r = int((topRight.x + (qreal(0.5) + fromY - topRight.y) * rightSlope + qreal(0.5)) * 0x10000);
-
-    int fromX, toX, x1, x2, u, v, i, ii;
+    qint64 dx_l = qint64(leftSlope * 0x10000);
+    qint64 dx_r = qint64(rightSlope * 0x10000);
+    qint64 x_l = qint64((topLeft.x + (qreal(0.5) + fromY - topLeft.y) * leftSlope + qreal(0.5)) * 0x10000);
+    qint64 x_r = qint64((topRight.x + (qreal(0.5) + fromY - topRight.y) * rightSlope + qreal(0.5)) * 0x10000);
+
+    qint64 sourceRectTop = qint64(sourceRect.top());
+    qint64 sourceRectLeft = qint64(sourceRect.left());
+    qint64 sourceRectWidth = qint64(sourceRect.width());
+    qint64 sourceRectHeight = qint64(sourceRect.height());
+    qint64 clipLeft = qint64(clip.left());
+    qint64 clipWidth = qint64(clip.width());
+
+    qint64 fromX, toX, x1, x2, u, v, i, ii;
     DestT *line;
-    for (int y = fromY; y < toY; ++y) {
+    for (qint64 y = fromY; y < toY; ++y) {
         line = reinterpret_cast<DestT *>(reinterpret_cast<uchar *>(destPixels) + y * dbpl);
 
-        fromX = qMax(x_l >> 16, clip.left());
-        toX = qMin(x_r >> 16, clip.left() + clip.width());
+        fromX = qMax(x_l >> 16, clipLeft);
+        toX = qMin(x_r >> 16, clipLeft + clipWidth);
         if (fromX < toX) {
             // Because of rounding, we can get source coordinates outside the source image.
             // Clamp these coordinates to the source rect to avoid segmentation fault and
@@ -275,10 +282,10 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl,
             u = x1 * dudx + y * dudy + u0;
             v = x1 * dvdx + y * dvdy + v0;
             for (; x1 < toX; ++x1) {
-                int uu = u >> 16;
-                int vv = v >> 16;
-                if (uu >= sourceRect.left() && uu < sourceRect.left() + sourceRect.width()
-                    && vv >= sourceRect.top() && vv < sourceRect.top() + sourceRect.height()) {
+                qint64 uu = u >> 16;
+                qint64 vv = v >> 16;
+                if (uu >= sourceRectLeft && uu < sourceRectLeft + sourceRectWidth
+                    && vv >= sourceRectTop && vv < sourceRectTop + sourceRectHeight) {
                     break;
                 }
                 u += dudx;
@@ -290,10 +297,10 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl,
             u = (x2 - 1) * dudx + y * dudy + u0;
             v = (x2 - 1) * dvdx + y * dvdy + v0;
             for (; x2 > x1; --x2) {
-                int uu = u >> 16;
-                int vv = v >> 16;
-                if (uu >= sourceRect.left() && uu < sourceRect.left() + sourceRect.width()
-                    && vv >= sourceRect.top() && vv < sourceRect.top() + sourceRect.height()) {
+                qint64 uu = u >> 16;
+                qint64 vv = v >> 16;
+                if (uu >= sourceRectLeft && uu < sourceRectLeft + sourceRectWidth
+                    && vv >= sourceRectTop && vv < sourceRectTop + sourceRectHeight) {
                     break;
                 }
                 u -= dudx;
@@ -308,8 +315,8 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl,
             // Beginning of the scan line, with per-pixel checks.
             i = x1 - fromX;
             while (i) {
-                int uu = qBound(sourceRect.left(), u >> 16, sourceRect.left() + sourceRect.width() - 1);
-                int vv = qBound(sourceRect.top(), v >> 16, sourceRect.top() + sourceRect.height() - 1);
+                qint64 uu = qBound(sourceRectLeft, u >> 16, sourceRectLeft + sourceRectWidth - 1);
+                qint64 vv = qBound(sourceRectTop, v >> 16, sourceRectTop + sourceRectHeight - 1);
                 blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + vv * sbpl)[uu]);
                 u += dudx;
                 v += dvdx;
@@ -348,8 +355,8 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl,
             // End of the scan line, with per-pixel checks.
             i = toX - x2;
             while (i) {
-                int uu = qBound(sourceRect.left(), u >> 16, sourceRect.left() + sourceRect.width() - 1);
-                int vv = qBound(sourceRect.top(), v >> 16, sourceRect.top() + sourceRect.height() - 1);
+                qint64 uu = qBound(sourceRectLeft, u >> 16, sourceRectLeft + sourceRectWidth - 1);
+                qint64 vv = qBound(sourceRectTop, v >> 16, sourceRectTop + sourceRectHeight - 1);
                 blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + vv * sbpl)[uu]);
                 u += dudx;
                 v += dvdx;
diff --git a/qtbase/src/gui/painting/qpaintengine_raster.cpp b/qtbase/src/gui/painting/qpaintengine_raster.cpp
index 283923de52..f08eb9cbee 100644
--- a/qtbase/src/gui/painting/qpaintengine_raster.cpp
+++ b/qtbase/src/gui/painting/qpaintengine_raster.cpp
@@ -560,31 +560,6 @@ void QRasterPaintEngine::updateMatrix(const QTransform &matrix)
     QRasterPaintEngineState *s = state();
     // FALCON: get rid of this line, see drawImage call below.
     s->matrix = matrix;
-    QTransform::TransformationType txop = s->matrix.type();
-
-    switch (txop) {
-
-    case QTransform::TxNone:
-        s->flags.int_xform = true;
-        break;
-
-    case QTransform::TxTranslate:
-        s->flags.int_xform = qreal(int(s->matrix.dx())) == s->matrix.dx()
-                            && qreal(int(s->matrix.dy())) == s->matrix.dy();
-        break;
-
-    case QTransform::TxScale:
-        s->flags.int_xform = qreal(int(s->matrix.dx())) == s->matrix.dx()
-                            && qreal(int(s->matrix.dy())) == s->matrix.dy()
-                            && qreal(int(s->matrix.m11())) == s->matrix.m11()
-                            && qreal(int(s->matrix.m22())) == s->matrix.m22();
-        break;
-
-    default: // shear / perspective...
-        s->flags.int_xform = false;
-        break;
-    }
-
     s->flags.tx_noshear = qt_scaleForTransform(s->matrix, &s->txscale);
 
     ensureOutlineMapper();
@@ -617,7 +592,6 @@ QRasterPaintEngineState::QRasterPaintEngineState()
     flags.bilinear = false;
     flags.legacy_rounding = false;
     flags.fast_text = true;
-    flags.int_xform = true;
     flags.tx_noshear = true;
     flags.fast_images = true;
 
@@ -1793,7 +1767,7 @@ void QRasterPaintEngine::fill(const QVectorPath &path, const QBrush &brush)
     QRectF cpRect = path.controlPointRect();
     const QRectF pathDeviceRect = s->matrix.mapRect(cpRect);
     // Skip paths that by conservative estimates are completely outside the paint device.
-    if (!pathDeviceRect.intersects(QRectF(d->deviceRect)))
+    if (!pathDeviceRect.intersects(QRectF(d->deviceRect)) || !pathDeviceRect.isValid())
         return;
 
     ProcessSpans blend = d->getBrushFunc(pathDeviceRect, &s->brushData);
diff --git a/qtbase/src/gui/painting/qpaintengine_raster_p.h b/qtbase/src/gui/painting/qpaintengine_raster_p.h
index 089aadc3f7..bf7363d5aa 100644
--- a/qtbase/src/gui/painting/qpaintengine_raster_p.h
+++ b/qtbase/src/gui/painting/qpaintengine_raster_p.h
@@ -111,7 +111,6 @@ public:
         uint bilinear : 1;
         uint legacy_rounding : 1;
         uint fast_text : 1;
-        uint int_xform : 1;
         uint tx_noshear : 1;
         uint fast_images : 1;
     };
diff --git a/qtbase/src/gui/painting/qpainterpath.cpp b/qtbase/src/gui/painting/qpainterpath.cpp
index f9544a3241..d80fafeaf1 100644
--- a/qtbase/src/gui/painting/qpainterpath.cpp
+++ b/qtbase/src/gui/painting/qpainterpath.cpp
@@ -1253,7 +1253,7 @@ void QPainterPath::addText(const QPointF &point, const QFont &f, const QString &
 
         if (si.analysis.flags < QScriptAnalysis::TabOrObject) {
             QGlyphLayout glyphs = eng->shapedGlyphs(&si);
-            QFontEngine *fe = f.d->engineForScript(si.analysis.script);
+            QFontEngine *fe = eng->fontEngine(si);
             Q_ASSERT(fe);
             fe->addOutlineToPath(x, y, glyphs, this,
                                  si.analysis.bidiLevel % 2
diff --git a/qtbase/src/gui/painting/qpathclipper_p.h b/qtbase/src/gui/painting/qpathclipper_p.h
index 9444a87b71..18f64c5e8c 100644
--- a/qtbase/src/gui/painting/qpathclipper_p.h
+++ b/qtbase/src/gui/painting/qpathclipper_p.h
@@ -156,7 +156,7 @@ public:
     int vertex(Direction direction) const;
 
 private:
-    int m_next[2][2];
+    int m_next[2][2] = { { -1, -1 }, { -1, -1 } };
 };
 
 class QPathSegments
@@ -296,10 +296,6 @@ inline QPathEdge::QPathEdge(int a, int b)
     , angle(0)
     , invAngle(0)
 {
-    m_next[0][0] = -1;
-    m_next[1][0] = -1;
-    m_next[0][0] = -1;
-    m_next[1][0] = -1;
 }
 
 inline int QPathEdge::next(Traversal traversal, Direction direction) const
diff --git a/qtbase/src/gui/painting/qpdf.cpp b/qtbase/src/gui/painting/qpdf.cpp
index 3066744f1b..2c8d3c3b53 100644
--- a/qtbase/src/gui/painting/qpdf.cpp
+++ b/qtbase/src/gui/painting/qpdf.cpp
@@ -2760,6 +2760,8 @@ int QPdfEnginePrivate::addBrushPattern(const QTransform &m, bool *specifyColor,
         return gradientBrush(brush, matrix, gStateObject);
     }
 
+    matrix = brush.transform() * matrix;
+
     if ((!brush.isOpaque() && brush.style() < Qt::LinearGradientPattern) || opacity != 1.0)
         *gStateObject = addConstantAlphaObject(qRound(brush.color().alpha() * opacity),
                                                qRound(pen.color().alpha() * opacity));
diff --git a/qtbase/src/gui/painting/qstroker.cpp b/qtbase/src/gui/painting/qstroker.cpp
index cb5d395e80..3b6357a893 100644
--- a/qtbase/src/gui/painting/qstroker.cpp
+++ b/qtbase/src/gui/painting/qstroker.cpp
@@ -1182,6 +1182,7 @@ void QDashStroker::processCurrentSubpath()
         // Check if the entire line should be clipped away or simplified
         bool clipIt = clipping && !lineIntersectsRect(prev, e, clip_tl, clip_br);
         bool skipDashing = elen * invSumLength > repetitionLimit();
+        int maxDashes = dashCount;
         if (skipDashing || clipIt) {
             // Cut away full dash sequences.
             elen -= std::floor(elen * invSumLength) * sumLength;
@@ -1196,7 +1197,7 @@ void QDashStroker::processCurrentSubpath()
                     pos = estop; // move pos to next path element
                     done = true;
                 } else { // Dash is on this line
-                    pos = dpos + estart;
+                    pos = --maxDashes > 0 ? dpos + estart : estop;
                     done = pos >= estop;
                     if (++idash >= dashCount)
                         idash = 0;
diff --git a/qtbase/src/gui/painting/qt_attribution.json b/qtbase/src/gui/painting/qt_attribution.json
index 7b16e8c211..0e87d30aa2 100644
--- a/qtbase/src/gui/painting/qt_attribution.json
+++ b/qtbase/src/gui/painting/qt_attribution.json
@@ -10,7 +10,7 @@
         "Homepage": "http://www.freetype.org",
         "License": "Freetype Project License or GNU General Public License v2.0 only",
         "LicenseId": "FTL or GPL-2.0",
-        "LicenseFile": "../../3rdparty/freetype/docs/LICENSE.TXT",
+        "LicenseFile": "../../3rdparty/freetype/LICENSE.TXT",
         "Copyright": "Copyright 2000-2016 by David Turner, Robert Wilhelm, and Werner Lemberg."
     },
     {
diff --git a/qtbase/src/gui/rhi/qshader_p_p.h b/qtbase/src/gui/rhi/qshader_p_p.h
index ec9d25971f..4a5a7a6d51 100644
--- a/qtbase/src/gui/rhi/qshader_p_p.h
+++ b/qtbase/src/gui/rhi/qshader_p_p.h
@@ -68,13 +68,13 @@ struct Q_GUI_EXPORT QShaderPrivate
     {
     }
 
-    QShaderPrivate(const QShaderPrivate *other)
+    QShaderPrivate(const QShaderPrivate &other)
         : ref(1),
-          qsbVersion(other->qsbVersion),
-          stage(other->stage),
-          desc(other->desc),
-          shaders(other->shaders),
-          bindings(other->bindings)
+          qsbVersion(other.qsbVersion),
+          stage(other.stage),
+          desc(other.desc),
+          shaders(other.shaders),
+          bindings(other.bindings)
     {
     }
 
diff --git a/qtbase/src/gui/rhi/qshaderdescription_p_p.h b/qtbase/src/gui/rhi/qshaderdescription_p_p.h
index ec2b0b6b4c..3da33a8a2b 100644
--- a/qtbase/src/gui/rhi/qshaderdescription_p_p.h
+++ b/qtbase/src/gui/rhi/qshaderdescription_p_p.h
@@ -63,16 +63,16 @@ struct Q_GUI_EXPORT QShaderDescriptionPrivate
         localSize[0] = localSize[1] = localSize[2] = 0;
     }
 
-    QShaderDescriptionPrivate(const QShaderDescriptionPrivate *other)
+    QShaderDescriptionPrivate(const QShaderDescriptionPrivate &other)
         : ref(1),
-          inVars(other->inVars),
-          outVars(other->outVars),
-          uniformBlocks(other->uniformBlocks),
-          pushConstantBlocks(other->pushConstantBlocks),
-          storageBlocks(other->storageBlocks),
-          combinedImageSamplers(other->combinedImageSamplers),
-          storageImages(other->storageImages),
-          localSize(other->localSize)
+          inVars(other.inVars),
+          outVars(other.outVars),
+          uniformBlocks(other.uniformBlocks),
+          pushConstantBlocks(other.pushConstantBlocks),
+          storageBlocks(other.storageBlocks),
+          combinedImageSamplers(other.combinedImageSamplers),
+          storageImages(other.storageImages),
+          localSize(other.localSize)
     {
     }
 
diff --git a/qtbase/src/gui/text/qfontdatabase.cpp b/qtbase/src/gui/text/qfontdatabase.cpp
index cf716df669..f0d8ef85ff 100644
--- a/qtbase/src/gui/text/qfontdatabase.cpp
+++ b/qtbase/src/gui/text/qfontdatabase.cpp
@@ -983,7 +983,7 @@ QFontEngine *loadSingleEngine(int script,
         if (style->key.stretch != 0 && request.stretch != 0
             && (request.styleName.isEmpty() || request.styleName != style->styleName)) {
             def.stretch = (request.stretch * 100 + style->key.stretch / 2) / style->key.stretch;
-        } else {
+        } else if (request.stretch == QFont::AnyStretch) {
             def.stretch = 100;
         }
 
diff --git a/qtbase/src/gui/text/qtextdocumentlayout.cpp b/qtbase/src/gui/text/qtextdocumentlayout.cpp
index ba72e26c3f..72267e9380 100644
--- a/qtbase/src/gui/text/qtextdocumentlayout.cpp
+++ b/qtbase/src/gui/text/qtextdocumentlayout.cpp
@@ -2123,7 +2123,7 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
 {
     Q_Q(const QTextDocumentLayout);
     const QTextBlockFormat blockFormat = bl.blockFormat();
-    const QTextCharFormat charFormat = QTextCursor(bl).charFormat();
+    const QTextCharFormat charFormat = bl.charFormat();
     QFont font(charFormat.font());
     if (q->paintDevice())
         font = QFont(font, q->paintDevice());
@@ -2361,9 +2361,10 @@ QTextLayoutStruct QTextDocumentLayoutPrivate::layoutCell(QTextTable *t, const QT
         floatMinWidth = qMax(floatMinWidth, cd->minimumWidth);
     }
 
-    // constraint the maximumWidth by the minimum width of the fixed size floats, to
-    // keep them visible
+    // constraint the maximum/minimumWidth by the minimum width of the fixed size floats,
+    // to keep them visible
     layoutStruct.maximumWidth = qMax(layoutStruct.maximumWidth, floatMinWidth);
+    layoutStruct.minimumWidth = qMax(layoutStruct.minimumWidth, floatMinWidth);
 
     // as floats in cells get added to the table's float list but must not affect
     // floats in other cells we must clear the list here.
@@ -2540,6 +2541,8 @@ recalc_minmax_widths:
             for (int n = 0; n < cspan; ++n) {
                 const int col = i + n;
                 QFixed w = widthToDistribute / (cspan - n);
+                if (td->maxWidths[col] != QFIXED_MAX)
+                    w = qMax(td->maxWidths[col], w);
                 td->maxWidths[col] = qMax(td->minWidths.at(col), w);
                 widthToDistribute -= td->maxWidths.at(col);
                 if (widthToDistribute <= 0)
diff --git a/qtbase/src/gui/text/qtextengine.cpp b/qtbase/src/gui/text/qtextengine.cpp
index 805ab87dd6..1d976310e3 100644
--- a/qtbase/src/gui/text/qtextengine.cpp
+++ b/qtbase/src/gui/text/qtextengine.cpp
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtGui module of the Qt Toolkit.
@@ -1559,6 +1559,12 @@ void QTextEngine::shapeText(int item) const
         // Overwrite with 0 token to indicate failure
         QGlyphLayout g = availableGlyphs(&si);
         g.glyphs[0] = 0;
+        g.attributes[0].clusterStart = true;
+
+        ushort *log_clusters = logClusters(&si);
+        for (int i = 0; i < itemLength; ++i)
+            log_clusters[i] = 0;
+
         return;
     }
 
diff --git a/qtbase/src/gui/util/qdesktopservices.cpp b/qtbase/src/gui/util/qdesktopservices.cpp
index fbb63a9408..4d5fafaaa7 100644
--- a/qtbase/src/gui/util/qdesktopservices.cpp
+++ b/qtbase/src/gui/util/qdesktopservices.cpp
@@ -54,6 +54,8 @@
 #include <qpa/qplatformintegration.h>
 #include <qdir.h>
 
+#include <QtCore/private/qlocking_p.h>
+
 QT_BEGIN_NAMESPACE
 
 class QOpenUrlHandlerRegistry : public QObject
@@ -81,6 +83,7 @@ Q_GLOBAL_STATIC(QOpenUrlHandlerRegistry, handlerRegistry)
 
 void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler)
 {
+    const auto lock = qt_scoped_lock(mutex);
     HandlerHash::Iterator it = handlers.begin();
     while (it != handlers.end()) {
         if (it->receiver == handler) {
@@ -294,7 +297,8 @@ void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, c
     h.name = method;
     registry->handlers.insert(scheme.toLower(), h);
     QObject::connect(receiver, SIGNAL(destroyed(QObject*)),
-                     registry, SLOT(handlerDestroyed(QObject*)));
+                     registry, SLOT(handlerDestroyed(QObject*)),
+                     Qt::DirectConnection);
 }
 
 /*!
diff --git a/qtbase/src/gui/util/qpkmhandler.cpp b/qtbase/src/gui/util/qpkmhandler.cpp
index e0c3b75efe..3414f9d8ba 100644
--- a/qtbase/src/gui/util/qpkmhandler.cpp
+++ b/qtbase/src/gui/util/qpkmhandler.cpp
@@ -57,7 +57,7 @@ struct PkmType
     quint32 bytesPerBlock;
 };
 
-static PkmType typeMap[5] = {
+static constexpr PkmType typeMap[5] = {
     { 0x8D64,  8 },   // GL_ETC1_RGB8_OES
     { 0x9274,  8 },   // GL_COMPRESSED_RGB8_ETC2
     { 0, 0 },         // unused (obsolete)
diff --git a/qtbase/src/network/access/qnetworkreplyfileimpl.cpp b/qtbase/src/network/access/qnetworkreplyfileimpl.cpp
index b6be93147a..6e69b4c4d3 100644
--- a/qtbase/src/network/access/qnetworkreplyfileimpl.cpp
+++ b/qtbase/src/network/access/qnetworkreplyfileimpl.cpp
@@ -89,9 +89,10 @@ QNetworkReplyFileImpl::QNetworkReplyFileImpl(QNetworkAccessManager *manager, con
         // we handle only local files
         QString msg = QCoreApplication::translate("QNetworkAccessFileBackend", "Request for opening non-local file %1").arg(url.toString());
         setError(QNetworkReply::ProtocolInvalidOperationError, msg);
+        setFinished(true); // We're finished, will emit finished() after ctor is done.
         QMetaObject::invokeMethod(this, "errorOccurred", Qt::QueuedConnection,
             Q_ARG(QNetworkReply::NetworkError, QNetworkReply::ProtocolInvalidOperationError));
-        fileOpenFinished(false);
+        QMetaObject::invokeMethod(this, [this](){ fileOpenFinished(false); }, Qt::QueuedConnection);
         return;
     }
 #endif
diff --git a/qtbase/src/network/access/qnetworkreplyimpl.cpp b/qtbase/src/network/access/qnetworkreplyimpl.cpp
index bcdf6ee2f1..3b6deb82bd 100644
--- a/qtbase/src/network/access/qnetworkreplyimpl.cpp
+++ b/qtbase/src/network/access/qnetworkreplyimpl.cpp
@@ -680,7 +680,7 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QIODevice *data)
     // read until EOF from data
     if (Q_UNLIKELY(copyDevice)) {
         qCritical("QNetworkReplyImpl: copy from QIODevice already in progress -- "
-                  "backend probly needs to be fixed");
+                  "backend probably needs to be fixed");
         return;
     }
 
diff --git a/qtbase/src/network/kernel/qauthenticator.cpp b/qtbase/src/network/kernel/qauthenticator.cpp
index 86242b011f..c317d1fe39 100644
--- a/qtbase/src/network/kernel/qauthenticator.cpp
+++ b/qtbase/src/network/kernel/qauthenticator.cpp
@@ -50,6 +50,7 @@
 #include <qstring.h>
 #include <qdatetime.h>
 #include <qrandom.h>
+#include "private/qsystemlibrary_p.h"
 
 #ifdef Q_OS_WIN
 #include <qmutex.h>
@@ -1542,7 +1543,7 @@ static bool q_SSPI_library_load()
 
     // Initialize security interface
     if (pSecurityFunctionTable == nullptr) {
-        securityDLLHandle = LoadLibrary(L"secur32.dll");
+        securityDLLHandle = QSystemLibrary::load(L"secur32");
         if (securityDLLHandle != nullptr) {
             INIT_SECURITY_INTERFACE pInitSecurityInterface =
                 reinterpret_cast<INIT_SECURITY_INTERFACE>(
diff --git a/qtbase/src/network/kernel/qhostinfo_unix.cpp b/qtbase/src/network/kernel/qhostinfo_unix.cpp
index 9b0a2ee669..73679c9ef1 100644
--- a/qtbase/src/network/kernel/qhostinfo_unix.cpp
+++ b/qtbase/src/network/kernel/qhostinfo_unix.cpp
@@ -122,7 +122,6 @@ static QFunctionPointer resolveSymbol(QLibrary &lib, const char *sym)
 
 LibResolv::LibResolv()
 {
-    QLibrary lib;
 #ifdef LIBRESOLV_SO
     lib.setFileName(QStringLiteral(LIBRESOLV_SO));
     if (!lib.load())
diff --git a/qtbase/src/network/socket/qsocks5socketengine.cpp b/qtbase/src/network/socket/qsocks5socketengine.cpp
index 3a046fd116..97fadca0b3 100644
--- a/qtbase/src/network/socket/qsocks5socketengine.cpp
+++ b/qtbase/src/network/socket/qsocks5socketengine.cpp
@@ -1296,7 +1296,7 @@ void QSocks5SocketEnginePrivate::_q_udpSocketReadNotification()
         int pos = 0;
         const char *buf = inBuf.constData();
         if (inBuf.size() < 4) {
-            QSOCKS5_D_DEBUG << "bugus udp data, discarding";
+            QSOCKS5_D_DEBUG << "bogus udp data, discarding";
             return;
         }
         QSocks5RevivedDatagram datagram;
diff --git a/qtbase/src/network/ssl/qsslcontext_openssl.cpp b/qtbase/src/network/ssl/qsslcontext_openssl.cpp
index c9f202f573..d0a428c2d2 100644
--- a/qtbase/src/network/ssl/qsslcontext_openssl.cpp
+++ b/qtbase/src/network/ssl/qsslcontext_openssl.cpp
@@ -409,7 +409,7 @@ init_context:
         break;
     case QSsl::DtlsV1_0OrLater:
         minVersion = DTLS1_VERSION;
-        maxVersion = DTLS_MAX_VERSION;
+        maxVersion = 0;
         break;
     case QSsl::DtlsV1_2:
         minVersion = DTLS1_2_VERSION;
@@ -417,7 +417,7 @@ init_context:
         break;
     case QSsl::DtlsV1_2OrLater:
         minVersion = DTLS1_2_VERSION;
-        maxVersion = DTLS_MAX_VERSION;
+        maxVersion = 0;
         break;
     case QSsl::TlsV1_3OrLater:
 #ifdef TLS1_3_VERSION
diff --git a/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp b/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
index aaf8741130..b58935372c 100644
--- a/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
+++ b/qtbase/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
@@ -59,57 +59,6 @@
 
 QT_BEGIN_NAMESPACE
 
-#ifdef OPENSSL_NO_DEPRECATED_3_0
-
-static int q_DH_check(DH *dh, int *status)
-{
-    // DH_check was first deprecated in OpenSSL 3.0.0, as low-level
-    // API; the EVP_PKEY family of functions was advised as an alternative.
-    // As of now EVP_PKEY_params_check ends up calling ... DH_check,
-    // which is good enough.
-
-    Q_ASSERT(dh);
-    Q_ASSERT(status);
-
-    EVP_PKEY *key = q_EVP_PKEY_new();
-    if (!key) {
-        qCWarning(lcSsl, "EVP_PKEY_new failed");
-        QSslSocketBackendPrivate::logAndClearErrorQueue();
-        return 0;
-    }
-    const auto keyDeleter = qScopeGuard([key](){
-        q_EVP_PKEY_free(key);
-    });
-    if (!q_EVP_PKEY_set1_DH(key, dh)) {
-        qCWarning(lcSsl, "EVP_PKEY_set1_DH failed");
-        QSslSocketBackendPrivate::logAndClearErrorQueue();
-        return 0;
-    }
-
-    EVP_PKEY_CTX *keyCtx = q_EVP_PKEY_CTX_new(key, nullptr);
-    if (!keyCtx) {
-        qCWarning(lcSsl, "EVP_PKEY_CTX_new failed");
-        QSslSocketBackendPrivate::logAndClearErrorQueue();
-        return 0;
-    }
-    const auto ctxDeleter = qScopeGuard([keyCtx]{
-        q_EVP_PKEY_CTX_free(keyCtx);
-    });
-
-    const int result = q_EVP_PKEY_param_check(keyCtx);
-    QSslSocketBackendPrivate::logAndClearErrorQueue();
-    // Note: unlike DH_check, we cannot obtain the 'status',
-    // if the 'result' is 0 (actually the result is 1 only
-    // if this 'status' was 0). We could probably check the
-    // errors from the error queue, but it's not needed anyway
-    // - see the 'isSafeDH' below, how it returns immediately
-    // on 0.
-    Q_UNUSED(status)
-
-    return result;
-}
-#endif // OPENSSL_NO_DEPRECATED_3_0
-
 static bool isSafeDH(DH *dh)
 {
     int status = 0;
diff --git a/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp b/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp
index 368e25345f..b9eb9fe928 100644
--- a/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp
+++ b/qtbase/src/network/ssl/qsslsocket_openssl_symbols.cpp
@@ -148,7 +148,6 @@ DEFINEFUNC(int, EVP_PKEY_up_ref, EVP_PKEY *a, a, return 0, return)
 DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e, return nullptr, return)
 DEFINEFUNC(int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx, return 0, return)
 DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, return)
-DEFINEFUNC(int, EVP_PKEY_base_id, EVP_PKEY *a, a, return NID_undef, return)
 DEFINEFUNC(int, RSA_bits, RSA *a, a, return 0, return)
 DEFINEFUNC(int, DSA_bits, DSA *a, a, return 0, return)
 DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return)
@@ -371,7 +370,15 @@ DEFINEFUNC(const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return nullptr
 DEFINEFUNC(int, SSL_version, const SSL *a, a, return 0, return)
 DEFINEFUNC2(int, SSL_get_error, SSL *a, a, int b, b, return -1, return)
 DEFINEFUNC(STACK_OF(X509) *, SSL_get_peer_cert_chain, SSL *a, a, return nullptr, return)
+
+#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
+DEFINEFUNC(X509 *, SSL_get1_peer_certificate, SSL *a, a, return nullptr, return)
+DEFINEFUNC(int, EVP_PKEY_get_base_id, const EVP_PKEY *pkey, pkey, return -1, return)
+#else
 DEFINEFUNC(X509 *, SSL_get_peer_certificate, SSL *a, a, return nullptr, return)
+DEFINEFUNC(int, EVP_PKEY_base_id, EVP_PKEY *a, a, return NID_undef, return)
+#endif // OPENSSL_VERSION_MAJOR >= 3
+
 DEFINEFUNC(long, SSL_get_verify_result, const SSL *a, a, return -1, return)
 DEFINEFUNC(SSL *, SSL_new, SSL_CTX *a, a, return nullptr, return)
 DEFINEFUNC(SSL_CTX *, SSL_get_SSL_CTX, SSL *a, a, return nullptr, return)
@@ -492,9 +499,7 @@ DEFINEFUNC(DH *, DH_new, DUMMYARG, DUMMYARG, return nullptr, return)
 DEFINEFUNC(void, DH_free, DH *dh, dh, return, DUMMYARG)
 DEFINEFUNC3(DH *, d2i_DHparams, DH**a, a, const unsigned char **pp, pp, long length, length, return nullptr, return)
 DEFINEFUNC2(int, i2d_DHparams, DH *a, a, unsigned char **p, p, return -1, return)
-#ifndef OPENSSL_NO_DEPRECATED_3_0
 DEFINEFUNC2(int, DH_check, DH *dh, dh, int *codes, codes, return 0, return)
-#endif // OPENSSL_NO_DEPRECATED_3_0
 DEFINEFUNC3(BIGNUM *, BN_bin2bn, const unsigned char *s, s, int len, len, BIGNUM *ret, ret, return nullptr, return)
 
 #ifndef OPENSSL_NO_EC
@@ -861,7 +866,6 @@ bool q_resolveOpenSslSymbols()
     RESOLVEFUNC(EVP_PKEY_CTX_new)
     RESOLVEFUNC(EVP_PKEY_param_check)
     RESOLVEFUNC(EVP_PKEY_CTX_free)
-    RESOLVEFUNC(EVP_PKEY_base_id)
     RESOLVEFUNC(RSA_bits)
     RESOLVEFUNC(OPENSSL_sk_new_null)
     RESOLVEFUNC(OPENSSL_sk_push)
@@ -1100,7 +1104,15 @@ bool q_resolveOpenSslSymbols()
     RESOLVEFUNC(SSL_version)
     RESOLVEFUNC(SSL_get_error)
     RESOLVEFUNC(SSL_get_peer_cert_chain)
+
+#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
+    RESOLVEFUNC(SSL_get1_peer_certificate)
+    RESOLVEFUNC(EVP_PKEY_get_base_id)
+#else
     RESOLVEFUNC(SSL_get_peer_certificate)
+    RESOLVEFUNC(EVP_PKEY_base_id)
+#endif // OPENSSL_VERSION_MAJOR >= 3
+
     RESOLVEFUNC(SSL_get_verify_result)
     RESOLVEFUNC(SSL_new)
     RESOLVEFUNC(SSL_get_SSL_CTX)
@@ -1199,9 +1211,7 @@ bool q_resolveOpenSslSymbols()
     RESOLVEFUNC(DH_free)
     RESOLVEFUNC(d2i_DHparams)
     RESOLVEFUNC(i2d_DHparams)
-#ifndef OPENSSL_NO_DEPRECATED_3_0
     RESOLVEFUNC(DH_check)
-#endif // OPENSSL_NO_DEPRECATED_3_0
     RESOLVEFUNC(BN_bin2bn)
 
 #ifndef OPENSSL_NO_EC
diff --git a/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h b/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
index 95e8897a3b..71961775e2 100644
--- a/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ b/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -237,7 +237,6 @@ Q_AUTOTEST_EXPORT int q_EVP_PKEY_up_ref(EVP_PKEY *a);
 EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
 void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
 int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
-int q_EVP_PKEY_base_id(EVP_PKEY *a);
 int q_RSA_bits(RSA *a);
 Q_AUTOTEST_EXPORT int q_OPENSSL_sk_num(OPENSSL_STACK *a);
 Q_AUTOTEST_EXPORT void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *));
@@ -510,7 +509,6 @@ const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a);
 int q_SSL_version(const SSL *a);
 int q_SSL_get_error(SSL *a, int b);
 STACK_OF(X509) *q_SSL_get_peer_cert_chain(SSL *a);
-X509 *q_SSL_get_peer_certificate(SSL *a);
 long q_SSL_get_verify_result(const SSL *a);
 SSL *q_SSL_new(SSL_CTX *a);
 SSL_CTX *q_SSL_get_SSL_CTX(SSL *a);
@@ -582,10 +580,7 @@ DH *q_DH_new();
 void q_DH_free(DH *dh);
 DH *q_d2i_DHparams(DH **a, const unsigned char **pp, long length);
 int q_i2d_DHparams(DH *a, unsigned char **p);
-
-#ifndef OPENSSL_NO_DEPRECATED_3_0
 int q_DH_check(DH *dh, int *codes);
-#endif // OPENSSL_NO_DEPRECATED_3_0
 
 BIGNUM *q_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
 #define q_SSL_CTX_set_tmp_dh(ctx, dh) q_SSL_CTX_ctrl((ctx), SSL_CTRL_SET_TMP_DH, 0, (char *)dh)
@@ -754,6 +749,17 @@ void q_CRYPTO_free(void *str, const char *file, int line);
 int q_SSL_CTX_get_security_level(const SSL_CTX *ctx);
 void q_SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
 
+// Here we have the ones that make difference between OpenSSL pre/post v3:
+#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 3
+X509 *q_SSL_get1_peer_certificate(SSL *a);
+#define q_SSL_get_peer_certificate q_SSL_get1_peer_certificate
+int q_EVP_PKEY_get_base_id(const EVP_PKEY *pkey);
+#define q_EVP_PKEY_base_id q_EVP_PKEY_get_base_id
+#else
+X509 *q_SSL_get_peer_certificate(SSL *a);
+int q_EVP_PKEY_base_id(EVP_PKEY *a);
+#endif // OPENSSL_VERSION_MAJOR >= 3
+
 QT_END_NAMESPACE
 
 #endif
diff --git a/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h b/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h
index bf37d07fd8..dbd42fb799 100644
--- a/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h
+++ b/qtbase/src/platformsupport/eglconvenience/qt_egl_p.h
@@ -61,7 +61,11 @@
 # if !defined(Q_OS_INTEGRITY)
 #  define WIN_INTERFACE_CUSTOM   // NV
 # endif // Q_OS_INTEGRITY
-#endif  // QT_EGL_NO_X11
+#else // QT_EGL_NO_X11
+// If one has an eglplatform.h with https://github.com/KhronosGroup/EGL-Registry/pull/130
+// that needs USE_X11 to be defined.
+# define USE_X11
+#endif
 
 #ifdef QT_EGL_WAYLAND
 # define WAYLAND // NV
diff --git a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 159b490ce0..00aa80cd58 100644
--- a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -567,6 +567,8 @@ void QFontconfigDatabase::populateFontDatabase()
         fonts = FcFontList(nullptr, pattern, os);
         FcObjectSetDestroy(os);
         FcPatternDestroy(pattern);
+        if (!fonts)
+            return;
     }
 
     for (int i = 0; i < fonts->nfont; i++)
diff --git a/qtbase/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/qtbase/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
index f57e1540e0..80a911a210 100644
--- a/qtbase/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
+++ b/qtbase/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
@@ -756,7 +756,7 @@ QRect QEvdevTouchScreenData::screenGeometry() const
         if (m_screen)
             screen = m_screen;
     }
-    return QHighDpi::toNativePixels(screen->geometry(), screen);
+    return screen ? QHighDpi::toNativePixels(screen->geometry(), screen) : QRect();
 }
 
 void QEvdevTouchScreenData::reportPoints()
diff --git a/qtbase/src/platformsupport/input/libinput/qlibinputtouch.cpp b/qtbase/src/platformsupport/input/libinput/qlibinputtouch.cpp
index 446218e4b3..6eb3a8a355 100644
--- a/qtbase/src/platformsupport/input/libinput/qlibinputtouch.cpp
+++ b/qtbase/src/platformsupport/input/libinput/qlibinputtouch.cpp
@@ -82,7 +82,7 @@ QPointF QLibInputTouch::getPos(libinput_event_touch *e)
         if (m_screen)
             screen = m_screen;
     }
-    const QRect geom = QHighDpi::toNativePixels(screen->geometry(), screen);
+    const QRect geom = screen ? QHighDpi::toNativePixels(screen->geometry(), screen) : QRect();
     const double x = libinput_event_touch_get_x_transformed(e, geom.width());
     const double y = libinput_event_touch_get_y_transformed(e, geom.height());
     return geom.topLeft() + QPointF(x, y);
diff --git a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp
index 877c5d848f..f1e478274c 100644
--- a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp
+++ b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp
@@ -93,6 +93,7 @@ static constexpr const auto KeyTbl = qMakeArray(
         Xkb2Qt<XKB_KEY_Clear,                   Qt::Key_Delete>,
         Xkb2Qt<XKB_KEY_Pause,                   Qt::Key_Pause>,
         Xkb2Qt<XKB_KEY_Print,                   Qt::Key_Print>,
+        Xkb2Qt<XKB_KEY_Sys_Req,                 Qt::Key_SysReq>,
         Xkb2Qt<0x1005FF60,                      Qt::Key_SysReq>,         // hardcoded Sun SysReq
         Xkb2Qt<0x1007ff00,                      Qt::Key_SysReq>,         // hardcoded X386 SysReq
 
@@ -469,7 +470,7 @@ QVector<xkb_keysym_t> QXkbCommon::toKeysym(QKeyEvent *event)
     } else if (event->modifiers() & Qt::KeypadModifier) {
         if (qtKey >= Qt::Key_0 && qtKey <= Qt::Key_9)
             keysyms.append(XKB_KEY_KP_0 + (qtKey - Qt::Key_0));
-    } else if (isLatin(qtKey) && event->text().isUpper()) {
+    } else if (isLatin1(qtKey) && event->text().isUpper()) {
         keysyms.append(qtKey);
     }
 
@@ -521,7 +522,7 @@ int QXkbCommon::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers modifie
         // With standard shortcuts we should prefer a latin character, this is
         // for checks like "some qkeyevent == QKeySequence::Copy" to work even
         // when using for example 'russian' keyboard layout.
-        if (!QXkbCommon::isLatin(keysym)) {
+        if (!QXkbCommon::isLatin1(keysym)) {
             xkb_keysym_t latinKeysym = QXkbCommon::lookupLatinKeysym(state, code);
             if (latinKeysym != XKB_KEY_NoSymbol)
                 keysym = latinKeysym;
@@ -544,7 +545,7 @@ static int keysymToQtKey_internal(xkb_keysym_t keysym, Qt::KeyboardModifiers mod
     } else if (keysym >= XKB_KEY_KP_0 && keysym <= XKB_KEY_KP_9) {
         // numeric keypad keys
         qtKey = Qt::Key_0 + (keysym - XKB_KEY_KP_0);
-    } else if (QXkbCommon::isLatin(keysym)) {
+    } else if (QXkbCommon::isLatin1(keysym)) {
         qtKey = QXkbCommon::qxkbcommon_xkb_keysym_to_upper(keysym);
     } else {
         // check if we have a direct mapping
@@ -674,7 +675,7 @@ QList<int> QXkbCommon::possibleKeys(xkb_state *state, const QKeyEvent *event,
         Qt::KeyboardModifiers neededMods = ModsTbl[i];
         if ((modifiers & neededMods) == neededMods) {
             if (i == 8) {
-                if (isLatin(baseQtKey))
+                if (isLatin1(baseQtKey))
                     continue;
                 // add a latin key as a fall back key
                 sym = lookupLatinKeysym(state, keycode);
@@ -729,7 +730,7 @@ void QXkbCommon::verifyHasLatinLayout(xkb_keymap *keymap)
     for (xkb_layout_index_t layout = 0; layout < layoutCount; ++layout) {
         for (xkb_keycode_t code = minKeycode; code < maxKeycode; ++code) {
             xkb_keymap_key_get_syms_by_level(keymap, code, layout, 0, &keysyms);
-            if (keysyms && isLatin(keysyms[0]))
+            if (keysyms && isLatin1(keysyms[0]))
                 nrLatinKeys++;
             if (nrLatinKeys > 10) // arbitrarily chosen threshold
                 return;
@@ -762,7 +763,7 @@ xkb_keysym_t QXkbCommon::lookupLatinKeysym(xkb_state *state, xkb_keycode_t keyco
         xkb_level_index_t level = xkb_state_key_get_level(state, keycode, layout);
         if (xkb_keymap_key_get_syms_by_level(keymap, keycode, layout, level, &syms) != 1)
             continue;
-        if (isLatin(syms[0])) {
+        if (isLatin1(syms[0])) {
             sym = syms[0];
             break;
         }
diff --git a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h
index 561eae03db..8389bd8f5a 100644
--- a/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h
+++ b/qtbase/src/platformsupport/input/xkbcommon/qxkbcommon_p.h
@@ -94,8 +94,8 @@ public:
     static void verifyHasLatinLayout(xkb_keymap *keymap);
     static xkb_keysym_t lookupLatinKeysym(xkb_state *state, xkb_keycode_t keycode);
 
-    static bool isLatin(xkb_keysym_t sym) {
-        return ((sym >= 'a' && sym <= 'z') || (sym >= 'A' && sym <= 'Z'));
+    static bool isLatin1(xkb_keysym_t sym) {
+        return sym <= 0xff;
     }
     static bool isKeypad(xkb_keysym_t sym) {
         return sym >= XKB_KEY_KP_Space && sym <= XKB_KEY_KP_9;
diff --git a/qtbase/src/platformsupport/kmsconvenience/qkmsdevice.cpp b/qtbase/src/platformsupport/kmsconvenience/qkmsdevice.cpp
index 8cd7f9b368..406f84663f 100644
--- a/qtbase/src/platformsupport/kmsconvenience/qkmsdevice.cpp
+++ b/qtbase/src/platformsupport/kmsconvenience/qkmsdevice.cpp
@@ -318,7 +318,7 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
 
     if (current < 0 && crtc_mode.clock != 0) {
         modes << crtc_mode;
-        current = mode.size() - 1;
+        current = modes.size() - 1;
     }
 
     if (configuration == OutputConfigCurrent)
diff --git a/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
index 9153fd20bb..c8c717ba6b 100644
--- a/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
+++ b/qtbase/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
@@ -913,8 +913,17 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event)
     }
     case QAccessible::NameChanged: {
         if (sendObject || sendObject_property_change || sendObject_property_change_accessible_name) {
-            QString path = pathForInterface(event->accessibleInterface());
-            QVariantList args = packDBusSignalArguments(QLatin1String("accessible-name"), 0, 0, variantForPath(path));
+            QAccessibleInterface *iface = event->accessibleInterface();
+            if (!iface) {
+                qCDebug(lcAccessibilityAtspi,
+                        "NameChanged event from invalid accessible.");
+                return;
+            }
+
+            QString path = pathForInterface(iface);
+            QVariantList args = packDBusSignalArguments(
+                QLatin1String("accessible-name"), 0, 0,
+                QVariant::fromValue(QDBusVariant(iface->text(QAccessible::Name))));
             sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT),
                            QLatin1String("PropertyChange"), args);
         }
@@ -922,8 +931,17 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event)
     }
     case QAccessible::DescriptionChanged: {
         if (sendObject || sendObject_property_change || sendObject_property_change_accessible_description) {
-            QString path = pathForInterface(event->accessibleInterface());
-            QVariantList args = packDBusSignalArguments(QLatin1String("accessible-description"), 0, 0, variantForPath(path));
+            QAccessibleInterface *iface = event->accessibleInterface();
+            if (!iface) {
+                qCDebug(lcAccessibilityAtspi,
+                        "DescriptionChanged event from invalid accessible.");
+                return;
+            }
+
+            QString path = pathForInterface(iface);
+            QVariantList args = packDBusSignalArguments(
+                QLatin1String("accessible-description"), 0, 0,
+                QVariant::fromValue(QDBusVariant(iface->text(QAccessible::Description))));
             sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT),
                            QLatin1String("PropertyChange"), args);
         }
@@ -1038,7 +1056,9 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event)
                 // Combo Box with AT-SPI likes to be special
                 // It requires a name-change to update caches and then selection-changed
                 QString path = pathForInterface(iface);
-                QVariantList args1 = packDBusSignalArguments(QLatin1String("accessible-name"), 0, 0, variantForPath(path));
+                QVariantList args1 = packDBusSignalArguments(
+                    QLatin1String("accessible-name"), 0, 0,
+                    QVariant::fromValue(QDBusVariant(iface->text(QAccessible::Name))));
                 sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT),
                                QLatin1String("PropertyChange"), args1);
                 QVariantList args2 = packDBusSignalArguments(QString(), 0, 0, QVariant::fromValue(QDBusVariant(QVariant(0))));
diff --git a/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp b/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp
index 45ddc8e496..cc734abc63 100644
--- a/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp
+++ b/qtbase/src/platformsupport/linuxaccessibility/dbusconnection.cpp
@@ -69,6 +69,21 @@ QT_BEGIN_NAMESPACE
 DBusConnection::DBusConnection(QObject *parent)
     : QObject(parent), m_a11yConnection(QString()), m_enabled(false)
 {
+    // If the bus is explicitly set via env var it overrides everything else.
+    QByteArray addressEnv = qgetenv("AT_SPI_BUS_ADDRESS");
+    if (!addressEnv.isEmpty()) {
+        // Only connect on next loop run, connections to our enabled signal are
+        // only established after the ctor returns.
+        QMetaObject::invokeMethod(
+                this,
+                [this, addressEnv] {
+                    m_enabled = true;
+                    connectA11yBus(QString::fromLocal8Bit(addressEnv));
+                },
+                Qt::QueuedConnection);
+        return;
+    }
+
     // Start monitoring if "org.a11y.Bus" is registered as DBus service.
     QDBusConnection c = QDBusConnection::sessionBus();
     if (!c.isConnected()) {
diff --git a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp
index 1a3cab275d..2abe039126 100644
--- a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp
+++ b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices.cpp
@@ -51,6 +51,9 @@
 #include <QtCore/QStandardPaths>
 #include <QtCore/QUrl>
 
+#include <QtGui/QGuiApplication>
+#include <QtGui/QWindow>
+
 #if QT_CONFIG(dbus)
 // These QtCore includes are needed for xdg-desktop-portal support
 #include <QtCore/private/qcore_unix_p.h>
@@ -58,6 +61,8 @@
 #include <QtCore/QFileInfo>
 #include <QtCore/QUrlQuery>
 
+#include <QtGui/QColor>
+
 #include <QtDBus/QDBusConnection>
 #include <QtDBus/QDBusMessage>
 #include <QtDBus/QDBusPendingCall>
@@ -142,6 +147,8 @@ static inline bool detectWebBrowser(const QByteArray &desktop,
     }
 
     if (desktop == QByteArray("KDE")) {
+        if (checkExecutable(QStringLiteral("kde-open5"), browser))
+            return true;
         // Konqueror launcher
         if (checkExecutable(QStringLiteral("kfmclient"), browser)) {
             browser->append(QLatin1String(" exec"));
@@ -296,8 +303,135 @@ static inline QDBusMessage xdgDesktopPortalSendEmail(const QUrl &url)
 
     return QDBusConnection::sessionBus().call(message);
 }
+
+namespace {
+struct XDGDesktopColor
+{
+    double r = 0;
+    double g = 0;
+    double b = 0;
+
+    QColor toQColor() const
+    {
+        constexpr auto rgbMax = 255;
+        return { static_cast<int>(r * rgbMax), static_cast<int>(g * rgbMax),
+                 static_cast<int>(b * rgbMax) };
+    }
+};
+
+const QDBusArgument &operator>>(const QDBusArgument &argument, XDGDesktopColor &myStruct)
+{
+    argument.beginStructure();
+    argument >> myStruct.r >> myStruct.g >> myStruct.b;
+    argument.endStructure();
+    return argument;
+}
+
+class XdgDesktopPortalColorPicker : public QPlatformServiceColorPicker
+{
+    Q_OBJECT
+public:
+    XdgDesktopPortalColorPicker(const QString &parentWindowId, QWindow *parent)
+        : QPlatformServiceColorPicker(parent), m_parentWindowId(parentWindowId)
+    {
+    }
+
+    void pickColor() override
+    {
+        // DBus signature:
+        // PickColor (IN   s      parent_window,
+        //            IN   a{sv}  options
+        //            OUT  o      handle)
+        // Options:
+        // handle_token (s) -  A string that will be used as the last element of the @handle.
+
+        QDBusMessage message = QDBusMessage::createMethodCall(
+                QStringLiteral("org.freedesktop.portal.Desktop"), QStringLiteral("/org/freedesktop/portal/desktop"),
+                QStringLiteral("org.freedesktop.portal.Screenshot"), QStringLiteral("PickColor"));
+        message << m_parentWindowId << QVariantMap();
+
+        QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message);
+        auto watcher = new QDBusPendingCallWatcher(pendingCall, this);
+        connect(watcher, &QDBusPendingCallWatcher::finished, this,
+                [this](QDBusPendingCallWatcher *watcher) {
+                    watcher->deleteLater();
+                    QDBusPendingReply<QDBusObjectPath> reply = *watcher;
+                    if (reply.isError()) {
+                        qWarning("DBus call to pick color failed: %s",
+                                 qPrintable(reply.error().message()));
+                        Q_EMIT colorPicked({});
+                    } else {
+                        QDBusConnection::sessionBus().connect(
+                                QStringLiteral("org.freedesktop.portal.Desktop"), reply.value().path(),
+                                QStringLiteral("org.freedesktop.portal.Request"), QStringLiteral("Response"), this,
+                                // clang-format off
+                                SLOT(gotColorResponse(uint,QVariantMap))
+                                // clang-format on
+                        );
+                    }
+                });
+    }
+
+private Q_SLOTS:
+    void gotColorResponse(uint result, const QVariantMap &map)
+    {
+        if (result != 0)
+            return;
+        XDGDesktopColor color{};
+        map.value(QStringLiteral("color")).value<QDBusArgument>() >> color;
+        Q_EMIT colorPicked(color.toQColor());
+        deleteLater();
+    }
+
+private:
+    const QString m_parentWindowId;
+};
+} // namespace
+
 #endif // QT_CONFIG(dbus)
 
+QGenericUnixServices::QGenericUnixServices()
+{
+#if QT_CONFIG(dbus)
+    if (qEnvironmentVariableIntValue("QT_NO_XDG_DESKTOP_PORTAL") > 0) {
+        return;
+    }
+    QDBusMessage message = QDBusMessage::createMethodCall(
+            QStringLiteral("org.freedesktop.portal.Desktop"), QStringLiteral("/org/freedesktop/portal/desktop"),
+            QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("Get"));
+    message << QStringLiteral("org.freedesktop.portal.Screenshot")
+            << QStringLiteral("version");
+
+    QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message);
+    auto watcher = new QDBusPendingCallWatcher(pendingCall);
+    QObject::connect(watcher, &QDBusPendingCallWatcher::finished, watcher,
+                     [this](QDBusPendingCallWatcher *watcher) {
+                         watcher->deleteLater();
+                         QDBusPendingReply<QVariant> reply = *watcher;
+                         if (!reply.isError() && reply.value().toUInt() >= 2)
+                             m_hasScreenshotPortalWithColorPicking = true;
+                     });
+
+#endif
+}
+
+QPlatformServiceColorPicker *QGenericUnixServices::colorPicker(QWindow *parent)
+{
+#if QT_CONFIG(dbus)
+    // Make double sure that we are in a wayland environment. In particular check
+    // WAYLAND_DISPLAY so also XWayland apps benefit from portal-based color picking.
+    // Outside wayland we'll rather rely on other means than the XDG desktop portal.
+    if (!qEnvironmentVariableIsEmpty("WAYLAND_DISPLAY")
+        || QGuiApplication::platformName().startsWith(QLatin1String("wayland"))) {
+        return new XdgDesktopPortalColorPicker(portalWindowIdentifier(parent), parent);
+    }
+    return nullptr;
+#else
+    Q_UNUSED(parent);
+    return nullptr;
+#endif
+}
+
 QByteArray QGenericUnixServices::desktopEnvironment() const
 {
     static const QByteArray result = detectDesktopEnvironment();
@@ -352,6 +486,8 @@ bool QGenericUnixServices::openDocument(const QUrl &url)
 }
 
 #else
+QGenericUnixServices::QGenericUnixServices() = default;
+
 QByteArray QGenericUnixServices::desktopEnvironment() const
 {
     return QByteArrayLiteral("UNKNOWN");
@@ -371,6 +507,30 @@ bool QGenericUnixServices::openDocument(const QUrl &url)
     return false;
 }
 
+QPlatformServiceColorPicker *QGenericUnixServices::colorPicker(QWindow *parent)
+{
+    Q_UNUSED(parent);
+    return nullptr;
+}
+
 #endif // QT_NO_MULTIPROCESS
 
+QString QGenericUnixServices::portalWindowIdentifier(QWindow *window)
+{
+    if (QGuiApplication::platformName() == QLatin1String("xcb"))
+        return QStringLiteral("x11:") + QString::number(window->winId(), 16);
+    return QString();
+}
+
+bool QGenericUnixServices::hasCapability(Capability capability) const
+{
+    switch (capability) {
+    case Capability::ColorPicking:
+        return m_hasScreenshotPortalWithColorPicking;
+    }
+    return false;
+}
+
 QT_END_NAMESPACE
+
+#include "qgenericunixservices.moc"
diff --git a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h
index 8ac3de6f03..30924e64bd 100644
--- a/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h
+++ b/qtbase/src/platformsupport/services/genericunix/qgenericunixservices_p.h
@@ -59,16 +59,21 @@ QT_BEGIN_NAMESPACE
 class QGenericUnixServices : public QPlatformServices
 {
 public:
-    QGenericUnixServices() {}
+    QGenericUnixServices();
 
     QByteArray desktopEnvironment() const override;
 
+    bool hasCapability(Capability capability) const override;
     bool openUrl(const QUrl &url) override;
     bool openDocument(const QUrl &url) override;
+    QPlatformServiceColorPicker *colorPicker(QWindow *parent = nullptr) override;
+
+    virtual QString portalWindowIdentifier(QWindow *window);
 
 private:
     QString m_webBrowser;
     QString m_documentLauncher;
+    bool m_hasScreenshotPortalWithColorPicking = false;
 };
 
 QT_END_NAMESPACE
diff --git a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp
index 09470bccc6..cc7c7d4d8a 100644
--- a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp
+++ b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp
@@ -69,6 +69,7 @@ const QString MenuBarPath = QLatin1String("/MenuBar");
 */
 QDBusMenuConnection::QDBusMenuConnection(QObject *parent, const QString &serviceName)
     : QObject(parent)
+    , m_serviceName(serviceName)
     , m_connection(serviceName.isNull() ? QDBusConnection::sessionBus()
                                         : QDBusConnection::connectToBus(QDBusConnection::SessionBus, serviceName))
     , m_dbusWatcher(new QDBusServiceWatcher(StatusNotifierWatcherService, m_connection, QDBusServiceWatcher::WatchForRegistration, this))
@@ -83,6 +84,12 @@ QDBusMenuConnection::QDBusMenuConnection(QObject *parent, const QString &service
 #endif
 }
 
+QDBusMenuConnection::~QDBusMenuConnection()
+{
+  if (!m_serviceName.isEmpty() && m_connection.isConnected())
+      QDBusConnection::disconnectFromBus(m_serviceName);
+}
+
 void QDBusMenuConnection::dbusError(const QDBusError &error)
 {
     qWarning() << "QDBusTrayIcon encountered a D-Bus error:" << error;
@@ -105,13 +112,7 @@ void QDBusMenuConnection::unregisterTrayIconMenu(QDBusTrayIcon *item)
 
 bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item)
 {
-    bool success = connection().registerService(item->instanceId());
-    if (!success) {
-        qWarning() << "failed to register service" << item->instanceId();
-        return false;
-    }
-
-    success = connection().registerObject(StatusNotifierItemPath, item);
+    bool success = connection().registerObject(StatusNotifierItemPath, item);
     if (!success) {
         unregisterTrayIcon(item);
         qWarning() << "failed to register" << item->instanceId() << StatusNotifierItemPath;
@@ -126,21 +127,18 @@ bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item)
 
 bool QDBusMenuConnection::registerTrayIconWithWatcher(QDBusTrayIcon *item)
 {
+    Q_UNUSED(item);
     QDBusMessage registerMethod = QDBusMessage::createMethodCall(
                 StatusNotifierWatcherService, StatusNotifierWatcherPath, StatusNotifierWatcherService,
                 QLatin1String("RegisterStatusNotifierItem"));
-    registerMethod.setArguments(QVariantList() << item->instanceId());
+    registerMethod.setArguments(QVariantList() << m_connection.baseService());
     return m_connection.callWithCallback(registerMethod, this, SIGNAL(trayIconRegistered()), SLOT(dbusError(QDBusError)));
 }
 
-bool QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item)
+void QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item)
 {
     unregisterTrayIconMenu(item);
     connection().unregisterObject(StatusNotifierItemPath);
-    bool success = connection().unregisterService(item->instanceId());
-    if (!success)
-        qWarning() << "failed to unregister service" << item->instanceId();
-    return success;
 }
 #endif // QT_NO_SYSTEMTRAYICON
 
diff --git a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h
index f484795fbb..97bdfabb85 100644
--- a/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h
+++ b/qtbase/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h
@@ -70,6 +70,7 @@ class QDBusMenuConnection : public QObject
 
 public:
     QDBusMenuConnection(QObject *parent = nullptr, const QString &serviceName = QString());
+    ~QDBusMenuConnection();
     QDBusConnection connection() const { return m_connection; }
     QDBusServiceWatcher *dbusWatcher() const { return m_dbusWatcher; }
     bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; }
@@ -78,7 +79,7 @@ public:
     void unregisterTrayIconMenu(QDBusTrayIcon *item);
     bool registerTrayIcon(QDBusTrayIcon *item);
     bool registerTrayIconWithWatcher(QDBusTrayIcon *item);
-    bool unregisterTrayIcon(QDBusTrayIcon *item);
+    void unregisterTrayIcon(QDBusTrayIcon *item);
 #endif // QT_NO_SYSTEMTRAYICON
 
 Q_SIGNALS:
@@ -90,6 +91,7 @@ private Q_SLOTS:
     void dbusError(const QDBusError &error);
 
 private:
+    QString m_serviceName;
     QDBusConnection m_connection;
     QDBusServiceWatcher *m_dbusWatcher;
     bool m_statusNotifierHostRegistered;
diff --git a/qtbase/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp b/qtbase/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
index bede70975a..76bfec5e5a 100644
--- a/qtbase/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
+++ b/qtbase/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
@@ -71,8 +71,12 @@ Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray")
 static QString iconTempPath()
 {
     QString tempPath = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
-    if (!tempPath.isEmpty())
+    if (!tempPath.isEmpty()) {
+        QString flatpakId = qEnvironmentVariable("FLATPAK_ID");
+        if (!flatpakId.isEmpty() && QFileInfo::exists(QLatin1String("/.flatpak-info")))
+            tempPath += QLatin1String("/app/") + flatpakId;
         return tempPath;
+    }
 
     tempPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation);
 
diff --git a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
index cb1b39db64..6e01af052c 100644
--- a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
+++ b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
@@ -755,6 +755,9 @@ QVariant QGnomeTheme::themeHint(QPlatformTheme::ThemeHint hint) const
         return QVariant(QChar(0x2022));
     case QPlatformTheme::UiEffects:
         return QVariant(int(HoverEffect));
+    case QPlatformTheme::ButtonPressKeys:
+        return QVariant::fromValue(
+                QList<Qt::Key>({ Qt::Key_Space, Qt::Key_Return, Qt::Key_Enter, Qt::Key_Select }));
     default:
         break;
     }
diff --git a/qtbase/src/plugins/platforms/android/androidjniinput.cpp b/qtbase/src/plugins/platforms/android/androidjniinput.cpp
index d0b5e4a12a..05516929bf 100644
--- a/qtbase/src/plugins/platforms/android/androidjniinput.cpp
+++ b/qtbase/src/plugins/platforms/android/androidjniinput.cpp
@@ -79,16 +79,15 @@ namespace QtAndroidInput
                                                   candidatesEnd);
     }
 
-    void showSoftwareKeyboard(int left, int top, int width, int height, int editorHeight, int inputHints, int enterKeyType)
+    void showSoftwareKeyboard(int left, int top, int width, int height, int inputHints, int enterKeyType)
     {
         QJNIObjectPrivate::callStaticMethod<void>(applicationClass(),
                                                   "showSoftwareKeyboard",
-                                                  "(IIIIIII)V",
+                                                  "(IIIIII)V",
                                                   left,
                                                   top,
                                                   width,
                                                   height,
-                                                  editorHeight,
                                                   inputHints,
                                                   enterKeyType);
 #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL
@@ -130,17 +129,6 @@ namespace QtAndroidInput
                                                   anchor.x(), anchor.y(), rtl);
     }
 
-    void updateInputItemRectangle(int left, int top, int width, int height)
-    {
-        QJNIObjectPrivate::callStaticMethod<void>(applicationClass(),
-                                                  "updateInputItemRectangle",
-                                                  "(IIII)V",
-                                                  left,
-                                                  top,
-                                                  width,
-                                                  height);
-    }
-
     static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y)
     {
         if (m_ignoreMouseEvents)
diff --git a/qtbase/src/plugins/platforms/android/androidjniinput.h b/qtbase/src/plugins/platforms/android/androidjniinput.h
index c1442f1904..cc3070c4aa 100644
--- a/qtbase/src/plugins/platforms/android/androidjniinput.h
+++ b/qtbase/src/plugins/platforms/android/androidjniinput.h
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
 namespace QtAndroidInput
 {
     // Software keyboard support
-    void showSoftwareKeyboard(int top, int left, int width, int editorHeight, int height, int inputHints, int enterKeyType);
+    void showSoftwareKeyboard(int top, int left, int width, int height, int inputHints, int enterKeyType);
     void resetSoftwareKeyboard();
     void hideSoftwareKeyboard();
     bool isSoftwareKeyboardVisible();
@@ -57,8 +57,6 @@ namespace QtAndroidInput
     void updateSelection(int selStart, int selEnd, int candidatesStart, int candidatesEnd);
     // Software keyboard support
 
-    // edit field resize
-    void updateInputItemRectangle(int left, int top, int width, int height);
     // cursor/selection handles
     void updateHandles(int handleCount, QPoint editMenuPos = QPoint(), uint32_t editButtons = 0, QPoint cursor = QPoint(), QPoint anchor = QPoint(), bool rtl = false);
 
diff --git a/qtbase/src/plugins/platforms/android/qandroidinputcontext.cpp b/qtbase/src/plugins/platforms/android/qandroidinputcontext.cpp
index 55b9c56724..4efed0bedf 100644
--- a/qtbase/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/qtbase/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -507,7 +507,7 @@ QAndroidInputContext::QAndroidInputContext()
     m_androidInputContext = this;
 
     QObject::connect(QGuiApplication::inputMethod(), &QInputMethod::cursorRectangleChanged,
-                     this, &QAndroidInputContext::updateInputItemRectangle);
+                     this, &QAndroidInputContext::updateSelectionHandles);
     QObject::connect(QGuiApplication::inputMethod(), &QInputMethod::anchorRectangleChanged,
                      this, &QAndroidInputContext::updateSelectionHandles);
     QObject::connect(QGuiApplication::inputMethod(), &QInputMethod::inputItemClipRectangleChanged, this, [this]{
@@ -944,51 +944,12 @@ void QAndroidInputContext::showInputPanel()
     else
         m_updateCursorPosConnection = connect(qGuiApp->focusObject(), SIGNAL(cursorPositionChanged()), this, SLOT(updateCursorPosition()));
 
-    QRect rect = cursorRect();
-    if (!isInputPanelVisible())
-        QtAndroidInput::showSoftwareKeyboard(rect.left(), rect.top(), rect.width(), rect.height(),
-                                         inputItemRectangle().height(),
+    QRect rect = inputItemRectangle();
+    QtAndroidInput::showSoftwareKeyboard(rect.left(), rect.top(), rect.width(), rect.height(),
                                          query->value(Qt::ImHints).toUInt(),
                                          query->value(Qt::ImEnterKeyType).toUInt());
 }
 
-QRect QAndroidInputContext::cursorRect()
-{
-    QSharedPointer<QInputMethodQueryEvent> query = focusObjectInputMethodQuery();
-    // if single line, we do not want to mess with the editor's position, as we do not
-    // have to follow the cursor in vertical axis
-    if (query.isNull()
-        || (query->value(Qt::ImHints).toUInt() & Qt::ImhMultiLine) != Qt::ImhMultiLine)
-        return {};
-
-    auto im = qGuiApp->inputMethod();
-    if (!im)
-        return {};
-
-    const auto cursorRect= im->cursorRectangle().toRect();
-    QRect finalRect(inputItemRectangle());
-    const QWindow *window = qGuiApp->focusWindow();
-    const double pd = window
-        ? QHighDpiScaling::factor(window)
-        : QHighDpiScaling::factor(QtAndroid::androidPlatformIntegration()->screen());
-    finalRect.setY(cursorRect.y() * pd);
-    finalRect.setHeight(cursorRect.height() * pd);
-    //fiddle a bit with vert margins, so the tracking rectangle is not too tight.
-    finalRect += QMargins(0, cursorRect.height() / 4, 0, cursorRect.height() / 4);
-    return finalRect;
-}
-
-void QAndroidInputContext::updateInputItemRectangle()
-{
-    QRect rect = cursorRect();
-
-    if (!rect.isValid())
-        return;
-    QtAndroidInput::updateInputItemRectangle(rect.left(), rect.top(),
-                                             rect.width(), rect.height());
-    updateSelectionHandles();
-}
-
 void QAndroidInputContext::showInputPanelLater(Qt::ApplicationState state)
 {
     if (state != Qt::ApplicationActive)
diff --git a/qtbase/src/plugins/platforms/android/qandroidinputcontext.h b/qtbase/src/plugins/platforms/android/qandroidinputcontext.h
index 02a66c367a..e9bfb98e66 100644
--- a/qtbase/src/plugins/platforms/android/qandroidinputcontext.h
+++ b/qtbase/src/plugins/platforms/android/qandroidinputcontext.h
@@ -138,7 +138,6 @@ public:
 public slots:
     void safeCall(const std::function<void()> &func, Qt::ConnectionType conType = Qt::BlockingQueuedConnection);
     void updateCursorPosition();
-    void updateInputItemRectangle();
     void updateSelectionHandles();
     void handleLocationChanged(int handleId, int x, int y);
     void touchDown(int x, int y);
@@ -155,7 +154,6 @@ private:
     bool focusObjectIsComposing() const;
     void focusObjectStartComposing();
     bool focusObjectStopComposing();
-    QRect cursorRect();
 
 private:
     ExtractedText m_extractedText;
diff --git a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
index e070ba977d..0896917334 100644
--- a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
+++ b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
@@ -43,6 +43,8 @@
 #include <qpa/qplatformgraphicsbuffer.h>
 #include <private/qcore_mac_p.h>
 
+#include <CoreGraphics/CGColorSpace.h>
+
 QT_BEGIN_NAMESPACE
 
 class QIOSurfaceGraphicsBuffer : public QPlatformGraphicsBuffer
diff --git a/qtbase/src/plugins/platforms/eglfs/api/qeglfscursor.cpp b/qtbase/src/plugins/platforms/eglfs/api/qeglfscursor.cpp
index 98e05195ee..1e92f43dec 100644
--- a/qtbase/src/plugins/platforms/eglfs/api/qeglfscursor.cpp
+++ b/qtbase/src/plugins/platforms/eglfs/api/qeglfscursor.cpp
@@ -343,8 +343,7 @@ void QEglFSCursor::paintOnScreen()
     // screens are siblings of each other. When not enabled, the sibling list
     // only contains m_screen itself.
     for (QPlatformScreen *screen : m_screen->virtualSiblings()) {
-        if (screen->geometry().contains(cr.topLeft().toPoint() + m_cursor.hotSpot)
-            && QOpenGLContext::currentContext()->screen() == screen->screen())
+        if (screen->geometry().contains(cr.topLeft().toPoint() + m_cursor.hotSpot))
         {
             cr.translate(-screen->geometry().topLeft());
             const QSize screenSize = screen->geometry().size();
@@ -468,11 +467,12 @@ void QEglFSCursor::draw(const QRectF &r)
 {
     StateSaver stateSaver;
 
-    QEglFSCursorData &gfx = static_cast<QEglFSContext*>(QOpenGLContext::currentContext()->handle())->cursorData;
-    if (!gfx.program) {
-        // one time initialization
+    // one time initialization
+    if (!QOpenGLFunctions::d_ptr)
         initializeOpenGLFunctions();
 
+    QEglFSCursorData &gfx = static_cast<QEglFSContext*>(QOpenGLContext::currentContext()->handle())->cursorData;
+    if (!gfx.program) {
         createShaderPrograms();
 
         if (!gfx.atlasTexture) {
diff --git a/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp b/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp
index 645a0ae2e9..3e0e406f1a 100644
--- a/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp
+++ b/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp
@@ -179,7 +179,7 @@ void QEglFSKmsEventReader::create(QEglFSKmsDevice *device)
 
     m_device = device;
 
-    qCDebug(qLcEglfsKmsDebug, "Initalizing event reader for device %p fd %d",
+    qCDebug(qLcEglfsKmsDebug, "Initializing event reader for device %p fd %d",
             m_device, m_device->fd());
 
     m_thread = new QEglFSKmsEventReaderThread(m_device->fd());
diff --git a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp
index 141fb68a23..d4294d425a 100644
--- a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp
+++ b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.cpp
@@ -122,11 +122,13 @@ QOffscreenIntegration::QOffscreenIntegration()
 #endif
     m_services.reset(new QPlatformServices);
 
-    QWindowSystemInterface::handleScreenAdded(new QOffscreenScreen);
+    m_screen = new QOffscreenScreen;
+    QWindowSystemInterface::handleScreenAdded(m_screen);
 }
 
 QOffscreenIntegration::~QOffscreenIntegration()
 {
+    QWindowSystemInterface::handleScreenRemoved(m_screen);
 }
 
 void QOffscreenIntegration::initialize()
diff --git a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h
index 0ea90f6c2f..fe00fde07c 100644
--- a/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h
+++ b/qtbase/src/plugins/platforms/offscreen/qoffscreenintegration.h
@@ -84,6 +84,7 @@ protected:
 #endif
     QScopedPointer<QPlatformInputContext> m_inputContext;
     QScopedPointer<QPlatformServices> m_services;
+    QPlatformScreen *m_screen;
     mutable QScopedPointer<QPlatformNativeInterface> m_nativeInterface;
 };
 
diff --git a/qtbase/src/plugins/platforms/windows/qwindowsglcontext.cpp b/qtbase/src/plugins/platforms/windows/qwindowsglcontext.cpp
index 6fa5a8a2b3..1f49f0aefd 100644
--- a/qtbase/src/plugins/platforms/windows/qwindowsglcontext.cpp
+++ b/qtbase/src/plugins/platforms/windows/qwindowsglcontext.cpp
@@ -48,6 +48,7 @@
 #include <qpa/qplatformnativeinterface.h>
 #include <QtPlatformHeaders/qwglnativecontext.h>
 
+#include <private/qsystemlibrary_p.h>
 #include <algorithm>
 
 #include <wingdi.h>
@@ -162,19 +163,25 @@ QFunctionPointer QWindowsOpengl32DLL::resolve(const char *name)
 
 bool QWindowsOpengl32DLL::init(bool softwareRendering)
 {
-    const QByteArray opengl32 = QByteArrayLiteral("opengl32.dll");
-    const QByteArray swopengl = QByteArrayLiteral("opengl32sw.dll");
+    const QByteArray opengl32 = QByteArrayLiteral("opengl32");
+    const QByteArray swopengl = QByteArrayLiteral("opengl32sw");
+    bool useSystemLib = false;
 
     QByteArray openglDll = qgetenv("QT_OPENGL_DLL");
-    if (openglDll.isEmpty())
+    if (openglDll.isEmpty()) {
         openglDll = softwareRendering ? swopengl : opengl32;
+        useSystemLib = !softwareRendering;
+    }
 
     openglDll = openglDll.toLower();
     m_nonOpengl32 = openglDll != opengl32;
 
     qCDebug(lcQpaGl) << "Qt: Using WGL and OpenGL from" << openglDll;
 
-    m_lib = ::LoadLibraryA(openglDll.constData());
+    if (useSystemLib)
+        m_lib = QSystemLibrary::load((wchar_t*)(QString::fromLatin1(openglDll).utf16()));
+    else
+        m_lib = LoadLibraryA(openglDll.constData());
     if (!m_lib) {
         qErrnoWarning(::GetLastError(), "Failed to load %s", openglDll.constData());
         return false;
@@ -184,7 +191,7 @@ bool QWindowsOpengl32DLL::init(bool softwareRendering)
         // Load opengl32.dll always. GDI functions like ChoosePixelFormat do
         // GetModuleHandle for opengl32.dll and behave differently (and call back into
         // opengl32) when the module is present. This is fine for dummy contexts and windows.
-        ::LoadLibraryA("opengl32.dll");
+        QSystemLibrary::load(L"opengl32");
     }
 
     wglCreateContext = reinterpret_cast<HGLRC (WINAPI *)(HDC)>(resolve("wglCreateContext"));
diff --git a/qtbase/src/plugins/platforms/windows/qwindowsopengltester.cpp b/qtbase/src/plugins/platforms/windows/qwindowsopengltester.cpp
index d7d186e804..9eb4011bf2 100644
--- a/qtbase/src/plugins/platforms/windows/qwindowsopengltester.cpp
+++ b/qtbase/src/plugins/platforms/windows/qwindowsopengltester.cpp
@@ -49,6 +49,7 @@
 #include <QtCore/qstandardpaths.h>
 #include <QtCore/qlibraryinfo.h>
 #include <QtCore/qhash.h>
+#include <private/qsystemlibrary_p.h>
 
 #ifndef QT_NO_OPENGL
 #include <private/qopengl_p.h>
@@ -396,7 +397,7 @@ bool QWindowsOpenGLTester::testDesktopGL()
 
     // Test #1: Load opengl32.dll and try to resolve an OpenGL 2 function.
     // This will typically fail on systems that do not have a real OpenGL driver.
-    lib = LoadLibraryA("opengl32.dll");
+    lib = QSystemLibrary::load(L"opengl32");
     if (lib) {
         CreateContext = reinterpret_cast<CreateContextType>(
             reinterpret_cast<QFunctionPointer>(::GetProcAddress(lib, "wglCreateContext")));
diff --git a/qtbase/src/plugins/platforms/xcb/nativepainting/qtessellator.cpp b/qtbase/src/plugins/platforms/xcb/nativepainting/qtessellator.cpp
index 1afa00cfc9..118af6ce73 100644
--- a/qtbase/src/plugins/platforms/xcb/nativepainting/qtessellator.cpp
+++ b/qtbase/src/plugins/platforms/xcb/nativepainting/qtessellator.cpp
@@ -41,6 +41,7 @@
 
 #include <QRect>
 #include <QList>
+#include <QMap>
 #include <QDebug>
 
 #include <qmath.h>
diff --git a/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp b/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp
index 34fbc0b10b..767f91752e 100644
--- a/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -702,6 +702,8 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
             QXcbVirtualDesktop *virtualDesktop = virtualDesktopForRootWindow(propertyNotify->window);
             if (virtualDesktop)
                 virtualDesktop->updateWorkArea();
+        } else if (propertyNotify->atom == atom(QXcbAtom::_NET_SUPPORTED)) {
+            m_wmSupport->updateNetWMAtoms();
         } else {
             HANDLE_PLATFORM_WINDOW_EVENT(xcb_property_notify_event_t, window, handlePropertyNotifyEvent);
         }
@@ -838,7 +840,13 @@ xcb_timestamp_t QXcbConnection::getTimestamp()
 
 xcb_window_t QXcbConnection::getSelectionOwner(xcb_atom_t atom) const
 {
-    return Q_XCB_REPLY(xcb_get_selection_owner, xcb_connection(), atom)->owner;
+    auto reply = Q_XCB_REPLY(xcb_get_selection_owner, xcb_connection(), atom);
+    if (!reply) {
+        qCDebug(lcQpaXcb) << "failed to query selection owner";
+        return XCB_NONE;
+    }
+
+    return reply->owner;
 }
 
 xcb_window_t QXcbConnection::getQtSelectionOwner()
diff --git a/qtbase/src/plugins/platforms/xcb/qxcbconnection_basic.cpp b/qtbase/src/plugins/platforms/xcb/qxcbconnection_basic.cpp
index 18dee89adb..9dd608cdc0 100644
--- a/qtbase/src/plugins/platforms/xcb/qxcbconnection_basic.cpp
+++ b/qtbase/src/plugins/platforms/xcb/qxcbconnection_basic.cpp
@@ -179,7 +179,13 @@ xcb_atom_t QXcbBasicConnection::internAtom(const char *name)
     if (!name || *name == 0)
         return XCB_NONE;
 
-    return Q_XCB_REPLY(xcb_intern_atom, m_xcbConnection, false, strlen(name), name)->atom;
+    auto reply = Q_XCB_REPLY(xcb_intern_atom, m_xcbConnection, false, strlen(name), name);
+    if (!reply) {
+        qCDebug(lcQpaXcb) << "failed to query intern atom: " << name;
+        return XCB_NONE;
+    }
+
+    return reply->atom;
 }
 
 QByteArray QXcbBasicConnection::atomName(xcb_atom_t atom)
diff --git a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp
index a032085f0b..4210bf428e 100644
--- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp
+++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp
@@ -534,6 +534,8 @@ bool updateCursorTheme(void *dpy, const QByteArray &theme) {
     Q_UNUSED(screen);
     Q_UNUSED(name);
     QXcbCursor *self = static_cast<QXcbCursor *>(handle);
+    self->m_cursorHash.clear();
+
     updateCursorTheme(self->connection()->xlib_display(),property.toByteArray());
 }
 
@@ -559,14 +561,16 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape)
     int cursorId = cursorIdForShape(cshape);
     xcb_cursor_t cursor = XCB_NONE;
 
-    // Try Xcursor first
 #if QT_CONFIG(xcb_xlib) && QT_CONFIG(library)
+    if (m_screen->xSettings()->initialized())
+        m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this);
+
+    // Try Xcursor first
     if (cshape >= 0 && cshape <= Qt::LastCursor) {
         void *dpy = connection()->xlib_display();
         cursor = loadCursor(dpy, cshape);
         if (!cursor && !m_gtkCursorThemeInitialized && m_screen->xSettings()->initialized()) {
             QByteArray gtkCursorTheme = m_screen->xSettings()->setting("Gtk/CursorThemeName").toByteArray();
-            m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this);
             if (updateCursorTheme(dpy,gtkCursorTheme)) {
                 cursor = loadCursor(dpy, cshape);
             }
diff --git a/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp b/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp
index 76869ced60..02d2eebb56 100644
--- a/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/qtbase/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -274,8 +274,7 @@ QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativ
 #ifndef QT_NO_OPENGL
 QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
 {
-    QXcbScreen *screen = static_cast<QXcbScreen *>(context->screen()->handle());
-    QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
+    QXcbGlIntegration *glIntegration = defaultConnection()->glIntegration();
     if (!glIntegration) {
         qWarning("QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled");
         return nullptr;
diff --git a/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp b/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp
index da179591e9..863e961f4c 100644
--- a/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -258,7 +258,7 @@ enum : quint32 {
             | XCB_EVENT_MASK_POINTER_MOTION,
 
     transparentForInputEventMask = baseEventMask
-            | XCB_EVENT_MASK_VISIBILITY_CHANGE | XCB_EVENT_MASK_RESIZE_REDIRECT
+            | XCB_EVENT_MASK_VISIBILITY_CHANGE
             | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
             | XCB_EVENT_MASK_COLOR_MAP_CHANGE | XCB_EVENT_MASK_OWNER_GRAB_BUTTON
 };
@@ -564,11 +564,6 @@ void QXcbWindow::setGeometry(const QRect &rect)
 {
     QPlatformWindow::setGeometry(rect);
 
-    if (shouldDeferTask(Task::SetGeometry)) {
-        m_deferredGeometry = rect;
-        return;
-    }
-
     propagateSizeHints();
 
     QXcbScreen *currentScreen = xcbScreen();
@@ -693,9 +688,6 @@ void QXcbWindow::setVisible(bool visible)
 
 void QXcbWindow::show()
 {
-    if (shouldDeferTask(Task::Map))
-        return;
-
     if (window()->isTopLevel()) {
 
         // update WM_NORMAL_HINTS
@@ -706,7 +698,7 @@ void QXcbWindow::show()
         if (isTransient(window())) {
             const QWindow *tp = window()->transientParent();
             if (tp && tp->handle())
-                transientXcbParent = static_cast<const QXcbWindow *>(tp->handle())->winId();
+                transientXcbParent = tp->handle()->winId();
             // Default to client leader if there is no transient parent, else modal dialogs can
             // be hidden by their parents.
             if (!transientXcbParent)
@@ -746,10 +738,6 @@ void QXcbWindow::show()
 
 void QXcbWindow::hide()
 {
-    if (shouldDeferTask(Task::Unmap))
-        return;
-
-    m_wmStateValid = false;
     xcb_unmap_window(xcb_connection(), m_window);
 
     // send synthetic UnmapNotify event according to icccm 4.1.4
@@ -909,9 +897,6 @@ QXcbWindow::NetWmStates QXcbWindow::netWmStates()
 
 void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
 {
-    if (shouldDeferTask(Task::SetWindowFlags))
-        return;
-
     Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask));
 
     if (type == Qt::ToolTip)
@@ -941,8 +926,6 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
 
     setTransparentForMouseEvents(flags & Qt::WindowTransparentForInput);
     updateDoesNotAcceptFocus(flags & Qt::WindowDoesNotAcceptFocus);
-
-    m_isWmManagedWindow = !(flags & Qt::X11BypassWindowManagerHint);
 }
 
 void QXcbWindow::setMotifWmHints(Qt::WindowFlags flags)
@@ -1142,9 +1125,6 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
     if (state == m_windowState)
         return;
 
-    if (shouldDeferTask(Task::SetWindowState))
-        return;
-
     // unset old state
     if (m_windowState & Qt::WindowMinimized)
         xcb_map_window(xcb_connection(), m_window);
@@ -1350,6 +1330,12 @@ void QXcbWindow::setWindowIcon(const QIcon &icon)
     }
 
     if (!icon_data.isEmpty()) {
+        // Ignore icon exceeding maximum xcb request length
+        if (icon_data.size() > xcb_get_maximum_request_length(xcb_connection())) {
+            qWarning("Ignoring window icon: Size %llu exceeds maximum xcb request length %u.",
+                     icon_data.size(), xcb_get_maximum_request_length(xcb_connection()));
+            return;
+        }
         xcb_change_property(xcb_connection(),
                             XCB_PROP_MODE_REPLACE,
                             m_window,
@@ -1639,7 +1625,7 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::W
         break;
     }
 
-    if ((flags & Qt::FramelessWindowHint) && !(type & QXcbWindowFunctions::KdeOverride)) {
+    if ((flags & Qt::FramelessWindowHint) && !(types & QXcbWindowFunctions::KdeOverride)) {
         // override netwm type - quick and easy for KDE noborder
         atoms.append(atom(QXcbAtom::_KDE_NET_WM_WINDOW_TYPE_OVERRIDE));
     }
@@ -1894,10 +1880,6 @@ void QXcbWindow::handleUnmapNotifyEvent(const xcb_unmap_notify_event_t *event)
     if (event->window == m_window) {
         m_mapped = false;
         QWindowSystemInterface::handleExposeEvent(window(), QRegion());
-        if (!m_isWmManagedWindow) {
-            m_wmStateValid = true;
-            handleDeferredTasks();
-        }
     }
 }
 
@@ -2212,98 +2194,30 @@ void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event)
     handleLeaveNotifyEvent(event->root_x, event->root_y, event->mode, event->detail, event->time);
 }
 
-bool QXcbWindow::shouldDeferTask(Task task)
-{
-    if (m_wmStateValid)
-        return false;
-
-    m_deferredTasks.append(task);
-    return true;
-}
-
-void QXcbWindow::handleDeferredTasks()
-{
-    Q_ASSERT(m_wmStateValid == true);
-    if (m_deferredTasks.isEmpty())
-        return;
-
-    bool map = false;
-    bool unmap = false;
-
-    QVector<Task> tasks;
-    for (auto taskIt = m_deferredTasks.rbegin(); taskIt != m_deferredTasks.rend(); ++taskIt) {
-        if (!tasks.contains(*taskIt))
-            tasks.prepend(*taskIt);
-    }
-
-    for (Task task : tasks) {
-        switch (task) {
-        case Task::Map:
-            map = true;
-            unmap = false;
-            break;
-        case Task::Unmap:
-            unmap = true;
-            map = false;
-            break;
-        case Task::SetGeometry:
-            setGeometry(m_deferredGeometry);
-            break;
-        case Task::SetWindowFlags:
-            setWindowFlags(window()->flags());
-            break;
-        case Task::SetWindowState:
-            setWindowState(window()->windowState());
-            break;
-        }
-    }
-    m_deferredTasks.clear();
-
-    if (map) {
-        Q_ASSERT(unmap == false);
-        show();
-    }
-    if (unmap) {
-        Q_ASSERT(map == false);
-        hide();
-    }
-}
-
 void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *event)
 {
     connection()->setTime(event->time);
 
-    const bool wmStateChanged = event->atom == atom(QXcbAtom::WM_STATE);
-    const bool netWmStateChanged = event->atom == atom(QXcbAtom::_NET_WM_STATE);
-    if (netWmStateChanged || wmStateChanged) {
-        if (wmStateChanged && !m_wmStateValid && m_isWmManagedWindow) {
-            // ICCCM 4.1.4
-            // Clients that want to re-use a client window (e.g. by mapping it again)
-            // after withdrawing it must wait for the withdrawal to be complete before
-            // proceeding. The preferred method for doing this is for clients to wait for
-            // a window manager to update or remove the WM_STATE property.
-            m_wmStateValid = true;
-            handleDeferredTasks();
-        }
-        if (event->state == XCB_PROPERTY_DELETE)
+    const bool propertyDeleted = event->state == XCB_PROPERTY_DELETE;
+
+    if (event->atom == atom(QXcbAtom::_NET_WM_STATE) || event->atom == atom(QXcbAtom::WM_STATE)) {
+        if (propertyDeleted)
             return;
 
-        if (wmStateChanged) {
+        Qt::WindowStates newState = Qt::WindowNoState;
+
+        if (event->atom == atom(QXcbAtom::WM_STATE)) { // WM_STATE: Quick check for 'Minimize'.
             auto reply = Q_XCB_REPLY(xcb_get_property, xcb_connection(),
                                      0, m_window, atom(QXcbAtom::WM_STATE),
                                      XCB_ATOM_ANY, 0, 1024);
             if (reply && reply->format == 32 && reply->type == atom(QXcbAtom::WM_STATE)) {
-                auto data = static_cast<const quint32 *>(xcb_get_property_value(reply.get()));
-                if (reply->length != 0) {
-                    const bool changedToWithdrawn = data[0] == XCB_ICCCM_WM_STATE_WITHDRAWN;
-                    const bool changedToIconic = data[0] == XCB_ICCCM_WM_STATE_ICONIC;
-                    m_minimized = changedToIconic || (changedToWithdrawn && m_minimized);
-                }
+                const quint32 *data = (const quint32 *)xcb_get_property_value(reply.get());
+                if (reply->length != 0)
+                    m_minimized = (data[0] == XCB_ICCCM_WM_STATE_ICONIC
+                                   || (data[0] == XCB_ICCCM_WM_STATE_WITHDRAWN && m_minimized));
             }
         }
 
-        // _NET_WM_STATE handling
-        Qt::WindowStates newState = Qt::WindowNoState;
         const NetWmStates states = netWmStates();
         // _NET_WM_STATE_HIDDEN should be set by the Window Manager to indicate that a window would
         // not be visible on the screen if its desktop/viewport were active and its coordinates were
@@ -2325,6 +2239,7 @@ void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *ev
             if ((m_windowState & Qt::WindowMinimized) && connection()->mouseGrabber() == this)
                 connection()->setMouseGrabber(nullptr);
         }
+        return;
     } else if (event->atom == atom(QXcbAtom::_NET_FRAME_EXTENTS)) {
         m_dirtyFrameMargins = true;
     }
diff --git a/qtbase/src/plugins/platforms/xcb/qxcbwindow.h b/qtbase/src/plugins/platforms/xcb/qxcbwindow.h
index 55af9279b1..6f5c1f5ed9 100644
--- a/qtbase/src/plugins/platforms/xcb/qxcbwindow.h
+++ b/qtbase/src/plugins/platforms/xcb/qxcbwindow.h
@@ -74,14 +74,6 @@ public:
 
     Q_DECLARE_FLAGS(NetWmStates, NetWmState)
 
-    enum Task {
-        Map,
-        Unmap,
-        SetGeometry,
-        SetWindowFlags,
-        SetWindowState
-    };
-
     QXcbWindow(QWindow *window);
     ~QXcbWindow();
 
@@ -151,9 +143,6 @@ public:
 
     QXcbWindow *toWindow() override;
 
-    bool shouldDeferTask(Task task);
-    void handleDeferredTasks();
-
     void handleMouseEvent(xcb_timestamp_t time, const QPoint &local, const QPoint &global,
                           Qt::KeyboardModifiers modifiers, QEvent::Type type, Qt::MouseEventSource source);
 
@@ -292,11 +281,6 @@ protected:
     int m_swapInterval = -1;
 
     qreal m_sizeHintsScaleFactor = 1.0;
-
-    bool m_wmStateValid = true;
-    QVector<Task> m_deferredTasks;
-    bool m_isWmManagedWindow = true;
-    QRect m_deferredGeometry;
 };
 
 class QXcbForeignWindow : public QXcbWindow
diff --git a/qtbase/src/plugins/platformthemes/gtk3/qgtk3menu.cpp b/qtbase/src/plugins/platformthemes/gtk3/qgtk3menu.cpp
index d9d117faeb..640b49daa0 100644
--- a/qtbase/src/plugins/platformthemes/gtk3/qgtk3menu.cpp
+++ b/qtbase/src/plugins/platformthemes/gtk3/qgtk3menu.cpp
@@ -85,6 +85,7 @@ QGtk3MenuItem::QGtk3MenuItem()
       m_checkable(false),
       m_checked(false),
       m_enabled(true),
+      m_exclusive(false),
       m_underline(false),
       m_invalid(true),
       m_menu(nullptr),
diff --git a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp
index 0048bbc1e6..396e7f6d1c 100644
--- a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp
+++ b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp
@@ -102,15 +102,12 @@ const QDBusArgument &operator >>(const QDBusArgument &arg, QXdgDesktopPortalFile
 class QXdgDesktopPortalFileDialogPrivate
 {
 public:
-    QXdgDesktopPortalFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog)
+    QXdgDesktopPortalFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog, uint fileChooserPortalVersion)
         : nativeFileDialog(nativeFileDialog)
+        , fileChooserPortalVersion(fileChooserPortalVersion)
     { }
 
-    WId winId = 0;
-    bool directoryMode = false;
-    bool modal = false;
-    bool multipleFiles = false;
-    bool saveFile = false;
+    QEventLoop loop;
     QString acceptLabel;
     QString directory;
     QString title;
@@ -121,19 +118,27 @@ public:
     QString selectedMimeTypeFilter;
     QString selectedNameFilter;
     QStringList selectedFiles;
-    QPlatformFileDialogHelper *nativeFileDialog = nullptr;
+    std::unique_ptr<QPlatformFileDialogHelper> nativeFileDialog;
+    uint fileChooserPortalVersion = 0;
+    bool failedToOpen = false;
+    bool directoryMode = false;
+    bool multipleFiles = false;
+    bool saveFile = false;
 };
 
-QXdgDesktopPortalFileDialog::QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog)
+QXdgDesktopPortalFileDialog::QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog, uint fileChooserPortalVersion)
     : QPlatformFileDialogHelper()
-    , d_ptr(new QXdgDesktopPortalFileDialogPrivate(nativeFileDialog))
+    , d_ptr(new QXdgDesktopPortalFileDialogPrivate(nativeFileDialog, fileChooserPortalVersion))
 {
     Q_D(QXdgDesktopPortalFileDialog);
 
     if (d->nativeFileDialog) {
-        connect(d->nativeFileDialog, SIGNAL(accept()), this, SIGNAL(accept()));
-        connect(d->nativeFileDialog, SIGNAL(reject()), this, SIGNAL(reject()));
+        connect(d->nativeFileDialog.get(), SIGNAL(accept()), this, SIGNAL(accept()));
+        connect(d->nativeFileDialog.get(), SIGNAL(reject()), this, SIGNAL(reject()));
     }
+
+    d->loop.connect(this, SIGNAL(accept()), SLOT(quit()));
+    d->loop.connect(this, SIGNAL(reject()), SLOT(quit()));
 }
 
 QXdgDesktopPortalFileDialog::~QXdgDesktopPortalFileDialog()
@@ -177,7 +182,7 @@ void QXdgDesktopPortalFileDialog::initializeDialog()
     setDirectory(options()->initialDirectory());
 }
 
-void QXdgDesktopPortalFileDialog::openPortal()
+void QXdgDesktopPortalFileDialog::openPortal(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent)
 {
     Q_D(QXdgDesktopPortalFileDialog);
 
@@ -185,13 +190,13 @@ void QXdgDesktopPortalFileDialog::openPortal()
                                                           QLatin1String("/org/freedesktop/portal/desktop"),
                                                           QLatin1String("org.freedesktop.portal.FileChooser"),
                                                           d->saveFile ? QLatin1String("SaveFile") : QLatin1String("OpenFile"));
-    QString parentWindowId = QLatin1String("x11:") + QString::number(d->winId, 16);
+    QString parentWindowId = QLatin1String("x11:") + QString::number(parent ? parent->winId() : 0, 16);
 
     QVariantMap options;
     if (!d->acceptLabel.isEmpty())
         options.insert(QLatin1String("accept_label"), d->acceptLabel);
 
-    options.insert(QLatin1String("modal"), d->modal);
+    options.insert(QLatin1String("modal"), windowModality != Qt::NonModal);
     options.insert(QLatin1String("multiple"), d->multipleFiles);
     options.insert(QLatin1String("directory"), d->directoryMode);
 
@@ -290,10 +295,18 @@ void QXdgDesktopPortalFileDialog::openPortal()
 
     QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message);
     QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall);
-    connect(watcher, &QDBusPendingCallWatcher::finished, this, [this] (QDBusPendingCallWatcher *watcher) {
+    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher *watcher) {
         QDBusPendingReply<QDBusObjectPath> reply = *watcher;
-        if (reply.isError()) {
-            Q_EMIT reject();
+        // Any error means the dialog is not shown and we need to fallback
+        d->failedToOpen = reply.isError();
+        if (d->failedToOpen) {
+            if (d->nativeFileDialog) {
+                d->nativeFileDialog->show(windowFlags, windowModality, parent);
+                if (d->loop.isRunning())
+                    d->nativeFileDialog->exec();
+            } else {
+                Q_EMIT reject();
+            }
         } else {
             QDBusConnection::sessionBus().connect(nullptr,
                                                   reply.value().path(),
@@ -302,6 +315,7 @@ void QXdgDesktopPortalFileDialog::openPortal()
                                                   this,
                                                   SLOT(gotResponse(uint,QVariantMap)));
         }
+        watcher->deleteLater();
     });
 }
 
@@ -326,7 +340,7 @@ QUrl QXdgDesktopPortalFileDialog::directory() const
 {
     Q_D(const QXdgDesktopPortalFileDialog);
 
-    if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly))
+    if (d->nativeFileDialog && useNativeFileDialog())
         return d->nativeFileDialog->directory();
 
     return d->directory;
@@ -348,7 +362,7 @@ QList<QUrl> QXdgDesktopPortalFileDialog::selectedFiles() const
 {
     Q_D(const QXdgDesktopPortalFileDialog);
 
-    if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly))
+    if (d->nativeFileDialog && useNativeFileDialog())
         return d->nativeFileDialog->selectedFiles();
 
     QList<QUrl> files;
@@ -403,16 +417,13 @@ void QXdgDesktopPortalFileDialog::exec()
 {
     Q_D(QXdgDesktopPortalFileDialog);
 
-    if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) {
+    if (d->nativeFileDialog && useNativeFileDialog()) {
         d->nativeFileDialog->exec();
         return;
     }
 
     // HACK we have to avoid returning until we emit that the dialog was accepted or rejected
-    QEventLoop loop;
-    loop.connect(this, SIGNAL(accept()), SLOT(quit()));
-    loop.connect(this, SIGNAL(reject()), SLOT(quit()));
-    loop.exec();
+    d->loop.exec();
 }
 
 void QXdgDesktopPortalFileDialog::hide()
@@ -429,13 +440,10 @@ bool QXdgDesktopPortalFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowMo
 
     initializeDialog();
 
-    d->modal = windowModality != Qt::NonModal;
-    d->winId = parent ? parent->winId() : 0;
-
-    if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly))
+    if (d->nativeFileDialog && useNativeFileDialog(OpenFallback))
         return d->nativeFileDialog->show(windowFlags, windowModality, parent);
 
-    openPortal();
+    openPortal(windowFlags, windowModality, parent);
 
     return true;
 }
@@ -465,4 +473,21 @@ void QXdgDesktopPortalFileDialog::gotResponse(uint response, const QVariantMap &
     }
 }
 
+bool QXdgDesktopPortalFileDialog::useNativeFileDialog(QXdgDesktopPortalFileDialog::FallbackType fallbackType) const
+{
+    Q_D(const QXdgDesktopPortalFileDialog);
+
+    if (d->failedToOpen && fallbackType != OpenFallback)
+        return true;
+
+    if (d->fileChooserPortalVersion < 3) {
+        if (options()->fileMode() == QFileDialogOptions::Directory)
+            return true;
+        else if (options()->fileMode() == QFileDialogOptions::DirectoryOnly)
+            return true;
+    }
+
+    return false;
+}
+
 QT_END_NAMESPACE
diff --git a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h
index 4f4de96ecf..65e22a5cf2 100644
--- a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h
+++ b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h
@@ -51,6 +51,11 @@ class QXdgDesktopPortalFileDialog : public QPlatformFileDialogHelper
     Q_OBJECT
     Q_DECLARE_PRIVATE(QXdgDesktopPortalFileDialog)
 public:
+    enum FallbackType {
+        GenericFallback,
+        OpenFallback
+    };
+
     enum ConditionType : uint {
         GlobalPattern = 0,
         MimeType = 1
@@ -69,7 +74,7 @@ public:
     };
     typedef QVector<Filter> FilterList;
 
-    QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog = nullptr);
+    QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog = nullptr, uint fileChooserPortalVersion = 0);
     ~QXdgDesktopPortalFileDialog();
 
     bool defaultNameFilterDisables() const override;
@@ -92,7 +97,8 @@ private Q_SLOTS:
 
 private:
     void initializeDialog();
-    void openPortal();
+    void openPortal(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent);
+    bool useNativeFileDialog(FallbackType fallbackType = GenericFallback) const;
 
     QScopedPointer<QXdgDesktopPortalFileDialogPrivate> d_ptr;
 };
diff --git a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp
index fb324afbd8..b809503122 100644
--- a/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp
+++ b/qtbase/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp
@@ -111,6 +111,7 @@ QXdgDesktopPortalTheme::QXdgDesktopPortalTheme()
         if (reply.isValid()) {
             d->fileChooserPortalVersion = reply.value().toUInt();
         }
+        watcher->deleteLater();
     });
 }
 
@@ -152,11 +153,12 @@ QPlatformDialogHelper* QXdgDesktopPortalTheme::createPlatformDialogHelper(Dialog
 {
     Q_D(const QXdgDesktopPortalTheme);
 
-    if (type == FileDialog) {
+    if (type == FileDialog && d->fileChooserPortalVersion) {
         // Older versions of FileChooser portal don't support opening directories, therefore we fallback
         // to native file dialog opened inside the sandbox to open a directory.
-        if (d->fileChooserPortalVersion < 3 && d->baseTheme->usePlatformNativeDialog(type))
-            return new QXdgDesktopPortalFileDialog(static_cast<QPlatformFileDialogHelper*>(d->baseTheme->createPlatformDialogHelper(type)));
+        if (d->baseTheme->usePlatformNativeDialog(type))
+            return new QXdgDesktopPortalFileDialog(static_cast<QPlatformFileDialogHelper*>(d->baseTheme->createPlatformDialogHelper(type)),
+                                                   d->fileChooserPortalVersion);
 
         return new QXdgDesktopPortalFileDialog;
     }
diff --git a/qtbase/src/plugins/printsupport/cups/qcupsprintengine.cpp b/qtbase/src/plugins/printsupport/cups/qcupsprintengine.cpp
index 43d5e119ad..1f9cbc4565 100644
--- a/qtbase/src/plugins/printsupport/cups/qcupsprintengine.cpp
+++ b/qtbase/src/plugins/printsupport/cups/qcupsprintengine.cpp
@@ -89,8 +89,10 @@ void QCupsPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &v
         break;
     case PPK_Duplex: {
         QPrint::DuplexMode mode = QPrint::DuplexMode(value.toInt());
-        if (mode != d->duplex && d->m_printDevice.supportedDuplexModes().contains(mode))
+        if (d->m_printDevice.supportedDuplexModes().contains(mode)) {
             d->duplex = mode;
+            d->duplexRequestedExplicitly = true;
+        }
         break;
     }
     case PPK_PrinterName:
@@ -277,9 +279,12 @@ void QCupsPrintEnginePrivate::changePrinter(const QString &newPrinter)
     m_printDevice.swap(printDevice);
     printerName = m_printDevice.id();
 
-    // Check if new printer supports current settings, otherwise us defaults
-    if (duplex != QPrint::DuplexAuto && !m_printDevice.supportedDuplexModes().contains(duplex))
+    // in case a duplex value was explicitly set, check if new printer supports current value,
+    // otherwise use device default
+    if (!duplexRequestedExplicitly || !m_printDevice.supportedDuplexModes().contains(duplex)) {
         duplex = m_printDevice.defaultDuplexMode();
+        duplexRequestedExplicitly = false;
+    }
     QPrint::ColorMode colorMode = grayscale ? QPrint::GrayScale : QPrint::Color;
     if (!m_printDevice.supportedColorModes().contains(colorMode))
         grayscale = m_printDevice.defaultColorMode() == QPrint::GrayScale;
diff --git a/qtbase/src/plugins/printsupport/cups/qcupsprintengine_p.h b/qtbase/src/plugins/printsupport/cups/qcupsprintengine_p.h
index c021b0c643..8f81fe478d 100644
--- a/qtbase/src/plugins/printsupport/cups/qcupsprintengine_p.h
+++ b/qtbase/src/plugins/printsupport/cups/qcupsprintengine_p.h
@@ -100,6 +100,7 @@ private:
     QStringList cupsOptions;
     QString cupsTempFile;
     QPrint::DuplexMode duplex;
+    bool duplexRequestedExplicitly = false;
 };
 
 QT_END_NAMESPACE
diff --git a/qtbase/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/qtbase/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
index 67e7154fa6..40876152e5 100644
--- a/qtbase/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
+++ b/qtbase/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
@@ -817,7 +817,7 @@ bool QIBaseResultPrivate::writeArray(int column, const QList<QVariant> &list)
     ba.resize(int(bufLen));
 
     if (list.size() > arraySize) {
-        error = QLatin1String("Array size missmatch: size of %1 is %2, size of provided list is %3");
+        error = QLatin1String("Array size mismatch: size of %1 is %2, size of provided list is %3");
         error = error.arg(QLatin1String(sqlname)).arg(arraySize).arg(list.size());
         q->setLastError(QSqlError(error, QLatin1String(""), QSqlError::StatementError));
         return false;
diff --git a/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
index 7ca055eea2..6bc9d46755 100644
--- a/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
+++ b/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
@@ -223,7 +223,7 @@ public:
     struct QMyField
     {
         char *outField = nullptr;
-        MYSQL_FIELD *myField = nullptr;
+        const MYSQL_FIELD *myField = nullptr;
         QMetaType::Type type = QMetaType::UnknownType;
         my_bool nullIndicator = false;
         ulong bufLength = 0ul;
@@ -361,7 +361,7 @@ static bool qIsInteger(int t)
 void QMYSQLResultPrivate::bindBlobs()
 {
     int i;
-    MYSQL_FIELD *fieldInfo;
+    const MYSQL_FIELD *fieldInfo;
     MYSQL_BIND *bind;
 
     for(i = 0; i < fields.count(); ++i) {
@@ -379,7 +379,6 @@ void QMYSQLResultPrivate::bindBlobs()
 bool QMYSQLResultPrivate::bindInValues()
 {
     MYSQL_BIND *bind;
-    char *field;
     int i = 0;
 
     if (!meta)
@@ -392,35 +391,34 @@ bool QMYSQLResultPrivate::bindInValues()
     inBinds = new MYSQL_BIND[fields.size()];
     memset(inBinds, 0, fields.size() * sizeof(MYSQL_BIND));
 
-    MYSQL_FIELD *fieldInfo;
+    const MYSQL_FIELD *fieldInfo;
 
     while((fieldInfo = mysql_fetch_field(meta))) {
+        bind = &inBinds[i];
+
         QMyField &f = fields[i];
         f.myField = fieldInfo;
-
+        bind->buffer_length = f.bufLength = fieldInfo->length + 1;
+        bind->buffer_type = fieldInfo->type;
         f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags);
         if (qIsBlob(fieldInfo->type)) {
             // the size of a blob-field is available as soon as we call
             // mysql_stmt_store_result()
             // after mysql_stmt_exec() in QMYSQLResult::exec()
-            fieldInfo->length = 0;
+            bind->buffer_length = f.bufLength = 0;
             hasBlobs = true;
         } else if (qIsInteger(f.type)) {
-            fieldInfo->length = 8;
+            bind->buffer_length = f.bufLength = 8;
         } else {
-            fieldInfo->type = MYSQL_TYPE_STRING;
+            bind->buffer_type = MYSQL_TYPE_STRING;
         }
-        bind = &inBinds[i];
-        field = new char[fieldInfo->length + 1];
-        memset(field, 0, fieldInfo->length + 1);
 
-        bind->buffer_type = fieldInfo->type;
-        bind->buffer = field;
-        bind->buffer_length = f.bufLength = fieldInfo->length + 1;
         bind->is_null = &f.nullIndicator;
         bind->length = &f.bufLength;
         bind->is_unsigned = fieldInfo->flags & UNSIGNED_FLAG ? 1 : 0;
-        f.outField=field;
+
+        char *field = new char[bind->buffer_length + 1]{};
+        bind->buffer = f.outField = field;
 
         ++i;
     }
@@ -1369,20 +1367,20 @@ bool QMYSQLDriver::open(const QString& db,
     }
 
 #if MYSQL_VERSION_ID >= 50007
-    if (mysql_get_client_version() >= 50503 && mysql_get_server_version(d->mysql) >= 50503) {
-        // force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters)
-        mysql_set_character_set(d->mysql, "utf8mb4");
+    // force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters)
+    if (mysql_set_character_set(d->mysql, "utf8mb4")) {
+        // this failed, try forcing it to utf (BMP only)
+        if (mysql_set_character_set(d->mysql, "utf8"))
+            qWarning() << "MySQL: Unable to set the client character set to utf8.";
 #if QT_CONFIG(textcodec)
-        d->tc = QTextCodec::codecForName("UTF-8");
+        else
+            d->tc = codec(d->mysql);
 #endif
-    } else
-    {
-        // force the communication to be utf8
-        mysql_set_character_set(d->mysql, "utf8");
+    }
 #if QT_CONFIG(textcodec)
-        d->tc = codec(d->mysql);
+    else
+        d->tc = QTextCodec::codecForName("UTF-8");
 #endif
-    }
 #endif  // MYSQL_VERSION_ID >= 50007
 
     d->preparedQuerysEnabled = checkPreparedQueries(d->mysql);
diff --git a/qtbase/src/plugins/sqldrivers/oci/qsql_oci.cpp b/qtbase/src/plugins/sqldrivers/oci/qsql_oci.cpp
index 2b732ccf9b..c6383de3da 100644
--- a/qtbase/src/plugins/sqldrivers/oci/qsql_oci.cpp
+++ b/qtbase/src/plugins/sqldrivers/oci/qsql_oci.cpp
@@ -1484,6 +1484,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
                         columns[i].lengths[row] = columns[i].maxLen;
                         QOCIDateTime *date = new QOCIDateTime(d->env, d->err, val.toDateTime());
                         *reinterpret_cast<OCIDateTime**>(dataPtr) = date->dateTime;
+                        tmpStorage.dateTimes.append(date);
                         break;
                     }
                     case QVariant::Int:
diff --git a/qtbase/src/printsupport/dialogs/images/print-24.png b/qtbase/src/printsupport/dialogs/images/printer-24.png
similarity index 100%
rename from src/printsupport/dialogs/images/print-24.png
rename to src/printsupport/dialogs/images/printer-24.png
diff --git a/qtbase/src/printsupport/dialogs/images/print-32.png b/qtbase/src/printsupport/dialogs/images/printer-32.png
similarity index 100%
rename from src/printsupport/dialogs/images/print-32.png
rename to src/printsupport/dialogs/images/printer-32.png
diff --git a/qtbase/src/printsupport/dialogs/images/view-page-sided-24.png b/qtbase/src/printsupport/dialogs/images/view-pages-facing-24.png
similarity index 100%
rename from src/printsupport/dialogs/images/view-page-sided-24.png
rename to src/printsupport/dialogs/images/view-pages-facing-24.png
diff --git a/qtbase/src/printsupport/dialogs/images/view-page-sided-32.png b/qtbase/src/printsupport/dialogs/images/view-pages-facing-32.png
similarity index 100%
rename from src/printsupport/dialogs/images/view-page-sided-32.png
rename to src/printsupport/dialogs/images/view-pages-facing-32.png
diff --git a/qtbase/src/printsupport/dialogs/images/view-page-multi-24.png b/qtbase/src/printsupport/dialogs/images/view-pages-overview-24.png
similarity index 100%
rename from src/printsupport/dialogs/images/view-page-multi-24.png
rename to src/printsupport/dialogs/images/view-pages-overview-24.png
diff --git a/qtbase/src/printsupport/dialogs/images/view-page-multi-32.png b/qtbase/src/printsupport/dialogs/images/view-pages-overview-32.png
similarity index 100%
rename from src/printsupport/dialogs/images/view-page-multi-32.png
rename to src/printsupport/dialogs/images/view-pages-overview-32.png
diff --git a/qtbase/src/printsupport/dialogs/images/view-page-one-24.png b/qtbase/src/printsupport/dialogs/images/view-pages-single-24.png
similarity index 100%
rename from src/printsupport/dialogs/images/view-page-one-24.png
rename to src/printsupport/dialogs/images/view-pages-single-24.png
diff --git a/qtbase/src/printsupport/dialogs/images/view-page-one-32.png b/qtbase/src/printsupport/dialogs/images/view-pages-single-32.png
similarity index 100%
rename from src/printsupport/dialogs/images/view-page-one-32.png
rename to src/printsupport/dialogs/images/view-pages-single-32.png
diff --git a/qtbase/src/printsupport/dialogs/images/fit-page-24.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-page-24.png
similarity index 100%
rename from src/printsupport/dialogs/images/fit-page-24.png
rename to src/printsupport/dialogs/images/zoom-fit-page-24.png
diff --git a/qtbase/src/printsupport/dialogs/images/fit-page-32.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-page-32.png
similarity index 100%
rename from src/printsupport/dialogs/images/fit-page-32.png
rename to src/printsupport/dialogs/images/zoom-fit-page-32.png
diff --git a/qtbase/src/printsupport/dialogs/images/fit-width-24.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-width-24.png
similarity index 100%
rename from src/printsupport/dialogs/images/fit-width-24.png
rename to src/printsupport/dialogs/images/zoom-fit-width-24.png
diff --git a/qtbase/src/printsupport/dialogs/images/fit-width-32.png b/qtbase/src/printsupport/dialogs/images/zoom-fit-width-32.png
similarity index 100%
rename from src/printsupport/dialogs/images/fit-width-32.png
rename to src/printsupport/dialogs/images/zoom-fit-width-32.png
diff --git a/qtbase/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/qtbase/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
index 78e5b8d1ef..2a28516719 100644
--- a/qtbase/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
+++ b/qtbase/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
@@ -532,6 +532,7 @@ void QPageSetupWidget::updateWidget()
 void QPageSetupWidget::setupPrinter() const
 {
     m_printer->setPageLayout(m_pageLayout);
+    m_printer->setPageOrientation(m_pageLayout.orientation());
 #if QT_CONFIG(cups)
     QCUPSSupport::PagesPerSheet pagesPerSheet = qvariant_cast<QCUPSSupport::PagesPerSheet>(m_ui.pagesPerSheetCombo->currentData()
 );
diff --git a/qtbase/src/printsupport/dialogs/qprintdialog.qrc b/qtbase/src/printsupport/dialogs/qprintdialog.qrc
index 5a579baa55..10b8e1d341 100644
--- a/qtbase/src/printsupport/dialogs/qprintdialog.qrc
+++ b/qtbase/src/printsupport/dialogs/qprintdialog.qrc
@@ -1,9 +1,9 @@
 <!DOCTYPE RCC><RCC version="1.0">
 <qresource prefix="/qt-project.org/dialogs/qprintpreviewdialog">
-<file>images/fit-page-24.png</file>
-<file>images/fit-page-32.png</file>
-<file>images/fit-width-24.png</file>
-<file>images/fit-width-32.png</file>
+<file>images/zoom-fit-page-24.png</file>
+<file>images/zoom-fit-page-32.png</file>
+<file>images/zoom-fit-width-24.png</file>
+<file>images/zoom-fit-width-32.png</file>
 <file>images/go-first-24.png</file>
 <file>images/go-first-32.png</file>
 <file>images/go-last-24.png</file>
@@ -18,14 +18,14 @@
 <file>images/layout-portrait-32.png</file>
 <file>images/page-setup-24.png</file>
 <file>images/page-setup-32.png</file>
-<file>images/print-24.png</file>
-<file>images/print-32.png</file>
-<file>images/view-page-multi-24.png</file>
-<file>images/view-page-multi-32.png</file>
-<file>images/view-page-one-24.png</file>
-<file>images/view-page-one-32.png</file>
-<file>images/view-page-sided-24.png</file>
-<file>images/view-page-sided-32.png</file>
+<file>images/printer-24.png</file>
+<file>images/printer-32.png</file>
+<file>images/view-pages-overview-24.png</file>
+<file>images/view-pages-overview-32.png</file>
+<file>images/view-pages-single-24.png</file>
+<file>images/view-pages-single-32.png</file>
+<file>images/view-pages-facing-24.png</file>
+<file>images/view-pages-facing-32.png</file>
 <file>images/zoom-in-24.png</file>
 <file>images/zoom-in-32.png</file>
 <file>images/zoom-out-24.png</file>
diff --git a/qtbase/src/printsupport/dialogs/qprintdialog_unix.cpp b/qtbase/src/printsupport/dialogs/qprintdialog_unix.cpp
index c5b845f4ec..5a5ba1d0a8 100644
--- a/qtbase/src/printsupport/dialogs/qprintdialog_unix.cpp
+++ b/qtbase/src/printsupport/dialogs/qprintdialog_unix.cpp
@@ -702,13 +702,14 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma
         else
             options.grayscale->setChecked(true);
 
-        // keep duplex value explicitly set by user, if any, and selected printer supports it;
-        // use device default otherwise
+        // duplex priorities to be as follows:
+        // 1) a user-selected duplex value in the dialog has highest prority
+        // 2) duplex value set in the QPrinter
         QPrint::DuplexMode duplex;
         if (explicitDuplexMode != QPrint::DuplexAuto && supportedDuplexMode.contains(explicitDuplexMode))
             duplex = explicitDuplexMode;
         else
-            duplex = top->d->m_currentPrintDevice.defaultDuplexMode();
+            duplex = static_cast<QPrint::DuplexMode>(p->duplex());
         switch (duplex) {
         case QPrint::DuplexNone:
             options.noDuplex->setChecked(true); break;
@@ -1242,10 +1243,10 @@ void QUnixPrintWidgetPrivate::_q_printerChanged(int index)
             QString filename = widget.filename->text();
             widget.filename->setText(filename);
             widget.lOutput->setEnabled(true);
-            if (optionsPane)
-                optionsPane->selectPrinter(QPrinter::PdfFormat);
             printer->setOutputFormat(QPrinter::PdfFormat);
             m_currentPrintDevice = QPrintDevice();
+            if (optionsPane)
+                optionsPane->selectPrinter(QPrinter::PdfFormat);
             return;
         }
     }
diff --git a/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp b/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp
index 39575d5f57..23b7e89538 100644
--- a/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp
+++ b/qtbase/src/printsupport/dialogs/qprintpreviewdialog.cpp
@@ -352,7 +352,7 @@ void QPrintPreviewDialogPrivate::init(QPrinter *_printer)
 static inline void qt_setupActionIcon(QAction *action, QLatin1String name)
 {
     QLatin1String imagePrefix(":/qt-project.org/dialogs/qprintpreviewdialog/images/");
-    QIcon icon;
+    QIcon icon = QIcon::fromTheme(name);
     icon.addFile(imagePrefix + name + QLatin1String("-24.png"), QSize(24, 24));
     icon.addFile(imagePrefix + name + QLatin1String("-32.png"), QSize(32, 32));
     action->setIcon(icon);
@@ -383,8 +383,8 @@ void QPrintPreviewDialogPrivate::setupActions()
     fitPageAction->setObjectName(QLatin1String("fitPageAction"));
     fitWidthAction->setCheckable(true);
     fitPageAction->setCheckable(true);
-    qt_setupActionIcon(fitWidthAction, QLatin1String("fit-width"));
-    qt_setupActionIcon(fitPageAction, QLatin1String("fit-page"));
+    qt_setupActionIcon(fitWidthAction, QLatin1String("zoom-fit-width"));
+    qt_setupActionIcon(fitPageAction, QLatin1String("zoom-fit-page"));
     QObject::connect(fitGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_fit(QAction*)));
 
     // Zoom
@@ -410,9 +410,9 @@ void QPrintPreviewDialogPrivate::setupActions()
     singleModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show single page"));
     facingModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show facing pages"));
     overviewModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show overview of all pages"));
-    qt_setupActionIcon(singleModeAction, QLatin1String("view-page-one"));
-    qt_setupActionIcon(facingModeAction, QLatin1String("view-page-sided"));
-    qt_setupActionIcon(overviewModeAction, QLatin1String("view-page-multi"));
+    qt_setupActionIcon(singleModeAction, QLatin1String("view-pages-single"));
+    qt_setupActionIcon(facingModeAction, QLatin1String("view-pages-facing"));
+    qt_setupActionIcon(overviewModeAction, QLatin1String("view-pages-overview"));
     singleModeAction->setObjectName(QLatin1String("singleModeAction"));
     facingModeAction->setObjectName(QLatin1String("facingModeAction"));
     overviewModeAction->setObjectName(QLatin1String("overviewModeAction"));
@@ -426,7 +426,7 @@ void QPrintPreviewDialogPrivate::setupActions()
     printerGroup = new QActionGroup(q);
     printAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Print"));
     pageSetupAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Page setup"));
-    qt_setupActionIcon(printAction, QLatin1String("print"));
+    qt_setupActionIcon(printAction, QLatin1String("printer"));
     qt_setupActionIcon(pageSetupAction, QLatin1String("page-setup"));
     QObject::connect(printAction, SIGNAL(triggered(bool)), q, SLOT(_q_print()));
     QObject::connect(pageSetupAction, SIGNAL(triggered(bool)), q, SLOT(_q_pageSetup()));
diff --git a/qtbase/src/sql/kernel/qsqlquery.cpp b/qtbase/src/sql/kernel/qsqlquery.cpp
index 32c6166c79..60afef10c3 100644
--- a/qtbase/src/sql/kernel/qsqlquery.cpp
+++ b/qtbase/src/sql/kernel/qsqlquery.cpp
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtSql module of the Qt Toolkit.
@@ -377,6 +377,10 @@ bool QSqlQuery::exec(const QString& query)
     QElapsedTimer t;
     t.start();
 #endif
+    if (!driver()) {
+        qWarning("QSqlQuery::exec: called before driver has been set up");
+        return false;
+    }
     if (d->ref.loadRelaxed() != 1) {
         bool fo = isForwardOnly();
         *this = QSqlQuery(driver()->createResult());
diff --git a/qtbase/src/testlib/qabstractitemmodeltester.cpp b/qtbase/src/testlib/qabstractitemmodeltester.cpp
index a2c643660a..ce062f66d7 100644
--- a/qtbase/src/testlib/qabstractitemmodeltester.cpp
+++ b/qtbase/src/testlib/qabstractitemmodeltester.cpp
@@ -454,7 +454,7 @@ void QAbstractItemModelTesterPrivate::parent()
 
     // Common error test #2, make sure that a second level index has a parent
     // that is the first level index.
-    if (model->rowCount(topIndex) > 0) {
+    if (model->rowCount(topIndex) > 0 && model->columnCount(topIndex) > 0) {
         QModelIndex childIndex = model->index(0, 0, topIndex);
         MODELTESTER_VERIFY(childIndex.isValid());
         MODELTESTER_COMPARE(model->parent(childIndex), topIndex);
@@ -570,7 +570,7 @@ void QAbstractItemModelTesterPrivate::checkChildren(const QModelIndex &parent, i
 
             // recursively go down the children
             if (model->hasChildren(index) && currentDepth < 10)
-                checkChildren(index, ++currentDepth);
+                checkChildren(index, currentDepth + 1);
 
             // make sure that after testing the children that the index doesn't change.
             QModelIndex newerIndex = model->index(r, c, parent);
diff --git a/qtbase/src/testlib/qasciikey.cpp b/qtbase/src/testlib/qasciikey.cpp
index 9a308da2bc..93498b256f 100644
--- a/qtbase/src/testlib/qasciikey.cpp
+++ b/qtbase/src/testlib/qasciikey.cpp
@@ -498,6 +498,11 @@ char QTest::keyToAscii(Qt::Key key)
     case Qt::Key_LaunchE : return 0; // = 0x10b0,
     case Qt::Key_LaunchF : return 0; // = 0x10b1,
 
+    // Keypad navigation keys
+    case Qt::Key_Select : return 0; // = 0x01010000
+    case Qt::Key_Yes : return 0; // = 0x01010001
+    case Qt::Key_No : return 0; // = 0x01010002
+
     default: QTEST_ASSERT(false); return 0;
     }
 }
diff --git a/qtbase/src/testlib/qtestresult.cpp b/qtbase/src/testlib/qtestresult.cpp
index 88028aac6e..2e89930776 100644
--- a/qtbase/src/testlib/qtestresult.cpp
+++ b/qtbase/src/testlib/qtestresult.cpp
@@ -251,7 +251,8 @@ bool QTestResult::verify(bool statement, const char *statementStr,
 {
     QTEST_ASSERT(statementStr);
 
-    char msg[1024] = {'\0'};
+    char msg[1024];
+    msg[0] = '\0';
 
     if (QTestLog::verboseLevel() >= 2) {
         qsnprintf(msg, 1024, "QVERIFY(%s)", statementStr);
@@ -309,7 +310,8 @@ static bool compareHelper(bool success, const char *failureMsg,
                           bool hasValues = true)
 {
     const size_t maxMsgLen = 1024;
-    char msg[maxMsgLen] = {'\0'};
+    char msg[maxMsgLen];
+    msg[0] = '\0';
 
     QTEST_ASSERT(expected);
     QTEST_ASSERT(actual);
diff --git a/qtbase/src/widgets/dialogs/qcolordialog.cpp b/qtbase/src/widgets/dialogs/qcolordialog.cpp
index 4247731275..cb325be85c 100644
--- a/qtbase/src/widgets/dialogs/qcolordialog.cpp
+++ b/qtbase/src/widgets/dialogs/qcolordialog.cpp
@@ -78,7 +78,10 @@
 #include "qwindow.h"
 
 #include "private/qdialog_p.h"
+#include "private/qguiapplication_p.h"
 
+#include <qpa/qplatformservices.h>
+#include <qpa/qplatformintegration.h>
 #include <algorithm>
 
 QT_BEGIN_NAMESPACE
@@ -1611,6 +1614,20 @@ void QColorDialogPrivate::_q_newStandard(int r, int c)
 void QColorDialogPrivate::_q_pickScreenColor()
 {
     Q_Q(QColorDialog);
+
+    auto *platformServices = QGuiApplicationPrivate::platformIntegration()->services();
+    if (platformServices->hasCapability(QPlatformServices::Capability::ColorPicking)) {
+        if (auto *colorPicker = platformServices->colorPicker(q->windowHandle())) {
+            q->connect(colorPicker, &QPlatformServiceColorPicker::colorPicked, q,
+                       [q, colorPicker](const QColor &color) {
+                           colorPicker->deleteLater();
+                           q->setCurrentColor(color);
+                       });
+            colorPicker->pickColor();
+            return;
+        }
+    }
+
     if (!colorPickingEventFilter)
         colorPickingEventFilter = new QColorPickingEventFilter(this, q);
     q->installEventFilter(colorPickingEventFilter);
diff --git a/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp b/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp
index e120817edc..8ea36b5427 100644
--- a/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp
+++ b/qtbase/src/widgets/itemviews/qabstractitemdelegate.cpp
@@ -400,12 +400,7 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event,
         const QString tooltip = index.isValid() ?
               d->textForRole(Qt::ToolTipRole, index.data(Qt::ToolTipRole), option.locale, precision) :
               QString();
-        QRect rect;
-        if (index.isValid()) {
-            const QRect r = view->visualRect(index);
-            rect = QRect(view->mapToGlobal(r.topLeft()), r.size());
-        }
-        QToolTip::showText(he->globalPos(), tooltip, view, rect);
+        QToolTip::showText(he->globalPos(), tooltip, view->viewport(), option.rect);
         event->setAccepted(!tooltip.isEmpty());
         break;
         }
diff --git a/qtbase/src/widgets/itemviews/qabstractitemview.cpp b/qtbase/src/widgets/itemviews/qabstractitemview.cpp
index 1e5a6ccb63..5e65c59796 100644
--- a/qtbase/src/widgets/itemviews/qabstractitemview.cpp
+++ b/qtbase/src/widgets/itemviews/qabstractitemview.cpp
@@ -1755,6 +1755,7 @@ bool QAbstractItemView::viewportEvent(QEvent *event)
 void QAbstractItemView::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QAbstractItemView);
+    d->releaseFromDoubleClick = false;
     d->delayedAutoScroll.stop(); //any interaction with the view cancel the auto scrolling
     QPoint pos = event->pos();
     QPersistentModelIndex index = indexAt(pos);
diff --git a/qtbase/src/widgets/itemviews/qtableview.cpp b/qtbase/src/widgets/itemviews/qtableview.cpp
index 934ac581b2..f79bb24249 100644
--- a/qtbase/src/widgets/itemviews/qtableview.cpp
+++ b/qtbase/src/widgets/itemviews/qtableview.cpp
@@ -1013,6 +1013,7 @@ void QTableViewPrivate::drawCell(QPainter *painter, const QStyleOptionViewItem &
 int QTableViewPrivate::widthHintForIndex(const QModelIndex &index, int hint, const QStyleOptionViewItem &option) const
 {
     Q_Q(const QTableView);
+    const int oldHint = hint;
     QWidget *editor = editorForIndex(index).widget.data();
     if (editor && persistent.contains(editor)) {
         hint = qMax(hint, editor->sizeHint().width());
@@ -1021,6 +1022,17 @@ int QTableViewPrivate::widthHintForIndex(const QModelIndex &index, int hint, con
         hint = qBound(min, hint, max);
     }
     hint = qMax(hint, q->itemDelegate(index)->sizeHint(option, index).width());
+
+    if (hasSpans()) {
+        auto span = spans.spanAt(index.column(), index.row());
+        if (span && span->m_left == index.column() && span->m_top == index.row()) {
+            // spans are screwed up when sections are moved
+            const auto left = logicalColumn(span->m_left);
+            for (int i = 1; i <= span->width(); ++i)
+               hint -= q->columnWidth(visualColumn(left + i));
+        }
+        hint = std::max(hint, oldHint);
+    }
     return hint;
 }
 
@@ -1053,6 +1065,11 @@ int QTableViewPrivate::heightHintForIndex(const QModelIndex &index, int hint, QS
         option.rect.setHeight(height);
         option.rect.setX(q->columnViewportPosition(index.column()));
         option.rect.setWidth(q->columnWidth(index.column()));
+        if (hasSpans()) {
+            auto span = spans.spanAt(index.column(), index.row());
+            if (span && span->m_left == index.column() && span->m_top == index.row())
+                option.rect.setWidth(std::max(option.rect.width(), visualSpanRect(*span).width()));
+        }
         // 1px less space when grid is shown (see drawCell)
         if (showGrid)
             option.rect.setWidth(option.rect.width() - 1);
diff --git a/qtbase/src/widgets/kernel/qaction.h b/qtbase/src/widgets/kernel/qaction.h
index 258a1ea0a0..737c1e8285 100644
--- a/qtbase/src/widgets/kernel/qaction.h
+++ b/qtbase/src/widgets/kernel/qaction.h
@@ -81,7 +81,7 @@ class Q_WIDGETS_EXPORT QAction : public QObject
     Q_PROPERTY(MenuRole menuRole READ menuRole WRITE setMenuRole NOTIFY changed)
     Q_PROPERTY(bool iconVisibleInMenu READ isIconVisibleInMenu WRITE setIconVisibleInMenu NOTIFY changed)
     Q_PROPERTY(bool shortcutVisibleInContextMenu READ isShortcutVisibleInContextMenu WRITE setShortcutVisibleInContextMenu NOTIFY changed)
-    Q_PROPERTY(Priority priority READ priority WRITE setPriority)
+    Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY changed)
 
 public:
     // note this is copied into qplatformmenu.h, which must stay in sync
diff --git a/qtbase/src/widgets/styles/qfusionstyle.cpp b/qtbase/src/widgets/styles/qfusionstyle.cpp
index f4345d97c4..962912c838 100644
--- a/qtbase/src/widgets/styles/qfusionstyle.cpp
+++ b/qtbase/src/widgets/styles/qfusionstyle.cpp
@@ -1772,14 +1772,6 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
             proxy()->drawControl(CE_PushButtonLabel, &subopt, painter, widget);
         }
         break;
-    case CE_PushButtonLabel:
-        if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
-            QStyleOptionButton b(*button);
-            // no PM_ButtonShiftHorizontal and PM_ButtonShiftVertical for fusion style
-            b.state &= ~(State_On | State_Sunken);
-            QCommonStyle::drawControl(element, &b, painter, widget);
-        }
-        break;
     case CE_MenuBarEmptyArea:
         painter->save();
     {
diff --git a/qtbase/src/widgets/util/qcompleter.cpp b/qtbase/src/widgets/util/qcompleter.cpp
index 18b24063d8..ef7207a8a3 100644
--- a/qtbase/src/widgets/util/qcompleter.cpp
+++ b/qtbase/src/widgets/util/qcompleter.cpp
@@ -1120,6 +1120,8 @@ void QCompleter::setModel(QAbstractItemModel *model)
 {
     Q_D(QCompleter);
     QAbstractItemModel *oldModel = d->proxy->sourceModel();
+    if (oldModel == model)
+        return;
 #if QT_CONFIG(filesystemmodel)
     if (qobject_cast<const QFileSystemModel *>(oldModel))
         setCompletionRole(Qt::EditRole); // QTBUG-54642, clear FileNameRole set by QFileSystemModel
diff --git a/qtbase/src/widgets/widgets/qabstractbutton.cpp b/qtbase/src/widgets/widgets/qabstractbutton.cpp
index a128b23950..dc40bf62fb 100644
--- a/qtbase/src/widgets/widgets/qabstractbutton.cpp
+++ b/qtbase/src/widgets/widgets/qabstractbutton.cpp
@@ -56,6 +56,7 @@
 #ifndef QT_NO_ACCESSIBILITY
 #include "qaccessible.h"
 #endif
+#include <qpa/qplatformtheme.h>
 
 #include <algorithm>
 
@@ -1076,19 +1077,19 @@ void QAbstractButton::keyPressEvent(QKeyEvent *e)
 {
     Q_D(QAbstractButton);
     bool next = true;
-    switch (e->key()) {
-    case Qt::Key_Enter:
-    case Qt::Key_Return:
-        e->ignore();
-        break;
-    case Qt::Key_Select:
-    case Qt::Key_Space:
-        if (!e->isAutoRepeat()) {
-            setDown(true);
-            repaint();
-            d->emitPressed();
-        }
-        break;
+
+    const auto key = static_cast<Qt::Key>(e->key());
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    if (buttonPressKeys.contains(key) && !e->isAutoRepeat()) {
+        setDown(true);
+        repaint();
+        d->emitPressed();
+        return;
+    }
+
+    switch (key) {
     case Qt::Key_Up:
         next = false;
         Q_FALLTHROUGH();
@@ -1153,15 +1154,15 @@ void QAbstractButton::keyReleaseEvent(QKeyEvent *e)
     if (!e->isAutoRepeat())
         d->repeatTimer.stop();
 
-    switch (e->key()) {
-    case Qt::Key_Select:
-    case Qt::Key_Space:
-        if (!e->isAutoRepeat() && d->down)
-            d->click();
-        break;
-    default:
-        e->ignore();
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    if (buttonPressKeys.contains(static_cast<Qt::Key>(e->key())) && !e->isAutoRepeat() && d->down) {
+        d->click();
+        return;
     }
+
+    e->ignore();
 }
 
 /*!\reimp
diff --git a/qtbase/src/widgets/widgets/qcombobox.cpp b/qtbase/src/widgets/widgets/qcombobox.cpp
index 7a496c27e0..0a3d96647b 100644
--- a/qtbase/src/widgets/widgets/qcombobox.cpp
+++ b/qtbase/src/widgets/widgets/qcombobox.cpp
@@ -3352,7 +3352,23 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
 
     Move move = NoMove;
     int newIndex = currentIndex();
-    switch (e->key()) {
+
+    bool pressLikeButton = !d->lineEdit;
+#ifdef QT_KEYPAD_NAVIGATION
+    pressLikeButton |= QApplicationPrivate::keypadNavigationEnabled() && !hasEditFocus();
+#endif
+    auto key = static_cast<Qt::Key>(e->key());
+    if (pressLikeButton) {
+        const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                             ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                             .value<QList<Qt::Key>>();
+        if (buttonPressKeys.contains(key)) {
+            showPopup();
+            return;
+        }
+    }
+
+    switch (key) {
     case Qt::Key_Up:
         if (e->modifiers() & Qt::ControlModifier)
             break; // pass to line edit for auto completion
@@ -3394,26 +3410,11 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
             return;
         }
         break;
-    case Qt::Key_Space:
-        if (!d->lineEdit) {
-            showPopup();
-            return;
-        }
-        break;
-    case Qt::Key_Enter:
-    case Qt::Key_Return:
     case Qt::Key_Escape:
         if (!d->lineEdit)
             e->ignore();
         break;
 #ifdef QT_KEYPAD_NAVIGATION
-    case Qt::Key_Select:
-        if (QApplicationPrivate::keypadNavigationEnabled()
-                && (!hasEditFocus() || !d->lineEdit)) {
-            showPopup();
-            return;
-        }
-        break;
     case Qt::Key_Left:
     case Qt::Key_Right:
         if (QApplicationPrivate::keypadNavigationEnabled() && !hasEditFocus())
diff --git a/qtbase/src/widgets/widgets/qdatetimeedit_p.h b/qtbase/src/widgets/widgets/qdatetimeedit_p.h
index d36b6f8f9a..e0df5b5158 100644
--- a/qtbase/src/widgets/widgets/qdatetimeedit_p.h
+++ b/qtbase/src/widgets/widgets/qdatetimeedit_p.h
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2018 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtWidgets module of the Qt Toolkit.
diff --git a/qtbase/src/widgets/widgets/qgroupbox.cpp b/qtbase/src/widgets/widgets/qgroupbox.cpp
index 02a0bed325..3f3eccc370 100644
--- a/qtbase/src/widgets/widgets/qgroupbox.cpp
+++ b/qtbase/src/widgets/widgets/qgroupbox.cpp
@@ -54,6 +54,8 @@
 #include "qaccessible.h"
 #endif
 #include <private/qwidget_p.h>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
 
 #include "qdebug.h"
 
@@ -360,7 +362,10 @@ bool QGroupBox::event(QEvent *e)
         return true;
     case QEvent::KeyPress: {
         QKeyEvent *k = static_cast<QKeyEvent*>(e);
-        if (!k->isAutoRepeat() && (k->key() == Qt::Key_Select || k->key() == Qt::Key_Space)) {
+        const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                             ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                             .value<QList<Qt::Key>>();
+        if (!k->isAutoRepeat() && buttonPressKeys.contains(static_cast<Qt::Key>(k->key()))) {
             d->pressedControl = QStyle::SC_GroupBoxCheckBox;
             update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this));
             return true;
@@ -369,7 +374,10 @@ bool QGroupBox::event(QEvent *e)
     }
     case QEvent::KeyRelease: {
         QKeyEvent *k = static_cast<QKeyEvent*>(e);
-        if (!k->isAutoRepeat() && (k->key() == Qt::Key_Select || k->key() == Qt::Key_Space)) {
+        const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                             ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                             .value<QList<Qt::Key>>();
+        if (!k->isAutoRepeat() && buttonPressKeys.contains(static_cast<Qt::Key>(k->key()))) {
             bool toggle = (d->pressedControl == QStyle::SC_GroupBoxLabel
                            || d->pressedControl == QStyle::SC_GroupBoxCheckBox);
             d->pressedControl = QStyle::SC_None;
diff --git a/qtbase/src/widgets/widgets/qlabel.cpp b/qtbase/src/widgets/widgets/qlabel.cpp
index 30ff80cbb0..cf2605c17c 100644
--- a/qtbase/src/widgets/widgets/qlabel.cpp
+++ b/qtbase/src/widgets/widgets/qlabel.cpp
@@ -421,9 +421,6 @@ void QLabel::setPixmap(const QPixmap &pixmap)
         d->pixmap = new QPixmap(pixmap);
     }
 
-    if (d->pixmap->depth() == 1 && !d->pixmap->mask())
-        d->pixmap->setMask(*((QBitmap *)d->pixmap));
-
     d->updateLabel();
 }
 
diff --git a/qtbase/src/widgets/widgets/qtoolbararealayout.cpp b/qtbase/src/widgets/widgets/qtoolbararealayout.cpp
index 493c094cc1..d5f4b59017 100644
--- a/qtbase/src/widgets/widgets/qtoolbararealayout.cpp
+++ b/qtbase/src/widgets/widgets/qtoolbararealayout.cpp
@@ -1367,7 +1367,7 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
                 item.widgetItem = new QWidgetItemV2(toolBar);
                 toolBar->setOrientation(floating ? ((shown & 2) ? Qt::Vertical : Qt::Horizontal) : dock.o);
                 toolBar->setVisible(shown & 1);
-                toolBar->d_func()->setWindowState(floating, true, rect);
+                toolBar->d_func()->setWindowState(floating, false, rect);
 
                 item.preferredSize = item.size;
                 line.toolBarItems.append(item);
diff --git a/qtbase/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/qtbase/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
index 212c0a2e13..3c77b1ba0b 100644
--- a/qtbase/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
+++ b/qtbase/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
@@ -126,8 +126,7 @@ public:
 
 void tst_QtConcurrentIterateKernel::instantiate()
 {
-    auto future = startThreadEngine(new PrintFor(0, 40)).startAsynchronously();
-    future.waitForFinished();
+    startThreadEngine(new PrintFor(0, 40)).startBlocking();
     QCOMPARE(iterations.loadRelaxed(), 40);
 }
 
@@ -166,10 +165,8 @@ void tst_QtConcurrentIterateKernel::stresstest()
     const int times = 50;
     for (int i = 0; i < times; ++i) {
         counter.storeRelaxed(0);
-        // ThreadEngine will delete f when it finishes
-        auto f = new CountFor(0, iterations);
-        auto future = f->startAsynchronously();
-        future.waitForFinished();
+        CountFor f(0, iterations);
+        f.startBlocking();
         QCOMPARE(counter.loadRelaxed(), iterations);
     }
 }
@@ -177,11 +174,8 @@ void tst_QtConcurrentIterateKernel::stresstest()
 void tst_QtConcurrentIterateKernel::noIterations()
 {
     const int times = 20000;
-    for (int i = 0; i < times; ++i) {
-        auto future = startThreadEngine(new IterateKernel<TestIterator, void>(0, 0))
-                              .startAsynchronously();
-        future.waitForFinished();
-    }
+    for (int i = 0; i < times; ++i)
+        startThreadEngine(new IterateKernel<TestIterator, void>(0, 0)).startBlocking();
 }
 
 QMutex threadsMutex;
@@ -236,10 +230,8 @@ void tst_QtConcurrentIterateKernel::throttling()
 
     threads.clear();
 
-    // ThreadEngine will delete f when it finishes
-    auto f = new ThrottleFor(0, totalIterations);
-    auto future = f->startAsynchronously();
-    future.waitForFinished();
+    ThrottleFor f(0, totalIterations);
+    f.startBlocking();
 
     QCOMPARE(iterations.loadRelaxed(), totalIterations);
 
diff --git a/qtbase/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp b/qtbase/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
index ac7be7acdd..81bc64c8d9 100644
--- a/qtbase/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
+++ b/qtbase/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
@@ -65,9 +65,16 @@ public:
 
 void tst_QtConcurrentThreadEngine::runDirectly()
 {
-    PrintUser *engine = new PrintUser();
-    QFuture<void> f = engine->startAsynchronously();
-    f.waitForFinished();
+    {
+        PrintUser engine;
+        engine.startSingleThreaded();
+        engine.startBlocking();
+    }
+    {
+        PrintUser *engine = new PrintUser();
+        QFuture<void> f = engine->startAsynchronously();
+        f.waitForFinished();
+    }
 }
 
 class StringResultUser : public ThreadEngine<QString>
@@ -99,10 +106,8 @@ public:
 
 void tst_QtConcurrentThreadEngine::result()
 {
-    // ThreadEngine will delete 'engine' when it finishes
-    auto engine = new StringResultUser();
-    auto future = engine->startAsynchronously();
-    QCOMPARE(future.result(), QString("Foo"));
+    StringResultUser engine;
+    QCOMPARE(*engine.startBlocking(), QString("Foo"));
 }
 
 class VoidResultUser : public ThreadEngine<void>
@@ -128,9 +133,17 @@ public:
 
 void tst_QtConcurrentThreadEngine::runThroughStarter()
 {
-    ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
-    QFuture<QString> f = starter.startAsynchronously();
-    QCOMPARE(f.result(), QString("Foo"));
+    {
+        ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
+        QFuture<QString>  f = starter.startAsynchronously();
+        QCOMPARE(f.result(), QString("Foo"));
+    }
+
+    {
+        ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
+        QString str = starter.startBlocking();
+        QCOMPARE(str, QString("Foo"));
+    }
 }
 
 class CancelUser : public ThreadEngine<void>
@@ -213,6 +226,12 @@ void tst_QtConcurrentThreadEngine::throttle()
         f.waitForFinished();
         QCOMPARE(count.loadRelaxed(), 0);
     }
+
+    for (int i = 0; i < repeats; ++i) {
+        ThrottleAlwaysUser t;
+        t.startBlocking();
+        QCOMPARE(count.loadRelaxed(), 0);
+    }
 }
 
 QSet<QThread *> threads;
@@ -249,17 +268,35 @@ void tst_QtConcurrentThreadEngine::threadCount()
 {
     const int repeats = 10;
     for (int i = 0; i < repeats; ++i) {
+        ThreadCountUser t;
+        t.startBlocking();
+        int count = threads.count();
+        int count_expected = QThreadPool::globalInstance()->maxThreadCount() + 1; // +1 for the main thread.
+        if (count != count_expected)
+            QEXPECT_FAIL("", "QTBUG-23333", Abort);
+        QCOMPARE(count, count_expected);
+
         (new ThreadCountUser())->startAsynchronously().waitForFinished();
-        const auto count = threads.count();
-        const auto maxThreadCount = QThreadPool::globalInstance()->maxThreadCount();
-        QVERIFY(count <= maxThreadCount);
-        QVERIFY(!threads.contains(QThread::currentThread()));
+        count = threads.count();
+        count_expected = QThreadPool::globalInstance()->maxThreadCount();
+        if (count != count_expected)
+            QEXPECT_FAIL("", "QTBUG-23333", Abort);
+        QCOMPARE(count, count_expected);
     }
 
     // Set the finish flag immediately, this should give us one thread only.
     for (int i = 0; i < repeats; ++i) {
+        ThreadCountUser t(true /*finishImmediately*/);
+        t.startBlocking();
+        int count = threads.count();
+        if (count != 1)
+            QEXPECT_FAIL("", "QTBUG-23333", Abort);
+        QCOMPARE(count, 1);
+
         (new ThreadCountUser(true /*finishImmediately*/))->startAsynchronously().waitForFinished();
-        const auto count = threads.count();
+        count = threads.count();
+        if (count != 1)
+            QEXPECT_FAIL("", "QTBUG-23333", Abort);
         QCOMPARE(count, 1);
         QVERIFY(!threads.contains(QThread::currentThread()));
     }
@@ -400,6 +437,7 @@ public:
 
 void tst_QtConcurrentThreadEngine::exceptions()
 {
+    // Asynchronous mode:
     {
         bool caught = false;
         try  {
@@ -412,6 +450,32 @@ void tst_QtConcurrentThreadEngine::exceptions()
         QVERIFY2(caught, "did not get exception");
     }
 
+    // Blocking mode:
+    // test throwing the exception from a worker thread.
+    {
+        bool caught = false;
+        try  {
+            QtConcurrentExceptionThrower e(QThread::currentThread());
+            e.startBlocking();
+        } catch (const QException &) {
+            caught = true;
+        }
+        QVERIFY2(caught, "did not get exception");
+    }
+
+    // test throwing the exception from the main thread (different code path)
+    {
+        bool caught = false;
+        try  {
+            QtConcurrentExceptionThrower e(0);
+            e.startBlocking();
+        } catch (const QException &) {
+            caught = true;
+        }
+        QVERIFY2(caught, "did not get exception");
+    }
+
+    // Asynchronous mode:
     {
         bool caught = false;
         try  {
@@ -423,6 +487,31 @@ void tst_QtConcurrentThreadEngine::exceptions()
         }
         QVERIFY2(caught, "did not get exception");
     }
+
+    // Blocking mode:
+    // test throwing the exception from a worker thread.
+    {
+        bool caught = false;
+        try  {
+            UnrelatedExceptionThrower e(QThread::currentThread());
+            e.startBlocking();
+        } catch (const QUnhandledException &) {
+            caught = true;
+        }
+        QVERIFY2(caught, "did not get exception");
+    }
+
+    // test throwing the exception from the main thread (different code path)
+    {
+        bool caught = false;
+        try  {
+            UnrelatedExceptionThrower e(0);
+            e.startBlocking();
+        } catch (const QUnhandledException &) {
+            caught = true;
+        }
+        QVERIFY2(caught, "did not get exception");
+    }
 }
 
 #endif
diff --git a/qtbase/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp b/qtbase/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp
index 4968742110..f4c3fb711d 100644
--- a/qtbase/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp
+++ b/qtbase/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp
@@ -42,6 +42,7 @@ private slots:
     void writeBlock_data();
     void writeBlock();
     void seek();
+    void invalidSeeks();
     void seekTest_data();
     void seekTest();
     void read_rawdata();
@@ -286,6 +287,29 @@ void tst_QBuffer::seek()
     QCOMPARE(buffer.size(), pos);
 }
 
+void tst_QBuffer::invalidSeeks()
+{
+    if constexpr (sizeof(qsizetype) == sizeof(qint64)) {
+        // sizeof(qsizetype) == sizeof(qint64), so +1 would overflow
+        QSKIP("This is a 32-bit-only test.");
+    } else {
+        QBuffer buffer;
+        buffer.open(QIODevice::WriteOnly);
+        QCOMPARE(buffer.buffer().size(), qsizetype(0));
+        QCOMPARE(buffer.pos(), qint64(0));
+        constexpr qint64 MaxQByteArrayCapacity = (std::numeric_limits<qsizetype>::max)();
+        // this should fail fast, not after trying to allocate nearly 2 GiB of data,
+        // potentially crashing in the process:
+        QVERIFY(!buffer.seek(2 * MaxQByteArrayCapacity - 1));
+        QCOMPARE(buffer.buffer().size(), qsizetype(0));
+        QCOMPARE(buffer.pos(), qint64(0));
+        // ditto:
+        QVERIFY(!buffer.seek(MaxQByteArrayCapacity + 1));
+        QCOMPARE(buffer.buffer().size(), qsizetype(0));
+        QCOMPARE(buffer.pos(), qint64(0));
+    }
+}
+
 void tst_QBuffer::seekTest_data()
 {
     writeBlock_data();
diff --git a/qtbase/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp b/qtbase/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
index da5327594c..4a04e0f7c6 100644
--- a/qtbase/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
+++ b/qtbase/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
@@ -561,7 +561,8 @@ protected:
     qint64 readData(char *data, qint64 maxSize) override
     {
         maxSize = qMin(maxSize, qint64(buf->size() - offset));
-        memcpy(data, buf->constData() + offset, maxSize);
+        if (maxSize > 0)
+            memcpy(data, buf->constData() + offset, maxSize);
         offset += maxSize;
         return maxSize;
     }
@@ -604,13 +605,15 @@ protected:
     qint64 readData(char *data, qint64 maxSize) override
     {
         maxSize = qMin(maxSize, qint64(buf.size() - pos()));
-        memcpy(data, buf.constData() + pos(), maxSize);
+        if (maxSize > 0)
+            memcpy(data, buf.constData() + pos(), maxSize);
         return maxSize;
     }
     qint64 writeData(const char *data, qint64 maxSize) override
     {
         maxSize = qMin(maxSize, qint64(buf.size() - pos()));
-        memcpy(buf.data() + pos(), data, maxSize);
+        if (maxSize > 0)
+            memcpy(buf.data() + pos(), data, maxSize);
         return maxSize;
     }
 
diff --git a/qtbase/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/qtbase/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
index db60bead64..f345a44414 100644
--- a/qtbase/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
+++ b/qtbase/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
@@ -1,7 +1,8 @@
 /****************************************************************************
 **
 ** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
+** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2022 Intel Corporation.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the test suite of the Qt Toolkit.
@@ -150,6 +151,8 @@ private slots:
     void startStopStartStopBuffers();
     void processEventsInAReadyReadSlot_data();
     void processEventsInAReadyReadSlot();
+    void startFromCurrentWorkingDir_data();
+    void startFromCurrentWorkingDir();
 
     // keep these at the end, since they use lots of processes and sometimes
     // caused obscure failures to occur in tests that followed them (esp. on the Mac)
@@ -2731,5 +2734,94 @@ void tst_QProcess::finishProcessBeforeReadingDone_deprecated()
 
 #endif
 
+enum class ChdirMode {
+    None = 0,
+    InParent,
+    InChild
+};
+Q_DECLARE_METATYPE(ChdirMode)
+
+void tst_QProcess::startFromCurrentWorkingDir_data()
+{
+    qRegisterMetaType<ChdirMode>();
+    QTest::addColumn<QString>("programPrefix");
+    QTest::addColumn<ChdirMode>("chdirMode");
+    QTest::addColumn<bool>("success");
+
+    constexpr bool IsWindows = true
+#ifdef Q_OS_UNIX
+            && false
+#endif
+            ;
+
+    // baseline: trying to execute the directory, this can't possibly succeed!
+    QTest::newRow("plain-same-cwd") << QString() << ChdirMode::None << false;
+
+    // cross-platform behavior: neither OS searches the setWorkingDirectory()
+    // dir without "./"
+    QTest::newRow("plain-child-chdir") << QString() << ChdirMode::InChild << false;
+
+    // cross-platform behavior: both OSes search the parent's CWD with "./"
+    QTest::newRow("prefixed-parent-chdir") << "./" << ChdirMode::InParent << true;
+
+    // opposite behaviors: Windows searches the parent's CWD and Unix searches
+    // the child's with "./"
+    QTest::newRow("prefixed-child-chdir") << "./" << ChdirMode::InChild << !IsWindows;
+
+    // Windows searches the parent's CWD without "./"
+    QTest::newRow("plain-parent-chdir") << QString() << ChdirMode::InParent << IsWindows;
+}
+
+void tst_QProcess::startFromCurrentWorkingDir()
+{
+    QFETCH(QString, programPrefix);
+    QFETCH(ChdirMode, chdirMode);
+    QFETCH(bool, success);
+
+    QProcess process;
+    qRegisterMetaType<QProcess::ProcessError>();
+    QSignalSpy errorSpy(&process, &QProcess::errorOccurred);
+    QVERIFY(errorSpy.isValid());
+
+    // both the dir name and the executable name
+    const QString target = QStringLiteral("testProcessNormal");
+    process.setProgram(programPrefix + target);
+
+#ifdef Q_OS_UNIX
+    // Reset PATH, to be sure it doesn't contain . or the empty path.
+    // We can't do this on Windows because DLLs are searched in PATH
+    // and Windows always searches "." anyway.
+    auto restoreEnv = qScopeGuard([old = qgetenv("PATH")] {
+        qputenv("PATH", old);
+    });
+    qputenv("PATH", "/");
+#endif
+
+    switch (chdirMode) {
+    case ChdirMode::InParent: {
+        auto restoreCwd = qScopeGuard([old = QDir::currentPath()] {
+            QDir::setCurrent(old);
+        });
+        QVERIFY(QDir::setCurrent(target));
+        process.start();
+        break;
+    }
+    case ChdirMode::InChild:
+        process.setWorkingDirectory(target);
+        Q_FALLTHROUGH();
+    case ChdirMode::None:
+        process.start();
+        break;
+    }
+
+    QCOMPARE(process.waitForStarted(), success);
+    QCOMPARE(errorSpy.count(), int(!success));
+    if (success) {
+        QVERIFY(process.waitForFinished());
+    } else {
+        QCOMPARE(process.error(), QProcess::FailedToStart);
+    }
+}
+
 QTEST_MAIN(tst_QProcess)
 #include "tst_qprocess.moc"
diff --git a/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp b/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp
index e1ea7a4552..90972caa57 100644
--- a/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp
+++ b/qtbase/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp
@@ -117,6 +117,7 @@ private Q_SLOTS:
     void shouldPropagateDropAfterLastRow_data();
     void shouldPropagateDropAfterLastRow();
     void qtbug91788();
+    void qtbug91878();
 
 private:
     QStandardItemModel mod;
@@ -843,6 +844,22 @@ void tst_QConcatenateTablesProxyModel::qtbug91788()
     QCOMPARE(proxyConcat.columnCount(), 0);
 }
 
+void tst_QConcatenateTablesProxyModel::qtbug91878()
+{
+    QStandardItemModel m;
+    m.setRowCount(4);
+    m.setColumnCount(4);
+
+    QConcatenateTablesProxyModel pm;
+    QSortFilterProxyModel proxyFilter;
+    proxyFilter.setSourceModel(&pm);
+    proxyFilter.setFilterFixedString("something");
+    pm.addSourceModel(&m);  // This should not assert
+
+    QCOMPARE(pm.columnCount(), 4);
+    QCOMPARE(pm.rowCount(), 4);
+}
+
 QTEST_GUILESS_MAIN(tst_QConcatenateTablesProxyModel)
 
 #include "tst_qconcatenatetablesproxymodel.moc"
diff --git a/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp b/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
index 6f608854ae..a6e1f49be2 100644
--- a/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
+++ b/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
@@ -2220,6 +2220,40 @@ void tst_QSortFilterProxyModel::changeSourceDataProxySendDataChanged_qtbug87781(
     QCOMPARE(afterDataChangedSpy.size(), 1);
 }
 
+void tst_QSortFilterProxyModel::changeSourceDataTreeModel()
+{
+    QStandardItemModel treeModel;
+    QSortFilterProxyModel treeProxyModelBefore;
+    QSortFilterProxyModel treeProxyModelAfter;
+
+    QSignalSpy treeBaseDataChangedSpy(&treeModel, &QStandardItemModel::dataChanged);
+    QSignalSpy treeBeforeDataChangedSpy(&treeProxyModelBefore, &QSortFilterProxyModel::dataChanged);
+    QSignalSpy treeAfterDataChangedSpy(&treeProxyModelAfter, &QSortFilterProxyModel::dataChanged);
+
+    QVERIFY(treeBaseDataChangedSpy.isValid());
+    QVERIFY(treeBeforeDataChangedSpy.isValid());
+    QVERIFY(treeAfterDataChangedSpy.isValid());
+
+    treeProxyModelBefore.setSourceModel(&treeModel);
+    QStandardItem treeNode1("data1");
+    QStandardItem treeNode11("data11");
+    QStandardItem treeNode111("data111");
+
+    treeNode1.appendRow(&treeNode11);
+    treeNode11.appendRow(&treeNode111);
+    treeModel.appendRow(&treeNode1);
+    treeProxyModelAfter.setSourceModel(&treeModel);
+
+    QCOMPARE(treeBaseDataChangedSpy.size(), 0);
+    QCOMPARE(treeBeforeDataChangedSpy.size(), 0);
+    QCOMPARE(treeAfterDataChangedSpy.size(), 0);
+
+    treeNode111.setData(QStringLiteral("new data"), Qt::DisplayRole);
+    QCOMPARE(treeBaseDataChangedSpy.size(), 1);
+    QCOMPARE(treeBeforeDataChangedSpy.size(), 1);
+    QCOMPARE(treeAfterDataChangedSpy.size(), 1);
+}
+
 void tst_QSortFilterProxyModel::changeSourceDataProxyFilterSingleColumn()
 {
     enum modelRow { Row0, Row1, RowCount };
diff --git a/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h b/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
index 7bf87a86c2..97862e804b 100644
--- a/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
+++ b/qtbase/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
@@ -91,6 +91,7 @@ private slots:
     void changeSourceDataKeepsStableSorting_qtbug1548();
     void changeSourceDataForwardsRoles_qtbug35440();
     void changeSourceDataProxySendDataChanged_qtbug87781();
+    void changeSourceDataTreeModel();
     void changeSourceDataProxyFilterSingleColumn();
     void changeSourceDataProxyFilterMultipleColumns();
     void resortingDoesNotBreakTreeModels();
diff --git a/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
index 9bd66c0835..ed4a0bae5d 100644
--- a/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
+++ b/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
@@ -158,6 +158,7 @@ private slots:
     void nullReceiver();
     void functorReferencesConnection();
     void disconnectDisconnects();
+    void declarativeData();
 };
 
 struct QObjectCreatedOnShutdown
@@ -7679,5 +7680,81 @@ void tst_QObject::disconnectDisconnects()
 Q_STATIC_ASSERT(QtPrivate::HasQ_OBJECT_Macro<tst_QObject>::Value);
 Q_STATIC_ASSERT(!QtPrivate::HasQ_OBJECT_Macro<SiblingDeleter>::Value);
 
+#ifdef QT_BUILD_INTERNAL
+/*
+    Since QObjectPrivate stores the declarativeData pointer in a union with the pointer
+    to the currently destroyed child, calls to the QtDeclarative handlers need to be
+    correctly guarded. QTBUG-105286
+*/
+namespace QtDeclarative {
+static QAbstractDeclarativeData *theData;
+
+static void destroyed(QAbstractDeclarativeData *data, QObject *)
+{
+    QCOMPARE(data, theData);
+}
+static void signalEmitted(QAbstractDeclarativeData *data, QObject *, int, void **)
+{
+    QCOMPARE(data, theData);
+}
+// we can't use QCOMPARE in the next two functions, as they don't return void
+static int receivers(QAbstractDeclarativeData *data, const QObject *, int)
+{
+    QTest::qCompare(data, theData, "data", "theData", __FILE__, __LINE__);
+    return 0;
+}
+static bool isSignalConnected(QAbstractDeclarativeData *data, const QObject *, int)
+{
+    QTest::qCompare(data, theData, "data", "theData", __FILE__, __LINE__);
+    return true;
+}
+
+class Object : public QObject
+{
+    Q_OBJECT
+public:
+    using QObject::QObject;
+    ~Object()
+    {
+        if (Object *p = static_cast<Object *>(parent()))
+            p->emitSignal();
+    }
+
+    void emitSignal()
+    {
+        emit theSignal();
+    }
+
+signals:
+    void theSignal();
+};
+
+}
+#endif
+
+void tst_QObject::declarativeData()
+{
+#ifdef QT_BUILD_INTERNAL
+    QScopedValueRollback destroyed(QAbstractDeclarativeData::destroyed,
+                                   QtDeclarative::destroyed);
+    QScopedValueRollback signalEmitted(QAbstractDeclarativeData::signalEmitted,
+                                       QtDeclarative::signalEmitted);
+    QScopedValueRollback receivers(QAbstractDeclarativeData::receivers,
+                                   QtDeclarative::receivers);
+    QScopedValueRollback isSignalConnected(QAbstractDeclarativeData::isSignalConnected,
+                                           QtDeclarative::isSignalConnected);
+
+    QtDeclarative::Object p;
+    QObjectPrivate *priv = QObjectPrivate::get(&p);
+    priv->declarativeData = QtDeclarative::theData = new QAbstractDeclarativeData;
+
+    connect(&p, &QtDeclarative::Object::theSignal, &p, []{
+    });
+
+    QtDeclarative::Object *child = new QtDeclarative::Object;
+    child->setParent(&p);
+#endif
+}
+
 QTEST_MAIN(tst_QObject)
 #include "tst_qobject.moc"
diff --git a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
index 0ea422ecbc..1a3256534b 100644
--- a/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
+++ b/qtbase/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
@@ -70,15 +70,15 @@ static inline QString testSuiteWarning()
 
     QString result;
     QTextStream str(&result);
-    str << "\nCannot find the shared-mime-info test suite\nstarting from: "
+    str << "\nCannot find the shared-mime-info test suite\nin the parent of: "
         << QDir::toNativeSeparators(QDir::currentPath()) << "\n"
            "cd " << QDir::toNativeSeparators(QStringLiteral("tests/auto/corelib/mimetypes/qmimedatabase")) << "\n"
-           "wget http://cgit.freedesktop.org/xdg/shared-mime-info/snapshot/Release-1-10.zip\n"
-           "unzip Release-1-10.zip\n";
+           "wget https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.1/shared-mime-info-2.1.zip\n"
+           "unzip shared-mime-info-2.1.zip\n";
 #ifdef Q_OS_WIN
-    str << "mkdir testfiles\nxcopy /s Release-1-10 s-m-i\n";
+    str << "mkdir testfiles\nxcopy /s shared-mime-info-2.1 s-m-i\n";
 #else
-    str << "ln -s Release-1-10 s-m-i\n";
+    str << "ln -s shared-mime-info-2.1 s-m-i\n";
 #endif
     return result;
 }
@@ -154,7 +154,7 @@ void tst_QMimeDatabase::initTestCase()
     QVERIFY2(copyResourceFile(xmlFileName, xmlTargetFileName, &errorMessage), qPrintable(errorMessage));
 #endif
 
-    m_testSuite = QFINDTESTDATA("s-m-i/tests");
+    m_testSuite = QFINDTESTDATA("s-m-i/tests/mime-detection");
     if (m_testSuite.isEmpty())
         qWarning("%s", qPrintable(testSuiteWarning()));
 
@@ -611,7 +611,7 @@ void tst_QMimeDatabase::allMimeTypes()
     QVERIFY(!lst.isEmpty());
 
     // Hardcoding this is the only way to check both providers find the same number of mimetypes.
-    QCOMPARE(lst.count(), 779);
+    QCOMPARE(lst.count(), 811);
 
     foreach (const QMimeType &mime, lst) {
         const QString name = mime.name();
@@ -631,10 +631,9 @@ void tst_QMimeDatabase::suffixes_data()
 
     QTest::newRow("mimetype with a single pattern") << "application/pdf" << "*.pdf" << "pdf";
     QTest::newRow("mimetype with multiple patterns") << "application/x-kpresenter" << "*.kpr;*.kpt" << "kpr";
-    QTest::newRow("jpeg") << "image/jpeg" << "*.jpe;*.jpg;*.jpeg" << "jpeg";
-    //if (KMimeType::sharedMimeInfoVersion() > KDE_MAKE_VERSION(0, 60, 0)) {
-        QTest::newRow("mimetype with many patterns") << "application/vnd.wordperfect" << "*.wp;*.wp4;*.wp5;*.wp6;*.wpd;*.wpp" << "wp";
-    //}
+    // The preferred suffix for image/jpeg is *.jpg, as per https://bugs.kde.org/show_bug.cgi?id=176737
+    QTest::newRow("jpeg") << "image/jpeg" << "*.jpe;*.jpg;*.jpeg" << "jpg";
+    QTest::newRow("mimetype with many patterns") << "application/vnd.wordperfect" << "*.wp;*.wp4;*.wp5;*.wp6;*.wpd;*.wpp" << "wp";
     QTest::newRow("oasis text mimetype") << "application/vnd.oasis.opendocument.text" << "*.odt" << "odt";
     QTest::newRow("oasis presentation mimetype") << "application/vnd.oasis.opendocument.presentation" << "*.odp" << "odp";
     QTest::newRow("mimetype with multiple patterns") << "text/plain" << "*.asc;*.txt;*,v" << "txt";
diff --git a/qtbase/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/qtbase/tests/auto/corelib/serialization/json/tst_qtjson.cpp
index 3e58dd03cc..c8f82ef5d5 100644
--- a/qtbase/tests/auto/corelib/serialization/json/tst_qtjson.cpp
+++ b/qtbase/tests/auto/corelib/serialization/json/tst_qtjson.cpp
@@ -176,6 +176,8 @@ private Q_SLOTS:
     void fromToVariantConversions_data();
     void fromToVariantConversions();
 
+    void noLeakOnNameClash();
+
 private:
     QString testDataDir;
 };
@@ -3685,5 +3687,23 @@ void tst_QtJson::fromToVariantConversions()
     }
 }
 
+void tst_QtJson::noLeakOnNameClash()
+{
+    QJsonDocument doc = QJsonDocument::fromJson("{\"\":{\"\":0},\"\":0}");
+    QVERIFY(!doc.isNull());
+    const QJsonObject obj = doc.object();
+
+    // Removed the duplicate key.
+    QCOMPARE(obj.length(), 1);
+
+    // Retained the last of the duplicates.
+    const QJsonValue val = obj.begin().value();
+    QVERIFY(val.isDouble());
+    QCOMPARE(val.toDouble(), 0.0);
+
+    // It should not leak.
+    // In particular it should not forget to deref the container for the inner object.
+}
+
 QTEST_MAIN(tst_QtJson)
 #include "tst_qtjson.moc"
diff --git a/qtbase/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp b/qtbase/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp
index a59b58d57f..241c3e84ac 100644
--- a/qtbase/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp
+++ b/qtbase/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp
@@ -63,6 +63,7 @@ private slots:
     void isValidId_data();
     void isValidId();
     void malformed();
+    void serialize();
     // Backend tests
     void utcTest();
     void icuTest();
@@ -947,6 +948,33 @@ void tst_QTimeZone::malformed()
         barf.offsetFromUtc(now);
 }
 
+void tst_QTimeZone::serialize()
+{
+    int parts = 0;
+#ifndef QT_NO_DEBUG_STREAM
+    qDebug() << QTimeZone(); // to verify no crash
+    parts++;
+#endif
+#ifndef QT_NO_DATASTREAM
+    QByteArray blob;
+    {
+        QDataStream stream(&blob, QIODevice::WriteOnly);
+        stream << QTimeZone("Europe/Oslo") << QTimeZone(420) << QTimeZone() << qint64(-1);
+    }
+    QDataStream stream(&blob, QIODevice::ReadOnly);
+    QTimeZone invalid, offset, oslo;
+    qint64 minusone;
+    stream >> oslo >> offset >> invalid >> minusone;
+    QCOMPARE(oslo, QTimeZone("Europe/Oslo"));
+    QCOMPARE(offset, QTimeZone(420));
+    QVERIFY(!invalid.isValid());
+    QCOMPARE(minusone, qint64(-1));
+    parts++;
+#endif
+    if (!parts)
+        QSKIP("No serialization enabled");
+}
+
 void tst_QTimeZone::utcTest()
 {
 #ifdef QT_BUILD_INTERNAL
diff --git a/qtbase/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/qtbase/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
index 5443cf120b..625da129c4 100644
--- a/qtbase/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
+++ b/qtbase/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
@@ -29,6 +29,7 @@
 #include <QtTest/QTest>
 #include <qvarlengtharray.h>
 #include <qvariant.h>
+#include <qscopedvaluerollback.h>
 
 #include <memory>
 
@@ -40,6 +41,7 @@ private slots:
     void removeLast();
     void oldTests();
     void appendCausingRealloc();
+    void appendIsStronglyExceptionSafe();
     void resize();
     void realloc();
     void reverseIterators();
@@ -245,6 +247,49 @@ void tst_QVarLengthArray::appendCausingRealloc()
         d.append(i);
 }
 
+void tst_QVarLengthArray::appendIsStronglyExceptionSafe()
+{
+#ifdef QT_NO_EXCEPTIONS
+    QSKIP("This test requires exception support enabled in the compiler.");
+#else
+    static bool throwOnCopyNow = false;
+    static bool throwOnMoveNow = false;
+    struct Thrower {
+        Thrower() = default;
+        Thrower(const Thrower &)
+        {
+            if (throwOnCopyNow)
+                throw 1;
+        }
+        Thrower &operator=(const Thrower &) = default;
+        Thrower(Thrower &&)
+        {
+            if (throwOnMoveNow)
+                throw 1;
+        }
+        Thrower &operator=(Thrower &&) = default;
+        ~Thrower() = default;
+    };
+
+    {
+        // ### TODO: QVLA isn't exception-safe when throwing during reallocation,
+        // ### so check with size() < capacity() for now
+        QVarLengthArray<Thrower, 2> vla(1);
+        {
+            Thrower t;
+            const QScopedValueRollback rb(throwOnCopyNow, true);
+            QVERIFY_EXCEPTION_THROWN(vla.push_back(t), int);
+            QCOMPARE(vla.size(), 1);
+        }
+        {
+            const QScopedValueRollback rb(throwOnMoveNow, true);
+            QVERIFY_EXCEPTION_THROWN(vla.push_back({}), int);
+            QCOMPARE(vla.size(), 1);
+        }
+    }
+#endif
+}
+
 void tst_QVarLengthArray::resize()
 {
     //MOVABLE
diff --git a/qtbase/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp b/qtbase/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
index 05480c6dd2..70f4c75756 100644
--- a/qtbase/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
+++ b/qtbase/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
@@ -324,6 +324,13 @@ void tst_QDBusInterface::notValid()
 
     QVERIFY(!interface.isValid());
     QVERIFY(!QMetaObject::invokeMethod(&interface, "ListNames", Qt::DirectConnection));
+
+    // With a connection, but empty/null service and path specified
+    QDBusConnection con = QDBusConnection::sessionBus();
+    QVERIFY(con.isConnected());
+    QDBusInterface iface({}, {}, {}, con);
+    QVERIFY(!iface.isValid());
+    QVERIFY(!QMetaObject::invokeMethod(&interface, "ListNames", Qt::DirectConnection));
 }
 
 void tst_QDBusInterface::notValidDerived()
diff --git a/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
index edbb090e42..6fb8d74d7b 100644
--- a/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
+++ b/qtbase/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
@@ -79,6 +79,8 @@ private slots:
     void registerOpenTypePreferredNamesSystem();
     void registerOpenTypePreferredNamesApplication();
 
+    void stretchRespected();
+
 private:
     QString m_ledFont;
     QString m_testFont;
@@ -353,6 +355,28 @@ static QString testString()
     return QStringLiteral("foo bar");
 }
 
+void tst_QFontDatabase::stretchRespected()
+{
+    int italicId = QFontDatabase::addApplicationFont(m_testFontItalic);
+    QVERIFY(italicId != -1);
+
+    QVERIFY(!QFontDatabase::applicationFontFamilies(italicId).isEmpty());
+
+    QString italicFontName = QFontDatabase::applicationFontFamilies(italicId).first();
+
+    QFont italicFont = QFontDatabase().font(italicFontName,
+                                            QString::fromLatin1("Italic"), 14);
+    QVERIFY(italicFont.italic());
+
+    QFont italicStretchedFont = italicFont;
+    italicStretchedFont.setStretch( 400 );
+
+    QVERIFY(QFontMetricsF(italicFont).horizontalAdvance(QStringLiteral("foobar")) <
+            QFontMetricsF(italicStretchedFont).horizontalAdvance(QStringLiteral("foobar")));
+
+    QFontDatabase::removeApplicationFont(italicId);
+}
+
 void tst_QFontDatabase::condensedFontWidthNoFontMerging()
 {
     int regularFontId = QFontDatabase::addApplicationFont(m_testFont);
diff --git a/qtbase/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp b/qtbase/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
index 474079037b..93bbf9f34f 100644
--- a/qtbase/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
+++ b/qtbase/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
@@ -29,7 +29,7 @@
 
 #include <QtTest/QtTest>
 
-
+#include <qbuffer.h>
 #include <qtextdocument.h>
 #include <qtextdocumentfragment.h>
 #include <qtexttable.h>
@@ -44,6 +44,7 @@
 #include <QPainter>
 #include <QPaintEngine>
 #endif
+#include <private/qtextdocumentlayout_p.h>
 #include <private/qpagedpaintdevice_p.h>
 
 typedef QList<int> IntList;
@@ -100,6 +101,13 @@ private slots:
     void checkBorderAttributes_data();
     void checkBorderAttributes();
 
+#ifndef QT_NO_WIDGETS
+    void columnWidthWithSpans();
+
+    void columnWidthWithImage_data();
+    void columnWidthWithImage();
+#endif
+
 private:
     QTextTable *create2x2Table();
     QTextTable *create4x4Table();
@@ -1278,5 +1286,84 @@ void tst_QTextTable::checkBorderAttributes()
     }
 }
 
+#ifndef QT_NO_WIDGETS
+void tst_QTextTable::columnWidthWithSpans()
+{
+    cleanup();
+    init();
+    QTextTable *table = cursor.insertTable(4, 4);
+    QTextEdit textEdit;
+    textEdit.setDocument(doc);
+    textEdit.show();
+    QVERIFY(QTest::qWaitForWindowExposed(&textEdit));
+
+    for (int i = 0; i < table->columns(); ++i)
+        table->cellAt(0, i).firstCursorPosition().insertText(QString("Header %1").arg(i));
+
+    QTextBlock block = table->cellAt(0, 0).firstCursorPosition().block();
+    const QRectF beforeRect = table->document()->documentLayout()->blockBoundingRect(block);
+    table->mergeCells(1, 0, 1, table->columns());
+    block = table->cellAt(0, 0).firstCursorPosition().block();
+    const QRectF afterRect = table->document()->documentLayout()->blockBoundingRect(block);
+    QCOMPARE(afterRect, beforeRect);
+}
+
+void tst_QTextTable::columnWidthWithImage_data()
+{
+    const auto imageHtml = [](int width, int height) {
+        QImage image(width, height, QImage::Format_RGB32);
+        image.fill(Qt::red);
+        QByteArray imageBytes;
+        QBuffer buffer(&imageBytes);
+        buffer.open(QIODevice::WriteOnly);
+        image.save(&buffer, "png");
+        return QString("<td><img src='data:image/png;base64,%1'/></td>").arg(QString(imageBytes.toBase64()));
+    };
+
+    QTest::addColumn<QString>("leftHtml");
+    QTest::addColumn<QString>("rightHtml");
+    QTest::addColumn<QSize>("imageSize");
+    QTest::addRow("image")
+        << imageHtml(500, 32) << "<td></td>" << QSize(500, 32);
+    QTest::addRow("image, text")
+        << imageHtml(32, 32) << "<td>abc</td>" << QSize(32, 32);
+    QTest::addRow("image, 100%% text")
+        << imageHtml(32, 32) << "<td style='background-color: grey' width='100%'>abc</td>"
+        << QSize(32, 32);
+    QTest::addRow("image, image")
+        << imageHtml(256, 32) << imageHtml(256, 32) << QSize(256, 32);
+}
+
+void tst_QTextTable::columnWidthWithImage()
+{
+    const QString tableTemplate = "<table><tr>%1 %2</tr></table>";
+
+    QFETCH(QString, leftHtml);
+    QFETCH(QString, rightHtml);
+    QFETCH(QSize, imageSize);
+
+    QTextDocument doc;
+    doc.setHtml(tableTemplate.arg(leftHtml).arg(rightHtml));
+    QTextEdit textEdit;
+    textEdit.setDocument(&doc);
+    textEdit.show();
+    QVERIFY(QTest::qWaitForWindowExposed(&textEdit));
+
+    QTextCursor cursor(doc.firstBlock());
+    cursor.movePosition(QTextCursor::Right);
+
+    QTextTable *currentTable = cursor.currentTable();
+    QVERIFY(currentTable);
+
+    QTextBlock block = currentTable->cellAt(0, 0).firstCursorPosition().block();
+    const QRectF leftRect = currentTable->document()->documentLayout()->blockBoundingRect(block);
+    block = currentTable->cellAt(0, 1).firstCursorPosition().block();
+    const QRectF rightRect = currentTable->document()->documentLayout()->blockBoundingRect(block);
+    QCOMPARE(leftRect.size().toSize(), imageSize);
+    QVERIFY(rightRect.left() > leftRect.right());
+}
+#endif
+
+
 QTEST_MAIN(tst_QTextTable)
 #include "tst_qtexttable.moc"
diff --git a/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 3d4a094c43..b423e11a99 100644
--- a/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -281,6 +281,7 @@ private Q_SLOTS:
     void ioGetFromFileSpecial();
     void ioGetFromFile_data();
     void ioGetFromFile();
+    void ioGetFromFileUrl();
     void ioGetFromFtp_data();
     void ioGetFromFtp();
     void ioGetFromFtpWithReuse();
@@ -3300,6 +3301,18 @@ void tst_QNetworkReply::ioGetFromFile()
     QCOMPARE(reader.data, data);
 }
 
+void tst_QNetworkReply::ioGetFromFileUrl()
+{
+    // This immediately fails on non-windows platforms:
+    QNetworkRequest request(QUrl("file://unc-server/some/path"));
+    QNetworkReplyPtr reply(manager.get(request));
+    QSignalSpy finishedSpy(reply.get(), &QNetworkReply::finished);
+    // QTBUG-105618: This would, on non-Windows platforms, never happen because the signal
+    // was emitted before the constructor finished, leaving no chance at all to connect to the
+    // signal
+    QVERIFY(finishedSpy.wait());
+}
+
 void tst_QNetworkReply::ioGetFromFtp_data()
 {
     QTest::addColumn<QString>("fileName");
diff --git a/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.cert b/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.cert
index 069fa6b341..4cc4d9a5ea 100644
--- a/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.cert
+++ b/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.cert
@@ -1,75 +1,34 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 0 (0x0)
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=NO, ST=Oslo, L=Nydalen, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com
-        Validity
-            Not Before: Dec  4 01:10:32 2007 GMT
-            Not After : Apr 21 01:10:32 2035 GMT
-        Subject: C=NO, ST=Oslo, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:a7:c8:a0:4a:c4:19:05:1b:66:ba:32:e2:d2:f1:
-                    1c:6f:17:82:e4:39:2e:01:51:90:db:04:34:32:11:
-                    21:c2:0d:6f:59:d8:53:90:54:3f:83:8f:a9:d3:b3:
-                    d5:ee:1a:9b:80:ae:c3:25:c9:5e:a5:af:4b:60:05:
-                    aa:a0:d1:91:01:1f:ca:04:83:e3:58:1c:99:32:45:
-                    84:70:72:58:03:98:4a:63:8b:41:f5:08:49:d2:91:
-                    02:60:6b:e4:64:fe:dd:a0:aa:74:08:e9:34:4c:91:
-                    5f:12:3d:37:4d:54:2c:ad:7f:5b:98:60:36:02:8c:
-                    3b:f6:45:f3:27:6a:9b:94:9d
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            Netscape Comment: 
-                OpenSSL Generated Certificate
-            X509v3 Subject Key Identifier: 
-                21:85:04:3D:23:01:66:E5:F7:9F:1A:84:24:8A:AF:0A:79:F4:E5:AC
-            X509v3 Authority Key Identifier: 
-                DirName:/C=NO/ST=Oslo/L=Nydalen/O=Nokia Corporation and/or its subsidiary(-ies)/OU=Development/CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com
-                serial:8E:A8:B4:E8:91:B7:54:2E
-
-    Signature Algorithm: sha1WithRSAEncryption
-        6d:57:5f:d1:05:43:f0:62:05:ec:2a:71:a5:dc:19:08:f2:c4:
-        a6:bd:bb:25:d9:ca:89:01:0e:e4:cf:1f:c1:8c:c8:24:18:35:
-        53:59:7b:c0:43:b4:32:e6:98:b2:a6:ef:15:05:0b:48:5f:e1:
-        a0:0c:97:a9:a1:77:d8:35:18:30:bc:a9:8f:d3:b7:54:c7:f1:
-        a9:9e:5d:e6:19:bf:f6:3c:5b:2b:d8:e4:3e:62:18:88:8b:d3:
-        24:e1:40:9b:0c:e6:29:16:62:ab:ea:05:24:70:36:aa:55:93:
-        ef:02:81:1b:23:10:a2:04:eb:56:95:75:fc:f8:94:b1:5d:42:
-        c5:3f:36:44:85:5d:3a:2e:90:46:8a:a2:b9:6f:87:ae:0c:15:
-        40:19:31:90:fc:3b:25:bb:ae:f1:66:13:0d:85:90:d9:49:34:
-        8f:f2:5d:f9:7a:db:4d:5d:27:f6:76:9d:35:8c:06:a6:4c:a3:
-        b1:b2:b6:6f:1d:d7:a3:00:fd:72:eb:9e:ea:44:a1:af:21:34:
-        7d:c7:42:e2:49:91:19:8b:c0:ad:ba:82:80:a8:71:70:f4:35:
-        31:91:63:84:20:95:e9:60:af:64:8b:cc:ff:3d:8a:76:74:3d:
-        c8:55:6d:e4:8e:c3:2b:1c:e8:42:18:ae:9f:e6:6b:9c:34:06:
-        ec:6a:f2:c3
 -----BEGIN CERTIFICATE-----
-MIIEEzCCAvugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMCTk8x
-DTALBgNVBAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xs
-dGVjaCBBU0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50
-cm9sbC5ubzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbTAe
-Fw0wNzEyMDQwMTEwMzJaFw0zNTA0MjEwMTEwMzJaMGMxCzAJBgNVBAYTAk5PMQ0w
-CwYDVQQIEwRPc2xvMRYwFAYDVQQKEw1Ucm9sbHRlY2ggQVNBMRQwEgYDVQQLEwtE
-ZXZlbG9wbWVudDEXMBUGA1UEAxMOZmx1a2UudHJvbGwubm8wgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAKfIoErEGQUbZroy4tLxHG8XguQ5LgFRkNsENDIRIcIN
-b1nYU5BUP4OPqdOz1e4am4CuwyXJXqWvS2AFqqDRkQEfygSD41gcmTJFhHByWAOY
-SmOLQfUISdKRAmBr5GT+3aCqdAjpNEyRXxI9N01ULK1/W5hgNgKMO/ZF8ydqm5Sd
-AgMBAAGjggEaMIIBFjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NM
-IEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUIYUEPSMBZuX3nxqEJIqv
-Cnn05awwgbsGA1UdIwSBszCBsKGBoqSBnzCBnDELMAkGA1UEBhMCTk8xDTALBgNV
-BAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xsdGVjaCBB
-U0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50cm9sbC5u
-bzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbYIJAI6otOiR
-t1QuMA0GCSqGSIb3DQEBBQUAA4IBAQBtV1/RBUPwYgXsKnGl3BkI8sSmvbsl2cqJ
-AQ7kzx/BjMgkGDVTWXvAQ7Qy5piypu8VBQtIX+GgDJepoXfYNRgwvKmP07dUx/Gp
-nl3mGb/2PFsr2OQ+YhiIi9Mk4UCbDOYpFmKr6gUkcDaqVZPvAoEbIxCiBOtWlXX8
-+JSxXULFPzZEhV06LpBGiqK5b4euDBVAGTGQ/Dslu67xZhMNhZDZSTSP8l35ettN
-XSf2dp01jAamTKOxsrZvHdejAP1y657qRKGvITR9x0LiSZEZi8CtuoKAqHFw9DUx
-kWOEIJXpYK9ki8z/PYp2dD3IVW3kjsMrHOhCGK6f5mucNAbsavLD
+MIIF6zCCA9OgAwIBAgIUfo9amJtJGWqWE6f+SkAO85zkGr4wDQYJKoZIhvcNAQEL
+BQAwgYMxCzAJBgNVBAYTAk5PMQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xv
+MRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFueTEMMAoGA1UECwwDUiZEMRIwEAYDVQQD
+DAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0BCQEWDG1pbmltaUBxdC5pbzAgFw0yMDEw
+MjYxMjAxMzFaGA8yMTIwMTAwMjEyMDEzMVowgYMxCzAJBgNVBAYTAk5PMQ0wCwYD
+VQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFu
+eTEMMAoGA1UECwwDUiZEMRIwEAYDVQQDDAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0B
+CQEWDG1pbmltaUBxdC5pbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+AOiUp5+E4blouKH7q+rVNR8NoYX2XkBW+q+rpy1zu5ssRSzbqxAjDx9dkht7Qlnf
+VlDT00JvpOWdeuPon5915edQRsY4Unl6mKH29ra3OtUa1/yCJXsGVJTKCj7k4Bxb
+5mZzb/fTlZntMLdTIBMfUbw62FKir1WjKIcJ9fCoG8JaGeKVO4Rh5p0ezd4UUUId
+r1BXl5Nqdqy2vTMsEDnjOsD3egkv8I2SKN4O6n/C3wWYpMOWYZkGoZiKz7rJs/i/
+ez7bsV7JlwdzTlhpJzkcOSVFBP6JlEOxTNNxZ1wtKy7PtZGmsSSATq2e6+bw38Ae
+Op0XnzzqcGjtDDofBmT7OFzZWjS9VZS6+DOOe2QHWle1nCHcHyH4ku6IRlsr9xkR
+NAIlOfnvHHxqJUenoeaZ4oQDjCBKS1KXygJO/tL7BLTQVn/xK1EmPvKNnjzWk4tR
+PnibUhhs5635qpOU/YPqFBh1JjVruZbsWcDAhRcew0uxONXOa9E+4lttQ9ySYa1A
+LvWqJuAX7gu2BsBMLyqfm811YnA7CIFMyO+HlqmkLFfv5L/xIRAXR7l26YGO0VwX
+CGjMfz4NVPMMke4nB7qa9NkpXQBQKMms3Qzd5JW0Hy9Ruj5O8GPcFZmV0twjd1uJ
+PD/cAjkWLaXjdNsJ16QWc2nghQRS6HYqKRX6j+CXOxupAgMBAAGjUzBRMB0GA1Ud
+DgQWBBRSCOU58j9NJZkMamt623qyCrhN3TAfBgNVHSMEGDAWgBRSCOU58j9NJZkM
+amt623qyCrhN3TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCq
+q4jxsWeNDv5Nq14hJtF9HB+ZL64zcZtRjJP1YgNs0QppKICmjPOL2nIMGmI/jKrs
+0eGAL/9XXNVHPxm1OPOncvimMMmU6emZfpMdEtTfKP43+Pg9HgKRjLoQp406vGeQ
+8ki/mbBhrItVPgEm3tu2AFA02XTYi+YxCI9kRZLGkM3FbgtOuTLPl0Z9y+kiPc9F
+uCSC03anBEqv+vDSI8+wODymQ/IJ3Jyz1lxIRDfp4qAekmy0jU2c91VOHHEmOmqq
+kqygGFRdwbe99m9yP63r6q0b5K3X2UnJ6bns0hmTwThYwpVPXLU8jdaTddbMukN2
+/Ef96Tsw8nWOEOPMySHOTIPgwyZRp26b0kA9EmhLwOP401SxXVQCmSRmtwNagmtg
+jJKmZoYBN+//D45ibK8z6Q0oOm9P+Whf/uUXehcRxBxyV3xz7k0wKGQbHj/ddwcy
+IUoIN4lrAlib+lK170kTKN352PDmrpo2gmIzPEsfurKAIMSelDl6H+kih16BtZ8y
+Nz6fh9Soqrg3OSAware8pxV7k51crBMoPLN78KoRV8MFCK4K7Fddq4rRISq6hiXq
+r1nsjoEPuKM9huprmZVZe9t5YcDa2I+wb3IiE3uwpZbAdaLDyQ5n6F/qpsiIkZXn
+gtcF7oqpG5oYrwCcZ53y/ezUgUg7PlSz2XwAGvQtgg==
 -----END CERTIFICATE-----
diff --git a/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.key b/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.key
index 9d1664d609..337ce541a6 100644
--- a/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.key
+++ b/qtbase/tests/auto/network/ssl/qsslsocket/certs/fluke.key
@@ -1,15 +1,52 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQCnyKBKxBkFG2a6MuLS8RxvF4LkOS4BUZDbBDQyESHCDW9Z2FOQ
-VD+Dj6nTs9XuGpuArsMlyV6lr0tgBaqg0ZEBH8oEg+NYHJkyRYRwclgDmEpji0H1
-CEnSkQJga+Rk/t2gqnQI6TRMkV8SPTdNVCytf1uYYDYCjDv2RfMnapuUnQIDAQAB
-AoGANFzLkanTeSGNFM0uttBipFT9F4a00dqHz6JnO7zXAT26I5r8sU1pqQBb6uLz
-/+Qz5Zwk8RUAQcsMRgJetuPQUb0JZjF6Duv24hNazqXBCu7AZzUenjafwmKC/8ri
-KpX3fTwqzfzi//FKGgbXQ80yykSSliDL3kn/drATxsLCgQECQQDXhEFWLJ0vVZ1s
-1Ekf+3NITE+DR16X+LQ4W6vyEHAjTbaNWtcTKdAWLA2l6N4WAAPYSi6awm+zMxx4
-VomVTsjdAkEAx0z+e7natLeFcrrq8pbU+wa6SAP1VfhQWKitxL1e7u/QO90NCpxE
-oQYKzMkmmpOOFjQwEMAy1dvFMbm4LHlewQJAC/ksDBaUcQHHqjktCtrUb8rVjAyW
-A8lscckeB2fEYyG5J6dJVaY4ClNOOs5yMDS2Afk1F6H/xKvtQ/5CzInA/QJATDub
-K+BPU8jO9q+gpuIi3VIZdupssVGmCgObVCHLakG4uO04y9IyPhV9lA9tALtoIf4c
-VIvv5fWGXBrZ48kZAQJBAJmVCdzQxd9LZI5vxijUCj5EI4e+x5DRqVUvyP8KCZrC
-AiNyoDP85T+hBZaSXK3aYGpVwelyj3bvo1GrTNwNWLw=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDolKefhOG5aLih
++6vq1TUfDaGF9l5AVvqvq6ctc7ubLEUs26sQIw8fXZIbe0JZ31ZQ09NCb6TlnXrj
+6J+fdeXnUEbGOFJ5epih9va2tzrVGtf8giV7BlSUygo+5OAcW+Zmc2/305WZ7TC3
+UyATH1G8OthSoq9VoyiHCfXwqBvCWhnilTuEYeadHs3eFFFCHa9QV5eTanastr0z
+LBA54zrA93oJL/CNkijeDup/wt8FmKTDlmGZBqGYis+6ybP4v3s+27FeyZcHc05Y
+aSc5HDklRQT+iZRDsUzTcWdcLSsuz7WRprEkgE6tnuvm8N/AHjqdF5886nBo7Qw6
+HwZk+zhc2Vo0vVWUuvgzjntkB1pXtZwh3B8h+JLuiEZbK/cZETQCJTn57xx8aiVH
+p6HmmeKEA4wgSktSl8oCTv7S+wS00FZ/8StRJj7yjZ481pOLUT54m1IYbOet+aqT
+lP2D6hQYdSY1a7mW7FnAwIUXHsNLsTjVzmvRPuJbbUPckmGtQC71qibgF+4LtgbA
+TC8qn5vNdWJwOwiBTMjvh5appCxX7+S/8SEQF0e5dumBjtFcFwhozH8+DVTzDJHu
+Jwe6mvTZKV0AUCjJrN0M3eSVtB8vUbo+TvBj3BWZldLcI3dbiTw/3AI5Fi2l43Tb
+CdekFnNp4IUEUuh2KikV+o/glzsbqQIDAQABAoICAFw1q6tr5I48vY7DF+rXsuLn
+5ZUWE1IQ6fzB4lr72nJv/9EEGnMgYzt9PpMUsD6vdCpBgS2C0+6RHArFzJtNA+RM
+iHLIG7K7702veyr/xBx/MwiSlMeMv/XpkFxVI6E6skMGG2s3AMXxKvJTy5CpRx+I
+eQFyLG+Ya1X2lgJes/q+/CpAHkOjCOpcLySQC5NZ74q734V7nSdmn+Zs3tYEh+O/
+eiuwTP/j5b38Te5vVTqDxTciJPmljmXLCwa0N100lWlbcpvw8qbqiTI2Jm3XCbUE
+AzHjW9vmrF3cRS1fXxKFGShw3SRqlkbxjfeWoi8qDPUBS4m8LOr8qG9Wo5Nfon0z
+zLP4bci3zHDvVcaaZrrsUBs/yZbg+Dgka1DmX7ekmeccr2yTdKDFgPupYUyxVbTl
+a9ZLJysjFD7rgBv1ZclHonLp6Vbm+ZoTqvteo4ikAy6L9RtBWJ23XEK34PkP/+c5
+2vWZaOrnjSeBHbFce8cdJSxqWpP+eSCI5I9XbDrYFIsQ/gqKgtzDKy2ihJ2Y8STL
+yO4hyFPFjxc+Gg4/P2PpmT5CY2ty44M0BWs+JGW96CJPrrplf2lmQUQJj5LZY66X
+Z/4C9L7ZYtKZ+bs5SvU46yWugAvQZX22Xm9xLXWyVXRdx3bj+3M3fDnF9di/zdbh
+CgLx7oWPNrXc7FCajnn9AoIBAQD5FMYwRpw9NWT9WDxQwx+cSI4Icbd88ByTW63S
+LzeRwZA0J9/SfwO+aBRupzc9GkGXCiZcGMw3AGsCtig8yFlw8E5KnzN7KlftDMnM
+9NUxxzlR8VwKyLnZfG7sDTl057ZlUujnqhmt/F8F7dIy7FVO1dE/8nngA+FYTCOG
+UZdGjwyBDlDM0JJdUWGY3xslutcpCDN5mzSTKjy9drMvImAshRawxRF6WBpn7vr2
+nC6vciqfx1Mzx1vyk0Jm0ilaydDdLMADjt/iL4Nkr0BEs4k+UzQiKDwp8gu7abQ1
+eBfxd9Iar4htQa2I1Ewl6P01G/q+ZYwgHhJ9RVn4AxQXefILAoIBAQDvCouORdQX
+C8wsyp7MwXlF/3NQeNN5/+B2mhbxrBOf7PmMCXLnkRWcjwJtzypWFqJ0sqai/2+0
+bqbMcjX5maT8stT2shl3zXe/Ejt2e3TBYpc1tyuses8Kb5BMU8hu6tTd3G2CMXpD
+dT6DVemJZCTtwj9aBNIxSizvlgMolJnCpzhPnlfHSI6E+g3m/LTTo3HwbjMSw/Uq
+irgjOpI2wSBB6LZPSgjvfcYPRyWUk16L4A5uSX0cADnovDFLa5/h0wJvN/OoCSQg
+rLCXG5E18EyL5Wc58BCY1ZvxmjG3lQtgPxYu2Jwc36R/y/JKlxW5suER5ZNpbbD4
+uOyTt2VxMQ2bAoIBAQC5+MzRFqdo/AjfL5Y5JrbfVTzXCTDa09xCGd16ZU60QTWN
++4ed/r+o1sUKqUcRFB2MzEM/2DQBjQpZB/CbEWvWa1XJWXxypXbowveZU+QqOnmN
+uQvj8WLyA3o+PNF9e9QvauwCrHpn8VpxbtPWuaYoKnUFreFZZQxHhPGxRBIS2JOZ
+eDrT8ZaWnkCkh1AZp5smQ71LOprSlmKrg4jd1GjCVMxQR5N5KXbtyv0OTCZ/UFqK
+2aRBsMPyJgkaBChkZPLRcKwc+/wlQRx1fHQb14DNTApMxoXFO7eOwqmOkpAt9iyl
+SBIwoS0UUI5ab88+bBmXNvKcuFdNuQ4nowTJUn9pAoIBADMNkILBXSvS5DeIyuO2
+Sp1tkoZUV+5NfPY3sMDK3KIibaW/+t+EOBZo4L7tKQCb8vRzl21mmsfxfgRaPDbj
+3r3tv9g0b4YLxxBy52pFscj/soXRai17SS7UZwA2QK+XzgDYbDcLNC6mIsTQG4Gx
+dsWk3/zs3KuUSQaehmwrWK+fIUK38c1pLK8v7LoxrLkqxlHwZ04RthHw8KTthH7X
+Pnl1J0LF8CSeOyfWLSuPUfkT0GEzptnNHpEbaHfQM6R6eaGhVJPF6AZme4y6YYgg
+m2ihhSt1n0XVEWpHYWjxFy3mK2mz75unFC4LM+NEY2p2zuUQoCw7NjnY3QYrfCnx
+rRMCggEAXeXsMSLFjjyuoL7iKbAxo52HD/P0fBoy58LyRcwfNVr0lvYan4pYEx+o
+KijIh9K16PqXZXKMA9v003B+ulmF8bJ7SddCZ5NGvnFhUTDe4DdTKgp2RuwQ3Bsc
+3skPIDbhVETyOLCtys34USHrq8U/0DlGY3eLRfxw9GnbKxSBGa/KEu/qQLPNUo50
+7xHZDg7GKeC3kqNJeqKM9rkp0VzIGkEnaD9127LeNDmERDfftxJzFoC/THvUBLfU
+6Sus2ZYwRE8VFvKC30Q45t/c54X3IuhYvAuiCuTmyfE4ruyzyOwKzhUkeeLq1APX
+g0veFbyfzlJ0q8qzD/iffqqIa2ZSmQ==
+-----END PRIVATE KEY-----
diff --git a/qtbase/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/qtbase/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index 76df61c892..6d6d65b791 100644
--- a/qtbase/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/qtbase/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the test suite of the Qt Toolkit.
@@ -68,6 +68,8 @@ private slots:
     void query_exec();
     void execErrorRecovery_data() { generic_data(); }
     void execErrorRecovery();
+    void prematureExec_data() { generic_data(); }
+    void prematureExec();
     void first_data() { generic_data(); }
     void first();
     void next_data() { generic_data(); }
@@ -2770,6 +2772,35 @@ void tst_QSqlQuery::execErrorRecovery()
     QVERIFY_SQL( q, exec() );
 }
 
+void tst_QSqlQuery::prematureExec()
+{
+    QFETCH(QString, dbName);
+    // We only want the engine name, for addDatabase():
+    int cut = dbName.indexOf(QChar('@'));
+    if (cut < 0)
+        QSKIP("Failed to parse database type out of name");
+    dbName.truncate(cut);
+    cut = dbName.indexOf(QChar('_'));
+    if (cut >= 0)
+        dbName = dbName.mid(cut + 1);
+
+    auto db = QSqlDatabase::addDatabase(dbName);
+    QSqlQuery q(db);
+
+    QTest::ignoreMessage(QtWarningMsg,
+                         "QSqlDatabasePrivate::removeDatabase: connection "
+                         "'qt_sql_default_connection' is still in use, all "
+                         "queries will cease to work.");
+    QTest::ignoreMessage(QtWarningMsg,
+                         "QSqlDatabasePrivate::addDatabase: duplicate connection name "
+                         "'qt_sql_default_connection', old connection removed.");
+    auto otherDb = QSqlDatabase::addDatabase(dbName);
+
+    QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::exec: called before driver has been set up");
+    // QTBUG-100037: shouldn't crash !
+    QVERIFY(!q.exec("select stuff from TheVoid"));
+}
+
 void tst_QSqlQuery::lastInsertId()
 {
     QFETCH( QString, dbName );
diff --git a/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp b/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
index 4aa3f8d60b..d2050a61aa 100644
--- a/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
+++ b/qtbase/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
@@ -115,6 +115,10 @@ void tst_QAbstractItemModelTester::standardItemModelZeroColumns()
     // QTBUG-92886
     model.insertRows(0, 5);
     model.removeRows(1, 2);
+
+    const QModelIndex parentIndex = model.index(0, 0);
+    model.insertRows(0, 5, parentIndex);
+    model.removeRows(1, 2, parentIndex);
 }
 
 void tst_QAbstractItemModelTester::testInsertThroughProxy()
diff --git a/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json b/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json
index 12a4a22a19..ce518e78fb 100644
--- a/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json
+++ b/qtbase/tests/auto/tools/moc/allmocs_baseline_in.json
@@ -668,50 +668,6 @@
         "inputFile": "task192552.h",
         "outputRevision": 67
     },
-    {
-        "classes": [
-            {
-                "className": "InlineSlotsWithThrowDeclaration",
-                "object": true,
-                "qualifiedClassName": "InlineSlotsWithThrowDeclaration",
-                "slots": [
-                    {
-                        "access": "public",
-                        "name": "a",
-                        "returnType": "void"
-                    },
-                    {
-                        "access": "public",
-                        "name": "b",
-                        "returnType": "void"
-                    },
-                    {
-                        "access": "public",
-                        "name": "c",
-                        "returnType": "void"
-                    },
-                    {
-                        "access": "public",
-                        "name": "d",
-                        "returnType": "void"
-                    },
-                    {
-                        "access": "public",
-                        "name": "e",
-                        "returnType": "void"
-                    }
-                ],
-                "superClasses": [
-                    {
-                        "access": "public",
-                        "name": "QObject"
-                    }
-                ]
-            }
-        ],
-        "inputFile": "task189996.h",
-        "outputRevision": 67
-    },
     {
         "classes": [
             {
diff --git a/qtbase/tests/auto/tools/moc/moc.pro b/qtbase/tests/auto/tools/moc/moc.pro
index c324b3a8cd..4aceb78dc0 100644
--- a/qtbase/tests/auto/tools/moc/moc.pro
+++ b/qtbase/tests/auto/tools/moc/moc.pro
@@ -15,7 +15,7 @@ cross_compile: DEFINES += MOC_CROSS_COMPILED
 HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-newlines.h oldstyle-casts.h \
            slots-with-void-template.h qinvokable.h namespaced-flags.h trigraphs.h \
            escapes-in-string-literals.h cstyle-enums.h qprivateslots.h gadgetwithnoenums.h \
-           dir-in-include-path.h single_function_keyword.h task192552.h task189996.h \
+           dir-in-include-path.h single_function_keyword.h task192552.h \
            task234909.h task240368.h pure-virtual-signals.h cxx11-enums.h \
            cxx11-final-classes.h \
            cxx11-explicit-override-control.h \
diff --git a/qtbase/tests/auto/tools/moc/task189996.h b/qtbase/tests/auto/tools/moc/task189996.h
deleted file mode 100644
index f94a051b3a..0000000000
--- a/qtbase/tests/auto/tools/moc/task189996.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-// inline functions can have throw declarations
-
-#ifndef TASK189996_H
-#define TASK189996_H
-
-#include <QObject>
-
-class InlineSlotsWithThrowDeclaration : public QObject
-{
-    Q_OBJECT
-
-public slots:
-    void a() throw() { }
-    void b() const throw() { }
-    void c() throw();
-    void d() throw(int) { }
-    void e() const throw(int,double) { }
-};
-
-#endif
diff --git a/qtbase/tests/auto/tools/moc/tst_moc.cpp b/qtbase/tests/auto/tools/moc/tst_moc.cpp
index c716aead21..15dd9e41e5 100644
--- a/qtbase/tests/auto/tools/moc/tst_moc.cpp
+++ b/qtbase/tests/auto/tools/moc/tst_moc.cpp
@@ -631,7 +631,6 @@ public:
 private slots:
     void initTestCase();
 
-    void slotWithException() throw(MyStruct);
     void dontStripNamespaces();
     void oldStyleCasts();
     void warnOnExtraSignalSlotQualifiaction();
@@ -673,7 +672,6 @@ private slots:
     void templateGtGt();
     void qprivateslots();
     void qprivateproperties();
-    void inlineSlotsWithThrowDeclaration();
     void warnOnPropertyWithoutREAD();
     void constructors();
     void typenameWithUnsigned();
@@ -784,12 +782,6 @@ void tst_Moc::initTestCase()
 #endif
 }
 
-void tst_Moc::slotWithException() throw(MyStruct)
-{
-    // be happy
-    QVERIFY(true);
-}
-
 void tst_Moc::dontStripNamespaces()
 {
     Sender sender;
@@ -824,7 +816,7 @@ void tst_Moc::oldStyleCasts()
 
     QStringList args;
     args << "-c" << "-x" << "c++" << "-Wold-style-cast" << "-I" << "."
-         << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++11" << "-";
+         << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++1z" << "-";
     proc.start("gcc", args);
     QVERIFY(proc.waitForStarted());
     proc.write(mocOut);
@@ -894,7 +886,7 @@ void tst_Moc::inputFileNameWithDotsButNoExtension()
 
     QStringList args;
     args << "-c" << "-x" << "c++" << "-I" << ".."
-         << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++11" << "-";
+         << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++1z" << "-";
     proc.start("gcc", args);
     QVERIFY(proc.waitForStarted());
     proc.write(mocOut);
@@ -1174,7 +1166,7 @@ void tst_Moc::ignoreOptionClashes()
     QStringList gccArgs;
     gccArgs << "-c" << "-x" << "c++" << "-I" << ".."
          << "-I" << qtIncludePath << "-I" << includeDir << "-o" << "/dev/null"
-         << "-fPIC" << "-std=c++11" <<  "-";
+         << "-fPIC" << "-std=c++1z" <<  "-";
     proc.start("gcc", gccArgs);
     QVERIFY(proc.waitForStarted());
     proc.write(mocOut);
@@ -1593,21 +1585,6 @@ void tst_Moc::qprivateproperties()
 
 }
 
-#include "task189996.h"
-
-void InlineSlotsWithThrowDeclaration::c() throw() {}
-
-void tst_Moc::inlineSlotsWithThrowDeclaration()
-{
-    InlineSlotsWithThrowDeclaration tst;
-    const QMetaObject *mobj = tst.metaObject();
-    QVERIFY(mobj->indexOfSlot("a()") != -1);
-    QVERIFY(mobj->indexOfSlot("b()") != -1);
-    QVERIFY(mobj->indexOfSlot("c()") != -1);
-    QVERIFY(mobj->indexOfSlot("d()") != -1);
-    QVERIFY(mobj->indexOfSlot("e()") != -1);
-}
-
 void tst_Moc::warnOnPropertyWithoutREAD()
 {
 #ifdef MOC_CROSS_COMPILED
@@ -1869,7 +1846,7 @@ void tst_Moc::notifyError()
 
     QStringList args;
     args << "-c" << "-x" << "c++" << "-I" << "."
-         << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++11" << "-";
+         << "-I" << qtIncludePath << "-o" << "/dev/null" << "-fPIC" << "-std=c++1z" << "-";
     proc.start("gcc", args);
     QVERIFY(proc.waitForStarted());
     proc.write(mocOut);
diff --git a/qtbase/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/qtbase/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 29158faf95..5bea5d791f 100644
--- a/qtbase/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/qtbase/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -47,6 +47,7 @@
 #include <QStringListModel>
 #include <QStyledItemDelegate>
 #include <QTableWidget>
+#include <QTimer>
 #include <QTreeWidget>
 #include <QTest>
 #include <QVBoxLayout>
@@ -152,6 +153,7 @@ private slots:
     void dragSelectAfterNewPress();
     void dragWithSecondClick_data();
     void dragWithSecondClick();
+    void clickAfterDoubleClick();
 private:
     static QAbstractItemView *viewFromString(const QByteArray &viewType, QWidget *parent = nullptr)
     {
@@ -2606,5 +2608,41 @@ void tst_QAbstractItemView::dragWithSecondClick()
     QTest::mouseRelease(view->viewport(), Qt::LeftButton, Qt::NoModifier, dragTo);
 }
 
+void tst_QAbstractItemView::clickAfterDoubleClick()
+{
+    QTableWidget view(5, 5);
+    view.horizontalHeader()->hide();
+    view.verticalHeader()->hide();
+    view.setEditTriggers(QAbstractItemView::NoEditTriggers);
+    view.show();
+    QVERIFY(QTest::qWaitForWindowExposed(&view));
+    const QModelIndex index = view.model()->index(1, 1);
+    QVERIFY(index.isValid());
+    const QPoint clickPoint = view.visualRect(index).center();
+
+    // must use the QWindow overloads so that modality is respected
+    QWindow *window = view.window()->windowHandle();
+    int clickCount = 0;
+
+    connect(&view, &QAbstractItemView::doubleClicked, [&]{
+        QDialog dialog(&view);
+        dialog.setModal(true);
+        QTimer::singleShot(0, [&]{ dialog.close(); });
+        dialog.exec();
+    });
+    connect(&view, &QAbstractItemView::clicked, [&]{
+        ++clickCount;
+    });
+
+    QTest::mouseClick(window, Qt::LeftButton, {}, clickPoint);
+    QCOMPARE(clickCount, 1);
+    // generates a click followed by a double click; double click opens
+    // dialog that eats second release
+    QTest::mouseDClick(window, Qt::LeftButton, {}, clickPoint);
+    QCOMPARE(clickCount, 2);
+    QTest::mouseClick(window, Qt::LeftButton, {}, clickPoint);
+    QCOMPARE(clickCount, 3);
+}
+
 QTEST_MAIN(tst_QAbstractItemView)
 #include "tst_qabstractitemview.moc"
diff --git a/qtbase/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/qtbase/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
index c355ee9665..88c09de8e0 100644
--- a/qtbase/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
+++ b/qtbase/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
@@ -251,6 +251,7 @@ private slots:
     void testResetCachedSizeHint();
     void statusTips();
     void testRemovingColumnsViaLayoutChanged();
+    void testModelMovingColumns();
 
 protected:
     void setupTestData(bool use_reset_model = false);
@@ -360,6 +361,12 @@ public:
         endRemoveColumns();
     }
 
+    void moveColumn(int from, int to)
+    {
+        beginMoveColumns(QModelIndex(), from, from, QModelIndex(), to);
+        endMoveColumns();
+    }
+
     void cleanup()
     {
         emit layoutAboutToBeChanged();
@@ -3627,5 +3634,18 @@ void tst_QHeaderView::testRemovingColumnsViaLayoutChanged()
     // The main point of this test is that the section-size restoring code didn't go out of bounds.
 }
 
+void tst_QHeaderView::testModelMovingColumns()
+{
+    QtTestModel model(10, 10);
+    QHeaderView hv(Qt::Horizontal);
+    hv.setModel(&model);
+    hv.resizeSections(QHeaderView::ResizeToContents);
+    hv.show();
+
+    QPersistentModelIndex index3 = model.index(0, 3);
+    model.moveColumn(3, 1);
+    QCOMPARE(index3.column(), 1);
+}
+
 QTEST_MAIN(tst_QHeaderView)
 #include "tst_qheaderview.moc"
diff --git a/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
index 761357b252..06bb706074 100644
--- a/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
+++ b/qtbase/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
@@ -397,6 +397,7 @@ private slots:
     void checkHeaderMinSize();
 
     void resizeToContents();
+    void resizeToContentsSpans();
 
     void tabFocus();
     void bigModel();
@@ -3721,6 +3722,70 @@ void tst_QTableView::resizeToContents()
 
 }
 
+
+class SpanModel : public QAbstractTableModel
+{
+public:
+    SpanModel(bool sectionsMoved)
+        : _sectionsMoved(sectionsMoved)
+    {}
+    int columnCount(const QModelIndex & = {}) const override { return 2; }
+    int rowCount(const QModelIndex & = {}) const override { return 1; }
+    QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override
+    {
+        if (role != Qt::DisplayRole)
+            return QVariant();
+        const int col = _sectionsMoved ? 1 - idx.column() : idx.column();
+        if (col == 0)
+            return "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
+        return QVariant();
+    }
+private:
+    bool _sectionsMoved;
+};
+
+
+void tst_QTableView::resizeToContentsSpans()
+{
+    SpanModel model1(false);
+    SpanModel model2(true);
+    QTableView view1, view2, view3;
+    view1.setModel(&model1);
+    view2.setModel(&model2);
+    view2.horizontalHeader()->moveSection(0, 1);
+    view3.setModel(&model1);
+
+    view1.setSpan(0, 0, 1, 2);
+    view2.setSpan(0, 1, 1, 2);
+    view1.show();
+    view2.show();
+    view3.show();
+    QVERIFY(QTest::qWaitForWindowExposed(&view1));
+    QVERIFY(QTest::qWaitForWindowExposed(&view2));
+    QVERIFY(QTest::qWaitForWindowExposed(&view3));
+    view1.setColumnWidth(0, 100);
+    view1.setColumnWidth(1, 100);
+    view2.setColumnWidth(0, 100);
+    view2.setColumnWidth(1, 100);
+    view3.setColumnWidth(0, 200);
+
+    view1.resizeRowToContents(0);
+    view2.resizeRowToContents(0);
+    view3.resizeRowToContents(0);
+    QCOMPARE(view1.rowHeight(0), view3.rowHeight(0));
+    QCOMPARE(view2.rowHeight(0), view3.rowHeight(0));
+
+    view3.resizeColumnToContents(0);
+    view3.resizeRowToContents(0);
+    // height should be only 1 text line for easy testing
+    view1.setRowHeight(0, view3.verticalHeader()->sectionSize(0));
+    view2.setRowHeight(0, view3.verticalHeader()->sectionSize(0));
+    view1.resizeColumnToContents(0);
+    view2.resizeColumnToContents(1);
+    QCOMPARE(view1.columnWidth(0), view3.columnWidth(0) - view1.columnWidth(1));
+    QCOMPARE(view2.columnWidth(0), view3.columnWidth(0) - view2.columnWidth(1));
+}
+
 QT_BEGIN_NAMESPACE
 extern bool Q_WIDGETS_EXPORT qt_tab_all_widgets(); // qapplication.cpp
 QT_END_NAMESPACE
diff --git a/qtbase/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/qtbase/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index a3b8ef78d8..4955cebd5d 100644
--- a/qtbase/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/qtbase/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -1498,7 +1498,7 @@ void tst_QApplication::desktopSettingsAware()
     environment += QLatin1String("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM=1");
     testProcess.setEnvironment(environment);
 #endif
-    testProcess.start("desktopsettingsaware_helper");
+    testProcess.start("./desktopsettingsaware_helper");
     QVERIFY2(testProcess.waitForStarted(),
              qPrintable(QString::fromLatin1("Cannot start 'desktopsettingsaware_helper': %1").arg(testProcess.errorString())));
     QVERIFY(testProcess.waitForFinished(10000));
@@ -2452,7 +2452,7 @@ void tst_QApplication::qtbug_12673()
 #if QT_CONFIG(process)
     QProcess testProcess;
     QStringList arguments;
-    testProcess.start("modal_helper", arguments);
+    testProcess.start("./modal_helper", arguments);
     QVERIFY2(testProcess.waitForStarted(),
              qPrintable(QString::fromLatin1("Cannot start 'modal_helper': %1").arg(testProcess.errorString())));
     QVERIFY(testProcess.waitForFinished(20000));
diff --git a/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp b/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
index eb108a40de..dca5528c1b 100644
--- a/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
+++ b/qtbase/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
@@ -41,6 +41,7 @@
 
 #include <private/qguiapplication_p.h>
 #include <qpa/qplatformintegration.h>
+#include <qpa/qplatformtheme.h>
 
 class tst_QAbstractButton : public QObject
 {
@@ -76,6 +77,8 @@ private slots:
     void keyNavigation();
 #endif
 
+    void buttonPressKeys();
+
 protected slots:
     void onClicked();
     void onToggled( bool on );
@@ -269,7 +272,13 @@ void tst_QAbstractButton::setAutoRepeat()
         QCOMPARE(press_count, click_count);
         QVERIFY(click_count > 1);
         break;
-    case 4:
+    case 4: {
+        const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                             ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                             .value<QList<Qt::Key>>();
+        if (buttonPressKeys.contains(Qt::Key_Enter)) {
+            QSKIP("platform theme has Key_Enter in ButtonPressKeys");
+        }
         // check that pressing ENTER has no effect when autorepeat is false
         testWidget->setDown( false );
         testWidget->setAutoRepeat( false );
@@ -286,7 +295,14 @@ void tst_QAbstractButton::setAutoRepeat()
 
         QVERIFY( click_count == 0 );
         break;
-    case 5:
+    }
+    case 5: {
+        const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                             ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                             .value<QList<Qt::Key>>();
+        if (buttonPressKeys.contains(Qt::Key_Enter)) {
+            QSKIP("platform theme has Key_Enter in ButtonPressKeys");
+        }
         // check that pressing ENTER has no effect when autorepeat is true
         testWidget->setDown( false );
         testWidget->setAutoRepeat( true );
@@ -304,6 +320,7 @@ void tst_QAbstractButton::setAutoRepeat()
 
         QVERIFY( click_count == 0 );
         break;
+    }
     case 6:
         // verify autorepeat is off by default.
         MyButton tmp( 0);
@@ -651,5 +668,16 @@ void tst_QAbstractButton::keyNavigation()
 }
 #endif
 
+void tst_QAbstractButton::buttonPressKeys()
+{
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    for (int i = 0; i < buttonPressKeys.length(); ++i) {
+        QTest::keyClick(testWidget, buttonPressKeys[i]);
+        QCOMPARE(click_count, i + 1);
+    }
+}
+
 QTEST_MAIN(tst_QAbstractButton)
 #include "tst_qabstractbutton.moc"
diff --git a/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index 32437050f5..46b5af6d63 100644
--- a/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/qtbase/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -168,6 +168,7 @@ private slots:
     void checkMenuItemPosWhenStyleSheetIsSet();
     void checkEmbeddedLineEditWhenStyleSheetIsSet();
     void propagateStyleChanges();
+    void buttonPressKeys();
 
 private:
     PlatformInputContext m_platformInputContext;
@@ -1682,6 +1683,16 @@ void tst_QComboBox::setModel()
     QCOMPARE(box.rootModelIndex(), rootModelIndex);
     box.setModel(box.model());
     QCOMPARE(box.rootModelIndex(), rootModelIndex);
+
+    // check that setting the same model as the completer's doesn't crash
+    QCompleter *completer = new QCompleter(&box);
+    box.setEditable(true);
+    box.setCompleter(completer);
+    auto *listModel = new QStringListModel({ "one", "two" }, completer);
+    completer->setModel(listModel);
+    QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted
+    box.setModel(listModel);
+    QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted
 }
 
 void tst_QComboBox::setCustomModelAndView()
@@ -3632,5 +3643,24 @@ void tst_QComboBox::propagateStyleChanges()
     QVERIFY(frameStyle.inquired);
 }
 
+void tst_QComboBox::buttonPressKeys()
+{
+    QComboBox comboBox;
+    comboBox.setEditable(false);
+    comboBox.addItem(QString::number(1));
+    comboBox.addItem(QString::number(2));
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    for (int i = 0; i < buttonPressKeys.length(); ++i) {
+        QTest::keyClick(&comboBox, buttonPressKeys[i]);
+        // On some platforms, a window will not be immediately visible,
+        // but take some event-loop iterations to complete.
+        // Using QTRY_VERIFY to deal with that.
+        QTRY_VERIFY(comboBox.view()->isVisible());
+        comboBox.hidePopup();
+    }
+}
+
 QTEST_MAIN(tst_QComboBox)
 #include "tst_qcombobox.moc"
diff --git a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro
index be3cfcd104..c228fdfcca 100644
--- a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro
+++ b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/qcommandlinkbutton.pro
@@ -1,6 +1,6 @@
 CONFIG += testcase
 TARGET = tst_qcommandlinkbutton
-QT += widgets testlib
+QT += widgets testlib gui-private
 SOURCES  += tst_qcommandlinkbutton.cpp
 
 
diff --git a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
index 0044d33c66..4cf06296e4 100644
--- a/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
+++ b/qtbase/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
@@ -40,6 +40,9 @@
 #include <QGridLayout>
 #include <QPainter>
 
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
 class tst_QCommandLinkButton : public QObject
 {
     Q_OBJECT
@@ -223,6 +226,13 @@ void tst_QCommandLinkButton::setAutoRepeat()
     // check that pressing ENTER has no effect
     resetCounters();
     testWidget->setDown( false );
+    // Skip after reset if ButtonPressKeys has Key_Enter
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    if (buttonPressKeys.contains(Qt::Key_Enter)) {
+        return;
+    }
     testWidget->setAutoRepeat( false );
     QTest::keyPress( testWidget, Qt::Key_Enter );
 
@@ -255,6 +265,14 @@ void tst_QCommandLinkButton::pressed()
     QCOMPARE( press_count, (uint)1 );
     QCOMPARE( release_count, (uint)1 );
 
+    // Skip if ButtonPressKeys has Key_Enter
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    if (buttonPressKeys.contains(Qt::Key_Enter)) {
+        return;
+    }
+
     QTest::keyPress( testWidget,Qt::Key_Enter );
     QCOMPARE( press_count, (uint)1 );
     QCOMPARE( release_count, (uint)1 );
diff --git a/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro b/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro
index 4a5e76ff65..a235fa1fac 100644
--- a/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro
+++ b/qtbase/tests/auto/widgets/widgets/qgroupbox/qgroupbox.pro
@@ -1,6 +1,6 @@
 CONFIG += testcase
 TARGET = tst_qgroupbox
-QT += widgets testlib
+QT += widgets testlib gui-private
 SOURCES  += tst_qgroupbox.cpp
 
 
diff --git a/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp b/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp
index 4fb5d262ca..d8d7562b73 100644
--- a/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp
+++ b/qtbase/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp
@@ -35,6 +35,9 @@
 #include <QRadioButton>
 #include <QDialog>
 
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
 #include "qgroupbox.h"
 
 class tst_QGroupBox : public QObject
@@ -69,6 +72,7 @@ private slots:
     void propagateFocus();
     void task_QTBUG_19170_ignoreMouseReleaseEvent();
     void task_QTBUG_15519_propagateMouseEvents();
+    void buttonPressKeys();
 
 private:
     bool checked;
@@ -610,6 +614,20 @@ void tst_QGroupBox::task_QTBUG_15519_propagateMouseEvents()
     QCOMPARE(parent.mouseMoved, true);
 }
 
+void tst_QGroupBox::buttonPressKeys()
+{
+    QGroupBox groupBox;
+    groupBox.setCheckable(true);
+    QSignalSpy clickedSpy(&groupBox, &QGroupBox::clicked);
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    for (int i = 0; i < buttonPressKeys.length(); ++i) {
+        QTest::keyClick(&groupBox, buttonPressKeys[i]);
+        QCOMPARE(clickedSpy.length(), i + 1);
+    }
+}
+
 void tst_QGroupBox::sendMouseMoveEvent(QWidget *widget, const QPoint &localPos)
 {
     // Send a MouseMove event without actually moving the pointer
diff --git a/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro b/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro
index 353ad06ca2..e55f6148f2 100644
--- a/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro
+++ b/qtbase/tests/auto/widgets/widgets/qpushbutton/qpushbutton.pro
@@ -1,6 +1,6 @@
 CONFIG += testcase
 TARGET = tst_qpushbutton
-QT += widgets testlib
+QT += widgets testlib gui-private
 SOURCES  += tst_qpushbutton.cpp
 
 
diff --git a/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp b/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
index e818514a79..4043e9326a 100644
--- a/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
+++ b/qtbase/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
@@ -41,6 +41,9 @@
 #include <QStyleFactory>
 #include <QTabWidget>
 
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
 class tst_QPushButton : public QObject
 {
 Q_OBJECT
@@ -212,6 +215,13 @@ void tst_QPushButton::autoRepeat()
     // check that pressing ENTER has no effect
     resetCounters();
     testWidget->setDown( false );
+    // Skip after reset if ButtonPressKeys has Key_Enter
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    if (buttonPressKeys.contains(Qt::Key_Enter)) {
+        return;
+    }
     testWidget->setAutoRepeat( false );
     QTest::keyPress( testWidget, Qt::Key_Enter );
 
@@ -247,6 +257,14 @@ void tst_QPushButton::pressed()
     QCOMPARE( press_count, (uint)1 );
     QCOMPARE( release_count, (uint)1 );
 
+    // Skip if ButtonPressKeys has Key_Enter
+    const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+                                         ->themeHint(QPlatformTheme::ButtonPressKeys)
+                                         .value<QList<Qt::Key>>();
+    if (buttonPressKeys.contains(Qt::Key_Enter)) {
+        return;
+    }
+
     QTest::keyPress( testWidget,Qt::Key_Enter );
     QCOMPARE( press_count, (uint)1 );
     QCOMPARE( release_count, (uint)1 );
diff --git a/qtbase/tests/manual/rhi/cubemap_render/buildshader.bat b/qtbase/tests/manual/rhi/cubemap_render/buildshader.bat
old mode 100755
new mode 100644
Submodule qtconnectivity 47c424c7..6796953f:
diff --git a/qtconnectivity/src/bluetooth/bluez/hcimanager.cpp b/qtconnectivity/src/bluetooth/bluez/hcimanager.cpp
index e2635fae..a8b8e3b9 100644
--- a/qtconnectivity/src/bluetooth/bluez/hcimanager.cpp
+++ b/qtconnectivity/src/bluetooth/bluez/hcimanager.cpp
@@ -563,9 +563,11 @@ void HciManager::handleHciAclPacket(const quint8 *data, int size)
 
 void HciManager::handleLeMetaEvent(const quint8 *data)
 {
-    // Spec v4.2, Vol 2, part E, 7.7.65ff
+    // Spec v5.3, Vol 4, part E, 7.7.65.*
     switch (*data) {
-    case 0x1: {
+    case 0x1: // HCI_LE_Connection_Complete
+    case 0xA: // HCI_LE_Enhanced_Connection_Complete
+    {
         const quint16 handle = bt_get_le16(data + 2);
         emit connectionComplete(handle);
         break;
diff --git a/qtconnectivity/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp b/qtconnectivity/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
index 6a93143b..4a18cfc7 100644
--- a/qtconnectivity/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
+++ b/qtconnectivity/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
@@ -320,7 +320,10 @@ void QBluetoothServiceDiscoveryAgentPrivate::_q_finishSdpScan(QBluetoothServiceD
             for (const QBluetoothUuid &id : serviceClassUuids) {
                 if (id.minimumSize() == 16) {
                     serviceInfo.setServiceUuid(id);
-                    serviceInfo.setServiceName(QBluetoothServiceDiscoveryAgent::tr("Custom Service"));
+                    if (serviceInfo.serviceName().isEmpty()) {
+                        serviceInfo.setServiceName(
+                                    QBluetoothServiceDiscoveryAgent::tr("Custom Service"));
+                    }
                     QBluetoothServiceInfo::Sequence modSeq =
                             serviceInfo.attribute(QBluetoothServiceInfo::ServiceClassIds).value<QBluetoothServiceInfo::Sequence>();
                     modSeq.removeOne(QVariant::fromValue(id));
@@ -334,8 +337,10 @@ void QBluetoothServiceDiscoveryAgentPrivate::_q_finishSdpScan(QBluetoothServiceD
                 qCDebug(QT_BT_BLUEZ) << "Discovered services" << discoveredDevices.at(0).address().toString()
                                      << serviceInfo.serviceName() << serviceInfo.serviceUuid()
                                      << ">>>" << serviceInfo.serviceClassUuids();
-
-                emit q->serviceDiscovered(serviceInfo);
+                // Use queued connection to allow us finish the service looping; the application
+                // might call stop() when it has detected the service-of-interest.
+                QMetaObject::invokeMethod(q, "serviceDiscovered", Qt::QueuedConnection,
+                                          Q_ARG(QBluetoothServiceInfo, serviceInfo));
             }
         }
     }
diff --git a/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp b/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp
index e4d85447..aadd4755 100644
--- a/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp
+++ b/qtconnectivity/src/bluetooth/qbluetoothsocket.cpp
@@ -593,7 +593,7 @@ void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)
 bool QBluetoothSocket::canReadLine() const
 {
     Q_D(const QBluetoothSocketBase);
-    return d->canReadLine();
+    return d->canReadLine() || QIODevice::canReadLine();
 }
 
 /*!
diff --git a/qtconnectivity/src/bluetooth/qbluetoothsocket_bluezdbus.cpp b/qtconnectivity/src/bluetooth/qbluetoothsocket_bluezdbus.cpp
index 084aa958..d6aa17a7 100644
--- a/qtconnectivity/src/bluetooth/qbluetoothsocket_bluezdbus.cpp
+++ b/qtconnectivity/src/bluetooth/qbluetoothsocket_bluezdbus.cpp
@@ -284,6 +284,10 @@ void QBluetoothSocketPrivateBluezDBus::connectToService(
         return;
     }
 
+    if (service.socketProtocol() != QBluetoothServiceInfo::Protocol::UnknownProtocol)
+        socketType = service.socketProtocol();
+    qCDebug(QT_BT_BLUEZ) << "Socket protocol used:" << socketType;
+
     connectToService(service.device().address(), targetService, openMode);
 }
 
diff --git a/qtconnectivity/tests/auto/qbluetoothsocket/tst_qbluetoothsocket.cpp b/qtconnectivity/tests/auto/qbluetoothsocket/tst_qbluetoothsocket.cpp
index 05bc1a0f..a7b5ef1f 100644
--- a/qtconnectivity/tests/auto/qbluetoothsocket/tst_qbluetoothsocket.cpp
+++ b/qtconnectivity/tests/auto/qbluetoothsocket/tst_qbluetoothsocket.cpp
@@ -142,7 +142,7 @@ void tst_QBluetoothSocket::initTestCase()
     qDebug() << "Starting discovery";
 
     sda->setUuidFilter(QBluetoothUuid(QString(TEST_SERVICE_UUID)));
-    sda->start(QBluetoothServiceDiscoveryAgent::MinimalDiscovery);
+    sda->start(QBluetoothServiceDiscoveryAgent::FullDiscovery);
 
     for (int connectTime = MaxConnectTime; !done_discovery && connectTime > 0; connectTime -= 1000)
         QTest::qWait(1000);
Submodule qtdeclarative da0aac10..45d43c04:
diff --git a/qtdeclarative/src/qml/common/qqmljsfixedpoolarray_p.h b/qtdeclarative/src/qml/common/qqmljsfixedpoolarray_p.h
index b65b994d6c..15a8cd6878 100644
--- a/qtdeclarative/src/qml/common/qqmljsfixedpoolarray_p.h
+++ b/qtdeclarative/src/qml/common/qqmljsfixedpoolarray_p.h
@@ -86,7 +86,7 @@ public:
         if (QTypeInfo<T>::isComplex) {
             for (int i = 0; i < count; ++i)
                 new (data + i) T(vector.at(i));
-        } else {
+        } else if (count) {
             memcpy(data, static_cast<const void*>(vector.constData()), count * sizeof(T));
         }
     }
diff --git a/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp b/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp
index 9899c9274e..272b85069f 100644
--- a/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp
+++ b/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp
@@ -1160,8 +1160,7 @@ void Heap::QObjectWrapper::markObjects(Heap::Base *that, QV4::MarkStack *markSta
 void QObjectWrapper::destroyObject(bool lastCall)
 {
     Heap::QObjectWrapper *h = d();
-    if (!h->internalClass)
-        return; // destroyObject already got called
+    Q_ASSERT(h->internalClass);
 
     if (h->object()) {
         QQmlData *ddata = QQmlData::get(h->object(), false);
@@ -1191,7 +1190,7 @@ void QObjectWrapper::destroyObject(bool lastCall)
         }
     }
 
-    h->~Data();
+    h->destroy();
 }
 
 
diff --git a/qtdeclarative/src/qml/memory/qv4mm.cpp b/qtdeclarative/src/qml/memory/qv4mm.cpp
index 06caf04e5a..da149a67c4 100644
--- a/qtdeclarative/src/qml/memory/qv4mm.cpp
+++ b/qtdeclarative/src/qml/memory/qv4mm.cpp
@@ -981,7 +981,7 @@ void MemoryManager::sweep(bool lastSweep, ClassDestroyStatsCallback classCountPt
 
     if (MultiplyWrappedQObjectMap *multiplyWrappedQObjects = engine->m_multiplyWrappedQObjects) {
         for (MultiplyWrappedQObjectMap::Iterator it = multiplyWrappedQObjects->begin(); it != multiplyWrappedQObjects->end();) {
-            if (!it.value().isNullOrUndefined())
+            if (it.value().isNullOrUndefined())
                 it = multiplyWrappedQObjects->erase(it);
             else
                 ++it;
diff --git a/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp b/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp
index 2079a8ed04..a577cb2351 100644
--- a/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp
+++ b/qtdeclarative/src/qmlmodels/qqmldelegatemodel.cpp
@@ -389,6 +389,12 @@ void QQmlDelegateModelPrivate::connectToAbstractItemModel()
                       q,  QQmlDelegateModel, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
     qmlobject_connect(aim, QAbstractItemModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
                       q,  QQmlDelegateModel, SLOT(_q_rowsAboutToBeRemoved(QModelIndex,int,int)));
+    qmlobject_connect(aim, QAbstractItemModel, SIGNAL(columnsInserted(QModelIndex,int,int)),
+                      q, QQmlDelegateModel, SLOT(_q_columnsInserted(QModelIndex,int,int)));
+    qmlobject_connect(aim, QAbstractItemModel, SIGNAL(columnsRemoved(QModelIndex,int,int)),
+                      q, QQmlDelegateModel, SLOT(_q_columnsRemoved(QModelIndex,int,int)));
+    qmlobject_connect(aim, QAbstractItemModel, SIGNAL(columnsMoved(QModelIndex,int,int,QModelIndex,int)),
+                      q, QQmlDelegateModel, SLOT(_q_columnsMoved(QModelIndex,int,int,QModelIndex,int)));
     qmlobject_connect(aim, QAbstractItemModel, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
                       q, QQmlDelegateModel, SLOT(_q_dataChanged(QModelIndex,QModelIndex,QVector<int>)));
     qmlobject_connect(aim, QAbstractItemModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
@@ -413,6 +419,12 @@ void QQmlDelegateModelPrivate::disconnectFromAbstractItemModel()
                         q, SLOT(_q_rowsAboutToBeRemoved(QModelIndex,int,int)));
     QObject::disconnect(aim, SIGNAL(rowsRemoved(QModelIndex,int,int)),
                         q, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
+    QObject::disconnect(aim, SIGNAL(columnsInserted(QModelIndex,int,int)), q,
+                        SLOT(_q_columnsInserted(QModelIndex,int,int)));
+    QObject::disconnect(aim, SIGNAL(columnsRemoved(QModelIndex,int,int)), q,
+                        SLOT(_q_columnsRemoved(QModelIndex,int,int)));
+    QObject::disconnect(aim, SIGNAL(columnsMoved(QModelIndex,int,int,QModelIndex,int)), q,
+                        SLOT(_q_columnsMoved(QModelIndex,int,int,QModelIndex,int)));
     QObject::disconnect(aim, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
                         q, SLOT(_q_dataChanged(QModelIndex,QModelIndex,QVector<int>)));
     QObject::disconnect(aim, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
@@ -1973,6 +1985,38 @@ void QQmlDelegateModel::_q_rowsMoved(
     }
 }
 
+void QQmlDelegateModel::_q_columnsInserted(const QModelIndex &parent, int begin, int end)
+{
+    Q_D(QQmlDelegateModel);
+    Q_UNUSED(end);
+    if (parent == d->m_adaptorModel.rootIndex && begin == 0) {
+        // mark all items as changed
+        _q_itemsChanged(0, d->m_count, QVector<int>());
+    }
+}
+
+void QQmlDelegateModel::_q_columnsRemoved(const QModelIndex &parent, int begin, int end)
+{
+    Q_D(QQmlDelegateModel);
+    Q_UNUSED(end);
+    if (parent == d->m_adaptorModel.rootIndex && begin == 0) {
+        // mark all items as changed
+        _q_itemsChanged(0, d->m_count, QVector<int>());
+    }
+}
+
+void QQmlDelegateModel::_q_columnsMoved(const QModelIndex &parent, int start, int end,
+                                        const QModelIndex &destination, int column)
+{
+    Q_D(QQmlDelegateModel);
+    Q_UNUSED(end);
+    if ((parent == d->m_adaptorModel.rootIndex && start == 0)
+        || (destination == d->m_adaptorModel.rootIndex && column == 0)) {
+        // mark all items as changed
+        _q_itemsChanged(0, d->m_count, QVector<int>());
+    }
+}
+
 void QQmlDelegateModel::_q_dataChanged(const QModelIndex &begin, const QModelIndex &end, const QVector<int> &roles)
 {
     Q_D(QQmlDelegateModel);
diff --git a/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h b/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h
index 8aab4badca..d140bfbaaf 100644
--- a/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h
+++ b/qtdeclarative/src/qmlmodels/qqmldelegatemodel_p.h
@@ -152,6 +152,9 @@ private Q_SLOTS:
     void _q_itemsMoved(int from, int to, int count);
     void _q_modelReset();
     void _q_rowsInserted(const QModelIndex &,int,int);
+    void _q_columnsInserted(const QModelIndex &, int, int);
+    void _q_columnsRemoved(const QModelIndex &, int, int);
+    void _q_columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int);
     void _q_rowsAboutToBeRemoved(const QModelIndex &parent, int begin, int end);
     void _q_rowsRemoved(const QModelIndex &,int,int);
     void _q_rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int);
diff --git a/qtdeclarative/src/quick/items/qquickflickable.cpp b/qtdeclarative/src/quick/items/qquickflickable.cpp
index e12e85db64..2fa3b7142c 100644
--- a/qtdeclarative/src/quick/items/qquickflickable.cpp
+++ b/qtdeclarative/src/quick/items/qquickflickable.cpp
@@ -62,6 +62,8 @@
 QT_BEGIN_NAMESPACE
 
 Q_DECLARE_LOGGING_CATEGORY(lcHandlerParent)
+Q_LOGGING_CATEGORY(lcWheel, "qt.quick.flickable.wheel")
+Q_LOGGING_CATEGORY(lcVel, "qt.quick.flickable.velocity")
 
 // FlickThreshold determines how far the "mouse" must have moved
 // before we perform a flick.
@@ -263,7 +265,8 @@ QQuickFlickablePrivate::QQuickFlickablePrivate()
     , deceleration(QML_FLICK_DEFAULTDECELERATION)
     , maxVelocity(QML_FLICK_DEFAULTMAXVELOCITY), reportedVelocitySmoothing(100)
     , delayedPressEvent(nullptr), pressDelay(0), fixupDuration(400)
-    , flickBoost(1.0), fixupMode(Normal), vTime(0), visibleArea(nullptr)
+    , flickBoost(1.0), initialWheelFlickDistance(qApp->styleHints()->wheelScrollLines() * 24)
+    , fixupMode(Normal), vTime(0), visibleArea(nullptr)
     , flickableDirection(QQuickFlickable::AutoFlickDirection)
     , boundsBehavior(QQuickFlickable::DragAndOvershootBounds)
     , boundsMovement(QQuickFlickable::FollowBoundsBehavior)
@@ -531,10 +534,14 @@ void QQuickFlickablePrivate::updateBeginningEnd()
     if (atBeginning != vData.atBeginning) {
         vData.atBeginning = atBeginning;
         atYBeginningChange = true;
+        if (!vData.moving && atBeginning)
+            vData.smoothVelocity.setValue(0);
     }
     if (atEnd != vData.atEnd) {
         vData.atEnd = atEnd;
         atYEndChange = true;
+        if (!vData.moving && atEnd)
+            vData.smoothVelocity.setValue(0);
     }
 
     // Horizontal
@@ -547,10 +554,14 @@ void QQuickFlickablePrivate::updateBeginningEnd()
     if (atBeginning != hData.atBeginning) {
         hData.atBeginning = atBeginning;
         atXBeginningChange = true;
+        if (!hData.moving && atBeginning)
+            hData.smoothVelocity.setValue(0);
     }
     if (atEnd != hData.atEnd) {
         hData.atEnd = atEnd;
         atXEndChange = true;
+        if (!hData.moving && atEnd)
+            hData.smoothVelocity.setValue(0);
     }
 
     if (vData.extentsChanged) {
@@ -1489,6 +1500,7 @@ void QQuickFlickable::wheelEvent(QWheelEvent *event)
         d->hData.velocity = 0;
         d->timer.start();
         d->maybeBeginDrag(currentTimestamp, event->position());
+        d->lastPosTime = -1;
         break;
     case Qt::NoScrollPhase: // default phase with an ordinary wheel mouse
     case Qt::ScrollUpdate:
@@ -1515,20 +1527,34 @@ void QQuickFlickable::wheelEvent(QWheelEvent *event)
         return;
     }
 
+    qreal elapsed = qreal(currentTimestamp - d->lastPosTime) / qreal(1000);
+    if (elapsed <= 0) {
+        d->lastPosTime = currentTimestamp;
+        qCDebug(lcWheel) << "insufficient elapsed time: can't calculate velocity" << elapsed;
+        return;
+    }
+
     if (event->source() == Qt::MouseEventNotSynthesized || event->pixelDelta().isNull()) {
-        // physical mouse wheel, so use angleDelta
+        // no pixel delta (physical mouse wheel, or "dumb" touchpad), so use angleDelta
         int xDelta = event->angleDelta().x();
         int yDelta = event->angleDelta().y();
+        // For a single "clicky" wheel event (angleDelta +/- 120),
+        // we want flick() to end up moving a distance proportional to QStyleHints::wheelScrollLines().
+        // The decel algo from there is
+        // qreal dist = v2 / (accel * 2.0);
+        // i.e. initialWheelFlickDistance = (120 / dt)^2 / (deceleration * 2)
+        // now solve for dt:
+        // dt = 120 / sqrt(deceleration * 2 * initialWheelFlickDistance)
+        if (!isMoving())
+            elapsed = 120 / qSqrt(d->deceleration * 2 * d->initialWheelFlickDistance);
         if (yflick() && yDelta != 0) {
-            bool valid = false;
-            if (yDelta > 0 && contentY() > -minYExtent()) {
-                d->vData.velocity = qMax(yDelta*2 - d->vData.smoothVelocity.value(), qreal(d->maxVelocity/4));
-                valid = true;
-            } else if (yDelta < 0 && contentY() < -maxYExtent()) {
-                d->vData.velocity = qMin(yDelta*2 - d->vData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
-                valid = true;
-            }
-            if (valid) {
+            qreal instVelocity = yDelta / elapsed;
+            // if the direction has changed, start over with filtering, to allow instant movement in the opposite direction
+            if ((instVelocity < 0 && d->vData.velocity > 0) || (instVelocity > 0 && d->vData.velocity < 0))
+                d->vData.velocityBuffer.clear();
+            d->vData.addVelocitySample(instVelocity, d->maxVelocity);
+            d->vData.updateVelocity();
+            if ((yDelta > 0 && contentY() > -minYExtent()) || (yDelta < 0 && contentY() < -maxYExtent())) {
                 d->flickY(d->vData.velocity);
                 d->flickingStarted(false, true);
                 if (d->vData.flicking) {
@@ -1539,15 +1565,13 @@ void QQuickFlickable::wheelEvent(QWheelEvent *event)
             }
         }
         if (xflick() && xDelta != 0) {
-            bool valid = false;
-            if (xDelta > 0 && contentX() > -minXExtent()) {
-                d->hData.velocity = qMax(xDelta*2 - d->hData.smoothVelocity.value(), qreal(d->maxVelocity/4));
-                valid = true;
-            } else if (xDelta < 0 && contentX() < -maxXExtent()) {
-                d->hData.velocity = qMin(xDelta*2 - d->hData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
-                valid = true;
-            }
-            if (valid) {
+            qreal instVelocity = xDelta / elapsed;
+            // if the direction has changed, start over with filtering, to allow instant movement in the opposite direction
+            if ((instVelocity < 0 && d->hData.velocity > 0) || (instVelocity > 0 && d->hData.velocity < 0))
+                d->hData.velocityBuffer.clear();
+            d->hData.addVelocitySample(instVelocity, d->maxVelocity);
+            d->hData.updateVelocity();
+            if ((xDelta > 0 && contentX() > -minXExtent()) || (xDelta < 0 && contentX() < -maxXExtent())) {
                 d->flickX(d->hData.velocity);
                 d->flickingStarted(true, false);
                 if (d->hData.flicking) {
@@ -1562,18 +1586,13 @@ void QQuickFlickable::wheelEvent(QWheelEvent *event)
         int xDelta = event->pixelDelta().x();
         int yDelta = event->pixelDelta().y();
 
-        qreal elapsed = qreal(currentTimestamp - d->lastPosTime) / 1000.;
-        if (elapsed <= 0) {
-            d->lastPosTime = currentTimestamp;
-            return;
-        }
         QVector2D velocity(xDelta / elapsed, yDelta / elapsed);
-        d->lastPosTime = currentTimestamp;
         d->accumulatedWheelPixelDelta += QVector2D(event->pixelDelta());
         d->drag(currentTimestamp, event->type(), event->position(), d->accumulatedWheelPixelDelta,
                 true, !d->scrollingPhase, true, velocity);
         event->accept();
     }
+    d->lastPosTime = currentTimestamp;
 
     if (!event->isAccepted())
         QQuickItem::wheelEvent(event);
@@ -1744,6 +1763,10 @@ void QQuickFlickable::componentComplete()
         setContentX(-minXExtent());
     if (!d->vData.explicitValue && d->vData.startMargin != 0.)
         setContentY(-minYExtent());
+    if (lcWheel().isDebugEnabled() || lcVel().isDebugEnabled()) {
+        d->timeline.setObjectName(QLatin1String("timeline for Flickable ") + objectName());
+        d->velocityTimeline.setObjectName(QLatin1String("velocity timeline for Flickable ") + objectName());
+    }
 }
 
 void QQuickFlickable::viewportMoved(Qt::Orientations orient)
@@ -2504,9 +2527,23 @@ void QQuickFlickable::setMaximumFlickVelocity(qreal v)
 
 /*!
     \qmlproperty real QtQuick::Flickable::flickDeceleration
-    This property holds the rate at which a flick will decelerate.
-
-    The default value is platform dependent.
+    This property holds the rate at which a flick will decelerate:
+    the higher the number, the faster it slows down when the user stops
+    flicking via touch, touchpad or mouse wheel. For example 0.0001 is nearly
+    "frictionless", and 10000 feels quite "sticky".
+
+    The default value is platform dependent. Values of zero or less are not allowed.
+
+    \note For touchpad flicking, some platforms drive Flickable directly by
+    sending QWheelEvents with QWheelEvent::phase() being \c Qt::ScrollMomentum,
+    after the user has released all fingers from the touchpad. In that case,
+    the operating system is controlling the deceleration, and this property has
+    no effect.
+
+    \note For mouse wheel scrolling, and for gesture scrolling on touchpads
+    that do not have a momentum phase, extremely large values of
+    flickDeceleration can make Flickable very resistant to scrolling,
+    especially if \l maximumFlickVelocity is too small.
 */
 qreal QQuickFlickable::flickDeceleration() const
 {
@@ -2519,7 +2556,7 @@ void QQuickFlickable::setFlickDeceleration(qreal deceleration)
     Q_D(QQuickFlickable);
     if (deceleration == d->deceleration)
         return;
-    d->deceleration = deceleration;
+    d->deceleration = qMax(0.001, deceleration);
     emit flickDecelerationChanged();
 }
 
diff --git a/qtdeclarative/src/quick/items/qquickflickable_p_p.h b/qtdeclarative/src/quick/items/qquickflickable_p_p.h
index 414c9c33d6..6163613493 100644
--- a/qtdeclarative/src/quick/items/qquickflickable_p_p.h
+++ b/qtdeclarative/src/quick/items/qquickflickable_p_p.h
@@ -241,6 +241,7 @@ public:
     int pressDelay;
     int fixupDuration;
     qreal flickBoost;
+    qreal initialWheelFlickDistance;
 
     enum FixupMode { Normal, Immediate, ExtentChanged };
     FixupMode fixupMode;
diff --git a/qtdeclarative/src/quick/items/qquickitem.cpp b/qtdeclarative/src/quick/items/qquickitem.cpp
index 75f1457816..9de244ed9e 100644
--- a/qtdeclarative/src/quick/items/qquickitem.cpp
+++ b/qtdeclarative/src/quick/items/qquickitem.cpp
@@ -59,6 +59,7 @@
 #include <QtCore/private/qnumeric_p.h>
 #include <QtGui/qpa/qplatformtheme.h>
 #include <QtCore/qloggingcategory.h>
+#include <QtCore/private/qduplicatetracker_p.h>
 
 #include <private/qqmlglobal_p.h>
 #include <private/qqmlengine_p.h>
@@ -2526,6 +2527,7 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo
     QQuickItem *current = item;
     qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: startItem:" << startItem;
     qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: firstFromItem:" << firstFromItem;
+    QDuplicateTracker<QQuickItem *> cycleDetector;
     do {
         qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: current:" << current;
         qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: from:" << from;
@@ -2592,7 +2594,10 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo
         // traversed all of the chain (by compare the [current] item with [startItem])
         // Since the [startItem] might be promoted to its parent if it is invisible,
         // we still have to check [current] item with original start item
-        if ((current == startItem || current == originalStartItem) && from == firstFromItem) {
+        // We might also run into a cycle before we reach firstFromItem again
+        // but note that we have to ignore current if we are meant to skip it
+        if (((current == startItem || current == originalStartItem) && from == firstFromItem) ||
+                (!skip && cycleDetector.hasSeen(current))) {
             // wrapped around, avoid endless loops
             if (item == contentItem) {
                 qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: looped, return contentItem";
diff --git a/qtdeclarative/src/quick/items/qquickitemview.cpp b/qtdeclarative/src/quick/items/qquickitemview.cpp
index 13e7b87049..f8ad168a17 100644
--- a/qtdeclarative/src/quick/items/qquickitemview.cpp
+++ b/qtdeclarative/src/quick/items/qquickitemview.cpp
@@ -1785,7 +1785,7 @@ void QQuickItemViewPrivate::refill(qreal from, qreal to)
 
     do {
         bufferPause.stop();
-        if (currentChanges.hasPendingChanges() || bufferedChanges.hasPendingChanges()) {
+        if (currentChanges.hasPendingChanges() || bufferedChanges.hasPendingChanges() || currentChanges.active) {
             currentChanges.reset();
             bufferedChanges.reset();
             releaseVisibleItems(reusableFlag);
@@ -2402,8 +2402,6 @@ void QQuickItemView::createdItem(int index, QObject* object)
             d->repositionPackageItemAt(item, index);
         else if (index == d->currentIndex)
             d->updateCurrent(index);
-    } else if (index == d->currentIndex) {
-        d->updateCurrent(index);
     }
 }
 
diff --git a/qtdeclarative/src/quick/items/qquickmousearea_p_p.h b/qtdeclarative/src/quick/items/qquickmousearea_p_p.h
index fba383e268..0d63618622 100644
--- a/qtdeclarative/src/quick/items/qquickmousearea_p_p.h
+++ b/qtdeclarative/src/quick/items/qquickmousearea_p_p.h
@@ -61,7 +61,6 @@ QT_BEGIN_NAMESPACE
 
 class QQuickMouseEvent;
 class QQuickMouseArea;
-class QQuickPointerMask;
 class QQuickMouseAreaPrivate : public QQuickItemPrivate
 {
     Q_DECLARE_PUBLIC(QQuickMouseArea)
@@ -100,7 +99,6 @@ public:
 #if QT_CONFIG(quick_draganddrop)
     QQuickDrag *drag;
 #endif
-    QPointer<QQuickPointerMask> mask;
     QPointF startScene;
     QPointF targetStartPos;
     QPointF lastPos;
diff --git a/qtdeclarative/src/quick/items/qquickshadereffectsource.cpp b/qtdeclarative/src/quick/items/qquickshadereffectsource.cpp
index 4f61d61309..b298ed74da 100644
--- a/qtdeclarative/src/quick/items/qquickshadereffectsource.cpp
+++ b/qtdeclarative/src/quick/items/qquickshadereffectsource.cpp
@@ -344,7 +344,6 @@ void QQuickShaderEffectSource::setSourceItem(QQuickItem *item)
             d->refFromEffectItem(m_hideSource);
             d->addItemChangeListener(this, QQuickItemPrivate::Geometry);
             connect(m_sourceItem, SIGNAL(destroyed(QObject*)), this, SLOT(sourceItemDestroyed(QObject*)));
-            connect(m_sourceItem, SIGNAL(parentChanged(QQuickItem*)), this, SLOT(sourceItemParentChanged(QQuickItem*)));
         } else {
             qWarning("ShaderEffectSource: sourceItem and ShaderEffectSource must both be children of the same window.");
             m_sourceItem = nullptr;
@@ -364,13 +363,6 @@ void QQuickShaderEffectSource::sourceItemDestroyed(QObject *item)
 }
 
 
-void QQuickShaderEffectSource::sourceItemParentChanged(QQuickItem *parent)
-{
-    if (!parent && m_texture)
-        m_texture->setItem(0);
-}
-
-
 /*!
     \qmlproperty rect QtQuick::ShaderEffectSource::sourceRect
 
diff --git a/qtdeclarative/src/quick/items/qquickshadereffectsource_p.h b/qtdeclarative/src/quick/items/qquickshadereffectsource_p.h
index 4deb6c70a3..c0a1ccab78 100644
--- a/qtdeclarative/src/quick/items/qquickshadereffectsource_p.h
+++ b/qtdeclarative/src/quick/items/qquickshadereffectsource_p.h
@@ -173,7 +173,6 @@ Q_SIGNALS:
 private Q_SLOTS:
     void sourceItemDestroyed(QObject *item);
     void invalidateSceneGraph();
-    void sourceItemParentChanged(QQuickItem *parent);
 
 protected:
     void releaseResources() override;
diff --git a/qtdeclarative/src/quick/items/qquicktext.cpp b/qtdeclarative/src/quick/items/qquicktext.cpp
index 6230186933..e823ca1095 100644
--- a/qtdeclarative/src/quick/items/qquicktext.cpp
+++ b/qtdeclarative/src/quick/items/qquicktext.cpp
@@ -2168,7 +2168,7 @@ void QQuickText::resetMaximumLineCount()
     <img src="" align="top,middle,bottom" width="" height=""> - inline images
     <ol type="">, <ul type=""> and <li> - ordered and unordered lists
     <pre></pre> - preformatted
-    &gt; &lt; &amp;
+    &gt; &lt; &amp; &quot; &nbsp; &apos;
     \endcode
 
     \c Text.StyledText parser is strict, requiring tags to be correctly nested.
diff --git a/qtdeclarative/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp b/qtdeclarative/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
index 53b6fe117f..219cdd5966 100644
--- a/qtdeclarative/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
+++ b/qtdeclarative/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
@@ -446,7 +446,7 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
 
         const char *textureRecord = allocatorData;
         for (int i = 0; i < textureCount; ++i, textureRecord += Qtdf::TextureRecordSize) {
-            if (textureRecord + Qtdf::TextureRecordSize > qtdfTableEnd) {
+            if (qtdfTableEnd - textureRecord < Qtdf::TextureRecordSize) {
                 qWarning("qtdf table too small in font '%s'.",
                          qPrintable(font.familyName()));
                 return false;
@@ -462,7 +462,7 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
 
         const char *glyphRecord = textureRecord;
         for (quint32 i = 0; i < glyphCount; ++i, glyphRecord += Qtdf::GlyphRecordSize) {
-            if (glyphRecord + Qtdf::GlyphRecordSize > qtdfTableEnd) {
+            if (qtdfTableEnd - glyphRecord < Qtdf:: GlyphRecordSize) {
                 qWarning("qtdf table too small in font '%s'.",
                          qPrintable(font.familyName()));
                 return false;
@@ -512,8 +512,8 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
 
             int width = texInfo->allocatedArea.width();
             int height = texInfo->allocatedArea.height();
-            qint64 size = width * height;
-            if (reinterpret_cast<const char *>(textureData + size) > qtdfTableEnd) {
+            qint64 size = qint64(width) * height;
+            if (qtdfTableEnd - reinterpret_cast<const char *>(textureData) < size) {
                 qWarning("qtdf table too small in font '%s'.",
                          qPrintable(font.familyName()));
                 return false;
diff --git a/qtdeclarative/src/quick/util/qquickstyledtext.cpp b/qtdeclarative/src/quick/util/qquickstyledtext.cpp
index d531fc9205..a25af90414 100644
--- a/qtdeclarative/src/quick/util/qquickstyledtext.cpp
+++ b/qtdeclarative/src/quick/util/qquickstyledtext.cpp
@@ -564,6 +564,8 @@ void QQuickStyledTextPrivate::parseEntity(const QChar *&ch, const QString &textI
                 textOut += QChar(60);
             else if (entity == QLatin1String("amp"))
                 textOut += QChar(38);
+            else if (entity == QLatin1String("apos"))
+                textOut += QChar(39);
             else if (entity == QLatin1String("quot"))
                 textOut += QChar(34);
             else if (entity == QLatin1String("nbsp"))
diff --git a/qtdeclarative/src/quick/util/qquicktimeline.cpp b/qtdeclarative/src/quick/util/qquicktimeline.cpp
index 7ec7c827eb..abe6eb7261 100644
--- a/qtdeclarative/src/quick/util/qquicktimeline.cpp
+++ b/qtdeclarative/src/quick/util/qquicktimeline.cpp
@@ -53,6 +53,8 @@
 
 QT_BEGIN_NAMESPACE
 
+Q_LOGGING_CATEGORY(lcTl, "qt.quick.timeline")
+
 struct Update {
     Update(QQuickTimeLineValue *_g, qreal _v)
         : g(_g), v(_v) {}
@@ -513,6 +515,7 @@ void QQuickTimeLine::reset(QQuickTimeLineValue &timeLineValue)
         qWarning() << "QQuickTimeLine: Cannot reset a QQuickTimeLineValue owned by another timeline.";
         return;
     }
+    qCDebug(lcTl) << static_cast<QObject*>(this) << timeLineValue.value();
     remove(&timeLineValue);
     timeLineValue._t = nullptr;
 }
diff --git a/qtdeclarative/src/quickwidgets/qquickwidget.cpp b/qtdeclarative/src/quickwidgets/qquickwidget.cpp
index 39780f8de3..223d91f579 100644
--- a/qtdeclarative/src/quickwidgets/qquickwidget.cpp
+++ b/qtdeclarative/src/quickwidgets/qquickwidget.cpp
@@ -106,6 +106,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e)
 
     renderControl = new QQuickWidgetRenderControl(q);
     offscreenWindow = new QQuickWindow(*new QQuickOffcreenWindowPrivate(),renderControl);
+    offscreenWindow->setScreen(q->screen());
     offscreenWindow->setTitle(QString::fromLatin1("Offscreen"));
     offscreenWindow->setObjectName(QString::fromLatin1("QQuickOffScreenWindow"));
     // Do not call create() on offscreenWindow.
@@ -901,9 +902,7 @@ void QQuickWidgetPrivate::createContext()
 
         context = new QOpenGLContext;
         context->setFormat(offscreenWindow->requestedFormat());
-        const QWindow *win = q->window()->windowHandle();
-        if (win && win->screen())
-            context->setScreen(win->screen());
+        context->setScreen(q->screen());
         QOpenGLContext *shareContext = qt_gl_global_share_context();
         if (!shareContext)
             shareContext = QWidgetPrivate::get(q->window())->shareContext();
@@ -1520,19 +1519,16 @@ bool QQuickWidget::event(QEvent *e)
         d->handleWindowChange();
         break;
 
-    case QEvent::ScreenChangeInternal:
-        if (QWindow *window = this->window()->windowHandle()) {
-            QScreen *newScreen = window->screen();
-
-            if (d->offscreenWindow)
-                d->offscreenWindow->setScreen(newScreen);
-            if (d->offscreenSurface)
-                d->offscreenSurface->setScreen(newScreen);
+    case QEvent::ScreenChangeInternal: {
+        QScreen *newScreen = screen();
+        if (d->offscreenWindow)
+            d->offscreenWindow->setScreen(newScreen);
+        if (d->offscreenSurface)
+            d->offscreenSurface->setScreen(newScreen);
 #if QT_CONFIG(opengl)
-            if (d->context)
-                d->context->setScreen(newScreen);
+        if (d->context)
+            d->context->setScreen(newScreen);
 #endif
-        }
 
         if (d->useSoftwareRenderer
 #if QT_CONFIG(opengl)
@@ -1545,7 +1541,7 @@ bool QQuickWidget::event(QEvent *e)
             d->render(true);
         }
         break;
-
+    }
     case QEvent::Show:
     case QEvent::Move:
         d->updatePosition();
diff --git a/qtdeclarative/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/qtdeclarative/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index 3b7d74df63..b75bf820d5 100644
--- a/qtdeclarative/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/qtdeclarative/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -102,6 +102,7 @@ private slots:
     void valueConversion_RegularExpression();
     void castWithMultipleInheritance();
     void collectGarbage();
+    void collectGarbageNestedWrappersTwoEngines();
     void gcWithNestedDataStructure();
     void stacktrace();
     void numberParsing_data();
@@ -1809,6 +1810,44 @@ void tst_QJSEngine::collectGarbage()
     QVERIFY(ptr.isNull());
 }
 
+class TestObjectContainer : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QObject *dummy MEMBER m_dummy CONSTANT)
+
+public:
+    TestObjectContainer() : m_dummy(new QObject(this)) {}
+
+private:
+    QObject *m_dummy;
+};
+
+void tst_QJSEngine::collectGarbageNestedWrappersTwoEngines()
+{
+    QJSEngine engine1;
+    QJSEngine engine2;
+
+    TestObjectContainer container;
+    QQmlEngine::setObjectOwnership(&container, QQmlEngine::CppOwnership);
+
+    engine1.globalObject().setProperty("foobar", engine1.newQObject(&container));
+    engine2.globalObject().setProperty("foobar", engine2.newQObject(&container));
+
+    engine1.evaluate("foobar.dummy.baz = 42");
+    engine2.evaluate("foobar.dummy.baz = 43");
+
+    QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
+    QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
+
+    engine1.collectGarbage();
+    engine2.collectGarbage();
+
+    // The GC should not collect dummy object wrappers neither in engine1 nor engine2, we
+    // verify that by checking whether the baz property still has its previous value.
+    QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
+    QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
+}
+
 void tst_QJSEngine::gcWithNestedDataStructure()
 {
     // The GC must be able to traverse deeply nested objects, otherwise this
diff --git a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml
new file mode 100644
index 0000000000..206133bb39
--- /dev/null
+++ b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml
@@ -0,0 +1,11 @@
+import QtQuick 2.8
+
+ListView {
+    id: root
+    width: 200
+    height: 200
+
+    delegate: Text {
+        text: display
+    }
+}
diff --git a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
index 35f1e2c94d..1722447830 100644
--- a/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
+++ b/qtdeclarative/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
@@ -27,6 +27,8 @@
 ****************************************************************************/
 
 #include <QtTest/qtest.h>
+#include <QtCore/QConcatenateTablesProxyModel>
+#include <QtGui/QStandardItemModel>
 #include <QtQml/qqmlcomponent.h>
 #include <QtQmlModels/private/qqmldelegatemodel_p.h>
 #include <QtQuick/qquickview.h>
@@ -47,6 +49,7 @@ private slots:
     void filterOnGroup_removeWhenCompleted();
     void qtbug_86017();
     void contextAccessedByHandler();
+    void redrawUponColumnChange();
 };
 
 class AbstractItemModel : public QAbstractItemModel
@@ -186,6 +189,30 @@ void tst_QQmlDelegateModel::contextAccessedByHandler()
     QVERIFY(root->property("works").toBool());
 }
 
+void tst_QQmlDelegateModel::redrawUponColumnChange()
+{
+    QStandardItemModel m1;
+    m1.appendRow({
+            new QStandardItem("Banana"),
+            new QStandardItem("Coconut"),
+    });
+
+    QQuickView view(testFileUrl("redrawUponColumnChange.qml"));
+    QCOMPARE(view.status(), QQuickView::Ready);
+    view.show();
+    QQuickItem *root = view.rootObject();
+    root->setProperty("model", QVariant::fromValue<QObject *>(&m1));
+
+    QObject *item = root->property("currentItem").value<QObject *>();
+    QVERIFY(item);
+    QCOMPARE(item->property("text").toString(), "Banana");
+
+    QVERIFY(root);
+    m1.removeColumn(0);
+
+    QCOMPARE(item->property("text").toString(), "Coconut");
+}
+
 QTEST_MAIN(tst_QQmlDelegateModel)
 
 #include "tst_qqmldelegatemodel.moc"
diff --git a/qtdeclarative/tests/auto/qml/qv4mm/tst_qv4mm.cpp b/qtdeclarative/tests/auto/qml/qv4mm/tst_qv4mm.cpp
index 5d635aa63b..824fd89e5b 100644
--- a/qtdeclarative/tests/auto/qml/qv4mm/tst_qv4mm.cpp
+++ b/qtdeclarative/tests/auto/qml/qv4mm/tst_qv4mm.cpp
@@ -76,10 +76,10 @@ void tst_qv4mm::multiWrappedQObjects()
         QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
         QCOMPARE(engine2.memoryManager->m_pendingFreedObjectWrapperValue.size(), 0);
 
-        // Moves the additional WeakValue from m_multiplyWrappedQObjects to
-        // m_pendingFreedObjectWrapperValue. It's still alive after all.
+        // The additional WeakValue from m_multiplyWrappedQObjects hasn't been moved
+        // to m_pendingFreedObjectWrapperValue yet. It's still alive after all.
         engine1.memoryManager->runGC();
-        QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 2);
+        QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
 
         // engine2 doesn't own the object as engine1 was the first to wrap it above.
         // Therefore, no effect here.
diff --git a/qtdeclarative/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/qtdeclarative/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
index f3659290eb..9fa51da6f8 100644
--- a/qtdeclarative/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
+++ b/qtdeclarative/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp
@@ -870,6 +870,7 @@ void tst_qquickflickable::wheel()
     QVERIFY(flick != nullptr);
     QQuickFlickablePrivate *fp = QQuickFlickablePrivate::get(flick);
     QSignalSpy moveEndSpy(flick, SIGNAL(movementEnded()));
+    quint64 timestamp = 10;
 
     // test a vertical flick
     {
@@ -877,6 +878,7 @@ void tst_qquickflickable::wheel()
         QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(), QPoint(0,-120),
                           Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase, false);
         event.setAccepted(false);
+        event.setTimestamp(timestamp);
         QGuiApplication::sendEvent(window.data(), &event);
     }
 
@@ -887,6 +889,7 @@ void tst_qquickflickable::wheel()
     QCOMPARE(fp->velocityTimeline.isActive(), false);
     QCOMPARE(fp->timeline.isActive(), false);
     QTest::qWait(50); // make sure that onContentYChanged won't sneak in again
+    timestamp += 50;
     QCOMPARE(flick->property("movementsAfterEnd").value<int>(), 0); // QTBUG-55886
 
     // get ready to test horizontal flick
@@ -900,8 +903,8 @@ void tst_qquickflickable::wheel()
         QPoint pos(200, 200);
         QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(), QPoint(-120,0),
                           Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase, false);
-
         event.setAccepted(false);
+        event.setTimestamp(timestamp);
         QGuiApplication::sendEvent(window.data(), &event);
     }
 
@@ -926,11 +929,13 @@ void tst_qquickflickable::trackpad()
     QVERIFY(flick != nullptr);
     QSignalSpy moveEndSpy(flick, SIGNAL(movementEnded()));
     QPoint pos(200, 200);
+    quint64 timestamp = 10;
 
     {
         QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(0,-100), QPoint(0,-120),
                           Qt::NoButton, Qt::NoModifier, Qt::ScrollBegin, false);
         event.setAccepted(false);
+        event.setTimestamp(timestamp++);
         QGuiApplication::sendEvent(window.data(), &event);
     }
 
@@ -944,6 +949,7 @@ void tst_qquickflickable::trackpad()
         QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(-100,0), QPoint(-120,0),
                           Qt::NoButton, Qt::NoModifier, Qt::ScrollUpdate, false);
         event.setAccepted(false);
+        event.setTimestamp(timestamp++);
         QGuiApplication::sendEvent(window.data(), &event);
     }
 
@@ -954,6 +960,7 @@ void tst_qquickflickable::trackpad()
         QWheelEvent event(pos, window->mapToGlobal(pos), QPoint(0,0), QPoint(0,0),
                           Qt::NoButton, Qt::NoModifier, Qt::ScrollEnd, false);
         event.setAccepted(false);
+        event.setTimestamp(timestamp++);
         QGuiApplication::sendEvent(window.data(), &event);
     }
 
diff --git a/qtdeclarative/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml b/qtdeclarative/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml
new file mode 100644
index 0000000000..889e480f3b
--- /dev/null
+++ b/qtdeclarative/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml
@@ -0,0 +1,13 @@
+import QtQuick 2.6
+
+Item {
+    visible: true
+    Item {
+        visible: false
+        Item {
+            objectName: "hiddenChild"
+            activeFocusOnTab: true
+            focus: true
+        }
+    }
+}
diff --git a/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
index c8f251dbe1..c8ef36ee68 100644
--- a/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
+++ b/qtdeclarative/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
@@ -67,6 +67,7 @@ private slots:
     void activeFocusOnTab10();
     void activeFocusOnTab_infiniteLoop_data();
     void activeFocusOnTab_infiniteLoop();
+    void activeFocusOnTab_infiniteLoopControls();
 
     void nextItemInFocusChain();
     void nextItemInFocusChain2();
@@ -1057,6 +1058,17 @@ void tst_QQuickItem::activeFocusOnTab_infiniteLoop()
     QCOMPARE(item, window->rootObject());
 }
 
+
+void tst_QQuickItem::activeFocusOnTab_infiniteLoopControls()
+{
+    auto source = testFileUrl("activeFocusOnTab_infiniteLoop3.qml");
+    QScopedPointer<QQuickView>window(new QQuickView());
+    window->setSource(source);
+    window->show();
+    QVERIFY(window->errors().isEmpty());
+    QTest::keyClick(window.get(), Qt::Key_Tab); // should not hang
+}
+
 void tst_QQuickItem::nextItemInFocusChain()
 {
     if (!qt_tab_all_widgets())
diff --git a/qtdeclarative/tests/auto/quick/qquicklistview/data/qtbug86744.qml b/qtdeclarative/tests/auto/quick/qquicklistview/data/qtbug86744.qml
deleted file mode 100644
index 6dc82d57eb..0000000000
--- a/qtdeclarative/tests/auto/quick/qquicklistview/data/qtbug86744.qml
+++ /dev/null
@@ -1,21 +0,0 @@
-import QtQuick 2.15
-import QtQml.Models 2.15
-
-Item {
-    height: 200
-    width: 100
-    DelegateModel {
-        id: dm
-        model: 2
-        delegate: Item {
-            width: 100; height: 20
-            property bool isCurrent: ListView.isCurrentItem
-        }
-    }
-    ListView {
-        objectName: "listView"
-        model: dm
-        currentIndex: 1
-        anchors.fill: parent
-    }
-}
diff --git a/qtdeclarative/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/qtdeclarative/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index df329f8318..b564fd3ba5 100644
--- a/qtdeclarative/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/qtdeclarative/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -10201,20 +10201,6 @@ void tst_QQuickListView::dragDelegateWithMouseArea_data()
     }
 }
 
-void tst_QQuickListView::isCurrentItem_DelegateModel()
-{
-    QScopedPointer<QQuickView> window(createView());
-    window->setSource(testFileUrl("qtbug86744.qml"));
-    window->resize(640, 480);
-    window->show();
-    QVERIFY(QTest::qWaitForWindowExposed(window.data()));
-
-    QQuickListView* listView = window->rootObject()->findChild<QQuickListView*>("listView");
-    QVERIFY(listView);
-    QVariant value = listView->itemAtIndex(1)->property("isCurrent");
-    QVERIFY(value.toBool() == true);
-}
-
 QTEST_MAIN(tst_QQuickListView)
 
 #include "tst_qquicklistview.moc"
diff --git a/qtdeclarative/tests/manual/touch/flicktext.qml b/qtdeclarative/tests/manual/touch/flicktext.qml
index 9e84261687..e69d6207a9 100644
--- a/qtdeclarative/tests/manual/touch/flicktext.qml
+++ b/qtdeclarative/tests/manual/touch/flicktext.qml
@@ -380,6 +380,36 @@ Rectangle {
                 text: "content X " + flick.contentX.toFixed(2) + " Y " + flick.contentY.toFixed(2)
             }
         }
+
+        Column {
+            Row {
+                spacing: 2
+                Examples.Button {
+                    id: decrButton
+                    text: "-"
+                    onClicked: flick.flickDeceleration -= 100
+                    Timer {
+                        running: decrButton.pressed
+                        interval: 100; repeat: true
+                        onTriggered: flick.flickDeceleration -= 100
+                    }
+                }
+                Text {
+                    horizontalAlignment: Text.AlignHCenter
+                    text: "decel:\n" + flick.flickDeceleration.toFixed(4)
+                }
+                Examples.Button {
+                    id: incrButton
+                    text: "+"
+                    onClicked: flick.flickDeceleration += 100
+                }
+                Timer {
+                    running: incrButton.pressed
+                    interval: 100; repeat: true
+                    onTriggered: flick.flickDeceleration += 100
+                }
+            }
+        }
     }
 
     Component.onCompleted: {
Submodule qtimageformats 7824fe51..1b83a9c7:
diff --git a/qtimageformats/src/plugins/imageformats/icns/qicnshandler.cpp b/qtimageformats/src/plugins/imageformats/icns/qicnshandler.cpp
index dde783c..1bf9074 100644
--- a/qtimageformats/src/plugins/imageformats/icns/qicnshandler.cpp
+++ b/qtimageformats/src/plugins/imageformats/icns/qicnshandler.cpp
@@ -462,8 +462,12 @@ static bool parseIconEntryInfo(ICNSEntry &icon)
     if (isIconCompressed(icon))
         return true;
     // Icon depth:
-    if (!depth.isEmpty())
-        icon.depth = ICNSEntry::Depth(depth.toUInt());
+    if (!depth.isEmpty()) {
+        const uint depthUInt = depth.toUInt();
+        if (depthUInt > 32)
+            return false;
+        icon.depth = ICNSEntry::Depth(depthUInt);
+    }
     // Try mono if depth not found
     if (icon.depth == ICNSEntry::DepthUnknown)
         icon.depth = ICNSEntry::DepthMono;
@@ -515,6 +519,9 @@ static bool parseIconEntryInfo(ICNSEntry &icon)
         }
         icon.height = icon.width;
     }
+    // Sanity check
+    if (icon.width == 0 || icon.width > 4096)
+        return false;
     return true;
 }
 
@@ -685,7 +692,7 @@ bool QICNSHandler::canRead() const
 bool QICNSHandler::read(QImage *outImage)
 {
     QImage img;
-    if (!ensureScanned()) {
+    if (!ensureScanned() || m_currentIconIndex >= m_icons.size()) {
         qWarning("QICNSHandler::read(): The device wasn't parsed properly!");
         return false;
     }
@@ -892,7 +899,7 @@ bool QICNSHandler::scanDevice()
             return false;
 
         const qint64 blockDataOffset = device()->pos();
-        if (!isBlockHeaderValid(blockHeader)) {
+        if (!isBlockHeaderValid(blockHeader, ICNSBlockHeaderSize + filelength - blockDataOffset)) {
             qWarning("QICNSHandler::scanDevice(): Failed, bad header at pos %s. OSType \"%s\", length %u",
                      QByteArray::number(blockDataOffset).constData(),
                      nameFromOSType(blockHeader.ostype).constData(), blockHeader.length);
@@ -927,11 +934,14 @@ bool QICNSHandler::scanDevice()
         case ICNSBlockHeader::TypeOdrp:
             // Icns container seems to have an embedded icon variant container
             // Let's start a scan for entries
-            while (device()->pos() < nextBlockOffset) {
+            while (!stream.atEnd() && device()->pos() < nextBlockOffset) {
                 ICNSBlockHeader icon;
                 stream >> icon;
+                if (stream.status() != QDataStream::Ok)
+                    return false;
                 // Check for incorrect variant entry header and stop scan
-                if (!isBlockHeaderValid(icon, blockDataLength))
+                quint64 remaining = blockDataLength - (device()->pos() - blockDataOffset);
+                if (!isBlockHeaderValid(icon, ICNSBlockHeaderSize + remaining))
                     break;
                 if (!addEntry(icon, device()->pos(), blockHeader.ostype))
                     return false;
@@ -1003,7 +1013,7 @@ bool QICNSHandler::scanDevice()
             break;
         }
     }
-    return true;
+    return (m_icons.size() > 0);
 }
 
 const ICNSEntry &QICNSHandler::getIconMask(const ICNSEntry &icon) const
diff --git a/qtimageformats/src/plugins/imageformats/jp2/qjp2handler.cpp b/qtimageformats/src/plugins/imageformats/jp2/qjp2handler.cpp
index 5082023..cb34374 100644
--- a/qtimageformats/src/plugins/imageformats/jp2/qjp2handler.cpp
+++ b/qtimageformats/src/plugins/imageformats/jp2/qjp2handler.cpp
@@ -43,6 +43,7 @@
 #include "qimage.h"
 #include "qvariant.h"
 #include "qcolor.h"
+#include "qimagereader.h"
 
 #include <jasper/jasper.h>
 #include <math.h> // for pow
@@ -333,16 +334,46 @@ private:
 Jpeg2000JasperReader::Jpeg2000JasperReader(QIODevice *iod, SubFormat format)
     : jasperOk(true), ioDevice(iod), format(format), hasAlpha(false)
 {
+#if JAS_VERSION_MAJOR < 3
     if (jas_init()) {
         jasperOk = false;
         qDebug("Jasper Library initialization failed");
     }
+#else
+    jas_conf_clear();
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+    jas_conf_set_max_mem_usage(QImageReader::allocationLimit() * 1024 * 1024);
+#else
+    // 128MB seems to be enough.
+    jas_conf_set_max_mem_usage(128 * 1024 * 1024);
+#endif
+    if (jas_init_library()) {
+        jasperOk = false;
+        qDebug("Jasper library initialization failed");
+    }
+    if (jas_init_thread()) {
+        jas_cleanup_library();
+        jasperOk = false;
+        qDebug("Jasper thread initialization failed");
+    }
+#endif
 }
 
 Jpeg2000JasperReader::~Jpeg2000JasperReader()
 {
+#if JAS_VERSION_MAJOR < 3
     if (jasperOk)
         jas_cleanup();
+#else
+    if (jasperOk) {
+        if (jas_cleanup_thread()) {
+            qDebug("Jasper thread cleanup failed");
+        }
+        if (jas_cleanup_library()) {
+            qDebug("Jasper library cleanup failed");
+        }
+    }
+#endif
 }
 
 /*! \internal
@@ -857,7 +888,7 @@ bool Jpeg2000JasperReader::write(const QImage &image, int quality)
     }
 
     // Open an empty jasper stream that grows automatically
-    jas_stream_t * memory_stream = jas_stream_memopen(0, -1);
+    jas_stream_t * memory_stream = jas_stream_memopen(0, 0);
 
     // Jasper wants a non-const string.
     char *str = qstrdup(jasperFormatString.toLatin1().constData());
diff --git a/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp b/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp
index 1386750..ac8956c 100644
--- a/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp
+++ b/qtimageformats/src/plugins/imageformats/tiff/qtiffhandler.cpp
@@ -361,6 +361,8 @@ bool QTiffHandler::read(QImage *image)
     }
 
     TIFF *const tiff = d->tiff;
+    if (TIFFIsTiled(tiff) && TIFFTileSize64(tiff) > uint64_t(image->sizeInBytes())) // Corrupt image
+        return false;
     const quint32 width = d->size.width();
     const quint32 height = d->size.height();
 
Submodule qtlocation 597c9885..f920a6cc:
diff --git a/qtlocation/src/location/configure.json b/qtlocation/src/location/configure.json
index 6d01a9a3..d1e623a1 100644
--- a/qtlocation/src/location/configure.json
+++ b/qtlocation/src/location/configure.json
@@ -9,7 +9,7 @@
             "label": "Qt.labs.location experimental QML plugin",
             "purpose": "Provides experimental QtLocation QML types",
             "section": "Location",
-            "condition": "config.opengl",
+            "condition": "features.opengl",
             "output": [ "privateFeature" ]
         },
         "geoservices_osm": {
diff --git a/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp b/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp
index a978573d..11e1466f 100644
--- a/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp
+++ b/qtlocation/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp
@@ -158,7 +158,7 @@ void QGeoMapObjectQSGSupport::updateMapObjects(QSGNode *root, QQuickWindow *wind
     if (!root)
         return;
 
-    if (m_mapObjectsRootNode && m_mapObjectsRootNode->parent())
+    if (m_mapObjectsRootNode && !m_mapObjectsRootNode->parent())
         root->appendChildNode(m_mapObjectsRootNode.get());
 
     if (!m_mapObjectsRootNode) {
diff --git a/qtlocation/src/plugins/geoservices/esri/geocodingmanagerengine_esri.cpp b/qtlocation/src/plugins/geoservices/esri/geocodingmanagerengine_esri.cpp
index 5a40467e..d123c6a8 100644
--- a/qtlocation/src/plugins/geoservices/esri/geocodingmanagerengine_esri.cpp
+++ b/qtlocation/src/plugins/geoservices/esri/geocodingmanagerengine_esri.cpp
@@ -59,8 +59,10 @@ QT_BEGIN_NAMESPACE
 static const QString kPrefixEsri(QStringLiteral("esri."));
 static const QString kParamUserAgent(kPrefixEsri + QStringLiteral("useragent"));
 
-static const QString kUrlGeocode(QStringLiteral("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates"));
-static const QString kUrlReverseGeocode(QStringLiteral("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode"));
+static const QString kUrlGeocode(QStringLiteral("https://geocode.arcgis.com/arcgis/rest/services/"
+                                                "World/GeocodeServer/findAddressCandidates"));
+static const QString kUrlReverseGeocode(QStringLiteral(
+        "https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode"));
 
 static QString addressToQuery(const QGeoAddress &address)
 {
diff --git a/qtlocation/src/plugins/geoservices/esri/georoutejsonparser_esri.cpp b/qtlocation/src/plugins/geoservices/esri/georoutejsonparser_esri.cpp
index 17492d94..96c12b1b 100644
--- a/qtlocation/src/plugins/geoservices/esri/georoutejsonparser_esri.cpp
+++ b/qtlocation/src/plugins/geoservices/esri/georoutejsonparser_esri.cpp
@@ -46,7 +46,8 @@
 
 QT_BEGIN_NAMESPACE
 
-// JSON reference: http://resources.arcgis.com/en/help/arcgis-rest-api/#/Route_service_with_synchronous_execution/02r300000036000000/
+// JSON reference:
+// https://resources.arcgis.com/en/help/arcgis-rest-api/#/Route_service_with_synchronous_execution/02r300000036000000/
 
 static const QString kErrorMessage(QStringLiteral("Error %1: %2."));
 static const QString kErrorJson(QStringLiteral("Error: invalide JSON document."));
diff --git a/qtlocation/src/plugins/geoservices/esri/georoutereply_esri.cpp b/qtlocation/src/plugins/geoservices/esri/georoutereply_esri.cpp
index 8cadfb29..92b6bb13 100644
--- a/qtlocation/src/plugins/geoservices/esri/georoutereply_esri.cpp
+++ b/qtlocation/src/plugins/geoservices/esri/georoutereply_esri.cpp
@@ -44,7 +44,8 @@
 
 QT_BEGIN_NAMESPACE
 
-// JSON reference: http://resources.arcgis.com/en/help/arcgis-rest-api/#/Route_service_with_synchronous_execution/02r300000036000000/
+// JSON reference:
+// https://resources.arcgis.com/en/help/arcgis-rest-api/#/Route_service_with_synchronous_execution/02r300000036000000/
 
 GeoRouteReplyEsri::GeoRouteReplyEsri(QNetworkReply *reply, const QGeoRouteRequest &request,
                                      QObject *parent) :
diff --git a/qtlocation/src/plugins/geoservices/esri/georoutingmanagerengine_esri.cpp b/qtlocation/src/plugins/geoservices/esri/georoutingmanagerengine_esri.cpp
index 0e6bc2c7..ed613f4b 100644
--- a/qtlocation/src/plugins/geoservices/esri/georoutingmanagerengine_esri.cpp
+++ b/qtlocation/src/plugins/geoservices/esri/georoutingmanagerengine_esri.cpp
@@ -48,7 +48,8 @@ static const QString kPrefixEsri(QStringLiteral("esri."));
 static const QString kParamUserAgent(kPrefixEsri + QStringLiteral("useragent"));
 static const QString kParamToken(kPrefixEsri + QStringLiteral("token"));
 
-static const QString kUrlRouting(QStringLiteral("http://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World/solve"));
+static const QString kUrlRouting(QStringLiteral(
+        "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World/solve"));
 
 GeoRoutingManagerEngineEsri::GeoRoutingManagerEngineEsri(const QVariantMap &parameters,
                                                          QGeoServiceProvider::Error *error,
@@ -70,7 +71,8 @@ GeoRoutingManagerEngineEsri::~GeoRoutingManagerEngineEsri()
 {
 }
 
-// REST reference: http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#//02r300000036000000
+// REST reference:
+// https://resources.arcgis.com/en/help/arcgis-rest-api/index.html#//02r300000036000000
 
 QGeoRouteReply *GeoRoutingManagerEngineEsri::calculateRoute(const QGeoRouteRequest &request)
 {
@@ -125,7 +127,7 @@ void GeoRoutingManagerEngineEsri::replyError(QGeoRouteReply::Error errorCode, co
 QString GeoRoutingManagerEngineEsri::preferedDirectionLangage()
 {
     // list of supported langages is defined in:
-    // http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#//02r300000036000000
+    // https://resources.arcgis.com/en/help/arcgis-rest-api/index.html#//02r300000036000000
     const QStringList supportedLanguages = {
         "ar", // Generate directions in Arabic
         "cs", // Generate directions in Czech
diff --git a/qtlocation/src/plugins/geoservices/esri/geotiledmappingmanagerengine_esri.cpp b/qtlocation/src/plugins/geoservices/esri/geotiledmappingmanagerengine_esri.cpp
index 5d15835d..24148f95 100644
--- a/qtlocation/src/plugins/geoservices/esri/geotiledmappingmanagerengine_esri.cpp
+++ b/qtlocation/src/plugins/geoservices/esri/geotiledmappingmanagerengine_esri.cpp
@@ -230,7 +230,8 @@ QGeoMap *GeoTiledMappingManagerEngineEsri::createMap()
 // ${y} = Y
 // ${token} = Token
 
-// template = 'http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{{z}}/{{y}}/{{x}}.png'
+// template =
+// 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{{z}}/{{y}}/{{x}}.png'
 
 bool GeoTiledMappingManagerEngineEsri::initializeMapSources(QGeoServiceProvider::Error *error,
                                                             QString *errorString,
diff --git a/qtlocation/src/plugins/geoservices/esri/maps.json b/qtlocation/src/plugins/geoservices/esri/maps.json
index 8167ae7d..862e087d 100644
--- a/qtlocation/src/plugins/geoservices/esri/maps.json
+++ b/qtlocation/src/plugins/geoservices/esri/maps.json
@@ -6,8 +6,8 @@
             "description": "ArcGIS Online World Street Map",
             "mobile": true,
             "night": false,
-            "url": "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=3b93337983e9436f8db950e38a8629af'>Esri</a> contributors"
+            "url": "https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=3b93337983e9436f8db950e38a8629af'>Esri</a> contributors"
         },
 
         {
@@ -16,8 +16,8 @@
             "": "ArcGIS Online World Imagery",
             "mobile": true,
             "night": false,
-            "url": "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9'>Esri</a> contributors"
         },
 
         {
@@ -26,8 +26,8 @@
             "description": "ArcGIS Online World Terrain Base",
             "mobile": false,
             "night": false,
-            "url": "http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=c61ad8ab017d49e1a82f580ee1298931'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=c61ad8ab017d49e1a82f580ee1298931'>Esri</a> contributors"
         },
 
         {
@@ -36,8 +36,8 @@
             "description": "ArcGIS Online World Topography",
             "mobile": true,
             "night": false,
-            "url": "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=30e5fe3149c34df1ba922e6f5bbf808f'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=30e5fe3149c34df1ba922e6f5bbf808f'>Esri</a> contributors"
         },
 
         {
@@ -46,8 +46,8 @@
             "description": "This map presents land cover and detailed topographic maps for the United States.",
             "mobile": true,
             "night": false,
-            "url": "http://services.arcgisonline.com/ArcGIS/rest/services/USA_Topo_Maps/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=99cd5fbd98934028802b4f797c4b1732'>Esri</a> contributors"
+            "url": "https://services.arcgisonline.com/ArcGIS/rest/services/USA_Topo_Maps/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=99cd5fbd98934028802b4f797c4b1732'>Esri</a> contributors"
         },
 
         {
@@ -56,8 +56,8 @@
             "description": "National Geographic World Map",
             "mobile": false,
             "night": false,
-            "url": "http://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=b9b1b422198944fbbd5250b3241691b6'>Esri</a> contributors"
+            "url": "https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=b9b1b422198944fbbd5250b3241691b6'>Esri</a> contributors"
         },
 
         {
@@ -66,8 +66,8 @@
             "description": "Thematic content providing a neutral background with minimal colors",
             "mobile": true,
             "night": false,
-            "url": "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=ed712cb1db3e4bae9e85329040fb9a49'>Esri</a> contributors"
+            "url": "https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=ed712cb1db3e4bae9e85329040fb9a49'>Esri</a> contributors"
         },
 
         {
@@ -76,8 +76,8 @@
             "description": "Natural Earth physical map for the world",
             "mobile": false,
             "night": false,
-            "url": "http://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=c4ec722a1cd34cf0a23904aadf8923a0'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=c4ec722a1cd34cf0a23904aadf8923a0'>Esri</a> contributors"
         },
 
         {
@@ -86,8 +86,8 @@
             "description": "Portrays surface elevation as shaded relief",
             "mobile": false,
             "night": false,
-            "url": "http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=9c5370d0b54f4de1b48a3792d7377ff2'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=9c5370d0b54f4de1b48a3792d7377ff2'>Esri</a> contributors"
         },
 
         {
@@ -96,8 +96,8 @@
             "description": "This map is designed to be used as a basemap by marine GIS professionals and as a reference map by anyone interested in ocean data",
             "mobile": false,
             "night": false,
-            "url": "http://server.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500'>Esri</a> contributors"
         },
 
         {
@@ -106,8 +106,8 @@
             "description": "Thematic content providing a neutral background with minimal colors",
             "mobile": false,
             "night": true,
-            "url": "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=a284a9b99b3446a3910d4144a50990f6'>Esri</a> contributors"
+            "url": "https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=a284a9b99b3446a3910d4144a50990f6'>Esri</a> contributors"
         },
 
         {
@@ -116,8 +116,8 @@
             "description": "DeLorme’s topographic basemap is a seamless global data set that portrays transportation, hydrography, jurisdiction boundaries, and major geographic features",
             "mobile": false,
             "night": false,
-            "url": "http://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer",
-            "copyrightText": "&copy; <a href='http://www.arcgis.com/home/item.html?id=b165c3df453e4be6b5ac4fdb241effbe'>Esri</a> contributors"
+            "url": "https://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer",
+            "copyrightText": "&copy; <a href='https://www.arcgis.com/home/item.html?id=b165c3df453e4be6b5ac4fdb241effbe'>Esri</a> contributors"
         }
     ]
 }
diff --git a/qtlocation/src/plugins/geoservices/esri/placemanagerengine_esri.cpp b/qtlocation/src/plugins/geoservices/esri/placemanagerengine_esri.cpp
index 3858ddf5..af66f28e 100644
--- a/qtlocation/src/plugins/geoservices/esri/placemanagerengine_esri.cpp
+++ b/qtlocation/src/plugins/geoservices/esri/placemanagerengine_esri.cpp
@@ -63,8 +63,10 @@ static const QString kCountriesKey(QStringLiteral("detailedCountries"));
 static const QString kLocalizedNamesKey(QStringLiteral("localizedNames"));
 static const QString kMaxLocationsKey(QStringLiteral("maxLocations"));
 
-static const QUrl kUrlGeocodeServer("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer?f=pjson");
-static const QUrl kUrlFindAddressCandidates("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates");
+static const QUrl kUrlGeocodeServer(
+        "https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer?f=pjson");
+static const QUrl kUrlFindAddressCandidates("https://geocode.arcgis.com/arcgis/rest/services/World/"
+                                            "GeocodeServer/findAddressCandidates");
 
 PlaceManagerEngineEsri::PlaceManagerEngineEsri(const QVariantMap &parameters, QGeoServiceProvider::Error *error,
                                                QString *errorString) :
Submodule qtmultimedia 981ed7e4..f3dc1896:
diff --git a/qtmultimedia/src/plugins/pulseaudio/qaudioinput_pulse.cpp b/qtmultimedia/src/plugins/pulseaudio/qaudioinput_pulse.cpp
index 2b5325132..b68b4af1b 100644
--- a/qtmultimedia/src/plugins/pulseaudio/qaudioinput_pulse.cpp
+++ b/qtmultimedia/src/plugins/pulseaudio/qaudioinput_pulse.cpp
@@ -402,6 +402,8 @@ int QPulseAudioInput::bytesReady() const
 
 qint64 QPulseAudioInput::read(char *data, qint64 len)
 {
+    Q_ASSERT(data != nullptr || len == 0);
+
     m_bytesAvailable = checkBytesReady();
 
     setError(QAudio::NoError);
@@ -411,7 +413,8 @@ qint64 QPulseAudioInput::read(char *data, qint64 len)
 
     if (!m_pullMode && !m_tempBuffer.isEmpty()) {
         readBytes = qMin(static_cast<int>(len), m_tempBuffer.size());
-        memcpy(data, m_tempBuffer.constData(), readBytes);
+        if (readBytes)
+            memcpy(data, m_tempBuffer.constData(), readBytes);
         m_totalTimeValue += readBytes;
 
         if (readBytes < m_tempBuffer.size()) {
@@ -502,9 +505,10 @@ qint64 QPulseAudioInput::read(char *data, qint64 len)
 
 void QPulseAudioInput::applyVolume(const void *src, void *dest, int len)
 {
+    Q_ASSERT((src && dest) || len == 0);
     if (m_volume < 1.f)
         QAudioHelperInternal::qMultiplySamples(m_volume, m_format, src, dest, len);
-    else
+    else if (len)
         memcpy(dest, src, len);
 }
 
Submodule qtquick3d 1d1420cd..95f52cb2:
diff --git a/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro b/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro
index ca5c499e..174a075b 100644
--- a/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro
+++ b/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro
@@ -10,7 +10,7 @@ QT_FOR_CONFIG += assetimporters-private
 include($$OUT_PWD/../qtassetimporters-config.pri)
 
 qtConfig(system-assimp):!if(cross_compile:host_build) {
-    QMAKE_USE_PRIVATE += assimp
+    QMAKE_USE_PRIVATE += quick3d-assimp
 } else {
     include(../../../3rdparty/assimp/assimp.pri)
 }
Submodule qtquickcontrols2 5b169fcf...9ff77702 (commits not present)
Submodule qtscript 5be95f96...b169b3e6 (commits not present)
Submodule qtspeech b598a509..d32f4a47:
diff --git a/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp b/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp
index 6eb74b8..bcc7dd1 100644
--- a/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp
+++ b/qtspeech/src/plugins/tts/speechdispatcher/qtexttospeech_speechd.cpp
@@ -357,7 +357,9 @@ QVector<QLocale> QTextToSpeechEngineSpeechd::availableLocales() const
 
 QVector<QVoice> QTextToSpeechEngineSpeechd::availableVoices() const
 {
-    return m_voices.values(m_currentLocale.name()).toVector();
+    QList<QVoice> resultList = m_voices.values(m_currentLocale.name());
+    std::reverse(resultList.begin(), resultList.end());
+    return resultList.toVector();
 }
 
 // We have no way of knowing our own client_id since speech-dispatcher seems to be incomplete
Submodule qtsvg ea8154f3..83296f10:
diff --git a/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp b/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
index 4136aaf..fd3529a 100644
--- a/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
+++ b/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
@@ -189,6 +189,8 @@ bool QSvgIOHandler::read(QImage *image)
             }
         }
         if (!finalSize.isEmpty()) {
+            if (qMax(finalSize.width(), finalSize.height()) > 0xffff)
+                return false; // Assume corrupted file
             image->fill(d->backColor.rgba());
             QPainter p(image);
             d->r.render(&p, bounds);
diff --git a/qtsvg/src/svg/qsvghandler.cpp b/qtsvg/src/svg/qsvghandler.cpp
index 299efac..8dda563 100644
--- a/qtsvg/src/svg/qsvghandler.cpp
+++ b/qtsvg/src/svg/qsvghandler.cpp
@@ -1393,9 +1393,10 @@ static void parseFont(QSvgNode *node,
         case FontSizeNone:
             break;
         case FontSizeValue: {
-            QSvgHandler::LengthType dummy; // should always be pixel size
-            fontStyle->setSize(qMin(parseLength(attributes.fontSize, dummy, handler),
-                                    qreal(0xffff)));
+            QSvgHandler::LengthType type;
+            qreal fs = parseLength(attributes.fontSize, type, handler);
+            fs = convertToPixels(fs, true, type);
+            fontStyle->setSize(qMin(fs, qreal(0xffff)));
         }
             break;
         default:
@@ -1626,6 +1627,7 @@ static void pathArc(QPainterPath &path,
 
 static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
 {
+    const int maxElementCount = 0x7fff; // Assume file corruption if more path elements than this
     qreal x0 = 0, y0 = 0;              // starting point
     qreal x = 0, y = 0;                // current point
     char lastMode = 0;
@@ -1633,7 +1635,8 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
     const QChar *str = dataStr.constData();
     const QChar *end = str + dataStr.size();
 
-    while (str != end) {
+    bool ok = true;
+    while (ok && str != end) {
         while (str->isSpace() && (str + 1) != end)
             ++str;
         QChar pathElem = *str;
@@ -1650,14 +1653,13 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             arg.append(0);//dummy
         const qreal *num = arg.constData();
         int count = arg.count();
-        while (count > 0) {
+        while (ok && count > 0) {
             qreal offsetX = x;        // correction offsets
             qreal offsetY = y;        // for relative commands
             switch (pathElem.unicode()) {
             case 'm': {
                 if (count < 2) {
-                    num++;
-                    count--;
+                    ok = false;
                     break;
                 }
                 x = x0 = num[0] + offsetX;
@@ -1674,8 +1676,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
                 break;
             case 'M': {
                 if (count < 2) {
-                    num++;
-                    count--;
+                    ok = false;
                     break;
                 }
                 x = x0 = num[0];
@@ -1701,8 +1702,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
                 break;
             case 'l': {
                 if (count < 2) {
-                    num++;
-                    count--;
+                    ok = false;
                     break;
                 }
                 x = num[0] + offsetX;
@@ -1715,8 +1715,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
                 break;
             case 'L': {
                 if (count < 2) {
-                    num++;
-                    count--;
+                    ok = false;
                     break;
                 }
                 x = num[0];
@@ -1756,8 +1755,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
                 break;
             case 'c': {
                 if (count < 6) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF c1(num[0] + offsetX, num[1] + offsetY);
@@ -1773,8 +1771,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 'C': {
                 if (count < 6) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF c1(num[0], num[1]);
@@ -1790,8 +1787,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 's': {
                 if (count < 4) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF c1;
@@ -1812,8 +1808,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 'S': {
                 if (count < 4) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF c1;
@@ -1834,8 +1829,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 'q': {
                 if (count < 4) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF c(num[0] + offsetX, num[1] + offsetY);
@@ -1850,8 +1844,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 'Q': {
                 if (count < 4) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF c(num[0], num[1]);
@@ -1866,8 +1859,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 't': {
                 if (count < 2) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF e(num[0] + offsetX, num[1] + offsetY);
@@ -1887,8 +1879,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 'T': {
                 if (count < 2) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 QPointF e(num[0], num[1]);
@@ -1908,8 +1899,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
             case 'a': {
                 if (count < 7) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 qreal rx = (*num++);
@@ -1931,8 +1921,7 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
                 break;
             case 'A': {
                 if (count < 7) {
-                    num += count;
-                    count = 0;
+                    ok = false;
                     break;
                 }
                 qreal rx = (*num++);
@@ -1953,12 +1942,15 @@ static bool parsePathDataFast(const QStringRef &dataStr, QPainterPath &path)
             }
                 break;
             default:
-                return false;
+                ok = false;
+                break;
             }
             lastMode = pathElem.toLatin1();
+            if (path.elementCount() > maxElementCount)
+                ok = false;
         }
     }
-    return true;
+    return ok;
 }
 
 static bool parseStyle(QSvgNode *node,
@@ -2522,6 +2514,8 @@ static bool parseAnimateTransformNode(QSvgNode *parent,
             ++s;
         }
     }
+    if (vals.count() % 3 != 0)
+        return false;
 
     bool ok = true;
     int begin = parseClockValue(beginStr, &ok);
@@ -2585,6 +2579,8 @@ static QSvgNode *createCircleNode(QSvgNode *parent,
     qreal ncx = toDouble(cx);
     qreal ncy = toDouble(cy);
     qreal nr  = toDouble(r);
+    if (nr < 0.0)
+        return nullptr;
 
     QRectF rect(ncx-nr, ncy-nr, nr*2, nr*2);
     QSvgNode *circle = new QSvgCircle(parent, rect);
@@ -2995,8 +2991,8 @@ static QSvgNode *createPathNode(QSvgNode *parent,
 
     QPainterPath qpath;
     qpath.setFillRule(Qt::WindingFill);
-    //XXX do error handling
-    parsePathDataFast(data, qpath);
+    if (!parsePathDataFast(data, qpath))
+        qCWarning(lcSvgHandler, "Invalid path data; path truncated.");
 
     QSvgNode *path = new QSvgPath(parent, qpath);
     return path;
@@ -3055,15 +3051,16 @@ static QSvgStyleProperty *createRadialGradientNode(QSvgNode *node,
 
     qreal ncx = 0.5;
     qreal ncy = 0.5;
-    qreal nr  = 0.5;
     if (!cx.isEmpty())
         ncx = toDouble(cx);
     if (!cy.isEmpty())
         ncy = toDouble(cy);
+
+    qreal nr = 0.0;
     if (!r.isEmpty())
         nr = toDouble(r);
-    if (nr < 0.5)
-        nr = 0.5;
+    if (nr <= 0.0)
+        return nullptr;
 
     qreal nfx = ncx;
     if (!fx.isEmpty())
@@ -3359,7 +3356,9 @@ static QSvgNode *createTextNode(QSvgNode *parent,
     //### editable and rotate not handled
     QSvgHandler::LengthType type;
     qreal nx = parseLength(x, type, handler);
+    nx = convertToPixels(nx, true, type);
     qreal ny = parseLength(y, type, handler);
+    ny = convertToPixels(ny, true, type);
 
     QSvgNode *text = new QSvgText(parent, QPointF(nx, ny));
     return text;
@@ -3700,9 +3699,7 @@ void QSvgHandler::parse()
         case QXmlStreamReader::EndElement:
             endElement(xml->name());
             ++remainingUnfinishedElements;
-            // if we are using somebody else's qxmlstreamreader
-            // we should not read until the end of the stream
-            done = !m_ownsReader && (xml->name() == QLatin1String("svg"));
+            done = (xml->name() == QLatin1String("svg"));
             break;
         case QXmlStreamReader::Characters:
             characters(xml->text());
diff --git a/qtsvg/src/svg/qsvgstructure.cpp b/qtsvg/src/svg/qsvgstructure.cpp
index b89608b..89c9e4e 100644
--- a/qtsvg/src/svg/qsvgstructure.cpp
+++ b/qtsvg/src/svg/qsvgstructure.cpp
@@ -255,9 +255,13 @@ inline static bool isSupportedSvgFeature(const QString &str)
     };
 
     if (str.length() <= MAX_WORD_LENGTH && str.length() >= MIN_WORD_LENGTH) {
+        const char16_t unicode44 = str.at(44).unicode();
+        const char16_t unicode45 = str.at(45).unicode();
+        if (unicode44 >= sizeof(asso_values) || unicode45 >= sizeof(asso_values))
+            return false;
         const int key = str.length()
-                        + asso_values[str.at(45).unicode()]
-                        + asso_values[str.at(44).unicode()];
+                        + asso_values[unicode45]
+                        + asso_values[unicode44];
         if (key <= MAX_HASH_VALUE && key >= 0)
             return str == QLatin1String(wordlist[key]);
     }
diff --git a/qtsvg/src/svg/qsvgtinydocument.cpp b/qtsvg/src/svg/qsvgtinydocument.cpp
index 63d0797..19e7154 100644
--- a/qtsvg/src/svg/qsvgtinydocument.cpp
+++ b/qtsvg/src/svg/qsvgtinydocument.cpp
@@ -433,8 +433,16 @@ void QSvgTinyDocument::draw(QPainter *p, QSvgExtraStates &)
     draw(p);
 }
 
+static bool isValidMatrix(const QTransform &transform)
+{
+    qreal determinant = transform.determinant();
+    return qIsFinite(determinant);
+}
+
 void QSvgTinyDocument::mapSourceToTarget(QPainter *p, const QRectF &targetRect, const QRectF &sourceRect)
 {
+    QTransform oldTransform = p->worldTransform();
+
     QRectF target = targetRect;
     if (target.isEmpty()) {
         QPaintDevice *dev = p->device();
@@ -487,6 +495,9 @@ void QSvgTinyDocument::mapSourceToTarget(QPainter *p, const QRectF &targetRect,
         }
 #endif
     }
+
+    if (!isValidMatrix(p->worldTransform()))
+        p->setWorldTransform(oldTransform);
 }
 
 QRectF QSvgTinyDocument::boundsOnElement(const QString &id) const
diff --git a/qtsvg/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp b/qtsvg/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
index 36c76ec..db71e02 100644
--- a/qtsvg/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
+++ b/qtsvg/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
@@ -86,6 +86,8 @@ private slots:
     void oss_fuzz_23731();
     void oss_fuzz_24131();
     void oss_fuzz_24738();
+    void illegalAnimateTransform_data();
+    void illegalAnimateTransform();
 
 #ifndef QT_NO_COMPRESS
     void testGzLoading();
@@ -1646,5 +1648,22 @@ void tst_QSvgRenderer::oss_fuzz_24738()
     QSvgRenderer().load(QByteArray("<svg><path d=\"a 2 1e-212.....\">"));
 }
 
+void tst_QSvgRenderer::illegalAnimateTransform_data()
+{
+    QTest::addColumn<QByteArray>("svg");
+
+    QTest::newRow("case1") << QByteArray("<svg><animateTransform type=\"rotate\" begin=\"1\" dur=\"2\" values=\"8,0,5,0\">");
+    QTest::newRow("case2") << QByteArray("<svg><animateTransform type=\"rotate\" begin=\"1\" dur=\"2\" values=\"1,2\">");
+    QTest::newRow("case3") << QByteArray("<svg><animateTransform type=\"rotate\" begin=\"1\" dur=\"2\" from=\".. 5 2\" to=\"f\">");
+    QTest::newRow("case4") << QByteArray("<svg><animateTransform type=\"scale\" begin=\"1\" dur=\"2\" by=\"--,..\">");
+}
+
+void tst_QSvgRenderer::illegalAnimateTransform()
+{
+    QFETCH(QByteArray, svg);
+    QSvgRenderer renderer;
+    QVERIFY(!renderer.load(svg)); // also shouldn't assert
+}
+
 QTEST_MAIN(tst_QSvgRenderer)
 #include "tst_qsvgrenderer.moc"
Submodule qttools 7a197fad..c4750dd0:
diff --git a/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp b/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp
index feab1e2d5..cbfb82507 100644
--- a/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp
+++ b/qttools/src/assistant/qhelpgenerator/helpgenerator.cpp
@@ -445,7 +445,9 @@ bool HelpGeneratorPrivate::insertFiles(const QStringList &files, const QString &
     if (filterSetId < 0)
         return false;
     ++filterSetId;
-    for (int attId : qAsConst(filterAtts)) {
+    QList<int> attValues = filterAtts.values();
+    std::sort(attValues.begin(), attValues.end());
+    for (int attId : qAsConst(attValues)) {
         m_query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable "
             "VALUES(?, ?)"));
         m_query->bindValue(0, filterSetId);
Submodule qtwayland 2ce7b8d2..9c607c77:
diff --git a/qtwayland/src/client/configure.json b/qtwayland/src/client/configure.json
index 2f424580..29222357 100644
--- a/qtwayland/src/client/configure.json
+++ b/qtwayland/src/client/configure.json
@@ -149,8 +149,7 @@
                     "#endif"
                 ]
             },
-            "libs": "-ldrm",
-            "use": "egl"
+            "use": "drm egl"
         },
         "vulkan-server-buffer": {
             "label": "Vulkan Buffer Sharing",
@@ -168,7 +167,8 @@
                     "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;",
                     "return 0;"
                 ]
-            }
+            },
+            "use": "wayland-client"
         },
         "egl_1_5-wayland": {
             "label": "EGL 1.5 with Wayland Platform",
@@ -183,7 +183,7 @@
                     "eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);"
                 ]
             },
-            "use": "egl"
+            "use": "egl wayland-client"
         }
     },
 
diff --git a/qtwayland/src/client/global/qwaylandclientextension.cpp b/qtwayland/src/client/global/qwaylandclientextension.cpp
index 125b1e19..edccfe63 100644
--- a/qtwayland/src/client/global/qwaylandclientextension.cpp
+++ b/qtwayland/src/client/global/qwaylandclientextension.cpp
@@ -74,7 +74,10 @@ void QWaylandClientExtensionPrivate::handleRegistryGlobal(void *data, ::wl_regis
 void QWaylandClientExtension::addRegistryListener()
 {
     Q_D(QWaylandClientExtension);
-    d->waylandIntegration->display()->addRegistryListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this);
+    if (!d->registered) {
+        d->waylandIntegration->display()->addRegistryListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this);
+        d->registered = true;
+    }
 }
 
 QWaylandClientExtension::QWaylandClientExtension(const int ver)
@@ -88,6 +91,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver)
     QMetaObject::invokeMethod(this, "addRegistryListener", Qt::QueuedConnection);
 }
 
+QWaylandClientExtension::~QWaylandClientExtension()
+{
+    Q_D(QWaylandClientExtension);
+    if (d->registered && !QCoreApplication::closingDown())
+        d->waylandIntegration->display()->removeListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this);
+}
+
 QtWaylandClient::QWaylandIntegration *QWaylandClientExtension::integration() const
 {
     Q_D(const QWaylandClientExtension);
diff --git a/qtwayland/src/client/global/qwaylandclientextension.h b/qtwayland/src/client/global/qwaylandclientextension.h
index 98272e57..5bd28398 100644
--- a/qtwayland/src/client/global/qwaylandclientextension.h
+++ b/qtwayland/src/client/global/qwaylandclientextension.h
@@ -63,6 +63,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtension : public QObject
     Q_PROPERTY(bool active READ isActive NOTIFY activeChanged)
 public:
     QWaylandClientExtension(const int version);
+    ~QWaylandClientExtension();
 
     QtWaylandClient::QWaylandIntegration *integration() const;
     int version() const;
diff --git a/qtwayland/src/client/global/qwaylandclientextension_p.h b/qtwayland/src/client/global/qwaylandclientextension_p.h
index 69cc46a0..9091efbe 100644
--- a/qtwayland/src/client/global/qwaylandclientextension_p.h
+++ b/qtwayland/src/client/global/qwaylandclientextension_p.h
@@ -68,6 +68,7 @@ public:
     QtWaylandClient::QWaylandIntegration *waylandIntegration = nullptr;
     int version = -1;
     bool active = false;
+    bool registered = false;
 };
 
 class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate
diff --git a/qtwayland/src/client/qwaylanddatadevice.cpp b/qtwayland/src/client/qwaylanddatadevice.cpp
index 7e2e3308..e3e60ed5 100644
--- a/qtwayland/src/client/qwaylanddatadevice.cpp
+++ b/qtwayland/src/client/qwaylanddatadevice.cpp
@@ -72,6 +72,8 @@ QWaylandDataDevice::QWaylandDataDevice(QWaylandDataDeviceManager *manager, QWayl
 
 QWaylandDataDevice::~QWaylandDataDevice()
 {
+    if (wl_data_device_get_version(object()) >= WL_DATA_DEVICE_RELEASE_SINCE_VERSION)
+        release();
 }
 
 QWaylandDataOffer *QWaylandDataDevice::selectionOffer() const
@@ -110,7 +112,7 @@ QWaylandDataOffer *QWaylandDataDevice::dragOffer() const
     return m_dragOffer.data();
 }
 
-bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon)
+bool QWaylandDataDevice::startDrag(QMimeData *mimeData, Qt::DropActions supportedActions, QWaylandWindow *icon)
 {
     auto *seat = m_display->currentInputDevice();
     auto *origin = seat->pointerFocus();
@@ -123,7 +125,28 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon)
     }
 
     m_dragSource.reset(new QWaylandDataSource(m_display->dndSelectionHandler(), mimeData));
+
+    if (wl_data_device_get_version(object()) >= 3)
+        m_dragSource->set_actions(dropActionsToWl(supportedActions));
+
     connect(m_dragSource.data(), &QWaylandDataSource::cancelled, this, &QWaylandDataDevice::dragSourceCancelled);
+    connect(m_dragSource.data(), &QWaylandDataSource::dndResponseUpdated, this, [this](bool accepted, Qt::DropAction action) {
+            auto drag = static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag());
+            // in old versions drop action is not set, so we guess
+            if (wl_data_source_get_version(m_dragSource->object()) < 3) {
+                drag->setResponse(accepted);
+            } else {
+                QPlatformDropQtResponse response(accepted, action);
+                drag->setResponse(response);
+            }
+    });
+    connect(m_dragSource.data(), &QWaylandDataSource::dndDropped, this, [](bool accepted, Qt::DropAction action) {
+        QPlatformDropQtResponse response(accepted, action);
+        static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setDropResponse(response);
+    });
+    connect(m_dragSource.data(), &QWaylandDataSource::finished, this, []() {
+        static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->finishDrag();
+    });
 
     start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial());
     return true;
@@ -152,7 +175,7 @@ void QWaylandDataDevice::data_device_drop()
         supportedActions = drag->supportedActions();
     } else if (m_dragOffer) {
         dragData = m_dragOffer->mimeData();
-        supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
+        supportedActions = m_dragOffer->supportedActions();
     } else {
         return;
     }
@@ -162,7 +185,11 @@ void QWaylandDataDevice::data_device_drop()
                                                                           QGuiApplication::keyboardModifiers());
 
     if (drag) {
-        static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->finishDrag(response);
+        auto drag =  static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag());
+        drag->setDropResponse(response);
+        drag->finishDrag();
+    } else if (m_dragOffer) {
+        m_dragOffer->finish();
     }
 }
 
@@ -186,7 +213,7 @@ void QWaylandDataDevice::data_device_enter(uint32_t serial, wl_surface *surface,
         supportedActions = drag->supportedActions();
     } else if (m_dragOffer) {
         dragData = m_dragOffer->mimeData();
-        supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
+        supportedActions = m_dragOffer->supportedActions();
     }
 
     const QPlatformDragQtResponse &response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions,
@@ -197,11 +224,7 @@ void QWaylandDataDevice::data_device_enter(uint32_t serial, wl_surface *surface,
         static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response);
     }
 
-    if (response.isAccepted()) {
-        wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData());
-    } else {
-        wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, nullptr);
-    }
+    sendResponse(supportedActions, response);
 }
 
 void QWaylandDataDevice::data_device_leave()
@@ -235,10 +258,10 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe
         supportedActions = drag->supportedActions();
     } else {
         dragData = m_dragOffer->mimeData();
-        supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction;
+        supportedActions = m_dragOffer->supportedActions();
     }
 
-    QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions,
+    const QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions,
                                                                           QGuiApplication::mouseButtons(),
                                                                           QGuiApplication::keyboardModifiers());
 
@@ -246,11 +269,7 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe
         static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response);
     }
 
-    if (response.isAccepted()) {
-        wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData());
-    } else {
-        wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, nullptr);
-    }
+    sendResponse(supportedActions, response);
 }
 #endif // QT_CONFIG(draganddrop)
 
@@ -277,14 +296,10 @@ void QWaylandDataDevice::selectionSourceCancelled()
 #if QT_CONFIG(draganddrop)
 void QWaylandDataDevice::dragSourceCancelled()
 {
+    static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->finishDrag();
     m_dragSource.reset();
 }
 
-void QWaylandDataDevice::dragSourceTargetChanged(const QString &mimeType)
-{
-    static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->updateTarget(mimeType);
-}
-
 QPoint QWaylandDataDevice::calculateDragPosition(int x, int y, QWindow *wnd) const
 {
     QPoint pnt(wl_fixed_to_int(x), wl_fixed_to_int(y));
@@ -297,6 +312,33 @@ QPoint QWaylandDataDevice::calculateDragPosition(int x, int y, QWindow *wnd) con
     }
     return pnt;
 }
+
+void QWaylandDataDevice::sendResponse(Qt::DropActions supportedActions, const QPlatformDragQtResponse &response)
+{
+    if (response.isAccepted()) {
+        if (wl_data_device_get_version(object()) >= 3)
+            m_dragOffer->set_actions(dropActionsToWl(supportedActions), dropActionsToWl(response.acceptedAction()));
+
+        m_dragOffer->accept(m_enterSerial, m_dragOffer->firstFormat());
+    } else {
+        m_dragOffer->accept(m_enterSerial, QString());
+    }
+}
+
+int QWaylandDataDevice::dropActionsToWl(Qt::DropActions actions)
+{
+
+    int wlActions = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE;
+    if (actions & Qt::CopyAction)
+        wlActions |= WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY;
+    if (actions & (Qt::MoveAction | Qt::TargetMoveAction))
+        wlActions |= WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
+
+    // wayland does not support LinkAction at the time of writing
+    return wlActions;
+}
+
+
 #endif // QT_CONFIG(draganddrop)
 
 }
diff --git a/qtwayland/src/client/qwaylanddatadevice_p.h b/qtwayland/src/client/qwaylanddatadevice_p.h
index 16c3ad28..801dcc2c 100644
--- a/qtwayland/src/client/qwaylanddatadevice_p.h
+++ b/qtwayland/src/client/qwaylanddatadevice_p.h
@@ -64,6 +64,7 @@ QT_REQUIRE_CONFIG(wayland_datadevice);
 QT_BEGIN_NAMESPACE
 
 class QMimeData;
+class QPlatformDragQtResponse;
 class QWindow;
 
 namespace QtWaylandClient {
@@ -89,7 +90,7 @@ public:
 
 #if QT_CONFIG(draganddrop)
     QWaylandDataOffer *dragOffer() const;
-    bool startDrag(QMimeData *mimeData, QWaylandWindow *icon);
+    bool startDrag(QMimeData *mimeData, Qt::DropActions supportedActions, QWaylandWindow *icon);
     void cancelDrag();
 #endif
 
@@ -109,13 +110,16 @@ private Q_SLOTS:
 
 #if QT_CONFIG(draganddrop)
     void dragSourceCancelled();
-    void dragSourceTargetChanged(const QString &mimeType);
 #endif
 
 private:
 #if QT_CONFIG(draganddrop)
     QPoint calculateDragPosition(int x, int y, QWindow *wnd) const;
 #endif
+    void sendResponse(Qt::DropActions supportedActions, const QPlatformDragQtResponse &response);
+
+    static int dropActionsToWl(Qt::DropActions dropActions);
+
 
     QWaylandDisplay *m_display = nullptr;
     QWaylandInputDevice *m_inputDevice = nullptr;
diff --git a/qtwayland/src/client/qwaylanddatadevicemanager.cpp b/qtwayland/src/client/qwaylanddatadevicemanager.cpp
index 35d67307..6dc4f77f 100644
--- a/qtwayland/src/client/qwaylanddatadevicemanager.cpp
+++ b/qtwayland/src/client/qwaylanddatadevicemanager.cpp
@@ -50,8 +50,8 @@ QT_BEGIN_NAMESPACE
 
 namespace QtWaylandClient {
 
-QWaylandDataDeviceManager::QWaylandDataDeviceManager(QWaylandDisplay *display, uint32_t id)
-    : wl_data_device_manager(display->wl_registry(), id, 1)
+QWaylandDataDeviceManager::QWaylandDataDeviceManager(QWaylandDisplay *display, int version, uint32_t id)
+    : wl_data_device_manager(display->wl_registry(), id, qMin(version, 3))
     , m_display(display)
 {
     // Create transfer devices for all input devices.
diff --git a/qtwayland/src/client/qwaylanddatadevicemanager_p.h b/qtwayland/src/client/qwaylanddatadevicemanager_p.h
index bd05c0fb..510d9be4 100644
--- a/qtwayland/src/client/qwaylanddatadevicemanager_p.h
+++ b/qtwayland/src/client/qwaylanddatadevicemanager_p.h
@@ -68,7 +68,7 @@ class QWaylandInputDevice;
 class Q_WAYLAND_CLIENT_EXPORT QWaylandDataDeviceManager : public QtWayland::wl_data_device_manager
 {
 public:
-    QWaylandDataDeviceManager(QWaylandDisplay *display, uint32_t id);
+    QWaylandDataDeviceManager(QWaylandDisplay *display, int version, uint32_t id);
     ~QWaylandDataDeviceManager() override;
 
     QWaylandDataDevice *getDataDevice(QWaylandInputDevice *inputDevice);
diff --git a/qtwayland/src/client/qwaylanddataoffer.cpp b/qtwayland/src/client/qwaylanddataoffer.cpp
index 2297e8a1..fe0ea8c9 100644
--- a/qtwayland/src/client/qwaylanddataoffer.cpp
+++ b/qtwayland/src/client/qwaylanddataoffer.cpp
@@ -82,6 +82,15 @@ QMimeData *QWaylandDataOffer::mimeData()
     return m_mimeData.data();
 }
 
+Qt::DropActions QWaylandDataOffer::supportedActions() const
+{
+    if (wl_data_offer_get_version(const_cast<::wl_data_offer*>(object())) < 3) {
+        return Qt::MoveAction | Qt::CopyAction;
+    }
+
+    return m_supportedActions;
+}
+
 void QWaylandDataOffer::startReceiving(const QString &mimeType, int fd)
 {
     receive(mimeType, fd);
@@ -93,6 +102,22 @@ void QWaylandDataOffer::data_offer_offer(const QString &mime_type)
     m_mimeData->appendFormat(mime_type);
 }
 
+void QWaylandDataOffer::data_offer_action(uint32_t dnd_action)
+{
+    Q_UNUSED(dnd_action);
+    // This is the compositor telling the drag target what action it should perform
+    // It does not map nicely into Qt final drop semantics, other than pretending there is only one supported action?
+}
+
+void QWaylandDataOffer::data_offer_source_actions(uint32_t source_actions)
+{
+    m_supportedActions = Qt::DropActions();
+    if (source_actions & WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE)
+        m_supportedActions |= Qt::MoveAction;
+    if (source_actions & WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY)
+        m_supportedActions |= Qt::CopyAction;
+}
+
 QWaylandMimeData::QWaylandMimeData(QWaylandAbstractDataOffer *dataOffer)
     : m_dataOffer(dataOffer)
 {
@@ -163,17 +188,18 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QVariant::T
 
 int QWaylandMimeData::readData(int fd, QByteArray &data) const
 {
-    fd_set readset;
-    FD_ZERO(&readset);
-    FD_SET(fd, &readset);
-    struct timeval timeout;
+    struct pollfd readset;
+    readset.fd = fd;
+    readset.events = POLLIN;
+    struct timespec timeout;
     timeout.tv_sec = 1;
-    timeout.tv_usec = 0;
+    timeout.tv_nsec = 0;
+
 
     Q_FOREVER {
-        int ready = select(FD_SETSIZE, &readset, nullptr, nullptr, &timeout);
+        int ready = qt_safe_poll(&readset, 1, &timeout);
         if (ready < 0) {
-            qWarning() << "QWaylandDataOffer: select() failed";
+            qWarning() << "QWaylandDataOffer: qt_safe_poll() failed";
             return -1;
         } else if (ready == 0) {
             qWarning("QWaylandDataOffer: timeout reading from pipe");
diff --git a/qtwayland/src/client/qwaylanddataoffer_p.h b/qtwayland/src/client/qwaylanddataoffer_p.h
index 9cf1483c..6f667398 100644
--- a/qtwayland/src/client/qwaylanddataoffer_p.h
+++ b/qtwayland/src/client/qwaylanddataoffer_p.h
@@ -82,6 +82,7 @@ public:
     explicit QWaylandDataOffer(QWaylandDisplay *display, struct ::wl_data_offer *offer);
     ~QWaylandDataOffer() override;
     QMimeData *mimeData() override;
+    Qt::DropActions supportedActions() const;
 
     QString firstFormat() const;
 
@@ -89,10 +90,13 @@ public:
 
 protected:
     void data_offer_offer(const QString &mime_type) override;
+    void data_offer_source_actions(uint32_t source_actions) override;
+    void data_offer_action(uint32_t dnd_action) override;
 
 private:
     QWaylandDisplay *m_display = nullptr;
     QScopedPointer<QWaylandMimeData> m_mimeData;
+    Qt::DropActions m_supportedActions;
 };
 
 
diff --git a/qtwayland/src/client/qwaylanddatasource.cpp b/qtwayland/src/client/qwaylanddatasource.cpp
index f45122fb..5599cbd4 100644
--- a/qtwayland/src/client/qwaylanddatasource.cpp
+++ b/qtwayland/src/client/qwaylanddatasource.cpp
@@ -101,7 +101,32 @@ void QWaylandDataSource::data_source_send(const QString &mime_type, int32_t fd)
 
 void QWaylandDataSource::data_source_target(const QString &mime_type)
 {
-    Q_EMIT targetChanged(mime_type);
+    m_accepted = !mime_type.isEmpty();
+    Q_EMIT dndResponseUpdated(m_accepted, m_dropAction);
+}
+
+void QWaylandDataSource::data_source_action(uint32_t action)
+{
+    Qt::DropAction qtAction = Qt::IgnoreAction;
+
+    if (action == WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE)
+        qtAction = Qt::MoveAction;
+    else if (action == WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY)
+        qtAction = Qt::CopyAction;
+
+    m_dropAction = qtAction;
+    Q_EMIT dndResponseUpdated(m_accepted, m_dropAction);
+}
+
+void QWaylandDataSource::data_source_dnd_finished()
+{
+    Q_EMIT finished();
+}
+
+void QWaylandDataSource::data_source_dnd_drop_performed()
+{
+
+    Q_EMIT dndDropped(m_accepted, m_dropAction);
 }
 
 }
diff --git a/qtwayland/src/client/qwaylanddatasource_p.h b/qtwayland/src/client/qwaylanddatasource_p.h
index 25afff79..96f07bc3 100644
--- a/qtwayland/src/client/qwaylanddatasource_p.h
+++ b/qtwayland/src/client/qwaylanddatasource_p.h
@@ -77,17 +77,25 @@ public:
     QMimeData *mimeData() const;
 
 Q_SIGNALS:
-    void targetChanged(const QString &mime_type);
     void cancelled();
+    void finished();
+
+    void dndResponseUpdated(bool accepted, Qt::DropAction action);
+    void dndDropped(bool accepted, Qt::DropAction action);
 
 protected:
     void data_source_cancelled() override;
     void data_source_send(const QString &mime_type, int32_t fd) override;
     void data_source_target(const QString &mime_type) override;
+    void data_source_dnd_drop_performed() override;
+    void data_source_dnd_finished() override;
+    void data_source_action(uint32_t action) override;
 
 private:
     QWaylandDisplay *m_display = nullptr;
     QMimeData *m_mime_data = nullptr;
+    bool m_accepted = false;
+    Qt::DropAction m_dropAction = Qt::IgnoreAction;
 };
 
 }
diff --git a/qtwayland/src/client/qwaylanddisplay.cpp b/qtwayland/src/client/qwaylanddisplay.cpp
index f10c1f79..e8613ed8 100644
--- a/qtwayland/src/client/qwaylanddisplay.cpp
+++ b/qtwayland/src/client/qwaylanddisplay.cpp
@@ -85,10 +85,203 @@
 
 #include <errno.h>
 
+#include <tuple> // for std::tie
+
+static void checkWaylandError(struct wl_display *display)
+{
+    int ecode = wl_display_get_error(display);
+    if ((ecode == EPIPE || ecode == ECONNRESET)) {
+        // special case this to provide a nicer error
+        qWarning("The Wayland connection broke. Did the Wayland compositor die?");
+    } else {
+        qWarning("The Wayland connection experienced a fatal error: %s", strerror(ecode));
+    }
+    _exit(1);
+}
+
 QT_BEGIN_NAMESPACE
 
 namespace QtWaylandClient {
 
+class EventThread : public QThread
+{
+    Q_OBJECT
+public:
+    enum OperatingMode {
+        EmitToDispatch, // Emit the signal, allow dispatching in a differnt thread.
+        SelfDispatch, // Dispatch the events inside this thread.
+    };
+
+    EventThread(struct wl_display * wl, struct wl_event_queue * ev_queue,
+                OperatingMode mode)
+        : m_fd(wl_display_get_fd(wl))
+        , m_pipefd{ -1, -1 }
+        , m_wldisplay(wl)
+        , m_wlevqueue(ev_queue)
+        , m_mode(mode)
+        , m_reading(true)
+        , m_quitting(false)
+    {
+        setObjectName(QStringLiteral("WaylandEventThread"));
+    }
+
+    void readAndDispatchEvents()
+    {
+        /*
+         * Dispatch pending events and flush the requests at least once. If the event thread
+         * is not reading, try to call _prepare_read() to allow the event thread to poll().
+         * If that fails, re-try dispatch & flush again until _prepare_read() is successful.
+         *
+         * This allow any call to readAndDispatchEvents() to start event thread's polling,
+         * not only the one issued from event thread's waitForReading(), which means functions
+         * called from dispatch_pending() can safely spin an event loop.
+         */
+        for (;;) {
+            if (dispatchQueuePending() < 0) {
+                checkWaylandError(m_wldisplay);
+                return;
+            }
+
+            wl_display_flush(m_wldisplay);
+
+            // We have to check if event thread is reading every time we dispatch
+            // something, as that may recursively call this function.
+            if (m_reading.loadAcquire())
+                break;
+
+            if (prepareReadQueue() == 0) {
+                QMutexLocker l(&m_mutex);
+                m_reading.storeRelease(true);
+                m_cond.wakeOne();
+                break;
+            }
+        }
+    }
+
+    void stop()
+    {
+        // We have to both write to the pipe and set the flag, as the thread may be
+        // either in the poll() or waiting for _prepare_read().
+        if (m_pipefd[1] != -1 && write(m_pipefd[1], "\0", 1) == -1)
+            qWarning("Failed to write to the pipe: %s.", strerror(errno));
+
+        {
+            QMutexLocker l(&m_mutex);
+            m_quitting = true;
+            m_cond.wakeOne();
+        }
+
+        wait();
+    }
+
+Q_SIGNALS:
+    void needReadAndDispatch();
+
+protected:
+    void run() override
+    {
+        // we use this pipe to make the loop exit otherwise if we simply used a flag on the loop condition, if stop() gets
+        // called while poll() is blocking the thread will never quit since there are no wayland messages coming anymore.
+        struct Pipe
+        {
+            Pipe(int *fds)
+                : fds(fds)
+            {
+                if (qt_safe_pipe(fds) != 0)
+                    qWarning("Pipe creation failed. Quitting may hang.");
+            }
+            ~Pipe()
+            {
+                if (fds[0] != -1) {
+                    close(fds[0]);
+                    close(fds[1]);
+                }
+            }
+
+            int *fds;
+        } pipe(m_pipefd);
+
+        // Make the main thread call wl_prepare_read(), dispatch the pending messages and flush the
+        // outbound ones. Wait until it's done before proceeding, unless we're told to quit.
+        while (waitForReading()) {
+            pollfd fds[2] = { { m_fd, POLLIN, 0 }, { m_pipefd[0], POLLIN, 0 } };
+            poll(fds, 2, -1);
+
+            if (fds[1].revents & POLLIN) {
+                // we don't really care to read the byte that was written here since we're closing down
+                wl_display_cancel_read(m_wldisplay);
+                break;
+            }
+
+            if (fds[0].revents & POLLIN)
+                wl_display_read_events(m_wldisplay);
+                // The polll was succesfull and the event thread did the wl_display_read_events(). On the next iteration of the loop
+                // the event sent to the main thread will cause it to dispatch the messages just read, unless the loop exits in which
+                // case we don't care anymore about them.
+            else
+                wl_display_cancel_read(m_wldisplay);
+        }
+    }
+
+private:
+    bool waitForReading()
+    {
+        Q_ASSERT(QThread::currentThread() == this);
+
+        m_reading.storeRelease(false);
+
+        if (m_mode == SelfDispatch) {
+            readAndDispatchEvents();
+        } else {
+            Q_EMIT needReadAndDispatch();
+
+            QMutexLocker lock(&m_mutex);
+            // m_reading might be set from our emit or some other invocation of
+            // readAndDispatchEvents().
+            while (!m_reading.loadRelaxed() && !m_quitting)
+                m_cond.wait(&m_mutex);
+        }
+
+        return !m_quitting;
+    }
+
+    int dispatchQueuePending()
+    {
+        if (m_wlevqueue)
+            return wl_display_dispatch_queue_pending(m_wldisplay, m_wlevqueue);
+        else
+            return wl_display_dispatch_pending(m_wldisplay);
+    }
+
+    int prepareReadQueue()
+    {
+        if (m_wlevqueue)
+            return wl_display_prepare_read_queue(m_wldisplay, m_wlevqueue);
+        else
+            return wl_display_prepare_read(m_wldisplay);
+    }
+
+    int m_fd;
+    int m_pipefd[2];
+    wl_display *m_wldisplay;
+    wl_event_queue *m_wlevqueue;
+    OperatingMode m_mode;
+
+    /* Concurrency note when operating in EmitToDispatch mode:
+     * m_reading is set to false inside event thread's waitForReading(), and is
+     * set to true inside main thread's readAndDispatchEvents().
+     * The lock is not taken when setting m_reading to false, as the main thread
+     * is not actively waiting for it to turn false. However, the lock is taken
+     * inside readAndDispatchEvents() before setting m_reading to true,
+     * as the event thread is actively waiting for it under the wait condition.
+     */
+
+    QAtomicInteger<bool> m_reading;
+    bool m_quitting;
+    QMutex m_mutex;
+    QWaitCondition m_cond;
+};
+
 Q_LOGGING_CATEGORY(lcQpaWayland, "qt.qpa.wayland"); // for general (uncategorized) Wayland platform logging
 
 struct wl_surface *QWaylandDisplay::createSurface(void *handle)
@@ -158,17 +351,16 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration)
     if (!mXkbContext)
         qCWarning(lcQpaWayland, "failed to create xkb context");
 #endif
-
-    forceRoundTrip();
-
-    if (!mWaitingScreens.isEmpty()) {
-        // Give wl_output.done and zxdg_output_v1.done events a chance to arrive
-        forceRoundTrip();
-    }
 }
 
 QWaylandDisplay::~QWaylandDisplay(void)
 {
+    if (m_eventThread)
+        m_eventThread->stop();
+
+    if (m_frameEventQueueThread)
+        m_frameEventQueueThread->stop();
+
     if (mSyncCallback)
         wl_callback_destroy(mSyncCallback);
 
@@ -187,6 +379,21 @@ QWaylandDisplay::~QWaylandDisplay(void)
 #endif
     if (mDisplay)
         wl_display_disconnect(mDisplay);
+
+    if (m_frameEventQueue)
+        wl_event_queue_destroy(m_frameEventQueue);
+}
+
+// Steps which is called just after constructor. This separates registry_global() out of the constructor
+// so that factory functions in integration can be overridden.
+void QWaylandDisplay::initialize()
+{
+    forceRoundTrip();
+
+    if (!mWaitingScreens.isEmpty()) {
+        // Give wl_output.done and zxdg_output_v1.done events a chance to arrive
+        forceRoundTrip();
+    }
 }
 
 void QWaylandDisplay::ensureScreen()
@@ -203,98 +410,37 @@ void QWaylandDisplay::ensureScreen()
 
 void QWaylandDisplay::checkError() const
 {
-    int ecode = wl_display_get_error(mDisplay);
-    if ((ecode == EPIPE || ecode == ECONNRESET)) {
-        // special case this to provide a nicer error
-        qWarning("The Wayland connection broke. Did the Wayland compositor die?");
-    } else {
-        qWarning("The Wayland connection experienced a fatal error: %s", strerror(ecode));
-    }
-    _exit(1);
+    checkWaylandError(mDisplay);
 }
 
+// Called in main thread, either from queued signal or directly.
 void QWaylandDisplay::flushRequests()
 {
-    if (wl_display_prepare_read(mDisplay) == 0) {
-        wl_display_read_events(mDisplay);
-    }
-
-    if (wl_display_dispatch_pending(mDisplay) < 0)
-        checkError();
-
-    {
-        QReadLocker locker(&m_frameQueueLock);
-        for (const FrameQueue &q : mExternalQueues) {
-            QMutexLocker locker(q.mutex);
-            while (wl_display_prepare_read_queue(mDisplay, q.queue) != 0)
-                wl_display_dispatch_queue_pending(mDisplay, q.queue);
-            wl_display_read_events(mDisplay);
-            wl_display_dispatch_queue_pending(mDisplay, q.queue);
-        }
-    }
-
-    wl_display_flush(mDisplay);
+    m_eventThread->readAndDispatchEvents();
 }
 
-void QWaylandDisplay::blockingReadEvents()
+// We have to wait until we have an eventDispatcher before creating the eventThread,
+// otherwise forceRoundTrip() may block inside _events_read() because eventThread is
+// polling.
+void QWaylandDisplay::initEventThread()
 {
-    if (wl_display_dispatch(mDisplay) < 0)
-        checkError();
-}
+    m_eventThread.reset(
+            new EventThread(mDisplay, /* default queue */ nullptr, EventThread::EmitToDispatch));
+    connect(m_eventThread.get(), &EventThread::needReadAndDispatch, this,
+            &QWaylandDisplay::flushRequests, Qt::QueuedConnection);
+    m_eventThread->start();
 
-void QWaylandDisplay::destroyFrameQueue(const QWaylandDisplay::FrameQueue &q)
-{
-    QWriteLocker locker(&m_frameQueueLock);
-    auto it = std::find_if(mExternalQueues.begin(),
-                           mExternalQueues.end(),
-                           [&q] (const QWaylandDisplay::FrameQueue &other){ return other.queue == q.queue; });
-    Q_ASSERT(it != mExternalQueues.end());
-    mExternalQueues.erase(it);
-    if (q.queue != nullptr)
-        wl_event_queue_destroy(q.queue);
-    delete q.mutex;
+    // wl_display_disconnect() free this.
+    m_frameEventQueue = wl_display_create_queue(mDisplay);
+    m_frameEventQueueThread.reset(
+            new EventThread(mDisplay, m_frameEventQueue, EventThread::SelfDispatch));
+    m_frameEventQueueThread->start();
 }
 
-QWaylandDisplay::FrameQueue QWaylandDisplay::createFrameQueue()
-{
-    QWriteLocker locker(&m_frameQueueLock);
-    FrameQueue q{createEventQueue()};
-    mExternalQueues.append(q);
-    return q;
-}
-
-wl_event_queue *QWaylandDisplay::createEventQueue()
-{
-    return wl_display_create_queue(mDisplay);
-}
-
-void QWaylandDisplay::dispatchQueueWhile(wl_event_queue *queue, std::function<bool ()> condition, int timeout)
+void QWaylandDisplay::blockingReadEvents()
 {
-    if (!condition())
-        return;
-
-    QElapsedTimer timer;
-    timer.start();
-    struct pollfd pFd = qt_make_pollfd(wl_display_get_fd(mDisplay), POLLIN);
-    while (timeout == -1 || timer.elapsed() < timeout) {
-        while (wl_display_prepare_read_queue(mDisplay, queue) != 0)
-            wl_display_dispatch_queue_pending(mDisplay, queue);
-
-        wl_display_flush(mDisplay);
-
-        const int remaining = qMax(timeout - timer.elapsed(), 0ll);
-        const int pollTimeout = timeout == -1 ? -1 : remaining;
-        if (qt_poll_msecs(&pFd, 1, pollTimeout) > 0)
-            wl_display_read_events(mDisplay);
-        else
-            wl_display_cancel_read(mDisplay);
-
-        if (wl_display_dispatch_queue_pending(mDisplay, queue) < 0)
-            checkError();
-
-        if (!condition())
-            break;
-    }
+    if (wl_display_dispatch(mDisplay) < 0)
+        checkWaylandError(mDisplay);
 }
 
 QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const
@@ -345,7 +491,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
     if (interface == QStringLiteral("wl_output")) {
         mWaitingScreens << new QWaylandScreen(this, version, id);
     } else if (interface == QStringLiteral("wl_compositor")) {
-        mCompositorVersion = qMin((int)version, 3);
+        mCompositorVersion = qMin((int)version, 4);
         mCompositor.init(registry, id, mCompositorVersion);
     } else if (interface == QStringLiteral("wl_shm")) {
         mShm.reset(new QWaylandShm(this, version, id));
@@ -354,7 +500,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
         mInputDevices.append(inputDevice);
 #if QT_CONFIG(wayland_datadevice)
     } else if (interface == QStringLiteral("wl_data_device_manager")) {
-        mDndSelectionHandler.reset(new QWaylandDataDeviceManager(this, id));
+        mDndSelectionHandler.reset(new QWaylandDataDeviceManager(this, version, id));
 #endif
     } else if (interface == QStringLiteral("qt_surface_extension")) {
         mWindowExtension.reset(new QtWayland::qt_surface_extension(registry, id, 1));
@@ -452,9 +598,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data)
 
 void QWaylandDisplay::removeListener(RegistryListener listener, void *data)
 {
-    std::remove_if(mRegistryListeners.begin(), mRegistryListeners.end(), [=](Listener l){
+    auto iter = std::remove_if(mRegistryListeners.begin(), mRegistryListeners.end(), [=](Listener l){
         return (l.listener == listener && l.data == data);
     });
+    mRegistryListeners.erase(iter, mRegistryListeners.end());
 }
 
 uint32_t QWaylandDisplay::currentTimeMillisec()
@@ -467,50 +614,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec()
     return 0;
 }
 
-static void
-sync_callback(void *data, struct wl_callback *callback, uint32_t serial)
-{
-    Q_UNUSED(serial)
-    bool *done = static_cast<bool *>(data);
-
-    *done = true;
-
-    // If the wl_callback done event is received after the condition check in the while loop in
-    // forceRoundTrip(), but before the call to processEvents, the call to processEvents may block
-    // forever if no more events are posted (eventhough the callback is handled in response to the
-    // aboutToBlock signal). Hence, we wake up the event dispatcher so forceRoundTrip may return.
-    // (QTBUG-64696)
-    if (auto *dispatcher = QThread::currentThread()->eventDispatcher())
-        dispatcher->wakeUp();
-
-    wl_callback_destroy(callback);
-}
-
-static const struct wl_callback_listener sync_listener = {
-    sync_callback
-};
-
 void QWaylandDisplay::forceRoundTrip()
 {
-    // wl_display_roundtrip() works on the main queue only,
-    // but we use a separate one, so basically reimplement it here
-    int ret = 0;
-    bool done = false;
-    wl_callback *callback = wl_display_sync(mDisplay);
-    wl_callback_add_listener(callback, &sync_listener, &done);
-    flushRequests();
-    if (QThread::currentThread()->eventDispatcher()) {
-        while (!done && ret >= 0) {
-            QThread::currentThread()->eventDispatcher()->processEvents(QEventLoop::WaitForMoreEvents);
-            ret = wl_display_dispatch_pending(mDisplay);
-        }
-    } else {
-        while (!done && ret >= 0)
-            ret = wl_display_dispatch(mDisplay);
-    }
-
-    if (ret == -1 && !done)
-        wl_callback_destroy(callback);
+     wl_display_roundtrip(mDisplay);
 }
 
 bool QWaylandDisplay::supportsWindowDecoration() const
@@ -574,14 +680,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic
     if (mLastKeyboardFocus == keyboardFocus)
         return;
 
-    if (mWaylandIntegration->mShellIntegration) {
-        mWaylandIntegration->mShellIntegration->handleKeyboardFocusChanged(keyboardFocus, mLastKeyboardFocus);
-    } else {
-        if (keyboardFocus)
-            handleWindowActivated(keyboardFocus);
-        if (mLastKeyboardFocus)
-            handleWindowDeactivated(mLastKeyboardFocus);
-    }
+    if (keyboardFocus)
+        handleWindowActivated(keyboardFocus);
+    if (mLastKeyboardFocus)
+        handleWindowDeactivated(mLastKeyboardFocus);
 
     mLastKeyboardFocus = keyboardFocus;
 }
@@ -600,6 +702,19 @@ void QWaylandDisplay::handleWaylandSync()
     QWindow *activeWindow = mActiveWindows.empty() ? nullptr : mActiveWindows.last()->window();
     if (activeWindow != QGuiApplication::focusWindow())
         QWindowSystemInterface::handleWindowActivated(activeWindow);
+
+    if (!activeWindow) {
+        if (lastInputDevice()) {
+#if QT_CONFIG(clipboard)
+            if (auto *dataDevice = lastInputDevice()->dataDevice())
+                dataDevice->invalidateSelectionOffer();
+#endif
+#if QT_CONFIG(wayland_client_primary_selection)
+            if (auto *device = lastInputDevice()->primarySelectionDevice())
+                device->invalidateSelectionOffer();
+#endif
+        }
+    }
 }
 
 const wl_callback_listener QWaylandDisplay::syncCallbackListener = {
@@ -626,6 +741,13 @@ QWaylandInputDevice *QWaylandDisplay::defaultInputDevice() const
     return mInputDevices.isEmpty() ? 0 : mInputDevices.first();
 }
 
+bool QWaylandDisplay::isKeyboardAvailable() const
+{
+    return std::any_of(
+            mInputDevices.constBegin(), mInputDevices.constEnd(),
+            [this](const QWaylandInputDevice *device) { return device->keyboard() != nullptr; });
+}
+
 #if QT_CONFIG(cursor)
 
 QWaylandCursor *QWaylandDisplay::waylandCursor()
@@ -652,4 +774,6 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p
 
 } // namespace QtWaylandClient
 
+#include "qwaylanddisplay.moc"
+
 QT_END_NAMESPACE
diff --git a/qtwayland/src/client/qwaylanddisplay_p.h b/qtwayland/src/client/qwaylanddisplay_p.h
index 3b092bc8..42bc661d 100644
--- a/qtwayland/src/client/qwaylanddisplay_p.h
+++ b/qtwayland/src/client/qwaylanddisplay_p.h
@@ -109,6 +109,7 @@ class QWaylandSurface;
 class QWaylandShellIntegration;
 class QWaylandCursor;
 class QWaylandCursorTheme;
+class EventThread;
 
 typedef void (*RegistryListener)(void *data,
                                  struct wl_registry *registry,
@@ -120,15 +121,11 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandDisplay : public QObject, public QtWayland
     Q_OBJECT
 
 public:
-    struct FrameQueue {
-        FrameQueue(wl_event_queue *q = nullptr) : queue(q), mutex(new QMutex) {}
-        wl_event_queue *queue;
-        QMutex *mutex;
-    };
-
     QWaylandDisplay(QWaylandIntegration *waylandIntegration);
     ~QWaylandDisplay(void) override;
 
+    void initialize();
+
 #if QT_CONFIG(xkbcommon)
     struct xkb_context *xkbContext() const { return mXkbContext.get(); }
 #endif
@@ -210,11 +207,11 @@ public:
     void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice);
     void handleWindowDestroyed(QWaylandWindow *window);
 
-    wl_event_queue *createEventQueue();
-    FrameQueue createFrameQueue();
-    void destroyFrameQueue(const FrameQueue &q);
-    void dispatchQueueWhile(wl_event_queue *queue, std::function<bool()> condition, int timeout = -1);
+    wl_event_queue *frameEventQueue() { return m_frameEventQueue; };
+
+    bool isKeyboardAvailable() const;
 
+    void initEventThread();
 public slots:
     void blockingReadEvents();
     void flushRequests();
@@ -237,6 +234,9 @@ private:
     };
 
     struct wl_display *mDisplay = nullptr;
+    QScopedPointer<EventThread> m_eventThread;
+    wl_event_queue *m_frameEventQueue = nullptr;
+    QScopedPointer<EventThread> m_frameEventQueueThread;
     QtWayland::wl_compositor mCompositor;
     QScopedPointer<QWaylandShm> mShm;
     QList<QWaylandScreen *> mWaitingScreens;
@@ -273,11 +273,9 @@ private:
     QWaylandInputDevice *mLastInputDevice = nullptr;
     QPointer<QWaylandWindow> mLastInputWindow;
     QPointer<QWaylandWindow> mLastKeyboardFocus;
-    QVector<QWaylandWindow *> mActiveWindows;
-    QVector<FrameQueue> mExternalQueues;
+    QList<QWaylandWindow *> mActiveWindows;
     struct wl_callback *mSyncCallback = nullptr;
     static const wl_callback_listener syncCallbackListener;
-    QReadWriteLock m_frameQueueLock;
 
     bool mClientSideInputContextRequested = !QPlatformInputContextFactory::requested().isNull();
 
diff --git a/qtwayland/src/client/qwaylanddnd.cpp b/qtwayland/src/client/qwaylanddnd.cpp
index 6535aa16..7c53f5fa 100644
--- a/qtwayland/src/client/qwaylanddnd.cpp
+++ b/qtwayland/src/client/qwaylanddnd.cpp
@@ -66,7 +66,7 @@ void QWaylandDrag::startDrag()
 {
     QBasicDrag::startDrag();
     QWaylandWindow *icon = static_cast<QWaylandWindow *>(shapedPixmapWindow()->handle());
-    if (m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon)) {
+    if (m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), drag()->supportedActions(), icon)) {
         icon->addAttachOffset(-drag()->hotSpot());
     } else {
         // Cancelling immediately does not work, since the event loop for QDrag::exec is started
@@ -80,6 +80,9 @@ void QWaylandDrag::cancel()
     QBasicDrag::cancel();
 
     m_display->currentInputDevice()->dataDevice()->cancelDrag();
+
+    if (drag())
+        drag()->deleteLater();
 }
 
 void QWaylandDrag::move(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods)
@@ -103,33 +106,41 @@ void QWaylandDrag::endDrag()
     m_display->currentInputDevice()->handleEndDrag();
 }
 
-void QWaylandDrag::updateTarget(const QString &mimeType)
+void QWaylandDrag::setResponse(bool accepted)
 {
-    setCanDrop(!mimeType.isEmpty());
-
-    if (canDrop()) {
-        updateCursor(defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers()));
-    } else {
-        updateCursor(Qt::IgnoreAction);
-    }
+    // This method is used for old DataDevices where the drag action is not communicated
+    Qt::DropAction action = defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers());
+    setResponse(QPlatformDropQtResponse(accepted, action));
 }
 
-void QWaylandDrag::setResponse(const QPlatformDragQtResponse &response)
+void QWaylandDrag::setResponse(const QPlatformDropQtResponse &response)
 {
     setCanDrop(response.isAccepted());
 
     if (canDrop()) {
-        updateCursor(defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers()));
+        updateCursor(response.acceptedAction());
     } else {
         updateCursor(Qt::IgnoreAction);
     }
 }
 
-void QWaylandDrag::finishDrag(const QPlatformDropQtResponse &response)
+void QWaylandDrag::setDropResponse(const QPlatformDropQtResponse &response)
 {
     setExecutedDropAction(response.acceptedAction());
+}
+
+void QWaylandDrag::finishDrag()
+{
     QKeyEvent event(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier);
     eventFilter(shapedPixmapWindow(), &event);
+
+    if (drag())
+        drag()->deleteLater();
+}
+
+bool QWaylandDrag::ownsDragObject() const
+{
+    return true;
 }
 
 }
diff --git a/qtwayland/src/client/qwaylanddnd_p.h b/qtwayland/src/client/qwaylanddnd_p.h
index 474fe2ab..46f629ac 100644
--- a/qtwayland/src/client/qwaylanddnd_p.h
+++ b/qtwayland/src/client/qwaylanddnd_p.h
@@ -71,9 +71,10 @@ public:
     QWaylandDrag(QWaylandDisplay *display);
     ~QWaylandDrag() override;
 
-    void updateTarget(const QString &mimeType);
-    void setResponse(const QPlatformDragQtResponse &response);
-    void finishDrag(const QPlatformDropQtResponse &response);
+    void setResponse(bool accepted);
+    void setResponse(const QPlatformDropQtResponse &response);
+    void setDropResponse(const QPlatformDropQtResponse &response);
+    void finishDrag();
 
 protected:
     void startDrag() override;
@@ -82,6 +83,7 @@ protected:
     void drop(const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods) override;
     void endDrag() override;
 
+    bool ownsDragObject() const override;
 
 private:
     QWaylandDisplay *m_display = nullptr;
diff --git a/qtwayland/src/client/qwaylandinputcontext.cpp b/qtwayland/src/client/qwaylandinputcontext.cpp
index 8b79c08f..84a34674 100644
--- a/qtwayland/src/client/qwaylandinputcontext.cpp
+++ b/qtwayland/src/client/qwaylandinputcontext.cpp
@@ -387,8 +387,10 @@ void QWaylandTextInput::zwp_text_input_v2_input_method_changed(uint32_t serial,
 Qt::KeyboardModifiers QWaylandTextInput::modifiersToQtModifiers(uint32_t modifiers)
 {
     Qt::KeyboardModifiers ret = Qt::NoModifier;
-    for (int i = 0; modifiers >>= 1; ++i) {
-        ret |= m_modifiersMap[i];
+    for (int i = 0; i < m_modifiersMap.size(); ++i) {
+        if (modifiers & (1 << i)) {
+            ret |= m_modifiersMap[i];
+        }
     }
     return ret;
 }
diff --git a/qtwayland/src/client/qwaylandinputdevice.cpp b/qtwayland/src/client/qwaylandinputdevice.cpp
index 613fe862..4b90de84 100644
--- a/qtwayland/src/client/qwaylandinputdevice.cpp
+++ b/qtwayland/src/client/qwaylandinputdevice.cpp
@@ -685,6 +685,11 @@ public:
 
 void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surface *surface)
 {
+    invalidateFocus();
+    mButtons = Qt::NoButton;
+
+    mParent->mTime = time;
+
     // The event may arrive after destroying the window, indicated by
     // a null surface.
     if (!surface)
@@ -696,11 +701,6 @@ void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surfac
 
     if (!QWaylandWindow::mouseGrab())
         setFrameEvent(new LeaveEvent(window, mSurfacePos, mGlobalPos));
-
-    invalidateFocus();
-    mButtons = Qt::NoButton;
-
-    mParent->mTime = time;
 }
 
 class MotionEvent : public QWaylandPointerEvent
@@ -1300,14 +1300,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed()
 void QWaylandInputDevice::Keyboard::handleFocusLost()
 {
     mFocus = nullptr;
-#if QT_CONFIG(clipboard)
-    if (auto *dataDevice = mParent->dataDevice())
-        dataDevice->invalidateSelectionOffer();
-#endif
-#if QT_CONFIG(wayland_client_primary_selection)
-    if (auto *device = mParent->primarySelectionDevice())
-        device->invalidateSelectionOffer();
-#endif
     mParent->mQDisplay->handleKeyboardFocusChanged(mParent);
     mRepeatTimer.stop();
 }
@@ -1396,6 +1388,7 @@ void QWaylandInputDevice::Touch::touch_cancel()
     if (touchExt)
         touchExt->touchCanceled();
 
+    mFocus = nullptr;
     QWindowSystemInterface::handleTouchCancelEvent(nullptr, mParent->mTouchDevice);
 }
 
diff --git a/qtwayland/src/client/qwaylandintegration.cpp b/qtwayland/src/client/qwaylandintegration.cpp
index c53ccb78..fbf00c6b 100644
--- a/qtwayland/src/client/qwaylandintegration.cpp
+++ b/qtwayland/src/client/qwaylandintegration.cpp
@@ -192,14 +192,18 @@ QAbstractEventDispatcher *QWaylandIntegration::createEventDispatcher() const
 
 void QWaylandIntegration::initialize()
 {
+    mDisplay->initEventThread();
+
+    // Call after eventDispatcher is fully connected, for QWaylandDisplay::forceRoundTrip()
+    mDisplay->initialize();
+
+    // But the aboutToBlock() and awake() should be connected after initializePlatform().
+    // Otherwise the connected flushRequests() may consumes up all events before processEvents starts to wait,
+    // so that processEvents(QEventLoop::WaitForMoreEvents) may be blocked in the forceRoundTrip().
     QAbstractEventDispatcher *dispatcher = QGuiApplicationPrivate::eventDispatcher;
     QObject::connect(dispatcher, SIGNAL(aboutToBlock()), mDisplay.data(), SLOT(flushRequests()));
     QObject::connect(dispatcher, SIGNAL(awake()), mDisplay.data(), SLOT(flushRequests()));
 
-    int fd = wl_display_get_fd(mDisplay->wl_display());
-    QSocketNotifier *sn = new QSocketNotifier(fd, QSocketNotifier::Read, mDisplay.data());
-    QObject::connect(sn, SIGNAL(activated(QSocketDescriptor)), mDisplay.data(), SLOT(flushRequests()));
-
     // Qt does not support running with no screens
     mDisplay->ensureScreen();
 }
@@ -262,6 +266,14 @@ QWaylandDisplay *QWaylandIntegration::display() const
     return mDisplay.data();
 }
 
+Qt::KeyboardModifiers QWaylandIntegration::queryKeyboardModifiers() const
+{
+    if (auto *seat = mDisplay->currentInputDevice()) {
+        return seat->modifiers();
+    }
+    return Qt::NoModifier;
+}
+
 QList<int> QWaylandIntegration::possibleKeys(const QKeyEvent *event) const
 {
     if (auto *seat = mDisplay->currentInputDevice())
@@ -479,7 +491,7 @@ void QWaylandIntegration::reconfigureInputContext()
     }
 #endif
 
-    qCDebug(lcQpaWayland) << "using input method:" << inputContext()->metaObject()->className();
+    qCDebug(lcQpaWayland) << "using input method:" << (inputContext() ? inputContext()->metaObject()->className() : "<none>");
 }
 
 QWaylandShellIntegration *QWaylandIntegration::createShellIntegration(const QString &integrationName)
diff --git a/qtwayland/src/client/qwaylandintegration_p.h b/qtwayland/src/client/qwaylandintegration_p.h
index ff70ae25..73b80658 100644
--- a/qtwayland/src/client/qwaylandintegration_p.h
+++ b/qtwayland/src/client/qwaylandintegration_p.h
@@ -107,6 +107,8 @@ public:
 
     QWaylandDisplay *display() const;
 
+    Qt::KeyboardModifiers queryKeyboardModifiers() const override;
+
     QList<int> possibleKeys(const QKeyEvent *event) const override;
 
     QStringList themeNames() const override;
diff --git a/qtwayland/src/client/qwaylandscreen.cpp b/qtwayland/src/client/qwaylandscreen.cpp
index 6cb337de..7c2d9be3 100644
--- a/qtwayland/src/client/qwaylandscreen.cpp
+++ b/qtwayland/src/client/qwaylandscreen.cpp
@@ -72,7 +72,7 @@ QWaylandScreen::QWaylandScreen(QWaylandDisplay *waylandDisplay, int version, uin
         qCWarning(lcQpaWayland) << "wl_output done event not supported by compositor,"
                                 << "QScreen may not work correctly";
         mWaylandDisplay->forceRoundTrip(); // Give the compositor a chance to send geometry etc.
-        mOutputDone = true; // Fake the done event
+        mProcessedEvents |= OutputDoneEvent; // Fake the done event
         maybeInitialize();
     }
 }
@@ -83,14 +83,25 @@ QWaylandScreen::~QWaylandScreen()
         zxdg_output_v1::destroy();
 }
 
+uint QWaylandScreen::requiredEvents() const
+{
+    uint ret = OutputDoneEvent;
+
+    if (mWaylandDisplay->xdgOutputManager()) {
+        ret |= XdgOutputNameEvent;
+
+        if (mWaylandDisplay->xdgOutputManager()->version() < 3)
+            ret |= XdgOutputDoneEvent;
+    }
+    return ret;
+}
+
 void QWaylandScreen::maybeInitialize()
 {
     Q_ASSERT(!mInitialized);
 
-    if (!mOutputDone)
-        return;
-
-    if (mWaylandDisplay->xdgOutputManager() && !mXdgOutputDone)
+    const uint requiredEvents = this->requiredEvents();
+    if ((mProcessedEvents & requiredEvents) != requiredEvents)
         return;
 
     mInitialized = true;
@@ -276,9 +287,8 @@ void QWaylandScreen::output_scale(int32_t factor)
 
 void QWaylandScreen::output_done()
 {
-    mOutputDone = true;
-    if (zxdg_output_v1::isInitialized() && mWaylandDisplay->xdgOutputManager()->version() >= 3)
-        mXdgOutputDone = true;
+    mProcessedEvents |= OutputDoneEvent;
+
     if (mInitialized) {
         updateOutputProperties();
         if (zxdg_output_v1::isInitialized())
@@ -339,7 +349,7 @@ void QWaylandScreen::zxdg_output_v1_done()
     if (Q_UNLIKELY(mWaylandDisplay->xdgOutputManager()->version() >= 3))
         qWarning(lcQpaWayland) << "zxdg_output_v1.done received on version 3 or newer, this is most likely a bug in the compositor";
 
-    mXdgOutputDone = true;
+    mProcessedEvents |= XdgOutputDoneEvent;
     if (mInitialized)
         updateXdgOutputProperties();
     else
@@ -348,7 +358,11 @@ void QWaylandScreen::zxdg_output_v1_done()
 
 void QWaylandScreen::zxdg_output_v1_name(const QString &name)
 {
+    if (Q_UNLIKELY(mInitialized))
+        qWarning(lcQpaWayland) << "zxdg_output_v1.name received after output has been initialized, this is most likely a bug in the compositor";
+
     mOutputName = name;
+    mProcessedEvents |= XdgOutputNameEvent;
 }
 
 void QWaylandScreen::updateXdgOutputProperties()
diff --git a/qtwayland/src/client/qwaylandscreen_p.h b/qtwayland/src/client/qwaylandscreen_p.h
index df1c94f2..050cfdc0 100644
--- a/qtwayland/src/client/qwaylandscreen_p.h
+++ b/qtwayland/src/client/qwaylandscreen_p.h
@@ -116,6 +116,13 @@ public:
     static QWaylandScreen *fromWlOutput(::wl_output *output);
 
 private:
+    enum Event : uint {
+        XdgOutputDoneEvent = 0x1,
+        OutputDoneEvent = 0x2,
+        XdgOutputNameEvent = 0x4,
+    };
+    uint requiredEvents() const;
+
     void output_mode(uint32_t flags, int width, int height, int refresh) override;
     void output_geometry(int32_t x, int32_t y,
                          int32_t width, int32_t height,
@@ -148,8 +155,7 @@ private:
     QSize mPhysicalSize;
     QString mOutputName;
     Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation;
-    bool mOutputDone = false;
-    bool mXdgOutputDone = false;
+    uint mProcessedEvents = 0;
     bool mInitialized = false;
 
 #if QT_CONFIG(cursor)
diff --git a/qtwayland/src/client/qwaylandwindow.cpp b/qtwayland/src/client/qwaylandwindow.cpp
index afdebf55..771c96cc 100644
--- a/qtwayland/src/client/qwaylandwindow.cpp
+++ b/qtwayland/src/client/qwaylandwindow.cpp
@@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
 QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display)
     : QPlatformWindow(window)
     , mDisplay(display)
-    , mFrameQueue(mDisplay->createFrameQueue())
     , mResizeAfterSwap(qEnvironmentVariableIsSet("QT_WAYLAND_RESIZE_AFTER_SWAP"))
 {
     {
@@ -95,9 +94,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display)
 
 QWaylandWindow::~QWaylandWindow()
 {
-    mDisplay->destroyFrameQueue(mFrameQueue);
-    mDisplay->handleWindowDestroyed(this);
-
     delete mWindowDecoration;
 
     if (mSurface)
@@ -243,6 +239,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const
 
 void QWaylandWindow::reset()
 {
+    closeChildPopups();
     delete mShellSurface;
     mShellSurface = nullptr;
     delete mSubSurfaceWindow;
@@ -266,6 +263,8 @@ void QWaylandWindow::reset()
 
     mMask = QRegion();
     mQueuedBuffer = nullptr;
+
+    mDisplay->handleWindowDestroyed(this);
 }
 
 QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface)
@@ -359,11 +358,12 @@ void QWaylandWindow::setGeometry(const QRect &rect)
         if (mWindowDecoration)
             mWindowDecoration->update();
 
-        if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize)
+        if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize) {
+            QMutexLocker lock(&mResizeLock);
             mResizeDirty = true;
-        else
+        } else {
             QWindowSystemInterface::handleGeometryChange(window(), geometry());
-
+        }
         mSentInitialResize = true;
     }
     QRect exposeGeometry(QPoint(), geometry().size());
@@ -374,7 +374,7 @@ void QWaylandWindow::setGeometry(const QRect &rect)
         mShellSurface->setWindowGeometry(windowContentGeometry());
 
     if (isOpaque() && mMask.isEmpty())
-        setOpaqueArea(rect);
+        setOpaqueArea(QRect(QPoint(0, 0), rect.size()));
 }
 
 void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
@@ -399,21 +399,6 @@ void QWaylandWindow::sendExposeEvent(const QRect &rect)
     mLastExposeGeometry = rect;
 }
 
-
-static QVector<QPointer<QWaylandWindow>> activePopups;
-
-void QWaylandWindow::closePopups(QWaylandWindow *parent)
-{
-    while (!activePopups.isEmpty()) {
-        auto popup = activePopups.takeLast();
-        if (popup.isNull())
-            continue;
-        if (popup.data() == parent)
-            return;
-        popup->reset();
-    }
-}
-
 QPlatformScreen *QWaylandWindow::calculateScreenFromSurfaceEvents() const
 {
     QReadLocker lock(&mSurfaceLock);
@@ -433,10 +418,7 @@ void QWaylandWindow::setVisible(bool visible)
     lastVisible = visible;
 
     if (visible) {
-        if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip)
-            activePopups << this;
         initWindow();
-        mDisplay->flushRequests();
 
         setGeometry(windowGeometry());
         // Don't flush the events here, or else the newly visible window may start drawing, but since
@@ -444,7 +426,6 @@ void QWaylandWindow::setVisible(bool visible)
         // QWaylandShmBackingStore::beginPaint().
     } else {
         sendExposeEvent(QRect());
-        closePopups(this);
         reset();
     }
 }
@@ -556,12 +537,12 @@ void QWaylandWindow::sendRecursiveExposeEvent()
 
 void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y)
 {
-    Q_ASSERT(!buffer->committed());
     QReadLocker locker(&mSurfaceLock);
     if (mSurface == nullptr)
         return;
 
     if (buffer) {
+        Q_ASSERT(!buffer->committed());
         handleUpdate();
         buffer->setBusy();
 
@@ -583,7 +564,11 @@ void QWaylandWindow::damage(const QRect &rect)
     if (mSurface == nullptr)
         return;
 
-    mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+    const int s = scale();
+    if (mDisplay->compositorVersion() >= 4)
+        mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+    else
+        mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
 }
 
 void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage)
@@ -619,8 +604,14 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
         return;
 
     attachOffset(buffer);
-    for (const QRect &rect: damage)
-        mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+    if (mDisplay->compositorVersion() >= 4) {
+        const int s = scale();
+        for (const QRect &rect: damage)
+            mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+    } else {
+        for (const QRect &rect: damage)
+            mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+    }
     Q_ASSERT(!buffer->committed());
     buffer->setCommitted();
     mSurface->commit();
@@ -635,42 +626,50 @@ void QWaylandWindow::commit()
 
 const wl_callback_listener QWaylandWindow::callbackListener = {
     [](void *data, wl_callback *callback, uint32_t time) {
-        Q_UNUSED(callback);
         Q_UNUSED(time);
         auto *window = static_cast<QWaylandWindow*>(data);
+
+        Q_ASSERT(callback == window->mFrameCallback);
+        wl_callback_destroy(callback);
+        window->mFrameCallback = nullptr;
+
         window->handleFrameCallback();
     }
 };
 
 void QWaylandWindow::handleFrameCallback()
 {
+    QMutexLocker locker(&mFrameSyncMutex);
+
     mWaitingForFrameCallback = false;
     mFrameCallbackElapsedTimer.invalidate();
 
     // The rest can wait until we can run it on the correct thread
-    if (!mWaitingForUpdateDelivery) {
-        auto doHandleExpose = [this]() {
-            bool wasExposed = isExposed();
-            mFrameCallbackTimedOut = false;
-            if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed?
-                sendExposeEvent(QRect(QPoint(), geometry().size()));
-            if (wasExposed && hasPendingUpdateRequest())
-                deliverUpdateRequest();
-
-            mWaitingForUpdateDelivery = false;
-        };
+    auto doHandleExpose = [this]() {
+        mWaitingForUpdateDelivery.storeRelease(false);
+        bool wasExposed = isExposed();
+        mFrameCallbackTimedOut = false;
+        if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed?
+            sendExposeEvent(QRect(QPoint(), geometry().size()));
+        if (wasExposed && hasPendingUpdateRequest())
+            deliverUpdateRequest();
+    };
 
+    if (mWaitingForUpdateDelivery.testAndSetAcquire(false, true)) {
         // Queued connection, to make sure we don't call handleUpdate() from inside waitForFrameSync()
         // in the single-threaded case.
-        mWaitingForUpdateDelivery = true;
         QMetaObject::invokeMethod(this, doHandleExpose, Qt::QueuedConnection);
     }
+
+    mFrameSyncWait.notify_all();
 }
 
 bool QWaylandWindow::waitForFrameSync(int timeout)
 {
-    QMutexLocker locker(mFrameQueue.mutex);
-    mDisplay->dispatchQueueWhile(mFrameQueue.queue, [&]() { return mWaitingForFrameCallback; }, timeout);
+    QMutexLocker locker(&mFrameSyncMutex);
+
+    QDeadlineTimer deadline(timeout);
+    while (mWaitingForFrameCallback && mFrameSyncWait.wait(&mFrameSyncMutex, deadline)) { }
 
     if (mWaitingForFrameCallback) {
         qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
@@ -821,7 +820,7 @@ bool QWaylandWindow::createDecoration()
         decoration = false;
     if (mSubSurfaceWindow)
         decoration = false;
-    if (mShellSurface && !mShellSurface->wantsDecorations())
+    if (!mShellSurface || !mShellSurface->wantsDecorations())
         decoration = false;
 
     bool hadDecoration = mWindowDecoration;
@@ -868,6 +867,17 @@ bool QWaylandWindow::createDecoration()
             subsurf->set_position(pos.x() + m.left(), pos.y() + m.top());
         }
         sendExposeEvent(QRect(QPoint(), geometry().size()));
+
+        // This is a special case where the buffer is recreated, but since
+        // the content rect remains the same, the widgets remain the same
+        // size and are not redrawn, leaving the new buffer empty. As a simple
+        // work-around, we trigger a full extra update whenever the client-side
+        // window decorations are toggled while the window is showing.
+        // Note: createDecoration() is sometimes called from the render thread
+        // of Qt Quick. This is essentially wrong and could potentially cause problems,
+        // but until the underlying issue has been fixed, we have to use invokeMethod()
+        // here to avoid asserts.
+        QMetaObject::invokeMethod(window(), &QWindow::requestUpdate);
     }
 
     return mWindowDecoration;
@@ -1094,10 +1104,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab)
     return true;
 }
 
+Qt::WindowStates QWaylandWindow::windowStates() const
+{
+    return mLastReportedWindowStates;
+}
+
 void QWaylandWindow::handleWindowStatesChanged(Qt::WindowStates states)
 {
     createDecoration();
-    QWindowSystemInterface::handleWindowStateChanged(window(), states, mLastReportedWindowStates);
+    Qt::WindowStates statesWithoutActive = states & ~Qt::WindowActive;
+    Qt::WindowStates lastStatesWithoutActive = mLastReportedWindowStates & ~Qt::WindowActive;
+    QWindowSystemInterface::handleWindowStateChanged(window(), statesWithoutActive,
+                                                     lastStatesWithoutActive);
     mLastReportedWindowStates = states;
 }
 
@@ -1160,8 +1178,11 @@ void QWaylandWindow::requestUpdate()
     Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA
 
     // If we have a frame callback all is good and will be taken care of there
-    if (mWaitingForFrameCallback)
-        return;
+    {
+        QMutexLocker locker(&mFrameSyncMutex);
+        if (mWaitingForFrameCallback)
+            return;
+    }
 
     // If we've already called deliverUpdateRequest(), but haven't seen any attach+commit/swap yet
     // This is a somewhat redundant behavior and might indicate a bug in the calling code, so log
@@ -1174,7 +1195,12 @@ void QWaylandWindow::requestUpdate()
     // so use invokeMethod to delay the delivery a bit.
     QMetaObject::invokeMethod(this, [this] {
         // Things might have changed in the meantime
-        if (hasPendingUpdateRequest() && !mWaitingForFrameCallback)
+        {
+            QMutexLocker locker(&mFrameSyncMutex);
+            if (mWaitingForFrameCallback)
+                return;
+        }
+        if (hasPendingUpdateRequest())
             deliverUpdateRequest();
     }, Qt::QueuedConnection);
 }
@@ -1185,19 +1211,19 @@ void QWaylandWindow::requestUpdate()
 void QWaylandWindow::handleUpdate()
 {
     qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread();
+
+    if (mWaitingForFrameCallback)
+        return;
+
     // TODO: Should sync subsurfaces avoid requesting frame callbacks?
     QReadLocker lock(&mSurfaceLock);
     if (!mSurface)
         return;
 
-    if (mFrameCallback) {
-        wl_callback_destroy(mFrameCallback);
-        mFrameCallback = nullptr;
-    }
+    QMutexLocker locker(&mFrameSyncMutex);
 
-    QMutexLocker locker(mFrameQueue.mutex);
     struct ::wl_surface *wrappedSurface = reinterpret_cast<struct ::wl_surface *>(wl_proxy_create_wrapper(mSurface->object()));
-    wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mFrameQueue.queue);
+    wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mDisplay->frameEventQueue());
     mFrameCallback = wl_surface_frame(wrappedSurface);
     wl_proxy_wrapper_destroy(wrappedSurface);
     wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
@@ -1207,6 +1233,8 @@ void QWaylandWindow::handleUpdate()
     // Start a timer for handling the case when the compositor stops sending frame callbacks.
     if (mFrameCallbackTimeout > 0) {
         QMetaObject::invokeMethod(this, [this] {
+            QMutexLocker locker(&mFrameSyncMutex);
+
             if (mWaitingForFrameCallback) {
                 if (mFrameCallbackCheckIntervalTimerId < 0)
                     mFrameCallbackCheckIntervalTimerId = startTimer(mFrameCallbackTimeout);
@@ -1267,6 +1295,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea)
     wl_region_destroy(region);
 }
 
+void QWaylandWindow::addChildPopup(QWaylandWindow *surface) {
+    mChildPopups.append(surface);
+}
+
+void QWaylandWindow::removeChildPopup(QWaylandWindow *surface) {
+    mChildPopups.removeAll(surface);
+}
+
+void QWaylandWindow::closeChildPopups() {
+    while (!mChildPopups.isEmpty()) {
+        auto popup = mChildPopups.takeLast();
+        popup->reset();
+    }
+}
 }
 
 QT_END_NAMESPACE
diff --git a/qtwayland/src/client/qwaylandwindow_p.h b/qtwayland/src/client/qwaylandwindow_p.h
index 01337cff..ea3d1995 100644
--- a/qtwayland/src/client/qwaylandwindow_p.h
+++ b/qtwayland/src/client/qwaylandwindow_p.h
@@ -148,6 +148,7 @@ public:
     void setWindowState(Qt::WindowStates states) override;
     void setWindowFlags(Qt::WindowFlags flags) override;
     void handleWindowStatesChanged(Qt::WindowStates states);
+    Qt::WindowStates windowStates() const;
 
     void raise() override;
     void lower() override;
@@ -206,6 +207,10 @@ public:
     void handleUpdate();
     void deliverUpdateRequest() override;
 
+    void addChildPopup(QWaylandWindow* child);
+    void removeChildPopup(QWaylandWindow* child);
+    void closeChildPopups();
+
 public slots:
     void applyConfigure();
 
@@ -215,7 +220,11 @@ signals:
 
 protected:
     QWaylandDisplay *mDisplay = nullptr;
+
+    // mSurface can be written by the main thread. Other threads should claim a read lock for access
+    mutable QReadWriteLock mSurfaceLock;
     QScopedPointer<QWaylandSurface> mSurface;
+
     QWaylandShellSurface *mShellSurface = nullptr;
     QWaylandSubSurface *mSubSurfaceWindow = nullptr;
     QVector<QWaylandSubSurface *> mChildren;
@@ -227,11 +236,11 @@ protected:
     WId mWindowId;
     bool mWaitingForFrameCallback = false;
     bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out
-    bool mWaitingForUpdateDelivery = false;
+    QAtomicInt mWaitingForUpdateDelivery = false;
     int mFrameCallbackCheckIntervalTimerId = -1;
     QElapsedTimer mFrameCallbackElapsedTimer;
     struct ::wl_callback *mFrameCallback = nullptr;
-    QWaylandDisplay::FrameQueue mFrameQueue;
+    QMutex mFrameSyncMutex;
     QWaitCondition mFrameSyncWait;
 
     // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
@@ -261,6 +270,8 @@ protected:
     QWaylandBuffer *mQueuedBuffer = nullptr;
     QRegion mQueuedBufferDamage;
 
+    QList<QPointer<QWaylandWindow>> mChildPopups;
+
 private:
     void setGeometry_helper(const QRect &rect);
     void initWindow();
@@ -287,8 +298,6 @@ private:
 
     static QWaylandWindow *mMouseGrab;
 
-    mutable QReadWriteLock mSurfaceLock;
-
     friend class QWaylandSubSurface;
 };
 
diff --git a/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h b/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h
index ccad0048..4cc9b3b8 100644
--- a/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h
+++ b/qtwayland/src/client/shellintegration/qwaylandshellintegration_p.h
@@ -73,11 +73,10 @@ public:
         return true;
     }
     virtual QWaylandShellSurface *createShellSurface(QWaylandWindow *window) = 0;
+    // kept for binary compat with layer-shell-qt
     virtual void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) {
-        if (newFocus)
-            m_display->handleWindowActivated(newFocus);
-        if (oldFocus)
-            m_display->handleWindowDeactivated(oldFocus);
+        Q_UNUSED(newFocus);
+        Q_UNUSED(oldFocus);
     }
     virtual void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) {
         Q_UNUSED(resource);
diff --git a/qtwayland/src/compositor/configure.json b/qtwayland/src/compositor/configure.json
index bcfd5215..da95d07b 100644
--- a/qtwayland/src/compositor/configure.json
+++ b/qtwayland/src/compositor/configure.json
@@ -7,6 +7,31 @@
     "testDir": "../../config.tests",
 
     "libraries": {
+        "wayland-client": {
+            "label": "Wayland client library",
+            "headers": "wayland-version.h",
+            "test": {
+                "main": [
+                    "#if WAYLAND_VERSION_MAJOR < 1",
+                    "# error Wayland 1.8.0 or higher required",
+                    "#endif",
+                    "#if WAYLAND_VERSION_MAJOR == 1",
+                    "# if WAYLAND_VERSION_MINOR < 8",
+                    "#  error Wayland 1.8.0 or higher required",
+                    "# endif",
+                    "# if WAYLAND_VERSION_MINOR == 8",
+                    "#  if WAYLAND_VERSION_MICRO < 0",
+                    "#   error Wayland 1.8.0 or higher required",
+                    "#  endif",
+                    "# endif",
+                    "#endif"
+                 ]
+            },
+            "sources": [
+                { "type": "pkgConfig", "args": "wayland-client" },
+                "-lwayland-client"
+            ]
+        },
         "wayland-server": {
             "label": "wayland-server",
             "headers": "wayland-version.h",
@@ -151,8 +176,7 @@
                     "#endif"
                 ]
             },
-            "libs": "-ldrm",
-            "use": "egl"
+            "use": "drm egl"
         },
         "dmabuf-client-buffer": {
             "label": "Linux Client dma-buf Buffer Sharing",
@@ -176,8 +200,7 @@
                     "return 0;"
                 ]
             },
-            "libs": "-ldrm",
-            "use": "egl"
+            "use": "drm egl"
         },
         "vulkan-server-buffer": {
             "label": "Vulkan Buffer Sharing",
@@ -195,7 +218,8 @@
                     "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;",
                     "return 0;"
                 ]
-            }
+            },
+            "use": "wayland-client"
         }
     },
 
diff --git a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
index 7889f575..64140672 100644
--- a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+++ b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
@@ -40,6 +40,7 @@
 #include "qwaylandeglwindow.h"
 
 #include <QtWaylandClient/private/qwaylandscreen_p.h>
+#include <QtWaylandClient/private/qwaylandsurface_p.h>
 #include "qwaylandglcontext.h"
 
 #include <QtEglSupport/private/qeglconvenience_p.h>
@@ -124,6 +125,7 @@ void QWaylandEglWindow::updateSurface(bool create)
         }
         mOffset = QPoint();
     } else {
+        QReadLocker locker(&mSurfaceLock);
         if (m_waylandEglWindow) {
             int current_width, current_height;
             static bool disableResizeCheck = qgetenv("QT_WAYLAND_DISABLE_RESIZECHECK").toInt();
@@ -131,14 +133,16 @@ void QWaylandEglWindow::updateSurface(bool create)
             if (!disableResizeCheck) {
                 wl_egl_window_get_attached_size(m_waylandEglWindow, &current_width, &current_height);
             }
-            if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height())) {
+            if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height()) || m_requestedSize != sizeWithMargins) {
                 wl_egl_window_resize(m_waylandEglWindow, sizeWithMargins.width(), sizeWithMargins.height(), mOffset.x(), mOffset.y());
+                m_requestedSize = sizeWithMargins;
                 mOffset = QPoint();
 
                 m_resize = true;
             }
-        } else if (create && wlSurface()) {
-            m_waylandEglWindow = wl_egl_window_create(wlSurface(), sizeWithMargins.width(), sizeWithMargins.height());
+        } else if (create && mSurface) {
+            m_waylandEglWindow = wl_egl_window_create(mSurface->object(), sizeWithMargins.width(), sizeWithMargins.height());
+            m_requestedSize = sizeWithMargins;
         }
 
         if (!m_eglSurface && m_waylandEglWindow && create) {
diff --git a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
index 5b1f4d56..0079dfef 100644
--- a/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
+++ b/qtwayland/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
@@ -88,6 +88,7 @@ private:
     mutable QOpenGLFramebufferObject *m_contentFBO = nullptr;
 
     QSurfaceFormat m_format;
+    QSize m_requestedSize;
 };
 
 }
diff --git a/qtwayland/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h b/qtwayland/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
index 56a710c3..c6a8b6c6 100644
--- a/qtwayland/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
+++ b/qtwayland/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
@@ -41,6 +41,8 @@
 #include <QtCore/QTextStream>
 #include <QtGui/QOpenGLTexture>
 
+#include <array>
+
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 
diff --git a/qtwayland/src/plugins/decorations/bradient/main.cpp b/qtwayland/src/plugins/decorations/bradient/main.cpp
index e75fda3c..fa885143 100644
--- a/qtwayland/src/plugins/decorations/bradient/main.cpp
+++ b/qtwayland/src/plugins/decorations/bradient/main.cpp
@@ -164,13 +164,10 @@ void QWaylandBradientDecoration::paint(QPaintDevice *device)
     // Window icon
     QIcon icon = waylandWindow()->windowIcon();
     if (!icon.isNull()) {
-        QPixmap pixmap = icon.pixmap(QSize(128, 128));
-        QPixmap scaled = pixmap.scaled(22, 22, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-
         QRectF iconRect(0, 0, 22, 22);
-        p.drawPixmap(iconRect.adjusted(margins().left() + BUTTON_SPACING, 4,
-                                       margins().left() + BUTTON_SPACING, 4),
-                     scaled, iconRect);
+        iconRect.adjust(margins().left() + BUTTON_SPACING, 4,
+                        margins().left() + BUTTON_SPACING, 4),
+        icon.paint(&p, iconRect.toRect());
     }
 
     // Window title
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp
index 85d25e3c..60bdd491 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5.cpp
@@ -47,18 +47,21 @@ QT_BEGIN_NAMESPACE
 
 namespace QtWaylandClient {
 
-QWaylandXdgPopupV5::QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow *window)
+QWaylandXdgPopupV5::QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow* parent, QWaylandWindow *window)
     : QWaylandShellSurface(window)
     , QtWayland::xdg_popup_v5(popup)
+    , m_parent(parent)
     , m_window(window)
 {
     if (window->display()->windowExtension())
         m_extendedWindow = new QWaylandExtendedSurface(window);
+    m_parent->addChildPopup(m_window);
 }
 
 QWaylandXdgPopupV5::~QWaylandXdgPopupV5()
 {
     xdg_popup_destroy(object());
+    m_parent->removeChildPopup(m_window);
     delete m_extendedWindow;
 }
 
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h
index 7494f6a6..d85f130b 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgpopupv5_p.h
@@ -70,7 +70,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandXdgPopupV5 : public QWaylandShellSurface
 {
     Q_OBJECT
 public:
-    QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow *window);
+    QWaylandXdgPopupV5(struct ::xdg_popup_v5 *popup, QWaylandWindow* parent, QWaylandWindow *window);
     ~QWaylandXdgPopupV5() override;
 
 protected:
@@ -78,6 +78,7 @@ protected:
 
 private:
     QWaylandExtendedSurface *m_extendedWindow = nullptr;
+    QWaylandWindow *m_parent = nullptr;
     QWaylandWindow *m_window = nullptr;
 };
 
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp
index 7e242c4a..def8452a 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5.cpp
@@ -84,7 +84,7 @@ QWaylandXdgPopupV5 *QWaylandXdgShellV5::createXdgPopup(QWaylandWindow *window, Q
     int x = position.x() + parentWindow->frameMargins().left();
     int y = position.y() + parentWindow->frameMargins().top();
 
-    auto popup = new QWaylandXdgPopupV5(get_xdg_popup(window->wlSurface(), parentSurface, seat, m_popupSerial, x, y), window);
+    auto popup = new QWaylandXdgPopupV5(get_xdg_popup(window->wlSurface(), parentSurface, seat, m_popupSerial, x, y), parentWindow, window);
     m_popups.append(window);
     QObject::connect(popup, &QWaylandXdgPopupV5::destroyed, [this, window](){
         m_popups.removeOne(window);
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp
index 4e25949f..cfc60939 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp
@@ -85,13 +85,6 @@ QWaylandShellSurface *QWaylandXdgShellV5Integration::createShellSurface(QWayland
     return m_xdgShell->createXdgSurface(window);
 }
 
-void QWaylandXdgShellV5Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) {
-    if (newFocus && qobject_cast<QWaylandXdgPopupV5 *>(newFocus->shellSurface()))
-        m_display->handleWindowActivated(newFocus);
-    if (oldFocus && qobject_cast<QWaylandXdgPopupV5 *>(oldFocus->shellSurface()))
-        m_display->handleWindowDeactivated(oldFocus);
-}
-
 }
 
 QT_END_NAMESPACE
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h
index ce6bdb9e..aed88670 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration_p.h
@@ -67,7 +67,6 @@ public:
     QWaylandXdgShellV5Integration() {}
     bool initialize(QWaylandDisplay *display) override;
     QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override;
-    void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override;
 
 private:
     QScopedPointer<QWaylandXdgShellV5> m_xdgShell;
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
index 8c371661..151c78e3 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
@@ -174,6 +174,7 @@ QWaylandXdgSurfaceV6::Popup::Popup(QWaylandXdgSurfaceV6 *xdgSurface, QWaylandXdg
     , m_xdgSurface(xdgSurface)
     , m_parent(parent)
 {
+    m_parent->window()->addChildPopup(m_xdgSurface->window());
 }
 
 QWaylandXdgSurfaceV6::Popup::~Popup()
@@ -181,6 +182,8 @@ QWaylandXdgSurfaceV6::Popup::~Popup()
     if (isInitialized())
         destroy();
 
+    m_parent->window()->removeChildPopup(m_xdgSurface->window());
+
     if (m_grabbing) {
         auto *shell = m_xdgSurface->m_shell;
         Q_ASSERT(shell->m_topmostGrabbingPopup == this);
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp
index 03164316..e8da8ba1 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration.cpp
@@ -68,20 +68,6 @@ QWaylandShellSurface *QWaylandXdgShellV6Integration::createShellSurface(QWayland
     return m_xdgShell->getXdgSurface(window);
 }
 
-void QWaylandXdgShellV6Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus)
-{
-    if (newFocus) {
-        auto *xdgSurface = qobject_cast<QWaylandXdgSurfaceV6 *>(newFocus->shellSurface());
-        if (xdgSurface && !xdgSurface->handlesActiveState())
-            m_display->handleWindowActivated(newFocus);
-    }
-    if (oldFocus && qobject_cast<QWaylandXdgSurfaceV6 *>(oldFocus->shellSurface())) {
-        auto *xdgSurface = qobject_cast<QWaylandXdgSurfaceV6 *>(oldFocus->shellSurface());
-        if (xdgSurface && !xdgSurface->handlesActiveState())
-            m_display->handleWindowDeactivated(oldFocus);
-    }
-}
-
 }
 
 QT_END_NAMESPACE
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h
index 261f8cbb..c1bcd5c6 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6integration_p.h
@@ -65,7 +65,6 @@ public:
     QWaylandXdgShellV6Integration() {}
     bool initialize(QWaylandDisplay *display) override;
     QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override;
-    void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override;
 
 private:
     QScopedPointer<QWaylandXdgShellV6> m_xdgShell;
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 3a1569f7..79177540 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -67,11 +67,6 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface)
 
 QWaylandXdgSurface::Toplevel::~Toplevel()
 {
-    if (m_applied.states & Qt::WindowActive) {
-        QWaylandWindow *window = m_xdgSurface->window();
-        window->display()->handleWindowDeactivated(window);
-    }
-
     // The protocol spec requires that the decoration object is deleted before xdg_toplevel.
     delete m_decoration;
     m_decoration = nullptr;
@@ -85,16 +80,15 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
     if (!(m_applied.states & (Qt::WindowMaximized|Qt::WindowFullScreen)))
         m_normalSize = m_xdgSurface->m_window->windowFrameGeometry().size();
 
-    if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive))
+    if ((m_pending.states & Qt::WindowActive) && !(m_applied.states & Qt::WindowActive)
+        && !m_xdgSurface->m_window->display()->isKeyboardAvailable())
         m_xdgSurface->m_window->display()->handleWindowActivated(m_xdgSurface->m_window);
 
-    if (!(m_pending.states & Qt::WindowActive) && (m_applied.states & Qt::WindowActive))
+    if (!(m_pending.states & Qt::WindowActive) && (m_applied.states & Qt::WindowActive)
+        && !m_xdgSurface->m_window->display()->isKeyboardAvailable())
         m_xdgSurface->m_window->display()->handleWindowDeactivated(m_xdgSurface->m_window);
 
-    // TODO: none of the other plugins send WindowActive either, but is it on purpose?
-    Qt::WindowStates statesWithoutActive = m_pending.states & ~Qt::WindowActive;
-
-    m_xdgSurface->m_window->handleWindowStatesChanged(statesWithoutActive);
+    m_xdgSurface->m_window->handleWindowStatesChanged(m_pending.states);
 
     if (m_pending.size.isEmpty()) {
         // An empty size in the configure means it's up to the client to choose the size
@@ -105,8 +99,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
         m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size);
     }
 
-    m_xdgSurface->setSizeHints();
-
     m_applied = m_pending;
     qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states;
 }
@@ -203,12 +195,17 @@ QtWayland::xdg_toplevel::resize_edge QWaylandXdgSurface::Toplevel::convertToResi
                 | ((edges & Qt::RightEdge) ? resize_edge_right : 0));
 }
 
-QWaylandXdgSurface::Popup::Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent,
+QWaylandXdgSurface::Popup::Popup(QWaylandXdgSurface *xdgSurface, QWaylandWindow *parent,
                                  QtWayland::xdg_positioner *positioner)
-    : xdg_popup(xdgSurface->get_popup(parent->object(), positioner->object()))
-    , m_xdgSurface(xdgSurface)
+    : m_xdgSurface(xdgSurface)
+    , m_parentXdgSurface(qobject_cast<QWaylandXdgSurface *>(parent->shellSurface()))
     , m_parent(parent)
 {
+
+    init(xdgSurface->get_popup(m_parentXdgSurface ? m_parentXdgSurface->object() : nullptr, positioner->object()));
+    if (m_parent) {
+        m_parent->addChildPopup(m_xdgSurface->window());
+    }
 }
 
 QWaylandXdgSurface::Popup::~Popup()
@@ -216,10 +213,24 @@ QWaylandXdgSurface::Popup::~Popup()
     if (isInitialized())
         destroy();
 
+    if (m_parent) {
+        m_parent->removeChildPopup(m_xdgSurface->window());
+    }
+
     if (m_grabbing) {
         auto *shell = m_xdgSurface->m_shell;
         Q_ASSERT(shell->m_topmostGrabbingPopup == this);
-        shell->m_topmostGrabbingPopup = m_parent->m_popup;
+        shell->m_topmostGrabbingPopup = m_parentXdgSurface ? m_parentXdgSurface->m_popup : nullptr;
+        m_grabbing = false;
+
+        // Synthesize Qt enter/leave events for popup
+        QWindow *leave = nullptr;
+        if (m_xdgSurface && m_xdgSurface->window())
+            leave = m_xdgSurface->window()->window();
+        QWindowSystemInterface::handleLeaveEvent(leave);
+
+        if (QWindow *enter = QGuiApplication::topLevelAt(QCursor::pos()))
+            QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos());
     }
 }
 
@@ -257,6 +268,7 @@ QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *shell, ::xdg_surface *s
                 m_toplevel->set_parent(parentXdgSurface->m_toplevel->object());
         }
     }
+    setSizeHints();
 }
 
 QWaylandXdgSurface::~QWaylandXdgSurface()
@@ -399,8 +411,6 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
 {
     Q_ASSERT(!m_toplevel && !m_popup);
 
-    auto parentXdgSurface = static_cast<QWaylandXdgSurface *>(parent->shellSurface());
-
     auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner());
     // set_popup expects a position relative to the parent
     QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
@@ -413,8 +423,9 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
     positioner->set_anchor(QtWayland::xdg_positioner::anchor_top_left);
     positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right);
     positioner->set_size(m_window->geometry().width(), m_window->geometry().height());
-    m_popup = new Popup(this, parentXdgSurface, positioner);
+    m_popup = new Popup(this, parent, positioner);
     positioner->destroy();
+
     delete positioner;
 }
 
@@ -436,6 +447,23 @@ void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevic
     }
     setPopup(parent);
     m_popup->grab(device, serial);
+
+    // Synthesize Qt enter/leave events for popup
+    if (!parent)
+        return;
+    QWindow *current = QGuiApplication::topLevelAt(QCursor::pos());
+    QWindow *leave = parent->window();
+    if (current != leave)
+        return;
+
+    QWindowSystemInterface::handleLeaveEvent(leave);
+
+    QWindow *enter = nullptr;
+    if (m_popup && m_popup->m_xdgSurface && m_popup->m_xdgSurface->window())
+        enter = m_popup->m_xdgSurface->window()->window();
+
+    if (enter)
+        QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos());
 }
 
 void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
index 0c98be35..28ff76ba 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
@@ -131,14 +131,15 @@ private:
 
     class Popup : public QtWayland::xdg_popup {
     public:
-        Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent, QtWayland::xdg_positioner *positioner);
+        Popup(QWaylandXdgSurface *xdgSurface, QWaylandWindow *parent, QtWayland::xdg_positioner *positioner);
         ~Popup() override;
 
         void grab(QWaylandInputDevice *seat, uint serial);
         void xdg_popup_popup_done() override;
 
         QWaylandXdgSurface *m_xdgSurface = nullptr;
-        QWaylandXdgSurface *m_parent = nullptr;
+        QWaylandXdgSurface *m_parentXdgSurface = nullptr;
+        QWaylandWindow *m_parent = nullptr;
         bool m_grabbing = false;
     };
 
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp
index 8769d971..da0dd6a7 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration.cpp
@@ -69,20 +69,6 @@ QWaylandShellSurface *QWaylandXdgShellIntegration::createShellSurface(QWaylandWi
     return m_xdgShell->getXdgSurface(window);
 }
 
-void QWaylandXdgShellIntegration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus)
-{
-    if (newFocus) {
-        auto *xdgSurface = qobject_cast<QWaylandXdgSurface *>(newFocus->shellSurface());
-        if (xdgSurface && !xdgSurface->handlesActiveState())
-            m_display->handleWindowActivated(newFocus);
-    }
-    if (oldFocus && qobject_cast<QWaylandXdgSurface *>(oldFocus->shellSurface())) {
-        auto *xdgSurface = qobject_cast<QWaylandXdgSurface *>(oldFocus->shellSurface());
-        if (xdgSurface && !xdgSurface->handlesActiveState())
-            m_display->handleWindowDeactivated(oldFocus);
-    }
-}
-
 }
 
 QT_END_NAMESPACE
diff --git a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h
index b6caa6c9..2f929f98 100644
--- a/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h
+++ b/qtwayland/src/plugins/shellintegration/xdg-shell/qwaylandxdgshellintegration_p.h
@@ -65,7 +65,6 @@ public:
     QWaylandXdgShellIntegration() {}
     bool initialize(QWaylandDisplay *display) override;
     QWaylandShellSurface *createShellSurface(QWaylandWindow *window) override;
-    void handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) override;
 
 private:
     QScopedPointer<QWaylandXdgShell> m_xdgShell;
diff --git a/qtwayland/src/shared/qwaylandinputmethodeventbuilder.cpp b/qtwayland/src/shared/qwaylandinputmethodeventbuilder.cpp
index 526d0ef4..f50ccf30 100644
--- a/qtwayland/src/shared/qwaylandinputmethodeventbuilder.cpp
+++ b/qtwayland/src/shared/qwaylandinputmethodeventbuilder.cpp
@@ -39,7 +39,10 @@
 
 #include "qwaylandinputmethodeventbuilder_p.h"
 
+#include <QBrush>
+#include <QGuiApplication>
 #include <QInputMethod>
+#include <QPalette>
 #include <QTextCharFormat>
 
 #ifdef QT_BUILD_WAYLANDCOMPOSITOR_LIB
@@ -81,32 +84,38 @@ void QWaylandInputMethodEventBuilder::addPreeditStyling(uint32_t index, uint32_t
     QTextCharFormat format;
 
     switch (style) {
-    case 0:
-    case 1:
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_NONE:
+        break;
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_DEFAULT:
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_UNDERLINE:
         format.setFontUnderline(true);
         format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
         m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
         break;
-    case 2:
-    case 3:
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_ACTIVE:
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_INACTIVE:
         format.setFontWeight(QFont::Bold);
         format.setFontUnderline(true);
         format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
         m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
         break;
-    case 4:
-        format.setFontUnderline(true);
-        format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
-        m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_HIGHLIGHT:
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_SELECTION:
+        {
+            format.setFontUnderline(true);
+            format.setUnderlineStyle(QTextCharFormat::SingleUnderline);
+            QPalette palette = qApp->palette();
+            format.setBackground(QBrush(palette.color(QPalette::Active, QPalette::Highlight)));
+            format.setForeground(QBrush(palette.color(QPalette::Active, QPalette::HighlightedText)));
+            m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
+        }
         break;
-    case 5:
+    case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_INCORRECT:
         format.setFontUnderline(true);
         format.setUnderlineStyle(QTextCharFormat::WaveUnderline);
         format.setUnderlineColor(QColor(Qt::red));
         m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format));
         break;
-//    case QtWayland::wl_text_input::preedit_style_selection:
-//    case QtWayland::wl_text_input::preedit_style_none:
     default:
         break;
     }
@@ -153,7 +162,7 @@ QInputMethodEvent QWaylandInputMethodEventBuilder::buildPreedit(const QString &t
 
     if (m_preeditCursor < 0) {
         attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, 0, 0, QVariant()));
-    } else if (m_preeditCursor > 0) {
+    } else {
         attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, indexFromWayland(text, m_preeditCursor), 1, QVariant()));
     }
 
diff --git a/qtwayland/src/shared/qwaylandmimehelper.cpp b/qtwayland/src/shared/qwaylandmimehelper.cpp
index a5fdd34d..e2fe1928 100644
--- a/qtwayland/src/shared/qwaylandmimehelper.cpp
+++ b/qtwayland/src/shared/qwaylandmimehelper.cpp
@@ -60,7 +60,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString &
             buf.open(QIODevice::ReadWrite);
             QByteArray fmt = "BMP";
             if (mimeType.startsWith(QLatin1String("image/"))) {
-                QByteArray imgFmt = mimeType.mid(6).toUpper().toLatin1();
+                QByteArray imgFmt = mimeType.mid(6).toLower().toLatin1();
                 if (QImageWriter::supportedImageFormats().contains(imgFmt))
                     fmt = imgFmt;
             }
@@ -74,7 +74,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString &
         QList<QUrl> urls = mimeData->urls();
         for (int i = 0; i < urls.count(); ++i) {
             content.append(urls.at(i).toEncoded());
-            content.append('\n');
+            content.append("\r\n");
         }
     } else {
         content = mimeData->data(mimeType);
diff --git a/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp b/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp
index 1568b3b9..067410d0 100644
--- a/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp
+++ b/qtwayland/tests/auto/client/datadevicev1/tst_datadevicev1.cpp
@@ -35,7 +35,7 @@
 
 using namespace MockCompositor;
 
-constexpr int dataDeviceVersion = 1;
+constexpr int dataDeviceVersion = 3;
 
 class DataDeviceCompositor : public DefaultCompositor {
 public:
diff --git a/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp b/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp
index 9312c2e5..2ea382f1 100644
--- a/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp
+++ b/qtwayland/tests/auto/client/seatv5/tst_seatv5.cpp
@@ -73,6 +73,7 @@ private slots:
     void multiTouch();
     void multiTouchUpAndMotionFrame();
     void tapAndMoveInSameFrame();
+    void cancelTouch();
 };
 
 void tst_seatv5::bindsToSeat()
@@ -646,5 +647,34 @@ void tst_seatv5::tapAndMoveInSameFrame()
     QTRY_COMPARE(window.m_events.last().touchPoints.first().state(), Qt::TouchPointState::TouchPointReleased);
 }
 
+void tst_seatv5::cancelTouch()
+{
+    TouchWindow window;
+    QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial);
+
+    exec([=] {
+        auto *t = touch();
+        auto *c = client();
+        t->sendDown(xdgToplevel()->surface(), {32, 32}, 1);
+        t->sendFrame(c);
+        t->sendCancel(c);
+        t->sendFrame(c);
+    });
+
+    QTRY_VERIFY(!window.m_events.empty());
+    {
+        auto e = window.m_events.takeFirst();
+        QCOMPARE(e.type, QEvent::TouchBegin);
+        QCOMPARE(e.touchPointStates, Qt::TouchPointPressed);
+        QCOMPARE(e.touchPoints.length(), 1);
+        QCOMPARE(e.touchPoints.first().pos(), QPointF(32-window.frameMargins().left(), 32-window.frameMargins().top()));
+    }
+    {
+        auto e = window.m_events.takeFirst();
+        QCOMPARE(e.type, QEvent::TouchCancel);
+        QCOMPARE(e.touchPoints.length(), 0);
+    }
+}
+
 QCOMPOSITOR_TEST_MAIN(tst_seatv5)
 #include "tst_seatv5.moc"
diff --git a/qtwayland/tests/auto/client/shared/corecompositor.cpp b/qtwayland/tests/auto/client/shared/corecompositor.cpp
index 5c6c83ba..fa9b7662 100644
--- a/qtwayland/tests/auto/client/shared/corecompositor.cpp
+++ b/qtwayland/tests/auto/client/shared/corecompositor.cpp
@@ -27,6 +27,7 @@
 ****************************************************************************/
 
 #include "corecompositor.h"
+#include <thread>
 
 namespace MockCompositor {
 
diff --git a/qtwayland/tests/auto/client/shared/coreprotocol.cpp b/qtwayland/tests/auto/client/shared/coreprotocol.cpp
index 0d988521..d1a2e7cb 100644
--- a/qtwayland/tests/auto/client/shared/coreprotocol.cpp
+++ b/qtwayland/tests/auto/client/shared/coreprotocol.cpp
@@ -451,6 +451,13 @@ void Touch::sendFrame(wl_client *client)
         send_frame(r->handle);
 }
 
+void Touch::sendCancel(wl_client *client)
+{
+    const auto touchResources = resourceMap().values(client);
+    for (auto *r : touchResources)
+        send_cancel(r->handle);
+}
+
 uint Keyboard::sendEnter(Surface *surface)
 {
     auto serial = m_seat->m_compositor->nextSerial();
diff --git a/qtwayland/tests/auto/client/shared/coreprotocol.h b/qtwayland/tests/auto/client/shared/coreprotocol.h
index a1af137a..210d8ddb 100644
--- a/qtwayland/tests/auto/client/shared/coreprotocol.h
+++ b/qtwayland/tests/auto/client/shared/coreprotocol.h
@@ -158,7 +158,7 @@ class WlCompositor : public Global, public QtWaylandServer::wl_compositor
 {
     Q_OBJECT
 public:
-    explicit WlCompositor(CoreCompositor *compositor, int version = 3)
+    explicit WlCompositor(CoreCompositor *compositor, int version = 4)
         : QtWaylandServer::wl_compositor(compositor->m_display, version)
         , m_compositor(compositor)
     {}
@@ -364,6 +364,7 @@ public:
     uint sendUp(wl_client *client, int id);
     void sendMotion(wl_client *client, const QPointF &position, int id);
     void sendFrame(wl_client *client);
+    void sendCancel(wl_client *client);
 
     Seat *m_seat = nullptr;
 };
diff --git a/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp b/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp
index a415cbf5..b1d3d07d 100644
--- a/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp
+++ b/qtwayland/tests/auto/client/shared_old/mockcompositor.cpp
@@ -342,7 +342,7 @@ Compositor::Compositor(MockCompositor *mockCompositor)
         exit(EXIT_FAILURE);
     }
 
-    wl_global_create(m_display, &wl_compositor_interface, 1, this, bindCompositor);
+    wl_global_create(m_display, &wl_compositor_interface, 4, this, bindCompositor);
 
     m_data_device_manager.reset(new DataDeviceManager(this, m_display));
 
diff --git a/qtwayland/tests/auto/client/shared_old/mocksurface.cpp b/qtwayland/tests/auto/client/shared_old/mocksurface.cpp
index e9df5f90..c3246e4a 100644
--- a/qtwayland/tests/auto/client/shared_old/mocksurface.cpp
+++ b/qtwayland/tests/auto/client/shared_old/mocksurface.cpp
@@ -125,6 +125,16 @@ void Surface::surface_damage(Resource *resource,
     Q_UNUSED(height);
 }
 
+void Surface::surface_damage_buffer(Resource *resource,
+                                    int32_t x, int32_t y, int32_t width, int32_t height)
+{
+    Q_UNUSED(resource);
+    Q_UNUSED(x);
+    Q_UNUSED(y);
+    Q_UNUSED(width);
+    Q_UNUSED(height);
+}
+
 void Surface::surface_frame(Resource *resource,
                             uint32_t callback)
 {
diff --git a/qtwayland/tests/auto/client/shared_old/mocksurface.h b/qtwayland/tests/auto/client/shared_old/mocksurface.h
index 949dc23d..d176837e 100644
--- a/qtwayland/tests/auto/client/shared_old/mocksurface.h
+++ b/qtwayland/tests/auto/client/shared_old/mocksurface.h
@@ -65,6 +65,8 @@ protected:
                         struct wl_resource *buffer, int x, int y) override;
     void surface_damage(Resource *resource,
                         int32_t x, int32_t y, int32_t width, int32_t height) override;
+    void surface_damage_buffer(Resource *resource,
+                               int32_t x, int32_t y, int32_t width, int32_t height) override;
     void surface_frame(Resource *resource,
                        uint32_t callback) override;
     void surface_commit(Resource *resource) override;
diff --git a/qtwayland/tests/auto/client/surface/tst_surface.cpp b/qtwayland/tests/auto/client/surface/tst_surface.cpp
index 95e4e609..60c672ce 100644
--- a/qtwayland/tests/auto/client/surface/tst_surface.cpp
+++ b/qtwayland/tests/auto/client/surface/tst_surface.cpp
@@ -129,6 +129,10 @@ void tst_surface::waitForFrameCallbackGl()
     // Make sure we follow frame callbacks for some frames
     for (int i = 0; i < 5; ++i) {
         xdgPingAndWaitForPong(); // Make sure things have happened on the client
+        if (!qEnvironmentVariableIntValue("QT_WAYLAND_DISABLE_WINDOWDECORATION") && i == 0) {
+            QCOMPARE(bufferSpy.count(), 1);
+            bufferSpy.removeFirst();
+        }
         exec([&] {
             QVERIFY(bufferSpy.empty()); // Make sure no extra buffers have arrived
             QVERIFY(!xdgToplevel()->surface()->m_waitingFrameCallbacks.empty());
diff --git a/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp b/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp
index 2277bbb8..747875b4 100644
--- a/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp
+++ b/qtwayland/tests/auto/client/xdgshell/tst_xdgshell.cpp
@@ -31,6 +31,7 @@
 #include <QtGui/QOpenGLWindow>
 #include <QtGui/qpa/qplatformnativeinterface.h>
 #include <QtWaylandClient/private/wayland-wayland-client-protocol.h>
+#include <QtWaylandClient/private/qwaylandwindow_p.h>
 
 using namespace MockCompositor;
 
@@ -45,6 +46,7 @@ private slots:
     void configureStates();
     void popup();
     void tooltipOnPopup();
+    void tooltipAndSiblingPopup();
     void switchPopups();
     void hidePopupParent();
     void pongs();
@@ -138,6 +140,7 @@ void tst_xdgshell::configureSize()
 
 void tst_xdgshell::configureStates()
 {
+    QVERIFY(qputenv("QT_WAYLAND_FRAME_CALLBACK_TIMEOUT", "0"));
     QRasterWindow window;
     window.resize(64, 48);
     window.show();
@@ -154,9 +157,12 @@ void tst_xdgshell::configureStates()
     // Toplevel windows don't know their position on xdg-shell
 //    QCOMPARE(window.frameGeometry().topLeft(), QPoint()); // TODO: this doesn't currently work when window decorations are enabled
 
-//    QEXPECT_FAIL("", "configure has already been acked, we shouldn't have to wait for isActive", Continue);
-//    QVERIFY(window.isActive());
-    QTRY_VERIFY(window.isActive()); // Just make sure it eventually get's set correctly
+    // window.windowstate() is driven by keyboard focus, however for decorations we want to follow
+    // XDGShell this is internal to QtWayland so it is queried directly
+    auto waylandWindow = static_cast<QtWaylandClient::QWaylandWindow *>(window.handle());
+    Q_ASSERT(waylandWindow);
+    QTRY_VERIFY(waylandWindow->windowStates().testFlag(
+            Qt::WindowActive)); // Just make sure it eventually get's set correctly
 
     const QSize screenSize(640, 480);
     const uint maximizedSerial = exec([=] {
@@ -186,6 +192,7 @@ void tst_xdgshell::configureStates()
     QCOMPARE(window.windowStates(), Qt::WindowNoState);
     QCOMPARE(window.frameGeometry().size(), windowedSize);
 //    QCOMPARE(window.frameGeometry().topLeft(), QPoint()); // TODO: this doesn't currently work when window decorations are enabled
+    QVERIFY(qunsetenv("QT_WAYLAND_FRAME_CALLBACK_TIMEOUT"));
 }
 
 void tst_xdgshell::popup()
@@ -340,6 +347,92 @@ void tst_xdgshell::tooltipOnPopup()
     QCOMPOSITOR_TRY_COMPARE(xdgPopup(0), nullptr);
 }
 
+void tst_xdgshell::tooltipAndSiblingPopup()
+{
+    class ToolTip : public QRasterWindow {
+    public:
+        explicit ToolTip(QWindow *parent) {
+            setTransientParent(parent);
+            setFlags(Qt::ToolTip);
+            resize(100, 100);
+            show();
+        }
+        void mousePressEvent(QMouseEvent *event) override {
+            QRasterWindow::mousePressEvent(event);
+            m_popup = new QRasterWindow;
+            m_popup->setTransientParent(transientParent());
+            m_popup->setFlags(Qt::Popup);
+            m_popup->resize(100, 100);
+            m_popup->show();
+        }
+
+        QRasterWindow *m_popup = nullptr;
+    };
+
+    class Window : public QRasterWindow {
+    public:
+        void mousePressEvent(QMouseEvent *event) override {
+            QRasterWindow::mousePressEvent(event);
+            m_tooltip = new ToolTip(this);
+        }
+        ToolTip *m_tooltip = nullptr;
+    };
+
+    Window window;
+    window.resize(200, 200);
+    window.show();
+
+    QCOMPOSITOR_TRY_VERIFY(xdgToplevel());
+    exec([=] { xdgToplevel()->sendCompleteConfigure(); });
+    QCOMPOSITOR_TRY_VERIFY(xdgToplevel()->m_xdgSurface->m_committedConfigureSerial);
+
+    exec([=] {
+        auto *surface = xdgToplevel()->surface();
+        auto *p = pointer();
+        auto *c = client();
+        p->sendEnter(surface, {100, 100});
+        p->sendFrame(c);
+        p->sendButton(client(), BTN_LEFT, Pointer::button_state_pressed);
+        p->sendButton(client(), BTN_LEFT, Pointer::button_state_released);
+        p->sendFrame(c);
+        p->sendLeave(surface);
+        p->sendFrame(c);
+    });
+
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup());
+    exec([=] { xdgPopup()->sendCompleteConfigure(QRect(100, 100, 100, 100)); });
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup()->m_xdgSurface->m_committedConfigureSerial);
+    QCOMPOSITOR_TRY_VERIFY(!xdgPopup()->m_grabbed);
+
+    exec([=] {
+        auto *surface = xdgPopup()->surface();
+        auto *p = pointer();
+        auto *c = client();
+        p->sendEnter(surface, {100, 100});
+        p->sendFrame(c);
+        p->sendButton(client(), BTN_LEFT, Pointer::button_state_pressed);
+        p->sendButton(client(), BTN_LEFT, Pointer::button_state_released);
+        p->sendFrame(c);
+    });
+
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup(1));
+    exec([=] { xdgPopup(1)->sendCompleteConfigure(QRect(100, 100, 100, 100)); });
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup(1)->m_xdgSurface->m_committedConfigureSerial);
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup(1)->m_grabbed);
+
+    // Close the middle tooltip (it should not close the sibling popup)
+    window.m_tooltip->close();
+
+    QCOMPOSITOR_TRY_COMPARE(xdgPopup(1), nullptr);
+    // Verify the remaining xdg surface is a grab popup..
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup(0));
+    QCOMPOSITOR_TRY_VERIFY(xdgPopup(0)->m_grabbed);
+
+    window.m_tooltip->m_popup->close();
+    QCOMPOSITOR_TRY_COMPARE(xdgPopup(1), nullptr);
+    QCOMPOSITOR_TRY_COMPARE(xdgPopup(0), nullptr);
+}
+
 // QTBUG-65680
 void tst_xdgshell::switchPopups()
 {
@@ -505,7 +598,7 @@ void tst_xdgshell::minMaxSize()
     window.show();
     QCOMPOSITOR_TRY_VERIFY(xdgToplevel());
 
-    exec([=] { xdgToplevel()->sendCompleteConfigure(); });
+    // we don't roundtrip with our configuration the initial commit should be correct
 
     QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100));
     QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000));
Submodule qtwebchannel 309144f7..4e35fe94:
diff --git a/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp b/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp
index 536eb5c..898d769 100644
--- a/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp
+++ b/qtwebchannel/src/webchannel/qmetaobjectpublisher.cpp
@@ -186,8 +186,6 @@ Q_DECLARE_TYPEINFO(OverloadResolutionCandidate, Q_MOVABLE_TYPE);
 QMetaObjectPublisher::QMetaObjectPublisher(QWebChannel *webChannel)
     : QObject(webChannel)
     , webChannel(webChannel)
-    , signalHandler(this)
-    , clientIsIdle(false)
     , blockUpdates(false)
     , propertyUpdatesInitialized(false)
 {
@@ -301,17 +299,17 @@ QJsonObject QMetaObjectPublisher::classInfoForObject(const QObject *object, QWeb
     return data;
 }
 
-void QMetaObjectPublisher::setClientIsIdle(bool isIdle)
+void QMetaObjectPublisher::setClientIsIdle(bool isIdle, QWebChannelAbstractTransport *transport)
 {
-    if (clientIsIdle == isIdle) {
-        return;
-    }
-    clientIsIdle = isIdle;
-    if (!isIdle && timer.isActive()) {
-        timer.stop();
-    } else if (isIdle && !timer.isActive()) {
-        timer.start(PROPERTY_UPDATE_INTERVAL, this);
-    }
+    transportState[transport].clientIsIdle = isIdle;
+    if (isIdle)
+        sendEnqueuedPropertyUpdates(transport);
+}
+
+bool QMetaObjectPublisher::isClientIdle(QWebChannelAbstractTransport *transport)
+{
+    auto found = transportState.find(transport);
+    return found != transportState.end() && found.value().clientIsIdle;
 }
 
 QJsonObject QMetaObjectPublisher::initializeClient(QWebChannelAbstractTransport *transport)
@@ -333,6 +331,7 @@ QJsonObject QMetaObjectPublisher::initializeClient(QWebChannelAbstractTransport
 
 void QMetaObjectPublisher::initializePropertyUpdates(const QObject *const object, const QJsonObject &objectInfo)
 {
+    auto *signalHandler = signalHandlerFor(object);
     foreach (const QJsonValue &propertyInfoVar, objectInfo[KEY_PROPERTIES].toArray()) {
         const QJsonArray &propertyInfo = propertyInfoVar.toArray();
         if (propertyInfo.size() < 2) {
@@ -353,19 +352,19 @@ void QMetaObjectPublisher::initializePropertyUpdates(const QObject *const object
 
         // Only connect for a property update once
         if (connectedProperties.isEmpty()) {
-            signalHandler.connectTo(object, signalIndex);
+            signalHandler->connectTo(object, signalIndex);
         }
 
         connectedProperties.insert(propertyIndex);
     }
 
     // also always connect to destroyed signal
-    signalHandler.connectTo(object, s_destroyedSignalIndex);
+    signalHandler->connectTo(object, s_destroyedSignalIndex);
 }
 
 void QMetaObjectPublisher::sendPendingPropertyUpdates()
 {
-    if (blockUpdates || !clientIsIdle || pendingPropertyUpdates.isEmpty()) {
+    if (blockUpdates) {
         return;
     }
 
@@ -415,18 +414,19 @@ void QMetaObjectPublisher::sendPendingPropertyUpdates()
 
     // data does not contain specific updates
     if (!data.isEmpty()) {
-        setClientIsIdle(false);
-
         message[KEY_DATA] = data;
-        broadcastMessage(message);
+        enqueueBroadcastMessage(message);
     }
 
     // send every property update which is not supposed to be broadcasted
     const QHash<QWebChannelAbstractTransport*, QJsonArray>::const_iterator suend = specificUpdates.constEnd();
     for (QHash<QWebChannelAbstractTransport*, QJsonArray>::const_iterator it = specificUpdates.constBegin(); it != suend; ++it) {
         message[KEY_DATA] = it.value();
-        it.key()->sendMessage(message);
+        enqueueMessage(message, it.key());
     }
+
+    for (auto state = transportState.begin(); state != transportState.end(); ++state)
+        sendEnqueuedPropertyUpdates(state.key());
 }
 
 QVariant QMetaObjectPublisher::invokeMethod(QObject *const object, const QMetaMethod &method,
@@ -572,7 +572,7 @@ void QMetaObjectPublisher::signalEmitted(const QObject *object, const int signal
         }
     } else {
         pendingPropertyUpdates[object][signalIndex] = arguments;
-        if (clientIsIdle && !blockUpdates && !timer.isActive()) {
+        if (!blockUpdates && !timer.isActive()) {
             timer.start(PROPERTY_UPDATE_INTERVAL, this);
         }
     }
@@ -590,7 +590,7 @@ void QMetaObjectPublisher::objectDestroyed(const QObject *object)
     // only remove from handler when we initialized the property updates
     // cf: https://bugreports.qt.io/browse/QTBUG-60250
     if (propertyUpdatesInitialized) {
-        signalHandler.remove(object);
+        signalHandlerFor(object)->remove(object);
         signalToPropertyMap.remove(object);
     }
     pendingPropertyUpdates.remove(object);
@@ -852,6 +852,52 @@ void QMetaObjectPublisher::broadcastMessage(const QJsonObject &message) const
     }
 }
 
+void QMetaObjectPublisher::enqueueBroadcastMessage(const QJsonObject &message)
+{
+    if (webChannel->d_func()->transports.isEmpty()) {
+        qWarning("QWebChannel is not connected to any transports, cannot send message: %s",
+                 QJsonDocument(message).toJson().constData());
+        return;
+    }
+
+    for (auto *transport : webChannel->d_func()->transports) {
+        auto &state = transportState[transport];
+        state.queuedMessages.append(message);
+    }
+}
+
+void QMetaObjectPublisher::enqueueMessage(const QJsonObject &message,
+                                          QWebChannelAbstractTransport *transport)
+{
+    auto &state = transportState[transport];
+    state.queuedMessages.append(message);
+}
+
+void QMetaObjectPublisher::sendEnqueuedPropertyUpdates(QWebChannelAbstractTransport *transport)
+{
+    auto found = transportState.find(transport);
+    if (found != transportState.end() && found.value().clientIsIdle
+        && !found.value().queuedMessages.isEmpty()) {
+
+        // If the client is connected with an in-process transport, it can
+        // happen that a message triggers a subsequent property change. In
+        // that case, we need to ensure that the queued messages have already
+        // been cleared; otherwise the recursive call will send everythig again.
+        // Case in point: The qmlwebchannel tests fail if we don't clear the
+        // queued messages before sending them out.
+        // For that same reason set the client to "busy" (aka non-idle) just
+        // right before sending out the messages; otherwise a potential
+        // "Idle" type message will not correctly restore the Idle state.
+        const auto messages = std::move(found.value().queuedMessages);
+        Q_ASSERT(found.value().queuedMessages.isEmpty());
+        found.value().clientIsIdle = false;
+
+        for (const auto &message : messages) {
+            transport->sendMessage(message);
+        }
+    }
+}
+
 void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannelAbstractTransport *transport)
 {
     if (!webChannel->d_func()->transports.contains(transport)) {
@@ -866,7 +912,7 @@ void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannel
 
     const MessageType type = toType(message.value(KEY_TYPE));
     if (type == TypeIdle) {
-        setClientIsIdle(true);
+        setClientIsIdle(true, transport);
     } else if (type == TypeInit) {
         if (!message.contains(KEY_ID)) {
             qWarning("JSON message object is missing the id property: %s",
@@ -913,9 +959,9 @@ void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannel
                 return;
             transport->sendMessage(createResponse(message.value(KEY_ID), wrapResult(result, transport)));
         } else if (type == TypeConnectToSignal) {
-            signalHandler.connectTo(object, message.value(KEY_SIGNAL).toInt(-1));
+            signalHandlerFor(object)->connectTo(object, message.value(KEY_SIGNAL).toInt(-1));
         } else if (type == TypeDisconnectFromSignal) {
-            signalHandler.disconnectFrom(object, message.value(KEY_SIGNAL).toInt(-1));
+            signalHandlerFor(object)->disconnectFrom(object, message.value(KEY_SIGNAL).toInt(-1));
         } else if (type == TypeSetProperty) {
             setProperty(object, message.value(KEY_PROPERTY).toInt(-1),
                         message.value(KEY_VALUE));
@@ -931,6 +977,7 @@ void QMetaObjectPublisher::setBlockUpdates(bool block)
     blockUpdates = block;
 
     if (!blockUpdates) {
+        timer.start(PROPERTY_UPDATE_INTERVAL, this);
         sendPendingPropertyUpdates();
     } else if (timer.isActive()) {
         timer.stop();
@@ -948,4 +995,15 @@ void QMetaObjectPublisher::timerEvent(QTimerEvent *event)
     }
 }
 
+SignalHandler<QMetaObjectPublisher> *QMetaObjectPublisher::signalHandlerFor(const QObject *object)
+{
+    auto thread = object->thread();
+    auto it = signalHandlers.find(thread);
+    if (it == signalHandlers.end()) {
+        it = signalHandlers.emplace(thread, this).first;
+        it->second.moveToThread(thread);
+    }
+    return &it->second;
+}
+
 QT_END_NAMESPACE
diff --git a/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h b/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h
index bbd9875..4713ef1 100644
--- a/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h
+++ b/qtwebchannel/src/webchannel/qmetaobjectpublisher_p.h
@@ -59,6 +59,9 @@
 #include <QBasicTimer>
 #include <QPointer>
 #include <QJsonObject>
+#include <QQueue>
+
+#include <unordered_map>
 
 #include "qwebchannelglobal.h"
 
@@ -109,17 +112,36 @@ public:
      */
     void broadcastMessage(const QJsonObject &message) const;
 
+    /**
+     * Enqueue the given @p message to all known transports.
+     */
+    void enqueueBroadcastMessage(const QJsonObject &message);
+
+    /**
+     * Enqueue the given @p message to @p transport.
+     */
+    void enqueueMessage(const QJsonObject &message, QWebChannelAbstractTransport *transport);
+
+    /**
+     * If client for given @p transport is idle, send queued messaged to @p transport and then mark
+     * the client as not idle.
+     */
+    void sendEnqueuedPropertyUpdates(QWebChannelAbstractTransport *transport);
+
     /**
      * Serialize the QMetaObject of @p object and return it in JSON form.
      */
     QJsonObject classInfoForObject(const QObject *object, QWebChannelAbstractTransport *transport);
 
     /**
-     * Set the client to idle or busy, based on the value of @p isIdle.
-     *
-     * When the value changed, start/stop the property update timer accordingly.
+     * Set the client to idle or busy for a single @p transport, based on the value of @p isIdle.
+     */
+    void setClientIsIdle(bool isIdle, QWebChannelAbstractTransport *transport);
+
+    /**
+     * Check that client is idle for @p transport.
      */
-    void setClientIsIdle(bool isIdle);
+    bool isClientIdle(QWebChannelAbstractTransport *transport);
 
     /**
      * Initialize clients by sending them the class information of the registered objects.
@@ -272,10 +294,18 @@ private:
     friend class TestWebChannel;
 
     QWebChannel *webChannel;
-    SignalHandler<QMetaObjectPublisher> signalHandler;
+    std::unordered_map<const QThread*, SignalHandler<QMetaObjectPublisher>> signalHandlers;
+    SignalHandler<QMetaObjectPublisher> *signalHandlerFor(const QObject *object);
 
-    // true when the client is idle, false otherwise
-    bool clientIsIdle;
+    struct TransportState
+    {
+        TransportState() : clientIsIdle(false) { }
+        // true when the client is idle, false otherwise
+        bool clientIsIdle;
+        // messages to send
+        QQueue<QJsonObject> queuedMessages;
+    };
+    QHash<QWebChannelAbstractTransport *, TransportState> transportState;
 
     // true when no property updates should be sent, false otherwise
     bool blockUpdates;
diff --git a/qtwebchannel/src/webchannel/signalhandler_p.h b/qtwebchannel/src/webchannel/signalhandler_p.h
index 27afadb..d77373c 100644
--- a/qtwebchannel/src/webchannel/signalhandler_p.h
+++ b/qtwebchannel/src/webchannel/signalhandler_p.h
@@ -56,6 +56,7 @@
 #include <QVector>
 #include <QMetaMethod>
 #include <QDebug>
+#include <QThread>
 
 QT_BEGIN_NAMESPACE
 
@@ -71,6 +72,7 @@ static const int s_destroyedSignalIndex = QObject::staticMetaObject.indexOfMetho
 template<class Receiver>
 class SignalHandler : public QObject
 {
+    Q_DISABLE_COPY(SignalHandler)
 public:
     SignalHandler(Receiver *receiver, QObject *parent = 0);
 
@@ -268,6 +270,7 @@ int SignalHandler<Receiver>::qt_metacall(QMetaObject::Call call, int methodId, v
     if (call == QMetaObject::InvokeMetaMethod) {
         const QObject *object = sender();
         Q_ASSERT(object);
+        Q_ASSERT(QThread::currentThread() == object->thread());
         Q_ASSERT(senderSignalIndex() == methodId);
         Q_ASSERT(m_connectionsCounter.contains(object));
         Q_ASSERT(m_connectionsCounter.value(object).contains(methodId));
diff --git a/qtwebchannel/tests/auto/qml/testwebchannel.cpp b/qtwebchannel/tests/auto/qml/testwebchannel.cpp
index 9891687..3ca81c2 100644
--- a/qtwebchannel/tests/auto/qml/testwebchannel.cpp
+++ b/qtwebchannel/tests/auto/qml/testwebchannel.cpp
@@ -46,7 +46,11 @@ TestWebChannel::~TestWebChannel()
 
 bool TestWebChannel::clientIsIdle() const
 {
-    return QWebChannel::d_func()->publisher->clientIsIdle;
+    for (auto *transport : QWebChannel::d_func()->transports) {
+        if (QWebChannel::d_func()->publisher->isClientIdle(transport))
+            return true;
+    }
+    return false;
 }
 
 QT_END_NAMESPACE
diff --git a/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp b/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp
index 181da9e..37f989a 100644
--- a/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp
+++ b/qtwebchannel/tests/auto/webchannel/tst_webchannel.cpp
@@ -785,7 +785,7 @@ void TestWebChannel::testTransportWrapObjectProperties()
     DummyTransport *dummyTransport = new DummyTransport(this);
     channel.connectTo(dummyTransport);
     channel.d_func()->publisher->initializeClient(dummyTransport);
-    channel.d_func()->publisher->setClientIsIdle(true);
+    channel.d_func()->publisher->setClientIsIdle(true, dummyTransport);
 
     QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.size(), 0);
 
@@ -943,8 +943,6 @@ void TestWebChannel::testInfiniteRecursion()
 
 void TestWebChannel::testAsyncObject()
 {
-    QSKIP("This test is broken. See QTBUG-80729");
-
     QWebChannel channel;
     channel.connectTo(m_dummyTransport);
 
@@ -990,6 +988,50 @@ void TestWebChannel::testAsyncObject()
     thread.wait();
 }
 
+void TestWebChannel::testPropertyMultipleTransports()
+{
+    DummyTransport transport1;
+    DummyTransport transport2;
+
+    QWebChannel channel;
+    QMetaObjectPublisher *publisher = channel.d_func()->publisher;
+
+    TestObject testObj;
+    testObj.setObjectName("testObject");
+    channel.registerObject(testObj.objectName(), &testObj);
+    channel.connectTo(&transport1);
+    channel.connectTo(&transport2);
+
+    testObj.setProp("Hello");
+
+    publisher->initializeClient(&transport1);
+    publisher->initializeClient(&transport2);
+    publisher->setClientIsIdle(true, &transport1);
+    QCOMPARE(publisher->isClientIdle(&transport1), true);
+    QCOMPARE(publisher->isClientIdle(&transport2), false);
+    QVERIFY(transport1.messagesSent().isEmpty());
+    QVERIFY(transport2.messagesSent().isEmpty());
+
+    testObj.setProp("World");
+    QTRY_COMPARE_WITH_TIMEOUT(transport1.messagesSent().size(), 1u, 2000);
+    QCOMPARE(transport2.messagesSent().size(), 0u);
+    publisher->setClientIsIdle(true, &transport2);
+    QTRY_COMPARE_WITH_TIMEOUT(transport2.messagesSent().size(), 1u, 2000);
+    QCOMPARE(publisher->isClientIdle(&transport1), false);
+    QCOMPARE(publisher->isClientIdle(&transport2), false);
+
+    testObj.setProp("!!!");
+    publisher->setClientIsIdle(true, &transport2);
+    QCOMPARE(publisher->isClientIdle(&transport2), true);
+    QCOMPARE(publisher->isClientIdle(&transport1), false);
+    QTRY_COMPARE_WITH_TIMEOUT(transport2.messagesSent().size(), 2u, 2000);
+    QCOMPARE(transport1.messagesSent().size(), 1u);
+    publisher->setClientIsIdle(true, &transport1);
+    QTRY_COMPARE_WITH_TIMEOUT(transport1.messagesSent().size(), 2u, 2000);
+    QCOMPARE(publisher->isClientIdle(&transport1), false);
+    QCOMPARE(publisher->isClientIdle(&transport2), false);
+}
+
 class FunctionWrapper : public QObject
 {
     Q_OBJECT
@@ -1082,7 +1124,7 @@ void TestWebChannel::benchInitializeClients()
 
         publisher->propertyUpdatesInitialized = false;
         publisher->signalToPropertyMap.clear();
-        publisher->signalHandler.clear();
+        publisher->signalHandlers.clear();
     }
 }
 
@@ -1107,7 +1149,7 @@ void TestWebChannel::benchPropertyUpdates()
             obj->change();
         }
 
-        channel.d_func()->publisher->clientIsIdle = true;
+        channel.d_func()->publisher->setClientIsIdle(true, m_dummyTransport);
         channel.d_func()->publisher->sendPendingPropertyUpdates();
     }
 }
diff --git a/qtwebchannel/tests/auto/webchannel/tst_webchannel.h b/qtwebchannel/tests/auto/webchannel/tst_webchannel.h
index eae21f4..dd4e690 100644
--- a/qtwebchannel/tests/auto/webchannel/tst_webchannel.h
+++ b/qtwebchannel/tests/auto/webchannel/tst_webchannel.h
@@ -348,6 +348,7 @@ private slots:
     void testJsonToVariant();
     void testInfiniteRecursion();
     void testAsyncObject();
+    void testPropertyMultipleTransports();
     void testDeletionDuringMethodInvocation_data();
     void testDeletionDuringMethodInvocation();
 
Submodule qtwebsockets 66509bb4..59447776:
diff --git a/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp b/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp
index 2affdd5..95f1194 100644
--- a/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp
+++ b/qtwebsockets/src/websockets/qwebsocketdataprocessor.cpp
@@ -273,6 +273,7 @@ void QWebSocketDataProcessor::clear()
     if (!m_pConverterState)
         m_pConverterState = new QTextCodec::ConverterState(QTextCodec::ConvertInvalidToNull |
                                                            QTextCodec::IgnoreHeader);
+    frame.clear();
 }
 
 /*!
diff --git a/qtwebsockets/src/websockets/qwebsocketprotocol.cpp b/qtwebsockets/src/websockets/qwebsocketprotocol.cpp
index df87a93..d0465f1 100644
--- a/qtwebsockets/src/websockets/qwebsocketprotocol.cpp
+++ b/qtwebsockets/src/websockets/qwebsocketprotocol.cpp
@@ -210,7 +210,7 @@ void QWebSocketProtocol::mask(char *payload, quint64 size, quint32 maskingKey)
                             quint8((maskingKey & 0x0000FF00u) >> 8),
                             quint8((maskingKey & 0x000000FFu))
                           };
-    int i = 0;
+    quint64 i = 0;
     while (size-- > 0)
         *payload++ ^= mask[i++ % 4];
 }
