From d575e646f595765c667107f8758867280b3bf1a6 Mon Sep 17 00:00:00 2001
From: Moritz Bunkus
Als Perl Backend wird das Modul FCGI.pm
verwendet.
Warnung | |
---|---|
FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem strict in der Behandlung von Unicode, und verweigern bestimmte Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrere Installation gibt, muss zwingend Version 0.68 oder - aber Version 0.72 und neuer eingesetzt werden. Mit CPAN lässt sie sich die Vorgängerversion wie folgt + aber Version 0.72 und neuer eingesetzt werden. Mit CPAN lässt sie sich die Vorgängerversion wie folgt installieren: force install M/MS/MSTROUT/FCGI-0.68.tar.gz |
Bevor Sie versuchen, eine kivitendo Installation unter FCGI laufen zu lassen, empfliehlt es sich die Installation ersteinmal unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu diff --git a/doc/html/ch02s06.html b/doc/html/ch02s06.html index 4dd3522b1..8708cfc40 100644 --- a/doc/html/ch02s06.html +++ b/doc/html/ch02s06.html @@ -29,7 +29,7 @@ Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess einzubinden. Da das bei neueren Linux-Distributionen aber nicht zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die - anstelle eines symbolischen Links verwendet werden können.
Danach kann der Task-Server mit dem folgenden Befehl gestartet werden: /etc/init.d/kivitendo-task-server start -
Kopieren Sie die Datei
scripts/boot/upstart/kivitendo-task-server.conf
nach /etc/init/kivitendo-task-server.conf
.
Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
diff --git a/doc/html/ch02s10.html b/doc/html/ch02s10.html
index d050121df..a83033615 100644
--- a/doc/html/ch02s10.html
+++ b/doc/html/ch02s10.html
@@ -1,153 +1,84 @@
Das Drucksystem von kivitendo benutzt von Haus aus LaTeX Vorlagen.
- Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
- einfachsten ist dazu eine texlive
Installation. Unter
- Debianoiden Betriebssystemen installiert man die Pakete mit:
-
aptitude install \ - texlive-base-bin \ -texlive-latex-recommended \ -texlive-fonts-recommended \ -texlive-latex-extra \ -texlive-lang-german \ -texlive-generic-extra -
-
TODO: rpm Pakete.
kivitendo bringt 3 alternative Vorlagensätze mit:
Bei einem neuen Benutzer/Mandanten lässt sich einer dieser Vorlagensätze - als Basis für die zu druckenden Dokumente auswählen:
-
unter: -Administration -> Benutzerverwaltung -> [ein Benutzer] - Erzeuge Vorlagen, Name: [Name für das neue Vorlagenverzeichnis] - Vorlagen auswählen: [Default, f-tex oder RB] - -> Speichern -
-
der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.
Die Abhängigkeiten kann man prüfen mit:
-
/scripts/installation_check.pl -l
-
Der standard Vorlagensatz von Kivitendo. Wie unter - http://demo.kivitendo.org zu sehen.
Ein Vorlagensatz, der in Wenigen Minuten alle Dokumente zur stellt.
./letter_head.pdf
oder etwas Detaillierter:
- Es wird eine Datei sample.lco erstellt und diese nach letter.lco verlinkt. - Eigentlich ist dies die Datei die für die Firmenspezifischen Anpassungen - gedacht ist. Da die Einstiegshürde in LaTeX nicht ganz niedrig ist, wird in - dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle über dieses pdf - die persönlichen Layoutanpassungen vorzunehmen und sample.lco unverändert zu - lassen. Die die Anpassung über eine *.lco Datei die letztlich auf letter.lco - verlinkt ist ist aber auch möglich. +
Das Drucksystem von kivitendo benutzt von Haus aus LaTeX-Vorlagen. Um drucken zu können, braucht der Server ein geeignetes
+ LaTeX System. Am einfachsten ist dazu eine texlive
Installation. Unter Debianoiden Betriebssystemen installiert man
+ die Pakete mit:
+
aptitude install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \ + texlive-latex-extra texlive-lang-german texlive-generic-extra
+
TODO: RPM-Pakete.
kivitendo bringt drei alternative Vorlagensätze mit:
Standard
f-tex
RB
Im Administrationsbereich lässt sich bei einem Benutzer/Mandanten einer dieser Vorlagensätze als Basis für die zu + druckenden Dokumente auswählen. Rufen Sie dazu die
auf.Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge + angeben:
+ Name
: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
+ Bedingungen für Verzeichnisnamen frei gewählt werden.
+ Vorlagen auswählen
: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
+ (Standard
, f-tex
oder RB
.)
Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.
Die Abhängigkeiten kann man prüfen mit:
/scripts/installation_check.pl -l
Der Standard-Vorlagensatz von Kivitendo. Wie unter http://demo.kivitendo.org zu + sehen.
Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur Verfügung stellt.
Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage für alle briefartigen Dokumente verwendet. Also + Angebot, Rechnung, Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber etc..
Leichte Anpassung an das Firmen-Layout durch verwendung eines Hintergrund-PDF. Dieses kann leicht mit dem + eigenen Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp, Adobe*)
Hintergrund-PDF umschaltbar auf "nur erste Seite" (Standard) oder "alle Seiten" (Option
+ "bgPdfFirstPageOnly
" in Datei letter.lco
)
Hintergrund-PDF für Ausdruck auf bereits bedrucktem Briefpapier abschaltbar. Es wird dann nur bei per E-Mail
+ versendeten Dokumenten eingebunden (Option "bgPdfEmailOnly
" in Datei
+ letter.lco
).
Nutzung der Layout-Funktionen von LaTeX für Seitenumbruch, Wiederholung von Kopfzeilen, Zwischensummen + etc. (danke an Kai-Martin Knaak für die Vorarbeit)
Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom Land des eigenen Unternehmens abweicht (also die + Rechnung das Land verlässt).
Multisprachfähig leicht um weitere Sprachen zu erweitern, alle Ãbersetzungen in der Datei
+ translatinos.tex
.
Auflistung von Bruttopreisen für Endverbraucher.
Vorlagenverzeichnis mit Option f-tex anlegen, siehe: Vorlagenverzeichnis anlegen. Das + Vorlagensystem funktioniert jetzt schon, hat allerdings noch einen Beispiel-Briefkopf.
Erstelle eine pdf-Hintergrund Datei und verlinke sie nach ./letter_head.pdf
.
Editiere den Bereich "settings
" in der datei letter.lco
.
oder etwas Detaillierter:
+ Es wird eine Datei sample.lco
erstellt und diese nach letter.lco
verlinkt. Eigentlich
+ ist dies die Datei die für die Firmenspezifischen Anpassungen gedacht ist. Da die Einstiegshürde in LaTeX nicht ganz niedrig
+ ist, wird in dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle über dieses PDF die persönlichen Layoutanpassungen
+ vorzunehmen und sample.lco
unverändert zu lassen. Die die Anpassung über eine
+ *.lco
-Datei die letztlich auf letter.lco
verlinkt ist ist aber auch möglich.
- Es wird eine Datei sample_head.pdf mit ausgeliefert, diese wird nach
- letter_head.pdf verlinkt. Damit gibt es schon mal eine Funktionsfähige
- Vorlage. Schau Dir nach Abschluss der Installation die Datei sample_haed.pdf
- an und erstelle ein entsprechendes pdf passend zum Briefkopf Deiner Firma,
- diese dann im Template Verzeichniss ablegen und statt sample_head.pdf nach
- letter_head.pdf verlinken.
+ Es wird eine Datei sample_head.pdf
mit ausgeliefert, diese wird nach letter_head.pdf
+ verlinkt. Damit gibt es schon mal eine Funktionsfähige Vorlage. Schau Dir nach Abschluss der Installation die Datei
+ sample_haed.pdf
an und erstelle ein entsprechendes PDF passend zum Briefkopf Deiner Firma, diese dann im
+ Template Verzeichniss ablegen und statt sample_head.pdf
nach letter_head.pdf
+ verlinken.
- letzlich muss ./letter_head.pdf auf das passende Hintergrundpdf verweisen,
- welches gewünschten Briefkopf enthält. Bei Updates oder nach erneutem
+ letzlich muss letter_head.pdf
auf das passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
+ enthält. Bei Updates oder nach erneutem
- Es wird eine Datei mydata.tex.example ausgeliefert die nach mytdata.tex
- verlinkt ist. Bei verwendetem Hintergrundpdf wird nur der Eintrag für das
- Land verwendet die Datei muss also nicht angefasst werden. Die Anderen Werte
- sind für das Modul lp (Label Print in erp - zur Zeit nicht im
- öffentlichen Zweig).
+ Es wird eine Datei mydata.tex.example
ausgeliefert, die nach mytdata.tex
verlinkt
+ ist. Bei verwendetem Hintergrund-PDF wird nur der Eintrag für das Land verwendet. Die Datei muss also nicht angefasst
+ werden. Die Anderen Werte sind für das Modul 'lp' (Label Print in erp - zur Zeit nicht im öffentlichen Zweig).
- Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
- sollten über die Hintergrund pdf datei oder die *.lco Datei erfolgen.
+ Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc. sollten über die Hintergrund-PDF-Datei oder die
+ *.lco
-Datei erfolgen.
- Das Konzept von kivitendo sieht vor, für jedes Dokument - (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine - Latex-Vorlage vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch - das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur - bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus - dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle - Briefartigen Dokumente mit Artikel-Tabellen eine einheitliche - Latexvorlage verwendet, welche über Codeweichen die Besonderheiten - der jeweiligen Dokumente Berücksichtigt -
Nachteil:
- Latex hat ohnehin eine sehr steile Lehrnkurve. Die Datei letter.tex - ist sehr komplex und verstärkt damit diesen Effekt noch einmal erheblich. - Wer Latex-Erfahrung hat, oder geübt ist Scriptsparachen nachzuvollziehen kann - natürlich auch innerhalb der Tabellendarstellung gut persönliche Anpassungen - vornehmen. Aber man kann sich hier bei Veränderungen sehr schnell häftig in - den Fuss schiessen. -
Wer nicht so tief in die Materie einsteigen will oder leicht zu - frustrieren ist, sollte sein Hintergrund PDF auf Basis der mitglieferten - Datei sample_head.pdf erstellen, und sich an der Form der dargestellten Tabellen - wie sie ausgeliefert werden, erfreuen. -
Kleiner Tipp: - Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche - Schritte gehen. -
Bruttopreise für Endvorbraucher
Der auszuweisende Bruttopreis wird innerhalb der LaTeX - Umgebung berechnet. es gibt zwar ein Feld um bei Aufträgen "alle Preise - Brutto" auszuwählen, aber:
- Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder - Nettorechnung wird mit den Zahlarten verknüpft. Zahlarten bei denen - Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen enden mit "_E" - (für Endverbraucher) Falls identische Zahlarten für Gewerbekunden und - Endverbraucher vorhanden sind legt man diese einfach doppelt an (einmal mit - der Namensendung "_E"). Gewinn:
Lieferadressen
In den allermeisten Installationen sollte drucken jetzt schon + Das Konzept von kivitendo sieht vor, für jedes Dokument (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine LaTeX-Vorlage + vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur + bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle + briefartigen Dokumente mit Artikel-Tabellen eine einheitliche LaTeX-Vorlage verwendet, welche über Codeweichen die + Besonderheiten der jeweiligen Dokumente Berücksichtigt. +
Tabellen mit oder ohne Preis
Sprache der Tabellenüberschriften etc.
Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus Angebotsnummer)
Darstellung von Brutto oder Netto-Preisen in der Auflistung (Endverbraucher versus Gewerblicher + Kunde)
Nachteil:
+ LaTeX hat ohnehin eine sehr steile Lehrnkurve. Die Datei letter.tex
ist sehr komplex und verstärkt damit
+ diesen Effekt noch einmal erheblich. Wer LaTeX-Erfahrung hat, oder geübt ist Scriptsparachen nachzuvollziehen kann natürlich
+ auch innerhalb der Tabellendarstellung gut persönliche Anpassungen vornehmen. Aber man kann sich hier bei Veränderungen sehr
+ schnell häftig in den Fuss schiessen.
+
Wer nicht so tief in die Materie einsteigen will oder leicht zu frustrieren ist, sollte sein Hintergrund PDF auf Basis der
+ mitglieferten Datei sample_head.pdf
erstellen, und sich an der Form der dargestellten Tabellen wie sie
+ ausgeliefert werden, erfreuen.
+
Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche Schritte gehen.
Der auszuweisende Bruttopreis wird innerhalb der LaTeX-Umgebung berechnet. Es gibt zwar ein Feld, um bei Aufträgen "alle + Preise Brutto" auszuwählen, aber:
hierfür müssen die Preise auch in Brutto in der Datenbank stehen (ja - das lässt sich über die Preisgruppen und die + Zuordung einer Default-Preisgruppe handhaben)
man darf beim Anlegen des Vorgangs nicht vergessen Dieses Häkchen zu setzen. (das ist in der Praxis wenn man sowohl + Endverbraucher- wie Gewerbekunden beliefert der eigentliche Knackpunkt)
+ Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder Nettorechnung wird mit den Zahlarten + verknüpft. Zahlarten bei denen Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen, enden mit "_E" (für + Endverbraucher). Falls identische Zahlarten für Gewerbekunden und Endverbraucher vorhanden sind, legt man diese einfach doppelt + an (einmal mit der Namensendung "_E"). Gewinn:
Die Entscheidung, ob Netopreise ausgewiesen werden, ist nicht mehr fix mit einer Preisliste Verbunden.
Die Default-Zahlart kann im Kundendatensatz hinterlegt werden, und man muss nicht mehr daran denken, "alle Preise + Netto" auszuwählen.
Die Entscheidung, ob Netto- oder Bruttopreise ausgewiesen werden, kann direkt beim Drucken reviediert werden, + ohne dass sich der Auftragswert ändert.
In Lieferscheinen kommen shipto*
-Variablen im Adressfeld zum Einsatz. Wenn die
+ shipto*
-Variable leer ist, wird die entsprechende Adressvariable eingesetzt. Wenn also die Lieferadresse in
+ StraÃe, Hausnummer und Ort abweicht, müssen auch nur diese Felder in der Lieferadresse ausgefüllt werden. Für den Firmenname wird
+ der Wert der Hauptadresse angezeigt.
+
In den allermeisten Installationen sollte drucken jetzt schon funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum Beispiel:
! LaTeX Error: File `eurosym.sty' not found. Die entsprechende LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei Vorlagen aus der Community auf. Installieren Sie die entsprechenden - Pakete.
! Package inputenc Error: Unicode char \u8:æ¡ not set up for + Pakete.
! Package inputenc Error: Unicode char \u8:... set up for
use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
einer Standardinstallation exotische utf8 Zeichen zu drucken.
TeXLive unterstützt von Haus nur romanische Schriften und muss mit
diff --git a/doc/html/ch03s02.html b/doc/html/ch03s02.html
index 91679b177..e8b2f81d1 100644
--- a/doc/html/ch03s02.html
+++ b/doc/html/ch03s02.html
@@ -556,7 +556,7 @@
invdate
Rechnungsdatum
invnumber
- Rechnungsnummer
Die Variablen in anderen Vorlagen sind ähnlich wie in der
Rechnung. Allerdings heiÃen die Variablen, die mit
inv
beginnen, jetzt anders. Bei den Angeboten
fangen sie mit quo
für "quotation" an:
@@ -660,7 +660,15 @@
...
<%end%>
Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
und dem "end" werden nur ausgegeben, wenn die Variable
- variablenname
gesetzt und ungleich 0 ist.
Die Bedingung kann auch negiert werden, indem das Wort
+ variablenname
gesetzt und ungleich 0 ist.
Handelt es sich bei der benannten Variable um ein Array, also um einen Variablennamen, über den man mit + <%foreach variablenname%> iteriert, so wird mit diesem Konstrukt darauf getestet, ob das Array Elemente + enthält. Somit würde im folgenden Beispiel nur dann eine Liste von Zahlungseingängen samt ihrer Ãberschrift "Zahlungseingänge" + ausgegeben, wenn tatsächlich welche getätigt wurden:
<%if payment%> +Zahlungseingänge: + <%foreach payment%> + Am <%paymentdate%>: <%payment%> ⬠+ <%end foreach%> +<%end if%>
Die Bedingung kann auch negiert werden, indem das Wort
not
nach dem if
verwendet
wird. Beispiel:
<%if not cp_greeting%> ... diff --git a/doc/html/ch04.html b/doc/html/ch04.html index fd72356c9..6f4616f0d 100644 --- a/doc/html/ch04.html +++ b/doc/html/ch04.html @@ -1,6 +1,6 @@ -Kapitel 4. Entwicklerdokumentation Globale Variablen liegen in einem speziellen namespace namens +
Kapitel 4. Entwicklerdokumentation Globale Variablen liegen in einem speziellen namespace namens "main", der von überall erreichbar ist. Darüber hinaus sind bareword globs global und die meisten speziellen Variablen sind... speziell.
Daraus ergeben sich folgende Formen:
- @@ -25,7 +25,7 @@
$PACKAGE::form
.local $form
Alle Ãnderungen an
$form
werden am Ende - des scopes zurückgesetztDas erste Problem ist FCGIâ¢.
SQL-Ledger⢠hat fast alles im globalen namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist. Unter FCGI⢠müssen diese Sachen aber wieder @@ -39,7 +39,7 @@ dies hat, seit der Einführung, u.a. schon so manche langwierige Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package angegeben werden, werden die nicht geprüft, und somit kann sich - schnell ein Tippfehler einschleichen.
Um dieses Problem im Griff zu halten gibt es einige wenige + schnell ein Tippfehler einschleichen.
Um dieses Problem im Griff zu halten gibt es einige wenige globale Variablen, die kanonisch sind, d.h. sie haben bestimmte vorgegebenen Eigenschaften, und alles andere sollte anderweitig umhergereicht werden.
Diese Variablen sind im Moment die folgenden neun:
@@ -62,7 +62,7 @@
$::request
Damit diese nicht erneut als Müllhalde missbraucht werden, im Folgenden eine kurze Erläuterung der bestimmten vorgegebenen - Eigenschaften (Konventionen):
Ist ein Objekt der Klasse + Eigenschaften (Konventionen):
Ist ein Objekt der Klasse "
Form
"Wird nach jedem Request gelöscht
Muss auch in Tests und Konsolenscripts vorhanden sein.
Enthält am Anfang eines Requests die Requestparameter vom User
Kann zwar intern über Requestgrenzen ein Datenbankhandle @@ -110,7 +110,7 @@ push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"}; push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"}; # ... -}
Das einzige Hash unter den globalen Variablen
Wird spätestens benötigt wenn auf die Datenbank +}
Das einzige Hash unter den globalen Variablen
Wird spätestens benötigt wenn auf die Datenbank zugegriffen wird
Wird bei jedem Request neu erstellt.
Enthält die Userdaten des aktuellen Logins
Sollte nicht ohne Filterung irgendwo gedumpt werden oder extern serialisiert werden, weil da auch der Datenbankzugriff für diesen user drinsteht.
Enthält unter anderem Listenbegrenzung vclimit, @@ -122,10 +122,10 @@ überwiegend die Daten, die sich unter
-> befinden, bzw. die Informationen über den Benutzer die über die - Administrator-Schnittstelle (admin.pl) eingegeben wurden.\ No newline at end of file diff --git a/doc/html/ch04s05.html b/doc/html/ch04s05.html index 87fee7702..638a83576 100644 --- a/doc/html/ch04s05.html +++ b/doc/html/ch04s05.html @@ -3,7 +3,10 @@
Objekt der Klasse "Locale"
Wird pro Request erstellt
Muss auch für Tests und Scripte immer verfügbar + Administrator-Schnittstelle (admin.pl) eingegeben wurden.
Objekt der Klasse "Locale"
Wird pro Request erstellt
Muss auch für Tests und Scripte immer verfügbar sein.
Cached intern über Requestgrenzen hinweg benutzte Locales
Lokalisierung für den aktuellen User. Alle Ãbersetzungen, - Zahlen- und Datumsformatierungen laufen über dieses Objekt.
Objekt der Klasse "LXDebug"
Wird global gecached
Muss immer verfügbar sein, in nahezu allen + Zahlen- und Datumsformatierungen laufen über dieses Objekt.
Objekt der Klasse "LXDebug"
Wird global gecached
Muss immer verfügbar sein, in nahezu allen Funktionen
$::lxdebug
stellt Debuggingfunktionen bereit, wie "enter_sub
" und @@ -135,12 +135,12 @@ "message
" und "dump
" mit denen man flott Informationen ins Log (tmp/kivitendo-debug.log) packen kann.Beispielsweise so:
$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig)); -$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});
Objekt der Klasse "SL::Auth"
Wird global gecached
Hat eine permanente DB Verbindung zur Authdatenbank
Wird nach jedem Request resettet.
+$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});
Objekt der Klasse "SL::Auth"
Wird global gecached
Hat eine permanente DB Verbindung zur Authdatenbank
Wird nach jedem Request resettet.
$::auth
stellt Funktionen bereit um die Rechte des aktuellen Users abzufragen. Obwohl diese Informationen vom aktuellen User abhängen wird das Objekt aus Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem - Request kurz resettet.
Objekt der Klasse + Request kurz resettet.
Objekt der Klasse "
SL::LxOfficeConf
"Global gecached
Repräsentation der
config/kivitendo.conf[.default]
-DateienGlobale Konfiguration. Configdateien werden zum Start gelesen und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass @@ -150,16 +150,16 @@ $main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{ file = /tmp/kivitendo-debug.log
ist der Key
file
im Programm als$::lx_office_conf->{debug}{file}
erreichbar.
Warnung Zugriff auf die Konfiguration erfolgt im Moment über - Hashkeys, sind also nicht gegen Tippfehler abgesichert.
Objekt der Klasse + Hashkeys, sind also nicht gegen Tippfehler abgesichert.
Objekt der Klasse "
SL::InstanceConfiguration
"wird pro Request neu erstellt
Funktioniert wie
$::lx_office_conf
, speichert aber Daten die von der Instanz abhängig sind. Eine Instanz ist hier eine Mandantendatenbank. Beispielsweise überprüft$::instance_conf->get_inventory_system eq 'perpetual'- ob die berüchtigte Bestandsmethode zur Anwendung kommt.
Objekt der Klasse + ob die berüchtigte Bestandsmethode zur Anwendung kommt.
Objekt der Klasse "
SL::Dispatcher
"wird pro Serverprozess erstellt.
enthält Informationen über die technische Verbindung zum Server
Der dritte Punkt ist auch der einzige Grund warum das Objekt global gespeichert wird. Wird vermutlich irgendwann in einem anderen - Objekt untergebracht.
Hashref (evtl später Objekt)
Wird pro Request neu initialisiert.
Keine Unterstruktur garantiert.
+ Objekt untergebracht.
Hashref (evtl später Objekt)
Wird pro Request neu initialisiert.
Keine Unterstruktur garantiert.
$::request
ist ein generischer Platz um Daten "für den aktuellen Request" abzulegen. Sollte nicht für action at a distance benutzt werden, sondern um lokales memoizing zu @@ -172,20 +172,20 @@ file = /tmp/kivitendo-debug.logist der Key
file
$::request
Muss ich von anderen Teilen des Programms lesend drauf zugreifen? Dann
$::request
, aber Zugriff über - WrappermethodeDie folgenden Variablen waren einmal im Programm, und wurden - entfernt.
Die folgenden Variablen waren einmal im Programm, und wurden + entfernt.
war nötig, weil cookie Methoden nicht als Klassenfunktionen funktionieren
Aufruf als Klasse erzeugt Dummyobjekt was im Klassennamespace gehalten wird und über Requestgrenzen leaked
liegt jetzt unter
$::request->{cgi}
-
war nötig, weil einige Funktionen in Schleifen zum Teil ein paar hundert mal pro Request eine Liste der Einheiten brauchen, und de als Parameter durch einen Riesenstack von Funktionen geschleift werden müssten.
Liegt jetzt unter
$::request->{cache}{all_units}
Wird nur in
AM->retrieve_all_units()
gesetzt oder - gelesen.4.5. Die kivitendo-Test-Suite kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul
Test::More
.Die grundlegenden Fakten sind:
Alle Tests liegen im Unterverzeichnis
t/
.Ein Script (bzw. ein Test) in
f/
enthält einen oder mehrere Testfälle.Alle Dateinamen von Tests enden auf
.t
. Es sind selbstständig ausführbare Perl-Scripte.Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in
f/
, deren Dateiname auf.t
endet.Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:
Test::Deep
(Debian-Paketname:libtest-deep-perl
; Fedora Core: -perl-Test-Deep
; openSuSE:perl-Test-Deep
)4.5.3. +
perl-Test-Deep
; openSuSE:perl-Test-Deep
)+
Test::Harness
3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der + Perl-Distribution und kann für frühere Versionen aus dem CPAN bezogen + werden.Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript
t/test.sh
.Will man die komplette Test-Suite ausführen, so muss man einfach nur
-t/test.sh
ohne weitere Parameter aus diff --git a/doc/html/index.html b/doc/html/index.html index f9ac994c3..9b8060127 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -1,9 +1,9 @@kivitendo: Installation, Konfiguration, Entwicklung Inhaltsverzeichnis
- 1. Aktuelle Hinweise
- 2. Installation und Grundkonfiguration
- 2.1. Benötigte Software und Pakete
- 2.2. Manuelle Installation des Programmpaketes
- 2.3. kivitendo-Konfigurationsdatei
- 2.4. Anpassung der PostgreSQL-Konfiguration
- 2.5. Webserver-Konfiguration
- 2.6. Der Task-Server
- 2.7. Benutzerauthentifizierung und Administratorpasswort
- 2.8. Benutzer- und Gruppenverwaltung
- 2.9. E-Mail-Versand aus kivitendo heraus
- 2.10. Drucken mit kivitendo
- 2.11. OpenDocument-Vorlagen
- 2.12. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: +
kivitendo: Installation, Konfiguration, Entwicklung Inhaltsverzeichnis
- 1. Aktuelle Hinweise
- 2. Installation und Grundkonfiguration
- 2.1. Benötigte Software und Pakete
- 2.2. Manuelle Installation des Programmpaketes
- 2.3. kivitendo-Konfigurationsdatei
- 2.4. Anpassung der PostgreSQL-Konfiguration
- 2.5. Webserver-Konfiguration
- 2.6. Der Task-Server
- 2.7. Benutzerauthentifizierung und Administratorpasswort
- 2.8. Benutzer- und Gruppenverwaltung
- 2.9. E-Mail-Versand aus kivitendo heraus
- 2.10. Drucken mit kivitendo
- 2.11. OpenDocument-Vorlagen
- 2.12. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR
- 2.13. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb
- 2.14. Einstellungen pro Mandant
- 2.15. kivitendo ERP verwenden
- 3. Features und Funktionen
- 3.1. Wiederkehrende Rechnungen
- 3.2. Dokumentenvorlagen und verfügbare Variablen
- 3.2.1. Einführung
- 3.2.2. Variablen ausgeben
- 3.2.3. Verwendung in Druckbefehlen
- 3.2.4. Anfang und Ende der Tags verändern
- 3.2.5. Zuordnung von den Dateinamen zu den Funktionen
- 3.2.6. Sprache, Drucker und E-Mail
- 3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden sind
- 3.2.8. Variablen in Rechnungen
- 3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren
- 3.2.10. Variablen in anderen Vorlagen
- 3.2.11. Blöcke, bedingte Anweisungen und Schleifen
- 3.2.12. Markup-Code zur Textformatierung innerhalb von - Formularen
- 3.3. Excel-Vorlagen
- 4. Entwicklerdokumentation
- 4. Entwicklerdokumentation
- 4.1. Globale Variablen
- 4.2. Entwicklung unter FastCGI
- 4.3. SQL-Upgradedateien
- 4.4. Translations and languages
- 4.5. Die kivitendo-Test-Suite
- 4.5.1. Einführung
- 4.5.2. Voraussetzungen
- 4.5.3. Existierende Tests ausführen
- 4.5.4. Bedeutung der verschiedenen Test-Scripte diff --git a/doc/kivitendo-Dokumentation.pdf b/doc/kivitendo-Dokumentation.pdf index a62317368cc05fca9670e4226c774ee1e11d7534..f945716e20e23dcc38a5752eb5b13b94cc469628 100644 GIT binary patch delta 167073 zcmZshRahO(wyuHT?(Xi+#34X%clY4#8X9+>XmEFT55a@Gd$8aT+|Iw(+H0M2ajyCq zUG`O9RF8Mm7c)rHzetlf0t4dV;{+v57yvrzN2DX$Zc6ti)D-sce&HpbA(Ajk1Cdt? z(UTz{G0CZsA3kf;7nYBzK{G__)a!*WMA4&0?`@%|L8s_d@BN(pl3R9nf4{Z9eo1!Z zpS%6?(sT3{_uzvHQ5>jH%Z{f7`I$aBlIpdGpuy!D`3xculGG$n7=qZ*u~l0~haE^{ znn|A=O%)6RW~;Iw)Vk|9aQuQklq)yv8=xWR6{ecJUkz%rV}566vW;o2&>bkqPpPoS zs@3ZReCD^K=ko}!5q+7cFAMe&$55V1a-BLv@Ikyty$u&)FrJE}Oy3iN6g8e&KCsVb zz(M@|Duu!H+wC`hz6@el=(HlZDF?`w-5Z5(%|3z%q$&yMA2Y5GH6~Z39-8{aijAZ; zPmSzW3p21a6gC9Eb7XZxgK3E$k=2iJi+{#!3X;}<|DiCIC#kxSM#0ty?uh|o&G!$# z$B4fz5A`ufI$0e{J|5+Y{e2g;2M*E~At3DJjIvmOmE
9fvNc6nt2Z}xqU_%>-$orXODTg23>C(j6 zRBR^Y2#OfDV*d~t{NTH)n>HosSKf_zqV)OF?Eee8P{XH7QYh$4B8?gRmye355B4+V z@0oTT<#A+?EVHoX2Bna{kAQ%{LQKfydi`Fgx2-l4e{PkHZv3~|%#IJ{<8807aqI*G zu|G$Ao?oa#m~f6Js~Ku(K7WEzf#uFe_#2494yUjKksU;I1>I{x3J;S+j>-&ckO&+4 z8TqE4vz`z;M6Dj?3}P`Kl{?sS1`#zx$r(8t_UH$VGt36WLm+Z&U>RV7*$p+14sA-o z`6Y~-;@c>6V=yr}E;rsySa1P6J*r%=8U+S*Selq!fm%6nW%!>0%VYgxdUwK32o!Oz zd X1=grOHmsy1hl)Z95hDan z*j}Nl3X@8f%3}FjIjRQRA3|Gro~Y+Y+9Hn`Eo*Ieask|&=qYKuBBmL|W6!_3e^LIz zKjXlL6qrx2Ph~(T5Yv)0VK*T(A RMRdYp2h *nD(=zo)#4RC z;CsFtJ5@UtCBjMQVyK)r(=PL_$SzEh3^#Qr`al%a9-|q}HTt!XOXOqP7Yg0vm15}R zl;+Il1ovq7h`+&r0&P~Z@YwZN1Rt)BO#krL#8;`P%CAM(<%8;a6&ghg1@4+BnVd$e zUsmOP8g4KT5D%z+rKi$qTrrk1+T+CkLQEx0En;lbDAlN_yss>%6kk-VgwtRvk5{e7 zR*z;2lV&J9E6FZER>!EsNL4&gTUH~gu&SWqMxKntm60z4Qs;ULP-bWs>1~@93l|X= zY!~9I#*X1PQ%Gf|i_>S(=AGuYD^4r@DsC5fE88lKHG!Ifn%#>2W%^m``SyZqC2+w> zRc1klW|R7D5U$*~8j}H&v0dAeZViIN_tq?scGs7e`g=nXoe?!UajS|cqnv;o218*( zVAFn+agz(^#PW3)R_<}{IrpXeJA7C1>~;t9ynd(rN7S^OqZ>anR!)k|eD3oI`H#=G zDo*Ss><-qJ_!jNM^^;dY82ynJDQ3-^ 3!Z^coW; zI;NmS)+#Z(=9ZY2(a!#7T=3vuvqKL33<;2XmPr;5C|(6)BJ8qn<4Jl<^A z+-0TQkZ095+`Im+4JQv*D-kzvr~6wsph;`$&-Xk3) !njvHF(P8qX;`m372mt5cvu&H%0JeQ(%(+*xo31RAkN z1(f!)O}!+%;{AHM>{-nn=Qf1hEJ$HVi4$NGq;sWmg{EnzRoRg0-0MP&rn}F(hqlhQ z>Q-yd4$jm?A`|+QqoxDdhIoIqtvwXv6&M4R#xdK)eMKK?AL@|Df%$ Mri?_V*M&FXIMZx7q PCC+tk;r}ak%pMEa3zhv@L>Wylv5-}gu9?V_;gD*W%`)yXxtheq zfQrd`Al?z<+C|O%G_BFMV9==~kiyGbM|-Il;QpQjwFspu1{7HA4*#5`36SqKiq`vO zxYjgbviiqDV!S79xh_zPy6#xlrn%AjV3hGg^F LBI>(}? z$=y8#7|J)OHMBo2`L^A85UCJB6TyO})^u8~%@OK;n^hRvNS?eXZYbjQHGWjyR4Hev zgV0j=Q_r`8S1H$A-Ks{G-VQ1c
8qpQT)+Xu@iH zY7%HWRQMX_XniXh?kcU(D)R))&rc1z4Yj@eE*xv-YnW>M+NA4`JbQp|(jhhyLq-!@ z-8~6JMMN*XmftoviWfE3{+i}l=h*{;?^~8fhlig8;C|`t;M$Bo_J@XO_g+7hR;8}$ zZA&>Z2}7gGq6t5NPS`LQo%wO-XFtrha#=dD{BP!Y!z-aI9u7F`NR?r-VWRm)6Q{ z`d%*&pzTXROXupt_O WNQAOVv9?Bl5BooFGn56Ecvqp%A q?E&yJ!8I zK3Gm2w!1RCisqj#8!nkdb^MRt@&8`G)9sci_d$;B{oQMlM*0Z}2NK}n6W|0jp`!@> zHvp@n2K~2T9n}d6lCw!3W10|~mz9T`mz;x}gO!(ylN`hYVg+%g_ZLCaf;X87zz)pF z=}gS9$P`{)UaaQMrjD#mu2u|)Z0h7}nrgD-A|i+uj$fV3Y!SKA8)PBbNH{oo{~6Co z&dJHa%Ed>{!NbMM#rsdl#m>qNO5eqWq)qQfhs1;AN{1wXVM~8!frU%2+k-)XVP|FM z1*LcI!7%@8-TsQ@h}$p% z@{DKMV2dFfuPw3IaWisrFfc!}V>=|n4WPBQFfnBq>PKS|Jl#>OYJR;w&RmTngQjl8 zn} NBz8V z<;b;dZ$unQ%tz#S(U{$V-*QWmofU4A68{9Kq3}Kocx|%}r}hay8eaf!g0*j#j!!Ym z1#er%StTUkcPFH8XRgz9A4io(>K6lT?8Dv7yS2Rciw^^nd7u{{OMFeOA?fr434DJV zELE>#cRp%s7cVh(kO?%#5*pzQF0_p+41vR94!lzBmsBR{XKOG3j=`Mz?Xh*IdcE3M zfJZ46Qr>UQxfdVx1w;kqK$l@fl5T;!VU2Xb$L5H=iM44zb-{R4WokCSJFedUWA$hV zBW!AUg{phlY8J>Gvlb7$efHaBK#vz%7Xy&6Cuu&1g5Y5x$&cGn%Fplu(TRsq92Rec zCdLxw;a*3XA&Z%yVxiYs<-4eJ3`;rYLOJ09*k=YxEY!~}RQu`-FJ727o2i%3FhVo< zbHu~3w^TKsjn6*aa 5p2z!+id{>UPN1zWgF^ppCk=YySZ>hzcL$K^tfKK4_X$2m4NA}ON)+5@yE)&`Y z+Pu7`3wR%N%%m~w6Sa%*c?C>AjS 5r;tOfVr*Sj^z&_B;XgJ8~Q zS_eH^y#Ri(^?^B~i~jq!x`pwV*R$xWU5u%YXapS>PtIxeo8@8}dk*5t>` zNpRGaaON9C%wDDfP@C4s$8zf17MTW8M)|k I&HOems( zkbtP^!3S34dF_y;hEy9AiSc1}Qaf~aN|CTAJ}G%}A<1u*u!X^cGpN;i5Hl(hc``y7 zO>!_&lCj-i&Nw_zEZ(uJ?rEgIgI7ixWwEavrY^`%B<>1bQCBAtw^M4)elVG${$iWL z;DVV#{InAhjrPg5rm-UBfH=Pf5^oK|JQL6#BHCmmm0+L%)8a)5$#^!4;Ayn)7nSEb zu~g2WN2$^v5ThK9&3 Ub ZB6W|kR3v$%XEa7XoPlO06? zXBHGe|JTJ@OaepWBolYfEye=z1qKBa1&OI~0oqzoMzAyvG!D{FH}Uz7;?sxU9D@zb zobUq2)ltO`8pdpVbDTI|sBBo9F-rh2pI2z=XG-Xnl;yJ #NnZC6c&p%=?Wa-( gA zFd$+z5l)!VdPH2~V0tSa@s&$d<)%xCdKhb)!pFF?`GZA|7`DG$Saui2MS%{imp~Jq zz+}!;ivNTk#!SnvGy_y9P!thF`xDjI1-j3g6x2GQ2*_yvq||1owEY2fYw{)!b7sy~ z5|4!o&{U)h7})mnlx9c&2}I!LHp~tc>6a&}`;wZcP9=3O5ry5u9+D};Irhul>>5-4 zD~{sWSJQ8q8=)DV8F@Dw9(|!eP>szB$fcWamdZohKzu1TQ)n~sMIydEY4F#Cb464X zJ|%?oo%)a5@u!(0-(0+0S%W#PBz~H&9tT*eR@#+RwVJe@$iqJoQ7k2MXH=0zswfOe z_X s*%E=!av2lJm(CElRg) }JXJL4NcB>qys4xvFN%?CLwm<3*IORSt`>59=^uh`Jq+-zyA4!}}(z zj^>8X4A@xAOywcxk2ms_s%aOd=pu`l;9$EahkL`79SKV!hq!!z 9amw$|m4LaE}GDmM?o=$++#( zz5cjv*LZs8hxzTwA|K+kW@bnpbnKLC@cI%owUa`=k&Up{YXXLDI~t@oMDmEMRVvy{ zd-eiflNnEn`e_;<$s*lflf}$*RW5VtdpBq3Y4N?()wUv4dSOhLcQdhSz12X8Y9U2Z z{-J5$;(%<#_%g3<7&nh5=NOI19?!y!e7G*07x>2ix_>_}3ZO*Di41~CP3^9#c8xEc zL_Z$KorpksBu5cQ7H8HauHZBQ;^ROHk+-YsdDpA2?b|@PbL0tr!0U(f2YSHIfjr*v zsAMk}R!4EY-4BB4M109^++PU=(pXNkBHl!(xjP+51BrOe4-NP++yajN0Etryi}4J> zc*8N#nlNfwWI;`QRX23* Su3z)>8b(cARs*<{g|dmu)@ zT$P+uDFe96C8lc~PM}zYA3^#}uGo7I?aN8|P2mM*t9+jbZ{+|4R+1J8_nBL1UcCI` zOFrOLN>w+n@FYYlQj#2W$Z)@FThNhBj`2cha&f=Ql5M2Et3fklSp#d)lh-&_C9mA^ zH`;H-fczc`b>z6WH}UF|udLt55$PU{p$s 3?CZ1=~o?NYp-3j0< z4d)}PB_5lNEY%C~yJa^ eP0ttAt}C3(sXN6xG9WVy#iF(_ka5JR)?E!du#w zWR$MSB(s?D9as|;tuEIr=V`%Ba}C;GQi{%`=NSBY{AIm@@1>n#?;2*c?KG5X-8I_r zeQVW2M0dUF_L=<40f)g$IN0M&Z*NVN{}eEF69cwLXrPXFZLc_xagkhsL!E4{qRhF( zUH$m6r!Y+c(Aa@MvR|pRM>MHkzf!3bud;O*R#J)<(WyCt*ohhc3^v;K%)Vj|rw^nq z$!+;`47ao$6aK}Mk&DQuDyUOwgAmBjlJGbpZF!+@o)6 6*Q8L)FR`Qh^aaZm>$;xDY?v#UP3=9{7 zyj;`-CKF532i#zNe5>p06ZLl2D@!F$w+8#vYo338EB-hHXLSzF6^kU}Ko+g^)ZC =+_?;(70bfv=xELK+?JS- d3q{H5HYPPopI#`|nTPyzRyc{)$2^6$dux#MQZPTI0c5=FbL zSK84l!V8;UN>dFb3Dn18g~91d)WvqHdkhSi{NdU{+n89V#JI;lMSMvr>j9Bq?E=ld zE8jimdJcaL@u$}q=x_C5Qe{j&Muw+?9S#*MaxCc3a?oIMtT0y)Pw*4TNkl-Xbj+-! zQa>GQ89qJyv+P8l?joK)!&+0&j9Fy2^tT;+Fj#N2Y{8HpS7vFL@Q@Ip%JlfRG~ zaL<~A3ERa4RZ *j+}bsY56kk@}y3|DIGIk(=XR zD{^!F>tXocW%<(^wqYh9Il$B#DC)dfl{!Y z+JD-?$;LuW(CUUrOg#TrFwegQ^ZZ*d&%Zz7e|2;JOZPYw4=1?TmgN&4KR0;6_6snn zx9+$hh50S7Zl~ymyt2+7WCEX&WQp7L8491tge=%3Npm X&!Bhdf|10_F6*;pv)=_b@%a!{=kWK67Y5?PIH(_D1nj zb=P~^Z}ZLd$qP$27xc#c>MkGf-wDaOnk CzY#&XEZ?~8fi z{k3mKioot#!gklGDd9-*%lc1Zu5U+0FHJ*l9Fx2HI_A7_yR9wv2g;k1eIVc^OJQBD zA@}r}X#W0GLF#igN2wLf_W?E6&Z7&3s%Pm;_Jd`cva>1o=o2?Bdo9_?@)@4UK7w7` zE5Xid(iQ`h3sq5E2uo5KUkst`35NA{45QX^2oY$Xn#q(O!9+-x^a?w(VIO<%bf{Nj zH_De;bBY*(SB95h<|jJ0UN&IDolS@=@DuW5>BBmSL03ztdJF!%-g|HTNk ?;7yI-3LmwBHd8{Je{QaMwc2D-&x -44pHFw>ALN9 zWPgBcB;x)4eIV=7Qkf|(x3yuo8I@G$fgORhHUG}1fW-GXNN{-BU_s58IM0#oLS#cy zb(*d}@?ueE!e_~*eO|NUCsSa08$9t~L^ir7ZZ%#l+F-J^OQwlNLBZ!Q>w7jm?INL- z C PL^R^>Bdj8N!dz9{dHlA9yMFf5ihs3BJjK<))M4rwtVAcuKy%Ls8|T!G469 zTwNQs3HI{8Ki48si69}O@0iKyO&$NRBq#nOi~n&y#-9WY1rsDeSu=9_X;xcI!VW=# z0iMkQ2Ro;iQqfUT)RrtwDt@o(y!yM3`LM1GHSTeDk31i+f^cukKxc#{ZIc!T7a5^Z z@ak4TI{aCR+yU}ZBG_@oMY<7Yhp%IY^*R);k(a^o)7MJ%i86Iof5LqvYc5dr-PlwA zK2-5Y$!cBTnP)nygPBnfJv-?J8EyEg#LXv#oEhk2B#deNvzb?qKs ;X~`YaM%3zxTyJ#>i6-?v3{^^+@i^=koJ*HRXfY zrigunx~0O7X-3UdluUKzdOBxDf_#_PppHL-3{%!kH;)I%$~MY*xZQ&|4>b JJ`#PxxC##ck%4t-#U9wf-j4n$ z_wKf_l$fpYr4Td5DzKUAtVZ|OJc5?QiUyaeMZqfmSMp~*$taXA8PMNe$o|Z+=!^^m z3=b)u+SqrF{Z32Wb_Pv_#bXL;DYLCY;oV7EZ#9fG{(^|2z+Kh5I9!?3{>U$A_!ufB zyMjLeW&5a*v1TvWI*H&|Y=i(e8jQ3q4K1;yxGBVa8-h-q0GSFuf<42^yk9pGoN56= zP2K1!uqL{J_WKeHW#$dBiTR(0&2Vw*8mL!UdAoGTu0W$YN+vCGJ mpqMq^fn0S$)^+&((JfrI*We+w&AUsuaHI5Eb$td!k`T-!NgNzyB{Lq zLP&(QnZF_lp^6zWK0%n)O>j|US}uQOl8t;z>@A{mwT0$pB_JE3g&kjV;jE~-7h$;< zY3Xk+L3CF! SnSft^q85Jx z5S`7$k>~|>CMhCn$?(1-WfTQUGbQh*kk)wk^&QhP_vDY>;6ZW3RjWAXq~Rc^jFZUW ze{~^9uf-@1^}zV$VA_%~4rhKZaY^R-dr;+VZ^PKrwu S*4f9?!2QcN;Qss160Dz#cylo-7kiBE6cJaw#R_yO3es^t z7?qZx`ysYPezDA&n;B3h uwl0h5K^rm9j1^4 Q|@*h=9MC5tl$A zvvosP!rWro$Xx6pY-&SciLlYm-|LG-VgI7m7N@hSSbp^U3K7{&c+k%bfm=tnrNNbI z>+XWMj#crCsE5V{0xmEPt >?u`dWQy*TNFm8S^)oD8y}^VV=Y`SQ~C3%f9Sq gziZb>IXn*JVgw4#fMAph8jwQtQJ+ zw_4Z3KBGg2nej)duK!wdeYi~jedUbGHjvb~RoxZDF=susyW8P^^mEl1ubJX-d-{G3 zY3;tp(UBCl@A;)U$#C6f>1t|QtC*&8Sr4SqtN=n&^p^)cq@jK@xf(Mlw3>XVo9qK{ z6OiU!Ev|Qqd@PsIB_7s;71+J119ZEkZ&1*zZ=YDkq`$MpEZ*(;4|q$+y1n@ B)!57k(Xr~WNCTgCL;Ekmmwot$#pjN~P)0&HIfgQ8rhe^pK0T6*f< z6IohR(FbDxOsm@>7~=N)sG`uxL|`s`^CBw#1y^z}RvErc@4t;KX8mdVEr|j^4+_tO zu>4wVx?$``HiLdvZzKxM1s+HZWF|#7NW4ud`vg9?BDN~ZCTK^Wz8v%*7A{ra_eGwC zM!z9H_}U@fDgNT_s|MdKgeJdt;n3~xUtD&TeZT-KDp_h#e1MwW0lO}h20eN{i+HF^ zz2?I7 4Jy%Bv(y*rS``iGeQ|xy>-yLtaU}D4 zS=xFWyZ!aH9l0rII+xBFsX3Frel&N9HMe3Li|hp)SUha?^E7gj^n`NMA(7!EjTk9@ znKM9~teMj7jiJJHV3d9ACJ+%kIll-^SYEW&OkBH88WTXs+hKvVn5YFHEQy)E#~_?R zWrq9~TeTN9sEN;R{Ee?9`6)1z8L4Urq$!jqXgd`&^paSA~GHwBVpns>9vEXJo+d@F1mkaks7pdIs(%*JU zf}~`ATikEs5+D%idSmGF0H()r?k}P@y})S{acMQlJ&O=%Cq%(>ryi^X<}W4!7rTtm zBG;rStsYU6EB5TGn7STOy>tc+m0uHKc^i%v%xHw_l6=w!ZtVe|LcjcCEk)0&46 kmL+9Bvy$S%GuGT67pMQYR zCrBNk^%o^{^ML>d-(o}mbZb{c*9ZWti->--0&9vAK5VXLfj5H!wHL*sja%Z>*4CZk zTs^92tCV>61NR44clX!MUQNOq=VYQvG2`CartV_#pPU&L{AZ^A$}1>PJ_<-VA2|s# zlB5lI+4*UMJ$jjsyZgkwAkZNfQLo)|;XeIsd;N;CS^*TYw9vFr3Ws}UizD%1Q<(>< zSj($0!6@Mc-@vu8(qyBMCpLp2tK$)vWv(G(=r+OXYo3D(s>$O9lNElsm#q=!W#_jJ zL&}oc`|yxj6_`jCLgzli;gl~42>nfc3IU&>2d7jR2hxnH?;@k|F_bx>7=MNo`Q-8? zA?k|pNP(LVdEIlLl9p-`r}1&WWVDGN8?1#%Rc?Oob$-u+F1iCel64D=r4}@s@)g zV_}7Tj&HQ6UH_;Ul?;8RFmZ<5wZtq?tvpFscl}JzetMkW=k!uW@P V{mjh*ZJBR@YU* z57fE0`zEc8evXvm%7O>=FX>0?Wq;l~qN*c{>px~l%V-|HxJMDJp!uv6X=@ba3Lt#Z zoV>gikG1cgI#sn?34tKmd;YPJp6X65J8nQwpi%3D)jb`-rrb82N|1KJgv@%jw*=V5 zn*tOeGU}FLnpX0%{}hct?5kexd5OU~%AAjZ3vRKyv@ar7Km27ZgMJVutMi0;k1z}J zEK`xPG`&~OFioPWCim{I;M3oKOBpO@mG $3tZ}lHy61QarZpmvaF9v)xd) z33JS^qREVMDh0Vabe`4F{ZusLxu|$UB)xrh=3zMTf>Ek#cPf`u(KmD&VdU?LTqGv@ zFTu&9tovL9dn+dnf1vF5Ri%>}; >2<{(@l_1Ljzr<&cp<0)I>R)KRv zbMYab`K=#KM?n6b`_jke0I$lft%2LUeZyLWMk7lT-HD!8sphD?>wW!p&&IZvtHZYT zs4 Bu`lw=hvW?TSc z;Lkoqnl_&o`%%drB2Tkwr>-30$hq&ppbqAX7=TAPAf$KCJpbsB|D_?>Yoawj_mmx8 zLxBT(A ReyGBsQlu*;{XzMsTkSv&UgEQ)YiI2Q !pay&|Sn>~6dfTGDf5#!UaA12|6|?Mn fofZTy!}ZsPj?L|>^lD? z7sM1DLWGd=s3sJ@(tZ@S-pqOEOTA4Sa8x%f>O*QlgJ$S4Rq*SgF*l#kb@^(LY2&=f zv -I*dfnBjO~ONM5AWzQlS{hTEbwfht=6_E$v9Sge4 z(Uo{|+dJRAa(_5EP^nm~UMCuiIz}wRmBfBfH?htl{(^ytXuvLILy8gKJU8LCH>>Lm zJBlda^741)ec>+o(7YBEo~1s-2J_En|L?cbyhP@YN2?{kJY|yyEF8{N4YU-U9+Xpo z)p)ir+edGA$7-Jt>3hSs@~0w%SR0UtLa@iYTcg@aU8!*US|iD9npU%EfWxNUY9X8T z+u1>_Yx1b#3y&g_%Jq_MW)$Vno0Iq@-p8lY7NF{X5>GdGR|`{z|E8eq|636i0+WPx zCzB(Pf&N`*{C{ejp#KyhIYHbUU<@yue|c@ddY(M#6xy)t=?RvwNEmz^ D~v7r(sx*{9<=tfe~a{wI6p=*aq$ zSA}N%Z63lw1W-Js+8nTT>v?vZ_Li3QdgEWqY&5cU3tp;J7hWEG-7oA4I1@3#6c2mq z !5Lv$#y!FW##&9&U1E%=CmHp~=_cR!CJ6@Y^$Q)KN%zF8w?)3&F zEM5pSfbfdT)V^6Py(d=BQh5@O qyRKGsS;OCsQ1>|tSKu&E6ai%9n4{y3+v?f;f zG3KE0 jK+>f9`4-sML?Su+kJ>(6^sv{_Y#_ISEN-T-skAagJ1w zIMIhf8Ls%~5VH;2qY9OkLAAGL0dY%E=CVR~hmeeoM|{s$DU#tQd=CqlOFdD3p8r^d zm&W0r9q?>sCi`DoysnAcK`O>N%f5PWMn&tVo&ut0Htjb?Rgb#$xtUGPq~XBWY#y4i z(Pf_18?&Tu{52QR{`Z`?iB5dB3LzEY8~MpL|EpVvH)6+EO*#uN0+y+6i*xucb){K? zo$CoI=f!87Js;1KK#|@K&J>e6 VK+`8Hk`yD++lMT+64&>k0!ZdP6oRS!p}Q zKf6`%{e%yre>o=%oo*$zvlI9>@D^}?>qx4(Yl&~vPPDO`E+_2Q?gE^)YqkxNFf #ya1exi~{_8 zd$TOOYzO@U?qmY{x&0c6pSt*lG38^pZ$b$+n&OU8t@V@PnXKW=29^P*pq)SHnQO9V zLeOw%$|iXV5ZJ#BqW}%MLULly*-};)sITATLR?r)H44F;s^078dAV1H10SFov!#^g z+;&?~B@JsEz+C-9iQra)!D32T!hlWPWvgw?Gig%q<^CQDkl&1T5VH~0bHX6%>bS(M zkNM4YM6^B56D_YC)F0lzj6-}~;1%{pKk`GjWkpL>hc5_T13+nj5vhw3m)}pUkr{-B zKN4!SJd=T&O(;57j!kVb-XQJ!*gbr@b3O}ryc-(b9m(3i)_1!yW_y@s+uqs?_;|W{ z^#;2Ae7pH4bhD-nVRQwLp|Zc;C&g7NoMukw*5j^ o9aF(Wv3`(!Hfg z6+ dWwmV9i+_1Ruz zWZY~oe54s =d1?YRh-T=MS fD0oy^2P;ntT5d!DEwA57e~O9qynn>x%na!5kMLfd=OXfyvU9 z*dX(Ohzc>ty 7n!a`RRxkvIO3Q2RHth$qC5RQPjnHI(=U*7)&lqYQx_nS;oddr)V#! zqmvPu@`& YoB35}fqA?|q>S_`a2~XhY=5wFj4HzjOWshDAp3Cz4O71Bx;|2efii z?J%!O*tSskA;V8D4K4Hq4XS@b$o15v^bz9DfhNhCra0Sa82XMdBV>C$ALbuAJVRYv z#9GmWB~Zst-V%aG<$Mw6{q5$SBK%p%Eq_Wf9D`wWAgew*WM=jKOlxl-oahzXcUH`9 z;VhkYK$$2;AZ_YR8guOlXNk{4L)(7yf85?(l-t}QwU(v=Hy FT<2Wm5Q{#8 zQP`%F7y?x&tk0;pF} (8VIqWI0$@ax_BTcaFn^icPIHd6e; 4o~DU1~BL(Iqy>pF$pVt;&ngyQI5yvM<-a^|ft z&K66nyMF4&4al&qHSpdtOT;4{F&{U2NM(W(5p=fI55LDAe%Ds?=s1V5uL;5hawXWR zYb$jrG75?r7NGuWM`$#bbGzLz1F}p8=v#1YU%6b6wt|U$sq7}$39PdmVnYjdbK#+V zGNJ$E?&j-4s32YXV3Tf-TwX}ZxUv<8r_k!%Oc6 bLNGzrD*X&v8nw?4pmZW~1-b{)wLoic!j0JgargK(qK zgwye;ReLa{TGid%oC{Wlcnoo>x$X`rOQn7c9}r2n!D{`pWnQsh-|-SfmXQJ?AWW^s z Du4(WWS}Jay~lr-%87q>um%`DksC>TjmJuxFPy-)tPfCBGtr(0;#RH744p6MX;aL z%W&97Tibu{rt2M1wcBTbK-)y9JduZOqLsE`mZvoy Ws@S(hJlXjjtPXVP4gED9LB%yp0YAH*@-3)b{3nIc(&U z<{4r^4lj-$T&^1Y=UNW&Gd87c8<`#K?QQ_Ztc?~-zZF>`ia6ECm7s?RUJJLfFlWxT zLdC`io0;F`LzI3HV{P7;C;D!W`29#vlb)oP 9< z()OhgjmLOh?+u6Hy)i0e9TE$)!koo6oi%ZNxvC728ldCQF+Vb6W0&} rP N}+;cakt)7Sq-H?r^FM27x9AOreekkLm3{o7dr z`nO5rzZMBldi_7n4k!=^teeCP&Be~g364to$0DIGpFqTm*?X$}cb30>^5GLZvJBT8 zWe0OCa(x7OMBF*G)Dmj)wPPaCN1Y{!Yh2^Fia;BbugaTcNZt4Rr;74zJxFQr?PCKV z5VJBr`+GRB+vc64q&E4hF{;X27o2HrUXxv(k(n)`a6rTVHX<7FZgQ3W!noGCEvoz> z0Qd_fo{&Xc_If#NDGdrgj07PIpc#Ji^Nu^yC)9a(P;X375G7GUi@?Jhrjsj;AiEV( z2g#q3)-Neo9;UT_v}cftC~Wsohax`Q?)6r@cs`W7Z+nf?y`Hb nC2u&;GxXW*Bh$C%Q^lZE(W5Hf1BF8F9H zwlRU|&_O>FV$MaM)G#8u5Xr1fm}QwD=3#o)!(2b8mW${k-jUD% (Er%%Iemgl*&qmu)_NN@{dMNcDMXB-K7!r z=Chq|G|$A;I)FZDsrVXdi`v6A3-A`tyQ5))@Xd$LGKPc?UeRMaE{W!CI>#~yt+XvU zg~+~f?EY0l-5ClK04;FcvghL%stj8WH@E!yjX;Y;;cf8b^hjdl9UX5 NB{i>|*0X|K+C7%t@aPI>N+{~*3_KNStF&vaS@S+CTCQCD!T4Wp5m+J8&5)N+ zQkw!qsh$0w3w@(IPkL^;n@!Q<6Dt_(v*nS)Y$6>XCFY>y9H>%rv{0Q3rd$a1^WJXW zflJYzm&g0%x^VU~xthN_QUKGYbxB+CAs#RP+SGy`Alkv=7089)WSZeuA9ev(HHC!v z(}VcQBi4U!ICKZ|MMTOyh!g#wC-8HQ!;Q?fL;Gp^$b%aR9lZ3{-} >q88Pe^!Zw&D{ha9&uX#oMRT;gB-21bMj*v5I3GlYC8C4g5IKZR)tW{1x^ z(kk#^J%xU5$t7fVh$VvpDg{Ju0SZ=hcp*h>mi0@_V85Yar|}5Vac(q%pqTN-oGvS; zfVao}mpmitk({@%h6h(WZC}4tFJ^44?p*{4&RSvS6>oI$##Q ksxOauOAdz`&LuLB~yQfo&V@o`ofHGeS}NH)-Kg3fk}rSD>+bX_h{ zf8wfP*1_&DVah;Y)2;+r(P_ ~+p0FkQtA7cxsUW%rvD?K?EB*1g{Thpeq39o=@OKQupmQi#to^A!6n z3rAVhzw*-ry~~Q)Q_$yuzA*xXpXhh|kwJ%o^s#`)tcAiIytbUQo&P}IPfGltv$jfK zv=Y98nJ;@X2;5jeobay)LShD%*Twb01hS(*`1+uQXeYR{M6daMbF?$kC@vEIfZM4= zVPKrMT{3mWCn_!X@=-xPTsD7d_7@SQ@j#nW;KaMMsdO{ZlUegkX-Md{mfWef_~3b? z>8zb;wOK8M^X~cHe4f_4CISB!i5+(OQg%^N9OPqF31oYydC8pDKa~BwB;Hny>r%RQ z2I;S_%r0+~c;6*URH~GLY@RiFSa>qeW+sBlFJx&ealUQQD 6R+&&mWz?{vWp9F+S3++xm?=w(X8>+qP|+om6bw zX2-T|+a23ZIw$vY@BN;$-+ew+&0np$3SX`{*BJk?0D9iLO97`4j@kp1#h?@yp>FYH z1_0h*`wKWfm!!HP8Kj=~lt~MBY$gyl`w3E!H4dCO?Y+M!$134UeX5PO`h6B1H#c4? zKQ5NwKjo;v#4y$J%jr%$b3h#y)Nzc13>wfkv4z35X@T1`XZVL4--IG;1FCh-MKUtx z*1)Hj019v-#58cmCo;`&4=`C!P!zk69jZgdD6Cg}`a<8kMi@)hxB=p#by4?u2ZFh1 z_v^u_1)3h$ALXztqekrJJF9JqkhWR4{ao`KT>;LCp2o5 O2PArtX){nP1?<(+G{=hI=Nb;|!C2HZ zN|5u9kjf~zpK^ED4ms)F=G6KWFkN8dTUC} 99G7c{v$t z0w`aQEMx?lsD8*9wn+qGatX#S8sSPH&!e_zFBBzgXlk2Qk-zH9Vw4GP{#IO>_Iavb zQ@#00{$cKCA?a3o^eLQ{%n-__?B`dH>hyEBgRGKpbfi73<~hh*)SFy--Yh)dB_U-s zj}GaD%Y3@%h}k)5JWck60FUduNw;u}9-!7rT2#p*SO&((OW0_=l&_Kx!XLed*;(M; zi4^K7<526beSk$$r@WR8`8H1=y^h^kafE$7jknFHl?!3(JEhyLTf> liigNoR8xkEel +-HXqgH*d zvEFCG8z2}`AaPGwFubH2Vuo5mS~mv6-0cImxM5ZwU9^UA26mP&==dj{;o!8Yp9Cq8 z!u@)VFX)aR*%6Yli_oD#&9z~8bg`-pe{PIbDQRDRPpffvw;twdTrB+<0FWY`)rOff zq&~^*1gA0Ws(;v+w>w~#A!G|uHalBQ_zy)O)6D#Rf4O=dNlx_6HviLCuZx2r zdzRBgZp2sR&&=Og6O>KwPe#pCXCE=ov>W AU&lR4L*Ol+))-MQ#cGNyLsE*6CBtp5U|I?}P5tw`O^HM5RRVIlV6y@LYJ zt=s~3Vz39hnEop{O+V5@-OV~9Kc9&x(N$@bRNQMYZiuX5wW`n~hrE1Mi=I;9uG8M1 z)xQ|2w!inz__pnR!=F7%W$i0Zio#odEH@Z7s=4bt3b{Y)`bxXI`{K4EIvn!Vn{PeS zZ}kA!5O9`1eeSQiypNPeHd}YtZ2Ub4A7`d;26rC(Tvzy!0hRBaYh7D9_(2yO=i7gI zCekDIwAp*t>u|g+)8FNPUtRh*}co+{7z;oDtXscfNLh z>8sd#% ^C8@mTif)a7?^Wxtn2FB2DtwFwJ`P`XuLBZ6eu`|B-~z;0RXIE_3*Ppt9bM zz5jk05vZco)**ZAKrcYlolC~ uyQtsaC5skr~${V6bkEcHo|; z{l)GtUGsv52f0oMKlq*>Q3j*Qizjj{)BF~R7E=gx_6|(G3C8O~XPX1rpHEaFx7P;T z;T)uOKe|es6X0l;RDlN*9qEI3IF#%g9|Fs3B!Z qA2Oi0Coov zQm6#E^{$*^6f levZGytAM7}*jj0*!VD0TeP%pRh)`BAuIH%-Qg1djJSTlFL%K)!`}%Oun62@x}w z2f7-8xofbZ%7e!b34ukgfpa}?$0{DdW0II4LTilJLS>U)yi{cWfE871rGB>EV055% zDr>jc@-WH!ppB@cE9S{->aL85*q&TbjOfdMHQnY5^*qiZ29$fANze7yMYS2hjl739 z2C`yUR>04IEl1KZ05LI*sqh8B*jP?VUJeEp2-D(ar^OO{L&xlwwnpe&u )^l<_#jO;P^2}&B)fY)Lx!4_^aONBI5f%;!Q)33-uC) zkZL%zc1G2Nq6D0q>*2((jgBvR$(k!XrThgaoJJj7#gUk%0V-5M84${Tn@o$OKe57A zZk3VRVjPh+JbxJkzevqPAq$)ya-@>m#}Ef-s3euKELUkROPQ7LsrO=R#}53|a4`<9 zu&~WPprfJLJLu;T(;kMM;hZUkJVBe46e<|h0V>zQ$K?%ehB*BZ7cj)BYyZRel2ANr z_=8lcaIDj?3?LaLC_>J3c Bw`KqJ5j^NCD?q;4bWVUR(R9gX4L!r`XF ztgWJuwU3oU(*YAD8)~^jG#F9tC=Ol$8=cSxL<0TL2~ajWR1RCrdnSO||A*BK+*Z@W zkr(ysSs0m|xXGCnbheV%xZB>;G64(i>9b5pr?f=Mj!dkX$t)v~*j#5tpCo=SE$n58 zxO!+uc?z+DV$9c+R&y#;5psT|9Vhk3zy=FWAezm51Aq~~WZ*A>+b1JX^u8v=**0RV z1%yN@4*+_Jg2p1y#_{Cd+YL!c&7!vW8L|W>ReMis!Ln(s5wgAlD!C_E7a*zXVnam@ zpRc_zN;^`=?%S&HTV-RYC-`7O7Tj_~?^O=uzGumWjzpL=+gp&r?}t%5XR*kMsgvo$ z*d!$_Hg(6iw --1~}VOpCE7B{A_REl4xyud$1GK1aoZl#nGPn>36->3pY-w0%=RWyYPw zI)KU9i_cD-8k@lOqcO8!9+ua9IY#SDi5i1|fWWu=^VjRnhQ7VN9X=oL)8ApIT8D_k zb_JRp;*G#{%((uTsV<}_8wu6K!KUobk`(`nPs?=-OvGqxCt&9F!w1INilr;dW1vT7 zWelni^vyPeJX8{R0V9j8H!n?Bp+}S_c0fte`%uR_LW}#?tBbSy`}x$u^)(JsPRogo zC%%SW zY9t)Jnsjv%s`}Adb%+s78q!re<;|ZX)zHHQUM_3lS9(iGU2Uk=6EB`1)q*y9jNFM) z3R+l+EPqhGO(kQRiUY0|t||Q|{7PAfGFBa(kB6oct#uSlpT;csYU1ca(`Z>{F*}o8 zZ}uo9d%ZgT9}ks|UaP4rYK39mHGuT#0sWK>3iPW1nKCX4y#qHm6T+3>{_ir?8Vu2a z^j@L77~M1OJPn9%Tfqbj7Z_~031v& kPcr%f%8!y4Z3a7$=ODgT`GW zPslr>H}+4IlWo(p+mTzuuKbRU*@Ji;)C(rueybb2{zD u5 z6Uu>*A>&J*|BYz>VQ01~o#wc2KX_o(E2Nm(3x_(_fZsb+t9lbqGZwP3S|a}3JeVG` zgrEguCLr>~uQIr5YMP4bju#1Qd&PtTdp^gTDRh9~NfhBDv^S!u*q5#sJe&Q=XU7WR z1|l5{KVF%&vi*og3WIbd3IM44RrpuCkGE8F;!YFg@(+spFKfDSRvjH*Z{PNh)2BTr z-gzim?4)W9S9x5L>c!2%WW?1^XGC;9BIFC~XAMS#jdF!*^iee7 zIbll*o}Z_MFqpztm-xVJ) T_Ms zS&0x83B2k*okQh4;4DGM5a$xhq1Fy%%zDRElr-SS55;c~V|Z_Hf{)t$_hU} D8^5hof5p)+ysIFTQr^Id7amS#u$2?!25bPriDZSKRArP(SiV z!zC5=>*z(1z{>>_~QCzHeno+dlTImUg_pT*Fhm8~ksx_{j@Db83n$Q*E|I+xQ$q;rFE zFIuMfxeY;%#5>6rYxH_2U|PR7f kE0 zNaacHXe@JG>;UjIuklnz_pU&trXDs8k&t57dItEEcP3=9PPvR^Y`jcrD7cB|B!K#c z`VNfj@p98FRWFwxAfBwCMcaOV?zfa~r0(c;`gr`Z;3&n`c5P(n$p4wWl#Fi_)!* zw56D@MEi{!u?A?f?hNirzv$Y;4fOI4eCxmz{n3kaDg;oiHLC r}H0hG%|S zkjp9`#ezA1ZCj#x{K0`fMyRU12c`koLY&oP^k0cdB9bb9m1nMGXHyqZzG94`!{+Ts z_l46FI?}(iyE1D^O;#g2Yj1iWA*ibJ3lz|v8ntd64K*z#p0{S&%|K(&=XKYJ^hK+@ z$0IgiMFgnJWiqGO|3N{X5RZwsMsMq^ZDg*8d-QKoxFERKmIywgQ~Oh65Z%WTz?kAX z(O-X?Nz=Fv#+Z^& T%`InM1 7$_LZji9zWh*p0{?Ttrad1Z6 zefNMl=heU11a6i4AiPigOZGyVWnX+de2rE;Mx$sIWloM#y6N}lp~uHN__=&d`C$!| zOjRvM>v~R?DtDaGlUmTmd7P0&2ujcE;ahM}f(R$9PRd@%n5s!jM){BJ*Xz<4g9#1Q zvK2K!)JMVNPig9CmZ8N@3G0oT8sS-mdA|Yj7sGy8h)@vY8buwi4XfHZPF`hkZVr6W zX3_ium??fzkFtM@FZt$IWp@*UC}Up5j&}^~Ic=5~GvbmHA6U)fLrhIos$`vL$X)hw z*Lyje1TG1Ei?MptOoG2Q#xtkBfRr81>;K0z_Mea-_J0sdd!y85c<@mI_J2Xk|BoGt z{U3SZKV&Kk16yKt9&V}u3ot6xf4EFSdJRo2!hh0 Nsh$0Z+11gundxq^Z#fh?EmnpO3)nt*uTCX{`Guu{A2X` zuKq<#IsPxil>Hlh9ZD3ag5>_^GD^^dg!IDpb}puNF3yDi`P}~j#B%(%9>c`Q`G0^1 z4vthpn(v>SQS~!*jsut;i;11_J2;7nkdcFfj+vA7`!D+rQeyb76Kxf#fxoF+R19Fw ze<=yhe<+Ec04-bR&1R&()%tz0PoagkVj!ayJkF(?rX>qzf3y~S! j|y<~tV?`6Bk-treKQ6$S%9*?0AI&e#3cj_{x1+?J8IyWPhTQ( z@>u1rE{}nOa|jQPZ=w}tX=~{0?az|fsZ_+-n@^2-`PuLQ=yu2W(mKqGeCF9({@be( zq~)#)Xb-aQUXIP~^Y8b_5yKDcm<_wE*_)O@a~pR$ypPw5_Ve6$=`7===y+e7tCb#= z6+pWNKp&y8D!R;cznjsv2WvDetZ8|fSll^F%6(;5iru=E6_K3(QVm<@)NSrlE`k=i z92}z^?3SHm6V?|m3ZX2yBv`v?0*D4k;>-&Dn`osQaV!k5VTMK|v8zz8p(gn)?LxT2 zT^PW 0X5TL~ zfOjUuA^t-6RgqWIt*8<3X~AicQg9Ky? 9?I}+`_p@<&dQI zTC+#oCFN)(i*pt$m!*S*w-bTV+WJU&G3{aGJBPG{VpEA5IgianmUT2N&S3RdjWwmd zH~4({GFn1`_2=PR>4^dJG}+?=%@@h>U9}qU<@UN0$$<{Sh pb zq9BoGDEEeLBjrg8%$e4#>QLqOK;4DD%KMoL>|%>LQK=a*pQyX{fXSJeQpXmJAxn)D znXQb 5Mp0C%>Se` zt-ag?>MzY~EZQqm8`u@$Y>FTh;9xLr8gXm&fqSZ4Bq^sXA~)^Xd+@A2m6c!p#JAm3 zw<)I}agN5qUy=@Mwk{>|BRGf%-uO*ctdF@k>XuGP;6M!LW56+J<%G2xgAZJGrzZJc zj4M{k^!d-`xn4{oLMQ%=Y+qfT0fj@Hh^TjVzA~yEDpuK`pRy7$2Acsd077b$2f(NK zYpOaCDMMyW2lyvQwS|>%jGo2rkmK{n-@p3KL6fWL$BdRd9hSYl=rfY Bu6KW2zj#dd6}?Tpa@U3R@ >F_fS 5kWyx>C661% z)1~Q|ip4C>x7*Q-{up%VPQ%B-@Jn0;o5iy{?>&WSFJwji4Q!`Y!P$-ygJP*s*hLdU z)+f_-F(1 akhc}w0P1zZ>Y&HK}0J&AqJZ; z@6m!DSZN?2mRBlM)A8+1{&9GKTaTMrhRh|M^MEX!zniN}l_ad(mMoa~GbahGo|V*j zyR$*~xqFt95`xrCd`7CoZOdPv%`x7IiA{X-ZBvs=?i|`g1YjhS *lw$Ejg z9Pua182fC6c1YlzG3*AHQ^+TR$E*J>i<=xkvNP_LWr;91BlYN^=xyI+t?_KjTDMew zi6}H&c7a)#zPhY|$FS^6mJXo;5NW35ocFY&aw4>v!FHoBy(^U=y=leDIZkJ5vK-@v zTuNJy*q#{F0}QMu)bwe$fQ70W`jV&^{zX+*=<4jm8LJgzZBjzFGD&?i)wShbc%{ts zy4`;=45>eNb0PX8CQ|+5)_QeG>NY&oBnKiQWJcr{7pUY6WNwlx3w6`5*A>)93~=(? zuW?+6KGf#aR8Y>ah4 JUvo zho;)Y9bBbOhzzL8980a}x!3P9c@RFp+0YIj-&KnOoyx|Hd{589@UPWt_yv3*MI)Ef z1CW`p^$1WKkc}_OkOsmWFK +^F33r>Wnmd1gN z{U?VGA3$fe >WC`<10A zitTA0uQk!yl1e?;MV_iamVJ%7%-{=1s{YGSm}&Z6V|->5a_|8(;|WSPq=9au)+5GP z6r_IE3M!A>xF00Y8WCFDo$VZ{H1U~cI< xBeEqR(;+ro^1dZUsu1{{FBGm?M-YZ zLPsWGIrnMF= Qp7D9?{TZ4&r6HT7fGN |iQc>8QG1fy4;dTQ>E1vyFrL>YYdV*n z?EAKEmeE9Rl$of{L?tUu{IXeF0f6Wv_E-yzFwxsdiY!9<3G~;T#3}GJQ6j|49LB zV4JCBZ-)*iCs^&Cr^fmII=#vfY+o9B?OZD !ypoS;8p_17a7JlcP* zi?UC!G6ZAggBghl`dnBHFHbKV1QCUcHFh1=HT~!yw}v6E=n+Tp*JJ84r;_7LIK>)U z%j2kbn&8URBL}87yBY0SK+6Tm3>!Pf7X+6=P~rb>+d2OmWzdG^__ss-Kh__PM8$=n zL rAIvP6z`~T|cIsX$B ziqFK(NyqV>*}}@mO2@&>NXX2|LdX7nHP-Lc8cxRl5D}cId$8ZhqMWIMv=9t<|NZ)Z zt!H6mrsMqQ{r~s+#NZKLfX 7PF(80 1wLi{k4slqAJHiZ-=;5C(-%Q6Nz`NFtKC;z)l6}odl8Wz6?07&?Jk-*)ut( z@I$hzcsh?rOjRxna$X%cGwJ8bVdy)B?~6ZP5)9VCn+FF55J2|E4{%&p_Pu614`@8= z%Jqd`b_xZxZD};|?L?#TaJ=&I@K1vF5ssVHz;sRT1%gT6_j%A@R7MB82FP5{w%ZwW zXZq6*JbJmKRaZ7{`nq8!EkuK7 e13X&fLQ*a6In~_$3 z%C4DHHStkr%<|e3Ox4OmJCUH8B*w*e8oj=Cq{^Z1r#SRz00Ph97x9afXZ^awwFNBn zDB|Fxq81L2NpihoL}A|xA&nX1xo!>9L4F!EL|pp-;83drXD(K*wIHCLEMYA<+^?Zt zrCYDA5r+TlaT##Fc`{VPdpwI}EjSCn%iwy=xH#`0i^U;|2v00w+S|!up&r^;Mmvb5 zr;ZD#e|f$feTHtt=H}{mw|TdI9hZ*md?Azn9;m2?D&bskMRsF#kA|=MtxZbKQTumV zYjLy ACdw~N&g#=ld# )#JxM-9Aj!gXFbF#5itWjAoe5si@TH|4v9X_{ghiHeO5hOa>HXk2_PPd1 za^MZ9O ib{FBs=Qw&(w#xeL3T>XtsNPf%SG!e+th5kyT15 KvxYoKV zO!EF|U{J*ZN_dGXw_~uPP^i`gD^86d7hbz|{<^{sx9Rxen4+sXqvJ>0Y$B|?E1*aa zqPXx;&q=YSeP)00!_JF~kBZCzxl4Qi3~R4+WbMNe$e@r(7oAf@=5ti3d%F2>M+E{y zYEiwIcz7&xIhRH4)Z@PCnwwFknB*nopCY~f!x=2YUob9fGoVTAM?ZQkNyqXCvt(-r zfpc$EZptgWl%>`x6+phpR`G8|KdeA1Djo5TlF34o)AJ$(cY-Jd(L>SjuLnOM*pYW- zxx4DKrP7V^b2sYDB#}qc8k~$o_{K(Tg@{2ZjgBGQ5x1XC#TXGkuYMsc1&k0H^T&{L zsYG TOoRmA<0dRJAw8Xf)_uW^I2zhpl5&rPQJG8701>pPX+(Qct+rmJ&KO}y zar4a5#BqoGOsqRS0srR*PxmI^Yq^})25lkdBx5kz!05q$%=81^uFNss4Ae~ys^nNn zy=XM98&1kp!ahw!X-{`@%%}ET00bf<)-lMEMI%_gyUtu@jt0dDYpI}0E;&jU2_4#2 zyR!`OYLJo4x3}HJNq!VTj;8RZoh2h;!y|TN`B#ahId$?;q2s{PCYcUkk%Jgm2)&PR zWPA{dn(7W6E9^w%v8?$=loWh{!se54K%kLl0g7{qmXbq{9DK8zFh4(`mJQY@_EzcX zS9$#RzO1lhTh#X7W~RJ@d&l20+)86}ehrE4Z6}^I*YoCA^Vo|oe%Be|GcA)m3o}Ah zQ#5_H3zhP06eFfh4>?T$PTu&)ArtjcvxYo!&@&@3s#8K}Vn0EDraw%-#`k_Y*!*;o zqUnyLqeP@8*jET_x8d4<2{R_N!+9~M6l=yZD20_ELAy(}JcwMHHKJXB!5`#cEM(DS zb3%wF3(g5J=ihxzefG%+Z^Bo1DtjT-anIvGjt+zpFP&Dy @`)z@j{+1V5@q-f 2Rd4mC>MIbX6BN;;i%=ps64vo15$ zLEAjZq2V?Zlcx-%NYfT<$6c{oTrA6SX*yVzbCgL5ja!rl(BNSadFeU!>~2o8!iUfL zr^CQ1SW%ZDttIvc0bhZ#{!o3_8wudKj>~DP3WZ`ROIqe9a!{qbt8+{?ZHrY)a}6C| zRe(5h+Ud|_S|N1!X#|a!l*yq<;j}|vf`z3>*$IuF796l)V$`yt =^FUhqTKR#bUv2@L?KOH>3r6*_Y-EdG=&fLmd zCU$ff4J}^XsmIoRI0`%6$@{c{2)&WanQAN3$ogy&K& KQpnNB;!No zOUR _)@iw^#vU-T+wMLG68+Hp?H?a_3#KX!Cx0E}WL_1o^& zC)RFxIr|LjU7OhQaG9dBk9W;c0hibfuL4^q(qXtro4M}A&lIq7siqgcq-}3=_unPh zbgfA9B$>2UD9;}ahGAUgfo=}YatMt~pqNi+fN6-L59iA>r~M?W-ozos;f~lAJo3^; zPul{9!7YK~=1{BY!&U(-UFil+HJIg0bLrZc#yYqB;8?G^g>V &l pFg-=l`>i+Av*=I{SBC0W#m1SPD z1_tI&$*e}?y|dHjXLovcyRToJUsIvk@XZ)Y>A%6A3G(t&pO9?F5z;dfrGNReKFPl{ z9eb$q4kABN0j>JH|M3%Cbaqp_zSoQk2ecvk+&daV`|Y*LEe8tv`fI!J?PCq{1!AOb zO-jeSu`Df|&@@uraUqeiMZ|KlX8IG7h_v}26&m6S*YD#MhIG!pjy^;b6mg@rnPic9 zZvnBLTWpsXm-jgg6aKX!0u$iqHL5x9l?DHma;{moN(w3*yo1|n } Q|0*k+FOtPHc% z`5Z?Obg@-Mt~JT;V)vHopUboL;eaaK<<0ZZyasvlQ9{=ziPSF3#l-p H;dSx$ z7|1Lt5Bt#|B#oPZdS;9)F*-TN$QGh#fl=7K`I )W|_&%wfc=CoR3LVekn(OaWrB(N9+r z?L&^h@1ou%C|(8&c|2la>YA)lZ<2n*pNZVi@&d3pcC*a#V@8iV$o##*TGL(7CTH}-xCqAT=nNI~^` z`rwvpH7Robe44C`5oxO$lqOx`Ih0!MD~-qs>cOU7SJB9yo-m&scmx0|{TjNN2KP+s zSgm<+f+!Zc8iMyFm(fQJoJsaM&QPRHp!6RFVbavXM62QowJS+q2@?=xvD+g2S@xj8 z2OW-035?9xEqWsbw$~7$$BQVySup^|Gs11z^{Y_Ku&du;&SxPKy9F<82^~*# +e6r~nb@N01Szs6 zH@9ri4I1W!LbcSh!}3z841IYg DNw;J7YT)U+6kjj0cVp7WC!606gKR@}&g6u*Tc+#GB8#i5zJ>vX7|? z+{8P4y`j%L3BQcq4jXxMx_hX2B^i1D>O9aa+4!{fy}N3eUy8nzPCdL>zU@^Z&VOea z-B1l!zsRlMc=dc0KRbSqb?QGk3WfGCZ|* lh- z06Z(dg_N{n-JWkDrNRU()^&O+z}q=P>UyO=*=PAhl??W)mA|~bzQzc^i>l3{1ViO= zKDZO*0Q#jn@N&{LPqSCyX$nshKw`=6l4Ea{?9-#D*z6A?^3!I@Q{OTCZkqxtK>8Hf zfeI`)!k7(Gr=>@}4~Ng%o1NCz3#Jep5Cz5|aV^YI(ex|TEXC9;oX98SW*gGR=DmqS zjYh_o(GsiwCw$_$MRK-bzrTSO1`l-74eafSK^ro9G1~4t#B;jtHt9_;4WAAR24+w1 zCyb8zds^im>(37sdL3n}uflo?ZEBV=5<$n9O5=^>T!w|% v4p+E~lr@^$_-WG#U5y8n z%b}mx8 69>oo(iZt-%rO><-q 4Q6G->7gFivzjAtbKA*YM z^1z)A2VmpF!HdqyF}K+1-vlT}tCTv=3s3_+`d&2mBlc9K)9lG+oOUUo0ZD?@g?~I+ zhY;hBJ1FyRwIM6v%xyQNq}J%(pd$sZO}3GO$BI-EJ%B4*_aSJzx4_^0x-&>lR} vy8@Kv0$M$P?I<7;g5v1FYg#CO>n?+RL!+& zo5!FnyVxGfrsIV3t+ZSj0EmYEP|t;1ZV8>D+ey$SEIwJa2k7}&|LLa!hbs(QATzrK zf;sbJomv)V6C#0xO(KGY4NT|J)gIqW@+y8uV_f$~TDVW|V QwYU)!3Ck%lqQjo zRy@ojXJdO>h1ILtYO=kM8#9rEx1fyUGQ`k2QKDIq{(R9Cew$pL1zc!??NCKohyQN0 z(-TI%Sw77&?vO|%&$IfO7qclo8=8xNE>xc);;if|&|SJZ)?jW-KqRFG4*twQ6RK=Z z8^(OP?R*=$sjzD|+=?AD@qL`2V7f&Yv1n5_%LwRemTLkE^0UIPao3qIY%GdA3@w4} z)ZHm1H^MThWIPk?Ux0loWZn#HyiyZrFCtOR$ N z cdX=8^->4i?$ Xy*bxC M{hLWhMjsi{uBhT9Vf#)-MT>2O*dF@J^)XNUz_u{_j|G%<_rh32tiQP_Dy>AAf1A zF1RFK6Lcm##0S#v1kOBRLh5ytQpdfQUlp~c*J=5Z;MQb7P*MD54A2~UdaM*dL<|*Z zYCRPE)_cd|C; u41ks;QDg7fCdkItVI+8OZqWT< z@#rk_h*AbOEIozFSZ8-GBCE#+3}Ab8_KUQ~VaE`>rW9!kLWEQ1<1F5FcBQGZ2kf$| zFlO`K
7JMnK-{IZ4ZAoB-=HZWk ztMs;~Cv1;PFH+Hug9QYP3Wi0K#we6Y1-^x>LxxstRq8Q@jJ7tynurrKUOSI*t|*2d z-{=#zbNG|zVjG8~U?r}ycH@tU^k{(=fwpo4!k9HaGV9rsmlu!Iz&?nN&uR;#C*6kY` zMzixJWu?Z*KH4*X`kAR@RePMK12^Ii^{4Z7J$kcHok|@xog7$EWnyZfG3rIjqe>ty zHiK75a{rk@M9b2Ex#N#*jR+_8`;oq@^ iUh z5U4=`VVe8J?1ZQ5Bv739>s2z|LZVcwGA7okSr0_7el`K)&^AX7`>gVvFUI46bO!*o zeJA8K@F;MgAQw#r?FMqrYk+xI7`UduTs#Oxa5d2)5Fh2p&hD--AYU8tjv20O#|@|S zOkg(8>UIp1k)F;ray`G8d*93Zs*uS%O!IbP8=kD3%&V02hL_$n@o_I>_+4?^ie1p< z_CT{{*JJcX+%Pr3MzU+v*}`Y(GzVY~GJar{$qX7R)S=is^vqdsS!HGO#fq1agTuvr zKICm*jNNW%zIhGD@!&U)Way*le)kOWdwZLqsE-De6KS4$rHTH$H={HGSdzo?NxeK} zS$}49A{I&2F1NqL_-l#v>DrDX8b0(DS#4D^ul|V7+MYQp?qh$r8&17gzYD+|*;(EI zkf#AUMo3Ij_-n|{XN}VoBH)JadRV1ro*$SLIh9RCbCf`!6aFcIw-t$}=c!VfY|*pt zLBK4-EsYmjX}vT4bku_I_40A355TlF_}%wu|I9%q$!LyMq#TfsG{FSY!p|UVu#em# zbp>;F?97p7sH3Qy=-+;v;sxky|1ppc(sbLPX!vQRsb45?dAR!*gDP(JmTKE8^Q*u> zaU tf#9Buq6%w{M4l28+EK%x&3{Q?ScC!7yvRC7-N z4H@kOJ?khIk5E|npL{vKRk{;A-6Nh6Oo+R@?>kn(2ShICCVaWo&@uoCeTfSsY;%LC ztPF1B$3CCeqPb5MRy!x2)XkYkf7y8*>RQEom-`vipYnda3r#BG6~&7=uLj;Dmn7M6 z(8I#07K@M|g{v52@#e8gJ2|aHo^0@!Kd5=BI!zR EVjj0bZUo0n5lv z)Wl ZO})?)*Tm0|7cP=Y7>cY^q*#j%M4m<{3++b z*fnLp +StiDN$bpE38}`M z)Z-H0M(Mz*d_ u5G)_WwK679ix-|%FL|_f*Wz`w)0pPa0=LFs|9 cjIq2EOGo*O%al&KSyKzL;a%>6)L615#=>*uYEfK JLzg4>#J<`RvQvre*e^e{5z|W@)j@!n%+v;jwTbfUM z8Jzi=^K#&2mmM5=MK`=F$`Kv&BhQk3O!gV8<7v3txkO7eY8FmGlcKq(acSw eBBZY>$Z9CzAg3AXduT2R@;tvf^)_){YQk;a%z0;Hw|5Nf18i5a|mXSg^6gU+U0 zx5s`FNK;l6v*$$wZlHB{YP!OrTAaABTp4E#SPop8LN_3oF`kLCU^Pq-T!rkh206w* z2d`R_y_@*#({I%F;P14|w25{Gyi1E>f?Idf;|%e%X2DL5DAc*{vbH5~9L2 fRYT(Zu_6RlaNrTQPK-HRY@*No9u8zc;Jx14iquI!4d5q| z_G)-|#Fc#e3YZ}SVWgm#ey$eK)aPLg{Eu4Wdk4de8Vz89n9vMhrJF^67Fh2fV^tVb z1U~YivQ%kBZ91Ru16urh#ds03eoH0+nwo9lbFO)jk%fWW`vAdxSOTgh2{yzJfp@e) ziw~D-)2mDuFQ#MqSKG*zTH=2}Y-cP(3bsI7EsioQf9nJYjDvs)WV%TrGXJ5VLaX>$ z27=Q^kqje##+5Pd2t#atY`?0L<9tCjIu}_hHv5~?k~oY!$cMs)=eFINdWL!x@P6BX zFJ_XZ*^+U`aqk~PM9N^ICxo0!(77-<83Oc2$Jx^83{@$W(9-g+V)D@p`zgB_8O*cX zY@;d5eEUj<73~O;*&+EL!XQ+aSjasDLJ>kY6mDanT3{WoMXyHw?1Ca^KH?w*2*Oww z!wl6je%LAxL&$Q}#T|m262wCx!2bmFWAb7^@=QmPtvNiO<_2V51QPT7B#0<2ug$3i zW_oLKl8B!y^Bc5TqaNdip;3^6VYrZyK338Vd&i*<=|73lQzbQ79dT9$0Yf}+x@VSz zzaa65)xCz#R`z8nzw{`)Z;!NGS5~K_P(8al`FnZz_`2|PpZjtDeZFiPz)r>hMIdOj zpgf=q>iD%`yrhUw{deEJcAANUkLKH?fV2vuo{h=P`b?F2FE7jl+oibx1c!TnUG$(g zu%ahLwL{zJvP;=M3LX{mXh0lk<{ 5q6+miz)_;v5^}T&LVrlp*_6}#$GxX`F1xS<_d(G(&zQUn= (AY^@>kI>*A{-{^A(+9V-OY ze7d~0_B-3W-T?OoALox-$M>7n2PxZ)B}wc0-`h^BF-e};fPhfLnjwXo&qh+LJ1NYJ zC=-?K%=FFp^&-E^ z>b#SU}F-y9I>L*kCal anr*z90F;oP4$0{WUK(1>Ujn$wO!mtb2-jPGnP!Dkz>kl}m-`mHg`nM=j~5phejFI91>-Jexh^Ga zGS#}T-I5#gr)iWdm1WRgk8_M>3%filkML=bI?^Lq0g$u;&X_8$&miQ3We>JM+A?2z z(Ir%g))+^Om9`rZSs9e^V#s$eRn!!(ev}C+?C&U1lX;Aa;v_fLY9*CJI6RbF0lNdu zWf7saV2e0+-6HD2(qqx#wH5D19Y74d39c@Q#UwJCN2D(N2&%;~R6t#qYjStu2!Tw7 zbIG$!0KjFlT>DpV1Ci0_vz(}FC|DOfjs_B3OS^`;)j9XnkOGOi!mjb~B!GW`PQNn{ zAqdOp-~|fA|Jjg`loprgI!Z|DV$Q~EHaT|P)qC}Na$i;pE@`%xlcf$u>djK{pSGC6 zn3I$bAaSf^7p|_6tn$K8!O=;(VW9G5pi? gq()@CiO7OjTnx zj&ozA1VQ?lq{z)W9dnC3u2l$>7f0{0)+WMq)EGR+ZQd;)yujhj0ZkEGpL}%K$Y9T* zzI8aw{p(Iz#>J0dB}Oez5h+d+s-tP3OwF&{9KV4m4rNIi#) ={A5MLr+I64g4Y`3QK)j5955rUYxH3xCR`fAC3( zZavNfG5V*iFrGn-cc0`HQodHFv>zdU4xq-*?AV{j%3I|eei9;?gIILN#yfjX;m%Cg z098`QW{LE6;;U{)>7DEU;p;!(vHsr2alD)Rwo=I6TQ>K7+na1ki0qM-ovdWsk&zU# zo+Tq>B}Cbq?Cgx}5gNAa@IR>6>-GNrK9B#y s;qL$;mM^HI)4f zKgyh#o_?uqaeevHB5`M&&Fwx}adCKAomsUk=H9r7-*X}>t5Da~uB_-E6LU}c9)FBF z_7N%=pH|6O+-tQ<5*x0XQ0jBW8m3X_jIyf0Ji!QvsbMpTs~}NHC0{+s@3DvX%&u_B zd{eJ3jY%ZS)eA@}Qg*8lGs zju}XUX_>HXJKT%2q=CXmGl}cc?Y*Ff*407>{9BfCbBVLG`pH$FDa^7S^pi?ixcpp8 ziEu6ZcumPxCuz_3J%eIm@57`{7OC;IBTQ|qgY^8)B`y;(RW2H9*87*u6y HJ+vJuF^|f9u)8@hMi;+U$r A97KTC?Nj}X;$Hr<$Ik#SQqGgGHkhRNi^ zBa0hby<%vKc<~gKmy1s3uYIF;&jtJr#l%o5554{-t9@LIFB8-i`_PqKezvNho#)tM z5axD1Ja3R@@nCb%uU({fvX(~f>I;LS$we)wPJ}>2H=|3o8v3G6(f9UwmJR*%!Lhlu z6r1{VTPV?cyO*+4rA(qtz78+7HQ(sGS6STI8NNxmsCCo3?CB&8^cERjQmlCVVV!Pp zmT36958wZH69Xv-Zsxv-=wd$mxcHxwB;eEH&-Vrz2{I!P&C$m)ZPLdI%>KDP4cs3i zczT*7wrcjz4Qk*KGPX#Y^yJRClS|mRp=Z9}Lb$}aD=_5A4Q!OLWg8cvWEcV$074{! zIGpc=zFxh+cXBA^ xNA%|Z r}Ro)niuy+y}VCO4dX$%*~Pgqg%6T|L)y}rI9j$gPlrG1Y| zKyTEbk!ha+5$5K$C#YXd&4Ir6{o`lDKKjBO?fCEapGy~3zh1l 4q6}N{E|^bYqjf8f%wE+_Y;%5Ez_Rep cBC2dVkf`)l&PhN`%pmY zfv#)x6F-aGF7qq}e{c(`aN6f%j^R)L;4kp-Vd_W!q$$Fq7sNDf5nnm1_cg9mC!}LM zFI^6~Y55^ojG4G88>ZbTu~00_c=e9@o6oPZl*PW|k0 gjeN1sghETzG2c049bkp2pPBwh4=T|1LiX<}F7~s|_61Z!=_~|8(MUL3vOpZ=1 zV6VM#6d%{+FWq_0>DfVmmWYmLH%HCe2N*GBiLGJhUgkY%3+FV)QC#b+HIt9Mo>Q0> z81@04{Ya0!%`#TU&>gGJ%nw+DDeW&6L({U s&Z40^zuav$3hboKrxLDf!E{I@a z@ad-*-r#RIlxG`!p65&L C&M56P%5*^b-E6QDYb8 7OQC&>bV>EV zuQKj?oQLUqPJ5Gi2Di;`>lPd3Y6|C3dl)u?TesRC#$JCBCzN4NYM-YQuuEf%@8BVS z!K~pba?T@%cB40w@e`Hir9FZk%CIrEXYxkESFH#s-}7FzcQ&v|S6IkdOPmnXs!e=3 zZ#kdYymCpg5Uq=M>(Y$0d~d^$dp(KpWx8uaJ?uC)tS;SVSby%NmlaG8sqMeDvVlOR z;n8#H;c-ehtQoqyX#L?JNrJociiS9H?FKf5aWnVt+GhD&3e!Yl!>x&Vzs{l^u~PNO zh-tQz)^MmZIXMHXcT}(GU4JXrB4! iNpYmJr=Oe_`tqH23WhS<2$emlaVV_b+M}nRjm7wYK_D z_X97pqoCQwIExMMm93)kk)&m2)W?$cMT~@Kspe-*eR^VkiAhRr1=8LSeeUc@*R17q zk7s72yhB`M^0RJbuh~*2<|!-pEU~H{9~hKVbl%1ex#)NFD5Pmm#kOC6iFcpvv2rwv zr9kelxC7-#>XISb4=!HUBnBL4>k=FK%9Ul)B4~IC`q n{WG=el#gI>Dud&`x`M6%nv9~_zAe~a{La_4^9=@+`55wsO{P=nK1QB%XZ z+U_gv`FUt#`Xb)u%A5X!+BY4+8yv3hfiD*!rtm(yZ+XDW{{EFdQ)BtqH13Zy209 zT6~r-4EMp^3-0@WRFA4G(&PJC^ZUp<6?4>usoP&^3d7X;9uHQn)*h}6L>(Wjo3F|q z{r>VYb@KQiEcLiIM9cXXm876c%1iY(>9M~HNHa|_xw*+^H%d%G1JYF%t%(+5W-*3e zWh}dA)CjTjqx1u_+Y`tFZfa9N `UUYA+h@D&kaSD+-zJZ{#$RjKn z*Qdl+s6^z| Rud<%-R ~!Kf>V*sPkM3W{UevN%pGnWh}7~*~GEul^?xqctd!SE|FG!s?X|e_%PRy z{Pq`}sxsNGT~4Io)YU%Vke>JaWJ_|j?~C|yCTWkpd)X@^2}JaWhc%qm`_hYoWtGG& zV>TUMcL6gv+LFXetFR=8x@gLsM6ZDJT!IPbI_=S2m2s9Akq)jm%L<5ZuZwcH{6IAS zls`nflb+udgjsP!D|_F50W*EkA{2@Fw&GUvQnOCCYT$d3hak~s6Vb)x^3dWEN2!PR zX-eLGOnUbD4LR+=?Y@k}2qW6`g8K_lBE4RFVz+^2iBW D|0`g^?yJZ`cz?` l_0#zWbAV zz4zWBG8b1gf(}R yfh0Ct6dr9F{yMM^D_$Fx-mlq_d*%M_LG^*?e2;uz z_!V5kbZn5APGdFBZsB*{{KpCUswXt(630131*sqQxH`B|KFs-qyZ>|tq*!3YU=!b5 ze$=AjQgidOZ%elgyWLjXEF&j;uU!8lLN~ZygwpSWN&_8aO@6MQ?!x^naf@#`knclw zZ&twql5dO(A3A=;=C})DB5q1>D9nW<^5adpvk2LXb}R3{GX1438C0Mhm`FNZjEkY7 zjp6eOU`gblWqo5imFatrm%{n(XH56=#){%07v%l#DLjnx1uE|6H_HiCKd?3|XkE4W z_33Sm?-ya6&=&kl6P?rjjzPsa^$^0fCe5VW*o&u#5=DrpEX4U{iZNWg c}t1PXda ziQtGYh4Dg%Fc=y1iV8*_TjzxXQNv);Fcd@*ibDyFV}V 00=%VOdDE8fLDML4OEB=JNpWOe#2pxAYUBtOcD>=hSF<+ zg9m-Wfytbl2cm*n@nC{bDh!5zZsNjZ&z{}D2hUDlK938NI=d^H5}Lt>k)Lu3SrEbC zkSiWc_U}(Z1b?YL!UF<0`_zFN31FhoV|)Pi=YeNAoHJH-jtrtFfKkDOpc#(8^f(j1 zq#@U@a4Km0JV3fb07yBlIuHW>9-Tk=^#WjgpAh^?N(kfts;XzaWDo*geqVrHh4?SP z ruA_qjZlL3sNL=DAK z08O5p1H(d#L)wo3dUJBX;z=5VGXWHk!(>hp7C?EFe>HTS5-3!H0w#Bw$N&i;H*v@y zIT9E<)JXv> P?dv5nPHc3MZ|^q(SXMsdYA?jOa~+(zyM@+fgZ>VlxUz~2JqrjP$3aPev}Xz zqGSXZfJNg&oAdy+Tm|Sl9~i;yKmH7$(P>qI3C4BS2#pltN25fcU?$M$RNNMfpb;T6 z>>Biw5l{h2)X;lom^co|9l?(hhb&n^=f+_HM$y9r$hpq~$T46Bm_dmKVqt}GKpY$} zQfyHa5-M`UA&1;qfo;gJ0IWY)L3jN0r$h}sV>^Q-LkNlR3!~03e`N!h^H~A3Av>T! zj1ABLN|ewMJ4_M>q^00T2}5ZrK>a!#0Fss+(9psGAm7>GAfPt@=%h*uxn2fxVOGZ> zMIgoaQ6f;mWuUJJ4uDsb6Hq~Y`K&|@O>zRjXBs%9I4D7Wu(Jv=aGl8y58As76qv~c zkcV&rGC+wM(&PrvQ@PHn