From 782f130d275b5462670d46b76848e15f3578a309 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Thu, 9 Oct 2025 21:49:08 +0200 Subject: [PATCH] start working on rspamd page --- .../docs/ispmail-trixie/300-catching-spam.mdx | 744 ++++++++++++++++++ .../images/catching-spam-rspamd-dashboard.png | Bin 0 -> 48399 bytes ...g-dkim-spoofing-dkim-validation-failed.png | Bin 0 -> 16614 bytes ...nt-spoofing-dkim-spoofing-without-dkim.png | Bin 0 -> 15915 bytes 4 files changed, 744 insertions(+) create mode 100644 src/content/docs/ispmail-trixie/300-catching-spam.mdx create mode 100644 src/content/docs/ispmail-trixie/images/catching-spam-rspamd-dashboard.png create mode 100644 src/content/docs/ispmail-trixie/images/prevent-spoofing-dkim-spoofing-dkim-validation-failed.png create mode 100644 src/content/docs/ispmail-trixie/images/prevent-spoofing-dkim-spoofing-without-dkim.png diff --git a/src/content/docs/ispmail-trixie/300-catching-spam.mdx b/src/content/docs/ispmail-trixie/300-catching-spam.mdx new file mode 100644 index 0000000..7880e5f --- /dev/null +++ b/src/content/docs/ispmail-trixie/300-catching-spam.mdx @@ -0,0 +1,744 @@ +--- +title: Catching spam with rspamd +lastUpdated: 2025-10-09 +slug: ispmail-trixie/catching-spam-with-rspamd +sidebar: + order: 300 +--- + +import { Aside } from "@astrojs/starlight/components"; + + + +You have come a long way in this guide and your mail server is already fully functional. Now it’s time to deal with the +dark side: spam. And there will be lots of it. So we need to detect spam emails and filter them out. I found that +[rspamd](https://rspamd.com/) is a well-performing choice for that purpose both in speed and detection. rspamd keeps a +permanent process running on your mail server that listens to connections from Postfix using +the [milter](http://www.postfix.org/MILTER_README.html) (=**m**ail f**ilter**) protocol. Every time an email enters your +system, Postfix will send it to rspamd to have its content checked. rspamd runs a lot of checks on the email and +computes a total score. The higher the score – the more likely it it spam. + +## How free is rspamd? + +rspamd is quite effective against spam thanks to its many kinds of checks that incoming emails run through. Several of +these checks rely on services provided by the rspamd project. There are hosts like email.rspamd.com, uribl.rspamd.com +and maps.rspamd.com that provide information used by the default rspamd installation. That data is not freely available +and there are no public mirrors. + +You are only allowed to use their data under certain conditions described in rspamd’s +[usage policy](https://docs.rspamd.com/other/usage_policy/). Spoiler: heavy or commercial usage will get you blocked. +Your friends-and-family mail server with low volumes of email will probably be fine. + +rspamd is being packaged and shipped by the Debian project. However the rspamd principal developer builds and endorses +his own packages and has a history of getting angry and offensive against anyone using the packages shipped by Debian. I +find that attitude a bit suspicious and rather stay with the Debian packages that have been built by a process that I +trust. + +## Make Postfix use rspamd + +Let’s tell Postfix to send all incoming email through rspamd. Run these commands on the shell: + +``` +postconf smtpd_milters=inet:127.0.0.1:11332 +postconf non_smtpd_milters=inet:127.0.0.1:11332 +TODO: no… postconf milter_mail_macros="i {mail_addr} {client_addr} {client_name} {auth_authen}" +``` + +Postfix will connect to rspamd that is listening to TCP port 11332 on localhost (127.0.0.1) and send the email through +that connection. The _smtpd_milters_ setting defines that connection for emails that came into the system from the +internet via the SMTP protocol. The *non_smtpd_milters* setting is optional – it makes Postfix have all emails checked +that originate from the system itself. Finally the *milter_mail_macros* setting defines several variables that rspamd +expects for better spam detection. rspamd then runs its checks and tells Postfix whether the email should pass or get +rejected. + +## Testing spam detection + +For testing we can use a sample spam email that comes with SpamAssassin. It is called GTUBE (Generic Test +for Unsolicited Bulk Email). It contains a certain artificial pattern that is recognized as spam by SpamAssassin. Do you +know EICAR.COM to test virus scanners? This is the same thing for spam. + +I suggest that you download the file on the server and send it to John: + +```sh +wget http://spamassassin.apache.org/gtube/gtube.txt +sendmail john@example.org < gtube.txt +``` + +Let's see what happened. Check your mail log: + +```sh +journalctl -eu postfix +``` + +You will find something like this at the end: + +``` +postfix/pickup[1384784]: 2B72320126: uid=0 from= +postfix/cleanup[1386519]: 2B72320126: message-id= +postfix/cleanup[1386519]: 2B72320126: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from= to= +postfix/cleanup[1386519]: 2B72320126: to=, relay=none, delay=0.16, delays=0.16/0/0/0, dsn=5.7.1, status=bounced (Gtube pattern) +postfix/cleanup[1386525]: 4F0B720128: message-id=<20251009174553.4F0B720128@mailserver> +postfix/bounce[1386524]: 2B72320126: sender non-delivery notification: 4F0B720128 +postfix/cleanup[1386519]: 2B72320126: removed (discarded) +``` + +**milter-reject** tells that the milter (rspamd) recommended to Postfix to reject the email. It gave the reason +`5.7.1 Gtube pattern`. In mail communication you often find these three digit codes. They are defined in +[RFC 3463](https://tools.ietf.org/html/rfc3463). The first digit is most important: + +- 2 = Success +- 4 = Temporary failure (come back later) +- 5 = Permanent failure (do not try again in this way) + +So `5.7.1` tells us that the result code is a permanent failure in delivery. If you looked up the RFC you would find +that the 7 stands for an issue regarding the security policy. So it’s not a technical failure but instead a +security-relevant component on the system has rejected the email. That’s what rspamd did. It even told us the reason: +`Gtube pattern`. So you see that rspamd knows about the Gtube spam test pattern and reacts as expected. + +Accordingly you won’t see this email in John’s inbox. This is a great advantage of using milters. Imagine Postfix +receiving a spam email and confirm its reception. What should it do when it finds out that it’s unwanted email? +According to the SMTP protocol it must not throw away any emails. Would you create a bounce message telling the sender +that you did not accept the email? That would be a bad idea because the sender address in spam emails is very likely +forged. You would send the bounce to an innocent person thus creating so called *backscatter* and make it even worse. So +the better approach is to check the email while the sending server is still connected to your Postfix. This allows +Postfix to reject the email with a 5.x.x error code and let the other side figure out what to do. + +## Score metrics + +rspamd will however not reject all spam email. It computes a score that tells how likely a certain email is spam. You +can tell it which scores you would accept, flag as spam or make the incoming email get rejected. Rspamd has a large +ruleset that checks incoming emails in various ways and adds to the score. Take a look at the `/etc/rspamd/actions.conf` +file: + +``` +actions { + reject = 15; + add_header = 6; + greylist = 4; +} +``` + +These are the default actions. If rspamd computes a score of at least 15 then the email will get rejected at the +doorstep just like the _Gtube pattern_ in the previous test. Any other score above 6 will add a line "X-Spam: Yes" so +that your mail software can detect them and maybe file the email to a different folder. And any other score above 4 will +trigger _greylisting_ which is a mechanism that temporarily rejects the email with a 4.x.x code and waits if the sending +server will try again. After a waiting time of a few minutes greylisting will accept the email. The idea is to reject +email from systems that do not have a sending queue. Malware like on infected Wind\*ws computers used to try sending an +email just once which triggered greylisting and successfully rejected the spammer. But even malware programmers have +learned and may try again after a few minutes thus circumventing greylisting. Your mileage may vary. The problem with +greylisting is that the recipient has to wait a couple of minutes for the email to be delivered which is often bothering +the users. + +
+ Click here if you rather want to keep spam and sort away + +Why should you bother setting up rspamd but then keep the spam emails? It is not as useless as it sounds. The idea is to +detect spam and deliver it to the recipient's spam folder. That way your users do not have to … + +If you like to change these defaults then create a new file in `/etc/rspamd/local.d/actions.conf` containing your +desired limits: + +``` +reject = 150; +add_header = 6; +greylist = 4; +``` + +This would virtually never reject an email. The other two values are pretty sane defaults. I personally use this setting +all the time so that users can find spam in their _Junk_ folder but don’t have to ask me if the mail server rejected it. + +
+ +Please take a moment to understand how to change rspamd defaults. You can either create files in +`/etc/rspamd/override.d/…` which will replace entire sections; or create files in `/etc/rspamd/local.d/…` which will +change only parts of the configuration. There is a +[helpful page in the rspamd documentation](https://rspamd.com/doc/developers/writing_rules.html) that contains examples. +Whatever you do – never change the /etc/rspamd/\* files directly because a software update will try to replace them. + +Restart rspamd after any configuration changes: + +``` +systemctl restart rspamd +``` + +To check if rspamd has picked up your configuration use this command to see the current configuration: + +``` +rspamadm configdump +``` + +You may test your configuration using + +``` +rspamadm configtest +``` + +Alternatively you may check if all required rspamd processes are running… + +``` +pgrep -a rspam + +141693 rspamd: main process +141694 rspamd: rspamd\_proxy process (localhost:11332) +141695 rspamd: controller process (localhost:11334) +104965 rspamd: normal process (localhost:11333) +104966 rspamd: normal process (localhost:11333) +``` + +## Adding headers + +As you may know an email consists of the headers and the body. Your users will usually only see common header +information like the *subject*, the *sender*, the *recipient* and the *date and time* the email was sent. But there is +way more information like the route the email traveled or extended headers added by the various mail server on the way +to the destination. Such extended headers begin with an "X-". rspamd can add such headers to help you filter out spam. +For that purpose create a new configuration override file at `/etc/rspamd/override.d/milter_headers.conf` with this +content: + +``` +extended_spam_headers = true; +``` + +Again restart rspamd: + +``` +systemctl restart rspamd +``` + +As [documented](https://rspamd.com/doc/modules/milter_headers.html) it will add these headers: + +``` +X-Rspamd-Server: mail +Authentication-Results: dmarc=fail reason="No valid SPF, No valid DKIM" … +X-Rspamd-Queue-Id: C22E55A005B3 +X-Spamd-Result: default: False [11.55 / 15.00] + R_PARTS_DIFFER(0.27)[63.4%] + FROM_NO_DN(0.00)[] + RCVD_COUNT_ZERO(0.00)[0] + R_DKIM_NA(0.00)[] + FUZZY_DENIED(12.00)[1:19305c7fdd:1.00:bin,1:35699594fd:0.91:txt] + RBL_SENDERSCORE(2.00)[55.181.23.94.bl.score.senderscore.com] + ARC_NA(0.00)[] + RCPT_COUNT_ONE(0.00)[1] + RCVD_TLS_ALL(0.00)[] + FROM_EQ_ENVFROM(0.00)[] + R_SPF_SOFTFAIL(0.00)[~all] + BAYES_HAM(-2.71)[98.75%] + TO_MATCH_ENVRCPT_ALL(0.00)[] + MIME_GOOD(-0.10)[multipart/related,multipart/alternative,text/plain] + MID_RHS_MATCH_FROM(0.00)[] + ASN(0.00)[asn:16276, ipnet:94.23.0.0/16, country:FR] + TO_DN_NONE(0.00)[] + DMARC_POLICY_SOFTFAIL(0.10)[Chronopost.fr : No valid SPF, No valid DKIM,none] + SUBJECT_ENDS_EXCLAIM(0.00)[] +X-Spam: Yes +``` + + + +Each of the uppercase symbols like *FROM_HAS_DN* means that a certain detection rule of rspamd was triggered. It does +not necessarily mean something bad about the email. For example _R_SPF_ALLOW_ has a negative score that lowers the total +score because it is something good about the email. There are a several symbols with a 0.00 score. These do not change +the score but show you what rspamd has found. But if you consider certain criteria good or bad then you can define your +own scores for them. + +The last line here is especially interesting because next on our list is… + +## Sending spam to the Junk folder + +Your users will not realize that their spam emails have an added "X-Spam: Yes" header. It is not actively shown in their +mail client. Nor does it move the email out of the inbox into their spam folder. Such emails just appear like normal in +their inbox. So let’s aid them by moving spam to a separate _Junk_ folder beneath their inbox automatically. Dovecot has +support for [Sieve]() filters which are scripts that run +automatically whenever an email comes in. + +John could create a new Sieve filter (e.g. using the Roundcube webmail interface) for himself that would save any emails +to his "Junk" folder if the header line "X-Spam: Yes" was found. This rule would be useful for all your users though so +let’s find a more general solution. + +Dovecot supports _global_ Sieve filters that apply to all users. Edit the file `/etc/dovecot/conf.d/90-sieve.conf`. Look +for the "sieve_after" lines. They are commented out. Add a new line there: + +``` +sieve_after = /etc/dovecot/sieve-after +``` + +And restart Dovecot: + +``` +systemctl restart dovecot +``` + +The "_sieve after_" filters are executed after the users’ filters. John can define his own filter rules. And after that +Dovecot will run any filter rules it finds in files in `/etc/dovecot/sieve-after`. That is just an arbitrary directory +that you create: + +``` +mkdir /etc/dovecot/sieve-after +``` + +And add a new file `/etc/dovecot/sieve-after/spam-to-folder.sieve` reading: + +``` +require ["fileinto"]; + +if header :contains "X-Spam" "Yes" { + fileinto "Junk"; + stop; +} +``` + +The "require" lines include functionality to move emails into certain folders (fileinto) and to create folders if they +don’t exist yet (mailbox). Then if rspamd marked an email as spam it gets moved into the INBOX.Junk folder which just +appears as "Junk" to the user underneath their inbox. + +Dovecot cannot deal with such human-readable files though. So we need to compile it: + +``` +sievec /etc/dovecot/sieve-after/spam-to-folder.sieve +``` + +That generated a machine-readable file /etc/dovecot/sieve-after/spam-to-folder.svbin. + +Now all your users will automatically get spam emails moved to their Junk folder. Nice – isn’t it? + +## About Redis + +Many features in Rspamd use [Redis](https://redis.io/) to persist their data. Let me give you a quick explanation what +Redis is. + +Redis is a kind of database system. It is way more limited than a traditional SQL database because it just stores keys +and values. There aren’t several fields/columns like in SQL. But it is lightning fast the way it works. On my aged +server it handles around 50,000 requests per second. It gets it speed from its simplicity and from keeping the data in +RAM. So it doesn’t access the disk to fetch information. (But it copies its data to disk frequently to prevent data +loss.) People use Redis as a cache or for very fast lookups of simple data structures. And so +[does rspamd](https://rspamd.com/doc/configuration/redis.html). + +You installed the "redis-server" package earlier. And that’s all you needed to do. It started automatically and listens +ton incoming connections on TCP port 6379 on localhost. In Rspamd the Redis backend is enabled by default. You just have +to tell it the IP address of your Redis server. Add a file `/etc/rspamd/override.d/redis.conf` and insert: + +``` +servers = "127.0.0.1"; +``` + +Restart rspamd and you are done. + +``` +systemctl restart rspamd +``` + +Feel free to use Redis for [other lookups](https://rspamd.com/doc/configuration/redis.html), too. + +## Training the spam detection + +One of rspamd’s features is analyzing word patterns using probability theory. That functionality is contained in its +"[statistical module](https://rspamd.com/doc/configuration/statistic.html)". (Yes, the name is pretty misleading.) +Essentially you show rspamd lots of ham (good) and spam (bad) emails and its detection gets better over time. + + + +### (a) Auto-learning + +You can start with an empty training database. This is not as bad as it sounds. rspamd has way more functionality to +determine if an email is ham or spam. Autolearning takes email that are likely ham or spam and uses them to train the +spam filter. The [rspamd documentation](https://rspamd.com/doc/configuration/statistic.html) has further examples how to +fine-tune auto learning. After a few hundred emails the training will contribute towards a better detection rate. + +If you want to use _autolearning_ just create a new file `/etc/rspamd/override.d/classifier-bayes.conf` and make it +contain: + +``` +autolearn = [-5, 10]; +``` + +That will train emails with a spam score of less than -5 as ham (good). And emails with a spam score of more than 10 as +spam (unwanted). Feel free to chose other values. + +### (b) Migrating training data from previous mail server + +Have you used the old SQLite-based training file on the old server? Look for files like /var/lib/rspamd/\*.sqlite on the +old server. In that case please follow these +[simple instructions from the rspamd documentation](https://rspamd.com/doc/faq.html#which-backend-should-i-use-for-statistics) +to convert them to data in Redis. + +If instead you have used Redis already then you just need to copy over the Redis database from the old server. Stop +Redis on the new server. Copy over the /var/lib/redis/dump.rdb from the old server to the new server. Start Redis again. +And restart rspamd. So on the new server run: + +``` +systemctl stop redis +scp root@old-server:/var/lib/redis/dump.rdb /var/lib/redis +systemctl start redis +systemctl restart rspamd +``` + +To check if that worked you can ask Rspamd using "rspamc stat" and look for… + +``` +Statfile: BAYES_SPAM type: redis; length: 0; free blocks: 0; + total blocks: 0; free: 0.00%; learned: 21164; users: 214; languages: 0 +Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0; + total blocks: 0; free: 0.00%; learned: 1411; users: 62; languages: 0 +``` + +### (c) Training from your existing ham and spam emails + +Have you been running a mail server with mailboxes in a _Malidir_ structure before but without rspamd? Then you probably +have a good amount of ham and spam emails. Let’s use those to train rspamd. It is important to train both ham and spam +emails. The *rspamc* command will allow you to feed entire directories/folders of emails to the learning process. An +example to train spam: + +``` +rspamc learn\_spam /var/vmail/example.org/john/Maildir/.Junk/cur +``` + +And this would be an example to train ham from John’s inbox: + +``` +rspamc learn\_ham /var/vmail/example.org/john/Maildir/cur +``` + +Of course the quality of spam detection will depend on how good the source data is. If users put emails in their Junk +folder which are not typical spam they will soil the detection. + +Check the number of emails you learned by running… + +``` +rspamc stat +``` + +Bayes spam checking will not work before it learned at least 200 spam and ham emails. Teaching rspamd fewer emails or +just spam emails will not work. This is defined by the *min_learns* variable defined in /etc/rspamd/statistic.conf. + +In the output you will find lines beginning with "Statfile" like these… + +``` +Statfile: BAYES_SPAM type: redis; length: 0; free blocks: 0; + total blocks: 0; free: 0.00%; learned: 21164; + users: 214; languages: 0 + +Statfile: BAYES_HAM type: redis; length: 0; free blocks: 0; + total blocks: 0; free: 0.00%; learned: 1411; + users: 62; languages: 0 +``` + +This is what you usually start with. The more emails you feed into the training process the better the detection rate +will be. Some emails however may not be long enough or too similar to previously trained emails. So don’t worry if you +are training 1000 emails but just get a count of 500 emails here. + +## Per-user spam training + +rspamd allows you to train the spam detection per user. It would not keep a global training database that applies to all +users. Instead each user gets their own training. + +Advantage: users work differently. Some have subscribed to a sales newsletter and now believe that marking it as spam +gets them unsubscribed. Yes, that’s stupid but can thoroughly confuse the spam detection. Also you might be very +interested in viagr\* product information while others do not. + +Disadvantage: training still requires many ham and spam mails before it has any effect. So unless a user gets 200 +samples of good and evil emails the spam detection cannot work. Many users will not get that many emails so due to the +lack of spam training the detection will not be improved. + +If you decide you want to use per-user spam training then add/edit the file `/etc/rspamd/local.d/classifier-bayes.conf` +and insert: + +``` +users_enabled = true; +``` + +## Autoexpunge + +Andi Olsen pointed out that Dovecot has introduced a [feature](https://wiki.dovecot.org/MailboxSettings) to +automatically delete emails in a folder that reach a certain age. This is especially useful for the "Trash" and "Junk" +folders. To enable this feature just edit the `/etc/dovecot/conf.d/15-mailboxes.conf` file and add the *autoexpunge* +parameter where desired. Example: + +``` +mailbox Junk { + special_use = \Junk + auto = subscribe + autoexpunge = 30d +} +mailbox Trash { + special_use = \Trash + auto = subscribe + autoexpunge = 30d +} +``` + +The "auto = subscribe" makes sure that the "Junk" and "Trash" folders are automatically created for every user. +Otherwise spam emails cannot be moved to the "Junk" folder later. + +## Learning from user actions + +Now we are getting to something really cool. Let’s tell Dovecot that moving emails into the Junk folder teaches rspamd +instantly that the email is spam. And train an email as ham if it is moved out of the Junk folder. We will add triggers +(actually "_sieve scripts_") to the action of moving emails via IMAP. + +The currently recommended way is to use the +"[IMAPSieve](https://doc.dovecot.org/2.3/settings/pigeonhole-ext/imapsieve/)" plugin instead. There is nothing to +install – it comes with the Dovecot packages. We just need to configure it. + +First order of business is enabling the IMAPSieve plugin for the IMAP protocol/service in Dovecot. Edit the +`/etc/dovecot/conf.d/20-imap.conf` file and look for the line reading "mail_plugins". Turn it into: + +``` +mail_plugins = $mail_plugins quota imap_sieve +``` + +We also need to edit Dovecot’s Sieve configuration to enable two plugins that are required for our task. Sieve is a +scripting language that automates things in conjunction with emails and folders. Edit the +file `/etc/dovecot/conf.d/90-sieve.conf` and put these lines into the `plugin {…}` section: + +``` +# From elsewhere to Junk folder +imapsieve_mailbox1_name = Junk +imapsieve_mailbox1_causes = COPY +imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve + +# From Junk folder to elsewhere +imapsieve_mailbox2_name = * +imapsieve_mailbox2_from = Junk +imapsieve_mailbox2_causes = COPY +imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve + +sieve_pipe_bin_dir = /etc/dovecot/sieve +sieve_global_extensions = +vnd.dovecot.pipe +sieve_plugins = sieve_imapsieve sieve_extprograms +``` + +The first rule tells Dovecot to run the Sieve rules as defined in the `/etc/dovecot/sieve/learn-spam.sieve` file +whenever an email is moved into a user’s "Junk" folder. We will create that Sieve script in a minute. + +The second rule sets the other way. Whenever an email is moved from the "Junk" folder to any (\*) folder then +the `/etc/dovecot/sieve/learn-ham.sieve` Sieve script is called. + +The "sieve_pipe_bin_dir" setting defines where executable scripts are allowed to reside. We will put our simple learning +scripts there. And finally the "sieve_global_extensions" setting enables the pipe plugin that allows sending email to +external commands. + +Next up let’s create the Sieve scripts that we told Dovecot about. Create a new directory /etc/dovecot/sieve to put our +new files in: + +``` +mkdir /etc/dovecot/sieve +``` + +Then create the file `/etc/dovecot/sieve/learn-spam.sieve` and let it contain: + +``` +require ["vnd.dovecot.pipe", "copy", "imapsieve"]; +pipe :copy "rspamd-learn-spam.sh"; +``` + +Let’s do the same for `/etc/dovecot/sieve/learn-ham.sieve` + +``` +require ["vnd.dovecot.pipe", "copy", "imapsieve", "variables"]; +if string "${mailbox}" "Trash" { + stop; +} +pipe :copy "rspamd-learn-ham.sh"; +``` + +The above Sieve script avoids training an email as _ham_ if the user moves it to the _Trash_ folder. After all if you +clear your _Junk_ folder you do not want to train your spam as regular emails. + +Restart Dovecot: + +``` +systemctl restart dovecot +``` + +These two scripts need to be compiled – that is turning them into machine-readable code: + +``` +sievec /etc/dovecot/sieve/learn-spam.sieve +sievec /etc/dovecot/sieve/learn-ham.sieve +``` + +This creates two new files "learn-ham.svbin" and "learn-spam.svbin" that look like gibberish inside but are now in a +format that Dovecot’s Sieve plugin can understand. + +Let’s fix the permissions of these files, too, while we are at it: + +``` +chmod u=rw,go= /etc/dovecot/sieve/learn-{spam,ham}.{sieve,svbin} +chown vmail:vmail /etc/dovecot/sieve/learn-{spam,ham}.{sieve,svbin} +``` + +And the last step is to create the simple shell scripts that do the actual spam/ham training. The first file is +`/etc/dovecot/sieve/rspamd-learn-spam.sh` which contains: + +``` +#!/bin/sh +exec /usr/bin/rspamc learn_spam +``` + +That looks simple, doesn’t it? Nothing more is actually needed. The spam email is piped to this script and rspamd learns +it as a spam email and adjusts its spam detection database accordingly. + +The second script teaches ham and is called `/etc/dovecot/sieve/rspamd-learn-ham.sh`. Make it contain: + +``` +#!/bin/sh +exec /usr/bin/rspamc learn_ham +``` + +These two shell scripts must be made executable: + +``` +chmod u=rwx,go= /etc/dovecot/sieve/rspamd-learn-{spam,ham}.sh +chown vmail:vmail /etc/dovecot/sieve/rspamd-learn-{spam,ham}.sh +``` + +I hope you haven’t lost your mind yet. It’s really just a chain of things to happen. Let’s reiterate how this process +works: + +1. a user moves a spam email into their "Junk" folder +2. Dovecot realizes that this triggers the Sieve rule "imapsieve_mailbox1" so it calls the Sieve + script /etc/dovecot/sieve/learn-spam.sieve (in fact the \*.svbin version of the script) +3. Sieve will take the email and send ("pipe") it to the executable rspamd-learn-spam.sh shell script +4. the script in turn runs the email through the "/usr/bin/rspamc learn_spam" command + +This works equally for the other way or learning ham emails of course. + +I am sure you are eager to try it out. However to see that it actually works I suggest you edit +the /etc/dovecot/conf.d/10-logging.conf file and set "mail_debug=yes". That will add a lot more detail to the +/var/log/mail.log file but on a busy server may also lead to headaches. 🙂 + +Restart Dovecot… + +``` +systemctl restart dovecot +``` + +…and watch the /var/log/mail.log file… + +``` +tail -f /var/log/mail.log +``` + +Now open your IMAP client (Thunderbird, Evolution, Roundcube, mutt or whatever you prefer) and drag an email to your +Junk folder. The mail log will show a lot of things that are going on. I tried to compact the output so that you better +understand that it worked: + +``` +imapsieve: Static mailbox rule [1]: mailbox=`Junk' from=`*' causes=(COPY) => before=`file:/etc/dovecot/sieve/learn-spam.sieve' after=(none) +imapsieve: Static mailbox rule [2]: mailbox=`*' from=`Junk' + causes=(COPY) => before=`file:/etc/dovecot/sieve/learn-ham.sieve' + after=(none) + +imapsieve: Matched static mailbox rule [1] + +sieve: file storage: script: Opened script `learn-spam' + from `/etc/dovecot/sieve/learn-spam.sieve' + +sieve: action pipe: running program: rspamd-learn-spam.sh + +program exec:/etc/dovecot/sieve/rspamd-learn-spam.sh: + Pass environment: USER=john@example.org + +program exec:/etc/dovecot/sieve/rspamd-learn-spam.sh: + Pass environment: HOME=/var/vmail/example.org/john + +program exec:/etc/dovecot/sieve/rspamd-learn-spam.sh: + Pass environment: HOST=narnia + +Mailbox Junk: UID 1: Opened mail because: mail stream + +sieve: uid=1: Execute storing into mailbox 'Junk' +``` + +Dovecot finds two Sieve rules: \[1\] and \[2\]. And it finds that rule \[1\] matches your current action and runs it. +That in turn calls the "rspamd-learn-spam.sh" script to train that email as spam. And at the very end the email is +actually moved to the "Junk" folder. + +And if you pull an email out of the "Junk" folder you should see mailbox rule \[2\] be called and the email being +learned as ham. + +Don’t forget to switch off "mail_debug" again or your users’ actions will quickly fill your log file. + +## Logging + +rspamd keeps a verbose log of its actions in /var/log/rspamd/rspamd.log. If a user complains that a certain email got +blocked or at least flagged as spam then take a look at this log. You can match the /var/log/mail.log with it by +comparing the Postfix queue ID. Those are the 12-digit hexadecimal number like "**95CE05A00547**". Those IDs can be +found in the rspamd.log, too: + +``` +<40985d>; task; rspamd_task_write_log: id: , qid: <**95CE05A00547**>, ip: 12.13.51.194, from: <…>, (default: F (no action): [3.40/15.00] [MISSING_MID(2.50){},MISSING_DATE(1.00){},MIME_GOOD(-0.10){text/plain;},ARC_NA(0.00){},ASN(0.00){asn:8220, ipnet:212.123.192.0/18, country:GB;},FROM_EQ_ENVFROM(0.00){},FROM_NO_DN(0.00){},RCPT_COUNT_ONE(0.00){1;},RCVD_COUNT_ZERO(0.00){0;},RCVD_TLS_ALL(0.00){},TO_DN_NONE(0.00){},TO_DOM_EQ_FROM_DOM(0.00){},TO_MATCH_ENVRCPT_ALL(0.00){}]), len: 181, time: 16.000ms real, 6.385ms virtual, dns req: 0, digest: <69b289a82827c11f759837c033cd800a>, rcpts: <…>, mime_rcpt: <…> +``` + +## The web interface + +rspamd comes with a neat bonus feature: a web interface. It allows you to check emails for spam, get statistics and +fine-tune scores. It is already installed and enabled by default and expects HTTP requests on port 11334 on the +localhost interface. I suggest you add a simple proxy configuration to your already working HTTPS-enabled web mail +configuration to get access. + +![rspamd dashboard](images/catching-spam-rspamd-dashboard.png) + +First you need to enable Apache’s modules for HTTP proxying and rewriting: + +``` +a2enmod proxy_http +a2enmod rewrite +``` + +You can either create a new virtual host configuration or just edit the +/etc/apache2/sites-available/webmail.**example.org**-https.conf file. Anywhere within the *VirtualHost* tags add: + +``` + + Require all granted + + +RewriteEngine On +RewriteRule ^/rspamd$ /rspamd/ \[R,L\] +RewriteRule ^/rspamd/(.\*) http://localhost:11334/$1 \[P,L\] +``` + +This piece of configuration will forward any requests to `https://webmail.example.org/rspamd` to localhost:11334 and +thus give you access to the rspamd web interface. + +The interface is password protected. Let’s generate a new access password: + +``` +pwgen 15 1 +``` + +This gives you a password like "eiLi1lueTh9mia4". You could put that password in an rspamd configuration file. But +cleartext passwords in configuration files are not quite elegant. Let’s create a hash of the password: + +``` +rspamadm pw +Enter passphrase: … +$2$icoahes75e7g9wxapnrbmqnpuzjoq7z… +``` + +Feed it the password that pwgen created for you and you will get a long hashed password. This procedure by the way is +also documented on the [rspamd pages](https://rspamd.com/doc/tutorials/quickstart.html#setting-the-controller-password). + +Create a new configuration file `/etc/rspamd/local.d/worker-controller.inc` and put your hashed password in there: + +``` +password = "$2$icoahes75e7g9wxapnrbmqnpuzjoq7z…" +``` + +That’s it for the configuration. Finally restart both rspamd and Apache to load your changed configuration: + +``` +systemctl restart rspamd +systemctl restart apache2 +``` + +If everything went as expected you should now be able to access the rspamd web interface at +`https://webmail.example.org/rspamd` diff --git a/src/content/docs/ispmail-trixie/images/catching-spam-rspamd-dashboard.png b/src/content/docs/ispmail-trixie/images/catching-spam-rspamd-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d47ebadfe4330147311826146d66dae7653a7b79 GIT binary patch literal 48399 zcmdS>WkVcm(*}wTlHd*@IE2A1xVyW%26uP2KyYVpcLD@=C%9{HcXx*~S?gKv{&4mm z*z;xRneLvd`!2cas%pX%(HJp|0Or71nIhp{J&0U z1=jIPQm+bBl8TawjEaJ2XaP8>-^Nop8`p_?yX>)0Lzb_7Z@Gq2onABcpEJ&{eLB|9 zNu;EuEz*)lc9~KUQ47?29PoR;=21$;&&t{b5W~g;lcdOGXC4I5paoH((V)9+8?Sk) z7LLoy%CtI2do@t-IV7f8DpaT$g##U4@j%$X--eqU$k|kZ#IS+H zOsO)ZDoU6p^;*lnxT!!RiXsKOwcu;$WXEissN25U;TgOj z$NN-TyNKe6UY%U}rvQFmNphl~S>>&PSy9Fwfe;}qN>Bwc4N1mXo8HNTuiqQb(# zLc*FQPWC7W9%)WU3e^h#b5+Bkl%UXWtS@F1kH@B$0qh2Udh5q}R)IqH&>!=59^}yr zk66dc@Nl(5p+C;O1BhXX;fUb^f&Rfq3IPI9e{TUTh`Zf--r;qS8`|O;OKfj{*J->2 zPssEeL+ zM~#9h*xW~s+*858zO=A#AynV?i;!ak4gW=!sm19oT}oAH1+GXZXWz=DO6>7WOc4o3<4PU)Vh!q%SLr1x}ag zdZ30u^h20M` zTUZptyNl~YDoP=GQcCne?GJEb`PHG4xeLcrg#T<*Y3WgkN?Eeq`9q4K+Ahag7ko12@@AsL*A2A-+~l@ z3I#yP6mfxn1hHT}#Q;k1b#J|#2Irsi+Cep-1N^T_2;IS<0wX>)bu^SE>n>G#Mb}f+_dvBf#(=2=x}QQ-BV`k0mUIktmKGgNi={Ettrm$fe#t zMwA;nvikr5e@_Z46xsRf4H^$yVnh^`tY-=bF^Kgan~jx&MfWF$D`Y0*c%yT8kS3O( zy7F!EB8g=J0On;1=qQkVKf2NgQuQ&)OD3#CMiF(_iVV{zc?4kc=|!fht=`b*7dT9y zQ*;I?uVWP7cVC3IHvNcK;cit-RXr&#WE48UG-lG|r_(j9pGU?40hr3yquUW1NtHI)_|>0uaBOZLPecSrRc`A_c0= zsjx$PyhgTOh+R4Tk7(B5sv>@U7&LkaX^880l*&+ zTbWhR;UU=Kj0uE$5&B(vE<6hyr~(jQvMtJ&2h>ZTVdTCKa>3+c_3Z4{yad_5x@{?a z>XSKrQc`QwCVim&*TGu|IXOAU>`*ZLmF6Ye<5q1>7Itrf+$eOyC^ogA^>7%|7Ev~p%Fk6yAw&hneisjm&_s1CzPOP3{CRyApx2}G<+c+_ zOa=t3_I%1O%8SlT$i0wge7IryH~J8a?%x*`m|`_~OHlJOu+s=*;}Z<-@77f3QpQE7 zJu55KVkRV$X=o4vG%!YX&3>*8^pnYEe=ZUXXmN@q)*K!RADKRpFZ{vpKV9BT$BRUq z?@#RC^jjqt`jn)99D41eBNiXsKNjAC)UT|)P`sl_scV1or@A^f;Nu57Myy>E6Vn~c zofJTqKkl3eteM--^<*nZ-JeS?^;#7TJ0`YTc4?gNQ?QX3EuygowTqua(4Zl}X-kC? z6aG7-F_S}2xd0Ww-()eJ-Hr*7G-0SttD?A=LR1l8P_JdfmQEQC5Kv4M%DuQKd9PrJ z_$`DQTwH8+yDmtI|K6xo5f7ZJbo&A;q^g>vR9awx3jj(orH}DUNXLty2J6tPQzz*@ z^?p#r8OfGK(r)&2wO`=Iokp!ZSjcQ;9{;3MW#BGVdWgZ}*i#pJb}*Bfkh@Y^wJtkk z*Q7_lZFh+Ij-l_D_$}q$(J)rK^1H+N;gVt>UNO^jts{bz46S@AQun3<9ER8js^x<2 z$5lKfM=4Ck>;32As&V*?_Z|`UQAiuUr^4m&IZKDC%s-&4Bz+ZALl3E3Ht3L;Ocsk0 zhSP@hQ)h=IU5G|UoA=K7{Q+7%7P<2y=eOjtl#Y`r*aif=HJeaaab@Le+VC#8>%FMs zV{Z*l6Z;&lT90PF5n89x5-PBj9aJZfv%Gg%z4nhNFP-smk3r$Z6cy~HQNA~EUZV>i zSg|qyxr~Q9Pw4az`*5E`o3HaaJ!yt zaLC02!}FeQkMB2vQ1~wUFtiFG0rYxp4^PKc`+Ivzm}HXiN~PY9yCAc%G%(`Oci;SO zG!V_1hk$|-6B`>#k?rj`T_73##0$X0#^!%}*!FDqohg#FtY5k<7)hpke!X8$NJt0@ zJoV=CfXVSwsuaTGG<9_udZ~%f4FTpMcGuu-5S18Q;DBlD^zYw%kPEd4NF^GT%l# zJ?E4xhg9lg=DaYt{}Rp0ITb+^WiQSf-df}LT4W8I&EoT|sWZ#4YS*No&_+X_&F-6_ zLixnRj>)cuP%(pK_~hipY~_Psh@!I3Ip~alabvi~T4|GaTEOnjke_fMsl|7j9v2 z&8p=PSxw2n%xmLg`*!oFOvdYvAle8 zbTfOr+BF-`D1BsRVsZrkZOh|#_y|eP;V}G501MzhOyPdgwh+Qtm;ABG_x6d7W|nU8 zqXo7MnaR)PrLLOk8rs|$Z22hrwzY!};o?zfS79|hH0;?UOZ<_V9Avg8lY%U6RZC`* zM^WpIKX7Q#^MZwZ=Ce1Cxj%*0y+WAoOh2@I4`Y*)wC(sX%V?B;Jim09^H3Ty&{%{e zPQ*gZ#^R$b2?ynqq}y%hoT0`z7ZA6^Ke-M-J(y>`g46k%i?345PJw8FWwP3KJ*}>}UJ=o-VOgsA=ozogL^ygCiv} z0T&BBJu={|Ze4vNh z69hm7>%~p@$}jrU%Ep23H@MoYbhlz6e=0MltG&pKo^<@vIR>V0-Pg7G&b;qYmk0SV zl^WGOxAON{>#Z^DFB#R(#utg-eDJr8&6AQpQcgTP53j02@OfSCOg0nIHU)8Bud=uL z@p{dTD&uzknqoHP$1JL79Yfs99`Pf*dpgE=1^`q{-&P;hcT?@y&v|@1W=ECN{C@;n z)KY}FJpI7$I5~)}i)=$jC`5>sP2*$~fg25D;2%cLz)Z=`k|m?nL#;Ba#FtwJCFvU) z3fjO%X2r6Q2+0RM+Fu=ITzrq{e}ojs?2IgSEiTyqq$z;S)gZI_0xDk~!sX0- zG`~7J*(gYn042hbYzE? zHx5%K&gEq%s3@y15|>c%nK>;CfAqWmQ7s%gA>VJ-a_SzAZsg1CM0Tv1nfNIG3F1D!%>ZBXhV_l9_TWWgoT8Picey3r?>34x3Aq%$4Vd*f_&+#@HRPFlv5D2EENFI zrNiCAK*wCw*QXrPl>#RjhUV$tPsr}PhGCtBZuKeszeH|U*^tZ8&AFShSH_d}KT z$3p9Ke+p9q95KhAch^-EvyS-8qzSw&$Rq$@r9R){x#lWDhL#dB*NB4RHw=~C>?K|V z6!X!i_kLH4@f5tvuCpoX*viXnWo)Dh3<&6tc*MnBD*b}ji<&KVI@Shio^lY_d)YH} z7T+n;DY+}IePuzVw9Th8|fU^jnRj8Au%oBl<<#WimEavZTug~}AM4XNV zjg4-yY&j%ZSy_(F8Q(q+P<}t}eDBD~*@$51XmY>Y0(;uq^ZGmA>&;9w9o?sh--ens z#*$iET8@ra;0P+CIQty|o6Y*qSF8D-M1C(*4tF8@UtqsbQXVw#XL;?!i6i54Ocn+O zmyr&Yv+1>49fsP89OZCq`>DSfC7t!ENw*HGZ67XNq5cUf~3k62IB}k)~T}Z*<(Ra{ZUv zpJAMCmxfa7JmsUu_VgHmEt>P_Q(^T_FKr&Z<2OGRh~Q6j=I9=qi-wr7DM}Yt5^pUI zIja%2ZULByyI3OfeurZnQh+_{rJ|dflvIR$=<>&!j5=AW<=OETt8Lbx*;yUxZ{sx_ zehtK=bQS)^hIS5I9kdk7@hoOT&h=CbF3M6;V)hBIrni>}dx>q?Jrr~f;*bj}hI!76 zvfmG6X@mo)*jwK+qqT3)liG?}w(R)Q9ITqt9M9~`dW#Yx zCkvH@j!KOAmKqSw9$G-AD$_SLvvrBAi;3g>U%zs&@NjYQNC+PrZ3!{onPg^TVv0d^ zC7tL<+Y3b!UQvGC-Rrq|lrFmFT;^MDw9s}In(iUvQl2lm#YugvMo!<5^=Ll1@sK7| z*N`i;m5>~Q_2y(eNH+DR;$?+F-($epl}@cPF0@_-;k1-&d-1Rr3f%VA^o?oqOk^|d z7THS4vO@D=DbF8lhsb#a0=hs2RlYRsSy5sOkF|<6y0VF!=}QGB^IF{bwzJeLF^+v0 zG-4}xw%%JKorRx*$?3cdgKKb_DP0WQS27A5Isjc6@~eMKjHkBLT&@lvx5-SA%I(%b z==>$#XxJ#%c=M$$OB8&i)ijhFn!CUDgL71O&W5xM?E|}&R!je|oU@`;yZ-iZ`gB_y zWa|SJ*kQEb7VjpLx5FbM5D*aLGr8(LZ;!x9d(~-z7tAsh&yZ12JU>1C#f4x@_k7Wd zQl-!LPCl~<8vDJ{jlqNP2O%g zQZHDvZd?uu4Ak?vovW*>J2|li{HeFX7FCqzf30h5Y#cIn6v2%`CnT&?E5E+JZgsp} z@O=W|)9+1bGWvp@)$D?Zuw7c+o29tU(`Ong$i?vjQNrEgG=!hxK!C8`;4~zu7Up<| zc;WX7MqzF8+Ara%9CELXI~Fi~_<-oO^E>Ih<97I@FV5GV)#*BP1Vr(!rB_8qYTbW@ zqUS@YAq`a#g-=jqLOtA^973|Db@o)6V1`iXw6qZ{I>OB>1OQNfr6-Z8DzNZzZ-SsL zN*j84$u}Z6w5ud$ClbOS4?av{sW{}ew61HRWmx}H2Sqi^kSDag6`06Ufs)QaqB9jZ zqu6bP(R0Hh`;1J0S6PdR`MEWqnXO7jxu-#_lDyP|OCVIn<53=g{G)|=4(m6@Zp(S& zO|GlJWgH)oEoEs?8w)=bi53i*rp2*()uLw)?C?dC{ouqfD-^(uiaQ1+Dnd;yT}sD0 zHl*k_H}_*sppp2k>hy3&Za3GO;Wyn;DiL9*3L-AHB?BtTuMJ(1SeC5%$smy5?#C)P z-22&SQCnP$#b8JsL0di|Tx{%uT#Lf<9|QVtGs^iaWBh019)SXn^6nPj5&TjKwL0Uj z)Rx%Zoh^U1Ta+Joj^`HSAPN*SQ>G_dEsmPA9vG5GB200J3=WwIV~~qJP+MqWVDgiQ z#bqmZv8cbKuM|plQ#Im+P3O!&Bw{7nS1goW3Iw(!S+HukF73VIR@zBj_aj(i7oDaC z=jG*5WVr_t|CpXu3MBqStMSWt2wi;S6%2SfU+~b4i z*Nl#jXYqK{7$JWNB+de#0*>3m#x?okF?)M^f5SUldQ@J?0id9% zNfn+4t~CtS2~;5JdF3leqq#y7t1UNL!StL{c3zc#1y z)F~$&zs9VIKX1BwkJIoWn;w81t*q`NW{0VWrO3!^b`$GLe?GMQVi_;W>EZ-3^%AT( zI{avhVI3X2ThBGaO{|YDvfMwkibHrX5OQo^e*FCY;k)119am8FaOd1%$6^>d@NxZtee5KMeB5K?l>(-4(_ot<9a;YRrP?$Gf+bLvvVy6hW)=*<+|%~XwRr=% zRQw?5%Z(r!X+MOM$@$amGt+oX3hpQDe7)>UD||HV?=-x;&;26Wa4qfO_1oY#n{nv12HrQ~0O`(;vC7-iNy;Dcf2+c&hqmgF7SxS_VR z*284wn+!MCT7R&yb~c9+#-W-$(2{O@kIsI@ z^*5uV)sMY8)26CV|13rORb|om(#{b?{^1;&^fCrn)y!<)WG_uvj781LHcoBsv-B`6 ze30Nwn*|kZRAMHZN2l04d!a{3;S}UDMo@59R~HfW6DnWF`k_f*&Ep(QtP)CVvA0JzN{fw`SS6EcE zWZkf{vs0nn2niUe`4nL?SEgEBT`g63wKtXy$Wbb-(>l!)jYy`|G-OM+NXz1Kp%zu- z%B(CYDM^*-X?EJD{UmK}4tg_(tC*frB~KveLPJThP3f9Z-_`KTcWoytX(ar$!nmKz~gz!^~fiJETJ8K*_*jdZwGa9s4dUwhH1%Ge?r(Fh1Qn&q;QNW z7doVFr#2H=u0ZKu|7-kI)`XnUHkHwV6T+%ycK#KYvqO6-R2-(rY}TvYVFB4jiZv>e zy_C~L3%`(+Vxht=o4eCaTTF9w)Poty1(!@`sopc8&?ctFD(41;jj~2F8R`HJ8#^T_ z$wyK*xhgtyy-X92?sinN*nFzpDo_mgF$%CTy5Km?W+Oe?L*_6gBum@ zOaooA2cFtgher6-_0=!{fEj?X*EgHGeXx{k^L(XA?SAz~d(>tFFC8^2DL#vp%{qfY z0lr=cjn`)=pDxBbZLtuoJD*5&Dk<~s%2(E6Jc-qDx>9Dj6>o}#027nNd@=_Fwu`stbHCd;b-&kJ^#OU-B$s9# zKKF|aG*Yq8QDU`=IvD(sILv#Mt!KDw)*9;_J_Kkz^;Y2Ic33P<=&_Ro?qiAAMC`0b#twO@c$OtZx&)3?)+4p#+7)1~jH>%&Vo(&5KCR?hs z8^;F*2I3MAY6kQB`zATL8+HlXzP-R#Q3Jh9az z%k}k7_Qb?+N56f><;z=S+b5MXj}Bs*$1ilGL_+yN7Jx~Sf$v(5N;3#AMn>M+PJgtVn6idP znGc16ZW}w?{$3`z=Cw8mF$w=&OVFhTa`*_L!+6i1IcxQ{>OKKw-TcnMO*d`6VM#>$ zTdGY%IC8jB!-SS zJG*DGvyn-0dz-#;8oQ^`Js8{JoYo1?snP3$85~p7Js2YIUtkU}f2s+L@%sAu0-#`| z;+>CXONB#`Z;uxymX}*gNhRWM#@N^G@f!_)hl5X;|H)&&(UnN0{MTZ?^@gO5nWoC@ zr995g%z$Z~^~k8GOm4SIBPnGt<#6r5E}j?<0u`&3YbNvhzC3^fUqpDgTBVMrT~;A| z=zb=`8xK1t=VLu5`_H-s|H0rwX`&mapZZ)hoF2E=@6B-3>%Uq*@vt*?VVF(~Yqam~ zavoc(Z%R(^^51s{-Z!+h>D0TH;>Sk!nw=QMFt*NgKJK5vGxtIj-XOyga6bR;<5mGc zkcN6xt-pa5#N^W3ApMq7fMwNA&DB9+c{nE;n;-3a8#OB?@TY6{N7JaCL2z*nAou={d=o8&q_7T zw_JSDA}KUwC}Httv<~Tz9AN~ia1tl5H(^iy^O1Ym@MQJW?9)mY+*F0ilzK7*tMVCC7#*q(&wJlPy)b2bVAB znkBC>#AY+88XRWw@Tj;2o*QEBt)!exj3_?TbFZsa1R5-=4bbONc7RDu3i&LZMth>f z@&9H4Y%{wJ>{Slj&evWq2Z%b~-=2MaeZllI9W5=UsA4=&G9HXG!MT~qac8istV}fG zlZS_g&%Eten+RNE8D;JV$~!-RIC;y$r+j)=1qq+IZ1hG6{fxSs8WK zKDa|8Td$1@UAuU)xtXg#sgcZ@KK3c%0|3mjfIuKppgp1*x#aY%@^ExXFJo7i15~93 z?I%H0aF1uz*6g!b{uIj-D|iX}zea*U*n+6h`HQEnikJkviHTAs14td+#1KKyi0Df< zUz+NkYZK!y4w*3^sg(7Wie~dJJY>hs!v%$`c8_>_K2H?cNYO>;{z)RY5SgS#Euesg zv-!#8<>}e-HUyiKION=NYb9>8-kmJG$C5WnJ<1!G&gqP@O9IOQdxM$tp z-0XPh#RH?a&C?ndtpNfvbwas=LqnH$cgaA>QWY+?e9CZ>#o=KoJ3Bk^QDVt>x#HU8 z)97}vx;pe#Wo6Tc&Vj_Sz{4NkcN{q-Cv#j}~M= zcYZcm*UL9-52k?hfFx#RWo2Tz+UO1f?}#%rVzGSo9*6DDU|eqqlC-q66QXQ~_oJh+ z@eY`Nhe5(MW=nVBS_Q+4S<8B*Qd&yN6lSw=a1ie8?M3?73$BZvZw{3;HF0ooQsd&# z2nn;Yvl%3(n;f>6eClXS(OWQ6B>m48S7HD5T4Ry(Y*K^oEYzwtepq81J|#i6!cr}i zkdiay>yUFT)PBKdj4P*~90HY6Lwqa&itmn%j2wgM0H)MY!)l#&&s*^C=H})Khaf6a zVlt&#|M~R|%(>;2_`W{D1?DJFs!-2?)v`!KhJ^+9-Sa55Xg|dR!3@DqH7hXRrlFxB zC>S7?4*>vg=E5;4`1R$>*C_vgTh+vk1wNif&t4MR;fLK>Y(!>Io|UOG44^~GlpPw5 zC5H$NLn}s?n)o_t)D4m`gdI}WIp*YO0`7U+MwHKA4K}(0qSpkYbCJPX0y&KbW4nW3 z7Q88KMpGD>QX`3fq_Kj-$Lygqb&};)Ul_aX%Ek3H9;0F3U>vC=I8rdt(njV{4)hZ+ z+AjudcR}N-Ecn}dQ2yJhm)M7f+r@Y2MSiEtCp;g30x)!EDWy{Oi1-Q0OM`H}-&Kg?Fa74`2T$Y7PeWqCYyt{ zpnoR0CJ{qqfB3g2Tnq!(JJ;hDe4_CEM37%kx?2&$qhH9Ah!vD_z61a^$69}!}JUbywZSbQi{2=u8aqM>;ASb`@ zR`iAwfrQi`MXYUI{c|POF0X@vfBtG3&>z^9^Q9{FI|QG(R%S12t${*Zv{}F-^uOZ~ z5#lk)1P-8Zkfi^Q zm=ciW4;TD+yKS(T5NMW%rNs1I!beE;ECc4yI1nt7pH*u5zQ(L5`Pw9xj#B4+Z$=6V z$2ZKu=;cAA#*sy5%JVe-cQ6Qc+CmT#fT$w5?GyY$?HDN7q)cJ%DbCzNY9|D#03ITO z7I^R&2G6qm{xB>GCjtkA1G3ab&vu#$z{;Z6{q&UNY{C1M@vm7=Hw!|__GI|B0dnGR zxd;e`pwob`vBp5bIAUzUL;=XyuObKLmvClGp+HJ><6veX0gHbpEx33k000zCJIreG zQ~^{0)LqhG0znW6-gILo z9Qdj6Tu8Zzbsu6$CDh<7XYL1?f6U8aa<7cfqH$S~uYf&Yh5FLq! zyKB&@P*qj^OhGJhFB%UNM5Xt;1 zY#;y-?I7~+ilIUW{c8*0!>kk~dx^k3^f4Vsg`uqET#ki%eKrI+E5ESNG(61+vF#nwb1`$8i z%0CFAilPDV$=Ax0oNKEtJ?QVyhlritG>gy3TJZmAJ23;+7IDBqW72+6Pr6y>?4#dYOTftIw+0^3 zAO9y0&%g5YnsD!7tQb^te4zd(n1U^&5e;Z?Fn={qt^)TzLH-V3fdyEdHL0hU=#n#t zCi{0`u`K7f>xE+3f!S=Lz2aYOz)F?tm1702 z$dN;Unoh*%5t!lrFopgn(Km94ZW$p825^~#3IE|}Qun`+FWA5vckr#~oc_}g%M?8p z874wQ8lL#bzZP%Pn&kh!8Mh6-`SR;WeE}d3nWGi$|6iU_ptB-K^jogzzt$g{?C7$v zT#l>)00zGtXwXmwvCDs8VaIGgtrJmfsr~qU9c1AJMcOqWbHzzFKes=?GwChc2(^oNRJ_+$knD{ zo{FRWmDB|F6ud)8cWhc#n=$$}DRwRxi;MaW^t7C5+|V`}Dp% zT0uSoiZrxA=IXH1(RIbmYdi^exAR2Tx*154E%{o%wf^kc#U~1yMM>HhOCLhg&mw(V zM(PKuyu5rbr)ur+miAkW_e}2P>xeGA9gSu^kzOO>HwpwV~pNJ?ky zXfV0Tx3a5ay96s)u#N`WVqZqci?;bHVOjn4^qLDz$ST@TdyYC})7Awv$!UbXa;yYd zT&1HvMq`x3L7tl+M8?K``ut+4Jdd2k<#x6ztddmhMnUne(g)@L_#iJ%A--1Foy=MK za&a$CT_%5q!EJRm%P5R!e=Rj$xq}p1bqxUQDTgxf;j#q_RRHsDF64{L#-upikMf$g zVLUaZeHUL2lh=nK{D)7l1`S3(;H~7znLitDDX@|Tzw3c9>op5mMe4rqIclF%1AOuif)i6kQcbkLh@_!cj zP$?B!5eP^OxU9t<#XWSoD_^bPezQ?4=Lm5!MK>p~sMktwQ)M?p*V#=-ir+3q7R$wwi&=c3LZY*|9>)P>8z*9?&~A^j9&3wVL8xL5 zfv^B{yYuVGZ2nX!iFnE|NV9#>8{VryaeX|#1Y&<;fnU{ZU~mx&omIP-xoqx(NG(qO z3)HJK-l_LG!S_wL4!IUGpjhZj;KmIZz(2fPotpR$9ys9qLd?@8kx&mjVt#nT2Gd5W zuH*e-70wim+7*TxMV@X_VN0Y%31^hSQ}PUTR!izLkzJ zwggnvv%$LBG3|3P>Aa~jHTqf{~(Yu{7aXx(kA;$OpR5J8d zIpBVkTOtv9HvDU{8b>SL6SO;A{7hxn%z`!?=yNDHqtr$eI96(WoT@}ESY?7cH7E(V zA3tQc`k9$f;K@cKiSBG)FI94ABceS2azl40ehn`@CSbt=0Tt38lg;AkzvYTxFwmNq z#>M5v>m#n_+dhTkeaP@GTTaWb;pYzJciVM8Fu=>cG_rYt=TlQDzLqv;AB^jFD{#bM zq}L)IQ;SzWaN?fSFJ%Um(KxQ>ZMfbMRD4y1tEph#2Gz4YAm2ixBfmLHjg(Br?|ajI z|GRQxk;3w2g@XJBjRUSe9@u|!11DA3Ggqi2MTXP`0BGPaGe}~BQ^_|RkyfEt*IXaO zq{d}%$yQq0lB@Mwg^T+$<3NX|y7nV09)c6fr@btWxSIj9vorB#AJ_c(ro<&z?>+Ce zIljy5Y%f|d?bO=G?Bm)Ig7OJM9(cZLC+so8T|3_P$LyiG{NaZ{X7vZ|dKDT3ifOjAdDhGv;sF7p*J~ydou{)f5ytAD zc^#P&hq?WtgsZP;*->~kPE70iMpPW^5s;bhW3)dSzQE;2$-w4<2NHEXyz0AV4Vb>I zEtbO5B3FKRZ8%4mykw~|d_2sauhO}@!{*oDS3m*)7A{%^CB;1y{ukzjGpGK>faEHi zvJ(tem#J`+g`e8jL*dv(Vso`X_I~TT+Wg5n9ehh99OHTxun)%XG&rg`xen#8@`~O0$u3R5_tIpwu=(ZV!*oWX z@zQ;L>bEPsb)vK)DziH@_ceM+dZLt{7LhrLiKAl+A^%v=(Ua?U;>H9?bGv+-$*k4t zIcm#4%vKA$+CFRnwac7dSmNfw=U%S9L+M0BmC%3<1bJ*JM&T7M@?2H=-}Thz$7B+7 zW|)#uWv1=f$DZG7Hl2QYWrXN!Tpt$i7N&WjNqMC-_;%^fj8UwN%8WLZk1m^XV# zU=F!gmAs>tn`5^f|H(LBlGLna*vHr50t(D5taNFRq(4Rm)zB(ig`FT_ zV{K8WP1lj1>w^_GSu9Wy-J`qJZj6D46dZ)3=tTulIq){u2Q;r9!>zDNumlgFUNgsk z=GFD=E)0jqFFm5Yh=8$M57Q6u;;sS{CR69AQFY6@oe???=f}Yzp}&wttFsE*ffXlA zu-83@&1+^S?pPFewMa2P!p}hy8+RIpUKa*H$>o$qK(L*m7161uaMni6Kt$Itx;Rlx z_D-=d`ZdXveq(bXyK|&`Prad_pr&Z2j7O11GX53?A#j}@0-!U|X%2ikBsjKv%hKka za{Lt%3;lmm@scIjr_WJ4okcVFHW{!nBML{kpWPlpS$f|7xt9MltJ42`qlgxKFuxe3 zwXK9(vCfX|P*0Yi(7BF%6DZ+)K!TgkR|CY;KOvhL))}nN z-@HhT+jeTYU!?nt$BaVvuP>^1X`27%bXlp;_WLJdk5qQ;SHtC19Z$nFRWI8HqUGhP z`);&u(BbS1gR`dU z;EaL3vA=LOX>^yv#n;@heFTfG^`os5A@$3aqckd_QT!H41*Z-&VDx)-JpW7S+Q;FN zXAHzIukh{h?<>NO2WcY|thsQ2t+P#SY@We5{e($F1CtdG%Uk+$Rbm^f+#2)Y2R)_7~jCNNUEKD+_6j zczyfId9+X^$K4^D{G2WC^sfBQl-Qeq9wc!O(siaH5X7DU`uC0Wn9^pcayP2!Y9qGU zy(w426KXS(p&kx$GVsg?D*yy;!!jG~+fYKaB*9NVDGf$`k3mvnGgT!~#vTtV_>eI{ z_&-BEm1zA;O_ETb<48f8X4!7*Q9tamew6H@hx0s}_bi+!o1unx`-eszNg3YuT~6p& zM~Xl-r#dnKT9zYJ+xTM|m*e>$(0O=}UvBa@Z>RUhCD9$h=;N!D2N}4*atj9^7EZ+P zu_Dl%gyrAG*AWlA$~*tFuP&C!b+gSNKA}rZRb}iBkSe{sM8QGle|u{Zw9MKhn=R|F zMBLWXB20OFMS+pmr=>CjcT~3dzaE`E6XA1D2AMp{ecliMe`1+Ukq=`1?tYo}h@DIQ z@U8iHc(Ot0o3frZVZv>1OsKs2Ib!1c0KfS~Nh`%F`>eLX>B}irSF{_Ii?btv7cpzo z`cwP69V2c*DJjOS=NA_cBV2`j1bEmO4j%sKXFOT{u47t!98eJabOI$j+aDZt zr`_SC!NEcLQY@1ET^6zgRhr#Atbqu0OV!Tm@9`tMb&)`cK!7AB*G$>J=B&F0#v@~O z>Vl-^Nm>r&#(@UqHA|vWxoXqFBjNL^0*?tp1+ zvypDN%w}oc(9v^^#_6~;`7X6Qie~S#i=s}QcDc1s0*uAcAV7d-4t|*A(}0FX2gb|) zYYnc#PNfsywfK2FM6ZZU2<|~~A^FRdYjR^g@_*o$oIa#BP5a=R`@Es)vR;Ly=RLiS zt+u@dr1so_Pnc`@;+oQLJYET9@sEJ$YUkd2ArMi*BpK+xx>EK0FN2`hIS@GSV1zzt z;^G-Qd8ki*^hNsLx|U|P%+2yUvCYQ_jnHVx1Dlb`6v-}_nW&Dt@PEo%Z~^?X#Wd~0 z1g9~{wHGn+rz9X1+B#ME-!fmQ0$ko2kV7!TeOBH~fj-%e_^&1gA3+ZQH&UQ=Tn`!l zM+E*Yhqc&0SaKIi*k(N3rMGkb7E4w?corucPvh(vASlIoyD93lW#PZs>*0`fJKwhA zYjoSs%EzwM)R0=Wn=I)YK!?#?d$|+ahO+BGEj~Pb&84~ad$P5gZ#E=FfcJSX2}9vU zUyiXnb$FPW^ITJGI?Sw!46~yr%s(a3T9mhOKQ5n{b7G;nfifcWwAM_RpETkMS_LBkjFKa&gVxbtb4dDQ0WCP2zM|+-mjtake|>AOpGe zk*kIy(X8^(9EEjPKBC_o7-mqLu)a3L_sjWG!-poq-i)g&6{i8X4h$bWpL11x8UaVvr>HX%2&#4XpjY!m`6CNA$uqY?gG_x>LHyW_=W_H$03s6y{h;CL3+I!fhRjmh`npZQtj zXS<=a_tj2zGpy?;lH4qS^Zog@*Xy5ZL$0G3Wf;$|YGPU$*|O|hr$9#QRWl}jWMDEHh~L`GZb5k?5?9rfSCqPCrC!w*T6i*DX+_TNS({kC4r z&Q4)Y-vf{5jL=Ii#Pw3Jg!TV)I^25M(fVxn+Bs4KOCDUF$7hcE*!eXX$L_Z}RtH7} zV90px@5HSZd}_=^=IjnTKS2R1avrUAeVNx@M(W=B*M0evr|e~aS8=<&SNa+MKDsx( zdG=X2(?O>8UCq=y;Wkqxl)7ApbP-oTdNkPZdyhb=0egb)f6kJ znto)ki!#72*gEHT-}TGVuRC~ja|5ZZGhtuym+Q%*9!c-G?Du`1`@LN}X29oEron31 zqmUHQJ`7820Xb^sJKnO%eR>NnNqqelPvSm)W-)s6;hWrl!?Ke-hY`c_&jb z)^G32fG$reilUns_3!?bDrpDOqs|2#eDz*zLHP>KNqAgaiJ(ty?S^NlBX+GQ60FFN z--PRNqrIx&buWq+h5yX7`YDe4I!#et8SYgrc2 z#i6HW3VND~G9I!^o>ez6*sVx9p)x}6B9UvxdZGryIj`02Lhkn`Ib>0(Xl-P?p9WL-b%kEMt2?l#<2M4!2Lr%Dz1*c2gA z%SI#fxGg@Q1A=)P92ec8{DD`l^TU5mE1xh^-K)4iK3}LgD2SlGsHu$yLkKAB7?7P$ z@z28eGHcRIoIF^YHAEX)A7pJgl>HAL#xnMjLhuIi^*KlpbIqOeRJ)_4B7^Lp+go;!)UqJ9U~t1q#D7t+up zXcPZz?2Ib(<=1E~EwXS(zy=2#W-t(9076!oSP~!@C!E+ekfY%DFlJoo+_9oLld$^SFn;( zAXus9PcjG-t^d^CS4O$^%e(b)jm&SB@bNb93@o3oCM^x59@d;A`CFR`i_;cy}5=#WZyL*G+N9ZOxyJ}b$hwKxZNLi zQBC3AInJ{$*Rq6NhpJ~c20&tI>aS=GMYn3*TYm5*-4ePhc>Bd&JdsGr>vXE)sYg~) z$D-&o0uT`<{nq5)dXDt8aUoaKPxuf5qMUv`*S%PJP1Nwc89{k_-7XD2fCe|8 zzHtWTw8p6k2*}!{rUlJUQS^m!`5xYw9Dn|unnAOHfn5-|4pEuGr_08&Gks2$)82bL zU8U&~HS7SrVB@_rnJAlv)8Pf`wuIP)qL3x@c77iBxnzj4v5!e=p2ME{q1>{yZ7(I~ z*66O|wX9@jvHKNzfwkgVB6EKZ{0}8o1O_Sx%I^CYM?n-3DG8-hrIBty5Tv`iyE_$$p+jJ35Ts@Z=>{c48bla|p}V_g zsQbYCeSg2Z*8ShL?!V4*4QoBloY-fdy+3C^pMB0}2||wL%9k%OKbGzd=pc=@b+0CZ z)3Z>!Tw#s(0q+=6c(=KAryrKXtrfv+Omtl7Y=v*<9F;pD*N}#YKaTRqpqAT*%+Ai10flGTAzvf!G920-7o0BhvJ;}ULu2Fw%Ip17x$aA z7{4m&IkgVu8s=xG1|XqXcC#o-?t7eZS1wiU?&)hk!W)jqh31F}MGvYOpS)1k9xe`J zf3EM8as6k7QLeynb2kmpmk%|5vHs_~RGJji0sMg~SAL~7@pjfuZDyMd&3;c3Cui&a zmZXIQXE7TgHuxRqx?qM5$pEJ4hng|o+c-_b2*xw{k<}RyM83F0MNS<-fG63xm|wzb zDhcG%LC1WP7?*c-^8N40X2n7iNIo6032w&<>NDJ2DLSRCW01 z^lP+znj!y_A-*9niNT8V?`&KYtin_9dZ#Ln&d}KazyXnC0Ii9UnmU)l5r|I#$DAb4 z-%EV;h}_PCKjNE6(qmlR_cHgL%%Iw_$NR_X%Jd*!G9{niSk2=sziXK~EXz%$(q!{f zT!^FQRf1w-oGGQBd1s8<5`JiuC^(M)^yA>|s4J5l!Y%0d zoQRJB)LdU(nx*bjB2)Lr9=$31J~aTxN=L-CwgSt{U4btZTF?Xgy?swIvn7VyER;+L z#+y*t74Zb%r#)|?v%vIi%k4K86-Fr0BUl>xhXiWd`XXTpUHFI4qCfB6-VMK}a<|G~v>M+ZtNENd_u`4rq?P%Rj(_Fg^cddq$#<4c4jvRI(jXT8i;8 zGc$9QFDfG99$Hu>CBO4`LQB5;5oVAER6v_lY}ukVm?*dm@@Mt(vxoiAOpVa>YFRR4 zkJyXSPrg0(eh#JX$T!bMUDVi`z8=@YMuW(Yt8$;0Ny&Qt0s)285|FxyR3~q1B%gY=VDs5nR8QCN@as|p zVCW^oCyIS1(oI)fw-obj8x+3qV$Jw?<_qe&@G!^}`^5=&I=@9{_@q8J`$E^a8KGKa zvtnvc>xFn6hoPzv;Z~v51CPNwGba%A?bTsc&;)bw7VD3<{YArQ9yhJHDR;k~I*$6$ zz2{NS&KA`&Xj`X4=JO^RS=hUxne{ZyWV3CkOSj&fx02#GcuSBiszV}*I)HFapDX#< zPV~4fiSpCs)7Mw+9(u!&Jj*cVdy+{2s|{l#u*UJRx|ibhR5G|&19wc;c#tu_*S_|s zm}p9)ndL%cAMCLu>dmG|m#Zl|IB?Kl9^@{;QY_UvV;{{{$vSJHR`^uQh- z+&UlC{~wygVkD5xHEJzM(e#w`KWq|!93cK5x=b+j4gviL_n-^;F-p;xyl0gA_VvzP zg(tlK^>UtVW~o9KpWd4LMT&(BnrMHOZS8;40~~JY0Y8Jo`aSih?0Nalnc)EIOs}CN zJX~5zDwO&WK;<-d+AiukY8kh!MeJOmPQLV-|J!Aaia)nJ0peR`L-L>{`p3k?#8tkd zv$Kb2*=vunvGw@4xO-fPh=?q!;g0oZ9S`Zi{Q$E9$QzYY75=YE?#Kpr)QU9}6d($s z0rWwe!0OagQZ!@IEr2zBaK!l^as2sW^Dh1)7W*AR3V8j#`SHI+@qa0w|9bfQrrK-o zKxN!&u_uQsZGfHwT^3JflR+12BC(8TO7=TJEp~HCjfQ=_a{c19=cvI?hwkzRrI(f zwr*}m=Lbt%)p`K&Pxx%wt#JxCd<^Z88*l{5<)#18kqBiRh+M>%8&!iv$Or<>?Fo7B z8~dk)v~6SlPxUFsSUE9%ZEd~EbQ_|PzZFggkn0%#!T8@knwyjVN(*sW`ek8RFDNMZ z`%b*(1f&2V^FO7Ro-~*7cHAQ#m*)rWRs@S%4Vjgb44rWgfQQB(c{=0Hem!?)=S2bW@t5#`_PIH}U(?TS!2{Yn_alO^uS2-?mw{V)R1|KFR}<5mIgQ)D zoQBg-Y1<9FF7|RORa(oxq@wzJitHJIpE##rVD;wAP)$nMzQM|BzP^A}kT;&|VFz80 zV=r5uH1!15?}Tpl@3uM0uj$#PICxy=gs|$-5^`?7E?-s3Yhdri<+r16&C&vE5FutcR!IHX(j2?N0r(5; z;W@5u+riRaP~*w)7T>jnQy}aJbwhzx<`P>gY9fdw$NP`*YDg@uk@s$Qy{PR*ZT1D6eW>MRmHDN1ZER~0@YsN= z_BhgQ+N%Ay4AFiH&%`ife*bUzwcgXaK|DuL3=qI0LEG zsn!01_1y?u!1izPB%&56>bn#qHrs4<6QP)s;y}UqhcQq?=*+1w=EnNMukH0&dCLW4 z`-;8HXV;*>eL?B^B=K{QH*&nt1(xDpZtg4*QC7Wh0>ga;HssSV)H!JmAPGGCN_EqJ z;`8wOvZrbGgIb$=+3oH zvF|zQJZAV3EiS<&Dkr*++guT66*>sjHpBoGCTs4==e1VgndCd6o!R9L>EL|S(#!99Yfe-icD zxGY-En-$$3I4#WQ@Lrvmtwh}%=0IUAt;owy2nN#%?gJq)ul_S;t((P!i<^_xVdn5_ zl&eF=^#HyPousd?U;xd&g??vx%)4@7fB`dum8R~hG-a1690uN$NkZIBD ztQewQrU^ZEud98yqjZs>q&a;y20rzS`Q5(1=#t+hXlh<}Juv!3j;*dq%zrD3*K6$| zS>Rzll?ZAr-*yerUf!@*lyT;G z8@%k0W>+t}?tPeZ@yqK5*>s}R-nsynYY#$Lzzjs%DlM;uwQAW@18n1lt`1>0*FVA> zlrGQXS|>6&NsRcsPQlWzA-*=t@(#xyH^=M_!ueXA3 z4#FJTedkxMn~iqzSze+S@Zn$6dp(qXr3D2mVPuY^Vu6>y zkw-*Q$X=zuDj;bX$PAwKUW!@z72~(txW=sjEiH|%$^w#wFE1}AD-yKr1q3|pQo8d% zph8T4!}=a5B;AyZ^9>(@_MQ@0um5?1S*4zZ=?>RLq<kv!*{Wy%+Iz8_;-9eBVc52 z)K2_nW+<;c|8+#qm5$^kHth&lh@(K}7PrMF-Lh6!LxbYHaj!mr4)z7eOZ-oH+L<2G zz|PkvAM)3$5kGXDbw1i)Hv$>881aBzmBr6&{$ z?O$+y1h|fm$~!wdNF;J~%}a+`q+k$Q63M!ea>rt{^$7{tmCr(_Nc;3LTo+Y z5BzJHZf~mfW@cv0?~uzItbZ3h@YkFmnhOh9aPZ$e-2jJRr}yV;%xvH)$O zp|iByx-GO|oH6;}LYuovK8{h#@cW-T|2k#)a_4@je^Q$qF88*W17G}sH&tz=)I>!a zn~qU_bL+9g^f90IW8JkLjBy8zK2p;#+##ip)%X6-5fgPxsmmacnDS3EX)*Hu@3GeZ z3eKE;s}2d!_|Y5d*i$RN{em8mWeg^0@s~81qe|gia*wyIrjBN-=1~Pas)r+WJS%4T z141gTj_^$!9-J~mz1icw!DNfsHX%iy^;(S;#UsQ$w9Kynp5bryZZ#Oh@etx=X+D|| z(o}CA8p4Cv!WYMd$aGt27lG_pL&CEXXr_yXj?~G%_x;}Of$zSwXdLzlAJCjJ`*W_g zQ$oK;I36~nzu5FF)vNVf`x%B41x~gvVR6fLV3$)1Fav`e4ljA2tHeSgw6v;ikUHTh zgHxWGr#V+jrdDC&g!eu!M9JU(SRFN^qpZ*C)txS-Mow#>kpUU%Fb{@p5#d{@e5h2D z9ME@Nu_?AA$!$?N(U^-ugziJR)7;Q)^vi{+3yla2bz3v2@!Ksuk3=D`n!>j2o5kY#x(g+lol2drZ65 zcYKPX$dNUT$7yu>Pdw^l;id-^<_K}LzO7niqtxeYh&A@41xlPUTVK6*m^ZPu*Rbh> zk4Oryt6&0;q=&>ev#_-~g=mvE@8rlgWjzPf60@@&sMs9XsSPGcxIvq!J zaObE63ND{ig>7cGTJ}qHio{&ANzSB^R`?`c{PN$rcZ>Rm9tTMG@n-D&y|>!t;Wb^^ zWHNu~Ur}G{GdzUj=czefrf;OO`3%1jVNbhwQlqKC*1U&YRpV+-C-ZdFR)vi;ISyua zsMYh7w_EMzdl>vAvn%!q)EOLVS{c?%iP;IV&H%y2bz2vQ{CLT?=O(ku`iUFJ$w>OD zguvVO6b&A0n-{tcTQD5qj))!XJ<{`5cb+|XB`O>BE8H@w?54!xN5oFlo_15d&%V@F z&>)0Tr`q(r`0p|M=^FQwFu@AYWK0zGKnwQ!ftJ)o+>FlW%2Uxj5 zg@b;eU&Om_P{$p}P7#}dV5LR(W)oW_(ahoRYJ}kyVzLj(;6qy`q$xbp&e?1r*@b8@ zk<$2inM`H`Et{#`De)^>j&R@6Z#Lh^$B{ZKpC)&QdJPw{UZCRapju*0)f!!#$kP?F z`W?va*WoMmB!5c-n`nGPlP}1GNZLfNezjVljN_Ml-fvddgo*lHNC87?tf~Xb z%|O6dA%mP3x1R%vLPq-~+@WFzGIKJuT144oQS~m}i_M^^q~yluRAf*gBfW6?;%}Wn zZEXfgGO4iow%1Q*EBTgH%(IxKvWK_(J$^19eT5T*7OVFDI%UOgsg>%YV*|RsQ`6f- zz07G`&~HC%NboNvI}&x0nO7A&m*Ki(8Nqy`+e}Sf;~metADHcUHdlYQ|4A2BC?MHn z>v>$3vMew;lD_7=Jgnc~{p(xhP+Ls$P{8_WFYTY{5ocQS@TYae?7E`$H6yQ0sq}=c zt_PwdmyHd^Y9d$MWU(b29USeqp>IzAI+WQGRVwH-_>1c-Xg7lbw!c+9=%-4jO@sE8 z&3!K)Vvc2+s*`vQzH9XwynCi+;O>$?_7>GF-A{fjM?nftejg z(3Xvb>3grZ(`?dVVy+%G%5mqgNphQZ5GTffR#iAa_O}N2(4RvaAHAGm`OFb*Ef|X_ zbDDt2wk)NUj!%i%TI^@P)6Dn}=ePrlPi>eo%P0|?^|U;Q7bkhN!ZLf%Wtp9n!38D zzsm2*bWCoVfKiO}t#_ zIt`sOsHz@cd6gzW=f991d`PqvRafDMLP9oCpFM=0PV9IG)=sje^ZG4xJSccTBc1H2 zca9E6IUa(fyVzbrn0B>WYT@Qr&dU>+W)INWD&&GA%Rkp!^#8RZ^M6z>Mzeg}Iyjx3 z7DUp~b(UVVF8+^ALo>5t$!xE6v>6PpUU)X_J$A}&b41! zC!&a-{1K4%YJ4+s`qRcOvSxKqzq&P#zLt#lj4ecT&)n!p@>aRbpRu9yL!TwFXY#=r z%Y?upw$twiMLkt*kkj2zUI%>vE~9TgJz?>UgE&Q-;Sb|fGSUrb6TvwzX>l|>3}|C* zqBL2vH3UnHOUK|^C5WlN>5$qFM~8=!-)d`LZ@>0_LH2^{M0S;AB|^r|Y$<|U2LqtNTdov4rL+^aNWcX%=xr#OHLY z^VybvA4rbJ`c{DQzc(mL3LD0O_>Ue-D89`pHf%Og>dSt2KpzhJtECaX{T*s)r=az# zqbxDeA0J+A)7dr>-&^f8lU2RSW~fEtb&LmV#zUn>w68{p{YOvD|FlR|vk}+YH(RgI-xB;zC=$GJr(9t)`jQ}X*G;1H^tskQSO(`wj zAaF@KWtCA^R;Q*N6oQpk>}8Cqw+D;|3#Byn6|P0em??O8)6zPgCT+Z4iyK znd+w9`RstQy2=C5$X+jTD=Yc-)r7N{t+Iz7t1)@7(1t`$7k#j;G-s-7eYUDJR>(-e zlih}bH?tcaa-Q7w2A*pZ7AE24V|!UtE#xK72D5YOZ8iet0tCHN%=$Wz0oeJ(LzyBL zGk?-2(xvy#o24J}9sX83+KzLCk4|fxt(U23Dfune5`AFFUSi2;HaZ*8GrV%yAra2)PBHD=b3!J`))cT*_#jl3W9w`9=B|EIe&g=OK8e}k zWhAoupq+hn_CaeF=S4bLYL+j%o)T^71ptFHV=@bl)|C1QZ35d|JzAwD&9|fbPLxEr z{ic?q4#|1(@iXY!i_K9xxFXGMuJ6|cTmVBRrBv49W!Wp`!4&ki?-@O` zvPT~B;Lf~R$rH{1O&+o_rTOfo7cp5yd!!8N@n6w~E7-?g2AjiREUC5rGlz&Gg(0s= zN#I%Un4=L=eI@#SxPiMI^ve@y->TO18-bg@gz4(uwgq{?&y%-ue3wr*7>W$Jfeu;s zu|`eU>+{v~e_gZMG#EiVudZm^4H#@cL35r^#z#v1{g(^Ct-vL4vQt0ThT4Ss^rB_f z>gy5fx7WOvrJSlO%=|2k_Cq=1?0ZXfwVI^o-YiAH6p@xb4XvZs@K9C|&6nFP12x9~ zitXi1vDDEx`gH(snhCy#=DbRG_tpRJqNo2WqW|Bo>AXTaTEJ~`< zQm4v6$J0>$E@+(@c_P~k@0@J^uevq~LTF)m-#Pt~u2+(*0D3|$rka;St3CGZcRqR?*3`qjgUyHGo| z+kFFr$ni~~z?LiApmm?4!M6AxL5q^+9JyTpC6AkR!Ww_H3)(0q(0K9XbjDRi5`R=u z@;!W*nN%Zbk0srGmWLsyu{Vv2Hy7nrP0?a;=Xzz#j7N}bVqW$$Q#u+%)^=)(aSxNU z+tpa|Z1D46u-0>MG_~}cQHr(gb(O=O3Nz3u>dh`=S!e}VuFfq7ji+&GYFr5bmvr1J zo{T8RK9$()R}#`!5mNV6tn)zDP5HFxq|ulH4@bLJ?8*dcN>=w76_Qm1d~&F?JWn31 z1aU3AzmIu0PhC`GllDD9S9Y+R8+%3$Wz~}(;yqU`(FtkcAOYg22H`TNz^09u&Wvwj zoyx)s&>*3MoAdj#ncE318+Xl*MB(`QvhZeXu?Gp%xmsMvu@}&Da8QXI52`;K%U2l^ zH(h=n%=N@>_7Y~tcDbqmo^eAqRGe#2tqk4$9&cmI81K+{k}xjHEg_(*`_!dUkt`ibsi5ZLRkAv$k=J}1~J|B$x1ZH$||>PXBnG4^L)^0+V8Y0nVZ8SH>a!Zx#mmU=sZ5# zU!3o5*q&RGO28Cs&$u0?s_nurv(NA)oHRDv1k$zSX<3pjX9LU8_H4m{=&VzEe z)}>JtL%)d-Sd0dZ)Rh=moiaM!BNM9v&hzsIUOSY0yOKd6c>dqY*D1DoS_~p;@oWcf zu!|x9J;>9Rq@S?Pbi-q?j*cdN*6N32?_*5$3_pQ_N`&*wYwfC?Z_jbVcKa}M*$E3R zj2PI0%P4ryi@2|kNks|PIj9X3JPoU|6^PjWly>>fyT&+E@6p!5CF~bYki)dI#ZQGB z@0BV}x*@Nrp8cW+chitQdjHeM{*~*wn=ALxyz@B7pYmEtY^8R?mpm6^I;zn#@T z4;_ccq{OSVV`qRE18%5Zu#%3mV$2*m9`*0p`ykzxDq44<`q_l7T+2O@x+P}GZlRL# zq?!ojUIN`N3PmTE(l8e!X6eo0{}|jkJVzEoobY{AKAVOG6K||B^n2ukDF4YrRN{_N zqqF;ggO;Wt2kOY|y+5N+|1T=ay9wb~v9oc3!Klt>&-@h>utFYUbzx$KV7xc!EirQ^ zq)74*qU;*tJ%*9dC+dMFzjS7uBv+)wQTY56QM4 z(4qN~*v(N}Md0|{-)F>>>zYi`?NS3oY|;@J1H{Z{T;t*b?$Id@r047(CY?T;ea@AB z4#JVhmMSgnh{*25z1~2*oNa*iAmB?o%X@ftBi0_d|LLukR{v65yO5=PPYSC_2YPoG zE2oqCKqv+lXp~0WizxrMMjWjjktFKzLl%5yl8y4jXLXE;L$)$kXD=p)5YmP%JB_14 zrxhC~9wq60bM$wkS3dM|Z!ipMZ7VLe8O=*w_>|hvy}Vg$DoC%qsDsT@YF9OCo$5AX zy7C;w^`z1byUDIdwx+ZrsQrivo7ZTL6ao=ry!Pubb|H^`g|r>5SZV{6+^^rL(44v`_R;tJe|#U@@=R^fy_$84RJmZGW>=fU9|oYDR87_?VQdbRR85+0XAxF=Ika&(1wSWxy_mo~S+*siE&C zL3*sni%<|K-V>iw@mqfSn&25L>G9j|$8!W_JrX0QIDWj$c{WvnXN&c?t>?ezuEu4D zdC+8D01KD&39f!cyCFDZ>uDrj-mz>HpI`i27l|ff37#<*9ZnG5@g^R7G3kr%XuQ79)~y=PqgGi$ix*mv2Vv>BUJB_b`zq9CI$S;=-P{1ljIE=y3tA36#<8yo&B$zGX? z!w;!QLorm?L?X{}Uh6*^*JsHEzvqC9!~K<3yak!hcHR!~L`j++Ymi0@cGQgpReat# zspjLK6>IvEbpKBI$o*MabJz^0IRcu}04lsAje6%>TFr+m`zlcrYK=~~@}8Qpc7u6s zJK>NiY3`k^CxbRpJ&vfcaoPF8r~)3=}k zx({2S?+J9D+gsLz#6pHL+dLv!uG(YjbXAP#b3?nZ2pXRz+P2(J+?|q+Tp+I7z3SEr zH`EU}5`{8ki20#$MBD~c6Q&S)YtHA3(Riv2e-gfZb=KiDXdrK0sxskQ0cE~Rdh)Jj zJTmx{#{4GVib%dR;F%7^sMj3v*~=T?Qis4~N4q=6=F6>dLMfsP&S0jDODm@CwHB9u z_VU#`z-74O2Y@{$-n=Qd9Vsy!(Ib3~5|p9EC&Cxk!$y4h$uI6SPFFE?wKF#*cmY$``?{d+`cIEV1V|EC=2b zGF-xT-oU?|SN<(PpA{XaYWBj&7GoYSMv~KChbre+xF?y5{Tc67V^tr2Y;^XTAk(n?9mtdG~lT|)wryWu8|;vc>dN=))H@Jr)oW<8pcsJS>5Lmg(# z%~l2}RJ3O(J-q8784`hrW6?R>2)Ya>P*SI63{*tQN=LAICdrJumd5rkP~b*$;S%uF zT=kRXlC}QDBbNe&zDBwr3azL%$T)) zMdQ&&-t~T)Ltf1cROC)##g5hX-s4Y zc-H9p&xP3DY0c4xd$*BCtEjhLUTRX^qd8YBpB|YMYYNJ?ISVjeU1PqVN%HVx0wQk0 zcw{n?HPn?=k5>h0KQ1C4He?`_?%!zk|E2{3pHfjER3QTT0hGH9Y1 zzp;;hQtnP~WAKQlwEdGI`13v|Hv$idux<<;p@>Y;7}K;}2H{IH_o4glQxpz!)3&#S@{r zu~n8T(b;`@U#vzd%<-~>KOz+$2_o-B8G6!Miqe#J&@2+gkDSDc+6FM^VxD8%jgm`w zuPxxByj?WykqIdy)f{PH=C41t(*g#j-iC8#k~JkjV8kL>raFfX{em4!luqjtZ=W~S_@FfIaKrOs!)H#P} zx?;)QkDf%D;D)prL^N8C&Z{(wzYO`b(^bwrve^4_z0B*l_2&7OR)Bx{ZHIoOy~W0u zeJ(O({v`fTE>5-ikBWY1zwG7f(A0pW{1bKJr6->q9cd=gr53cPUavx)(Q1mw(&rd| zpB+8R7UFxGdBZ4A( za?aQV4isQ0`Qt1rgMCG?#xgP$z zB<9x6gpW!TH$h1^#$QPfbFHrt(`N&hw)ON$p(}A!Rf~5ZF=mkHe*E9X*xPQ7&>i+v z|IvvsAyz!=R8f&~4&!q^oiCD6gp1|6yxNVwzZX@xSXs!K7kpwEDh)RM?wZiu1(9Ao z#2Q7t)P8cois5wglLBT(Fz@#8Rwu&PZ+gG@6)7r+O8j0fkWSnTRgQW0aWb_3Jq6f9 zkg{vDw6t0`!IBM%mqf^+W`kF)=9=U$aeR$6y86%|2v~jYK8lAM=(p<7$t_`h4IlRP z+*4%XkkJUCcDW`GD98^Xk!2@M<<~i@!KWHvF&b;@I1B>liRlDPkZvtRAGW1ryDELdfe5y$6{vGSuJ4( zH`)z5;KqTok4ffO@loEFEKt>^N-z>*bPF3F-Y!rhDlQq=zV>pDXJ?-4(cNglZ?#|x zetQas68Z9V$};u^bP?6gIuTq2c-0xM=Bz)BYjOeTh?f=lfJ-NIUE?tdO8J25>}8VD zNSaf*TZftl_KYY=j^tej?P)QKT1wA~%EWAbC#^3Tq%j-xCP7NpHHbOVM;UdK86$AzwT*JTh;!m*C=Yp0$Jtp)A%8&VLl)cUCk?`{dXk<|*IV;w_qW=skyuGo zJQ2e82oBX|rnovh+4DtLXS_q)G>cx1v1NukPL8pzAG7`UjSpiJ^SUGwnJFSRir>D> z!ApORm%lA;eTFV4324h^C}|enfclGdPhO5RC1qMc8o;7GdXYaYJnH7{*Qv{tdhga+ z<6&XMvgjtgMZ*Ih*DA+b-oX&NJ`d+O`28 zOpuL2owDi;0DhXsGQNgK=gV?APhzpjyB1)%YQB22TS~5JU<@G)HY^Z7NBS|?l7vbg zVWA%pu6L1JtO5a{^BOaDqJdl6M(x&;6X{Eiw7ZH!*k~~O)^o=E7N&aO&AO^WDos5J8-Z}=)Tso z9b(LMM2*QzaWX7C8?dh2L#dI^e+voFz8U>k5v;OKK*m$2nO!|I{7nB`XX90GsB*2g zNHWpqhaBvNl_~NvC5p+3t1wp|jzMnxS zQ62TO1MRUcOYK)M??jlra`1h^G&Jc!ZlU2^dfSDR)}g`pys> z1Jkix%2EjIwnZ{LAkP+uUxw`IwP;`@03zkWt+WDgE!W;91!uAnsF70Tm?`*^ z)(?5B6;iH?dgOIwd!{?zLGRs^Y%K1rpC3z$$%@9r|ELUP)O#fpsVNxg^^a?9RjF92 zQo+SwFbzKzq9HZMd;%kh=7%Afh z&Ab+{6cq=iCO2&zY+qGfh3pHlnlqSQ+L>2-a%IXpPYol|H8>!upg`g|`M|elDzrzGy)ah&N(VA8UKysG_{hNC1+Jx1dC>H*7_ac`Qi1>TyCnhIJj(K42u&)& zACSJED7la47WgZYFo~Z%>oG!Bdv4`b;{!Q!tq^TylF+QZxD+Z7S59sOJg}Ejh#6O= z;mtx>Cp!||P;~T8{zT#uUS|<=myD>&K*%3#tcQ1cr|+Aj?Go&`j5qBfV9)JunD88v zLGxwEdfGkK7CyJ_%a5eTZXn;;&z*N=JIQAQ2cA94bNph_3 zj3>+Zj-$_FM3?F3XNCBxWL#bTr6KGhvX%e}UoW(;tF9v8f#yo;MOYgvbsS;I0t>%n z3oOh(23TSh%KRWZp%)Y0myV*ayHUPQht!E4$(vSw>hkfkWXfRJV6;nY3st6TdMzh; z_WAph+c51k77aa@aYWN*Lhngz;s%(d5XI1AkcP*+_WkGw7i4wK4d+(J68|)NRR9sY z&`NPZU{NRfV~2KW3aSq5WCr%EfE=+nU9rVsXIok?*0Z{C8!H@%CAf-dWpa(G4&S7D6ueRbV~-<#(#Kc$t;OdUIk_5`#lOgy7OFpnh$zA+xCez{7ay^GuRd z#l+z`O^KVinH0iaR}Kj6YQhWboIQU^5|Q~L!Zhv2jOP{$^A^jkL(Vi7|+ibBj; zQuC5N)p*>i@B0iUQT*Qh0tdHL?JwWv8gaA`u-nvlO`o77W758CEs}}@p)*}3PbwA& zzn;^iI4_$??=K>|olE-Sqv0UpiV}~Nv1bzBYGr9wFV)N3%{^)Uez(O?ShGhNhlxi` zVbRD2tpG9A<3p^bD?)-jFgY*RP#;FMz(daQ0C>@9OVBpEf79JqX)hfdSe1nFVJg@0 zMI>(~B*g!G$Ag$CS&Ztr{C2gCLS^9{QwkooT>Kz@HfD82xDB=!9ff?;1ENn z@Pz_LsX^EQICT7WkzN|Tqm!;{KUPJVqBD$^;bqZv>$2E+CJfq7}fD{9;97T ze1uwCT@u`KDzA1OcziGa2xX!ZJPD65uba3*q<_wMZyvYE_4Iaf7xN$7@6jxmcSYu! z(?-(7J*Srf5DyUPG4EOVUK=g(=1IECON{*4`?7gRj1P52u1QCzl0kxXOOB2;?d6qL zD7x)OCBa)`4*Gnv+`G#+E3>*T#)bXOvPxE5RV6e2?KIJZmw<46E&@wDs#x`r=q}%S zP-azNuc>23N{u;|e7VbC=e$CMU*dnNc{c&V&(hF%{RET#s~ciK0 z(8(0qaER4=CO5GNl_#Ab*+%MbI8fy{`u)GcTGBnA$!+oQSk-nPe<6a1TVIU=kYa2-$4y;~ddBk6Z=$k@uC ze3}x~_~l5#j^Oa0*?kFF$+i2_655(HEwbWr<#%E;L8!mUW&pipA6;-X`E&=$jUx*o z6o|UlX}%2u-$?%G78tu0&~bi|=h!T@9|aH~a6s`)^`7M+7S@>@Zyy1uG4tKyYK-&} zX>xA`Prj>&IN>{$VjY2}C61(138JA$qAUH*3G@^sB)m%-C&@Y79(0vH|1b%GFn2-MFu=_^P$?dJ*CEmowj* z&*yKADB8PEySv#nVbf|%BFay<50;YX_t;&GjF|pvDoN6GrY88(JqQrsF-xkk8ez71mssk%ZgtP zj|Ux3Ygb~7mWe!gF|BY2(-wR$Q}L!?l>v=|{_>?_s@Sz6aJ=3A2X=a5F3D^Afc3A_ z6PjDwa6sm=ii)P}>8#9rFu~1qm-;f4s~-|6MvSHN@B{4y8T}Z$PQ(*MlRvf<+qLB?aj=Y^-gJarVAECtHA9d$G`a|ft{Y^= z7=}+|DgZqpoRzi-sx;T>`+2)1k+|t;fh0kQO{W{AVUm+!{OOWeW4Zg*3c+ z{q+<4Z+K>?SYSpuN2?i;-HH1rQls!H*Q#e*aqau3-&9~ytAs2mT>t>2glGIFxD||? z6ehJSk)(bASj-W+w1j)>{fd7r$oOt`oW&eTqMtE%;qIp|`QK$f7K+AO<38q24y9ESLiH)t-$2C-8(O^wy!dN&HRF z#oz4oK?jq1iaeqzTXj8?E(@owl)UZUZ7B9*>{~7HrYEkCdi>?R0KsdU!YYBaANRW7 zV9d?xM0)7-N`GFvW_<@{_-&6#eQ=T_Vf4wcy}!u!9P=)IAt)RZgEeh8iAm7gMRc$m zMr#_dj9-vzTs+(C=CBsD6kK5HE;?(TGVk7xma3!FYtGYsQ2zNp(xAA#8~MBa=yx3Y z#0cg^MRs7_0OYyI8Bz5;gSzhPT5MuHqUKRq>B1_E^hU);os8(lgg{M$#GrH~w2?^-L2qqJ1^G_OQ&enNc{QD&VoQ?{Ro|iite` zh=JlGD?9wVBG7wR!8}X7(|9Q~I5}l7wc5D*^jC3mR5`0x%8+g?`;O4sR24N{Tt3~% zL`pB+HMi7*UNPC0n}MdA!0rw5r$KOFqJqxSE*R2S#4n$tMciz+r3pm1TPn*Ba84=~ zt)1hwxn%!>Xhf|IrK|XEB8px6MYZ0yd)`jjx><(*-s)5!Kw1~=uQS`|s2#o5+h#FR zYqk0Lt%0hfDbL^K#AZJdc>9$L-Fm{ms6_ol#`QD&=2)q7Euh7*<0ip;6Jt^Lp$%{e z@6c|Kko1@HwPP{5`r#F=fOmv6+j?GW(~&QFN+XNvU=wY1E-O2sILx~ZZc-v!thdqR zu#^D%gHi#t%t0KS5~rrAq}Z6k&#Pz9a(+*Z=S>EK@*cIl4IQpKwSN#o{F~F-Y3Wug&x_FAg1qgaPeXk7ejf*|o(;h3du*;BRo?u~PXLF96>`_dwbk>kc z`>Vx+$8fuD!jje`uTUO5<$15W74h+h+gOvm0J&)D>hhWmEuNg<`vhHK(Uu2fFs-J5 zlMOX=dF_5iLKtmy#m=^%WKEvaZW~hG z(7>Pq{YhQtVrh)%BIuHmmJ>2y<-a_ZWQfqJXmY&^#rVPJ+hOc!}<(IP4X#F#twW77o1t||3 z!)B@rzl4oj2SaV)BGB|AEl2+{&x@wUAxNZ!p1s>dS>}ebypfJxt0_SFj(u6j0-ZF; zx%ztwgG{h9mBLlU=v9DJC|k(q5WLfpp&5szsi|MJwOOzUPeVPuSuVaD)c6CwxapRQ z%)&ZO1uDUu%#3j_Yx5lYpw$=^1%>=sZ$`hvAESvghx0@DO0%U;GTzc|>CL@3Ok9b- zs?=`hJ{5XHZ*|7NZ^wBeWMr?$Q{ZrtR5xDW0F^@oa&D|{x9u!XU*dl8y79L~EEP~) z?^iYEZ1^Q4_ri>>e;wLoXzE`L)Y5HVAu34>TaFU?ojeQK5hFKx^>YOeUMjySY^>CI z9QoKxfeUrI|F^768zvZlTs5d|<`q-_(@uxm|yP5myr*&|V zqjYT%fa$u;b{1J!DyCIyA^!IJ?_SKhDE*JNzB?Sw=X+a1v_y1C5G{frM2OzI=smhb zjo$kbB+;Vxx}x{8`m%&5(R*k0&gxcMeh;7T_5Srfm&-q%=a@5d&pG#;nR7-lJ#HZ5 zL-*Hb7N0NXj>Ko9n&?x=9CA z%UF(-mGmf+^!Xr8MZruw^I%R#?Lks)m;IC^=Uc`6T8@jdG`**u&sw6UhV{3r$Tl(r zzQYKg{H-jBb_+AX9zX;MPHgJ$R6=1F$JU*FqknBu*{MYSzQXf zi)E|F{zyVlgnREkrvM}fotzU;n_Fi?qJK4uyyax zqpf;W86I65BJgqkBXRc);;W{&ALUE0MwSKFekj+3Oe!}01yx+*fkRNLlIpQ3D`$-) zuTTBd83n3e=YR6-Wa(}P@lv_hLhQn`?B*Hxb7sD&TG__ zPmiyih6dZtEV`#w-CF0CqlYGzdmGn7mqS^wiN1X2l&^?}eUNWgMvI^{jr8@AAF7o}XXNWTXa;()=xLpZrQ+i>pdjPKEP<10$(c5DP`YAd(yKSgCRG;l&spV75U-8kyu9c}9t-7u{f3IqxngJFG zb*6vq%$n_NcGCXXUCXz@_Vfdo6?GlT9$vvhH&8MR1hloTEH3%I=q;+p;WMCr{M!lQ zJN0radAiy8(&eSjh0(>Q&Y+^lh>1YEhmO z-e~Kxr@TcS@=1B6vL<=%U${^AaQ$x*31WbJQJPg>%`*k#u zL?+g4OJ*u^#d2!m-#y^10`f-R7ydT|N(}UjYAfnphI@YWQWT&}Y@>T3vs;8|NH z5)!y5oB@bb@5Wm_RmYt%^YT|M9+z36I*;fEwnmTk^)B7b1gK`}i}Y_JOf25&Y8X{s zM(k)$9fkEi8(^NU?DkL|6i`Mq>j6Ix9{|G$^Ii+*S*@8|J)P{ZOUz?rDTmKK+J zt>TD`l;iW2h=tJ0wI53xOU{>(ONKW(`)`#a=3shHVRKiJrxQJIdyeZoWfndhbxOd$ zu5Bx}41x}x-u~*UrbRWXGAKmN%`KfxrrCD$b!kO)-q~p&ajc8#>+Kr&Y~0OU5q37x zWnsi%yU*%^=VGsdHK{TpImhUG7Id7^w39MFa&^>+++lBV=`Bc@HSC8L)9nw1*(dt( zpCLu+S0lEeT@ksQu~E67>bTi!f3EtK`w~*S5AJ6AbC;%T6J)Z(*=yH+iiD7q^czG`=lBfI&IZ zGQ~3G7x@PQdP{sk6`n8O&wYq|`a$i_QDDcuY?L(s-#wrCiLkeg3c1Z_Y?yNI5Wy0BGXws13(028s*O{6R1j|sJr&5TNw5;R5;$d$*7)q(z z@GA((3wgiXN)0;f#CKQruC#U#;PX^wdn0(ZmCp8 z7jDg16uF(p|SphveuQP0jNY ze0ut;FJyMU%6Y>G$lLxKmS4H_oi{u*H0W`V1m)9)gEkCA(dn5k<jSa7g%EWB(+YbX5KYERI77Spl|iSof@ z%NTL>%U-+%sOixao;#0KjB^nxm8r)#{A0=)A7k%}A)mEJq&|}mp0D$2KX{Ul{o88k z)ZOMNAuf?Dt#VNH_^OI>t4Z?nN%$)*LBut(kgU-l+2ij&tPRsWzv(I&)4`wc%g4?v z`#t0q+6?ftt9|wHjmZnF-qbxEd`Pl;$)YTYw|y>h5bGH{7)~8nj3ePbZr-7GKvv{FvrLZsJ61L=_I>Q`Srxjx?yha zggf#w>6w`o0~z~B%%??JYdf-Dpw?w}a0gSYvAJvZSl^bf$DRz|Lc?MmzCIVfo{(F$ z2}+$>=(;dCYuC?qf8J9H9}YSVoW79&SHoeom2NchQ9|1{dR@Dol?cr`hETej*cP9q zRr?m#Q#c`fM*FPH{sSCLVoFq^r1(k}&4C=KcqA$foIs>7@7wg;c`J9Dd!2uk*6IhG z!A8hXzwz|^yIs0_R)dnU{VlLa&a2MWs=Z`gSvD`ivOy9KTkqnzcFaLhHshkvzXFy; zK&~#$C?suw^9sl6O$uiLObBxPH|n@x9#+H>QT8_`i?8RaAY<3|5J@vSS{f!0j5bZk z`b3$32nm@Xu;o5zT=?q$*(Ld-=xK|mPoU&p9BbeQw9fgs*Ef7tp|zYO&Q4Y7q5rKf zzg0YM{UYbN1W9P+OAcYF4)(+3wu`HFD~eDr-}cHs^;CS!rw*?x53GBF`Lokv?gOzi z{SDuH1x|_vEymu|`z>H>9UVtfHvG@es<=8xbp>xJGZ8Z%N)kl-)k?6Sa1EEiykb<{ ziAe4uUlDnV?enB~eQ7!aoiGgxZYRh~9bEaJ_XjvsKDwQWGJM7!oU>T}T@zLf;lRdu29x61C9 zx-R82_&Y>2S8qbvo@zO-+I-GDMD{PGrcEzWizn*|AKGuN^@=PfgHKNf@reT$E4V* z3@3)Zo*K-6<_u7y6v_T6X=jdU%o7wWHyDLrmltl*8^|CFMV z>VCsazWzY;G6s_)KN*Lj8g(VKwq_+GV-Dx2YdL?x|@wf`wbF7-89`D|_y2{GX1$O() zjY|CH+JzeH17@EO%Qi4oUs1(YK5sdO*(jj1<#eR8{_wq-++L-)N8+YR$wai#^_QZj z3!^iupGMNSf?1e{LWm7PHONpFt`-rHy_V>y(7D~A@8k}VBcjQk@nmq5qV%chQ5r0V zZPqwT#t9dKxBi|8+<%qT5!3NMBqcgutaVd2i@n=1Ho3ZiSZ9ZB+Ku^elX6?7Q z=;=$>{Zwre0R&%Wti(HK>4k#9Z>n9(^iZbnr5{LE2**vU@IuV!g*msKea`Op+GwwS zJj-jep;@brL&THaV)Qd95p1D$El@4zKh}}f!bTt4&@~_1T)AAtxU&hkK6&Yhf|2`9 zEEIG(toF5_Htn*OOVDUv2YCz5#q1mo|wWQw|C`yR?j)OZ!rS5p)gi3Y!5w4{pMH@fK% za?G+nwJNPr7jP6m_UIEN1aEI0r8`^+7=1NFWkcmNF3!uot&fVAU-86BMAdJT^_9lN z`3$a`Lhu5wz%D2W|EhoGUO>p6*Wi;U4w`93OnSPy#u&_cvQVO~A{&+yIUoP)nsdE6 zsV>zM0!0$Rz{;rOP1Rc#0c37iZo~~1t%qb|? zOG&GX5OLr3Y52a1=K{g{sB-p4;i(uMf|Nr9Vo^mTBtkIRa2sbzk!3F4=KXfZoI)J= zQ8Rb-x*TPOJ42NhEWFr+fEtsgF;Ait*xKKHFYbN)v0mEFN%aYly)jug z8KOjfuC2lv?|B$#pQo$#>M zy*-U5(>#I!5>n=4{z6Jb;dll z7RJ@fS-2m49UQ>7#e?vv8!el2%V)u)`*&Hb7$QB-60D!urj=FAV53PrM3d~+Di%uR z;c>3WxHKAt>cqalCdyYj(D>nh^qc&)@X#jhk2DQo^rg+)B`yt;2m}1qYd#o=sEW^Q z`nFWcouX;Lg<_p*qkZ^s?*((Y7a9pLyGt!b^J-5CX4K#2c$Y<6Dsdc@%wp?CeChIo z-Ao+1tZW>HlXfT!{F!rRGRKTd_jkDY2I3B|3yk6uo7OR&$BaG=8(cem`i<@ZTFLh= zB7R}rp=i@;4J8gWtw$N#BGJ=^Vk>6nPrMb8#)#;@;Ko6rh(b=9LNo5JP5G%Drs|T} zAw6SYlL}Dp)A7@nAI(^Q2j)MY)_7Fe{K#PE4}|-`W(GTJo1XXP0>ccMxkN6dEV>{O zbs$ZXN^jnHBf5)W_Eo#?^VyD$KvSjC#Cx<*477^4J%o}OD{cHT?U8wDlITHJMnQ78 zbjD|&>EoB5v92(o2><-)Kn)&Ho-ne5Uj9pMOD<%VrkepzZHv24xGg06S%T9OdbCVn z!`OPM^7|w2P*u}uf?{S_6-L?7Z0y!!KdwZ7L~EZA?2i(?Oii!sxP*!erp-DT5QMtq zxI%Ak4(cb7Jf8nK#Q8o7?XGW@LlopI#@6%1m^HVy3%)y(aQi+!mjw82VrHM*W7Y%tlT>JwCV;ECSWQ}+#B zFeR#zRD5N5g}#olrj^6w;dFfiEZ+O!~JYmPstZfTBm@|YY; zG#U-9avYy>6SfN>iM(3j#+uP5<#G;AmUrQoJz#3EiY&*9t$7VYE5|ut@ebyZQW{+H)O?E?$mq_ELtJhAqA^qf!Xm9v?UVvld=U0%tGcBu&DpR9Hp7*>0iX#% za1O?O;h1>f4jmWAVkBtd;wG0uytle$uQ=Aw;6$ejr8j5i@+T0SanlfbkV+-~QLZmx z6uY(oi|CsF6;=N&DcO8ki2taED>{I$Z{M2=3uh959UXKc>J!ES+!0(w`HJCxRSNPd zuh|B37$*OszE2AW67%`Ln@q%3d>mYPOcP^i*DA*wP7v*#*=tiP|1HD2x~j8Ip=$Ep zO3?c;GABNpcTtC$eQR%ORwu^(a=3wEK^fxfpkwOWnR%!N3;d_f$SnI8EHu7O9bI4` zZTO2SASY&;)vW>R%QpAa{s*Y#xZLOFyDLs3knh1ZkSTST%V0><1{904ly+u@~oP1f2 zfSTU7Dwi1BFpIy{H#-{gjsVn}*{rzoOKkCd#l9@Koiald8vq!N7j_{d$4)J2$9#cxdG221JSF`iN>u|3O4(+>)Q1LeqE-hxKd!?2zB-$i*@{s;*l%;8V~3 z#$cfq2P1XDA7o3@X-#i+@pYyD$xC#z1sV@_U|@|Cvy77rgC`|qUsdURIm3DwS?CQn zv5Ng+^Fy2K&icr%pbGS<&KI%zgRTrePIeXH+Hev7Bya~*WgY@)ZbN9(>Pwm$X+x%4 zh~<*A7QIcCM*sRH<;vTeT%5hJ;|kUH-F}S%(+nxUW8?_?4#movqTxcW{qTNBH$xQ=%;4I}W;AWpMmxXg zG&pgHhIv%n@JV!Vp(Kw6-4ciA+)ZaC4o3QHGHz)*Qlu^a*)*G@@_PVJWOnC?q8NZX z6UrMHriX6>(nV#>vZEC>31HV6 z*wik>xSX9|fo`ANi@^nIWOoZ8>4h)rL{jV_Xca!8wc&J0E!m4V>dLb$*hoA{@eRaI zBi3X9gt5O%XfIp%Koo zFX>-aYaB1O^jt!Et6l~|^S}fdLf9EbIr6Fmw;P9!-q;E059HWGro&*bw^l3VKUrbi zVO6)IbUfuN18Wq{_jP3sqA)eu?nOx78CF|jhSf$S2G27cSA5Cn?=;*LQGH0r7Hv-I z^sbH>ci6w0Sfmy}DSYoIQ1NP4Cv<=}8&A_e+*+ zFq0TQtwXkPqUa>e38}H8giNs8xWE8Wj9bPN^pU z&G`t_bsZfUp+Ga0h(UBbs2D*fnIO^JRc_7vU9{_u`Xpv3!vDKDh07b{ zT>bL)7llh$Swj1=@%1I%BxY1qpIq=IdAc(fzQvj2w*q!np0mm`v&lwou*im?*P86k z6jV$2+U!o*`(y_aVpOAa+2c1|jn zEoG!^tGnK*YUWeX=`1F_m$LJcIgzEzaNc{`%rSCTpnjDrK3sZTO)Q2@BwZx`AEyEH zI&q&|-#Y7$&Y8dJK19^KS4PWc1bsSK-Rop@u}K#8o|h078L0M%G}_&`*~U|l^RF)j zJ=?_)H*KVumd++)6VX(BRlt5)*hiN#jjpP|+ecl)qE13i#pvZFRuYq{$6H4LT|282 z(Rlmxfd78<_tyCaVt_;`71DO^1cvSJZh#S)l~9>uonuK-lsYijK2Aap>ByS-HFj>6 ztVYsD5!FQEg`GF>O|cmwT;;hF0xlo)x&5y}>srMUJn+qkh|af|YIC+w0&embA0Hm$ z(;k4oY!os}{6WgKypQCo-jZ$GcoyOs8eq~V5tSr_A;Ym}Jnnp86Ptu3-#cJ%xa5?P zD}7IHB+}Hjl4Ph2l8CW;SVm_oa|GuiOE9vm89~cO3gyN(BT-$H#on2-f%MITyXsrC zlBO@|Q}nPIIsC5s{8;M^nz-*L$_Bj1sbOTM29~Hll2w#h_4_N4CUZ{Bwad+!>s~H@ z@~6Zu${tOXT}fcBe6JA zXA|dpXIDsyA-3PjI+eHya{&F6<=DH8iqrPNuj+*l?rh3TU#V7*9kd&8%qpbSpG|c} zQgxLa9dz7H*7W^rO%}gep(|It?iN`xPR=rJdC*-OwD^LD;dP2$L3~0+a5(KF%jkV4(!Lc(e!q+((;%yAh%2W`Jn3j;G zB^CQnciS!z)dG|Derr3RMkI#W?0EE~V7a>0R$qTjvO44&j4( z1LT$dMj1KY_>)|Cg$GGMuL^Nmk&{~rm)3^u5$}+}Vkc?t%)uuIr<$3Aex5`gn+g%c zzQ*%_PjPre&e^J_uZNl(L};fxRTwye&R%WR(q3dpk;pxwBczCmOUF8e#T7nQiV2q{ z4$L>?bu@9W?6fAhn~bdg_&-}(o|YLrW`06zXKU=|8$G4@_$P$+la$A{QUFAoV44Tp zce{L_Dv5z0F1hQHD&P%%>zqV|yp+lr6GC{u3zqxY5OfC#31({n^ebj3*xlA5VWn}6utt`MPgXcU4V%1Lrn-F)L z`A@+5*;&Fw$%~ohd56@ozXUlUBKh^#V+=0S8hlBO7~zSXg63vr0S(@n>7qk69FUoB zrU=@01uZg7-?m0AkWaNmR@%;w@ZL%DCAXz4veI`$B`H3nwse;Y%W0KTJ+EU{r0jzR&_k4k(jxtUYOHrx*JsmGf41_wQnkMd*TskI87?fwITCVKkr}$~CLlJyfjw4OzLWh}X*33!JJa$T~ z;MsRczy9ZY;B%)qP4LbjNZ==)tRdicT$$Sz(vLxejH!;Er4R0?^52lz(NWjV7lAzR zsVsi6+mAY-(ChOCF z7Az$ej?jBg@wAu!cZ=WZ+3fMkO3&ZTdRKACP_>o~*ZVk(FRGkLAA>sw7hMy{3j3Oa zo-i_RLP!LQaWDwSS1`C~_zKSm$oUyxjguypqh=A}BIWG&y;a{68BykarjxH$S%Q%h z!jc3;RK4ng28_i+2#pO*& z+GKa|=j~eJnNk;(2kLoxrL-^foh_Z@QWb?5 zY9yPC&ySMg8*rm_aQ!#l0~pUU4Q!y6DxnJ4H^dt}z36XYS}SU>$taTHPX()gcyagcVOAPwd1 z{IBi;1P+owXqn4pC0t^*j`6WXuqM98*F@Ye?jzCtWZ4IPJ;%XgZ+iXlq*64@or#Qs%_2MzR|SbNV|~WZqEEs)n+_7`8DS{IR!$#bfXB@1+3Ma9QG-$m;yGBm)wjc{&%GB$&|fc;|fK1 zUv5CP4X~9n5jyaV$?e6PI;xOQNW9%ftSpb~i)G+SZL__FyVg3kz2a}F1f&0bR*udVOSX?fc)v$-`T(s}5Hf!bjz6=Xh zD67iWK9F05KfW>f8{@t=Y z=~ul)nHOvMhJQths}i!Q#-e&y*Xhl>px!iuZ*Y6M4ne5Ptsmtr8@FWIk-g@SCbD~@ zJE=O8_T@&7V6}2V9vs z6|*Ykf?xdtJ4Btte7`XVdbw0=)H5WCb~j;zONh0EP$vhrb*^sNs&lPoUz`0GH!XGQMIE}L~6e5B0r9f;c0Ut^ zW5I_Pw8-t3kmF~|%1KxLWQ;x{&wMBmeOmyCBt>kifqQm&?G3!bWe!e%%9nqp($%Q( z@0+A0+NL_E(jkf5@}?Ze%t?PH=&HY$11#3<1<=~X86W%^MlpP1bpv~@|C}^pPj?77 zst_m*mo^*?>?LaP&rH?B2FsX!)QQ-B4vgRS*lNQV=M};q6xy~6i`bhz7}SG*5;}RN zfqg%AA#hyzTul+w)-rGd!z+sL5pw+q$8A-OiK9M!u>-Yn<)l>Q3gs_a?(gDW^hMZ) z2Aszdz^f4IVBuTF3!CT#+dC+ITZOD0EzjB;p{l?&b^ufPJmiDlYUQAFE%abK_cwU4 z@Qmb5ESZndCl8UBN+2=0`8$Wy??Xpn=OsTw-)q}Pkdb>3sCh`Rl0cP&T>tu`uZ=2M z`&#LY@U9eS_9|!d2u!KiT%e{ z|E+`JvtNWo4*ya|z`gB@dC287P{!)-HhX>sGt;FRWHwg+GuIOI@!0+Y_DRdU2bCI0 z+3Z2GvW*vA>StQ4`@r5~Qk8Ljs=~@-z4UC(A{WFhH(xBaw(Qod3UmO>IQgAn&=`MILP_XDvTlX(I zK`;aC$Xi{$#txNqn`kj`gta56WDN#%o7cc_WM|%raNGHVdsZb5)Ge4-Xb`-qDKDLe z%^Et_O*7Pc1I*fhrXTh5c z+s<4FxukQ21z!xFt{6^8ne$^hCj!2Ehu(alO7`GImvt;PACRV=@xkDSu50vp~-%-?4KH~U5zmlCQ%&Tv3qr|ZrNmqqfg@Y<>x$;#XiH! zTg}5*kK~_d$ap zM$e~^1eC|aEx8WLf3oB=`@be6fzS_6aobR#>YZ%!(4{KS8e!Y;e?m;AKfZ2sTB}^R zUOy==zZr~pSuS{4aPceqpOu(4KD`|c27-8pHG47FV*B~0Q#|p)ZqCUxq2|+>?(|&! z8i14};-c{fx0<2JmTPQo_ps|gcIAyyfEsMAksww(<^aTHdsXku)wb8e9{ENa^N!ed zxi4_RN)*NZv^VOF(Jp(W3N4yw*RUMgw`%zx2s=U@i1WrlXlnJ}Y$_Ur2S42nM{Mov_-_=NB%XLq7q*r-M znZUBWxtk7aSE7)SGL6p*&xH#^|AHejN>`}(@E*UlPwyjQKfbXK8Lo2ydh0wG_w;fz zzEndp$EgkH$Dps<77DpPTeFi}?qjy^-fY5#qs!Z9BQuOe&`+kZ;`uQ@(!lek$F?|V zASp#yWkCA^bnmD{|IXUgFw+U8a%(a$MxrL_ZqEOpmjkW~?01qa!QPydc{elj^t@8+ zz9B}UhITEFlXhIUSl;S3TCTJ&&a$VRPg$#%yFIg_i|Hjhe|azT+d8UFi#S?pwoci| zJzbqiVSoNApAme0OsqUb@+8_UFrKb_-$|8HBGvZmS^OYhDKXoIO zCV`-9Ml#lh3*DXPLaW}zgX)q-`!oo;piWPbEeir3L)~livB^LsG5B@Az2O4v>U6$w zVXkVUU&wp=>P)VrD)J=Vzw>&<%b@215se4|#IJxDe<9P~=?j&$aH%2l@^{qj7{KoG z*Ms-W{oBAlk}x&af$N5M!iLYO_xbjlE?WcPt$|9v7hm!^99(P|d9T0da(ucs@4cCu z_!M@1baI0ly*e95?xn(8TAJ+_PMSdgnB}>5c$E@oje6Wk=MidUjhk-qPV=wp8k2U4 z$S}P_(G4zcz801jr0cUpLZ{n)Z=u`eEt)%Dm!sWrqi>Il_*Rc&2E&3^opM7$M%pD; zS|;$RPM*Gu+1jeRe3<-e1**ixv&(A)+rIEZMKQV#5_dViSK?l&=Tpo|PW>%-kC8uw zTH@z?be?ZMCV&ahL~s4*0NMjQ0L2BKyDmk$Cl+vI=m$=Ii7mJr;3`7OIzX-E_M zUe=#sJ;wiDs1OIjg#X`vD#y#-bkK55a`)#x4@83yBGRuZjQYMogfFP544XU-Z_%AF XauR+un*v8vfJ=X+lqAcYuX{C>$illne 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 literal 0 HcmV?d00001 diff --git a/src/content/docs/ispmail-trixie/images/prevent-spoofing-dkim-spoofing-without-dkim.png b/src/content/docs/ispmail-trixie/images/prevent-spoofing-dkim-spoofing-without-dkim.png new file mode 100644 index 0000000000000000000000000000000000000000..362ae23eaa1d75d37480e3fb119d512680710167 GIT binary patch literal 15915 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 literal 0 HcmV?d00001