basctl/source/basicide/baside2b.cxx                   |    9 
 canvas/source/cairo/cairo_canvashelper.cxx            |    2 
 cui/uiconfig/ui/linetabpage.ui                        |    1 
 external/onlineupdate/lo.patch                        |   13 
 offapi/com/sun/star/style/CharacterProperties.idl     |    8 
 oox/source/drawingml/chart/chartspaceconverter.cxx    |    3 
 readlicense_oo/license/CREDITS.fodt                   | 4851 +++++++++---------
 sc/qa/uitest/calc_tests8/navigator.py                 |   27 
 sc/source/ui/cctrl/checklistmenu.cxx                  |    9 
 sc/source/ui/navipi/navipi.cxx                        |    1 
 sd/source/ui/view/drviewsf.cxx                        |   15 
 sfx2/source/doc/guisaveas.cxx                         |    2 
 svl/source/crypto/cryptosign.cxx                      |    5 
 svx/source/accessibility/AccessibleShape.cxx          |    2 
 sw/inc/ndtxt.hxx                                      |    2 
 sw/qa/core/text/data/tdf159336.odt                    |binary
 sw/qa/core/text/text.cxx                              |   35 
 sw/qa/uitest/data/tdf106733.fodt                      |   66 
 sw/qa/uitest/writer_tests8/tdf106733.py               |  112 
 sw/qa/uitest/writer_tests8/tdf159102.py               |   42 
 sw/source/core/inc/txtfrm.hxx                         |    2 
 sw/source/core/layout/frmtool.cxx                     |   27 
 sw/source/core/layout/trvlfrm.cxx                     |   67 
 sw/source/core/text/EnhancedPDFExportHelper.cxx       |    5 
 sw/source/core/text/guess.cxx                         |    7 
 sw/source/core/text/itrcrsr.cxx                       |    5 
 sw/source/core/text/itrform2.cxx                      |    2 
 sw/source/core/text/txtfrm.cxx                        |    4 
 sw/source/core/txtnode/thints.cxx                     |   25 
 sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx |   12 
 vcl/qa/cppunit/pdfexport/data/LinkPages.fodt          |  138 
 vcl/qa/cppunit/pdfexport/pdfexport.cxx                |  607 ++
 vcl/qt5/QtWidget.cxx                                  |    3 
 xmloff/source/text/txtprmap.cxx                       |    2 
 34 files changed, 3731 insertions(+), 2380 deletions(-)

New commits:
commit d48d8a41699f5a4d3cfad5d924ed9dd4ed628fcd
Author:     Rafael Lima <rafael.palma.l...@gmail.com>
AuthorDate: Tue Jan 23 23:36:11 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    tdf#159329 Fix AutoFilter arrow color in dark mode
    
    When using dark mode, the arrow is black over a dark background. This patch 
