diff options
author | Jay Berkenbilt <ejb@ql.org> | 2008-04-29 14:55:25 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2008-04-29 14:55:25 +0200 |
commit | 9a0b88bf7777c153dc46ace22db74ef24d51583a (patch) | |
tree | f567ac1cf2bf5071a611eb49323a935b6ac938ff /examples | |
download | qpdf-9a0b88bf7777c153dc46ace22db74ef24d51583a.tar.zst |
update release date to actual daterelease-qpdf-2.0
git-svn-id: svn+q:///qpdf/trunk@599 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'examples')
33 files changed, 5441 insertions, 0 deletions
diff --git a/examples/Makefile b/examples/Makefile new file mode 100644 index 00000000..90899055 --- /dev/null +++ b/examples/Makefile @@ -0,0 +1 @@ +include ../make/proxy.mk diff --git a/examples/build.mk b/examples/build.mk new file mode 100644 index 00000000..eab2744c --- /dev/null +++ b/examples/build.mk @@ -0,0 +1,26 @@ +BINS_examples = pdf-bookmarks pdf-mod-info pdf-npages + +TARGETS_examples = $(foreach B,$(BINS_examples),examples/$(OUTPUT_DIR)/$(B)) + +$(TARGETS_examples): $(TARGETS_qpdf) + +INCLUDES_examples = include + +TC_SRCS_examples = $(wildcard examples/*.cc) + +# ----- + +$(foreach B,$(BINS_examples),$(eval \ + OBJS_$(B) = $(call src_to_obj,examples/$(B).cc))) + +ifeq ($(GENDEPS),1) +-include $(foreach B,$(BINS_examples),$(call obj_to_dep,$(OBJS_$(B)))) +endif + +$(foreach B,$(BINS_examples),$(eval \ + $(OBJS_$(B)): examples/$(OUTPUT_DIR)/%.o: examples/$(B).cc ; \ + $(call compile,examples/$(B).cc,$(INCLUDES_examples)))) + +$(foreach B,$(BINS_examples),$(eval \ + examples/$(OUTPUT_DIR)/$(B): $(OBJS_$(B)) ; \ + $(call makebin,$(OBJS_$(B)),$$@))) diff --git a/examples/examples.testcov b/examples/examples.testcov new file mode 100644 index 00000000..5a19b7c5 --- /dev/null +++ b/examples/examples.testcov @@ -0,0 +1,19 @@ +pdf-bookmarks lines 0 +pdf-bookmarks numbers 0 +pdf-bookmarks none 0 +pdf-bookmarks has count 0 +pdf-bookmarks no count 0 +pdf-bookmarks open 0 +pdf-bookmarks closed 0 +pdf-bookmarks dest 0 +pdf-bookmarks targets 0 +pdf-mod-info --dump 0 +pdf-mod-info no in file 0 +pdf-mod-info in-place 0 +pdf-mod-info -key 0 +pdf-mod-info usage wrong val 0 +pdf-mod-info -val 0 +pdf-mod-info usage junk 0 +pdf-mod-info no keys 0 +pdf-mod-info has info 0 +pdf-mod-info file no info 0 diff --git a/examples/pdf-bookmarks.cc b/examples/pdf-bookmarks.cc new file mode 100644 index 00000000..98bff7fe --- /dev/null +++ b/examples/pdf-bookmarks.cc @@ -0,0 +1,262 @@ +#include <iostream> +#include <string.h> +#include <qpdf/QPDF.hh> +#include <qpdf/QUtil.hh> +#include <qpdf/QTC.hh> + +static char const* whoami = 0; +static enum { st_none, st_numbers, st_lines } style = st_none; +static bool show_open = false; +static bool show_targets = false; +static std::map<int, int> page_map; + +void usage() +{ + std::cerr << "Usage: " << whoami << " [options] file.pdf [password]" + << std::endl + << "Options:" << std::endl + << " -numbers give bookmarks outline-style numbers" + << std::endl + << " -lines draw lines to show bookmark hierarchy" + << std::endl + << " -show-open indicate whether a bookmark is initially open" + << std::endl + << " -show-targets show target if possible" + << std::endl; + exit(2); +} + +void print_lines(std::vector<int>& numbers) +{ + for (unsigned int i = 0; i < numbers.size() - 1; ++i) + { + if (numbers[i]) + { + std::cout << "| "; + } + else + { + std::cout << " "; + } + } +} + +void generate_page_map(QPDF& qpdf) +{ + std::vector<QPDFObjectHandle> pages = qpdf.getAllPages(); + int n = 0; + for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin(); + iter != pages.end(); ++iter) + { + QPDFObjectHandle& oh = *iter; + page_map[oh.getObjectID()] = ++n; + } +} + +void extract_bookmarks(QPDFObjectHandle outlines, std::vector<int>& numbers) +{ + if (outlines.hasKey("/Title")) + { + // No default so gcc will warn on missing tag + switch (style) + { + case st_none: + QTC::TC("examples", "pdf-bookmarks none"); + break; + + case st_numbers: + QTC::TC("examples", "pdf-bookmarks numbers"); + for (std::vector<int>::iterator iter = numbers.begin(); + iter != numbers.end(); ++iter) + { + std::cout << *iter << "."; + } + std::cout << " "; + break; + + case st_lines: + QTC::TC("examples", "pdf-bookmarks lines"); + print_lines(numbers); + std::cout << "|" << std::endl; + print_lines(numbers); + std::cout << "+-+ "; + break; + } + + if (show_open) + { + if (outlines.hasKey("/Count")) + { + QTC::TC("examples", "pdf-bookmarks has count"); + int count = outlines.getKey("/Count").getIntValue(); + if (count > 0) + { + // hierarchy is open at this point + QTC::TC("examples", "pdf-bookmarks open"); + std::cout << "(v) "; + } + else + { + QTC::TC("examples", "pdf-bookmarks closed"); + std::cout << "(>) "; + } + } + else + { + QTC::TC("examples", "pdf-bookmarks no count"); + std::cout << "( ) "; + } + } + + if (show_targets) + { + QTC::TC("examples", "pdf-bookmarks targets"); + std::string target = "unknown"; + // Only explicit destinations supported for now + if (outlines.hasKey("/Dest")) + { + QTC::TC("examples", "pdf-bookmarks dest"); + QPDFObjectHandle dest = outlines.getKey("/Dest"); + if ((dest.isArray()) && (dest.getArrayNItems() > 0)) + { + QPDFObjectHandle first = dest.getArrayItem(0); + int object_id = first.getObjectID(); + if (page_map.count(object_id)) + { + target = QUtil::int_to_string(page_map[object_id]); + } + } + + std::cout << "[ -> " << target << " ] "; + } + } + + std::cout << outlines.getKey("/Title").getUTF8Value() << std::endl; + } + + if (outlines.hasKey("/First")) + { + numbers.push_back(0); + QPDFObjectHandle child = outlines.getKey("/First"); + while (1) + { + ++(numbers.back()); + bool has_next = child.hasKey("/Next"); + if ((style == st_lines) && (! has_next)) + { + numbers.back() = 0; + } + extract_bookmarks(child, numbers); + if (has_next) + { + child = child.getKey("/Next"); + } + else + { + break; + } + } + numbers.pop_back(); + } +} + +int main(int argc, char* argv[]) +{ + if ((whoami = strrchr(argv[0], '/')) == NULL) + { + whoami = argv[0]; + } + else + { + ++whoami; + } + // For libtool's sake.... + if (strncmp(whoami, "lt-", 3) == 0) + { + whoami += 3; + } + + if ((argc == 2) && (strcmp(argv[1], "--version") == 0)) + { + std::cout << whoami << " version 1.5" << std::endl; + exit(0); + } + + int arg; + for (arg = 1; arg < argc; ++arg) + { + if (argv[arg][0] == '-') + { + if (strcmp(argv[arg], "-numbers") == 0) + { + style = st_numbers; + } + else if (strcmp(argv[arg], "-lines") == 0) + { + style = st_lines; + } + else if (strcmp(argv[arg], "-show-open") == 0) + { + show_open = true; + } + else if (strcmp(argv[arg], "-show-targets") == 0) + { + show_targets = true; + } + else + { + usage(); + } + } + else + { + break; + } + } + + if (arg >= argc) + { + usage(); + } + + char const* filename = argv[arg++]; + char const* password = ""; + + if (arg < argc) + { + password = argv[arg++]; + } + if (arg != argc) + { + usage(); + } + + try + { + QPDF qpdf; + qpdf.processFile(filename, password); + + QPDFObjectHandle root = qpdf.getRoot(); + if (root.hasKey("/Outlines")) + { + std::vector<int> numbers; + if (show_targets) + { + generate_page_map(qpdf); + } + extract_bookmarks(root.getKey("/Outlines"), numbers); + } + else + { + std::cout << filename << " has no bookmarks" << std::endl; + } + } + catch (std::exception &e) + { + std::cerr << whoami << " processing file " << filename << ": " + << e.what() << std::endl; + exit(2); + } + + return 0; +} diff --git a/examples/pdf-mod-info.cc b/examples/pdf-mod-info.cc new file mode 100644 index 00000000..cd2bd034 --- /dev/null +++ b/examples/pdf-mod-info.cc @@ -0,0 +1,219 @@ +// Author: Vitaliy Pavlyuk + +#include <qpdf/QPDF.hh> +#include <qpdf/QPDFWriter.hh> +#include <qpdf/QPDFObjectHandle.hh> +#include <qpdf/QUtil.hh> +#include <qpdf/QTC.hh> +#include <iostream> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> + +static char const* version = "1.1"; +static char const* whoami = 0; + +void usage() +{ + std::cerr + << "Usage: " << whoami + << " -in in_file [-out out_file] [-key key [-val val]?]+\n" + << "Modifies/Adds/Removes PDF /Info entries in the in_file\n" + << "and stores the result in out_file\n" + << "Special mode: " << whoami << " --dump file\n" + << "dumps all /Info entries to stdout\n"; + exit(2); +} + +void dumpInfoDict(QPDF& pdf, + std::ostream& os = std::cout, + std::string const& sep = ":\t") +{ + QPDFObjectHandle trailer = pdf.getTrailer(); + if (trailer.hasKey("/Info")) + { + QPDFObjectHandle info = trailer.getKey("/Info"); + std::set<std::string> keys = info.getKeys(); + for (std::set<std::string>::const_iterator it = keys.begin(); + keys.end() != it; ++it) + { + QPDFObjectHandle elt = info.getKey(*it); + std::string val; + if (false) {} + else if (elt.isString()) + { + val = elt.getStringValue(); + } + else if (elt.isName()) + { + val = elt.getName(); + } + else // according to PDF Spec 1.5, shouldn't happen + { + val = elt.unparseResolved(); + } + os << it->substr(1) << sep << val << std::endl; // skip '/' + } + } +} + +void pdfDumpInfoDict(char const* fname) +{ + try + { + QPDF pdf; + pdf.processFile(fname); + dumpInfoDict(pdf); + } + catch (std::exception& e) + { + std::cerr << e.what() << std::endl; + exit(2); + } +} + +int main(int argc, char* argv[]) +{ + + bool static_id = false; + std::map<std::string, std::string> Keys; + + if ((whoami = strrchr(argv[0], '/')) == NULL) + { + whoami = argv[0]; + } + else + { + ++whoami; + } + // For libtool's sake.... + if (strncmp(whoami, "lt-", 3) == 0) + { + whoami += 3; + } + + if ((argc == 2) && (! strcmp(argv[1], "--version")) ) + { + std::cout << whoami << " version " << version << std::endl; + exit(0); + } + if ((argc == 4) && (! strcmp(argv[1], "--dump")) && + (strcmp(argv[2], "-in") == 0) ) + { + QTC::TC("examples", "pdf-mod-info --dump"); + pdfDumpInfoDict(argv[3]); + exit(0); + } + + char* fl_in = 0; + char* fl_out = 0; + char* cur_key = 0; + + for (int i = 1; i < argc; ++i) + { + if ((! strcmp(argv[i], "-in")) && (++i < argc)) + { + fl_in = argv[i]; + } + else if ((! strcmp(argv[i], "-out")) && (++i < argc)) + { + fl_out = argv[i]; + } + else if (! strcmp(argv[i], "--static-id")) // don't document + { + static_id = true; // this should be used in test suites only + } + else if ((! strcmp(argv[i], "-key")) && (++i < argc)) + { + QTC::TC("examples", "pdf-mod-info -key"); + cur_key = argv[i]; + Keys[cur_key] = ""; + } + else if ((! strcmp(argv[i], "-val")) && (++i < argc)) + { + if (cur_key == 0) + { + QTC::TC("examples", "pdf-mod-info usage wrong val"); + usage(); + } + QTC::TC("examples", "pdf-mod-info -val"); + Keys[cur_key] = argv[i]; + cur_key = 0; + } + else + { + QTC::TC("examples", "pdf-mod-info usage junk"); + usage(); + } + } + if (! fl_in) + { + QTC::TC("examples", "pdf-mod-info no in file"); + usage(); + } + if (! fl_out) + { + QTC::TC("examples", "pdf-mod-info in-place"); + fl_out = fl_in; + } + if (Keys.size() == 0) + { + QTC::TC("examples", "pdf-mod-info no keys"); + usage(); + } + + try + { + QPDF file; + file.processFile(fl_in); + + QPDFObjectHandle filetrailer = file.getTrailer(); + QPDFObjectHandle fileinfo; + + for (std::map<std::string, std::string>::const_iterator it = + Keys.begin(); Keys.end() != it; ++it) + { + if (! fileinfo.isInitialized()) + { + if (filetrailer.hasKey("/Info")) + { + QTC::TC("examples", "pdf-mod-info has info"); + fileinfo = filetrailer.getKey("/Info"); + } + else + { + QTC::TC("examples", "pdf-mod-info file no info"); + std::map<std::string, QPDFObjectHandle> vacant; + fileinfo = fileinfo.newDictionary(vacant); + filetrailer.replaceKey("/Info", fileinfo); + } + } + if (it->second == "") + { + fileinfo.removeKey(it->first); + } + else + { + QPDFObjectHandle elt = fileinfo.newString(it->second); + elt.makeDirect(); + fileinfo.replaceKey(it->first, elt); + } + } + std::string fl_tmp = fl_out; + fl_tmp += ".tmp"; + QPDFWriter w(file, fl_tmp.c_str()); + w.setStreamDataMode(QPDFWriter::s_preserve); + w.setLinearization(true); + w.setStaticID(static_id); + w.write(); + QUtil::os_wrapper("rename " + fl_tmp + " " + std::string(fl_out), + rename(fl_tmp.c_str(), fl_out)); + } + catch (std::exception& e) + { + std::cerr << e.what() << std::endl; + exit(2); + } + + return 0; +} diff --git a/examples/pdf-npages.cc b/examples/pdf-npages.cc new file mode 100644 index 00000000..53074d05 --- /dev/null +++ b/examples/pdf-npages.cc @@ -0,0 +1,61 @@ + + +#include <iostream> +#include <string.h> + +#include <qpdf/QPDF.hh> + +static char const* whoami = 0; + +void usage() +{ + std::cerr << "Usage: " << whoami << " filename" << std::endl + << "Prints the number of pages in filename" << std::endl; + exit(2); +} + +int main(int argc, char* argv[]) +{ + if ((whoami = strrchr(argv[0], '/')) == NULL) + { + whoami = argv[0]; + } + else + { + ++whoami; + } + // For libtool's sake.... + if (strncmp(whoami, "lt-", 3) == 0) + { + whoami += 3; + } + + if ((argc == 2) && (strcmp(argv[1], "--version") == 0)) + { + std::cout << whoami << " version 1.3" << std::endl; + exit(0); + } + + if (argc != 2) + { + usage(); + } + char const* filename = argv[1]; + + try + { + QPDF pdf; + pdf.processFile(filename); + QPDFObjectHandle root = pdf.getRoot(); + QPDFObjectHandle pages = root.getKey("/Pages"); + QPDFObjectHandle count = pages.getKey("/Count"); + std::cout << count.getIntValue() << std::endl; + } + catch (std::exception& e) + { + std::cerr << whoami << ": " << e.what() << std::endl; + exit(2); + } + + return 0; +} diff --git a/examples/qtest/bookmarks.test b/examples/qtest/bookmarks.test new file mode 100644 index 00000000..4cf4abcf --- /dev/null +++ b/examples/qtest/bookmarks.test @@ -0,0 +1,49 @@ +#!/usr/bin/env perl +require 5.008; +BEGIN { $^W = 1; } +use strict; + +chdir("bookmarks"); + +require TestDriver; + +my $td = new TestDriver('pdf-bookmarks'); + +foreach my $show ("", " -show-open") +{ + foreach my $style ("", " -lines", " -numbers") + { + my $out = "test.$show.$style.out"; + $out =~ s/ //g; + $td->runtest("show:$show, style:$style", + {$td->COMMAND => "pdf-bookmarks $show $style 1.pdf"}, + {$td->FILE => $out, $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + } +} +$td->runtest("no bookmarks", + {$td->COMMAND => "pdf-bookmarks 2.pdf"}, + {$td->STRING => "2.pdf has no bookmarks\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("bad", + {$td->COMMAND => "pdf-bookmarks 3.pdf"}, + {$td->STRING => "pdf-bookmarks processing file 3.pdf: " . + "3.pdf: offset 0: not a PDF file\n", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("encrypted, targets", + {$td->COMMAND => "pdf-bookmarks -show-targets 4.pdf user"}, + {$td->FILE => "encrypted.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("bookmarks deleted", + {$td->COMMAND => "pdf-bookmarks 5.pdf user"}, + {$td->STRING => "5.pdf has no bookmarks\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->report(10); diff --git a/examples/qtest/bookmarks/1.pdf b/examples/qtest/bookmarks/1.pdf new file mode 100644 index 00000000..2003cf97 --- /dev/null +++ b/examples/qtest/bookmarks/1.pdf @@ -0,0 +1,1502 @@ +%PDF-1.3 +% +%QDF-1.0 + +1 0 obj +<< + /PageLabels << /Nums [ + 0 << /P () >> + 2 << /S /r /St 1 >> + 7 << /P () >> + 9 << /S /r /St 6 >> + 11 << /P () >> + 12 << /S /D /St 2 >> + 15 << /S /D /St 6 >> + 19 << /P () >> + 20 << /S /D /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 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 + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +95 0 obj +<< + /Type /Outlines + /First 97 0 R + /Last 96 0 R + /Count 6 +>> +endobj + +96 0 obj +<< + /Type /Outline + /Title (Isis 1 -> 5: /XYZ null null null) + /Parent 95 0 R + /Count 4 + /Prev 97 0 R + /First 98 0 R + /Last 99 0 R + /Dest [ 8 0 R /XYZ null null null ] +>> +endobj + +97 0 obj +<< + /Type /Outline + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Parent 95 0 R + /Next 96 0 R + /Dest [ 18 0 R /XYZ 66 756 3 ] +>> +endobj + +98 0 obj +<< + /Type /Outline + /Title (Amanda 1.1 -> 11: /Fit) + /Parent 96 0 R + /Next 99 0 R + /First 100 0 R + /Last 101 0 R + /Count -3 + /Dest [ 14 0 R /Fit ] +>> +endobj + +99 0 obj +<< + /Type /Outline + /Title (Sandy 1.2 -> 13: /FitH 792) + /Parent 96 0 R + /Prev 98 0 R + /First 105 0 R + /Last 106 0 R + /Count 2 + /Dest [ 16 0 R /FitH 792 ] +>> +endobj + +100 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Parent 98 0 R + /Next 101 0 R + /First 102 0 R + /Last 103 0 R + /Count -2 + /Dest [ 15 0 R /FitV 100 ] +>> +endobj + +101 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Parent 98 0 R + /Prev 100 0 R + /First 104 0 R + /Last 104 0 R + /Count 1 + /Dest [ 15 0 R /XYZ null null null ] +>> +endobj + +102 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Parent 100 0 R + /Next 103 0 R + /Dest [ 21 0 R /XYZ null null null ] +>> +endobj + +103 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Parent 100 0 R + /Prev 102 0 R + /Dest [ 22 0 R /XYZ null null null ] +>> +endobj + +104 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Parent 101 0 R + /Dest [ 25 0 R /XYZ null null null ] +>> +endobj + +105 0 obj +<< + /Type /Outline + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Parent 99 0 R + /Next 106 0 R + /Dest [ 4 0 R /FitR 66 714 180 770 ] +>> +endobj + +106 0 obj +<< + /Type /Outline + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Parent 99 0 R + /Prev 105 0 R + /Dest [ 3 0 R /XYZ null null null ] +>> +endobj + +xref +0 107 +0000000000 65535 f +0000000025 00000 n +0000000434 00000 n +0000000830 00000 n +0000001035 00000 n +0000001240 00000 n +0000001445 00000 n +0000001650 00000 n +0000001855 00000 n +0000002060 00000 n +0000002265 00000 n +0000002471 00000 n +0000002678 00000 n +0000002885 00000 n +0000003092 00000 n +0000003299 00000 n +0000003506 00000 n +0000003713 00000 n +0000003920 00000 n +0000004127 00000 n +0000004334 00000 n +0000004541 00000 n +0000004748 00000 n +0000004955 00000 n +0000005162 00000 n +0000005369 00000 n +0000005576 00000 n +0000005783 00000 n +0000005990 00000 n +0000006197 00000 n +0000006404 00000 n +0000006611 00000 n +0000006818 00000 n +0000007037 00000 n +0000007140 00000 n +0000007160 00000 n +0000007279 00000 n +0000007338 00000 n +0000007441 00000 n +0000007484 00000 n +0000007587 00000 n +0000007630 00000 n +0000007733 00000 n +0000007776 00000 n +0000007879 00000 n +0000007922 00000 n +0000008025 00000 n +0000008068 00000 n +0000008171 00000 n +0000008214 00000 n +0000008317 00000 n +0000008360 00000 n +0000008463 00000 n +0000008507 00000 n +0000008610 00000 n +0000008654 00000 n +0000008758 00000 n +0000008802 00000 n +0000008906 00000 n +0000008950 00000 n +0000009054 00000 n +0000009098 00000 n +0000009202 00000 n +0000009246 00000 n +0000009350 00000 n +0000009394 00000 n +0000009498 00000 n +0000009542 00000 n +0000009646 00000 n +0000009690 00000 n +0000009794 00000 n +0000009838 00000 n +0000009942 00000 n +0000009986 00000 n +0000010090 00000 n +0000010134 00000 n +0000010238 00000 n +0000010282 00000 n +0000010386 00000 n +0000010430 00000 n +0000010534 00000 n +0000010578 00000 n +0000010682 00000 n +0000010726 00000 n +0000010830 00000 n +0000010874 00000 n +0000010978 00000 n +0000011022 00000 n +0000011126 00000 n +0000011170 00000 n +0000011274 00000 n +0000011318 00000 n +0000011422 00000 n +0000011466 00000 n +0000011570 00000 n +0000011590 00000 n +0000011677 00000 n +0000011873 00000 n +0000012019 00000 n +0000012194 00000 n +0000012377 00000 n +0000012568 00000 n +0000012778 00000 n +0000012947 00000 n +0000013116 00000 n +0000013269 00000 n +0000013438 00000 n +trailer << + /Root 1 0 R + /Size 107 +>> +startxref +13603 +%%EOF diff --git a/examples/qtest/bookmarks/2.pdf b/examples/qtest/bookmarks/2.pdf new file mode 100644 index 00000000..a7e01f91 --- /dev/null +++ b/examples/qtest/bookmarks/2.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +556 +%%EOF diff --git a/examples/qtest/bookmarks/3.pdf b/examples/qtest/bookmarks/3.pdf new file mode 100644 index 00000000..a1c0d954 --- /dev/null +++ b/examples/qtest/bookmarks/3.pdf @@ -0,0 +1 @@ +potato salad diff --git a/examples/qtest/bookmarks/4.pdf b/examples/qtest/bookmarks/4.pdf Binary files differnew file mode 100644 index 00000000..9d25f2f7 --- /dev/null +++ b/examples/qtest/bookmarks/4.pdf diff --git a/examples/qtest/bookmarks/5.pdf b/examples/qtest/bookmarks/5.pdf new file mode 100644 index 00000000..53a89ae5 --- /dev/null +++ b/examples/qtest/bookmarks/5.pdf @@ -0,0 +1,1573 @@ +%PDF-1.3 +% +%QDF-1.0 + +1 0 obj +<< + /PageLabels 107 0 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 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 + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +95 0 obj +<< + /Type /Outlines + /First 96 0 R + /Last 97 0 R + /Count 6 +>> +endobj + +96 0 obj +<< + /Type /Outline + /Title (Iss 1 -> 5: /XYZ null null null) + /Parent 95 0 R + /Count 4 + /Next 97 0 R + /First 98 0 R + /Last 99 0 R + /Dest [ 8 0 R /XYZ null null null ] +>> +endobj + +97 0 obj +<< + /Type /Outline + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Parent 95 0 R + /Prev 96 0 R + /Dest [ 18 0 R /XYZ 66 756 3 ] +>> +endobj + +98 0 obj +<< + /Type /Outline + /Title (Amanda 1.1 -> 11: /Fit) + /Parent 96 0 R + /Next 99 0 R + /First 100 0 R + /Last 101 0 R + /Count -3 + /Dest [ 14 0 R /Fit ] +>> +endobj + +99 0 obj +<< + /Type /Outline + % /Title (Sandy (Sandy [Greek]) 1.2 -> 13: /FitH 792) + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Parent 96 0 R + /Prev 98 0 R + /First 105 0 R + /Last 106 0 R + /Count 2 + /Dest [ 16 0 R /FitH 792 ] +>> +endobj + +100 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Parent 98 0 R + /Next 101 0 R + /First 102 0 R + /Last 103 0 R + /Count -2 + /Dest [ 15 0 R /FitV 100 ] +>> +endobj + +101 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Parent 98 0 R + /Prev 100 0 R + /First 104 0 R + /Last 104 0 R + /Count 1 + /Dest [ 15 0 R /XYZ null null null ] +>> +endobj + +102 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Parent 100 0 R + /Next 103 0 R + /Dest [ 21 0 R /XYZ null null null ] +>> +endobj + +103 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Parent 100 0 R + /Prev 102 0 R + /Dest [ 22 0 R /XYZ null null null ] +>> +endobj + +104 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Parent 101 0 R + /Dest [ 25 0 R /XYZ null null null ] +>> +endobj + +105 0 obj +<< + /Type /Outline + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Parent 99 0 R + /Next 106 0 R + /Dest [ 4 0 R /FitR 66 714 180 770 ] +>> +endobj + +106 0 obj +<< + /Type /Outline + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Parent 99 0 R + /Prev 105 0 R + /Dest [ 3 0 R /XYZ null null null ] +>> +endobj + +107 0 obj + << /Nums [ + 0 << /P () >> + 2 << /S /r /St 1 >> + 7 << /P () >> + 9 << /S /r /St 6 >> + 11 << /P () >> + 12 << /S /D /St 2 >> + 15 << /S /D /St 6 >> + 19 << /P () >> + 20 << /S /D /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endobj + +xref +0 108 +0000000000 65535 f +0000000025 00000 n +0000000145 00000 n +0000000541 00000 n +0000000746 00000 n +0000000951 00000 n +0000001156 00000 n +0000001361 00000 n +0000001566 00000 n +0000001771 00000 n +0000001976 00000 n +0000002182 00000 n +0000002389 00000 n +0000002596 00000 n +0000002803 00000 n +0000003010 00000 n +0000003217 00000 n +0000003424 00000 n +0000003631 00000 n +0000003838 00000 n +0000004045 00000 n +0000004252 00000 n +0000004459 00000 n +0000004666 00000 n +0000004873 00000 n +0000005080 00000 n +0000005287 00000 n +0000005494 00000 n +0000005701 00000 n +0000005908 00000 n +0000006115 00000 n +0000006322 00000 n +0000006529 00000 n +0000006748 00000 n +0000006851 00000 n +0000006871 00000 n +0000006990 00000 n +0000007049 00000 n +0000007152 00000 n +0000007195 00000 n +0000007298 00000 n +0000007341 00000 n +0000007444 00000 n +0000007487 00000 n +0000007590 00000 n +0000007633 00000 n +0000007736 00000 n +0000007779 00000 n +0000007882 00000 n +0000007925 00000 n +0000008028 00000 n +0000008071 00000 n +0000008174 00000 n +0000008218 00000 n +0000008321 00000 n +0000008365 00000 n +0000008469 00000 n +0000008513 00000 n +0000008617 00000 n +0000008661 00000 n +0000008765 00000 n +0000008809 00000 n +0000008913 00000 n +0000008957 00000 n +0000009061 00000 n +0000009105 00000 n +0000009209 00000 n +0000009253 00000 n +0000009357 00000 n +0000009401 00000 n +0000009505 00000 n +0000009549 00000 n +0000009653 00000 n +0000009697 00000 n +0000009801 00000 n +0000009845 00000 n +0000009949 00000 n +0000009993 00000 n +0000010097 00000 n +0000010141 00000 n +0000010245 00000 n +0000010289 00000 n +0000010393 00000 n +0000010437 00000 n +0000010541 00000 n +0000010585 00000 n +0000010689 00000 n +0000010733 00000 n +0000010837 00000 n +0000010881 00000 n +0000010985 00000 n +0000011029 00000 n +0000011133 00000 n +0000011177 00000 n +0000011281 00000 n +0000011301 00000 n +0000011388 00000 n +0000011584 00000 n +0000011730 00000 n +0000011905 00000 n +0000012258 00000 n +0000012449 00000 n +0000012659 00000 n +0000012828 00000 n +0000012997 00000 n +0000013150 00000 n +0000013319 00000 n +0000013484 00000 n +trailer << + /Root 1 0 R + /Size 108 +>> +startxref +13801 +%%EOF + +% 1. Delete page labels +xref +0 1 +0000000107 65535 f +107 1 +0000000000 00001 f +trailer << /Root 1 0 R /Size 108 /Prev 13801 >> +startxref +16059 +%%EOF + +% 2. Delete outlines, reuse page labels. + +107 1 obj + << /Nums [ + 0 << /P () >> + 2 << /S /D /St 1 >> + 7 << /P () >> + 9 << /S /R /St 6 >> + 11 << /P () >> + 12 << /S /r /St 2 >> + 15 << /S /r /St 6 >> + 19 << /P () >> + 20 << /S /R /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endobj + +% Reuse object 1 with the same generation number. Leave outlines +% there pointing to a deleted object. +1 0 obj +<< + /PageLabels 107 1 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +xref +0 2 +0000000095 65535 f +0000016648 00000 n +95 13 +0000000096 00001 f +0000000097 00001 f +0000000098 00001 f +0000000099 00001 f +0000000100 00001 f +0000000101 00001 f +0000000102 00001 f +0000000103 00001 f +0000000104 00001 f +0000000105 00001 f +0000000106 00001 f +0000000000 00001 f +0000016227 00001 n +trailer << /Size 108 /Prev 16059 /Root 1 0 R >> +startxref +16768 +%%EOF diff --git a/examples/qtest/bookmarks/encrypted.out b/examples/qtest/bookmarks/encrypted.out new file mode 100644 index 00000000..4ad63b76 --- /dev/null +++ b/examples/qtest/bookmarks/encrypted.out @@ -0,0 +1,11 @@ +[ -> 6 ] Isís 1 -> 5: /XYZ null null null +[ -> 12 ] Amanda 1.1 -> 11: /Fit +[ -> 13 ] Isosicle 1.1.1 -> 12: /FitV 100 +[ -> 19 ] Isosicle 1.1.1.1 -> 18: /XYZ null null null +[ -> 20 ] Isosicle 1.1.1.2 -> 19: /XYZ null null null +[ -> 13 ] Isosicle 1.1.2 -> 12: /XYZ null null null +[ -> 23 ] Isosicle 1.1.2.1 -> 22: /XYZ null null null +[ -> 14 ] Sandy ÷Σανδι÷ 1.2 -> 13: /FitH 792 +[ -> 2 ] Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 +[ -> 1 ] Trepsicle 1.2.2 -> 0: /XYZ null null null +[ -> 16 ] Trepak 2 -> 15: /XYZ 66 756 3 diff --git a/examples/qtest/bookmarks/test.-show-open.-lines.out b/examples/qtest/bookmarks/test.-show-open.-lines.out new file mode 100644 index 00000000..ea66669c --- /dev/null +++ b/examples/qtest/bookmarks/test.-show-open.-lines.out @@ -0,0 +1,22 @@ +| ++-+ ( ) Trepak 2 -> 15: /XYZ 66 756 3 +| ++-+ (v) Isis 1 -> 5: /XYZ null null null + | + +-+ (>) Amanda 1.1 -> 11: /Fit + | | + | +-+ (>) Isosicle 1.1.1 -> 12: /FitV 100 + | | | + | | +-+ ( ) Isosicle 1.1.1.1 -> 18: /XYZ null null null + | | | + | | +-+ ( ) Isosicle 1.1.1.2 -> 19: /XYZ null null null + | | + | +-+ (v) Isosicle 1.1.2 -> 12: /XYZ null null null + | | + | +-+ ( ) Isosicle 1.1.2.1 -> 22: /XYZ null null null + | + +-+ (v) Sandy 1.2 -> 13: /FitH 792 + | + +-+ ( ) Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 + | + +-+ ( ) Trepsicle 1.2.2 -> 0: /XYZ null null null diff --git a/examples/qtest/bookmarks/test.-show-open.-numbers.out b/examples/qtest/bookmarks/test.-show-open.-numbers.out new file mode 100644 index 00000000..3680c2d4 --- /dev/null +++ b/examples/qtest/bookmarks/test.-show-open.-numbers.out @@ -0,0 +1,11 @@ +1. ( ) Trepak 2 -> 15: /XYZ 66 756 3 +2. (v) Isis 1 -> 5: /XYZ null null null +2.1. (>) Amanda 1.1 -> 11: /Fit +2.1.1. (>) Isosicle 1.1.1 -> 12: /FitV 100 +2.1.1.1. ( ) Isosicle 1.1.1.1 -> 18: /XYZ null null null +2.1.1.2. ( ) Isosicle 1.1.1.2 -> 19: /XYZ null null null +2.1.2. (v) Isosicle 1.1.2 -> 12: /XYZ null null null +2.1.2.1. ( ) Isosicle 1.1.2.1 -> 22: /XYZ null null null +2.2. (v) Sandy 1.2 -> 13: /FitH 792 +2.2.1. ( ) Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 +2.2.2. ( ) Trepsicle 1.2.2 -> 0: /XYZ null null null diff --git a/examples/qtest/bookmarks/test.-show-open..out b/examples/qtest/bookmarks/test.-show-open..out new file mode 100644 index 00000000..46667ef7 --- /dev/null +++ b/examples/qtest/bookmarks/test.-show-open..out @@ -0,0 +1,11 @@ +( ) Trepak 2 -> 15: /XYZ 66 756 3 +(v) Isis 1 -> 5: /XYZ null null null +(>) Amanda 1.1 -> 11: /Fit +(>) Isosicle 1.1.1 -> 12: /FitV 100 +( ) Isosicle 1.1.1.1 -> 18: /XYZ null null null +( ) Isosicle 1.1.1.2 -> 19: /XYZ null null null +(v) Isosicle 1.1.2 -> 12: /XYZ null null null +( ) Isosicle 1.1.2.1 -> 22: /XYZ null null null +(v) Sandy 1.2 -> 13: /FitH 792 +( ) Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 +( ) Trepsicle 1.2.2 -> 0: /XYZ null null null diff --git a/examples/qtest/bookmarks/test..-lines.out b/examples/qtest/bookmarks/test..-lines.out new file mode 100644 index 00000000..a6de7db5 --- /dev/null +++ b/examples/qtest/bookmarks/test..-lines.out @@ -0,0 +1,22 @@ +| ++-+ Trepak 2 -> 15: /XYZ 66 756 3 +| ++-+ Isis 1 -> 5: /XYZ null null null + | + +-+ Amanda 1.1 -> 11: /Fit + | | + | +-+ Isosicle 1.1.1 -> 12: /FitV 100 + | | | + | | +-+ Isosicle 1.1.1.1 -> 18: /XYZ null null null + | | | + | | +-+ Isosicle 1.1.1.2 -> 19: /XYZ null null null + | | + | +-+ Isosicle 1.1.2 -> 12: /XYZ null null null + | | + | +-+ Isosicle 1.1.2.1 -> 22: /XYZ null null null + | + +-+ Sandy 1.2 -> 13: /FitH 792 + | + +-+ Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 + | + +-+ Trepsicle 1.2.2 -> 0: /XYZ null null null diff --git a/examples/qtest/bookmarks/test..-numbers.out b/examples/qtest/bookmarks/test..-numbers.out new file mode 100644 index 00000000..7ff9e2aa --- /dev/null +++ b/examples/qtest/bookmarks/test..-numbers.out @@ -0,0 +1,11 @@ +1. Trepak 2 -> 15: /XYZ 66 756 3 +2. Isis 1 -> 5: /XYZ null null null +2.1. Amanda 1.1 -> 11: /Fit +2.1.1. Isosicle 1.1.1 -> 12: /FitV 100 +2.1.1.1. Isosicle 1.1.1.1 -> 18: /XYZ null null null +2.1.1.2. Isosicle 1.1.1.2 -> 19: /XYZ null null null +2.1.2. Isosicle 1.1.2 -> 12: /XYZ null null null +2.1.2.1. Isosicle 1.1.2.1 -> 22: /XYZ null null null +2.2. Sandy 1.2 -> 13: /FitH 792 +2.2.1. Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 +2.2.2. Trepsicle 1.2.2 -> 0: /XYZ null null null diff --git a/examples/qtest/bookmarks/test...out b/examples/qtest/bookmarks/test...out new file mode 100644 index 00000000..31a1cf45 --- /dev/null +++ b/examples/qtest/bookmarks/test...out @@ -0,0 +1,11 @@ +Trepak 2 -> 15: /XYZ 66 756 3 +Isis 1 -> 5: /XYZ null null null +Amanda 1.1 -> 11: /Fit +Isosicle 1.1.1 -> 12: /FitV 100 +Isosicle 1.1.1.1 -> 18: /XYZ null null null +Isosicle 1.1.1.2 -> 19: /XYZ null null null +Isosicle 1.1.2 -> 12: /XYZ null null null +Isosicle 1.1.2.1 -> 22: /XYZ null null null +Sandy 1.2 -> 13: /FitH 792 +Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770 +Trepsicle 1.2.2 -> 0: /XYZ null null null diff --git a/examples/qtest/mod-info.test b/examples/qtest/mod-info.test new file mode 100644 index 00000000..83cc3ba0 --- /dev/null +++ b/examples/qtest/mod-info.test @@ -0,0 +1,93 @@ +#!/usr/bin/env perl +require 5.008; +BEGIN { $^W = 1; } +use strict; +use File::Copy; + +chdir("mod-info"); + +require TestDriver; + +my $td = new TestDriver('pdf-mod-info'); + +my $prg = "pdf-mod-info"; +my $qpdf = $ENV{'QPDF_BIN'} or die; + +cleanup(); + +$td->runtest("usage #1", + {$td->COMMAND => "$prg -in target.pdf"}, + {$td->FILE => "usage.out", + $td->EXIT_STATUS => 2}); + +$td->runtest("usage #2", + {$td->COMMAND => "$prg -key abc -val def"}, + {$td->FILE => "usage.out", + $td->EXIT_STATUS => 2}); + +$td->runtest("usage #3", + {$td->COMMAND => "$prg -key abc -val def abc"}, + {$td->FILE => "usage.out", + $td->EXIT_STATUS => 2}); + +$td->runtest("usage #4", + {$td->COMMAND => "$prg -in source1.pdf -key /date -val 01/01/01 -val 12/12/12"}, + {$td->FILE => "usage.out", + $td->EXIT_STATUS => 2}); + +$td->runtest("dump #1", + {$td->COMMAND => "$prg --dump -in files/source1.pdf"}, + {$td->FILE => "dump.out", + $td->EXIT_STATUS => 0}); + +$td->runtest("dump #2", + {$td->COMMAND => "$prg --dump -in files/no-info.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + +$td->runtest("dump #3", + {$td->COMMAND => "$prg --dump -in files/empty-info.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + +run_and_cmp("modify Subject", + "$prg -in files/source1.pdf -out out.pdf -key /Subject " . + "-val \"Export Business\"", + "", "out.pdf", "files/1.qdf"); + +run_and_cmp("add Subject, remove Producer, modify CreationDate", + "$prg -in files/source2.pdf -out out.pdf -key /Subject " . + "-val \"Tammlin\" -key /Producer -key /CreationDate -val 12/12", + "", "out.pdf", "files/2.qdf"); + +run_and_cmp("add Subject (empty-info file)", + "$prg -in files/empty-info.pdf -out out.pdf -key /Subject " . + "-val Tammlin", + "", "out.pdf", "files/3.qdf"); + +copy("files/no-info.pdf", "no-info.pdf") or die "can't copy no-info: $!"; +run_and_cmp("in-place Producer added (no-info file)", + "$prg -in no-info.pdf -key /Producer -val \"Obivan Kinobi\"", + "", "no-info.pdf", "files/4.qdf"); + +cleanup(); + +$td->report(15); + +sub cleanup +{ + unlink (<*.pdf>); +} + +sub run_and_cmp +{ + my ($dsc, $cmd, $out, $fout, $fexp) = @_; + $td->runtest($dsc, + {$td->COMMAND => "$cmd --static-id"}, + {$td->STRING => $out, + $td->EXIT_STATUS => 0}); + $td->runtest("$dsc output", + {$td->COMMAND => "$qpdf --static-id -qdf $fout -"}, + {$td->FILE => $fexp, + $td->EXIT_STATUS => 0}); +} diff --git a/examples/qtest/mod-info/dump.out b/examples/qtest/mod-info/dump.out new file mode 100644 index 00000000..a453f9dd --- /dev/null +++ b/examples/qtest/mod-info/dump.out @@ -0,0 +1,11 @@ +Author: Yours Truly +ContentTemperature: 100F +CreationDate: D:20040212104653-05'00' +Creator: Adobe Acrobat 6.0 +FormerlyKnownAs: target/branch/leaf/leaf.pdf +Keywords: 40, 128, public, encryption, ignition, primarily prime +ModDate: D:20040212112832-05'00' +Producer: Adobe Acrobat 6.0 Image Conversion Plug-in +Subject: Of The Matter +Title: My New Car Title +VeryImportantNote: pordofor stands for portable document format diff --git a/examples/qtest/mod-info/files/1.qdf b/examples/qtest/mod-info/files/1.qdf Binary files differnew file mode 100644 index 00000000..2b63f6ae --- /dev/null +++ b/examples/qtest/mod-info/files/1.qdf diff --git a/examples/qtest/mod-info/files/2.qdf b/examples/qtest/mod-info/files/2.qdf new file mode 100644 index 00000000..63be2439 --- /dev/null +++ b/examples/qtest/mod-info/files/2.qdf @@ -0,0 +1,1338 @@ +%PDF-1.5 +% +%QDF-1.0 + +1 0 obj +<< + /Metadata 3 0 R + /Pages 5 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /CreationDate (12/12) + /Creator (Writer) + /ModDate (D:20041221113239-05'00') + /Subject (Tammlin) +>> +endobj + +3 0 obj +<< + /Subtype /XML + /Type /Metadata + /Length 4 0 R +>> +stream +<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> +<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='uuid:d8434ae3-1ef1-4c46-8276-e1d75853ad75' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='OpenOffice.org 1.1.2'></rdf:Description>
+<rdf:Description rdf:about='uuid:d8434ae3-1ef1-4c46-8276-e1d75853ad75' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:CreateDate='2004-12-21T09:50:20-05:00' xap:CreatorTool='Writer' xap:ModifyDate='2004-12-21T11:32:39-05:00' xap:MetadataDate='2004-12-21T11:32:39-05:00'></rdf:Description>
+<rdf:Description rdf:about='uuid:d8434ae3-1ef1-4c46-8276-e1d75853ad75' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:3cc807c7-0bed-463b-9bdf-c902541aab4b'/>
+<rdf:Description rdf:about='uuid:d8434ae3-1ef1-4c46-8276-e1d75853ad75' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'/>
+</rdf:RDF>
+</x:xmpmeta>
+ + + + + + + + + + + + + + + + + + + + + +<?xpacket end='w'?> +endstream +endobj + +%QDF: ignore_newline +4 0 obj +3154 +endobj + +5 0 obj +<< + /Count 1 + /Kids [ + 6 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +6 0 obj +<< + /Annots 7 0 R + /Contents 8 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 5 0 R + /Resources 10 0 R + /Type /Page +>> +endobj + +7 0 obj +[ + 11 0 R +] +endobj + +%% Contents for page 1 +8 0 obj +<< + /Length 9 0 R +>> +stream +0 w +q 0 -0.1 612.1 792.1 re W* n +q 0 0 0 rg +BT +90.1 615.3 Td /F1 80 Tf (abcd) Tj +151.2 0 Td (-) Tj +26.6 0 Td (efghjk-) Tj +ET +Q +q 0 0 0 rg +BT +90.1 504.8 Td /F1 80 Tf (mn) Tj +102.4 0 Td ( ) Tj +20 0 Td (o) Tj +40.1 0 Td (p) Tj +39.9 0 Td (-) Tj +26.8 0 Td (q) Tj +ET +Q +q 0 0 0 rg +BT +90.1 394.3 Td /F1 80 Tf (rs) Tj +58.7 0 Td (tu) Tj +62.1 0 Td (v) Tj +40.1 0 Td (w) Tj +57.8 0 Td ( ) Tj +20.1 0 Td (xyz) Tj +ET +Q +Q +endstream +endobj + +9 0 obj +404 +endobj + +10 0 obj +<< + /Font 12 0 R + /ProcSet [ + /PDF + ] +>> +endobj + +11 0 obj +<< + /APEX:Id (353) + /APEX:Label (1) + /APEX:LabelAp 13 0 R + /F 4 + /Rect [ + 63.461945 + 339.112457 + 525.003418 + 700.653259 + ] + /Subtype /APEX:Zone + /Type /Annot +>> +endobj + +12 0 obj +<< + /F1 15 0 R +>> +endobj + +13 0 obj +<< + /BBox [ + 0.0 + 0.0 + 9.199997 + 12.399994 + ] + /FormType 1 + /Resources << + /Font 16 0 R + /ProcSet [ + /PDF + /Text + ] + >> + /Subtype /Form + /Type /XObject + /Length 14 0 R +>> +stream +0 0 1 rg +0 0 9.2 12.4 re +f +BT +1 g +/LABELFONT 12 Tf +1 2.32 TD +(1)Tj +ET +endstream +endobj + +14 0 obj +70 +endobj + +15 0 obj +<< + /BaseFont /NimbusRomanNo9L-Regu + /FirstChar 0 + /FontDescriptor 17 0 R + /LastChar 255 + /Subtype /Type1 + /ToUnicode 18 0 R + /Type /Font + /Widths [ + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 250 + 333 + 408 + 500 + 500 + 833 + 778 + 333 + 333 + 333 + 500 + 564 + 250 + 333 + 250 + 278 + 500 + 500 + 500 + 500 + 500 + 500 + 500 + 500 + 500 + 500 + 278 + 278 + 564 + 564 + 564 + 444 + 921 + 722 + 662 + 667 + 718 + 611 + 556 + 722 + 715 + 329 + 389 + 700 + 611 + 883 + 722 + 722 + 552 + 722 + 662 + 556 + 611 + 722 + 722 + 944 + 722 + 722 + 611 + 333 + 278 + 333 + 469 + 500 + 333 + 444 + 500 + 444 + 500 + 444 + 333 + 500 + 500 + 278 + 278 + 500 + 278 + 778 + 500 + 500 + 500 + 500 + 344 + 389 + 278 + 500 + 500 + 722 + 500 + 500 + 444 + 480 + 200 + 480 + 541 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 333 + 500 + 500 + 167 + 500 + 500 + 500 + 500 + 180 + 444 + 500 + 333 + 333 + 556 + 556 + 0 + 500 + 500 + 500 + 250 + 0 + 453 + 350 + 333 + 444 + 444 + 500 + 1000 + 1000 + 0 + 444 + 0 + 333 + 333 + 333 + 333 + 333 + 333 + 333 + 333 + 0 + 333 + 333 + 0 + 333 + 333 + 333 + 1000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 889 + 0 + 276 + 0 + 0 + 0 + 0 + 611 + 722 + 889 + 310 + 0 + 0 + 0 + 0 + 0 + 667 + 0 + 0 + 0 + 278 + 0 + 0 + 278 + 500 + 722 + 500 + 0 + 0 + 0 + 0 + ] +>> +endobj + +16 0 obj +<< + /LABELFONT 20 0 R +>> +endobj + +17 0 obj +<< + /Ascent 1098 + /CapHeight 1098 + /Descent -281 + /Flags 4 + /FontBBox [ + -168 + -281 + 1030 + 1098 + ] + /FontFile 21 0 R + /FontName /NimbusRomanNo9L-Regu + /ItalicAngle 0 + /StemV 80 + /Type /FontDescriptor +>> +endobj + +18 0 obj +<< + /Length 19 0 R +>> +stream +/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+/CMapName /Adobe-Identity-UCS def
+/CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+100 beginbfchar
+<20> <00A0>
+<21> <0021>
+<22> <0022>
+<23> <0023>
+<24> <0024>
+<25> <0025>
+<26> <0026>
+<27> <2019>
+<28> <0028>
+<29> <0029>
+<2A> <002A>
+<2B> <002B>
+<2C> <002C>
+<2D> <00AD>
+<2E> <002E>
+<2F> <002F>
+<30> <0030>
+<31> <0031>
+<32> <0032>
+<33> <0033>
+<34> <0034>
+<35> <0035>
+<36> <0036>
+<37> <0037>
+<38> <0038>
+<39> <0039>
+<3A> <003A>
+<3B> <003B>
+<3C> <003C>
+<3D> <003D>
+<3E> <003E>
+<3F> <003F>
+<40> <0040>
+<41> <0041>
+<42> <0042>
+<43> <0043>
+<44> <0044>
+<45> <0045>
+<46> <0046>
+<47> <0047>
+<48> <0048>
+<49> <0049>
+<4A> <004A>
+<4B> <004B>
+<4C> <004C>
+<4D> <004D>
+<4E> <004E>
+<4F> <004F>
+<50> <0050>
+<51> <0051>
+<52> <0052>
+<53> <0053>
+<54> <0054>
+<55> <0055>
+<56> <0056>
+<57> <0057>
+<58> <0058>
+<59> <0059>
+<5A> <005A>
+<5B> <005B>
+<5C> <005C>
+<5D> <005D>
+<5E> <005E>
+<5F> <005F>
+<60> <2018>
+<61> <0061>
+<62> <0062>
+<63> <0063>
+<64> <0064>
+<65> <0065>
+<66> <0066>
+<67> <0067>
+<68> <0068>
+<69> <0069>
+<6A> <006A>
+<6B> <006B>
+<6C> <006C>
+<6D> <006D>
+<6E> <006E>
+<6F> <006F>
+<70> <0070>
+<71> <0071>
+<72> <0072>
+<73> <0073>
+<74> <0074>
+<75> <0075>
+<76> <0076>
+<77> <0077>
+<78> <0078>
+<79> <0079>
+<7A> <007A>
+<7B> <007B>
+<7C> <007C>
+<7D> <007D>
+<7E> <007E>
+<A1> <00A1>
+<A2> <00A2>
+<A3> <00A3>
+<A4> <2215>
+<A5> <00A5>
+endbfchar
+49 beginbfchar
+<A6> <0192>
+<A7> <00A7>
+<A8> <00A4>
+<A9> <0027>
+<AA> <201C>
+<AB> <00AB>
+<AC> <2039>
+<AD> <203A>
+<AE> <FB01>
+<AF> <FB02>
+<B1> <2013>
+<B2> <2020>
+<B3> <2021>
+<B4> <2219>
+<B6> <00B6>
+<B7> <2022>
+<B8> <201A>
+<B9> <201E>
+<BA> <201D>
+<BB> <00BB>
+<BC> <2026>
+<BD> <2030>
+<BF> <00BF>
+<C1> <0060>
+<C2> <00B4>
+<C3> <02C6>
+<C4> <02DC>
+<C5> <02C9>
+<C6> <02D8>
+<C7> <02D9>
+<C8> <00A8>
+<CA> <02DA>
+<CB> <00B8>
+<CD> <02DD>
+<CE> <02DB>
+<CF> <02C7>
+<D0> <2014>
+<E1> <00C6>
+<E3> <00AA>
+<E8> <0141>
+<E9> <00D8>
+<EA> <0152>
+<EB> <00BA>
+<F1> <00E6>
+<F5> <0131>
+<F8> <0142>
+<F9> <00F8>
+<FA> <0153>
+<FB> <00DF>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endstream +endobj + +19 0 obj +2311 +endobj + +20 0 obj +<< + /BaseFont /Courier-Oblique + /Subtype /Type1 + /Type /Font +>> +endobj + +21 0 obj +<< + /Length1 1346 + /Length2 145230 + /Length3 0 + /Length 22 0 R +>> +stream +%!PS-AdobeFont-1.0: NimbusRomanNo9L-Regu 1.06 +%%Title: NimbusRomanNo9L-Regu +%%CreationDate: Thu Aug 5 23:43:46 2004 +%%Creator: frob +%%DocumentSuppliedResources: font NimbusRomanNo9L-Regu +% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development; Cyri +% Generated by FontForge 20040703 (http://fontforge.sf.net/) +%%EndComments +FontDirectory/NimbusRomanNo9L-Regu known{/NimbusRomanNo9L-Regu findfont dup/UniqueID known{dup +/UniqueID get 4162059 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /NimbusRomanNo9L-Regu def +/FontBBox {-168 -281 1031 1098 }readonly def +/UniqueID 4162059 def +/PaintType 0 def +/FontInfo 10 dict dup begin + /version (1.06) readonly def + /Notice (Copyright \050URW\051++,Copyright 1999 by \050URW\051++ Design & Development; Cyrillic glyphs added by Valek Filippov \050C\051 2001; Numero, infinity and Omega made by Dmitry 40in \050C\051 2001) readonly def + /FullName (Nimbus Roman No9 L Regular) readonly def + /FamilyName (Nimbus Roman No9 L) readonly def + /Weight (Regular) readonly def + /FSType 0 def + /ItalicAngle 0 def + /isFixedPitch false def + /UnderlinePosition -100 def + /UnderlineThickness 50 def +end readonly def +/Encoding StandardEncoding def +currentdict end +currentfile eexec +o4>ì`0BCT&5. + +Svik
kA 7F`$yJU4NL^ +Vٍ.+Yҁ4۳\sm'vͽ=@R3GIJzvN1͌dհf~ e:^/:0(}l^?2-*Йu3K65g*ߠJ(]<MӶͺ +#!v'˅:m(^^ mzTG9~^@s?;Vl1
`vQLaXjp`M
`jQh|?M'UHj=^+tLҩu֊$VZ 8=h^I|R2iTMB",0\ m`3i6\8s'k## +h + y0'ϳmdc0Xjr<?[A)AQ_&&S,z/WxDC?̶`{4dKNVh3C8D%3˚JtiqNe +[}i}"&`ba)%vnjQ}ܟ%]yZҨpT0D9(pvM +6_rko%8G#9q<Evy$ +I#"Lb:Ṭ*f}tgxyWGxVVF0ɘvǦ>;4wǁsOEhiE/17YY$d5x:8/); + +- +PѼ+IEsP<J!uckMvӃ zQNwXx>7f&8ؽO]՞V}_2R5:8`ĺ1I^8 RsL8n$4Wf=p.z|Ur~H&nT<EɓomW2U_я>:Yo;-kGp#dݢ0eEv0F!N]친)Ā88zKG7up$|kS5vβR* +mZ\Zp40e
' f(#)B: YвA]rۛNU<LNӢqWr
+Œ0{Qi}B }*PdΆ"%^v`-<[_ G
eNt]%&9αd]}BW
lv¾8ėCt#[{̷)l{#h{USshZ3K%s輱sW||fFE=w|¶xH'G^a2]bϽb*;iB嶀@3̾uT5GIԏ4uIw O6QH0 +ғ +J;;ĥ# _B>.y
o͠퇜͕.BQu[۹5GqUrה}lw`r`3dq&xwT +lRY+RfÄ}H$4pm1<l4e՝J#0,M^~U +:j`-{
k +m"庝/xBFd8ڪD[La@&JRR,Cu`MxAVlަQȈ\ή%# }A5jk9P?u&[kmY|d +sx6k/rUsmÔ`6pr:i"!yҖwFT|`_<TEں<
d߰C;:Bj9rTV\<ID;ލմ-?`GEUjkc.c HO(FK2Fc;des +8"cɻ-(^!˞*e8*^'+>Zo1ET/ڝNx ]bWPJb 0 `/9CԷy{|O${9AȣՑ*7(aFBQܥՖHM +O~\EfqѷooL9 XQC0S/lAӇ\*7^IQlYFG:E|VTG78{30"7"g +V3T/\ddADVޠTɴK;֪/r-ʈ ;:6T +$6}dϊO/1,GFUqf0Y9\dUIg=_>HjL6PėCc4}+7Læ+ʂ>@<nzFU+:_ka|jGAe%WC^!Q>]R6efaimɜ:_6.GZ79Afޏ؍w?C!04,Ri+$ MIA,p˼~V]-<5(rUoghTxmd:u\equeҴQ<s|% +k2JBQy~֔y͌dߔwg2nBF2Ȃ'4kV"?9 o;c}bx=l
N1d9찊j
(G@vR7㾭qLy¶u<~.Sg ݡޯ6kQ*4t7o;7^]kz3:0(. {TU&
DtvEau:o!矎`>$` <p(W.3'SnԔX^qX74QrƋG?~3BO$GS{ +CǸRGrz%Q+p?棍);F%80*+gւ@}<qMX* +2`/c +G&^I"Ҏ4G! +$)W&*?mY=<MܯOAQn㑇Z:y=nCQx&^WUqˇSe]y,Y8.9߳G}=bW lE.4:JLU1JY1X˹yrq_RzJ+r;/b}z7Ka8ϓg@pɚ|IxZoߋ'l!,T9^ڼB|BnFl ++ʩ`<[?wmtR^nj`G]_gxt$|D.Wq)Cˑs=ڿJC/ݾm QļU}x;
DqI."F,'У_aubڲB'I'fnD+AnD`m( kM:T6q<VIiվl\À{bNtFg!![$k9(VXXnc9z`i#Smy2W8r`밶^ٞeVR#>G5y`t)q#Mr}zxd>gPsh1ϠrAD +AFƳHt^ j&:mVOoȪ)7ɗQSFV=#?m #!x~ flm@XyuXN`yܽkgG9ڑ uS<st:t_ҚG[!?Mi1~LzJ[ +IC/ʢ+q;l=<㍌?Ւ +B,p%ЀDm +@BӐ?7傰P
8cwٶR=>pom|6fW6$Q"A3 +ڻ_Ej[U
~ydbѻ{Lvv'2Xf҂nS_~go37{|I[uL0nc$Z0Z9$Ashao["Hl[$Uğ0\p=b)h|izN4n`n;6(TaUUl+KdjJ3(I=b>.yE:BV;sXƢ4D7<[d!YlgZ\Nqslsjm87oizJDnhk̩^ +O?oW?'qBqemawe@Ԇ
+D}MQ80\f3R(|L{KrFp`T&(J/k )NԈVXwTa҉ fyJix
I/%nt_2kT/^Jr6Tcwɩ@t?y^E +j湍oi.R#6!0 n{@WAj֢=H\hp;aỻ3`v_ڎR1 +SE͐=\)dU2 ܨ䔜7<CxCR:UQf3HYKѹ6&\ +=Ēn_Y\W,xs~lIy+=r0Mx`p>
(dLki&VU8`Pg*QAFڦ]yg)iji)n!ahzb3,3=?MRV*6ߚb6h'ƥ$7xwD#hVD1#OՁ*Z\<ʨ6% +D)ª^hX){tFNiPM-\|1Q]n3Gpt}`-!*u٫{/&xQyr{TWG^P*,g̒tBUeցCoڹc!1FlF,ݒovR>2)HЭlKrvX +'\pMydK{Rp1ڍ::q8K dy6YmWVjG]#C?FZfdE9UX';3+p{]bZ)31ߠa F?`Jɹu]-S|k|$izUo[TkJq71rg+Kt"@ه2A398`qO](ڃW[S +q5]AY\a1Y:Tn\#PI=YqPx\.ߔVgEN)م?4*<4um[5`sybwH +Ӱrx%Am9_~HoaT!NA%ѹ4! >EkUqZXd鼐,{SDѼ^`O<e:xOkfU۵ y1\Ys8磩}G.ֈGh|EZhUoMeN+
; WH23t?0-"E~s#z!{O@ͬbsq?HЉI~ tw?oy&bǼY*SrrN{LcOj1 k6}rT+>7w(C2B}M1<O7db*ZU8`܋~EP0N~@p +óV /寿H?VfYC?
B]W1j, +o.5UsjmlQb
CTkyu3l-/nvL@
K΄mQ8DZdڹks(R`_xݣ%K0/FA?7@IfZ}@S\@<!!vC,o +J]#Jδښ[8CTKrT0qWɞI,e)Ct\u8gaTBtXh
(*,PK]c7mL!zz<+A9>um
+ҔӅ-hrnMgJ9hY r@YἜ>f +vlhT_#,%|lxATlqXmβz|j}oƝCv6[c$J"a}ٝtU^ +A"KD% +JՈI՞z
z+7Fd#Bi^A
0L6O5jaXo(-c{7UYWLuꤩtumBtTȍn1WcR\-|?15zmyO~kZzt + +W&tø$Fnmԍ +MIҘޔA;>g7*]{9F&tYu+I+¸}@D_7n.Zޜ
_;L}
^| +09EZ#h}bm05*\1⌥@ּVkZ`6C1sw~*pލ%{t Vu;wP>-_CW4(.kU4!m>ovI}a#c2t`?ԇEt%_o:nRYAɾr@&̌$a:{A&*y}NBQS=qU[snc%&8L0u0ׯjWުtݝ~<
DEŀ5ﻰ0@ΐ%C#f*)p`pL +J"rp?yvypc_{|%fuZUD0O1L0 ۴ 4OMM)}P_۫c;j>x{+u
D䩦3hԞsaXo2R#0 >1<4QfF|IN$i.@ )B4b^\;.
wFT5cY6D |+⩝ۓKݯU3iظH\L7#eT?jj5Rvv lAlzl!ӖW/.h+,МTSD'0EIcϳL5;[%NiیEj9]0'L({<<e +0:Θs"\ +$o
DbL[x4D/t\k)C?l d'5&IBoFD> +`m=) +&īcDsȣӀԍ
ׇ}]oQ^J4Pr1t amjEd\FHjt!v%Y=pȃ`-a< +y;_NF`6هFG1}Yv=CAUp61gtvL:昃6/75u'\ax/@[ti?>ZaG. +OŃ.,ɂQUH>-6$sv.V>xRGTh:Re!?x!L#ſ<YCM`넨tm@kѝ~ Jm+ + G +*2YvӋ+^.r53(N'x뙨 #w,4N'_#>>*, PM0%Ee}G\]͛4IXo3!K|$ڧ +RX6ǻ03@skOHVB#Za9A841~Z^gA3o)é<yۗqe$,WM@~88)mViM'V`V4{3mK^- +.wj*tMeNMI|͔}*'`|=xDϳ@OOikP9W1LR#GaE9i,~d + +%)Cf.AFew{hViZ'CM}﵃փ.[S:ٷY_3UY_/ݫ*4+,FIwoF٫|^危hr|MKz< +E({"|lp!2sIzeXΖGh:^Ieӽ$SLS`~nDHH+\22՟K> +<Sq_F3ls\hf)Nb>ewf)+R );ޏ]qZo4wPD8QrqۏEmSTgH0U\-Ďz0El +_A-CD*II }y̖V5|x=8*$I ,^m;Oy'I,3o`%ưr ЕMTiEN]
GMԍx* j+zʵÑ]BWw!9aELqԽti+7H +7.Baap\ZZdC6Zfz+PCwgо1cELamZw8!DG(ad=pRQ&V:֠Wdǜ)yL^є%]Vfڽ
QOgw<0 ,
M\+TE:.bю2}z*&[BCatj3L[Tm>g +a6Tw@H*cz,vdl0!Ѵc,CX}x)C*Ґgv2n(h 8zXU4r+tf>#.f2Tuݻ C2rol+0U
ghw5Z+ L-`3*wg(ܩѣUc g
> +AѴi4Unm1q,y5b)v]?(fgT O?1G"Ic2N{M@4n<!M[}`s +31& ^G]ua<*vNtTsC";0),7}#PH*%)2$)ū:*98yXh1Cr%ݫ̳O3,[tʉFeDzn[wŢ,ڰyQ)G^ܔݧ`ǴuZ}=8Uif5SSe6XAޡZTZu\+pILSm^Z]$̿m==Nͧ,մ*JJ0<HsAWrWYb r`D_t + &.^Bn3ڎUx +e;Sg䍝}&'C&{ǭY!RO|$%|H3bb9UkHyFor"q?`8S5MQn +@^$$y9>H[)P_ZhugҊ癔çq<&˨ܴacA1Rm +kfBީVHx-aDpJ(x4#p>;0(fa RIMw[~YPQlUB`5"]縵9m9"1^$e,gQs} MH!>PS>ΚىIһ=fېX;=߸o4 c<Y`B3:_^HPsFTPyndN`hfAݸA\$Pq +bXx֨\*KI5h2^O&+w1H:L0cYE(|m!SLZV2!Ic#qvD%x*X/_y˷ +EaȷAaa{u#̣!%X[1="{*w\iXs'8ǵ-!F5{
&0<Ѵ6hs@xt<c?Dt]T̽]{iy8U]I*UeyTgba`~d;48(/FQ%^'%4J^xUaW^ &rAA]JtSd̓z-Gǟ(c +$Ň){2r"^ڇ^33[Hm6MG"[́|.]SykZc|G>gŘ07n +ނKt4:,El|lFwb++暭[+WgnHe+ +ijP,iU'8eb7^(AT}n19<QcYqD_ZG9ב2E/{|˿} SD5!]/lw?8}Z@9ܸyEFTZuUaZhs va;XxbI#Pw)Mbl/_|ˎѺHycTcp=hB-H$Z#~3}t7cg&.|bH<n*ĤntlRm_jEؚ2Xru(ⶂ|?B6ӥBf˙dcn֕JxJEQ +嗽>oN!f)pK\Iyg{ԓBU#09L'&WgF$<bV0wbSjV'c-cw?ZDǑP^5vA!F΅V/-D2g2`z(`|/醣B +s+#N|zQ̀'9^p.}zJRLyOňӆt}.kzAe;r^@Gg}QuTfy +&xfǹ?IsR5$ss(?ޞNHهAaoRMFsv1^cèB#!>=U@~e?Q[/fQM/٠G\l}!U_Hk)+4$AZn%([/
ގK2 +ǢkIvoLitEǟeIl|>bSpBa*"Aтc +
22(Uq/K
r>g +36N9ϖmqr +|K{~B$CUUv)k. u!z7\L8)]:L,2e!"dBI +^\.gJ?|EG)뙳@j~Js^ ~~DӘD2~vȳ"a)Xݴ + fSSY{(nt5 auNb̀_֘!Cn#},Gú=30<dzKƉcl +b-rI,mL1#p[4ƅ'J% _]S]$Pn<*wVPN5"6ջĺAvU?LXEtCZ*rMCnv +
tyTko> !yX,ooWC"ΊAXAz|ln\p5V=iXjI!46fM
8?MHl +vEĄ9K)d;u +^n9._SI~*>2p0q# +99P8^; JiR)=h@HB pn{џnQDEVU)+)F-._j +ZsAo.,
5=Dg&RJ3B?؛T"^vƗV^y[ГP߂},G^܃3Da7OXʡMa}j_s%e
CWa˖,N.6
+RU+&j +!gđT[jcŽа[nVAkG\+Mrf|Ͼ|:,8V8@gu%mI2E&ٶsWkACޢ[FFByM`vʮ.C'B\Dqdc}0k_#x9S'({dn1}~(B
g\dk4EU}|ƔIz*1xhkD2{&#ך3pAc(0$iű{s,+C_Ґ%gzozܲ@'\^M[jq/_7{ub^I.VsXv~]vzWq>:ZocE째6^ƆB<Ӡ"E>70mՏ,0+]Rn{IEu#D Nh6_j7L=K)YhΧ2jFmt#?&xR,5x͌hHRq%z>b.3;F> g#eL|Qi~9g3q6X}fk*w]K.7s}Cu}Ecuu9H'êğ: /,%Vk.,lH[ +pC909h;-;13r$U& +W'Jۙ]3a)W? +mHvʱmcwRe
/wP3sM T +&NkG
M$EWwlCM9yۮFK +jNJ:#=RE%+ڝ̛(uϔ@;#xcIҦG~~l~V{0oLˤX +Q#%nD{¯>}Zc'7o$W4hQTm7D}_hA9Ue3Uj(q˚d +8`\Nn!yuܶk[1\6l_6¼\Ҹ,[.:#kź2hJ)7Ԝr4?VW./؆ +ՔBx%o_`.v{E"jeFAP4K&Ƽ\s4M~-RP`LSɃ:\-])c +i%?KmFxvM#mOt?RtłC%CSyHdǪ!wQOTb+Z,!3 +T +yjGԷ#4!]zI="zE@"H>lbvw48Q +Kb@!{E@<;+bUr[4"S`:v-bɧl2
51Duo#,yR +T1w\rcwH
&۹V=swS^!0f + +]qJ%t0G!m2U!@RTȞ!l3[AE>D @]O2!WI;Vt;
'((ۤBɼ'*!g$ÅsQi%u۟9H: a>|ci-6ܒGrlْk]irAOg C^fwWoKG8r=a/cеW + WEEtU8z_1子NNT:Gx_#<
PȷK3ùF /H@=_v< JXnyytEŠUj1n2{N+Q̙!e:3p.L1wE 6TV88e(,p[. ]硳uɇg]r$2mض -/a"]O?T +cU{(n +UQJ1]$tB D;],G's2vAԊDW3sS0~]\|Pm=T|[,pJz3A@5Kit@:QWc|(JC嗦ÀNv6VE=Gב8o +.w +\7Pk
F<(ܴaO* +oUZu-e<=W7_SEI
db1QE,skM2"xIK}JG{A-+aWapAσrk,)nBj p8jChЄ`_f04.ZAg/,y r*.${`0(.ۤ$*FAw%^SD3sPxȐ-̺)|ПzS!at&CsEfOTلB + NW(Tۑሪ;s̏96~kZzt[os8buv5XH+4 +KxlyJW
Qд-27=fd9o'cbڧWxuk\fIOtGK?SE%א p:Jua'=Q3K@{ +,vEJ-:JybuED_|ԢSu4B<_wL!/<{'}b[seo+} +.q_So.{ҁ:h.E7[ ^uCS̑U9=1w:)F[cb?._23;;poLÆv̋ϰR^
zZ=iS.gO\/H;n,zQy^nՃ)E-1V$ [?A"~USK +&53(y9a֓ j>
V ףy<1<HM}+G#|{7?eoUf/%{}ߠX6^3É2qn#*V͓49K@hbIGrLtzf &9X|#O럿z2kK:GET0*i1>35>Nn Rόu\ӶާqACt6rE:w*|LcE>=ᦂ|(ĈiP+l$ػc3Ne ոZ[qSp3c:Ch[{B&OkSE__,Ww +f&ޱ͒Š_Z`sE{HۇT,&: S!l2Lt䚟C_.ͮ7^nZ#Yk7Ȱ=RDbfk*|2Y0 +Cña"3e4I.SHQj!zcsgEat]FRf,:vkT!CV)z ߴI`8)MY_Im*R|m|PS8W5g
A
YŻ9ԺOf]OtFUZО|94$[cJ̡Ytmې%NJG0a7Ch@Hk~>QfJm`b\ױ9ɗ9 &C1Ίҗ@iE}3B XZ:
Q.3VQ[p7+V +2T]vrwEҪʨӺͶ>n>ДZ*FWWGuEO+{_UIAh_H0@@5y_\ɪpbJ8U0`Lk^W^zE4ijfH@x/D0%3ůX} :QIeHXg,00uomz7JutwQ$8MBK+ TpCZs8yyb7*nrRץ]}e~Q4zP1:tyK=~-\S˗#u +[V>N0LX&dI:q> +czN'}?x91`sܳߵER
y62"#ȹRѲ#:#* rT>
d̝C\ƍ۴@WUf_d1οZ [s퐅@Ʒ ^!O1uºZZ^@b<R<x)߀P(7'C)YQ 'ɊSW@P*< +- +B=g.uoҎX@xlwpPZK
gZ6ȝ w( +/,Βө6^:wGjo9χ4ЏafjK']0Cgb +b%5C +{B{>iG?M96n8N}Sט-P@-j4,HwKvU19zcGIN + S4= cB⬴Ũr-y*j~}}ހ]iGjyu~
\l[iչy&J.=uتY6M2 0iU1&@Y&O30% )I&P@APjӊfȉW<{y^;u*c` +chLvtSɛTBm;|Y"u9IS"2Shԣ *%``Ф6+ [k{NϢހI1u99,> %&nb"H=֨G4TP*F5r+8cԱHY5,z(t:fKVQA|(Ϳ0͂4wi!@cRޑ3>);V):'B =4 +_gqo~nXZ>+v[*.u!!2GC{ +DW +x&W;_fC&-[7b@?iA1rO%Cs0ɥ1HN$pg)sI`= +~1Іɘ&fŝ߬:¹jF(04?pJZbm
vK| +_ё_艽<1_-xQNx06Z\ +yX&51iFӸjs:x-41tw\ŭoPo<L'R`K:2>Cn'kt`Zmr->6lh+*l1t r(J +wɂz;vRvS5.*K:T1+냮K_vkΕ⩴ ZJXp5 +s&#$0d"<>-U=[|@d~EPzp1Q,ZT?fN0QmfG#`{߁Gy
$֥cDgs$HX,bWؐ5nj̔!`~?$1UpTxJƋ}G}$rG<.'Иr(GMЮBTԾ'_OU'˖,(.\"DJ(ISVqB?/1f__!$$ru1&& rs:RTl|78e)
,az3P:ߟjX1X98r|y 2%YZ=a{z#:"a7p>ר1rj_6Syp#Xp)RW +VMHAuשdڇJcQE]ea_Lg*tJ=ZXdy&SYSvg]KcUBEcw̔/2Hh0''jRfù&Xwɸ(zėǖ/+?[{ɸmsz?RYthy.s81i\_X&459>njfЕYx^XBc41ˬ{%(|N1*LŪW(|Mǐd-&m8z`zUug[$\{'Y=eZOP< +GIF{a
a[P+mDo^yIH +Ót.1)f?6$Ǻ48F@b=G2;b^͕c*Tmgl1k+-bh)Z,֭t2IM_ s+^ڋ}ebQ
Hsb_cwBWDM]z\NNүal +K*} +(nQ +(bE_QR~ v3X3^I>5bilxH>1E~ EO`ȫ0P%w|wq=c;5e)}_KeJG"z<x!DX(NK9J 0Gكez<lQG؊2w]đu".UvZj4 4jP1,|vӈEܵ +.U84z6 +^KM1z wHhJIbAmD:lxU=B$>^
svB ws +xlL#!e_eR;fC #AQ߿P3~<;tnADQaPX֚!=E F;ˊ=[VGͮK}3yO4t\BgxβH|.E4pPf.}3>V~+?5Y&qN3<ǒC7[$8(jd{iΥ`UZxHi1/}
MwIԽ
cQFp&ֹ8ndkJ|Cn"UYf5.x}B`ln3p_Q.Iސzɀg_ϝd}IXI(kJ>әڏLϡU
B4[I:
^}@ܺX'd:*$$2A0ȟt"CUX5;~'AٲhNn<qzE/(V]w?8#vͱ!*jt2c]C^]hyhAkfqi
ε͊88d4sWVBP8۳OvZwI644t q8~xqP08ǖniۇVZyGa"݅׀gP<<x
RBI|mlmxCϹÓjg\θyw)
ЕHvYBF_$]R+%FVun=^V=,|`E]&NS\&hó )-y4OxqEhe[m|aEV$G)ċQUpBdn-|SQ +4Xw/VU +&|@=,`:TbVJ1 +D +J_?zL(\'#2s0P?^wsA'm2ԘLı*>'UWhTྷ'S{U77$ + op "jfؠӭ WJlA]bgdw"rq69L/9w%;=J-b3F\-*AxU!֘QFi/39e[]Cۉͭ!r{WG8۾s0{D` + Z\<sK4KQ̌{_mLQc-*bֵ'v؇SYz5;dR 'd +4kQl'o:{Yd)7 +)E);1dF:kaix5,?{?#+ښIjOfFw:zίGoqȝ5ǻ +
v86Vt2 EPeWqtXNi.jɨEU
S]̕5wMHv'C1J7mSW.o1^G#\+U7ʧR>ǦRM29t;b8z+Nm0 + +Dz曘zZx_ {1]NDfq6sbjzV
@G]'D>QDxnDT<cxkAT6 +Evԓ= +3NJvQ +\]_LW:?Ӫ +Ts;#d8!4e|JyeFن1N?UyOkKw)ND0+yM; kSՑEDUZ;ܮFeWy
MDH3RCnIeq5? 5u^22kjvfa٠93mg}}jNfopN-`qWM12U9SA2f2 +ٵFLowaX +iVqAԡ'h)ی`x$ C,8_Od)Tq!"(2r*Y̢9f3BU@.5e|R*r#Wec^6]PS}#JVs?R R>UV´B]:Kz|8vRc@yZ{1P?H*w8̨Ѽn4|hf٘ 9\DJ|CPĿǼzSD|-8b(
?E'cp.R*TA*No.%d"4ǫHe+\2aϦz:Mh0j6{}$[@d-ZЏbE#B0uHd\_jL46pjZo|k[p@K9fGECrzeO<A-}{#\9bA@Ym3AyggYRHm]!R@z>J/LOƲLUdriǸ>4h\T|S# D]k6(~7T!Wu%ziv[X;qCi{r&n6-o|"*\@f?j'i:JҜ<J*A[A9LA\@ Mh]>mA +Zx7 +SL-uJ'p1^(Nv]/ +zrbe8m$6{"JWNqq&:0"{5ec&X3>ݎudP(űs霳`9)G +/L%%q&tۍRlyCQY|Zj
ϨVY-Nj,;܄W$ +U?n/l&g;NӦD-bI6)& p~_h^˟aeL[ ®)C8Kh^ dB/4Ǹ_Rdq=N|j<&efZ㾣x+ =ԅ.)Y]»{}&\6JI AlfU,&'IyZ {Yu>k?͑L3&pс=Pԓ4<ka0>Eg̑FS$eE=|P0SFAIj=4%gYeeW15?gW.|E" }' vmٙe V,oٮf6r?fr_x<WHFG
Y VjЭdHċ_gpMfE6HPx.g 7RPszٝm8ޚhOIt:Uha)i9.ծbUiU~%"CI9]S7=
#f+yA xcf,ȳfd"oqaGMk6+c; +9`]djٿ,ʓOwiȍ5 +ޢ]I{b#8 +OU'8+e i,@xj"t<0TÅ0m
,fm%g>{ +h~ g6fVۑ~ U,Ö-<mf=uN@Q;|ܸgCl@@B)/q>CzX5¼H!S7q#Rm@l
Yr/c1y#%#EX[ә߭jRO +m[aPsN*'yz
]v]Gv6sA:Tʺ};zQ=ycQ-^F#h@ȿU~X9Y9{AxguFiv1Gj=ѲԎlo:c c^zLydL]JޠCP,⬦3b36b> MYV}]$_R|1 +PY<@5,_8,53| +~"FٲT*Q+ueBٝY3m,{W;%X%1
LDqs;uUr/Lh trYG!<}(2zoFXpbz^'i8LGxhE(ƽSJť
~ GP3!S},6&YvQ:jt5!`b]{;*[cQY%Yz>4lISD|N'Qq_UL@I%lڎTu(X,K߾aO2ԍFdYad
Iogg
`pN{kW(EY^=]DQ,Ϛnj|{<2%\&}@Jp~=!a8BK/Ey#n +tQ݂y<
2YJWOG@ +wZ +2T
&Ol|(tOLT[yM[AJD52v{GW\K+Iܽ:yjgK>tY*qwgYyj3`=OcRSXڃ +w2KIb#Ui<MhK)b]GCP_ڕiH6ftUVr$757K3% ϠRmV)+ $.Met )hȷga9]73L-߉YkGy +%A{+HxaY7$CM,|WN^t"b:g"74^maij|66ZG<a;x|[?/B\KL +-8\F7Bf`cW#Rgc\Հ%ѹFdҙߍt_EM8a$ϬdhUQs+A?S*?ZW C?)mOz~e6*46ވ~͠tS3|l̺ϣn
<ڛҥngܙ +%_5hiT[NRR0JkI˔ZPzŌ]y$~2d}F'\,`NozX,uM$[aG7E4 +/#|SfbiK#]!d>%K)!|fbqAҠOuXz<
ly +¶7T5:7UK~鲳a,DG^}ӹG9/bYgzSero@OBg5*?0Ծ>ГH}"rWT҂ +J9 àrOwc& +` +&5uo$[G`
lY{Al +"7ddg
YI<"^)Dls,Z%c\_t\\I3lY4kMhLNj.aĽE}
8>N j`nT?]EE}Qfq-jouvNlӳdX @z1rUs\[b[Bt)VX;%§x^Azz?IDh,bQ8U2垼C{}ʈ_PΟ8n4;o璙egWNf╢h&ez퉿)-A\GGb]a#x'9!l*NDiyV\<f5\$;+;!(#b} )XbT̖UA{<]&k1i$8͇M1Mm&>*iYkx1u0lKj˽qYZ"SFumcSL~\#g[?aB}wWIQUPU=95?gqB/XQK~ق1˴'~
t_ϒZ#D#_y>L'-PJ>l?BAjH0&.2U(Αin)6?_B rry$df5үm憜5]A[ 0&ᤞF.^yDwzJ9Is!LZC#7vm +V(V?\t&Uոy.&kWڏlCxc]
;U<*K`2h*cSQ'[ľ@"&Y;jz<1(Ȩx}z7n0]>dAaMK9d8ZUؑ`Y:ܶ_hmeQ*nwk2 ЃBՐ#sУ:,cy~1"LmU?LdgtEjHtLoTd&~sJ)ws7vizz]o9p-$u]?$"->bfOA{ʠf5ûHRtZFB>+ӈn0VtkVdTȕ33aГmH.3/Qa_0klg{¥\ƭGT'|k4F)!dAG꣢=?#;;Rn8!02c=@?kDV>-9ba|SƙQͫeWYw̓pR!EK*N[1E*Αîi#$v_ik +-s:9=}DlJSRW +qU?iQxtݢ+ibiP)9Qd{pfw#GO/48Y90RŶ!NeRX +|Zw<b8@H +w0&?T{s=UPi|1tHkT*&F2+@3z53*6Kv'z')8q>P{$Y"Gsw(V@ٹ:@
.&Ԇ쟃S -v$$߈NfTGQZ%~c]d<6!%LBEV
%p#(}g +Mt$#3,938`O6r*@)yKKV4]z)Ҏi2ӄɼx3k;X
q.auf(2
c>}FI:$u$fB8Q,WG.DG<) +DRCr4+WXbu<g43`US=&
@MV7GaW}}=8@tZY+/m +U=Qs(iުlsV5F*B9 +0%EvybWԗ,$zgQ'جr*2<U-@0}A7R
) @y8~d)0Zux/pN< +O[BnQc?`k⾍ + + +)lKhN?'rn0T:6OLh5dXp+U|7_MOkѭZctЅE^V! +/ +n4kgu%%O/^3GQ]R{
4ޛIATLٻY1J`_;8<G7dvjDO
dO1zS]ZAwv[-(hA{Qjo2RD{Q)N7<HӲ7fޮiԂx.It/&<p
1 hc\aNO/.8Qpmj
=@XAXoDP;p&gxJ{bʿ +mINJ.'/gF7dj@K^ +eTOw>m +#2u_Hv)ą.wd/T-FoHX\"U}^GٳX4MEp`1vتi nEox8XNmA=X8}L|*G) +;#=5FTuDEopNavFp`_uzBRdx|lD.65CL'gmzmp 2os,CNsg쇍oH4W*pR k?.xj*ZOɻQqG>. ίPI0y%/'OmUtR>&yI$DiuK +w~)'qż;W.kַhVɴىGJTWiJI>QJ!.iAŅ{j`u$gkꟖ'`Tpb-V"<+{{-_bWK,k>p^8'amc#QB⍃(8~QA"&q(6V5#9G1Qz&%2߉mhSԑVbi?mb?ւXs"ǖ}㎑Pİ+e\h{F>6n|Ƀ{af;jע6ɐ^U|)g`O:嘼v?jōB)Աo{.)`Ļ`KCKGC~ +͠?(
ҍ>?u>y`CD:,|?|99}p\56b A0Hud@ݿz1Hx'M.4O8)EQZ.A`ߣ/7x[%Y*|/Ћ/ƏUҕrb{1.rЗyH14N&}Y8FvZ8yA8ωw+FBR
_\BX c7JWNjdHv!z'Kbw9}dɳV
+z
Ƀs>a>d7F҈ /JTDLDY#L7ն`mcxgv8A$$8/5蓭wt\%.H /.,z+֝;mUpH@lW>O]DnƼ^[H-vAFoj51d(E#ze4R + +\凓pf*5$x-Dd#gD>~G +fF-ʪqWȀ.s=fx~2xS<bA[FqYB6vq{74Ϙ?t~|mHT\Uh1N\7˞Gyhp/jk䤲2.Vt;NyE,Ƒ=!ӻ<okɭjNu 5# +
3F0>JŰ#DnID2n`80T
ՠz\/X>-:~e*,mʗ +iKk4f+xf}'-RM>eڼ;lM\$ +Crd-D-U5Ȕۖli&psYaHScox(~ pn="N;pΎ/iS'gy6^;&vI` +
NpI$Zmβb
f[?͜㽈zmFS3D,d,u͆
YE]jyU(``9O֎#s@jp.KhܾϵTz_DHNSD)'Ĺb^'FU8g]#ȳ4UVf:#Jr%{i4<d*4[JÓ5qiv'+TS#̋-BbԿbTQ\ + +VQs +appEh%jm;F\ ݡhrxM}XQb!31;v5Rʯ/ }۾~c=(+FyY?#T>Fen7]VyAST<rpH|ztƈ$q9cR4]c<1XѢ6yMx\ԑa81U6f666+'p>\' +(u#5I. @O;"0I gbT
=Jrޢ9Ô{'ŤspVJԤdJ +u3q4@/GR}=6sO%d"[ބ| IFYgb8wԯK|^m.ݦm*QHk`i#zs{O KlH +E~|b'Gg߈-#ԪZVc,/TڨO Cτ%kU
uY +ia'^Q˴z`8JBHH+va\x$fl8.d;o +\BG+^r\⛺;\`=~C6jhETY6O~LJ%Gu
> Ge[a<î&ZVϩXk]UIkn_Q!f7~<B]AALHEvU[҃?ya0``&]_u$8?re0c@f朑GhB
thLIXś>cx7Y~FL9lSMlcaNxǬKŵq?1&R4W#1L +/M'&(`pUjlQr;J^kMٹn0sfC0yT}AB$1[XlTfƩ]wZv",KСk=B֔,G]ci~' +kܦMg2BF105% t䨰{'Rm-f.9,i&pD;d: T3I&qud3p +G>}Two+ɰ)uv7>нhQ|f$DR`+ʣif /Vot +\{`s%{<(eI^:y{#28rw}L ބHWpb*I Ou>x|SxNU~"j"EoU10AAAJhi)Z.^39'Yo6ȏAN'c1'G~^E2pTd6Ԩ@%)r0g}LjBqFLE{xkI~kȋMn(@n2QbUJ>8 ҠeN6Qx'YZz&Xu+etTHqLFFpw; +-УOD:7!TDBvKwq:g2,N+9N¶-cgTY<Z:6_}BںK0mjVn
"黬ǚyzR߰(>sP;jSbԶ"*t2 J`iRwpۈª_p +E{NS'#pxܝNg"`+n5W-6[UKa"OުVתG +AQPh`^ ry{bQ}=r>tDaHgDC{c +fpV2QL:4%L8 +TvzNjxA?4V֬Ox +Š`+E7;7iW{qK.|>+·\k`I]`%^nEtBYYE/(B~)UPOwdGm>PG|o1rE]][G1J!PF*>#2KdyP aqu(E}ab=RXԬUl<-,OTwJMeYvH,KWsu'
6W]p0UQ8* +/;9ycnUEmBt |e&LXO'<MM' +/jBl D!FFaX+K^,M_I|NJ2%wRao5
ĬQkTwR}ҏp'Eԡ>IKHZKG<ЦoOe|4))w*D"tc[H;074i/;IйQXvq.btQ0$l]I&1UYCOGu +$ $ pO@7[ksNƅ^p8c/cQWpVÁRPDW Sڻ@5;^4'-7݁$Nˎ?>ΎP{0y4j۷za͖y`MXPei\ ,X#cS)i8Z7P̛uxT@w3L~Gbuշǡ]B2j5dr&=sĄdBUKԫ~zu +]-lތzmn]I3ڲMΥ%s[L*P-G'y~4}Ҫ^BT/\ZG%fOC !&M&|)ڇq
XnJ
G-:;tʼ |g1CWȭnP}p +nXqknArh蜏S^idl_8NMdYg)C5869+P;qͨp3F ڎ#~Tu# +O#4sYM3B{i_
L^cPPʚ9@b\ڴԣnDQʄLhr|ZVz·-P-7QLu!9MN/K<XɘK-w l_:
fk; +ܟ)C4570H?nNApPzf*^X-vSUMƢvNhIbuBX_IsXk
./PzeN0Ogp}&"2TwJ(QIA" CYH~kxT쑷jAA+̂j2/jT*
ʽIr٤^{xctZ5~2IޏOgԾgXOճ
@݀ݿx/!<U|Zw@y$ԡ$)}8gܖ{&)]z9YhwCL>"sD𩖛d4D;Pρm)aͣk4w4{u
k-U -?%8D1W(Fġ_3顧ZZ'uf?)Ax?}]fg[xQ#]2 s(jGḩ* Hlz%Wd] Na`HESO%
+7ᑉ3,eKtNXRG(Py=qA9bчѯI +kΆ+ȗͰ[L,cNX/ހ : +<8)-w0Wh
Q3 =)!>qE;ܔvM7Tu@k9#ʲXJA +Oq?ƘTpx>Z>D|ztw-yJz2:X?`oX'65ϖVΒ(e)}6u?S3+7Wk{0`1V)E\̈.czV$g)QW].wI #mVu-I1K&1?(;)E7R7
?*c&4< &w\\d'8֤SJPhso]q9ic&VDQ +at ǀMsm +|H$oWE]|E3L-?7j&sa:ZuP`1e4Є:Df@wSV5e +&ʰt]^||wVƮ?9f@:j#Vqm +KRKQE/dz&jxwCl%/R*tr]6 g\֮ +*qŴCXМ!K62&;#"Uj@38tfe_\P7`߀?R0MH>r?V4Kɕ"Nj=dV֠W2p&5̮ +x3kW?)cF>> +@ #31X/Z(Wɞ"Ycj#uu۲h&4Psu%>+9+P8;IޖP:8дgg#Du#V(p5!1֪eN.z¶bll2)SHPpŀM{
vvW2=g5 +co5_~ KYF#U2k\n +5^}D +`Qnq//"HyOzlՁОFPr&*z8g"[c8f"Y!r*qV5?He1^2;^/d:?[Rڟ0Oxc|vLKM; :8}{8qK +E dUZppVI`:) +-V{{A6h%F3,bo.+V9M +}:蕏ޒ1u>8X)$o\'j9#d(%'O{Y|-4UP1z~[*>UL/Зe.ϙ?
櫾w3@̷y<f]C4G+T*i$ZQg\lp7mjxOFk;L-mfhKT<oV8Ȯ +I7ix+AB{EW[7
-?^B uO[( +h
EBʹ +% ըd+>>z8i/8GWձmMV=B +Z|G-WGLŲ3oPc'9 0CA72MF篵瑚h)Er(2ڱL0I0d/#nӅ-jE=_;YJX˜b8,yFbr!ΰW6}l6!O2?BX/(* f5@XevE& +,Hr/:5$GzJ:%xsYt>x-*U4Z4!a|,1YkptΜ^eM
c-ړu +6XM>/9shvIZ2>ˊ_&~0|Rmȃl'_Q:[vhAE5cIL*m!"m;e@}T=ξ &p6TI !1⁄G!L;6E^NwMݽ RrDQdxϹc +%Pjӽ!_I3*[59FlFs*q>osՆ\i;%ukht!TN LVqx3ݸحĹ(-sxdMo(n +2M̸S8Rqͮ6~XN֟37nGݍTU@0ſE(f9:pRť{ޱmnK(%tTbN7<Nt]|+M%noA0e'qgE +؛dcUz[_VFS(/. +B-ݔ2pRRU]'{1?W1јlPk݄p.\VA6G+=~t_wҥ
=2p yGOo40axH]6ryI6fy - +eI;ZA_ڈP%R`o\sVQvEslW +fhK57r 1=)- +%N +fQjM.[fZ6 +^ABQKG\Huh֎P\A46v(fw-!o.HԸN7u-e">m<Z#LGa{rN܁T{D]?c:1 [nnS`nX.۶C`RW&7tqy'}kc~o~eX1kӥqBXK<J*!G/+dLҹ*gFxn\ +na#n4[:oWS'6ѐ+|Umz\6 +x`A +-gPWC`io`XyRۣ.twVNQݏc +RNN
R<:o8OkϮ/ԹG8Mp`,PDZÈ-y/W5 j+)e̯FWqWith#D/"*{Pй10g'@`j)2ҫ<Hf|?rC盍wAY[Y1*/4^*])>v,ևiO +wɏ^);"6zkgpDhèHD`6UG(1|HT>iXl9AC
IYXFV.1$7h,@V^OAJO8,oT/Nu_5{̜%1^V$dfV>NipjuBb'3E[*l Q1G]B0bE]}fXsNJ_y*O
h+56<@Oq(Yr2{{Õ?-hĿ@C +Np}&fiTts{y.'IQWz[lh<DJm=dp Lo̙c>m +) f)ѣ<)F-z($<Y)y6aHocߥgӠ'?J=tN)d#
I\JY߱ݔeyVpq|k;UGj ~+z!J +f0ݥ.p[e4 +z(+D+1oI>/BpiPx'Pٮ`Ga!ĮSGD>!`W`F`VХDd/nڒ$=*L}ʳ_*1eB[#g4Cb_4_,zV癵=-ؿ +X6Q&l)b}u[Φ8"-I.{&oO(W7Xתum~Y?7Ãzr#p-
30)u
_g`dx3?5~Iޅq:a7DeΜWy +x e*ɶ nκK)՝ Z9UM=d^Ôe;LFg9m֝} +LeVϺC/{)sp6~ +(SDnD<}<j+w0Jk+S$'_gP4kU%GaCSMQXFB*D>QvH;D~4W9KGwt-fe:+Kٱ;6m]gaU=|ad͍3%!C-b9nlcd4ꤠlR՛[4
; (L$TJbbMϿjK2C`̌@LJ̠'/\}@IP6->QZ9ūl>&ɃӲ":G&T\ݘbh<u/^{ϏI]QCy`diVnJSM<p2$Rɝ-T=,q-C.4S +à]2uRJZV$`^w<u6me<vkaW:_l;5N\5#h9!vTT$hg#,D]i +ŤA9
S?n^C3R/\ +ZQd1(S5=0w\r2}8, U-v4@b 3QNphÂ!뽏[%z\W4$
M+r[TK;9C"jA=_Sc7˗<P6{/ޓt+x,GR$Va":$bEJ/zKSP֛vG(E"d}1F`}fXzrX*VkrʏFp&tX椼JJ\뇾Sbϯ(PS O +l +[|*ЗL7gɡy +a~&_3{op",Z~$!ޗr굛*BFɈdn\l![ +`l5FA0@턻 +@(RH]*1|xb.j)G!`[nwDD[0z+zSZ+R5ubatl!s-_xi0K&|#KEtzEO:Tv~|i!C$!&DIGmf$Tu2MfHۀ#x<U,֨?F k9DM4.ae6orGGx7rų64*8j|(ZG>OdQDGStKZsP]9/,$,8ՊMzAe{N)Gn̷ƛ1xi1GG#l\Kf]F
Gtn(tc`2[p/Hضʓ@h[&!Vsd"OfU?br + +,o*g_%Gi`-P2ݔ#aOIK^廈ͼa8^f+3j]Dher[%v7Ѝ':L9ż=TkhFUVMsܡvI=;_F*Q{J+8?p@~Z/u;0*|0jâa*]YsZ?D;_x1es<ӑ֜һX+Z^*ci57MO]gl {vqsȺh \hz7`Ŗ=T22F@2f|4VѐډtH2<K/zW|L^R_Tu#ց0CB W ˋ.T^b_O +@XDR|_qt5(W鈦5ݳ:wKN-ND^&q>qp
B9[+%y:40_T*Cu40{Jf[z|pS8{qv
1
4&#?FMYաl"EටyN~-Ab
Kk'hlR/]N-Rr6$rSM'?:Op7IR_UmXrSj9QhCH~C7.2pi87 ^"=Xy;Y +pXiBq
֢\?8[9[cԷWUKuaKf&\W +]]/%[*I +"BA7P +BKrc8q2ڎi`X)9܆+HقF:L%w5TNY4EkAfek ;E) x3F#Da_zʎ0
3ߟZ"Z_C`>5< +5i>&/BLl];x%+?"k-tj:dg" +l$]FCqAfWP硙zwKfcvc5
u$fQI:e;90Qr: R[l3蕞@\ e$:hT? tt0,z(5rF
Y@T%%
lxAn^X`NovgE{zv;=]]g8k-l6HJ5x6p>:L5~{qsp[6kZ=Dr`(`ӴG8M7hL)1:** PChnWo\KR +?#fy{;<MSI4Gz $ +@R.(q{'90:ե0 +s]alQ7Q^'<=>KR+n4IȢ6P*2b-$u2ML4`raY:2,5!vP'C/2_}_pV@mP;H=[cq5ɳH[9H̾גR٘ȸ<u~(V pWQ|/n70岚n8PwμB~*XzUD 4ρikԀi)ۮ,36l2X:+rX\V + +l8⭤ŷM`+.Q4TqφB +|BO֬p5y{^ġE ` >g4;o[!Ȳ8p6GIjayܦҷ +Bv9=r)9U,a[Eҥ1r5"O{BHB}I_
{^*
85VQ1ȭq}α֩zjM-^ c)$81 +ԑCx֍|lJqdD@ksm,A=zIVIOPMcZ»[]S +뛂n(Qy4duݴm&5[6MW0^KfcΨxLii`.TyI:]hYx*7n`$&"o3ȼ_U6 +9W͎
\i{̛&m\+_.?/.X^?jzpz҆mnknr_|Hסԥ}̊r4j}vz|'$:FPCtӕ4anl^X
n;?&(})(W)92|-#7r&EקW`1ձlْtB5{D Γ3Z yzED<t~gY>ngnhK.t1&ÂBqy7q\UX6xoja
DuCP?2k/X
N19Ru) +%"}[L7Nש6髠JƁEoU>h;pgW90ЍL j[yP`0B0n|1,ki0u': SN|Ed<N>J'nVSVӐM +y +`ŝ߯*utH +E#$b jҤh둊?3cY$_Hx.PZQN[j6*N-t߄m(aVEHm +wX7kϽhFӻ<P7$ܳ "KO])10T$. p*)y|L]6kdfǪcr +m!}e-jit`'ڢڛlHd0RZ8 +x)gȨʪYTõ_g !IښVw{hp(8&p =Zj6A0d6K~%gAL +C):4FFqCX.TA=5f&n&y\AwyJ|EW߲AAnQϏ*4
/lf +:a Ei[ZC7/\@l=vHi*mGo8/]V_BXmgCp&Sߣt"CL
]'G:/B.vKz4yHl+Hi\kU%emXz1G_`KV!._ĢX@QRG>;fMi!$m#-CoyOnRJ[N9+llsVWg;Cظ 73Y^ <s*:x{OĽ-QU}c,>1Jɺ³T5=8QapU7ӏᡘғD% FYRe5
VUa Rdu6*wF#]2ωT=nj#yʛ'R:-t4uch/-S/OC=D638qՖYt(
fK/0#_1`$)H8uBvxNBeB
II>eMB$Kenf:G*;`E͒+4Omjo6X@ru(Ⱥcz7VM֡[ovB|]gxq ߒ +MX%W~VW|rdcB]Xj-T`.N +-e]zBu!*Oݐs4w@QU +D>ËcV/=^g}d
ǟtD,iU_;"/hۺ}TO
ghnƋޙ/eߎ"62l.@`a.&wbW:DqاI$
M^)BMrC' Qخ)U}Ō{Ni; UQĆXʴ+SqV>qmб
MSbIUqR3.ŀvd'WbjH<H';'˴R&>UZ ߷rA#%OrY0OR!Yĝ5p4Ke{+CL0`ۗejrvybkuCCs8(4T!1{G^jiBR +"\c
;AJ쬟;SAގ %wVGiVgU50ӂ6Tܗm¾"RDRb_]7>dܘb~ow'
҆Q+}I4mU6|k1M+^Fjb=BSenB*X`!eI2A`V
I$o[znzMɌ8ĩٞ*صA SI)VA + IXo<,7vl葼 ٬TyԵ"<V͞#9lT.B +1qk_dn|1h,{Ի%G9<IqƘ?xmKƀ[Lbw$%K`$Ge ܊QE}!lEIg@y~%ÏDV7Oȥ}ZV՛:~ +54Oْ.&yX3 '<bN
:L1tX^/Kկ;vB1r;7 +úi%t:ꧺLa3q9YC\:}!0rʈ^5""z"E/h*j.bX,.Ñݜzo(wD0xOUƮBZ*+M7O߃Ú1v$B8LL +CeƼA}W@u/_;55+*2Ǯ{E6^ܟ) oO=Z`HЖKoA=S7dvpR)h,hɱEF~SQjsm +)%EnfbXT+o!lsͤlgI9Qp
Jwp)M|=a +@6; +."^(b
0Q^
oc_/XS} \eD9.dh%{[sT/ PL|}]0/YGt?gZ
."{4_(sR +Q݁I'{?Xl[?V ,[)5GczTEdN>HnGsI}yhHn-}^pRYFق1(3Q|橕)"QE#xp}M +MfƐr<E$ +w,f+G|:V}~'T v
zZHg9yc2%JEQ[SS`]ʮ"`Mv"dX]d5_x]E+ 'Jў:(qIq`7Dñon[# J6)`^$;C5iJx]L(_W,Zdyj.&ox1b8s<^x:yt0><E4%g06tTfٕ@`%GS媎ktY)
⊬ cIô#>,UŶ[A8s>IMfMOŚX,}QQn߁9VjX
2$An|ևQ*N[ +J3Ƶ0ފ=߮[oQEE[8H#$*fpG"X4pZ%g̽sΧi +rBUf:֑-PNg9x9)ѱƺҷفlpRQ7^e2-|a뺃 +pJN?od٫)7h&;\&NVY G]߹y2%}ҿq;EHEvܿ<_Zپo8d%dD Jal6's^e8nR50]) +$f\W$:ƵmjBpAR*=²1_ԗgD&֦Sƕ"TL;ʻCEMQlR֮ܐL&]G>& G
c/:)r$3,tlu>ꩀ>Mm?Q5 +Uf!}"ua4YzzdiJ՛'CR@[w5
i~iXEJ0@DSNp?kt<^]!oMڲ#'a_KVin'$tݖJz%i?"1lA'"9L셈k+ +;ZCajmv#SoGgS[{!ݜ$=4C96q/GIYYAܗJ
5kx'*=eib[:Rѻ]'G"λ6BiO]3+9f1M)Jp_ѻЎ&L|xS<8C*W<kǂWKk`eԫJd' 1ia.Žkns9G'x٤{ȉ*9;]ي"]y#0\{Qc@NV+[?oLtFPpbb|+d͈;7BXZPeުLv&5P161Jm>$PWu +q.pVbm5wԢ@v|ӄ,f!9<̲^cm{[őw%VeD20¨49.U4͝b9mTwMyu;g\ w!v3J{ޤSVq쥽m
E]7 ~ێPX2:'?hRY=!FH +-bEIB2K-U^Eոį_']5Z#BϦnoPbE|B&9$-k]V6XcЄ +(Zs~P`o>rtԙumJTē\=>U`OBNk$Ph2鋪L2-ʫwr/'Qz#{ZdZw +Hu雥i
> _?Q˰"
r~qE V]7{Kky1AYyo7Z9;0Lzw%Cn^NZތDJMY&h%\4OkO3M^uV" +bLt}2B@Kt!1ʴ<L:S"12 +S<E"?FKiYRUF=]79R:zTo$#ՈQakؐ^2̮S@AJlAZ+_ |@Uusj}B|/&c-'$[|'՞
I|{ދF6$[X#h&FbrgXtJTa<B>m-IG0;R4tZ?4拕1"SAEw><;wle +0 vPl~9H$8ΏxCN`0;S-U2(o +蔶Cau +!"I[\,X}G@Q $ӵrád]kڒ
Y&c-54<w-cK(Zz<V̈́OSn9KvRKOCcWt5Dzɯk6Lx""j>-q b(1=;~!ڵA̜x1E7 +$AHoorh=
+ؠ2^-L0U+Ģ<Pf.U3eMDQm++wӎj>12 +vJ$[mNCf==h st@KgV_EVhT`" 5*BWd`^[!ޣ~FJpwآ$tc<a%4qe_4}o}ZOf+8~saBr:eY7iB\o;hOUߡmV.XKvcf|D{8s虱5E麰~]Z1fxj&s5%<&騺X{X3o0>x9?[?ۓ(pc9lhx}Ubјan_#|Ңm3yq!+*ߟ9D'Ћ2=EI/J'#Z(!Zԗ!}dWL7ߤo*UjԃGBmUaj-/.Krls;, IPA +sU%\w+Ӵ_ +,ݞ8U%vGoț yxƹ'^)TЗFmf{T3uR2֩Angݬpj=z%-و}klfnV|]ϳkY(O$gقFHА
yjN)ryL +Rl3$\'1r@O)Qve,E:_o`75(%lpD3w<^9"zŬP7V4ʅ6o)#:O]/7`k8H3vNWxɭ<!X:Wl}^[Hv2lhhq;?=E}6n3ԛrH,2^/{dg8A'KcJiqw(?>߬qQVQ(/z C]ZpϲEaxh'A#Q +=ĔXg{Z@M_9Msp3{.mW
>o +'ʉ'ׄ` + Mo'-H%L*UՁ/8@\ S6f['Fxg8B,4_0KN:L/ +R.6hV:x9Epb_lLib0)RAhwrYKw0rC4.vJiKÑ_N=㯕tnIUJHR6 ^~e(j(
ffŀP?E`<BѰ+$[b;Lbz:m$HQy|r$FA&b:#RF˻D
$;`o>lwBO' ,IJ2@3yw%/ЯD#czjtMݰӗ
DfɃI2^ƚf)`TO\L;:kذmf(x`?*(sQ&/;yLA\lrW[
oc'L:PӕCpZᾆG)5VЕEףٞaM.MѫՈgk{O94A9sٚ%F咮n"Ẽ*y;Ŵw[119]O:o0pVIRb6/8[\"@MxzD#Ҕ+-ǻ8 Yzй/y/ +<6G +?rEPrxQ1IɪQɰa }l(k.8(erɳDOLMg2>M|D{1!>d{u"ShZW2@#&w빛R7mXAjwB:[Tp8d/LPzbK%`w3 +Yyڐ(cf3ŭ_>:hs
ev;(ﵻo<Gۡ +&x*˘wa +Nj;#CmۡޮhT>nB19w2x\ +q=BU<~0YPz9x`!G̰S
Poarrξ<Q"4I=cou,30͉>Ht[e1 +)WX1N$*DGW ++vA-R'48V`dR+
U:kCnX!a7u+3Ӈ4&.h8Pl. +2 +4va)ir|o+s;\k9[sڀ +>S.Q!; +ຠs)7Ƥ 9L%Q +:|sAcԫa _hjk7[]8 +Wv@rM9E4![J4i\ϸ:tP@OYJ|Zˣ*]DWbUp;gfD{>ZJJ$+}eVpia +av'C5ZN[# <h#NoDɵmɫ
n`jFs|s'|+uWH'YPTH`GifQ2ܔt&9ue/xN%H7xWZ.*pUOqF٬+P{0xƍ-ʠy- i:S<vO~8~#
6+lh68x;T%ڙެj{ ݶˋ<ΖJqf'y2^s',O1Bs7t>"BX۵W@rg'2KZ3hα& +y\nAR}c=6 +`T?=#2ɸ8tvǓ/qSfϞ;'iFȕiDj@'z/,$xU
EZ6 wf)Lr8Y9mKBX9IbA)9o4 +*J}Sd ïWiE1YΑaV&G + +* +Cy{(:5L-}PUɓl귑GA}Jx&(9tDb|=Jbrbb.uΤʛ076'k CtK縢_QwVۦLhr7-|`f5 +HDTzt=PWdr3"Q
p:yj{$Z~b}C'@:Ljoc8.f0[fW8I5H8͐_صw1 Y)Ptֆfё+_U$)^w4/k1P4ye ]bS{ c3'CrIJr[R +TrМ)M[IHFLKm +̏~%&v'iY$h0L?GaPe>=6!9s<%$T_sgm`B#@5_@eB>i;!v9zl(A9\,\[% +6?Q{2Dbb17a9%kix(f;Ú6nU8ҋa1__#l1(m8܍!Co5y_0U_)1$g5utQ;T}G"!ДHg[{.}S:BIU}wTV?yD{`[6Kj9m1m}';_3L=y0!t6f;KmZZb<b -|#qI5\t͉b,s`\nXv@6f4E +$J`.©iV; +9x7
[臶kfiE +'|\=}bS!=,nj#ҥ UŧlLVx%!`IK`kߤ%_}Ġ^'4=Y<Y`t`Y'Qi{cֺc2 50m5jC'G8.ǹ`UĘb'S+ᖭxOv=
LT>`53qdnLps
j1 [n s,"/4Ο$glՒܭu"ՉV)fͫr<ٗ +J596|W
$$IVvuzClB˷$^lNN)|W*÷Pb#S;E2̌_:FMo)_ +Ocx:GV;:T9jj"m|gܿfF1Ö*#˵r77j8ry 5웖gd_lIo8 ++LK6_JhGk#Ӱ](d`HGj#ǯd6}D$ҩpdu=<džt<"oc)bX7~JA\b8Ē.Z$["\ z["nJ$T*++'
BG#ĶZdE!4
cH"7xWkns,XxX8X.įF`g2}xή.{[h-2ۤϸ)8Uk.RȀBj 3֒\y`U ;+MCTHwLSǹi˜^ZչI3pʙnDElŽJh1V^f3lBo/ɇ9s8z#]^X|z)+K3O>$Wt=S]51jW^Mr#y@ ;6{nڇп%dsAPQd"us:v*$0QAptTi&]I%pC?l9~pJ(_m: +g}B-b c=zs![mwi1D-RNo~KG`8)fryz?ݱiU!N- izk˂jYa+ZjJ,`u>HO?.g.\<ivjϘsF6< +ݨ| X'6
kT{?c=ZDxէ|4%KeN +F+h6^GVSscmϭ +r6;5anYS ?wtn" o0EkK©A0VcŅ._o
F^M\~D-2Ҹ [)BKp+s>4w OO[ɰ0XFfcNAfqDi5бcK}WB.4#ӟ0>\P2>\}vЊo7^| +(Uv
Lzdo!Z)b*4U`jՅM"I̖u/lm3%Ew_`d
d5nvyIRy\$-kvvN''ÁY>B)3JO$wW9?+x zaA: +
Id D/Y +3R1xv?i˘LتapKWtˏ|+6//'7j:LcpՑlj39pgUmfalr$a˫h+*s#*)V`v)bhj,rsKؓxޘƷ,IS`RT~]
+A +G˱lT+ +qH+m(
^,Wǯ4-\>ń4] V,ta~,} aqn5"lTccb+&ccY?|Փ)b"Ct\ :̈́wsS&w!v캹՞MZ(t-}*A=caMÐݕOȭ|ٳ SYlEdnZeYQa9o1 +lB6LأW:7 &'Ѵp&FV/cf[TZA_> :?^Cܼ@yWbx +/Jn}Z*\i~ir$`?!.Dq7l}IEK'0&e9T7,oV<0lrg;9fu@0k* +-|wePu"(79uT_x0 +J䜥{?:%Kht]/n$@ALlwR;33Hx1,B0H["!pF +Lzd|ٱۏ22qo +~/Nc1]AYML"@SxhLQ!B_,n!iVe6Lz%2ZC"pX.yMs ĚWDKC41~@,(C4ܮE?7@}Myϯ612exUBf{/63}e0ZP>ʐECA^!6";|i*Bo-Rعs._( 쫢iy>BbӇ3Ҭ腎rZMkF}Q a# @~#62 |hh5C0BmQF%qQb8IEhUs6Y:sUtCG#BħZ&q*R[X@Ss(S<}0ڒ!Q[ ]#+&=]sv!4?
߿YRSi/k=)tڷ:M`trs'
ᇬ(Fh˰wKWgX%vES)PKaCJnXavN6F?J4Fԑ6*sP_(e_oπMm7}P,cJF_C\IP#Y i<(F+Cx +@$$Q{/Sp!,Jׅcu{8ܜrbIZ:?X2eXf~oB~PWJ%9pOvWhj):͛%ѾD45zRnW3l)"QXoyew /QlF$]bUԙ+Ch]+^- ;` v+u䦐ȘUbwܲ/k-KB([Zc;8Y{p3 +Aˋ,_>İ/B|rޗnnJ\u +G8g{&ܥRKx272Z7%sߠMuhWB˽<P%tK0nmEt叱)?@?~0T`V`u&k̜Uv;J{Eݔu_bye^U^
.0+'=nU'{(cJ0#+9t-Ge"S8fR|mgbM4M56{bͨ33U +a):m7_ =cx7fdb΅rup$[ce4^is/bzP) " (/2<Rri,/!']I*/O&\;RtəN/ׁ*x
GwXx$s7yfe6jM@ykH"tyS;t'8ox靐YU c`]#h,\u^PTh#9R>GD|uy<*_c
-p W0"*!&HyNb)FZ+uOZOsSM͑!)smz9sFQD;-V4&ޛAkq$05^PcJ#`C%GOFPnAx[JilW`\;^\ef*Q DC<jĖKIJJusH.*|dIek<3?8lX~¦F*gɜYHos;~c3*Q6VGbmaFL_blq='Tf/SMלRE;2+XGz4[=WD}H}PUɓlRBxK\R̈́{9%8gX|IWDD3n@]YڅҷJq+& )(N6 s)WS;B+`3MA|t_kKArMZtpY{f7} K0>An'hOW ru )CEg$}e;w)"TC?ÛԻTq4vsΉWOb\NnbKPRvַj0Yzy%8J1+1:;_G'ahjz7|_o&ڽʃs +|Ӝ+̐YEZM;cʰgሺuセқc0ios[0<qݘr
1x؋(9u, PGﺻyGo_mIʂe,r. +dtפڊ~phԑxWkxw_.(V5[\A87Gb~? +CWTYE3W6+0XyD)y+5\@Fbt@>+3>#()E~w`I&l¬-{z/g8SME@)@ +-\f|ha +'膄
чOoސED$Cd)YI'&c E +}ѡzgT5jv%6y6;⡪yrOj X;"?qFl0ȁ<>DA,-C6t\̲zJT!yοRnon.| +A[l"eYqP
1b!'zaQ_6N?K$^H)Ko-&E_7nix8TZGPC ?ϫݍkc)>3Ϡ!`]I7I%PRZNi?NxףyZ7>sV=Ce}@Ke(+.YN](*co^gb#XAjQ/2wc/WS,5
1w$6t@C`ꇭML5ʻ <)@rE:/ՀHe=sEL[E{bJQδ?#`Uwy"w@7NhgPzV['m@2u|oGA +<學JQDS-Ӏa1ݑ%a|^/<8t1f.T9M{yoQ|pK|?]]Lup1O|UZG2|ꂴE?s
OSL0\hJA"22x#-Us`te_l#{$̀VG$1M"%?ͪ9~5CR_9ULxȖHP74NYĵե5H*̖PEjjDVs`[fv4[5w7yxJ|\Q)J.ձ.ו)KzClUhq5{Ǻra/e+ee:|>בf"rk|XʼnLtCS~SC +QcW${0[qͱچ_8;
ii
Qu37hv ݯHEE˃E~ +)kAx,n@hШpUzIgb4ٳ +9o=DSDu!ƓRWn[X`=BR{ +eTAcHx,%gF +\υvTNj.om' wS?2VX5⋑2xwp"9G|KO#4Pbr=T| +@Z' +TtRc8#W#o.7Kߒ eQ/L +N {q0}?3O~[#aS2zClZj+;S=]×X# #9:9i`s1?ĺ&O;S܀љxnCA}]xz +9ΕKpLwZc)0xS>#q/4C%M.XQz$9"4ógG#װ H~W;Vͤ(dw6h{Ugr^ř~/*?{kyZle?hɇMnٌaߥ7FdR; 4/U@6jc#۹XuXˈ&q +8oʋw8=DR2&v9VR_i7ܾƖO<5F;%lT{(߸}U +ndn*{dpNY!REמe}x2Ib=w{:
tF<~O-{dB[.~Xް7@eP=ijRlzW}ItV*^N[ `&8ɈԹV2jNu_Ǘk_;+aUU(<'UrΗꐺr)E"eU2hszOuiXt3OzWh3d nn襉:."dr:%fNQ1G
y_F_T%4{Q+="済drgnXz?v&p/ B҉TȧCckj|R;J3$,X$Yd~@]SO^i)ܾx|t}~
E;'-/x^7㙪J@|z=:ֲ0Iʹv\<KS=3tD=SH6 +8v|p spۋV+Up+{Gkɖ7h?C=UŊo|Վ/uH>k @XӞB%εWeIzn=/ukZ+%F˩K%1}o"z9S$,A%mdjy6m-L% +n +P<|e1)ʓ hrKwEmp~0z5 PfΨCԉB4gzZzIE#e&BX#66:0\zF'3 t$u/P"8JCJq![[XM$#&T:6MF['Etj:2ѓ)ZשD4qFƍ'sI,I:Aw0a
$jk,8Mqҿ 0Ub\]Sej';G|Jg[1Lܰ +~ͮ + |ΆWbodGgpfVj+OJTb<sB"Cػu{bz簲g@\RJZ`HQ`yF*#5v56c2L|[F)WC7oyN*6"~hV7iuF#(ahh$aZ_D g"bURm@ E w՚[l:dBanC`ћЩhb]J˚|?eU +LħWd[;k
^,Uh9|0Y¬_V#$|8!EAKw7ڣb+5y?د20o6h1P`_z}nu#>N5W]RZ^AM(GzV9)}GXF
]ϐ.toVTH1A1o6+P$w#,y,RH2Vuò)N*,+BD[WmPpQ9[fIlplRKkc%\gI[h^[x TnvKtw)L`'2L@li>XZ?bQ|$r;\X?+0J<tR]mxD|)#@BP2@UmfV+dc=^ͧ&YV2~[Ӧ!(}N9f/&.29f~
,DwܝVX컟D_ڭgLP.A"(<ұ + -8&:-|Y@L.]y!E3=5aKMV`ϸ;!Eҙ
ϖ$2yC{gæ< ~p@2.xX@23"5L%
oY4b7M;9t\<_eŃY)Y}4}>w_r{*»M9Tۼ"dxz^$|y̬ѪLbe^vpi{ΣLO/7[c̽V+V'pV% U'|drC-4͇Qŧ + +i +=7.;>wa{x#JR2
3d2\ 0Q +$^3h]>ڒ aZ:M
3(LTd%If?Il(/%R2A'Ҵ^*t&1Pb)8ZR2I1{,34ZX +"M^Md:W@DE\p]Ћ/l7,_`O:RtgaaY?@vښ2i +HƧ͆Əz_&6 !@yNv +^y\Pv^&UAaD+OX,Zqsʵ2b۫+ίIkɢOl>x+&g@qJPwC7uHhfObMI,5>!ǰL"]qRE=LxP'pA#5'M< uc75-jHE5̪ks
XD^I<*?A1p<`GIl/VTD#ڄ%KVo\BJg0DbxcfM4iu ,R[G`VL!ZjW:3V0T3`~)t0%",hadۓVcVgp]{QW;6!oukͩŒ}3[;rG0t>jO*jMڪWBu[)WMr/t^Z>]ez)62ht)"b{e]oTznoNzRjPt2Lpb?Ry.j|/sڞo^^ufj: p +s(u}8i@YD3n>LbshB'R^pKE܌3E,I>*'!4'K^&{K1:Qynǭt^MLE~{O3nz`>Kri0u%kc=,x}LRZOn[{MJ qhObAV'O魘.瘬<5\bJ=NA!U6^M^$Wf*wˎhKGe;;:&T_q=Γ=yA}4VZ(*qPpnjz64Vx#!=}g/E
mB^ʠnu.y8JEN +m:G +&-Φ^ge*~7a@ml`U,_vT(
o@S0`k5I5h8xgi>z1[PtctkK0tfl;rl>FuM]ooÝ HRD$:tQMƁ.#O ed/ +n,4 kP7!Ř`7Sfs/*7nD3/0'Eү֬-ݩ6.ᷠd[5e|ccLqhRfFZ@Kz;r5U}!ĈȷSh,$<;-Do08bxRon +V{CIcb<Pvn!+"*kU$w +S$+Ge$XTH7K"D!$Ciq??BrO5ѐ<( Pu9AHrv^~c|wmQj̸~aӉvc +pYʦ%ֿFF2؞WFC0JkW'bO&J=cUqO/J^YD=رq'fg.G6y8DB_;k/|+]"Tw/4}sԶ7)ukg
gRyլ%{Bc&25tCЊJV؛ײ=_ݪ_P^Xxi0 +oQ{NF8d'Em7+/`z*芮%t%fdEzݡAz=-u%iH_֎U1An +J#B1 i GU v!@ـdH*AbVE| +)݊FǷc3 +x悜\W0#LhG<~H,V9xd~:/Pʉ)/InK~^ f0n5 +fFY~͌¾x>n`ok ]HϢc<?7Z,)ؘgB=|͐4YBۢ>Ii)g'7aO +SMYWf"غ
($3.|1wGۄ՜ +m~,H+BS'WtTOPԝ۾qrOR4qLZ`÷qZ',̃KGk@'3JtK
p4%ﮞJe7vJ!FC +CfVs_+$PU?'*/T +M:NW/k#K@svEKMcTijb`
JV0KRi;F̞ +` aʌ8;֥&@ҹk*lpjQu<Ig{G4C/+1[a$K]+ػjixn5u#I-N$%h?YQ/wp>]j
ouT)gˌba};FLqS@@Hi .t۞Ѝ +Qn01^GxlwK*aKeooy_Ȥ5_fʨغ +;#MƮ+o2QeMfǫ^Mũ8)Q7\>{SX9֚_VKV*IjkV!C,eG/S9dh:U5tlZrHD}Tr=b;~GOޜjU-yLkU8PQ0Y"o + }f*Y=uTC1_G0*ݺLd<2\,j]Xۃzb
K;+9`1$CJ8ůj%U75FH}]at1/x,#$s8Q/ɴ a7|rUjxZG.$ +.u./a~9?9aG!pV)In1"+dI\>[Uy,YyPqEtPX^ŀjz
}Yp5 9 +99ĭYJS[ӗz"NocUǻKP܉*+1T1O]}Z2u: +gCqYz_T4\Ej' W6fewMvքF?2NU +T}u$تjwz[?/q$F.fSDŽ$\mzKF5.45hs} +ܺ&9yA,D2;ܥ.jY?VI܅q(1ZĭtI lqN, gK
?ua1рZ% +zwPM=/Q*P6HP=Y[uPs9aZ{,D7)P
O $4%uNlFY}_,D_o%Z5{pk+nhW>LgJ1c}F<@i#MMTQXˆSdRoRcsO+'F!fy"wъ=]la<AW'\zF?thQFB[2(I0W:fo:^Ґ'^67F$A@(.v~dp*$eFGvT6+%21asI5/RSqHJ߬ +4 +Ѧj֞!0e觃߰Kdd)ٙa.?l$+}3#d5f0ںN +6E0]9<d(+54 +
SlZ@fABRxSM4rMjfe2ho%5&@q/)-:WYmN"W$ شo+tz"*_R++T>5S)iq;Ofi5oqq3ҐUUAhB5v.kgEO}۔1D~0!w8*MzЩYK^mG;=i|?8_E#:pT,Coorsl-R:\mnzÏoP +jSP?~xgssqMw($>P =.WT$%=ൊF}txlJzm`nYcɷ[c=! TuzLuIo9r99rfe73L~}Z-i㉯rzCӣxɪ~vǀ8uo$ƐD$6EӵՖ*EcGw@nR5Z*8Gیngg|,L{7,e[1NoF-/6z:VU>ַ`x}W;-~l.&a=u8Dr9Zdgw%p=4~-]Rn
7xB6m܂9 9tjPXw숰wҰ+T\k=k>;>Ok2
s1c0>sv7U`G{:dKЯ&x̉[Nqr'尕^BU"̏ð.LC XgJN|=,9
p{9.)"Dg؋`,LාQx$\ +F֔][ϩyE$=Qir +zT2+9 +6HJtt$T@䗫K@BlN +Cq'OM+q/p:Ojr!.YnuS9InպC
6aLDWY8"Sm NS\m?$ӯbAro +yz1ͬڥ +ACjp~%;0Ygg2;aKF,^O9UԓhE= a\MJ3("RAm~7lJyT<H/K!>a5'douIMϦx+^8]B0d+W)7ܹ:PL}ot[X.|JL5>˥ejI@7bQ>hLG/261ۗжC&VeJ'ױ7r y{\:$<&$MbN4@uD#=&h {(_N-xt M)ɤY2ݱ=cǬPpub*w +ց۵27gdfNdWrmtN-_i{";:>`jpCsۖA|JW~q4گ80>{mv +";Jk+Գ@}ihh>%4!2G0y7^=N0dВѼͿn38bϫGwd&,|zwva?Sz>X x+T!ﵡR*i}gJैI^h*芗=43j>伣<nY m/F2IhIi{dQE= +#9nȼz" +EC$ˣnap2ع#Bn,]ņ邇jqk5k6 +iZrdU^<Dz%Mى.Z6=s-fH)h[%zx}[N)>k({暣0B}`aݸZsJIzz +]CN +^UM0Ks +q*wu[㫙gi%r_O:0n% BnqGjo
@\UI7qVR̺31Iȃ=*O~gډ?_&".,HNa4sa?$IU;un!0&ӃȢ̍葓Uj~㴒gx7[R0u9
`tV=9bU@NR0wF@,+[4Y
LWtKɞ"FCo/w\%=fufR>\7ً9><N?<!+ Qe|U?\8>:$ɪH&++\rVI5h<cL"4 iyì"u2(Qs8ǨhJ\WU^QOn0aYi}6Pgd+,'?!FyS=Jv(d<X|m +ȵu
gISQ
էS. +=Ad.疊3+zqKHh{N$%?ؗ6<cl Wx[ko)m=~$ +_+(]lS*z9{g!g:Y*.<FKҤ˞8eJ c+/)7S&[뇀b*?Kxebi +Fږ/33-@+s
N~+F*T+x|.MM؍#ȋJB?TC{.Xb6bk=;("]gM<aNsʯ4-+
-v+
(w|c-:qb?]{5^hp9+<XlKzhjm6{X&<ܓ8k*V'AB_vsg<A5\ObÀF^_㭞[lWxhy- +}gAkpֶ KӨxkLYuS7 T)n<=e~F\6Dzp@*6ɛHq~8oTN)o[b;Q$qPNrc7Lmj@#9RSuA5$ۏwV$Kpe_*{+7==:ٜM\\zf.gyzKqk\>ڸS39Fdv;7n픁 zzt1~X4-EӀۥyHS7Lϲf?>98vP_ [-Wm7>jXDkD~آ @Q/CNB>ìjLڴ7gCgj\je{͟l4|j]8ܧ5d?\`P2O[._34{
u]hÏ1]4V#\Tr#8a,a-PUc?Z6Ljd6)r>rdmOɅ\Stfse=^]v +kpA0?08EnCȍU y@cJĶяWiG,(6Ҕ~HڅF2{ϱŝ5p*N+5lj9pE!(gƫp
&H5);.X5/0\gd%27C%Jc`<F[o, OHiӑpFrnp{>J_=rŞr +h9!Ӕ=ҔT؆b@@(m S`]C--y͆bKUd/sxU]bv-FplZ4FCI6M3lޮ +娭?rB +VHigH|U1Y=V ݛ)Ia +բc<؞`$8,~{DfTr")xO\tO
T\c|@hhBٵ*1;K6S%ɒ|pK`ۆzL vqн笜!/>VHW+<5;utD䲎'H%N&}P
3 ꍍa0;eEόGQw;-
<b!ʝX+h&F/N[
sp7%ޔ-!h-p9I+Ɖu:aWmd%MiiŤO05ߎ
r<1ϵ#urXX?FʚA3`/w"-jiҍ㌏(&gd1lK*Ax|w+q,Z'rz(O;!/AP=e E˫ˋl+ME rUf[ MՂib{V&ٽ%SͤиjˤRJTI@
P:R )mFGPje0)PvL~V? +?3ԡEgɎ@騎ʤo_EꯆV^g~0`
C<b |3U[ּ MV߷S^zT\@z,*vM4Y8X 2O
>{C랃ezH9ΐ[_ivE\TC%zsKj}tv +W]{҈"ÎWL<Λ[!qLtdUgR*=pݦxȻUV">ֽ^v,+hZL;lڜ)ot!${QuZLabwah뾼̺dZYĉ3T#hb>R4fng9.bx;-KOVң1+*J<=# +S~^/ش1̠<$5|Jvp1R8:Z:"ѧ] c(AQfjiWg(k2iCx$CcM-mnD #uCSiAT1N@kxhb3XS/W"uTr4䆧 T* +4 +Z@Jyh75rPlc5z#BK8mlU$7jpIqZ=Y30 ?k蹘'mR,FU\;B3Nyj{j +w@0'h>l)A2X@]+08IP;?/N)x8/鳁$w(̤4So0L9,ÏYp`<{KU$WL5;~ &Ѽ9KsҢG}inkf(sBgQEޘw.<Ss_ +raJσz7/{;N.d=5?`Ț5,E?L]FaW)H5 +,ݏ`m]mcu~maTA=q&eC59`UDR]$-YE}1wGAn+!țd8C!cd?ܧZf)SۆyYӹn"`$N:z;-ֵ"˘6z\tM ]:H3_'qscViZj44qN?0 +%h8ƘSXRT3G#_)OB^hj:5"3lD14vfF͛ +~\ЍRg,
wQc +ՂS1I^2\[GI0A#Y(w;[CV9̥_v9,3ysGpս~|QlVv٨3#3|Fo%,B8&aԊ'Zhcg fPH܌TPٰ|e=!Ҁ\a$M3lq!dӁ9 ?NXx=zQHAm*fq + +lGX?1ght\6Oѿ>sJWYXqtsz\ʝ%+7e`i%#"j*gOJRG +)sf8Ocon摍녎b(Ήr7WMѼzm]S`2^`ϯ䦓_ +#Jm&+N^Jt._7gD[] +3
I +
RZ24ۤHPr3C8AڗWC&Ƣ;l}DZz B7B?]mwn dJ +6z#lғ?-n" F1'0+`z<tHl,wbP̃g+yLwEsHetsY@cKrAT(B_C&LlH'ʑNاԿmA$6iU!1/ܗ4I"ÇY:_]սOD(NwS?*w+uqPЦ,ɭ +r30X-f Yo⧳O^d8|aܴd 7ݞzr[3~AAɎ"h|UgDo:E_jtfi]o_"w1t,rPe=.|ohd}D$VFmL|<MuTiE TV:]ZkNo^ub\,@J/Z)ӹƪ--HZQL,o(u +VL;C1[1xFZĽ:z*NOox;!rF!d']0{Y
xo2&?v@..)QVg\Q}II5**S~E.rP+/k[tCR&S[dk 'YY0'Hi^br6:v~(hwna Rړ%WJh}P/]?!A_h/H- +o8eip9ߚ{oXB6q[>[parz|0Uoo19pvX'S ;[nﺸPH^`ЈǼh_KUϘhkZ!RQV 0kDT7
]G%ȚqV3LTbsS EOŶ/| +RTeb8cmsZ!p'dP*@^ +!t-!@
9$W`EFérQŁ1FFY~s?S儋3pw:*RnA^¤j
}lwWx8)a9m3,1v>LamID_9h1S4ψɍź,.@'[N{dk +g:!mP_[(w[FdSE
<;"x[X@;UL&.ޝU^FV9\FrdX(*dH +
GoN%մsT:! +o^tN)좆Ch~^Qa:i0cm`HF%? +x~+SLi.M<d쾠L3yPup'b
ԀOQtNs2&"\?+e>Ll{Am-\Zre]S,Z%Hl, +P+ftKB
\;^~fuR~tĈ:$.&Q} +I!C?qAXIi^om`$O.c,@ T
+&nbo29: TF2 +݃g[ӓ،AOuY|UN>|?&U}J +M&{0`YcZX˪Ɋ-~=+l+K`Y#} +Ri}ȖAMOm5zq86Z@Z*zc%l*4pˉRqWpJ*5+Y@`<6:wT\ +]31ѪB'W"jGn`jla5jj0yuHCWf) +֬/B]G/J*g<A[Q"T~U?!wH2MfP5+ 1o\HtQ*JdE=E7\ס@a +` +47jotkjoVAdrLqQԫ@y3kxo5ƍee}Kݍiy*?'Æb]{3##ˁjGnңnlx,Ǭd`ujSf3(;UgJ:þb<2A1;PmmT5CI;$ +87|LL˨u"5SҦ3,dԑ8)i4R5.(B_5V7P*WX+1YjFϐ@8DhVՕ9C:פ=SԎ?VI]=qjP5dC%%%^3ޢOfoGz>y@w=SiM>SK2ko +mDEvݭaɾ6gLT^3 İ3u0,;?sNϼ%&?)xV"z~՞F*` +^QhT;Q8{8 s-6&PCCMx43x
jeH߉d#iHU7~.nau}gd& iR(W> %TQ[QnBhvIC%PMĀmб +vD'Uq҈_lbp?VWTA -;4&|;-b߄=+ڢ>=5?ԯ C*ޡ;i9;8no2daXD2Cw>4B~LDfAþ(>FUh2 +#`sF9S#~twglS ?E{ 3a oc/pkT&a%'zq=Ϣ]:o"xb! gN͌uQR^pjNck/@9 9{뾲3we}t$ܛ/9kc=ލO%сd>?'xzp-̚h|>yMeNGϳ#$ԣ
Dn*gC8Nn>'*GќE=7ofG9'gRTY9<UQhA\8v;Gτ<ۏ +,]·8?W̃rG5n[PwX4 +-Yn{VXHXdƫ +"ӊ{M1B/~^V3kv,BuOsSAg"p +}RCl҈4
oLJKHd럷9]O4|d,-jpCҜۯ<9M,i5qFb$X=1|b>r~N)qJJN#Gs%ӕȮ'@*l6`Ac{?y[biIRAԍ*O6NcY*A dr.̻-iqr16
:L`~6qH淕=W1tlj!!-t_iu3p>:<23ӵUXGB=|\Vs +=֗<(Nݯ_F5"QQp`MfM-3 +>TyDZ/[0TM7RGo~:L}.gYzIbYϔAT yUBB76"װ.17=
jzik*"YH+8_ +`^lS"o:َqNѝ<!vgTFg1}Z?
7qbm +[iQ,(m]FGF9r:`y\5 sm8F]֛,S0a#vI"[]N(9vQF7Pنim'dFq53S4 +.'E]| `<4-U!iZjDSjTv/'S̽" 1-oExeS$F1Aatݠ29py*3LA}SL\ +,6HP#cN+4l +j*IT|S;J0apJ}Vu+* Z]/T%87]mfSPVj]{_"@l*hDaT'fC'T^ב=wgSk3F`I㋊nsJQJZ{7m,&K +endstream +endobj + +%QDF: ignore_newline +22 0 obj +146576 +endobj + +xref +0 23 +0000000000 65535 f +0000000025 00000 n +0000000097 00000 n +0000000221 00000 n +0000003486 00000 n +0000003507 00000 n +0000003589 00000 n +0000003741 00000 n +0000003793 00000 n +0000004252 00000 n +0000004272 00000 n +0000004336 00000 n +0000004534 00000 n +0000004570 00000 n +0000004884 00000 n +0000004904 00000 n +0000006922 00000 n +0000006965 00000 n +0000007208 00000 n +0000009576 00000 n +0000009598 00000 n +0000009682 00000 n +0000156384 00000 n +trailer << + /Info 2 0 R + /Root 1 0 R + /Size 23 + /ID [<d1db92ffc47f1749a08e8a3b57190061><31415926535897932384626433832795>] +>> +startxref +156408 +%%EOF diff --git a/examples/qtest/mod-info/files/3.qdf b/examples/qtest/mod-info/files/3.qdf Binary files differnew file mode 100644 index 00000000..ff82f567 --- /dev/null +++ b/examples/qtest/mod-info/files/3.qdf diff --git a/examples/qtest/mod-info/files/4.qdf b/examples/qtest/mod-info/files/4.qdf Binary files differnew file mode 100644 index 00000000..992314c7 --- /dev/null +++ b/examples/qtest/mod-info/files/4.qdf diff --git a/examples/qtest/mod-info/files/empty-info.pdf b/examples/qtest/mod-info/files/empty-info.pdf Binary files differnew file mode 100644 index 00000000..37bef288 --- /dev/null +++ b/examples/qtest/mod-info/files/empty-info.pdf diff --git a/examples/qtest/mod-info/files/no-info.pdf b/examples/qtest/mod-info/files/no-info.pdf Binary files differnew file mode 100644 index 00000000..05180443 --- /dev/null +++ b/examples/qtest/mod-info/files/no-info.pdf diff --git a/examples/qtest/mod-info/files/source1.pdf b/examples/qtest/mod-info/files/source1.pdf Binary files differnew file mode 100644 index 00000000..86cc3477 --- /dev/null +++ b/examples/qtest/mod-info/files/source1.pdf diff --git a/examples/qtest/mod-info/files/source2.pdf b/examples/qtest/mod-info/files/source2.pdf Binary files differnew file mode 100644 index 00000000..1a814e91 --- /dev/null +++ b/examples/qtest/mod-info/files/source2.pdf diff --git a/examples/qtest/mod-info/usage.out b/examples/qtest/mod-info/usage.out new file mode 100644 index 00000000..5eeba82e --- /dev/null +++ b/examples/qtest/mod-info/usage.out @@ -0,0 +1,5 @@ +Usage: pdf-mod-info -in in_file [-out out_file] [-key key [-val val]?]+ +Modifies/Adds/Removes PDF /Info entries in the in_file +and stores the result in out_file +Special mode: pdf-mod-info --dump file +dumps all /Info entries to stdout diff --git a/examples/qtest/npages.test b/examples/qtest/npages.test new file mode 100644 index 00000000..cd81e6b8 --- /dev/null +++ b/examples/qtest/npages.test @@ -0,0 +1,23 @@ +#!/usr/bin/env perl +require 5.008; +BEGIN { $^W = 1; } +use strict; + +chdir("npages"); + +require TestDriver; + +my $td = new TestDriver('pdf-npages'); + +$td->runtest("normal", + {$td->COMMAND => "pdf-npages minimal.pdf"}, + {$td->STRING => "1\n", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("error", + {$td->COMMAND => "pdf-npages bad"}, + {$td->STRING => "pdf-npages: bad: offset 0: not a PDF file\n", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +$td->report(2); diff --git a/examples/qtest/npages/bad b/examples/qtest/npages/bad new file mode 100644 index 00000000..9daeafb9 --- /dev/null +++ b/examples/qtest/npages/bad @@ -0,0 +1 @@ +test diff --git a/examples/qtest/npages/minimal.pdf b/examples/qtest/npages/minimal.pdf new file mode 100644 index 00000000..a7e01f91 --- /dev/null +++ b/examples/qtest/npages/minimal.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +556 +%%EOF |