aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2018-12-19 23:01:56 +0100
committerJay Berkenbilt <ejb@ql.org>2018-12-22 01:11:57 +0100
commit313ba081265f69ac9a0324f9fe87087c72918191 (patch)
treea950f59cbc8df90507d93a1d4b49d6cd0a523ea3
parent4fbffdf8ed3992bd1bdd0d742d101202fd462835 (diff)
downloadqpdf-313ba081265f69ac9a0324f9fe87087c72918191.tar.zst
Preserve some outline functionality in page splitting
-rw-r--r--ChangeLog8
-rw-r--r--qpdf/qpdf.cc24
-rw-r--r--qpdf/qtest/qpdf.test13
-rw-r--r--qpdf/qtest/qpdf/outlines-split-01-10.pdf760
-rw-r--r--qpdf/qtest/qpdf/outlines-split-11-20.pdf760
-rw-r--r--qpdf/qtest/qpdf/outlines-split-21-30.pdf760
6 files changed, 2324 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 447c35b2..aaf64d24 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2018-12-19 Jay Berkenbilt <ejb@ql.org>
+ * When splitting pages using --split-pages, the outlines
+ dictionary and some supporting metadata are copied into the split
+ files. The result is that all bookmarks from the original file
+ appear, and those that point to pages that are preserved work
+ while those that point to pages that are not preserved don't do
+ anything. This is an interim step toward proper support for
+ bookmark preservation in split files.
+
* Add QPDFOutlineDocumentHelper and QPDFOutlineObjectHelper for
handling outlines (bookmarks) including bidirectionally mapping
between bookmarks and pages. Initially there is no support for
diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc
index b6762aab..46b984bc 100644
--- a/qpdf/qpdf.cc
+++ b/qpdf/qpdf.cc
@@ -2622,6 +2622,30 @@ static void write_outfile(QPDF& pdf, Options& o)
"/Nums", QPDFObjectHandle::newArray(labels));
outpdf.getRoot().replaceKey("/PageLabels", page_labels);
}
+ // Copying the outlines tree, names table, and any
+ // outdated Dests key from the original file will make
+ // some things work in the split files. It is not a
+ // complete solution, but at least outlines whose
+ // destinations are on pages that have been preserved will
+ // work normally. There are other top-level structures
+ // that should be copied as well. This will be improved in
+ // the future.
+ std::list<std::string> to_copy;
+ to_copy.push_back("/Names");
+ to_copy.push_back("/Dests");
+ to_copy.push_back("/Outlines");
+ for (std::list<std::string>::iterator iter = to_copy.begin();
+ iter != to_copy.end(); ++iter)
+ {
+ QPDFObjectHandle orig = pdf.getRoot().getKey(*iter);
+ if (! orig.isIndirect())
+ {
+ orig = pdf.makeIndirectObject(orig);
+ }
+ outpdf.getRoot().replaceKey(
+ *iter,
+ outpdf.copyForeignObject(orig));
+ }
std::string page_range = QUtil::int_to_string(first, pageno_len);
if (o.split_pages > 1)
{
diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test
index cc8a0755..9b063cb7 100644
--- a/qpdf/qtest/qpdf.test
+++ b/qpdf/qtest/qpdf.test
@@ -1159,7 +1159,7 @@ my @sp_cases = (
[11, 'pdf extension', '', 'split-out.Pdf'],
[4, 'fallback', '--pages 11-pages.pdf 1-3 minimal.pdf --', 'split-out'],
);
-$n_tests += 12;
+$n_tests += 16;
for (@sp_cases)
{
$n_tests += 1 + $_->[0];
@@ -1204,6 +1204,17 @@ foreach my $i (qw(01-06 07-11))
{$td->FILE => "labels-split-$i.pdf"});
}
+$td->runtest("split page with outlines",
+ {$td->COMMAND => "qpdf --qdf --static-id --split-pages=10".
+ " outlines-with-actions.pdf split-out-outlines.pdf"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+foreach my $i (qw(01-10 11-20 21-30))
+{
+ $td->runtest("check output ($i)",
+ {$td->FILE => "split-out-outlines-$i.pdf"},
+ {$td->FILE => "outlines-split-$i.pdf"});
+}
+
foreach my $d (@sp_cases)
{
my ($n, $description, $xargs, $out) = @$d;
diff --git a/qpdf/qtest/qpdf/outlines-split-01-10.pdf b/qpdf/qtest/qpdf/outlines-split-01-10.pdf
new file mode 100644
index 00000000..2a15df92
--- /dev/null
+++ b/qpdf/qtest/qpdf/outlines-split-01-10.pdf
@@ -0,0 +1,760 @@
+%PDF-1.3
+%¿÷¢þ
+%QDF-1.0
+
+%% Original object ID: 1 0
+1 0 obj
+<<
+ /Names 2 0 R
+ /Outlines 3 0 R
+ /Pages 4 0 R
+ /Type /Catalog
+>>
+endobj
+
+%% Original object ID: 35 0
+2 0 obj
+<<
+ /Dests 5 0 R
+>>
+endobj
+
+%% Original object ID: 38 0
+3 0 obj
+<<
+ /Count 6
+ /First 6 0 R
+ /Last 7 0 R
+ /Type /Outlines
+>>
+endobj
+
+%% Original object ID: 2 0
+4 0 obj
+<<
+ /Count 10
+ /Kids [
+ 8 0 R
+ 9 0 R
+ 10 0 R
+ 11 0 R
+ 12 0 R
+ 13 0 R
+ 14 0 R
+ 15 0 R
+ 16 0 R
+ 17 0 R
+ ]
+ /Type /Pages
+>>
+endobj
+
+%% Original object ID: 36 0
+5 0 obj
+<<
+ /Names [
+ (gabeebee)
+ [
+ 9 0 R
+ /FitR
+ 66
+ 714
+ 180
+ 770
+ ]
+ (glarp)
+ [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ ]
+>>
+endobj
+
+%% Original object ID: 39 0
+6 0 obj
+<<
+ /Count 4
+ /Dest [
+ 13 0 R
+ /XYZ
+ null
+ null
+ null
+ ]
+ /First 18 0 R
+ /Last 19 0 R
+ /Next 7 0 R
+ /Parent 3 0 R
+ /Title (Potato 1 -> 5: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 50 0
+7 0 obj
+<<
+ /Dest [
+ null
+ /XYZ
+ 66
+ 756
+ 3
+ ]
+ /Parent 3 0 R
+ /Prev 6 0 R
+ /Title (Salad 2 -> 15: /XYZ 66 756 3)
+ /Type /Outline
+>>
+endobj
+
+%% Page 1
+%% Original object ID: 3 0
+8 0 obj
+<<
+ /Contents 20 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 2
+%% Original object ID: 8 0
+9 0 obj
+<<
+ /Contents 24 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 3
+%% Original object ID: 11 0
+10 0 obj
+<<
+ /Contents 26 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 4
+%% Original object ID: 14 0
+11 0 obj
+<<
+ /Contents 28 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 5
+%% Original object ID: 17 0
+12 0 obj
+<<
+ /Contents 30 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 6
+%% Original object ID: 20 0
+13 0 obj
+<<
+ /Contents 32 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 7
+%% Original object ID: 23 0
+14 0 obj
+<<
+ /Contents 34 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 8
+%% Original object ID: 26 0
+15 0 obj
+<<
+ /Contents 36 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 9
+%% Original object ID: 29 0
+16 0 obj
+<<
+ /Contents 38 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 10
+%% Original object ID: 32 0
+17 0 obj
+<<
+ /Contents 40 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Original object ID: 40 0
+18 0 obj
+<<
+ /Count -3
+ /Dest [
+ null
+ /Fit
+ ]
+ /First 42 0 R
+ /Last 43 0 R
+ /Next 19 0 R
+ /Parent 6 0 R
+ /Title (Mern 1.1 -> 11: /Fit)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 47 0
+19 0 obj
+<<
+ /Count 2
+ /Dest [
+ null
+ /FitH
+ 792
+ ]
+ /First 44 0 R
+ /Last 45 0 R
+ /Parent 6 0 R
+ /Prev 18 0 R
+ /Title <feff005300710075006100730068002000f703c002ac00f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032>
+ /Type /Outline
+>>
+endobj
+
+%% Contents for page 1
+%% Original object ID: 4 0
+20 0 obj
+<<
+ /Length 21 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 0) Tj
+ET
+endstream
+endobj
+
+21 0 obj
+45
+endobj
+
+%% Original object ID: 6 0
+22 0 obj
+<<
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font
+>>
+endobj
+
+%% Original object ID: 7 0
+23 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+%% Contents for page 2
+%% Original object ID: 9 0
+24 0 obj
+<<
+ /Length 25 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 1) Tj
+ET
+endstream
+endobj
+
+25 0 obj
+45
+endobj
+
+%% Contents for page 3
+%% Original object ID: 12 0
+26 0 obj
+<<
+ /Length 27 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 2) Tj
+ET
+endstream
+endobj
+
+27 0 obj
+45
+endobj
+
+%% Contents for page 4
+%% Original object ID: 15 0
+28 0 obj
+<<
+ /Length 29 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 3) Tj
+ET
+endstream
+endobj
+
+29 0 obj
+45
+endobj
+
+%% Contents for page 5
+%% Original object ID: 18 0
+30 0 obj
+<<
+ /Length 31 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 4) Tj
+ET
+endstream
+endobj
+
+31 0 obj
+45
+endobj
+
+%% Contents for page 6
+%% Original object ID: 21 0
+32 0 obj
+<<
+ /Length 33 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 5) Tj
+ET
+endstream
+endobj
+
+33 0 obj
+45
+endobj
+
+%% Contents for page 7
+%% Original object ID: 24 0
+34 0 obj
+<<
+ /Length 35 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 6) Tj
+ET
+endstream
+endobj
+
+35 0 obj
+45
+endobj
+
+%% Contents for page 8
+%% Original object ID: 27 0
+36 0 obj
+<<
+ /Length 37 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 7) Tj
+ET
+endstream
+endobj
+
+37 0 obj
+45
+endobj
+
+%% Contents for page 9
+%% Original object ID: 30 0
+38 0 obj
+<<
+ /Length 39 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 8) Tj
+ET
+endstream
+endobj
+
+39 0 obj
+45
+endobj
+
+%% Contents for page 10
+%% Original object ID: 33 0
+40 0 obj
+<<
+ /Length 41 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 9) Tj
+ET
+endstream
+endobj
+
+41 0 obj
+45
+endobj
+
+%% Original object ID: 41 0
+42 0 obj
+<<
+ /Count -2
+ /Dest [
+ null
+ /FitV
+ 100
+ ]
+ /First 46 0 R
+ /Last 47 0 R
+ /Next 43 0 R
+ /Parent 18 0 R
+ /Title (Biherbadem 1.1.1 -> 12: /FitV 100)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 44 0
+43 0 obj
+<<
+ /Count 1
+ /Dest [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /First 48 0 R
+ /Last 48 0 R
+ /Parent 18 0 R
+ /Prev 42 0 R
+ /Title (Gawehwehweh 1.1.2 -> 12: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 48 0
+44 0 obj
+<<
+ /Dest (gabeebee)
+ /Next 45 0 R
+ /Parent 19 0 R
+ /Title (Gabeebeebee \(name\) 1.2.1 -> 1: /FitR 66 714 180 770)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 49 0
+45 0 obj
+<<
+ /A <<
+ /D [
+ 8 0 R
+ /XYZ
+ null
+ null
+ null
+ ]
+ /S /GoTo
+ /Type /Action
+ >>
+ /Parent 19 0 R
+ /Prev 44 0 R
+ /Title (Merschqaberschq \(A\) 1.2.2 -> 0: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 42 0
+46 0 obj
+<<
+ /A <<
+ /D (glarp)
+ /S /GoTo
+ /Type /Action
+ >>
+ /Next 47 0 R
+ /Parent 42 0 R
+ /Title (Glarpenspliel \(A, name\) 1.1.1.1 -> 18: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 43 0
+47 0 obj
+<<
+ /Dest [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /Parent 42 0 R
+ /Prev 46 0 R
+ /Title (Hagoogamagoogle 1.1.1.2 -> 19: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 45 0
+48 0 obj
+<<
+ /Dest 49 0 R
+ /Parent 43 0 R
+ /Title (Jawarnianbvarwash 1.1.2.1 -> 22: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 46 0
+49 0 obj
+[
+ null
+ /XYZ
+ null
+ null
+ null
+]
+endobj
+
+xref
+0 50
+0000000000 65535 f
+0000000052 00000 n
+0000000167 00000 n
+0000000232 00000 n
+0000000339 00000 n
+0000000538 00000 n
+0000000772 00000 n
+0000001018 00000 n
+0000001217 00000 n
+0000001449 00000 n
+0000001682 00000 n
+0000001916 00000 n
+0000002150 00000 n
+0000002384 00000 n
+0000002618 00000 n
+0000002852 00000 n
+0000003086 00000 n
+0000003321 00000 n
+0000003545 00000 n
+0000003751 00000 n
+0000004099 00000 n
+0000004201 00000 n
+0000004248 00000 n
+0000004394 00000 n
+0000004480 00000 n
+0000004582 00000 n
+0000004653 00000 n
+0000004755 00000 n
+0000004826 00000 n
+0000004928 00000 n
+0000004999 00000 n
+0000005101 00000 n
+0000005172 00000 n
+0000005274 00000 n
+0000005345 00000 n
+0000005447 00000 n
+0000005518 00000 n
+0000005620 00000 n
+0000005691 00000 n
+0000005793 00000 n
+0000005865 00000 n
+0000005967 00000 n
+0000006015 00000 n
+0000006244 00000 n
+0000006501 00000 n
+0000006685 00000 n
+0000006965 00000 n
+0000007196 00000 n
+0000007417 00000 n
+0000007581 00000 n
+trailer <<
+ /Root 1 0 R
+ /Size 50
+ /ID [<31415926535897932384626433832795><31415926535897932384626433832795>]
+>>
+startxref
+7637
+%%EOF
diff --git a/qpdf/qtest/qpdf/outlines-split-11-20.pdf b/qpdf/qtest/qpdf/outlines-split-11-20.pdf
new file mode 100644
index 00000000..04263d57
--- /dev/null
+++ b/qpdf/qtest/qpdf/outlines-split-11-20.pdf
@@ -0,0 +1,760 @@
+%PDF-1.3
+%¿÷¢þ
+%QDF-1.0
+
+%% Original object ID: 1 0
+1 0 obj
+<<
+ /Names 2 0 R
+ /Outlines 3 0 R
+ /Pages 4 0 R
+ /Type /Catalog
+>>
+endobj
+
+%% Original object ID: 35 0
+2 0 obj
+<<
+ /Dests 5 0 R
+>>
+endobj
+
+%% Original object ID: 38 0
+3 0 obj
+<<
+ /Count 6
+ /First 6 0 R
+ /Last 7 0 R
+ /Type /Outlines
+>>
+endobj
+
+%% Original object ID: 2 0
+4 0 obj
+<<
+ /Count 10
+ /Kids [
+ 8 0 R
+ 9 0 R
+ 10 0 R
+ 11 0 R
+ 12 0 R
+ 13 0 R
+ 14 0 R
+ 15 0 R
+ 16 0 R
+ 17 0 R
+ ]
+ /Type /Pages
+>>
+endobj
+
+%% Original object ID: 36 0
+5 0 obj
+<<
+ /Names [
+ (gabeebee)
+ [
+ null
+ /FitR
+ 66
+ 714
+ 180
+ 770
+ ]
+ (glarp)
+ [
+ 16 0 R
+ /XYZ
+ null
+ null
+ null
+ ]
+ ]
+>>
+endobj
+
+%% Original object ID: 39 0
+6 0 obj
+<<
+ /Count 4
+ /Dest [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /First 18 0 R
+ /Last 19 0 R
+ /Next 7 0 R
+ /Parent 3 0 R
+ /Title (Potato 1 -> 5: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 50 0
+7 0 obj
+<<
+ /Dest [
+ 13 0 R
+ /XYZ
+ 66
+ 756
+ 3
+ ]
+ /Parent 3 0 R
+ /Prev 6 0 R
+ /Title (Salad 2 -> 15: /XYZ 66 756 3)
+ /Type /Outline
+>>
+endobj
+
+%% Page 1
+%% Original object ID: 3 0
+8 0 obj
+<<
+ /Contents 20 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 2
+%% Original object ID: 8 0
+9 0 obj
+<<
+ /Contents 24 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 3
+%% Original object ID: 11 0
+10 0 obj
+<<
+ /Contents 26 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 4
+%% Original object ID: 14 0
+11 0 obj
+<<
+ /Contents 28 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 5
+%% Original object ID: 17 0
+12 0 obj
+<<
+ /Contents 30 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 6
+%% Original object ID: 20 0
+13 0 obj
+<<
+ /Contents 32 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 7
+%% Original object ID: 23 0
+14 0 obj
+<<
+ /Contents 34 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 8
+%% Original object ID: 26 0
+15 0 obj
+<<
+ /Contents 36 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 9
+%% Original object ID: 29 0
+16 0 obj
+<<
+ /Contents 38 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 10
+%% Original object ID: 32 0
+17 0 obj
+<<
+ /Contents 40 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Original object ID: 40 0
+18 0 obj
+<<
+ /Count -3
+ /Dest [
+ 9 0 R
+ /Fit
+ ]
+ /First 42 0 R
+ /Last 43 0 R
+ /Next 19 0 R
+ /Parent 6 0 R
+ /Title (Mern 1.1 -> 11: /Fit)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 47 0
+19 0 obj
+<<
+ /Count 2
+ /Dest [
+ 11 0 R
+ /FitH
+ 792
+ ]
+ /First 44 0 R
+ /Last 45 0 R
+ /Parent 6 0 R
+ /Prev 18 0 R
+ /Title <feff005300710075006100730068002000f703c002ac00f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032>
+ /Type /Outline
+>>
+endobj
+
+%% Contents for page 1
+%% Original object ID: 4 0
+20 0 obj
+<<
+ /Length 21 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 10) Tj
+ET
+endstream
+endobj
+
+21 0 obj
+46
+endobj
+
+%% Original object ID: 6 0
+22 0 obj
+<<
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font
+>>
+endobj
+
+%% Original object ID: 7 0
+23 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+%% Contents for page 2
+%% Original object ID: 9 0
+24 0 obj
+<<
+ /Length 25 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 11) Tj
+ET
+endstream
+endobj
+
+25 0 obj
+46
+endobj
+
+%% Contents for page 3
+%% Original object ID: 12 0
+26 0 obj
+<<
+ /Length 27 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 12) Tj
+ET
+endstream
+endobj
+
+27 0 obj
+46
+endobj
+
+%% Contents for page 4
+%% Original object ID: 15 0
+28 0 obj
+<<
+ /Length 29 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 13) Tj
+ET
+endstream
+endobj
+
+29 0 obj
+46
+endobj
+
+%% Contents for page 5
+%% Original object ID: 18 0
+30 0 obj
+<<
+ /Length 31 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 14) Tj
+ET
+endstream
+endobj
+
+31 0 obj
+46
+endobj
+
+%% Contents for page 6
+%% Original object ID: 21 0
+32 0 obj
+<<
+ /Length 33 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 15) Tj
+ET
+endstream
+endobj
+
+33 0 obj
+46
+endobj
+
+%% Contents for page 7
+%% Original object ID: 24 0
+34 0 obj
+<<
+ /Length 35 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 16) Tj
+ET
+endstream
+endobj
+
+35 0 obj
+46
+endobj
+
+%% Contents for page 8
+%% Original object ID: 27 0
+36 0 obj
+<<
+ /Length 37 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 17) Tj
+ET
+endstream
+endobj
+
+37 0 obj
+46
+endobj
+
+%% Contents for page 9
+%% Original object ID: 30 0
+38 0 obj
+<<
+ /Length 39 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 18) Tj
+ET
+endstream
+endobj
+
+39 0 obj
+46
+endobj
+
+%% Contents for page 10
+%% Original object ID: 33 0
+40 0 obj
+<<
+ /Length 41 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 19) Tj
+ET
+endstream
+endobj
+
+41 0 obj
+46
+endobj
+
+%% Original object ID: 41 0
+42 0 obj
+<<
+ /Count -2
+ /Dest [
+ 10 0 R
+ /FitV
+ 100
+ ]
+ /First 46 0 R
+ /Last 47 0 R
+ /Next 43 0 R
+ /Parent 18 0 R
+ /Title (Biherbadem 1.1.1 -> 12: /FitV 100)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 44 0
+43 0 obj
+<<
+ /Count 1
+ /Dest [
+ 10 0 R
+ /XYZ
+ null
+ null
+ null
+ ]
+ /First 48 0 R
+ /Last 48 0 R
+ /Parent 18 0 R
+ /Prev 42 0 R
+ /Title (Gawehwehweh 1.1.2 -> 12: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 48 0
+44 0 obj
+<<
+ /Dest (gabeebee)
+ /Next 45 0 R
+ /Parent 19 0 R
+ /Title (Gabeebeebee \(name\) 1.2.1 -> 1: /FitR 66 714 180 770)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 49 0
+45 0 obj
+<<
+ /A <<
+ /D [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /S /GoTo
+ /Type /Action
+ >>
+ /Parent 19 0 R
+ /Prev 44 0 R
+ /Title (Merschqaberschq \(A\) 1.2.2 -> 0: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 42 0
+46 0 obj
+<<
+ /A <<
+ /D (glarp)
+ /S /GoTo
+ /Type /Action
+ >>
+ /Next 47 0 R
+ /Parent 42 0 R
+ /Title (Glarpenspliel \(A, name\) 1.1.1.1 -> 18: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 43 0
+47 0 obj
+<<
+ /Dest [
+ 17 0 R
+ /XYZ
+ null
+ null
+ null
+ ]
+ /Parent 42 0 R
+ /Prev 46 0 R
+ /Title (Hagoogamagoogle 1.1.1.2 -> 19: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 45 0
+48 0 obj
+<<
+ /Dest 49 0 R
+ /Parent 43 0 R
+ /Title (Jawarnianbvarwash 1.1.2.1 -> 22: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 46 0
+49 0 obj
+[
+ null
+ /XYZ
+ null
+ null
+ null
+]
+endobj
+
+xref
+0 50
+0000000000 65535 f
+0000000052 00000 n
+0000000167 00000 n
+0000000232 00000 n
+0000000339 00000 n
+0000000538 00000 n
+0000000773 00000 n
+0000001017 00000 n
+0000001218 00000 n
+0000001450 00000 n
+0000001683 00000 n
+0000001917 00000 n
+0000002151 00000 n
+0000002385 00000 n
+0000002619 00000 n
+0000002853 00000 n
+0000003087 00000 n
+0000003322 00000 n
+0000003546 00000 n
+0000003753 00000 n
+0000004103 00000 n
+0000004206 00000 n
+0000004253 00000 n
+0000004399 00000 n
+0000004485 00000 n
+0000004588 00000 n
+0000004659 00000 n
+0000004762 00000 n
+0000004833 00000 n
+0000004936 00000 n
+0000005007 00000 n
+0000005110 00000 n
+0000005181 00000 n
+0000005284 00000 n
+0000005355 00000 n
+0000005458 00000 n
+0000005529 00000 n
+0000005632 00000 n
+0000005703 00000 n
+0000005806 00000 n
+0000005878 00000 n
+0000005981 00000 n
+0000006029 00000 n
+0000006260 00000 n
+0000006519 00000 n
+0000006703 00000 n
+0000006982 00000 n
+0000007213 00000 n
+0000007436 00000 n
+0000007600 00000 n
+trailer <<
+ /Root 1 0 R
+ /Size 50
+ /ID [<31415926535897932384626433832795><31415926535897932384626433832795>]
+>>
+startxref
+7656
+%%EOF
diff --git a/qpdf/qtest/qpdf/outlines-split-21-30.pdf b/qpdf/qtest/qpdf/outlines-split-21-30.pdf
new file mode 100644
index 00000000..b1a3566f
--- /dev/null
+++ b/qpdf/qtest/qpdf/outlines-split-21-30.pdf
@@ -0,0 +1,760 @@
+%PDF-1.3
+%¿÷¢þ
+%QDF-1.0
+
+%% Original object ID: 1 0
+1 0 obj
+<<
+ /Names 2 0 R
+ /Outlines 3 0 R
+ /Pages 4 0 R
+ /Type /Catalog
+>>
+endobj
+
+%% Original object ID: 35 0
+2 0 obj
+<<
+ /Dests 5 0 R
+>>
+endobj
+
+%% Original object ID: 38 0
+3 0 obj
+<<
+ /Count 6
+ /First 6 0 R
+ /Last 7 0 R
+ /Type /Outlines
+>>
+endobj
+
+%% Original object ID: 2 0
+4 0 obj
+<<
+ /Count 10
+ /Kids [
+ 8 0 R
+ 9 0 R
+ 10 0 R
+ 11 0 R
+ 12 0 R
+ 13 0 R
+ 14 0 R
+ 15 0 R
+ 16 0 R
+ 17 0 R
+ ]
+ /Type /Pages
+>>
+endobj
+
+%% Original object ID: 36 0
+5 0 obj
+<<
+ /Names [
+ (gabeebee)
+ [
+ null
+ /FitR
+ 66
+ 714
+ 180
+ 770
+ ]
+ (glarp)
+ [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ ]
+>>
+endobj
+
+%% Original object ID: 39 0
+6 0 obj
+<<
+ /Count 4
+ /Dest [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /First 18 0 R
+ /Last 19 0 R
+ /Next 7 0 R
+ /Parent 3 0 R
+ /Title (Potato 1 -> 5: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 50 0
+7 0 obj
+<<
+ /Dest [
+ null
+ /XYZ
+ 66
+ 756
+ 3
+ ]
+ /Parent 3 0 R
+ /Prev 6 0 R
+ /Title (Salad 2 -> 15: /XYZ 66 756 3)
+ /Type /Outline
+>>
+endobj
+
+%% Page 1
+%% Original object ID: 3 0
+8 0 obj
+<<
+ /Contents 20 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 2
+%% Original object ID: 8 0
+9 0 obj
+<<
+ /Contents 24 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 3
+%% Original object ID: 11 0
+10 0 obj
+<<
+ /Contents 26 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 4
+%% Original object ID: 14 0
+11 0 obj
+<<
+ /Contents 28 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 5
+%% Original object ID: 17 0
+12 0 obj
+<<
+ /Contents 30 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 6
+%% Original object ID: 20 0
+13 0 obj
+<<
+ /Contents 32 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 7
+%% Original object ID: 23 0
+14 0 obj
+<<
+ /Contents 34 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 8
+%% Original object ID: 26 0
+15 0 obj
+<<
+ /Contents 36 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 9
+%% Original object ID: 29 0
+16 0 obj
+<<
+ /Contents 38 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Page 10
+%% Original object ID: 32 0
+17 0 obj
+<<
+ /Contents 40 0 R
+ /MediaBox [
+ 0
+ 0
+ 612
+ 792
+ ]
+ /Parent 4 0 R
+ /Resources <<
+ /Font <<
+ /F1 22 0 R
+ >>
+ /ProcSet 23 0 R
+ >>
+ /Type /Page
+>>
+endobj
+
+%% Original object ID: 40 0
+18 0 obj
+<<
+ /Count -3
+ /Dest [
+ null
+ /Fit
+ ]
+ /First 42 0 R
+ /Last 43 0 R
+ /Next 19 0 R
+ /Parent 6 0 R
+ /Title (Mern 1.1 -> 11: /Fit)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 47 0
+19 0 obj
+<<
+ /Count 2
+ /Dest [
+ null
+ /FitH
+ 792
+ ]
+ /First 44 0 R
+ /Last 45 0 R
+ /Parent 6 0 R
+ /Prev 18 0 R
+ /Title <feff005300710075006100730068002000f703c002ac00f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032>
+ /Type /Outline
+>>
+endobj
+
+%% Contents for page 1
+%% Original object ID: 4 0
+20 0 obj
+<<
+ /Length 21 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 20) Tj
+ET
+endstream
+endobj
+
+21 0 obj
+46
+endobj
+
+%% Original object ID: 6 0
+22 0 obj
+<<
+ /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font
+>>
+endobj
+
+%% Original object ID: 7 0
+23 0 obj
+[
+ /PDF
+ /Text
+]
+endobj
+
+%% Contents for page 2
+%% Original object ID: 9 0
+24 0 obj
+<<
+ /Length 25 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 21) Tj
+ET
+endstream
+endobj
+
+25 0 obj
+46
+endobj
+
+%% Contents for page 3
+%% Original object ID: 12 0
+26 0 obj
+<<
+ /Length 27 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 22) Tj
+ET
+endstream
+endobj
+
+27 0 obj
+46
+endobj
+
+%% Contents for page 4
+%% Original object ID: 15 0
+28 0 obj
+<<
+ /Length 29 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 23) Tj
+ET
+endstream
+endobj
+
+29 0 obj
+46
+endobj
+
+%% Contents for page 5
+%% Original object ID: 18 0
+30 0 obj
+<<
+ /Length 31 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 24) Tj
+ET
+endstream
+endobj
+
+31 0 obj
+46
+endobj
+
+%% Contents for page 6
+%% Original object ID: 21 0
+32 0 obj
+<<
+ /Length 33 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 25) Tj
+ET
+endstream
+endobj
+
+33 0 obj
+46
+endobj
+
+%% Contents for page 7
+%% Original object ID: 24 0
+34 0 obj
+<<
+ /Length 35 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 26) Tj
+ET
+endstream
+endobj
+
+35 0 obj
+46
+endobj
+
+%% Contents for page 8
+%% Original object ID: 27 0
+36 0 obj
+<<
+ /Length 37 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 27) Tj
+ET
+endstream
+endobj
+
+37 0 obj
+46
+endobj
+
+%% Contents for page 9
+%% Original object ID: 30 0
+38 0 obj
+<<
+ /Length 39 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 28) Tj
+ET
+endstream
+endobj
+
+39 0 obj
+46
+endobj
+
+%% Contents for page 10
+%% Original object ID: 33 0
+40 0 obj
+<<
+ /Length 41 0 R
+>>
+stream
+BT
+ /F1 24 Tf
+ 72 720 Td
+ (Salad 29) Tj
+ET
+endstream
+endobj
+
+41 0 obj
+46
+endobj
+
+%% Original object ID: 41 0
+42 0 obj
+<<
+ /Count -2
+ /Dest [
+ null
+ /FitV
+ 100
+ ]
+ /First 46 0 R
+ /Last 47 0 R
+ /Next 43 0 R
+ /Parent 18 0 R
+ /Title (Biherbadem 1.1.1 -> 12: /FitV 100)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 44 0
+43 0 obj
+<<
+ /Count 1
+ /Dest [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /First 48 0 R
+ /Last 48 0 R
+ /Parent 18 0 R
+ /Prev 42 0 R
+ /Title (Gawehwehweh 1.1.2 -> 12: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 48 0
+44 0 obj
+<<
+ /Dest (gabeebee)
+ /Next 45 0 R
+ /Parent 19 0 R
+ /Title (Gabeebeebee \(name\) 1.2.1 -> 1: /FitR 66 714 180 770)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 49 0
+45 0 obj
+<<
+ /A <<
+ /D [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /S /GoTo
+ /Type /Action
+ >>
+ /Parent 19 0 R
+ /Prev 44 0 R
+ /Title (Merschqaberschq \(A\) 1.2.2 -> 0: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 42 0
+46 0 obj
+<<
+ /A <<
+ /D (glarp)
+ /S /GoTo
+ /Type /Action
+ >>
+ /Next 47 0 R
+ /Parent 42 0 R
+ /Title (Glarpenspliel \(A, name\) 1.1.1.1 -> 18: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 43 0
+47 0 obj
+<<
+ /Dest [
+ null
+ /XYZ
+ null
+ null
+ null
+ ]
+ /Parent 42 0 R
+ /Prev 46 0 R
+ /Title (Hagoogamagoogle 1.1.1.2 -> 19: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 45 0
+48 0 obj
+<<
+ /Dest 49 0 R
+ /Parent 43 0 R
+ /Title (Jawarnianbvarwash 1.1.2.1 -> 22: /XYZ null null null)
+ /Type /Outline
+>>
+endobj
+
+%% Original object ID: 46 0
+49 0 obj
+[
+ 10 0 R
+ /XYZ
+ null
+ null
+ null
+]
+endobj
+
+xref
+0 50
+0000000000 65535 f
+0000000052 00000 n
+0000000167 00000 n
+0000000232 00000 n
+0000000339 00000 n
+0000000538 00000 n
+0000000771 00000 n
+0000001015 00000 n
+0000001214 00000 n
+0000001446 00000 n
+0000001679 00000 n
+0000001913 00000 n
+0000002147 00000 n
+0000002381 00000 n
+0000002615 00000 n
+0000002849 00000 n
+0000003083 00000 n
+0000003318 00000 n
+0000003542 00000 n
+0000003748 00000 n
+0000004096 00000 n
+0000004199 00000 n
+0000004246 00000 n
+0000004392 00000 n
+0000004478 00000 n
+0000004581 00000 n
+0000004652 00000 n
+0000004755 00000 n
+0000004826 00000 n
+0000004929 00000 n
+0000005000 00000 n
+0000005103 00000 n
+0000005174 00000 n
+0000005277 00000 n
+0000005348 00000 n
+0000005451 00000 n
+0000005522 00000 n
+0000005625 00000 n
+0000005696 00000 n
+0000005799 00000 n
+0000005871 00000 n
+0000005974 00000 n
+0000006022 00000 n
+0000006251 00000 n
+0000006508 00000 n
+0000006692 00000 n
+0000006971 00000 n
+0000007202 00000 n
+0000007423 00000 n
+0000007587 00000 n
+trailer <<
+ /Root 1 0 R
+ /Size 50
+ /ID [<31415926535897932384626433832795><31415926535897932384626433832795>]
+>>
+startxref
+7645
+%%EOF