makes it use the dialog text color for better contrast.
    
    Change-Id: Icf07d50599191417dee294e1f4c925fe1a8a7655
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162460
    Tested-by: Jenkins
    Reviewed-by: Heiko Tietze <heiko.tie...@documentfoundation.org>
    (cherry picked from commit b0f678ca59a65a3c302c3c3a499230fbc52ed5bd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162615
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/source/ui/cctrl/checklistmenu.cxx 
b/sc/source/ui/cctrl/checklistmenu.cxx
index ecee4dab0600..d11d5405347e 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -171,14 +171,7 @@ void ScCheckListMenuControl::CreateDropDown()
 {
     const StyleSettings& rStyleSettings = 
Application::GetSettings().GetStyleSettings();
 
-    // tdf#151820 The color used for the arrow head depends on the background 
color
-    Color aBackgroundColor = rStyleSettings.GetWindowColor();
-    Color aSpinColor;
-    if (aBackgroundColor.IsDark())
-        aSpinColor = rStyleSettings.GetLightColor();
-    else
-        aSpinColor = rStyleSettings.GetDarkShadowColor();
-
+    Color aSpinColor = rStyleSettings.GetDialogTextColor();
     int nWidth = (mxMenu->get_text_height() * 3) / 4;
     mxDropDown->SetOutputSizePixel(Size(nWidth, nWidth), /*bErase*/true, 
/*bAlphaMaskTransparent*/true);
     DecorationView aDecoView(mxDropDown.get());
commit 3ef06c78e05fe41414720172865cfc4df5f1ba26
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Tue Dec 12 15:51:42 2023 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    tdf#158652 notify navigator on insert/edit/delete comment
    
    links changes of the drawing engine to comments as it was
    done before with pictures, shapes and OLE objects
    ui unit test included
    
    Change-Id: I4fde3a82b80e73758fb3da94ed2553453d09e9ef
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160624
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit 0097f8595791f4bbf499ebd423f4f80ec8e38dbe)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162381
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/sc/qa/uitest/calc_tests8/navigator.py 
b/sc/qa/uitest/calc_tests8/navigator.py
index ec8fa2ae9a2e..9c1769dcf49d 100644
--- a/sc/qa/uitest/calc_tests8/navigator.py
+++ b/sc/qa/uitest/calc_tests8/navigator.py
@@ -10,6 +10,7 @@
 from uitest.framework import UITestCase
 from libreoffice.uno.propertyvalue import mkPropertyValues
 from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file
+from uitest.uihelper.calc import enter_text_to_cell
 
 class navigator(UITestCase):
 
@@ -181,4 +182,30 @@ class navigator(UITestCase):
 
             self.xUITest.executeCommand(".uno:Sidebar")
 
+
+    def test_tdf158652(self):
+        with self.ui_test.create_doc_in_start_center("calc"):
+            xCalcDoc = self.xUITest.getTopFocusWindow()
+            xGridWin = xCalcDoc.getChild("grid_window")
+
+            self.xUITest.executeCommand(".uno:Sidebar")
+
+            xGridWin.executeAction("SIDEBAR", mkPropertyValues({"PANEL": 
"ScNavigatorPanel"}))
+
+            xCalcDoc = self.xUITest.getTopFocusWindow()
+            xNavigatorPanel = xCalcDoc.getChild("NavigatorPanel")
+            xContentBox = xNavigatorPanel.getChild('contentbox')
+            enter_text_to_cell(xGridWin, "A1", "1")
+
+            commentText = mkPropertyValues({"Text":"CommentText"})
+            self.xUITest.executeCommandWithParameters(".uno:InsertAnnotation", 
commentText)
+            xComments = xContentBox.getChild("6")
+            self.assertEqual(len(xComments.getChildren()), 1)
+
+            self.xUITest.executeCommand(".uno:DeleteNote")
+            xComments = xContentBox.getChild("6")
+            self.assertEqual(len(xComments.getChildren()), 0)
+
+            self.xUITest.executeCommand(".uno:Sidebar")
+
 # vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sc/source/ui/navipi/navipi.cxx b/sc/source/ui/navipi/navipi.cxx
index 5fc6fee82122..ae95220eeffb 100644
--- a/sc/source/ui/navipi/navipi.cxx
+++ b/sc/source/ui/navipi/navipi.cxx
@@ -540,6 +540,7 @@ void ScNavigatorDlg::Notify( SfxBroadcaster&, const 
SfxHint& rHint )
                     m_xLbEntries->Refresh( ScContentId::GRAPHIC );
                     m_xLbEntries->Refresh( ScContentId::OLEOBJECT );
                     m_xLbEntries->Refresh( ScContentId::DRAWING );
+                    m_xLbEntries->Refresh( ScContentId::NOTE );
                     break;
 
                 case SfxHintId::ScAreaLinksChanged:
commit 5400b650132f6849126fa447d2513bffa233e615
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Fri Jan 26 14:34:40 2024 +0000
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    invalid cast from 'GtkImage' to 'GtkLabel'
    
    since:
    
    commit fe946f86ad6586fa810cae5c0f246389a285e172
    Date:   Wed Nov 29 15:25:06 2023 +0100
    
        Bump Glade version
    
    Change-Id: Ide86220f260dac40395389530e7221ea8de8f092
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162611
    Tested-by: Jenkins
    Reviewed-by: Taichi Haradaguchi <20001...@ymail.ne.jp>

diff --git a/cui/uiconfig/ui/linetabpage.ui b/cui/uiconfig/ui/linetabpage.ui
index 2a2c1b2e15f5..e28eb4b95c19 100644
--- a/cui/uiconfig/ui/linetabpage.ui
+++ b/cui/uiconfig/ui/linetabpage.ui
@@ -230,6 +230,7 @@
                         <property name="receives-default">False</property>
                         <property name="xalign">0</property>
                         <property name="draw-indicator">True</property>
+                        <property name="label" translatable="no"></property>
                         <child>
                           <placeholder/>
                         </child>
commit 296c0760f517b933cfd5e5ccef722e797a2b2bb0
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Jan 26 12:22:36 2024 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    tdf#159381 TimeStamp(RFC3161) create problem by asn1 format error.
    
    DER rules say that BOOLEAN values are either FALSE (0x00)
    or TRUE (0xff)
    
    Change-Id: I59f57557fbc4d6447e0d8e994b04adda1ee8c1a9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162597
    Tested-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    (cherry picked from commit d2d8f8bf82558d9aa548fb9f13bed410e0baf79b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162614
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/svl/source/crypto/cryptosign.cxx b/svl/source/crypto/cryptosign.cxx
index a234afccbc27..3fe6ae90ab34 100644
--- a/svl/source/crypto/cryptosign.cxx
+++ b/svl/source/crypto/cryptosign.cxx
@@ -1037,6 +1037,7 @@ bool Signing::Sign(OStringBuffer& rCMSHexBuffer)
         ts_digest.len = aTsHashResult.size();
 
         unsigned char cOne = 1;
+        unsigned char cTRUE = 0xff; // under DER rules true is 0xff, false is 
0x00
         src.version.type = siUnsignedInteger;
         src.version.data = &cOne;
         src.version.len = sizeof(cOne);
@@ -1056,8 +1057,8 @@ bool Signing::Sign(OStringBuffer& rCMSHexBuffer)
         src.nonce.len = sizeof(nNonce);
 
         src.certReq.type = siUnsignedInteger;
-        src.certReq.data = &cOne;
-        src.certReq.len = sizeof(cOne);
+        src.certReq.data = &cTRUE;
+        src.certReq.len = sizeof(cTRUE);
 
         src.extensions = nullptr;
 
commit da8d2a4394d20c6d8234af84c958dc10b98f1aa2
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Wed Jan 24 15:05:07 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    tdf#142806 sw: PDF export: fix multi-frame links/fields
    
    * SwRootFrame::CalcFrameRects() assumption that there is only 1 frame is
      wrong, add a loop; also remove dead eMode check in else branch
    * GetCursorRectsContainingText() cannot call GetCurrFrame() because that
      returns always the same frame, but it can be split across several
    * fix GetFrameOfModify() to return the correct frame in case of a field
      (where it returned always the frame containing the start of the field,
      but pViewPosAndCalcFrame could be in a follow frame)
    
    (regression from commit 5726be1314517d47dd733aabe64a3d85cce094c5)
    
    Change-Id: I63a94080ee120f178580e0339db4541691165780
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162523
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 9ba8d68c2b2fd06340bbdcb61dc3d57f6e3eb974)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162565
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/sw/source/core/layout/frmtool.cxx 
b/sw/source/core/layout/frmtool.cxx
index e8fa815776e2..eeab5c60c1ce 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -3881,7 +3881,32 @@ SwFrame* GetFrameOfModify(SwRootFrame const*const 
pLayout, sw::BroadcastingModif
     } while( bClientIterChanged );
 
     if( pPos && pMinFrame && pMinFrame->IsTextFrame() )
-        return static_cast<SwTextFrame*>(pMinFrame)->GetFrameAtPos( *pPos );
+    {
+        SwTextFrame * 
pAtPos(static_cast<SwTextFrame*>(pMinFrame)->GetFrameAtPos(*pPos));
+        if (!pViewPosAndCalcFrame)
+        {
+            return pAtPos;
+        }
+        TextFrameIndex nPos(pAtPos->MapModelToViewPos(*pPos));
+        SwPageFrame const*const pPage(pAtPos->getRootFrame()->GetPageAtPos(
+                pViewPosAndCalcFrame->first, nullptr, true));
+        SwFrame * pOnPage(pAtPos); // if all else fails return first one
+        ++nPos; // follow field portions are on follow frames that have 
mnOffset
+            // already incremented past the field, need to check that index too
+        while (pAtPos && pAtPos->GetOffset() <= nPos)
+        {
+            if (pAtPos->getFrameArea().Contains(pViewPosAndCalcFrame->first))
+            {
+                return pAtPos;
+            }
+            if (pAtPos->FindPageFrame() == pPage)
+            {
+                pOnPage = pAtPos;
+            }
+            pAtPos = pAtPos->GetFollow();
+        }
+        return pOnPage;
+    }
 
     return pMinFrame;
 }
