aboutsummaryrefslogtreecommitdiffstats
path: root/libtests
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2008-04-29 14:55:25 +0200
committerJay Berkenbilt <ejb@ql.org>2008-04-29 14:55:25 +0200
commit9a0b88bf7777c153dc46ace22db74ef24d51583a (patch)
treef567ac1cf2bf5071a611eb49323a935b6ac938ff /libtests
downloadqpdf-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 'libtests')
-rw-r--r--libtests/Makefile1
-rw-r--r--libtests/ascii85.cc36
-rw-r--r--libtests/bits.cc177
-rw-r--r--libtests/buffer.cc61
-rw-r--r--libtests/build.mk40
-rw-r--r--libtests/flate.cc110
-rw-r--r--libtests/hex.cc36
-rw-r--r--libtests/libtests.testcov18
-rw-r--r--libtests/lzw.cc38
-rw-r--r--libtests/md5.cc74
-rw-r--r--libtests/pcre.cc30
-rw-r--r--libtests/png_filter.cc84
-rw-r--r--libtests/pointer_holder.cc81
-rw-r--r--libtests/qexc.cc65
-rw-r--r--libtests/qtest/ascii85.test22
-rw-r--r--libtests/qtest/ascii85/base85.in43
-rw-r--r--libtests/qtest/ascii85/binary.outbin0 -> 2048 bytes
-rw-r--r--libtests/qtest/bits.test17
-rw-r--r--libtests/qtest/bits/bits.out59
-rw-r--r--libtests/qtest/buffer.test17
-rw-r--r--libtests/qtest/buffer/buffer.out11
-rw-r--r--libtests/qtest/flate.test73
-rw-r--r--libtests/qtest/flate/compressedbin0 -> 147 bytes
-rw-r--r--libtests/qtest/hex.test22
-rw-r--r--libtests/qtest/hex/binary.outbin0 -> 2048 bytes
-rw-r--r--libtests/qtest/hex/hex.in70
-rw-r--r--libtests/qtest/lzw.test17
-rw-r--r--libtests/qtest/lzw/lzw1.inbin0 -> 64355 bytes
-rw-r--r--libtests/qtest/lzw/lzw1.out4299
-rw-r--r--libtests/qtest/md5.test17
-rw-r--r--libtests/qtest/md5/md5.inbin0 -> 250 bytes
-rw-r--r--libtests/qtest/md5/md5.out16
-rw-r--r--libtests/qtest/pcre.test34
-rw-r--r--libtests/qtest/pcre/pcre-unicode-classes.out2
-rw-r--r--libtests/qtest/pcre/pcre.out68
-rw-r--r--libtests/qtest/ph.test17
-rw-r--r--libtests/qtest/ph/ph.out12
-rw-r--r--libtests/qtest/png_filter.test63
-rw-r--r--libtests/qtest/png_filter/in1bin0 -> 3985 bytes
-rw-r--r--libtests/qtest/png_filter/in2bin0 -> 339564 bytes
-rw-r--r--libtests/qtest/png_filter/out1bin0 -> 3188 bytes
-rw-r--r--libtests/qtest/png_filter/out2bin0 -> 282970 bytes
-rw-r--r--libtests/qtest/qexc.test32
-rw-r--r--libtests/qtest/qexc/test0.out2
-rw-r--r--libtests/qtest/qexc/test1.out1
-rw-r--r--libtests/qtest/qexc/test2.out2
-rw-r--r--libtests/qtest/qutil.test17
-rw-r--r--libtests/qtest/qutil/qutil.out30
-rw-r--r--libtests/qtest/rc4.test45
-rw-r--r--libtests/qtest/rc4/test1.in1
-rw-r--r--libtests/qtest/rc4/test1.out1
-rw-r--r--libtests/qtest/rc4/test2.inbin0 -> 8 bytes
-rw-r--r--libtests/qtest/rc4/test2.out1
-rw-r--r--libtests/qtest/rc4/test3.inbin0 -> 8 bytes
-rw-r--r--libtests/qtest/rc4/test3.out1
-rw-r--r--libtests/qtest/rc4/test4.inbin0 -> 10 bytes
-rw-r--r--libtests/qtest/rc4/test4.out1
-rw-r--r--libtests/qtest/rc4/test5.in1
-rw-r--r--libtests/qtest/rc4/test5.outbin0 -> 512 bytes
-rw-r--r--libtests/qutil.cc199
-rw-r--r--libtests/rc4.cc82
61 files changed, 6146 insertions, 0 deletions
diff --git a/libtests/Makefile b/libtests/Makefile
new file mode 100644
index 00000000..90899055
--- /dev/null
+++ b/libtests/Makefile
@@ -0,0 +1 @@
+include ../make/proxy.mk
diff --git a/libtests/ascii85.cc b/libtests/ascii85.cc
new file mode 100644
index 00000000..4b5fed13
--- /dev/null
+++ b/libtests/ascii85.cc
@@ -0,0 +1,36 @@
+#include <qpdf/Pl_ASCII85Decoder.hh>
+
+#include <qpdf/Pl_StdioFile.hh>
+#include <iostream>
+
+int main()
+{
+ Pl_StdioFile out("stdout", stdout);
+ Pl_ASCII85Decoder decode("decode", &out);
+
+ try
+ {
+ unsigned char buf[10000];
+ bool done = false;
+ while (! done)
+ {
+ int len = read(0, buf, sizeof(buf));
+ if (len <= 0)
+ {
+ done = true;
+ }
+ else
+ {
+ decode.write(buf, len);
+ }
+ }
+ decode.finish();
+ }
+ catch (std::exception& e)
+ {
+ std::cerr << e.what() << std::endl;
+ exit(2);
+ }
+
+ return 0;
+}
diff --git a/libtests/bits.cc b/libtests/bits.cc
new file mode 100644
index 00000000..09f5d8e2
--- /dev/null
+++ b/libtests/bits.cc
@@ -0,0 +1,177 @@
+
+#include <qpdf/BitStream.hh>
+#include <qpdf/BitWriter.hh>
+#include <qpdf/Pl_Buffer.hh>
+#include <iostream>
+
+// See comments in bits.cc
+#define BITS_TESTING 1
+#define BITS_READ 1
+#define BITS_WRITE 1
+#include "../libqpdf/bits.icc"
+
+static void
+print_values(int byte_offset, unsigned int bit_offset,
+ unsigned int bits_available)
+{
+ std::cout << "byte offset = " << byte_offset << ", "
+ << "bit offset = " << bit_offset << ", "
+ << "bits available = " << bits_available << std::endl;
+}
+
+static void
+test_read_bits(unsigned char const* buf,
+ unsigned char const*& p, unsigned int& bit_offset,
+ unsigned int& bits_available, int bits_wanted)
+{
+ unsigned long result =
+ read_bits(p, bit_offset, bits_available, bits_wanted);
+
+ std::cout << "bits read: " << bits_wanted << ", result = " << result
+ << std::endl;
+ print_values(p - buf, bit_offset, bits_available);
+}
+
+static void
+test_write_bits(unsigned char& ch, unsigned int& bit_offset, unsigned long val,
+ int bits, Pl_Buffer* bp)
+{
+ write_bits(ch, bit_offset, val, bits, bp);
+ printf("ch = %02x, bit_offset = %d\n", (unsigned int) ch, bit_offset);
+}
+
+static void
+print_buffer(Pl_Buffer* bp)
+{
+ bp->finish();
+ Buffer* b = bp->getBuffer();
+ unsigned char const* p = b->getBuffer();
+ unsigned long l = b->getSize();
+ for (unsigned long i = 0; i < l; ++i)
+ {
+ printf("%02x%s", (unsigned int)(p[i]),
+ (i == l - 1) ? "\n" : " ");
+ }
+ printf("\n");
+ delete b;
+}
+
+static void
+test()
+{
+ // 11110101 00010101 01100101 01111001 00010010 10001001 01110101 01001011
+ // F5 15 65 79 12 89 75 4B
+
+ // Read tests
+
+ static unsigned char const buf[] = {
+ 0xF5, 0x15, 0x65, 0x79, 0x12, 0x89, 0x75, 0x4B
+ };
+
+ unsigned char const* p = buf;
+ unsigned int bit_offset = 7;
+ unsigned int bits_available = 64;
+
+ // 11110:101 0:001010:1 01100101: 01111001
+ // 0:00:1:0010 10001001 01110101 01001:011
+ print_values(p - buf, bit_offset, bits_available);
+ test_read_bits(buf, p, bit_offset, bits_available, 5);
+ test_read_bits(buf, p, bit_offset, bits_available, 4);
+ test_read_bits(buf, p, bit_offset, bits_available, 6);
+ test_read_bits(buf, p, bit_offset, bits_available, 9);
+ test_read_bits(buf, p, bit_offset, bits_available, 9);
+ test_read_bits(buf, p, bit_offset, bits_available, 2);
+ test_read_bits(buf, p, bit_offset, bits_available, 1);
+ test_read_bits(buf, p, bit_offset, bits_available, 0);
+ test_read_bits(buf, p, bit_offset, bits_available, 25);
+
+ try
+ {
+ test_read_bits(buf, p, bit_offset, bits_available, 4);
+ }
+ catch (std::exception& e)
+ {
+ std::cout << "exception: " << e.what() << std::endl;
+ print_values(p - buf, bit_offset, bits_available);
+ }
+
+ test_read_bits(buf, p, bit_offset, bits_available, 3);
+ std::cout << std::endl;
+
+ // 11110101 00010101 01100101 01111001: 00010010 10001001 01110101 01001011
+
+ p = buf;
+ bit_offset = 7;
+ bits_available = 64;
+ print_values(p - buf, bit_offset, bits_available);
+ test_read_bits(buf, p, bit_offset, bits_available, 32);
+ test_read_bits(buf, p, bit_offset, bits_available, 32);
+ std::cout << std::endl;
+
+ BitStream b(buf, 8);
+ std::cout << b.getBits(32) << std::endl;
+ b.reset();
+ std::cout << b.getBits(32) << std::endl;
+ std::cout << b.getBits(32) << std::endl;
+ std::cout << std::endl;
+
+ b.reset();
+ std::cout << b.getBits(6) << std::endl;
+ b.skipToNextByte();
+ std::cout << b.getBits(8) << std::endl;
+ b.skipToNextByte();
+ std::cout << b.getBits(8) << std::endl;
+ std::cout << std::endl;
+
+ // Write tests
+
+ // 11110:101 0:001010:1 01100101: 01111001
+ // 0:00:1:0010 10001001 01110101 01001:011
+
+ unsigned char ch = 0;
+ bit_offset = 7;
+ Pl_Buffer* bp = new Pl_Buffer("buffer");
+
+ test_write_bits(ch, bit_offset, 30UL, 5, bp);
+ test_write_bits(ch, bit_offset, 10UL, 4, bp);
+ test_write_bits(ch, bit_offset, 10UL, 6, bp);
+ test_write_bits(ch, bit_offset, 16059UL, 0, bp);
+ test_write_bits(ch, bit_offset, 357UL, 9, bp);
+ print_buffer(bp);
+
+ test_write_bits(ch, bit_offset, 242UL, 9, bp);
+ test_write_bits(ch, bit_offset, 0UL, 2, bp);
+ test_write_bits(ch, bit_offset, 1UL, 1, bp);
+ test_write_bits(ch, bit_offset, 5320361UL, 25, bp);
+ test_write_bits(ch, bit_offset, 3UL, 3, bp);
+
+ print_buffer(bp);
+ test_write_bits(ch, bit_offset, 4111820153UL, 32, bp);
+ test_write_bits(ch, bit_offset, 310998347UL, 32, bp);
+ print_buffer(bp);
+
+ BitWriter bw(bp);
+ bw.writeBits(30UL, 5);
+ bw.flush();
+ bw.flush();
+ bw.writeBits(0xABUL, 8);
+ bw.flush();
+ print_buffer(bp);
+
+ delete bp;
+}
+
+int main()
+{
+ try
+ {
+ test();
+ }
+ catch (std::exception& e)
+ {
+ std::cout << "unexpected exception: " << e.what() << std::endl;
+ exit(2);
+ }
+ std::cout << "done" << std::endl;
+ return 0;
+}
diff --git a/libtests/buffer.cc b/libtests/buffer.cc
new file mode 100644
index 00000000..6494c5c4
--- /dev/null
+++ b/libtests/buffer.cc
@@ -0,0 +1,61 @@
+
+#include <qpdf/Pl_Buffer.hh>
+#include <qpdf/Pl_Count.hh>
+#include <qpdf/Pl_Discard.hh>
+
+typedef unsigned char* uc;
+
+int main()
+{
+ try
+ {
+ Pl_Discard discard;
+ Pl_Count count("count", &discard);
+ Pl_Buffer bp1("bp1", &count);
+ bp1.write((uc)"12345", 5);
+ bp1.write((uc)"67890", 5);
+ bp1.finish();
+ std::cout << "count: " << count.getCount() << std::endl;
+ bp1.write((uc)"abcde", 5);
+ bp1.write((uc)"fghij", 6);
+ bp1.finish();
+ std::cout << "count: " << count.getCount() << std::endl;
+ Buffer* b = bp1.getBuffer();
+ std::cout << "size: " << b->getSize() << std::endl;
+ std::cout << "data: " << b->getBuffer() << std::endl;
+ delete b;
+ bp1.write((uc)"qwert", 5);
+ bp1.write((uc)"yuiop", 6);
+ bp1.finish();
+ std::cout << "count: " << count.getCount() << std::endl;
+ b = bp1.getBuffer();
+ std::cout << "size: " << b->getSize() << std::endl;
+ std::cout << "data: " << b->getBuffer() << std::endl;
+ delete b;
+
+ Pl_Buffer bp2("bp2");
+ bp2.write((uc)"moo", 3);
+ bp2.write((uc)"quack", 6);
+ try
+ {
+ delete bp2.getBuffer();
+ }
+ catch (std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ bp2.finish();
+ b = bp2.getBuffer();
+ std::cout << "size: " << b->getSize() << std::endl;
+ std::cout << "data: " << b->getBuffer() << std::endl;
+ delete b;
+ }
+ catch (std::exception& e)
+ {
+ std::cout << "unexpected exception: " << e.what() << std::endl;
+ exit(2);
+ }
+
+ std::cout << "done" << std::endl;
+ return 0;
+}
diff --git a/libtests/build.mk b/libtests/build.mk
new file mode 100644
index 00000000..4a58fcaa
--- /dev/null
+++ b/libtests/build.mk
@@ -0,0 +1,40 @@
+BINS_libtests = \
+ ascii85 \
+ bits \
+ buffer \
+ flate \
+ hex \
+ lzw \
+ md5 \
+ pcre \
+ png_filter \
+ pointer_holder \
+ qexc \
+ qutil \
+ rc4
+
+TARGETS_libtests = $(foreach B,$(BINS_libtests),libtests/$(OUTPUT_DIR)/$(B))
+
+$(TARGETS_libtests): $(TARGETS_libqpdf)
+
+INCLUDES_libtests = include libqpdf
+
+TC_SRCS_libtests = $(wildcard libqpdf/*.cc) $(wildcard libtests/*.cc) \
+ libqpdf/bits.icc
+
+# -----
+
+$(foreach B,$(BINS_libtests),$(eval \
+ OBJS_$(B) = $(call src_to_obj,libtests/$(B).cc)))
+
+ifeq ($(GENDEPS),1)
+-include $(foreach B,$(BINS_libtests),$(call obj_to_dep,$(OBJS_$(B))))
+endif
+
+$(foreach B,$(BINS_libtests),$(eval \
+ $(OBJS_$(B)): libtests/$(OUTPUT_DIR)/%.o: libtests/$(B).cc ; \
+ $(call compile,libtests/$(B).cc,$(INCLUDES_libtests))))
+
+$(foreach B,$(BINS_libtests),$(eval \
+ libtests/$(OUTPUT_DIR)/$(B): $(OBJS_$(B)) ; \
+ $(call makebin,$(OBJS_$(B)),$$@)))
diff --git a/libtests/flate.cc b/libtests/flate.cc
new file mode 100644
index 00000000..0b5b8977
--- /dev/null
+++ b/libtests/flate.cc
@@ -0,0 +1,110 @@
+
+#include <qpdf/Pl_Flate.hh>
+#include <qpdf/Pl_StdioFile.hh>
+#include <qpdf/Pl_Count.hh>
+
+#include <iostream>
+#include <errno.h>
+
+FILE* safe_fopen(char const* filename, char const* mode)
+{
+ FILE* result = fopen(filename, mode);
+ if (result == 0)
+ {
+ std::cerr << "fopen " << filename << " failed: " << strerror(errno)
+ << std::endl;
+ }
+ return result;
+}
+
+void run(char const* filename)
+{
+ std::string n1 = std::string(filename) + ".1";
+ std::string n2 = std::string(filename) + ".2";
+ std::string n3 = std::string(filename) + ".3";
+
+ FILE* o1 = safe_fopen(n1.c_str(), "wb");
+ FILE* o2 = safe_fopen(n2.c_str(), "wb");
+ FILE* o3 = safe_fopen(n3.c_str(), "wb");
+ Pipeline* out1 = new Pl_StdioFile("o1", o1);
+ Pipeline* out2 = new Pl_StdioFile("o2", o2);
+ Pipeline* out3 = new Pl_StdioFile("o3", o3);
+
+ // Compress the file
+ Pipeline* def1 = new Pl_Flate("def1", out1, Pl_Flate::a_deflate);
+
+ // Decompress the file
+ Pipeline* inf2 = new Pl_Flate("inf2", out2, Pl_Flate::a_inflate);
+
+ // Count bytes written to o3
+ Pl_Count* count3 = new Pl_Count("count3", out3);
+
+ // Do both simultaneously
+ Pipeline* inf3 = new Pl_Flate("inf3", count3, Pl_Flate::a_inflate);
+ Pipeline* def3 = new Pl_Flate("def3", inf3, Pl_Flate::a_deflate);
+
+ FILE* in1 = safe_fopen(filename, "rb");
+ unsigned char buf[1024];
+ size_t len;
+ while ((len = fread(buf, 1, sizeof(buf), in1)) > 0)
+ {
+ // Write to the compression pipeline
+ def1->write(buf, len);
+
+ // Write to the both pipeline
+ def3->write(buf, len);
+ }
+
+ def1->finish();
+ delete def1;
+ delete out1;
+ fclose(o1);
+
+ def3->finish();
+
+ std::cout << "bytes written to o3: " << count3->getCount() << std::endl;
+
+
+ delete def3;
+ delete inf3;
+ delete count3;
+ delete out3;
+ fclose(o3);
+
+ // Now read the compressed data and write to the output uncompress pipeline
+ FILE* in2 = safe_fopen(n1.c_str(), "rb");
+ while ((len = fread(buf, 1, sizeof(buf), in2)) > 0)
+ {
+ inf2->write(buf, len);
+ }
+
+ inf2->finish();
+ delete inf2;
+ delete out2;
+ fclose(o2);
+
+ // At this point, filename, filename.2, and filename.3 should have
+ // identical contents. filename.1 should be a compressed version.
+
+ std::cout << "done" << std::endl;
+}
+
+int main(int argc, char* argv[])
+{
+ if (argc != 2)
+ {
+ std::cerr << "Usage: pipeline filename" << std::endl;
+ exit(2);
+ }
+ char* filename = argv[1];
+
+ try
+ {
+ run(filename);
+ }
+ catch (QEXC::General& e)
+ {
+ std::cout << e.unparse() << std::endl;
+ }
+ return 0;
+}
diff --git a/libtests/hex.cc b/libtests/hex.cc
new file mode 100644
index 00000000..0bd6354a
--- /dev/null
+++ b/libtests/hex.cc
@@ -0,0 +1,36 @@
+#include <qpdf/Pl_ASCIIHexDecoder.hh>
+
+#include <qpdf/Pl_StdioFile.hh>
+#include <iostream>
+
+int main()
+{
+ Pl_StdioFile out("stdout", stdout);
+ Pl_ASCIIHexDecoder decode("decode", &out);
+
+ try
+ {
+ unsigned char buf[10000];
+ bool done = false;
+ while (! done)
+ {
+ int len = read(0, buf, sizeof(buf));
+ if (len <= 0)
+ {
+ done = true;
+ }
+ else
+ {
+ decode.write(buf, len);
+ }
+ }
+ decode.finish();
+ }
+ catch (std::exception& e)
+ {
+ std::cerr << e.what() << std::endl;
+ exit(2);
+ }
+
+ return 0;
+}
diff --git a/libtests/libtests.testcov b/libtests/libtests.testcov
new file mode 100644
index 00000000..ddbccd24
--- /dev/null
+++ b/libtests/libtests.testcov
@@ -0,0 +1,18 @@
+ignored-scope: qpdf
+Pl_LZWDecoder intermediate reset 0
+Pl_LZWDecoder last was table size 0
+Pl_ASCII85Decoder ignore space 0
+Pl_ASCII85Decoder read z 0
+Pl_ASCII85Decoder no-op flush 0
+Pl_ASCII85Decoder partial flush 1
+bits leftover 1
+bits bit_offset 2
+bits iterations 2
+bits zero bits wanted 0
+bits write iterations 2
+bits write leftover 0
+bits write pipeline 0
+bits write zero bits 0
+Pl_ASCIIHexDecoder ignore space 0
+Pl_ASCIIHexDecoder no-op flush 0
+Pl_ASCIIHexDecoder partial flush 1
diff --git a/libtests/lzw.cc b/libtests/lzw.cc
new file mode 100644
index 00000000..38c8e541
--- /dev/null
+++ b/libtests/lzw.cc
@@ -0,0 +1,38 @@
+#include <qpdf/Pl_LZWDecoder.hh>
+
+#include <qpdf/Pl_StdioFile.hh>
+#include <iostream>
+
+int main()
+{
+ Pl_StdioFile out("stdout", stdout);
+ // We don't exercise LZWDecoder with early code change false
+ // because we have no way to generate such an LZW stream.
+ Pl_LZWDecoder decode("decode", &out, true);
+
+ try
+ {
+ unsigned char buf[10000];
+ bool done = false;
+ while (! done)
+ {
+ int len = read(0, buf, sizeof(buf));
+ if (len <= 0)
+ {
+ done = true;
+ }
+ else
+ {
+ decode.write(buf, len);
+ }
+ }
+ decode.finish();
+ }
+ catch (std::exception& e)
+ {
+ std::cerr << e.what() << std::endl;
+ exit(2);
+ }
+
+ return 0;
+}
diff --git a/libtests/md5.cc b/libtests/md5.cc
new file mode 100644
index 00000000..e1c69bb6
--- /dev/null
+++ b/libtests/md5.cc
@@ -0,0 +1,74 @@
+
+#include <qpdf/MD5.hh>
+#include <qpdf/Pl_MD5.hh>
+#include <qpdf/Pl_Discard.hh>
+#include <iostream>
+
+static void test_string(char const* str)
+{
+ MD5 a;
+ a.encodeString(str);
+ a.print();
+}
+
+int main(int, char*[])
+{
+ test_string("");
+ test_string("a");
+ test_string("abc");
+ test_string("message digest");
+ test_string("abcdefghijklmnopqrstuvwxyz");
+ test_string("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi"
+ "jklmnopqrstuvwxyz0123456789");
+ test_string("1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890");
+ MD5 a;
+ a.encodeFile("md5.in");
+ std::cout << a.unparse() << std::endl;
+ MD5 b;
+ b.encodeFile("md5.in", 100);
+ std::cout << b.unparse() << std::endl;
+
+ std::cout
+ << MD5::checkDataChecksum("900150983cd24fb0d6963f7d28e17f72", "abc", 3)
+ << std::endl
+ << MD5::checkFileChecksum("5f4b4321873433daae578f85c72f9e74", "md5.in")
+ << std::endl
+ << MD5::checkFileChecksum("6f4b4321873433daae578f85c72f9e74", "md5.in")
+ << std::endl
+ << MD5::checkDataChecksum("000150983cd24fb0d6963f7d28e17f72", "abc", 3)
+ << std::endl
+ << MD5::checkFileChecksum("6f4b4321873433daae578f85c72f9e74", "glerbl")
+ << std::endl;
+
+
+ Pl_Discard d;
+ Pl_MD5 p("MD5", &d);
+ for (int i = 0; i < 2; ++i)
+ {
+ FILE* f = fopen("md5.in", "rb");
+ if (f)
+ {
+ // buffer size < size of md5.in
+ unsigned char buf[50];
+ bool done = false;
+ while (! done)
+ {
+ int len = fread(buf, 1, sizeof(buf), f);
+ if (len <= 0)
+ {
+ done = true;
+ }
+ else
+ {
+ p.write(buf, len);
+ }
+ }
+ fclose(f);
+ p.finish();
+ std::cout << p.getHexDigest() << std::endl;
+ }
+ }
+
+ return 0;
+}
diff --git a/libtests/pcre.cc b/libtests/pcre.cc
new file mode 100644
index 00000000..0df692a3
--- /dev/null
+++ b/libtests/pcre.cc
@@ -0,0 +1,30 @@
+
+#include <qpdf/PCRE.hh>
+#include <iostream>
+
+int main(int argc, char* argv[])
+{
+ if ((argc == 2) && (strcmp(argv[1], "--unicode-classes-supported") == 0))
+ {
+ try
+ {
+ PCRE("^([\\p{L}]+)", PCRE_UTF8);
+ std::cout << "1" << std::endl;
+ }
+ catch (PCRE::Exception& e)
+ {
+ std::cout << "0" << std::endl;
+ }
+ return 0;
+ }
+
+ if ((argc == 2) && (strcmp(argv[1], "--unicode-classes") == 0))
+ {
+ PCRE::test(1);
+ }
+ else
+ {
+ PCRE::test();
+ }
+ return 0;
+}
diff --git a/libtests/png_filter.cc b/libtests/png_filter.cc
new file mode 100644
index 00000000..eef1aa3d
--- /dev/null
+++ b/libtests/png_filter.cc
@@ -0,0 +1,84 @@
+
+#include <qpdf/Pl_PNGFilter.hh>
+#include <qpdf/Pl_StdioFile.hh>
+
+#include <iostream>
+#include <errno.h>
+#include <assert.h>
+
+FILE* safe_fopen(char const* filename, char const* mode)
+{
+ FILE* result = fopen(filename, mode);
+ if (result == 0)
+ {
+ std::cerr << "fopen " << filename << " failed: " << strerror(errno)
+ << std::endl;
+ }
+ return result;
+}
+
+void run(char const* filename, bool encode, unsigned int columns)
+{
+ // Decode the file
+ FILE* in = safe_fopen(filename, "rb");
+ FILE* o1 = safe_fopen("out", "wb");
+ Pipeline* out = new Pl_StdioFile("out", o1);
+ Pipeline* pl = new Pl_PNGFilter(
+ "png", out,
+ encode ? Pl_PNGFilter::a_encode : Pl_PNGFilter::a_decode,
+ columns, 0 /* not used */);
+ assert((2 * (columns + 1)) < 1024);
+ unsigned char buf[1024];
+ size_t len;
+ while (true)
+ {
+ len = fread(buf, 1, (2 * columns) + 1, in);
+ if (len == 0)
+ {
+ break;
+ }
+ pl->write(buf, len);
+ len = fread(buf, 1, 1, in);
+ if (len == 0)
+ {
+ break;
+ }
+ pl->write(buf, len);
+ len = fread(buf, 1, 1, in);
+ if (len == 0)
+ {
+ break;
+ }
+ pl->write(buf, len);
+ }
+
+ pl->finish();
+ delete pl;
+ delete out;
+ fclose(o1);
+ fclose(in);
+
+ std::cout << "done" << std::endl;
+}
+
+int main(int argc, char* argv[])
+{
+ if (argc != 4)
+ {
+ std::cerr << "Usage: pipeline {en,de}code filename columns" << std::endl;
+ exit(2);
+ }
+ bool encode = (strcmp(argv[1], "encode") == 0);
+ char* filename = argv[2];
+ int columns = atoi(argv[3]);
+
+ try
+ {
+ run(filename, encode, columns);
+ }
+ catch (QEXC::General& e)
+ {
+ std::cout << e.unparse() << std::endl;
+ }
+ return 0;
+}
diff --git a/libtests/pointer_holder.cc b/libtests/pointer_holder.cc
new file mode 100644
index 00000000..9176df17
--- /dev/null
+++ b/libtests/pointer_holder.cc
@@ -0,0 +1,81 @@
+
+#include <qpdf/PointerHolder.hh>
+
+#include <iostream>
+#include <stdlib.h>
+#include <list>
+
+#include <qpdf/QUtil.hh>
+
+class Object
+{
+ public:
+ Object();
+ ~Object();
+ void hello();
+
+ private:
+ static int next_id;
+ int id;
+};
+
+
+int Object::next_id = 0;
+
+Object::Object()
+{
+ this->id = ++next_id;
+ std::cout << "created Object, id " << this->id << std::endl;
+}
+
+Object::~Object()
+{
+ std::cout << "destroyed Object, id " << this->id << std::endl;
+}
+
+void
+Object::hello()
+{
+ std::cout << "calling Object::hello for " << this->id << std::endl;
+}
+
+typedef PointerHolder<Object> ObjectHolder;
+
+int main(int argc, char* argv[])
+{
+ std::list<ObjectHolder> ol1;
+
+ ObjectHolder oh0;
+ {
+ std::cout << "hello" << std::endl;
+ Object* o1 = new Object;
+ ObjectHolder oh1(o1);
+ ObjectHolder oh2(oh1);
+ ObjectHolder oh3(new Object);
+ ObjectHolder oh4;
+ ObjectHolder oh5;
+ if (oh4 == oh5)
+ {
+ std::cout << "nulls equal" << std::endl;
+ }
+ oh3 = oh1;
+ oh4 = oh2;
+ if (oh3 == oh4)
+ {
+ std::cout << "equal okay" << std::endl;
+ }
+ if ((! (oh3 < oh4)) && (! (oh4 < oh3)))
+ {
+ std::cout << "less than okay" << std::endl;
+ }
+ ol1.push_back(oh3);
+ ol1.push_back(oh3);
+ Object* o3 = new Object;
+ oh0 = o3;
+ }
+
+ ol1.front().getPointer()->hello();
+ ol1.pop_front();
+ std::cout << "goodbye" << std::endl;
+ return 0;
+}
diff --git a/libtests/qexc.cc b/libtests/qexc.cc
new file mode 100644
index 00000000..db12d39c
--- /dev/null
+++ b/libtests/qexc.cc
@@ -0,0 +1,65 @@
+
+#include <qpdf/QEXC.hh>
+#include <iostream>
+#include <errno.h>
+
+void do_terminate()
+{
+ try
+ {
+ throw;
+ }
+ catch (std::exception& e)
+ {
+ std::cerr << "uncaught exception: " << e.what() << std::endl;
+ exit(3);
+ }
+ exit(4);
+}
+
+void f(int n)
+{
+ switch (n)
+ {
+ case 0:
+ throw QEXC::General("general exception");
+ break;
+
+ case 1:
+ throw QEXC::Internal("internal error");
+ break;
+
+ case 2:
+ throw QEXC::System("doing something", EINVAL);
+ break;
+
+ case 3:
+ {
+ int a = -1;
+ new char[a];
+ }
+ break;
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ std::set_terminate(do_terminate);
+ if (argc != 2)
+ {
+ std::cerr << "usage: qexc n" << std::endl;
+ exit(2);
+ }
+
+ try
+ {
+ f(atoi(argv[1]));
+ }
+ catch (QEXC::General& e)
+ {
+ std::cerr << "exception: " << e.unparse() << std::endl;
+ std::cerr << "what: " << e.what() << std::endl;
+ exit(2);
+ }
+ return 0;
+}
diff --git a/libtests/qtest/ascii85.test b/libtests/qtest/ascii85.test
new file mode 100644
index 00000000..07551bd1
--- /dev/null
+++ b/libtests/qtest/ascii85.test
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("ascii85") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('ascii85');
+
+$td->runtest("decode",
+ {$td->COMMAND => "ascii85 < base85.in"},
+ {$td->FILE => "binary.out",
+ $td->EXIT_STATUS => 0});
+
+$td->runtest("partial decode",
+ {$td->COMMAND => "echo '\@<5skEHbu7\$3~>' | ascii85"},
+ {$td->STRING => "asdfqwer\n",
+ $td->EXIT_STATUS => 0});
+
+$td->report(2);
diff --git a/libtests/qtest/ascii85/base85.in b/libtests/qtest/ascii85/base85.in
new file mode 100644
index 00000000..0237ac51
--- /dev/null
+++ b/libtests/qtest/ascii85/base85.in
@@ -0,0 +1,43 @@
+70!<9iWTSm7K<E>iWTSm7fWNCiWTSm8,rWHiWTSm8H8`MiWTSm8cSiRiWTSm
+9)nrWiWTSm9E5&\iWTSm9`P/aiWTSm:&k8fiWTSm:B1AkiWTSm:]LJpiWTSm
+;#gSuiWTSm;?-]%iWTSm;ZHf*iWTSm;uco/iWTSm<<*#4iWTSm<WE,9iWTSm
+<r`5>iWTSm=9&>CiWTSm=TAGHiWTSm=o\P&M<.ZglicMP!!!"'J]"ig!<A%A
+q#CBoL!k&HkhZ:>!9c9E!!)4J#6=g,>KOe_2$i.E#lc1Zi<9Je!!!$!,nT#=
+#\X2<!!)9As8W-!,o#;A#\XJD!!)91s8W-!,oGSE#\XbL!!)9!s8W-!,okkI
+#\Y%T!!)8fs8W-!,p;.M#\Y=\!!)8Vs8W-!,p_FQ#\YUd!!)8Fs8W-!,q.^U
+#\Yml!!)86s8W-!,qS!Y#\Z0t!!)8&s8W-!,r"9]#\ZI'!!)7ks8W-!,rFQa
+#\Za/!!)7[s8W-!,rjie#\[$7!!)7Ks8W-!,s:,i#\[<?!!)7;s8W-!,s^Dm
+#\[TG!!)7+s8W-!,t-\q#\[lO!!)6ps8W-!,tQtu#\\/W!!)6`s8W-!,u!8$
+#\\G_!!)9Qrr<#u,uEP(#\\_g!!)9Arr<#u,uih,#\]"o!!)91rr<#u-!9+0
+#\];"!!)9!rr<#u-!]C4#\]S*!!)8frr<#u-",[8#\]k2!!)8Vrr<#u-"Ps<
+#\^.:!!)8Frr<#u-"u6@#\^FB!!)86rr<#u-#DND#\^^J!!)8&rr<#u-#hfH
+#\_!R!!)7krr<#u-$8)L#\_9Z!!)7[rr<#u-$\AP#\_Qb!!)7Krr<#u-%+YT
+#\_ij!!)7;rr<#u-%OqX#\`,r!!)7+rr<#u-%t4\#\`E%!!)6prr<#u-&CL`
+#\`]-!!)6`rr<#u-&gdd#\`u5!!)9QrVuot-'7'h#\X2=!!)9ArVuot-'[?l
+#\XJE!!)91rVuot-(*Wp#\XbM!!)9!rVuot-(Not#\Y%U!!)8frVuot-(s3#
+#\Y=]!!)8VrVuot-)BK'#\YUe!!)8FrVuot-)fc+#\Ymm!!)86rVuot-*6&/
+#\Z0u!!)8&rVuot-*Z>3#\ZI(!!)7krVuot-+)V7#\Za0!!)7[rVuot-+Mn;
+#\[$8!!)7KrVuot-+r1?#\[<@!!)7;rVuot-,AIC#\[TH!!)7+rVuot-,eaG
+#\[lP!!)6prVuot--5$K#\\/X!!)6`rVuot--Y<O#\\G`!!)9Qr;Zfs-.(TS
+#\\_h!!)9Ar;Zfs-.LlW#\]"p!!)91r;Zfs-.q/[#\];#!!)9!r;Zfs-/@G_
+#\]S+!!)8fr;Zfs-/d_c#\]k3!!)8Vr;Zfs-04"g#\^.;!!)8Fr;Zfs-0X:k
+#\^FC!!)86r;Zfs-1'Ro#\^^K!!)8&r;Zfs-1Kjs#\_!S!!)7kr;Zfs-1p."
+#\_9[!!)7[r;Zfs-2?F&#\_Qc!!)7Kr;Zfs-2c^*#\_ik!!)7;r;Zfs,llp.
+#\`,s!!)7+r;Zfs,m<32#\`E&!!)6pr;Zfs,m`K6#\`].!!)6`r;Zfs,n/c:
+#\`u6!!)9Qqu?]r,nT&>#\X2>!!)9Aqu?]r,o#>B#\XJF!!)91qu?]r,oGVF
+#\XbN!!)9!qu?]r,oknJ#\Y%V!!)8fqu?]r,p;1N#\Y=^!!)8Vqu?]r,p_IR
+#\YUf!!)8Fqu?]r,q.aV#\Ymn!!)86qu?]r,qS$Z#\Z1!!!)8&qu?]r,r"<^
+#\ZI)!!)7kqu?]r,rFTb#\Za1!!)7[qu?]r,rjlf#\[$9!!)7Kqu?]r,s:/j
+#\[<A!!)7;qu?]r,s^Gn#\[TI!!)7+qu?]r,t-_r#\[lQ!!)6pqu?]r,tR#!
+#\\/Y!!)6`qu?]r,u!;%#\\Ga!!)9QqZ$Tq,uES)#\\_i!!)9AqZ$Tq,uik-
+#\]"q!!)91qZ$Tq-!9.1#\];$!!)9!qZ$Tq-!]F5#\]S,!!)8fqZ$Tq-",^9
+#\]k4!!)8VqZ$Tq-"Q!=#\^.<!!)8FqZ$Tq-"u9A#\^FD!!)86qZ$Tq-#DQE
+#\^^L!!)8&qZ$Tq-#hiI#\_!T!!)7kqZ$Tq-$8,M#\_9\!!)7[qZ$Tq-$\DQ
+#\_Qd!!)7KqZ$Qqzz!!!!Rm9YY.KB2Mu<)RB0Rfs(2&=Wh/;-%B"jobtRPPb
+C[oT5/rOH>QcOH>QcOH>Q(M<0BV#_5(Ziro\gF:@ITK>7VbLuJRDs3dTsiWT
+UG&;APTlc'+Liro\hahs3?M<0BV#b_gf"UKgtF:u(`!!!"Q^iTn'"=+Q:"UP
+.Tahs4%OH>QcOH>QcOH>Q(M<0BV(lLfgMbOV<:]u[VM+f0#a$_0]zM,Y`'M$
+,*fQi6sbahs4"F=$ufM<0BV#`0NHMd6aJF<h!IFU3mu"H-:`MZts>1!q`($,
+La&Mb=>67L4oV%#\-p0uu*'$.'3I^kop\iW4rW,`0m+F<h!Gls7MgF=%!]+Q
+Wb4<Jfgk^i]p@70oY2jTPoq_i8g>NP$V=!!!"m+QWb4<Jfgk^i^*[,io18K>
+7M_,io18?,Mb`F=$ufKYWH+F:?1n~>trailing garbage
diff --git a/libtests/qtest/ascii85/binary.out b/libtests/qtest/ascii85/binary.out
new file mode 100644
index 00000000..f33a0b43
--- /dev/null
+++ b/libtests/qtest/ascii85/binary.out
Binary files differ
diff --git a/libtests/qtest/bits.test b/libtests/qtest/bits.test
new file mode 100644
index 00000000..f5dac7b5
--- /dev/null
+++ b/libtests/qtest/bits.test
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("bits") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('bits');
+
+$td->runtest("bits",
+ {$td->COMMAND => "bits"},
+ {$td->FILE => "bits.out",
+ $td->EXIT_STATUS => 0});
+
+$td->report(1);
diff --git a/libtests/qtest/bits/bits.out b/libtests/qtest/bits/bits.out
new file mode 100644
index 00000000..73111536
--- /dev/null
+++ b/libtests/qtest/bits/bits.out
@@ -0,0 +1,59 @@
+byte offset = 0, bit offset = 7, bits available = 64
+bits read: 5, result = 30
+byte offset = 0, bit offset = 2, bits available = 59
+bits read: 4, result = 10
+byte offset = 1, bit offset = 6, bits available = 55
+bits read: 6, result = 10
+byte offset = 1, bit offset = 0, bits available = 49
+bits read: 9, result = 357
+byte offset = 3, bit offset = 7, bits available = 40
+bits read: 9, result = 242
+byte offset = 4, bit offset = 6, bits available = 31
+bits read: 2, result = 0
+byte offset = 4, bit offset = 4, bits available = 29
+bits read: 1, result = 1
+byte offset = 4, bit offset = 3, bits available = 28
+bits read: 0, result = 0
+byte offset = 4, bit offset = 3, bits available = 28
+bits read: 25, result = 5320361
+byte offset = 7, bit offset = 2, bits available = 3
+exception: overflow reading bit stream
+byte offset = 7, bit offset = 2, bits available = 3
+bits read: 3, result = 3
+byte offset = 8, bit offset = 7, bits available = 0
+
+byte offset = 0, bit offset = 7, bits available = 64
+bits read: 32, result = 4111820153
+byte offset = 4, bit offset = 7, bits available = 32
+bits read: 32, result = 310998347
+byte offset = 8, bit offset = 7, bits available = 0
+
+4111820153
+4111820153
+310998347
+
+61
+21
+101
+
+ch = f0, bit_offset = 2
+ch = 00, bit_offset = 6
+ch = 14, bit_offset = 0
+ch = 14, bit_offset = 0
+ch = 00, bit_offset = 7
+f5 15 65
+
+ch = 00, bit_offset = 6
+ch = 00, bit_offset = 4
+ch = 10, bit_offset = 3
+ch = 48, bit_offset = 2
+ch = 00, bit_offset = 7
+79 12 89 75 4b
+
+ch = 00, bit_offset = 7
+ch = 00, bit_offset = 7
+f5 15 65 79 12 89 75 4b
+
+f0 ab
+
+done
diff --git a/libtests/qtest/buffer.test b/libtests/qtest/buffer.test
new file mode 100644
index 00000000..83ce4643
--- /dev/null
+++ b/libtests/qtest/buffer.test
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("buffer") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('buffer');
+
+$td->runtest("buffer",
+ {$td->COMMAND => "buffer"},
+ {$td->FILE => "buffer.out",
+ $td->EXIT_STATUS => 0});
+
+$td->report(1);
diff --git a/libtests/qtest/buffer/buffer.out b/libtests/qtest/buffer/buffer.out
new file mode 100644
index 00000000..9ee2b545
--- /dev/null
+++ b/libtests/qtest/buffer/buffer.out
@@ -0,0 +1,11 @@
+count: 10
+count: 21
+size: 21
+data: 1234567890abcdefghij
+count: 32
+size: 11
+data: qwertyuiop
+INTERNAL ERROR: Pl_Buffer::getBuffer() called when not ready
+size: 9
+data: mooquack
+done
diff --git a/libtests/qtest/flate.test b/libtests/qtest/flate.test
new file mode 100644
index 00000000..fe850b3e
--- /dev/null
+++ b/libtests/qtest/flate.test
@@ -0,0 +1,73 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+use File::Copy;
+use Digest::MD5;
+
+chdir("flate") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+cleanup();
+
+my $td = new TestDriver('flate');
+
+cleanup();
+
+open(F, ">farbage") or die;
+print F "q" x 10000, "\n";
+print F "w" x 10000, "\n";
+print F "e" x 10000, "\n";
+print F "r" x 10000, "\n";
+print F "t" x 10000, "\n";
+print F "y" x 10000, "\n";
+print F "u" x 10000, "\n";
+print F "i" x 10000, "\n";
+print F "o" x 10000, "\n";
+print F "p" x 10000, "\n";
+close(F);
+
+check_file("farbage", "a6449c61db5b0645c0693b7560b77a60");
+
+$td->runtest("run driver",
+ {$td->COMMAND => "flate farbage"},,
+ {$td->STRING => "bytes written to o3: 100010\ndone\n",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+check_file("farbage", "a6449c61db5b0645c0693b7560b77a60");
+
+$td->runtest("compressed file correct",
+ {$td->FILE => "farbage.1"},
+ {$td->FILE => "compressed"});
+
+$td->runtest("uncompress filter works",
+ {$td->FILE => "farbage"},
+ {$td->FILE => "farbage.2"});
+
+$td->runtest("double filter works",
+ {$td->FILE => "farbage"},
+ {$td->FILE => "farbage.3"});
+
+cleanup();
+
+$td->report(6);
+
+sub cleanup
+{
+ system("rm -f farbage*");
+}
+
+sub check_file
+{
+ my ($file, $sum) = @_;
+ open(F, "<$file") or die "open $file";
+ my $md5 = new Digest::MD5;
+ $md5->addfile(*F);
+ close(F);
+ my $result = $md5->hexdigest;
+ $td->runtest("check $file",
+ {$td->STRING => "$result\n"},
+ {$td->STRING => "$sum\n"});
+}
diff --git a/libtests/qtest/flate/compressed b/libtests/qtest/flate/compressed
new file mode 100644
index 00000000..79b2da1b
--- /dev/null
+++ b/libtests/qtest/flate/compressed
Binary files differ
diff --git a/libtests/qtest/hex.test b/libtests/qtest/hex.test
new file mode 100644
index 00000000..32ec84b5
--- /dev/null
+++ b/libtests/qtest/hex.test
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("hex") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('hex');
+
+$td->runtest("decode",
+ {$td->COMMAND => "hex < hex.in"},
+ {$td->FILE => "binary.out",
+ $td->EXIT_STATUS => 0});
+
+$td->runtest("partial decode",
+ {$td->COMMAND => "echo '7a65726F203D203>' | hex"},
+ {$td->STRING => "zero = 0",
+ $td->EXIT_STATUS => 0});
+
+$td->report(2);
diff --git a/libtests/qtest/hex/binary.out b/libtests/qtest/hex/binary.out
new file mode 100644
index 00000000..f33a0b43
--- /dev/null
+++ b/libtests/qtest/hex/binary.out
Binary files differ
diff --git a/libtests/qtest/hex/hex.in b/libtests/qtest/hex/hex.in
new file mode 100644
index 00000000..9721a35a
--- /dev/null
+++ b/libtests/qtest/hex/hex.in
@@ -0,0 +1,70 @@
+45000028e20508074600002ce205080747000030e205080748000034e20
+5080749000038e20508074a00003ce20508074b000040e20508074c0000
+44e20508074d000048e20508074e00004ce20508074f000050e20508075
+0000054e205080751000058e20508075200005ce205080753000060e205
+080754000064e205080755000068e20508075600006ce20508075700007
+0e205080758000074e205080759000078e20508075a00005589e55383ec
+04e8000000005b81c3b44c01008b93f8ffffff85d27405e8de000000e83
+5060000e840070100585bc9c3ff3508e10508ff250ce1050800000000ff
+2510e105086800000000e9e0ffffffff2514e105086808000000e9d0fff
+fffff2518e105086810000000e9c0ffffffff251ce105086818000000e9
+b0ffffffff2520e105086820000000e9a0ffffffff2524e105086828000
+000e990ffffffff2528e105086830000000e980ffffffff252ce1050868
+38000000e970ffffffff2530e105086840000000e960ffffffff2534e10
+5086848000000e950ffffffff2538e105086850000000e940ffffffff25
+3ce105086858000000e930ffffffff2540e105086860000000e920fffff
+fff2544e105086868000000e910ffffffff2548e105086870000000e900
+ffffffff254ce105086878000000e9f0feffffff2550e10508688000000
+0e9e0feffffff2554e105086888000000e9d0feffffff2558e105086890
+000000e9c0feffffff255ce105086898000000e9b0feffffff2560e1050
+868a0000000e9a0feffffff2564e1050868a8000000e990feffffff2568
+e1050868b0000000e980feffffff256ce1050868b8000000e970fefffff
+f2570e1050868c0000000e960feffffff2574e1050868c8000000e950fe
+ffffff2578e1050868d0000000e940feffffff257ce1050868d8000000e
+930feffffff2580e1050868e0000000e920feffffff2584e1050868e800
+0000e910feffffff2588e1050868f0000000e900feffffff258ce105086
+8f8000000e9f0fdffffff2590e105086800010000e9e0fdffffff2594e1
+05086808010000e9d0fdffffff2598e105086810010000e9c0fdffffff2
+59ce105086818010000e9b0fdffffff25a0e105086820010000e9a0fdff
+ffff25a4e105086828010000e990fdffffff25a8e105086830010000e98
+0fdffffff25ace105086838010000e970fdffffff25b0e1050868400100
+00e960fdffffff25b4e105086848010000e950fdffffff25b8e10508685
+0010000e940fdffffff25bce105086858010000e930fdffffff25c0e105
+086860010000e920fdffffff25c4e105086868010000e910fdffffff25c
+8e105086870010000e900fdffffff25cce105086878010000e9f0fcffff
+FF25D0E105086880010000E9E0FCFFFFFF25D4E105086888010000E9D0F
+CFFFFFF25D8E105086890010000E9C0FCFFFFFF25DCE105086898010000
+E9B0FCFFFFFF25E0E1050868A0010000E9A0FCFFFFFF25E4E1050868A80
+10000E990FCFFFFFF25E8E1050868B0010000E980FCFFFFFF25ECE10508
+68B8010000E970FCFFFFFF25F0E1050868C0010000E960FCFFFFFF25F4E
+1050868C8010000E950FCFFFFFF25F8E1050868D0010000E940FCFFFFFF
+25FCE1050868D801 0000E930FCFFFFFF2500E2050868E0010000E920FCF
+FFFFF2504E2050868E8010000E910FCFFFFFF2508E2050868F0010000E9
+00FCFFFFFF250CE2050868F8010000E9F0FBFFFFFF2510E205086800020
+000E9E0FBFFFFFF2514E205086808020000E9D0FBFFFFFF2518E2050868
+10020000E9C0FBFFFFFF251CE205086818020000E9B0FBFFFFFF2520E20
+5086820020000E9A0FBFFFFFF2524E205086828020000E990FBFFFFFF25
+28E2050 8683 0020000E980FBFFFFFF252CE205086838020000E970FBFFF
+FFF2530E205086840020000E960FBFFFFFF2534E205086848020000E950
+FBFFFFFF2538E205086850020000E940FBFFFFFF253CE20508685802000
+0E930FBFFFFFF2540E205086860020000E920FBFFFFFF2544E205086868
+020000E910FBFFFFFF2548E205086870020000E900FBFFFFFF254CE2050
+86878020000E9F0FAFFFFFF2550E205086880020000E9E0FAFFFFFF2554
+e205086888020000e9d0faffffff2558e205086890020000e9c0fafffff
+f255ce205086898020000e9b0faffffff2560e2050868a0020000e9a0fa
+ffffff2564e2050868a8020000e990faffffff2568e2050868b0020000e
+980faffffff256ce2050868b8020000e970faffffff2570e2050868c002
+0000e960faffffff2574e2050868c8020000e950faffffff2578e205086
+8d0020000e940faffff00000000000000000000000031ed5e89e183e4f0
+50545268009b050868109b0508515668f0e60408e893fbfffff49090909
+0909090909090909090905589e583ec08803dc8e3050800740ceb1c83c0
+04a388e20508ffd2a188e205088b1085d275ebc605c8e3050801c9c3905
+589e583ec08a110e0050885c07412b80000000085c07409c7042410e005
+08ffd0c9c3909090909090909090909090905589e583ec188b45088b4d0
+c8b50048b00894c2408c744240c0000000089542404890424e897fe0000
+c9c3908d7426005589e583ec08891c248b5d0c897424048b75088b4b048
+b56048b06330331d131d209c1751a8b4b088b46088b5b0c8b560c31c831
+da09d00f94c089c283e2018b1c2489d08b74240489ec5dc38d742600a12
+0e505085589e585c075088b4508a320e505085dc38d76008dbc27000000
+00a120e505085589e585c0750da124e5050883c001a324e505085dc3908
+d7426005584c089e5740cc705>trailing farbage
diff --git a/libtests/qtest/lzw.test b/libtests/qtest/lzw.test
new file mode 100644
index 00000000..abb412d4
--- /dev/null
+++ b/libtests/qtest/lzw.test
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("lzw") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('lzw');
+
+$td->runtest("decode",
+ {$td->COMMAND => "lzw < lzw1.in"},
+ {$td->FILE => "lzw1.out",
+ $td->EXIT_STATUS => 0});
+
+$td->report(1);
diff --git a/libtests/qtest/lzw/lzw1.in b/libtests/qtest/lzw/lzw1.in
new file mode 100644
index 00000000..d95d596c
--- /dev/null
+++ b/libtests/qtest/lzw/lzw1.in
Binary files differ
diff --git a/libtests/qtest/lzw/lzw1.out b/libtests/qtest/lzw/lzw1.out
new file mode 100644
index 00000000..21b5a277
--- /dev/null
+++ b/libtests/qtest/lzw/lzw1.out
@@ -0,0 +1,4299 @@
+This is a test to see if I can use libtiff to get lzw.
+wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+Let's make something very long.
+
+FK;؍k'imrqvNT"
+
+񍞫JmPvх^0, aB<Em&6fy캸Dz|;pitT,<tez0 @Y&\7rz WkI!JqtٖM5m\_C%+喬dphэ#tWvk;NwݱuvN݅7:wHؒ?kv81εwRkVz٬]mu]OΏvGZiTqٖ[ڽϓCA_׊IQ9܈kM(Wʨݼ ZQy+9o FI-lKk Q{[yKϷ%_nBT&mlE<.]Ln 7!TooE}#d.oK iSZŠ^XD2:e??g5oRF.z\'pIL]Ϟ_wZ!z]ƇLu?Kje9Bo^?JZeFbzH8/*O;[ZL $tH36WGqAmzk@wx&?d2 GD<7>1_X4̑_g'0m;bDG?GQ1ZgGOe0?}PB@ƞɗŧ~x3D{ZH[/DEa^ʥ7e._}ۿgu$_Ei^*tW%&@HK#M!,<zYF8
+WL8p6=y\y%zH@,aIP;C"%!:~Dp tCB{!-_~I VBOݷ7`އxhvu6hYDdž F8\reU1~ըHl
+LMr%A]vT? !xcY0<^Mή!a%7ˑK&ikL@ٕ1 G!+B@^bac yqTK擡% YJM'EMа0Lp#J>ѲY
+'j^Bo 7#p]*N
+~mA=th-{,!)
+3 f\20U2G1zOS$<.ةgP=2wp^y O?67r$+ eIz!=ѧY
+ П˩=O"
+RRdZ
+B̌1
+A`8]t"K$lRpS% T,ž
+v]䋻܆zj{VMTH\t
+5Eg=k- ϕsȕ
+Z.LrTmh
+ "H v4N AeV@D>>᪞ 5VEm 8W|*PAŻЩn> ^e K&X/|*oR
+آkv^=[kad60cfd2(Vh^*vv#;_h"u|?`
+q^shrڏ[?
+YfFŒ8e'-DHPK_j1~-@֋/ 1ܙgqK⌦|n0}hqF#4,[
+/ b<>K8Y}[f]@rESب{i7&eߢ尓rJ%^: ;煜tbz%gJJрSfl40|[p15YF1
+qm5Sv) n'OVl) X0q*`M_4%x-8yYboC/\
+2~-@ v5-a<AP'1Kv3A~yNE! хpB:rM|1}zm-2)gkJ Ԅ/?60Wi(nNT\()|5[5?8njN3/iG =kn'srRB@2&:Β!3&~FXK;wjU
+$y~$Zy+6Sʂ㺃ES-^w1
+b^kF3<ow2\4[ӡI2swvo:!e5*tϧ\7hC X:
+ Jg[ #Z}n"\
+vqrL!7#v{0x >YHApu~Q_Fp"ʛp2a }飼DE9/`x?kkaUߐM!_јl vkPP^Ds?[%YVabZ$+N3-5hYd Cvd-̟a.Sk^nγ[5%a<+]E*``㒽(0Nd$|VCۻ7PL!|*#.dF:9exuRs=R7WE%&%
+з m簊o?*+װymY5u6A&7茖FD TYca؆CD?i(g̡G%sՄ ׳c&sFX,S9ڷVY_Є2!Kb8Iy }5o:W[ֆ%S we\Zg+y61_B'&%XgݜoY2]e-(Z[Ǔ
+icߢyi 7cni^p6Y$Ga{>=h}s,KۆLeDa() E d@K N
+"Fxf\R2\B< օ ]TLťE `#ӎٝ->ysXNA*$ k{dWH{Ӌ{d[H 7Шu )2e9|?;Sr=4*2ۢZ3vLx?/_0^(}ꢡiYtQB0$SVnլ2{,?yZ;~Ӡk0S
+:^|b튝sdEdv&h_k @˼rfw&[7.sJ(_?8 U9kKo;':'G'o
+Q6xsCgp_N vt]]rsPlJո>K͕{Y]a=@|c7)4yΘg4%:!Cf ͤwU_
+Q2S jҳ˙<NUm^)k6I'2]&*CRrDYfrQA݌4SWtK}4T٧dRS XjW 뙺:cjKxelR_W0v\1t.,uGaڕ`FF
+ q8
+싔:]Tx{S 3ȨrP2V*ui`QJPr02|·~@hohn0!bDΎ1V,)O&CAyv"jfF>УY1szg}~^xb@9Q-<rB,=SGjBN8OniW퍧sl6>9_6?Y4_W&Laٜo8X.͖$`NrR|'1_9xJz='
+#e S,:~5痷G=zU,*N>I<,Fn,m>+^B7" ^U+M귰 *3*Q6Qq K U$NTvHdR4C8M,K%(8PttdBbU~h8hw-wl
+$7NJ(tD׫CT i6@uxD]>`]Y;S3ؠ LlF(
+2zꀊ(oOׯ E F4շ% H!ݐw2"0qaĪ6`hhopLu +G"jsES^|"숒n9gJR:ԴBq`Ĕ(e2 <Dz(s83a995
+Ki[_ߏiCKxQ{\I'ݒә\Y?%Q$%-sW!͝\C*-]Vy
+k`Xݩ!va{E>_4qi2Ā }\+jA h-}t3ވ.7{ɚm%wjw4EO1[]82+3Dzec!_N7ETc u~\e%wj!K I
+l,uKNaZn5J(\D" 8 q]֛qeT
+d,iܝ/ȸ2RFKyNkX-5GIe D[hZ^3\vxaPw|LJzp5~Ce42ӈц 4Jja9y- @KGQZ)/r]ԺͻF{!`O!۳-Z|Sσע~Y3Xm^WqVn=S7KD˯}:n;ѡ#nצn[Ry_(@O*=iG\7G>r>p JN:{{?[ f"t[
+ Dmm3~7)N"A{ֳS=$('/`?ú`<@zw__c.Qtĉ[K4hwSxȈ/"`:v0sN=ubcv:
+0(
+‘+C·&P8ϸ:Ne*OS![Y:2z-}wWO]h p ROBq-8}Y}DZ^Ą!k+*uG?58/snZ?xU@)㋸'%'t(!L9 $qfsX0JE#sOnVA0z!N2Xkα(`?-Dbեn|D28@(4Y,BU"L. NxF8u]EOu=kvD-} BwLlnԣ{##/; PNLj䓸]-~0gV0I\ 97}^ZΨpk/4?E|[lHX*4oiA9#O: }v jwl 6-?- 6kU@NHdJ<i*2DffhqMLۓD"*U>B'P)lw[İMQ
+_WI_KvKt5vW9qЏϩ 4}VE ;.ZKS<=D{Pzr@Lno͈X7ȫ6a8Sd0I i BƗeѽʟ z؏@#Hĵp(om38+7>mÁz
+Ҵdd
+m@C˙P {u1AQXl*UP: =|g(kM؋ >?|PV}NA4Ҿ",yB},tVKռjd. 窒}M&FOvOm;<9%i7Ajz&|jn6u<L? ^ _𴦅<F]+ޞ8/qv g]4{8 'zbI<-e;An _̖cPvXwr:&tsktP6(>1&;K 6`vXُf$+xH{P'L|dXvPP)! :1!67i?YWF&hp9Z6HA@Eq(o"CO[%5YEX^NhTRh|x9CdBiv+t)/)ocA;nHO$l)_^Y dH@3]*}m &7 
+[R M:MecRzP-mh 5` W0A.[֒?݌zX&p&Vf`^
+oas<e\U \]0 ERR!rS8^@@2S) -'mٿ'Cj\)$z
+1V
+Kdsl"Rw5ʩW.~v:z>E<<V$]oYRo 3|M-K2Y"(E3CN>\~74UOx -o 10^s]. a [3v~6@=̅8u`9RUɶ*Lܫriev ƴR>S6]}]q1RB֬W ~zv%,/gSŸٵ-i0եO)lt뫉{ sd\Ga=s.=k9ɾND{qwY#qBi* eVW{O[uwW㯖#ٔ,hMEf? mI3<BdW[5WWkHi4Ǣ&α:Bss5#̉!
+斎IY?`Hexq8茄o -l:h-e-g% aRe],V]i-ppuYɸW0 _+xR3E7G:IjyY/Ge`N/hba׈/YQ Mi=˽!Š1Kd2W6I1
+$-+jjFԳD4m!PoœF7G&gTcúIr-_{'ʊN? F+2'i5\@K
+Gu!lɨ'iRnT2mBGTTQ YYI>0k
+':}iMzd=BXLM<0i<՟:WDНv ڛgކC<OY Pd*lTzeQ0'xڞtMJ:OvE}Ak. ^iG`j h[N٧=Dɸax;3yZ\70 djV~MĤcC.LrK*Iek 8^Q%aiezZڛ໕[bi
+=%T1w/7,Ib104Nj4I !O[0
+']55ooD8:ށp@j㟏N=!e.SMTcAe7hJ|bp]U/LYfuM
+ɚm>ֹdRS.C
+)h2Z3Wy3
+C]7,a8pm\
+qzBBa*E &h G/EpPtF1f>p O<䆁+8
+ #Qk Q#X(Idl狟1温^0~{Tً{܇<nd_ 'ЯO@_w1u~GϹ6֯UD@fc
+ EizjG&zu^@k]1RH"y*&|IA{rFþ:'X-iKbDu*Th5UE`iI(-  ?e$U-[L/lGclgCb*!lv9e;)clvF\۸lJ8h2:egLT{2߉2=<kRcD Q* E"e3(~ٞWwr,=ϙp%Ra&jAS;W< h3g,l`聧
+y1HMW#Sv^nWĀvB *PhصaۮYUN[ g! p\<1@qRi^n$'0YtH\-|:~LDIӇ\g6Iad"l(WS&']xPT[gwE8Za7
+_oCt a#7u1Eg,eXZX1*"o K[D~I!5EKvs%jrbX٦u.(qhJ"(_1dùh7uZ^Vkr+UZ 3gjTlh3KJ
+,PkAo\z|׎O:K=D
+B3OsO]⣟4IPρ+w]y3O*$
+g-n?m>g͇m|7wB.;U )x4|i$ 
+1k4C0Dp CsE.Iz 7 ̔'jXb/G|뾷_d7U-R@HqyCԋ87
+/7~FFzzqLz%W%a%\'*[Ly!%YI;`W  3ͫl7\з*1DA>
+S[5%-dc) BU(.) RSx߿↥p/g/B'N,u'SGz(
+4f%"C@ʛŸŸ> eӂV:F
+ρAJNV5\~
+Ǫ`ZxT؁^a 4(ഄ:v[.T_Vʥ^1Bhxp'vd=
+&!Z*P[n&8OJ]b^?ɀC&F D
+ uDrM/z
+"~Ugs{bvjP;#Y&]![=Cz'1+.C31SΒArmXf1'b@HW6!RU0v/9A
+j4qZ WaLFEyvgAtn_/~S]z. /e7_h?J]u`Yd~ބp3a 77&E<{Týjߖd6I|N9J=;oѡ&&_c 9{}~
+oqnwm%:h2JƓ~*AvZ rni`d
+/Ņ.v19mNVX`8Sڷjq^FuV=w6K%PMPxCk;c,\üa۔EO͢F9ͧ6m<yXv!nXf^W4U8(i/ ~(y. J {fNZEDVQn+^C nA_6!G=zUMgil֭QI~՞ g+LR8NEtEX+L ѱT-REDl 5?o'GDNk}h6(7Üx'! ~}˦;5vkuQUi^LEHud :Ȫ/#pOoea
+66#Ct9rZzvbNWc+ҨzE/E Brk{^ h
+OeJ—Č*JDHga4C`E\@#=+Zo( !((ck5Wه:1=.v՜Zkܱ.g q^ ̮lytj=DR%LHm SvHЭI`V{OV#&XyEf8+yAC Y@ZlLA؏LU Jڧ:+]2#T(/a:֖ukqw>0tTهGuru.+P zy&qmccznc7 $sXTf>)͕䴐6Uo+֋컒 sDX,4>G}S%lX%hhnTl ũԖUyK
+F)b$@]_ag{2˘Y
++nN0 Ltm_z% 'SiZq}Z$?2yTN񚭝v۴iɔih4vZP֧zQZq4{ӠT4|!oNQj+5IռƂ)] 59|5#;hlZd;b
+R \f
+ Jv5a1rxţ̢! K؇@C|Ls>]ߩ
+JĀ!nޖ&v('\oVAX#nC
+"i\5x{ʙ%ˍEmpjeL HgeH%o}Fjvl R9 3m>jڷ
+vߝT-uu]GZ,Xoy(7JiUռYcr;g6 EK]E 1ڲ}^4) bg<<w_C v},RW#ӻLpjq5 dp]Z&T\3l uǭ2okH DR۷]M/,<amchx< \2V.9sCOьնPaxYGT$̐&(; ˖٤.!(Cjښ v]pJ5 ^3"8a*F)2tִF8lr{Y63 k%!
+LȌLP"Bdlр%v͘P^'GhwD
+$L(Lg9:ؔylQ3~lmC=QDMAWÒ.5d7?@.l`^^RZhjOGlRHc[d{ޕFW>xɧ)jJh nb%?zrK<ElO9l~(xPogQoW@]z
+PWmzTxXɈ2e7q\ .}
+ =󋶔 a
+-1K!s9\qpt~:| c0YC,#]$@$sٯZU&x)A-P5=W\?[~=la%ZmЙƜ$'KVնń8[;A -LmM ڒV%/ElWk.
+X
+|O
+)Zv0KW!%@:0S!}
+k5֨.deU9bUk^a\Ά4,4@f7r݈mXvGǬ--PLa2ɗ&]?]lӇ"^gj8vD +6}`M/~x2Lĭh(]2YͿ
+V;_87
+ *)voOgAy.P( -FG9Ǣnji9Lj耼uSP.r`U;U XCsP6=Mg޲eq-`$Zee|/weF[8, pp$8:˲<9ϼfkxUl
+/+
+bTVFH+` h iMY,c<\ |Yezo1Pޑwh-
+{UALz'h-+(]r̺&cQCX_ۉzzWWVhKEAWvp \3riatfҭ?&Q>="o}d*5^Ype\Vљdrw<ةZ<n7FB}\#Cigx _7r*EHhJ4|m, @Q*$UK;J%O`^T CN'cj`DCH@2L:%RLZ~2;,
+Uq"i[zn+wYAԡ EL9{p]xlf,&'CqTPG2o;pd3%0'EV 6]47ː.W@lU6z+Qv#aꆣc=@pa hm**sĘ=N|C43$c9>}PX1h
+JCI' 0#zvΫ^1/e.s$U\Fwuƭkluٯ΅u<H KZ?@2nڢPXrU_l\ 3zj7l1Ң\?6@~l4`mI )u]Ɯ,3~ɖ`T
+`X%vG02K62-Kbrm Q,
+h~m# 9M"$% ׯ{s5V!%~?;{!0d#:W9Nq*nn>h>!iK촳ۨɱP̦q`@r2o8lPWv ;u]E?sxʎ:{
+3drN;.l~Aɀ]4>Պ)V삽:V `1 h}7mY'X͝r9?gf 2,wЉR
+rЩR @t,#&+`k%ڌySnDr);:Αow+7C` *rT<9V50skSS?Po7ihC3bYOrvgYNI&A!eeORa3U&Y}|_.R$R;*HEDc.E5W aT"3H$#Ͳ$q4g0KKL
+t ?,YH˔qe(|4#3 neba3^_͛m*b%s:9E3>Ga7
+1/ȹ1fYbXٛ+acfFb& ala7]WpmQ .)[IU=|SEKn}!B4ț$(ū$@E$b"O&Bʸy 'uB˚J A"`b%
+/&ITX~*-Y@t-y.voz|摳/py/!Z8fU(!
+F . ȡZ1 V IQŌ.,j
+rthYfm?67o&noMj7[gofy\dG>h}s{m t'+K c{:/Ƭ֭Zlë/M1KḀ@ԥ@B$: I'1̹xg+(:C
+ Cϸ96ǟ b<m=yruu'Ou%]
+u޲ja= prI ?7=sDro6O$(^rG}wtzėQ/L-N'
+G?r{sw IBY9# gY@ C~5MLX2 {ˠaGqR,9ʤ Z@+d+p NcH{
+6xETY1Ó'Kne805<m{ :'o޽=='Q
+6cST28jR3&̳s,t5dU ;(9 p"UlVCLTY֜<EˈI`V2
+b
+ Ue`n1_+JN'J
+"Ϫq2C}d]m+V)*zˊ;lb#_:
+-HkQ!`|fg73*$of+WfUo]nJKSTשnnZi0IJ3͌Wv9ԤF$s[zj6Oop{sr,r_UF}͓st
+f\tEP&mF>sbۿ'xHE a02wI 冤@ V
+C l[H`U6xpR { t\@yc
+4_nN?g֨'׀4̲6Ʈz݀Whr
+#|oJ>*4up3ʷ-
+3:Ɠ
+AKKR?uNnIQЩh6 yXnkITѽ4gZQ>i0>҉ _Sm g(%<cJYm𼐛ڄ f0rϙ;63;͓>a <zXAuQxrvW7W( fՋ;|ZDڒy֒' U!ĥhpgŜԏFN9&bbC}}zG*eO ʊE21הgC3 ,>wIY(Gg^'qc^l,>WΦg:{ל
+i0EI1Y|I7#6 sTc&RHR?t?ڭ͍Y?fQypPk/|[ 8CA_oX8 fg`Ņ^Ql*A RGp]njN1mWL*D (\υ`\$IB
+ɶxVFyvVWQ@}ꀒ2f/ % <@Uh$cЈ`KQb妑Fo/2Iģrݩ
+u֭tR |ͿC++B# XO:UDgs.Ԉ64a5! ]I <8>^2)UC 񺗝$S=悗3,^cXpt!2h 0 2룠3M kޖ=O%8\wѝ~vI`a)?3Vq UR-Yt*N^Voϻ\1 \dPLBs)ըvU1Yya-r֖yԀ]}NTkoGj-npՁ1SA;Bnʢt)?[I|.$]8'F
+buOh1,aj8QY,ff ~WXx<ZdByBJkZ·HiZֈTdQ60]4_e9Ejbܤvi^ٓݣ)z'Z{T[:46uOs6Vj(gŠ\3H(<jfPM$w9OY=L laZE^~PO\d`x@9@[GZ<\J8<&S #.%?+51]1Jbadx[awҪTֳ*o[-=><QIqF҃E= ,FƱJ/(
+ϠR2*V T;&BנU7RP~;;O~l=+dBP@1xYQ ĺ:vTFP#HbV|l#f/f!Ux[##L6n uB),D?L`[Dƌl#7|M=}pׇ_jc8w&7ۛy8Y)Čg'o8݉
+enܙp&JWݓY
+( ,QRw
+mUZG=@9M/8LXpxX@d`ɢo K" i*[
+ׯk&3$?/ lu5X賳]}p-k@x-k4~XĀPqp1#5-ʧPebx:3s%%=3$5e֪)Zx%jZ0e3&-S nf]Au6kGW- Up[,!伨uc_{"ףttQjE~҇2cX\mq!}4tu3N)Ң=5#;.27t+de9ɁiXT&v/}OBI)p^ lҏZ++x@琐.^3 Iihu*7c/-O2ŭz!@-1i>lSσjWA=꼞Kd[֫S*}r]Se S82c*ϮUdX${0k٢Kki Uv[h֎3c?¢~V@Bu|jzEo
+gN
+^msE_|R79>t!¡"UHܛ0 WLf¿&j[FJ.x_9M.~QȋZm onm5,·1l{1Sewhڽ XN= س>NouZv
+w#B~{Gχ]nv~/w鲀]p&Kʶ0ujwwzSto>xji=|v~0K
+
+La As%Fgl2LeQ uva
+ _^!cP~jU&\ :?IKA.bpْ D4d{n駏# ='v\q'WȳܺWXRv},HɰgߙA^)n"MS>^B5@/zT0IDBR| ~{s׻?ZФ'U5Bw'_ߝ@c_ ;'P>¼y8Zi.N5j ׹_"?/?ryZF\RRq#{EL>lCN wh_N
+B4co<ߊAgUOG?OQuݽr]J*Ay9w*C|{2`O[a㹀T}7\Z!|0nŜ@uI{$ pS|U
+᙮Ȉ'mwOo _wj. *qtG})Wˋ T62u`g\?p~p)?}^H?1Ibrk-5Ԡ CŒe"4M+*\WN_)E+6(B:RC '8&Ѱg呃bԑ4^@vAPR_ 39|)%t$Bnqa?|eЭS0iDqyuT
+BL9#C$;akpo~[ڃ{}(}䦽dX?5]N}̟Nv]sO=ͧo_{nA 4Μz RNCʉ\Lb6 (_AR3G"
+'/./^^]pA1C7Y]Mj^ZbJ65b/t NH8SzoWvK ̶^ヲ> ?L̪uheO9Ţa]3
+CMcF8v9sW$!:
+3N#WooYs!Sl!M|$ #{2g`310)D2
+ÏOFS<&]AIǸ<¼r~F; !G"Ϻ/E/^5kVo D,0R}+c'-PZ&yW(vmQ>B~Yc' -}%ަ8yHŶya M~`Lx&swшbhG|Tk#v##Hw Ca^wK`4"`Pd-q iLgvhXtӊ3DD:[{ rD> i!H=UCsncP DZAĖLƐHL|@2f2‘td4;?R,9 &D킂Kn[iht`7x)
+&I !Z
+UUJf k+{8QL"Y0Gͯp:y{Es^6%dAj(»c(̠,Av۩VSaXHr$m0wC714&Jrݛz1P)z&Pn)*FrT_Wz腃hΑhq W㭇 |6/63*/3
+{q :!o֒'(L:|Ca@ (W5p3J'ExXR8WA41Ǒ Ć
+ +iQ3*׵)vOoJeFcw\ka}RjGgD;7s.;U2)ṵsD%yjN@f]sr_KW-yfNM"$pH|MRTdqS 
+34\
+$M/KEX9ܦ.ypeE"b eyCm P됢O]D5gOtF͋x9k0v_Zc-n g䴫c?.TԺ#^",dGաz*bIiu~[SwSmjSffl!-ҒL|{7=<{{D{ӏv C:3 mKp<4OBѣ%ϢG/3ֱ"/:yY1 U͐fM4g*=xvr[ѯ+'D'h虤.252"Ϛ"v[F[ 8Âx"mFQ[P>t_!S4?ŬyU9ua&Y
+1QRFjzl( CCzף+
+P.=zNUgӔh]1C> m=Y!k_v ?W[i|MrxıoXVzV˲QcQ '>'3~蓇74JJ2HQ5e~dZY&:|tYD.6Jk~˄0Mnq_w3ˎ:$ BDQgP1΍Y';²7gO^)s%4 / s*HzV$8evOtfRqIs%dV>^*n`8F9)dۢۡ>a)xe?96ʃ;7
+(F0'$RpMt"P5RAg/o&̈́mAtMx{-({HgS(dʲnL'.kΌu-1;,6[nYhvX
+R^e4 :_m2<6̄`qC
+iz [#n)]*kp՜AL3:">GiyJEM=CXQv| k&.mZW5фn dӃecy7R`2]?߼`? kΦ~▅
+B;J>u)o#IraV u@yBš1h5|raI#yxßaO}q~N5._ti[!}[ S}w{!I)UAkW{eh=o76y쫹&{{|TxmU:
+? >^}vQݫWh*'y֗D؊ owQ~A/sq[Qe<H!YabFEk% R'Ǿ}r
+$7]VpBQ8z\wC‹@\S` 1U2h )_D[ /l>E:_az 8v3` ' ;|fV]4wA"]_" z
+YȘL3,O 9X2褱ouIY84
+p(6N}3D Vno!*@DLU &Hiȇp-`ox÷/li}O͵SHxz<k7{o_=A&{ l1ntv_fGc9jO?iU?4
++=O~Al'YNC!j4BH'ow9ZTA}Q YJbS-e÷'?q⟦ū;F3 8@N<(=Yb*&E:w
+rNaջ]zC
+ĩT.k02k <6]`
+<!X
+@S1&'IBlh
+._
+mPeP?z.~(٘~~ +Q>NzTEӠLPY~\
+;2s֜LjصX ףݚ9bV𨽾6~.x9LgAb n- YAnz}~_ec/ M`8@Q\$CrhB2`]JxF:cn?<{j_^E5_S$^~/
+v}mK (nɰ"ѩuÄd
+50'yж Ur{jS2y;\n~JFl]B9_Qgf
+|
+ɋ4.5wXjtM$u>oQlhش5*1Nj=vW #n,o<
+v3gÖXYh.B0H|ehY{DV xm>ॶݻ.nz Qi,2˩9tg?S%I¹#7YW.WsF?"]i `yQ|/4WI E.ǛdPv fDy2(Y#`vu~a5eBp )#F,\؏ V<D 3bA \ B]ErZ K2Lf&l
+F=ڐ$%&2 ⒳|
+: Ua
+YqBX#dYʉ].:^pվⳇ 6݄AcF!q!Zϰggi8֓x$Pb00߳&= ~tDH;
+lvpUD{qG0{ѺѺ&Ѻ1?ّHPP R,%]׮p#z_¨2dJ8%9CآAl &r‡
+YR[*;[b p5ͬ?&ҿ}`5)mgt`D3OK;U!*-ӚY\ !B"dW_t1IVr6M[kemja{4!64)N6T
+-pDgb{^Ad_p!{^x-WE(ڋ5RjYKj^Sj_%]]l/تD {Z(h<O4{:hrN ,v۹ebb]>Nj}_x\~n;r^h=Vj?h}l7=}}vuQY]_F0u 3;rEߊszxQ“B̕</B\i6)}R^Y:1H
+HoMTĵPJIR,4O
+ ;b+"[I1v4w-EVz/5? _#QzjLCpʔ?Oe64C5idN+ѧZ]Rdz^vKqc/?A.xY15ih!"O 0JmpW"y5~voKƧ)gE'Iat;r.m/Y&yUF~oUB~󎰃-U9̿MyK 1aeClK(glu|Ηh츳BU#nifB9<vuY2SejiW>Q픦9臞Il^l3OʔJX%1.:l><fj8߫/6e慛;KzliV0fNst4qtK<+8Sbܔ}-Y%ϷBU.Q L4߾T]O Lvyg%*_^hٍJm9$@~w0&}Uiw/}d$+fnjq^[ωmsa5ԋLO̴s 7*73m㔯Sr7ۛ:kڼ-|k?! ΜU6\z.s1*2a]r X8IT_8hJ9}gW*ٱuhLBX}2{1y<'#
+M5N\{
+ Qa0uwk4/8>ʶmtx|qs3
+]寭a%Giˌi)P@HH4IzӇY4O1P>Ud:
+ aNq#x^`CkU0Sߋ`(`\z"
+GqUn~ȴ*&-Ȏ-VM laNZxx'JA-odЇx+v* dACeʗdFxKRѼC
+[,cTj"~ɓjw୆/eagK|4(,.!0dKʗe׾)' o5"[?wօlx. bw6xd:+;\bA)?߻t$l?o>o`O5YQJ\ d}#~=NvNN ox{k'dډ ;=MF!V<qC:7{>Ϧ0Xa
+z٫ { oe$H/d((2&v]7X m.cY3s~.3pO`\ԩyDA*>8|`*3^O(FN3\b4J5jovO~U/ۛFlr]sP@Rd,t`yn
+X"洋"FY\)\T|׿8l~חTܘS=Gj=K
+[&w y76g6
+
+'VwAO6vp[,+\2OE=BE0lC| $6dڷCUܽJq$/OF(,]hځ{Oe$t)b), 9Ol@| _HԚ"-d~(,S|S=4fzN<?#OZFC'%}L xԬ 35)xQ0)o} b?[dqM@z`ׂ!jFw*Rnko{2}bsΉݏZ>ɨcL JDK{5L:D+6Sy3zy$QH!5I+ښN q:ѐ8Q-_5j*J4O1V!x^Ҹ)1+jg 8{f-ɏEkfފw'.sƃȹPw呈$FM
+Tl>G} M)C*Ôͤ#xWqy j[jD3LZy)yGF%'CX; >չ[c KHiPmwg}dH{^
diff --git a/libtests/qtest/md5.test b/libtests/qtest/md5.test
new file mode 100644
index 00000000..4c0685cd
--- /dev/null
+++ b/libtests/qtest/md5.test
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("md5") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('md5');
+
+$td->runtest("md5",
+ {$td->COMMAND => "md5"},
+ {$td->FILE => "md5.out",
+ $td->EXIT_STATUS => 0});
+
+$td->report(1);
diff --git a/libtests/qtest/md5/md5.in b/libtests/qtest/md5/md5.in
new file mode 100644
index 00000000..408a68b4
--- /dev/null
+++ b/libtests/qtest/md5/md5.in
Binary files differ
diff --git a/libtests/qtest/md5/md5.out b/libtests/qtest/md5/md5.out
new file mode 100644
index 00000000..148b4e66
--- /dev/null
+++ b/libtests/qtest/md5/md5.out
@@ -0,0 +1,16 @@
+d41d8cd98f00b204e9800998ecf8427e
+0cc175b9c0f1b6a831c399e269772661
+900150983cd24fb0d6963f7d28e17f72
+f96b697d7cb7938d525a2f31aaf161d0
+c3fcd3d76192e4007dfb496cca67e13b
+d174ab98d277d9f5a5611c2c9f419d9f
+57edf4a22be3c955ac49da2e2107b67a
+5f4b4321873433daae578f85c72f9e74
+914b11f5990cf99f1161bfeb5865a4fc
+1
+1
+0
+0
+0
+5f4b4321873433daae578f85c72f9e74
+5f4b4321873433daae578f85c72f9e74
diff --git a/libtests/qtest/pcre.test b/libtests/qtest/pcre.test
new file mode 100644
index 00000000..cf0418da
--- /dev/null
+++ b/libtests/qtest/pcre.test
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("pcre") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('pcre');
+
+$td->runtest("PCRE",
+ {$td->COMMAND => "pcre"},
+ {$td->FILE => "pcre.out",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+chop(my $supported = `pcre --unicode-classes-supported`);
+if ($supported)
+{
+ $td->runtest("unicode character classes",
+ {$td->COMMAND => "pcre --unicode-classes"},
+ {$td->FILE => "pcre-unicode-classes.out",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+}
+else
+{
+ $td->runtest("unicode classes are not supported",
+ {$td->STRING => "1"},
+ {$td->STRING => "1"});
+}
+
+$td->report(2);
diff --git a/libtests/qtest/pcre/pcre-unicode-classes.out b/libtests/qtest/pcre/pcre-unicode-classes.out
new file mode 100644
index 00000000..443febc5
--- /dev/null
+++ b/libtests/qtest/pcre/pcre-unicode-classes.out
@@ -0,0 +1,2 @@
+no utf8: ab
+utf8: abπdefq
diff --git a/libtests/qtest/pcre/pcre.out b/libtests/qtest/pcre/pcre.out
new file mode 100644
index 00000000..27e94e64
--- /dev/null
+++ b/libtests/qtest/pcre/pcre.out
@@ -0,0 +1,68 @@
+PCRE error: compilation of a** failed at offset 2: nothing to repeat
+3
+key: value one two three
+0
+25
+key
+0
+3
+value one two three
+5
+19
+PCRE error: no match
+PCRE error: no match
+2
+aaa
+aaa
+--
+hello
+PCRE error: no match
+qqqcqqq: no match
+ab,c: 0: ab,c
+ab,c: 0: 0, 4
+ab,c: 1: ab,c
+ab,c: 1: 0, 4
+ab,c: 2: ab
+ab,c: 2: 0, 2
+ab,c: 3: b
+ab,c: 3: 1, 1
+ab,c: 4: c
+ab,c: 4: 3, 1
+ab: 0: ab
+ab: 0: 0, 2
+ab: 1: ab
+ab: 1: 0, 2
+ab: 2: ab
+ab: 2: 0, 2
+ab: 3: b
+ab: 3: 1, 1
+a: 0: a
+a: 0: 0, 1
+a: 1: a
+a: 1: 0, 1
+a: 2: a
+a: 2: 0, 1
+a,c: 0: a,c
+a,c: 0: 0, 3
+a,c: 1: a,c
+a,c: 1: 0, 3
+a,c: 2: a
+a,c: 2: 0, 1
+a,c: 3: no backref (getMatch)
+a,c: 3: no backref (getOffsetLength)
+a,c: 4: c
+a,c: 4: 2, 1
+c: 0: c
+c: 0: 0, 1
+c: 1: c
+c: 1: 0, 1
+c: 2: no backref (getMatch)
+c: 2: no backref (getOffsetLength)
+c: 3: no backref (getMatch)
+c: 3: no backref (getOffsetLength)
+c: 4: no backref (getMatch)
+c: 4: no backref (getOffsetLength)
+c: 5: c
+c: 5: 0, 1
+: 0:
+: 0: 0, 0
diff --git a/libtests/qtest/ph.test b/libtests/qtest/ph.test
new file mode 100644
index 00000000..8e70efd5
--- /dev/null
+++ b/libtests/qtest/ph.test
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("ph") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('ph');
+
+$td->runtest("PointerHolder",
+ {$td->COMMAND => "pointer_holder"},
+ {$td->FILE => "ph.out",
+ $td->EXIT_STATUS => 0});
+
+$td->report(1);
diff --git a/libtests/qtest/ph/ph.out b/libtests/qtest/ph/ph.out
new file mode 100644
index 00000000..37f63822
--- /dev/null
+++ b/libtests/qtest/ph/ph.out
@@ -0,0 +1,12 @@
+hello
+created Object, id 1
+created Object, id 2
+nulls equal
+destroyed Object, id 2
+equal okay
+less than okay
+created Object, id 3
+calling Object::hello for 1
+goodbye
+destroyed Object, id 3
+destroyed Object, id 1
diff --git a/libtests/qtest/png_filter.test b/libtests/qtest/png_filter.test
new file mode 100644
index 00000000..5b75a208
--- /dev/null
+++ b/libtests/qtest/png_filter.test
@@ -0,0 +1,63 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+use File::Copy;
+use Digest::MD5;
+
+chdir("png_filter") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('png_filter');
+
+cleanup();
+
+$td->runtest("decode columns = 4",
+ {$td->COMMAND => "png_filter decode in1 4"},
+ {$td->STRING => "done\n",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+$td->runtest("check output",
+ {$td->FILE => "out"},
+ {$td->FILE => "out1"});
+
+$td->runtest("decode columns = 5",
+ {$td->COMMAND => "png_filter decode in2 5"},
+ {$td->STRING => "done\n",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+$td->runtest("check output",
+ {$td->FILE => "out"},
+ {$td->FILE => "out2"});
+
+$td->runtest("encode columns = 4",
+ {$td->COMMAND => "png_filter encode out1 4"},
+ {$td->STRING => "done\n",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+$td->runtest("check output",
+ {$td->FILE => "out"},
+ {$td->FILE => "in1"});
+
+$td->runtest("encode columns = 5",
+ {$td->COMMAND => "png_filter encode out2 5"},
+ {$td->STRING => "done\n",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+$td->runtest("check output",
+ {$td->FILE => "out"},
+ {$td->FILE => "in2"});
+
+cleanup();
+
+$td->report(8);
+
+sub cleanup
+{
+ unlink "out";
+}
diff --git a/libtests/qtest/png_filter/in1 b/libtests/qtest/png_filter/in1
new file mode 100644
index 00000000..bb830eca
--- /dev/null
+++ b/libtests/qtest/png_filter/in1
Binary files differ
diff --git a/libtests/qtest/png_filter/in2 b/libtests/qtest/png_filter/in2
new file mode 100644
index 00000000..430a0740
--- /dev/null
+++ b/libtests/qtest/png_filter/in2
Binary files differ
diff --git a/libtests/qtest/png_filter/out1 b/libtests/qtest/png_filter/out1
new file mode 100644
index 00000000..5625f331
--- /dev/null
+++ b/libtests/qtest/png_filter/out1
Binary files differ
diff --git a/libtests/qtest/png_filter/out2 b/libtests/qtest/png_filter/out2
new file mode 100644
index 00000000..dad129df
--- /dev/null
+++ b/libtests/qtest/png_filter/out2
Binary files differ
diff --git a/libtests/qtest/qexc.test b/libtests/qtest/qexc.test
new file mode 100644
index 00000000..b8632b9b
--- /dev/null
+++ b/libtests/qtest/qexc.test
@@ -0,0 +1,32 @@
+#!/usr/bin/env perl
+
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("qexc") or die "chdir qexc failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('qexc');
+
+my @tests =
+ (['general exception', 2],
+ ['internal error', 3],
+ ['system exception', 2],
+ ['library exception', 3, "uncaught exception: .+\n"], # fails on VC7?
+ );
+
+for (my $i = 0; $i < scalar(@tests); ++$i)
+{
+ my $output = +((-f "test$i.out")
+ ? {$td->FILE => "test$i.out"}
+ : {$td->REGEXP => $tests[$i]->[2]});
+ $output->{$td->EXIT_STATUS} = $tests[$i]->[1];
+ $td->runtest($tests[$i]->[0],
+ {$td->COMMAND => "qexc $i"},
+ $output,
+ $td->NORMALIZE_NEWLINES);
+}
+
+$td->report(scalar(@tests));
diff --git a/libtests/qtest/qexc/test0.out b/libtests/qtest/qexc/test0.out
new file mode 100644
index 00000000..7a6dba88
--- /dev/null
+++ b/libtests/qtest/qexc/test0.out
@@ -0,0 +1,2 @@
+exception: general exception
+what: general exception
diff --git a/libtests/qtest/qexc/test1.out b/libtests/qtest/qexc/test1.out
new file mode 100644
index 00000000..cb18f40c
--- /dev/null
+++ b/libtests/qtest/qexc/test1.out
@@ -0,0 +1 @@
+uncaught exception: INTERNAL ERROR: internal error
diff --git a/libtests/qtest/qexc/test2.out b/libtests/qtest/qexc/test2.out
new file mode 100644
index 00000000..0f1994f7
--- /dev/null
+++ b/libtests/qtest/qexc/test2.out
@@ -0,0 +1,2 @@
+exception: doing something: Invalid argument
+what: doing something: Invalid argument
diff --git a/libtests/qtest/qutil.test b/libtests/qtest/qutil.test
new file mode 100644
index 00000000..e90692f8
--- /dev/null
+++ b/libtests/qtest/qutil.test
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("qutil") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('qutil');
+
+$td->runtest("QUtil",
+ {$td->COMMAND => "qutil"},
+ {$td->FILE => "qutil.out",
+ $td->EXIT_STATUS => 0});
+
+$td->report(1);
diff --git a/libtests/qtest/qutil/qutil.out b/libtests/qtest/qutil/qutil.out
new file mode 100644
index 00000000..f7af8903
--- /dev/null
+++ b/libtests/qtest/qutil/qutil.out
@@ -0,0 +1,30 @@
+16059
+0016059
+16059
+3.141590
+3.142
+1000.123000
+exception 1: INTERNAL ERROR: Util::int_to_string has been called with a padding value greater than its internal limit
+exception 2: INTERNAL ERROR: Util::int_to_string has been called with a padding value greater than its internal limit
+exception 3: INTERNAL ERROR: Util::int_to_string has been called with a padding value greater than its internal limit
+exception 4: INTERNAL ERROR: Util::double_to_string has been called with a number and a decimal places specification that would break an internal limit
+exception 5: INTERNAL ERROR: Util::double_to_string has been called with a number and a decimal places specification that would break an internal limit
+one
+7
+compare okay
+----
+before open
+exception: open file: No such file or directory
+----
+before fopen
+exception: fopen file: No such file or directory
+----
+IN_TESTSUITE: 1: 1
+HAGOOGAMAGOOGLE: 0
+----
+0x41 -> A
+0xf7 -> ÷
+0x3c0 -> π
+0x16059 -> f0 96 81 99
+0x7fffffff -> fd bf bf bf bf bf
+0x80000000: bounds error in QUtil::toUTF8
diff --git a/libtests/qtest/rc4.test b/libtests/qtest/rc4.test
new file mode 100644
index 00000000..0207317c
--- /dev/null
+++ b/libtests/qtest/rc4.test
@@ -0,0 +1,45 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+chdir("rc4") or die "chdir testdir failed: $!\n";
+
+require TestDriver;
+
+my $td = new TestDriver('RC4');
+
+cleanup();
+
+my @tests = ('0123456789abcdef',
+ '0123456789abcdef',
+ '0000000000000000',
+ 'ef012345',
+ '0123456789abcdef');
+
+my $n = 0;
+foreach my $key (@tests)
+{
+ ++$n;
+ $td->runtest("test $n",
+ {$td->COMMAND => "rc4 $key test$n.in tmp1-$n.out"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+ $td->runtest("check output",
+ {$td->FILE => "tmp1-$n.out"},
+ {$td->FILE => "test$n.out"});
+ $td->runtest("test $n reverse",
+ {$td->COMMAND => "rc4 $key test$n.out tmp2-$n.out"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+ $td->runtest("check output",
+ {$td->FILE => "tmp2-$n.out"},
+ {$td->FILE => "test$n.in"});
+}
+
+cleanup();
+
+$td->report(4 * scalar(@tests));
+
+sub cleanup
+{
+ system("rm -f tmp*-*");
+}
diff --git a/libtests/qtest/rc4/test1.in b/libtests/qtest/rc4/test1.in
new file mode 100644
index 00000000..be687ec3
--- /dev/null
+++ b/libtests/qtest/rc4/test1.in
@@ -0,0 +1 @@
+#Eg \ No newline at end of file
diff --git a/libtests/qtest/rc4/test1.out b/libtests/qtest/rc4/test1.out
new file mode 100644
index 00000000..0a8617e0
--- /dev/null
+++ b/libtests/qtest/rc4/test1.out
@@ -0,0 +1 @@
+uŖ \ No newline at end of file
diff --git a/libtests/qtest/rc4/test2.in b/libtests/qtest/rc4/test2.in
new file mode 100644
index 00000000..1b1cb4d4
--- /dev/null
+++ b/libtests/qtest/rc4/test2.in
Binary files differ
diff --git a/libtests/qtest/rc4/test2.out b/libtests/qtest/rc4/test2.out
new file mode 100644
index 00000000..9bdb590f
--- /dev/null
+++ b/libtests/qtest/rc4/test2.out
@@ -0,0 +1 @@
+tKy \ No newline at end of file
diff --git a/libtests/qtest/rc4/test3.in b/libtests/qtest/rc4/test3.in
new file mode 100644
index 00000000..1b1cb4d4
--- /dev/null
+++ b/libtests/qtest/rc4/test3.in
Binary files differ
diff --git a/libtests/qtest/rc4/test3.out b/libtests/qtest/rc4/test3.out
new file mode 100644
index 00000000..11f99ca8
--- /dev/null
+++ b/libtests/qtest/rc4/test3.out
@@ -0,0 +1 @@
+A7]: \ No newline at end of file
diff --git a/libtests/qtest/rc4/test4.in b/libtests/qtest/rc4/test4.in
new file mode 100644
index 00000000..cb43b5ce
--- /dev/null
+++ b/libtests/qtest/rc4/test4.in
Binary files differ
diff --git a/libtests/qtest/rc4/test4.out b/libtests/qtest/rc4/test4.out
new file mode 100644
index 00000000..1394b334
--- /dev/null
+++ b/libtests/qtest/rc4/test4.out
@@ -0,0 +1 @@
+֡A<8߽a \ No newline at end of file
diff --git a/libtests/qtest/rc4/test5.in b/libtests/qtest/rc4/test5.in
new file mode 100644
index 00000000..60e5cd06
--- /dev/null
+++ b/libtests/qtest/rc4/test5.in
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/libtests/qtest/rc4/test5.out b/libtests/qtest/rc4/test5.out
new file mode 100644
index 00000000..d64d1a49
--- /dev/null
+++ b/libtests/qtest/rc4/test5.out
Binary files differ
diff --git a/libtests/qutil.cc b/libtests/qutil.cc
new file mode 100644
index 00000000..3a1fc8aa
--- /dev/null
+++ b/libtests/qutil.cc
@@ -0,0 +1,199 @@
+
+#include <iostream>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <qpdf/QUtil.hh>
+
+#ifdef _WIN32
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+
+void string_conversion_test()
+{
+ std::cout << QUtil::int_to_string(16059) << std::endl
+ << QUtil::int_to_string(16059, 7) << std::endl
+ << QUtil::int_to_string(16059, -7) << std::endl
+ << QUtil::double_to_string(3.14159) << std::endl
+ << QUtil::double_to_string(3.14159, 3) << std::endl
+ << QUtil::double_to_string(1000.123, -1024) << std::endl;
+
+ try
+ {
+ // int_to_string bounds error
+ std::cout << QUtil::int_to_string(1, 50) << std::endl;
+ }
+ catch(QEXC::Internal &e)
+ {
+ std::cout << "exception 1: " << e.unparse() << std::endl;
+ }
+
+ try
+ {
+ // QUtil::int_to_string bounds error
+ std::cout << QUtil::int_to_string(1, -50) << std::endl;
+ }
+ catch(QEXC::Internal &e)
+ {
+ std::cout << "exception 2: " << e.unparse() << std::endl;
+ }
+
+ try
+ {
+ // QUtil::int_to_string bounds error
+ std::cout << QUtil::int_to_string(-1, 49) << std::endl;
+ }
+ catch(QEXC::Internal &e)
+ {
+ std::cout << "exception 3: " << e.unparse() << std::endl;
+ }
+
+
+ try
+ {
+ // QUtil::double_to_string bounds error
+ std::cout << QUtil::double_to_string(3.14159, 1024) << std::endl;
+ }
+ catch(QEXC::Internal &e)
+ {
+ std::cout << "exception 4: " << e.unparse() << std::endl;
+ }
+
+ try
+ {
+ // QUtil::double_to_string bounds error
+ std::cout << QUtil::double_to_string(1000.0, 95) << std::endl;
+ }
+ catch(QEXC::Internal &e)
+ {
+ std::cout << "exception 5: " << e.unparse() << std::endl;
+ }
+
+ std::string embedded_null = "one";
+ embedded_null += '\0';
+ embedded_null += "two";
+ std::cout << embedded_null.c_str() << std::endl;
+ std::cout << embedded_null.length() << std::endl;
+ char* tmp = QUtil::copy_string(embedded_null);
+ if (memcmp(tmp, embedded_null.c_str(), 7) == 0)
+ {
+ std::cout << "compare okay" << std::endl;
+ }
+ else
+ {
+ std::cout << "compare failed" << std::endl;
+ }
+ delete [] tmp;
+}
+
+void os_wrapper_test()
+{
+ int fd = -1;
+ try
+ {
+ std::cout << "before open" << std::endl;
+ fd = QUtil::os_wrapper("open file",
+ open("/this/file/does/not/exist", O_RDONLY));
+ std::cout << "after open" << std::endl;
+ (void) close(fd);
+ }
+ catch (QEXC::System& s)
+ {
+ std::cout << "exception: " << s.unparse() << std::endl;
+ }
+}
+
+void fopen_wrapper_test()
+{
+ FILE* f = 0;
+ try
+ {
+ std::cout << "before fopen" << std::endl;
+ f = QUtil::fopen_wrapper("fopen file",
+ fopen("/this/file/does/not/exist", "r"));
+ std::cout << "after fopen" << std::endl;
+ (void) fclose(f);
+ }
+ catch (QEXC::System& s)
+ {
+ std::cout << "exception: " << s.unparse() << std::endl;
+ }
+}
+
+void getenv_test()
+{
+ std::string val;
+ std::cout << "IN_TESTSUITE: " << QUtil::get_env("IN_TESTSUITE", &val)
+ << ": " << val << std::endl;
+ // Hopefully this environment variable is not defined.
+ std::cout << "HAGOOGAMAGOOGLE: " << QUtil::get_env("HAGOOGAMAGOOGLE")
+ << std::endl;
+}
+
+static void print_utf8(unsigned long val)
+{
+ char t[20];
+ sprintf(t, "%lx", val);
+ std::string result = QUtil::toUTF8(val);
+ std::cout << "0x" << t << " ->";
+ if (val < 0xfffe)
+ {
+ std::cout << " " << result;
+ }
+ else
+ {
+ // Emacs has trouble with utf-8 encoding files with characters
+ // outside the 16-bit portion, so just show the character
+ // values.
+ for (std::string::iterator iter = result.begin();
+ iter != result.end(); ++iter)
+ {
+ char t[3];
+ sprintf(t, "%02x", (unsigned char) (*iter));
+ std::cout << " " << t;
+ }
+ }
+ std::cout << std::endl;
+}
+
+void to_utf8_test()
+{
+ print_utf8(0x41UL);
+ print_utf8(0xF7UL);
+ print_utf8(0x3c0UL);
+ print_utf8(0x16059UL);
+ print_utf8(0x7fffffffUL);
+ try
+ {
+ print_utf8(0x80000000UL);
+ }
+ catch (QEXC::General& e)
+ {
+ std::cout << "0x80000000: " << e.what() << std::endl;
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ try
+ {
+ string_conversion_test();
+ std::cout << "----" << std::endl;
+ os_wrapper_test();
+ std::cout << "----" << std::endl;
+ fopen_wrapper_test();
+ std::cout << "----" << std::endl;
+ getenv_test();
+ std::cout << "----" << std::endl;
+ to_utf8_test();
+ }
+ catch (std::exception& e)
+ {
+ std::cout << "unexpected exception: " << e.what() << std::endl;
+ }
+
+ return 0;
+}
diff --git a/libtests/rc4.cc b/libtests/rc4.cc
new file mode 100644
index 00000000..34d779ad
--- /dev/null
+++ b/libtests/rc4.cc
@@ -0,0 +1,82 @@
+
+#include <qpdf/Pl_RC4.hh>
+#include <qpdf/Pl_StdioFile.hh>
+
+#include <stdio.h>
+#include <string.h>
+#include <iostream>
+#include <stdlib.h>
+
+#ifdef _WIN32
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+
+int main(int argc, char* argv[])
+{
+ if (argc != 4)
+ {
+ std::cerr << "Usage: rc4 hex-key infile outfile" << std::endl;
+ exit(2);
+ }
+
+ char* hexkey = argv[1];
+ char* infilename = argv[2];
+ char* outfilename = argv[3];
+ int hexkeylen = strlen(hexkey);
+ int keylen = hexkeylen / 2;
+ unsigned char* key = new unsigned char[keylen + 1];
+ key[keylen] = '\0';
+
+ FILE* infile = fopen(infilename, "rb");
+ if (infile == 0)
+ {
+ std::cerr << "can't open " << infilename << std::endl;
+ exit(2);
+ }
+
+ for (unsigned int i = 0; i < strlen(hexkey); i += 2)
+ {
+ char t[3];
+ t[0] = hexkey[i];
+ t[1] = hexkey[i + 1];
+ t[2] = '\0';
+
+ long val = strtol(t, 0, 16);
+ key[i/2] = (unsigned char) val;
+ }
+
+ FILE* outfile = fopen(outfilename, "wb");
+ if (outfile == 0)
+ {
+ std::cerr << "can't open " << outfilename << std::endl;
+ exit(2);
+ }
+ Pl_StdioFile* out = new Pl_StdioFile("stdout", outfile);
+ // Use a small buffer size (64) for testing
+ Pl_RC4* rc4 = new Pl_RC4("rc4", out, key, keylen, 64);
+ delete [] key;
+
+ // 64 < buffer size < 512, buffer_size is not a power of 2 for testing
+ unsigned char buf[100];
+ bool done = false;
+ while (! done)
+ {
+ int len = fread(buf, 1, sizeof(buf), infile);
+ if (len <= 0)
+ {
+ done = true;
+ }
+ else
+ {
+ rc4->write(buf, len);
+ }
+ }
+ rc4->finish();
+ delete rc4;
+ delete out;
+ fclose(infile);
+ fclose(outfile);
+ return 0;
+}