Postie - Version 1.4.24

Version Description

(2013.01.13) = * Fixed a bug where the original attachment name wasn't being used. * Fixed a bug where the #eimg# tags in the excerpt were not getting expanded.

Download this release

Release Info

Developer WayneAllen
Plugin Icon 128x128 Postie
Version 1.4.24
Comparing to
See all releases

Code changes from version 1.4.23 to 1.4.24

Revision CHANGED
@@ -1,2 +0,0 @@
1
- Revision: 650937
2
- Last Changed Date: 2013-01-09 22:30:45 -0800 (Wed, 09 Jan 2013)
 
 
docs/Changes.txt CHANGED
@@ -1,11 +1,21 @@
1
  == Upgrade Notice ==
2
- * Attachments are now processed in the order they were attached.
3
- * All script, style and body tags are stripped from html emails.
4
- * Many method names have been changed as of 1.4.18. Any custom filters may need to be updated.
 
 
 
 
 
 
5
 
6
  == CHANGELOG ==
 
 
 
 
7
  = 1.4.23 (2013.01.10) =
8
- * Fixed a bug with embedded CID referenced images
9
 
10
  = 1.4.22 (2013.01.10) =
11
  * Fixed a bug where the subject was not being properly decoded when Q-encoding was used.
1
  == Upgrade Notice ==
2
+
3
+ = 1.4.18 =
4
+ Many method names have been changed. Any custom filters may need to be updated.
5
+
6
+ = 1.4.10 =
7
+ All script, style and body tags are stripped from html emails.
8
+
9
+ = 1.4.6 =
10
+ Attachments are now processed in the order they were attached.
11
 
12
  == CHANGELOG ==
13
+ = 1.4.24 (2013.01.13) =
14
+ * Fixed a bug where the original attachment name wasn't being used.
15
+ * Fixed a bug where the #eimg# tags in the excerpt were not getting expanded.
16
+
17
  = 1.4.23 (2013.01.10) =
18
+ * Fixed a bug with embedded CID referenced images.
19
 
20
  = 1.4.22 (2013.01.10) =
21
  * Fixed a bug where the subject was not being properly decoded when Q-encoding was used.
docs/Installation.txt CHANGED
@@ -16,18 +16,31 @@
16
  * (Postie ignores the settings under Settings->Writing->Writing-by-Email)
17
 
18
  = Automating checking e-mail =
 
 
 
 
 
 
 
 
 
19
 
20
  By default, postie checks for new e-mail every 30 minutes. You can select from
21
  a number of different checking intervals in the settings page, under the
22
- mailserver tab.
23
 
 
24
  If you would prefer to have more fine-grained control of how postie checks
25
  for mail, you can also set up a crontab. This is for advanced users only.
 
 
 
 
 
26
  If your site runs on a UNIX/linux server, and you have shell access, you can
27
- enable mail checking using cron; if you don't know anything about cron, skip
28
- to the cronless postie section.
29
 
30
- Setup a cronjob to pull down the get\_mail.php
31
  Examples:
32
 
33
  */5 * * * * /usr/bin/lynx --source http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
@@ -37,3 +50,8 @@ This fetches the mail every five minutes with lynx
37
  */10 * * * * /usr/bin/wget -O /dev/null http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
38
 
39
  This fetches the mail every ten minutes with wget
 
 
 
 
 
16
  * (Postie ignores the settings under Settings->Writing->Writing-by-Email)
17
 
18
  = Automating checking e-mail =
19
+ WordPress cron (which Postie relies on) doesn't run unless a page is accessed on
20
+ the site. So if you send an email, but nobody accesses the site for 3 days Postie
21
+ won't be given the chance to fetch the email and publish the post.
22
+
23
+ To ensure that Postie runs smoothly on a low or no volume site you need to ensure
24
+ that a page gets hit (any page is fine). Use something like cron + curl on Linux
25
+ or install curl on Windows and use the Scheduled Tasks control panel. If you are
26
+ using a hosting company that doesn't allow you access to cron you can use a service
27
+ like SetCronJob.
28
 
29
  By default, postie checks for new e-mail every 30 minutes. You can select from
30
  a number of different checking intervals in the settings page, under the
31
+ Mailserver tab.
32
 
33
+ = Forcing e-mail check =
34
  If you would prefer to have more fine-grained control of how postie checks
35
  for mail, you can also set up a crontab. This is for advanced users only.
36
+
37
+ Setup a cronjob to pull down the get\_mail.php - note that every time you access
38
+ get\_mail.php Postie will run - it is like clicking Run Postie on the Admin screen.
39
+
40
+ = Linux =
41
  If your site runs on a UNIX/linux server, and you have shell access, you can
42
+ enable mail checking using cron.
 
43
 
 
44
  Examples:
45
 
46
  */5 * * * * /usr/bin/lynx --source http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
50
  */10 * * * * /usr/bin/wget -O /dev/null http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
51
 
52
  This fetches the mail every ten minutes with wget