diff --git a/sw/source/core/layout/trvlfrm.cxx 
b/sw/source/core/layout/trvlfrm.cxx
index 459c046021f8..a8445e90dd5a 100644
--- a/sw/source/core/layout/trvlfrm.cxx
+++ b/sw/source/core/layout/trvlfrm.cxx
@@ -2600,40 +2600,49 @@ void SwRootFrame::CalcFrameRects(SwShellCursor const& 
rCursor, SwRects & rRects,
     // splitting of portions vertically (causes spurious extra PDF annotations)
     if (eMode == RectsMode::NoAnchoredFlys)
     {
-        assert(pStartFrame == pEndFrame); // link or field all in 1 frame
-        assert(pStartFrame->IsTextFrame());
-        SwTextGridItem const*const 
pGrid(GetGridItem(pStartFrame->FindPageFrame()));
-        SwTextPaintInfo info(static_cast<SwTextFrame*>(pStartFrame), 
pStartFrame->FindPageFrame()->getFrameArea());
-        SwTextPainter painter(static_cast<SwTextFrame*>(pStartFrame), &info);
-        // because nothing outside the start/end has been added, it doesn't
-        // matter to match exactly the start/end, subtracting outside is no-op
-        
painter.CharToLine(static_cast<SwTextFrame*>(pStartFrame)->MapModelToViewPos(*pStartPos));
-        do
-        {
-            info.SetPos(painter.GetTopLeft());
-            bool const bAdjustBaseLine(
-                
painter.GetLineInfo().HasSpecialAlign(pStartFrame->IsVertical())
-                || nullptr != pGrid || 
painter.GetCurr()->GetHangingBaseline());
-            SwTwips nAscent, nHeight;
-            painter.CalcAscentAndHeight(nAscent, nHeight);
-            SwTwips const nOldY(info.Y());
-            for (SwLinePortion const* pLP = 
painter.GetCurr()->GetFirstPortion();
-                    pLP; pLP = pLP->GetNextPortion())
+        for (SwContentFrame * pFrame = pStartFrame; ; pFrame = 
pFrame->GetFollow())
+        {
+            assert(pFrame->IsTextFrame());
+            SwTextGridItem const*const 
pGrid(GetGridItem(pFrame->FindPageFrame()));
+            SwTextPaintInfo info(static_cast<SwTextFrame*>(pFrame), 
pFrame->FindPageFrame()->getFrameArea());
+            SwTextPainter painter(static_cast<SwTextFrame*>(pFrame), &info);
+            // because nothing outside the start/end has been added, it doesn't
+            // matter to match exactly the start/end, subtracting outside is 
no-op
+            if (pFrame == pStartFrame)
             {
-                if (pLP->IsFlyPortion())
+                
painter.CharToLine(static_cast<SwTextFrame*>(pFrame)->MapModelToViewPos(*pStartPos));
+            }
+            do
+            {
+                info.SetPos(painter.GetTopLeft());
+                bool const bAdjustBaseLine(
+                    painter.GetLineInfo().HasSpecialAlign(pFrame->IsVertical())
+                    || nullptr != pGrid || 
painter.GetCurr()->GetHangingBaseline());
+                SwTwips nAscent, nHeight;
+                painter.CalcAscentAndHeight(nAscent, nHeight);
+                SwTwips const nOldY(info.Y());
+                for (SwLinePortion const* pLP = 
painter.GetCurr()->GetFirstPortion();
+                        pLP; pLP = pLP->GetNextPortion())
                 {
-                    info.Y(info.Y() + (bAdjustBaseLine
-                            ? painter.AdjustBaseLine(*painter.GetCurr(), pLP)
-                            : nAscent));
-                    SwRect flyPortion;
-                    info.CalcRect(*pLP, &flyPortion);
-                    Sub(aRegion, flyPortion);
-                    info.Y(nOldY);
+                    if (pLP->IsFlyPortion())
+                    {
+                        info.Y(info.Y() + (bAdjustBaseLine
+                                ? painter.AdjustBaseLine(*painter.GetCurr(), 
pLP)
+                                : nAscent));
+                        SwRect flyPortion;
+                        info.CalcRect(*pLP, &flyPortion);
+                        Sub(aRegion, flyPortion);
+                        info.Y(nOldY);
+                    }
+                    pLP->Move(info);
                 }
-                pLP->Move(info);
+            }
+            while (painter.Next());
+            if (pFrame == pEndFrame)
+            {
+                break;
             }
         }
-        while (painter.Next());
     }
     else while (pPage)
     {
diff --git a/sw/source/core/text/EnhancedPDFExportHelper.cxx 
b/sw/source/core/text/EnhancedPDFExportHelper.cxx
index 5ad1fbe8f005..8ff764d92f3e 100644
--- a/sw/source/core/text/EnhancedPDFExportHelper.cxx
+++ b/sw/source/core/text/EnhancedPDFExportHelper.cxx
@@ -364,7 +364,10 @@ bool lcl_TryMoveToNonHiddenField(SwEditShell& rShell, 
const SwTextNode& rNd, con
             && *pStart <= pos && pos <= *pEnd)
         {
             SwRect charRect;
-            if (rShell.GetCurrFrame(false)->GetCharRect(charRect, pos, &cms, 
false)
+            std::pair<Point, bool> const tmp(center, false);
+            SwContentFrame const*const pFrame(
+                
pos.nNode.GetNode().GetTextNode()->getLayoutFrame(rShell.GetLayout(), &pos, 
&tmp));
+            if (pFrame->GetCharRect(charRect, pos, &cms, false)
                 && rRect.Overlaps(charRect))
             {
                 ret.push_back(rRect);
diff --git a/vcl/qa/cppunit/pdfexport/data/LinkPages.fodt 
b/vcl/qa/cppunit/pdfexport/data/LinkPages.fodt
new file mode 100644
index 000000000000..50fff8bea4fc
--- /dev/null
+++ b/vcl/qa/cppunit/pdfexport/data/LinkPages.fodt
@@ -0,0 +1,138 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ 
<office:meta><meta:creation-date>2024-01-23T14:35:36.080290286</meta:creation-date><dc:date>2024-01-24T17:29:01.312633690</dc:date><meta:editing-duration>PT25M37S</meta:editing-duration><meta:editing-cycles>6</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Linux_X86_64
 
LibreOffice_project/7ec73fbe5f902e790d437f0130e85c162b99b232</meta:generator><meta:print-date>2024-01-24T17:28:41.712753252</meta:print-date><meta:printed-by>PDF
 files</meta:printed-by><dc:title>test file</dc:title><meta:document-statistic 
meta:table-count="0" meta:image-count="0" meta:object-count="0" 
meta:page-count="4" meta:paragraph-count="2" meta:word-count="5" 
meta:character-count="27" 
meta:non-whitespace-character-count="24"/></office:meta>
+ <office:font-face-decls>
+  <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation 
Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
+  <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation 
Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans 
CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Sans1" svg:font-family="'Noto Sans'" 
style:font-family-generic="system" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif 
CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" 
draw:start-line-spacing-vertical="0.283cm" 
draw:end-line-spacing-horizontal="0.283cm" 
draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0cm" 
style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="de" fo:country="DE" style:letter-kerning="true" 
style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Noto Sans1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" 
style:punctuation-wrap="hanging" style:line-break="strict" 
style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="de" fo:country="DE" style:letter-kerning="true" 
style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Noto Sans1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text"/>
+  <style:style style:name="Heading" style:family="paragraph" 
style:parent-style-name="Standard" style:next-style-name="Text_20_body" 
style:class="text">
+   <style:paragraph-properties fo:margin-top="0.423cm" 
fo:margin-bottom="0.212cm" style:contextual-spacing="false" 
fo:keep-with-next="always"/>
+   <style:text-properties style:font-name="Liberation Sans" 
fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" 
style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Noto 
Sans CJK SC" style:font-family-asian="'Noto Sans CJK SC'" 
style:font-family-generic-asian="system" style:font-pitch-asian="variable" 
style:font-size-asian="14pt" style:font-name-complex="Noto Sans1" 
style:font-family-complex="'Noto Sans'" 
style:font-family-generic-complex="system" style:font-pitch-complex="variable" 
style:font-size-complex="14pt"/>
+  </style:style>
+  <style:style style:name="Text_20_body" style:display-name="Text body" 
style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+   <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" 
style:contextual-spacing="false" fo:line-height="115%"/>
+  </style:style>
+  <style:style style:name="Heading_20_1" style:display-name="Heading 1" 
style:family="paragraph" style:parent-style-name="Heading" 
style:next-style-name="Text_20_body" style:default-outline-level="1" 
style:class="text">
+   <style:paragraph-properties fo:margin-top="0.423cm" 
fo:margin-bottom="0.212cm" style:contextual-spacing="false"/>
+   <style:text-properties fo:font-size="18pt" fo:font-weight="bold" 
style:font-size-asian="18pt" style:font-weight-asian="bold" 
style:font-size-complex="18pt" style:font-weight-complex="bold"/>
+  </style:style>
+  <style:style style:name="Internet_20_link" style:display-name="Internet 
link" style:family="text">
+   <style:text-properties fo:color="#000080" loext:opacity="100%" 
style:text-underline-style="solid" style:text-underline-width="auto" 
style:text-underline-color="font-color"/>
+  </style:style>
+  <text:outline-style style:name="Outline">
+   <text:outline-level-style text:level="1" loext:num-list-format="%1%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="2" loext:num-list-format="%2%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="3" loext:num-list-format="%3%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="4" loext:num-list-format="%4%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="5" loext:num-list-format="%5%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="6" loext:num-list-format="%6%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="7" loext:num-list-format="%7%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="8" loext:num-list-format="%8%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="9" loext:num-list-format="%9%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="10" loext:num-list-format="%10%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+  </text:outline-style>
+  <text:notes-configuration text:note-class="footnote" style:num-format="1" 
text:start-value="0" text:footnotes-position="page" 
text:start-numbering-at="document"/>
+  <text:notes-configuration text:note-class="endnote" style:num-format="i" 
text:start-value="0"/>
+  <text:linenumbering-configuration text:number-lines="false" 
text:offset="0.499cm" style:num-format="1" text:number-position="left" 
text:increment="5"/>
+  </office:styles>
+ <office:automatic-styles>
+  <style:style style:name="P3" style:family="paragraph" 
style:parent-style-name="Heading_20_1" style:master-page-name="">
+   <style:paragraph-properties fo:orphans="0" fo:widows="0" 
style:page-number="auto"/>
+   <style:text-properties/>
+  </style:style>
+  <style:style style:name="T4" style:family="text">
+   <style:text-properties fo:font-size="96pt" style:font-size-asian="96pt" 
style:font-size-complex="96pt"/>
+  </style:style>
+  <style:style style:name="T6" style:family="text">
+   <style:text-properties fo:font-size="96pt" style:font-size-asian="96pt" 
style:font-size-complex="96pt"/>
+  </style:style>
+  <style:page-layout style:name="pm1">
+   <style:page-layout-properties fo:page-width="10.5cm" 
fo:page-height="14.801cm" style:num-format="1" 
style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" 
fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" 
style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" 
style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" 
style:layout-grid-mode="none" style:layout-grid-ruby-below="false" 
style:layout-grid-print="false" style:layout-grid-display="false" 
style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+    <style:footnote-sep style:width="0.018cm" 
style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" 
style:line-style="solid" style:adjustment="left" style:rel-width="25%" 
style:color="#000000"/>
+   </style:page-layout-properties>
+   <style:header-style/>
+   <style:footer-style/>
+  </style:page-layout>
+  <style:style style:name="dp1" style:family="drawing-page">
+   <style:drawing-page-properties draw:background-size="full"/>
+  </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+  <style:master-page style:name="Standard" style:page-layout-name="pm1" 
draw:style-name="dp1"/>
+  </office:master-styles>
+ <office:body>
+  <office:text text:use-soft-page-breaks="true">
+   <text:sequence-decls>
+    <text:sequence-decl text:display-outline-level="0" 
text:name="Illustration"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+   </text:sequence-decls>
+   <text:h text:style-name="P3" text:outline-level="1"><text:a 
xlink:type="simple" xlink:href="http://example.com/"; 
text:style-name="Internet_20_link" 
text:visited-style-name="Visited_20_Internet_20_Link"><text:bookmark-start 
text:name="__RefHeading___Toc17_3815242785"/><text:span 
text:style-name="T6">foo foo </text:span><text:soft-page-break/><text:span 
text:style-name="T6">foo foo</text:span></text:a><text:bookmark-end 
text:name="__RefHeading___Toc17_3815242785"/></text:h>
+   <text:p text:style-name="Text_20_body"><text:soft-page-break/><text:span 
text:style-name="T4"><text:bookmark-ref text:reference-format="text" 
text:ref-name="__RefHeading___Toc17_3815242785">foo foo foo 
foo</text:bookmark-ref></text:span><text:soft-page-break/></text:p>
+  </office:text>
+ </office:body>
+</office:document>
\ No newline at end of file
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx 
b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index d5515facb56f..d362a3855303 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -2740,6 +2740,613 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf157816Link)
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), 
pAnnots->GetElements().size());
 }
 
+CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf142806)
+{
+    aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
+
+    // Enable PDF/UA
+    uno::Sequence<beans::PropertyValue> aFilterData(
+        comphelper::InitPropertySequence({ { "PDFUACompliance", uno::Any(true) 
} }));
+    aMediaDescriptor["FilterData"] <<= aFilterData;
+    saveAsPDF(u"LinkPages.fodt");
+
+    vcl::filter::PDFDocument aDocument;
+    SvFileStream aStream(maTempFile.GetURL(), StreamMode::READ);
+    CPPUNIT_ASSERT(aDocument.Read(aStream));
+
+    std::vector<vcl::filter::PDFObjectElement*> aPages = aDocument.GetPages();
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aPages.size());
+
+    vcl::filter::PDFObjectElement* pDocument(nullptr);
+    for (const auto& rDocElement : aDocument.GetElements())
+    {
+        auto pObject1 = 
dynamic_cast<vcl::filter::PDFObjectElement*>(rDocElement.get());
+        if (!pObject1)
+            continue;
+        auto pType1 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObject1->Lookup("Type"_ostr));
+        if (pType1 && pType1->GetValue() == "StructElem")
+        {
+            auto pS1 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObject1->Lookup("S"_ostr));
+            if (pS1 && pS1->GetValue() == "Document")
+            {
+                pDocument = pObject1;
+            }
+        }
+    }
+    CPPUNIT_ASSERT(pDocument);
+
+    auto pKidsD = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pDocument->Lookup("K"_ostr));
+    CPPUNIT_ASSERT(pKidsD);
+    // assume there are no MCID ref at this level
+    auto pKidsDv = pKidsD->GetElements();
+    auto pRefKidD0 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsDv[0]);
+    CPPUNIT_ASSERT(pRefKidD0);
+    auto pObjectD0 = pRefKidD0->LookupObject();
+    CPPUNIT_ASSERT(pObjectD0);
+    auto pTypeD0 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD0->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD0->GetValue());
+    auto pSD0 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD0->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("H1"_ostr, pSD0->GetValue());
+
+    auto pKidsD0 = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD0->Lookup("K"_ostr));
+    CPPUNIT_ASSERT(pKidsD0);
+    auto pKidsD0v = pKidsD0->GetElements();
+
+    auto pRefKidD00 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD0v[0]);
+    CPPUNIT_ASSERT(pRefKidD00);
+    auto pObjectD00 = pRefKidD00->LookupObject();
+    CPPUNIT_ASSERT(pObjectD00);
+    auto pTypeD00 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD00->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD00->GetValue());
+    auto pSD00 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD00->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD00->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD00->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.693, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(240.455, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(241.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(350.855, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    auto pRefKidD01 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD0v[1]);
+    CPPUNIT_ASSERT(pRefKidD01);
+    auto pObjectD01 = pRefKidD01->LookupObject();
+    CPPUNIT_ASSERT(pObjectD01);
+    auto pTypeD01 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD01->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD01->GetValue());
+    auto pSD01 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD01->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD01->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD01->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.643, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(130.055, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(241.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(240.455, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    auto pRefKidD02 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD0v[2]);
+    CPPUNIT_ASSERT(pRefKidD02);
+    auto pObjectD02 = pRefKidD02->LookupObject();
+    CPPUNIT_ASSERT(pObjectD02);
+    auto pTypeD02 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD02->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD02->GetValue());
+    auto pSD02 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD02->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD02->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD02->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.643, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(252.455, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(241.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(362.855, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    auto pRefKidD03 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD0v[3]);
+    CPPUNIT_ASSERT(pRefKidD03);
+    auto pObjectD03 = pRefKidD03->LookupObject();
+    CPPUNIT_ASSERT(pObjectD03);
+    auto pTypeD03 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD03->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD03->GetValue());
+    auto pSD03 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD03->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD03->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD03->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.643, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(142.055, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(206.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(252.455, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+    auto pRefKidD1 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsDv[1]);
+    CPPUNIT_ASSERT(pRefKidD1);
+    auto pObjectD1 = pRefKidD1->LookupObject();
+    CPPUNIT_ASSERT(pObjectD1);
+    auto pTypeD1 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD1->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD1->GetValue());
+    auto pSD1 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD1->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Text#20body"_ostr, pSD1->GetValue());
+
+    auto pKidsD1 = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD1->Lookup("K"_ostr));
+    CPPUNIT_ASSERT(pKidsD1);
+    auto pKidsD1v = pKidsD1->GetElements();
+
+    auto pRefKidD10 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD1v[0]);
+    CPPUNIT_ASSERT(pRefKidD10);
+    auto pObjectD10 = pRefKidD10->LookupObject();
+    CPPUNIT_ASSERT(pObjectD10);
+    auto pTypeD10 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD10->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD10->GetValue());
+    auto pSD10 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD10->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD10->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD10->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.693, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(252.455, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(241.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(362.855, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    auto pRefKidD11 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD1v[1]);
+    CPPUNIT_ASSERT(pRefKidD11);
+    auto pObjectD11 = pRefKidD11->LookupObject();
+    CPPUNIT_ASSERT(pObjectD11);
+    auto pTypeD11 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD11->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD11->GetValue());
+    auto pSD11 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD11->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD11->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD11->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.643, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(140.005, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(241.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(252.455, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    auto pRefKidD12 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD1v[2]);
+    CPPUNIT_ASSERT(pRefKidD12);
+    auto pObjectD12 = pRefKidD12->LookupObject();
+    CPPUNIT_ASSERT(pObjectD12);
+    auto pTypeD12 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD12->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD12->GetValue());
+    auto pSD12 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD12->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD12->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD12->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.643, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(252.455, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(241.007, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(362.855, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    auto pRefKidD13 = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pKidsD1v[3]);
+    CPPUNIT_ASSERT(pRefKidD13);
+    auto pObjectD13 = pRefKidD13->LookupObject();
+    CPPUNIT_ASSERT(pObjectD13);
+    auto pTypeD13 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD13->Lookup("Type"_ostr));
+    CPPUNIT_ASSERT_EQUAL("StructElem"_ostr, pTypeD13->GetValue());
+    auto pSD13 = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjectD13->Lookup("S"_ostr));
+    CPPUNIT_ASSERT_EQUAL("Link"_ostr, pSD13->GetValue());
+    {
+        auto pKids = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pObjectD13->Lookup("K"_ostr));
+        auto nMCID(0);
+        auto nRef(0);
+        for (size_t i = 0; i < pKids->GetElements().size(); ++i)
+        {
+            auto pNum = 
dynamic_cast<vcl::filter::PDFNumberElement*>(pKids->GetElement(i));
+            auto pObjR = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pKids->GetElement(i));
+            if (pNum)
+            {
+                ++nMCID;
+            }
+            if (pObjR)
+            {
+                ++nRef;
+                auto pOType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pObjR->LookupElement("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("OBJR"_ostr, pOType->GetValue());
+                auto pAnnotRef = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(
+                    pObjR->LookupElement("Obj"_ostr));
+                auto pAnnot = pAnnotRef->LookupObject();
+                auto pAType
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Annot"_ostr, pAType->GetValue());
+                auto pASubtype
+                    = 
dynamic_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr));
+                CPPUNIT_ASSERT_EQUAL("Link"_ostr, pASubtype->GetValue());
+                auto pAContents = 
dynamic_cast<vcl::filter::PDFHexStringElement*>(
+                    pAnnot->Lookup("Contents"_ostr));
+                CPPUNIT_ASSERT_EQUAL(
+                    u"foo foo foo foo"_ustr,
+                    
::vcl::filter::PDFDocument::DecodeHexStringUTF16BE(*pAContents));
+                auto pStructParent = 
dynamic_cast<vcl::filter::PDFNumberElement*>(
+                    pAnnot->Lookup("StructParent"_ostr));
+                CPPUNIT_ASSERT(pStructParent); // every link must have it!
+                auto pARect
+                    = 
dynamic_cast<vcl::filter::PDFArrayElement*>(pAnnot->Lookup("Rect"_ostr));
+                CPPUNIT_ASSERT(pARect);
+                const auto& rElements = pARect->GetElements();
+                CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rElements.size());
+                const auto* pNumL = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[0]);
+                CPPUNIT_ASSERT(pNumL);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(56.643, pNumL->GetValue(), 1e-3);
+                const auto* pNumT = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[1]);
+                CPPUNIT_ASSERT(pNumT);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(140.005, pNumT->GetValue(), 1e-3);
+                const auto* pNumR = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[2]);
+                CPPUNIT_ASSERT(pNumR);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(184.707, pNumR->GetValue(), 1e-3);
+                const auto* pNumB = 
dynamic_cast<vcl::filter::PDFNumberElement*>(rElements[3]);
+                CPPUNIT_ASSERT(pNumB);
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(252.455, pNumB->GetValue(), 1e-3);
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nMCID)>(1), nMCID);
+        CPPUNIT_ASSERT_EQUAL(static_cast<decltype(nRef)>(1), nRef);
+    }
+
+    // the problem was that the links in follow frames were all missing
+    auto pAnnots0 = 
dynamic_cast<vcl::filter::PDFArrayElement*>(aPages[0]->Lookup("Annots"_ostr));
+    CPPUNIT_ASSERT(pAnnots0);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), 
pAnnots0->GetElements().size());
+    auto pAnnots1 = 
dynamic_cast<vcl::filter::PDFArrayElement*>(aPages[1]->Lookup("Annots"_ostr));
+    CPPUNIT_ASSERT(pAnnots1);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), 
pAnnots1->GetElements().size());
+    auto pAnnots2 = 
dynamic_cast<vcl::filter::PDFArrayElement*>(aPages[2]->Lookup("Annots"_ostr));
+    CPPUNIT_ASSERT(pAnnots2);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), 
pAnnots2->GetElements().size());
+    auto pAnnots3 = 
dynamic_cast<vcl::filter::PDFArrayElement*>(aPages[3]->Lookup("Annots"_ostr));
+    CPPUNIT_ASSERT(pAnnots3);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), 
pAnnots3->GetElements().size());
+}
+
 CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf115967)
 {
     aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
commit ec35c46262c9d4bbd68f347a02fd26266ec8891d
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Wed Jan 24 20:18:01 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    tdf#142806 sw: slowness if Style Inspector visible during PDF export
    
    There are loads of bookmarks in this bugdoc, WriterInspectorTextPanel
    update functions somehow iterate them all, and it's entirely pointless
    because the view doesn't repaint during store anyway.
    
    PDF export does a lot of cursor moves at the shell to get selection
    rectangles, and each one triggers the slow update in AttrChangedNotify.
    
    Also simplify, the m_pShell is already there.
    
    Change-Id: I2177db1a2ab712e8984772843bd5f995e6989a4f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162525
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 5314947eea119a1ed4960e23c61530669b97468e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162544
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx 
b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx
index 49086fa9a04f..c6376910f1a5 100644
--- a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx
+++ b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx
@@ -758,12 +758,18 @@ IMPL_LINK(WriterInspectorTextPanel, AttrChangedNotify, 
LinkParamNone*, pLink, vo
     if (m_oldLink.IsSet())
         m_oldLink.Call(pLink);
 
+    if (m_pShell->IsViewLocked())
+    {
+        return; // tdf#142806 avoid slowdown when storing files
+    }
+
     SwDocShell* pDocSh = m_pShell->GetDoc()->GetDocShell();
     std::vector<svx::sidebar::TreeNode> aStore;
 
-    SwEditShell* pEditSh = pDocSh ? pDocSh->GetDoc()->GetEditShell() : nullptr;
-    if (pEditSh && pEditSh->GetCursor()->GetPointNode().GetTextNode())
-        UpdateTree(*pDocSh, *pEditSh, aStore, m_nParIdx);
+    if (m_pShell->GetCursor()->GetPointNode().GetTextNode())
+    {
+        UpdateTree(*pDocSh, *m_pShell, aStore, m_nParIdx);
+    }
 
     updateEntries(aStore, m_nParIdx);
 }
commit 50758f5627df8b5d974a5e78033d49cf1b480ee9
Author:     Christian Lohmaier <lohmaier+libreoff...@googlemail.com>
AuthorDate: Thu Jan 25 18:46:08 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Jan 29 10:30:26 2024 +0100

    update credits
    
    Change-Id: Ifb0ea3df4b544706527081f0ff21694c4dd2cad6
    (cherry picked from commit 038476af694ef28f01aedb168273c3ba8709c209)

diff --git a/readlicense_oo/license/CREDITS.fodt 
b/readlicense_oo/license/CREDITS.fodt
index 3a01416f7c2b..e552e56da725 100644
--- a/readlicense_oo/license/CREDITS.fodt
+++ b/readlicense_oo/license/CREDITS.fodt
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
- <office:meta><dc:title>Credits » 
LibreOffice</dc:title><meta:keyword>Credits</meta:keyword><meta:keyword>contributors</meta:keyword><meta:keyword>coders</meta:keyword><meta:keyword>developers</meta:keyword><dc:description>Credits
 for the LibreOffice 
development/coding.</dc:description><meta:generator>LibreOffice/7.4.7.2$Linux_X86_64
 
LibreOffice_project/40$Build-2</meta:generator><dc:date>2012-02-20T22:17:18.060000000</dc:date><meta:editing-duration>PT14M12S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:document-statistic
 meta:table-count="5" meta:image-count="1" meta:object-count="0" 
meta:page-count="2" meta:paragraph-count="4838" meta:word-count="18051" 
meta:character-count="130587" 
meta:non-whitespace-character-count="114528"/><meta:user-defined 
meta:name="google-site-verification">JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA</meta:user-defined></office:meta>
+ <office:meta><dc:title>Credits » 
LibreOffice</dc:title><meta:keyword>Credits</meta:keyword><meta:keyword>contributors</meta:keyword><meta:keyword>coders</meta:keyword><meta:keyword>developers</meta:keyword><dc:description>Credits
 for the LibreOffice 
development/coding.</dc:description><meta:generator>LibreOffice/7.6.4.1$Linux_X86_64
 
LibreOffice_project/e19e193f88cd6c0525a17fb7a176ed8e6a3e2aa1</meta:generator><dc:date>2012-02-20T22:17:18.060000000</dc:date><meta:editing-duration>PT14M12S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:document-statistic
 meta:table-count="5" meta:image-count="1" meta:object-count="0" 
meta:page-count="2" meta:paragraph-count="4861" meta:word-count="18149" 
meta:character-count="131337" 
meta:non-whitespace-character-count="115194"/><meta:user-defined 
meta:name="google-site-verification">JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA</meta:user-defined></office:meta>
  <office:settings>
   <config:config-item-set config:name="ooo:view-settings">
-   <config:config-item config:name="ViewAreaTop" 
config:type="long">1752245</config:config-item>
+   <config:config-item config:name="ViewAreaTop" 
config:type="long">1169</config:config-item>
    <config:config-item config:name="ViewAreaLeft" 
config:type="long">501</config:config-item>
-   <config:config-item config:name="ViewAreaWidth" 
config:type="long">48182</config:config-item>
-   <config:config-item config:name="ViewAreaHeight" 
config:type="long">21592</config:config-item>
+   <config:config-item config:name="ViewAreaWidth" 
config:type="long">55167</config:config-item>
+   <config:config-item config:name="ViewAreaHeight" 
config:type="long">26989</config:config-item>
    <config:config-item config:name="ShowRedlineChanges" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="InBrowseMode" 
config:type="boolean">true</config:config-item>
    <config:config-item-map-indexed config:name="Views">
     <config:config-item-map-entry>
      <config:config-item config:name="ViewId" 
config:type="string">view2</config:config-item>
-     <config:config-item config:name="ViewLeft" 
config:type="long">24075</config:config-item>
-     <config:config-item config:name="ViewTop" 
config:type="long">1773068</config:config-item>
+     <config:config-item config:name="ViewLeft" 
config:type="long">3649</config:config-item>
+     <config:config-item config:name="ViewTop" 
config:type="long">3434</config:config-item>
      <config:config-item config:name="VisibleLeft" 
config:type="long">501</config:config-item>
-     <config:config-item config:name="VisibleTop" 
config:type="long">1752245</config:config-item>
-     <config:config-item config:name="VisibleRight" 
config:type="long">48682</config:config-item>
-     <config:config-item config:name="VisibleBottom" 
config:type="long">1773835</config:config-item>
+     <config:config-item config:name="VisibleTop" 
config:type="long">1169</config:config-item>
+     <config:config-item config:name="VisibleRight" 
config:type="long">55667</config:config-item>
+     <config:config-item config:name="VisibleBottom" 
config:type="long">28157</config:config-item>
      <config:config-item config:name="ZoomType" 
config:type="short">0</config:config-item>
      <config:config-item config:name="ViewLayoutColumns" 
config:type="short">0</config:config-item>
      <config:config-item config:name="ViewLayoutBookMode" 
config:type="boolean">false</config:config-item>
@@ -26,68 +26,53 @@
      <config:config-item config:name="IsSelectedFrame" 
config:type="boolean">false</config:config-item>
      <config:config-item config:name="KeepRatio" 
config:type="boolean">false</config:config-item>
      <config:config-item config:name="AnchoredTextOverflowLegacy" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="LegacySingleLineFontwork" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="ConnectorUseSnapRect" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="IgnoreBreakAfterMultilineField" 
config:type="boolean">false</config:config-item>
     </config:config-item-map-entry>
    </config:config-item-map-indexed>
   </config:config-item-set>
   <config:config-item-set config:name="ooo:configuration-settings">
-   <config:config-item config:name="PrintProspect" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintReversed" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintSingleJobs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintRightPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintProspectRTL" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="PrintLeftPages" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="PrintTables" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintPaperFromSetup" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="PrintControls" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="PrintPageBackground" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="PrintDrawings" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintProspect" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="PrintBlackFonts" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="PrintAnnotationMode" 
config:type="short">0</config:config-item>
-   <config:config-item config:name="PrintTextPlaceholder" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="ProtectFields" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintEmptyPages" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintSingleJobs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HeaderSpacingBelowLastPara" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="ProtectBookmarks" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="EmptyDbFieldHidesPara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ContinuousEndnotes" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="DisableOffPagePositioning" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintTables" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="SubtractFlysAnchoredAtFlys" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="PropLineSpacingShrinksFirstLine" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="GutterAtTop" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintFaxName" config:type="string"/>
+   <config:config-item config:name="SurroundTextWrapSmall" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="EmbedSystemFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PropLineSpacingShrinksFirstLine" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverMargin" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="EmbedComplexScriptFonts" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="EmbedAsianScriptFonts" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="EmbedLatinScriptFonts" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="EmbedOnlyUsedFonts" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="WordLikeWrapForAsCharFlys" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="ContinuousEndnotes" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="EmbedFonts" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="ClippedPictures" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FrameAutowidthWithMorePara" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="FloattableNomargins" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="UnbreakableNumberings" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="HeaderSpacingBelowLastPara" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="AllowPrintJobCancel" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="UseOldPrinterMetrics" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="TabOverMargin" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="TabsRelativeToIndent" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseFormerObjectPositioning" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="UseOldNumbering" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="InvertBorderSpacing" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintPaperFromSetup" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="UpdateFromTemplate" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="CurrentDatabaseCommandType" 
config:type="int">0</config:config-item>
-   <config:config-item config:name="LinkUpdateMode" 
config:type="short">1</config:config-item>
-   <config:config-item config:name="AddParaSpacingToTableCells" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="FrameAutowidthWithMorePara" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="CurrentDatabaseCommand" 
config:type="string"/>
-   <config:config-item config:name="PrinterIndependentLayout" 
config:type="string">high-resolution</config:config-item>
-   <config:config-item config:name="ApplyUserData" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintFaxName" config:type="string"/>
+   <config:config-item config:name="RsidRoot" 
config:type="int">1557161</config:config-item>
+   <config:config-item config:name="PrinterPaperFromSetup" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="CurrentDatabaseDataSource" 
config:type="string">Adressen</config:config-item>
-   <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="IsKernAsianPunctuation" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="SaveThumbnail" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="UseFormerTextWrapping" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="AddExternalLeading" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="AddParaTableSpacing" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="StylesNoDefault" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="ChartAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UpdateFromTemplate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddFrameOffsets" 
config:type="boolean">false</config:config-item>
    <config:config-item-map-indexed config:name="ForbiddenCharacters">
     <config:config-item-map-entry>
      <config:config-item config:name="Language" 
config:type="string">hu</config:config-item>
@@ -97,54 +82,73 @@
      <config:config-item config:name="EndLine" config:type="string"/>
     </config:config-item-map-entry>
    </config:config-item-map-indexed>
-   <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
-   <config:config-item config:name="AddParaTableSpacingAtStart" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="Rsid" 
config:type="int">12928953</config:config-item>
-   <config:config-item config:name="EmbeddedDatabaseName" 
config:type="string"/>
-   <config:config-item config:name="FieldAutoUpdate" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="OutlineLevelYieldsNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LoadReadonly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="Rsid" 
config:type="int">13054093</config:config-item>
    <config:config-item config:name="FootnoteInColumnToPageEnd" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="AlignTabStopPosition" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="CharacterCompressionType" 
config:type="short">0</config:config-item>
-   <config:config-item config:name="PrinterName" config:type="string"/>
+   <config:config-item config:name="ProtectFields" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="SaveGlobalDocumentLinks" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrinterPaperFromSetup" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="UseFormerLineSpacing" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="AddParaLineSpacingToTableCells" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="UseFormerObjectPositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LinkUpdateMode" 
config:type="short">1</config:config-item>
+   <config:config-item config:name="AddExternalLeading" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="PrintGraphics" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedSystemFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IsLabelDocument" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaLineSpacingToTableCells" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerTextWrapping" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HyphenateURLs" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaTableSpacingAtStart" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabsRelativeToIndent" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="FieldAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="SaveVersionOnClose" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ChartAutoUpdate" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="ImagePreferredDPI" 
config:type="int">0</config:config-item>
-   <config:config-item config:name="SurroundTextWrapSmall" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="ConsiderTextWrapOnObjPos" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="MsWordCompTrailingBlanks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+   <config:config-item config:name="SmallCapsPercentage66" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AlignTabStopPosition" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DropCapPunctuation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MathBaselineAlignment" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterName" config:type="string"/>
+   <config:config-item config:name="CharacterCompressionType" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="AddParaTableSpacing" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotJustifyLinesWithManualBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintHiddenText" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IsKernAsianPunctuation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterIndependentLayout" 
config:type="string">high-resolution</config:config-item>
+   <config:config-item config:name="TabOverflow" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddVerticalFrameOffsets" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="TabAtLeftIndentForParagraphsInList" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintRightPages" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="TabOverSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyUserData" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MsWordCompMinLineHeightByFly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTextPlaceholder" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="IgnoreFirstLineIndentInNumbering" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="NoNumberingShowFollowBy" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerLineSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintPageBackground" 
config:type="boolean">true</config:config-item>
    <config:config-item config:name="RedlineProtectionKey" 
config:type="base64Binary"/>
-   <config:config-item config:name="DoNotJustifyLinesWithManualBreak" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintProspectRTL" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="PrintEmptyPages" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedAsianScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="BackgroundParaOverDrawings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveThumbnail" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ConsiderTextWrapOnObjPos" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbeddedDatabaseName" 
config:type="string"/>
+   <config:config-item config:name="ProtectForm" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="DoNotResetParaAttrsForNumFont" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="AddFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MsWordCompTrailingBlanks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmptyDbFieldHidesPara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TableRowKeep" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="NoNumberingShowFollowBy" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="InvertBorderSpacing" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="LoadReadonly" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="DoNotCaptureDrawObjsOnPage" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="AddVerticalFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="GutterAtTop" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="StylesNoDefault" 
config:type="boolean">false</config:config-item>
    <config:config-item config:name="UnxForceZeroExtLeading" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="IsLabelDocument" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="TableRowKeep" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="RsidRoot" 
config:type="int">1557161</config:config-item>
-   <config:config-item config:name="PrintHiddenText" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="ProtectForm" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="MsWordCompMinLineHeightByFly" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="BackgroundParaOverDrawings" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="SaveVersionOnClose" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="MathBaselineAlignment" 
config:type="boolean">false</config:config-item>
-   <config:config-item config:name="SmallCapsPercentage66" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintReversed" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldPrinterMetrics" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommandType" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="PrintDrawings" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="OutlineLevelYieldsNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommand" 
config:type="string"/>
    <config:config-item config:name="CollapseEmptyCellPara" 
config:type="boolean">true</config:config-item>
-   <config:config-item config:name="TabOverflow" 
config:type="boolean">false</config:config-item>
   </config:config-item-set>
  </office:settings>
  <office:scripts>
@@ -169,11 +173,11 @@
  </office:font-face-decls>
  <office:styles>
   <style:default-style style:family="graphic">
-   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" 
draw:start-line-spacing-vertical="0.283cm" 
draw:end-line-spacing-horizontal="0.283cm" 
draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="true"/>
-   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" style:writing-mode="lr-tb" 
style:font-independent-line-spacing="false">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" 
draw:start-line-spacing-vertical="0.283cm" 
draw:end-line-spacing-horizontal="0.283cm" 
draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" 
style:flow-with-text="true"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0cm" 
style:font-independent-line-spacing="false">
     <style:tab-stops/>
    </style:paragraph-properties>
-   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" loext:color-lum-mod="100%" loext:color-lum-off="0%" 
style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="hu" 
fo:country="HU" style:letter-kerning="true" style:font-name-asian="SimSun" 
style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Mangal1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" 
fo:language="hu" fo:country="HU" style:letter-kerning="true" 
style:font-name-asian="SimSun" style:font-size-asian="12pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Mangal1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN"/>
   </style:default-style>
   <style:default-style style:family="paragraph">
    <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" 
style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" 
style:line-break="strict" style:tab-stop-distance="1.251cm" 
style:writing-mode="page"/>
@@ -345,24 +349,40 @@
   <text:notes-configuration text:note-class="footnote" style:num-format="1" 
text:start-value="0" text:footnotes-position="page" 
text:start-numbering-at="document"/>
   <text:notes-configuration text:note-class="endnote" style:num-format="i" 
text:start-value="0"/>
   <text:linenumbering-configuration text:number-lines="false" 
text:offset="0.499cm" style:num-format="1" text:number-position="left" 
text:increment="5"/>
+  <loext:theme loext:name="Office Theme">
+   <loext:theme-colors loext:name="LibreOffice">
+    <loext:color loext:name="dark1" loext:color="#000000"/>
+    <loext:color loext:name="light1" loext:color="#ffffff"/>
+    <loext:color loext:name="dark2" loext:color="#000000"/>
+    <loext:color loext:name="light2" loext:color="#ffffff"/>
+    <loext:color loext:name="accent1" loext:color="#18a303"/>
+    <loext:color loext:name="accent2" loext:color="#0369a3"/>
+    <loext:color loext:name="accent3" loext:color="#a33e03"/>
+    <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+    <loext:color loext:name="accent5" loext:color="#c99c00"/>
+    <loext:color loext:name="accent6" loext:color="#c9211e"/>
-e 
... etc. - the rest is truncated

Reply via email to