aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/request_controller_spec.rb15
-rw-r--r--spec/controllers/user_controller_spec.rb4
-rw-r--r--spec/fixtures/files/incoming-request-pdf-attachment.email543
-rw-r--r--spec/models/foi_attachment_spec.rb36
-rw-r--r--spec/spec_helper.rb9
5 files changed, 598 insertions, 9 deletions
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index 4994c2a8f..2bf45e914 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -158,6 +158,15 @@ describe RequestController, "when showing one request" do
response.should have_text(/Second hello/)
end
+ it "should generate valid HTML verson of PDF attachments " do
+ ir = info_requests(:fancy_dog_request)
+ receive_incoming_mail('incoming-request-pdf-attachment.email', ir.incoming_email)
+ ir.reload
+ get :get_attachment_as_html, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2, :file_name => ['fs_50379341.pdf.html'], :skip_cache => 1
+ response.content_type.should == "text/html"
+ response.should have_text(/Walberswick Parish Council/)
+ end
+
it "should not cause a reparsing of the raw email, even when the result would be a 404 " do
ir = info_requests(:fancy_dog_request)
receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)
@@ -287,7 +296,7 @@ describe RequestController, "when showing one request" do
old_path = assigns[:url_path]
response.location.should have_text(/#{assigns[:url_path]}$/)
zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", old_path)) { |zipfile|
- zipfile.count.should == 2
+ zipfile.count.should == 1 # just the message
}
receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)
get :download_entire_request, :url_title => title
@@ -295,14 +304,14 @@ describe RequestController, "when showing one request" do
old_path = assigns[:url_path]
response.location.should have_text(/#{assigns[:url_path]}$/)
zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", old_path)) { |zipfile|
- zipfile.count.should == 2
+ zipfile.count.should == 3 # the message plus two "hello.txt" files
}
receive_incoming_mail('incoming-request-attachment-unknown-extension.email', ir.incoming_email)
get :download_entire_request, :url_title => title
assigns[:url_path].should have_text(/#{title}.zip$/)
response.location.should have_text(/#{assigns[:url_path]}/)
zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", assigns[:url_path])) { |zipfile|
- zipfile.count.should == 4
+ zipfile.count.should == 5 # the message, two hello.txt, the unknown attachment, and its empty message
}
assigns[:url_path].should_not == old_path
end
diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb
index cf50bcc7a..c13d7c9fc 100644
--- a/spec/controllers/user_controller_spec.rb
+++ b/spec/controllers/user_controller_spec.rb
@@ -32,10 +32,10 @@ describe UserController, "when showing a user" do
session[:user_id] = users(:bob_smith_user).id
get :show, :url_name => "bob_smith", :view => 'requests'
response.body.should_not include("Change your password")
- response.body.should include("Freedom of Information requests")
+ response.body.should match(/Your [0-9]+ Freedom of Information requests/)
get :show, :url_name => "bob_smith", :view => 'profile'
response.body.should include("Change your password")
- response.body.should_not include("Freedom of Information requests")
+ response.body.should_not match(/Your [0-9]+ Freedom of Information requests/)
end
it "should assign the user" do
diff --git a/spec/fixtures/files/incoming-request-pdf-attachment.email b/spec/fixtures/files/incoming-request-pdf-attachment.email
new file mode 100644
index 000000000..1163725ec
--- /dev/null
+++ b/spec/fixtures/files/incoming-request-pdf-attachment.email
@@ -0,0 +1,543 @@
+MIME-Version: 1.0
+Received: by 10.100.197.1 with HTTP; Sun, 8 Jan 2012 01:16:15 -0800 (PST)
+Reply-To: bar@frob.com
+Date: Sun, 8 Jan 2012 09:16:15 +0000
+Delivered-To: seb.bacon@gmail.com
+Message-ID: <CACwNqZkZDZiLtxD=CmE55kBGCBgnDVS1YGtrdC=tOhz+8dpokA@mail.gmail.com>
+Subject: Hello
+From: EMAIL_FROM
+To: FOI Person <EMAIL_TO>
+Content-Type: multipart/mixed; boundary=0016e644b8d0e3913b04b600bbe4
+
+--0016e644b8d0e3913b04b600bbe4
+Content-Type: text/plain; charset=ISO-8859-1
+
+PDF attachment enclosed.
+
+--0016e644b8d0e3913b04b600bbe4
+Content-Type: application/pdf; name="fs_50379341.pdf"
+Content-Disposition: attachment; filename="fs_50379341.pdf"
+Content-Transfer-Encoding: base64
+X-Attachment-Id: f_gx5ul6jw0
+
+JVBERi0xLjUNJeLjz9MNCjIwNCAwIG9iag08PC9MaW5lYXJpemVkIDEvTCAyOTYwNy9PIDIwNi9F
+IDExNTE2L04gNS9UIDI5MjMzL0ggWyA0NjUgMjQwXT4+DWVuZG9iag0gICAgICAgICAgICAgICAg
+DQoyMTEgMCBvYmoNPDwvRGVjb2RlUGFybXM8PC9Db2x1bW5zIDQvUHJlZGljdG9yIDEyPj4vRmls
+dGVyL0ZsYXRlRGVjb2RlL0lEWzxBRjMzQjg1MTFGOUJDMjI5RDlFMDM1QzI3RTBFODIyRT48MzM0
+QjkwQThFRDQ0OTg0MUJDMUM3QTE5NkM3NzNDRDg+XS9JbmRleFsyMDQgMjFdL0luZm8gMjAzIDAg
+Ui9MZW5ndGggNTcvUHJldiAyOTIzNC9Sb290IDIwNSAwIFIvU2l6ZSAyMjUvVHlwZS9YUmVmL1db
+MSAyIDFdPj5zdHJlYW0NCmjeYmJkEGBgYmDaCCJ8gQRjCJBgeQ4k2BOAhNA5IHHvLwMTI0M0kMXA
+wEgG8Z+R6StAgAEA0IkH/g0KZW5kc3RyZWFtDWVuZG9iag1zdGFydHhyZWYNCjANCiUlRU9GDQog
+ICAgICAgIA0KMjI0IDAgb2JqDTw8L0MgMTQxL0ZpbHRlci9GbGF0ZURlY29kZS9JIDE2NC9MIDEy
+NS9MZW5ndGggMTQwL08gMTA5L1MgNzQ+PnN0cmVhbQ0KaN5iYGBgYmBglgORrM4MfAwIwMfADIQs
+DBwHHPrW+F8MPsDA9aTIgkHq4Tpx3gL2BvYG9YYKhgq4FFAHFwND1W8gzQrEbCAjGEMYeBkYlpyR
+ZF8yo/UCSISbgaH2MEgGiI6DLWHoug3hM3QBMQ8DQz2IBjqHOxAszrwASAkyMMy5CdXmDhBgAPuw
+HeMNCmVuZHN0cmVhbQ1lbmRvYmoNMjA1IDAgb2JqDTw8L0xhc3RNb2RpZmllZChEOjIwMTExMTIy
+MTUwMTQzKS9NYXJrSW5mbzw8L0xldHRlcnNwYWNlRmxhZ3MgMC9NYXJrZWQgdHJ1ZT4+L01ldGFk
+YXRhIDE1IDAgUi9PQ1Byb3BlcnRpZXM8PC9EPDwvT3JkZXJbXS9SQkdyb3Vwc1tdPj4vT0NHc1sy
+MTIgMCBSXT4+L091dGxpbmVzIDI4IDAgUi9QYWdlTGFiZWxzIDIwMCAwIFIvUGFnZUxheW91dC9P
+bmVDb2x1bW4vUGFnZXMgMjAyIDAgUi9QaWVjZUluZm88PC9NYXJrZWRQREY8PC9MYXN0TW9kaWZp
+ZWQoRDoyMDExMTEyMjE1MDE0Myk+Pj4+L1N0cnVjdFRyZWVSb290IDM3IDAgUi9UeXBlL0NhdGFs
+b2c+Pg1lbmRvYmoNMjA2IDAgb2JqDTw8L0NvbnRlbnRzIDIwOCAwIFIvQ3JvcEJveFswIDAgNTk1
+IDg0Ml0vTWVkaWFCb3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMDIgMCBSL1Jlc291cmNlczw8L0Nv
+bG9yU3BhY2U8PC9DUzAgMjEzIDAgUj4+L0V4dEdTdGF0ZTw8L0dTMCAyMTQgMCBSPj4vRm9udDw8
+L1RUMCAyMTYgMCBSL1RUMSAyMTggMCBSL1RUMiAyMjAgMCBSL1RUMyAyMjIgMCBSPj4vUHJvY1Nl
+dFsvUERGL1RleHQvSW1hZ2VDXS9Qcm9wZXJ0aWVzPDwvTUMwIDIyMyAwIFI+Pi9YT2JqZWN0PDwv
+SW0wIDIwOSAwIFI+Pj4+L1JvdGF0ZSAwL1N0cnVjdFBhcmVudHMgMC9UYWJzL1MvVHlwZS9QYWdl
+Pj4NZW5kb2JqDTIwNyAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgMTAwL0xlbmd0
+aCA5MDEvTiAxMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3qRW227bOBDVp/AxeXAp3kmgMOA4cRJg
+3QbrtCkQ5IG1GUeoLAWyim1/fncPKduRi6ZtHAv0kHPhcEZnhuKMk5xwJggzDFQS5uJaEa4i1UQq
+B2qIkxbUEsYUhMwRxi04PCdM5QITBlNjMOFRjM04uAo7vn1L3/lVOLoIfhGaSV23oTmm198fA30/
+Pqcf1n4ZoDNugm/r5rK6r59WR//+l42yedZkdfY581mbkewqO80m2RSrL1mAhGQue5Mx0HtoxfVN
+ootjOvv6uY1+Rk37T918GQ7pFZydlWEVqhZetvKLyTD9bunleHzi12GBGHJk5u87aL2/Ive+XOO4
+V1PC6Gy0Wc6mJH+T8y6Us2/t+az1baD1YycfDmE7Ws/hirA8V3TsHy9CsXxIy5yehk424Lmjk9Iv
+10RwOqmr9uSk/nY7wAuAyBAmpUkWd0k48aui/H70MTQLX/njxIv5pRtOYszaJrTzB/qubla+TKyb
+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
+nt6KLkxW8wKXBDiU1bOOPROv9YgGm+pPWzMW/SuZyvylk3QL3YNhFjMyyuLAJnAwSGBG/yUCtz3y
+hNMTXSZpUblPUtR7QIBtfTqer0WN5w7Qi11AIQ8t38bJj6tj0gWFPOk7RN/tLXrpbL9TMGPJ5upv
+ErISAzH6KfWuZuzklTxRqPYpniXq7BWQi7vaGxn7jA28ahgYQTeOM/1OZKCa5thEX8uB0Ywo9fvH
+n4xmNrC9nxPqfD7TJEIH7XwOh/kV/nP8Wrh3KC0Od6lqti3mths5ubCKOdRmmnXNFuzCtVsLHCpk
+4tnYMIk9WguPnBzVbddk7MkudN+u0ypfmn/ATlTiqRK7NVBvWNHRX1N0NJxx/s9tRO1C1GSjbegY
+BAbFzFvRdmlUctZMsZkHrOuLbYE8uFXIeaGTY+Seq/cU1lg420tqVHtlzr/VLVayle5owdBo2OVA
+6VIvJbzIH7pIuHQ1ItpJjXBkX2DxaF0Y1bat2vDh2iR/ozbWi8vsbW2Oy+qRfQIXhOLdFTLGvbqr
+UFUIXdyXHJsoVpZ2pe0r906dGjuWBEYJg9jf6c34Isl6YZ65vzVqb8nzwWqY2OH8y0rlK5EqneJL
+pUS6RncL/6pUqtzCo391Vf6ARfs6gWgpDyAgkcc51gsfU/168eg/7JfqdSfB/1hiH6jAn5u7e/GE
+uTUq7up2dw1YSwLmTrfQY7FG+2TU1XHbVhgnCJvp11xqkkYNV+bOdycgSCSDlHP8P1rA1IS6X3+F
+4tTd0Ul7KCJNNL0XtNjkSf/57PxfgAEA+xIfxA0KZW5kc3RyZWFtDWVuZG9iag0yMDkgMCBvYmoN
+PDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgMjEzIDAgUi9GaWx0ZXIvRENURGVjb2Rl
+L0hlaWdodCAyMjUvTGVuZ3RoIDQ0MDIvU3VidHlwZS9JbWFnZS9UeXBlL1hPYmplY3QvV2lkdGgg
+MzAxPj5zdHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8V
+GBMTFRMTGBcSFBQUFBIXFxscHhwbFyQkJyckJDUzMzM1Ozs7Ozs7Ozs7OwENCwsNDg0QDg4QFA4P
+DhQUEBEREBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMgKCglJSgoMjIwMjI7Ozs7Ozs7Ozs7/8AAEQgA
+4QEtAwEiAAIRAQMRAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEA
+AAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGh
+sUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0
+lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhED
+ITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2
+dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQAC
+EQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkk
+lKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUp
+JJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkk
+klKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSU
+pJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkk
+kklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSS
+UpJJJJSkkkklKSSSSUpJQstqqbute1jfFxAH4qQIcAWmQeCElLpJJJKUkkkkpSSSSSlJJJJKUkkk
+kpSSSSSlJJJJKUkkkkpSSSSSlJJJJKUkkkkpSSSSSlJJJJKUkkkkpSSSSSlJJJJKUkkkkpSSSodW
+630vo1TLupXiiu12xjiHOl0THtBRAJNDVRIGp0fIPrz1LNzvrHm15L3eni2upoqJ9rWt0BA/lcyu
+k/xT9TzX5OX0173WYjKhawEyGO3BsN8N0o31gu/xbddyPtd+e6jKIAfbS143Acbg6sg/Fb/1KZ9U
+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
+CxG2tqL5vr9Gxx2/RBceGtDZ957KLfq9hsxqMeqy6o42/wBO5j4sAtM2N42wfCNOy1EkOI908I7O
+Ufq10vYK2te2sSAwOMAFtVcfdU1R/wCbHTyaSXWuGMSKGuLXBjCWu9Mbmn2y0efmtdJHjl3Vwx7K
+SSSTUqSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSS
+SSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJ
+SkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKS
+SSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJ
+JSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklK
+SSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJ
+JJSkkkklKSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl
+8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy
+qkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp/9kNCmVuZHN0cmVhbQ1lbmRvYmoNMjEwIDAgb2JqDTw8
+L0FsdGVybmF0ZS9EZXZpY2VSR0IvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTk3L04gMz4+
+c3RyZWFtDQpo3pyWd1RU1xaHz713eqHNMNIZepMuMID0LiAdBFEYZgYYygDDDE1siKhARBERAUWQ
+oIABo6FIrIhiISioYA9IEFBiMIqoqGRG1kp8eXnv5eX3x73f2mfvc/fZe5+1LgAkTx8uLwWWAiCZ
+J+AHejjTV4VH0LH9AAZ4gAGmADBZ6am+Qe7BQCQvNxd6usgJ/IveDAFI/L5l6OlPp4P/T9KsVL4A
+AMhfxOZsTjpLxPkiTsoUpIrtMyKmxiSKGUaJmS9KUMRyYo5b5KWffRbZUczsZB5bxOKcU9nJbDH3
+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
+/qb8sa0eW5sLJAr4BcPbbLfVbEdt527v32G+Y/+OT4XswmtFJkXlRR+KWcXXvjL9quKrhZ2xO/tL
+LEsO7sLs4u0a2u2w+2ipdGlO6dge3z3tZfSywrLXe6P2Xi1fVl6zj7BPuG+kwqeic7/m/l37P1TG
+V96pcq5qrVaq3lE9d4B9YPCg48GWGuWaopr3h7iH7tZ61LbXadeVH8Yczjj8tD60vvdrxteNDQoN
+RQ0fj/COjBwNPNrTaNXY2KTUVNIMNwubp45FHrv5jes3nS2GLbWttNai4+C48Pizb6O/HTrhfaL7
+JONky3da31W3UdoK26H27PaZjviOkc7wzoFTK051d9l2tX1v9P2R02qnq87Inik5Szibf3bhXM65
+2fOp56cvxF0Y647qfnBx1cXbPQE9/Ze8L1257H75Yq9T77krdldOX7W5euoa41rHdcvr7X0WfW0/
+WPzQ1m/Z337D6kbnTeubXQPLB84OOgxeuOV66/Jtr9vX76y8MzAUMnR3OHJ45C777uS9pHsv72fc
+n3+w6SH6YeEjqUflj5Ue1/2o92PriOXImVHX0b4nQU8ejLHGnv+U/tOH8fyn5KflE6oTjZNmk6en
+3KduPlv9bPx56vP56YKfpX+ufqH74rtfHH/pm1k1M/6S/3Lh1+JX8q+OvF72unvWf/bxm+Q383OF
+b+XfHn3HeNf7Puz9xHzmB+yHio96H7s+eX96uJC8sPCbAAMA94Tz+w0KZW5kc3RyZWFtDWVuZG9i
+ag0xIDAgb2JqDTw8L0NvbnRlbnRzIDIgMCBSL0Nyb3BCb3hbMCAwIDU5NSA4NDJdL01lZGlhQm94
+WzAgMCA1OTUgODQyXS9QYXJlbnQgMjAyIDAgUi9SZXNvdXJjZXM8PC9Db2xvclNwYWNlPDwvQ1Mw
+IDIxMyAwIFI+Pi9FeHRHU3RhdGU8PC9HUzAgMjE0IDAgUj4+L0ZvbnQ8PC9UVDAgMjE2IDAgUi9U
+VDEgMjE4IDAgUi9UVDIgMjAgMCBSL1RUMyAyMjAgMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1h
+Z2VDXS9Qcm9wZXJ0aWVzPDwvTUMwIDIyMyAwIFI+Pi9YT2JqZWN0PDwvSW0wIDIwOSAwIFI+Pj4+
+L1JvdGF0ZSAwL1N0cnVjdFBhcmVudHMgMS9UYWJzL1MvVHlwZS9QYWdlPj4NZW5kb2JqDTIgMCBv
+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
+b8f62e11vON51u8m7JtegW7OOnTeWQvI2mrcrCSXdcUYMpHBTk6ScY63jOsiSHPuYhkwbQy5LLaY
+DVGASIyIXdtVSEbbBZQiSbEz9t3yxM5lYUBwglaOvbMlo7mSnez29K3G6/G4dw/x69K5XrsAWZhv
+3oz+ekMgXtDFYLCtptbUWYhtltT11L/2ekJzgFgn12Qxr5cIBVVBFzfFU1MnzywhvasVTUTqL/L+
+pjuiHxTMYLi54p9vrisTpt9dy445jQTWooWp+fBfSl/ihv6CS+oQDa0KI+a0mbr2drphIrcDZM+5
+NqUaXArChsH1DrHnhTbXQgYvLBckrJtKYc8j/0TKh/qy3pEXjhc2GCBf6/4h2ooizStssYxrjKq9
+dPa3tdltqcWGpZqwvtWabqcZrGZ3Umu5h+fZ3Z18hZXdvUJa7OMAd7DIiePQo5XM87EFnmdP1Vqf
+Dhxm76TUCMhsaZ4+sS3y3fClKeDHe8CiumCeaB3s5PDq0hc1zbuvy4xJk9QToylt36S0HH0dBa7n
+hCbSGBcJjA6F2Qlp9/wCxbm7zkl9KHJtNq0XtGhxoj+fR/8TYAA9ZWkRDQplbmRzdHJlYW0NZW5k
+b2JqDTMgMCBvYmoNPDwvQ29udGVudHMgNCAwIFIvQ3JvcEJveFswIDAgNTk1IDg0Ml0vTWVkaWFC
+b3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMDIgMCBSL1Jlc291cmNlczw8L0NvbG9yU3BhY2U8PC9D
+UzAgMjEzIDAgUj4+L0V4dEdTdGF0ZTw8L0dTMCAyMTQgMCBSPj4vRm9udDw8L1RUMCAyMTYgMCBS
+L1RUMSAyMTggMCBSL1RUMiAyMjAgMCBSL1RUMyAyMCAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dC9J
+bWFnZUNdL1Byb3BlcnRpZXM8PC9NQzAgMjIzIDAgUj4+L1hPYmplY3Q8PC9JbTAgMjA5IDAgUj4+
+Pj4vUm90YXRlIDAvU3RydWN0UGFyZW50cyAyL1RhYnMvUy9UeXBlL1BhZ2U+Pg1lbmRvYmoNNCAw
+IG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDIzMDE+PnN0cmVhbQ0KSIm0V11v27gS
+ffevmEd5sZZJ6sPyYrFAPtrbXqA37Y2BfUj7oEh0rFtbciUqbv79nSEpiXKUbLfAokBrq9Zw5syZ
+M4ffZgySUEC0jnwmYJGE3E9iqOXsz1+gnH2bMZ8FQE/XyehH+JV+pH+z/Nctg4dmxsPQD/masTgA
+hn84SyAMmR8E6/Uan62CELLDbPn+wOC6mn2aLS9qVWzTTMHvvy8vlEqznczhbrmpjvBleXlZfYe7
+WPj42mqNRwYYQ/DYj5NwBQmL/VBgcl+Wt+29ejpKWL6TaS5rWG70t4/pQ1GmqqhK+OOPy+srwBM/
+zS43s+XNFSw/XDHQD7vsl5sNpgyb7WyBRTOGHzPQH3kEmxNwYYoS0KUUmgQ2h5n3X7mVtSwz+RvA
+29uIBat1EHKYb/43e/MBD3mzMf/S6U7RNi88mpujGR3KJo+LE+yMPW4IvPxI2H24en+NPx7C2Up0
+IXFfSCAocgAL4YsAi8pnXl087BRUW8iqw3GfFqUCVYHaSbiqDoeCznkBjtjXKVKQpkGQZe3DZlc0
+UB0K/QBOaQNlpWAIIoYgIQVZmCgL7gtu8smqupb0wlD/OtH1h8Jnoalf+FHivnXnZQqJU5Q68axq
+y6zYfxZCNPhMybpM9/NF4CFjHwt5glxmBSVI+WLXtlUt9YvzL5t/v1Dt4vxIT8NjC8cjy6ZA6jUY
+J1U2C6rivOpEQ5dY3HSekO6bCu5radjfyExTlq+oK32MYIixNsglbjZ04tub9xf+JDN4xwxT3Kon
+2cJwwQbhoT/1toBpmnI/RhKZSvSxZ7yL+pQF12X7QWx/f+ddNG6vIC/mkZdrthzr6hGxhBQe032R
+u11xQAgMkP56CFnL5oh9kPNF5MGpUDvkg2BwquqvRfkAefrUmGCTTVnYYGegvt7mgdlhH47pIeMr
+f8361JBlehrSEtKmqbIiVTrNfL4Qnu29brdOb8gsNpmZWC7fe5bMF6HH5tyjtzUJKOzNXHiaCxTu
+vJ2B007hCt6gE1wM5FgJc+INRq/hMF+svJSGSSnCYTgBFS5mfhLiluB+GEK4CnBkgPmh3hRbLX1D
+FuGEWE3JXhQjbTqV5dEkQaO/T1AHXoeW3ua840hI+WyoezKe4M5ztKYjIPVCUGPgP9WjPNxjnFek
+henGIsrXiLJgnEGjUjVfxJ7Mf5tuYewUHDgTN3BaxDa0ne7rmYc5BlTDx7Qumh2WadUHqYnltjQi
+T1WLg9OXaAYDx4B4K79n+1bLOmJSZBLaknat1s0XlwTrSYsJvK2lzKsDofO+RNE9mN18gZtQ4Ltw
+i5zu9W6YJ6Mda1c8NPPDzx7/PMfUcv1Z4GcMik04ypTARwg5QuhA3ymnieUMOsV4lN8pn5ba+K2V
+jWo+Cxb5hhF9Wk6BK7sFg3ik5qdivydU7F4pK9hX5QNRYLwOzJujHaZXH2ZOLMq1glFHfGxcOM2D
+1dQQOS3faMqavZ7iZpffj8jRBkFBJctwLzYwrow0sB8Zh/WmtE7+8H39f6O9bhU0GAFLp0ChYJfm
+COu2paPTDmCUQo36Kx4jIZ9ps9G9wVjGVXSoUqxCZ1S96jN0pL9Cm4q1yWFoJFlanilyN/VPsCUR
+rFFoe1IXltQ0usRQ/Ega6TtL55w+o/nYOFDvaFlkmTyqDmysHGWpGOlPZxXRIHUwkd3BJtNru+qk
+K9ILlSa30QMywWUzYwsTxwWpHwqtZt1gQHo87gs84bSTpTtf3UgkouOQkcScxMXaSoePRjVfbv/C
+hnIIZVPwASaNTvKDRiee3CPrnzQ6z/yds1HeI4nynKZOY/AcgJdJi9su6traDBP7zJUQV14DUYdx
+u5rmyAfNq4Fw6X3VKhxHavQghPSt63mpR1jWdtjI6Q/EHryD0Fqw+QXPObb3+6KZrzzytQ9tkadY
+wjz2sHuTcsbZD7ZvNdk+zn/SBzzXnTNL4Gqodutp81VfUhxhMJ0PyLPYLZU/bxXiZkSUbJTdnqo4
+aI2ctKamgzqqdQkkhVX1VY+y20ATOm8zkgq694zzs14n8Xnc5WcuRuZSRI0+kRn1AZ05UmFflKTV
+92hgfv0L18zjf8g0j29y27bWFhRnibI9Urad28LN/sPWufdk2mtRdqpQLdm8tLsgVts5yp1Fl1pV
+0mHOnbJQBSLX3SP17jkzeDgAntl406rXC9nFuTFw74m+iHo49DRlkLZqV+FM0eop1BM0u6rd55hL
+ujdLzMlkag1SxJEYlE/GF+hdqMtBQHNsH6pAs03xnkELDR+jMzwrktmmrZI+SzKLgxFGYMy613zH
+lb+tcVem581ifbMo0nO5x2aljWMciPtFafn7sjdb+XHo3A4fC7obYXtJygxsTkGJLqif5HU/KHi1
+KvdPqLKPSLVy2u0yI7UC99WIbV5H2up4rGrVltQxBMXyjAY1l0PAaKiAG59hCXZvzKS2FjsyHq5P
+0V7hFZOhqVg87JTRCEPEbh0Pozq1iFjY+QthwZC1j+4dX0X5z1LL7tG8T9DZwmPiOOg8kwbXa2Ke
+2sacOR7HhmG8bj8SkhZUGgKsTzA4VfVX2rp5+tS8PGULHWY0EhQLEzhIvOLkUMwjIwDngGEbajPN
+ernhZjM6If0X9pv4wf2WTO+34Gf3m+i5Lc7X27vqJB9l/evzPuI1T74CG02XGK4KExI30hAk8dRC
+WtgwowViqYBbCGNqfaevg/5POdhu4nmXkuaC4+dz8vMI4bXMjPz3UVaDdwm6nPgoJb0pzL1DUZ0H
+HOQsVZ0ROkBbqjM7oPMRzOfd4CCnOVy0D21D113OfXgnjZk4A3pgub2vmiguQZ1psZh33FN9muY2
+IvOp3S2My1n70brnDaJMM/2iUPSMfLOZLS9qVVBbiZsXSqUZOby75WWlFOr7l+XlZfUd7mJBviVc
++RGPAwhY5MdxyAEfc4Flflnetvfq6Shh+baqSMmWG/3tY/qAJWnOdIS/uQIcAgb62+VmdOHtFxFB
+zegfc3DUwXmwY4EFizXNAdclB7qkzezbLGDcD3WmMYo+oc1DP0TqzP6EcnzccIh9KWKmmv4UjGhw
+or8+zf4vwAAUVrhNDQplbmRzdHJlYW0NZW5kb2JqDTUgMCBvYmoNPDwvQ29udGVudHMgNiAwIFIv
+Q3JvcEJveFswIDAgNTk1IDg0Ml0vTWVkaWFCb3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMDIgMCBS
+L1Jlc291cmNlczw8L0NvbG9yU3BhY2U8PC9DUzAgMjEzIDAgUj4+L0V4dEdTdGF0ZTw8L0dTMCAy
+MTQgMCBSPj4vRm9udDw8L1RUMCAyMTYgMCBSL1RUMSAyMTggMCBSPj4vUHJvY1NldFsvUERGL1Rl
+eHQvSW1hZ2VDXS9Qcm9wZXJ0aWVzPDwvTUMwIDIyMyAwIFI+Pi9YT2JqZWN0PDwvSW0wIDIwOSAw
+IFI+Pj4+L1JvdGF0ZSAwL1N0cnVjdFBhcmVudHMgMy9UYWJzL1MvVHlwZS9QYWdlPj4NZW5kb2Jq
+DTYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5NjY+PnN0cmVhbQ0KSIl8Vdtu
+2zgQfddXzKO0gCiSom5FUSB2mt0sELTZCNiHNA+KRNvctUVXouPm7zukJMsx0iJAYjPknMsccr57
+FHLBISkSQjmEuWAkT6GT3r9/QOt99yihMdjVIn+zCb/aTW5P9OcDhXXvMSGIYAWlaQwUfxjNQQhK
+4rgoClzLYgH1zotudxSutXfvRVedUauqNvDxY3RlTFVvZAOPUan38BQtFvoHPKac4LGsQMgYa3CW
+kjQXGeQ0JYIjuafo4fBsXvcSor9k1cgOotJ9+1qtVVsZpVv49GlxvQREvPcWpRd9WUJ0t6TgFif2
+UVkiZShXXoiiKcWPNbiPLIHyCIwPojhMlMRAoNx5/j9yJTvZ1vIDwM1DQuOsiAWDoPzP+3yHIJ/L
+4a9FPxM98kJoNkBTC0rfhUtz7MwINxeOvlrv7pa317h5LvdbJTGEnPAYPzfeo7/Uu53qe7RJdgRu
+W6iCUPhN00lcbNdgNsFT+bfnKvG5Uu5IpoSKxBJuPF9CrXf7bYWmt+Yb57yH2vKclRS5UyI4nhqU
+cEGyXAwFHn0dcB897NoeUSU43EGCQwvH3SEjnF2wDxLfCoBN1cOxU8bIFox2ZWp9aOu51si8IGkx
+Eldb2Hf6RTVW7vqgmgpJAMZGtQbJVFtndzgcmcH9Tr4oeeyhahuQP5zywbDK4Jo77Q46BcJ11uLH
+Ft93dYcK0G/0YdvMe/OTzYNwnpJisvnRh2cJFdKT0BvsVeKvgzD2R7vo3KF08Gw4e+4Ziq2xuQNR
+hx1gw4OQ+7CWaGK13b5aEGxnEGb+3v5nKw1ezaMyuHVjF1QLnMJRd/9bzU312hMYKFzmkk25HBRl
+p4iHQxBHN9He91LN4f1LwkgaT8lz/ZlTP8M4RO4MZyROTxaWmzdhxdQEqd9DV6keVVbQHnYXbnLn
+JstInJ2qPGPe9ApNsY/O3lplA4xtx0g864O5DHE898ZRCsdyZ5FyWVXb8fZYhsqFEY3fuHI3X26v
+rNrLPmMpkZ+YEbAKz2+2uxiqXeluJ939du2eb7aYlU7UbL3z2JjJNLxrVcD8wTrjvDNByHxLsJew
+q/D2dT00ai5/9gRl4/Wjs5ENtNrACnMHxyBMfRSL8bJ4fa3xKUeTN6o/C/gQn7HImX2qfZG9UWv3
+6pM3z++vZs1CG6N3F+NGZCRhOG1impA0xYccl9nFsLnR2vxu2LydMvbhPwX08m1PpnhMTzsq44V9
+LZiTJZyQEkdtTBkRjl+a4v+xAsMpNI3iX4CMhxI6aJgHyDiU3K9776cAAwDczA1EDQplbmRzdHJl
+YW0NZW5kb2JqDTcgMCBvYmoNPDwvQW5ub3RzIDE5IDAgUi9Db250ZW50cyA4IDAgUi9Dcm9wQm94
+WzAgMCA1OTUgODQyXS9NZWRpYUJveFswIDAgNTk1IDg0Ml0vUGFyZW50IDIwMiAwIFIvUmVzb3Vy
+Y2VzPDwvQ29sb3JTcGFjZTw8L0NTMCAyMTMgMCBSPj4vRXh0R1N0YXRlPDwvR1MwIDIxNCAwIFI+
+Pi9Gb250PDwvVFQwIDIxNiAwIFIvVFQxIDIxOCAwIFIvVFQyIDIyMCAwIFI+Pi9Qcm9jU2V0Wy9Q
+REYvVGV4dC9JbWFnZUNdL1hPYmplY3Q8PC9JbTAgMjA5IDAgUj4+Pj4vUm90YXRlIDAvU3RydWN0
+UGFyZW50cyA0L1RhYnMvUy9UeXBlL1BhZ2U+Pg1lbmRvYmoNOCAwIG9iag08PC9GaWx0ZXIvRmxh
+dGVEZWNvZGUvTGVuZ3RoIDE1NDI+PnN0cmVhbQ0KSIm0V1uPm0YUfvevOE8VjsJ4btxWUdS9eNNN
+kybdRcpDtw8sxjapDQ7gdfbf98wAZoyxU0WqvNZimPOdy3duXIWjyWVRpfMoruDNm7dvr26uYTR5
+90BhUY4mYUiBQTgf2ZRQSvEyBn3JHAh3wDhQ/OA/lxMhwQskkZwKCNcj6z6ZJ0WSxckFwO2DQ4UX
+CMlgHH5VuKzGpQqRKiwKNicMRW9GVnuItodsJyABdbqHLCA8ALQED8xGlqPuTT+i6dNBh76NBGVE
+SpAecV2UQ5MZ2gpFMvoC2egqNNR1XjVCjjrfeKW1oxKt7E8EpuBLDk7gEMrB9iUjvqthXyEuPiYo
+qO4G/sEh/Nno/jZiEk1hAaWuqDVTH6SkRIggCPCeh6GN16PJ3ZrCTY5a1UeZ/Bk9nHy8vrtBoZa6
+MORN1BRj3p4xxBxiTDhoSstYulhWkM8h2mySaAVgRtWlxMfzzCMORlEQx8cwSu3FvGcMM4w5yB9v
+z3bfDtf3iGjt4JTsNRuw3IA104cRVzgKdnacOb2s9bRuItz2/DStlkkBm6ioXmAZlYA/odBxqPI2
+DgpTI8kOSQP5hNU4f1nRIhq7VpqVKLhMS7hJ4rRM8wz+yKs0ThSagh7/Hb6vsXiHpZmxNZrNCFe1
+pSBv06Ks7CpF+8IifdpmaMqjNZbW3ZhZ2Twv1lGlNCja8E5VogGPYwJ3xrPoKd9WWnPtS1lb0C9n
+6jQl2KjHMtsUeZyUJayjF3hKIH+qojRLZjAv8vWFkRoGQaIlaNBBhomDJf5T7jW+QW19X69s9Yav
+EPfd/TX8Au/ux7a0Pu+hy9cnhJ1WeB+IGLqQIKL1+RNc5d8hEJS+HnbcPcQQneeiBfkwvbuePoTT
++xMQ3gEE61OjPfswZeDfvB/brnXCGX/PgNlXkVTetc6+THBovEGbPEqKMFldAMVAYOUK6WBBDEIy
+ajBi3UbfUYgxF7gMQHJHnJBiB/kj9i4okOk6SlF3J/ewibJOtOsN1zi64rLuLgBlnI06XiXx3LZg
+0y7FqiZHxo71K+bech1XJVlgJpZjbqVkkT+T7T915cKi6Tk4fw6bzpE3Q9XABQkCx6hy60vyVKZV
+cqGH2r4pMmyw0gUHZ1Qg666IlAgMoSF6MhjyR8Fw6yRXeE00drsd+Yr+b8c2t8oqxcsYnU8a5yeL
+rbo1i3CcYyVO4nxbVKUdZTO762g6xLaOsWFlG9xyMuwiRTvc2kVE8eRBC+yElfqOMVu3aIR0LP1A
+WT1LvpNlhb/Wg6XBnK42Fk2VuQ2V0nVbKoe5dA/qyuY+8U8wYQgdlnQ9/FQqczY43pj/k/PNaDdB
+f77dzeEl38IuLZfGQMNhpSdV1B9Tr/XpGJOp7vfd6Ot3c+WIUUKAf8t8Z+pY5dlCy5vrh2+UzQ5n
+bz1vDzNDUg+zHqTvEK9ZCXBuuEEAtiCubFIjwUpdJc9RVoGyotSDqTdj+5Nf1R+j5pS1zGG5H0O7
+uijJiWwIBojVjcoWxoSzOB9eY+j/wPNl9tJuGri/XdYUlMt8u5rh9O5YONrgHeL6bROAMimek9nY
+9izFp4plFxIkC/OB+4MrDA3qFUajGdF9tOJolWSzqMDhPYteSmWdwp1FVaJ07JZpvM+xzjheG4d5
+wFoPl8N7Fd4qk6w6QRVnA3txRxcumkqBwdkwCjfH2fAR8eMj8mAg7BcN7vXH9EO6UJvWI6eO+T2s
+Re2Bb6RA//h//R69bKlUVC8qZ8cb7/YmLCoR/LAdcveYiqONwz3aOG6jlwQeNuo9shjG9Q63vyLf
+bvSG9DHKokVS6HTtudfEzqXnXfRPWex2FnOdSDWWOblUX1EbaNtbrlVV5diz1uu0VAmcFI+c8xI+
+zeeYx9rik6biiAr8s6YGZ01VV6J5y9BQ5gLyEq/S+TyB3/JtmQwlQxMtT5yzQAy8gQ7Ta2so0wLs
+BQV8iLLT2l3ieWe5EgOFbqqvAUyl6WpdrnBiDah0iM/OKuMDXaXTpcUNVdfLpFymxaB3DjlfZkKc
+8ivoN18NZah9+D0A5/L2VEglcb0jzdNw9K8AAwBBYUiqDQplbmRzdHJlYW0NZW5kb2JqDTkgMCBv
+YmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDI5L04gMS9UeXBlL09ialN0
+bT4+c3RyZWFtDQpo3jK0VDBQiDYyB5JBCkZmEMoURMUCBBgASDEFUQ0KZW5kc3RyZWFtDWVuZG9i
+ag0xMCAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNTYvTGVuZ3RoIDYxNy9OIDgv
+VHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN7EU0tP3DAQ/is+0sPGbydGCHWXdgUSQhVL2UorDibrJi6J
+s3KcAv++thMWikA9cKisscf2PD7PfCYIIEAwYLwAhABRYEAoyGVYGJAoLBxIEUwEwEjmgOQAE8rA
+0RFcqF4vO+vhtXZbZdXszKvGlPCrLbutsRVcGzu3vdnvl8b1/qRWDlACo+cX3ZfO7HznIgQELuG5
+miwwK+BquPWPOw2v3KCvkhKnlHJttr7uN5QTgP4ajLMkUaeC7WdBxV7QNL89REHjLIu04zkf4yaA
+L6wQnawZEHiMJuWb8UIRRagpJ9MqBYi4RSw3paGiDFAWMUZN5jSdCpQn6ygsFD16U8nSHQ/dKXAR
+VpL0t98RLdC7g3EZ5eb4OHRy3pfa+tBgxOGJ2p1qU9Vpi2BsUbybESThslFVH+iQerBYdA+bGaY4
+3gVWMIGTy026XarWNI8HEzU+pbML1erXZInnK++0L2t40blWNeloPUJgAcFoOLdVo8EMc7jyur0O
+1Mwow8+MeKYS/PECf3reCn6/PItyUHu/O4Tw/v4++zX03pQ6q7rf2XAHq8EEWKWGZTc438+U3c68
+M7eDVU0PnzVjf0aU3nR25mKaeLTVD1nt20//NVurTOO7wxcuT3E+123p+6zqzZR/dJ3HDx8/3WKV
+Aq3Gai46t9UOrkEo3rTZJM6ExgIGT+EZvNSl32AsQgsAK2hGAqUZKjJEOWAyz/LiJrTJDaX/plxk
+T77/y+fG3o155tZ2/gkI/QiQnGZMpMRFLuJvyWjgIsckrK+AiH8BYR8HEhMzPlaEIxa+rsgkewWE
+vw/kjwADAFqkkmYNCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVj
+b2RlL0ZpcnN0IDYwL0xlbmd0aCAzNjAvTiA5L1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjedJJrT8Iw
+FIbPTzkf4dO6djcMISEQjImBRUnwgh8Qa1wcm9kF5c+rbzsgoJBm69m5Pn1XGbFg2WHfZSXYDSNW
+sKR5WPkdVoq9ULDy2BeI+ex34Aw4UBF3u84gr7OKPWeUFGVl+gi+ca4XsNHN2NPNh3YmdZUmmS57
+PZT0TbkJjfVXZRobO14UGo1k1BQlVapb3z80ooI01gvltCLG+xXvK8qw54itaEEVJbAz+Pu0xBeT
+JGEX07yFFhMU9Gnebu/GuydGxoVemzMfjY+ppmdKMWBp29do/2YHJ7A2dAGvWTNgpMjUiJT0afPf
+4Y/hN7klqpgGqKwBuoQnJW5who9SNHLc3T9wIDnwAs7qNH1ybp3LfJrvoNWBZuLsAbzjAwytPnoP
+yuRaXcZAWcO/2kI3mrnknoMKT0P5B1DyHNT2VhxAaatBuf9xGfbKqqZPAUhPcogr+Y/gOM0FTuh7
+f9J+BRgAu1mrqw0KZW5kc3RyZWFtDWVuZG9iag0xMiAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNv
+ZGUvRmlyc3QgODI5L0xlbmd0aCAxODA0L04gMTAwL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjexFhd
+b9s2FP0rBPa8iZffBIoCbbqiWdImaDrsIciD06iZ19QOFGdY//3OFS8d25Eda+02IM6VyKNzP3lJ
+yUallU2KtFE2K2OMclr5YJUjFZxXzqhMpJxVRM4p/JFJuPeKbAYqKHIEWFQUPOZBFQkyQ+asvFaU
+QlSeFOUMZqMMaae8hS6Lewfpg/IeMiVoVsYSZISMVvmkjON72OZgVdDKeJ1UIEiQBPD5jHvwBRgZ
+wBdSVgF8MXoVwJdgP0wwCeQBfBm+BvBl61UEX45GRVJWa9wjDBo+Q7XV4I1OWfYbVJZgfwzKGhtU
+jJAJuKQsLlTMkAAnRNMZrRAi66AcEOvJqAQ+D2cS+AL8T+ALCFICX4TyBL6UgQdfNpDgyzAOKp0G
+PiPkGsHNnB8o5dAb+JERasM4pMDyfYBEPnOEhLNwwTnoRyqcA440CL01uOAkxpJ5FwzyqjmdPQak
+UfMIJxZRIg3aiJiRBm/Co4QcuGR5BMwJYSMCc+anuFwyyoeg1+XIlYNE6n4KmddcEygZr2EsEXJv
+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
+DeYE5oAdPDmZzPLBUPR98g0Vsnl2OZmfrZfPp6eNXYkpnyGA7okL5kN1t3h6rDNqKoXP6+eTL+vN
+r8UjHLOfi6/9GntLnjH2NWZ+2wJ0BpgekimhGrI6IwMwDl9PoDOymZCPK7oM0P0sXkA2HWcJGRD7
+i/YSeBwQuFzBsk9FeHefplRCnl3LncWslb/J+ajW46Khuy41aMluthEAdEhpGnCz0k2Zm0aJ0HHX
+SbL8Yrf9GagiZ7Zy7jADX1ChjLGMdkBGvhTJ+6MSe3Bd4GYQ3KUCL4mYdDwR3MX9m4IWcXCepBG2
+tYsdtdVyhIrcPsf+KdLN8Q79Wtt9DF1a+fR786aWyRS+Xyu8aPkurXxfve/Xmuae1vSfT9Vi+bC6
+f6eVKU1oe7O23juoVwxNUxrro//Bxwz2iW1zLUmXPtblvF+W4th0tVFaTY8b6RLGu8RBecjb9boC
+aZRnechGOfBYBz3WwYzbRR626+Vd2S0WuwGech3luiXbe2Vzu0rhTa7ckpLr5UoZ499sJfnHRNJ9
+XDr/mEg8sDpw0MNqElPboorrsWcrlgeoiSF3+2QOnq2mum1lWtK+5+oc3pm/9QxH+ffCKe9j8sfD
+yT882+xc16NdDt/2WOzaP66WF6tltapJvVeTr5P54nn9VE8ufy9+VtO7utrk9fx5Vt2tN1XzXS82
+dfFjFbFyVf2pp48P96vGlr8LwHjYf2weajSQz+tlNZlvrm7/k7jakz7HUrXZ1Vad0n8FGABNHxW9
+DQplbmRzdHJlYW0NZW5kb2JqDTE0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCAx
+My9MZW5ndGggNDQvTiAyL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeMjIwUDBQMDIwBGIFGxt9v9Lc
+4miIgIFCUKydHVAsWN/Fzg4gwAC4WAlEDQplbmRzdHJlYW0NZW5kb2JqDTE1IDAgb2JqDTw8L0xl
+bmd0aCA0MjMzL1N1YnR5cGUvWE1ML1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJl
+Z2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxu
+czp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4yLjEtYzA0MyA1
+Mi4zNzI3MjgsIDIwMDkvMDEvMTgtMTU6MDg6MDQgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5z
+OnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAg
+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0
+cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWNy
+b2JhdCBQREZNYWtlciA5LjEgZm9yIFdvcmQ8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHht
+cDpNb2RpZnlEYXRlPjIwMTEtMTEtMjJUMTU6MDE6NDNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAg
+ICAgPHhtcDpDcmVhdGVEYXRlPjIwMTEtMTEtMjJUMTU6MDE6MzVaPC94bXA6Q3JlYXRlRGF0ZT4K
+ICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxMS0xMS0yMlQxNTowMTo0M1o8L3htcDpNZXRh
+ZGF0YURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9u
+IHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
+cGRmLzEuMy8iPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFjcm9iYXQgRGlzdGlsbGVyIDkuMC4w
+IChXaW5kb3dzKTwvcGRmOlByb2R1Y2VyPgogICAgICAgICA8cGRmOktleXdvcmRzLz4KICAgICAg
+PC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg
+ICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAg
+ICAgICAgIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vcGRmPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxk
+YzpjcmVhdG9yPgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaT5t
+aWxib3VybmVqPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC9kYzpj
+cmVhdG9yPgogICAgICAgICA8ZGM6dGl0bGU+CiAgICAgICAgICAgIDxyZGY6QWx0PgogICAgICAg
+ICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPkZyZWVkb20gb2YgSW5mb3JtYXRp
+b24gQWN0IDIwMDAgKFNlY3Rpb24gNTApPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4K
+ICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgICAgPGRjOmRlc2NyaXB0aW9uPgogICAgICAgICAg
+ICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+
+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzpkZXNjcmlwdGlvbj4KICAgICAg
+PC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg
+ICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4K
+ICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+dXVpZDpkMTA5Zjg5Mi1iMTUyLTRlMjMtOWRjMy1l
+ZjNkZDAxMjdkOGQ8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlE
+PnV1aWQ6ODY4YWY5ZjUtOWQwMi00ZDg0LTg5NjUtYTg4MDhlY2NjZTljPC94bXBNTTpJbnN0YW5j
+ZUlEPgogICAgICAgICA8eG1wTU06c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAg
+ICAgICAgICAgIDxyZGY6bGk+MzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAg
+ICAgIDwveG1wTU06c3ViamVjdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6
+RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZng9Imh0dHA6Ly9u
+cy5hZG9iZS5jb20vcGRmeC8xLjMvIj4KICAgICAgICAgPHBkZng6Q29tcGFueT5JbmZvcm1hdGlv
+biBDb21taXNzaW9uZXJzIE9mZmljZTwvcGRmeDpDb21wYW55PgogICAgICAgICA8cGRmeDpTb3Vy
+Y2VNb2RpZmllZD5EOjIwMTExMTIyMTQ1MTE5PC9wZGZ4OlNvdXJjZU1vZGlmaWVkPgogICAgICA8
+L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3
+Ij8+DQplbmRzdHJlYW0NZW5kb2JqDTE2IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJz
+dCA2L0xlbmd0aCA2NC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yMjBSMFCwsdF3zi/NK1Ew
+1ffOTCmONjIwA4oGKRiCSWMwaQomzUFkrH5IZUGqfkBiemqxnR1AgAEAHocQmg0KZW5kc3RyZWFt
+DWVuZG9iag0xNyAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNi9MZW5ndGggMjMz
+L04gMS9UeXBlL09ialN0bT4+c3RyZWFtDQpo3mzPTWvDMAwG4L+io32pP9IcOkohLBTGKCt0UBi9
+JLbC3CXWsB1K//3UMlgP00lIL4+Q1RVoWK9VM5dPSmIKY09ziniW6pmm7y5exUscKE1dCRSBZ1PI
+mVtMGd6GITjkZML7uu0KivbJasNlram1qeqP3z3rjUvUdwX27XbXfWGC1cIA43Ck5KV6xeuFmyyk
+2pH/B1tWjO0T+dnhn9aGXMI43jm90HASxxA9XfJJSnXgbxwyF4aA/tFb1sasODD3Z3SFb76HMqLY
+JkRPE9AAj483roDV+qYfOH4b1ZoPbDY/AgwAP1hmow0KZW5kc3RyZWFtDWVuZG9iag0xOCAwIG9i
+ag08PC9EZWNvZGVQYXJtczw8L0NvbHVtbnMgNC9QcmVkaWN0b3IgMTI+Pi9GaWx0ZXIvRmxhdGVE
+ZWNvZGUvSURbPEFGMzNCODUxMUY5QkMyMjlEOUUwMzVDMjdFMEU4MjJFPjwzMzRCOTBBOEVENDQ5
+ODQxQkMxQzdBMTk2Qzc3M0NEOD5dL0luZm8gMjAzIDAgUi9MZW5ndGggMTE0L1Jvb3QgMjA1IDAg
+Ui9TaXplIDIwNC9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJkadPwxMDEz+QILz
+I5BgBLOcQWIWQIKFGyRmDiTYfECsSpDECRBxHEhw5AMJ5kcgiS4gIXgdSDDMBcm6A03uA3MZQQQD
+I0GC8Sdx6iCKf5CgeJQYFgTj3NEwIDfoDsFYTP/BWRIgwABfDBGsDQplbmRzdHJlYW0NZW5kb2Jq
+DXN0YXJ0eHJlZg0KMTE2DQolJUVPRg0K
+--0016e644b8d0e3913b04b600bbe4-- \ No newline at end of file
diff --git a/spec/models/foi_attachment_spec.rb b/spec/models/foi_attachment_spec.rb
new file mode 100644
index 000000000..d8166dddc
--- /dev/null
+++ b/spec/models/foi_attachment_spec.rb
@@ -0,0 +1,36 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+describe FoiAttachment, " when calculating due date" do
+ fixtures :incoming_messages, :raw_emails, :public_bodies, :public_body_translations, :info_requests, :users, :foi_attachments
+
+ before(:each) do
+ load_raw_emails_data(raw_emails)
+ end
+
+ it "sets the body" do
+ attachment = FoiAttachment.new
+ attachment.body = "baz"
+ attachment.body.should == "baz"
+ end
+ it "sets the size" do
+ attachment = FoiAttachment.new
+ attachment.body = "baz"
+ attachment.body.should == "baz"
+ attachment.update_display_size!
+ attachment.display_size.should == "0K"
+ end
+ it "reparses the body if it disappears" do
+ mail_body = load_file_fixture('incoming-request-attach-attachments.email')
+ mail = TMail::Mail.parse(mail_body)
+ mail.base64_decode
+ im = incoming_messages(:useless_incoming_message)
+ im.stub!(:mail).and_return(mail)
+ #im.extract_attachments!
+ attachments = im.get_attachments_for_display
+ FileUtils.rm attachments[0].filepath
+ lambda {
+ attachments = im.get_attachments_for_display
+ body = attachments[0].body
+ }.should_not raise_error(Errno::ENOENT)
+ end
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 5c5cd9a7f..9bf752c99 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -78,7 +78,6 @@ def load_file_fixture(file_name)
end
def rebuild_xapian_index(terms = true, values = true, texts = true, dropfirst = true)
- parse_all_incoming_messages
if dropfirst
begin
ActsAsXapian.readable_init
@@ -86,7 +85,9 @@ def rebuild_xapian_index(terms = true, values = true, texts = true, dropfirst =
rescue RuntimeError
end
ActsAsXapian.writable_init
+ ActsAsXapian.writable_db.close
end
+ parse_all_incoming_messages
verbose = false
# safe_rebuild=true, which involves forking to avoid memory leaks, doesn't work well with rspec.
# unsafe is significantly faster, and we can afford possible memory leaks while testing.
@@ -96,7 +97,7 @@ end
def update_xapian_index
verbose = false
- ActsAsXapian.update_index(flush_to_disk=true, verbose)
+ ActsAsXapian.update_index(flush_to_disk=false, verbose)
end
# Validate an entire HTML page
@@ -137,10 +138,10 @@ if $tempfilecount.nil?
def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
self.original_process(action, parameters, session, flash, http_method)
-
+ # don't validate auto-generated HTML
+ return if @request.query_parameters["action"] == "get_attachment_as_html"
# XXX Is there a better way to check this than calling a private method?
return unless @response.template.controller.instance_eval { integrate_views? }
-
# And then if HTML, not a redirect (302, 301)
if @response.content_type == "text/html" && ! [301,302,401].include?(@response.response_code)
validate_html(@response.body)