53
+
54
+ = Windows =
55
+ You will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or [curl](http://curl.haxx.se/dlwiz/)
56
+ Then use the Task Scheduler control panel to call wget or cron.
57
+
docs/Postie.txt CHANGED
@@ -6,12 +6,11 @@ Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
- Stable tag: 1.4.23
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
- The Postie plugin allows you to blog via e-mail, including many advanced
14
- features not found in WordPress's default post by e-mail feature.
15
 
16
  == Description ==
17
  Postie offers many advanced features for posting to your blog via e-mail,
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
+ Stable tag: 1.4.24
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
+ Postie allows you to blog via e-mail, including many advanced features not found in WordPress's default post by e-mail feature.
 
14
 
15
  == Description ==
16
  Postie offers many advanced features for posting to your blog via e-mail,
docs/Usage.txt CHANGED
@@ -2,8 +2,8 @@
2
  * If you put in :start - the message processing won't start until it sees that string.
3
  * If you put in :end - the message processing will stop once it sees that string.
4
  * Posts can have a specific publication date. Relative dates like "tomorrow", "monday", "first day of next month" are supported.
5
- * date: <date>
6
- * date: <date> <time>
7
  * Posts can be delayed by adding a line with delayXdXhXm where X is a number.
8
  * delay:1d - 1 day
9
  * delay:1h - 1 hour
@@ -27,7 +27,7 @@
27
 
28
  = Post type =
29
  You can specify the post type by including it as the first part of the subject
30
- E.g. <post type>//<real subject>
31
 
32
  = Category and tag handling =
33
  * If you put a category name in the subject with a : it will be used
@@ -37,7 +37,7 @@
37
  * If you put the first part of a category name it will be posted in
38
  the first category that the system finds that matches - so if you put
39
 
40
- Subject: Gen: New News
41
 
42
  The system will post that in General.
43
 
@@ -78,10 +78,10 @@
78
 
79
  * Image templates
80
  Postie now uses the default wordpress image template, but you can specify a
81
- different one if you wish.
82
 
83
  You can also specify a custom image template. I use the following custom
84
- template:
85
 
86
  `<div class='imageframe alignleft'><a href='{IMAGE}'><img src="{THUMBNAIL}"
87
  alt="{CAPTION}" title="{CAPTION}"
@@ -100,9 +100,11 @@ template:
100
 
101
  = Interoperability =
102
  * If your mail client doesn't support setting the subject (nokia) you
103
- can do so by putting #your title here# at the beginning of your message
104
  * POP3,POP3-SSL,IMAP,IMAP-SSL now supported - last three require
105
  php-imap support
106
  * The program understands enough about mime to not duplicate post
107
  if you send an HTML and plain text message
108
  * Automatically confirms that you are installed correctly
 
 
2
  * If you put in :start - the message processing won't start until it sees that string.
3
  * If you put in :end - the message processing will stop once it sees that string.
4
  * Posts can have a specific publication date. Relative dates like "tomorrow", "monday", "first day of next month" are supported.
5
+ * date: date
6
+ * date: date time
7
  * Posts can be delayed by adding a line with delayXdXhXm where X is a number.
8
  * delay:1d - 1 day
9
  * delay:1h - 1 hour
27
 
28
  = Post type =
29
  You can specify the post type by including it as the first part of the subject
30
+ E.g. post type//real subject
31
 
32
  = Category and tag handling =
33
  * If you put a category name in the subject with a : it will be used
37
  * If you put the first part of a category name it will be posted in
38
  the first category that the system finds that matches - so if you put
39
 
40
+ Gen: New News
41
 
42
  The system will post that in General.
43
 
78
 
79
  * Image templates
80
  Postie now uses the default wordpress image template, but you can specify a
81
+ different one if you wish.
82
 
83
  You can also specify a custom image template. I use the following custom
84
+ template:
85
 
86
  `<div class='imageframe alignleft'><a href='{IMAGE}'><img src="{THUMBNAIL}"
87
  alt="{CAPTION}" title="{CAPTION}"
100
 
101
  = Interoperability =
102
  * If your mail client doesn't support setting the subject (nokia) you
103
+ can do so by putting #your subject/title here# at the beginning of your message
104
  * POP3,POP3-SSL,IMAP,IMAP-SSL now supported - last three require
105
  php-imap support
106
  * The program understands enough about mime to not duplicate post
107
  if you send an HTML and plain text message
108
  * Automatically confirms that you are installed correctly
109
+
110
+ = Extending =
get_mail.php CHANGED
@@ -37,6 +37,8 @@ EchoInfo(sprintf(__("There are %d messages to process", "postie"), count($emails
37
  if (function_exists('memory_get_usage'))
38
  EchoInfo(__("memory at start of e-mail processing:") . memory_get_usage());
39
 
 
 
40
  //loop through messages
41
  foreach ($emails as $email) {
42
  DebugEcho("------------------------------------");
37
  if (function_exists('memory_get_usage'))
38
  EchoInfo(__("memory at start of e-mail processing:") . memory_get_usage());
39
 
40
+ DebugDump($config);
41
+
42
  //loop through messages
43
  foreach ($emails as $email) {
44
  DebugEcho("------------------------------------");
postie-functions.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  /*
4
- $Id: postie-functions.php 651010 2013-01-10 20:22:44Z WayneAllen $
5
  */
6
 
7
  /* TODO
@@ -150,14 +150,9 @@ function tag_Date(&$content, $message_date) {
150
  return $message_date;
151
  }
152
 
153
- /**
154
- * This is the main handler for all of the processing
155
- */
156
- function PostEmail($poster, $mimeDecodedEmail, $config) {
157
- postie_disable_revisions();
158
- postie_increase_memory();
159
  extract($config);
160
- $post_to_db = true;
161
 
162
  $attachments = array(
163
  "html" => array(), //holds the html for each image
@@ -170,20 +165,17 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
170
  filter_PreferedText($mimeDecodedEmail, $prefer_text_type);
171
  //DebugDump($mimeDecodedEmail);
172
 
173
- $tmpPost = array('post_title' => 'tmptitle', 'post_content' => 'tmpPost');
174
- /* in order to do attachments correctly, we need to associate the
175
- attachments with a post. So we add the post here, then update it
176
- */
177
- $post_id = wp_insert_post($tmpPost);
178
- EchoInfo("new post id is $post_id");
179
-
180
  $content = GetContent($mimeDecodedEmail, $attachments, $post_id, $poster, $config);
181
  //DebugEcho("the content is $content");
182
 
183
  $subject = GetSubject($mimeDecodedEmail, $content, $config);
184
 
185
- $post_excerpt = tag_Excerpt($content, $filternewlines, $convertnewline);
 
 
186
 
 
 
187
  $postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
188
 
189
  $message_date = NULL;
@@ -204,7 +196,6 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
204
 
205
  filter_ubb2HTML($content);
206
 
207
- $id = checkReply($subject);
208
  $post_categories = tag_categories($subject, $default_post_category);
209
  $post_tags = tag_Tags($content, $default_post_tags);
210
 
@@ -215,11 +206,20 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
215
  $content = filter_linkify($content);
216
  }
217
 
218
- $customImages = SpecialMessageParsing($content, $attachments, $config);
 
 
 
 
 
 
 
 
219
 
220
- if ((empty($id) || is_null($id))) {
 
221
  $id = $post_id;
222
- $isReply = false;
223
  if ($add_meta == 'yes') {
224
  if ($wrap_pre == 'yes') {
225
  $content = $postAuthorDetails['content'] . "<pre>\n" . $content . "</pre>\n";
@@ -235,7 +235,7 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
235
  }
236
  } else {
237
  EchoInfo("Reply detected");
238
- $isReply = true;
239
  // strip out quoted content
240
  $lines = explode("\n", $content);
241
  $newContents = '';
@@ -251,10 +251,6 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
251
  $content = $newContents;
252
  wp_delete_post($post_id);
253
  }
254
- if ($filternewlines) {
255
- $content = filter_newlines($content, $convertnewline);
256
- //DebugEcho("post filter newlines: $content");
257
- }
258
 
259
  if ($delay != 0 && $post_status == 'publish') {
260
  $post_status = 'future';
@@ -262,10 +258,12 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
262
  $post_status = $post_status;
263
  }
264
 
265
- $post_type = tag_PostType($subject);
266
 
267
  //DebugEcho("pre-insert content: $content");
268
 
 
 
269
  $details = array(
270
  'post_author' => $poster,
271
  'comment_author' => $postAuthorDetails['author'],
@@ -287,7 +285,28 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
287
  'customImages' => $customImages,
288
  'post_status' => $post_status
289
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
290
  $details = apply_filters('postie_post', $details);
 
291
  if (empty($details)) {
292
  // It is possible that the filter has removed the post, in which case, it should not be posted.
293
  // And if we created a placeholder post (because this was not a reply to an existing post),
@@ -297,7 +316,7 @@ function PostEmail($poster, $mimeDecodedEmail, $config) {
297
  }
298
  } else {
299
  DisplayEmailPost($details);
300
- PostToDB($details, $isReply, $post_to_db, $custom_image_field);
301
  if ($confirmation_email != '') {
302
  if ($confirmation_email == 'sender') {
303
  $recipients = array($postAuthorDetails['email']);
@@ -508,13 +527,13 @@ function getPostAuthorDetails(&$subject, &$content, &$mimeDecodedEmail) {
508
  * generated
509
  */
510
 
511
- function checkReply(&$subject) {
512
  global $wpdb;
513
 
514
  $id = NULL;
515
 
516
  // see if subject starts with Re:
517
- if (preg_match("/(^Re:) (.*)/i", $subject, $matches)) {
518
  $subject = trim($matches[2]);
519
  // strip out category info into temporary variable
520
  $tmpSubject = $subject;
@@ -762,7 +781,7 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
762
  if (property_exists($part, 'disposition') && $part->disposition == "attachment") {
763
  $image_endings = array("jpg", "png", "gif", "jpeg", "pjpeg");
764
  foreach ($image_endings as $type) {
765
- if (eregi(".$type\$", $part->d_parameters["filename"])) {
766
  $part->ctype_primary = "image";
767
  $part->ctype_secondary = $type;
768
  break;
@@ -789,7 +808,8 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
789
  $filename = "";
790
  if (property_exists($part, 'ctype_parameters') && is_array($part->ctype_parameters) && array_key_exists('name', $part->ctype_parameters)) {
791
  // fix filename (remove non-standard characters)
792
- $filename = preg_replace("/[^\x9\xA\xD\x20-\x7F]/", "", $part->ctype_parameters['name']);
 
793
  DebugEcho("Filename: $filename");
794
  }
795
  switch (strtolower($part->ctype_primary)) {
@@ -863,8 +883,8 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
863
  }
864
 
865
  $the_post = get_post($file_id);
866
- DebugEcho("Html Attachement: $filename");
867
- $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $imagetemplate);
868
  if ($cid) {
869
  $attachments["cids"][$cid] = array($file, count($attachments["html"]) - 1);
870
  DebugEcho("CID Attachement: $cid");
@@ -872,6 +892,7 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
872
  break;
873
 
874
  case 'audio':
 
875
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
876
  $file = wp_get_attachment_url($file_id);
877
  $cid = "";
@@ -884,7 +905,7 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
884
  $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
885
  $audioTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
886
  }
887
- $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $audioTemplate);
888
  break;
889
 
890
  case 'video':
@@ -902,7 +923,7 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
902
  $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
903
  $videoTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
904
  }
905
- $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $videoTemplate);
906
  //echo "videoTemplate = $videoTemplate\n";
907
  break;
908
 
@@ -918,6 +939,7 @@ function GetContent($part, &$attachments, $post_id, $poster, $config) {
918
  $file = wp_get_attachment_url($file_id);
919
  DebugEcho("uploaded $file_id ($file)");
920
  $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
 
921
  $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
922
  if (array_key_exists('content-id', $part->headers)) {
923
  $cid = trim($part->headers["content-id"], "<>");
@@ -1103,13 +1125,16 @@ function isValidSmtpServer($mimeDecodedEmail, $smtpservers) {
1103
  * @param string
1104
  * @param string
1105
  */
1106
- function filter_start($content, $start) {
1107
- $pos = strpos($content, $start);
1108
- if ($pos === false) {
1109
- return $content;
 
 
 
 
 
1110
  }
1111
- DebugEcho("start filter $start");
1112
- return substr($content, $pos + strlen($start), strlen($content));
1113
  }
1114
 
1115
  /**
@@ -1118,20 +1143,24 @@ function filter_start($content, $start) {
1118
  * @param string
1119
  * @param array - a list of patterns to determine if it is a sig block
1120
  */
1121
- function filter_RemoveSignature($content, $filterList) {
1122
- if (empty($filterList))
1123
- return $content;
1124
- $arrcontent = explode("\n", $content);
1125
- $strcontent = '';
1126
- $pattern = '/^(' . implode('|', $filterList) . ')/';
1127
- for ($i = 0; $i < count($arrcontent); $i++) {
1128
- $line = trim($arrcontent[$i]);
1129
- if (preg_match($pattern, trim($line))) {
1130
- break;
 
 
 
 
 
1131
  }
1132
- $strcontent .= $line . "\n";
1133
  }
1134
- return $strcontent;
1135
  }
1136
 
1137
  /**
@@ -1140,39 +1169,44 @@ function filter_RemoveSignature($content, $filterList) {
1140
  * @param string
1141
  * @param filter
1142
  */
1143
- function filter_end($content, $end) {
1144
- $pos = strpos($content, $end);
1145
- if ($pos === false)
1146
- return $content;
1147
- DebugEcho("end filter $end");
1148
- return $content = substr($content, 0, $pos);
 
 
 
1149
  }
1150
 
1151
  //filter content for new lines
1152
- function filter_newlines($content, $convertNewLines = false) {
1153
- $search = array(
1154
- "/\r\n/",
1155
- "/\r/",
1156
- "/\n\n/",
1157
- "/\r\n\r\n/",
1158
- "/\n/"
1159
- );
1160
- $replace = array(
1161
- "\n",
1162
- "\n",
1163
- 'ACTUAL_NEW_LINE',
1164
- 'ACTUAL_NEW_LINE',
1165
- 'LINEBREAK'
1166
- );
 
 
1167
 
1168
- $result = preg_replace($search, $replace, $content);
1169
 
1170
- if ($convertNewLines) {
1171
- $newContent = preg_replace('/(ACTUAL_NEW_LINE|LINEBREAK)/', "<br />\n", $result);
1172
- } else {
1173
- $newContent = preg_replace('/(ACTUAL_NEW_LINE|LINEBREAK)/', " ", $result);
 
1174
  }
1175
- return $newContent;
1176
  }
1177
 
1178
  //strip pgp stuff
@@ -1549,8 +1583,8 @@ function postie_handle_upload(&$file, $overrides = false, $time = null) {
1549
  if (false === @ rename($file['tmp_name'], $new_file)) {
1550
  DebugEcho("upload: rename failed");
1551
  DebugEcho("new file: $new_file");
1552
- DebugDump($file);
1553
- DebugDump($uploads);
1554
  return $upload_error_handler($file, sprintf(__('The uploaded file could not be moved to %s.'), $uploads['path']));
1555
  }
1556
 
@@ -1789,14 +1823,11 @@ function chooseAttachmentIcon($file, $primary, $secondary, $iconSet = 'silver',
1789
  $parts = explode('.', $fileName);
1790
  $ext = $parts[count($parts) - 1];
1791
  $docExts = array('doc', 'docx');
1792
- $docMimes = array('msword', 'vnd.ms-word',
1793
- 'vnd.openxmlformats-officedocument.wordprocessingml.document');
1794
  $pptExts = array('ppt', 'pptx');
1795
- $pptMimes = array('mspowerpoint', 'vnd.ms-powerpoint',
1796
- 'vnd.openxmlformats-officedocument.');
1797
  $xlsExts = array('xls', 'xlsx');
1798
- $xlsMimes = array('msexcel', 'vnd.ms-excel',
1799
- 'vnd.openxmlformats-officedocument.spreadsheetml.sheet');
1800
  $iWorkMimes = array('zip', 'octet-stream');
1801
  $mpgExts = array('mpg', 'mpeg', 'mp2');
1802
  $mpgMimes = array('mpg', 'mpeg', 'mp2');
@@ -1843,11 +1874,12 @@ function chooseAttachmentIcon($file, $primary, $secondary, $iconSet = 'silver',
1843
  if (!file_exists(POSTIE_ROOT . $fileName))
1844
  $fileName = "/icons/$iconSet/default-$size.png";
1845
  $iconHtml = "<img src='" . POSTIE_URL . $fileName . "' alt='$fileType icon' />";
1846
- return($iconHtml);
 
1847
  }
1848
 
1849
- function parseTemplate($id, $type, $template, $size = 'medium') {
1850
-
1851
  /* we check template for thumb, thumbnail, large, full and use that as
1852
  size. If not found, we default to medium */
1853
  if ($type == 'image') {
@@ -1886,7 +1918,7 @@ function parseTemplate($id, $type, $template, $size = 'medium') {
1886
  $template = str_replace('{FULL}', $fileLink, $template);
1887
  $template = str_replace('{FILELINK}', $fileLink, $template);
1888
  $template = str_replace('{PAGELINK}', $pageLink, $template);
1889
- $template = str_replace('{FILENAME}', $fileName, $template);
1890
  $template = str_replace('{IMAGE}', $fileLink, $template);
1891
  $template = str_replace('{URL}', $fileLink, $template);
1892
  $template = str_replace('{RELFILENAME}', $relFileName, $template);
@@ -1896,9 +1928,10 @@ function parseTemplate($id, $type, $template, $size = 'medium') {
1896
  } elseif (!preg_match("/$attachment->post_title/i", $fileName)) {
1897
  $template = str_replace('{CAPTION}', $attachment->post_title, $template);
1898
  } else {
1899
- //$template=str_replace('{CAPTION}', '', $template);
1900
  }
1901
- return($template . '<br />');
 
1902
  }
1903
 
1904
  /**
@@ -1907,39 +1940,41 @@ function parseTemplate($id, $type, $template, $size = 'medium') {
1907
  * @param string - text of post
1908
  * @param array - array of HTML for images for post
1909
  */
1910
- function filter_ReplaceImageCIDs(&$content, &$attachments) {
1911
- DebugEcho("ReplaceImageCIDs");
1912
- $used = array();
1913
- foreach ($attachments["cids"] as $key => $info) {
1914
- $key = str_replace('/', '\/', $key);
1915
- $pattern = "/cid:$key/";
1916
- if (preg_match($pattern, $content)) {
1917
- $content = preg_replace($pattern, $info[0], $content);
1918
- $used[] = $info[1]; //Index of html to ignore
 
 
1919
  }
1920
- }
1921
- DebugEcho("# cid attachments: " . count($used));
1922
-
1923
- $html = array();
1924
- $att = array_values($attachments["html"]); //make sure there are numeric indexes
1925
- DebugEcho('$attachments');
1926
- DebugDump($attachments);
1927
- DebugEcho('$used');
1928
- DebugDump($used);
1929
- for ($i = 0; $i < count($attachments["html"]); $i++) {
1930
- if (!in_array($i, $used)) {
1931
- $html[] = $att[$i];
1932
  }
1933
- }
1934
 
1935
- foreach ($attachments['html'] as $key => $value) {
1936
- if (!in_array($value, $used)) {
1937
- $html[$key] = $value;
 
1938
  }
1939
- }
1940
 
1941
- $attachments["html"] = $html;
1942
- //DebugDump($attachments);
 
1943
  }
1944
 
1945
  /**
@@ -1948,76 +1983,77 @@ function filter_ReplaceImageCIDs(&$content, &$attachments) {
1948
  * @param array - array of HTML for images for post
1949
  */
1950
  function filter_ReplaceImagePlaceHolders(&$content, $attachments, $config) {
1951
- extract($config);
1952
- if (!$allow_html_in_body) {
1953
- $content = html_entity_decode($content, ENT_QUOTES);
1954
- }
1955
-
1956
- $startIndex = $start_image_count_at_zero ? 0 : 1;
1957
- if (!empty($attachments) && $auto_gallery) {
1958
- $imageTemplate = '[gallery]';
1959
- if ($images_append) {
1960
- $content .= $imageTemplate;
1961
- } else {
1962
- $content = "$imageTemplate\n" . $content;
1963
  }
1964
- DebugEcho("Auto gallery");
1965
- return;
1966
- }
1967
 
1968
- $pics = "";
1969
- $i = 0;
1970
- foreach ($attachments as $attachementName => $imageTemplate) {
1971
- // looks for ' #img1# ' etc... and replaces with image
1972
- $img_placeholder_temp = str_replace("%", intval($startIndex + $i), $image_placeholder);
1973
- $img_placeholder_temp = rtrim($img_placeholder_temp, '#');
1974
-
1975
- $eimg_placeholder_temp = str_replace("%", intval($startIndex + $i), "#eimg%#");
1976
- $eimg_placeholder_temp = rtrim($eimg_placeholder_temp, '#');
1977
-
1978
- DebugEcho("img_placeholder_temp: $img_placeholder_temp");
1979
- if (stristr($content, $img_placeholder_temp) || stristr($content, $eimg_placeholder_temp)) {
1980
- // look for caption
1981
- DebugEcho("Found $img_placeholder_temp or $eimg_placeholder_temp");
1982
- $caption = '';
1983
- if (preg_match("/$img_placeholder_temp caption=(.*?)#/i", $content, $matches)) {
1984
- //DebugDump($matches);
1985
- $caption = trim($matches[1]);
1986
- if (strlen($caption) > 2 && ($caption[0] == "'" || $caption[0] == '"')) {
1987
- $caption = substr($caption, 1, strlen($caption) - 2);
1988
- }
1989
- DebugEcho("caption: $caption");
1990
-
1991
- $img_placeholder_temp = substr($matches[0], 0, -1);
1992
- $eimg_placeholder_temp = substr($matches[0], 0, -1);
1993
- DebugEcho($img_placeholder_temp);
1994
- DebugEcho($eimg_placeholder_temp);
1995
  } else {
1996
- DebugEcho("No caption found");
1997
  }
1998
- //DebugEcho("parameterize templete: " . $imageTemplate);
1999
- $imageTemplate = mb_str_replace('{CAPTION}', htmlspecialchars($caption, ENT_QUOTES), $imageTemplate);
2000
- //DebugEcho("populated templete: " . $imageTemplate);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2001
 
2002
- $img_placeholder_temp.='#';
2003
- $eimg_placeholder_temp.='#';
 
 
 
 
 
 
 
 
2004
 
2005
- $content = str_ireplace($img_placeholder_temp, $imageTemplate, $content);
2006
- $content = str_ireplace($eimg_placeholder_temp, $imageTemplate, $content);
2007
- } else {
2008
- DebugEcho("No $img_placeholder_temp or $eimg_placeholder_temp found");
2009
- $imageTemplate = str_replace('{CAPTION}', '', $imageTemplate);
2010
- /* if using the gallery shortcode, don't add pictures at all */
2011
- if (!preg_match("/\[gallery[^\[]*\]/", $content, $matches)) {
2012
- $pics .= $imageTemplate;
 
 
 
 
2013
  }
 
 
 
 
 
 
2014
  }
2015
- $i++;
2016
- }
2017
- if ($images_append) {
2018
- $content .= $pics;
2019
- } else {
2020
- $content = $pics . $content;
2021
  }
2022
  }
2023
 
@@ -2089,6 +2125,7 @@ function tag_Excerpt(&$content, $filterNewLines, $convertNewLines) {
2089
  if (preg_match('/:excerptstart ?(.*):excerptend/s', $content, $matches)) {
2090
  $content = str_replace($matches[0], "", $content);
2091
  $post_excerpt = $matches[1];
 
2092
  if ($filterNewLines)
2093
  $post_excerpt = filter_newlines($post_excerpt, $convertNewLines);
2094
  }
@@ -2724,71 +2761,41 @@ function DebugEmailOutput($email, $mimeDecodedEmail) {
2724
  }
2725
  }
2726
 
2727
- /**
2728
- * This function provides a hook to be able to write special parses for provider emails that are difficult to work with
2729
- * If you want to extend this functionality - write a new function and call it from here
2730
- */
2731
- function SpecialMessageParsing(&$content, &$attachments, $config) {
2732
- extract($config);
2733
- if (preg_match('/You have been sent a message from Vodafone mobile/', $content)) {
2734
- DebugEcho("Vodafone message");
2735
- filter_VodafoneHandler($content, $attachments);
2736
- return;
2737
- }
2738
- if ($message_start) {
2739
- $content = filter_start($content, $message_start);
2740
- //DebugEcho("post start: $content");
2741
- }
2742
- if ($message_end) {
2743
- $content = filter_end($content, $message_end);
2744
- //DebugEcho("post end: $content");
2745
- }
2746
- if ($drop_signature) {
2747
- $content = filter_RemoveSignature($content, $sig_pattern_list);
2748
- //DebugEcho("post signature: $content");
2749
- }
2750
- if ($prefer_text_type == "html" && count($attachments["cids"])) {
2751
- filter_ReplaceImageCIDs($content, $attachments);
2752
- //DebugEcho("post CIDs: $content");
2753
- }
2754
- if (!$custom_image_field) {
2755
- filter_ReplaceImagePlaceHolders($content, $attachments["html"], $config);
2756
- //DebugEcho("post placeholders: $content");
2757
- } else {
2758
- $customImages = array();
2759
- //DebugEcho("Looking for custom images");
2760
  //DebugDump($attachments["html"]);
2761
 
2762
  foreach ($attachments["html"] as $key => $value) {
2763
  //DebugEcho("checking " . htmlentities($value));
2764
  if (preg_match("/src\s*=\s*['\"]([^'\"]*)['\"]/i", $value, $matches)) {
2765
- //DebugEcho("found custom image: " . $matches[1]);
2766
  array_push($customImages, $matches[1]);
2767
  }
2768
  }
2769
-
2770
- return $customImages;
2771
  }
2772
- return null;
2773
  }
2774
 
2775
  /**
2776
  * Special Vodafone handler - their messages are mostly vendor trash - this strips them down.
2777
  */
2778
- function filter_VodafoneHandler(&$content, &$attachments) {
2779
- $index = strpos($content, "TEXT:");
2780
- if (strpos !== false) {
2781
- $alt_content = substr($content, $index, strlen($content));
2782
- if (preg_match("/<font face=\"verdana,helvetica,arial\" class=\"standard\" color=\"#999999\"><b>(.*)<\/b>/", $alt_content, $matches)) {
2783
- //The content is now just the text of the message
2784
- $content = $matches[1];
2785
- //Now to clean up the attachments
2786
- $vodafone_images = array("live.gif"
2787
- , "smiley.gif", "border_left_txt.gif", "border_top.gif",
2788
- "border_bot.gif", "border_right.gif", "banner1.gif", "i_text.gif", "i_picture.gif",);
2789
- while (list($key, $value) = each($attachments['cids'])) {
2790
- if (!in_array($key, $vodafone_images)) {
2791
- $content .= "<br/>" . $attachments['html'][$attachments['cids'][$key][1]];
 
2792
  }
2793
  }
2794
  }
1
  <?php
2
 
3
  /*
4
+ $Id: postie-functions.php 652237 2013-01-14 01:57:39Z WayneAllen $
5
  */
6
 
7
  /* TODO
150
  return $message_date;
151
  }
152
 
153
+ function CreatePost($poster, $mimeDecodedEmail, $post_id, &$is_reply, $config) {
154
+
 
 
 
 
155
  extract($config);
 
156
 
157
  $attachments = array(
158
  "html" => array(), //holds the html for each image
165
  filter_PreferedText($mimeDecodedEmail, $prefer_text_type);
166
  //DebugDump($mimeDecodedEmail);
167
 
 
 
 
 
 
 
 
168
  $content = GetContent($mimeDecodedEmail, $attachments, $post_id, $poster, $config);
169
  //DebugEcho("the content is $content");
170
 
171
  $subject = GetSubject($mimeDecodedEmail, $content, $config);
172
 
173
+ filter_Start($content, $config);
174
+ filter_End($content, $config);
175
+ filter_RemoveSignature($content, $config);
176
 
177
+ $post_excerpt = tag_Excerpt($content, $filternewlines, $convertnewline);
178
+
179
  $postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
180
 
181
  $message_date = NULL;
196
 
197
  filter_ubb2HTML($content);
198
 
 
199
  $post_categories = tag_categories($subject, $default_post_category);
200
  $post_tags = tag_Tags($content, $default_post_tags);
201
 
206
  $content = filter_linkify($content);
207
  }
208
 
209
+ filter_VodafoneHandler($content, $attachments, $config);
210
+ filter_ReplaceImageCIDs($content, $attachments, $config);
211
+ filter_ReplaceImagePlaceHolders($content, $attachments["html"], $config);
212
+
213
+ filter_ReplaceImagePlaceHolders($post_excerpt, $attachments["html"], $config);
214
+ DebugEcho("post image excerpt: $post_excerpt");
215
+
216
+ $customImages = tag_CustomImageField($content, $attachments, $config);
217
+ $post_type = tag_PostType($subject);
218
 
219
+ $id = GetParentPostForReply($subject);
220
+ if (empty($id)) {
221
  $id = $post_id;
222
+ $is_reply = false;
223
  if ($add_meta == 'yes') {
224
  if ($wrap_pre == 'yes') {
225
  $content = $postAuthorDetails['content'] . "<pre>\n" . $content . "</pre>\n";
235
  }
236
  } else {
237
  EchoInfo("Reply detected");
238
+ $is_reply = true;
239
  // strip out quoted content
240
  $lines = explode("\n", $content);
241
  $newContents = '';
251
  $content = $newContents;
252
  wp_delete_post($post_id);
253
  }
 
 
 
 
254
 
255
  if ($delay != 0 && $post_status == 'publish') {
256
  $post_status = 'future';
258
  $post_status = $post_status;
259
  }
260
 
261
+ filter_newlines($content, $config);
262
 
263
  //DebugEcho("pre-insert content: $content");
264
 
265
+ DebugEcho("excerpt: $post_excerpt" );
266
+
267
  $details = array(
268
  'post_author' => $poster,
269
  'comment_author' => $postAuthorDetails['author'],
285
  'customImages' => $customImages,
286
  'post_status' => $post_status
287
  );
288
+ return $details;
289
+ }
290
+
291
+ /**
292
+ * This is the main handler for all of the processing
293
+ */
294
+ function PostEmail($poster, $mimeDecodedEmail, $config) {
295
+ postie_disable_revisions();
296
+ postie_increase_memory();
297
+ extract($config);
298
+
299
+ /* in order to do attachments correctly, we need to associate the
300
+ attachments with a post. So we add the post here, then update it */
301
+ $tmpPost = array('post_title' => 'tmptitle', 'post_content' => 'tmpPost');
302
+ $post_id = wp_insert_post($tmpPost);
303
+ EchoInfo("new post id is $post_id");
304
+
305
+ $is_reply = false;
306
+ $details = CreatePost($poster, $mimeDecodedEmail, $post_id, $is_reply, $config);
307
+
308
  $details = apply_filters('postie_post', $details);
309
+
310
  if (empty($details)) {
311
  // It is possible that the filter has removed the post, in which case, it should not be posted.
312
  // And if we created a placeholder post (because this was not a reply to an existing post),
316
  }
317
  } else {
318
  DisplayEmailPost($details);
319
+ PostToDB($details, $is_reply, true, $custom_image_field);
320
  if ($confirmation_email != '') {
321
  if ($confirmation_email == 'sender') {
322
  $recipients = array($postAuthorDetails['email']);
527
  * generated
528
  */
529
 
530
+ function GetParentPostForReply(&$subject) {
531
  global $wpdb;
532
 
533
  $id = NULL;
534
 
535
  // see if subject starts with Re:
536
+ if (preg_match("/(^Re:)(.*)/i", $subject, $matches)) {
537
  $subject = trim($matches[2]);
538
  // strip out category info into temporary variable
539
  $tmpSubject = $subject;
781
  if (property_exists($part, 'disposition') && $part->disposition == "attachment") {
782
  $image_endings = array("jpg", "png", "gif", "jpeg", "pjpeg");
783
  foreach ($image_endings as $type) {
784
+ if (preg_match("/.$type\$/i", $part->d_parameters["filename"])) {
785
  $part->ctype_primary = "image";
786
  $part->ctype_secondary = $type;
787
  break;
808
  $filename = "";
809
  if (property_exists($part, 'ctype_parameters') && is_array($part->ctype_parameters) && array_key_exists('name', $part->ctype_parameters)) {
810
  // fix filename (remove non-standard characters)
811
+ //$filename = preg_replace("/[^\x9\xA\xD\x20-\x7F]/", "", $part->ctype_parameters['name']);
812
+ $filename = $part->ctype_parameters['name'];
813
  DebugEcho("Filename: $filename");
814
  }
815
  switch (strtolower($part->ctype_primary)) {
883
  }
884
 
885
  $the_post = get_post($file_id);
886
+ DebugEcho("image Attachement: $filename");
887
+ $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $imagetemplate, $filename);
888
  if ($cid) {
889
  $attachments["cids"][$cid] = array($file, count($attachments["html"]) - 1);
890
  DebugEcho("CID Attachement: $cid");
892
  break;
893
 
894
  case 'audio':
895
+ //DebugDump($part->headers);
896
  $file_id = postie_media_handle_upload($part, $post_id, $poster);
897
  $file = wp_get_attachment_url($file_id);
898
  $cid = "";
905
  $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
906
  $audioTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
907
  }
908
+ $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $audioTemplate, $filename);
909
  break;
910
 
911
  case 'video':
923
  $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
924
  $videoTemplate = '<a href="{FILELINK}">' . $icon . '{FILENAME}</a>';
925
  }
926
+ $attachments["html"][$filename] = parseTemplate($file_id, $part->ctype_primary, $videoTemplate, $filename);
927
  //echo "videoTemplate = $videoTemplate\n";
928
  break;
929
 
939
  $file = wp_get_attachment_url($file_id);
940
  DebugEcho("uploaded $file_id ($file)");
941
  $icon = chooseAttachmentIcon($file, $part->ctype_primary, $part->ctype_secondary, $icon_set, $icon_size);
942
+ DebugEcho("default: $icon $filename");
943
  $attachments["html"][$filename] = "<a href='$file'>" . $icon . $filename . '</a>' . "\n";
944
  if (array_key_exists('content-id', $part->headers)) {
945
  $cid = trim($part->headers["content-id"], "<>");
1125
  * @param string
1126
  * @param string
1127
  */
1128
+ function filter_Start(&$content, $config) {
1129
+ $start = $config['message_start'];
1130
+ if ($start) {
1131
+ $pos = strpos($content, $start);
1132
+ if ($pos === false) {
1133
+ return $content;
1134
+ }
1135
+ DebugEcho("start filter $start");
1136
+ $content = substr($content, $pos + strlen($start), strlen($content));
1137
  }
 
 
1138
  }
1139
 
1140
  /**
1143
  * @param string
1144
  * @param array - a list of patterns to determine if it is a sig block
1145
  */
1146
+ function filter_RemoveSignature(&$content, $config) {
1147
+ if ($config['drop_signature']) {
1148
+ if (empty($config['sig_pattern_list']))
1149
+ return;
1150
+
1151
+ $arrcontent = explode("\n", $content);
1152
+ $strcontent = '';
1153
+ $pattern = '/^(' . implode('|', $config['sig_pattern_list']) . ')/';
1154
+ for ($i = 0; $i < count($arrcontent); $i++) {
1155
+ $line = trim($arrcontent[$i]);
1156
+ if (preg_match($pattern, trim($line))) {
1157
+ DebugEcho("signature found: removing");
1158
+ break;
1159
+ }
1160
+ $strcontent .= $line . "\n";
1161
  }
1162
+ $content = $strcontent;
1163
  }
 
1164
  }
1165
 
1166
  /**
1169
  * @param string
1170
  * @param filter
1171
  */
1172
+ function filter_End(&$content, $config) {
1173
+ $end = $config['message_end'];
1174
+ if ($end) {
1175
+ $pos = strpos($content, $end);
1176
+ if ($pos === false)
1177
+ return $content;
1178
+ DebugEcho("end filter $end");
1179
+ $content = substr($content, 0, $pos);
1180
+ }
1181
  }
1182
 
1183
  //filter content for new lines
1184
+ function filter_newlines(&$content, $config) {
1185
+ if ($config['filternewlines']) {
1186
+
1187
+ $search = array(
1188
+ "/\r\n/",
1189
+ "/\n\n/",
1190
+ "/\r\n\r\n/",
1191
+ "/\r/",
1192
+ "/\n/"
1193
+ );
1194
+ $replace = array(
1195
+ "LINEBREAK",
1196
+ "LINEBREAK",
1197
+ 'LINEBREAK',
1198
+ 'LINEBREAK',
1199
+ 'LINEBREAK'
1200
+ );
1201
 
1202
+ $result = preg_replace($search, $replace, $content);
1203
 
1204
+ if ($config['convertnewline']) {
1205
+ $content = preg_replace('/(LINEBREAK)/', "<br />\n", $result);
1206
+ } else {
1207
+ $content = preg_replace('/(LINEBREAK)/', " ", $result);
1208
+ }
1209
  }
 
1210
  }
1211
 
1212
  //strip pgp stuff
1583
  if (false === @ rename($file['tmp_name'], $new_file)) {
1584
  DebugEcho("upload: rename failed");
1585
  DebugEcho("new file: $new_file");
1586
+ //DebugDump($file);
1587
+ //DebugDump($uploads);
1588
  return $upload_error_handler($file, sprintf(__('The uploaded file could not be moved to %s.'), $uploads['path']));
1589
  }
1590
 
1823
  $parts = explode('.', $fileName);
1824
  $ext = $parts[count($parts) - 1];
1825
  $docExts = array('doc', 'docx');
1826
+ $docMimes = array('msword', 'vnd.ms-word', 'vnd.openxmlformats-officedocument.wordprocessingml.document');
 
1827
  $pptExts = array('ppt', 'pptx');
1828
+ $pptMimes = array('mspowerpoint', 'vnd.ms-powerpoint', 'vnd.openxmlformats-officedocument.');
 
1829
  $xlsExts = array('xls', 'xlsx');
1830
+ $xlsMimes = array('msexcel', 'vnd.ms-excel', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet');
 
1831
  $iWorkMimes = array('zip', 'octet-stream');
1832
  $mpgExts = array('mpg', 'mpeg', 'mp2');
1833
  $mpgMimes = array('mpg', 'mpeg', 'mp2');
1874
  if (!file_exists(POSTIE_ROOT . $fileName))
1875
  $fileName = "/icons/$iconSet/default-$size.png";
1876
  $iconHtml = "<img src='" . POSTIE_URL . $fileName . "' alt='$fileType icon' />";
1877
+ DebugEcho("icon: $iconHtml");
1878
+ return $iconHtml;
1879
  }
1880
 
1881
+ function parseTemplate($id, $type, $template, $orig_filename) {
1882
+ $size = 'medium';
1883
  /* we check template for thumb, thumbnail, large, full and use that as
1884
  size. If not found, we default to medium */
1885
  if ($type == 'image') {
1918
  $template = str_replace('{FULL}', $fileLink, $template);
1919
  $template = str_replace('{FILELINK}', $fileLink, $template);
1920
  $template = str_replace('{PAGELINK}', $pageLink, $template);
1921
+ $template = str_replace('{FILENAME}', $orig_filename, $template);
1922
  $template = str_replace('{IMAGE}', $fileLink, $template);
1923
  $template = str_replace('{URL}', $fileLink, $template);
1924
  $template = str_replace('{RELFILENAME}', $relFileName, $template);
1928
  } elseif (!preg_match("/$attachment->post_title/i", $fileName)) {
1929
  $template = str_replace('{CAPTION}', $attachment->post_title, $template);
1930
  } else {
1931
+
1932
  }
1933
+ DebugEcho("template: $template");
1934
+ return $template . '<br />';
1935
  }
1936
 
1937
  /**
1940
  * @param string - text of post
1941
  * @param array - array of HTML for images for post
1942
  */
1943
+ function filter_ReplaceImageCIDs(&$content, &$attachments, $config) {
1944
+ if ($config['prefer_text_type'] == "html" && count($attachments["cids"])) {
1945
+ DebugEcho("ReplaceImageCIDs");
1946
+ $used = array();
1947
+ foreach ($attachments["cids"] as $key => $info) {
1948
+ $key = str_replace('/', '\/', $key);
1949
+ $pattern = "/cid:$key/";
1950
+ if (preg_match($pattern, $content)) {
1951
+ $content = preg_replace($pattern, $info[0], $content);
1952
+ $used[] = $info[1]; //Index of html to ignore
1953
+ }
1954
  }
1955
+ DebugEcho("# cid attachments: " . count($used));
1956
+
1957
+ $html = array();
1958
+ $att = array_values($attachments["html"]); //make sure there are numeric indexes
1959
+ DebugEcho('$attachments');
1960
+ //DebugDump($attachments);
1961
+ DebugEcho('$used');
1962
+ //DebugDump($used);
1963
+ for ($i = 0; $i < count($attachments["html"]); $i++) {
1964
+ if (!in_array($i, $used)) {
1965
+ $html[] = $att[$i];
1966
+ }
1967
  }
 
1968
 
1969
+ foreach ($attachments['html'] as $key => $value) {
1970
+ if (!in_array($value, $used)) {
1971
+ $html[$key] = $value;
1972
+ }
1973
  }
 
1974
 
1975
+ $attachments["html"] = $html;
1976
+ //DebugDump($attachments);
1977
+ }
1978
  }
1979
 
1980
  /**
1983
  * @param array - array of HTML for images for post
1984
  */
1985
  function filter_ReplaceImagePlaceHolders(&$content, $attachments, $config) {
1986
+ if (!$config['custom_image_field']) {
1987
+ if (!$config['allow_html_in_body']) {
1988
+ $content = html_entity_decode($content, ENT_QUOTES);
 
 
 
 
 
 
 
 
 
1989
  }
 
 
 
1990
 
1991
+ $startIndex = $config ['start_image_count_at_zero'] ? 0 : 1;
1992
+ if (!empty($attachments) && $config ['auto_gallery']) {
1993
+ $imageTemplate = '[gallery]';
1994
+ if ($config ['images_append']) {
1995
+ $content .= $imageTemplate;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1996
  } else {
1997
+ $content = "$imageTemplate\n" . $content;
1998
  }
1999
+ DebugEcho("Auto gallery");
2000
+ return;
2001
+ }
2002
+
2003
+ $pics = "";
2004
+ $i = 0;
2005
+ foreach ($attachments as $attachementName => $imageTemplate) {
2006
+ // looks for ' #img1# ' etc... and replaces with image
2007
+ $img_placeholder_temp = str_replace("%", intval($startIndex + $i), $config['image_placeholder']);
2008
+ $img_placeholder_temp = rtrim($img_placeholder_temp, '#');
2009
+
2010
+ $eimg_placeholder_temp = str_replace("%", intval($startIndex + $i), "#eimg%#");
2011
+ $eimg_placeholder_temp = rtrim($eimg_placeholder_temp, '#');
2012
+
2013
+ DebugEcho("img_placeholder_temp: $img_placeholder_temp");
2014
+ if (stristr($content, $img_placeholder_temp) || stristr($content, $eimg_placeholder_temp)) {
2015
+ // look for caption
2016
+ DebugEcho("Found $img_placeholder_temp or $eimg_placeholder_temp");
2017
+ $caption = '';
2018
+ if (preg_match("/$img_placeholder_temp caption=(.*?)#/i", $content, $matches)) {
2019
+ //DebugDump($matches);
2020
+ $caption = trim($matches[1]);
2021
+ if (strlen($caption) > 2 && ($caption[0] == "'" || $caption[0] == '"')) {
2022
+ $caption = substr($caption, 1, strlen($caption) - 2);
2023
+ }
2024
+ DebugEcho("caption: $caption");
2025
 
2026
+ $img_placeholder_temp = substr($matches[0], 0, -1);
2027
+ $eimg_placeholder_temp = substr($matches[0], 0, -1);
2028
+ DebugEcho($img_placeholder_temp);
2029
+ DebugEcho($eimg_placeholder_temp);
2030
+ } else {
2031
+ DebugEcho("No caption found");
2032
+ }
2033
+ //DebugEcho("parameterize templete: " . $imageTemplate);
2034
+ $imageTemplate = mb_str_replace('{CAPTION}', htmlspecialchars($caption, ENT_QUOTES), $imageTemplate);
2035
+ //DebugEcho("populated templete: " . $imageTemplate);
2036
 
2037
+ $img_placeholder_temp.='#';
2038
+ $eimg_placeholder_temp.='#';
2039
+
2040
+ $content = str_ireplace($img_placeholder_temp, $imageTemplate, $content);
2041
+ $content = str_ireplace($eimg_placeholder_temp, $imageTemplate, $content);
2042
+ } else {
2043
+ DebugEcho("No $img_placeholder_temp or $eimg_placeholder_temp found");
2044
+ $imageTemplate = str_replace('{CAPTION}', '', $imageTemplate);
2045
+ /* if using the gallery shortcode, don't add pictures at all */
2046
+ if (!preg_match("/\[gallery[^\[]*\]/", $content, $matches)) {
2047
+ $pics .= $imageTemplate;
2048
+ }
2049
  }
2050
+ $i++;
2051
+ }
2052
+ if ($config['images_append']) {
2053
+ $content .= $pics;
2054
+ } else {
2055
+ $content = $pics . $content;
2056
  }
 
 
 
 
 
 
2057
  }
2058
  }
2059
 
2125
  if (preg_match('/:excerptstart ?(.*):excerptend/s', $content, $matches)) {
2126
  $content = str_replace($matches[0], "", $content);
2127
  $post_excerpt = $matches[1];
2128
+ DebugEcho("excerpt found: $post_excerpt");
2129
  if ($filterNewLines)
2130
  $post_excerpt = filter_newlines($post_excerpt, $convertNewLines);
2131
  }
2761
  }
2762
  }
2763
 
2764
+ function tag_CustomImageField(&$content, &$attachments, $config) {
2765
+ $customImages = array();
2766
+ if ($config['custom_image_field']) {
2767
+ DebugEcho("Looking for custom images");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2768
  //DebugDump($attachments["html"]);
2769
 
2770
  foreach ($attachments["html"] as $key => $value) {
2771
  //DebugEcho("checking " . htmlentities($value));
2772
  if (preg_match("/src\s*=\s*['\"]([^'\"]*)['\"]/i", $value, $matches)) {
2773
+ DebugEcho("found custom image: " . $matches[1]);
2774
  array_push($customImages, $matches[1]);
2775
  }
2776
  }
 
 
2777
  }
2778
+ return $customImages;
2779
  }
2780
 
2781
  /**
2782
  * Special Vodafone handler - their messages are mostly vendor trash - this strips them down.
2783
  */
2784
+ function filter_VodafoneHandler(&$content, &$attachments, $config) {
2785
+ if (preg_match('/You have been sent a message from Vodafone mobile/', $content)) {
2786
+ DebugEcho("Vodafone message");
2787
+ $index = strpos($content, "TEXT:");
2788
+ if (strpos !== false) {
2789
+ $alt_content = substr($content, $index, strlen($content));
2790
+ if (preg_match("/<font face=\"verdana,helvetica,arial\" class=\"standard\" color=\"#999999\"><b>(.*)<\/b>/", $alt_content, $matches)) {
2791
+ //The content is now just the text of the message
2792
+ $content = $matches[1];
2793
+ //Now to clean up the attachments
2794
+ $vodafone_images = array("live.gif", "smiley.gif", "border_left_txt.gif", "border_top.gif", "border_bot.gif", "border_right.gif", "banner1.gif", "i_text.gif", "i_picture.gif",);
2795
+ while (list($key, $value) = each($attachments['cids'])) {
2796
+ if (!in_array($key, $vodafone_images)) {
2797
+ $content .= "<br/>" . $attachments['html'][$attachments['cids'][$key][1]];
2798
+ }
2799
  }
2800
  }
2801
  }
postie.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Postie
5
  Plugin URI: http://PostiePlugin.com/
6
  Description: Signifigantly upgrades the posting by mail features of Word Press (See <a href='options-general.php?page=postie/postie.php'>Settings and options</a>) to configure your e-mail settings. See the <a href='http://wordpress.org/extend/plugins/postie/other_notes'>Readme</a> for usage. Visit the <a href='http://wordpress.org/support/plugin/postie'>postie forum</a> for support.
7
- Version: 1.4.23
8
  Author: Wayne Allen
9
  Author URI: http://allens-home.com/
10
  License: GPL2
@@ -27,7 +27,7 @@
27
  */
28
 
29
  /*
30
- $Id: postie.php 651010 2013-01-10 20:22:44Z WayneAllen $
31
  * -= Requests Pending =-
32
  * Problem with some mail server
33
  * Multiple emails should tie to a single account
4
  Plugin Name: Postie
5
  Plugin URI: http://PostiePlugin.com/
6
  Description: Signifigantly upgrades the posting by mail features of Word Press (See <a href='options-general.php?page=postie/postie.php'>Settings and options</a>) to configure your e-mail settings. See the <a href='http://wordpress.org/extend/plugins/postie/other_notes'>Readme</a> for usage. Visit the <a href='http://wordpress.org/support/plugin/postie'>postie forum</a> for support.
7
+ Version: 1.4.24
8
  Author: Wayne Allen
9
  Author URI: http://allens-home.com/
10
  License: GPL2
27
  */
28
 
29
  /*
30
+ $Id: postie.php 652290 2013-01-14 05:19:07Z WayneAllen $
31
  * -= Requests Pending =-
32
  * Problem with some mail server
33
  * Multiple emails should tie to a single account
readme.html CHANGED
@@ -28,18 +28,34 @@ of connection and the port number. Common port configurations:
28
 
29
  <h4>Automating checking e-mail</h4>
30
 
 
 
 
 
 
 
 
 
 
 
31
  <p>By default, postie checks for new e-mail every 30 minutes. You can select from
32
  a number of different checking intervals in the settings page, under the
33
- mailserver tab.</p>
 
 
34
 
35
  <p>If you would prefer to have more fine-grained control of how postie checks
36
- for mail, you can also set up a crontab. This is for advanced users only.
37
- If your site runs on a UNIX/linux server, and you have shell access, you can
38
- enable mail checking using cron; if you don't know anything about cron, skip
39
- to the cronless postie section.</p>
 
 
 
 
 
40
 
41
- <p>Setup a cronjob to pull down the get&#095;mail.php
42
- Examples:</p>
43
 
44
  <p>*/5 * * * * /usr/bin/lynx --source <a href="http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php" rel="nofollow">http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php</a> &gt;/dev/null 2&gt;&amp;1</p>
45
 
@@ -47,14 +63,20 @@ Examples:</p>
47
 
48
  <p>*/10 * * * * /usr/bin/wget -O /dev/null <a href="http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php" rel="nofollow">http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php</a> &gt;/dev/null 2&gt;&amp;1</p>
49
 
50
- <p>This fetches the mail every ten minutes with wget</p> <hr />
51
-
 
 
 
 
52
  <h3>Upgrade Notice</h3>
53
  <dl>
54
- <dt>Attachments are now processed in the order they were attached.
55
- All script, style and body tags are stripped from html emails.
56
- Many method names have been changed as of 1.4.18. Any custom filters may need to be updated.</dt>
57
- <dd></dd>
 
 
58
  </dl>
59
 
60
  <h3 id='Usage'>Usage</h3>
@@ -64,8 +86,8 @@ Many method names have been changed as of 1.4.18. Any custom filters may need to
64
  <li>Posts can have a specific publication date. Relative dates like "tomorrow", "monday", "first day of next month" are supported.
65
 
66
  <ul>
67
- <li>date: </li>
68
- <li>date: </li>
69
  </ul></li>
70
  <li>Posts can be delayed by adding a line with delayXdXhXm where X is a number.
71
 
@@ -104,7 +126,7 @@ will get placed in the more recent post.</li>
104
  <h4>Post type</h4>
105
 
106
  <p>You can specify the post type by including it as the first part of the subject
107
- E.g. //</p>
108
 
109
  <h4>Category and tag handling</h4>
110
 
@@ -116,7 +138,7 @@ be used as the category for the post</li>
116
  <li><p>If you put the first part of a category name it will be posted in
117
  the first category that the system finds that matches - so if you put</p>
118
 
119
- <p>Subject: Gen: New News</p>
120
 
121
  <p>The system will post that in General.</p></li>
122
  <li><p>All of the above also applies if you put the category in brackets []</p></li>
@@ -189,12 +211,235 @@ class='imagecaption'&gt;{CAPTION}&lt;/div&gt;&lt;/div&gt;</code></p>
189
 
190
  <ul>
191
  <li>If your mail client doesn't support setting the subject (nokia) you
192
- can do so by putting #your title here# at the beginning of your message</li>
193
  <li>POP3,POP3-SSL,IMAP,IMAP-SSL now supported - last three require
194
  php-imap support</li>
195
  <li>The program understands enough about mime to not duplicate post
196
  if you send an HTML and plain text message</li>
197
  <li>Automatically confirms that you are installed correctly</li>
198
  </ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  <hr />
200
 
28
 
29
  <h4>Automating checking e-mail</h4>
30
 
31
+ <p>WordPress cron (which Postie relies on) doesn't run unless a page is accessed on
32
+ the site. So if you send an email, but nobody accesses the site for 3 days Postie
33
+ won't be given the chance to fetch the email and publish the post.</p>
34
+
35
+ <p>To ensure that Postie runs smoothly on a low or no volume site you need to ensure
36
+ that a page gets hit (any page is fine). Use something like cron + curl on Linux
37
+ or install curl on Windows and use the Scheduled Tasks control panel. If you are
38
+ using a hosting company that doesn't allow you access to cron you can use a service
39
+ like SetCronJob.</p>
40
+
41
  <p>By default, postie checks for new e-mail every 30 minutes. You can select from
42
  a number of different checking intervals in the settings page, under the
43
+ Mailserver tab.</p>
44
+
45
+ <h4>Forcing e-mail check</h4>
46
 
47
  <p>If you would prefer to have more fine-grained control of how postie checks
48
+ for mail, you can also set up a crontab. This is for advanced users only.</p>
49
+
50
+ <p>Setup a cronjob to pull down the get&#095;mail.php - note that every time you access
51
+ get&#095;mail.php Postie will run - it is like clicking Run Postie on the Admin screen.</p>
52
+
53
+ <h4>Linux</h4>
54
+
55
+ <p>If your site runs on a UNIX/linux server, and you have shell access, you can
56
+ enable mail checking using cron.</p>
57
 
58
+ <p>Examples:</p>
 
59
 
60
  <p>*/5 * * * * /usr/bin/lynx --source <a href="http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php" rel="nofollow">http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php</a> &gt;/dev/null 2&gt;&amp;1</p>
61
 
63
 
64
  <p>*/10 * * * * /usr/bin/wget -O /dev/null <a href="http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php" rel="nofollow">http://blog.robfelty.com/wp-content/plugins/postie/get&#095;mail.php</a> &gt;/dev/null 2&gt;&amp;1</p>
65
 
66
+ <p>This fetches the mail every ten minutes with wget</p>
67
+
68
+ <h4>Windows</h4>
69
+
70
+ <p>You will need to install <a href="http://gnuwin32.sourceforge.net/packages/wget.htm">wget</a> or <a href="http://curl.haxx.se/dlwiz/">curl</a>
71
+ Then use the Task Scheduler control panel to call wget or cron.</p> <hr />
72
  <h3>Upgrade Notice</h3>
73
  <dl>
74
+ <dt>1.4.18</dt>
75
+ <dd>Many method names have been changed. Any custom filters may need to be updated.</dd>
76
+ <dt>1.4.10</dt>
77
+ <dd>All script, style and body tags are stripped from html emails.</dd>
78
+ <dt>1.4.6</dt>
79
+ <dd>Attachments are now processed in the order they were attached.</dd>
80
  </dl>
81
 
82
  <h3 id='Usage'>Usage</h3>
86
  <li>Posts can have a specific publication date. Relative dates like "tomorrow", "monday", "first day of next month" are supported.
87
 
88
  <ul>
89
+ <li>date: date</li>
90
+ <li>date: date time</li>
91
  </ul></li>
92
  <li>Posts can be delayed by adding a line with delayXdXhXm where X is a number.
93
 
126
  <h4>Post type</h4>
127
 
128
  <p>You can specify the post type by including it as the first part of the subject
129
+ E.g. post type//real subject</p>
130
 
131
  <h4>Category and tag handling</h4>
132
 
138
  <li><p>If you put the first part of a category name it will be posted in
139
  the first category that the system finds that matches - so if you put</p>
140
 
141
+ <p>Gen: New News</p>
142
 
143
  <p>The system will post that in General.</p></li>
144
  <li><p>All of the above also applies if you put the category in brackets []</p></li>
211
 
212
  <ul>
213
  <li>If your mail client doesn't support setting the subject (nokia) you
214
+ can do so by putting #your subject/title here# at the beginning of your message</li>
215
  <li>POP3,POP3-SSL,IMAP,IMAP-SSL now supported - last three require
216
  php-imap support</li>
217
  <li>The program understands enough about mime to not duplicate post
218
  if you send an HTML and plain text message</li>
219
  <li>Automatically confirms that you are installed correctly</li>
220
  </ul>
221
+
222
+ <h4>Extending</h4>
223
+
224
+ <p>== Frequently Asked Questions ==</p>
225
+
226
+ <h4>Postie won't connect to my mailserver. Why Not?</h4>
227
+
228
+ <p>Make sure the port you are using is open. For example, bluehost seems to block
229
+ ports 993 and 995 (for pop3-ssl and imap-ssl) by default. I have heard that
230
+ you can request that they open them for you ( you might have to pay extra).</p>
231
+
232
+ <p>You can check for open ports with the following command on your server:</p>
233
+
234
+ <pre><code>netstat -ln|grep -E &#039;:::(993|995|143)&#039;</code></pre>
235
+
236
+ <p>If nothing shows up, then the ports are not open.</p>
237
+
238
+ <h4>How can I get postie to display inline images?</h4>
239
+
240
+ <p>Make sure that you send e-mail formatted as html (richtext), and set postie to
241
+ prefer html messages (in the message tab of the postie settings)</p>
242
+
243
+ <h4>Mail is not showing up right when I send html (rich formatted) e-mail!</h4>
244
+
245
+ <p>Make sure you set the preferred text type to html</p>
246
+
247
+ <h4>Do I need to any code to my theme for postie to work?</h4>
248
+
249
+ <p>No.</p>
250
+
251
+ <h4>I read somewhere to add an iframe to my footer. Should I do this?</h4>
252
+
253
+ <p>No. Do not add an iframe in your footer to get postie to check mail
254
+ periodically. To check e-mail periodically, either set-up a cron job, or use
255
+ cronless postie. See installation instructions</p>
256
+
257
+ <h4>My mail host requires SSL, but postie will not allow me to select pop3-ssl or imap-ssl</h4>
258
+
259
+ <p>You must have php-imap installed on your server for this to work. Ask your
260
+ hosting provider about this.</p>
261
+
262
+ <h4>Can I use postie to check a gmail account?</h4>
263
+
264
+ <p>Yes. You can use either pop3-ssl or imap-ssl with a gmail account. Before
265
+ attempting to use with postie, make sure that you enable pop or imap in your
266
+ gmail preferences.</p>
267
+
268
+ <ul>
269
+ <li>Pop3 settings:
270
+
271
+ <ul>
272
+ <li>protocol - pop3-ssl</li>
273
+ <li>server - pop.gmail.com</li>
274
+ <li>port - 995</li>
275
+ <li>userid - your username (e.g. if your e-mail address is foo@gmail.com,
276
+ this would be just foo)</li>
277
+ <li>password - your password </li>
278
+ </ul></li>
279
+ <li>IMAP settings:
280
+
281
+ <ul>
282
+ <li>protocol - imap-ssl</li>
283
+ <li>server - imap.gmail.com</li>
284
+ <li>port - 993</li>
285
+ <li>userid - your username (e.g. if your e-mail address is foo@gmail.com,
286
+ this would be just foo)</li>
287
+ <li>password - your password </li>
288
+ </ul></li>
289
+ </ul>
290
+
291
+ <h4>Can I use postie with GoDaddy hosting?</h4>
292
+
293
+ <p>Yes, but you must use an email set up using the GoDaddy email service and the following settings:</p>
294
+
295
+ <ul>
296
+ <li>protocol - pop3</li>
297
+ <li>server - pop.secureserver.net</li>
298
+ <li>port - 110</li>
299
+ <li>userid - xxxxx@yourdomain</li>
300
+ <li>password - your password </li>
301
+ </ul>
302
+
303
+ <p>GoDaddy hosting does not allow you to connect to non-GoDaddy mail servers like Gmail.</p>
304
+
305
+ <h4>My posts show up as being posted by 'admin' instead of me. Why?</h4>
306
+
307
+ <p>If your admin account is linked to bar@gmail.com, and you send mail from
308
+ bar@gmail.com, it will show up as being posted by admin. If you have a
309
+ wordpress user named "John Doe", which is linked to johndoe@gmail.com, make
310
+ sure that you send e-mails from johndoe@gmail.com. It doesn't matter which
311
+ e-mail address postie is checking. That is, if you send mail from
312
+ johndoe@gmail.com to foo@gmail.com, it gets posted as "John Doe".</p>
313
+
314
+ <p>If you send an e-mail to your postie address from an e-mail address that is no
315
+ t linked to a wordpress user, it will get posted as admin.</p>
316
+
317
+ <h4>Images aren't showing up at all?</h4>
318
+
319
+ <p>There are a couple possible reasons for this. First, check to see if you can
320
+ add an image through wordpress's normal posting mechanism. If not, then there
321
+ is probably 1 or 2 problems:
322
+ 1. Your server does not have the php-gd library installed. Ask your hosting
323
+ provider about this.</p>
324
+
325
+ <ol>
326
+ <li>Your wp-content/uploads directory is not writable by the webserver. Make
327
+ sure that it is</li>
328
+ </ol>
329
+
330
+ <h4>Can I delete the wp-files directory needed by postie version &lt;1.3.0?</h4>
331
+
332
+ <p>If you have posts published already by older versions of postie, getting rid
333
+ of those directories will delete any files you might have had associated with
334
+ those old posts. If you don't have any such posts, then you can safely delete
335
+ them.</p>
336
+
337
+ <h4>How can I get rid of stupid stuff my e-mail provider adds to my messages?</h4>
338
+
339
+ <p>To strip off stuff that they add at the beginning of a message, start your
340
+ post with :start</p>
341
+
342
+ <p>To strip off stuff that they add at the end of a message, end your
343
+ post with :end</p>
344
+
345
+ <h4>How can I add custom attachment icons?</h4>
346
+
347
+ <p>Simply upload the icons you want to the postie/icons/custom directory. You
348
+ must name the icons according to the following scheme:</p>
349
+
350
+ <pre><code>{filetype}-{size}.png</code></pre>
351
+
352
+ <p>For example, for word documents, you could use:</p>
353
+
354
+ <pre><code>doc-32.png</code></pre>
355
+
356
+ <p>for a 32x32 pixel icon. (You can actually create any size icon you want, but
357
+ if you name it 32, then it will only be used if you select to use size 32
358
+ icons)</p>
359
+
360
+ <p>See the other directories in icons for more examples.</p>
361
+
362
+ <p>Currently the following filetypes are supported:</p>
363
+
364
+ <ul>
365
+ <li>doc - microsoft word (including docx)</li>
366
+ <li>ppt - microsoft powerpoint (including pptx)</li>
367
+ <li>xls - microsoft excel (including xlsx)</li>
368
+ <li>numbers - iWork numbres spreadsheet</li>
369
+ <li>pages - iWork pages document</li>
370
+ <li>key - iWork keynote presentation</li>
371
+ <li>pdf - portable document format</li>
372
+ <li>rtf - rich text format</li>
373
+ <li>txt - plain text document</li>
374
+ </ul>
375
+
376
+ <h4>Can I add special text to the body of the post when using postie?</h4>
377
+
378
+ <p>Yes. You can create your own function, and use the postie_post filter.
379
+ Two short examples are included in the filterPostie.php.sample file</p>
380
+
381
+ <h4>Can I add special text to the title of the post when using postie?</h4>
382
+
383
+ <p>Yes. You can create your own function, and use the postie_post filter.
384
+ Two short examples are included in the filterPostie.php.sample file</p>
385
+
386
+ <h4>Can I select tags or categories based on the content of the e-mail?</h4>
387
+
388
+ <p>Yes. You can create your own function, and use the postie_post filter.
389
+ See the filterPostie.php.sample file for examples.</p>
390
+
391
+ <h4>Is the IMAP extension required for postie?</h4>
392
+
393
+ <p>The IMAP extension is not required, but it is strongly recommended, especially
394
+ is you are using non-English text. There is more information on php.net about
395
+ installing the IMAP extension. If you have control over your server, it is
396
+ often not hard to install.</p>
397
+
398
+ <p>On Ubuntu, try</p>
399
+
400
+ <pre><code>sudo apt-get install php5-imap</code></pre>
401
+
402
+ <p>On Fedora, try</p>
403
+
404
+ <pre><code>sudo yuminstall php-imap</code></pre>
405
+
406
+ <p>The IMAP extension is known to be installed on the following popular webhosts:
407
+ * Dreamhost</p>
408
+
409
+ <h4>How can I embed youtube or vimeo videos?</h4>
410
+
411
+ <p>Simply put the url in the body of your e-mail. (Make sure that you have the
412
+ option to convert url into links turned on)</p>
413
+
414
+ <h4>Something is going wrong, how do I see what is happening?</h4>
415
+
416
+ <p>Add the following lines to your wp-config.php file</p>
417
+
418
+ <pre><code>define(&#039;WP_DEBUG&#039;, true);
419
+ define(&#039;WP_DEBUG_LOG&#039;, true);
420
+ define(&#039;POSTIE_DEBUG&#039;, true);</code></pre>
421
+
422
+ <p>Various errors, warning and informational will be written to the wp-content\debug.log
423
+ file. There may also be all sorts of warnings and messages in your site as well
424
+ depending on how well behaved your other plugins and themes are, so you will not
425
+ want to leave these settings set to true all the time.</p>
426
+
427
+ <h4>Why doesn't Postie automatically publish my emails when running manually works</h4>
428
+
429
+ <p>WordPress cron (which Postie relies on) doesn't run unless a page is accessed on the
430
+ site. So if you send an email, but nobody accesses the site for 3 days Postie won't
431
+ be given the chance to fetch the email and publish the post.</p>
432
+
433
+ <p>To ensure that Postie runs smoothly on a low or no volume site you need to ensure that
434
+ a page gets hit (any page is fine). Use something like cron + curl on Linux or install
435
+ curl on Windows and use the Scheduled Tasks control panel. If you are using a hosting company
436
+ that doesn't allow you access to cron you can use a service like
437
+ <a href="https://www.setcronjob.com/">SetCronJob</a>.</p>
438
+
439
+ <p>It is also possible to turn the WordPress cron off. Please make sure something like</p>
440
+
441
+ <pre><code>define(&#039;DISABLE_WP_CRON&#039;, true);</code></pre>
442
+
443
+ <p>is not in your wp-config.php file.</p>
444
  <hr />
445
 
readme.txt CHANGED
@@ -6,12 +6,11 @@ Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
- Stable tag: 1.4.23
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
- The Postie plugin allows you to blog via e-mail, including many advanced
14
- features not found in WordPress's default post by e-mail feature.
15
 
16
  == Description ==
17
  Postie offers many advanced features for posting to your blog via e-mail,
@@ -41,18 +40,31 @@ imap and pop3, with the option for ssl with both. For usage notes, see the
41
  * (Postie ignores the settings under Settings->Writing->Writing-by-Email)
42
 
43
  = Automating checking e-mail =
 
 
 
 
 
 
 
 
 
44
 
45
  By default, postie checks for new e-mail every 30 minutes. You can select from
46
  a number of different checking intervals in the settings page, under the
47
- mailserver tab.
48
 
 
49
  If you would prefer to have more fine-grained control of how postie checks
50
  for mail, you can also set up a crontab. This is for advanced users only.
 
 
 
 
 
51
  If your site runs on a UNIX/linux server, and you have shell access, you can
52
- enable mail checking using cron; if you don't know anything about cron, skip
53
- to the cronless postie section.
54
 
55
- Setup a cronjob to pull down the get\_mail.php
56
  Examples:
57
 
58
  */5 * * * * /usr/bin/lynx --source http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
@@ -62,12 +74,17 @@ This fetches the mail every five minutes with lynx
62
  */10 * * * * /usr/bin/wget -O /dev/null http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
63
 
64
  This fetches the mail every ten minutes with wget
 
 
 
 
 
65
  == Usage ==
66
  * If you put in :start - the message processing won't start until it sees that string.
67
  * If you put in :end - the message processing will stop once it sees that string.
68
  * Posts can have a specific publication date. Relative dates like "tomorrow", "monday", "first day of next month" are supported.
69
- * date: <date>
70
- * date: <date> <time>
71
  * Posts can be delayed by adding a line with delayXdXhXm where X is a number.
72
  * delay:1d - 1 day
73
  * delay:1h - 1 hour
@@ -91,7 +108,7 @@ This fetches the mail every ten minutes with wget
91
 
92
  = Post type =
93
  You can specify the post type by including it as the first part of the subject
94
- E.g. <post type>//<real subject>
95
 
96
  = Category and tag handling =
97
  * If you put a category name in the subject with a : it will be used
@@ -101,7 +118,7 @@ This fetches the mail every ten minutes with wget
101
  * If you put the first part of a category name it will be posted in
102
  the first category that the system finds that matches - so if you put
103
 
104
- Subject: Gen: New News
105
 
106
  The system will post that in General.
107
 
@@ -142,10 +159,10 @@ This fetches the mail every ten minutes with wget
142
 
143
  * Image templates
144
  Postie now uses the default wordpress image template, but you can specify a
145
- different one if you wish.
146
 
147
  You can also specify a custom image template. I use the following custom
148
- template:
149
 
150
  `<div class='imageframe alignleft'><a href='{IMAGE}'><img src="{THUMBNAIL}"
151
  alt="{CAPTION}" title="{CAPTION}"
@@ -164,13 +181,14 @@ template:
164
 
165
  = Interoperability =
166
  * If your mail client doesn't support setting the subject (nokia) you
167
- can do so by putting #your title here# at the beginning of your message
168
  * POP3,POP3-SSL,IMAP,IMAP-SSL now supported - last three require
169
  php-imap support
170
  * The program understands enough about mime to not duplicate post
171
  if you send an HTML and plain text message
172
  * Automatically confirms that you are installed correctly
173
- == Frequently Asked Questions ==
 
174
 
175
  = Postie won't connect to my mailserver. Why Not? =
176
 
@@ -369,13 +387,23 @@ that doesn't allow you access to cron you can use a service like
369
  It is also possible to turn the WordPress cron off. Please make sure something like
370
  `define('DISABLE_WP_CRON', true);` is not in your wp-config.php file.
371
  == Upgrade Notice ==
372
- * Attachments are now processed in the order they were attached.
373
- * All script, style and body tags are stripped from html emails.
374
- * Many method names have been changed as of 1.4.18. Any custom filters may need to be updated.
 
 
 
 
 
 
375
 
376
  == CHANGELOG ==
 
 
 
 
377
  = 1.4.23 (2013.01.10) =
378
- * Fixed a bug with embedded CID referenced images
379
 
380
  = 1.4.22 (2013.01.10) =
381
  * Fixed a bug where the subject was not being properly decoded when Q-encoding was used.
6
  Tags: e-mail, email
7
  Requires at least: 3.0
8
  Tested up to: 3.5
9
+ Stable tag: 1.4.24
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
+ Postie allows you to blog via e-mail, including many advanced features not found in WordPress's default post by e-mail feature.
 
14
 
15
  == Description ==
16
  Postie offers many advanced features for posting to your blog via e-mail,
40
  * (Postie ignores the settings under Settings->Writing->Writing-by-Email)
41
 
42
  = Automating checking e-mail =
43
+ WordPress cron (which Postie relies on) doesn't run unless a page is accessed on
44
+ the site. So if you send an email, but nobody accesses the site for 3 days Postie
45
+ won't be given the chance to fetch the email and publish the post.
46
+
47
+ To ensure that Postie runs smoothly on a low or no volume site you need to ensure
48
+ that a page gets hit (any page is fine). Use something like cron + curl on Linux
49
+ or install curl on Windows and use the Scheduled Tasks control panel. If you are
50
+ using a hosting company that doesn't allow you access to cron you can use a service
51
+ like SetCronJob.
52
 
53
  By default, postie checks for new e-mail every 30 minutes. You can select from
54
  a number of different checking intervals in the settings page, under the
55
+ Mailserver tab.
56
 
57
+ = Forcing e-mail check =
58
  If you would prefer to have more fine-grained control of how postie checks
59
  for mail, you can also set up a crontab. This is for advanced users only.
60
+
61
+ Setup a cronjob to pull down the get\_mail.php - note that every time you access
62
+ get\_mail.php Postie will run - it is like clicking Run Postie on the Admin screen.
63
+
64
+ = Linux =
65
  If your site runs on a UNIX/linux server, and you have shell access, you can
66
+ enable mail checking using cron.
 
67
 
 
68
  Examples:
69
 
70
  */5 * * * * /usr/bin/lynx --source http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
74
  */10 * * * * /usr/bin/wget -O /dev/null http://blog.robfelty.com/wp-content/plugins/postie/get\_mail.php >/dev/null 2>&1
75
 
76
  This fetches the mail every ten minutes with wget
77
+
78
+ = Windows =
79
+ You will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or [curl](http://curl.haxx.se/dlwiz/)
80
+ Then use the Task Scheduler control panel to call wget or cron.
81
+
82
  == Usage ==
83
  * If you put in :start - the message processing won't start until it sees that string.
84
  * If you put in :end - the message processing will stop once it sees that string.
85
  * Posts can have a specific publication date. Relative dates like "tomorrow", "monday", "first day of next month" are supported.
86
+ * date: date
87
+ * date: date time
88
  * Posts can be delayed by adding a line with delayXdXhXm where X is a number.
89
  * delay:1d - 1 day
90
  * delay:1h - 1 hour
108
 
109
  = Post type =
110
  You can specify the post type by including it as the first part of the subject
111
+ E.g. post type//real subject
112
 
113
  = Category and tag handling =
114
  * If you put a category name in the subject with a : it will be used
118
  * If you put the first part of a category name it will be posted in
119
  the first category that the system finds that matches - so if you put
120
 
121
+ Gen: New News
122
 
123
  The system will post that in General.
124
 
159
 
160
  * Image templates
161
  Postie now uses the default wordpress image template, but you can specify a
162
+ different one if you wish.
163
 
164
  You can also specify a custom image template. I use the following custom
165
+ template:
166
 
167
  `<div class='imageframe alignleft'><a href='{IMAGE}'><img src="{THUMBNAIL}"
168
  alt="{CAPTION}" title="{CAPTION}"
181
 
182
  = Interoperability =
183
  * If your mail client doesn't support setting the subject (nokia) you
184
+ can do so by putting #your subject/title here# at the beginning of your message
185
  * POP3,POP3-SSL,IMAP,IMAP-SSL now supported - last three require
186
  php-imap support
187
  * The program understands enough about mime to not duplicate post
188
  if you send an HTML and plain text message
189
  * Automatically confirms that you are installed correctly
190
+
191
+ = Extending === Frequently Asked Questions ==
192
 
193
  = Postie won't connect to my mailserver. Why Not? =
194
 
387
  It is also possible to turn the WordPress cron off. Please make sure something like
388
  `define('DISABLE_WP_CRON', true);` is not in your wp-config.php file.
389
  == Upgrade Notice ==
390
+
391
+ = 1.4.18 =
392
+ Many method names have been changed. Any custom filters may need to be updated.
393
+
394
+ = 1.4.10 =
395
+ All script, style and body tags are stripped from html emails.
396
+
397
+ = 1.4.6 =
398
+ Attachments are now processed in the order they were attached.
399
 
400
  == CHANGELOG ==
401
+ = 1.4.24 (2013.01.13) =
402
+ * Fixed a bug where the original attachment name wasn't being used.
403
+ * Fixed a bug where the #eimg# tags in the excerpt were not getting expanded.
404
+
405
  = 1.4.23 (2013.01.10) =
406
+ * Fixed a bug with embedded CID referenced images.
407
 
408
  = 1.4.22 (2013.01.10) =
409
  * Fixed a bug where the subject was not being properly decoded when Q-encoding was used.
screenshot-1.png DELETED
Binary file
test/data/ics-attachment.var ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ s:5025:"Delivered-To: postie-test@devzing.com
2
+ Received: by 10.220.2.72 with SMTP id 8csp289393vci; Thu, 10 Jan 2013 21:49:47
3
+ -0800 (PST)
4
+ X-Received: by 10.50.222.232 with SMTP id qp8mr4598150igc.25.1357883387082;
5
+ Thu, 10 Jan 2013 21:49:47 -0800 (PST)
6
+ Return-Path: <wayne@allens-home.com>
7
+ Received: from mail-ia0-f180.google.com (mail-ia0-f180.google.com
8
+ [209.85.210.180]) by mx.google.com with ESMTPS id
9
+ bd6si4653488icc.37.2013.01.10.21.49.46 (version=TLSv1
10
+ cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 10 Jan 2013 21:49:46 -0800 (PST)
11
+ Received-SPF: neutral (google.com: 209.85.210.180 is neither permitted nor
12
+ denied by best guess record for domain of wayne@allens-home.com)
13
+ client-ip=209.85.210.180;
14
+ Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.210.180
15
+ is neither permitted nor denied by best guess record for domain of
16
+ wayne@allens-home.com) smtp.mail=wayne@allens-home.com
17
+ Received: by mail-ia0-f180.google.com with SMTP id t4so1227028iag.25 for
18
+ <postie-test@devzing.com>; Thu, 10 Jan 2013 21:49:46 -0800 (PST)
19
+ X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
20
+ s=20120113; h=mime-version:date:message-id:subject:from:to:content-type
21
+ :x-gm-message-state; bh=Kx8VC1csVJ90y69hWP/83rlz+zssqJRnw0m6G0sYFpk=;
22
+ b=K1g1+w2WHvyMjRmx9XZTzF5wQMkrhj1wUxnK2v5XPdEspL29MW4mTteC12r1RlUJ0T
23
+ B+D9hv7WLijsfvIh3qi70Glsuw9rqg0D9Q9Bzhe0/0tMpSSS93RxY3RmEMEjke4oop3T
24
+ K+8KCcZgqz2uGnLhXUn2oGFn8REzRsWUOoOBiJ7WKoqLIimplWGzQEuWFUwWtyxO4cfI
25
+ RRCdANehfMMDJceSUnzOL2GthdKPeuhhI1nV7HNJzUpHEzHcadjicob0juT+19WiHwNw
26
+ TerG7MGqB+fT8fAz3l6+K0tQO7Go+rvc5j+zrQW/VsMrqvNnIA492U7H2j0IHc4rDe/F I9jQ==
27
+ MIME-Version: 1.0
28
+ Received: by 10.50.222.166 with SMTP id qn6mr8107381igc.47.1357883386551; Thu,
29
+ 10 Jan 2013 21:49:46 -0800 (PST)
30
+ Received: by 10.231.41.209 with HTTP; Thu, 10 Jan 2013 21:49:46 -0800 (PST)
31
+ Date: Thu, 10 Jan 2013 21:49:46 -0800
32
+ Message-ID: <CACOA_7ZwbqDcygOpc3Nig0MFGL=O5Vwsf1_3nRf7WSwdKvLXtQ@mail.gmail.com>
33
+ Subject: ics test
34
+ From: Wayne Allen <wayne@allens-home.com>
35
+ To: postie-test@devzing.com
36
+ Content-Type: multipart/mixed; boundary=14dae934111fe6ddee04d2fcdcca
37
+ X-Gm-Message-State: ALoCoQk2GF4wk0t/o6B9nFOJMf8OqgmuEqg7PR52zFwBoq0F01oF8H79tIHaQ86owzEarPE09QnV
38
+
39
+ --14dae934111fe6ddee04d2fcdcca
40
+ Content-Type: multipart/alternative; boundary=14dae934111fe6ddeb04d2fcdcc8
41
+
42
+ --14dae934111fe6ddeb04d2fcdcc8
43
+ Content-Type: text/plain; charset=ISO-8859-1
44
+
45
+ sample text
46
+
47
+ --14dae934111fe6ddeb04d2fcdcc8
48
+ Content-Type: text/html; charset=ISO-8859-1
49
+
50
+ <div dir='ltr'>sample text<div><br></div></div>
51
+
52
+ --14dae934111fe6ddeb04d2fcdcc8--
53
+ --14dae934111fe6ddee04d2fcdcca
54
+ Content-Type: application/octet-stream; name="sample.ics"
55
+ Content-Disposition: attachment; filename="sample.ics"
56
+ Content-Transfer-Encoding: base64
57
+ X-Attachment-Id: f_hbswpd1e0
58
+
59
+ QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFyIDcw
60
+ LjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6UFVCTElT
61
+ SA0KWC1XUi1DQUxOQU1FOkRhdmlkDQpYLVdSLVRJTUVaT05FOkFtZXJpY2EvTmV3X1lvcmsNCkJF
62
+ R0lOOlZUSU1FWk9ORQ0KVFpJRDpBbWVyaWNhL05ld19Zb3JrDQpYLUxJQy1MT0NBVElPTjpBbWVy
63
+ aWNhL05ld19Zb3JrDQpCRUdJTjpEQVlMSUdIVA0KVFpPRkZTRVRGUk9NOi0wNTAwDQpUWk9GRlNF
64
+ VFRPOi0wNDAwDQpUWk5BTUU6RURUDQpEVFNUQVJUOjE5NzAwMzA4VDAyMDAwMA0KUlJVTEU6RlJF
65
+ UT1ZRUFSTFk7QllNT05USD0zO0JZREFZPTJTVQ0KRU5EOkRBWUxJR0hUDQpCRUdJTjpTVEFOREFS
66
+ RA0KVFpPRkZTRVRGUk9NOi0wNDAwDQpUWk9GRlNFVFRPOi0wNTAwDQpUWk5BTUU6RVNUDQpEVFNU
67
+ QVJUOjE5NzAxMTAxVDAyMDAwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7QllNT05USD0xMTtCWURBWT0x
68
+ U1UNCkVORDpTVEFOREFSRA0KRU5EOlZUSU1FWk9ORQ0KDQpCRUdJTjpWRVZFTlQNCkRUU1RBUlQ7
69
+ VkFMVUU9REFURToyMDA3MDQxNw0KRFRFTkQ7VkFMVUU9REFURToyMDA3MDQxOA0KRFRTVEFNUDoy
70
+ MDA3MTAwM1QxNzE1MTdaDQpPUkdBTklaRVI7Q049RGF2aWQ6TUFJTFRPOm1lQGhvbWUuY29tDQpV
71
+ SUQ6NDFyOGNlZmdlMnBpM3RtdDd0dDc2NmJhZjRAZ29vZ2xlLmNvbQ0KQ09NTUVOVDtYLUNPTU1F
72
+ TlRFUj1NQUlMVE86bWVAaG9tZS5jb206PHA+SGV5IEV2ZXJ5b25lOiBJIHRoaW5rIEkgaGF2ZSB0
73
+ YWxrZWQgdG8gZXZlcnlvbmUgYWJvdXQgc2V0dGluZyB1cCBhIGJyYWluc3Rvcm0vaW5pdGlhbCBw
74
+ bGFubmluZyBtZWV0aW5nIGZvciBhIGNvbXBsZXRlIG92ZXJoYXVsIG9mIHRoZSBjdXJyZW50IEZD
75
+ QUcgc2l0ZS4gSSBoYXZlIHBlbmNpbGVkIGluIGEgbWVldGluZyBmb3IgVHVlc2RheSBBcHJpbCAx
76
+ MCAgQCA3OjAwIFBNIDg6MzAgUE0uICBXb3VsZCB5b3UgYmUgYWJsZSB0byBhdHRlbmQ/DQpDTEFT
77
+ UzpQVUJMSUMNCkNSRUFURUQ6MjAwNzA0MDJUMjM0ODIxWg0KREVTQ1JJUFRJT046V2Vic2l0ZSBC
78
+ cmFpbnN0b3JtIFNlc3Npb24NCkxBU1QtTU9ESUZJRUQ6MjAwNzA0MTFUMTE1NjI1Wg0KTE9DQVRJ
79
+ T046RkNBRw0KU0VRVUVOQ0U6Mg0KU1RBVFVTOkNPTkZJUk1FRA0KU1VNTUFSWTpGQ0FHIFdlYnNp
80
+ dGUgTWVldGluZw0KVFJBTlNQOlRSQU5TUEFSRU5UDQpFTkQ6VkVWRU5UDQoNCkJFR0lOOlZFVkVO
81
+ VA0KRFRTVEFSVDtWQUxVRT1EQVRFOjIwMDcxMjI1DQpEVEVORDtWQUxVRT1EQVRFOjIwMDcxMjI1
82
+ DQpEVFNUQU1QOjIwMDcxMDAzVDE3MTUxN1oNCk9SR0FOSVpFUjtDTj1EYXZpZDpNQUlMVE86bWVA
83
+ aG9tZS5jb20NClVJRDprYWlpNml0MWdtYnBuY21rYXZqa3BrcTF0a0Bnb29nbGUuY29tDQpDTEFT
84
+ UzpQVUJMSUMNCkNSRUFURUQ6MjAwNzAyMDlUMTEzNjQ2Wg0KTEFTVC1NT0RJRklFRDoyMDA3MDIw
85
+ OVQxMTM2NDZaDQpTRVFVRU5DRTowDQpTVEFUVVM6Q09ORklSTUVEDQpTVU1NQVJZOkNocmlzdG1h
86
+ cw0KVFJBTlNQOk9QQVFVRQ0KRU5EOlZFVkVOVA0KRU5EOlZDQUxFTkRBUg==
87
+ --14dae934111fe6ddee04d2fcdcca--
88
+ ";
test/data/japanese-attachment.var ADDED
@@ -0,0 +1,1485 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ s:113708:"Delivered-To: postie-test@devzing.com
2
+ Received: by 10.220.2.72 with SMTP id 8csp307363vci; Fri, 11 Jan 2013 00:32:20
3
+ -0800 (PST)
4
+ X-Received: by 10.68.143.162 with SMTP id sf2mr225664487pbb.137.1357893139987;
5
+ Fri, 11 Jan 2013 00:32:19 -0800 (PST)
6
+ Return-Path: <me@harupong.com>
7
+ Received: from oproxy11-pub.bluehost.com (oproxy11-pub.bluehost.com.
8
+ [173.254.64.10]) by mx.google.com with SMTP id
9
+ e5si4511976pax.261.2013.01.11.00.32.18; Fri, 11 Jan 2013 00:32:19 -0800 (PST)
10
+ Received-SPF: pass (google.com: domain of me@harupong.com designates
11
+ 173.254.64.10 as permitted sender) client-ip=173.254.64.10;
12
+ Authentication-Results: mx.google.com; spf=pass (google.com: domain of
13
+ me@harupong.com designates 173.254.64.10 as permitted sender)
14
+ smtp.mail=me@harupong.com; dkim=pass header.i=@harupong.com
15
+ Message-Id: <50efce13.e54e420a.0bc9.ffffd941SMTPIN_ADDED_MISSING@mx.google.com>
16
+ Received: (qmail 18519 invoked by uid 0); 11 Jan 2013 08:31:57 -0000
17
+ Received: from unknown (HELO box706.bluehost.com) (66.147.244.206) by
18
+ oproxy11.bluehost.com with SMTP; 11 Jan 2013 08:31:57 -0000
19
+ DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
20
+ d=harupong.com; s=default;
21
+ h=Date:Content-Transfer-Encoding:Content-Type:Mime-Version:Subject:To:From;
22
+ bh=BtYEE1e4nMsH+/P0Sj9LRLkD++4hLEO62VDWnp/pbN8=;
23
+ b=S5qbMJhkdhc1MylkSDXnDAxbr0p6n2jAkuu43fEU3+2ZiZhofWEZ8DYNNYX14JI+gLMlASnZJmFYjAsSokUtokrnnmYmEnacry2zscsnNhUOjNepuzCuKGSfNufSHxV9;
24
+ Received: from [175.41.201.240] (port=53090 helo=AMAZONA-M9S7CRI) by
25
+ box706.bluehost.com with esmtpa (Exim 4.80) (envelope-from <me@harupong.com>)
26
+ id 1Tta1r-0004oc-9Y for postie-test@devzing.com; Fri, 11 Jan 2013 01:31:57
27
+ -0700
28
+ From: me@harupong.com
29
+ To: postie-test@devzing.com
30
+ Subject: =?ISO-2022-JP?B?UG9zdGllGyRCTVElRiU5JUglYSE8JWsbKEo=?=
31
+ X-Mailer: SMAIL 4.13
32
+ Mime-Version: 1.0
33
+ Content-Type: multipart/mixed;
34
+ boundary="------_7356174603947QWEORfsdEYfi_MULTIPART_MIXED_"
35
+ Content-Transfer-Encoding: 7bit
36
+ Date: Fri, 11 Jan 2013 17:31:48 +0900
37
+ X-Identified-User: {3515:box706.bluehost.com:harupong:harupong.com}
38
+ {sentby:smtp auth 175.41.201.240 authed with me@harupong.com}
39
+
40
+ --------_7356174603947QWEORfsdEYfi_MULTIPART_MIXED_
41
+ Content-Type: text/plain; charset=ISO-2022-JP
42
+
43
+ $B$3$N%a!<%k$O(JSMAIL$B$H$$$&%a!<%k%/%i%$%"%s%H$+$iAw?.$7$?(JPostie$BMQ%F%9%H%a!<%k$G$9(J!
44
+ SMAIL http://dip.picolix.jp/disp2.html
45
+
46
+ This email is sent with SMAIL, for testing Postie.
47
+ SMAIL http://dip.picolix.jp/disp2.html
48
+
49
+ title in Japanese
50
+ body part in Japanese
51
+ attached file name in Japanese
52
+
53
+ harupong
54
+
55
+ --------_7356174603947QWEORfsdEYfi_MULTIPART_MIXED_
56
+ Content-Type: application/octet-stream; name="=?ISO-2022-JP?B?UG9zdGllGyRCTVElRiU5JUglVSUhJSQlaxsoSi5tcDM=?="
57
+ Content-Disposition: attachment;
58
+ filename="=?ISO-2022-JP?B?UG9zdGllGyRCTVElRiU5JUglVSUhJSQlaxsoSi5tcDM=?="
59
+ Content-Transfer-Encoding: base64
60
+
61
+ SUQzAgAAAAAAOFRUMgAAMgBFeHBvbmVudGlhbCBTd2VlcCAxNkh6LTIwa0h6LCBjb25zdGFudCBh
62
+ bXBsaXR1ZGUA//tQxAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAGCAAE76gACBQcKDQ8SFBcZ
63
+ HB8hJCYpKy4xMzY4Oz1AQkVISkxPUlRXWlxeYWRmaWxucHN2eHt+gIKFh4qNj5KUl5mcn6Gkpqmr
64
+ rrGztri7vcDCxcjKzM/S1Nfa3N7h5Obp7O7w8/b4+/4AAAA8TEFNRTMuOTcgAQAAAAAALtAAABRA
65
+ JAimYgAAQAABO+ooTIp5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/7UMQAAARAMuWg
66
+ PSD435Cm9YMMXxLdbdtgAAABCeqJGoM8BSybjg+SE6BdK2XsI1E6FrJCwtQAEttySXWgAI8msrfV
67
+ RCK7bShlA4hOTnErxNNzQqdfKvpoTmhV9zSvETod4EfBJngjbwM4yYPkjgAAA08pLEAAatkWcGED
68
+ Arp+dMb4xmcmBjwqYiEFoZFAICGknmCS615ankwiYlc43nzNVs+vt5lVOc35RqJT45ZJiTIUCYaf
69
+ ruqABTt2+21qABqDB2mBkAYpnAAsoso+1aX/+1LEMIAJKIUZr+zA4P0VJvXjDF7/W53/6QtRW75c
70
+ b0MGa4ciDzaWlUBZCYXHcaTg3ERQYPB0DjGiEn6qAABgw220YAB+bUplCMR3PmaMWhUGZzD1nKlt
71
+ Av2Mpv1uOZnIx2Giz4g5WFUM6xtqtGI9zmMVT8yAAVaAIAAb74NwsIkLpS6bWBp2+IQGhfT/+s8I
72
+ 1T3Qqp+gdVQr1FHWp64J1nRrd/oPpjBvvlwzrAprMXBEzDDKgtk4HdY1cTczlMYyCG050jAPN1AF
73
+ Kt8Us//u2//7UsRKAIcEfzmu5KEwxpcndewIFm6fou+pP/K+/+m0g3+3u6VWJXskLNJ9TgWYYyYD
74
+ lnAZ4GfhFnJqRrBiZqLAIxRbY2uZ/bX/////////////0T7/MBkyJsgWPxOhOJYUNWlTM5TeMkiP
75
+ MURKNyyyxuGHCgXJ////7f9H+z/b/k///jf8mfkCZlmQjhpx2o0Jrueh8E2cewGsG5mIgRCKdyEl
76
+ l07//////p///////0o/eF3wMIeEeTsfkNqQs0OojKRnO/w0G0Jy9Ucmaz2z//tSxHMDx/wbDg/3
77
+ IkCkA2PB/uwA/////6f9v//2f//T/kD5ylV4ycgSpPeY+N1lRNHzWMuCLPvSOEjEkSDJZpOmXf//
78
+ ///6Eyo+XxPxMIOChgv7mJvRjIpg0gUIjIBebzubIuH1owupmOo1kYkcGXmE6g7x4Sam/2UakP5m
79
+ EeA/IhMajl8oF//////0//////Z/pTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
80
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LEnIPGVBsSD/cAgKwDY4H+7ACqqqqqqqqqqqqq
81
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj+2UH4xAkGdPqejVy04
82
+ jjLBLWIpqCORD9j/////////////958P2AcZ7QSLmLjiIxhkwUKf50B0yKm21gaALZ1iAhE1zgca
83
+ 62z////q/o///6fR//9CYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
84
+ VVVVVVVVVf/7UsTLg8WYGxgP8yBAlgNjQf7oCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
85
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPlmLuTEnAKYPPYOioPHB0keREwRS9w4IqncM8/JoUJUI
86
+ Yy0J0mG+hcBxg7prqnxnoZpkmNh4GgFQ3lQUs2u3/////6/o/+n/T/s/wH/k0xBTUUzLjk3VVVVV
87
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+Dw1QbHA/v
88
+ QCC8g2LB/mBIVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
89
+ VVVVVVU+j8m8FioM78OTWImO8VNqEBzkeLJcNIeGVY//////////////ScXJ36Gf/FSJjFYnIYbM
90
+ FunEbsGtSdmd5lGRg2neYYCZvpApVtsV/1f7f9X+U////0f7f8gn+aTEFNRTMuOTdVVVVVVVVVVV
91
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PEhBkcD+8gAMYDYkH+ZEhVVVVVVVVVVVVV
92
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT6ZiPExYwBDPNlQ2ANz
93
+ 0njeDQNCGjKXbI3ilOX/////+j///////QcJj6TmfulSxjEAnKYbCFuHEDsmtKdGdxlmRo2HceYK
94
+ RvJgpZtdv///93/X/v/6/6f//r/0piCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
95
+ qqqqqqqqqv/7UsT/g8McGR4P80Ag1YNiAf7kSKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
96
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPorJmDFjQB48sSzXowPMbN2IBT0aNJcMgeGVY///////
97
+ /b/////9J0xXskaCcVPmMeidRhtwXCcUu0a3J6Z4mYZHDad5gATN9IFKtts//+7/R/q////yH//z
98
+ X+QTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxLQbHg/z
99
+ QADbg2IB/uRIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
100
+ qqqqqqo+Vwu3MU4AYjuISNTBM7IgDYQ5kUEU12lwZV0fQf5fmihlSxjPQneYcWFyHHDvmvKfGfBn
101
+ mSo2HkWAVDeVAyza53/Z//93+K2f9/1/6f9lH6f9KYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVV
102
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PE7BseD/NAANMDYgH+5EhVVVVVVVVVVVVV
103
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT/EUSgxSUFROlEg0WCQ
104
+ 0QNRxo4LB0fGUQ3U///////+v/////95+1VjQZx0P4mKXh3BhZgRie9tByR3mv0sZwJYDKChZolB
105
+ ALzbP/////lP93//0f//QmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
106
+ qqqqqqqqqv/7UsT/g8TsGx4P80AA04NiAf7kSKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
107
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPosV3zDrAkg6fLMmXDBvCywqOhMUza+8lG7///////1H
108
+ 7+vAJlyotQYggFYmETgyh1KBm21QaMM5lEXBrRUhiGj9Ff/////9P//////+lMQU1FMy45N6qqqq
109
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+Dw2QbHg/z
110
+ QCDdA2IB/uRIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
111
+ qqqqqqo/2GK8MFlETTU+6M+O0yijDGBXNfIwF0XFPKSb2/s///////2/7P9H//0/5A+hhDmMkKDo
112
+ TwdwjZBCT8aY5hrNhPDNBUeFklUAy6Z7/////////////6ExBTUUzLjk3qqqqqqqqqqqqqqqqqqq
113
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEtBkcD/NAAMQDYoH+ZEiqqqqqqqqqqqqq
114
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj+gOucxhUgcPCOBNx36
115
+ NIk/MvzQMeCFMPxGMTQgQG6X6gXJ////7f9H//yX+T//+3/JnyAiYJjs4QQcpIeaUlAdYxm1nRoA
116
+ 6ZCAEwIo4pi71n/////////////6UxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
117
+ qqqqqqqqqv/7UsT/g8QMGRwP7yAAuINjAf5gSKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
118
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMMF9kDLwCTExK8QgMKaCYT0uEOKQE1qpDMxXPbAAU6oD
119
+ EvNs///////3f//If//V/kD41DCcxdYAcPPjI18JzzlDdBQc+IjKSbI3qlOX/////////////0Ji
120
+ CmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxYgbGA/z
121
+ IECqA2OB/uwAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
122
+ VVVVVVU+3vClM39H9DFDg7EwrsIoPYWM466jXCVM2koBihUo0CQgKBdv/////////+k/N13MMOJD
123
+ KTMUsJUuCaQUXipgsB0qGSNXhN//////////////6f9iYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqq
124
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PGRBsSD/cAgKiDY8H+7ACqqqqqqqqqqqqq
125
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj5CkqIyR4OvPB3GNjkL
126
+ PxpjmGs188M0FR4WSVLvLpnv/////////////oPJk/wzG/yGI9G6E3ngw02UszLNgyAIsxFEoyPB
127
+ wgF0v1AuT////2///Z/t/0///F/8mmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
128
+ VVVVVVVVVf/7UsT/g8Y4GxIP8wJAm4Njwf5oAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
129
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPlnFzjG5wSQ4KLEz9Go45BNXIjMg0IMh4AXw0l/sf///
130
+ //////////pPWw9DjOwiSsxW0QwMLyCcT6+QObQs2WqjOxZOUYEGmqYDiXm2f7f//////9/+j//6
131
+ NSYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxaAbFA/z
132
+ IkCeg2NB/mgAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
133
+ qqqqqqo/b55BMRGC8DWcNMRIAExRhIOkxQIj2wdvJO7////1/939X/////7v6z6BUh8yRkOAO9mx
134
+ NhT8Ponzk2Q1w5MzEiIVTuQksSnf/////9P//////+lMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqq
135
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PFUBscD/dgAMiDYkH+4BCqqqqqqqqqqqqq
136
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjbi+0Ix5gebPQdMN2Hf
137
+ NK0sMwjFP38OBBMOILigYshTA2z/////6v///8h//9X+QP98PizG6gDg/OOjcAtP2aOMJBVIiSl+
138
+ 1ptilOX////2/////////QmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
139
+ VVVVVVVVVf/7UsT/g8UoGx4P92AAx4NiQf5kSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
140
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPmdkszLLxaY/Yp84JYY0+PkzPKAyEGMxLCwNSKgMQUro
141
+ r/////////////9J+vfMUYNkM8m09VGhS7nW8xt0qaGuGNGIqEJAhwUr2RbP///9n//2/7P9H//x
142
+ F/kExBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxSAZGg/z
143
+ QACsA2OB/uwAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
144
+ VVVVVVU+JQQPMcmBVThswjQQdTlUY1gpM1DgcYjwGvtgT+5HxU7r5mj49kYlUHAmFBhBB46mnBW0
145
+ aoRZmEiAPIVMbDl0oF2//////////6f//pTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
146
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PF+BsUD/dAQJ6DY4H+aABVVVVVVVVVVVVV
147
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT43atIwlERTMw7Ay44z
148
+ H6GMSFMz8AYqh4xRUTe39n//////////////yB/0wZgZDkD+nRKHGnxRndshuR6aOOGSAJEHqpqZ
149
+ O7a//////0f//////6ExBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
150
+ VVVVVVVVVf/7UsT/g8WUGxgP9wCAv4Nigf7sAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
151
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPRR6ATMhx54xHgNxMJpB/Dv1FN9tQ1EhzLpCPAQqQ2FL
152
+ pQLt///////3///Sf67ksGFdicpmn1GaIGZJTRiowmnwBGxwJUCcTe0ez////Z/p/2///R//9P+Q
153
+ TEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+Dw8wbHg/3
154
+ YCC8g2KB/mBIVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
155
+ VVVVVVU/5QK7Mg0Bozmk6DSwjTrVY2ozNBFgMgjwWourc/tr///////7P/////oP/B4FTNHx0YxI
156
+ oNRMJtB7Dv07N9s41EgTLo+A9QuY1FLpQL//////r////0/7P9P+1MQU1FMy45N1VVVVVVVVVVVV
157
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PFRBsYD/MgQKqDY4H+7ABVVVVVVVVVVVVV
158
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT32/vowUoZFNgaMM9Fl
159
+ Of2jZIsztWMWLRkGThEgZXs9s/////+r////R//9X+QP5YPATHPgDU/2YDdRBNBiYyYETtAGqRIN
160
+ ebdpTl///////9n/////0JiCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
161
+ qqqqqqqqqv/7UsT/g8WcGxQP8wJAtINiwf5kCKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
162
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPmfe5zJlxDg8cfU2bSI/a3OddDYkUzUaFhVHYuSuqdMs
163
+ X7ajGLhjE6NqA1uXk+XqOSlzW1wywtAIAkSDgZWGRbP/////////9H//1JiCmopmXHJvVVVVVVVV
164
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxUgbHA/3
165
+ YADFA2KB/mBIVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
166
+ VVVVVVU/NaGfMV2CWjkq9M1E47YzQOMMMtIg+u93J/n////2///Z//9J+rZMaZCWEaHOyPmm5UHa
167
+ NJt58aEPmRgRMEKoKYu9Z/////////////+lMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVV
168
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PFyBsUD/dgAKKDY4H+ZAhVVVVVVVVVVVVV
169
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT88PJYzAobZMQfDEDCM
170
+ AcU6zHjcC7NInQygOQOoQDNIkNYts/////+U////0f7f9Ry13iOYTCK2GwUamdKZHJXZrrsZokmJ
171
+ kQoAq+L8r2ndv/////////+n//6/8mmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
172
+ qqqqqqqqqv/7UsT/g8PwGxoP92AgsYNiwf7sAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
173
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPj9ZhjFyQUk7EPAFKxsoRTx5ILC0fGUPvc///////+s+
174
+ 6w34MgUCXTmVKDS4rTsWo2xBNBIDIAUoB1G1Mndtf/////////////QmIKaimZccm9VVVVVVVVVV
175
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxJQbGg/z
176
+ IACog2OB/uwAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
177
+ VVVVVVU/PH6nMtrGeD9q4TgtpjUBDTNErjIQbTEsMgWEQgMgUcoru//+///6f9///0///T/uNw9/
178
+ LDDOhVE2nioz2S85u4NgdTOUYxYhLzKwl+mSz2z///////b//9H//1f7ExBTUUzLjk3VVVVVVVVV
179
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PGBBsUD/MCQLUDYsH+7ABVVVVVVVVVVVVV
180
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT6tJDMxUYImOMqczMQj
181
+ rbNAgBDl4EV2du5b5///////9n/////0H6EhxBjqoKUcFFyZ8jYcYgmqkhmAaEFyFi+GUw9j////
182
+ /////////9KYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
183
+ qqqqqqqqqv/7UsT/g8QAGRwP80AAqINjgf7sAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
184
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPkGhojIVA4M6VZg1QOk8eQN8WzTTIyYRGgpZKKzLbX//
185
+ ///////////0G9x/wpjpIqsdLSOayqMe1lnFwBqieZWRA4BUCLerWnf/u////////+n//60xBTUU
186
+ zLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxiAbFA/3
187
+ AIC1A2LB/uwAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
188
+ qqqqqqo5Ffg2MAND7zXuGM8M05fg1kkyqgAEVUmoq+eW///////////9H//1f6D66pBsxUwHGOSn
189
+ 0zgKjzLA1gQeXwSLZ2/lP///////9SYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
190
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PExBsaD/MgAKMDY4H+7ABVVVVVVVVVVVVV
191
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT75SDwxpsDgPiIk2mUD
192
+ 6LziljTBQ5EkAzB0Y1j/////////////9J+6Tc0Y+EFbnJKgGkRbmVI4GNAhn/Ebw5MExlUzi2v/
193
+ ////////////oTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
194
+ VVVVVVVVVf/7UsT/g8VEGxoP92AAroNiwf7sAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
195
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPap7DTIPxIQ6mfc1hRo9SvOHbjUkEysaDgVSpACwad//
196
+ /////+///6f//l/9xlDnjYYg0H4njc0bWb5oFDGTimdtxoIqBNdUubW1///////93//0f//UmIKa
197
+ imZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxTgbGA/z
198
+ QACBgyNB/mQAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
199
+ qqqqqqo5aTpdMEYDPjMU5Mkp41lsy7QwhsLhltuezWBr3////2//////SfpHeLGJbhBp9k8aignz
200
+ RnSWUQlpiNcfux3///b//////////p/0JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
201
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PE5BscD/NAAKaDY0H+5AhVVVVVVVVVVVVV
202
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT4UFYMxQwBCOdhA0QDT
203
+ iggdFEjxQBWu6ckqn0BiN5iy4IUd6RJrEmHgVm3KGcBhxJZjdHZjXP/////////////pTEFNRTMu
204
+ OTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
205
+ VVVVVVVVVf/7UsT/g8WsGxYP92AApgNjAf5kCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
206
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPz4b3DGLggE966DayBP3MOQrNSSAyFQpsLOody//////
207
+ ///////+g+XW/zMYrCvj6UvN0qY0MZTKI6O580xEzW5Ltd6z//////////9P//0piCmopmXHJuqq
208
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxLQbGA/z
209
+ QACaA2MB/eAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
210
+ qqqqqqo6Nzo6MTYC3TwMuNhKU+OA4Tk0pwxgVXTgsSfm1///////93//0Goi/05hpoV0caippNJH
211
+ UqmvYGWLmDBM5f5lsWvf/d////r/3///SmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
212
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PDRBkcD/NAIJuDY4H+aABVVVVVVVVVVVVV
213
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTJu+S4wWwIhOVzDTmc6
214
+ djSdMMov66UVfqd7//////////9BvLX8yYCYEHGfXpk60aV5irAwdI58ZPAs9z//////////6UxB
215
+ TUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
216
+ VVVVVVVVVf/7UsT/g8TwGxoP80AAo4NjAf5kCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
217
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVOsp79DBkwaUxKKGD0Q6FEo7KdvpFJPe7//////////9H
218
+ //1H2qfWZhPgLceXaZJQCRpfRVdgAJk9RH/9f////b/Lf//v/3/7f96YgpqKZlxybqqqqqqqqqqq
219
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxLwbGA/z
220
+ QACbA2MB/mgAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
221
+ qqqqqqo+inGYMJfA4z4NDPiQchK9dDX38jFOc///////+3//6v///9B/DFh6YSYBMH1JhEgaJpwL
222
+ /dQNkan/7f/////s//+X////0piCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
223
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PEVBsaD+8gAImDYwH95ABVVVVVVVVVVVVV
224
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVT4lYqwwb0BRB6wmZlYJ
225
+ cQbEc8WXZ///////////////oPmmfczBTgC4b/JnUomgjI0P28///////////X//9CYgpqKZlxyb
226
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
227
+ qqqqqqqqqv/7UsT/g8RsGxgP7wAAmgMiwf0wEKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
228
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPn/dfDAtQBkfojE1GFCx9iDf/q////7/6z5xHP8wCcAK
229
+ AVJv/+tMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
230
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxHwXGA/r
231
+ AACMAuMB/SQQqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
232
+ qqqqqqo+QN4YBwQKLhIWs2gUec2Fv/2f///////////Sf7NKnmD1gAJGpHlwHEZxqptkgZ//b///
233
+ /o/2f//X////pTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
234
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEGBcaD+mAQHmC40H8sAiqqqqqqqqqqqqq
235
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj8+6eowogA+CdZRIKCS
236
+ hJHngo38jf/s/////+3//6j5Vr8cwv8CNOGFAhXGqJNr8bd3JRX1/9f////d/V///////rTEFNRT
237
+ MuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
238
+ qqqqqqqqqv/7UsT/g8MgFRoP4SBANAEjQfSAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
239
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo+0H4EMO2BFjn0kzASAWy7Cm7EGvv/SH//s////1f7f//o
240
+ /2f//Qdjd6mmGYgtJ8NhlVIIcIwqqMDaxDk/e///////+n//96YgpqKZlxyb1VVVVVVVVVVVVVVV
241
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+Dw3wTGg/l
242
+ IECHguMB/TwAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
243
+ VVVVVTdse0owlgGwMnjSweCmxlCSqnTpxeTX+GhBfq5goYRWZXgGQLpo3GEuDRkjXokEDTr//QmI
244
+ KaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
245
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1DE/4PD2BcYD+ngQI8DIwH94ACqqqqqqqqqqqqq
246
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMbA47jA/wkQ4rRNJZjm3
247
+ NNwwi0EzwyJ+Zdz/7/////////oNoB+jzDaAuc43GDRyTOjSNcvMuWMEDZ0/rTorf//////1/7//
248
+ ////rTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
249
+ qqqqqqqq//tSxP+DxMwXFg/vAACDAyMB/WAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
250
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo7WT68MZZDZj4lZNwrg0EbTJ5AOyM0SFLXCWK/Vn//////
251
+ /7v//r/1/6j4n7o8yIQMPOKVCNCizOZajXD8zcgMYBUmmeqmd21///////9///1f//SmIKaimZcc
252
+ m9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PC/BsaD+8A
253
+ IG4DI0H95ABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
254
+ VVVVVT96E5oygcIcOVj1NFyKOcUzXzAzgVAxsRAC2Fyv9Z//////////+v/afcO2GGUtAAZxmKBn
255
+ wG5w48acGgZaHikSA1V2xSnL///////7f//q/0JiCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqq
256
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8RoGxwP7yAAogNjQf5oAKqqqqqqqqqqqqqq
257
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqPaE/QTKJQtE+sxjW5LOw
258
+ eNaLMsAAxMFAFAGvyzP/7f/////s//+v/T/r/0mmt8IBh3gZwYvi5gFDGEkgVQICZCCVXbdzZFz/
259
+ 7////////////qTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
260
+ qqqqqqqq//tSxP+DxTgbGA/zIECpg2MB/uwAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
261
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqozgvsbMMYD/TlN2NQMM7/I20UzqQwg1aTqrWdW////////
262
+ 952cX5gZT+KFHXT/mrqMHnVZwLUacfmTjAcAqrIAWDTv/3/////////K/6///rTEFNRTMuOTeqqq
263
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PFHBsYD/dg
264
+ AKMDYwH+7ACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
265
+ qqqqqj5T3OUzk4NXPQV2NiDXPjhDjFE1cqMuCSYXSfR6a7a//////////+o/RaibNBRBPz0AFTW0
266
+ LDyB83kMB0qRK4GHC5ij8BY//b/////9n//y////+tMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqq
267
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8V0GxYP80AAm4Njgf5oAKqqqqqqqqqqqqqq
268
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqNvj9ZDIBhC44fWTISiMX
269
+ ZCjIQmwsKLVqbsUhd4zcPyZMPME+zs/QNhPMzqkDIxZOfIylU0mSprNraTEFNRTMuOTeqqqqqqqq
270
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
271
+ qqqqqqqq//tSxP+DxGQbHA/zQAC1g2MB/uwAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
272
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo74zjIM7/Fsj46Rzb1RDQYyTKcfj0SzcnhIqjMW1V1O//f
273
+ ////////9f///+s/YE1QNT4B3TESQR4wfIC1OOnI1gRz4oAOFBzcRhUQms03/2f/////b//9X///
274
+ +pMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PFABsYD/dg
275
+ ALEDYsH+7ACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
276
+ qqqqqjesuhcy3sRdPeVQ0ymTIBQMOi01YMqzAJFBa8CP///////9JnDXsUYkiLgGzEJmb6LHDU5q
277
+ bMZcemHjSIK9kkWbTv///////3JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
278
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8OIGxoP80AgdgNjgf5kDFVVVVVVVVVVVVVV
279
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVP7B/NzY0h5ExXsMWMKkB
280
+ wTycaOALc1ObjMAxFxhwsxRkFYt/93/////3///V/q/zP+MPzOyUTafQp8xN4AYMIfAKDlglNdhA
281
+ HO0OS5yFAAohBbtV////+j/X/s//+tMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
282
+ VVVVVVVV//tSxP+DxaAbGA/3QEC9A2LB/mhAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
283
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUyEf2EMT+F1jEn5Mmv4xokzD5aMrULsCoak04W+vf/f///
284
+ //9xxyfB2aA8NGnztBG4iwmhZsGVBFnppG4ShhZI0tEpbPf/d/////9///1JiCmopmXHJuqqqqqq
285
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEbBkaD/MA
286
+ QJUDY4H+7ACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
287
+ qqqqqj8pImE3wUBxMWwAyzChwJw7cazcpANKBsSXR2EARAgFYFS//u/////9n//1mSe+xxjUgx8Y
288
+ OwmYZoQZVMmLrxghyIxwQgqXaeLfUX/////+r/cmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVV
289
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8ZIGxQP8yJAsANigf5kSFVVVVVVVVVVVVVV
290
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVOhf8/zVch7kxIsL2MIyB
291
+ ozp8ENqKc0OZjJgvCVCIJjAlbFv///////v//+r////UfmR7vnKniLJjKQEwBhXI8EFzeIIGpyZl
292
+ AJ7MGMsKjtGq9n//////9n+j/X//80mIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
293
+ qqqqqqqq//tSxP+DxJQbHA/zIECnA2NB/ugIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
294
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoyNT/GMKdHQDXCfTNdSDhMM1N6MsSzDSQgBVXIGr+nf/v/
295
+ /////////3nxs1p5yWQ5KY26GBGGYA3p92OHMFubHNxngVi846qYZiAGHv//9////+3//6v9X//x
296
+ iYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PFhBsUD/Mi
297
+ QJgDY4H+7ABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
298
+ VVVVVTU2vyE0MEarOGoGMrTzMQiGMHRRMzAx3TGMLWJdt5f/+7/////7zeDuz41B8fmMQOC6TB9w
299
+ ZI5Q+TXqePthOCsBxlAUBgqV0V//////////+v////WmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqq
300
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8X8GxgP8wJAugNiQf5kSKqqqqqqqqqqqqqq
301
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqO2X+AjlbBYgxb8EnMJmA
302
+ Sjp4JB2YAULMqAo8WTJTCwTd7n//////////1f6DRMfcUyxgfxOl7ANUlxPN3jgI001WMiKwaAJ0
303
+ hgErDPf/d/////9////+pMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
304
+ qqqqqqqq//tSxP+DxTQbHA/3YADHA2KB/mRIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
305
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo/5SifPhVA8TI7gTcw+sD0OOCrNaRsM7g1DEyMUgcMCgoH
306
+ AXRuAH9//+X//7f//Lf///6f6//////xP/J/7zJUuEoxKcc2NkJnM3U6OGuzU3QyxHMPIBwBVEga
307
+ v6d/+//////7kxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEyBsaD/cg
308
+ QLuDY0H+aECqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
309
+ qqqqqj+CUOI/IoM7MlzCIjELgWc5jO42EJs0BFQykA06pUwqsLmC6sPd3//v////qV/v/1VfWj/d
310
+ R+MeY+zw7mGfDrprLNBmQnJvdwaU5mUohhRGSgStKBzNZ7/7v/////////9SYgpqKZlxyb1VVVVV
311
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8WQGxQP8yJArANjgf7sAFVVVVVVVVVVVVVV
312
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVPocZFz/1QfgyXwHRMQpB
313
+ PjCXANcwX8CKP8STowQ1QYMGKhEMl7gB9v//r/3////0/////6//09k//+N/7tnv/1mYIfvxkXpE
314
+ ocUWqaRrodhvm3xhoCuYyVCIFTODgVX07/96YgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
315
+ qqqqqqqq//tSxP+Dx8EjEA/0osCZA2PB/uwAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
316
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo7NHPAPkCEZDHxwEEw0gBFPpkA5EJTX4CAz4OKfMWhGByy
317
+ a3/rZ////////9X9d/9xowfSKaSgQjnnNlGxi7n18RyUeayrGWFIGAkxQgCVhkSYgpqKZlxyb1VV
318
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PG/BsQD/dC
319
+ QKcDY8H+7ABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
320
+ VVVVVTVwPOU4gkc5P9HiNgTLPCZjbzs0QkMtGTGhQwQGQBuJb/+7////WcDJ4gHWdktRjKAbSYXG
321
+ DvHrJWcRYBrA6mZxoLkjphjEl8oF1f7//////u//+v/X/v/x6YgpqKZlxybqqqqqqqqqqqqqqqqq
322
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8gVIxAP7KSAiANjgf7sAKqqqqqqqqqqqqqq
323
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMMN+MjMaiD4x1nswfTQy
324
+ KzMTbDAEMdJAqFoVowtSov/vOMrSqD63gN0x0sEyMMaA1z3qOOLFk1qKAhynyaAWR0pSmm7v1///
325
+ //////qf//7kxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
326
+ qqqqqqqq//tSxP+DxhQbEg/zQkCBA2OB/uwEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
327
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqozvflpNTeIOzymrjXxZT39Y4qHNVUDKCUs0mKW+WrPf/d/
328
+ ///////9X+oyx75RNtrH+zmyNDMdAzFAjjCUVTS0M18yjgUAiO3l//7v/////v////1JiCmopmXH
329
+ JvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PE1BsYD/dg
330
+ AMsDYsH+ZEhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
331
+ VVVVVTf4EnY/xsRiMdKCAzDIwTQ+Ixzjp8NcEUzmDD0CBiwWLS+lvf+r////3/1///X//95mT3Pk
332
+ alqQSHcVKmrapHlZZvr8aUlmRkRbFQYuitad//////////+v/WmIKaimZccm6qqqqqqqqqqqqqqq
333
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8QgGxwP92AAvgNigf5kSKqqqqqqqqqqqqqq
334
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMbB4ijW+B0Q9X/zOTqMQ
335
+ oEwITALaBGDBJL5pmPfe/+81wdWQPruBOjF0wJAwmYB5OolA2cLzQoOJlCc44FNKoTSabu/X////
336
+ ////+r//7kxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
337
+ qqqqqqqq//tSxP+DxUAbHA/3YACpg2NB/uQIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
338
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo0jvrZOrUIUTEpwrwwhAFzOXuA14jz71DgIxJEgyWaTpi2
339
+ v//////////UYpX7OmF2D/ppfKRlIkZjGVBh0M5u+GE6VAFwJBM1nv/u//////////1JiCmopmXH
340
+ JvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PGHBsUD/Mi
341
+ QKYDY4H+7ABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
342
+ VVVVVTKQP706Q0erO7nuNAzXPtwN/BNEmMqXMYMAwBK91Lf/3f/////eZ+khjnwegiZpFAymOqCo
343
+ f4bnMjhrwGUOQCLAoBJtulj/6v////////1piCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
344
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8QAGxwP8yBAvANiwf5kSKqqqqqqqqqqqqqq
345
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqND+1tD6lxvoxPIJTMIdB
346
+ PDmDBNeng+0U4ZYrKFgAWdWNLdX9X////////6/9f+8yKT+gNp9HjjnqOTR1HDoqc2NkM4OzFxhC
347
+ SxJHFk07q/3//////d//9f+tMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
348
+ qqqqqqqq//tSxP+DxVwbGA/zQgCmA2OB/uQIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
349
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqowcjsuMngGljJ3HMgtQ1HcycQwScRjkZ1/rde69/95ig/L
350
+ Icf8L+HsbqaCUBsaZklhhS4AEAUCmGySRu/9P////////6UxBTUUzLjk3qqqqqqqqqqqqqqqqqqq
351
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEvBsYD/dA
352
+ AKYDYwH/bACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
353
+ qqqqqjIia3g+GgQuO4zJNEA6OHDwFKApXBRYAg9E9lErOaP7f////////0mSDmzx/bgIweOhYaaB
354
+ WdCMGuA4Q3FY0EB6VbVIie/9v////////5H+1MQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqq
355
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8XgGxYP80IAqwNjQf7sAKqqqqqqqqqqqqqq
356
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMgpYzz+zAf07jMY0iGs5
357
+ k8NYHzMwgMMRoDXmyKGcu79f////////6jGoa1E+qIMXObT6M9h/OBRjSCcykOBRCoW2NrUO5a/6
358
+ /////////1JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
359
+ VVVVVVVV//tSxP+Dw9QbHA/zQACYgyNB/mgAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
360
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxZf3LPvkDvTilGjNoiz5zDgKzRkgMVW88LOody1/1/9//
361
+ ////1/6jDN/Es7nILTOtsg0EXTgrjPFzFhC7LrRF/pb3X/X////////+r/UmIKaimZccm6qqqqqq
362
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PE9BkYD/dg
363
+ AKODIwH+7ACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
364
+ qqqqqjBo/xk6bYHlPhgDTDc4VjKFLbLFi1WXWe6////////////qMAo/vTnbgFs9ZgygEukrkKiz
365
+ GJna/93////////1JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
366
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8UAGxgP92AAnoNjAf7sAFVVVVVVVVVVVVVV
367
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMGw+wToPgaIyUsw5YEA0
368
+ vgBSUz7r9f+7////////6v9RhbnhSdiQGHHYVpo6Qb0JlmFlVTRmmitrmv//////////V/qTEFNR
369
+ TMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
370
+ VVVVVVVV//tSxP+DxPAbFg/3QACag2MB/mgAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
371
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxJb8xPosExjwEdNOoI6EU1aQyQ8DAnFhpxYtzX/X/3///
372
+ ////6v///9Ril19+fcgJtHAiSmZZEHokm7TGcIgYkv14muw9jr/r/////////UmIKaimZccm6qqq
373
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEYBsYD+8g
374
+ AHiCYwH9MAiqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
375
+ qqqqqjFdHy8+8QQmObD7M6x2PxBOKgNILCDStDYGsxo7o/t//////////6TFQjG8+SIJ4OpCZM9x
376
+ KP4nOKQAUkWPI0MgeGVY9360xBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
377
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8QUFxgP6YBAjoNjAf3kAKqqqqqqqqqqqqqq
378
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMUSOYD5VAUM7sAoHQcDk
379
+ BDiOIzRqcIAUwbvQN0GImSDB8cgv+eLJgaAjmfZkb8uaIUZEKYYAhIXfGD+j//////////SmIKai
380
+ mZccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
381
+ VVVVVVVV//tSxP+DxTwbFg/zQACaA2MB/ugAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
382
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUwHT8aO5UM+zmKzDI9PTJq4wVpACAYCSmDCAOBEL2oUdSn
383
+ f3//+r//+///7/1/6zFwenAz0M4fNscaM2FxN/0jTIEydOMIKSQGUIGgJfs8mIKaimZccm6qqqqq
384
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PE+BkaD/dA
385
+ AHsDY4H+6ACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
386
+ qqqqqjJc7ko+jM0BMTBC6jB4AWk4O0jUCBPDKNkfDByaJcZXM9q/qMflLRj8lxBs06RBjHGCLPtU
387
+ Dii01UODl0IHy+6hzsntKYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
388
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8OUGRwP9yBgngMjQf7oAFVVVVVVVVVVVVVV
389
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMXleXz84ybIxOEHFMGYA
390
+ qjxVE24qNDGTKBA7vMI0VHfOaf/////////9BiQ3eKa4esmGBiiQJgKIQUZKlJi9dGEDuKkYx/CN
391
+ k3UopNrf///+v////X/7v6kxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
392
+ VVVVVVVV//tSxP+DxeAbFg/3YAB/g2MB/uwEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
393
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUyq6pHPtUR2DGJA7cwl8HGOmQs2Wpj/ZTirAcdL7AIKldF
394
+ df9f////////6v+8yBAVYP6eBxTGKABswiEA0OLCM1KDgcyRY9nogIMku8WPd+v////////+/9aY
395
+ gpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PEeBsYD/NC
396
+ AIKDI4H/bASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
397
+ qqqqqjBFuZY+XBzXMTiFWjBPQlszhUDGLTMOIow+Wzk2NowOvRIhdSnf/9X+r//+/9X/v/WszD+5
398
+ 4P71Z5THixQIwuIJfPL2Q344TTqKMrEc6kBATeIvTA3/q/////////WmIKaimZccm9VVVVVVVVVV
399
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8VMGRoP7wJAuYNiwf5gSFVVVVVVVVVVVVVV
400
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMfRJfz+sRZ424QmQckwD
401
+ iUg4V0ftgcIaEaARaCB62af/////////9BjB3CqbAXLPGBjjUZgSYXwZ62JlGJGJlmFzcZ+4C7Jv
402
+ SI57a1v/3f/9f//936//d/UmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
403
+ qqqqqqqq//tSxP+DxbgbGA/zQgCwg2OB/mBIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
404
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoyTRF5PwKMoDHYgl0wpMEoOsK82eaDQA5MlgwPwMGCwV3S
405
+ 3u/WYeRNaH+bPppjagoMYPeEPm2JMZzW5yPBt6JrmxnCQKTo0SPu////V///f+q7/f+v/WmIKaim
406
+ Zccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PGOBsUD/Mi
407
+ QLGDYsH+YEhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
408
+ VVVVVTJ6WqI+clcdMfFD6jCwAdU7zEDcipNHmQygKw9wwMxgR9i3////////////cYmWvKnzzroB
409
+ ja4bSYQMCuH42pwzUamimcGBzymeaCiGDznf//1///////+79SYgpqKZlxybqqqqqqqqqqqqqqqq
410
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8UEGRwP+0BAxANigf5kSKqqqqqqqqqqqqqq
411
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqMrIc2T/VnfgyO4S7MMhC
412
+ MD1lHOCso1EezLo4B9RCY0FL5QL////////////3mIcNFh+nj6eY64ItGEMg4p+ngcPImqMBnqCd
413
+ lxrIAZtPiR93//V/q///v/V/7/1piCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
414
+ VVVVVVVV//tSxP+DxJwbHA/zAkDGA2LB/mhAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
415
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUyEVB+PiZUNzH9QvwwqQFlOvs42kfTQZEMlBcjmSlBoFiy
416
+ 4wuCo3PTd8iDFbSA8wRINuMf+swNNDA7NMNIQ2M81pMOoExds3Pf7v1r/r///u/X/7v1JiCmopmX
417
+ HJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PFlBsaD/MC
418
+ QLYDY0H95Eiqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
419
+ qqqqMdADjz/3AsYyLYCjMK3AbjrRFNmiI0ABR5PnIQBDCUFuVXuMnfhsDxN+W8yA0coMLYDJzx/M
420
+ N6SM0uuDJRnAPgzJ9AHNebt/V//8t////qTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
421
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8WkGxgP8wJAvQNjAf3kSKqqqqqqqqqqqqqq
422
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqow6VKvP1Ll6jHmxDkwhYGo
423
+ Px3zgoQ1NXM4OjrrNM8FIKxznf//1/6///7v1/+79RjTA3WfvQX6GRAAuJhS4FwdKNZsMeH2Mho4
424
+ BPAoIQ4sqpe5MQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
425
+ qqqqqqqq//tQxP+DxFAbHA/zAmDKg2JB/mhIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
426
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjIuWro9SX7nMhdGlDCyAts77njc0DNGqIyMWTHYIaA3BxXm
427
+ 7f1f6f9X///////u//+4wDtaLPhp/ujGFRgkwWwJuNE1Ex8zjE6HMRFg59zbNDLES4Rz3+79dn6/
428
+ //7v1/+7/d//9qYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8RoGxwP8yJg
429
+ sQNigf5gSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
430
+ VVVVMRCENj7AkZkx0wFcMILAXz9ho4sHNUAjMwU8KABEe30P6DFARyA+VFVdN00cAyGgyzhJwNMD
431
+ 8y2HAMZQ4PoNppNZtd6YgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
432
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxeQbGA/vIkCKg2OB/mhEqqqqqqqqqqqqqqqq
433
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoxd48fPag7SjHWhGUwjMHc
434
+ OPQk1SoDyYTYrAEBRWBwVNaQ9n/////////+0wrMxQMEV8Szdf7jJ5kzV9gy6BMRTgoUhYKQgIgJ
435
+ itH2////q//////s////3JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
436
+ VVVVVVX/+1LE/4PGOBsUD/MCQNGDYoH+ZEhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
437
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTANyQk6Uvj8PIc3MsE2MOyfMFBcMfcxHjHNBwaNDf3ue///
438
+ /X////rMHcFQj8ALtMxLgI6MEvAxTgFo0EvORo1TzIGLkKbvxb539H//1f/////3piCmopmXHJuq
439
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8RAGRwP7wJg
440
+ h4Njgf9wBKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
441
+ qqqqMHlBuT8F3cg0MRJTEMBOPqZN0EAz8FGAUDUDaxK+kwZgCfP5WS1z2wljNcEw1oNWxpQJC0NG
442
+ GPvU6ExBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
443
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxXAbFg/zQgC1g2MB/uwAqqqqqqqqqqqqqqqq
444
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqowPkFOP4bKhjg8VQUdhG2U
445
+ OEwazGXw3Mb6TAAAU8/P4ebOrILYgkYrq/R//////////pTEFNRTMuOTeqqqqqqqqqqqqqqqqqqq
446
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
447
+ qqqqqqr/+1LE/4PFCBsYD/cgQKuDYwH95ECqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
448
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjA1AVQ+3cwuOrgzAyRCdo9UTEqvZY+k3rpMFVB4T49FpE0i
449
+ wNTD8AAF6Y9kGmYkMQXXO+lfoTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
450
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8PQGRoP+0Ag
451
+ bgMjQf7oBKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
452
+ qqqqMGiDkD7LaZQxtYFKMFxAZznCY1EPOwQ1wTIALuLvjB/SYH6LJngAdXJjs4VSYLcB2HKuJpR8
453
+ dMpsKGaaWbSsdex//////////+xMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
454
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DwygZGg/3ICBlAiNB/TAAqqqqqqqqqqqqqqqq
455
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqowPMa0Nhv/2jE8g54wLcFN
456
+ MwqDC2EwODBfMQwt4kG5lH2f7v1///////+0wnAbLMql7Pzaz+TLNcjXL8zFuMSQQSPCoKmeky0K
457
+ d7UxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
458
+ qqqqqqr/+1LE/4PDKBkaD/cgIHIDI0H/aASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
459
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjEyx9Q6sT5yMr5E3jCngdE6C+DXCTPbUNwjDCSRpaJS2Ldn
460
+ +39H+j///////SYtkGmn9dqQZpyARCYhSBwH7D6cbIhq4MkzaPZAwFioStKl//Z//0/6v///////
461
+ /7UxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8QcGRgP7yIg
462
+ pINjAf3kQKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
463
+ qqqqMMNHrTzePm00wsVFMOQBwjxbbNtIA0SVTLhAP/U23TKETDln/7//+q//////7P///9hhQJDI
464
+ Yfr88GEXC/hgJgQ2Y5ixh5SmBTMVB2YMBDCtKrZOmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVV
465
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxVgbGg/vIgCAA2OB/uwEVVVVVVVVVVVVVVVV
466
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxuQldO9d/VTWuhsMxKsJ8
467
+ OMFZNRTOPIdzdTAoWCwIGCBpdp+aP/Z+n/T/o/9n///6P//7TFQxnU+K7eRN+5FpzFoAbw57M01m
468
+ HY+VVOaSjZU0ys1MQFi/8Y5/9f93////T//9X//u/6kxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVV
469
+ VVVVVVX/+1LE/4PFrBsYD/NCAMGDYsH+ZEhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
470
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTC/yMQwm7/SMDdHRjAzAn8zjSDHzFMNnoLEcweDKE3koYV2
471
+ GSXD55+d9pudgULemPnhGR8YnZwaXRqYMJmmBB7kxkHQgTg0E/tH/s/T/p//+n//+79H+n/2piCm
472
+ opmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8Y8GxYP8yJA
473
+ iANjgf5gTKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
474
+ qqqqMCMHkTQ+uw0zj8c9MHcCWjVsvMpLI2PE00g0a0yosMOJnyAxy8jgOW27njjSx74xeQK5Oq10
475
+ NhjfM8x+MkAxDfxV0xVC2r9f/t/R/oTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
476
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxogbFg/3YgDSA6KB/uxAqqqqqqqqqqqqqqqq
477
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqowDQbQNEF4wDSbB2QwlEJV
478
+ NxSYzirTibjZyTUMDLDgcfTMkZj7BFCc531Nnf0D8ZjlIWAeYL2bpnAaRD+ZZhQdYUBFRgDoFAO7
479
+ Rb/s/T/p//+mz///9H+n/2piCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
480
+ VVVVVVX/+1LE/4PEZBscD/MCYNgDYkH+6EhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
481
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTBrhz8yED6dMvBIfzA6gqYxrUzBDGMH9MZMMyrMmFFkCWcH
482
+ GMjg0ByIxvSfTiEAmOvACh5SBwC40FR+ZdBAe+CaN2BDyHePdP//R/6PxX/Rb+j/2f/9CYgpqKZl
483
+ xybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8RgGxwP80Ig
484
+ pgNiwf7kSKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
485
+ qqqqMObGijK5OcY1GMfWMLCCdTm8+NVLk8O41jcEhkKQgckjIjAGheIzLn9QNtqIrjCewoc3ZODO
486
+ 63ON0NrNNYyMwQBSNLiR9n//////6f//7UxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
487
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxGQbHA/zQiDaA2KB/uhIqqqqqqqqqqqqqqqq
488
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoxH4E7Nd1Nbj7hAkQxecA/
489
+ K50Jq6A9YcWLmoFhihMDRNVCh//Z+n////T/////9P/tMQeFxTOFe9M6xYdpMQ3CRj40nN9qo0oY
490
+ TKImG4jpDANH6K0W//9P/////////+lMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
491
+ qqqqqqr/+1LE/4PEZBscD/NCIM0DYoH+6Eiqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
492
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjB5hKswYXxxMecHXzBGQhgzpBTHaUMLFkGi4LvFhkSVvSYw
493
+ BgPFMce9ozeTR0MwZwHuOP5zQoIyVPMYMDv01jDkL/nP/////////////QmIKaimZccm9VVVVVVV
494
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8RAGxwP80Ig
495
+ tANjQf5oQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
496
+ VVVVMGrCQzLJttM/bsZTMNKBgjo6pNVFo87k4Sg1aExo8DAGJ2LP//o////0f//2f/9Bg24BsZCg
497
+ rAn+DhcZhZwDwcVD5o4DHTAmwCGXEgUGlQ++Fn//0f///6P/////oTEFNRTMuOTdVVVVVVVVVVVV
498
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxiAbFg/3YgC8A2MB/mBIVVVVVVVVVVVVVVVV
499
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxNQ6DTykYPnXBGSYPFB7M
500
+ JWJMvCxQEA6c7cKHX//9H/////////+gwKUDEMJKUZj6mwQcaCGQ1kJSSLSLC13Djl3/////////
501
+ ////7kxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
502
+ VVVVVVX/+1LE/4PEQBscD/MCYLGDY0H94EhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
503
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTAGgD4wSlYmPvrByTALwCgBJTCCktRCE9/////////////6
504
+ DAygDEw2dBkP5lCWzBbwFA4AXM7AA+pQ5NRpEGzW///6P///9H/////0JiCmopmXHJuqqqqqqqqq
505
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8X0GxYP80IA
506
+ uINjAf5oQKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
507
+ qqqqAxBponkOnxqgwJhEoAsB4USvihgEi8HBCPDc5JswTAD4MWpX1T/WwlQwzMChOQDo0iGzpDjY
508
+ izMDAAERPdjOz////0fs///////0JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
509
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxPgbGg9/YACVAyNB/WBAVVVVVVVVVVVVVVVV
510
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUwJQLAMWRuHz7kSIIw6MH3
511
+ OcN402ezsTDdszUJDIDgUPWpP2f//b//////////tMFtESjBJeK02as5aMGdDITLFsMMs8wUgDCJ
512
+ PNqo1BBaNKCD7P//t////2//////amIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
513
+ qqqqqqr/+1LE/4PEaBMaD+GCAKeDY0H94ECqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
514
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjDdxWox5jpJPECTBDERg+09X0DcUJM/p4x0VQbYSaC1CRXm
515
+ ///t////2//////aYVOENGQYIbp+BQ50YskCln/0ocIJZpsOCS1OscEnkIjAaZMQU1FMy45N6qqq
516
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8OgGxwPf2Ag
517
+ uINjQf5oQKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
518
+ qqqqMFZCrzHoHOA/RAzzMX0Cjj/8bOBJw02ZzMxKOO9NChMgIR/in/////////////sMPOHfTFD/
519
+ KQ1beH1MMRGUDUi4TLFpjFhBzA0njL0TXgxbSNKmK///2f///7P/T+yj//sp/YmIKaimZccm9VVV
520
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxdgbGA/zQgC/g2MB/mRIVVVVVVVVVVVVVVVV
521
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUwvIJBMitM+D+USPUx0cFk
522
+ OfihNSRQMwgdJjqPpIwmCoaqtKTA2xkoxxe9jP+NlEDHERlc4osw0PZkyoQgyBLUD4fgOY8A348B
523
+ hQJPq/////+v//////2//X//////7/////nf/pTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVV
524
+ VVVVVVX/+1LE/4PF3BsWD/MCQImDY4H+ZExVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
525
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTDkQ/4yKhc7P42VjDIMg0c7FXY1sM0zVHAx6CkTjGVTBMLw
526
+ v1///b//9v//9BgCYiKYxo6PHwXQFJjZwnAcIwyaBJYc7gm5QhrbCZyXmUBQYJt5///Z///T+z//
527
+ ///7ExBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8XoGxoP80JA
528
+ 1INigf7oSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
529
+ VVVVML0C8THWzqI+nNKjMgZCaDpxDTVMjjxEc3MMMyAAoKBYLSGh3/////+wwlMZeMI7kOTh3eIw
530
+ wy8ddMtsqMRXJMMEgMPS5OhyOImA4MeYLj///t/2f+j9v//9P//bR+1MQU1FMy45N1VVVVVVVVVV
531
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxHgbHA/3ImEHLOKB/tBIVVVVVVVVVVVVVVVV
532
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUwgEACMaIEVD+gCd0yGoFO
533
+ OjRxNQg0O/JzeCY0cvMXITAAxSuUGGVCApjMaU8fi7RlmRliFR1Y45qufBmERpjSIAPBEJBlEhAT
534
+ q///2f//Z///T//9P56n9iYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
535
+ qqqqqqr/+1LE/4PFpBsaD/ciQMiDYwH+7ECqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
536
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjBwRF4wNVWLNYH8lDA+xccwWmQLqmYBoGLwJliUZUICSmUC
537
+ jV///7f//6P2//////bR+0wNEGRMQ2I7D5uIn0xpAL4PqyU3AmjQZhMqEI+9TbZMwJK+Kf//3f//
538
+ /7P/////sTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8U4GxwP92IA
539
+ 1QNigf7oSKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
540
+ qqqqMFWAizD4QTI+5ET+MatAoT6gcNvgM/gI5Yk0xIwgwQgW4VzBcQWIw0wWPP4+bnDGeAR09qdj
541
+ Zg3PiQEvIGXhcGks4NN///b//////////uoTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
542
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxKQbHA/3YiDQA2MB/uRIqqqqqqqqqqqqqqqq
543
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqowSQFxMItGFD638GExVkGE
544
+ OlJ00qTDmIzRgiYIo4pi5Vn//+z//7P9//////30mQJnGW3pnibcgxhtAGWdOnGgEJjIQEArfQS7
545
+ UZy///t//+f/3f+j///91CYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
546
+ VVVVVVX/+1LE/4PGaBsWD/diAL4DY0H+ZEhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
547
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTNyI8J2O3T8RTBUQMEVuCxaRzcY5enrz/+v/V///nvp////
548
+ /+W3/UZtHmbr00eHh0bGFFg9R51Ka6mGVEZhoMrlwl0v1Z///t//////o////dQmIKaimZccm6qq
549
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8RYGxwP80Ig
550
+ tgNjQf5oQKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
551
+ qqqqNjV6PWOfP9L2QzHpgr8/m8jcx1M+jYyECxYVjoDL3Ltl1v//z3//2Vfv///r//76jBlAPUw9
552
+ sCgPwGUWDLdwXA6aG80zCgyqAEIMs8EjCUHR19Vf//7v//6/3f/////cmIKaimZccm9VVVVVVVVV
553
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxcQbGA/zQgCsA2MB3+wAVVVVVVVVVVVVVVVV
554
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUwV0DfMRwGEj+G6wI0LIL4
555
+ PcUTNjiOPlXzkko19JMpMTEBQu/Dlv//3///1f//V//9X76v31GA6g+xgrI8Ka7lxBmRPiaZ2jbG
556
+ k3GZQRBjkrnhwbiQKrQghaYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
557
+ qqqqqqr/+1LE/4PE7BkYDf8gAKsDYwHf7ACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
558
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjBxgo8wqEfMNK069jHXxbg3AgEzLQYxkJUwnE4gyTOCQiwn
559
+ luM0MiI3Wi1T882lM4LQKpMY5A3jC1AGE8+DjgAaNJlExaUQQMhwFulP1//9///9X7//T//9X76v
560
+ 31JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8YIGxYO/4AA
561
+ voNjAf7kSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
562
+ VVVVMBVCLDB+R9U1Sri7M5pGnTiSPDOdJzgrI111NKUDLiIyMFEgxv7//////////////WYUIFwm
563
+ IvjuBtYXDoatqNoH70jm26SGdxPmQYjBrIqgZx4KGabd/////////////uTEFNRTMuOTdVVVVVVV
564
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxrQbFg/3YgCOA2OB/mRMVVVVVVVVVVVVVVVV
565
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUwMkH/MP6H4DeG/IQ3kwgS
566
+ MRRCnzB3AVY4i2TXCYNCnsyWSTyeATbJJ3//7//////6v///9X76jCywyoxLoffNjD/5TeyiEMxL
567
+ kKqMIOBVTj66NOFMN2FGzTWASLJr//////6v//////3piCmopmXHJuqqqqqqqqqqqqqqqqqqqqqq
568
+ qqqqqqr/+1LE/4PEkBscD/cCYOSDYoHv8Aiqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
569
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqjAVwfwwbkaNM3s5LzU5R/05AngzrT04S+NdfTTFQzAkMlBR
570
+ IQb+///7v//////////WYXIDymMYhPxwHysYfuiC5GOlAQ5hjoBgP3w4mLzTxcMbFgxeSwc8K3Vf
571
+ /93+//1///X/q/1/ur/dWmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8YsGxwP92IA
572
+ wINjQf7kSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
573
+ VVVVMGOCIzCJRYYx/7mONUPHcDoKOTQVFDIAmTDcTAZMSUCwiRnlu//9X/eYD4DJmBjCXRjlvRMa
574
+ iQPRGm8UmOyGGIJNmGAvHf2b6IOwHh3su//+///////////1JiCmopmXHJuqqqqqqqqqqqqqqqqq
575
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxugbGA/zJEDIg2MB/mSAqqqqqqqqqqqqqqqq
576
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqozVMM7O1ozqnXOPwAHXDD+
577
+ wekwZwDoPljTkmQ2NVMxMzGhQFAb8K///f//////V////q/fUYH6A9GEfALJlCZBUfycFXHrI4mq
578
+ QTGWYLmNANH3GZ7IIIWnMKfX//3///1f///////96YgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVV
579
+ VVVVVVX/+1LE/4PGPBscD/diAOcDYoH+ZIhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
580
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTXKcO1VkxZ9rBP/gA1DlkGjOABxI4g4dDBkAwaAqSj03FP/
581
+ /////////9f//7jJzQ0jFMCxe9z4kAaA8cHJmwoI0SFru3HLsj//9v//////////0f7ExBTUUzLj
582
+ k3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8UkGxwP9wJA
583
+ xANjgf7kSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
584
+ VVVVNQLSlzMNUcCT7jgzA44cTMoeMVAEaDyXDIHhjR0j/////////////9BgSACaEBPRicRoKfFQ
585
+ GMHLQumbYJBxqiQ3nYQMEm+9VVSYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
586
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxpQbFg7/YEDLA2MB/uRIqqqqqqqqqqqqqqqq
587
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoWBNDBjwSUxfI6mPn4BBz3
588
+ whjT8PTKIJDF8Hz0iM5YCiq2StRgwlRsn1pjMlfAfjEWHmJGBShgyIJmelaHDvZsC4ZoYGSiIODG
589
+ 3V//+/+v//////u//9SYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
590
+ VVVVVVX/+1LE/4PFuBsYDn+gAJ8DI0G/7ABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
591
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVTBcwnowSAXfMI38mjGXFm8wAYSUMAgCGRmYGF1ubzMbw0Jf
592
+ ys4oj5DR//s//////////+R+zSbfuIdnZ+ZFq9NH33nwZjIoVYYRwCTnIUkaaGoYgxUOmBwsAgC0
593
+ 7/////////////+//emIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsT/g8UcGRoN/4AA
594
+ hANjgf7gTKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
595
+ qqqqMwx9OOJcMe3R1z68SqQxo0IrMI0A+DkqVNaG4zuYTHI/MPB4wCAXEWZVR9Zllw6GMkduZxYV
596
+ +YYpkP0mDphwxtL9mOZMYzTZl8Kgpwg4/DwRX3//1///V///3f///1u9fcmIKaimZccm9VVVVVVV
597
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxHwbHA/3ImDMA2MB3+wIVVVVVVVVVVVVVVVV
598
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTQwWzkknTHKg0w+EgN9MdAA
599
+ 6jCWQGM5gQDWo/M1EgxQODBYfEAAfcwp8PCMLIH3zF67lg56nxpNreEoyKjmzD7IAMFIScySUNcD
600
+ DcQIDPo8LK7v////6///q7////8/6u9MQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
601
+ VVVVVVX/+1LE/4PGzB0WD/NEAMwDY0Hf8AhVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
602
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVMmSJN4oqMYfLhT5BVH4x3MLVMJIBMDlKxNbHwzyZzHpBMSB4
603
+ wOAWWGwi6nN82GM6GoZ/0zbsZIYE+mFZggB1A6mtw0ZUCBgAVAgPgkCNdX/////////////+5MQU
604
+ 1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7UMT/g8UMGxwO/4Bg
605
+ 5ANiQe/wCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
606
+ VVUwWEISMFMEUzCJ1Og1gn3JMShFhDBNgkkz3OjCyzMxYNkEEvQk5SiV3f////1////////v9XeY
607
+ gJuZuYEYciahnpp95xiRIkyYKwDsGsYKZ4URmM3mQRmY2BgYK1mJ7/////6v////3/7/9npTEFNR
608
+ TMuOTdVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PE6BseDv+AYOcDYkH/bEhVVVVVVVVVVVVVVVVV
609
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTRDY/H7ML8DnD6QIkExMAIk
610
+ MFRAyToGo19DM8NDGhow0HQUftH/////////////7jOwI5gIMHTBWj9p1oAwysEhMDSAUjvozYEj
611
+ MjzAhUAjO6Qt/////////////+9MQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
612
+ VVVVVf/7UsT/g8T8GxwO/4BgyoNjQd/wCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
613
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVKoEAQjAHwqU+7hMhPCoox0BxYLKMOPDdBVed1f//////////
614
+ //6DOBQ7O9MH4EPj+q4I4xqoCmMFtAUzoC41cjMuIDDBIAgatkrLdv////////////+/0piCmopm
615
+ XHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxsQbFg/zRADY
616
+ g2LB3/AIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
617
+ qqoxCnTfXUMLbHtT6FvZsy3cNTMJMBTDhq5NPHozWXzG43MSBgBA9ln2ez///0f6f////3f7v9v+
618
+ 0xnOgQwKYGEOvGnO9BRjPwi4YHyDLm1aho76Z4mGVDQCSxYYYun/////////////9iYgpqKZlxyb
619
+ 1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PGABsaDf9gQLgDY0G/6AhVVVVVVVVVVVVVVVVV
620
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTP5PzTWPjChB1k1Dvn3Ma0F
621
+ STBqwdI7TnNHchATjREAkEIHlmo//////////////abpqEeSJCY6aERH6nOUhv+IUcYxIBPnZICG
622
+ yAgGcJBmKJAmBQuEATplCvZ/t///9PZ/////9n/9CYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqqqqq
623
+ qqqqqv/7UsT/g8TQGRoNf4AAxYNjAb/sCKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
624
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqMP0KMn5pMI2H8jVO+JAz0YbMMI9CVTgE4NRsEz4hDKBCMhhk
625
+ DDhGtJtc3Jy3VRidw9Obt763m29DspiWYS0YQMCLmCEgOAvcHHRoG5lyhfEp2//////////7f9qY
626
+ gpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxvAfFg5/gEDC
627
+ g2OB3+wIVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
628
+ VVUwMQcz2nYwukevNUQ8xzZnyIUwzILAO13E3A5jUqnM0l0yoKjE4HFgAjs/////p////////acc
629
+ vUe1T6Y5uM4HLPeQB/SY2MZBgEAnv5mG8QDmfo5mIpJiEcjAoNwaAQj7P9vp//b7ez//7fR2f7PT
630
+ 2ehMQU1FMy45N1VVVVVVVVVVVVVVVVX/+1LE/4PGDBscDv9gQOADYoHf9AhVVVVVVVVVVVVVVVVV
631
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTMdKjKqLTA5RigwHT6EMVHI
632
+ XDBMgn0y7NAIpzDxSMXAYeOQsOUSk//////////////sMBLA3PwTChBRQzlH5sOpmI2DDLQoE61Q
633
+ jaLJNKJAywUjI4nMPARA9Pb/////R0f/////QmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqq
634
+ qqqqqv/7UsT/g8UEGxwO/4BgzwNjAd/oEKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
635
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqNJCs5WOzCrAPozINW2PuGEXjDwQQU8IgjapfM+FoxoQjDInA
636
+ AIYe3t/2f//+jt/////+3/Qbosnitxg0wKuY2CtOn/PA3xhWIAaBwQaDBpkAPGDA4Fwik5Be+v/V
637
+ ////r/////+v/u/rTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxqwbGg7/gEDy
638
+ g2JB3/QIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
639
+ qqoyDTTsMAyA2TAI3Os+VQJcMC5ALQO4HNoKLkcOUU/////////////tN6iPkRMEFAKzEaF38/aY
640
+ QEMG8AgToRoakQEbhUFQ7LRhr/+z//////////amIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVV
641
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PGQBscDv+AQM6DYwHP8AhVVVVVVVVVVVVVVVVV
642
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTWyA7YGMGPAwTF5AAQ+o4KY
643
+ DBng5WEzSweMmi0wqJQIFB0AvgZqknlfxg8IW2Y2I80H6UDf5iWQPAerdpuRMGkT2ZLJ5jIVGEQa
644
+ kQQ//+3///////9H+hMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
645
+ VVVVVf/7UsT/g8akGxgOf4BAz4OjAb/wCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
646
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVMwFXMT5+MA9GBTBuOaI3iRdJMKWExjNeMzJZPDJMwTHsUTHg
647
+ FAcSY0Fhro/0+3///o////0f6P//oONSE7vnDCqA3kyGV+ePh5S3zGaQwgwjAE7MEHAfheaOtDTN
648
+ TOmAMJu+5MQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tSxP+DxQAbGgz/IECw
649
+ g2NBr+wIVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
650
+ VVUywQDgsFMJICxDHdUSU+ik1cMbvCqzCUAT4wTsDNPGpjaHA0lFMeGgEB3em076G72DmGAjRBkJ
651
+ VUCfSFdHGRQDSJhXYWIYJMCtmawRpwucOfGwEplIJMd6f9H///s6f///9X+n/+3pTEFNRTMuOTdV
652
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PEjBscDf+AYMuDY0G/8AhVVVVVVVVVVVVVVVVV
653
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTGp1N3UowisM3MbMQTD9RGb
654
+ 8x9YPSMJ7BszBVAQg9/JN/gTYkozMfMMAK3P//t////////R////oNmLU5S4DCHAb8xeMscPmzV2
655
+ zIOQbY5sJU0jBAyIC4wWEoKB6YAg8FADu+5MQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
656
+ VVVVVf/7UsT/g8c4GxYO/6BApwOjQc/oFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
657
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVNxyw216TBLRBIwoxPtN4++CDF4hTEwXMIaMB2BCzCdgeMPGM
658
+ OIHBTak9/+7////f////////95jhHmBo0YEqE6mEnFLRyD3LGYLcHnGo8GZsZhmE8mSRiZIBAYVy
659
+ IMW//7+v///////V/////cmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqq//tSxP+DxWQfHA5/YKDv
660
+ g+KB3+wQqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
661
+ qqoQBUYgj2ZeJAc66ufrL32GDkhR533YbW9mlJhlREZKEhBAhfY//u6v////////////eFQIGApE
662
+ JFGNn1n8ReDph+ICIAxwysBMKAC6ic7PGe1/Z/v6/////////////OJiCmopmXHJvVVVVVVVVVVV
663
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PHGB8aDn9ggK0Do4HP9AxVVVVVVVVVVVVVVVVV
664
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTCk0xaqMBtBjzBKBpw7Af7i
665
+ MdaCiDqsDNNIwzCXzG4zMWBYwqBSyFb2//q////1//////X//eaTBGRdZgAIPcYAAONmcTdg5ilI
666
+ geagvBlNfmTDQY+EhkMBhhQCA/IUxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
667
+ VVVVVf/7UsT/g8bkHRYOf0CA2QOjAc/wCFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
668
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVNeNc23ODBVglUwycfGNpq/xDIXxbAwhQHlMDNA0jUPzRjjlJ
669
+ TdljPBW37//9////+7/////7v/1HFVQfAKZhkYAuY6wC3H5on/ZwwQEqYyeA6mFqAVx393mmXKY6
670
+ WwFPJCYFyb//V7P///9v//3///f/+tMQU1FMy45N1VVVVVVVVVVVVVVV//tSxP+DxjQdFg7/YgC4
671
+ A6LB3+xAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
672
+ VVUwFEC0C4KaYEAFTGDJkL5oN3juZsCPKm3VJGcKpnYZxwTEcGVmsBhmYqt3h1aTn4aQYZEEJmN3
673
+ jGh0PXF4dwqMWGOPA0ZhgICIdqTRmBsGDGGYvRRiJHhADrf//f////u//+7/d/u//UmIKaimZccm
674
+ 6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PGzB0YDf+AQKCDo4G/8Ayqqqqqqqqqqqqqqqqq
675
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgIAAAAQCxGIiEtmBJwYsdvx
676
+ kFDDGH0gBMYEWXTHgCr2SUf//0iUCOHIYwgMFhMSMD3DX95rg+P4ccMWXCLTCaAUQ67ETWLPM+Jg
677
+ yOZzFisQ2pzn939f3//////9/////60xBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
678
+ qqqqqv/7UsT/g8cMHxoOf0CA64Pigc/wEKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
679
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqMtScM/C1NoUuPcOPM6lvhz8oAzExPUDaMHsADz31szWBCroY
680
+ YsmC2wkMXWfq/1///////9/+//f/+sxbGYxqJUyjRY1Cysw2f9POrkEGTClwSIwNgBpBYIQHzOqD
681
+ MITH+B6Jj/V/3f/////////7//1piCmopmXHJvVVVVVVVVVVVVVVVVVV//tSxP+DxWwfHA/3ZCD0
682
+ A+KBz/AQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
683
+ VVUt0KB5IbGO8phYHJWcBkBjA/2EmUaA1lqLJ2jigUJn+n///////////6TIBHMomI0MsTl+mMWk
684
+ 6AztSh0Y5JZTNqAMEB8FBYxMCTEoAMVHQmMt/n8j/////9n/////0piCmopmXHJuqqqqqqqqqqqq
685
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4NElB02bntCMPCD4sHP8BCqqqqqqqqqqqqqqqqq
686
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjG4ZTJkdjPovTgVsjHnIzU+
687
+ kAleMPCBgTBUwGw4IGAiMY8lmUnRnkcNGtrH+z/b//////////pMVgbMoQHNIBmOV1RMgMEfj92g
688
+ ZIxZgDIMH3Alz9qA2SOMxeTCmQghlh7gt+r/WmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVV
689
+ VVVVVf/7UsT/g8dIHxYO/2JA3IPjAd/oSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
690
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVMvuQxPnTA0gvowfscNMaw14j9Xnksxl4YQMJZCzTyW2OQPA5
691
+ OkzdxyOFmgOXbNJfYB/93+/3/7v9/////1f6v/9xl+XxnYd5rOwR1VtZkFbaMfJGvOmPAhlRhLQI
692
+ aJ3RA/mxyRt0ed2uhCM/NNj+v/UmIKaimZccm6qqqqqqqqqqqqqqqqqq//tSxP+DxTgdGg3/YgDU
693
+ hCMBz/BAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
694
+ qqoEH8zdDDBCwgEwj4SUMcNYfT9w364x5cUPMKQCSjxN7N8us3cojYKNOGEEIMDbyy2CD/X/////
695
+ u//////1mQQ1mXY3GlhQnHq2GMxFfp9yCYIZEACYmE+gCBww4GRE4Fk6YbUBn4SFxYlVFf2JiCmo
696
+ pmXHJvVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PG6CEaDv9iQLmD44Hf7EhVVVVVVVVVVVVVVVVV
697
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTTLCNJR0wLMHgMEmEGTCvVI
698
+ Q4JH1PMZ5FGjBbAeswevgU7TYZONgHEP54cWmayK8/f/////////q//36jB4USoShhaiZktLBhG5
699
+ MqcOD1MGA3WmRC0GQ5dmOokmRQJDSDm4QAFAQPnRXzjfR///////////9aYgpqKZlxybqqqqqqqq
700
+ qqqqqv/7UsT/g8g0IxQOf4CAvgRjQd/sSKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
701
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqQ6GBi5kx8bjImDTAVB4JXKufH2hh1GmKh8YgCAYVzFgDPRjN
702
+ q86a7f///////////9QBDg6QzBSGMWzswEAW0Osh/KjGOgbAwQsC1M8GwyAPjH4zMYFw9YSEu5YD
703
+ j//////////p//+tMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tSxP+Dx6QjGA5/gIC9
704
+ BCOB3/BMqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
705
+ qqoxIRzBp6EDfEXUMAQG3zP+ukcxaUO9MDIBVjQarM1kc0EIDQZLOugkiCjzzlsAMZR0MbifMm0C
706
+ NDoFMKpG6DVLuTAxkcUQMGUBiTKJ2MhCU0qWDWhxOQE0OFTNYteC7P////////////QmIKaimZcc
707
+ m9VVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LE/4PHgCMWDn+AgOSEYwHf9EBVVVVVVVVVVVVVVVVV
708
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTLQazR0KDcoDDzEgTHcAbw+
709
+ sNJNAY2CYzuCKnWjDGgzPGNrVgikjAlFiEHUpmywRK7d7vr//2f/////6f9P+kw8HkwDMowbV8xw
710
+ rYwTkhbM2o99zM+SB0wYAKiOD1U26mzhhUOWr82WHRoqJ5vJF5ZUzrTEFNRTMuOTdVVVVVVVVVVV
711
+ VVVVVf/7UsT/g8Y8HxgN/4IA24PjAc/wSFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
712
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVM4ScNTBvOBRePfiZMfBCvjrDJJI/mcFgMhyA7jNXG9MS8f8w
713
+ XiLDAORHMBoSMLgWEAAqjTxwxOUd6nJfbo+3//////R/o/0f/6TFkcDFIpTGNDDJyBzBUxeQw2L0
714
+ cMx/H1DB2AiExWvjOQFNpmQ4o3RwRhBCT5eadt1JiCmopmXHJuqqqqqq//tSxP+DxcAjHA5/gmjs
715
+ hGOB3/BIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
716
+ qqowSOjA53MhNQ0/oTBjBGAybX2CN8kIPjBlQjk3pHjWiONuls45tDPYgFhuqB54pLwcq//+r///
717
+ ///v/////qLMGTk5rCwdramDWAyBkYO78f/8ONGDhgx5m4aRkEQBkmM5m9vxnGEwcBbNIvLKcHP/
718
+ /6v////3/7///v/3+pMQU1FMy45N6qr/+1LE/4PH6CsUDv+iQM0FI4Hf8Eyqqqqqqqqqqqqqqqqq
719
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlUQsMMKrM1wMA/BjzAWaMg/
720
+ 54LeMGcAIDHcOTCMOTAQTjCrKjPUAXAobgt///q/////////7wsJzCRcMkq00pUjBOw3cw+K+8Pm
721
+ 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
751
+ //+z////T///b//0piCmopmXHJuqqqr/+1LE/4PJqC0SDv+CwQQFY4HP9Eiqqqqqqqqqqqqqqqqq
752
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjBsBB4bQUXZkwChoWG5xYSh
753
+ j7p2cffKNKmJJgf5gioQGYH+JomCJgrRjN4BVBYeKgFsuhFJPRdGRGYqLBmVOmroMYJaDrmEkCIR
754
+ jmLjGfXOdmGNDiEphSoYyYh4FnmH5Aox6LSaYUGPh5hQACgNBxdjvyzv//9KYgpqKZlxyb1VVVVV
755
+ VVVVVf/7UsT/g8kYLRYOf2LBF4Wiwd/okFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
756
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVM2H0zioDRTjNk2QwVIKDMK/F/DI3LQk/CKuUMekEbTA7wogy
757
+ XIIEMaICLTyrYNbGszCODGQZAQuSxaow13rP/p/9n6P/////os//6AoDRhiKJjQSBlqd5pg0ByLv
758
+ JjTB08fjQ1gmPcCdBhcQcQYyuDpmFmgop5TYaiVmRBxh4GBgQvGqdxJf//tSxP+Dx2wlGA5/xAED
759
+ BSMBz+iQz//+hMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
760
+ VVUwyBggwlZTGoQDuMe4QZia49ofaOi8mPjg2pgy4XmYSCHYGCBgmhqOph2gMLiMIqi3CBIVRdMI
761
+ A8wuFDEglMfkYzclTbeSMIeJ2T/3ubYx+gAwMDsCeDI4BjkwawDDPPONIhMWKLSrDRmmltrn////
762
+ oTEFNRTMuOTdVVVVVVVVVVVVVVVVVVX/+1LE/4PG6C0cDv9EoP2Fo0HP7FhVVVVVVVVVVVVVVVVV
763
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUHS7QOCQEVGbBZxIsYPACjH
764
+ dw9zphVIOqYDSA+mP9jGxgIQDKcbRkAoAl0v1euAt///tMQhAxwBQMtjRwBN4hg+QcTEqweA+wLV
765
+ 6MuZCFDBow9sxawlZMEhBgDfKcz9UMeLTCRQGALcoS20Vf/7F/2f/////pTEFNRTMuOTdVVVVVVV
766
+ VVVVVf/7UsT/g8mALRQOf4LA+gWjQd/skFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
767
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVMGgKMXRPMpCWNBz1NomSO4b3MaiJED+e5xA3ywd4MWaJyjCw
768
+ Cp4wdcIXOM7jL30wxGMBKQAKGAg6C6kHvvVf5f//6v/d//936rv///9xgUEYXD4RjOYCFMYLpCYO
769
+ SIYAYOqmLccOpjCY2iYQGD7mETgYhhHwDufCbG3DJnYMDjkiFkuGkPDK//tSxP+DxrAtHA5/RKDt
770
+ BaLBz+iQuJiCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
771
+ qqoWFsxqDYyxHc0UMI2zTc7wgwxn0Q9OSwQRz6GyTMxs887MKIIPTAoglAxHFxAliwWSAaCENgQE
772
+ IDE82zUdd/6rv//u/3/7v9/67////1mEwkYaDJicUGQCOZxRRtqfmEFiMhj9nRgcDSIRGD5jvphy
773
+ YX+YN6COHdRpr6UZkUmMiAGCWnPq16L/+1LE/4PGWCcYDf8kgQsFYsHP7JC9/9SYgpqKZlxyb1VV
774
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUMhwFIBIRlYMVjB70wDYJUM
775
+ Pj4ljK4w44wJEKrMZTAGTA5wDw7Rs1IgDHQ4Er2FzcqxS9QRCgkRmAQ3M34MCSBUzEz+hIywcT7M
776
+ GpDVzIyQSYwIgBBPVABShgSlrbSCpVPf////////6/9aYgpqKZlxybqqqqqqqqqqqqqqqqqqqqqq
777
+ qqqqqv/7UsT/g8m0LRQO/2SA6QWjwd/slKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
778
+ qqqqqqqqqqqqqqqqqqqqqqqqqqowgFTCoeMOC8xmUDLiRNfygweANBMjV61j1RUK0wN4jPMsXDfj
779
+ B9AVs/OyOIZzTzoywdMRBFItyXa/Vnf////////9f+t////9ZMDDEYJMiCYziSTWx4OdscwoIFoM
780
+ idKVD+0RUsxkYUXMKbDNjAnAU01GqMsXzFzYwQdC4Qttz2awNeTEFNRT//tSxP+DybQtFA7/hIDx
781
+ BaNBz+yQMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
782
+ qjApSMWp8zo+DY95MEyCTjB2xAMwyIkiMe/3UT+B+3YypwfSM56BdzESwNY4kIc05FgzADUx9BIW
783
+ JUwjAMGgWSgA0mtu/3/6/T1/7/9f+U/xn+7/Gf4waA5h4FGPxSZmJRqc8nGmAYRSCbmM6Ct5/aAi
784
+ 8ZEyIPmEwBT5gUYJEaZLmUqhiReYGLD/+1DE/4PGQCscDf9EoOKFI0Gv5JCAFYQ9jfSG+mIKaimZ
785
+ ccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQCYOBGHBJj4wZ0fm6zRghAP
786
+ eYaGdAH9x7T5lSwwsYr+FEGDrAm59tYcMzmonhlg+YmCJ8tyWK/Vnf/////87//9f+j//6KCJtIT
787
+ nCgBGA4PmFg+Ghe6m5IcTBkPIrGdkBgQwgwgiQSS5X89svr3NpiCmopmXHJuqqqqqqqqqqqqqqqq
788
+ qqqq//tSxP+DySwtFg5/ZIDohaOBz+yUqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
789
+ qqqqqqqqqqqqqqqqqqqqqqqqqqpYygqKQGBNEo8LzAjwKQwjIN5OAX7UTHfCUQwmYHxMEHA3jiHc
790
+ 01CMqJTFQ4DArToZcaK9//////////+j//6AcBDFIfMnEQ0CczZS2OlyEwmYHcMZJDJT+HshY0+Z
791
+ ERMUbEJDCEAg043LDVi7M3nYyARzDogLgq6QGr2ndv+z/Jf6P9n+3/T/+1LE/4PKuC0QDn+iwOeF
792
+ o4HP7JT/k/9H+lMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
793
+ qhGEzEA+MnnE0EsDZcTOgcYwiMN3MR6Kljfy/3I4kULDMJ1BJDBUAF87suNqGTPQgFII8NIiMgeG
794
+ VO//////3////7///UrGYYCGSjJoBkbarncQxgsYFKYdIElmqn9rZvNZUAYxAG6mEyg4R0KDmw1I
795
+ Z6M5kseGJAuHAJaKKTBZ7Z////p/2//7UsT/g8jYLRYN/2SApIVjQd/wxP///7P9P//0JiCmopmX
796
+ HJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVZ4FQJhBxlUZrIR0fpgSAI0YI
797
+ eH1mL5eQZnxA3kYbgD2mC3gcR4T+bilGhFZkokBh1VzYWdQ7lFF1oADA4BMLAwxmITNRQOHusxrj
798
+ hVOX6DbD2yFNFiwx8ETDYCBwRQqXrC5uVY//////93//////9aYgpqKZlxybqqqqqqqqqqqqqqqq
799
+ qqqq//tSxP+Dx/AtGgz/ZIEzBaKBz/CQqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
800
+ qqqqqqqqqqqqqqqqqqqqqqqqqqpn4UADBRExQkMrRTToAwIsEVMDkDSDBhOds5SYkdMANCEjAqAN
801
+ s9PI3kE0KIxg8ss1mHnFizv/////93//////9bjM1VqKAFIgmHhdMVwxMKIWMNy77TlqWcsxrUT0
802
+ MLICQzw9MN4NE02hjMBRMZiQIBqVRa1XU7s//+n/Z//9P//2f5H/b/v/+1LE/4PIrCsYDn9kgScF
803
+ owG/8JATEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
804
+ qkPDBRcxwwM5VTYIw6HtMEcBtjCYQ+0x7A1HPg7ECzGPQJwwawCFO/UjaC8z0WMgBQwWVA3RwY1i
805
+ haGEZkwMaKMm5Fh4qWYK4BXGFPhOpl9kfYbkV4AGVKDeJh5oX0cGNmaiokZpFmZDjcYlBqBgiCwA
806
+ mA4AI4xbb////kv///9H+3/R/q/yaf/7UsT/g8bULRwNf2Sg5gVjQc/wwIgpqKZlxyb1VVVVVVVV
807
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSLMQEDKys0xMN/fT0s4wXkGB
808
+ MMcDfjOyQbs/JbeVMCEEMjAhAWk2GyM6ZTHzowohBoUo22dfsDXv////////9P///+2Wwe5jF0WB
809
+ 4eM2ETtfYyTAltPsruLD7pZzHERDBgDyzSgrXoyDIc/////////7P/////SmIKaimZccm6qqqqqq
810
+ qqqq//tSxP+DyCQrGA3/RIEYhaLB3/DIqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
811
+ qqqqqqqqqqqqqqqqqqqqqqqqqqpWwwMHMUGjLTc1BgONrTBAgWIwicRjMcpKKDpov60y6sN7MEwB
812
+ LDOY8AJwyWjgsKg6CRgjQ5Nf/+7/////7/9f/////xiaxQAgsEYQJAGIsBIIaBgaczH0YjcRTmP2
813
+ fTRgaw1sYPgEinDZYaiWpmU4GOiGYZDxe1XSFLJp3///////7kxBTUX/+1LE/4PG/C0eDf9koToF
814
+ ooG/9JAzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
815
+ qgYATmAHAKhgHYEaYDUBtGBVgrpghwS0YOuJYmHzINxkH4wofKGjen+/AD5ke4JgfgHacMlEapDO
816
+ ZvhgGI6YlgyYDhKOgkjbGve3/+v//7///v//7f//Pf//0b//7//6sn/////UdKPokCFioc6NwBPe
817
+ oMDmAlTCXwvgxTAX8MS18JTNzh4sw//7UsT/g8iALRYN/2SAzIRjAb/0wA8I8OrSM2GrDOxrMjjw
818
+ xAGS+S5UFmCzyYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVfJNcHCDJhTVEDrpTAuADgwhM
819
+ NlMnkCHjG3vo82VkatMFdBcjdKMzdWMYLzBxYKAqnT5NtIb+v/d//////////qhTJEcwUYbJJ+UG
820
+ BGgTZgwwWaZigEzmKxefJx4YgwYQeCumoThgKmOFxCLjAMhmwdoEnva/939f///////////1piCm
821
+ opmX//tSxP+DyJwtGA3/ZID4haOB3/DIHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
822
+ qqqqqqqqqqqqqqqqqqqqqqqqqqoDAwOGQcbAJlNdEjtEUwYsC6MVgDSDOXBYEybbxHNZ8XDDDDBI
823
+ 82bhgzyTUyZMIxaHkwpEAQAeNAEEAyiNCdbv/////////////+sLgAWAREASGAIimBw/GEaAmIE/
824
+ GgQ0mIEBZpkUB2yfz0aFGP7Aj50qSxqgLJmOGBj4CI8SxhEAgMAokAH/+1LE/4PMxZ8QD/RKgOEF
825
+ o4Gv8JRpVL3JiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
826
+ 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
856
+ E7Gwgk7BwhKhmccaS////////////0/6ZTHnpVmIA2YfPJ9WaGNHGZ7VxxdnGElAd5kk8ZwfWOYu
857
+ mIfg2RgzwFGeqgG6AZmoOCRcRhiPMPL//////////////emIKaimZcf/+1LE/4PH8C0aDv8oQUSF
858
+ osHv8Qgm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
859
+ VbsodNNAAiEyQbDd0KNTsUy0SDQqvMH+CyjHjy3M/RsZSMb7CgTCNgSI5GrzWh8M8mcx6QTEgeMC
860
+ gFpn////U/zus6LumCIZGdCbnLyUmtamGyi5nFVRmGUiyRjzkOSfDx0lGXqC4ZhxYTUe0opuFOGT
861
+ gyYHExjQVmHwYhT////////////7vf/7UsT/g8lULRgO/2hBKQWiwd/xCH3JiCmopmXHJuqqqqqq
862
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq1nSP+rw6F3ORPwWAG9mxrO0Y
863
+ BSESmExDzhvsne+YouG8GBdAp5lNYVV8w4sARQVjJEEtCR////r//////7v//txypY02hmEAbuSG
864
+ uEpsaAbbYGA/AzZgw45cbMP9iGRvBfBgdII+aNJGSqZkBYYoEBhOPADzp////1JiCmopmXHJvVVV
865
+ VVVV//tSxP+Dx6grGA7/SEEMhaNBz+0IVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
866
+ VVVVVVVVVVVVVVVVVVVVVVVVVVXKrTPqFwUYcQhoI7miUoa0VZwiZmC+hHBhqw6eZ3n3dmJZDH5h
867
+ JYP8cCepnc5GFgyYJARiAGgYRJ8o///////////bjQR9ZAJN5mrHmlooafjpkhPG+USYV0E/GOEj
868
+ 2Z24VmGfzyVXmPMBvB6i8ZvsqBqajplyYpkAPBh2GZgQAGrPb6f/2+n/+1LE/4PH1C0cDn+IQScF
869
+ ooHf8Qjs//o//Z/s//oTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
870
+ VccsZUKIZwaGai1GsSZxM0ff2GC8AxZhgomsZDF9EHsogsBihQFeftIhN+DPo1MNkMqDIQBNYLXX
871
+ 9///393/////q//q6v/VckEZqUfCEXg0dGHBmZYH5q0VHolgZLT8xH2RlIJgWINAcFJmdmgGDUTg
872
+ UGiQExXyf///+j/////7P/7OxMQU1P/7UsT/g8gQLRgN/2hA5IWjQb/tCFMy45N1VVVVVVVVVVVV
873
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/9XSoFmMoAXVxlyMoYTmlUwS
874
+ 8AGMKIApDI/UZw/KkslMZDAfAGLBo2GpksLBhkKRgOHZIDCbu//8wsBTNgaNEhcIxJuU9Gwb8YAc
875
+ GCmCKDfxis8eWf1PaQGJ5jw5rhoxny6pnQkRl4Qxl6GJjsAwQM9nvR7P//s6fb//9v/6f//pTEFN
876
+ RTMu//tSxP+DyFwtHA5/iEE1hiJBz/UIOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
877
+ VVVVVVVVVVVVVVVVVVVVVVVVVVX//UGAwKigsEY/AIsMohA1wFDx5bMSgGXz8OgGIxxAJIPwtc3c
878
+ gDRZrMgksxMLjBoRLKWv//tIDy4AJBUtAwLMwNDf98wXoaQPmlS/TCwgfk/1QDM0ycFBIaOhBe1N
879
+ aKc//////////////WmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqr/+1LE/4PIoC8WDf+IQPoF
880
+ osHP7UCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
881
+ qv/9S0yBw2Mc6Fw35023YwP0FlMIwDPjFeS+E/6rEPN4RF6TFNAoowmMGNMFwBOjzNw52XNWXjI1
882
+ Vlev//t/3///f/u/3dH//1f//fBQEY8LmknxuTGc9kmBbgpRghwTyYROPXGCF/uxhbpCUc0TiZpo
883
+ kYIDKAh2MZgnMUwcBw4kQD3+f0f6U//7UsT/g8bgLxwN/6hhKAYigc/1CBBTUUzLjk3qqqqqqqqq
884
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq///SAswUDDEYPEiaDCiZGYht
885
+ fJmEkB+RnmPPYeAgVHGDBhSJgbQJwYFOBen3un2UHXEnO/Eyaj5///2///b0f//yBE+x4MCBYAkQ
886
+ XXzGtowDMK1MDtjej4gBDw74KQzlGsxsFIwuDgwfCswECgwCIYeDO439X+v////////6v9SYgpqK
887
+ Zlxy//tSxP+DxnAvHA5/iiDfhiNBv+1Ab1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
888
+ VVVVVVVVVVVVVVVVVVVVVVVVVVX//+IWgoXjGgJzJUaDKdADIBuzG3IDAnB3MwfvqyOz4dJTDhBj
889
+ YwQUK3MD+BcjeSUOOjM3oLDg4oImW0CR2Af+r/X////3f1f6v9X/+/Q6jIgABDMTkIziTjXxHOll
890
+ QwoIDpMdtPDj7xU/UFJLZhWwDIYJyBVm225jlYQ15vZyXektwW/b////+1LE/4PJFDEUDX9ogPaG
891
+ Y4G/9Qj//QmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
892
+ qv/8Pd4tqYmJGVEpoiqafFG2fZgVoSYYGAXxnBSeHRkqQPmYN+BTAIEFEJEMbGUx2oD2gNDAbDVU
893
+ VNfd6P////////+3/d//33SCwCYOLGQEZoCKa2yHIUJgjYJsYZoI+muG/yJiVYhGYGiCWGASAKpi
894
+ 8FGbhSaNC53EnDQRe6ivhBvpTEFNRf/7UsT/g8fkMxgOf0pBAwYjQb/1QDMuOTeqqqqqqqqqqqqq
895
+ qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq///yqBZIIgMH0w/Hgy/HQ1ED
896
+ M4bBEw74CUMi9A5T7CMwo6UMJ2MfkBHDDPwcs03fMx0gowkxkxcT8lCgkANjT1yixfvP6Pt/////
897
+ /0f6P9H//1///8VL9GGgOYzERkExGNFSYxjxgGwRaYBqM0GTr/BxmXBGsYLAEqmALAdRo4HG5yAc
898
+ 0Khd//tSxP+DyVw1FA7/ikD6BmOBz+1I0OIyZrzSa2FqkxBTUUzLjk3qqqqqqqqqqqqqqqqqqqqq
899
+ qqqqqqqqqqqqqqqqqqqqqqqqqqr/336B42kPu0wBFnEkYDGAWmCcADpkY/RIeI4OqGDyAc5gGYBs
900
+ YIAKYiikZiR8DpaSud2NUvU1f//V///////9X//fgYWBJiUEGQBWZMPZjlnGKqiYByExGBYC8Jh8
901
+ vS0c7wkDmHJCJhgr4PCaZmWbXFYdAmsLjcNEQPA2mYyd3IxTs/9/9X//+1LE/4PIrDMYDf+KQPaG
902
+ o0G/8Uj//////dUmIKaimZccm9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
903
+ Vf/X+woUDzAzAyY5NiUTl1Y+hzMGBAyDC7ghcyOVhqPzNbBTJgQXQwp4DCMmF0MZolOp0ZM2yUME
904
+ AlCoDJotyj9udvu///T///s//+z///6f//+iV8Chkx8SMpQjHHcxHCMACBXTAAgxAwckzxNB56Rj
905
+ Grg9cwLMEkMCYAKzBWQTQHFzJgegA//7UsT/g8pUPRIO/6pA9objgc/xSGeIQYims2sjr1jv//9n
906
+ //9P///+tMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV+lcZACYkEZE8Y52ZXIYBYBZm
907
+ A/gwRhCA4Waoh/4mTkhjpglAJAYFgBHGCLgupibYBuNAgo8AXpAM3dSH6epv//+v////X/////9f
908
+ ///ARfUwMWMcIzQEE1tUOGeTA1wMowYoGrMPHGJjR5uGYyX0WaMKKApxxNDaKTThCGzLEdDDIJTA
909
+ 8CC2//tSxP+DyAw3GAz/qkEzB2LBz/VIqxpbTS207///////q/////+pMQU1FMy45N1VVVVVVVVV
910
+ VVVVVVVVVVVVVVVVVVVVVVVVVVX///fdAIAhsWJRAYmROhs+WYGACrGCyhQ5hoA1Ia1H0QHXMFsx
911
+ hqob6YQaD5mHBC8xgq4O0YIWAjncGAqeGGA4GmAzh/6n//9X///+r/////93zmn1a0oMgBMBQAMF
912
+ AXMPRgMvIDMNfQbD70iCIwMQDZMAjAAjBrBqgwgMA0cZJFezqyKwK///+1LE/4PJ8D0aDf+qQTAH
913
+ YwG/5VD////////////QmIKaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
914
+ qv1//KFThAQLCwXIjEVs0KcMB/BBzA3Ad4wakSXMWQcHj8KB18xhAOgMJQCujDDw2QxBkDvMDMAS
915
+ jkmzNBgMPLsJFs7dyn5+v/4BCoEYcRmYmhrbAblAnP2hgdQI6YMKEIGGACkpkWc2gfJDrGmWGhnR
916
+ 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
946
+ 4kHP8YhLMOAi1C0443T/Z///////////9CYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
947
+ Vf///dI/cCsJFAICiZhRUY6pmcUxgM4MmYFKKamC1gX5jcZ6QfYaVDmIegXhgsABydSKGvAIk1Dx
948
+ oDg9KtnkdZp///7rdE31tIlAYWGNQmZaFhpspnGk0YS6C3mQ6BgRkmAlOYGy5Yn8PxhBhvYzuYAu
949
+ FbGRMGYveBg5OkheMHjEBC8oGBMBnv/7UsT/g8j8PRwN/yxBI4ejAb/piN7P//v//////////WmI
950
+ KaimZccm6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq/TNCsRwnsMCAJDgYQ4BoZZgQ
951
+ QHAYUqOQmENAmphihF+fIYHomIKBUBgXoFmdaIa06ZYUYsGAgCQjE4o/R///1Im1iH2UAEBmEgwY
952
+ tG5lY3Gq4CYMQH8GFaFMxh3oIsYPgXCH2Uz4hsCAgMYe+DcnhnIbNRZnwuGVSGY6GxhoNGDQGnRL
953
+ +/9P//tSxP+DyeQ/Gg3/bEEwB6MBv+2I///////////0piCmopmXHJvVVVVVVVVVVVVVVVVVVVVV
954
+ VVVVVVVVVVVVVVVVVVVVVVVVVVX///3NPqw5IpACBgKMEgJMMQqMdCNNZYEO6l+PIJPMNCHNTEpP
955
+ nUw4wgvMNxCUjukrNmq4zsZTHouAwRQTAYCpXRXnbMzBjd18JbrCmAQgkpjbAQGYCaAuGCUgRhkn
956
+ XEGb/iI6mFlgBpzwADmsMIA4DTAaxDdSt3///9aYgpqKZlxybqqqqqr/+1LE/4PICD0cDf9sQUyH
957
+ 4sHP8Yiqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
958
+ ///9SllSgJaUwCBDBQRMPigyQYzYcaMOYAJjJMA+sw48L+MShGnjL0O7U3gKVKMacGMTtOtDYhhT
959
+ Oc6DHoezBsHjAwBTCUDAUDq/v+7///u+v/////693///+FPeoWkI9gQCDBEJzE4jjenITItfTJ4Q
960
+ jA1wVMxPQOrPneQ5TFWA7A6TWTTywP/7UsT/g8eUPRwKf0xBTgfiwc/xiMvmsyARDF4xMLhMDBhJ
961
+ OQXJiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVViQAAD////W9X5Y76mhgCAZg4O
962
+ RlV2xqqKJkQBJICTmCHDtx0tJ5QZEAAfnsyuaqGhlcQmMAsYbCZgMCoBHLsd+n/0OWR///9XZqUw
963
+ 62yzR4BBA5NBhk6xRT/CLO9vgwWcKcMFKIyzQ5vXU0aMkxNDbKMellMMTOCw8mCAdGDwAEQlDwKt
964
+ SvTE//tQxP+DyEA/HA7/jiDjh6NAD+yoFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
965
+ VVVVVVVVVVVVVVVVVVVVVVVVVf////5alUdfBVMYAwwrXE4cWULlcWBLGgRUwfUD0MrofQT+Uy40
966
+ w17DJbFMaGYxOOzDwiMHAgICakIWv//////////6/3V/9///f/V3K1JnnVgMDQDARunDw4Gk4Pmd
967
+ gumBFAzpgPwmQYgq3+n2NjhRizobCYL0DIGBbgdZgPAEsd/Ob1ibAf/7UsT/g8rsRRQOf6xBBAfj
968
+ gd/xwIEH1+f/////////////3piCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
969
+ //1//jTSqGXCTRAosM8U08tBzYsQN2QMwYoGTMKhDODGzF+c+DS0oMx8CBzDWQNQwZoBbAwOUfJU
970
+ ZJ4KKwqKZSv////X/+7////d6//2c/ldmILUSMz2Ao5mGshnSmYEUA1mCKgNxhvgMGavD83mRfh8
971
+ ZgLYJAYCMA+mANgGgiAB0zg4ANRq//tSxP+DSKhFHm7/jiEFB+OBz/XAc0p/////////////+1MQ
972
+ U1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr//X//eVY8+KTghIMhg0wwYgwx
973
+ aMxrTgwd0C6MPwA9DJxwn8+ODbmPixCvTJ4gdAxEcEtMJyBCDwMZNbuUzEmjDZJCgIFf/2+ns93+
974
+ ju/f/7P/6Oz/1+36BuBQFgaXFgAx6Ax4HwMkjgwF8CIMBqBJTAaQ94yOf5cNXlBQDDfAC8wQ0AcD
975
+ AOn/+1LE/4PJBD8YDv+OATcH40Hf6cg7RQaiOmIMtiI////////////9iYgpqKZlxyb1VVVVVVVV
976
+ VVVVVVVVVVVVVVVVVVVVVVVVVfb61FkIQCBncyAYSP4GN1UBnxTmCBAbJg14IYYbkD8mZQ2CB82L
977
+ FCY5yFvGFTAe5gqIB0c8XGLLBhCWYmRAIFr////6v////7v/qOhhEDEHgN2fA8AwD3pDAQwMAwEM
978
+ GjMFGDsjFux80/quUWMJrFnTApAjIwIsEtOKtDcEw3MTDJAeP5B////7UsT/g8nEPxgOf05BGIfj
979
+ QB39ENX/////////vTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
980
+ 9X9RUBzEEVMC4kDpojAQQJQCAnpgDwW4YB4can9HbJ5pEIYCYXEDHGCYgdZ21QbQzGroJlhQYKUs
981
+ v1/v////////+7/8p/r//UfAwIADNIQOHKA92kwKYDDMDTBNDBSglEwq8e6MXh/MDCiCEYwzwIvM
982
+ ExA4jsMTMrDoQTjsAziND7XP//T///tSxP+Dyrw/EA7/jkESB+NBX+XI///o/////+hMQU1FMy45
983
+ N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX//EhDXA0AIWTADBIBQogFO4Dx
984
+ S3Mtb9NjrShw4w4wAFMDNAAzgFDCHBGjKrIzk4ax3Bb+7/f///19X/////1ff9NgAAeBi8jAZySI
985
+ Gw2AYJOCkGC4A7phE4Y8YgcOrmY1/UxukeAGZFOOGGGEBR5udeGdEGcJYhxJYnqTSAm0r2Bp2+LU
986
+ 8l7/+1LE/4PJGEEYCv9uQRwIIwFP7ciOz////Z/s9PZ//9CYgpqKZlxybqqqqqqqqqqqqqqqqqqq
987
+ qqqqqqqqqqqqqqqqqqqqqqqqqv/0Yr4NyAAgWDgiEAfAxIXAM7rkDlV6MR7Fmj5r4PAwXYP1MAMB
988
+ UDM6jMxjcMfhocGHJg0RAV5p2+7//////6//1Rvg4aANOA3yMwEAB1MAfA1AoC7mAABhAILmzjnu
989
+ cE1HUbVMIkCbDjdHNqqM3weDgdJOhkEOKCv34l9JUC1v////////+v/7UsT/g8joQxYKf25BHwij
990
+ gU/pyBMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
991
+ 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
1066
+ uLvAgMAnGJSYAeAxGAMAh5gGAjwZrr4fGufjI5iG5B+YuCDTGB+gBf/7UsT/g8ioYRwAb+6BVYwi
1067
+ gA5+CACAaQwAKVy70tyjJiCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1068
+ +YXmXkUzLeGjPnMiH/6mBlAXRgq4JmYVUEOGR+pfx93KcKZhkIGGGKhQxgHoHaYAsA3AUA3EQA0K
1069
+ gBaCBOdl7yUfPmFzlyEgxgAMMAbANzARAGYwHcCjMC6BAjBLwbUwi4NwMYTKAzxaOoww2VA/OJ88
1070
+ M3F/MezUMTB/MLxMMFgtMAQSTtak//tSxP+Dx+RfGABr8EEfjCOBX/aAr15r2j/Z//9P//0f6f9P
1071
+ +lMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX91IbpIbUALJmAFABhgD4A+YCA
1072
+ AhGBFgVZg0gUUaGP1pHLNif5q5gigYx0wtQBjBgABBwNQsByTALoUMAeua1///////9312sJFq0E
1073
+ oUxSY1c06HwwIMDJMDSBUDBeQl0w1oUEMPLvWj7xOrI0m4PHMTFB4jCPAScwU8C+MDUAeTAiQEQw
1074
+ FAD/+1LE/4PK9GEWCv/UAOoLY0Ac/gkVFgD8dACQaABKCy7b/t//+j/R/hj//5NMQU1FMy45N1VV
1075
+ VVVVVVVVVVVVVVVVVVVVVVVVVQAIAAP/l+zKXoZmloIwBxAA8FwUzALCQMb8gozyfYThV0TK8cDE
1076
+ QLTB0EDAgAy7S6ZFVl1nv/xi///+grAhNwIj+BkHU5gFQAYLAT5gTAGiYWCKgmbEBCpo3ngqfqie
1077
+ tmMCgWBgyQBCYFaABBgFiTALwsAWA4ALTnbhQsyf9n////////0M///7UsT/g8hIYxwAa/BBVAxi
1078
+ wA/2EEJiCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
1079
+ /caZyisAQjAPMWAzvzAJQH4wFQEdMDPDcjIAg+syegYNMiSgeTb0uEAz74O5MRNBjDCFgOkwT0CO
1080
+ MDIATzAeQBIwDYAACgAwFAA1IaHez/////////9f/t/7T8sSR6EQAoqAkIgKwSC0YEAa5hsjmGQa
1081
+ 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
1126
+ 7ZH/////6UxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX9/+5Mw07zTVYhoABFgCswD4CW
1127
+ MD2FijDZQKIwW4DZMEuC/TBc0qo/JVYVMdgESzDdwDkwTYBOMCXAPTAVAC4wDMApMATAFTABAAJU
1128
+ 8ov/////+eq////1/+6m70XcROsIAQRlwdtP2Z5DEY6gYDAQAwYURvNKQ7xzFtQ9wxJcJVMCwAxD
1129
+ ANz/+1LE/4PI+HUcAHv0QYWOokAJ/hAFUwBYAmMANAEQMADiQAAr+BL///////////vTEFNRTMuO
1130
+ TdVVVVVVVVVVVVVVVVVVVVVVVf/8cqaIvEtkqgoyDfzmjXMFowwMRzAfACEwYUDKMYKUKz/FkiQx
1131
+ mgXiMEeBdTAOwKIkAUTACgCQDADhWAJjwAK0L7f////0y4QcBACA06sgNCgEDQglA0iYjAnQPwwH
1132
+ QIvMDoG5jW4eiA5ao40MWwBmzBrwKYwLYA/IgIMlAHTX4yNROqaTEP/7UsT/g8jcdRwAd/RBWI6j
1133
+ AB9+iFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1134
+ 9f////+ikXQIgYDL40AyIcwMpqQDRCpMECA7TBoQXAwyQQ/Mb3d5DhjfTE1LUHlMRsA3DB9wJswQ
1135
+ oCsMBsAnDZ+TGTAS1a+Ef6f9X////93///X//QhcAgBoCSYAMA0AgBJMB4ACTBFQF8wjoDYMXVE3
1136
+ DJ2OM44A0XvMaKC5jCVwXswVIEaM//tSxP+DywR1GACD54EojqNADv6IC4AyDlZM2Z2M1eQ4/ils
1137
+ E//+z////+xMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVf/fohmSR7+EwMABAOzAbAKowQEF
1138
+ fMJeDBDKU1xQ+4ViLMu1EjzCUgd4wTsErMDBAuTAvAIowKsDLMBfAKy9DbxSnsAn9v+z/+tb////
1139
+ VANBgahIB31YHwHmARAY5gQwM0YLCFvmF0C5xkVZwefDhBbH8woXZkXwywYcyG/mEphEplLEDGWW
1140
+ l+b/+1LE/4PIMHUaAHP0QQ8PI0Ff4wAcIiZg7ALAYDMMAETrYg7EbpJPR//9H0aPt0f/2dP+nWmI
1141
+ KaimZccm6qqqqqqqqqqqqqqq/X+7BccFAEgOAOjAAwD4wBsCPMBoA/jA2QeMwfgSmMq7UqD9e1Ks
1142
+ yqERNMJsCFDBWgVY9P/TSsJNbEoxqBwgIJXroa/G6TP//+n///f/9H+HIAY8mBtjwDIYCgPhgNoI
1143
+ WYHwDiGDchhJhnQxoZKKgbn8ybKB3E5IiZSIMnGIjCfBpQzsmPmsKf/7UMT/g8pkdxYK/1gBK49j
1144
+ AA/uyJAwbxhQgsmCEBUYEICpgHAFGAKAGgHXRD7v76f9D/6tv+35T/1JiCmopmXHJvVVVVVVVVX/
1145
+ ////3/HWFjAG+A1AaALmAaAKhgO4E6YGYCGGCyg+JhgAlkZ1TEDH7jumpmB4eWYZmJMntNomPbrG
1146
+ VpFmGQeGBoOgACgaAKEhdDrznf//6f//iaRgNAB0MAMAHmAbAFxgNoDKYFoBVGCVgkphGQSMYySB
1147
+ dmkJddBgXodEYoCKemU4yyYZA0T/+1LE/4PI2H8cAGP2AYaQogFP+wBgShZkgLgoBmOgNEIBKNjB
1148
+ GpwdfTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf//7f/6nV4+Ab3AW4GqiwBQYCSA
1149
+ TmBBALBgaIEuYKYB4GEigx5iiQPYarr8CHKFzJ5kghGueAbfRiwFDmGWKgYQQY5gpg+GBcCaYB4E
1150
+ hAAKq4WABX9Rav9f+P/0f7/9f//3///cgNmD4sdCAA8wBgAGMAzAFzAWgCwwKMBFEgsExJsm+Ncb
1151
+ 6P/7UsT/g8lAhRwAf5ZBjZCiAU/7ACDcfSzc0lTsDGeGdMNsOAwgghzBRBSMCwC8wEQEExWvKWut
1152
+ ZTEFNRTMuOTdVVVVVVVVVVVV9f61Il0niCjiEagMABYGALAPQGAbCW4GCFMPwH34nWxjDtnmS6VI
1153
+ YrQt5hrhwGEQEeYKYLBgUAVgUABMEIAGVhkX/////+zzgm4PATFCESAIzAKgAQwEsAXMCAALjA5w
1154
+ F8wdIEWMTdKIzGhWO4+Bj6XOxpPlTAMBOYwU4JjMDrBajAnAOkwF//tSxP+DygCHGgj/uAErEONA
1155
+ D/rI8CWMAoAVR0AcIgBUIAKhYABhXf/d/////9n+tMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVX/
1156
+ /7scbu8S/hIAQDAVmBYAYYKoEZhSAqGLqLOZWwOxppKkmp7Kofl2c+mQgiSJgTgOwBAP8wA0CaAg
1157
+ DCSAGxgAIAuGAB5QAGK1Sbv3//X//5tuiZa2kWgEAYGAbgC5gMABsYFWA2mCnAghhrY1yYIQYNmO
1158
+ lCAJgsaTqfjMZpHfDmb5jJgpwYP/+1LE/4PMRIcUCX/YASKQ44AP+sgaFJmBRAxBgMIIGYCkBVGA
1159
+ rgOJgIYBWYB0ABCwBWxSiZ/RR+W/yn+K2fo/0piCmopmXHJuqt//////9BWEAnhCl4OAEMBMAkwN
1160
+ AJjCNCvMSQPAwNSSjH1DCMB5GAyr9bGPznWrTK4xHkwcQHSMCvA+zAXgJowEUBlMA4AQjAJABgBA
1161
+ G4sACPf//////Z3/+////q8oIMJAlvIXzMAwAQwKQHTBgBYMTkrExynPzP0IiMsEOAwb1LDHfzjs
1162
+ 9v/7UsT/g8jghxgAX9SBbhDigAb+wFSVSP2pR+zH0Bpwwj0MxME2B7DA5QUUwMgDiMCQAcjAfQCs
1163
+ wDwAAHgAv6+sT/7P/8rt+Ic/9Oz6dn0V/////y/5DLssd9QQwSCTOCqMsxw4iSTcBXM7Y8wRARYM
1164
+ mlTGj9SUN8ybsXbMCwCHjARwR0wD4CmMBHAZTAOwCMDAOA8AZp4f////y/lkZdsQ+ywwKKzTlLN9
1165
+ EA4OLDiStOCc8wHcQCMKrLjTk9q/c+X1XPMONEnjBZggEwHcEIMA//tSxP+DyWiHHAB79kGekOJA
1166
+ EH3YJAewUBLmAxABpgH4AMJAFNs7///q//3f//6kxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVXr
1167
+ /r//4v9//b0vBgdMWBQ0OOjUyHNrrw5DajBVgpswdUb6MZDIxT8T+Dw0j4WDMUnBPjCCgFkwOMBB
1168
+ MAjAgzAFwH4wBwBdMAZAMi/F1mj//6f//l///pTCBTDoDIPTWvj02DAsAIkwU8FyML2IezSEvdk0
1169
+ O4T2MXJCzzBfARowMsCxMBvAczD/+1LE/4PK7IccA/v4AagRogCvfwAaAFIwGEBdMA8AYBoBQgec
1170
+ thD//u////3piCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqqqulESBNQIUGdguhgIIAmYFIAdGDg
1171
+ gHRjrSxKftUO3GCji5BhUQHCBgVIhAUzAQQJYwKYCJMDRAS0EDAX2mbnDXq////////+n///hhY6
1172
+ CiiJVACDACwDkwDYCQMCRBgTCBhYQ1Rvk0MPCIQzECAzwwBkDPMBjAAzBDgGYwcEHfMELAPg7o8Z
1173
+ bv/7UsT8g8jshxwA8/gBUJEiwB5/ALnxSkus/////////60xBTUUzLjk3qqqqqqqqqqqqqqqqqqq
1174
+ qqqqqqqqqqqqqqqqqqqqqqqq////V///6shwWdAxY4DRIQN5JMBJAcDAbAK0wMMEsMHIC6zGEVh4
1175
+ +jGMYNhyE+jD8wo0wacGxMJAEjjENgaYwSEAEB/AZOHCJXrEciN4f//0///8YUvGgBQDAFRgBIBo
1176
+ CQG8wC4C8MBjBPzAsgmowY8cDM7KgdT/7HAoy7wPOMMkEUDDEA5w//tSxP+DyniLFADz+AEukeNA
1177
+ DX8AwZkE7MDcATjhozKDDBgS5CK7E34l/P//6P///9CYgpqKZlxyb1VVVVVVVVVVVVVVVVVVVVX/
1178
+ ///3//1/joCxsDIgBpYBGDAOQFkwHoCeMDNBATBUAbAwnUNZMc2C7DUd+6szhgJaMeyJGjBnRrAw
1179
+ eMF9MCwAlDhxzMJDEkTABCy6g7JIu7R/o///4+pQDQANMQCgAJgFQBcYC2AumBKATBgeIHuYM0DS
1180
+ GG2heJmpD9WfKBEcGmqjWZiOwTz/+1LE/4PI8JMaAEv4ATESo0AP4wiYIkBCGBFgEIHECUcWOCQd
1181
+ HxlD71ExBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf9X/////1/KYhADdMOgAazAIgBY
1182
+ wEkA7MB6AZDAwwKMwUQEMMJtCBzGugAk2XFyXP9XThTFOQzYwp4E5MFdArjzG039ANOITKwIeEE3
1183
+ E5XKs7P9n+n/Z//9H+z///1Tw5B7RhGAAgAAOMALAITAGADYwCkBZMAkAeDAHguoz3pHlOmD4sjX
1184
+ 1P/7UsT/g8oklxgKfzoBSxMjQA/rCA/Iw7UGBME4AmDlUc1IiMxEzHAow8JLTqCQ/hoTEFNRTMuO
1185
+ TdVVVVVVVVVVVVVVVVVVVVVV///9V5RTxhd5cgwAcALMAYAKDAPwH0wIQHsMLiFBDEgSBgyTJ31P
1186
+ 00ZnDIagC4wf0CbO2XDUzkygkMXFTDAwswle6lvu//////////3///+EbciFsYCoAOYAQANGAOgH
1187
+ JgHQDkYDeCKmBABaRhAIyMJAt5i7QdCY/n9hmbAkfZiw4CYcCAYa//tSxP+DyliXGAn/WgEkEuNA
1188
+ D+sIDgeZNAkYwgyYcBEYHAwCQHZBX///pTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/
1189
+ 1q/////X/WSgvhOQCxKgAYFwCMwAQBIMAfAoTAXggYwmALVMeYFuzBfwmoxOMOINHYy2Tn4un41n
1190
+ AEuNbcSsyjgoDF9BzMPYGgwnQczBFBXMBwDAEgEuxRT//20f/9H+yn////k9DrgsKRfGABAEgHZg
1191
+ MQOQYBUC8GCEA55gF4GoYL6BDGL/+1LE/4PLYJkWCH96ASETIwAP7wiZEJZk2XUKcYcZTGoWhSYh
1192
+ QzxhKhvmDUEQYK4LpgbgVmBUAQHAPsUU/////1fuTEFNRVVVVf////5lWj7wJ7piGA1ge5gigIyY
1193
+ BQBLBUA9MB2ADjBsQKsyEBTPPhMalT7/GUM44NwxCQZzByA4MDkCswEwGTAIAKLhsoEH//8v/kav
1194
+ 0UHgwAdMBbAmDAowCcwJoAMMCPALDATQPgwE0J/MGmIRDUZ8Fg/GWEfMudAbzDQARowXcDPMDYAs
1195
+ DP/7UsT/g8msmRoAf3hBPZMjQA/3CAbgHwwEsBVMAYAMB0ATcfL////9CYgpqKZlxybqqqqqqqqq
1196
+ qqqqqqqqqqqqqqqqqqqqqqqq/W4BBoFhgHglmA8DABQOTBeAMMQMLcyQBsDbjaUMVz/ADERhjgxw
1197
+ wIQMJpBPTBSAQIwKYDAMB7AlzARAIQwAQAhDADuUVwPn//////////flgBQQDxgaFpgEBxhGCpkc
1198
+ OhqCcJ4kHRlp8FIfvbeqmoNkeJgpQU8YHGCfmBkgQpgggBsYKSCU//tSxP+DzEiZFAb/2gFLEyMA
1199
+ D/sImBTgFCFqcTmyecqC3pTEFNRTMuOTeqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/
1200
+ 57dyAAFUGhUEGGwINIg0eLToi2MQjBnjSWpic/PNRvMoxDKzB2AVowOADoME3B3zA9QSUwYwArAQ
1201
+ BuEAAiV66GvxuWH//1/XN//n///////3z3kKAfMOgBMWw2MXSiMJkZEDhGGeLmA4DiRiNbBif7NZ
1202
+ pG/hjI5kjQssYdYIAGIfkApheYj/+1LE/4PIzJkaAH/YSVQTowAA/iCeYRYAjGBMgD5gHwAUYA6A
1203
+ BgIAYAwAGmOziN4f//3f///7qf9CYgpqKZlxyb1VVVVVVVVVVf//laxA4DEhEGD5gycZrFm3dhgb
1204
+ oNyYRUHyGXWtIR8kbZSZriNkmEihzZgzgTcYEsBfGB2gARgMgAOBgGIOALSYAOVgaRBNZ///+mRQ
1205
+ ZMT6GLQIDgMKpA0FQwFcCzMDsBujDww1U10avjPnXTdTLFga0x04THMGOAgDAdwAcaATCYATTwZu
1206
+ 7v/7UsT/g8jgnxoAe/oJNhSjAB7/QEYrsrTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1207
+ VVVVVVVVVVVVVVVVVVVVVVVV///X//l/////+kXWLBAOHjAyoCrplUsav1mBFAvRgbIVaYLIM5GL
1208
+ aq4J66XggYf2gEmA1BBJgbYHUYDsA3mAdgHRgDQA+YAOAFF3X2ir9S3v/yX+n/T/kf8l/kf//m14
1209
+ IC1MC45oDhx4Z9txgXoFiYJwCRGEhhFJivg08Z9fX7H7RW4RpMQ6//tSxP+DyRynGABz+gGLFWJA
1210
+ Hv9AAYCGEYmA/ggBgKwEiYBqArGAMAGJgAIAok6x5SLfWf///////sTEFNRTMuOTdVVVVVVVVVX/
1211
+ /9yh94w7ZdwzpO1jAKwCUwEIAYMBRBEDC/A+wyqER+M9DXaj4allQyVoFuMIZAuTA0gFgwGkAvMA
1212
+ 6AGjAIwBEwBIAMAAAAkW7h/R/f8wHWJ4F2IEAKJgaAcBv1JgOQCwYHGB7mD7CShgWJLsYumHmGG4
1213
+ GJxxW/WuZPsHwmOphlJg+wM8YG3/+1LE/4PI8KkcAG/6AQwU4wAKftCB8mA9AURgK4DeYCMAmGAV
1214
+ AEBgEIAGJAAjz/+n////QmIKaimZccm6qqqqqqqqqqqqqqqqqv//9v/////9ZgRcqDrDGgAowNlD
1215
+ AKwC8wIYCaMFzDOzDdgxswQIAIMGlB4zLxnxE+4KVyNCSIfjAhAnMwEEEmMAAApwAAwGAMgGZ5KP
1216
+ wKFOb///q/////+roF88SomwLXwBMMALAKQKAGmHjhsxgO4NWMAWxgt4C6YoUB8mt44fx+6R/sZW
1217
+ 8P/7UsT/g8t4qxQA7/oBQxVjAA1/QL1GAWhAZgIoHcYA0A5iIAoGpA8IehUZS7//7/6/////3piC
1218
+ mopmXHJvVVVVVVVVVVVVVVVV//1+b/y///F//r/3WpYzDzTUrjAEAAgwIUHMMHZAiDBegQEwY8FO
1219
+ MHvCnjCZhd8wmVXmPYXqoj6eGIow/QXDMJJCWDBCASEwDsBiN0bPa2OcbDoVJrt9X+nv//o///5v
1220
+ ///////+v/+wuBAqAJFQBFCAMQwGcAOMBqAQTAagL0wEUG6MB9FX//tSxP+DyXypGgBj+gFrFWLA
1221
+ Cn8ITKWjMk8hj57N39GezELgmYwTMD/MCeAlDuWDvvzoQDa4xoPAlsE//+jzn///SmIKaiqqqqqm
1222
+ CAAIwBgAPMA9AMDAYAFEwIQCrMCVBIDA4AjcwbcdSMnBTCj65VtEy0kWnMDQB+jAeQOE40/PGFD1
1223
+ 60zktKCxi8In6QI/b/////R//////+ue648AEmAPgAhgGgBGYCAAymAYgWhgBwKaYDEF7GHgjNZt
1224
+ KTnSfYGz+mR1g4hhJwDwY8JUYpT/+1LE/4PKFKsaCf8cAV0VYsEv54ASdfyuTNIYDA2QgEom3R95
1225
+ fRX+e7/+tMQU1FMy45N6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqvfxBcIAHAcAZGABgHBgB4ECYCYB
1226
+ zGBPg2ZgqghQYz6LBmawd2BoGxJsYw4EKG+1ZGX0HmV1nmag5GDIWhQEhUA09Fzu/CKN3//6vzz/
1227
+ esUAAgqAKkAAQLAG5gKwBYYFCAzmCGAVhg8oIGYicC9ma9zMR5ifvubkOWNmIoj/piY4qcYXSDOG
1228
+ B//7UsT/g8v4rxQA/1pBU5YiwF/rgBgEIYB4g4CGEgEkmAIy9C0Hrmv/1f/////UmIKaimZccm9V
1229
+ VVVVVVVVVVVVVVVVVVVVVVVVP////dbInahkBgA4MANSIBqHgLgeBTzBXADUw+8UWMgIR2z4pzx0
1230
+ zYoTKMfoEzzBQQagwJIDJMBZAbjANAEEwBsAiMAEAC1pOqtZ+bRf/////v/9p3VjF1hAAEiMAYEQ
1231
+ BiIQGAEAaohChjCXybs5NSIRPyYVJjLlgsEw6cEgMGqApTA7wGQw//tSxP+DyWS1HAB/fAFJl6MA
1232
+ D/dIJAA7MBbAGgUAyhgBGgjT2cm1/9v///+S/2f7UxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVX8
1233
+ 38ZexVD0EALGAiBmYFQLBgmhMmEIJAYd5VJhaMfGvaOkZhD0CmlGlMpirYA6YMUAkGBSgFJgKQAo
1234
+ YBaAFmALAAxgBIAKXfWJD5z//+n7j7sMcdaBgCgFmA0BEYHIH5g0A0GGaFWZGxmRh7PbnVAqGZkh
1235
+ M8nlCfuRuPxaoYHeGSmAHgrQWAv/+1LE/4PJSLsaAH+8AVqXYsAA/0CxAA3GACgIJgCABAAgBgaA
1236
+ F1CIP7P/+tMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVf+3CWnJpEgA4wAsFwMwsDYYDQfp
1237
+ jwgXG3GmQZShNpimw2yZTSwKH4TEGBjyQ8gYVUEhmC2ghxgaAEaYDqAcDQCqQgBxgBAAaDgAJ1YZ
1238
+ ////+X/////6/dyOw015aqSQYBpg2DBhgdp2LsR1GXBsEk5gvQYmYCGXnHDI+fx2eyR8ZaUHKGEf
1239
+ gv/7UsT/g8mcvRoAB/hBVZejAAD+YJJgegE0YEaAumAsAJBgFABYYAyAJgoAEZen////WmIKaimZ
1240
+ ccm6qqqqqqqqqqqqqqqqqqqq+vz/9//+X//zL//3a0pf1ryxS4xgwARjDIxziXRu0opu+yRhKIZQ
1241
+ YYAO8mFEt0R/YoCmeuoryGFdjl5gwIX8YFUDBmACAVwOA3DAmQBowGoAJFgGOxc/y3T//9vb//QM
1242
+ yAALiANdvA50IDqrwW+CMB1MCYBdDCMRFMzapm/P980hTgDSAcxC//tSxP+DycC7GgB7/AFBF6LA
1243
+ D3+AgMaMDBBLzAZgIwwFYAyMBzAHTAcADwwE0B1HgBt5JfYC//q9yYgpqKZlxyb1VVVVVVVVVVX/
1244
+ l4LTgMoNA2rIDsTzAggJ8wJkEGMDUCDTBIRlAylNPiPhzLYTFyxzUwxUFiMD6AByoBEGA7AYJgc4
1245
+ B0YFMAGGABAAK5n1lU6vf////////+IDgYYIBoRoIpIiATTARAL4wK8F1MFoDNDETSJk3ez4pMbc
1246
+ dYDIkhFkxD8F3MFhCKzAhwtYxGT/+1LE/4PJoL0YAHv8AV6XowAe/4AJ6MDaAywYAbCAAVGQAJVF
1247
+ 0IpB9F3//9f/1JiCmopmXHJuqqqqqqqqqqqqqqqqqqqqqqqqqt/////////BKTwwAGgEAMMAhADj
1248
+ AQgAcwHkAMMDWARzBtQXwxGIwtNn28EzHLCHwxfMSlMFTBrTEYhbQwUQBLEgCYwDwANMAfAAgcAK
1249
+ ojN5BERpnf//rf//X+PwTCENABKmAVABosBXGBIAABgcoAiBgv0wvUHMMesUATsSv8E7YVKpMd4E
1250
+ J//7UsT/g8t8wRIA9/wBPhiiwAp/SDCdQEMwvIIjMCfA6DATgHswCsBGMASAJwCAGKoucvV5r3//
1251
+ //rTEFNRTMuOTeqqqqqqqqqq+r2HsNhALRgAoAwFgDcYAWgKBJmAEAfBgAoPSOiphik5b6Z0ZxEG
1252
+ 7KooJggYGsCgLUwDsAEAQCKDgCISACU4m0iEzW//////7/+3///nRBAN4N4WAAgwAwMA1ABzAVgB
1253
+ gwI8AnMD4AGjB7wHgxZIBkMjJd9DgwO4Y2uIuqMJyCbTBRwOYwKo//tSxP+DyRTFHABT/AlhGeLA
1254
+ Cn34B1MBhAPjANgB0wBkAARhaMsK71n///////7ExBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqq/
1255
+ //uv/////0v//25mE8AKMBRIABEwAwA4MAzAZzAXgKYwJ0EdMEQCOjCCRvsyL8NwNNvN1jSYbkg9
1256
+ 4Dq9NonFgDI7ASAw4EB/MHoAPjBMwDUwMoBAP/VNjFMUkEYGIeqQ/hn/f//9v/Jf/////7///b//
1257
+ /QYgvAKpioAgUACmAJgARgGAAWb/+1LE/4PK2M0aAIPtwVYZ4wAJ/0gEaBEmBFhFpgfwRoYkyGLG
1258
+ Hjl9BrIeAofoLPAmhMiHJhhASIYG6CemAvAYRgH4D2bqYao0BpYsQb///////v//////nAgNBS+y
1259
+ 8gJADzACgBowGMD5MH+CQTAuQdAwBUCJMFSAVDF3yGowx93MP29hFTMFwIAwxICqMEhAXzAjAD45
1260
+ rczqUxRItW4BB3//9Xr//////////v8shq7EGto8GADgH5gIQG6YAkCMGB3gPJgbQCCYCwC9mC3B
1261
+ yP/7UsT/g8kgzRoAR/wBYhnjAAb/EBkF47sYsj1NHOOqrJg4Az8YN8EgmBLgiAJ7iZM8xc5Y4moQ
1262
+ /bdoTEFNRTMuOTeqqqqqqqqq////////n//////eqGMmASgIxgAIDCYAkA6CgCaDgP0wTUCLMLGA
1263
+ 8jJBUTA42H6aONaRJjI2APwwuMEPOyPo1E0DNK3MRLIzwLgcM4Am6gPu//////X3/////+s1BuaB
1264
+ gDoAgBgIwBqBgN4C0BgSYGEBgTwKOBgdYTABg7Q1WBhFSn0BydPp//tSxP+DzSzREAb/XgFameMA
1265
+ r+vAmBkvpFqBkbIdac+QQaxKwbHu+YvOgZRFQYmgaBgMRTWIzt/5Zb///9H///yaYgpqKZlxyb3/
1266
+ 3z2youDgAeBQAwwCEAMAwESCgRcwSYAyMMlBgDLrIMc+4J1gMJfHEjaiKEMf4qYwtUDTM/HJEiET
1267
+ AdATMAgAQtOioqdr8OW///6P//+Vs4STFgAEQACIAANjAJwG0wGYDMMD3BpzDGAyQz7mW2P+XoUT
1268
+ QZyisxEAGGMPyEbDBnQNgwNsBQP/+1LE/YPKxM8YAv9eAUuaYsAf68ABYAOTAKQCAwBAANLNOTGn
1269
+ Fizv////pTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf9///r//7//+T//z///8Bl5ACAG
1270
+ ltDABwAswEABIMCDAiTA1gN4wV8FvMJ8ClDGMQtc1srMlO9o/YjpBUMUx94JhMLGAuzBdQJwwNQB
1271
+ tMCDARDAUACMwCsAEIgBBOxOVr1nV//93+n/d///zbSEq2GIrmAoAsYG4HJgvAwGE2FCYggiBj4j
1272
+ 2v/7UsT/g8rE1xoA/54BdhviwAv3GGjkWSY6QOpn3yoFBjExE2YqiDXGEHAZpgiYDsYFIAimAygE
1273
+ ACAcQwArFQAFI5rNr//////S///6kBrwbuswwLAEwiBQxDDEx2FwzlNE4c+I9oKMxTgswNnU6tT3
1274
+ OscI1loZOMOZDKTAvAaIwCsD7MAMAoDAEwGUwCAA4MAeAChIA3JgAR76//////1/79v/////+bks
1275
+ MkH7BMAIFAIAJBOAYFADA0F8DDmSADmi0AwzIJxMViJozG3k/0/h//tSxP+DyXDfGAB/3gFJG+MA
1276
+ AH34562M8YHJAQE4mBLgkxgLQFCYBKApEAAyTACQYASjQAM5v/////9qYgpqKZlxyb1VVVVVVVX/
1277
+ 1/7qSupI2WIAzAgAjB8GzAYOzwfkDUljTA3ABQwOEHrMWEBUDVP3go+3ZXeM0WHpDBZghswOEDQM
1278
+ BwATQcAjCAALMARACgUAKpxJd/933+f/////z/5f///////u5Vlsic1VwODhuXLHPzCcUBpgboDk
1279
+ YFODCGAACL5iJhlQdC/+MH73JzT/+1LE/4PNFOEUAIfvwU0cIwAPf8BnbxKQYM8E6mBtgbBgHgBW
1280
+ YAmAOGAmAFJgKYAcYCQAOO/J7Br//r///8+mIKaimZccm6qqqtX/////1f/9nPBdIFJYHELgdNsY
1281
+ DIAnmBAAWZgUILgYIEIEmCsHQRzvPrseeAklGboD4RgCQROYAUBdAoDcMDRAEjBJgMIwEUA9DAJZ
1282
+ C1oUHS+uz7v6/X///l/////8v/////1ohq0DDigM4nMA5ANjAXwGowH4CzMDHBajBWBCEwKw86Oh
1283
+ 1//7UsT/g8sA4RYAd/4BVpwjQAt/GKfj5jGK4z8QcGMH9CTTBQwPkwnAJ2MCDBFzBRQFoHALokAd
1284
+ EQAinmyR9I/cs//+z//7UxBq/ofkCCzoGWBgDQA6YBsAdmAlgLRgNgE6YFSCnGCFB6JhBhfscLjQ
1285
+ xHyRN9hnoQtgYbQKLGDNAo5ht4PoYDKAHEwC2RAHJWAGjwAApe4cQu///1N//q///////MRQQNqm
1286
+ AFgBBgDYBAYBAAbmAVgLhgHwFOYCyCxGAlB65iKg+UbV2mYH3zOd//tSxP+DydThGAB3/gGKHOKA
1287
+ Hn/Axn2IMkYjOLpGFigDo0CokQCuPABCv2mO/G6Q/////6kxBTUUzLjk3qqqqqqqqqqqqqqqqqr7
1288
+ ///b0x4CmpaIAAMgAGAKAYmAIAKxgFYEyYC4CUGCGhbJjOQnGaTu+dn0Du65nVoECYioBZGDWgH5
1289
+ gbAAkYD6ABmAlAABgFoAKYAsAEAQACSrfQ//6v9f+r//OCTgpjW1NDADQAswCYAiMBFAPTAbgFQw
1290
+ K0A5MEoB1zHVyJczMw/TMcbuFD7/+1LE/4PK7O0WAFP3AYeeIsAaf4ge5EEzP0MoMSMAPDB3wCcw
1291
+ QAASMCdAETAYgBYwDkAjMAPAGQQADMjqd////9SYgpqKZlxyb9/////////f/5L///9RAALvwyMA
1292
+ AAxgCYA2YBQAYGAkgI5gPgCmYXqIrmIJB1phrILAZBWe2Gs/9xh4KcVKZYSIoGItAB5g2IAmYG4A
1293
+ LGA/gD5gIwBUYAkAQAUAPT0j/Z/////2U////+n75MMQM3JJcQABAFAHzADADAwIsFpMD6AvzCUQ
1294
+ qf/7UsT/g8pU8RgAT/4BUJ3jAAh+4AwHIEFMIsBHzIFUO429P9KO4/j6TL/Q9YxGwB6MGdAZzAyA
1295
+ E4wG0BLMArAOTAEgCIGgBa+AR1Lt////p/tYezKYKaqh0FQEkwA4AcMETBNDAMAPUwFkCkMEHApD
1296
+ CdAXMx89DANrD7fj3M6ZU0JEBJMR0BujBfQPUwMICmMBoAbDAWwFcwDYBMC4BiX7qC3//u/96obx
1297
+ gC4BgFgE0wAEBkMAwAWTAkAGEwQ8BOMJSA0zG+zMwz+GeYP8do+z//tSxP+DyyjxGAA3/EFqnmLA
1298
+ Bv/ATTRk8wpIJ4MDBBBzAqQGMwPoB2MEXBdTBBwFMWAPEL2aP3DlJX160xBTUUzLjk3qqqqqqqr/
1299
+ /X+ouFgBIGgE4qANBgDUYEAAaGB8gT5hBAKwYxuMdGMvB1B897CmZp6QimFJgYRgM4KuYROA4mDF
1300
+ AQBgnAFOYBCAUGAFABpaZUsapZdZf//+nL///////////Ln//+5AKACwgBIMA3ADDAHwGowBMDRM
1301
+ BsBWDA3QlUwcgTMMZhJATgMuIUz/+1LE/4PMpPMWAKv+AWIeYsAD/1D6e1KNgGFTDIlioQyLIHMM
1302
+ NCC5zBegFQwH8AZMA4ABAMAbgoAULRqBtYlbKP+tMQU1Fqqqqv///6BhIqABAQAHMAWADzAKwA4w
1303
+ EYAVMBzAMjAwgIswW8HeMLeJhTRdIok+9J4WNXtK4TGzwlwwywGpMExAzjAogHMwF8BCMA2AITAG
1304
+ QARJlnypXes////5L////zbcEq2AI/mALACBgHIBeYDAApGBQgQZgigGMYRqCbmOeCWhowc20bDZ
1305
+ 1f/7UsT+g8sw9xYAC/qBSyBjAAB+OHG8bHQxiCgaSYR6CcGCYAUpgWoC4YDcAXmAfgAwkAUDAAEg
1306
+ JYlSpiCmopmXHJvVVVVVVVVV/9/////////+5Q7cUbmWoMAJADzAGgBwwDUApMBuAEzB4wj8wS0X
1307
+ wMotJGjCXT3o0EbzLOTXREzENQyQwgIDZMDrATjAeABUWAfgEAYBYAESdaVS////mJFhcofCF/gF
1308
+ gAgCgMAwGAXBQKYALeQOIxMQNZ6HgNeO1gO2+7zLteiY35hCOMgC//tSxP+DylEDGgAD8cGJIGKA
1309
+ AP5wBCjCRQPswOYCcMB9AaTAUAEwwCoAmMAdADwUACNf9ZMQU1FMy45N1VVVVVVVVVVVVVVVVVX7
1310
+ 5f/n////P////3+3/n/////xjT+sNTmLyg0ASMAKAHxGEnGGVgxxhCwQ2YO6D1GFuhoRihhLmYdi
1311
+ 7JHbJ+LJtvB2EY7WSbmFXhkhgtQKqYDuAtGAaAIJgQoCkYDgATmAkgAMOTgean7e+z9H/8V////6
1312
+ 1HR8DngZCL4GCDkBjk3gYoEwGST/+1LE/4PKrQUaAAPxwV8gowAQfqimByaGGGXgfJlUS3Sdlp/V
1313
+ nYGq0pnOozKYS4FHGCVgrJgcIFWYIMA+GCDgg5gG4AQRAPiebeReWVAt66////////////qUbBqo
1314
+ DBAJAw6JAMbDUDLRpAzysjAwAXswU0R6MKJMwzhAIJc+l95tNGFHjTBwgkowSAC8MKVCpTAdQHow
1315
+ SYBxMAtABgUAaiQAcni28Tmqv//9P//9f//X//y/////////45gDQDBQaAYrBQGHSsAuqzAPASQw
1316
+ JP/7UsT/g8qFBRgAB/qBSKDjQAt/yUIXMFeEujGqxw83BKP/PlXLFzIXR9MxQwOwMYqDoDEBA0Uw
1317
+ LICyBADCYAWAcAAAfEYAQoe37QYVe7f/+1Wv//f//ov//r//1X/+qr//rt58SUBgcBlhYGcbgY3E
1318
+ BAJ0dBBBGDxmAZCPhhv5lCcVN/Innge0x2S6QeYTIA3GJ6BMZhBYKgYI8BmmBXgQBgNgCWYB2AOC
1319
+ wAyjsW1V1O//d/////lkXgYcMDAKOB+AcA5mAuAAQQCZmCHAIZhH//tSxP+DzekJEgCH8cFLIiMA
1320
+ Cv/IYN0Y54HrmMkCuZwlvDQcs4gbGGHByJhDYIMYIYA5mBLgGxgLAAmHAMQQAQF9FDXas7f///9K
1321
+ /////1HR+HCF5BZJAkwAkJAIBgNID6YE4DeGAeiWxjIY7QYzMJ2msWdOpwgqL2ZO+GQmENA2RgU4
1322
+ HqYCQBLGAXgL5gFQB0YA8AIA4AzGgAB7////39WoujnCUQt9ASAwALMABAIDADgGcwHUBQMFOE4z
1323
+ FPAp0wu8KoMPRGuDBuk+M5h4c8P/+1DE/IPLjRUYAFf3QYOi4sAa/5DjvjyzOxwiAxSYD2MIrAnT
1324
+ BNgHwwLkCDMBRAaTAJgEIwAMAZUoEJiCmopmXHJvVVVVVVVV/7f/////0PMHwWNbRMMAHAMzAYAJ
1325
+ 0wGUFAMChAtTAXgCgwGkC5MIICTDI9TGYzdejwPibp5zUqRlUwxAK8MCPBIzAVAIYwFIAoMBvAET
1326
+ AYACYwDUBDTjilvAP////p7///////////56maUwAcA0MALAVTAJAGYwAkA3MBeAHjBEQMkwngFw
1327
+ //tSxPsDzDUXFADT/kFMIuMACf/IMdLIzjCVS/Y/HMnBMGKIKTHnwjswq4HOMFCBfjBCwc0wEsF6
1328
+ MFEAHjABQBEtgpm1hy43LOr/9+yYABBQBUYBIAKmAVAJZgDYEkFASEwFwKmML3GNTUVKQ8+ZaIeM
1329
+ QQIxDJYBEowq4NqMIJFHzDNQF8wNAA1GgG4iARSgAfHgABOtrcQu///0f//l//3//27hYAEMAFAF
1330
+ TAAAAAwA0ATMBUAXDAqQLEwSIEoMITB/zE8gV4z2uG8Po/jqD2j/+1LE/oPKKRcaADf+QWqi4sAI
1331
+ f8km4wyv0fKMSsBzjDQwmwLgW5gC4CoYAgAWmABgCgWAA2jQltpDfTEFNRTMuOTeqqqqqqqqqv+f
1332
+ //kv//v///5wIq4IABQAAKkIBkBQFkwBQCQMA1A9zAdAdwwYsQhMoqQPzJ1Oyc8d+ehNSpD5zF4A
1333
+ owwckEvMDEAojAZwGEwDwA+MApAKTAHABwwAgAGCAANkk/kP93/9R912NuoYYAGAImANAFRgG4Ce
1334
+ YC8BGGBTgm5gZgW8YPoAhmUCHf/7UsT/g8vRHxgAH/yBdKTjAAD/IB5k+rJQfK62ZmbOlsJjHIGU
1335
+ LCSAGCNzAogAQwGMARMA2AHDACgBYKgA6+LvemIKaimZccm96//X//l///8H/78v////3YAZHADJ
1336
+ wEAEGANgCZgGgBUYC2AimA5AaZhZYfKY5UM6mDbAZZiUoJGav1icnx6fqRrtSKYZqYKXGFLhI5gc
1337
+ gJQYD+BVmAwANhgIABgYB2AHgoA0RrB93//rf/q5/////////L//////+X5a+rRklxQAOBIA2MAv
1338
+ //tSxP+DykUnGAAD88FqpSLAAP/IhhNIQwYCsDamAXgdhgxYD0YjoHImWCu9x6I7xsffpJKGjTBd
1339
+ xifITWYQACzGCXghZgVoFiYEYA9GAqgLJgBgBohRLwiz//oVb/////////6jMmAv8AQAigYCAAdA
1340
+ YCyAYgoBMgkBGgYEwDBAYPuHXgZH0QWgYMawzgf7xQZAaycXpAYYkEtgYL+AHmL2ua7eh7KLGJA+
1341
+ YbCBbVYzu2sbWPqq//+/////////1///4dABgAoACAUAeAYBSAD/+1LE/4PMBSkWAIP6wU4lI0AA
1342
+ fnhAYAiApAYA2BagYEoCsAYNqFcgY0AGQgZ9fB2AYz9/zgdWyrKgYteFIGNqXOamqFZj8kZGG6Bu
1343
+ YGoJxgHAVgEBQRABr4eRvpC///8Rqv///X///8BITTAAQBAwBYAdMA2ANzATwEowHQBzMC/A1DBW
1344
+ Agkwq8fIMgDDJTJQel4zAgGKM4hMszCNwusxHIH3MFRA+jAoAIkwF8BQMA2ALTAFwA5HFlSmrjWV
1345
+ ////////5L/////5f////////v/7UsT/g81pKRQAB/PBjCWiwAD+6P///oGeoNAwABMAOABzAIQA
1346
+ QwDoAJMBfAGjAoAFMwSUEUMKKE8TFX2UY58/4IOCvaiDF8hJkxn8KzMHmBZjAxwMcwGQB6MA7ATz
1347
+ AKADQwB8AjMAPACQgAMXvOf/Tf////////1nyvDDO0iDACQAMwE4BmMEzDdzD1QxUwFUxuNUsqpz
1348
+ 86n3IxbInmMm+EADCBQakwMQDMMBtAdTASAEgwDUAzMAbAFwEAOJJwJ3Vf//V/////9//////9RN
1349
+ //tSxPYDyyk5GABfnMGbpyLAC/rwjKETFIAEgBAwFASAwQgtAwiBsAw9jNAxLMIA5yzMAxcixMOo
1350
+ A6TOyYgw+NGXUPwQkxjSnBHQxJULZMGYBhDA5wPEwKYCqMBqAXjAWQC0wCoAKDAAev3q////////
1351
+ ////rOHTxExSgYLAwcHgNGwQDKMjA4odANsjQwDUGAMGLEEzIyBpkxjlDFP4+guDR8DOYxrACTMK
1352
+ nAwTBRgNowI4C+MBJAqR0CMMBqADAUAPwVM3CbvoAF2++////f3/+1LE84PLcTsYAAPzwcCnYsAQ
1353
+ /nhAtdGVhZkWs6fsisMW9Thn9cy////pEqOYLjIQS0BYBQGBcHoGJ4DQGmGjgHUPgoGoE4IGYEVI
1354
+ GCYFQGA4AQGDEFoGAYFwUAQKkSJ88XUAAAAbb/4AAf//+ykeQlvZikIyMhWKES1GSys5R5hdSqAx
1355
+ qfb6f//9ZYJUhwyQiwLAHBYHoGG0NAGP5oYHhC3oH2t9IGp0qoGAUO4GFQNwGC4FYhIGWRZQ5peN
1356
+ FgAXfa////9ftteV2CQQNVe/RP/7UsTrg8oFOxgAA/PBk6fiwAt+8L1IId//////sbE6MqJ6DJQk
1357
+ AYEwTgYAhBAYwxggboMZgYa/EAemWVgYIAEgYpAPgYNQDAHAdCx4QBGkVDAxSf6f////////////
1358
+ ///URgZAmV0TAAI0ANhAB4YB2AFmAzAKRgI4D6Ye+XSmTYGPZpkvSQZYwPpmL6EhBiKwR6YQmB6G
1359
+ CSAQZgV4CEYDMAGgYBbC4AiFwAhQGXf/f///+X/////////t//9f//////KAvhOUbSwAFCEAdAgB
1360
+ //tSxO8CS8FDGABX+wFWKGb0IFvLwYAGA7mAegIhgU4KSYDqHjGP+jHBjrKpMcwz4PHHM8QZxjKG
1361
+ 2YTaKQGFLA6Zgs4GwYGIArjQFOQgFJgCoBEYAYADqxdTUv/////////zhJB0ypVVBoUADwqAdGAE
1362
+ glpg/gEqYQSDpGCyAvZhHwVaYiiUAGTUisBtkfuMcqYpCGcpDwxgRIWeYDWCYEIDqVgI5gOgAWPA
1363
+ ZZgHQBFCZHYSAUXfbf//vQQ+3EV2lAQOCxjiSbwmi6pS9r9P0Gr/+1LE8wJLfUM3ooLeWUOpZrRQ
1364
+ W8rn//4zTUi7JZIwBAAzAQAbMCEEYwTA9TA4KmNetpY3hBnzEvEWMU4H4wUwPTAjAfMCoDYEgeiw
1365
+ K8OS+xmAVf/8v/////////n//63xqwsARGAaABJgKIBkYCyBJGAeAg5gEoO4FxBkwuIoONi9rFj/
1366
+ Tzkg66plgMc+DEzEVhM4xm4XaMHEBczABALwKgKYJALhAALkoAMmm09q0H3v//L/////////////
1367
+ ///+/5//8MJhhgAgEAExgAIBcf/7UsT6g8uVTRgAK/eBmCniwBb+uIAWA1mAiAXBgSYJyYJcEgGG
1368
+ ZiBZmZCfyb0l0Nnl5YgxybZvmYq2PjGDrBepgVoJsYEsBZmAzgNhgHwCCYA6ANF4V3Iasmnf/rX/
1369
+ //rugqu3BPswBAAIMAtAITATAD4wH0BlMDCAijBEQb4xKotNMVyJizd3fU46RRbmM7qG3jB1wwMR
1370
+ gvxgDQG6YAOBEEICiYAUATAoAgKACdFmD///f//l//////5f/////X////////9Ur/MRSFLdAgAH
1371
+ //tSxPcCSyVTGAAf/oloKqZ0UHvTMAFAFDAHgBswH0ENMJNCQTErSHwyW0iYMCiQvDk/YYI/yoqe
1372
+ MLgLZDKbBBgwp8JHMD+BVjAlQNkwHgCOMBWAQDATQBUDAIiXYn3q/////////8////90EGvs05bp
1373
+ QADkwBIYBiAJGBEAQRg/4ZMYTuBMmD1AiJggwc+Yc8PoGuK1CB+FJsMeJZAHGaOBT5izIQaYRICt
1374
+ GCXgg5gVYFiYEQBCGAjgNYVAKAwAIldSr//////epuAFjGAQALr/+1LE+wPL0V8WAIP+gaAr4sAQ
1375
+ fnhgHAC8YDOAnjQF4IQKkwOAGsMLHDITKdDus0wKefPsip2DWnD+gyZwHeMNVCCzBgQcUwSwJaMF
1376
+ UApTAxQCcwCQAWMABAA0JCw7OH8l9h/V6df//r/////////uoEgAADABQCEDAHADQDAFwA8DAJAD
1377
+ QDAoQLMDBTAVQDCqQjkDHFhD0DOn48oDxE1okD4dKzwDWThXI4nqEDbkNMMZsaQwgQdCYNoWBtIg
1378
+ Nh4BRAewN4KFn/R/1//////////7UsT1g8phXxgAA/XBqavigBD+uP///+CEtwoADIhhAAgYBuAU
1379
+ mA3ALRgYIFKYK8CPGGFgqZkhhvWZ6c7an36Hyxl1gusZXCH8mC+grhgsgHWYGOBIGA7ALJgI4BgY
1380
+ BEAHjQAEvFIpltrv/l/////8v/////7//zn//////////9drCg63CUADMAIAIjAKQEUwEoBuMB5A
1381
+ pzAsgLowWkFkMkQHLDQZ5QY7mDwTOVpEnjDDytMyHMGBMLgBDjBVwJ0wMYBoMCBATzAVAEYwCYAq
1382
+ //tSxPSDzHFlFgAH/ol2LeMAAH64MATAD0HIf2gC7ba////Rbampt0u6pUEr6u9GqasGET/6f//r
1383
+ SSNTYnR3BIBoAQOwMGghQMTQeQMCBbQNsl3QPqzAANrqCQMGA4gMOwCQcEsCwDAurEJxyCylAAAA
1384
+ G2/+wAH///odE9Aot+gJQzkEhd0NRYVxTqwkMzHUMu8me+rqrRff0W///////////qTMBjxHAGZT
1385
+ ALlQwIEALjQYpi0lyGle78at7mJpMk9mGWCwNBeGA6AKCQByAAb/+1LE8gPMhW8UAF/ewXeuIwAQ
1386
+ frgvKGAD0lV21/////3k6hy+Rmrd7s6H300r6hr////1ECE8hqQciDYyAoCoDCAB8DFaUoDHOPcD
1387
+ Dj7gDa7EkDPWIQDIIHADCkGYDBWJ8DEmDEFgKi4yIE+aG47/////////////6sXwJFATwDh8wDwA
1388
+ tMBnALDArgDswTsCSMKeCqTFvT0Q2HWa8PkJEJzcYDlox1QzeMWuC+TA2AH4wGABNMB1ATDARgC8
1389
+ wCcAWMAOAAVRN1Z1Dtr/////7//7UsTvAk21cRYAB/eBSS4m9CBb0v//////////////8rXYXzHg
1390
+ AUUAFTACgEAwDUBzMBmAvDAtQUEwVwJgMNvECzKOFuM4WDiXNz3wLzgUUwsw9USYMKwBPzBSwIYw
1391
+ LgBDMBtAGAgB5BQBeIQANHZrNMrf4AAD/////1LJ3RlpLBgcqoQn/1XlENsoCoBpgHgJgkH0w9BL
1392
+ TCRAhMUtY4xmywTEzBoMKQCwwHwCwUAAmGux/Ifsd///////+n////0/5MIUBpW5BkhADCoARlQB
1393
+ //tSxO0DTP1zN6FT3tlQr2aMIFvTsMAUAmzA4gYow4kKUMHaB6zC9BBUxV9ECNwXrnD/lS3Y6cJq
1394
+ 2MggFtzFgwPUwhwDmMELAxzAgQJswFYCCMAZAbTAHwBQIACI/c3V///////////r//u5K3QSuMA6
1395
+ AfzATAHowI0BVMCMACzAGgPEwPAIyMNtDpzM9FHk3TLOTPzsysDbZk+QzdwS+MPvC7TCAwfMwlAM
1396
+ IMDQBgQ4H+AwFQGAG4kAGIVqaORG6n//+rIMgCIiAIgsALgIBhP/+1LE7QPLoYMYAE/+wYmwYwAQ
1397
+ fvAB1AFTA7gFgwgEBfMVaFwTIi21462tXCP4ilJDXzDqIx/0IZMPbCdzBvwgIWBkzAIQC4wAgAZB
1398
+ IAQja2CEQNO9AAAAAgu1AAH////L//1UBcxUvsREBNCAQt3bsbev///+qeWSJ4kywsAMYAYDZgMA
1399
+ gGCmEyYpQFBm3r+G++6abNbCJnNiDGG8DYYCIGIoAgSgArYbu+ksn73f/r//////////////l///
1400
+ ////////////mGlpUM7SEMATAP/7UsTrA8h5gzphA90RkbFiwAV/2FTAMgDIwFcBVMCIAdjAyQDA
1401
+ wxYNyMIrBvzMuFbE1M2O2P21V5Dr+nGIyjIThMXRBYTCKgPgwRUClMCmAdjAcQGEwDkA7MAiAGgE
1402
+ ADuJ3gAAIBR/9qAB//b/v/orXx5zAKyQ6HQkiMX5kJeDmazgddf//////////////////712xL4c
1403
+ Ze3hgSgaGAICiYFgBJgKgwmLwSyZmy5ZvUKfGQ8OYY0QahgNgljACxeda6tDF3E5bqP////4jP7+
1404
+ //tSxPSDzCWTFgCD/sE/sqLAAH74eFmw+Pn////////1dmCywwASKADKzlYAhgbgBmGEEmY3KSxu
1405
+ 9uUG4gQSZC4UBi/BrGBKB6AgMzBEAoMDEFkWBSbWBp2+Qi////////8/////////////////////
1406
+ 1vjNTAEQAIwDQArMBZATDAfwKAwIgEHMChB4jAhBE0w2QkuNglplD+we5I+ShbONAkNZDK7Rs0xq
1407
+ MMLMA+AfxIBpMANAFB0ADT0YG1iHJHt9oABFypo2a+LjHPwy2Dr/+1LE+gPLMZUxoQPe0cGyosAQ
1408
+ /vh1xH9VdTynEF4s19/f/V///////////////9yqQYWcJCGGCEBoFAXAYCRGgYvh9AblbIAfZ2jg
1409
+ ez7UgbawugYUhIAYBgagAgQAQAEOSGNLB4rHqgAABABdtQAB//8v//tqbvb1h3VnJlN00Rq3///9
1410
+ aCZgQMUAGRwbAAbZgYGgDAYZw4gaCljgZtVUAfJ+VAfvKTAbDiYAYVRAgLgqAcAsMeGPImPJWbf6
1411
+ /////3FRViKoCghg+hkiw1xKLP/7UsTzA0ydlzeih9tRO7OmTBB7o2XzqVk/9b///9aSRqWyWFvD
1412
+ TAMKIfgMIoIQMJgLQMBwtQMnwswMz53gO0HNQPlsuwNNoXQMUgVAMEIHQMAwBgsMBsfC5wUmWwAA
1413
+ ABRd9QAB///92/f+913mBISRmNpzkat7f0O////uTIrAb0FioBQAgMA4EgMAwQwmMgDKiPwDBYfg
1414
+ D46ZoDewiADAmOEBQeYGBMGYGBsGAGGQIwNqjcI0sHUP//////////////9h4GAEAcApmAcABZgD
1415
+ //tSxPcDDM2jFAAH98GHtKaMBFqiwDWYAoBsGBAgwpgogXUYgSJYmfDMi5yhnMud0hzJHHxKlBor
1416
+ Y52YMoEpGC9gXhgT4CgYC8AnmAWgFxgCgAuYACABVQAAAALv9oAB////qy669jXVQ8YOqjK6Hd9a
1417
+ MEUvWm+3Sv//////////////////6zhiVR7E+BsYIgIAFBOAwzDfAxKKWA23hCA+bivAwmArObv0
1418
+ waTjBgZAoCS9a1M2p2+ALttt///+R6FH1TXZHZWz+762v4ahXtL/+1LE8INKiac1oQLe0XM1JoxQ
1419
+ W9rchVP////WgmgRcXIILhaAIOAwdAwAwUhPAyKAtA0TShA95fFA2Z0yA4wHeAw8jtAwsgsAGCKC
1420
+ gChBgxg6SaPKAAAAA3/+wAH///+uDYwi/BCEYfWimZXrPFttczyfz/7L0Omv////////////////
1421
+ +ikiXiKheoEwyAUUQMLgoDCZEBC3zHAJ3M75b0x2EsDN0G0MCwHMMCCCAGEBCHVH4uhX0BRt/tQA
1422
+ P//9PtoyCJLxMPAKBY9iqosRjv/7UsT2A8txsTejgt7RarXiwAB++EExUb7e6VX7u3f3q6m/////
1423
+ /////////////okFELBjULQgMZAOFzAxBgMGAZMyPiRTOkffNRp3g1UC0DCwBRMFwHAwpAdAECKB
1424
+ QCGiwFW760ADWzVzkqag4x7qPB48SJea92fVFbb/6Lb//////////////////1lIhoywlINtAYAE
1425
+ BgSAGBg/CIBiYMuBm+GmBng5aB4A2YB4nY2Bk5IcAQAoBoG4LAIDtgUD//YAH//8v/6KpUULA70U
1426
+ //tSxPiCTCW3N6LbnxFdNya0IFvae7Mp2E1cTHuJxwoP3W8mMQvf2886bmaf////////////////
1427
+ /KDMoKQIHHWoiODgFTBHAmMLwTExLAlTCXVENm1pk0cyywMU8YOQDRgOgDlYASoAAACAb/AAAf//
1428
+ 6f+6tqxDD2RTgjJGGHe50d09zf////+7LMCHizBAcAQBANQ5gYuA1gYWQmAYqycAYSUAgatmAAfU
1429
+ bAgba1HgZpQ8gYVAfAYCQJgEAAAAgut/////X/T5Kc7PyeXr/CP/+1LE+gIMdb07oVffEZs3prRZ
1430
+ ++L//////1LMCHg2FAiAwB4Bw/QLFwMGwEAMaYxgMnTuQOxy+wP2ZjwMkwswMxJCQMAYKgCABgYS
1431
+ QHgYQgpAwCn/////////f///////////969L8wBQACBwDuYCgANmAaASJgCQI8YE+EBmDZB8Ri/4
1432
+ iyadtHZnrHfvZkfvS0eGo0kGUrkLBjygEIYMCBNFYFYLa//////62OWgWaevZEUm4sLHHv/77v//
1433
+ +NNGXZa0sKgmAAB5gIgkEIj5k//7UsTyggt9vTRgHtVRjTfm9FV74hCamRoxmb+6BphshQmLyL6Y
1434
+ QILRgeAJgYC4rACTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVG2sAAf/EVTCgjrq1++faZlo3mUvu
1435
+ HCH//Xb///////////////////qoF8igy4hQAkA4WcAwEg1AxYB3AxlItA2+R1A0UTOA2HIKAzID
1436
+ iAwGA5AwGgCC6kWUf/////2nv+7P6IqD0R9/////xyqzUAhcBgDAnGA4AuYB4CBgRgZGCcGuYLQ2
1437
+ //tSxPCCStHDN6EC3RFFuWa0EFvahnspxGAc6GaXJdJkzjTmEaBwAgcAAAomIKaimZccm6qqqqqq
1438
+ qqqqqqqqqqqqqqqqqqqqqqo///9//8v/z//+r//////5f/r///1/+///////////6/v/ukdowAcA
1439
+ CMAuAOTAWwHAwJICRMDgA/TBKQY4wdQMfML7I2jF/T685eDb9OZU/OjSrYac0okKmM8TN4bLR///
1440
+ //zEBtv+t6LMovZX+//6zhZJocQooZUKANAUB8BhaC2BinO0BtX/+1LE+oNKJcsUAAf/ASC6JoxQ
1441
+ e+bpMB57h0B8RemBpjRqDC/piCmopmXHJvVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRbW
1442
+ AAP/////5nSn0Jn0cXXct6at///9aDqJsZQQnDEAgkBg4BcBgXFyBlsFCBnwi2B14KaB8rgKBopQ
1443
+ qDDe27CAAOn5V/vZ95SADPS1P/+2jpauhK/////////////////////6aBfIgF6wMEgLwBAKA4BQ
1444
+ BAGAMPILgMmCywOGT0QNrLmAN//7UsT/g0sJ0zxgDtbxF7rmzCB7ruyjAYPhMQU1FMy45N1VVVVV
1445
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVt1AAA/////t9vY8pER4J7+FZP///
1446
+ 9AkhcIlILPALANAeDYDAqJcDK4cUDQk5UDrsLIDb+u8ApdYGNkaoAEFsf////P/+RBAE/uv+X3/z
1447
+ ///6zAvniVEcBY2BgCAYBgdBOBhuA8BlZRwBs5kIB6XckB8xniBspUKmIKaimZccm6qqqqqqqqqq
1448
+ //tSxP+DS5nXEgCH+cDmu2bMIFuuqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
1449
+ qqqqqqqqqqqqqqqqqqqqqqoAAAACi2gAAf///6qn/exTKyHOerKmZNxL4t////Wg5wgYrQMvg3UA
1450
+ OAGBg0BgBg9HyBn4L2BmMf2BvSkAB9h4eBz7cCDD7y2j////+v6FDDP1ajzM1GFF8xn////qMygQ
1451
+ 8WYDUD4GEoGIGBsIQCwFQMGwGQMZpQgME6SQN1QUwPyJPExBTUX/+1LE/4MHxd82YQLfMTa8Z0wB
1452
+ Wq4zLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqtmv
1453
+ XIj5Al9F/4TP9mF5++dGFXh3rRcqNO9q0S1pSUSttPqyz//TMi0Gfb+6H6UT9mdW2R/2eRU7Jft6
1454
+ mtXRSqa3dqlukUSkL0QaAgBeAwIUB1AwOwBIAwQ0BoAwKsG8AwMkOHAwyoa4Ayr0fNA4rbonFt22
1455
+ 0hAEjf5T5vCmlin1uPjkp9HPGv/7UsT/gkd16TphAt1w7j1m9BBb5giLcJZg3JP1+cobc1rShDmv
1456
+ b6ExBTUUzLjk3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAAAFt220iADeR9bPYb32ztEyGYw4
1457
+ FRKVQT1o6JTTWrJtASwRN8aDh6Kq9snlvh+ZbyHYKDBSXfMHPYuLxy9XBn138zul+ahr2gkq/ckS
1458
+ AA8m++1+5jDLouxb19ezJmpKofnZ2fJSCWipECBmcoHQNtC5pxNCUa3F6cqISXOfXxUjCgERWegS
1459
+ //tSxP+DSN3xNaEC3XDwviaMIFuuEkRMtbSGnnSoipiH1hQ41XS76c2n+zpiCmopmXHJvVVVVVVV
1460
+ VVVVVVVVVVVVVVVVVVVVVVUW1gAD//+hrZTPQZ1WUq6edMWdDSr7K7Ir////////////////////
1461
+ /////pppoIIIIIIIIJ0C4TBDB2hogaSDQBIEgXAYFgRgYTxNAYPkBgbgK6gepvNgdt1UAbqk1AZy
1462
+ RFh6IGAYFBcDkwuHDFYlMZsghOFwRmHgAAIAAAACASEYkCQAAAD/+1LE/4IOIfEIAIr/AKMSprQA
1463
+ oZ4AADCPl9i+xQ//6vm7MF7/7qRxLFF9Zv/0E4Lth7NXTahv//YaKJdMDbFy9pBVv//+NOOtyva1
1464
+ rqDFk///7F7sCuUUSG7gvZIL2RhetX////mXK5it65alUdTxVMLK1KVQtSdVKSOVU/////8yk6iU
1465
+ ipSMjlZiToWdQbwBkQMW87i+o0mRPUaOYfJ4h/COm0ApAwSk7FRRTEFNRTMuOTdVVVVVVVVVVVVV
1466
+ VVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/gAkg4S2gJQ35Upzi6CYmn1VVVVVVVVVVVVVVVVVVVVVV
1467
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTdVVVVVVVVVVVVVVVVV
1468
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1469
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1470
+ //tSxP+AD2ojNHQLADqKL2C3BPAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1471
+ VVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1472
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1473
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+1LEzoPAAAGkHAAAIAAANIAA
1474
+ AARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1475
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1476
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1477
+ VVVVVVVVVVVVVVVVVVVVVVVVVf/7UsT/g8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVV
1478
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1479
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1480
+ VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
1481
+
1482
+
1483
+ --------_7356174603947QWEORfsdEYfi_MULTIPART_MIXED_--
1484
+
1485
+ ";
test/data/multiple images with signature.var DELETED
@@ -1,129 +0,0 @@
1
- s:7438:"Delivered-To: postie-test@devzing.com
2
- Received: by 10.220.23.143 with SMTP id r15csp1131186vcb;
3
- Thu, 29 Nov 2012 12:58:38 -0800 (PST)
4
- Received: by 10.50.159.170 with SMTP id xd10mr23905932igb.44.1354222718591;
5
- Thu, 29 Nov 2012 12:58:38 -0800 (PST)
6
- Return-Path: <wayne@allens-home.com>
7
- Received: from mail-ia0-f170.google.com (mail-ia0-f170.google.com [209.85.210.170])
8
- by mx.google.com with ESMTPS id t3si7237960igb.38.2012.11.29.12.58.38
9
- (version=TLSv1/SSLv3 cipher=OTHER);
10
- Thu, 29 Nov 2012 12:58:38 -0800 (PST)
11
- Received-SPF: neutral (google.com: 209.85.210.170 is neither permitted nor denied by best guess record for domain of wayne@allens-home.com) client-ip=209.85.210.170;
12
- Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.210.170 is neither permitted nor denied by best guess record for domain of wayne@allens-home.com) smtp.mail=wayne@allens-home.com
13
- Received: by mail-ia0-f170.google.com with SMTP id x24so10270378iak.15
14
- for <postie-test@devzing.com>; Thu, 29 Nov 2012 12:58:38 -0800 (PST)
15
- X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
16
- d=google.com; s=20120113;
17
- h=mime-version:date:message-id:subject:from:to:content-type
18
- :x-gm-message-state;
19
- bh=6dBv9dZdJI0ynqidMvwWLNiTUsGAqGbPYVosbIVZXBI=;
20
- b=hZ6gFmlNIuYfaQ/iFDqO73VAEBTMjE6uvUs/fxNjHXF1n/ifBkv4DmzoVssKVXGRz/
21
- 4wNNqgSz9g1CPz4kderoBieZe/tPTBNbg/TouZfADr5s+JirCpkz9QvwRjk1QS3J4IQJ
22
- aDq1bcJrGASTKtUY5ug5tHJrIMetGC4TKbVdOYa8NswUh8kXEU4v3nFe2WDJbNwFY/Bb
23
- LZTDxFM1ppIcAOwI8f2jmrwD84K8E8B6AslHJXK1ytNkfsaYrICXjiuwg3Pgg1uD0Wqu
24
- bT0EgwNGsR8Z/NJFLcFsP5szfzy5t/S5tV07fW0r/rstWwWi++2xXLgOZtyLYaLw/Mwo
25
- VSqA==
26
- MIME-Version: 1.0
27
- Received: by 10.50.33.174 with SMTP id s14mr24109385igi.11.1354222718303; Thu,
28
- 29 Nov 2012 12:58:38 -0800 (PST)
29
- Received: by 10.231.82.14 with HTTP; Thu, 29 Nov 2012 12:58:38 -0800 (PST)
30
- Date: Thu, 29 Nov 2012 12:58:38 -0800
31
- Message-ID: <CACOA_7Zqe1DMw-Ee8bf8xQGy8KhLgi2+N3uVkVbygKe5BkzEmw@mail.gmail.com>
32
- Subject: multiple image test w/ sig
33
- From: Wayne Allen <wayne@allens-home.com>
34
- To: postie-test@devzing.com
35
- Content-Type: multipart/related; boundary=f46d04446969123c9704cfa88c23
36
- X-Gm-Message-State: ALoCoQncCKsaqxhX2Y2BNCLN/uEdbDVWzQ5tOHrKJLi/AoLL0RthL38BzLECwtgJ3umoxCWiTJf3
37
-
38
- --f46d04446969123c9704cfa88c23
39
- Content-Type: multipart/alternative; boundary=f46d04446969123c9404cfa88c22
40
-
41
- --f46d04446969123c9404cfa88c22
42
- Content-Type: text/plain; charset=ISO-8859-1
43
-
44
- line 1
45
-
46
- [image: Inline image 1]
47
-
48
- line 2
49
-
50
- [image: Inline image 2]
51
-
52
- line 3
53
-
54
- --
55
- sig
56
-
57
- --f46d04446969123c9404cfa88c22
58
- Content-Type: text/html; charset=ISO-8859-1
59
-
60
- line 1<div><br></div><div><img src="cid:ii_13b4df668499b613" alt="Inline image 1"><br></div><div><br></div><div>line 2</div><div><br></div><div><img src="cid:ii_13b4df686fcdac8d" alt="Inline image 2"><br></div><div><br></div>
61
- <div>line 3</div><div><br></div><div>--</div><div>sig</div>
62
-
63
- --f46d04446969123c9404cfa88c22--
64
- --f46d04446969123c9704cfa88c23
65
- Content-Type: image/png; name="image.png"
66
- Content-Transfer-Encoding: base64
67
- Content-ID: <ii_13b4df686fcdac8d>
68
- X-Attachment-Id: ii_13b4df686fcdac8d
69
-
70
- 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
- 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
- obXbgqWl9ML2svczzvxnzm13u+WBpJNMZ6Znzvm///uvqzDGsJrD4zx83/bem+lU+nhxwAdVVaEq
73
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ubezHf9e6cLA2ZN0nrk9ZjgrZ0yc5/l9F4L7ScW6dHkRWgQto/CPpUkj8VGRdjVfCe2jU7fpXrDm
83
- UTrPTt7ioaqhrjFM96duDptamwEl1ucLA5AZTmhPAc8jYG7yPxIQqKqFonkR6b+Euk1hhJ55EYmF
84
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
96
- --f46d04446969123c9704cfa88c23
97
- Content-Type: image/png; name="image.png"
98
- Content-Transfer-Encoding: base64
99
- Content-ID: <ii_13b4df668499b613>
100
- X-Attachment-Id: ii_13b4df668499b613
101
-
102
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACvlBMVEX////JSkjYXV3cY2PkbG3q
103
- dHXteHnJSkjgaGjJSkjNUE7cY2PzgIL1goTJSkjWW1vhaGnja2zmb3DncHHqdHXxfX7JSkjJSkjK
104
- TErbYWHuenvJSkjPUlHbYWH2g4X3hYfJSkjJSkjUWFjRVFPZX1/4hYf5h4nja2zuenvJSkjSVlbe
105
- ZWXfZmbrdnfxfX7zf4HJSkjJS0nMTkzXXV3ZX1/mb3Drdnf7iozJSkjJS0nKTErKa2nLTUvLTkzL
106
- VFLLnJvMTkzMT03MVlTMnZzMzMzNT03NUE7NtbXNzc3OUE/OUU/OWVfPUVDPUlDPUlHPcG7PoKDQ
107
- UlLQU1LQU1PQW1rQ0NDRVFPRVFTRurnSVVXSVlbSc3LS0tLTV1fTXl7TpKTUWFjUWVnU1NTVWVnV
108
- WlrVvr7WWlrWW1vXXFzXXV3XqanX19fYXV3YXl7YqajZXl7ZX1/ZwsLZ2dnaYGDaqqrbYWHbYmLb
109
- rKvbra3b29vcYmLcY2Pcamrcra3dY2PdZGTdr6/eZWXeZmbebGzesbHexsbe3t7fZmbfZ2ffbW3g
110
- aGjgbm7gyMjg4ODhaGnhsrLhs7PhtLTiaWriamvitbXitbbi4uLja2zjtLTjy8vj4+PkbG3ktrbk
111
- 5OTlbW7lbm/li4vl5eXmb3DmuLjmubrm5ubncHHnubnn5+focXLocnPo6Ojpc3Tp6enqdHXqdXbq
112
- vr7q6urrdXbrdnfrv7/r6+vsdnfsd3jswMDs7OzteHnteXrtwMHtwcLt7e3ueXruenvu19fu7u7v
113
- e3zvwsLwfH3wfX7ww8Tw8PDxfX7xfn/xxMTyfoDyf4Dy29vy8vLzf4HzgIL0gIL0gYP0x8j03d31
114
- gYP1goT1ycn139/19fX2g4X3hIb34OD39/f4hYf4hoj5h4n5iIr5+fn6iIr7ioz7+/v8/Pz9/f3+
115
- /v5MqGeGAAAAOHRSTlMAEBAQMDAwQEBQUFBQUGBgYGBgYGBgcICAgICPj4+Pj5+vr7+/v7/Pz9/f
116
- 39/f39/v7+/v7+/v7+7kt0cAAAJNSURBVDjLrZO/alRREMa/e8+5uzcxGI3R/FlBEzGKCBZ2YiOC
117
- TQrBOp2Vj+ED6Cv4KJaKKDayooZgEAwmJDG5e/ecOTNzxmITTdROp5mB72OmmN8H/GsVR+aJqe7z
118
- Ag92aaf5m2F++lmn9mVhJmHl69bvhurq07rbcXUBmHCih2tpJLhRm3p215VWWBZLIqJyr0/DIxtO
119
- P6l9VdfeeQdARSVyfLQNAB4A6sdUADDf0RJAVoucbHFPDk64peuls0uXxreyiqkSQmKlm/3tA8Ps
120
- isu4PledmNjImpS6kmISoZsvIlACZS9EPTlf+fLUUiQajhUx0VCI4/nRhpPLyGguj5eFdaotnfQh
121
- psCZoy69Zjigd7FAxpfLHRPuiKtDpEhGSaN83IcD5mahRea1BcfSOt9GDiElIWb+tAMH3DHAoLTa
122
- 8y2lJnI7GAoxE/PmBhywCFhhOfPqOaQmctvsMQspS5p7Aw+QGaA+S/raayITDVpDVpWsAnggWJba
123
- q/O3ZprI1IayDNnE1JICHhiYVLlTudu9ELmlQE1iNc2W7BXgge/dLJZ5eTFEbr9URUMUNUNNhQAP
124
- tMgW+P5Ck1L8vFqdKSgk4i5LzjuAB7YWYXLhWkwpfuwXbnhaEzUiWWx7OHqWnwB2F1wMH15nZRmU
125
- 3Igl0bQ+GBn2pj3Qn/PvXioLM0VRZlHZXT8kauwGAMx8+8lYmQ3AWzpkUmwSQPuLdQOA/vAXtI1N
126
- /pGY/v4x7Meu1Mfk+J5+C05xYfaIvLFpf0avOHtisgYQ97Ybw/+rH9Y+jS6juF2tAAAAAElFTkSu
127
- QmCC
128
- --f46d04446969123c9704cfa88c23--
129
- ";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test/inlineimageTest.php CHANGED
@@ -6,68 +6,13 @@ class postiefunctions2Test extends PHPUnit_Framework_TestCase {
6
 
7
  function process_file($test_file, $config) {
8
 
9
- $post = new stdClass();
10
-
11
  $message = file_get_contents($test_file);
12
  $email = unserialize($message);
13
- $mimeDecodedEmail = DecodeMIMEMail($email);
14
-
15
- extract($config);
16
-
17
- $attachments = array(
18
- "html" => array(), //holds the html for each image
19
- "cids" => array(), //holds the cids for HTML email
20
- "image_files" => array() //holds the files for each image
21
- );
22
-
23
- filter_PreferedText($mimeDecodedEmail, "plain");
24
- $content = GetContent($mimeDecodedEmail, $attachments, 1, "wayne", $config);
25
- $post->subject = GetSubject($mimeDecodedEmail, $content, $config);
26
- DebugEcho("post subject: $content");
27
-
28
- $post->customImages = SpecialMessageParsing($content, $attachments, $config);
29
- DebugEcho("post images: $content");
30
-
31
- $post->post_excerpt = tag_Excerpt($content, $filternewlines, $convertnewline);
32
- DebugEcho("post exerpt: $content");
33
-
34
- $post->postAuthorDetails = getPostAuthorDetails($subject, $content, $mimeDecodedEmail);
35
- DebugEcho("post author: $content");
36
-
37
- $message_date = null;
38
- list($post->post_date, $post->post_date_gmt, $post->delay) = DeterminePostDate($content, $message_date, $time_offset);
39
- $post->message_date = tag_Date($content, $message_date);
40
- DebugEcho("post comment: $content");
41
- DebugEcho("post date: $content");
42
-
43
- filter_ubb2HTML($content);
44
- DebugEcho("post ubb: $content");
45
-
46
- $post->post_categories = tag_categories($subject, $default_post_category);
47
- DebugEcho("post categories: $content");
48
 
49
- $post->post_tags = tag_Tags($content, $default_post_tags);
50
- DebugEcho("post tags: $content");
51
-
52
- $post->comment_status = tag_AllowCommentsOnPost($content);
53
- DebugEcho("post comment: $content");
54
-
55
- if ($filternewlines) {
56
- $content = filter_newlines($content, $convertnewline);
57
- DebugEcho("post filter newlines: $content");
58
- }
59
- $post->post_type = tag_PostType($subject);
60
- DebugEcho("post type: $content");
61
-
62
- if ($converturls) {
63
- $content = filter_Videos($content, $shortcode); //videos first so linkify doesn't mess with them
64
- DebugEcho("post video: $content");
65
-
66
- $content = filter_linkify($content);
67
- DebugEcho("post linkify: $content");
68
- }
69
 
70
- $post->content = $content;
71
  return $post;
72
  }
73
 
@@ -89,85 +34,55 @@ class postiefunctions2Test extends PHPUnit_Framework_TestCase {
89
 
90
  $config = config_GetDefaults();
91
  $config['prefer_text_type'] = 'html';
 
92
 
93
  $post = $this->process_file("data/inline.var", $config);
94
- $this->assertEquals('test<div><br></div><div><img src="http://example.net/wp-content/uploads/filename" alt="Inline image 1"><br></div><div><br></div><div>test</div> ', $post->content);
95
- $this->assertEquals('inline', $post->subject);
96
  }
97
 
98
- function testTagsImg() {
99
 
100
  $config = config_GetDefaults();
101
- $config['start_image_count_at_zero'] = true;
102
- $config['imagetemplate'] = '<a href="{FILELINK}">{FILENAME}</a>';
103
 
104
- $post = $this->process_file("data/only-tags-img.var", $config);
105
- $this->assertEquals('tags test', $post->subject);
106
- $this->assertEquals(2, count($post->post_tags));
107
- $this->assertEquals('test', $post->post_tags[0]);
108
- $this->assertEquals('tag2', $post->post_tags[1]);
109
- $this->assertEquals(' <a href="http://example.net/wp-content/uploads/filename">7b0d965d-b8b0-4654-ac9e-eeef1d8cf571</a><br /> ', $post->content);
110
  }
111
 
112
- function testMultipleImagesWithSig() {
113
-
114
- $this->markTestIncomplete(
115
- 'This test has not been implemented yet.'
116
- );
117
 
 
 
118
 
119
- $message = file_get_contents("data/multiple images with signature.var");
120
- $email = unserialize($message);
121
- $decoded = DecodeMIMEMail($email);
122
-
123
- $partcnt = count($decoded->parts);
124
- $this->assertEquals(3, $partcnt);
125
-
126
- FilterTextParts($decoded, "plain");
127
 
128
- $attachments = array(
129
- "html" => array(), //holds the html for each image
130
- "cids" => array(), //holds the cids for HTML email
131
- "image_files" => array() //holds the files for each image
132
- );
133
 
134
  $config = config_GetDefaults();
135
- $content = GetContent($decoded, $attachments, 1, "wayne", $config);
 
 
 
 
 
 
 
 
136
  }
137
 
138
  function testSig() {
139
-
140
- $message = file_get_contents("data/signature.var");
141
- $email = unserialize($message);
142
- $decoded = DecodeMIMEMail($email);
143
-
144
- $partcnt = count($decoded->parts);
145
- $this->assertEquals(2, $partcnt);
146
-
147
- filter_PreferedText($decoded, "plain");
148
-
149
- $attachments = array(
150
- "html" => array(), //holds the html for each image
151
- "cids" => array(), //holds the cids for HTML email
152
- "image_files" => array() //holds the files for each image
153
- );
154
-
155
  $config = config_GetDefaults();
156
- $filternewlines = $config['filternewlines'];
157
- $convertnewline = $config['convertnewline'];
158
-
159
- $content = GetContent($decoded, $attachments, 1, "wayne", $config);
160
 
161
- $subject = GetSubject($decoded, $content, $config);
162
- $this->assertEquals('signature', $subject);
163
 
164
- $customImages = SpecialMessageParsing($content, $attachments, $config);
165
- $this->assertEquals(null, $customImages);
166
- $this->assertEquals("test content\n\n", $content);
167
-
168
- $post_excerpt = tag_Excerpt($content, $filternewlines, $convertnewline);
169
-
170
- $postAuthorDetails = getPostAuthorDetails($subject, $content, $decoded);
171
  }
172
 
173
  function testQuotedPrintable() {
6
 
7
  function process_file($test_file, $config) {
8
 
 
 
9
  $message = file_get_contents($test_file);
10
  $email = unserialize($message);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ $isreply = false;
13
+ $mimeDecodedEmail = DecodeMIMEMail($email);
14
+ $post = CreatePost('wayne', $mimeDecodedEmail, 1, $isreply, $config);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
 
16
  return $post;
17
  }
18
 
34
 
35
  $config = config_GetDefaults();
36
  $config['prefer_text_type'] = 'html';
37
+ $config['imagetemplate'] = '<a href="{FILELINK}">{FILENAME}</a>';
38
 
39
  $post = $this->process_file("data/inline.var", $config);
40
+ $this->assertEquals('test<div><br></div><div><img src="http://example.net/wp-content/uploads/filename" alt="Inline image 1"><br></div><div><br></div><div>test</div> ', $post['post_content']);
41
+ $this->assertEquals('inline', $post['post_title']);
42
  }
43
 
44
+ function testjapaneseAttachment() {
45
 
46
  $config = config_GetDefaults();
 
 
47
 
48
+ $post = $this->process_file("data/japanese-attachment.var", $config);
49
+ $this->assertEquals('=?ISO-2022-JP?B?UG9zdGllGyRCTVElRiU5JUglYSE8JWsbKEo=?=', $post['post_title']);
50
+ //$this->assertEquals('', $post['post_content']);
 
 
 
51
  }
52
 
53
+ function testIcsAttachement() {
 
 
 
 
54
 
55
+ $config = config_GetDefaults();
56
+ $config['prefer_text_type'] = 'html';
57
 
58
+ $post = $this->process_file("data/ics-attachment.var", $config);
59
+ $this->assertEquals("<div dir='ltr'>sample text<div><br></div></div> <a href='http://example.net/wp-content/uploads/filename'><img src='localhost/postie/icons/silver/default-32.png' alt='default icon' />sample.ics</a> ", $post['post_content']);
60
+ }
 
 
 
 
 
61
 
62
+ function testTagsImg() {
 
 
 
 
63
 
64
  $config = config_GetDefaults();
65
+ $config['start_image_count_at_zero'] = true;
66
+ $config['imagetemplate'] = '<a href="{FILELINK}">{FILENAME}</a>';
67
+
68
+ $post = $this->process_file("data/only-tags-img.var", $config);
69
+ $this->assertEquals('tags test', $post['post_title']);
70
+ $this->assertEquals(2, count($post['tags_input']));
71
+ $this->assertEquals('test', $post['tags_input'][0]);
72
+ $this->assertEquals('tag2', $post['tags_input'][1]);
73
+ $this->assertEquals(' <a href="http://example.net/wp-content/uploads/filename">close_account.png</a><br /> ', $post['post_content']);
74
  }
75
 
76
  function testSig() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  $config = config_GetDefaults();
78
+ $config['prefer_text_type'] = 'plain';
 
 
 
79
 
80
+ $post = $this->process_file("data/signature.var", $config);
81
+ $this->assertEquals('test content ', $post['post_content']);
82
 
83
+ $config['prefer_text_type'] = 'html';
84
+ $post = $this->process_file("data/signature.var", $config);
85
+ $this->assertEquals('test content ', $post['post_content']);
 
 
 
 
86
  }
87
 
88
  function testQuotedPrintable() {
test/postie-functionsTest.php CHANGED
@@ -143,50 +143,88 @@ class postiefunctionsTest extends PHPUnit_Framework_TestCase {
143
  }
144
 
145
  public function testEndFilter() {
 
146
  $c = "test";
147
- $this->assertEquals("test", filter_end($c, "xxx"));
 
148
 
149
- $c = "test xxx";
150
- $this->assertEquals("test ", filter_end($c, "xxx"));
 
151
 
152
- $c = "test xxx test";
153
- $this->assertEquals("test ", filter_end($c, "xxx"));
 
154
 
155
  $c = "tags: Station, Kohnen, Flugzeug\n:end\n21.10.2012";
156
- $this->assertEquals("tags: Station, Kohnen, Flugzeug\n", filter_end($c, ":end"));
 
157
 
158
  $c = "This is a test :end";
159
- $this->assertEquals("This is a test ", filter_end($c, ":end"));
 
160
  }
161
 
162
  public function testFilterNewLines() {
 
 
163
  $c = "test";
164
- $this->assertEquals("test", filter_newlines($c));
165
- $this->assertEquals("test", filter_newlines($c, true));
 
 
 
 
166
 
167
  $c = "test\n";
168
- $this->assertEquals("test ", filter_newlines($c));
169
- $this->assertEquals("test<br />\n", filter_newlines($c, true));
170
 
171
  $c = "test\r\n";
172
- $this->assertEquals("test ", filter_newlines($c));
173
- $this->assertEquals("test<br />\n", filter_newlines($c, true));
174
 
175
  $c = "test\r";
176
- $this->assertEquals("test ", filter_newlines($c));
177
- $this->assertEquals("test<br />\n", filter_newlines($c, true));
178
 
179
  $c = "test\n\n";
180
- $this->assertEquals("test ", filter_newlines($c));
181
- $this->assertEquals("test<br />\n", filter_newlines($c, true));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
  $c = "test\r\n\r\n";
184
- $this->assertEquals("test ", filter_newlines($c));
185
- $this->assertEquals("test<br />\n", filter_newlines($c, true));
186
 
187
  $c = "test\r\n\r\ntest\n\ntest\rtest\r\ntest\ntest";
188
- $this->assertEquals("test test test test test test", filter_newlines($c));
189
- $this->assertEquals("test<br />\ntest<br />\ntest<br />\ntest<br />\ntest<br />\ntest", filter_newlines($c, true));
190
  }
191
 
192
  public function testGetNameFromEmail() {
@@ -327,15 +365,43 @@ class postiefunctionsTest extends PHPUnit_Framework_TestCase {
327
  }
328
 
329
  public function testremove_signature() {
330
- $this->assertEquals("", filter_RemoveSignature("", array()));
331
- $this->assertEquals("test", filter_RemoveSignature("test", array()));
332
- $this->assertEquals("\n", filter_RemoveSignature("", array("--", "- --")));
333
- $this->assertEquals("test\n", filter_RemoveSignature("test", array("--", "- --")));
334
- $this->assertEquals("line 1\nline 2\n", filter_RemoveSignature("line 1\nline 2\n--\nsig line 1\nsig line 2", array("--", "- --")));
335
- $this->assertEquals("line 1\nline 2\n", filter_RemoveSignature("line 1\nline 2\n- --\nsig line 1\nsig line 2", array("--", "- --")));
336
- $this->assertEquals("line 1\nline 2\n", filter_RemoveSignature("line 1\nline 2\n-- \nsig line 1\nsig line 2", array("--", "- --")));
337
- $this->assertEquals("line 1\nline 2\n", filter_RemoveSignature("line 1\nline 2\n --\nsig line 1\nsig line 2", array("--", "- --")));
338
- $this->assertEquals("line 1\nline 2\n", filter_RemoveSignature("line 1\nline 2\n--", array("--", "- --")));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  }
340
 
341
  public function testmore_reccurences() {
@@ -487,11 +553,32 @@ class postiefunctionsTest extends PHPUnit_Framework_TestCase {
487
  $c = "date: 12/31/2013\nstuff";
488
  $this->assertEquals("2013-12-31", tag_Date($c, null));
489
  $this->assertEquals("stuff", $c);
490
-
491
  $c = "date: Dec 31, 2013 14:22";
492
  $this->assertEquals("2013-12-31 14:22:00", tag_Date($c, null));
493
  $this->assertEquals("", $c);
494
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
495
  }
496
 
497
  }
143
  }
144
 
145
  public function testEndFilter() {
146
+ $config = config_GetDefaults();
147
  $c = "test";
148
+ filter_End($c, $config);
149
+ $this->assertEquals("test", $c);
150
 
151
+ $c = "test :end";
152
+ filter_End($c, $config);
153
+ $this->assertEquals("test ", $c);
154
 
155
+ $c = "test :end test";
156
+ filter_End($c, $config);
157
+ $this->assertEquals("test ", $c);
158
 
159
  $c = "tags: Station, Kohnen, Flugzeug\n:end\n21.10.2012";
160
+ filter_End($c, $config);
161
+ $this->assertEquals("tags: Station, Kohnen, Flugzeug\n", $c);
162
 
163
  $c = "This is a test :end";
164
+ filter_End($c, $config);
165
+ $this->assertEquals("This is a test ", $c);
166
  }
167
 
168
  public function testFilterNewLines() {
169
+ $config = config_GetDefaults();
170
+
171
  $c = "test";
172
+ filter_newlines($c, $config);
173
+ $this->assertEquals("test", $c);
174
+
175
+ $c = "test";
176
+ filter_newlines($c, $config);
177
+ $this->assertEquals("test", $c);
178
 
179
  $c = "test\n";
180
+ filter_newlines($c, $config);
181
+ $this->assertEquals("test ", $c);
182
 
183
  $c = "test\r\n";
184
+ filter_newlines($c, $config);
185
+ $this->assertEquals("test ", $c);
186
 
187
  $c = "test\r";
188
+ filter_newlines($c, $config);
189
+ $this->assertEquals("test ", $c);
190
 
191
  $c = "test\n\n";
192
+ filter_newlines($c, $config);
193
+ $this->assertEquals("test ", $c);
194
+
195
+ $c = "test\r\n\r\n";
196
+ filter_newlines($c, $config);
197
+ $this->assertEquals("test ", $c);
198
+
199
+ $c = "test\r\n\r\ntest\n\ntest\rtest\r\ntest\ntest";
200
+ filter_newlines($c, $config);
201
+ $this->assertEquals("test test test test test test", $c);
202
+
203
+ $config['convertnewline'] = true;
204
+
205
+ $c = "test\n";
206
+ filter_newlines($c, $config);
207
+ $this->assertEquals("test<br />\n", $c);
208
+
209
+ $c = "test\n\n";
210
+ filter_newlines($c, $config);
211
+ $this->assertEquals("test<br />\n", $c);
212
+
213
+ $c = "test\r";
214
+ filter_newlines($c, $config);
215
+ $this->assertEquals("test<br />\n", $c);
216
+
217
+ $c = "test\r\n";
218
+ filter_newlines($c, $config);
219
+ $this->assertEquals("test<br />\n", $c);
220
 
221
  $c = "test\r\n\r\n";
222
+ filter_newlines($c, $config);
223
+ $this->assertEquals("test<br />\n<br />\n", $c);
224
 
225
  $c = "test\r\n\r\ntest\n\ntest\rtest\r\ntest\ntest";
226
+ filter_newlines($c, $config);
227
+ $this->assertEquals("test<br />\n<br />\ntest<br />\ntest<br />\ntest<br />\ntest<br />\ntest", $c);
228
  }
229
 
230
  public function testGetNameFromEmail() {
365
  }
366
 
367
  public function testremove_signature() {
368
+ $config = config_GetDefaults();
369
+
370
+ $c = "";
371
+ filter_RemoveSignature($c, $config);
372
+ $this->assertEquals("\n", $c);
373
+
374
+ $c = "test";
375
+ filter_RemoveSignature($c, $config);
376
+ $this->assertEquals("test\n", $c);
377
+
378
+ $c = "";
379
+ filter_RemoveSignature($c, $config);
380
+ $this->assertEquals("\n", $c);
381
+
382
+ $c = "test";
383
+ filter_RemoveSignature($c, $config);
384
+ $this->assertEquals("test\n", $c);
385
+
386
+ $c = "line 1\nline 2\n--\nsig line 1\nsig line 2";
387
+ filter_RemoveSignature($c, $config);
388
+ $this->assertEquals("line 1\nline 2\n", $c);
389
+
390
+ $c = "line 1\nline 2\n---\nsig line 1\nsig line 2";
391
+ filter_RemoveSignature($c, $config);
392
+ $this->assertEquals("line 1\nline 2\n", $c);
393
+
394
+ $c = "line 1\nline 2\n-- \nsig line 1\nsig line 2";
395
+ filter_RemoveSignature($c, $config);
396
+ $this->assertEquals("line 1\nline 2\n", $c);
397
+
398
+ $c = "line 1\nline 2\n --\nsig line 1\nsig line 2";
399
+ filter_RemoveSignature($c, $config);
400
+ $this->assertEquals("line 1\nline 2\n", $c);
401
+
402
+ $c = "line 1\nline 2\n--";
403
+ filter_RemoveSignature($c, $config);
404
+ $this->assertEquals("line 1\nline 2\n", $c);
405
  }
406
 
407
  public function testmore_reccurences() {
553
  $c = "date: 12/31/2013\nstuff";
554
  $this->assertEquals("2013-12-31", tag_Date($c, null));
555
  $this->assertEquals("stuff", $c);
556
+
557
  $c = "date: Dec 31, 2013 14:22";
558
  $this->assertEquals("2013-12-31 14:22:00", tag_Date($c, null));
559
  $this->assertEquals("", $c);
560
+ }
561
+
562
+ function testtag_Excerpt() {
563
+ $c = "";
564
+ $e = tag_Excerpt($c, false, false);
565
+ $this->assertEquals("", $c);
566
+ $this->assertEquals("", $e);
567
+
568
+ $c = ":excerptstart stuff";
569
+ $e = tag_Excerpt($c, false, false);
570
+ $this->assertEquals(":excerptstart stuff", $c);
571
+ $this->assertEquals("", $e);
572
+
573
+ $c = "stuff :excerptend";
574
+ $e = tag_Excerpt($c, false, false);
575
+ $this->assertEquals("stuff :excerptend", $c);
576
+ $this->assertEquals("", $e);
577
+
578
+ $c = ":excerptstart stuff :excerptend";
579
+ $e = tag_Excerpt($c, false, false);
580
+ $this->assertEquals("", $c);
581
+ $this->assertEquals("stuff ", $e);
582
  }
583
 
584
  }
test/wpstub.php CHANGED
@@ -137,4 +137,7 @@ function is_wp_error() {
137
  return false;
138
  }
139
 
 
 
 
140
  ?>
137
  return false;
138
  }
139
 
140
+ function sanitize_title($title){
141
+ return $title;
142
+ }
143
  ?>