diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2019-06-07 09:08:42 +0200 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2019-06-07 09:08:42 +0200 |
commit | a29cce747f3717e32231c9a92b40be12832037b6 (patch) | |
tree | 70f399682dec8657719eae4358e87cdc24bbf42f | |
parent | 9a02751c1e588a5bbb83bb7e543c26486d3079d5 (diff) | |
download | incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.gz incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.bz2 incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.tar.xz incremental-dfsts-a29cce747f3717e32231c9a92b40be12832037b6.zip |
Finish for submission
-rw-r--r-- | abstract.tex | 13 | ||||
-rw-r--r-- | conclusion.tex | 9 | ||||
-rw-r--r-- | cover.tex | 15 | ||||
-rw-r--r-- | edit-lens/src/Control/DFST.lhs | 4 | ||||
-rw-r--r-- | edit-lens/src/Control/DFST/Lens.lhs | 25 | ||||
-rw-r--r-- | edit-lens/src/Control/Edit.lhs | 8 | ||||
-rw-r--r-- | edit-lens/src/Control/Edit/String.lhs | 4 | ||||
-rw-r--r-- | edit-lens/src/Control/Edit/String/Affected.lhs | 2 | ||||
-rw-r--r-- | edit-lens/src/Control/FST.lhs | 33 | ||||
-rw-r--r-- | edit-lens/src/Control/FST/Lens.tex | 4 | ||||
-rw-r--r-- | edit-lens/src/Control/Lens/Edit.lhs | 12 | ||||
-rw-r--r-- | implementation.tex | 19 | ||||
-rw-r--r-- | intro.tex | 47 | ||||
-rw-r--r-- | org.tex | 14 | ||||
-rw-r--r-- | sigillum.pdf | bin | 0 -> 69369 bytes | |||
-rw-r--r-- | sigillum.pdf_tex | 58 | ||||
-rw-r--r-- | sigillum.svg | 19 | ||||
-rw-r--r-- | template.tex | 488 | ||||
-rw-r--r-- | thesis.args | 2 | ||||
-rw-r--r-- | thesis.deps | 8 | ||||
-rw-r--r-- | thesis.meta.yml.gup | 43 | ||||
-rw-r--r-- | thesis.tex | 6 | ||||
-rw-r--r-- | title.tex | 28 |
23 files changed, 753 insertions, 108 deletions
diff --git a/abstract.tex b/abstract.tex new file mode 100644 index 0000000..9b8949a --- /dev/null +++ b/abstract.tex | |||
@@ -0,0 +1,13 @@ | |||
1 | \section*{Zusammenfassung} | ||
2 | |||
3 | Parser, die bekannte Texte nach einer kleinen Änderung neu analysieren können, ohne die ganze Eingabe erneut zu betrachten, nennt man inkrementell. | ||
4 | |||
5 | Inkrementelle Parser sind seit den 1970er-Jahren bekannt und inzwischen umfangreich erforscht. | ||
6 | |||
7 | Edit-lenses sind eine vergleichsweise neue algebraische Darstellung von Programmen, die algebraisch strukturierte Änderungen zwischen Strukturen übersetzen. | ||
8 | |||
9 | Wir demonstrieren, dass sich Inkrementelle Parser in der Sprache von edit-lenses fassen lassen, anhand einer besonders einfachen Klasse von Parsern, den deterministic finite state transducers. | ||
10 | |||
11 | Hierzu speichern wir im unterliegenden Zustand der assoziierten edit-lens die Ausgabe-Wirkung des DFST als balancierten Binärbaum um Teile davon effizient austauschen zu können. | ||
12 | |||
13 | Im Rahmen dessen stellen wir eine Implementierung von edit-lenses im Allgemeinen und unserem Verfahren in möglichst idiomatischem Haskell vor. | ||
diff --git a/conclusion.tex b/conclusion.tex index c604841..b0b8ae7 100644 --- a/conclusion.tex +++ b/conclusion.tex | |||
@@ -1,4 +1,9 @@ | |||
1 | Wir haben Definitionen von edit-lenses, finite-state-automata und manchen nützlichen algebraischen Operationen (Wort-DFST, Produkt von FSTs) darauf, sowohl menschenlesbar als auch in lauffähigem und idiomatischen Haskell gegeben. | ||
2 | Wir haben zudem ein Verfahren dargelegt, um aus einem gegebenen DFST einen inkrementellen Parser abzuleiten und diesen direkt als edit-lens konstruiert, um später Wiederverwendbarkeit zu gewährleisten. | ||
3 | Die gewünschte Laufzeitcharakteristik erreichen wir indem wir als Komplement einen balancierten Binärbaum von Transducer-Wirkungen speichern und, soweit möglich, nur Teilbäume davon betrachten müssen, um einen edit zu propagieren. | ||
4 | Zudem beschreiben wir ein interaktives Demonstrationsprogramm für das dargelegte Verfahren, das wir zusammen mit der Haskell-Implementierung ausliefern und geben einen groben Überblick über die bestehende Forschung in diesem Gebiet. | ||
5 | |||
1 | Unsere konkrete Implementierung hat, wie in Abschnitt \ref{performance} besprochen, Performance-Charakteristik, die sie für den tatsächlichen Einsatz untauglich macht. | 6 | Unsere konkrete Implementierung hat, wie in Abschnitt \ref{performance} besprochen, Performance-Charakteristik, die sie für den tatsächlichen Einsatz untauglich macht. |
2 | Aufgrund der Struktur unserer Implementierung lässt sich jedoch eine der unterliegenden Ideen, das Komplement der edit-lens als Binärbaum von Wirkungen darzustellen und durch effizientes Austauschen von Baumfragmenten die gewünschte Laufzeit-Charakteristik zu erreichen, in Zukunft recht einfach auf andere Parser anwenden. | 7 | Aufgrund der Struktur unserer Implementierung (siehe Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser}) lässt sich jedoch eine der unterliegenden Ideen, das Komplement der edit-lens als Binärbaum von Wirkungen darzustellen und durch effizientes Austauschen von Baumfragmenten die gewünschte Laufzeit-Charakteristik zu erreichen, in Zukunft recht einfach auf andere Parser anwenden. |
3 | 8 | ||
4 | Zusammenfassend haben wir eine neue und non-triviale Anwendung von edit-lenses vorgestellt. | 9 | Zusammenfassend haben wir eine neue und nicht-triviale Anwendung von edit-lenses vorgestellt. |
diff --git a/cover.tex b/cover.tex new file mode 100644 index 0000000..3055f48 --- /dev/null +++ b/cover.tex | |||
@@ -0,0 +1,15 @@ | |||
1 | {\sffamily | ||
2 | \centering | ||
3 | {\scshape\LARGE Ludwig-Maximilians-Universität München\par} | ||
4 | \vspace{1cm} | ||
5 | \def\svgwidth{0.33 \textwidth} | ||
6 | \input{sigillum.pdf_tex}\par\vspace{1cm} | ||
7 | \vspace{1cm} | ||
8 | %{\huge \uppercase{Bachelorarbeit}\par} | ||
9 | %\vspace{0.5cm} | ||
10 | {\fontsize{1cm}{1.5cm}\selectfont Inkrementelle Parser als edit-lenses anhand von DFSTs \par} | ||
11 | \vfill | ||
12 | {\LARGE Gregor \textsc{Kleen}\par} | ||
13 | % Bottom of the page | ||
14 | {\LARGE \the\year\par} | ||
15 | } | ||
diff --git a/edit-lens/src/Control/DFST.lhs b/edit-lens/src/Control/DFST.lhs index eb838ae..48feaf9 100644 --- a/edit-lens/src/Control/DFST.lhs +++ b/edit-lens/src/Control/DFST.lhs | |||
@@ -41,7 +41,7 @@ import Text.Dot | |||
41 | \begin{defn}[deterministic finite state transducer] | 41 | \begin{defn}[deterministic finite state transducer] |
42 | Wir nennen einen FST \emph{deterministic}, wenn jedes Paar aus Ausgabezustand und Eingabesymbol maximal eine Transition zulässt, $\epsilon$-Transitionen keine Schleifen bilden und die Menge von initialen Zuständen einelementig ist. | 42 | Wir nennen einen FST \emph{deterministic}, wenn jedes Paar aus Ausgabezustand und Eingabesymbol maximal eine Transition zulässt, $\epsilon$-Transitionen keine Schleifen bilden und die Menge von initialen Zuständen einelementig ist. |
43 | 43 | ||
44 | Zusätzlich ändern wir die Darstellung indem wir $\epsilon$-Transitionen kontrahieren. | 44 | Zusätzlich ändern wir die Darstellung, indem wir $\epsilon$-Transitionen kontrahieren. |
45 | Wir erweitern hierfür die Ausgabe pro Transition von einem einzelnen Zeichen zu einem Wort beliebiger Länge und fügen, bei jeder Kontraktion einer $\epsilon$-Transition $A \rightarrow B$, die Ausgabe der Transition vorne an die Ausgabe aller Transitionen $B \rightarrow \ast$ von $B$ an. | 45 | Wir erweitern hierfür die Ausgabe pro Transition von einem einzelnen Zeichen zu einem Wort beliebiger Länge und fügen, bei jeder Kontraktion einer $\epsilon$-Transition $A \rightarrow B$, die Ausgabe der Transition vorne an die Ausgabe aller Transitionen $B \rightarrow \ast$ von $B$ an. |
46 | \end{defn} | 46 | \end{defn} |
47 | 47 | ||
@@ -92,7 +92,7 @@ toFST DFST{..} = flip execState initialFST $ forM_ (Map.toList stTransition) han | |||
92 | \end{comment} | 92 | \end{comment} |
93 | 93 | ||
94 | Das Ausführen eines DFST auf eine gegebene Eingabe ist komplett analog zum Ausführen eines FST. | 94 | Das Ausführen eines DFST auf eine gegebene Eingabe ist komplett analog zum Ausführen eines FST. |
95 | Unsere Implementierung nutzt die restriktivere Struktur aus unserer Definition von DFSTs um den Determinismus bereits im Typsystem zu kodieren. | 95 | Unsere Implementierung nutzt die restriktivere Struktur aus unserer Definition von DFSTs, um den Determinismus bereits im Typsystem zu kodieren. |
96 | 96 | ||
97 | \begin{code} | 97 | \begin{code} |
98 | runDFST :: forall state input output. (Ord state, Ord input) => DFST state input output -> Seq input -> Maybe (Seq output) | 98 | runDFST :: forall state input output. (Ord state, Ord input) => DFST state input output -> Seq input -> Maybe (Seq output) |
diff --git a/edit-lens/src/Control/DFST/Lens.lhs b/edit-lens/src/Control/DFST/Lens.lhs index 56f37a0..04dade5 100644 --- a/edit-lens/src/Control/DFST/Lens.lhs +++ b/edit-lens/src/Control/DFST/Lens.lhs | |||
@@ -68,7 +68,7 @@ import Data.Universe (Finite(..)) | |||
68 | \begin{defn}[Ausgabe-Wirkung von DFSTs] | 68 | \begin{defn}[Ausgabe-Wirkung von DFSTs] |
69 | Wir definieren zunächst die \emph{Ausgabe-Wirkung}\footnote{Wir schreiben im Folgenden auch nur \emph{Wirkung}} eines DFST auf einen festen String als eine Abbildung \texttt{state -> (Seq output, Maybe state)}, die den aktuellen Zustand vor dem Parsen des Strings auf den Zustand danach und die (womöglich leere) Ausgabe schickt. | 69 | Wir definieren zunächst die \emph{Ausgabe-Wirkung}\footnote{Wir schreiben im Folgenden auch nur \emph{Wirkung}} eines DFST auf einen festen String als eine Abbildung \texttt{state -> (Seq output, Maybe state)}, die den aktuellen Zustand vor dem Parsen des Strings auf den Zustand danach und die (womöglich leere) Ausgabe schickt. |
70 | Wir annotieren Wirkungen zudem mit dem konsumierten String. | 70 | Wir annotieren Wirkungen zudem mit dem konsumierten String. |
71 | Diese Wirkungen bilden einen Monoiden analog zu Endomorphismen, wobei die Resultat-Strings concateniert werden. | 71 | Diese Wirkungen bilden einen Monoiden analog zu Endomorphismen, wobei die Resultat-Strings konkateniert werden. |
72 | 72 | ||
73 | \begin{code} | 73 | \begin{code} |
74 | data DFSTAction state input output = DFSTAction | 74 | data DFSTAction state input output = DFSTAction |
@@ -132,13 +132,13 @@ Wir bedienen uns hierbei einer bestehenden Programmbibliothek \cite{composition- | |||
132 | \begin{figure}[H] | 132 | \begin{figure}[H] |
133 | \centering | 133 | \centering |
134 | \pinclude{presentation/switchdfst.tex} | 134 | \pinclude{presentation/switchdfst.tex} |
135 | \caption{\label{fig:switchdfst} Ein einfacher DFST, der zwischen zwei Zustanden wechselt und Ausgabe abhängig vom aktuellen Zustand erzeugt} | 135 | \caption{\label{fig:switchdfst} Ein einfacher DFST, der zwischen zwei Zuständen wechselt und Ausgabe abhängig vom aktuellen Zustand erzeugt} |
136 | \end{figure} | 136 | \end{figure} |
137 | 137 | ||
138 | Auf $s$ wechselt der DFST seinen Zustand, auf $p$ produziert er, abhängig vom aktuellen Zustand, genau ein Zeichen. | 138 | Auf $s$ wechselt der DFST seinen Zustand, auf $p$ produziert er, abhängig vom aktuellen Zustand, genau ein Zeichen. |
139 | 139 | ||
140 | Wir stellen die Wirkung des DFST auf den Eingabe-String $spp$ grafisch analog zur Baumstruktur von \texttt{Compositions} dar. | 140 | Wir stellen die Wirkung des DFST auf den Eingabe-String $spp$ grafisch analog zur Baumstruktur von \texttt{Compositions} dar. |
141 | Wir bedienen uns hier der Darstellung von Automaten-Wirkungen als \emph{Schaltboxen} aus \cite{hofmann2011automatentheorie}, angepasst für DFSTs indem wir die Ausgabe des transducers an den Pfaden innerhalb der Schaltbox annotieren. | 141 | Wir bedienen uns hier der Darstellung von Automaten-Wirkungen als \emph{Schaltboxen} aus \cite{hofmann2011automatentheorie}, angepasst für DFSTs, indem wir die Ausgabe des transducers an den Pfaden innerhalb der Schaltbox annotieren. |
142 | 142 | ||
143 | \begin{figure}[H] | 143 | \begin{figure}[H] |
144 | \centering | 144 | \centering |
@@ -160,22 +160,23 @@ dfstaProduces = fmap fst . runDFSTAction' | |||
160 | \end{code} | 160 | \end{code} |
161 | \end{comment} | 161 | \end{comment} |
162 | 162 | ||
163 | Für $\Rrightarrow$ können wir die alte DFST-Wirkung zunächst anhand des Intervalls in dem der input-String von allen gegebenen edits betroffen ist (\texttt{affected}) in einen unveränderten Prefix und einen womöglich betroffenen Suffix unterteilen. | 163 | Für $\Rrightarrow$ können wir die alte DFST-Wirkung zunächst, anhand des Intervalls, in dem der input-String von allen gegebenen edits betroffen ist (\texttt{affected}), in einen unveränderten Prefix und einen womöglich betroffenen Suffix unterteilen. |
164 | 164 | ||
165 | Da wir wissen welche Stelle im input-String vom ersten gegebenen edit betroffen ist können wir, anhand der Wirkung des Teilstücks bis zu jener Stelle, den betroffenen Suffix wiederum teilen. | 165 | Da wir wissen welche Stelle im input-String vom ersten gegebenen edit betroffen ist, können wir, anhand der Wirkung des Teilstücks bis zu jener Stelle, den betroffenen Suffix wiederum teilen. |
166 | Die Wirkung ab der betroffenen Stelle im input-String können wir als Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen. | 166 | Die Wirkung ab der betroffenen Stelle im input-String können wir als Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen. |
167 | Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung zu bestimmen, wir bedienen uns hierzu dem Unix Standard-Diff-Algorithmus zwischen der ursprünglichen Ausgabe und dem Ergebnis der Iteration des Verfahrens auf alle gegebenen edits. | 167 | Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung zu bestimmen. |
168 | Wir bedienen uns hierzu dem Unix Standard-Diff-Algorithmus zwischen der ursprünglichen Ausgabe und dem Ergebnis der Iteration des Verfahrens auf alle gegebenen edits. | ||
168 | 169 | ||
169 | Für die asymmetrische edit-lens entgegen der DFST-Richtung $\Lleftarrow$ verwenden wir Breitensuche über die Zustände des DFST innerhalb des von allen gegeben edits betroffenen Intervalls: | 170 | Für die asymmetrische edit-lens entgegen der DFST-Richtung $\Lleftarrow$ verwenden wir Breitensuche über die Zustände des DFST innerhalb des von allen gegeben edits betroffenen Intervalls: |
170 | 171 | ||
171 | Wir unterteilen zunächst das Komplement an den Grenzen des betroffenen Intervalls im output-String in drei Teile (durch Akkumulation der Elemente des Komplements bis die gewünschte Länge erreicht ist). | 172 | Wir unterteilen zunächst das Komplement an den Grenzen des betroffenen Intervalls im output-String in drei Teile durch Akkumulation der Elemente des Komplements bis die gewünschte Länge erreicht ist. |
172 | 173 | ||
173 | Wir transformieren dann den DFST in einen FST, dessen Ausgabe wir mit \texttt{restrictOutput} auf das gewünschte Fragment einschränken, setzen als initialen Zustand des FST den Zustand am linken Rand des von den edits betroffenen Intervalls und akzeptieren jene Zustände, von denen aus das Komplement-Fragment ab dem rechten Rand des betroffenen Intervalls zu einem im ursprünglichen DFST akzeptierenden Zustand führt. | 174 | Wir transformieren dann den DFST in einen FST, dessen Ausgabe wir mit \texttt{restrictOutput} auf das gewünschte Fragment einschränken, setzen als initialen Zustand des FST den Zustand am linken Rand des von den edits betroffenen Intervalls und akzeptieren jene Zustände, von denen aus das Komplement-Fragment ab dem rechten Rand des betroffenen Intervalls zu einem im ursprünglichen DFST akzeptierenden Zustand führt. |
174 | 175 | ||
175 | Wir verwenden dann gewöhnliche Breitensuche über die Zustände und Transitionen des soeben konstruierten FSTs um einen Lauffragment zu bestimmen, dass wir in das betroffene Intervall einsetzen können. | 176 | Wir verwenden dann gewöhnliche Breitensuche über die Zustände und Transitionen des soeben konstruierten FSTs, um einen Lauffragment zu bestimmen, das wir in das betroffene Intervall einsetzen können. |
176 | Hierbei sind sämtliche Randbedingungen (korrekte Ausgabe, Übereinstimmung an den Intervallgrenzen) bereits in den FST kodiert sodass wir nur noch prüfen müssen, dass der gefunde Lauf in einem akzeptierenden Zustand endet. | 177 | Hierbei sind sämtliche Randbedingungen (korrekte Ausgabe, Übereinstimmung an den Intervallgrenzen) bereits in den FST kodiert, sodass wir nur noch prüfen müssen, dass der gefundene Lauf in einem akzeptierenden Zustand endet. |
177 | 178 | ||
178 | Die input-edits können nun wiederum, unter Beachtung der Verschiebung der Indices um die Länge der Eingabe vor der linken Intervallgrenze, mit dem Unix Standard-Diff-Algorithmus berechnet werden. | 179 | Die input-edits können nun wiederum, unter Beachtung der Verschiebung der Indizes um die Länge der Eingabe vor der linken Intervallgrenze, mit dem Unix Standard-Diff-Algorithmus berechnet werden. |
179 | 180 | ||
180 | \begin{comment} | 181 | \begin{comment} |
181 | \begin{code} | 182 | \begin{code} |
@@ -323,7 +324,7 @@ bfs outgoing predicate | |||
323 | Wie auch im ursprünglichen DFST sind alle Zustände akzeptierend. | 324 | Wie auch im ursprünglichen DFST sind alle Zustände akzeptierend. |
324 | 325 | ||
325 | Wir müssen nun bestimmen welche Zustände, unter $\text{act}_\text{R}$, zu einem akzeptierenden Zustand führen. | 326 | Wir müssen nun bestimmen welche Zustände, unter $\text{act}_\text{R}$, zu einem akzeptierenden Zustand führen. |
326 | Da alle Zustände akzeptieren ist hier jeder Zustand geeignet. | 327 | Da alle Zustände akzeptieren, ist hier jeder Zustand geeignet. |
327 | 328 | ||
328 | Wir müssen nun (vermöge Breitensuche) den kürzesten Pfad im Produkt-FST zwischen $Q_\text{L}$ und einem der Zustände finden, der unter $\text{act}_\text{R}$ zu einem akzeptierenden Zustand im ursprünglichen transducer führt. | 329 | Wir müssen nun (vermöge Breitensuche) den kürzesten Pfad im Produkt-FST zwischen $Q_\text{L}$ und einem der Zustände finden, der unter $\text{act}_\text{R}$ zu einem akzeptierenden Zustand im ursprünglichen transducer führt. |
329 | Der leere Pfad ist geeignet. | 330 | Der leere Pfad ist geeignet. |
@@ -339,7 +340,7 @@ bfs outgoing predicate | |||
339 | \text{\tt \textbackslash n} \cdot e = \epsilon | 340 | \text{\tt \textbackslash n} \cdot e = \epsilon |
340 | \end{equation*} | 341 | \end{equation*} |
341 | Man beachte das $\text{\tt \textbackslash n}$ und $\epsilon$ hierbei die \emph{Eingaben} von $\text{act}_{e^\prime}$ bzw. $\text{act}_0$ sind. | 342 | Man beachte das $\text{\tt \textbackslash n}$ und $\epsilon$ hierbei die \emph{Eingaben} von $\text{act}_{e^\prime}$ bzw. $\text{act}_0$ sind. |
342 | Nach Behandlung der Indices ergibt sich $e = \rho_{80}$. | 343 | Nach Behandlung der Indizes ergibt sich $e = \rho_{80}$. |
343 | 344 | ||
344 | Als neues Komplement erhalten wir: | 345 | Als neues Komplement erhalten wir: |
345 | 346 | ||
diff --git a/edit-lens/src/Control/Edit.lhs b/edit-lens/src/Control/Edit.lhs index 80c143a..98fa8c4 100644 --- a/edit-lens/src/Control/Edit.lhs +++ b/edit-lens/src/Control/Edit.lhs | |||
@@ -6,10 +6,10 @@ module Control.Edit | |||
6 | \end{code} | 6 | \end{code} |
7 | \end{comment} | 7 | \end{comment} |
8 | 8 | ||
9 | Um das intuitive Verhalten von Änderungen auf Texten\footnote{Im folgenden \emph{edits}} und ihre interne algebraische Struktur zu fassen formalisieren wir sie als \emph{Moduln}: | 9 | Um das intuitive Verhalten von Änderungen auf Texten\footnote{Im folgenden \emph{edits}} und ihre interne algebraische Struktur zu fassen, formalisieren wir sie als \emph{Moduln}: |
10 | 10 | ||
11 | \begin{defn}[Moduln] | 11 | \begin{defn}[Moduln] |
12 | Ein \emph{Modul} $M$ ist eine partielle Monoidwirkung zusammen mit einem schwach-initialen Element\footnote{Gemeint ist hier die übliche Definition von \emph{schwach-initial} aus der Kategorientheorie—ein Modul $M$ bildet eine Kategorie mit Objekten aus $\Dom M$ und Morphismen von $x$ nach $y$ den Monoidelementen $\partial x \in \partial M$ sodass $x \cdot \partial x = y$} (bzgl. der Monoidwirkung) auf dem Träger, d.h. $M = (\Dom M, \partial M, \init_M)$ ist ein Tupel aus einer Trägermenge $\Dom M$, einem Monoid $\partial M$ zusammen mit mit einer partiellen Funktion $\cdot \colon \Dom M \times \partial M \to \Dom$, die \emph{kompatibel} ist mit der Monoid-Struktur: | 12 | Ein \emph{Modul} $M$ ist eine partielle Monoidwirkung zusammen mit einem schwach-initialen Element\footnote{Gemeint ist hier die übliche Definition von \emph{schwach-initial} aus der Kategorientheorie—ein Modul $M$ bildet eine Kategorie mit Objekten aus $\Dom M$ und Morphismen von $x$ nach $y$ den Monoidelementen $\partial x \in \partial M$ sodass $x \cdot \partial x = y$} (bzgl. der Monoidwirkung) auf dem Träger. D.h. $M = (\Dom M, \partial M, \init_M)$ ist ein Tupel aus einer Trägermenge $\Dom M$, einem Monoid $\partial M$ zusammen mit einer partiellen Funktion $\cdot \colon \Dom M \times \partial M \to \Dom M$, die \emph{kompatibel} ist mit der Monoid-Struktur: |
13 | 13 | ||
14 | \begin{itemize} | 14 | \begin{itemize} |
15 | \item $\forall m \in \Dom M \colon m \cdot 1_{\partial M} = m$ | 15 | \item $\forall m \in \Dom M \colon m \cdot 1_{\partial M} = m$ |
@@ -22,7 +22,7 @@ $$\forall m \in \Dom M \ \exists \partial m \in \partial M \colon m = \init_M \c | |||
22 | 22 | ||
23 | Wir führen außerdem eine Abbildung $(\init_M \cdot)^{-1} \colon \Dom M \to \partial m$ ein, die ein $m$ auf ein arbiträr gewähltes $\partial m$ abbildet für das $\init_M \cdot \partial m = m$ gilt. | 23 | Wir führen außerdem eine Abbildung $(\init_M \cdot)^{-1} \colon \Dom M \to \partial m$ ein, die ein $m$ auf ein arbiträr gewähltes $\partial m$ abbildet für das $\init_M \cdot \partial m = m$ gilt. |
24 | 24 | ||
25 | In Haskell charakterisieren wir Moduln über ihren Monoid, d.h. die Wahl des Monoiden \texttt{m} legt den Träger \texttt{Domain m}, die Wirkung \texttt{apply}, das initiale Element \texttt{init} und $(\init_M \cdot)^{-1}$ eindeutig fest\footnote{Betrachten wir mehrere Moduln über dem selben Träger (oder mit verschiedenen Wirkungen) führen wir neue, isomorphe Typen ein (\texttt{newtype}-Wrapper)}. | 25 | In Haskell charakterisieren wir Moduln über ihren Monoid, d.h. die Wahl des Monoiden \texttt{m} legt den Träger \texttt{Domain m}, die Wirkung \texttt{apply}, das initiale Element \texttt{init} und $(\init_M \cdot)^{-1}$ eindeutig fest\footnote{Betrachten wir mehrere Moduln über dem selben Träger (oder mit verschiedenen Wirkungen), führen wir neue, isomorphe Typen ein (\texttt{newtype}-Wrapper)}. |
26 | Eine Repräsentierung als Typklasse bietet sich an: | 26 | Eine Repräsentierung als Typklasse bietet sich an: |
27 | 27 | ||
28 | \begin{code} | 28 | \begin{code} |
@@ -50,7 +50,7 @@ apply' md e = flip apply e =<< md | |||
50 | \end{code} | 50 | \end{code} |
51 | \end{defn} | 51 | \end{defn} |
52 | 52 | ||
53 | Wir weichen von der originalen Definition von Moduln aus \cite{hofmann2012edit} darin ab, dass wir für das ausgezeichnete Element $\init_X$ des Trägers explizit (und konstruktiv\footnote{$(\init_M \cdot)^{-1}$}) fordern, dass es ein schwach-initiales Element bzgl. der Monoidwirkung sei. | 53 | Wir weichen von der originalen Definition von Moduln aus \cite{hofmann2012edit} ab, indem wir für das ausgezeichnete Element $\init_X$ des Trägers explizit (und konstruktiv\footnote{$(\init_M \cdot)^{-1}$}) fordern, dass es ein schwach-initiales Element bzgl. der Monoidwirkung sei. |
54 | 54 | ||
55 | \begin{comment} | 55 | \begin{comment} |
56 | \begin{defn}[Modulhomomorphismen] | 56 | \begin{defn}[Modulhomomorphismen] |
diff --git a/edit-lens/src/Control/Edit/String.lhs b/edit-lens/src/Control/Edit/String.lhs index c1411cf..f0ca588 100644 --- a/edit-lens/src/Control/Edit/String.lhs +++ b/edit-lens/src/Control/Edit/String.lhs | |||
@@ -24,7 +24,7 @@ import Data.Monoid | |||
24 | \end{comment} | 24 | \end{comment} |
25 | 25 | ||
26 | \begin{defn}[Atomare edits of strings] | 26 | \begin{defn}[Atomare edits of strings] |
27 | Wir betrachten, zur Einfachheit, ein minimiales Set von Edits auf Strings\footnote{Wie in der Konstruktion zum Longest Common Subsequence Problem}, bestehend nur aus Einfügung eines einzelnen Zeichens $\sigma$ an einer bestimmten Position $\iota_n(\sigma)$ und löschen des Zeichens an einer einzelnen Position $\rho_n$: | 27 | Wir betrachten zur Einfachheit ein minimiales Set von Edits auf Strings\footnote{Wie in der Konstruktion zum Longest Common Subsequence Problem} bestehend nur aus Einfügung eines einzelnen Zeichens $\sigma$ an einer bestimmten Position $\iota_n(\sigma)$ und löschen des Zeichens an einer einzelnen Position $\rho_n$: |
28 | 28 | ||
29 | \begin{code} | 29 | \begin{code} |
30 | data StringEdit pos char = Insert { _sePos :: pos, _seInsertion :: char } | 30 | data StringEdit pos char = Insert { _sePos :: pos, _seInsertion :: char } |
@@ -38,7 +38,7 @@ data StringEdit pos char = Insert { _sePos :: pos, _seInsertion :: char } | |||
38 | makeLenses ''StringEdit | 38 | makeLenses ''StringEdit |
39 | \end{code} | 39 | \end{code} |
40 | 40 | ||
41 | Atomare edits werden, als Liste, zu edits komponiert. | 41 | Atomare edits werden als Liste zu edits komponiert. |
42 | Wir führen einen speziellen edit ein, der nicht-Anwendbarkeit der edits repräsentiert: | 42 | Wir führen einen speziellen edit ein, der nicht-Anwendbarkeit der edits repräsentiert: |
43 | \begin{code} | 43 | \begin{code} |
44 | data StringEdits pos char = StringEdits (Seq (StringEdit pos char)) | 44 | data StringEdits pos char = StringEdits (Seq (StringEdit pos char)) |
diff --git a/edit-lens/src/Control/Edit/String/Affected.lhs b/edit-lens/src/Control/Edit/String/Affected.lhs index 851267b..15f73af 100644 --- a/edit-lens/src/Control/Edit/String/Affected.lhs +++ b/edit-lens/src/Control/Edit/String/Affected.lhs | |||
@@ -29,7 +29,7 @@ import Data.Maybe (fromMaybe, maybeToList, listToMaybe, catMaybes, isNothing, is | |||
29 | \end{comment} | 29 | \end{comment} |
30 | 30 | ||
31 | Um eine obere Schranke an das von einer Serie von edits betroffene Intervall zu bestimmen ordnen wir zunächst jeder von mindestens einem atomaren edit betroffenen Position $n$ im Eingabe-Wort einen $\text{offset}_n = \text{\# deletions} - \text{\# inserts}$ zu. | 31 | Um eine obere Schranke an das von einer Serie von edits betroffene Intervall zu bestimmen ordnen wir zunächst jeder von mindestens einem atomaren edit betroffenen Position $n$ im Eingabe-Wort einen $\text{offset}_n = \text{\# deletions} - \text{\# inserts}$ zu. |
32 | Das gesuchte Intervall ist nun $(\text{minK}, \text{maxK})$, mit $\text{minK}$ der Position im Eingabe-Wort mit niedrigstem $\text{offset}$ und $\text{maxK}$ die Position im Eingabe-Wort mit höchstem $\text{offset}$, $\text{maxK}^\prime$, modifiziert um das Maximum aus $\{ 0 \} \cup \{ \text{maxK}_n \colon n \in \{ 0 \ldots \text{maxK}^\prime \} \}$ wobei $\text{maxK}_n = -1 \cdot (n + \text{offset}_n)$ an Position $n$ ist. | 32 | Das gesuchte Intervall ist nun $(\text{minK}, \text{maxK})$, mit $\text{minK}$ der Position im Eingabe-Wort mit niedrigstem $\text{offset}$ und $\text{maxK}$ die Position im Eingabe-Wort mit höchstem $\text{offset}$ $\text{maxK}^\prime$ modifiziert um das Maximum aus $\{ 0 \} \cup \{ \text{maxK}_n \colon n \in \{ 0 \ldots \text{maxK}^\prime \} \}$ wobei $\text{maxK}_n = -1 \cdot (n + \text{offset}_n)$ an Position $n$ ist. |
33 | 33 | ||
34 | \begin{code} | 34 | \begin{code} |
35 | affected :: forall char. StringEdits Natural char -> Maybe (Interval Natural) | 35 | affected :: forall char. StringEdits Natural char -> Maybe (Interval Natural) |
diff --git a/edit-lens/src/Control/FST.lhs b/edit-lens/src/Control/FST.lhs index 9cc7524..165f247 100644 --- a/edit-lens/src/Control/FST.lhs +++ b/edit-lens/src/Control/FST.lhs | |||
@@ -47,12 +47,12 @@ import Text.Dot | |||
47 | \end{comment} | 47 | \end{comment} |
48 | 48 | ||
49 | \begin{defn}[Finite State Transducers] | 49 | \begin{defn}[Finite State Transducers] |
50 | Unter einem \emph{finite state transducer} verstehen wir ein 6-Tupel $(\Sigma, \Delta, Q, I, F, E)$ mit $\Sigma$ dem endlichen Eingabe-Alphabet, $\Delta$ dem endlichen Ausgabe-Alphabet, $Q$ einer endlichen Menge an Zuständen, $I \subset Q$ der Menge von initialen Zuständen, $F \subset Q$ der Menge von akzeptierenden Endzuständen, und $E \subset Q \times (\Sigma \cup \{ \epsilon \}) \times (\Delta \cup \{ \epsilon \}) \times Q$ der Transitionsrelation. | 50 | Unter einem \emph{finite state transducer} verstehen wir ein 6-Tupel $(\Sigma, \Delta, Q, I, F, E)$ mit $\Sigma$ dem endlichen Eingabe-Alphabet, $\Delta$ dem endlichen Ausgabe-Alphabet, $Q$ einer endlichen Menge an Zuständen, $I \subset Q$ der Menge von initialen Zuständen, $F \subset Q$ der Menge von akzeptierenden Endzuständen und $E \subset Q \times (\Sigma \cup \{ \epsilon \}) \times (\Delta \cup \{ \epsilon \}) \times Q$ der Transitionsrelation. |
51 | 51 | ||
52 | Semantisch ist ein finite state transducer ein endlicher Automat erweitert um die Fähigkeit bei Zustandsübergängen ein Symbol aus seinem Ausgabe-Alphabet an ein Ausgabe-Wort anzuhängen. | 52 | Semantisch ist ein finite state transducer ein endlicher Automat, erweitert um die Fähigkeit bei Zustandsübergängen ein Symbol aus seinem Ausgabe-Alphabet an ein Ausgabe-Wort anzuhängen (Siehe Definition \ref{defn:fst-eval}). |
53 | 53 | ||
54 | In Haskell lockern wir die Anforderung, dass die Ein- und Ausgabe-Alphabete endlich sein müssen und annotieren sie nur im Typsystem. | 54 | In Haskell lockern wir die Anforderung, dass die Ein- und Ausgabe-Alphabete endlich sein müssen und annotieren sie nur im Typsystem. |
55 | Zudem speichern wir die Transitionsrelation als multimap um effiziente lookups von Zustand-Eingabe-Paaren zu ermöglichen. | 55 | Zudem speichern wir die Transitionsrelation als multimap, um effiziente lookups von Zustand-Eingabe-Paaren zu ermöglichen. |
56 | 56 | ||
57 | \begin{code} | 57 | \begin{code} |
58 | data FST state input output = FST | 58 | data FST state input output = FST |
@@ -64,7 +64,7 @@ data FST state input output = FST | |||
64 | \end{defn} | 64 | \end{defn} |
65 | 65 | ||
66 | \begin{eg} \label{eg:linebreak} | 66 | \begin{eg} \label{eg:linebreak} |
67 | Als wiederkehrendes Beispiel betrachten wir einen Transducer $L_{80} = (\Sigma, \Delta, Q, I, F, E)$, der für ein beliebiges Alphabet $\Sigma \supseteq \{ \text{\tt ' '}, \text{\tt \textbackslash n} \}$ durch Umwandlung zwischen Leerzeichen und Zeilenumbrüchen sicherstellt, dass jede Zeile des Ausgabetextes möglichst wenige aber mindestens 80 Zeichen enthält, und nur an Wortgrenzen umbricht: | 67 | Als wiederkehrendes Beispiel betrachten wir einen Transducer $L_{80} = (\Sigma, \Delta, Q, I, F, E)$, der für ein beliebiges Alphabet $\Sigma \supseteq \{ \text{\tt ' '}, \text{\tt \textbackslash n} \}$ durch Umwandlung zwischen Leerzeichen und Zeilenumbrüchen sicherstellt, dass jede Zeile des Ausgabetextes möglichst wenige, aber mindestens 80 Zeichen enthält und nur an Wortgrenzen umbricht: |
68 | 68 | ||
69 | \begin{align*} | 69 | \begin{align*} |
70 | \Delta & = \Sigma \\ | 70 | \Delta & = \Sigma \\ |
@@ -103,7 +103,7 @@ data FST state input output = FST | |||
103 | \draw[-] (rest)--(i.north); | 103 | \draw[-] (rest)--(i.north); |
104 | \draw[-] (rest)--(si.west); | 104 | \draw[-] (rest)--(si.west); |
105 | \end{tikzpicture} | 105 | \end{tikzpicture} |
106 | \caption{\label{fig:linebreak} Ein Transducer der, durch Übersetzung zwischen Leerzeichen und Zeilenumbrüchen, sicher stellt, dass jede Zeile eines Texts mindestens 80 Zeichen hat} | 106 | \caption{\label{fig:linebreak} Ein Transducer der durch Übersetzung zwischen Leerzeichen und Zeilenumbrüchen sicher stellt, dass jede Zeile eines Texts mindestens 80 Zeichen hat} |
107 | \end{figure} | 107 | \end{figure} |
108 | \end{eg} | 108 | \end{eg} |
109 | 109 | ||
@@ -131,8 +131,8 @@ instance (Show state, Show input, Show output, Ord state, Ord input, Ord output) | |||
131 | \end{code} | 131 | \end{code} |
132 | \end{comment} | 132 | \end{comment} |
133 | 133 | ||
134 | \begin{defn}[Auswertung von FSTs] | 134 | \begin{defn}[Auswertung von FSTs] \label{defn:fst-eval} |
135 | Wir definieren die \emph{Auswertung} von finite state transducers induktiv indem wir zunächst angeben wie ein einzelner Auswertungs-Schritt erfolgt. | 135 | Wir definieren die \emph{Auswertung} von finite state transducers induktiv, indem wir zunächst angeben, wie ein einzelner Auswertungs-Schritt erfolgt. |
136 | 136 | ||
137 | Hierzu kommentieren wir die Haskell-Implementierung eines Auswertungs-Schritts. | 137 | Hierzu kommentieren wir die Haskell-Implementierung eines Auswertungs-Schritts. |
138 | Notwendigerweise ist die Auswertung eines FSTs nicht deterministisch, wir produzieren daher eine Liste von möglichen Resultaten in keiner besonderen Reihenfolge. | 138 | Notwendigerweise ist die Auswertung eines FSTs nicht deterministisch, wir produzieren daher eine Liste von möglichen Resultaten in keiner besonderen Reihenfolge. |
@@ -145,7 +145,7 @@ step :: forall input output state. (Ord input, Ord output, Ord state) | |||
145 | -> [(Maybe input, state, Maybe output)] -- ^ Tuples of unconsumed input, next state, and produced output | 145 | -> [(Maybe input, state, Maybe output)] -- ^ Tuples of unconsumed input, next state, and produced output |
146 | step FST{..} Nothing inS = (\s -> (inS, s, Nothing)) <$> Set.toList stInitial | 146 | step FST{..} Nothing inS = (\s -> (inS, s, Nothing)) <$> Set.toList stInitial |
147 | \end{code} | 147 | \end{code} |
148 | Ist kein vorheriger Schritt erfolgt so wählen wir einen initialen Zustand, konsumieren keine Eingabe, und produzieren keine Ausgabe. | 148 | Ist kein vorheriger Schritt erfolgt, so wählen wir einen initialen Zustand, konsumieren keine Eingabe und produzieren keine Ausgabe. |
149 | 149 | ||
150 | \begin{code} | 150 | \begin{code} |
151 | step FST{..} (Just c) inS = let | 151 | step FST{..} (Just c) inS = let |
@@ -154,7 +154,7 @@ step FST{..} (Just c) inS = let | |||
154 | in Set.toList $ Set.map (\(n, mOut) -> (Nothing, n, mOut)) consuming `Set.union` Set.map (\(n, mOut) -> (inS, n, mOut)) unconsuming | 154 | in Set.toList $ Set.map (\(n, mOut) -> (Nothing, n, mOut)) consuming `Set.union` Set.map (\(n, mOut) -> (inS, n, mOut)) unconsuming |
155 | \end{code} | 155 | \end{code} |
156 | Ansonsten wählen wir einen Eintrag aus der Transitionstabelle für den aktuellen Zustand, der entweder keine oder die gegebene Eingabe konsumiert. | 156 | Ansonsten wählen wir einen Eintrag aus der Transitionstabelle für den aktuellen Zustand, der entweder keine oder die gegebene Eingabe konsumiert. |
157 | Im Ergebnis geben wir den nächsten Zustand, die Ausgabe aus der Transitionstabelle, und ob die Eingabe konsumiert wurde an. | 157 | Im Ergebnis geben wir den nächsten Zustand, die Ausgabe aus der Transitionstabelle und ob die Eingabe konsumiert wurde, an. |
158 | 158 | ||
159 | \begin{code} | 159 | \begin{code} |
160 | runFST' :: forall input output state. (Ord input, Ord output, Ord state) | 160 | runFST' :: forall input output state. (Ord input, Ord output, Ord state) |
@@ -199,9 +199,8 @@ akzeptierenden Endzustände liegt. | |||
199 | \end{comment} | 199 | \end{comment} |
200 | \end{defn} | 200 | \end{defn} |
201 | 201 | ||
202 | Es ist gelegentlich nützlich nur die möglichen Ausgaben eines FST auf gegebener | 202 | Es ist gelegentlich nützlich nur die möglichen Ausgaben eines FST auf gegebener Eingabe zu bestimmen. |
203 | Eingabe zu bestimmen, wir führen eine Hilfsfunktion auf Basis von | 203 | Wir führen eine Hilfsfunktion auf Basis von {\ttfamily runFST'} ein: |
204 | {\ttfamily runFST'} ein: | ||
205 | 204 | ||
206 | \begin{code} | 205 | \begin{code} |
207 | runFST :: forall input output state. (Ord input, Ord output, Ord state) => FST state input output -> Seq input -> [Seq output] | 206 | runFST :: forall input output state. (Ord input, Ord output, Ord state) => FST state input output -> Seq input -> [Seq output] |
@@ -216,14 +215,14 @@ runFST = fmap (map $ catMaybes . fmap (view _2) . view _2) . runFST' | |||
216 | \end{comment} | 215 | \end{comment} |
217 | 216 | ||
218 | Wir können das Produkt zweier FSTs definieren. | 217 | Wir können das Produkt zweier FSTs definieren. |
219 | Intuitiv wollen wir beide FSTs gleichzeitig ausführen und dabei sicherstellen, dass Ein- und Ausgabe der FSTs übereinstimmen\footnote{Da wir $\epsilon$-Transitionen in FSTs erlauben müssen wir uns festlegen wann eine $\epsilon$-Transition übereinstimmt mit einer anderen Transition. Wir definieren, dass $\epsilon$ als Eingabe ausschließlich mit $\epsilon$ übereinstimmt.}. | 218 | Intuitiv wollen wir beide FSTs gleichzeitig ausführen und dabei sicherstellen, dass Ein- und Ausgabe der FSTs übereinstimmen\footnote{Da wir $\epsilon$-Transitionen in FSTs erlauben, müssen wir uns festlegen, wann eine $\epsilon$-Transition übereinstimmt mit einer anderen Transition. Wir definieren, dass $\epsilon$ als Eingabe ausschließlich mit $\epsilon$ übereinstimmt.}. |
220 | 219 | ||
221 | Hierfür berechnen wir das Graphen-Produkt der FSTs: | 220 | Hierfür berechnen wir das Graphen-Produkt der FSTs: |
222 | 221 | ||
223 | \begin{defn}[FST-Produkt] | 222 | \begin{defn}[FST-Produkt] |
224 | Gegeben zwei finite state transducer $T = (\Sigma, \Delta, Q, I, F, E)$ und $T^\prime = (\Sigma^\prime, \Delta^\prime, Q^\prime, I^\prime, F^\prime, E^\prime)$ nennen wir $T^\times = (\Sigma^\times, \Delta^\times, Q^\times, I^\times, F^\times, E^\times)$ das Produkt $T^\times = T \times T^\prime$ von $T$ und $T^\prime$. | 223 | Gegeben zwei finite state transducer $T = (\Sigma, \Delta, Q, I, F, E)$ und $T^\prime = (\Sigma^\prime, \Delta^\prime, Q^\prime, I^\prime, F^\prime, E^\prime)$ nennen wir $T^\times = (\Sigma^\times, \Delta^\times, Q^\times, I^\times, F^\times, E^\times)$ das Produkt $T^\times = T \times T^\prime$ von $T$ und $T^\prime$. |
225 | 224 | ||
226 | $T^\times$ bestimmt sich als das Graphenprodukt der beiden, die FSTs unterliegenden, Graphen wobei wir die Zustandsübergänge als Kanten mit Gewichten aus dem Boolschen Semiring auffassen: | 225 | $T^\times$ wird bestimmt als das Graphenprodukt der beiden die FSTs unterliegenden Graphen wobei wir die Zustandsübergänge als Kanten mit Gewichten aus dem Boolschen Semiring auffassen: |
227 | 226 | ||
228 | \begin{align*} | 227 | \begin{align*} |
229 | \Sigma^\times & = \Sigma \cap \Sigma^\prime \\ | 228 | \Sigma^\times & = \Sigma \cap \Sigma^\prime \\ |
@@ -271,7 +270,7 @@ productFST fst1 fst2 = FST | |||
271 | Es ist später erforderlich einen FST derart einzuschränken, dass er eine gegebene Ausgabe produziert. | 270 | Es ist später erforderlich einen FST derart einzuschränken, dass er eine gegebene Ausgabe produziert. |
272 | 271 | ||
273 | Hierzu nehmen wir das FST-Produkt mit einem FST, der, ungeachtet der Eingabe, immer die gewünschte Ausgabe produziert. | 272 | Hierzu nehmen wir das FST-Produkt mit einem FST, der, ungeachtet der Eingabe, immer die gewünschte Ausgabe produziert. |
274 | Da die Ausgaben der beiden FSTs übereinstimmen müssen produziert das Produkt mit einem derartigen FST (solange dessen Ausgabe in keinem Sinne von der Eingabe abhängt) die gewünschte Ausgabe. | 273 | Da die Ausgaben der beiden FSTs übereinstimmen müssen, produziert das Produkt mit einem derartigen FST (solange dessen Ausgabe in keinem Sinne von der Eingabe abhängt) die gewünschte Ausgabe. |
275 | 274 | ||
276 | Zur Konstruktion eines derartigen \emph{Wort-FST}s nehmen wir Indizes im Ausgabe-Wort (natürliche Zahlen) als Zustände. | 275 | Zur Konstruktion eines derartigen \emph{Wort-FST}s nehmen wir Indizes im Ausgabe-Wort (natürliche Zahlen) als Zustände. |
277 | Übergänge sind immer entweder der Form $n \rightarrow \text{succ}(n)$, konsumieren keine Eingabe ($\epsilon$) und produzieren als Ausgabe das Zeichen am Index $n$ im Ausgabe-Wort, oder der Form $n \overset{(\sigma, \epsilon)}{\rightarrow} n$, für jedes Eingabesymbol $\sigma$ (um die Unabhängigkeit von der Eingabe sicherzustellen). | 276 | Übergänge sind immer entweder der Form $n \rightarrow \text{succ}(n)$, konsumieren keine Eingabe ($\epsilon$) und produzieren als Ausgabe das Zeichen am Index $n$ im Ausgabe-Wort, oder der Form $n \overset{(\sigma, \epsilon)}{\rightarrow} n$, für jedes Eingabesymbol $\sigma$ (um die Unabhängigkeit von der Eingabe sicherzustellen). |
@@ -335,7 +334,7 @@ wordFST inps outs = FST | |||
335 | \end{figure} | 334 | \end{figure} |
336 | \end{eg} | 335 | \end{eg} |
337 | 336 | ||
338 | Da \texttt{wordFST} zur Konstruktion eine komprehensive Menge aller Eingabesymbole benötigt verwenden wir im folgenden eine optimierte Variante des Produkts mit einem Wort-FST. | 337 | Da \texttt{wordFST} zur Konstruktion eine komprehensive Menge aller Eingabesymbole benötigt, verwenden wir im Folgenden eine optimierte Variante des Produkts mit einem Wort-FST. |
339 | 338 | ||
340 | \begin{code} | 339 | \begin{code} |
341 | restrictOutput :: forall state input output. (Ord state, Ord input, Ord output) => Seq output -> FST state input output -> FST (Natural, state) input output | 340 | restrictOutput :: forall state input output. (Ord state, Ord input, Ord output) => Seq output -> FST state input output -> FST (Natural, state) input output |
@@ -381,7 +380,7 @@ restrictOutput :: forall state input output. (Ord state, Ord input, Ord output) | |||
381 | \begin{rem} | 380 | \begin{rem} |
382 | Es ist bemerkenswert, dass in Beispiel \ref{eg:l80timesw100} die zirkuläre Struktur von $L_{80}$ durch das Produkt mit einem Wort verloren geht. | 381 | Es ist bemerkenswert, dass in Beispiel \ref{eg:l80timesw100} die zirkuläre Struktur von $L_{80}$ durch das Produkt mit einem Wort verloren geht. |
383 | 382 | ||
384 | I.\@A.\@ ist das Produkt eines beliebigen FST mit einem Wort-FST zwar nicht azyklisch, erbt jedoch die lineare Struktur des Wort-FST in dem Sinne, dass Fortschritt in Richtung der akzeptierenden Zustände nur möglich ist indem der $(i, \sigma, w_i, i + 1)$-Klasse von Transitionen des Wort-FSTs gefolgt wird. | 383 | I.\@A.\@ ist das Produkt eines beliebigen FST mit einem Wort-FST zwar nicht azyklisch, erbt jedoch die lineare Struktur des Wort-FST in dem Sinne, dass Fortschritt in Richtung der akzeptierenden Zustände nur möglich ist, indem der $(i, \sigma, w_i, i + 1)$-Klasse von Transitionen des Wort-FSTs gefolgt wird. |
385 | \end{rem} | 384 | \end{rem} |
386 | 385 | ||
387 | \begin{comment} | 386 | \begin{comment} |
diff --git a/edit-lens/src/Control/FST/Lens.tex b/edit-lens/src/Control/FST/Lens.tex index 31af317..7e9e9e3 100644 --- a/edit-lens/src/Control/FST/Lens.tex +++ b/edit-lens/src/Control/FST/Lens.tex | |||
@@ -1,4 +1,4 @@ | |||
1 | Es stellt sich die Frage, ob das obig beschriebene Verfahren zur Konstruktion einer edit-lens sich auch auf nondeterminische finite state transducers anwenden lässt. | 1 | Es stellt sich die Frage, ob das obig beschriebene Verfahren zur Konstruktion einer edit-lens sich auch auf nicht determinische finite state transducers anwenden lässt. |
2 | 2 | ||
3 | Eine natürlich Erweiterung von \texttt{DFSTAction} wäre: | 3 | Eine natürlich Erweiterung von \texttt{DFSTAction} wäre: |
4 | \begin{lstlisting}[language=Haskell] | 4 | \begin{lstlisting}[language=Haskell] |
@@ -9,7 +9,7 @@ data FSTAction state input output = FSTAction | |||
9 | \end{lstlisting} | 9 | \end{lstlisting} |
10 | wobei die Liste aller möglichen output-Strings in der rechten Seite von \texttt{runFSTAction} in aller Regel unendlich ist. | 10 | wobei die Liste aller möglichen output-Strings in der rechten Seite von \texttt{runFSTAction} in aller Regel unendlich ist. |
11 | 11 | ||
12 | $\Rrightarrow$ würde sich notwendigerweise arbiträr auf einen der möglichen output-Strings festlegen aber ansonsten wohl identisch zum DFST-Fall implementieren lassen. | 12 | $\Rrightarrow$ würde sich notwendigerweise arbiträr auf einen der möglichen output-Strings festlegen, aber ansonsten wohl identisch zum DFST-Fall implementieren lassen. |
13 | 13 | ||
14 | $\Lleftarrow$ basiert fundamental darauf im Komplement anhand der erzeugten output-Strings zu suchen (um das betroffene Intervall im output-String auf das Komplement zu übertragen). | 14 | $\Lleftarrow$ basiert fundamental darauf im Komplement anhand der erzeugten output-Strings zu suchen (um das betroffene Intervall im output-String auf das Komplement zu übertragen). |
15 | Um sicher zu stellen, dass jene Suche immer terminiert, müsste die Aufzählung der i.A. unendlich vielen zulässigen output-Strings in \texttt{FSTAction} geschickt gewählt sein. | 15 | Um sicher zu stellen, dass jene Suche immer terminiert, müsste die Aufzählung der i.A. unendlich vielen zulässigen output-Strings in \texttt{FSTAction} geschickt gewählt sein. |
diff --git a/edit-lens/src/Control/Lens/Edit.lhs b/edit-lens/src/Control/Lens/Edit.lhs index 5cf8662..84216bd 100644 --- a/edit-lens/src/Control/Lens/Edit.lhs +++ b/edit-lens/src/Control/Lens/Edit.lhs | |||
@@ -12,7 +12,7 @@ import Control.Edit | |||
12 | \end{comment} | 12 | \end{comment} |
13 | 13 | ||
14 | \begin{defn}[Zustandsbehaftete Monoidhomomorphismen] | 14 | \begin{defn}[Zustandsbehaftete Monoidhomomorphismen] |
15 | Gegeben eine Menge $C$ von \emph{Komplementen} und zwei Monoiden $M$ und $N$ nennen wir eine partielle Funktion $\psi \colon C \times M \to C \times N$ einen \emph{zustandsbehafteten Monoidhomomorphismus} wenn sie den folgenden Ansprüchen genügt: | 15 | Gegeben eine Menge $C$ von \emph{Komplementen} und zwei Monoiden $M$ und $N$ nennen wir eine partielle Funktion $\psi \colon C \times M \to C \times N$ einen \emph{zustandsbehafteten Monoidhomomorphismus}, wenn sie den folgenden Ansprüchen genügt: |
16 | 16 | ||
17 | \begin{itemize} | 17 | \begin{itemize} |
18 | \item $\forall c \in C \colon \psi(1_M, c) = (1_N, c)$ | 18 | \item $\forall c \in C \colon \psi(1_M, c) = (1_N, c)$ |
@@ -28,7 +28,7 @@ type StateMonoidHom s m n = (s, m) -> (s, n) | |||
28 | \end{defn} | 28 | \end{defn} |
29 | 29 | ||
30 | \begin{defn}[edit-lenses] | 30 | \begin{defn}[edit-lenses] |
31 | Für Moduln $M$ und $N$ besteht eine \emph{symmetrische edit-lens} zwischen $M$ und $N$ aus zwei zustandsbehafteten Monoidhomomorphismen $\Rrightarrow \colon C \times \partial M \to C \times \partial N$ und $\Lleftarrow \colon C \times \partial N \to C \times \partial M$, mit kompatiblem Komplement $C$, einem ausgezeichneten Element $\ground_C \in C$ und einer \emph{Konsistenzrelation} $K \subset \Dom M \times C \times \Dom N$ sodass gilt: | 31 | Für Moduln $M$ und $N$ besteht eine \emph{symmetrische edit-lens} zwischen $M$ und $N$ aus zwei zustandsbehafteten Monoidhomomorphismen $\Rrightarrow \colon C \times \partial M \to C \times \partial N$ und $\Lleftarrow \colon C \times \partial N \to C \times \partial M$, mit kompatiblem Komplement $C$, einem ausgezeichneten Element $\ground_C \in C$ und einer \emph{Konsistenzrelation} $K \subset \Dom M \times C \times \Dom N$, sodass gilt: |
32 | 32 | ||
33 | \begin{itemize} | 33 | \begin{itemize} |
34 | \item $(\init_M, \ground_C, \init_N) \in K$ | 34 | \item $(\init_M, \ground_C, \init_N) \in K$ |
@@ -43,7 +43,7 @@ Für Moduln $M$ und $N$ besteht eine \emph{symmetrische edit-lens} zwischen $M$ | |||
43 | 43 | ||
44 | Wir schreiben auch nur \emph{edit-lens} für den symmetrischen Fall\footnote{Für den asymmetrischen Fall siehe \cite{johnson2016unifying}}. | 44 | Wir schreiben auch nur \emph{edit-lens} für den symmetrischen Fall\footnote{Für den asymmetrischen Fall siehe \cite{johnson2016unifying}}. |
45 | 45 | ||
46 | In Haskell erwähnen wir die Konsistenzrelation nicht in der Erwartung, dass $\Rrightarrow$ und $\Lleftarrow$ nur auf konsistente Zustände angewandt werden (und somit auch entweder einen konsistenten Zustand erzeugen oder nicht definiert sind): | 46 | In Haskell erwähnen wir die Konsistenzrelation nicht, in der Erwartung, dass $\Rrightarrow$ und $\Lleftarrow$ nur auf konsistente Zustände angewandt werden (und somit auch entweder einen konsistenten Zustand erzeugen oder nicht definiert sind): |
47 | 47 | ||
48 | \begin{code} | 48 | \begin{code} |
49 | data EditLens c m n where | 49 | data EditLens c m n where |
@@ -67,12 +67,12 @@ instance (Module m, Module n) => HasEditLens (EditLens c m n) m n where | |||
67 | \end{code} | 67 | \end{code} |
68 | \end{defn} | 68 | \end{defn} |
69 | 69 | ||
70 | \subsection{Kompatibilität mit bestehenden lens frameworks} | 70 | \subsection{Kompatibilität mit bestehenden lens Frameworks} |
71 | 71 | ||
72 | Das einschlägige bestehende lens framework \cite{lens} konstruiert seine Linsen à la \citeauthor{laarhoven} wie folgt: | 72 | Das einschlägige bestehende lens framework \cite{lens} konstruiert seine Linsen à la \citeauthor{laarhoven} wie folgt: |
73 | 73 | ||
74 | \begin{defn}[lenses à la Laarhoven] | 74 | \begin{defn}[lenses à la Laarhoven] |
75 | Für Typen $n$ und $m$ ist eine \emph{lens} $\ell$ von $n$ in $m$ eine Abbildung\footnote{Gdw. die betrachtete Linse einen Isomorphismus kodiert wird auch über den verwendeten Profunktor anstatt $\to$ quantifiziert} folgender Struktur: | 75 | Für Typen $n$ und $m$ ist eine \emph{lens} $\ell$ von $n$ in $m$ eine Abbildung\footnote{Gdw. die betrachtete Linse einen Isomorphismus kodiert, wird auch über den verwendeten Profunktor anstatt $\to$ quantifiziert} folgender Struktur: |
76 | 76 | ||
77 | $$ \forall f \, \text{Funktor} \colon \left ( \ell \colon \left ( m \to f(m) \right ) \to \left ( n \to f(n) \right ) \right )$$ | 77 | $$ \forall f \, \text{Funktor} \colon \left ( \ell \colon \left ( m \to f(m) \right ) \to \left ( n \to f(n) \right ) \right )$$ |
78 | 78 | ||
@@ -80,7 +80,7 @@ Durch geschickte Wahl des Funktors\footnote{\texttt{Const m} bzw. \texttt{Identi | |||
80 | \end{defn} | 80 | \end{defn} |
81 | 81 | ||
82 | Es liegt nun nahe $\nearrow \colon (m \to m) \to (n \to n)$ mit $\Rrightarrow \colon \partial m \to \partial n$ zu identifizieren. | 82 | Es liegt nun nahe $\nearrow \colon (m \to m) \to (n \to n)$ mit $\Rrightarrow \colon \partial m \to \partial n$ zu identifizieren. |
83 | Und in der Tat, eine Funktion $\text{map} \colon (o \to o) \to \partial o$ für $o \in \{ m, n \}$ würde van Laarhoven-lenses in edit-lenses einbetten. | 83 | In der Tat, eine Funktion $\text{map} \colon (o \to o) \to \partial o$ für $o \in \{ m, n \}$ würde van Laarhoven-lenses in edit-lenses einbetten. |
84 | Die charakteristische Eigenschaft der Betrachtung als edit-lens, nämlich die algebraische Struktur von $\partial o$, würde hierbei jedoch notwendigerweise verloren gehen. | 84 | Die charakteristische Eigenschaft der Betrachtung als edit-lens, nämlich die algebraische Struktur von $\partial o$, würde hierbei jedoch notwendigerweise verloren gehen. |
85 | 85 | ||
86 | Wegen diesem Argument haben wir entschieden keine Komponierbarkeit (durch $\text{id} \colon a \to a$ und $\circ \colon (b \to c) \to (a \to b) \to (a \to c)$, wie in \cite{lens}) von edit-lenses mit van Laarhoven-lenses anzustreben. | 86 | Wegen diesem Argument haben wir entschieden keine Komponierbarkeit (durch $\text{id} \colon a \to a$ und $\circ \colon (b \to c) \to (a \to b) \to (a \to c)$, wie in \cite{lens}) von edit-lenses mit van Laarhoven-lenses anzustreben. |
diff --git a/implementation.tex b/implementation.tex index 3a68e04..26ee2c7 100644 --- a/implementation.tex +++ b/implementation.tex | |||
@@ -1,7 +1,8 @@ | |||
1 | Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. | 1 | Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. |
2 | 2 | ||
3 | Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter, Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. | 3 | Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. |
4 | Unsere vorherigen Versuche $\Lleftarrow$ in einem imperativeren Stil zu implementieren blieben Erfolglos; größte Schwierigkeiten hat bereitet die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren. | 4 | Unsere vorherigen Versuche, $\Lleftarrow$ in einem imperativeren Stil zu implementieren, blieben erfolglos; |
5 | Größte Schwierigkeiten hat bereitet, die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren. | ||
5 | 6 | ||
6 | \subsubsection{Struktur der Implementierung} | 7 | \subsubsection{Struktur der Implementierung} |
7 | 8 | ||
@@ -12,7 +13,7 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt | |||
12 | \item[Control.Edit] | 13 | \item[Control.Edit] |
13 | Definition von Moduln | 14 | Definition von Moduln |
14 | \item[Control.Lens.Edit] | 15 | \item[Control.Lens.Edit] |
15 | Definition von zustandsbehafteten Monoidhomomorphismen und, damit, edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp | 16 | Definition von zustandsbehafteten Monoidhomomorphismen und edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp |
16 | \item[Control.Edit.String] | 17 | \item[Control.Edit.String] |
17 | Eine simple edit-Sprache auf Strings | 18 | Eine simple edit-Sprache auf Strings |
18 | \item[Control.Edit.String.Affected] | 19 | \item[Control.Edit.String.Affected] |
@@ -46,11 +47,11 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt | |||
46 | \begin{figure}[h] | 47 | \begin{figure}[h] |
47 | \begin{center} | 48 | \begin{center} |
48 | \includegraphics{screenshot} | 49 | \includegraphics{screenshot} |
49 | \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach import einer kleinen JSON-Datei} | 50 | \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach Import einer kleinen JSON-Datei} |
50 | \end{center} | 51 | \end{center} |
51 | \end{figure} | 52 | \end{figure} |
52 | 53 | ||
53 | Der interaktive editor kann von der Befehlseingabe gestartet werden wie folgt: | 54 | Der interaktive Editor kann von der Befehlseingabe gestartet werden wie folgt: |
54 | \begin{lstlisting}[language=bash] | 55 | \begin{lstlisting}[language=bash] |
55 | $ stack build | 56 | $ stack build |
56 | $ stack exec interact <dfst> | 57 | $ stack exec interact <dfst> |
@@ -88,4 +89,10 @@ Nach Auswahl wird der Inhalt der Datei am Cursor eingefügt. | |||
88 | 89 | ||
89 | Bei der Implementierung wurde nicht auf Performance geachtet. | 90 | Bei der Implementierung wurde nicht auf Performance geachtet. |
90 | Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON). | 91 | Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON). |
91 | Es lässt sich allerdings der Speedup beim Propagieren kleiner edits gut beobachten; die Propagation eines ein-Buchstaben-edits nach rechts ist ca. einen Faktor 200 schneller als das komplett neue Parsen einer Datei (ca. ein Kilobyte JSON). | 92 | Es lässt sich allerdings der Speedup beim Propagieren kleiner edits gut beobachten; die Propagation eines ein-Buchstaben-edits nach rechts ist um ca. einen Faktor 200 schneller als das komplett neue Parsen einer Datei (ca. ein Kilobyte JSON). |
93 | |||
94 | Eine konkrete Quelle der Performance-Einbußen lies sich nicht bestimmen. | ||
95 | Es wäre möglich einschlägige Profiling-Werkzeuge\footnote{\url{https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html}}\textsuperscript{, }\footnote{\url{https://jaspervdj.be/posts/2014-02-25-profiteur-ghc-prof-visualiser.html}} anzusetzen, dies ist jedoch, der eher theoretischen Ausrichtung der Arbeit folgend, nicht geschehen. | ||
96 | |||
97 | Simplere Methoden als Profiling und eingehende Analyse der entstehenden Reports lassen sich, wegen Haskells strikter Behandlung von Seiteneffekten und dem Ziel den unterliegenden Algorithmus Seiteneffekt-frei zu halten, nicht anwenden. | ||
98 | Es wurde aber zumindest in das interaktive Demonstrationsprogramm Funktionalität eingebaut, um, im Seiteneffekt-behafteten Teil, Laufzeitmessungen anzufertigen (\texttt{ctrl + p}). | ||
@@ -1,18 +1,18 @@ | |||
1 | \subsubsection{Motivation} | 1 | \subsection{Motivation} |
2 | 2 | ||
3 | Unter einem inkrementellen Parser \cite{ghezzi1979incremental} verstehen wir ein Programm, das, nach einem initialen Parsevorgang, gegeben eine Spezifikation einer Änderung der textuellen Eingabe i.A. schneller ein neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre (gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe). | 3 | Unter einem inkrementellen Parser \cite{ghezzi1979incremental} verstehen wir ein Programm, das, nach einem initialen Parsevorgang, gegeben eine Spezifikation einer Änderung der textuellen Eingabe i.A. schneller, gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe, ein neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre. |
4 | 4 | ||
5 | Es ist nun prinzipiell wünschenswert die algebraische Struktur derartiger Klassen von Programmen zu untersuchen, mit dem Ziel neue Parser mit generischen Mitteln aus bereits Bekannten konstruieren zu können. | 5 | Es ist nun prinzipiell wünschenswert die algebraische Struktur derartiger Klassen von Programmen zu untersuchen mit dem Ziel, neue Parser mit generischen Mitteln aus bereits Bekannten konstruieren zu können. |
6 | 6 | ||
7 | In dieser Arbeit versuchen wir, anhand von finite state transducern als Spezialfall, inkrementelle Parser und die unterliegenden edits mit neuerer algebraischer Struktur, edit-lenses \cite{hofmann2012edit}, zu versehen um Komponierbarkeit zu vereinfachen. | 7 | In dieser Arbeit versuchen wir, anhand von finite state transducern als Spezialfall, inkrementelle Parser und die unterliegenden edits mit neuerer algebraischer Struktur, edit-lenses \cite{hofmann2012edit}, zu versehen um Komponierbarkeit zu vereinfachen. |
8 | Vor allem versuchen wir somit zu demonstrieren, dass sich bekannte Klassen von Programmen, unter Erhalt ihrer vollen Struktur, als edit-lenses auffassen lassen, auch wenn die Darstellung als konventionelle funktionale Linse unzufriedenstellend wäre. | 8 | Vor Allem versuchen wir somit zu demonstrieren, dass sich bekannte Klassen von Programmen unter Erhalt ihrer vollen Struktur als edit-lenses auffassen lassen, auch dann, wenn die Darstellung als konventionelle funktionale Linse unzufriedenstellend wäre. |
9 | 9 | ||
10 | \subsubsection{Inhalt} | 10 | \subsection{Inhalt} |
11 | 11 | ||
12 | Wir stellen in Abschnitt \ref{edit-lenses} die Definitionen und Konstruktion von edit-lenses aus \cite{hofmann2012edit} vor und diskutieren kurz die Kompatibilität unserer Implementierung und edit-lenses im Allgemeinen mit etablierten frameworks für funktionale Linsen in Haskell. | 12 | Wir stellen in Abschnitt \ref{edit-lenses} die Definitionen und Konstruktion von edit-lenses aus \cite{hofmann2012edit} vor und diskutieren kurz die Kompatibilität unserer Implementierung und edit-lenses im Allgemeinen mit etablierten Frameworks für funktionale Linsen in Haskell. |
13 | In Abschnitt \ref{finite-state-transducers} präsentieren wir eine etablierte Version von finite state transducern, für die folgenden Teile relevante Konstruktionen darauf und einige assoziierte Beispiele. | 13 | In Abschnitt \ref{finite-state-transducers} präsentieren wir eine etablierte Version von finite state transducern, für die folgenden Teile relevante Konstruktionen darauf und einige assoziierte Beispiele. |
14 | Abschnitt \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} beschreibt eine Methode beliebige deterministische finite state transducers als edit-lenses aufzufassen und stellt somit eine non-triviale Anwendung der Methoden und Konzepte aus \cite{hofmann2012edit} dar. | 14 | Abschnitt \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} beschreibt eine Methode, beliebige deterministische finite state transducers als edit-lenses aufzufassen und stellt somit eine nicht triviale Anwendung der Methoden und Konzepte aus \cite{hofmann2012edit} dar. |
15 | In Abschnitt \ref{ausblick-edit-lenses-fuxfcr-non-determinische-finite-state-transducers} stellen wir kurz einen Ansatz dar unsere Konstruktion aus \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} auch auf non-deterministische finite state transducer zu erweitern. | 15 | In Abschnitt \ref{ausblick-edit-lenses-fuxfcr-non-determinische-finite-state-transducers} stellen wir kurz einen Ansatz vor, unsere Konstruktion aus \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} auch auf nicht-deterministische finite state transducers zu erweitern. |
16 | In Abschnitt \ref{implementierung} kommentieren wir den Implementierungsprozess der Arbeit und die Schlüsse, die wir aus der Implementierung als solcher ziehen konnten. | 16 | In Abschnitt \ref{implementierung} kommentieren wir den Implementierungsprozess der Arbeit und die Schlüsse, die wir aus der Implementierung als solcher ziehen konnten. |
17 | Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser} beschreibt kurz wie sich das dargestellte Verfahren auf andere Sorten von Parsern anwenden ließe. | 17 | Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser} beschreibt kurz wie sich das dargestellte Verfahren auf andere Sorten von Parsern anwenden ließe. |
18 | 18 | ||
@@ -43,22 +43,22 @@ Bidirektionale, inkrementelle, und kombinierbare Parser und ihre Analyse sind ei | |||
43 | 43 | ||
44 | \begin{description} % TODO: more | 44 | \begin{description} % TODO: more |
45 | \item[1979] \cite{ghezzi1979incremental} präsentieren, in einer der ersten Arbeiten zu dem Thema, einen Ansatz zum inkrementellen Parsen von deterministischen und kontextfreien Sprachen basierend auf dem $LR$-Ansatz. | 45 | \item[1979] \cite{ghezzi1979incremental} präsentieren, in einer der ersten Arbeiten zu dem Thema, einen Ansatz zum inkrementellen Parsen von deterministischen und kontextfreien Sprachen basierend auf dem $LR$-Ansatz. |
46 | \item[1992] \cite{hedin1992incremental} präsentieren einen Formalismus zur inkrementellen \emph{semantischen} Analyse (d.h. das Versehen des Syntax-Baums eines Programms mit Attributen wie z.B. Typen) basierend auf (modifizierten) Attribut-Grammatiken. | 46 | \item[1992] \cite{hedin1992incremental} präsentieren einen Formalismus zur inkrementellen \emph{semantischen} Analyse\footnote{Das Versehen des Syntax-Baums eines Programms mit Attributen wie z.B. Typen} basierend auf (modifizierten) Attribut-Grammatiken. |
47 | \item[1997] \cite{wagner1997general} stellen einen Algorithmus zur inkrementellen lexikalischen Analyse (tokenizing) der auf den selben Spezifikationen arbeiten kann wie die UNIX-Tools \texttt{lex} und \texttt{flex}. | 47 | \item[1997] \cite{wagner1997general} stellen einen Algorithmus zur inkrementellen lexikalischen Analyse (tokenizing) der auf den selben Spezifikationen arbeiten kann wie die UNIX-Tools \texttt{lex} und \texttt{flex}. |
48 | \item[1998] \cite{wagner1998efficient} stellen neue, Laufzeit- und Speicher-optimale, Methoden zur Konstruktion inkrementeller Parser auf Basis beliebiger $LR(k)$-Grammatiken vor. | 48 | \item[1998] \cite{wagner1998efficient} stellen neue Laufzeit- und Speicher-optimale Methoden zur Konstruktion inkrementeller Parser auf Basis beliebiger $LR(k)$-Grammatiken vor. |
49 | \item[2001] \cite{swierstra2001combinator} demonstriert den Nutzen Kombinator-basierter Parser-Konstruktion in der Praxis | 49 | \item[2001] \cite{swierstra2001combinator} demonstriert den Nutzen Kombinator-basierter Parser-Konstruktion in der Praxis. |
50 | \item[2004] \cite{hu2004programmable} spezifizieren eine algebraisch strukturierte Sprache für bidirektionale Baum-Transformationen unter einer programmierbaren Konsistenzrelation mit Blick auf direkte Anwendung im Editieren von bestehenden Baum-Dokumenten | 50 | \item[2004] \cite{hu2004programmable} spezifizieren eine algebraisch strukturierte Sprache für bidirektionale Baum-Transformationen unter einer programmierbaren Konsistenzrelation mit Blick auf direkte Anwendung im Editieren von bestehenden Baum-Dokumenten. |
51 | \item[2007] \cite{foster2007combinators} präsentieren sowohl eine Sprache bidirektionaler Baum-Transformationen als konventionelle funktionale Linsen im Speziellen, als auch mathematische Resultate für funktionale Linsen und Sammlungen davon im Allgemeinen. | 51 | \item[2007] \cite{foster2007combinators} präsentieren sowohl eine Sprache bidirektionaler Baum-Transformationen als konventionelle funktionale Linsen im Speziellen, als auch mathematische Resultate für funktionale Linsen und Sammlungen dieser im Allgemeinen. |
52 | Auch enthalten ist eine nützliche Klassifikation und ein historischer Überblick diverser bidirektionalen Programmiertechniken. | 52 | Auch enthalten ist eine nützliche Klassifikation und ein historischer Überblick diverser bidirektionaler Programmiertechniken. |
53 | \item[2008] Analog zur Sprache bidirektionaler Baum-Transformation aus \cite{foster2007combinators} stellen \cite{bohannon2008boomerang} eine Sprache für semi-strukturierten Text (als Serie von vertauschbaren Schlüssel-Wert-Assoziationen) vor | 53 | \item[2008] Analog zur Sprache bidirektionaler Baum-Transformation aus \cite{foster2007combinators}, stellen \cite{bohannon2008boomerang} eine Sprache für semi-strukturierten Text als Serie von vertauschbaren Schlüssel-Wert-Assoziationen vor. |
54 | \item[2009] \cite{bernardy2009lazy} implementieren, im Rahmen der Arbeit am Text-Editor Yi, eine Kombinator-basierte Programmbibliothek zum inkrementellen Parsen basierend auf lazy evaluation und aggressivem Caching in Haskell | 54 | \item[2009] \cite{bernardy2009lazy} implementieren, im Rahmen der Arbeit am Text-Editor Yi, eine Kombinator-basierte Programmbibliothek zum inkrementellen Parsen basierend auf lazy evaluation und aggressivem Caching in Haskell. |
55 | \item[2011] \cite{hofmann2011symmetric} definieren symmetrische \emph{set-based}-lenses (funktionale Linsen im konventionellen Sinn), d.h. ohne strukturierte edits. | 55 | \item[2011] \cite{hofmann2011symmetric} definieren symmetrische \emph{set-based}-lenses (funktionale Linsen im konventionellen Sinn), d.h. ohne strukturierte edits. |
56 | Es wird auch die umfangreiche algebraische Struktur symmetrischer Linsen besprochen. | 56 | Es wird auch die umfangreiche algebraische Struktur symmetrischer Linsen besprochen. |
57 | Vieles hiervon vererbt sich direkt auf edit-lenses als Spezialfall symmetrischer Linsen. | 57 | Vieles hiervon lassen sich direkt auf edit-lenses als Spezialfall symmetrischer Linsen vererben. |
58 | \item[2012] \cite{hofmann2012edit} definieren edit-lenses. | 58 | \item[2012] \cite{hofmann2012edit} definieren edit-lenses. |
59 | In Abgrenzung zu bestehenden Formalismen symmetrischer funktionaler Linsen arbeiten edit-lenses ausschließlich auf algebraisch strukturierten edit-Sprachen, was sie besonders attraktiv macht. | 59 | In Abgrenzung zu bestehenden Formalismen symmetrischer funktionaler Linsen arbeiten edit-lenses ausschließlich auf algebraisch strukturierten edit-Sprachen, was sie besonders attraktiv macht. |
60 | \item[2013] \cite{hofmann2013edit} stellen eine generelle edit-Sprache (zur Verwendung mit und basierend auf edit-lenses) für eine weite Klasse von container-Datentypen (Listen, Bäume, Graphen, ...) vor | 60 | \item[2013] \cite{hofmann2013edit} stellen eine generelle edit-Sprache (zur Verwendung mit und basierend auf edit-lenses) für eine weite Klasse von container-Datentypen (Listen, Bäume, Graphen, ...) vor |
61 | \item[2014] \cite{zaytsev2014parsing} geben einen nützlichen Überblick über die, historisch inkonsistente, Terminologie und Konzepte im Zusammenhang mit Parsing | 61 | \item[2014] \cite{zaytsev2014parsing} geben einen nützlichen Überblick über die historisch inkonsistente Terminologie und Konzepte im Zusammenhang mit Parsing. |
62 | \item[2016] \cite{johnson2016unifying} betrachten Zusammenhänge diverser Klassen funktionaler Linsen (inkl. edit-lenses) und geben dabei einen umfangreichen Überblick über die bestehende Forschung. | 62 | \item[2016] \cite{johnson2016unifying} betrachten Zusammenhänge diverser Klassen funktionaler Linsen (inkl. edit-lenses) und geben dabei einen umfangreichen Überblick über die bestehende Forschung. |
63 | Ein relevantes Resultat ist hierbei ein Begriff von asymmetrischen edit-lenses kompatibel mit dem symmetrischen Fall. | 63 | Ein relevantes Resultat ist hierbei ein Begriff von asymmetrischen edit-lenses kompatibel mit dem symmetrischen Fall. |
64 | \end{description} | 64 | \end{description} |
@@ -68,16 +68,19 @@ Bidirektionale, inkrementelle, und kombinierbare Parser und ihre Analyse sind ei | |||
68 | Obwohl wir detailliertere Definitionen der folgenden Konzepte im Laufe der Arbeit geben, ist es dennoch nützlich vorab die Bedeutung der verwendeten Begriffe kurz anzuschneiden: | 68 | Obwohl wir detailliertere Definitionen der folgenden Konzepte im Laufe der Arbeit geben, ist es dennoch nützlich vorab die Bedeutung der verwendeten Begriffe kurz anzuschneiden: |
69 | 69 | ||
70 | \begin{description} | 70 | \begin{description} |
71 | \item[FST] \emph{Finite-State-Transducer} sind endliche Automaten, die bei jedem Zustandsübergang die Möglichkeit haben ein Zeichen an eine sich akkumulierende Ausgabe anzuhängen | 71 | \item[FST] \emph{Finite-State-Transducer} sind endliche Automaten, die bei jedem Zustandsübergang die Möglichkeit haben ein Zeichen an eine sich akkumulierende Ausgabe anzuhängen. |
72 | \item[DFST] \emph{Deterministic Finite-State-Transducer} sind FSTs bei denen für jeden Zustand jedes gelesene Zeichen maximal einen Zustandsübergang zulässt | 72 | \item[DFST] \emph{Deterministic Finite-State-Transducer} sind FSTs bei denen für jeden Zustand jedes gelesene Zeichen maximal einen Zustandsübergang zulässt. |
73 | \item[Monoid] \emph{Monoiden} sind algebraisch zwischen Halbgruppen und Gruppen angesiedelt. | 73 | \item[Monoid] \emph{Monoiden} sind algebraisch zwischen Halbgruppen und Gruppen angesiedelt. |
74 | Wir sagen eine Menge hat Monoidstruktur bzgl. einer zweistelligen Verknüpfung auf jener Menge, wenn sie ein neutrales Element enthält und die Verknüpfung assoziativ ist. | 74 | Wir sagen eine Menge hat Monoidstruktur bzgl. einer zweistelligen Verknüpfung auf jener Menge, wenn sie ein neutrales Element enthält und die Verknüpfung assoziativ ist. |
75 | \item[Moduln & edits] \emph{Moduln} verknüpfen eine Trägermenge mit einer Menge von \emph{edits} (mit monoidaler Struktur) auf jener Menge. | 75 | \item[Moduln & edits] \emph{Moduln} verknüpfen eine Trägermenge mit einer Menge von \emph{edits} (mit monoidaler Struktur) auf jener Menge. |
76 | Edits beschreiben jeweils eine partielle Abbildung innerhalb der Trägermenge. | 76 | Edits beschreiben jeweils eine partielle Abbildung innerhalb der Trägermenge. |
77 | \item[Funktionale Linsen] Eine \emph{Funktionale Linse} von $s$ in $a$ in der üblichen Definition (\emph{set-based}) ist ein Paar von Abbildungen $\searrow \colon s \to a$ und $\nearrow \colon (a \to a) \to (s \to s)$ mit umfangreicher algebraischer Struktur, die die Komposition komplexer Linsen aus Einfacheren ermöglicht. | 77 | \item[Funktionale Linsen] Eine \emph{Funktionale Linse} von $s$ in $a$ in der üblichen Definition (\emph{set-based}) ist ein Paar von Abbildungen $\searrow \colon s \to a$ und $\nearrow \colon (a \to a) \to (s \to s)$ mit umfangreicher algebraischer Struktur, die die Komposition komplexer Linsen aus Einfacheren ermöglicht. |
78 | Wir finden es hilfreich von einer Projektion ($\searrow$) und einem \emph{edit-Propagator} ($\nearrow$) zu sprechen. | 78 | Wir finden es hilfreich von einer Projektion ($\searrow$) und einem \emph{edit-Propagator} ($\nearrow$) zu sprechen. |
79 | \item[Van-Laarhoven Linsen] In \cite{laarhoven} wurde eine Darstellung als eine (über einen Funktor parametrisierte) Funktion dargelegt, die unter anderem auch die soeben beschriebenen funktionalen Linsen einbetten kann | 79 | \item[Van-Laarhoven Linsen] In \cite{laarhoven} wurde eine Darstellung als eine über einen Funktor parametrisierte Funktion dargelegt, die unter anderem auch die soeben beschriebenen funktionalen Linsen einbetten kann. |
80 | \item[edit-lenses] \emph{edit-lenses} verknüpfen zwei Moduln-Trägermengen indem sie edits des einen Modul in die des Anderen übersetzen. | 80 | \item[edit-lenses] \emph{edit-lenses} verknüpfen zwei Moduln-Trägermengen indem sie edits des einen Moduls in die des Anderen übersetzen. |
81 | Hierbei wird ein, mit den jeweiligen Elementen der Trägermengen konsistenter, unterliegender Zustand, das \emph{Komplement} der edit-lens, gewahrt. | 81 | Hierbei wird ein, mit den jeweiligen Elementen der Trägermengen konsistenter, unterliegender Zustand, das \emph{Komplement} der edit-lens, gewahrt. |
82 | Intuitiv speichert das Komplement genau jene Information, die nicht in beiden Darstellungen vorkommt. | 82 | Intuitiv speichert das Komplement genau jene Information, die nicht in beiden Darstellungen vorkommt. |
83 | \item[Parser] \emph{Parser} sind Programme, die einen Text (als Liste von Symbolen $\Sigma^\star$ aus einem Alphabet $\Sigma$) Seiteneffekt-frei verarbeiten $\Sigma^\star \to a$. | ||
84 | \item[Inkrementelle Parser] \emph{Inkrementelle Parser} sind Programme, die sowohl in der Lage sind als Parser zu agieren $\Sigma^\star \to a$, als auch, nach einem vorhergehenden konventionellen Parsevorgang, eine Änderung am Eingabetext in eine Änderung am Ergebnis zu übersetzen $\partial \left ( \Sigma^\star \right ) \to \partial a$. | ||
85 | Hierbei muss die Laufzeitcharakteristik i.A. besser sein als die Änderung auf die alte Eingabe anzuwenden und schlichtweg neu zu Parsen. | ||
83 | \end{description} | 86 | \end{description} |
@@ -1,16 +1,10 @@ | |||
1 | \pagebreak | 1 | \section*{Erklärung der Eigenständigkeit} |
2 | |||
3 | Diese Arbeit ist entstanden unter Betreuung durch Stephan Barth. | ||
4 | |||
5 | Verantwortliche Hochschullehrer sind \textdagger Prof. Martin Hoffmann PhD und Dr. Steffen Jost. | ||
6 | |||
7 | \vfill | ||
8 | 2 | ||
9 | \noindent Ich erkläre hiermit, dass ich die vorliegende Arbeit | 3 | \noindent Ich erkläre hiermit, dass ich die vorliegende Arbeit |
10 | selbstständig angefertigt, alle Zitate als solche kenntlich gemacht | 4 | selbstständig angefertigt, alle Zitate als solche kenntlich gemacht, |
11 | sowie alle benutzten Quellen und Hilfsmittel angegeben habe. | 5 | sowie alle benutzten Quellen und Hilfsmittel angegeben habe. |
12 | 6 | ||
13 | \bigskip | 7 | \vspace{1cm} |
14 | 8 | ||
15 | \makebox[.5\linewidth][r]{}{\xleaders\hbox to .2em{\d{}}\hfill\d{}}\smallskip \\ | 9 | \makebox[.5\linewidth][r]{}{\xleaders\hbox to .2em{\d{}}\hfill\d{}}\smallskip \\ |
16 | \hspace*{.5\linewidth}Gregor Kleen \\ | 10 | \hspace*{.5\linewidth}Gregor Kleen \\ |
@@ -19,5 +13,3 @@ sowie alle benutzten Quellen und Hilfsmittel angegeben habe. | |||
19 | %% \bigskip\noindent München, \today | 13 | %% \bigskip\noindent München, \today |
20 | 14 | ||
21 | %% \vspace{4ex}\noindent\makebox[7cm]{\dotfill} | 15 | %% \vspace{4ex}\noindent\makebox[7cm]{\dotfill} |
22 | |||
23 | \pagebreak | ||
diff --git a/sigillum.pdf b/sigillum.pdf new file mode 100644 index 0000000..5db4e00 --- /dev/null +++ b/sigillum.pdf | |||
Binary files differ | |||
diff --git a/sigillum.pdf_tex b/sigillum.pdf_tex new file mode 100644 index 0000000..fb8a15d --- /dev/null +++ b/sigillum.pdf_tex | |||
@@ -0,0 +1,58 @@ | |||
1 | %% Creator: Inkscape inkscape 0.92.4, www.inkscape.org | ||
2 | %% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 | ||
3 | %% Accompanies image file 'sigillum.pdf' (pdf, eps, ps) | ||
4 | %% | ||
5 | %% To include the image in your LaTeX document, write | ||
6 | %% \input{<filename>.pdf_tex} | ||
7 | %% instead of | ||
8 | %% \includegraphics{<filename>.pdf} | ||
9 | %% To scale the image, write | ||
10 | %% \def\svgwidth{<desired width>} | ||
11 | %% \input{<filename>.pdf_tex} | ||
12 | %% instead of | ||
13 | %% \includegraphics[width=<desired width>]{<filename>.pdf} | ||
14 | %% | ||
15 | %% Images with a different path to the parent latex file can | ||
16 | %% be accessed with the `import' package (which may need to be | ||
17 | %% installed) using | ||
18 | %% \usepackage{import} | ||
19 | %% in the preamble, and then including the image with | ||
20 | %% \import{<path to file>}{<filename>.pdf_tex} | ||
21 | %% Alternatively, one can specify | ||
22 | %% \graphicspath{{<path to file>/}} | ||
23 | %% | ||
24 | %% For more information, please see info/svg-inkscape on CTAN: | ||
25 | %% http://tug.ctan.org/tex-archive/info/svg-inkscape | ||
26 | %% | ||
27 | \begingroup% | ||
28 | \makeatletter% | ||
29 | \providecommand\color[2][]{% | ||
30 | \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% | ||
31 | \renewcommand\color[2][]{}% | ||
32 | }% | ||
33 | \providecommand\transparent[1]{% | ||
34 | \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% | ||
35 | \renewcommand\transparent[1]{}% | ||
36 | }% | ||
37 | \providecommand\rotatebox[2]{#2}% | ||
38 | \newcommand*\fsize{\dimexpr\f@size pt\relax}% | ||
39 | \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% | ||
40 | \ifx\svgwidth\undefined% | ||
41 | \setlength{\unitlength}{425.1663821bp}% | ||
42 | \ifx\svgscale\undefined% | ||
43 | \relax% | ||
44 | \else% | ||
45 | \setlength{\unitlength}{\unitlength * \real{\svgscale}}% | ||
46 | \fi% | ||
47 | \else% | ||
48 | \setlength{\unitlength}{\svgwidth}% | ||
49 | \fi% | ||
50 | \global\let\svgwidth\undefined% | ||
51 | \global\let\svgscale\undefined% | ||
52 | \makeatother% | ||
53 | \begin{picture}(1,1.01676314)% | ||
54 | \lineheight{1}% | ||
55 | \setlength\tabcolsep{0pt}% | ||
56 | \put(0,0){\includegraphics[width=\unitlength,page=1]{sigillum.pdf}}% | ||
57 | \end{picture}% | ||
58 | \endgroup% | ||
diff --git a/sigillum.svg b/sigillum.svg new file mode 100644 index 0000000..7853823 --- /dev/null +++ b/sigillum.svg | |||
@@ -0,0 +1,19 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
2 | <svg xmlns="http://www.w3.org/2000/svg" width="567.529" height="576.949" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> | ||
3 | <metadata> | ||
4 | <rdf:RDF> | ||
5 | <cc:Work> | ||
6 | <dc:format> | ||
7 | image/svg+xml | ||
8 | </dc:format> | ||
9 | <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> | ||
10 | <dc:title/> | ||
11 | </cc:Work> | ||
12 | </rdf:RDF> | ||
13 | </metadata> | ||
14 | <path d="M564.606 273.092c-.62-1.18 1.7-4.845 2.59-5.654.133-3.844.01-18.296-3.06-27.097-.614-2.3-4.967-3.47-3.533-6.83 1.883-9.42-.47-8.82-.47-15.31-3.074-4.82-6.02-11.7-8.477-16.73.614-.84.295-5.21.702-6.26-3.278-7.96-4.184-15.09-10.58-19.98-2.05-2.51-2.933-7.04-1.91-9.55-4.713-7.33-4.016-14.62-10.98-20.7-5.172-1.35-4.5-6.13-4.295-10.11-5.325-6.49-8.754-16.59-15.913-20.38-8.274-4.37-3.42-7.88-9.865-13.93-3.89-6.5-8.195-11.46-16.627-14.09-.345-2.04.193-4.06-.955-5.89-5.65-5.89-12.838-11.15-17.583-15.68-2.534-1.59-4.56.73-7.02-1.16-.463-1.12-.135-2.24-1.294-3.62C449.21 54.84 441.04 48 436.68 45.47c-3.51-3.19-6.12.273-7.32-2.07-6.77-7.727-18.94-12.9-27.14-16.88-5.21-2.136-4.7-.32-7.8-1.356-5.73-7.34-13.15-8.09-21.96-9.554-3.688-2.31-5.51 1.79-8.99-1.353-4.858-4.38-16.87-8.44-23.79-9.313-5.53-1.26-6.317 1.474-10.58 1.35-4.27-.123-6.05-7.272-25.94-5.254-2.665 1.26-5.557 1.64-8.83 1.433L288.86.63c-8.192-.64-19.572-.644-26.572 2.78-1.2.587-3.884-1.644-7.002-1.75-6.623-.23-15.87.913-22.833 1.91l-5.25 3.98c-6.603.716-4.417-2.01-7.08-1.592-9.07 2.07-22.212 5.257-26.73 10.986-1.194 1.513-2.517-2.29-5.65-1.67-5.626 1.108-14.12 5.927-19.252 8.756-1.64 4.817-2.86 5.573-12.57 5.414-1.43-.026-20.66 7.563-23.86 18.47-1.88-.176-4.56-.515-6.36 0-6.68 4.06-12.57 9.657-18.13 14.013-.82 2.722-.26 3.11-2.3 5.412-6.57-2.66-18.94 12.65-20.85 15.92-1.54 2.6-1.88 5.66-2.92 7.8-8.53-.56-9.11 4.51-12.35 8.12-4.16 4.63-7.41 8.85-10.98 13.45 1.02 6.91-1.08 5.81-6.08 7.63-3.48 7.96-15.7 16.57-12.08 27.45-2.25 2.72-5.34 1.33-7.59 4.06-3.89 9.01-12.78 18.11-8.88 29.01-.41 2.3-2.03 4.97-5.95 3.88-.44-.12-5.69 14.94-8.18 22.06-1.84 5.24 6.97 15.32-3.64 16.36-2.1 2.56-2.96 18.99-4.55 25.34-.42 3.77 6.18 8.33-.63 15.15-.6 12.52.01 25.02 3.11 32.63-1.43 1.89-2.74 3.52-3.36 5.61 2.66 8.6-2.33 16.66 7.5 24.78.2 1.88-2.36 1.72-3.79 2.76.87 9.23 0 23.05 6.47 24.69.17 1.97-1.08 1.71-.95 3.97 3.19 11.91 1.73 27.97 13.63 32.55.62 2.31-2.35 1.99-2.76 3.88 1.64 5.24.09 8.2 4.92 13.04 3.11 4.49 7.28 8.5 7.08 14.16-2.76 2.24 1.04 2.85.74 6.36 3.83 5.81 7.58 18.06 15.83 16.52.35 4.92-1.91 4.45-.86 7.68 1.13 3.45 6.91 9.67 11.48 15.8 1.74 1.61 6.21 2.17 7.08 3.45.69 8.98 9.45 14.57 13.55 19.6 2.87 3.12 5.04 7.97 9.75 7.34 3.28.84 3.04.62 3.45 3.97 6.65 6.1 11.27 14.71 18.99 17.44 1.44.51 7.77.61 10.1 1.56 1.73.78-.21 4.6 2.25 6.91 7.17 3.77 13.99 10.2 21.57 13.56 7.38-1.26 9.32-1.38 12.21 5.41 8.81 2.93 16.87 12.55 28.95 8.06 1.24-.46.95 3.62 1.56 3.88 8.2 3.51 15.82 6.76 24.83 8.86 7.44 2.41 16.42 4.29 38.87 6.8 26.89 2.96 54.41 1.79 63.51.5 10.44-.42 50.99-9.71 51.8-11.78 3.3-8.44 3.53-2.83 7.77-2.59 1.81.1 17.66-5.65 29.9-13.9 1.5-1.5 1.77-4.02 2.59-5.66.82-.84 2.83.63 3.45 1.89 3.08 4.13 8.81-1.9 12.48-3.81 4.31-3.46 11.54-4.73 12.56-10.81 1.41-4 6.02-.41 8.48-1.88 6.56-4.25 14.08-9.04 19.42-16.4 1.51-2.08.52-1.56 1.21-3.63 1.07-3.21 7.02-3.13 8.46-3.54 4.3-1.89 6.78-7.34 10.26-9.85 4.1-2.94 2.23-5.72 4.69-9.7 1.84-2.1 4.81-.63 7.06-1.89 4.4-5.76 11.7-14.09 15.31-26.15 1.43-1.89 3.06-1.03 5.65-1.41 4.14-6.7 11.56-14.81 10.62-23.27.69-1.82 6.82-1.47 8.45-8.78 3.11-13.68 10.36-13.67 6.83-22.86 1.64-1.47 2.86-.26 4.71-2.36 2.06-5.2 4.19-10.01 5.38-16.36.59-3.12.78-6.91.99-10.75 5.12-2.73 4.47-5.19 5.89-9.19 3.77-6.84 1.56-15.12.94-19.8 2.59-5.89 4.55-10.97 4.96-14.33-.82-6.92 2.93-10.79-2.6-16.31-1.45-2.95 1.39-5.47 2.83-7.77 0-9.43 1.77-24.62-1.65-29.45zm-5.18-22.62c1.012 2.955 1.882 4.242 2.118 6.598 0 0-.324 3.948-1.03 5.833-.854 2.277-2.33-12.174-3.208-16.908l1.648-.706c1.303.88.47 5.18.47 5.18zm-8.18-41.022s.64 3.726 1.43 6.53c1.123 3.98 1.452 6.342 2.944 9.87 0 0-1.23.232-1.512-1.512 0 0-1.42-4.23-1.352-4.06-2.18-4.064-4.058-8.36-4.058-11.624 0-3.097 2.547.796 2.547.796zm-10.423-26.59c1.51 4.537 2.242 7.033 3.898 11.225 0 0 1.36 2.707.96 2.787-.39.08-1.03-.24-1.03-.24-4.05-6.59-7.4-19.345-6.52-19.743.88-.4 2.71 5.97 2.71 5.97zm-15.118-31.29l2.228 3.982c3.05 4.678 1.913 2.3 3.82 7.165l.715 2.15s-.427.038-1.91-2.548c-1.777-3.1-3.868-5.88-5.49-9.16 0 0-1.51-2.79-1.033-3.03.478-.24 1.67 1.43 1.67 1.43zm-22.753-34.233c1.755.74 2.946 3.57 4.057 5.095 1.26 1.724 4.13 6.926 4.13 6.926 3.15 2.69 3.18 4.06 3.42 4.3l-.48.397c-2.63-1.99-1.02-1.056-3.58-3.9l-1.75-2.47c-2.41-2.804-5.77-5.414-6.1-9.52l.29-.83zm-16.707-21.02c1.273 2.15 4.12 3.488 7.478 7.485 0 0 1.36 2.832-.08 1.433-3.28-3.186-8.432-8.677-12.092-11.862-1.06-.93-.55-1.99.08-1.91.64.08 4.62 4.855 4.62 4.855zM455.217 67.26l6.126 6.45c5.92 4.114 11.767 10.12 9.944 8.756-3.818-2.858-7.754-5.11-10.6-8.564-1.14-.95-2.382-1.455-3.56-2.502 0 0-1.91-1.512-2.626-2.786-.71-1.275.72-1.354.72-1.354zm-27.13-17.117c.08-1.672 5.568 4.14 9.467 5.255 1.057.302 5.25 3.662 5.25 3.662 3.76 2.082 2.228.557 4.615 3.583 0 0-1.66.045-4.3-1.434-3.91-2.19-5.97-4.22-10.53-6.92 0 0-4.6-2.48-4.52-4.15zm-34.052-19.266c.476-1.672 12.252 6.847 17.582 9.474 0 0 4.215 2.23 3.74 2.31-.478.08-5.35-1.62-11.14-4.69l-5.727-2.54s-4.932-2.86-4.455-4.54zm-30.073-12.26c.875-.956 9.375 3.074 10.82 3.9 1.75.877 3.102.797 6.842 2.708 0 0-.125.688-3.42-.16-3.038-.782-4.82-.693-7.664-2.255l-6.42-2.283s-1.033-.954-.158-1.91zm-27.447-7.006C337.23 10.5 349.96 14 349.96 14c-.058-.027.3.896.24.875-.508-.208-1.815.032-3.263-.08-3.38-.266-7.08-1.035-10.103-1.672 0 0-1.035-.398-.32-1.513zM298.01 6.68c4.058-.08 11.787.496 16.866 2.15 1.81.05.116 1.186-1.193.954-6.763-1.193-13.367.24-14.798-1.035-1.432-1.28-.876-2.07-.876-2.07zm-34.368.796c.496-2.2 5.334-1.018 6.637-.935.89.06 6.66.4 7.12-.02 0 0 4.45 1.12 2.86 1.36-1.59.24-15.28.72-15.28.72l-1.35-1.11zm-35.72 4.46c1.762-1.43 6.188-.862 8.91-1.115 2.19-.2 9.705-1.11 9.705-1.11 2.61.86 1.432 0 1.512.64l-2.31.48c-2.07.14-5.65 1.06-8.04 1.6-4.61 1.03-4.54.8-6.96 1.02l-2.36-.22-.48-1.27zm-17.82 3.74s4.295-1.592 5.33-1.592c1.033 0-.876 1.116-.876 1.116-3.968 2.538-4.768 2.172-9.468 3.344l-4.35 2.075s-3.685-.49-1.855-1.76 11.217-3.19 11.217-3.19zM173.108 29.45c.606-1.428.515-.256 2.068-.876 1.024-.404 4.932-1.83 4.932-1.83 1.253-.467 3.053-2.23 4.376-2.23 1.25 0 2.24-.66 3.24-1.03l-1.888 1.668c-3.058 2.09-4.068 2.1-7.24 3.423l-4.773 2.39c-.418-1.065-1.054-.708-.715-1.513zm-30.95 16.003c1.194-2.07 3.117-2.257 4.934-3.265l2.943-1.99c1.387-.3 2.626-1.274 3.42-1.115 0 0-1.437 1.602-5.01 3.5l-4.456 3.186-1.83-.32zM114.156 66.31s4.55-3.534 6.284-5.016c2.76-2.352 3.82-3.66 7.24-5.492l.955-.477-.875 1.51c-2.864 2.07-5.33 2.63-7.797 6.45-1.25 1.938-5.57 4.22-5.57 4.22-.697-.426-.658-.62-.238-1.194zM92.12 85.252c.396-.716 8.352-8.518 10.18-8.916 1.83-.4-2.465 2.468-2.465 2.468-2.873 3.08-4.166 4.204-6.84 6.926 0 0-1.274.24-.876-.477zM67.633 111.58c2.528-4.036 4.153-5.388 7.46-8.733l.478.16s.28.634-1.51 2.786c-1.89 2.284-3.34 4.3-5.23 6.646l-1.19-.86zm-19.708 28.893c1.728-5.973 5.402-9.788 9.06-13.728v1.73c-2.195 5.102-7.162 13.38-7.853 13.38-.69 0-1.207-1.382-1.207-1.382zM28.34 176.997c1.508-1.702 2.676-5.35 3.797-7.34 1.726-3.06 1.984-5.093 4.4-8.374l-.517 2.59c-1.752 5.783-4.832 10.188-7.42 16.146l-1.146-.57.887-2.46zm-7.074 19.685l.432 1.555c-.173 2.59.087 3.62-1.985 8.462l-1.898 3.71c-.192-5.94 3.45-13.73 3.45-13.73zm-9.577 38.854s.73 8.034-1.62 13.244l-.8-.552c-.09-3.022.95-6.993 2.41-12.692zm-5.1 39.458l.17-4.426.08-2.05c3.08 1.302 1.29 8.72 1.29 8.72-.17 4.232.86 7.512.1 10.04l-1.19.357c-1.5-1.33.4-4.813-.47-12.64zm1.46 38.852l-1.04-9.238.43-2.33c.69.862 1.12 2.762 1.12 2.762-.6 2.183.46 4.29.77 6.562.43 3.108 1.12 8.03.25 8.03-.86 0-1.39-3.045-1.55-5.786zm6.73 41.187c-.17-2.494-1.36-5.615-1.9-9.41-.36-2.555-.43-3.8-.6-5.96l.34-.17c.33-.544 1.79 4.372 1.79 4.372l1.74 11.082-1.38.086zm7.68 24.434c-2.29-3.647-2.33-9.238-2.59-9.41h.08c3.24 2.617 2.15 1.726 2.13 1.773l1.32 6.687-.95.95zm12.73 30.78c.29 1.857-.53 1.03-1.01.993l-2.25-4.316c-2.37-4.945-1.97-3.813-3.62-8.375 0 0 2.09 1.32 3.71 5.61.8 2.1 2.12 3.28 3.19 5.27l-.03.81zm14.18 27.847l-1.13.085c-.42-.43-.36-.51-1.64-2.85-.77-1.4-1.56-4.75-1.56-4.75.7 1.37-.17-1.72.51 0 1.38 3.45 1.64 3.11 3.67 5.85l.12 1.66zm13.07 20.65c-3.06-3.574-4.36-5.63-4.27-6.06l.77-.432c2.15 1.382 3.02 4.49 4.83 5.87 0 0 2.76 4.06 2.15 4.32-.61.258-3.5-3.7-3.5-3.7zm27.13 32.364c-3.02-3.195-9.47-10.817-13.03-15.283l1.55-.605c1.4 1.833.43 2.33 3.53 4.058 3.82 2.12 5.61 7.305 8.45 8.635l1.29 3.022-1.81.172zm27.18 22.796c-2.42-2.33-6.31-5.334-8.89-7.518-1.88-1.594-2.88-3.354-4.92-4.397l1.98.08c4.05 3.62 8.88 7.77 13.2 10.7l-.17 1.21-1.21-.09zm35.03 22.016c-2.87.42-9.05-5.44-11.7-7.04-1.68-1.02-5.13-1.33-5.13-1.33l-1.38-3.11h.86c2.4.82 4.41 1.834 6.47 3.11l10.18 6.3zm31.14 13.907c-2.01.296-6.33-2.668-8.54-3.8-3.03.012-1.8-.947-3.2-1.295-1.74-.242-3.44-.712-4.92-1.47-1.31-.67-4.14-2.16-4.14-2.16.44-1.07.13-.564.86-.775 1.15-.326 2.7 1.267 3.36 1.21l13.37 5.784 2.76 1.04.43 1.47zm218.01-7.18c-2.36 3.534-13.31 6.05-15.54 6.833l3.53-2.358c4.06-1.58 4.19-2.075 7.77-4.712l4.23.235zm15.83-7.48c.48-1.168 12.37-8.778 16.89-8.778 0 0-17.53 10.31-16.9 8.77zM459 508.21c-4.573 3.453-15.444 11.656-15.7 11.224-.26-.43 3.063-3.65 3.063-3.65 5.476-2.307 6.355-5.89 10.83-8.48zm13.027-12l3.06-5.165c1.414-1.65 1.007-2.77 4.474-5.42 0 0 1.21-2.463 3.43-2.055 2.22.406-10.96 12.64-10.96 12.64zm30.545-36.783c2.59-1.413-1.66 4.845-4.66 7.858-1.9 1.91-3.71 5.088-5.52 7.34l-.088-1.123c2.93-4.145 7.68-12.66 10.26-14.074zm15.79-20.552c-2.276 3.958-2.878 5.166-4.055 5.873 0 0 4.106-10.957 7.4-10.957 1.89 0-3.35 5.09-3.35 5.09zm19.76-33.76c-1.55 2.245-3.03 5.76-5.178 9.67l-.4 2.512c-1.5 2.583-1.24-.18-1.24-.18 2.03-4.224 5.61-15.455 5.61-15.455l.86-.52.34 3.97zm7.94-19.944c-.6-.6 1.03-7.76 3.97-11.57 0 0 .71.18.52.78-.19.6-3.886 11.4-4.49 10.8zm4.4-38.68l.21 5.07c-1.19 5.86-4.91 11.01-5.39 16.26.01.18 1.727 1.72 1.727 1.9 0 3.73-1.89 4.33-3.71 7.08-.55 1.49-1.59 1.76-2.5 3.2-1.44 2.27-3.88 10.1-4.49 11.92-.81 2.44 2.26.89 3.53 2.25l-.08 1.99c-3.96 2.55-6.84 4.31-8.98 8.29-.76 1.42 1.47 1.3-.43 5.36-.56 1.19-1.74-.16-3.1 1.47-2.23 2.67-5.23 7.98-6.01 10.29.16.39.66 1.02.66 1.02.44.87 3.28-1.3 3.02.78-.04.34-1.12 2.59-1.12 2.59-2.25.91-4.57 2.59-6.82 3.97-2.5 1.54-10.96 14.31-10.96 14.33 0 .57-2.6 3.5-1.5 4.4 0 0 4.87-1.21 4.43 1.04-.2 1.04-2.55 2.03-2.55 2.03-2.51 1.39-5.32 2.42-7.29 3.93-5.18 5.79-9.1 10.1-14.87 17.79-.02.15-1.35 2.07-1.35 2.07-.17 1.55 1.36 2.83-.51 4.01l-5.18 3.3c-5.02 2.13-9.18 7.54-9.18 7.54l-2.82 2.83c-1.56 1.53-2.4 1.58-2.31 1.81l-1.94 2.67c.33.43 4.02 2.3 1.66 4.18-.55.44-1.56.25-3.2.43-2.68 1.56-5.18 1.3-5.18 1.3-3.45.09-4.51 2.81-11.19 8.23-2.53 2.05-9.89 4.71-10.83 6.36-.94 1.65 2.59 3.77 2.59 3.77l-2.83 1.18c-6.06-.13-7.9-.1-12.95 2.83-2.91 1.69-8.27 4.76-11.54 5.89-.62.66-3.82 2.05-3.56 3.6.1.61 3.6.52 4.03 1.12l-1.09 1.74-2.85-.43c-9.65-2.59-15.91 3.05-27.84 8.59l-1.88 3.54s-3.33-2.42-4.72-2.84l-4.01-1.05-.57.6-.23.53c-2.88 6.64-7.9 9.85-13.79 10.87-2.85.49-14.24 3.03-17.89 4.14-6.79 2.05-16.35 4.96-23.29 5.07-5.53 1.59-7.62 1.33-13.44 1.3-5.18-.03-20.12 1.04-20.12 1.04-23.12-1.47-42.98-1.51-71.94-15.88-3.56-1.66-9.67-2.84-13.42-4.95l-2.36-2.59-3.53-3.06c-6.92-5.35-10.22-8.49-16.95-9.95-2.02-.94-4.07-2.72-6.38-3.54-.71-.1-1.88-.22-2.24.78-.33.91 1.34 4.32-.95 3.54l-2.33-1.9s-5-11.05-25.8-20.29c-.24.27-1.47.61-1.47.61-.71.95-1.64 3.88-2.76 3.71-1.12-.17-2.25-2.73-2.25-2.73l-.13-.27c-1.06-2.23-3.68-6.97-5.12-9-5.52-5.18-9.87-9.49-17.77-13.73-.49.02-1.7-.55-2.16-.09l-1.12 1.12-1.38-1.38c-.87-2.07-1.67-3.74-1.84-5.53-.09-.96-.52-1.07-.83-1.8-.26-.32-5.09-5.18-5.09-5.18-4.23-5.5-6.56-8.98-11.73-12.44-.6.39-3.06 1.27-3.63 1.21l-1.13-.1-.77-1.7-.13-.61c-.57-3.23-1-5.29-1.86-8.22-2.28-4.74-6.3-8.7-9.62-13.25l-1.09-1.49s-.09-1.41-1.55-1.41l-2.5 2.33-.78-1.99c.26-6.13-.26-10.53-3.89-14.07-2.28-2.23-2.89-5.89-4.22-8.46-.58-1.05-2.03.07-3.28.17-1.35.09-1.96-.9-2.25-4.41.03-.45-.26-1.82-.26-2.25 0-4.93-1.28-8.47-3.11-12.52-1.13-2.51-3.44-5.47-4.14-8.2-1.43-1.44-.76-.45-2.07-.78l-2.07-1.9c.18-1.38.6-3.66.6-5.01 0-5.69.09-8.38-2.42-13.99l-1.9-8.38s-.55-.91-1.3-1.9l-2.95-1.12c-.77-.3-.52-3.18-.52-3.2.65-2.19 1.12-4.72 1.12-6.9 0-4.32-1.43-8.58-2.42-12.78 0 0-1.17-4.61-1.29-5.18-.25-.19-3.11-.52-3.11-.52-1.04-.74-.63-1.72-.35-2.25.69-1.52 1.9-5.05 1.9-6.65 0-2.23-.17-4.16-.69-6.56-.55-2.59-.77-6.13-1.72-9.07-.17-.53-.91-2.21-.87-2.77-1.33-1.91-1.95-3.66-1.95-5.74 0-3.32 1.63-3.27 2.81-6.44.79-2.1 1.54-15.93 1.54-16.72 0-3.68.96-3.57-.33-5.73l-3.71-3.02c.1-4.14 3.45-7.9 4.83-11.31 1.45-3.6 2.08-8.64 2.09-12.92 0 0 5.75-15.49 2.79-15.94-1.69-.25-2.01.15-2.74.36l-.51-1.9c1.81-2.84 3.05-4.54 5.52-7.94 0 0 1.77-3.55 1.9-3.71.1-.3 2.15-6.13 2.15-6.13 1.34-3.84 2.76-6.62 2.76-10.62 0-1.52-.94-3.54-.87-4.75l.37-1.74c4.88-3.86 8.42-8.79 11.18-18.37l3.02-5.26c.19-.98 2.24-2.88 2.24-4.24 0-1.66-1.26-.58-2.25-1.81l-.95-.77 2.07-2.07c7.88-4.28 11.24-12.73 16.13-20.21l2.93-4.57c.9-.62 2.25-2.09 2.58-2.76.43-.87 1.61-1.6 1.16-2.65-.4-.93-1.91-.64-2.71-.88-.38-.11-.78-1.34-.4-1.51 1.99-.87 3.01-2.78 4.61-3.18 5.87-3.44 8.98-8.13 13.17-13.6 0 0 5.09-5.23 5.41-5.65.48-1.59-1.54-3.18-1.54-3.7 0-.49 3.92-3.3 3.92-3.3 9.86-3.1 12.17-7.88 19.41-15.44.48-2.86.55-3.24 2.46-4.38l3.26-.87c2.78-.63 10.74-7.64 17.65-11.77 0 0 2.72-1.64 3.03-1.91.06-.22.56-1.99.56-1.99-.72-1.75.25-2.61 2.63-3.18 5.27-1.28 29.43-8.67 28.8-14.88l1.15-1.65 8.95-.41c3.26-2.15 5.93-2.81 12.53-5.59 0 0 3.7.1 4.34-4.28 2.53-.93 8.48-.74 10.18-.72 0 0 4.59-.95 4.773-.95 2.12-1.24 4.49-1.89 6.8-2.49 3.48-.91 5.3.1 5.38-3.8l3.66-.79s14.79.4 22.78-1.18c0 0 5.77-.65 6.89-1.37 1.91-1.51.35-3.21 1.35-3.5 1.46-.43 4.72 1.33 7.08 2.55.25.01 10.9-.08 10.9-.08 6.19.47 9.62 1.04 15.19.23-.24-4.22 6.92-1.59 9.54-.16 2.06 1.13 8.91.48 8.91.48l10.58 2.39c3.68.51.88-1.12 2.31-1.44 3.23-.72 3.65-1.37 5.41 0 .83.64 3.56 2.62 4.45 2.95 6.68 1.51 13.56 3.14 19.49 3.66l5.73.4 1.27 1.27c1.8 1.96.45.7 2.78 1.75 1.88.85 10.3 2.56 12.01 3.98 2.1.62 4.32 1.11 6.2 2.31 15.27 9.71 8.45.34 9.62-.08 1.11-.4 8.04 7.48 8.04 7.48 1.43 1.44 6.403 3.14 12.88 7.02 3.282 1.97 8.1 5.86 8.36 4.84 1.75-6.76 7.76 5.02 11.38 7.25 2.07 1.28 3.573 2.45 5.17 3.5-.53-.19 7.92 5.14 8.51 5.98 5.57 7.8 5.97.63 6.765.31s5.81 8.04 5.81 8.04c-.24 2.23 6.79 7.29 10.9 10.43 2.76 2.1 4.31 7.37 5.73 6.61 5.17-2.78 4.38-2.94 7.88 5.89 1.26 3.18 7.48 8.68 7.48 8.68 2.71 3.66 1.75 3.34 3.26 4.86 2.75 2.76 1.44 3.37 5.02 2.39l1.35.48c1.1 1.58 1.99 5.8 2.46 7.57.45 1.71 3.27 4.15 4.213 5.5 0 0 9.63 16.32 10.82 16.4 1.2.08 2.55-2.79 3.27-2.31.71.48.95 5.17.95 5.17l.4 1.99c.62 4.91 3.27 8.88 5.25 13.14 1.81 3.93 3.02 6.05 5.17 10.35 0 4.7 3.7 2.35 4.53 3.11.453-.23.1 2.19.396 2.23l1.04 4.14c.77 5.17 1.43 10.09 4.3 14.25l1.12 4.22c-.35 2.32 2.6.91 4.57 1.82l-.25-.06c.98.09.66 1.58.57 2.36-.06.57-1.38 3.02-.41 7.81.09.42 3.06 9.66 3.06 9.66 1.16 5.71 1.47 7.83 5.89 11.78 0 0-.33 6.07-1.18 8.48-1.26 3.54 1.172 8.06 1.172 9.66 0 1.44-1.24 3.3-.23 4.71 1.74 2.54 1.34 2.84 1.642 5.89.4 4-.99 7.78 2.59 9.89l1.88 1.18c-.4 3.12-4.8 2.55-3.06 24.03.32 3.86-3.32 2.54-.94 5.66l3.77 3.06-1.33 3.43c-1.41 2.79-3.72 4.09-3.85 7.17l-.23 9.66c.05-1.6-.93 2.66-1.35 6.22-.44 3.78 5.78.95.69 9.76-.29.51.37 1.04.17 1.73-.37 1.3-2.66.71-3.02 1.73zm5.09 10.62s-.7 3.69-1.38 3.37c-.68-.32 1.207-15.28 2.416-15.19 1.204.09 0 3.28 0 3.28l-.03 3.24c-.316 1.86-.3 1.07-1.01 5.32zm3.71-30.65l-.345 2.94-.863 4.32c-1.41-1.65-.044-3.53.154-6.65.08-1.21.157-4.31 0-4.95 0 0-.11-4.4.708-5.65l2.12-1.65-.215 2.68c-1.65 3.06-1.1 4.31-1.55 8.98zm3.184-29.32s-2.59-15.31-.705-15.55c1.89-.23 1.42 3.3 1.42 3.3.12 3.88-.7 12.26-.7 12.26z"/> | ||
15 | <path d="M183.934 557.13l.224-7.512c-.268 2.433-.545 5.307-.224 7.513zm43.382-435.193c.456 2.97-3.312 1.028-.914 4.914-1.484 2.18-4.002 3.64-6.112 2.37-2.68-2.71-9.99-5.79-2.91-7.05-2.398-2.97-.237-3.51 1.028-4.57 3.167.43 6.28-.68 8.908 4.34zm81.878 1.713c-1.14 2.972-4.01 5.504-4.224 8.457-3.372.845-5.277-1.56-6.966-3.885 0-2.112 7.194-2.97-.172-6.595 1.69-2.744 11.997-2.2 11.362 2.023zm-50.588-1.142c1.112-.544 2.226-2.078 3.312-2.056 1.024.02 1.94 1.6 2.398 3.428.31 1.24 2.007 1.377 1.94 2.628-.113 2.172-1.448 4.053-3.767 4.686-.69-.74-1.38-1.747-2.06-1.714-2.06 1.143-4 2.972-5.71-2.172.12-1.058.94-.955 1.14-1.714-.57-1.143-.36-2.09.11-2.743.67-.41 1.66.13 2.62-.34zm92.828 5.258c.42 4.647-4.64 3.59-5.906 6.97-2.53.21-3.168-2.535-5.488-2.953-1.474-1.484-3.377-2.75-2.53-5.072 1.056-1.68 4.64-.42 4.01-3.37 3.586-5.91 9.494-.42 9.914 4.43zm-126.402 18.512c.454.257 1.257.8.457 3.543 1.14 1.03 1.37-2.97 2.96-2.28 3.99 2.29-4.57 5.94-2.63 8.46-3.88 4.57-7.23.45-8.5-2.08-.35-1.83.15-3.85 2.32-4.2.23-1.37.92-2.41 1.6-3.77 1.84-.79 2.25-.51 3.77.34zm43.454 3.562c0 3.38-2.32 3.8-1.478 7.39-1.478 1.902-4.006.635-6.12 1.055-2.95-1.055-1.685-5.275-4.852-6.543-.21-1.48.21-2.536 1.478-3.377 4.01 2.743 8.44-3.594 10.972 1.475zm67.748 6.77v2.96c-3.164 1.057.21 4.435-2.95 5.49-1.692-4.223-8.87.212-7.6-6.125 4.217-1.897 1.898-6.965 6.543-8.445 3.165.846.63 4.86 4.007 6.12zm-45.986-3.75c-1.053 2.533-2.11 5.486-4.43 6.963-1.9.216-3.586-.21-5.067-1.477-.84-2.953-.2-4.008 1.06-6.543 2.75.422 6.97-2.958 8.44 1.057zm64.822.73c-2.532 1.69-2.532 7.178-6.54 5.486-1.478-2.11-5.27-1.686-4.85-4.85 2.533-.425 4.218-3.17 6.964-3.593 1.894.423 3.796.845 4.425 2.958zm-45.432 2.954c-.21 1.477-1.685 2.957-2.956 3.168-4.637 1.056-5.48-3.378-7.17-6.12 0-1.48.843-2.114 2.11-2.536 4.85-1.265 4.85 4.01 8.016 5.488zm-60.398 9.506c-1.296 1.384-3.117 1.897-4.597 1.473-2.532-1.478-9.037 1.237-8.19-4.674 4.224-1.49 3.34-7.36 8.016-5.37l4.77 8.56zm101.227 4.658c0 2.75-1.056 6.548-4.435 6.548-1.685-2.112-8.262 1.383-6.574-3.894 2.74-2.957 8.477-7.93 11.01-2.654zm-22.315 5.168c-2.322 2.744-6.38-.458-8.068 3.34-1.27.212-2.742 0-2.958-1.48.846-2.74-1.486-4.935 1.89-6.202 2.957 1.477 8.29.54 9.136 4.342zm-99.342 3.95c-2.11 1.896.634 5.91-2.53 7.388-5.067.845-3.59-5.067-6.333-6.548-.63-2.322 2.11-2.742 3.376-4.01 2.532-.42 4.01 1.482 5.487 3.17zm126.52 10.334c1.687.636 1.6 2.785 1.6 4.687-4.222 1.477-6.076 2.873-11.354 2.237-1.685-1.686-2.036-3.896-.98-6.01 1.69-2.32 3.936-4.546 6.47-3.07 1.264 3.38 2.576.26 4.265 2.157zm-15.187 5.03c-.335 3-.05 8.154-2.2 8.8-2.116.214-4.413.854-5.68-1.258 1.686-3.378-2.974-3.81-1.287-6.55 3.586 0 6-4.582 9.167-.992zm-118.298 7.712c1.897 2.96 1.054 5.492-.846 8.024-2.11 1.477-2.53-1.056-2.96-2.532-1.9-1.478-5.7-.636-5.49-4.436.42-1.69 2.11-2.746 3.79-2.533 1.26 2.113 3.8 2.324 5.49 1.477zm133.943 11.728c1.26 1.475 1.685 3.376 1.475 5.49-1.475 2.106-3.797 3.374-5.907 2.106-1.69-2.95-6.328-5.275-4.646-9.08 1.054-1.477 2.535-1.477 4.012-1.477 1.69 1.05 2.53 4.22 5.066 2.96zm-18.04 12.572c1.474 2.743-.217 6.12-2.957 6.543-2.95-1.477-6.75-4.646-7.59-8.025 2.96-3.8 8.44-1.267 10.55 1.482zm-110.972 11.182c.636 1.902-1.896 3.17-2.954 4.014-2.108-.845-4.01 1.687-5.484-.637 1.265-2.95-.846-6.12 1.898-8.44 3.798-.84 7.176.85 6.54 5.07zm126.63-1.34c1.472 2.323-.42 4.857-2.113 6.123-4.223.846-7.383-1.266-10.34-3.588.846-2.12 1.48-5.5 4.432-5.92 3.798-.43 4.854 2.53 8.02 3.38zm-23.872 7.906c-.213 2.113-2.53 2.957-4.01 4.015-1.686.42-3.162-.635-3.586-1.902-1.055-2.534-.42-6.754 2.95-6.543 4.013-1.692 2.956 2.96 4.646 4.43zm8.632 8.08c-1.27 5.067 6.328 2.323 4.642 7.6-2.11.636-3.376 2.747-6.122 1.9-3.798-1.69-2.32-5.7-3.37-8.443.42-2.323 3.79-2.533 4.85-1.056zm22.05 7.936c-.844 2.533-1.057 6.333-4.428 6.964-1.69 0-3.375-.21-4.432-1.898 1.057-3.168.42-7.178 3.37-9.08 1.908-.42 3.802 2.532 5.49 4.014zm-8.516 13.478c1.055 3.8-3.802 3.166-5.487 2.536-1.267-1.48-2.996-1.178-3.59-2.962l.594-3.723c2.315 1.686 7.216.772 8.48 4.15z"/> | ||
16 | <path d="M254.837 398.7c0 .845-.35 1.756-1.667 1.492-3.248-3.864-4.74-3.513-6.747-5.85-.21-1.052-.328-1.77.515-2.406 3.796.424 5.53 5.183 7.9 6.763zm.35-7.38c-1.264 2.536-1.403.528-2.895-.087-1.053-2.744-7.834-4.472-5.09-7.64 3.51 1.14 7.372 4.742 7.986 7.728zm-19.282-93.06c1.4.11 1.4.863 1.077 2.05-2.32 1.69-4.417 1.724-6.68-.755 0 0-1.402-1.078 2.263-1.078.646 0 1.94-.325 3.34-.216zm-.647-2.264c-.862-2.48-3.986-.107-3.124.216-.423 1.053 1.508 1.4 2.694 1.078 0 0 .538-.108.43-1.294zm-6.015-7.878c.424 2.112-1.42 2.703-2.065 4.104-1.51.324-3.156-.562-4.634-1.617-.42-2.534 1.724-3.558 3.746-3.963 1.268 0 2.11.42 2.953 1.476zm10.432-.964c.213 2.533-2.303 1.05-3.36 2.737-1.477-.21-2.372-.28-3.427-1.76-.63-1.48.56-2.81 1.615-3.23 2.322.21 4.963-.9 5.172 2.27zm44.607-24.258c-1.057 1.898-1.12 2.406-3.016 3.882-2.532-.42-4.278-.953-6.172-3.067 1.055-3.79 4.88-.7 7.573-2 .88-.42 1.615 1.19 1.615 1.19zm-7.865-10.027l.69.83c1.9.84 5.905-2.72 6.96.24.54 4.42-4.79 3.69-7.11 4.53-4.43-1.27-.548-7.12-5.82-7.12-2.11.21-3.945-1.06-5.635-2.11-.29-4.04 4.344-3.93 3.912-4.69-.43-.76-3.556.43-2.91-2.27 9.05-3.99 7.802 5.71 9.913 10.56zm98.786-142.56s-.828.91-.162-.72c.28-2.06 1.62-3.15 2.12-5.16.4-.14-.53-7.28.27-12.57l.67-4.63c-1.11-3.34-1.51-9.38-2.08-13.72-.66-6.35-1.62-11.3-2.41-17.12-.17-1.25-1.34-2.09-1.32-3.31l1.06-2.52c2.5-2.69 3.44-4.5 4.37-7.28.27-.81.06-4.87-.27-5.69-.22-.27-1.98-1.99-1.98-1.99-2.74-3.38-9.25-1.46-9.25-1.46-2.13 1.55-3.11 1.3-3.43 3.7-.24 4.13 1.04 8.16 2.25 9.26l1.99.13h.27c-2.65 6.75-1.7 11.62-3.17 17.86-2.69 11.32-5.82 27.39-1.43 38.03l.37 1.35-1.72-1.54c-4.08-1.17-9.3-7.2-12.03-10.32-1.4-1.6-2.65-1.14-4.06-2.27l-.91-.73 2.06-.32c.67-.38 1.01-.33 1.98-.27 1.02.06 1.46 2.91 3.44 2.25.28-.1 2.25-.53 1.99-3.31-2.24-1.85-4.49-2.1-4.49-3.84 0-.84.63-1.98.8-2.78.18-.92 0-1.8 0-2.52 0-1.37-3.57.66-2.64-.66 1.59-2.28-2.25-2.25-2.25-2.25l3.3-2.91c1.79-1.63 2.21-1.28 2.21-3.17 0-.66-.14-1.32-.37-1.95-.77-2.03-3.7-4.12-3.94-5.07-.07-.27 3.44-2.38 3.44-2.65 0-1.43 1.1-8.06-.4-10.06-.4-.53 2.29-1.55 5.85-4.4l.42-2.43c.24-.93.43-1.7.43-2.38 0-.75-.89-3.9-1.48-4.52-.82-1.43-1.95-1.87-3.25-2.37-1.1-.43-1.68-.19-2.64-1.24 0 0-.12-3.84-.12-4.76 0-1.83-.26-2.76-1.34-3.98-3.65-2.74-10.6-.87-10.6-.87l-.12.03c-1.56.84-1.1.95-2.09 2.96l-.66 2.12c.05.46.95-.12.92.26-.41 4.62-5.16 4.37-6.13 6.41l-.5 1c-.21.68-.31 1.33-.31 1.95 0 4.29.21 8.51 6.92 10.33l.31.2 1.58.89c-1.08.66-6.23 3.08-4.63 3.44-2.11 4.63.93 8.73 3.05 10.19l1.46.4-3.2 2.57c-.93 2.11-1.43 3.33-1.43 5.49 0 1.22 1.11 1.86 1.59 3.17.92.53 1.63 2.02 1.84 2.69.06.21.09.41.09.61 0 .73-1.67.67-2.05 1.33-.38.68-.53 1.72-.53 1.72l.14.26c-.99.8 1.97 3.23.66 3.44-2.28.37-8.86-.62-8.86 1.19 0 .1-.01 2.68 0 2.78 1.37 1.14 7.79.48 9.52.4 1.7-.08 1.36-.85 3.17.4l-3.31 4.24c-2.8 3.67-8.41 8.6-11.19 11.92l-.45.68-9.22-9.95s-4.91-4.57-7.42-7.43c-.13.12-2.06.1-2.06.1-2.32-1.81-5.46-2.62-6.54-1.28-.25.32 2.78.84 2.33 1.41-1.28 1.57-1.37 1.83-2.86 3.08l-3.89 3.77c-2.73 2.4-5.59 7.09-9.19 9.13l-.44.02-.24-.35c-2.6-3.77-7.09-8.6-10.1-11.88l-3.43-3.42.57-1.26c1.99.98 5.29.3 6.88.43 1.35.12 2.18-.9 2.78-1.45.3-.27-.46-1.98-.39-2.65-1.12-.37-7.44-1.28-9.95-1.52-1.96-.18 1.36-2.18 1.36-2.18 1.38-1.1 1.43-5.22.53-6.49-.56-.69-2.25-2.61-2.25-3.31 0-1.23 2.73-2.4 3.31-3.44.45-.83-.53-3.36-.4-4.13l.02-.13.06-.11c.3-.58-.08-1.2-.08-1.72 0-1.41-.44-2.58-1.41-3.87-.91-1.21-1.97-.07-1.97-1.42 0-.2.02-.4.07-.6.22-1.05 3.72-1.65 2.67-6.28.66-5.24-2.06-5.61-1.46-5.96 2.51-1.46 5.29-.53 7.58-8.74l.46-2.17c.27-.84-2.03-3.04-3.08-3.85-2-1.53-4.74-.85-4.74-3.75 0-.71.83-2.67.19-5.03.08-2.7-1.82-3.33-4.93-4.12l-3-.95c-1.33-.5-2.59-.16-3.41.22-1.74.78-3.84 2.63-4.52 4.43-.13.48-.17.99-.17 1.51 0 .79.1 1.62.21 2.42.09.78 1.06 3.25.45 4.01-.61.77-3 1.37-4.36 1.59-.6 1.38-1.02 2.2-1.02 4.48 0 .93.26 4.27.57 5.2.56 1.46 1.51 1.56 2.83 1.72 1.43.16 2.95.37 3.86 2.71l.17.42s-2.96.95-1.61 7.46c.23 1.11.18 2.3.54 3.4.11.64.82 1.23 1.5 1.8l1.24.47c-.31 1.31-.26.79-1.2 1.08-2.38.73-1.49 4.1-1.89 5.61-1.28 4.81 1.54 5.06 3.1 6.15l.48.34-.18.56c-.76 2.26-2.69.38-2.69 2.92 0 1.06-.63 6.68-.34 7.73l.18.63-.58.29c-1.07.54-4.92.71-6.12.61-3.17-.27-1.6 1.66-2.51 3.44-.79 3.7 4.53 1.37 7.14.92 1.99-.34 5.42 1.06 5.42 1.06s-4.75 5.41-7.14 7.94c-2.25 2.38-4.63 5.69-8.14 9.03l-.23.39-1.3-1.58-13.36-13.26.34-2.17c-.11-.33-1.72-1.67-1.72-1.93 0-.5 7.79 1.72 10.19 1.51 1.3-.12 1.05-3.03 1.23-3.58 0 0 .01-.02.01-.06 0-.21-.22-1-2.21-2.81-1.54 0-3.69.63-4.2-.06-.28-.38-.38-.8-.38-1.25 0-.7 1.59-1.76 1.85-2.51.29-.87.23-1.43.23-2.03 0-.8-4.32-3.02-4.32-3.02l.72-.87c1.454-1.76 4.29-4.38 4.29-6.09 0-1.31-2.79-3.76-3.08-5.18-.29-1.47 2.03-2.63 2.03-4.18 0-1.24-.65-1.31-.12-2.63.02-.15-.32-5.54-.32-5.54l.69-.06c1.01-.08 2.08-.44 2.86-1.56.51-.74 2.15-2.15 2.29-4.33-.02-.16-.05-.33-.05-.51 0-.79-.22-1.74-.09-2.62.14-.88.28-1.78.28-2.64 0-.68-.12-1.32-.37-1.93l-.86-.5c-3.002-1.71-6.452-.24-5.5-4.3-1.78-2.37-2.27-6.45-5.49-7.4h-6.33c-1.71.84-1 2.32-2.33 3.88 0 .11-1.49.91-1.49 1.02 0 8.51-1.55 5.26-2.99 7.29-1.08 1.54-.47 4.33-.47 6.09 0 1.54 1.19 2.16 3.22 3.7l.85.06c.72.32 2.08.9 2.08 2.29 0 .32-.99 1.07-1.15 1.47 0 0-2.03.12-2.03 2.39 0 1.3-.95 3.04-.712 4.42.958 3.34 2.92 4.68 2.92 5.68 0 1.39-1.76 2.31-2.56 3.51-.952 1.43-1.484 2.31-1.484 3.53 0 1.04.44 2.03 1.67 2.99.91.35 3.58 2 3.84 3.14.03.14.04.29.04.42 0 1.06-.67 1.44-1.855 1.79-.65.19-1.25.75-1.25 1.15 0 .02.336 1.7.34 1.71l.1.49-.76.56c-1.08.81-2.89.29-2.92 1.43 0 .01-.56.96-.56.97 0 .15 1.09 1.92 1.59 2.34 2.626.72 3.31.57 5.14 1.03l.8.68-1.26 2.06c-2.28 2.52-4.564 7.2-7.31 7.55-.68 2.97-1.25 4.34-3.88 5.6l-2.104.78.37-1.81c.57-2.81 1.39-8.72 1.39-11.34 0-4.93-.64-6.18-1.48-11.06-.86-5-1.25-10.4-1.91-15.89-.08-.73.02-1.47.05-2.22l-.9-8.28c-.01-.69-.04-1.38-.02-2.06.33-7.64 3.07-4.77 4.23-10.11-.08-3.39-2.83-5.53-5.95-8.54-2.65-.18-4.92.28-6.62 1.28-1.89 1.72-3.54 5.07-3.52 7.25 0 0 0 .54.03.51.59 1.97.59 4.82 3.45 5.66l1.2 1.41-.02.45c-.28 6.74-1.39 10.34-2.73 17.12-1.5 7.59-2.4 13.96-3.38 22.21-1.18 9.83.82 12.6 3.34 17.89l.43 2.23-1.37 2.4c-.714 2.24-2.63 6.72-2.63 8.91 0 1.54.76 3.08 1.72 4.47 0 0 1.146.8 1.83.87 0 0-.09 1.29.23 1.77.62.06 3.31 2.17 3.31 2.17l1.71 2.17c-2.17-.46-4.26-.06-5.02-1.83-.553-1.3-1.42-1.39-2.17-1.03-.52.25-1.88 1.49-2.173 2.76-.07.24-.1.48-.1.71 0 1.55 1.12 2.92 2.16 3.5.33-.08 2.06-.12 2.06-.12 1.47-.47 4.11 0 5.71.69l-.32 1.19-.09 1.99s.11 1.08.97 1.08l.54 6.36s-1.075 9.49-.43 11.43c.65 1.94.11 8.84.11 8.84.46 3.472.34 7.513.324 9.28.76 2.37 0 28.68 0 28.68s-.75 17.36-.43 21.89c.29 3.99.33 16.17.33 16.17s1.19 9.38.65 10.67c-2 4.81-.11 13.91-.11 13.91s.65 5.39.11 6.69c-3.04 7.31-.32 9.28-.32 9.28s.64 2.05.21 2.69c-2.41 3.61-.104 7.44-.104 7.44l.11 6.47s1.83 27.49-1.51 27.71c-3.34.21-1.61-18.76-1.61-18.76s1.84-11.11.54-16.18.11-21.46.22-23.83c.11-2.37-.32-6.688-.32-6.688v-37.3l.54-6.58-.43-16.28v-33.3c-.48-6.39-.81-4.73-.49-7-.15-5.35-.26-8.53-.26-8.53l.43-13.91-.65-1.51c-2.43.19-4.09 2.26-4.63 6.25.74 9.73 1.08 3.34.75 13.69-.21 6.71.47 16.21.32 25.71-.38 25.11-.67 80.19-.87 98.21-.14 13.16.44 16.36.44 38.62 0 3.83.06 15.74.08 19.5v.21l-.11.18c-2.37 4.12-4.87 9.41-4.87 13.74 0 1.62.33 3.21 1.11 4.73 2.29 3.35 3.44 6.49 3.44 9.82 0 4.49-1.93 2.98-2.46 6.08-.44 2.54.03 1.65-2.11 6.67-.69 1.3.47-1.27-1.4 9.49-.69 2.56.7 5.97.7 5.97 4.65 2.99 4.74 9.577 4.74 12.47 0 2-3.07 1.41-5 9.84l-2.28 1.85c-1.85 2.53-1.23 2.36-1.23 5.27 0 .64.05 2.83.26 3.51 1.85 3.51 4.01 2.25 4.92 5.84-.09 3.72-.03 6.8.14 12.13.58 3.7.25 32.3.25 35.81 0 3.53.5 10.34.29 14.15l.29 14.1c-.64 6.46 1.11 16.28.35 20.38.01 4.52-.82 5.7-.23 9.87-.48 4.21.36 4.7.36 4.7-.1 1.45-5.04 11.33 21.07 17.31 7.04 2.56 10.6 2.66 18.5 4.82 20.55 5.73 54.38 4.02 84.7 4.54 10.31-.97 20.53-3.76 30.45-5.88 8.29-1.56 9.61-3.5 17.36-6.93 0 0 5.26-10.35 5.98-14.57.43-2.55.87-2.95.95-4.446.77-14.66-.24-26.31.07-27.6.33-11.78-.3-9.9-.17-26.5 0-27.08-.38-20.64-.6-48.88l1.47-1.84 2.51-.29c.865-.87 5.875-5.3 0-10.22-.44-1.96 1.125-2.27.19-3.96-2.02-3.66-1.2-5.83-.77-8.44.15-.88 1.56-2.38 1.79-3.23.383-1.92 1.93-3.18 3.124-4.58.95-1.11.44-2.69.87-3.9 0 0 1.88-1.307 1.88-4.63 0-3.26.45-6.25-.43-9.697-.87-3.44-1.73-6.51-1.73-9.98 0-3.38-2.03-4.19-.44-7.67.07-.18 2.69-3.46 2.69-3.46.51-1.44 2.03-6.52 2.03-7.88 0-.92-.25-1.8-.89-2.59-2.38-1.11-11.06-6.54-11.06-8.06 0-.35-4.3-9.57-3.32-9.98 1.74-.72 4.34 12.44 10.55 13.89 1.26.3.66-3.73-.31-4.41l-.33-.23-.01-.4c-.01-.7.28-2.13.28-2.84 0-5.89.78-7.41.53-14.23-.02-.6.36-10.93.35-11.54-.11-4.34-.8-2.4 0-10.054.4-3.86-1.94-5.25-.46-9.71l-.69-4.91c.03-2.64-.38-6.34.27-11.78-.43-8.85-.08-9.9-.08-18.94.46-2.39-.13-8.1-.13-10.66 0-2.81-.21-14.09-.39-16.9-.18-2.81 0-11.97 0-14.74 0-1.17-.06-1.38.02-2.5.14-6.59-.28-13.65-.13-18.75-.35-7.66 0-25.13 0-32.8 0-4.6.68-6.63.45-10.51V144.3c-.58-1.64-.91-7.75-.91-9.48 0-.58-1.14-3.08-1.14-3.08.57-1.49 5.18-1.11 6.51-1.14 2.9-.07 2.53-1.12 3.35-3.91.09-.24.14-.45.14-.64 0-.55-.37-1-.94-1.64l-.84-1.18c-.91-.41-1.39-.09-2.22.63-.83.72-1.62 2.18-3.42 1.34l-.39-.18-.06-.42c-.23-1.44.36-2.97.72-4.76.41-2.02.44-3.89.26-5.28s.2 1.44.01 0-.75-3.12-2.31-3.87l-.57-.46v.014zm-14.576 435.14c-3.205 5.95-.635 7.3-6.308 9.04-2.63 1.72-4.02 2.29-9.53 3.56-3.8 1.39-6.39 1.97-10.16 3.08-7 2.07-11.45 3.31-19.09 4.23-6.51 1.43-17 .32-23 .29-5.36-.07-11.89.31-20.17-.29l-14.94-.38c-27.03-4.47-36.92-5.47-59.24-17.2l-.38-.22s.87-14.97-.54-18.48c-.09-15.03-.84-30.86-1.69-45.21-.97-16.46-.21-34.63-1.06-45.86.39-2.84-.56-3.91-.03-5.43.52-1.49 1.31-2.11 4.29-3.11l1.93.48s8.99.7 9.04.7c0 0 11.5-.88 23.79-1.06 13.64-.2 29.21.75 33.35 1.58 1.06.21 2.43-1.05 5-1.06 16.15 1.84 38.09-.5 62.93 1.23 2.46-.04 3.66-.69 6.05-.71 1.45-.01 2.88 1.33 4.3 1.32 2.59-.02 4.06-1.82 6.49-1.85 2.64-.03 6.32 1.8 8.71 1.78l.36-.01.23.26c.47 3.24.63 3.67.63 7.09 0 1.65-.16 3.37-.33 5.17l-.38 6.16.45 27.73c.16 15.51-.29 28.4-.29 43.49 0 6.73.24 9.1.09 19l-.6 4.63h-.01zm-139.59-133.58c-.383 1.49-1.366 1.99-2.105 4.04-.413 1.14-.29 3.95-1.054 4.83-2.28 2.63-3.518 4.78-4.936 5.9-2.875 2.26-2.035-.44-2.035-.44 2.67-3.8 4.464-10.15 6.97-14.43 0 0 3.507-8.06 4.695-8.6 1.187-.54 1.434.66 1.434.66-.844 1.9-2.35 5.63-2.968 8.02zm10.973-16.16c.175 3.16-2.72 9.31-2.81 17.48l-1.755 6.58s-.058 1.99-1.316 1.4c-2.64-1.23-1.94-6.24-1.94-6.24 1.93-5.54 1.93-7.64 2.19-9.05.26-1.41 3.32-7.2 3.13-10.31 0 0 .9-.94 1.6-1.12.7-.18.88 1.23.88 1.23zm-6.76-6.94c.176-3.08 6.557-9.62 7.988-11.95 1.404-2.29 5.003-5.1 6.232-6.59.006-.01 5.354-5.18 4.037-5.62-.823-.28-6.407 4.48-9.2 5.76-2.497 2.34-4.14 5.48-6.686 8.82-6.49 7.38-7.02 12.21-13.51 24.59-.17 3.33-1.01 4.56-1.93 6.76 0 0-1.75 6.14-2.9 6.23-1.14.09-.35-3.43-.35-3.43 2.73-14.55 2.37-9.93 4.13-18.54 2.55-9.23 12.56-21.61 15.45-24.68 2.27-2.41 5.79-4.31 5.88-5.45.09-1.14-2-.47-2.46-.62-.86-.27-2.05 2.31-2.77 2.69 0 0-3.2 3.27-3.72 2.83-.52-.44-.41-1.34-.41-1.34l2.54-3.22c1.34-1.54 6.83-7.23 6.48-8.02-.35-.79-4.12-1.5-4.12-1.5s-1.14-.88.44-1.58c1.58-.7 3.06.49 4.13.35 2.13-.28 3.37-1.09 5.78-.48 3.95 1.02 7.36 3.45 9.13 6.52l.11.18v.22c0 2.43-.49 2.63-1.66 4.02-.92 1.11-1.84 1.84-2.87 2.6 0 0-13.63 15.23-16.61 19.71 0 0-8.34 15.38-8.42 14.14-.35-5.01 5.23-10.25 5.36-12.47zm44.572-182.37c-1.858.91-3.404 2.07-5.48.2l-1.207-.78c2.068-1.49 3.518-2.03 5.177-1.6.692.18 1.8-.97 2.17-1.09.14-.07.292 2.21.216 2.26l-.875.98zm-6.002 5.82c1.887-.72 3.876-1.29 5.884-1.39l8.536-2.83s7.883-1.94 10.452-.33c2.91 1.83-9.18 2.37-9.16 2.37l-9.578 2.34c-1.95.26-3.247 1.39-5.074 1.97-1.43.54-4.365 1.79-5.603 2.37 0 0-.41 0-2.036.05-1.62.06-.66-1.43-.66-1.43.05-.03.16-.08.16-.08 2.3-1.31 4.66-2.29 7.09-3.06zm14.635-10.8l6.833.07s2.218-.83 3.295-.51c1.078.32-.215 2.59-.215 2.59l-2.072.78-3.3-.59s-.662-.85-1.847-.74c-3.02.27-2.7-1.62-2.7-1.62zm36.902 85.97c.145 2.6.145 3.61 2.747 4.92l2.023 1.3s.68-.02 1.59.58c1.275.83 2.185 2.07 2.747 4.34.103.41 1.156 1.44.514 2.1l-1.237 1.8-1.59-2.61c-1.61-2.79-5.31-4.3-7.66-5.79-2.71-1.71-2.02-1.74-3.46-6.08-.55-1.25.29-2.1.29-3.25 0-.36.01-.71.02-1.05.01-.34.02-.67.02-.98 0-1.57-1.62-3.36-3.21-4.41-.52.29-5.53-4.76-5.53-4.76l-2.41-2.91c-.65-3.03-1.44-4.34-1.01-6.65.43-2.32 1.01-1.16 1.01-1.16.57.68.5.72.83 3.18.33 2.46 2.9 7.18 4.96 7.81 3.13.96 8.78 4.73 8.78 8.61 0 .36-.05.75-.1 1.14 1.17 1.17.64 2.35.72 3.84zm-5.06-17.94l8.53 6.8s1.042 2.42 1.046 2.5c.005 0 .02-.01.02-.01l.3 1.27c.223.62 1.236 4.47 2.103 7.65l7.372 5.78 2.457 6.94s.723 3.76 3.614 7.81c3.01 4.22-2.11 1.87-2.75.58-2.46-4.92-5.64-13.89-5.64-13.89l-1.74-.72-1.45-1.88-3.62-2.75c-1.36-.35-2.17-10.27-2.75-12.15-.01-.02-6.36-5.65-6.36-5.65s-1.02-1.3-1.01-1.3c-.02-.06-.15-1.01-.15-1.01zm-1.592-17.79l.768-.26c1.003-.34 1.137.61 1.494 1.05l.49.56s.615 1.65.293 2.19c-.324.54-1.078-.11-1.078-.11l-1.967-3.45zm-46.464 9.89c-1.96-.99-2.74-2.16-3.26-5.11l-.67-6.51.43-3.78c.91 0 2.18 11.6 2.59 12.07l.63 1.33.36.33-.07 1.66zM298 290.63c.518-.672 2.55-.462 6.97-5.206.718-.77 2.91-4.317 4.42-3.02l.918 3.83-.918.59c-.746.25-.88 1.22-1.834 1.94-1.98 1.505-6.25 2.91-9.434 2.952l-.585-.49.465-.6zm5.95 8.92c4.08 2.837 9.54 3.47 9.54 3.47 5.856-.464 10.745 5.42 13.587 8.97 2.577 3.207 10.12 6.365 10.12 6.365l6.938.87c5.605 1.817 5.64 5.93 9.688 12.005 4.137 2.455 4.255 3.56 5.78 7.234 0 0 3.14 8.52 2.748 8.967-2.02 2.32-1.44 1.16-1.44 1.16-2.31-8.1-9.97-15.04-11.42-15.47-1.44-.43-7.66-6.76-10.4-9.4-2.11-.56-3.02-1.34-4.91-2.31-1.96-1.01-4.81-1.47-7.8-3.76s-6.36-11.57-17.2-11.13c-5.36.22-7.33-2.21-11.16-6.52l-.19-.23s.12-2.2.12-2.37c0-.94.15-2.05 1.25-2.71l2.62 1.71 2.17 3.18zm16.478-27.34l-.58-1.3c.006.014 2.024.145 2.024.145 2.11 1.33 4.914 4.486 4.914 6.077 0 10.126 3.615 8.68 8.963 14.32l1.31 3.697 2.15 7.15 3.32 3.47s1.44 4.34-.15 4.34-1.59-3.76-1.59-3.76-2.75-1.74-3.91-3.77-1.16-8.68-3.72-11.62c-1.01-1.16-2.5-2.7-2.5-2.7 1.3.65-2.93-1.31-3.47-3.62-.55-2.34-2.07-7.51-3.47-9.26-.02-.04-3.3-3.15-3.32-3.18zm-58.76 23.91l-.047-2s1.81-2.86 2.62-2.67c.81.19.38 1.86.38 1.86l-.52.573-1.19 1.855-1.24.382zm86.62 6.534c-.237-.86-.846-1.66-1.484-2.51-.944-1.25-3.105-3.528-3.105-5.226v-5.35l-3.18-3.33s4.04.72 4.62 1.88c.57 1.157-.44 6.943 2.31 8.97 2.74 2.023 4.6 4.483 5.35 7.23l5.2 5.79s-.29 1.735-2.46.143c-2.17-1.59-5.49-4.63-7.08-4.05-1.59.58-1.01 1.16-1.01 1.16l-.29 2.32s-1.59.73-1.59-3.18c0-2.31-4.63-4.92-5.21-7.08-.58-2.17.29-6.51-1.59-9.26-1.88-2.74-4.05-4.48-2.32-4.62 1.74-.15 3.04 3.76 3.04 3.76s2.31 6.36 2.17 8.1c-.15 1.73 4.33 5.21 4.33 5.21s3.83 6.2 2.28.06zm-24.464 38.55c-2.312 2.17-5.3 1.645-7.01.36l-.395-.3.09-.485c.09-.45.3-4.93-3.89-1.82-.39 0-6.29.43-8.8.76 0 0-.86-.79.71-1.34.9-.32.87-1.09 5.27-.94 1.8.05 3.33-1.86 5.99-3.33 3.26-1.81 4.1-3.12 7.67-3.96l1.8-.25s3 2.08 4.55 1.95c2.67-.22 3.91-2.22 6.93 1.23 0 0-.93 2.61-2.97 3.54-1.81.82-4.05.94-4.05.94-.87 0-5.6 3.86-5.93 3.61zm2.457 2.314l.22 1.52c-.95.592-1.73 2.17-4.04 3.615-.63.968-.39 2.298-1.08 2.243-1.2-.08.07-2.25-2.31-2.53l-3.54-2.75-.14-2.386c1.58-1.37 2.59 2.653 4.63 2.89 2.33.273 2.36-1.49 2.82-2.603h3.47zm-75.09-.868l-1.81-1.025c-2.57-.75-5.7-.71-5.85 1.892 5.64.574 5.52 1.33 7.45.98 0 0 .27-.405.79-.84l-.58-1.012zm6.65 17.36c1.58 0 4.42 2.26 6.15 3.254l3.9 2.1.15.65-2.38-.146c-1.39.51-5.44-2.886-5.56-2.97l-3.18-2.53.94-.36zm-28.29-80.627c2.6-1.252 4.48-2.86 6.84-1.675l.14.07.1.11c.74.816 1.68 1.33 2.67 1.87 1.36.744 3.97 2.12 5.03 3.853l.12.19-.35 2.05c.01 1.48-.86 1.3 3.34 3.89.22 3.24-2.47 1-3.45 3.02-.62 1.29.89 1.75.43 3.67-.32 1.37-1.4 2.81-1.72 5.72-2.48-.21-2.14 1.43-2.69 2.05-3.52 2.21-7.86 3.35-11.49.74l-.12-.02-.11-.06c-4.18-2.41-15.1-13.26-10.36-15.96-.25-1.29.43-3.34 1.16-4.79l.01-.31 2.72-.61c2.04-3.83 2.48-4.1 7.76-3.77v-.01zm32.16 23.47l2.02-1.723c.46-.43 1.06-3.955 2.24-3.848 1.19.105 1.03 1.51 1.03 1.51v2.495s-2 2.892-3.61 2.785c-1.61-.107-1.68-1.223-1.68-1.223zm29.91-59.047c-.32 5.823 1.94 7.224 1.94 7.224.54 4.633-.23 8.16-2.59 14.34-1.33 3.48-2.69 6.04-6.79 5.82-1.19-.064-1.76 1.1-2.69 1.187-7.6.72-10.76-6.474-14.22-12.833l-3.44-5.93-.16-3.81c-.23-1.134-.48-2.16-.48-3.2 0-3.65.44-5.07 2.59-7.44 1.37-1.512 1.4-3.126 1.94-3.665.54-2.27-.25-2.78-.75-3.24 0 0-1.94.54-2.15.11-.22-.43 1.94-2.81 1.94-2.81l1.23.08-.05 2.18c4.74.75 11.58.62 15.63.21 3.23-.33 3.45-3.02 7.11-2.59l2.51.39 2.13 1.11c-.2.36 4.31 4.96 4.31 6.26 0 .89-1.35 1.87-1.72 1.18-5.82-10.89-12.38-5.97-12.07-3.13.22 1.94 4.01 3.11 3.77 4.2l2.05 4.31zm-2.37-.216c.21-1.62-5.27-1.525-6.18-1.525l-3.41.66v-.864c.85-.64 4.88-2.9 4.83-3.15-1.06-.19-1.96-.46-3.54-.51 0 0-1.43.29-1.95.41-1.54.88-2.08 1.68-2.08 2.6 0 .81.08 1.03 1.35 2.93.65.97 1.23 1.94 1.4 3.13 2.35 1.43 4.98.6 7.26-1.06l2.34-2.6zm-28.31-14.947c-.46-.15 1.72-1.4 1.72-1.4s1.03-1.58 2.13-1.554c1.11.02 1.25.82 1.25.82l-2.13 2.13s-2.5.15-2.96 0zM285.58 292s-1.11-.02-1.62.218c-.92.42-1.34 1.223-1.83 1.293-.755.11-3.018-2.48-3.018-2.48.54-.32-5.856-4.62-5.856-4.62l-.937-1.37 1.66.14c1.57.9 4.75 1.73 5.45 2.73.58.83 2.51 1.82 3.45 2.05l3.13-.43s1.18 3.02 2.69 3.02h-.44c.54.75 1.9.73 2.49.43 1.49-.75 2.84.35 3.86 1.19.82.69.51 3.99.04 4.4l-.49.47-.47.33-1.54.07c-1.04.11-1.99-.26-2.83-.96-.49-.4-1.36-.65-1.4-1.29.21-1.29.75-3.34-.54-3.45-1.3-.11-1.83-1.72-1.83-1.72zm-1.56 42.66c.34.19.76.643.66 1.077-.1.436-.4 2.517-.748 2.714l-1.36-.1v-.73c0-.37.077-3.71 1.44-2.95zm-6.45 6.26c3.042-6.224 1.91.62 3.61.65 2.18.04 5.474.24 6.5 0 3.32-.767 2.68-2.016 5.665-.898l.12.825-2.537 2.656c-4.76-.457-5.05 1.104-10.688.96l-2.71-1.194s-4.45-1.92-4.23-2.64c.21-.72 4.26-.36 4.26-.36zm12.79-11.79c-.186-.07-.033-.64-.033-1.128 0-.667 1.767-1.517 1.995-2.045.234-.544.375-.916.375-1.215 0-.25-.21-.448-.458-.658-3.62-.92-2.82-3.702-2.35-4.155l.11-.11.13-.06c1.55-.7 2.68-.94 3.25-2.64.65-1.95-.52-4.78 1.97-5.17l.79-.13s4.75 1.03-.31 9.85c.2.13 0 .99.14 1.01 1.38.21 4.2-4.56 5.57-5.86l1.01.36c-.79 5.16-1.44 6-4.48 11.28 0 0-.36.91-1.19 1.26-.75.32-4.8.04-6.54-.61zm12.134-3.36c.456-2.91 2.345-3.215 2.345-3.215s1.35-2.82 1.89-2.835c1.36-.04.35 3.768-.87 5.52-.74 1.06-.47 1.45-.61 2.534l-1.1 1.25-1.21.71c-1.03.26-3.67.61-3.63.156.04-.452 1.09-1.17 1.09-1.17l2.07-2.95zm6.946-1.197c-.793-.216-.793-1.08-.793-1.08l1.05-2.685 1.55-.57.793.432s.433 1.59-.144 2.24c-.58.65-1.66 1.88-2.46 1.663zm9.325 12.3c-.073-.728 6.07-3.04 6.07-3.04l1.23-.58 1.944.21-1.3 1.524s-7.88 2.605-7.95 1.88zm-11.315-81.85l.43 4.85s.4 8.285-.322 7.44c-.16-.19-1.4-1.797-1.722-3.56-.53-2.907-.21-6.58-.533-7.55-1.4-4.17-5.495-3.665-5.82-5.606-.32-1.94-1.613-6.36-.86-6.47.753-.106 2.8 4.854 2.8 4.854.42.45 3.165 2.52 3.517 2.52l.577.51 1.94 3.02zm-22.09 21.457c3.34-2.264 7.003-2.265 12.714 2.155l.215 3.45c.08 1.73.68 2.515-.68 4.22l-.15.184-.23.07c-3.88 1.29-5.52-.49-11.34 1.23-2.48-1.65-3.23-5.29-3.45-7.01-.22-1.73-2.05-3.13-2.05-3.13l.75-.65c1.13-.13 2.88-.1 4.2-.54zm5.925-54.02c.505.158 1.44 2.457 1.8 2.91l-.186 1.62c-.64.23-2.02.3-2.95.066l-.52-.13-.08-.53c-.13-.893 1.31-.22 1.81-.81.64-.754-5.02-3.17-4.53-3.02l-6.36-.54s.75-2.26 3.88-1.83c3.12.43 7.11 2.263 7.11 2.263zm-31.465-22.1l.66 1.483v1.584l-1.475.43-.156-1.554.32-1.618.64-.324zm16.27-.86l-1.51-.648.11-2.158h.752l1.292 1.618-.647 1.186zm3.156 26.99l3.846-.465s.97-.324 1.723.54c.754.862-2.91 1.94-2.91 1.94l-6.356-.108-4.64-1.294-1.4-1.4v-1.725h2.37l3.77 2.263 2.26.43 1.32-.18zm-6.928-7.69c-2.377 1.01-4.095 1.08-6.573 1.942-2.113.734-3.6 1.065-6.034 1.94l-1.07-1.295c.54-4.96 6.66-4.52 10.02-5.067l3.88-2.154 2.48-.324.33-.216c.65-.216 1.86-.496 1.89-.503.73-.34 1.5-.487 2.3-.55 2.1-.43 5.63-1.32 6.92-.995 1.3.324 2.16 1.726 2.7 2.588.54.862-2.8.97-2.8.97-1.27.58-3.96 1.102-5.38 1.078-.6-.01-2.67.4-3.23.433-.37.075-2.48.54-5.07 1.725l-.32.43zm-12.176 64.046c.558-.605 1.292-2.02 1.292-2.695 0-.73-.567-2.76-.9-3.77-.315-.94-.65-3.01-.65-3.01 0-.03-.027-.05-.027-.08-.04-1.22 1.36-1.43 1.36-1.43.755 1.08.254 1.17.25 1.5.03.79.485 2.32 1.26 3.25.7.84 2.26.4 2.26 1.62 0 .71-1.01 2.14-1.776 2.98.03.21.06.42.06.61 0 1.62-.22 1-.96 2.27-.71 1.22-1.41 7.31-3.24 8.28 0 0-.74-.05-1.72.65-2.58 1.83.93 4.54-1.83 6.04-1.38.75-2.37-.43-3.88-.75-1.3-.28-3.98 1.08-2.91-.54 1.1-1.65 3.31-.76 3.31-.76-.02.02-.03.04-.05.04l-1.96-2.4h1.94c1.19.33 7.11-2.91 6.04-7.54-.21-.91 1.94-2.48 2.16-4.2h.01zm-3.01-73.072c-.526 1.5-2.557 2.257-4.04 2.808l-.816-.143-.755-.97-.54-.87 1.62-.76c1.18-.86 1.91-2.17 3.4-2.5l.56-.13.29.49c.53.87.44 1.59.29 2.05zm-.378 50.564s1.987 4.18 1.017 4.503c-.97.33-2.56-1.56-2.56-1.56l-.56-2.75s.22-2.04 1.19-2.26c.97-.21.92 2.08.92 2.08zm-17.3 8.922l-2.586.97c-1.507.075-2.586-.11-4.848-1.295-2.726-1.428-3.233-1.725-6.804 1.278l-.54.788-1.815.1c-1.72-.1-3.65.45-4.31 1.08-2.48 2.37-2.05 4.42-2.05 4.42-.71 1.72-1.03.52-2.47 2.27-4.2 5.07-5.06 8.95-.52 14.3l3.76 5.33h-1.29l-5.54-5.28c-2.6-.14-2.02 2.46-2.32 2.16-1.11-1.1.43-2.37 1.3-3.77-3.23-2.48-.44-12.73-2.26-18.87 1.08-2.37 1.11-.62 3.37-2.65l.6-.83 1.74-4.6 4.96-2.15c4.53-4.37 6.04-5.5 10.24-4.42 1.9 0 3.81-.57 6.25-.32 9.81 2.59 14.87 3.45 20.38 12.85l.13.21-.01.24c-.22 4.57.02 5.2 1.52 8.75l.46 1.1-.27 3.07c-.54 0-2.91 0-4.53 1.4-.72.63 2.24 4.29 1.51 4.32-5.17.21-5.43-4.19-5.6-4.64-.54-1.4 6.68-1.72 3.51-4.21l-.46-.11-.11-.46c-.23-6.53-5.32-5.81-7.88-7.93-1.49-1.23-3.44-3.02-3.44-3.02zm-31.677 39.032l-.313-6.315.204-2.205 1.51-3.126 3.77 2.91c.86.97.74 1.162 3.555 3.666l6.053 4.643-.2.52c-.57 1.48-1.542 1.47-2.512 2.71-.94 1.203-1.67 1.994-2.263 3.45-4.3 5.744-3.44 7.763-3.01 9.38.43 1.617-1.18 6.04-1.18 6.04 0-.003 1.08 2.802 1.08 5.82 0 1.614-1.23 3.75-1.4 3.126-.97-3.66-3.03.28-3.99-.75-4.31-4.63-1.08-4.81-1.07-7.87-.07-1.35.65-2.9-1.4-4.96-.1-.1.91-.14 1.08-1.94.37-3.98.18-11.52-.1-11.75-1.26-1.01-.97-3.66.22-3.34zm44.772 41.31c.7.79.7 1.405-.09 1.757-.95.42-1.76-.27-1.76-.27s-1.42-.74-.53-1.23c.89-.5 1.57-1.16 2.37-.27zm-40.73-.263c1.06.85 1.95 1.32 3.68 3.51 4.65 5.88 6.88 6.09 10.71 5.64l1.26-.01-.29 1.12c-.19.73-4.47 4.49-6.07 5.1-1.2 1.76-2.42 4.35-3.86 5.7-1.97 1.84-2.02 3.33-3.08 4.04l-1.31-1.77c-.09-2.27.25-3.91-.23-5.53-.49-1.66-1.03-3.51-1.03-5.25 0-1.95 3.09-2.65 6.16-2.13-.29-2.12-2.38-1.71-3.95-3.08l-3.16-2.28-.81-5.38 1.95.29zm28.08 58.49c1.14 1.49.08 1.87-.23 3.44-.53 2.7-1.42 5.58-2.76 8.94 0 0-3.43 2.46-4.09 1.89-.66-.58 1.36-6.2 1.36-6.2 1.36-8.27 2.88-28.03 3.77-27.5.89.53 1.4 6.58 1.4 6.58.26 4.57.74 9.15.52 12.82zm6.49-6.06c.78 2.53 4.47 3.51 6.02 6.58.26.53 1.01-.17 1.75-.9-.95-2.67-3.85-6.48-6.37-7.97-2.37-.79-1.41 2.28-1.41 2.28zm-2.11-1.41s.52-2.9-.62-4.39c-1.14-1.5-.62-3.08-.62-3.08-.02-.04.35-1.76.35-1.76-.79-2.11-.55-3.62-.7-7.82-.18-4.83.52-4.74 1.93-6.85-.04-.27 1.31-2.9 1.31-2.9s.34-1.2 1.23-.97c0 0 1.05 0 .5 1.41-.61 1.57-1.26 4.65-.07 6.47l.69 1.07c3.78.97 5.18 2.55 8.34 2.73 1.23-.96 2.56-4 3.51-5.19 1.31-1.64 1.58-2.38 2.11-3.48l1.45-.59.29 6.26c-2.64 3.16-2.69 8.31-4.3 11.33 0 0-2.2 9.93-2.11 11.42.09 1.49-1.61 6.49-2.36 11.52l-.07.43-.41.17c-1 .43-1.12 3.81-1.12 5.26 0 0-1.23 3.34-1.84 2.28-.61-1.06-.5-3.61-.5-3.61-.03-2.02-.82-3.86-1.88-5.97-.35-.7 1.67-1.94-.26-2.11-1.93-.18-1.93 2.55-2.55 2.28-.61-.27-.61-3.78-.61-3.78-1.46-1.62-1.43-3.92-1.31-5.89l-.35-3.34-.09-.97zm19.66 18.7s-4.75 4.67-5.27 3.74c-.52-.93.25-2.21.25-2.21.54-4.85.63-9.35 2.74-12.69.89-5.09 1.58-10.36 1.84-14.58 1.58-1.93 2.59-6.05 3.86-9.05l1.84-1.14c-.61 3.46-1.41 7.5-1.58 11.41-.42 9.51-2.2 18.27-3.69 24.5zm10.09-21.43c1.23 7.46-1.23 18.79-1.23 18.79s-3.78 6.06-4.04 4.48c-.27-1.58.52-3.4.52-4.66 0-2.43.17-5.62.84-7.75-.17-1.15.21-.87.21-1.92 0-3.88.94-7.76 2.02-11.24 0 0 1.01-4.86 1.91-5.59.9-.74 1.55.28 1.55.28-.31 4.51-2.38 4.09-1.8 7.59zm-4.16-46.82l2.02.5 3.54.07c3.83.72 3.17 1.53 6.87 3.11 2.39 1.02 8.56 3.84 11.18 4.34l1.67 1.59 1.23 3.47c2.24 2.31 3.69 4.69 1.81 6.22-.51 2.17-5.59 1.91-8.03 1.73-1.95-.15-3.25-.63-4.27-.44l-3.55.07c-4.26-.29-1.29 2.81-6.5.65l-5.21-1.01s-1.23-.58-2.97-1.01l-3.6-1.4-.66-.64s.94-1.43 2.67-.64l3.4 1.38 3.54.5c.92-.23-.53-1.82.51-2.1 6.43-1.74.87-2.1-.65-2.53-4.63-1.23-5.24-3.05-8.1-4.27-2.53-1.08-3.24-.93-5.49-2.89l-1.37-2.39 1.3.14c1.14.16 4.63 3.16 6.36 3.76 7.73 2.68 10.62 4.48 11.56 3.11-.4-1.15-2.46-2.53-7.3-3.98 0 0-4.91-1.09-9.76-5.79l-2.96.29-.14-1.88c2.02-.15 5.06-1.16 9.68 2.82.63.54 1.23-.15 1.88-.51-.65-2.02 1.3-2.31 1.3-2.31zm7.95 7.01c.5-1.23-4.77-4.63-7.95-3.62-1.79.57 7.44 4.84 7.95 3.61zm25.69 47.52c.92 1.23.03 2.42 1.17 5.85 1.97 5.93 8.05 11.41 6.46 11.89-2.02.61-5.62-5.1-5.62-5.1s-2.07-5.82-5.18-11.95c-1.87-3.69-4.46-6.63-6.23-10.89-2.81-6.77-4.47-15.82-3.69-15.82.79 0 2.37 4.21 2.37 4.21s3.77 12.56 10.71 21.78zm-3.25 20.15l-.61.13c-5.26 1.2-8.87.71-11.59-2.63l-1.93-4.71c-.45-1.95-1.79-8.89-1.79-8.89l-.07-.32c-.81-4.52-1.76-5.35-1.66-9.72.14-6.15.18-23.09.18-23.09 2.69.99 2.78 1.61 3.25 3.86.33 1.65.61 4.65 1.66 7.55 0 0 1.4 10.98 6.84 19.5 3.63 5.69 11.23 11.68 5.71 17.68l-.01.62zm21.46-9.56c-3.93 1.22-4.83 4.6-6.02 4.71-1.19.11-2.64-3.05-2.64-3.05-3.5-3.07-1.85-1.99-4.83-7.26 0 0-2.12-4.27-2.11-4.22-2.28-6.15-8.53-14.18-8.95-21.12l-.18-2.77 1.61 2.26c1.92 2.72 2.44 4.42 3.56 7.39 1.62 4.34 3.36 9.5 7.1 12.73 1.62-.51 1.85-4.78 1.85-6.59 0-.62-.04-1.3-.1-2.06-.05-.71-.11-1.44-.11-2.11 0-.49.03-.93.11-1.32-.37-6.59-2.35-8.49-4.47-14.45-1.38-3.9-2.48-10.11-3.33-14.14-.28-.28-4.92-5.53-6.41-6.85-.39-.35-7.11-2.72-7.11-2.72-.88-1.23 7.68-3.24 10.88.7 3.07 3.77 3.9-1.07 2.98-3.6-.74-2.03-2.98-1.58-2.28-2.2.3-.26 1.06-1.49 5.09 1.49 7.2-2.81 7.99-1.4 7.99-1.4s4.39 4.66 3.43 5.18c-.97.52-7.23-2.19-9.75-1.67-3.87.79.27 1.78-.44 2.28-.88.61-2.64 1.31-1.49 2.54 1.14 1.23 4.74 2.39 4.74 4.3 0 1.07-.18 3.07.53 4.39.48.91 1.54 1.39.96 2.11-3.51 4.39-.92 4.79 1.13 5.95l.88 1.34s.17 5.71.61 6.32c.44.61-.18 2.54.08 7.81.26 12.82-4.91 16.69-3.19 18.98 1.06 1.4 2.33 1.2 3.8 1.05 2.02-3.34 4.57-3.21 4.57-6.76 0 0 .97-5.53.97-5.54-1.17-.35-.93-2.03-.35-3.08.48-.88 1.02-5.04 1.02-5.04l.12-13.06c.96-2.46 1.14-2.46.61-3.17-4.28-5.73-2.54-6.43-3.42-6.94-2.98-1.76-4.52-3.44-5.7-6.16 0 0-4.22-2.28-2.9-2.45 1.32-.18 3.96.42 3.96.42 1.35.55 2.25 1.67 3.33 2.47 3.78 1.58 6.95 7.41 10.36 12.91 1.31 4.55 2.55 11.38 2.55 16.95 0 2.56.7 5.53-.3 8.04-3.7 4.06-5.95 8.46-7.07 12.33-.31 1.82-.86 3.51-1.7 4.97zm35.7-4.49c0 2.16-2.93 3.78-3.14 3.65-1.39.49-.58-8.31-2.64-8.02-2.13.3-2.43 6.29-3.99 7.6l-.15.2-1.14 5.69c-1.51 1.07-1.93 1.83-3.61 2.76l-1.46.89s-1.02.71-1.93.2c-.91-.51 2.23-8.63 4.36-9.64.46-.22-.29-1.24.61-2.74.87-1.46 5.88-11.81 5.88-13.5 0-.15.79-2.88.79-2.88 1.23-4.53 1.53-5.41 2.45-9.29.94-4.01 1.78-8.89 3.95-12.48l1.62-2.95h.71c.03.68-.51 2.06-.51 2.74 0 3.49-.8 6.82-1.83 10.45-1.72 12.58 0 27.27 0 27.3zm7.61-9.03s-.41 1.11.5 4.16c.91 3.04-1.42 10.55-1.42 10.55s.71 3.24-1.11 3.14c-2.63-.15-.31-.71-3.25-1.02-2.94-.31 1.32-4.47 1.83-5.48.51-1.02.3-2.64.3-2.64s1.21-1.73.61-3.15c-.61-1.42-1.42-4.77-1.42-4.77l-.01-4.38c-1.31-8.31 1.82-24.2 2.13-26.27.61-3.96-2.03-8.42-1.22-11.77.33-1.37 2.13-.61 2.63-1.12.51-.51-1.11-3.65-1.11-3.65l-1.22-.21c-.45.17-3.25 3.55-2.44 5.48-.87 1.31-1.95.09-2.43.61 0 0-1.2.95-1.22.91-3.95 4.77-4.93 13.32-6.69 19.07-2.06 6.77-3.08 16.45-10.34 28.51 0 0-5.88 6.15-6.97 7.82-1.02 1.55-2.06 3.16-3.79 4.24l-1.69 1.05.5-1.92c.72-2.78 2.81-5.05 5.03-7.47 1.86-2.04 5.78-7.88 6.91-10.33 3.1-7.36 2.37-8.89 4.76-16.44 3.84-12.1 3.25-23.44 12.07-30.85l.43-2.14c-1.71-1.44-.68-4-1.88-5.71-1.55-2.2-2.96-4.92-5.2-5.93-.43.44-2.02-2.93-2.02-1.96 0 .07-.95.58-.94.65-.15.22.14.73.14.73.97.88 1.67 2.88 2.06 4.03 0 0 .76 1.05.44 1.33-.33.29-1.37-.3-1.37-.3-.99-.22-2.5-5.28-5.95-3.99-.33.17 0 1.54 0 1.83 0 .25 3.37 3.6 3.64 4.23 0 0 1.69 4.09.82 3.94-.5.43-3.97-6.37-7.23-5.57-2.11.52 7.49 9.96 6.14 10.63-2.53-.51-4.62-5.64-8.82-6.51-3.61.51 6.28 9.51 4.05 10.42-1.08.29-4.04-4.94-7.22-6.15-3.11.07 7.01 9.33 5.64 11.14-.66.02-8.45-9.04-9.32-7.23-1.88 1.23 8.67 13.02 6.8 15.76-1.59 1.04-2.15-2.87-3.62-4.99-.74-1.07-2.1-.65-3.11-4.05-.76-1.13-1.71-1.21-2.53-2.1-2.98-3.2-5.86-5.72-5.86-5.72l2.02-2.39 4.19-5.97c2.83-3.07 6.36-5.93 8.38-9.51l4.84-.87c.51-.73-.36-1.45-3.64-1.89l-.1-.39.25-.31c1.68-.31 2.36-.08 4.14.12 1.3.14-1.09 1.74.79 2.03 1.88.29 3.76-3.11 2.46-3.4-1.3-.29-2.62-.51-3.11-1.45-1.49-.66-1.62-2.55-2.53-3.83-4.53-5.71-11.18-4.84-11.18-4.84-3.65-4.06-4.66-1.22-5.27-2.94-.6-1.73-5.8-8.78-5.8-8.78l-1.38-.87c-.2-.14-4.79-.39-4.99-.51-.26.04-4.92-.72-8.02-1.59l-2.17-1.59-.07-.07-4.56-2.97c-1.77 0-2.87-2.31-4.92-1.59-1.63.57-4.29 1.42-6 1.7l.01.11c-2.69-.07-2.16 1.16-2.11 1.23.38 0 2.17 1.44 2.17 1.44l-1.16 5.64c-3.9 1.74-4.48 6.65-8.73 12.49l-.92 1.27-.1.07c-5.48 4.06-9.49 2.67-14.45.4l-1.69-.77h-.09l-3.31-3.72c-4.25-3.81-6.62-7.26-9.6-6.27-.4.63-.63 1.28-.63 1.96 0 .99 1.65 3.98.49 6.43.33.19 1.16 1.43 1.16 1.43.81.4 3.4.94 4.04 1.9l-.87 2.17-.29 1.15c-7.08.58-6.07 2.17-9.25 1.59-.95-.48-3.9-2.16-4.77-3.03l-.14-1.3 1.39-.21c1.17-.4 2.28-.9 2.49-2.11.12-.28.17-.55.17-.81 0-1.33-1.51-1.94-2.61-2.51-2.21.08-4.93-1.7-6.33-2.91-1.82-1.58-3-2.49-5.04-.63 1.14 2 2.3 4.14 2.99 6.43 1.72 5.7.83 10.11 7.95 9.84l7.09 1.45c4.26-.5 6.89-2.76 10.12.29l1.15 2.31s-1.16 1.3-.73 3.9c.26 1.57-3.84.72-5.5.29-2.65-.69-6.88-.42-9.1 1.44l-1.15-1.16h-4.62c-6.38-.01-9.32-1.46-12-8.97-4.66-7.94-1.44-16.05.87-17.79l1.56-5.13.13-.12c6.39-5.45 11.2-1.1 11.88-2.12 1.73-2.61 4.71-1.92 8.08-4.7l.16-.13.21-.04c7.74-2.08 10.29 1.64 13.96 5.3 3.23 3.22 5.63 8.39 11.27 8.1 2.05-1.4 4.26-4.98 5.2-7.24 1.44-3.47 6.07-5.93.58-6.37 0-.43 1.45-.87 1.45-.87s-.72-.87-2.03-2.32c-.53-2.13 4.08-6.09 6.07-6.94 1.01.15 4.77 1.16 4.77 1.16.36.72 2.17 1.15 2.6 2.31l-.29 1.3c-6.9 1.74-6.5 1.59-8.24 2.89-1.3 1.45.72 1.3.72 1.3 2.95-.38 2.46-.03 5.21-1.01l5.06-2.75 6.36 1.3 7.37 5.5-.44-.29 1.09.22c1.73.15 3.22.38 4.64 1.11.66-.01 9.65 2.11 9.88 3.02l1.08 2.32s3.61 6.29 7.51 7.52c3.91 1.23 5.42.44 7.66 1.81s6.29 6.44 6.29 6.44L346 336c4.26 4.99 11.56 10.63 12.14 14.68l2.22.23c1.05.24 1.02.55 1.63 1.46l1.12 1.83 2.84 1.92c-.61 1.9-.1.71-1.01 1.32l-.1.3.3 1.32c.21.91-1.13 2.42-.81 3.85.23 1 1.29 2.25 1.83 2.94l.65 2.14.06.6c.67 2.26.34 4.78-.41 6.29-1.83 3.65-4.664 17.86-3.55 23.44l.81 1.82 1.22 2.13zm4.86-360.7l-1.48 1.14-2-.67-.07-1.97 1.37-1.03 1.48.8s.8.91.68 1.71zM349.05 99l-3.62-2.374-1.75-1.057-.26-2.64h1.213l1.78 2.07 14.39 12.22s1.03 3.59-2.4.57c-2.852-2.52-7.307-8-9.362-8.8zm-5.257-16l-2.17.8-3.31-1.257-.454-1.83 2.97-.23 1.6.227 1.48 1.03m.8 6.4l-3.09-.687-4.11.57-2.63-1.256v-1.03l3.54.23 5.59-.115s1.83 1.713.69 2.285zm24.2 90.28v-6.515s.91-2.514.68-4.113c-.23-1.6-.91-10.515-.91-10.515l.23-2.058.23-5.49c-.49-1.59-.45-4.46.8-6.29l2.06 4v4l-.68 6.28-.68 3.65.68 11.31.12 6.85V322.5s-1.83 3.317-2.63 1.03c-.8-2.285 0-7.885 0-7.885l.11-45.37v-91.87zm4.19-63.16l.1.127.04.165c.38 1.396.18 2.864-.55 4.025-.67 1.08-1.75 1.8-3.02 2.033l-.28.05-.24-.134c-1.51-.825-2.59-2.44-2.74-4.12-.14-1.466.42-2.79 1.57-3.732l.17-.147.23-.025c2.01-.253 3.5.304 4.72 1.76v-.003zm-5.84-44.345l.81-2.58.34 2.486c-.76 5.04-.37 8.53-.27 12.71.07 2.82.8 14.03-1.19 14.42-1.98.4-1.63-6.49-1.63-6.49.44-6.73-.22-13.63 1.94-20.53zm-34.8-31.965l-.15-.46.34-.345c.97-.974 3.09-.623 4.29-.803 1.71-.257 2.36-.528 2.77-1.72l-1.58-5.16.97-2h.79l1.54-.004c.67.34.85 1.058.99 1.58l.16.47-.21 1.013-.26 1.33c-.26 1.75-3.7 4.92 3.57 6.35l1.32-.33c1.68.25 3.57.53 4.45 2.48l.2.42-.28.38c-2.22 3.02-4.57 1.82-6.29.95-1.82-.92-2.91-1.37-4.3.17l-.37.35-2.16-.58c-2.25-.54-4.81-1.16-5.77-4.05zm7.75 33.073c-.71-.238-1.15-.596-1.34-1.097-.29-.753.13-1.465.46-2.033l.35-.732.19-.45.28-.11c1.67-.71 2.35.6 2.64 1.16l.24.4.34.79-.14.36c-.36.93-.91 2.33-3.01 1.73m3.06-12.29c-1.29.19-3.04.21-4.03-.74-.32-.31-.69-.85-.69-1.69 0-.07.02-.15.02-.22-.08-.29-.16-.57-.16-.82 0-1.42 1.27-2.08 2.1-2.5l1.2-.79.37-.28h.24c.9 0 1.46.65 1.87 1.13l.47.49.34.46.06 1.51c.12 1.11.29 2.8-1.77 3.47zm-17.41 64.18l-.23.69c-.18.99-.33 3.04-1.82 3.77-1.81.61-2.72-.17-3.55-1.01l-.91-.81-.31-.27-.04-.29c-.21-1.66 1.09-2.54 2.14-3.24l1.03-.79.2-.16 1.67-.15c1.72-.49 1.15.66 1.85 1.42l.36.38-.38.49zm-44.98-1.65c2.06-.4 3.67.62 4.12 2.61l.03.14-.02.15c-.21 1.46-1.12 1.94-2.01 2.77l-.7.42-.38-.05c-1.46-.21-1.74.65-3.11-1.21l-.78-.82-.04-.24c-.31-1.86 1.03-3.4 2.89-3.76zm52.29-18.46l-.57 1.37-1.71 2.18c-2.4 2.06-3.54 3.77-6.28 5.83-.74.56-.76.58-1.37 1.03 0 0-.68 3.31-2.97.46-2.28-2.86-13.59-15.77-13.59-15.77s-1.6 0-1.82-1.02c-.54-2.46-1.83-2.51-1.83-2.51-1.37.35-1.52.71-1.6.8l-4.91 5.49s-3.77 3.2-7.53 8.34c-1.71 2.33-3.43 4.57-3.43 4.57s-1.48.69-2.51 0c-1.03-.68-.69-.8-.69-.8l.22.57-5.91-7.8-2.53-2.53-4.35-4.06.12.35-2.51-3.89-2.2-2.4c-2.18-3.19-4.56-.35-4.79.11-.23.46-6.74 7.08-8.91 9.94s-5.48 9.03-6.97 7.88c-1.36-1.04 5.02-7.66 5.02-7.66s9.01-10.04 10.38-11.64c1.37-1.6 1.6.8 1.6.8l2.61-.55 1.06-1.17s1.66.55 1.69.58l1.83 3.08 2.28 2.53v.1l4.21 4.88 2.53 2.53 6.97 6.07h1.03l9.02-11.2 4.34-4.91 5.71-1.49s.69-.23 1.49 1.6l8.79 9.83s-.46 1.6 1.82 2.29c2.28.69 2.51 1.72 3.43 2.86.92 1.15 2.17 2.4 3.31 1.26 0 0 1.37-1.26 2.51-2.29.59-.59 5.48-6.86 5.48-6.86l.69-.45-.58.69 1.49-2.29 5.25-5.83s.69-1.26 1.95 0-4.57 6.86-4.57 6.86l-1.59 1.6-1.14.69zm-70.24-50.33l-.15.02-.15-.04c-1.9-.54-2.86-2.38-3.09-3.79l.15-.5.39-1.1c.17-.78.09-1.6 1.68-1.8l.26.01h1.59c.99.34 2.6 1.08 3.35 2.38l.1.18v.22c0 2.16-1.81 3.22-4.14 4.44v.01zm3.77 8.58l-1.18 2.3-.37.24c-1.22.76-2.23 1-3.48.23-1.02-.63-1.55-1.67-1.44-2.85l.01-.12.05-.12c.67-1.61 2.21-2.52 3.74-2.21 1.35.27 2.68 1.01 2.68 2.52h.01zm-7.04 13.85c.39-1.16 1.84-1.29 2.56-1.41.41-.06 4.16-.26 4.66.46.18.29 1.82.12 1.61.84l-1.48.76-.06.1c-1.34 2.09-3.23 1.34-4.49.84L260.8 77l-1.012-.25-.12-.848h-.002zm-1.52 7.66c.43-1.08 1.72-.42 2.84-.49 1.39-.08 5.82.32 6.57 1.67l.33.61-.56.42c-1.71.19-6.16-.31-7.17-.72l-1.29-.38-1.06-.27.32-.82zm1.88-58.64l.36-3.23c1.37-.55 1.17-1.29 1.55-.96.92.79 1.91.24 1.84 6.15v1.45l1.98 1.23-3.1-.12c-.9-.49-1.82-1.8-2.03-2.75l-.6-1.79zm-2.86 10.74l-.24-2.39c2.26-.91 4.9-.36 6.92.12 2.05.48 7.76-.6 7.04 1.55 0 0 .05 2.49-1.67 2.99-.78.5-1.55.72-6.32-1.31-1.67-.26-2.8.58-3.7.36l-2.02-1.31zm-13.55 86.16l.16.19.02.24c.13 1.74-.33 3.07-1.71 3.91-1.27.78-2.01.73-3.41-.14l-.19-.12-.1-.2c-1.09-2.18-.55-4.26.94-5.22 1.39-.89 2.76-.61 4.31 1.33zm-14.97-65.39c-.62 1.31-1.56 2.44-2.77 2.75l-.58.15c-1.34.27-2.76-1.18-3.32-1.76l-.38-.39-.05-.2c-.05-2.09 1.03-3.52 2.55-5.04l.27-.02.99-.02c.89-.08 2.51.5 3.18 2.04l-.01-.01v.02h-.01c.24.53.36 1.02.36 1.48 0 .36-.08.7-.23 1.02h.01zm-1.11 13.76c-.47.22-.77.37-.9.67l-.16.39-.41.08c-1.51.31-3.56-1.71-4.32-2.97l-.19-.31.11-.34c.45-1.35 1.52-3.04 3.06-3.36.71-.15 1.79-.07 2.91 1.18l.1.11.05.13c.78 1.95.43 4.12-.27 4.44zm-8.81-32.06l-.1-.3.13-.28c.71-1.57 2.59-.4 3.42-.35.97.07.63-.99.82-1.93.06-.62-1.15-1.76.29-4.39.84-1.55-1.92-1.77.94-3.27 1.16-.29 1.25.43 1.8 1l.41.43.05.21c.41 1.64-.26 2.55-.94 4.03-.48 1.04-1.06 2.51-.84 3.11.15.43.79.83 1.76 1.15l2.78.08c1.72-.11 3.14.26 4.91 2.34l.29.34-.15.42c-.37 1.13-1.14 1.7-2.26 1.96-.85.2-1.66-.03-2.28-.64-1.18-1.18-2.56-.67-4.34-.88-1.31-.16-3.94.83-6.71-3.03zm2.46 40.35l.8-.54c2.25.23 5.29-.88 6.81.14l.69 1.72s-2.98 2.44-1.56 2.67c2.58.42 3.16 2.86-2.33 1.9-.61-.1-5.25-1.1-5.25-2.05 0-.95 1.86-.92 1.86-.92l-1.02-2.91zm.99 14.23c.23.46-8.22 10.63-8.22 10.63-1.03 2.86-3.89 4.92-4.69 5.6-.8.69-1.02-.11-1.02-.11s5.71-7.88 6.73-9.03c1.02-1.14 6.51-8 6.51-8l1.37.46 1.03-.81 1.36.81 5.71 6.51h-.11l12.56 13.85-.02.02.1.07-.77 1.49s-.68-.22-.69-.23c-.1-.06-1.33-1.3-1.33-1.3-3.01-3.15-9.29-10.23-12.15-13.54h-.11l-5.72-6.59m83.74 137.38c-4.09-2.65-9.2-10.33-11.08-15.48l-.06-.17.02-.17c.67-7.13 1.84-13.6 6.36-19.26.51-1.88-.94-3.38-2.81-3.96-3.43.13-5.24-1.12-7.31 1.21-1.85 2.07 1.94 4.1-3.88 3.45-1.32.33-2.6 2.21-3.45 1.72-1.43-.83-4.01.83-4.42-.86-.36-1.5.21-6.11-.73-6.62-.68-.36-2.82-1.4-4.12-.93-1.77.97-2.96-.45-3.23 1.41-.87 5.82 1.83 6.68-1.51 7.98l-.66.5-.22-.07c-.85.53-3.17.14-3.97.42-.82.3-.9.79-2.11.55l-.47-.08-.35-1.2c-.53-1.85-.31-2.49-1.28-4.22-1.19-1.61-5.61-1.61-6.58.87 0 .37.1 4.85.1 4.85s1.62 3.13-1.61 3.67c-.95.16.35 1.41-.54 1.62-2.37.54-4.84 3.89-5.49 3.99-.64.11.46-3.32.37-3.5-.31-.59-1.52-1.22-2.55-1.25-3.68-.92-7.09 1.75-9.95 4.37-.15.2-.23.41-.23.62 0 .08.01.16.02.24.22.89 1.38 1.83 2.39 2.35 10.49.09 13.26 8.86 18.27 14.7l.76 1.99-.04.28c-1.9 3.04-.22 5.52-1.39 9.33l-.85 7.64s-4.11-2.57-7.55-6.34c-3-3.27-5.69-3.52-6.04-4.63-1.4-4.53-8.34-13.75-7.87-21.67.21-3.56-.76-7.72-.22-11.53 2.69-18.87 15.35-33.5 34.58-36.66 8.15-.74 13.73.58 20.15 2.8 2.84.98 4.78 1.27 7.97 2.05l5.39 3.45s1.9 1.39 3.88 2.58c3.44 2.06 7.7 8.77 9.59 12.72 0 9.7 3.66 10.89 4.2 18.76.36 5.26-2.29 12.47-4.31 16.93.08.34-.76-.01-.86 1.18-.17 2.03-.82 4.1-1.83 5.07-2.69 2.59-4.53-.65-4.53-.65v.01zm6.25 4.53c0 .06 1.44-2.53 1.94-2.26 4.95-6.79 7.54-17.91 7.54-27.6 0-7.41-1.29-10.46-3.66-16.92-4.61-8.67-9.65-13.84-17.86-18.84l-2.79-1.7c-.27-.07-7.69-3.07-7.69-3.07-8.51-2.32-18.06-5.66-27.26-2.37-13.92 3.69-29.18 14.53-32.76 29.86-5.23 15.49-2.41 34.97 7.98 47.44 2.14 3.03 5.28 5.76 8.62 7.12 3.45 1.4 5.06 3.78 5.06 3.78l.64 1.29c.38 3.22.78.61-.76 2.92l-1.04 4.55-1 .08c-10.54-6.4-26.29-7.87-33.08-.76-1.39.77-2.97.58-3.77 1.62-.19.19-3.67 4.85-4.42 4.96-.75.11-1.18-5.39-1.18-5.39 2.48-4.42.43-28.25.43-39.84 0-21.12-.33-34.5-.33-56.33 0-3.38-.22-7.04-.22-10.46 0 0 .2-11.91-.22-13.15-.4-1.17-.93-.88-1.73-2.27-.51-.88-.03-2.06.94-2.81l.22-.16h.27c1.38 0 5.53.21 6.42-1.95.57-2.85-2.39-4.79-3.77-4.91h-1.6l-.68-.8c.68-.69 1.8-1.45 2.22-1.92l.58-.58c-.12-.49-.41-3.1-.41-3.1-.36-1.35-.8-.64-.8-2.17 0-.46-.3-1.04-.22-1.53l.03-.2.11-.15c.67-.92 2.01-1.2 2.7-2.12.8-2.74 5.71-8.91 9.71-13.48l1.83-1.15c2.84.54 4.17 2.97 6.17 6.4l3.89 3.68.22.32-1.49 2.86c1.03 11.66-1.14 17.6 1.94 18.74l1.54.9-.16.59c-.34 1.16.44 3.67 1.7 5.37 1.38 1.83 2.75 0 8.57 1.37 1.19.28 1.26-3.2 1.03-5.6.79-.29-.74-.01-.45-1.14.34-1.37 4.74-1.23 4.72-1.59-.02-.34.87-1.27.19-2.87-.35-.82-3.56.7-2.97.12.4-.39 2.63-3.08 1.53-6.3l-.09-.09-.06-.11c-.09-.18-2.18-4.81-2.18-4.81 5.94-6.86 7.88-9.94 12.55-15.67l2.49-2.1h.29l3.17.85s9.36 7.61 9.71 11.43c.11 1.26.73 7.4 1.37 5.6l-2.74.69-1.14 2.05c-1.49 2.97-2.63 2.7-2.63 5.83 0 .39 1.52 2.78 1.6 3.2.63 1.34.94 2.35 1.94 3.43 1.53 1.68 2.71.73 2.71 3.17 0 .41-.09.87-.19 1.33.13.24.33 1.67.33 1.67 1.49 3.88 4.44 3.55 6 3.71l1.06-.15c2.39-.32 3.53-4.15 4.81-6.34.39-2.17.47-3.51 2.64-5.68.69-.69.23-5.26.23-7.89 0-1.47-1.7-1.93-2.51-3.43-.35-.92 2.01-3.79 2.52-4.34 2.04-2.2 3.43-3.77 5.37-6.05 1.65-1.95 3.2-4.04 3.2-4.04 2.74.04 3.88-1.96 5.7-1.9 3.08.09 5.65 5.84 8 8.57l-2.26-.14-.07.38c-.02.11-.03.21-.03.31 0 .82.63 1.4 1.6 2.22l2.96 2.67.36.35-.4.53c-2.27 2.35-2.16 2.35-1.82 4.63 0 0-2.14 9.7-2.18 10.21.18.33.46.42 1.49.36 1-.05 2.84-1.05 3.6.47l.12.25-.05.26c-.08.4 0 .8-.12 1.15-1.15 3.64 2.27 4.94 3.87 5.81 2.17-.57 6.97-1.48 7.77-4.22-.18-.46-1.48-1.89-1.48-2.28 0-1.55.7.1 1.63-.71.98-.85 1.59-1.43 1.59-2.24 0-.26-.07-.55-.21-.89l-.22-.51.41-.38c1.39-1.27 2.96-4.17 2.96-5.42 0-1-.28-1.9-.54-2.54-1.46-1.73-2.94-3.01-3.16-5.04l-.01-.41s4.5-7.32 9.06-9.61c2.16-1.08 0-4.57 5.71-5.71 0 0-.11-.99 1.14-1.14 1.94-.22 4.68 4.23 4.68 4.23l11.08 9.72c.36 1.71-.95 3.12-1.14 4.69-.28 2.3 0 7.89 3.89 8 0 0 5.94.23 5.71 1.6-.23 1.37-6.4 1.03-6.4 1.03l-2.3-2.5c-1.08-.3-3.98.14-4.81 2.22.96 3.36 2.26 4.25 5.62 4.62 0 0 .7.32.91.35.8.12.86.35 1.71.35l.1 1.28c.47 8.09 1.05 9.35.13 15.86l.57 9.71V211c.11 32.172 1.17 69.84-.07 101.01l-.05 1.302-1.14-.65c-6.45-3.7-7.97-12.91-10.15-19.16-2.91-8.36-3.06-12.493-13.08-12.82l-.96.5-4.57-2.765c-1.37-1.836-.76-2.3-.34-4.57.62-3.39.2-6.637-3.86-7.8-1.23-.52-3.07-1.42-4.48-1.64-3.11-.49-7.05-.52-8.69-4.16l-.58-7.165c1.51-3.99-7.22-8.95-8.6-10.49-2.5-2.79 3.09-7.42 3.09-7.42l1.42-.75zM204.47 402.48c-.324-1.996-.79-4.493-.44-6.5.656-3.733 3.52-8.086 3.777-15.28.05-1.532.3-3.05.23-3.8-.1-2.795-.97-3.01-1.37-4.63-.17-.68-.55-1.28-.53-1.98l-.025-3.945 1.54-.32c1.52 4.91 3.833 7.31 4.45 11.79.78 5.68-3.6 10.894-5.62 18.008-.7 1.93.44 6.41.44 6.41s-.52 4.92-1.75 3.51c-.46-.53-.46-1.75-.704-3.25h.006zm-8.26-361.81v-3.48l.54-.178c1.004-.336 1.675.5 2.038.95l.4.5c.37.738-.717 2.203-.717 2.203h-2.27zm-1.553 52.91c.16-.11.955-4.655 1.075-6.924.19-3.615 1.48-10.816 1.67-15.76.14-1.11.43-3.008.83-4.06.97-1.45.41-1.823.59 1.552-.37 1.16 0 1.6-.28 2.71-.12.88-.19 1.79-.19 2.71 0 1.66.14 3.37.29 5.05.14 1.68.23 3.93-.31 5.4-1.67 4.56 1.21 7.5 0 9.43l-1.79 2.03-1.91-2.15zm6.295 27.38l-.21-.03-1.34-.39c-1.26-.3-2.84-.67-3.23-2.46-.44-1.46-.06-2.823 1.03-3.75 1.27-1.07 3.24-1.33 4.69-.62 1.17.58 1.8 1.72 1.73 3.12l-.02.258-.16.2c-.17.2-.21.65-.25 1.1-.08.9-.23 2.57-2.278 2.57l.004-.008zM316.72 88.82c.02-.12.46-1.572.34-1.813-.253-.536-.782-1.002-1.17-1.157l-2.54-.005c-1.623.066-.787-.402-2.163-1.01l-.508-.228.04-.563c.1-1.198.17-2.198.17-2.767 0-.334 1.46-2.33 1.46-2.33.39-2.83-1.3-2.638-2.63-2.75 0 0-2.03-.51-2.03-1.995 0-1.486 2.17-4.915 2.74-6.857.76-2.582 2.23-3.14 2.23-4.8 0-1.31-.63-2.49-2.17-3.667l-.35-.267.04-.45c.14-1.43 1.12-2.56 1.86-3.45.5-.59.93-1.17 1.18-1.8l-.28-1.5c-.4-2.41-.33-4.59-2.2-5.6l-1.33-.93 6.35-3.38c1.84-1.65 1.88-1.1 2.9-3.52.31-.67.45-1.3.45-1.91 0-2.51-3.4-5.61-5.88-7.72 0 0-3.7-.98-3.86-1.77l-.09-.49.4-.3c.6-.45.79-1.81.79-2.7 0-1.01-.25-2.05-.4-2.7-2.06-2.51-4.67-3.97-8.31-4.68-4.6.28-6.89 1.64-7.24 4.23-1 2.47-.47 3.2-.47 4.05 0 2.47 1.45 1.6-.34 2.84-1.85 1.28-5.44-.95-5.52 1.5-.04.31-.05.6-.05.89 0 2.77-3.88 8.67 3.55 12.2.6 1.11 1.42 1.27 2.83 1.45l2.27.53s4 .98 2.67 2.44c-1.32 1.46-4.76 0-4.76 0-1.94 1.17-2.23.72-2.23 3.17 0 .91.16 1.85.49 2.74.12.59.52.86 1.16 1.27.64.41 3.48 2.51 3.48 3.67 0 .31-1.87.17-2.02.56l-.09.24-.21.14c-2.67 1.84-2.82 5.06-2.82 7.81v.81l.84 1.27c.52.89 5.73 2.75 3.89 4.26l-2.09.2-.82.7c-1.46 1.26-.96.75-.96 1.97 0 .08.01.16.01.25.81 2.71 4.38.88 4.38 2.18 0 1.8-4.01.13-4.23.93l.13 2.12 1.32 2.78c-1.24.82-4.51.65-5.58.83-1.15.19-2.06.46-2.88 1.29l.16.31c.36.72-.09 2.13.62 2.6 3.84.93 5.95.27 7.94.14 1.35-.09-.38-1.9 1.58-3.18 2.17-1.41 7.05-.89 9.39.93 0 0 .61 2.32.63 2.37l4 .67c3.53.46 3.17.4 5.82 0zm-16.88-65.452c.48-.963 1.56-1.495 3.022-1.495l.76.04.537 1.68c.08 1.365.26 5.03.39 6.354l-1.88-.185c-.92-.924-3.43-4.097-2.84-6.383zm-5.2 14.772l-.53-.794-.08-5.005.81-.16c4.822.66 11.275 1.51 15.533 2.91l1.72 2.25-3.44 2.91c0 1.22-4.377-.66-7.94-2.52-3.04-1.59-3.895.76-6.08.4zm10.973 42.74c-.93.53-6-.517-6-.517v-2.27l1.48-.34 3.324.625c0 .058 2.115 1.985 1.19 2.514zm1.32-19.45c-.19 1.167-1.56 2.56-3.24 3.677l-.307.204-.354-.11c-2.435-.7-3.943-1.92-4.346-3.52l-.062-.25.1-.23c.653-1.63 2.635-2.91 4.416-2.83 1.42.06 2.79.63 3.264 2.14l.53.93zm-1.58-6.85l-.136.053h-.143c-2.287 0-4.693-1.34-4.786-3.81-.348-1.25.555-2.08 1.224-2.68l.776-.82.296-.345.28-.04c1.962-.243 3.78 1.178 4.33 3.386l.264.267c.3 2.4-.274 3.32-2.11 4.01z"/> | ||
17 | <path d="M346.262 512.832c0-12.343-.68-25.316-1.252-35.294.04-6.272 1.02-13.666 1.252-20.442-.415-3.375 2.988-9.74-.1-12.452-10.788 1.265-25.06 1.237-32.867 1.87-10.106 1.324-16.487 4.398-21.476 7.206-4.63 2.604-7.6 4.485-9.61 7.01-.62.776-6.44-8.533-11.71-8.954-9.7-1.86-2.02-1.62-21.44-1.665-2.21 0-3.71-.97-6.4-1.36-10.39-1.49-13.15-3.18-18.37-4.78-4.38-1.34-8.13-1.7-9.43-1.84-1.71-.18-.54 8 .82 13.01.05 5.15-.61 10.6.62 14.94-1.11 1.99-1.45 22.2-.05 26.59-1.4 6.76-.79 18.95-.92 28.34-.69 4.58-2.72 7.46-4.08 10.66-.01 1.58.48 2.67.37 3.99-.12 1.37-.96 2.12.9 3.61 2.39.85 5.3 1.33 7.76 2.11 15.52 5.62 32.6 8.46 49.06 6.44 6.46-1.44 12.24 5.79 19.95 4.44 17.35-5.49 34.02-3.57 49.72-6.07 4.53-3.37 7.42-.53 10.79-4.34-1.36-12.31-.97-26.42-3.57-32.98zm-124.902-12.27c.745-9.784-.934-19.777-.046-19.743l-.045-5.05c-.98-1.41-.4-15.45-1.47-18.2-.14-.36 0-.76.01-1.14 0-.29 0-.56.01-.84-.29-1.17-.01-1.98-.76-3.03-.09-.13.22-.81.23-.96l1.12-.09c.49 1.23 1.81 2.39 1.81 3.75 0 .04-.01.07-.01.1.14.54.11 1.26.07 1.8-.09 1.49.26 1.75.26 2.85 0 .38.57 3.37.57 9.17.16 1.6.69 2.75.62 2.89l-.79 3.94.13 3.95s-.44 22.5-1.14 22.02c0 0-.49.13-.62-1.45zm29.504 43.867l-7.803-.18-8.94-2.9c-5.96-1.14-5.22-2.28-8.81-5.53l-2.63-.14-.09-1.93c2.55-7.11 2.52-10.99 3.42-18.25 2.59-20.75 3.16-39.4.46-58.98l-.24-1.6s.14-.68.88-1.31 2.63-.5 2.63-.5c8.41 3.12 7.37 4.87 26.14 3.92l12.33 1.76c2.28.96 4.1.73 5.11 1.64 1.02.91 3.19 3.82 1.82 4.1-.83.17-4.94-2.17-4.94-2.17-2.18-.31-10.81-1.04-12.57.45 0 .04 0 .08-.01.12-.09 2.45 7.47 1.31 12.01 2.96 0 0 10.34 3.64 10.23 4.43-.11.79-20.33-2.99-20.33-2.99-.98-.16-1.29 0-1.36.06 0 0-.04.09-.1.3-.08.18-.59.36-.59.52 0 .67 1.6 1.1 1.65 1.14 3.47 1.13 6.38 1.7 10.06 2.5l5.29.96s3.07 1.03 2.79 1.54c-.28.51-18.53-1.56-19.2-1.59-.75.67-1.23.56-1.23 1.21 0 .17.03.36.08.54.13.16.79.68.98.92 1.98.37 4.56-.21 6.71.17 3.18.57 14.49 2.27 14.49 3.13 0 .85-3.86.57-3.86.57l-5.57.28c-4.55-.46-8.3-1.37-12.38-.35-.04.14-.09.28-.09.41 0 .37.13.67.27.89.34.52.95.88 1.55.88l3.03.03c5.29 1.76 8.33.14 12.66 2.05l2.45 1.58-1.02 1.08c.31-.06-9.09-.79-10.4-1.08-3.96-.87-8.86-.74-8.92 1.31 1.14 1.54 5.55.79 8.58 1.37 2.39.46 7.27 2.3 9.49 3.13l5.84.72-.16 1.53c-2.66.35-6.74-.98-9.37-1.18-3.81-.29-14.37-1.82-14.77-.51-.57 1.82 5.12 1.63 7.61 1.76 1.27.06.94-.09 1.82.34l3.18.91s10.34 1.53 10.34 2.5-5.68.28-5.68.28c-2.95.89-7.32.37-9.83.06-2.95-.37-7.38-.34-7.89.97-.15.39 1.16 1.63 2.1 1.64 3.18.53 2.73-.21 6.37-.27l10.8 1.88s3.87.05 3.47.74c-.39.68-9.21.41-12.1.45-6.93.11-10.57-.34-11.02 1.99-.09.78 1.58 1.55 1.99 1.81.31.02 22.14.77 21.99 2.85-.14 2.08-11.53 0-11.53 0-3.75-.06-9.54.09-13.01.57-1.31 1.93.06 2.9.06 2.9 1.59.51 17.72.73 19.82.57 1.26-.09 4.13.66 5.35.91 0 0 1.05.08 1.32.84s-1.49.7-1.49.7c-1.25-.65-3.68-.62-5.45-.62h-.13c-2.06 0-18.82-.56-19.77.49-.33.36-.49.86-.49 1.5v.17c.03 2.36 4.9 2.25 7.1 2.09 0 0 3.07-.01 2.97-.03l14.73.43.07 1.57-12.04-.04c-4.54-.05-11.08.58-11.08.62 0 .25-2.16 1.02-1.93 2.61.23 1.59 2.21 1.29 2.73 1.31 3.5-.64 6.76-.82 10-.74 0 0 10.89.52 11.13 1.53.24 1.01-14.32 1.42-18.35 1.82-4.76.47-5.95-.72-6.54 2.47l.9.9c.6 0 26.03-.59 26.37 1.34.27 1.55-20.48 1.05-21.93.96-2.24-.14-4.72.12-4.78 1.94.3 1.21 1.19 1.85 1.65 1.94 0 0 19.78-1.25 20-.51.23.74-10.28 1.88-10.28 1.88-2.5.85-5.33.69-8.18.8-3.55.14-3.01 1.08-3.24 1.54 0 .48 1.25 1.65 1.25 1.65l2.05.45 10.29-.46h8.13c.65-.65 6.25-.34 6.37.29.12.63-1.01 1.12-1.82 1.25-3.7-.35-8.83.97-14.4 1.06-5.57.09-14.47-1.71-14.47-1.71zm90.857-5.82l-1.82 2.27c-1.97.39-.61 2.27-2.89 2.76-21.78-.09-30.08-1.45-44.63 2.74l-.14.04-1.99.02c-2.11-.18.44-2.81-.79-4.61l-.08-8.16-.25-.33.03-.3c.53-6.85.18-7.82.18-14.95 0-2.39-.29-4.75-.3-7.11 0 0 .53-16.54.7-14.39l-.61-34.71 1.32-1.58c.87.02 3.73-.44 8.73-3.95 8.44-2.1 6.93-1.23 10.08-3.07 1.3.88 21.44-3.17 24.03-1.98 1.12.51.7.86 1.1 2.09l.06.14-.01.15c.32 4.03.52 8.91.74 12.61.92 15.4.49 29.75 2.15 44.88l2.28 15.83c.53 3.55 1.38 4.03 1.66 6.86l.55 4.21-.04.48zm-.95-71.59c-.32.94.77 16.01-.09 16.1-.86.09-1.55-4.01-1.44-3.47l-.38-14.76c-.01-.03-.28-1.45-.29-1.48h-.01c0-.05 0-.13-.01-.19-.15-.58.03-.37.03-.9 0-.11.04-.21.04-.32-.13-1.02-.33-1.99-.33-3.06 0-2.08-.87-4.84.1-6.42l1.73-.96 1.73.57c.46.92-.25 2.94-.25 3.74 0 1.22-.45 10.07-.8 11.1zm-207.62-57.8c-1.34-.15-2.39-.45-1.79-1.35.6-.9 10.62 0 10.62 0 4.94 3.29 10.32 4.18 10.32 4.18s3.14 1.49 12.11 10.62c9.88 10.05 8.08 33.66 8.08 33.66s.15 4.49-.6 11.22c-.74 6.73 4.94 6.28 4.94 6.28 4.49 4.19 5.98 2.54 5.98 2.54s1.5 2.09 2.84 1.49c1.35-.6-.15-2.84-.59-4.19-.45-1.35-1.79-30.82-1.79-30.82.45-9.28-5.38-22.9-5.38-22.9-2.84-10.47-18.69-19.15-20.33-19.6-1.65-.45-8.37-3.6-8.37-3.6.45-1.05-2.24-3.29-2.24-3.29s8.67-1.05 13.31-1.5c4.64-.45 23.03 2.39 22.88-.9-.38-9.54-.2-19.41-1.05-28.73-.15-1.65.78-2.34.9-5.09.21-4.93-.3-13.16-.3-18.55 0-17.36.6-27.09.44-52.18-.1-16.27-.07-25.3-.14-41.04l-.45-7.03c.45-1.95 2.1-4.34 4.2-5.38.49-.16.99-.62 1.3-1.35.19-.47.29-1.01.29-1.55 0-.66-.14-1.32-.42-1.85-1.01-1.59-.88-3.35-3.27-3.2-1.5.09-2.04-.77-2.04-.77 3.23-1.03 2.84-3.26 3.69-4.2.86-.94 1.44-.1 1.44-1.12v-.17l.07-.16c.54-1.26.72-2.9.43-4.07-1.1-4.41-1.49-4.34-2.87-7.26l-.23-.27.05-.35c.18-1.7.61-4.27 1.45-5.59l.64-1.02c.35-1.32.5-2.55.5-3.71 0-4.01-3.05-5.88-5.12-9.47 0 0-2.32-3.05-2.63-3.61-1.66-.6-2.16-.63-2.99-.15-1.3.75-1.27 2.94-2.45 5.01-1.58 2.77-2.03 3.67-3.07 6.51-.21 1.4-.45 1.45-.45 2.84 0 2.47.51 3.57.51 3.57l.08.09c.63.82 1.66 3.61 1.66 4.27 0 1.34-2.39 7.18-2.39 7.18-.45 1.44-.9 1.27-.9 2.69 0 1.07 1.65 2.69 2.43 3.51l-.89 1.25-10.36-7.76c-5.08-6.58-9.87-13.92-10.77-26.01-.23-.72-.37-1.38-.37-1.92 0-1.27.51-2.1 1.04-2.62 1.8-1.74 3.41-1.84 5.16-1.17 2.04-.62 2.42-2.58 2.42-4.41-.03-.73-.21-1.25-.53-1.54-.61-.55-1.65-.95-2.93-.79-1.18.14-2.86.63-3.89.3v-3.74l2.4-4.34c0-.6-.02-2.05-.3-2.99-.44-1.5-.25-2.39-1.49-4.49-1.23-2.07 1.8-4.79 1.5-11.07-.06-1.23-1.49-3.29-2.99-5.54.13-.59-3.11-3.53-3.11-4.2 0-3.07.46-4.69-1.13-6.42-.34-.06-1.39-.22-2.04.16 0 0-.09.28-.52.47-.71 1.3-.54 4.72-1.57 5.96-2.05 2.44-4.49 7.48-3.89 9.87.22.88 1.95 3.89 1.95 3.89 1.19 1.5 2.17 1.99 1.94 3.14-.15.75-1.43.81-3.29 1.79-1.39 1.66-3.24 5.31-3.14 7.33.45 8.53 4.91 7.54 5.5 9.58l-.41.89s-3 .12-3.36.12c-2.02 1.15-8.07-.74-8.07 1 0 .39.78 4.79 2.46 6.2.9.75 7.03.3 7.03.3l1.8 1.49c-.15 4.63.66 5.57-.45 9.72-.49 1.86-.62 5.66-.74 7.33-.49 1.33-1.34.85-2.09 2.1-2.84 9.72-13.47 15.33-19.26 11.98l-1.22.14s.9-2.55.6-3.15l-.89-2.85c.42-.73.89-2.1.89-4.1.01-1.13-2.81-3.84-3.13-4.73-.75-2.1 2.24-1.59 2.24-4.49 0-3.93-4.74-9.69-5.98-13.47-1.36-1.61-1.19-3.74-3.9-3.19l-1.39 1.43c-1.88 3.7-4.46 7.55-5.61 11.14-.28.78-.4 1.53-.4 2.27 0 1.81 2.34 3.33 3.09 5.11 0 0 .6 1.05-1.79 5.24-.28.48-1.2 2.54-.45 4.81.29 1.36.97 1.64 1.84 2.57 1.02 1.1 2.08 2.23 2.32 4l.03.23-.09.2c-.63 1.55-2.52 2.29-5.04 1.96-1.49.29-2.69-.17-3.55 1.56l-.37.72c-.04.27-.07.52-.07.76 0 2.29-1.27 4.39 1.8 5.48 1.61.58 2.84-1.79 4.19.3l.9 8.08-1.19 7.48c.89 4.19.58 6.57.58 10.06 0 1.34-.52 10.09-.74 11.34 0 32.62.44 58.37.44 96.95 0 6.97 1.32 21.32 1.35 28.28 1.94 4.94 6.7.89 9.87 1.8 3.14.9 12.83.19 13.92.11 2.49-.2 6.02.15 7.19 3.64l.26.76-1.92-.01s-2.69-.15-3.89-.15c-1.19 0-10.46 2.39-10.46 2.39s-11.81 2.24-13.91 3.89c-2.17 1.7 2.84 4.19 4.63 2.69 1.8-1.49 13.31-4.63 20.49-5.23 7.18-.6 13.31 1.19 17.79 2.69 4.49 1.49 17.65 6.28 18.09 7.48.45 1.2 1.95 2.99 1.95 2.99 1.05.15 3.29 2.09 3.29 2.69 0 .6 4.64 8.38 5.68 8.97 1.05.6 1.65 2.55 1.65 2.55l2.39 9.73.45 22.59.15 5.08s.3 6.43.15 7.78-2.84.3-2.84.3.15-1.35-.3-1.95c-.44-.6-.44-3.74-.44-3.74s.15-19.3-.15-29.92c-.3-10.62-11.06-19.9-11.06-19.9s-1.35-.15-1.35-1.65-13.453-9.58-22.723-11.97c-9.27-2.39-18.83.45-18.83.45l-5.23.45s-3.59 2.09-7.62 2.54c-6.55.73-2.24 2.4-1.05 4.34 1.2 1.95 5.23.3 8.075-1.05 2.84-1.35 12.41-1.65 12.41-1.65.3 0 2.54 1.95-.3 1.95-4.507 0-6.43.6-6.43.6-1.94 0-4.78 1.5-4.78 1.5s-2.54.9-5.087.75c-2.54-.15-1.65 3.59-1.65 3.59-1.2 0-6.88-10.77-6.88-10.77-1.944-2.25-3.14-3.59-5.533-6.59L96.75 393c-10.686-17.463-12.3-27.99-20.34-55.96-5.39-24.39-6.24-47.082-5.04-64.29l.556-9.92c1.6-13.27 3.734-24.09 7.322-36.96 8.09-31.11 24.67-59.55 47.696-86.03 10.013-10.62 15.712-15.51 25.71-23.94 1.306-1.093 3.665-2.06 5.834-3.59.93-.65 1.48-1.78 2.46-2.45 5.91-4.03 12.245-8.03 12.245-8.03 3.393-1.64 13.26-8.97 12.214-10.02-1.2-1.642-11.35 5.47-16.15 8.08-5.385 4.19-7.765 5.4-12.41 8.83-11.96 8.826-23.177 17.805-32.746 29.476-9.88 10.44-18.05 22.063-25.56 34.41-.78 1.29-1.18 2.877-1.94 4.19-.76 1.317-2.45 2.01-3.18 3.35-13.31 24.36-22.15 52.77-25.97 86.87-.67 5.775-1.05 9.55-1.05 14.96 0 9.55-.4 19.33.05 29.03.12 2.497 1.5 5.896 1.75 8.376.23 2.26-.67 3.6-.3 5.84.02 0 3.59 13.62 3.59 13.62 2.54 12.72 5.38 16.904 8.07 24.684 4.41 12.75 12.06 28.106 19.1 39.85l8.06 13.87c.02 0 8.71 10.54 8.71 10.54 5.77 7.23 15.31 18.43 22.45 24.467 5.53 6.14 8.81 8.16 15.25 12.27 4.48 2.86 7.47 6.14 12.71 8.98 1.94 1.05 1.9-1.85 2.99.45.96 2.04 6.22 5.38 13.6 8.08 2.1.95 1.98 2.15 4.97 1.52.84-.822.02-2.072-1.15-3.12-2.14-1.54-3.48-1.92-5.88-2.84-3.29-1.944-10.22-2.1-9.9-8.125 1.49-28.576-1.36-33.39-5.09-42.043-7.92-12.72-15.99-14.664-24.82-17.206-1.94-.15-5.98-.9-7.32-1.05zm-28.12-219.8l.91-.9 1.96 2.05c-.08.16-.04.3.16.71l.22 1.52-.53 1.4s-2.24.3-3.29-.6c-1.04-.9.59-4.19.59-4.19zm3.75 21.99c-.73.09-1.69-1.25-2.09-1.65-.71-.69-.06-4.65-.06-4.65l2.16-.74c2.21-.26 3.1.47 3.59 2.54l.01 1.47-.3.75c-.27.75-1.47 2.8-3.29 2.26zm70.57-18.85l1.5-.3c.55 1.41 1.44 4.91 1.05 6.73l-2.48 1.91-.46.12c-1.11.29-1.77-.43-2.3-1.01l-.38-.42-.06-.22c2.84-2.19.85-6.15 3.14-6.83zm-1.79 21.69c.49-2.26 2.75-4.5 4.19-3.59 2.4 1.49 2.81 5.12 2.81 5.12l-1.03.99c-1.09 1.09-2.92 2.92-4.76 1.24l-.22-.21-.37-1.46-.6-2.1zm-11.66 19l2.7-.17 2.09 3.76s-.59 60.15.75 65.68c1.35 5.53-.82 24.8-.3 53.71l-.3 23.04-1.8.1-.35.03c-7.18.6-14.88.31-16.08 1.66l-3.74-.6-1.58-1.98c-1.06-22.63.24-49.95-.06-72.54-.2-15.67.6-26.19.15-41.9l1.68-11.23.1-.19c5.56-9.84 12.27-15.21 16.76-19.4zm-21.6-90.67l1.63.69.68 3.8c-1.19 2.24-1.73 3.24-2.39 3.14-1.94-.3-1.47-2.02-1.94-2.85l.59-1.5c-.02-1-.06-2.51 1.44-3.29zm-1.3 20.78c0-.96.44-1.73 1.27-2.18 1.46-.81 4-.35 5.03.9.73 1.29.76 2.96.16 4.19-.4.81-1.05 1.33-1.84 1.5-.97.8-2.1.95-3.06.33-.97-.63-1.56-1.89-1.56-3.19 0-.28.05-.56.11-.84-.06-.25-.09-.5-.09-.73zm-3.86 43.56l2.55-5.84.6-16.21 1.2-.7s.9-1.2 2.39-.9c0 0 .6.3 0 2.99 0 0 0 7.33-.44 8.97-.45 1.65-5.08 14.51-7.62 17.06-2.54 2.54-7.62 8.83-18.09 11.52 0 0-1.04-1.05-.89 2.24 0 0-11.96.6-12.86 0-.89-.6.75-.9 5.24-1.8 2.24-.45 2.4-.75 10.47-3 8.08-2.25 17.2-11.22 17.5-14.36zm-3.88 13.31c4.16-4.16 5.95-5.28 8.98-9.73l1.35-1.65 2.09.15 1.35 4.49 3.44 3.59c3.66 3.48 2.87 3.18 6.13 6.71l.17.18-.01 3.27-5.23 6.88c-1.19.89-2.01-.36-3.43 1.94-1 1.98-.9 2.69-1.95 4.49-1.16 1.98-1.23.29-2.01 2.34l-.17.45-.46.04c-2.5.26-4.27-.45-5.54-2.22-1.54-3.12-.59-3.62-3.17-6.01-3.28-3.04-5.83-3-7.78-6.29l-.98-3.17 7.26-5.5zm41.03 8.91s-.45-2.23.69-1.89c1.14.34 4.49-.9 4.49-.9s1.2-.01 1.65 1.04c.45 1.05-1.04 1.05-1.04 1.05zm.69 122.75l.3 10.32s1.5 1.34.75 2.09c-1.52 1.52-.56 21.34-.56 21.34l-.41.2c-3.82 1.86-6.2-.45-10.93.08-1.98.22-4.04 0-6.03-.09-.63 0-7.32.3-7.32.3h-5.98l-3.44-.15-5.25.12-22.25 1.07c-14.05.3-8.52-2.99-8.52-2.99l30.65.15c2.93-.52 2.33-4.97 2.54-7.94l-.6-3.14v-30.52s.75-33.52-.59-35.76l.45-8.23-.15-39.5c.1-.23.3-4.91.75-5.09.75-.3 1.5.75 1.64-.45.24-1.88 3.6-6.58 3.74-4.19.15 2.54-3.14 5.23-3.14 5.23s.3 25.14-1.04 32.02c-.45 2.35.75 6.73.75 6.73l.6 43.69v25.59-.3s-.33 16.28-.28 17.56c.13 3.37.15 2.97 1.78 3.54h.15l7.78.3c.02 0 4.64.45 4.64.45-1.01.09 1.07-.84 3.22-.74 3.68 0 13.29-.02 13.67-.02 1.79-1.01.48-13.6.53-15.53.03-1.54-.08-18.58.82-20.97l-.45-15.26v-69.4s.15-20.05-.75-23.49c-.9-3.45-.3-7.34 2.24-7.19l1.2 6.88-.3 19.3s1.65 3.59 1.8 5.99c.15 2.39-2.39 3.29-2.39 3.29l1.05 5.68s-1.05 28.88.15 30.52c1.19 1.64.59 34.86-.15 35.91-.75 1.04.74 7.03.59 8.53-.15 1.5-1.19 4.04-1.19 4.04zm-41.89-106.21s-5.42-4.52-3.29-4.34c1.8.15 4.79 4.19 4.79 4.19l3.29 3.29s1.5 2.09 0 2.39c-2.2.44-4.78-5.54-4.78-5.54zm1.8-67.48l10.17-.3s2.99-.15 3.29.6c.3.75-5.53 1.19-5.53 1.19l-9.12.6s-2.09-1.8 1.2-2.1zm33.34 47.13c.9.3 2.1.9-2.09 2.09-4.18 1.19-7.92 5.83-9.12 4.93-1.19-.9 2.54-2.99 5.23-4.34 2.69-1.35.9-3.14.9-3.14l-7.62-6.74s-8.88-11.53-10.49-14.91c-1.02-2.15-1.5-6.22-.87-6.49 1.05-.45 2.99 5.53 4.64 9.72l4 4.62 3.93 5.55c7.93 9.87 10.23 8.25 11.52 8.68zm-60.84 7.63c-3.29-.3-2.09 7.48-2.09 7.48s.75 9.42.75 10.32c0 .89-.59 8.82-.59 8.82s.45 3.29 0 3.59c-.45.3.15 8.98.15 8.98-.9 1.19.15 9.42.15 9.42-.9 1.79-.3 20.5-.3 20.5s1.2.89.6 1.49c-1.35 1.35-.44 8.83-.44 8.83-1.19 2.09.45 7.48.45 7.48v21.09l-.15 26.48c.9 2.69-.29 8.68-.29 8.68s2.1 6.58-.89 6.58-1.19-4.94-1.19-4.94l-.15-21.85-.3-33.97-.15-32.17s.75-22.59-.45-24.54c-1.19-1.95.6-3.74.6-3.74s0-26.34.6-29.33c.6-2.99 2.39-.3 2.39-.3l10.77.3 3.29 2.69 2.69.15c1.9.97 5.2 3.31 5.23 4.04.04.74-4.18-2.1-2.69 1.04 7.63 5.69 5.23 9.63 8.23 14.96l.74 10.67v.13c-.81 17.14-.52 33.93-.21 51.7.3 17.36-1.13 33.99-.2 53.6v.14l-.48 7.19-17.8 1.94s-3.58-1.58-4.4-2.58c-.82-1.01.67-7.29.37-12.98-.2-3.9.56-8.39.3-12.42-1.34-27.08.09-52.09-.45-74.66-.28-11.69-.64-26.8-.57-38.92v-.29l.17-.22c.8-1 1.9-2.32 3.4-3.82 0 0 .45-1.5-4.04-1.35 0 0 .3 0-2.99-.3zm55.77 235.06l-.83.5-2.45-.95c-20.33-13.17-49.79-45.94-48.74-48.63 1.05-2.69 8.52-4.94 8.52-4.94 1.65.3 3.44.3 5.24 0 3.13-.52 4.96.65 4.96.65l8.05 1.06c9.13 2.34 12.01 3.51 18.85 11.17 8.82 9.88 6.58 31.13 6.43 41.15zM384.04 96.75c2.803 1.73 11.65 5.923 12.692 7.17 2.41 1.4 10.64 7.27 19.28 13.016 7.42 6.67 17.48 17.615 28.94 28.804 23.53 25.95 39.21 55.553 47.33 86.573 4.2 12.533 4.43 23.904 6.03 37.134l.89 8.5c1.2 17.157-.63 36.533-6.04 60.85-8.07 27.89-15.87 47.874-26.16 65.77l-.79 1.88c-.11 1.923-4.59-1.19-6.13-2l-.84-.465c-3.53-2.04-7.46-3.4-11.26-4.72l-6.302-1.96v-1.01c-.575-1.44 5.23-3.03 7.72-2.82 1.084.09 2.11.17 2.886.01 3.996.22 11.98-1.43 14.692-1.37 5.774.11 4.77.29 5.926-3.18.03-6.94-1-15.55-1-22.49 0-36.707.45-47.183-.442-76.296-.03-3.73-.345-5.22-.29-6.94-.065-5.637.686-29.87.29-30.81-2.024-4.77-1.46-5.795 0-9.835l1.01-.58.075-.14c1.2-1.01 2.88-1.61 4.495-2.19 3.077-1.09 4.75-1.28 4.75-3.56 0-.24 0-5.02-2.65-5.3-2.558-.38-6.11-.16-6.75-1.71l-.088-.2.03-.22c.24-1.76-.36-3.48 2.162-5.25.944-.66 2.425-1.77 2.72-3.13.232-.58.34-1.13.34-1.68 0-2.67-5.49-6-6.015-6.77-.53-.77 1.72-4.41 1.72-4.41.75-1.78 1.42-3.22 1.53-5.16.04-.73-.12-1.48-.4-2.25-1.15-3.58-6.43-5.46-8.21-10.5l-1.4-1.43c-1.61-.37-1.89.33-3.25 1.93-.94 4.64-3.31 7.83-3.31 11.74 0 2.9 1.8 4.07 2.93 6.72l.85 3.03-3.21 2.56c-1.41 1.55-1.76 3.48-1.76 4.88 0 .6.19 1.25.61 1.98l.29.54c.38.68 1.12 1.88 1.12 2.8 0 .16.27.98-.31 1.13-.58.15-2.6-.57-2.6-.57l-5.95-4.22c-3.15-7.36-4.44-4.17-8.23-11.08-.12-1.67-3.5-9.28-3.69-11.74-.33-4.27-2.74-10.42.47-14.39 0 0 4.04-.56 5.4-.46 2.19.17 2.43-.47 3.31-.96.17-.46.66-.61.66-1 0-1.74-.85-4.4-3.12-4.93-4.63 1.1-5.67-1.07-5.95-1.74-.28-.66 1.33-2.75 1.33-2.75.59-2.03-1.61-.49-1.61-2.46 0-2.02 1.41-3.55.95-5.77-1.51-1.42-3.12-3.27-3.12-5.31 0-1.18 1.85-3.18 1.85-3.18l.08-.11c-.13-.49.34-2.05.34-2.96 0-1.89-1.16-4.09-3.21-6.53-1.03-1.23-4.35-2.74-4.41-4.54-.42-.18-1.14-.48-1.14-.48-.65-.38-1.67-.33-2.01-.27-3.13 2.12 1.14 1.52-3.88 9.09-.37.56-.13 2.92 0 3.5.79 1.39 1.88 5.08 2.27 6.25.57 1.71-2.12.64-3.36 2.7-1.25 2.1-2.45 4.12-2.45 6.38 0 .98.23 2.01.77 3.11l3.99 4.75-.91.29c-1.03.34-2.26.18-3.45.04-1.27-.17-5.33-.71-5.94-.17-.32.28-.5.8-.53 1.53 0 .83 1.18 1.32 2.24 2.2.85 3.03 2.55 2.49 3.66 2.82 2.3 1.06 4.56.17 6.37 1.91.54.52.29.91.29 2.18 0 .54 0 3.98-1.23 6.35 0 10.45-.52 14.46-6.15 19.66 0 0-.43 3.91-2.89 5.35-2.45 1.44-4.33 4.19-4.33 4.19-.29.29-3.47-.46-4.05.44-1.3 2.02-2.95 5.54-4.19 1.59 0 0 1.62-1.71 1.59-1.88-.14-7.67-.46-6.45-1.14-7.16-.79-.83-3.95-2.74-3.95-4.08 0-.66.47-1.34.47-1.34l1.16-3.47c1.98-1.37 1.88-2.02 2.17-5.35.09-1.01-.43-4.19-.14-4.91-3.32-3.33-3.84-4.14-4.48-7.23-.48-2.32-.42-5.33-1.73-6.07-.83-.48-3.08-.44-4.75.16l-2.1 3.81c-2.08 3.58-3.94 7.65-3.94 11.65 0 1.16.15 2.38.51 3.7l.64 1.02c.85 1.32 2.85 3.68 2.85 4.12 0 .43-1.3.72-1.3.72l-1.45 3.61c-2.46 2.17-3.47 2.32-4.48 7.81-.22 1.18 1.84 2.35 2.38 3.61l.07.16v.17c0 1.01 1.1 1.59 1.59 2.76.29.69-.66 1.85-.14 3.15 0 0 1.01 1.3 1.01 1.88 0 .58-2.39 1.42-3.9 1.45-1.52.02-2.51-.52-3.53 1.07-.28.53-.42 1.19-.42 1.85 0 .53.09 1.07.29 1.54.3.73 1.73 2.78 2.22 2.93 4.01 0 3.99-.96 5.85 2.04l.13.2v.24c-.07 15.7.23 33.96-.2 50.18-.47 18.22-.14 36.43-.14 54.39 0 15.75 1.59 29.07.87 43.97.41.33 3.69 2.95 4.01 3.21h27.94s2.74.26 2.74 1.56-2.14 1.06-2.14 1.06c-14.16 2.94-25.47 6.61-33.27 16.25-2.99 3.19-6.46 6.85-6.83 11.13-3.74 8.63-4.61 18.35-4.83 28.12-.13 5.37.01 12.99-.58 18.8-.41 4.04-1.64 7.15-1.64 8.3 0 2.79-1.54 5.98-1.54 5.98-.19 1.06-.14 1.45.29 2.31.67 1.34-2.31.77-.82 3.1 4.1.75 17.88-8.28 20.34-10.96 1.94-2.11.45.9 6.71-3.575 6.23-4.45 27.64-18.31 32.41-24.835 8.84-7.43 15.99-15.37 20.35-20.8 0 0 .23-.45 7.83-10.29 7.6-9.85 18.1-29.76 18.1-29.76 1.28-2.79 1.33-4.49 2.79-7.46.97-1.97 2.31-5.15 3.88-9.15.6-1.53 2.06-2.53 2.79-4.51 2.84-7.73 4.56-15.32 7.31-22.72 0 0 2.89-13.43 2.91-13.42 2.41-14.19 3.13-17.23 4.02-31.54.34-5.38 1.05-20.63.45-26.39-6.03-57.49-23.92-93.73-52.09-127.51-4.47-6.08-16.53-19.66-32.95-33.3-6.33-5.26-11.96-8.64-16.66-12.66-7.88-5.57-11.16-5.91-15.17-8.52l-5.79-2.92c-1.78.71-1.99 2.02-2.14 3.64.94.84 3.08 1.38 5.38 2.99zm83.043 102.98h.76s1.487.91.92 2.425c-.57 1.52-1.783 1.97-2.36 2.03-.575.06-1.805-1.07-1.805-1.07l.222-1.52c.19-.4.232-.55.152-.71l2.11-1.14zm-2.953 20.008c.496-2.062 2.47-3.38 4.682-3.123 0 0 2.315.22 2.125 2.49-.09 1.07-1.38 2.38-2.1 3.07-.404.39-3.32 2.04-4.05 1.95-1.82.53-.764-1.81-1.04-2.56l.324-1.58.06-.26zm-42.08-41.28l6.65-.29 6.204-.472c.964.746 4.286.312 4.202 1.05l-1.3 1.012-4.193.58c-.297-.1-7.415.6-7.66-.148-.254-.772-4.48-.435-3.903-1.736zm32.892 51.068c.178-.737 2.325-.44 3.01-.44.69 0 2.666.723 2.856 1.576.18.852-.57-.19-1.23.19-.67.378.28 2.556-.29 2.46-.57-.093-4.35-3.786-4.35-3.786zm15.14 6.25s2.27-1.23 2.364-.19c.095 1.042-1.798 1.137-1.798 1.137s-.19 1.135-2.09.757c-1.9-.38 1.51-1.7 1.51-1.7zm-15.54 9.837l.13-.02c1.934-.25 3.376.308 4.542 1.756l.17.22.004.29c-1.21 12.91.46 23.45.38 35.62-.15 22.57-2.15 46.06-.15 70.59-.27 4.02.35 8.13.58 12.01.3 5.16 1.11 9.7.29 14.41l-.11.65s-21.29 1-22.01-.16c-.73-1.16 0-4.34 0-4.34l-.44-13.88c-.77-17.02.86-22.42-.29-36.74-.09-1.02.87-1.96.89-3.09.2-11.76.84-29.74-.9-34.22-.05-4.34.457-9.1.29-13.45-.05-1.39.397-4.01.397-4.01l.04-.14c2.58-8.98 7.09-19.15 16.05-25.42l.115-.06zm-23.85-96.88l.322-.763 1.407-.07c1.51.785.78 2.73.76 3.727l-.01.6-.74.694c-.47.83-.68.86-1.13.95-.66.13-.88.01-1.51-.48l-.38-3.03 1.3-1.63zm-2.623 17.16c1.03-1.244 3.02-1.515 4.63-1.42.95.058 1.8.946 2.74 2.272.13.187.61.88.56 1.126.06.28.11.56.11.84 0 1.29-2.48 1.89-3.46 2.51-.96.61-2.1.47-3.08-.33-.8-.16-1.45-.68-1.85-1.49-.6-1.22-.41-2.2.32-3.49zm1.23 37.593l.66-3.504s.09-13.92 1.13-13.257c1.04.663 1.8.19 1.98 1.99.19 1.798-.48 6.627-.48 6.627l.05 3.793 1.47 1.13s.57.57.85 4.168c.29 3.598 4.45 7.007 4.45 7.007l.1 1.707 4.17 5.49s.29.757-.85-.19c-1.13-.947-6.34-6.06-6.62-8.71-.28-2.653-4.26-7.956-4.26-7.956s-.94-2.65-2.17 2.66-3.03 9.95-6.91 13.26c0 0-8.42 10.23-11.83 11.27 0 0 .28 1.23-2.75 2.09 0 0-6.53 3.6-7.19 1.33-.52-1.79.85-2.66.85-2.66s.57-.1.66.66c0 0 .85 1.89 6.43-1.52s2.1-1.39 4.73-2.84c.39-.22-2.48 1.79.85-.57s10.59-11.16 12.11-15.15c1.52-3.98 2.56-6.82 2.56-6.82zm20.5 34.71c-1.84 2.816-3.61 3.36-5.93 5.496-2.59 2.384-5.1 4.85-6.65 7.956-1.29 1.765-3.04 3.902-7.09 3.18 0 0-.73-1.3-1.3-3.18-.63-2.05-2.48-2.08-3.47-4.05-1.44-2.296-4.9-4.857-6.94-6.51l-3.04-2.896s-2.24-3.525-.18-6.246c2.06-2.72.17-.18.17-.18 4.34-3.11 7.89-9.47 11.57-12.95l4.77-4.34s2.02-.86 3.76 1.31c1.73 2.17 2.31 4.2 3.61 5.5 1.3 1.3 3.61 2.9 6.79 6.51l6.65 4.77c-.32 1.27-1.02 3.91 2.02 4.63 0 0 4.48-2.02 5.49-2.46 1.01-.43 1.59.15 1.88.58.29.44 4.04 3.47 4.04 3.47s.58 1.01-.29 1.01c-.87 0-2.17-1.59-2.46-.72-.29.87-.14 2.75 1.3 2.9 1.45.14-.29 1.45-.29 1.45s-1.3 4.92.43 5.21c1.73.29 1.88 2.894 1.59 4.05-.29 1.16-.87 35.15-.87 35.15v62.2l.87 20.102-.29 14.03s1.44 3.474-2.17 3.185c-3.62-.29-2.39-1.062-9.83-.576-6.65.43-16.48-.29-16.48-.29l-16.91.43-10.12.723-10.55.29s-3.18 1.734-4.77-1.74c0 0-1.59-9.546-.72-10.56.87-1.01 0-10.85 0-10.85l-.43-33.412v-84.04l-.29-5.21s-1.3-3.47 0-4.913c1.3-1.45.72-3.185.72-3.185s.58 4.196.58 5.354c0 1.15.73 2.17.73 8.39v40.64l.73 56.12.29 36.45s.87 4.19 3.33 3.76l26.02-.437s4.34.29 4.48-1.016c.15-1.3-.14-11.86-.14-11.86l-.58-27.19-.72-41.37.44-24.3s1.59-12.58-2.02-17.36c0 0-6.51-13.16-9.69-15.33-3.18-2.17-12-9.26-17.06-9.69-5.06-.43-1.01-1.3-.43-1.16.58.15 9.54 1.59 11.56 4.63 0 0 9.98 8.25 10.7 9.55.72 1.3 5.64 9.26 5.64 9.26s1.16 2.32 2.17.44 1.15 1.01 1.15 1.01-.29 5.07 2.02.87c2.31-4.19 7.8-12.29 8.96-11.14 1.15 1.16-8.1 8.1-8.97 15.62l-1.73 3.62-.29 34.57v40.07l1.44 37.9s.15 3.04 3.18 3.33c3.04.29 15.32.73 18.65-.14 3.32-.87 7.37.58 7.37.58s2.45 1.16 2.02-3.04c0 0 1.01-6.8-.15-13.02l-.87-24.73s.87-5.79-.72-9.84c0 0 1.59-15.48.72-17.79l-.15-20.83s-.14-34.57-.43-36.74c0 0 1.44-16.2-1.3-16.78 0 0-3.33.58-6.36-1.74 0 0-4.19 1.01-6.36 3.33l-3.04 2.46s-3.32 2.03 1.16-2.02c4.48-4.05 5.2-4.92 5.2-4.92s2.02-3.9-2.17-1.3zm-55.56-43.984l.31-.827.26-.686.77-1.22c2.29.68 2.41 5.5 2.31 5.93l-1.14.67-.39.41c-.52.58-1.18 1.3-2.31 1.01l-.46-.12-.1-.47c-.39-1.81.18-3.27.73-4.67zm-.33 22.634l1.24-1.505 1.44.44c.73 0 2.61.73 3.91 2.32l-.43 2.75-1.22 3.11-.22.2c-1.85 1.69-2.51-.34-3.6-1.43l-1.73-1.3.64-4.58zm10.57 164.26l-.36-.033s-1.76.464-2.19-1.417c-.44-1.88 1.3-3.905 1.3-3.905-1.16-28.2-1.36-50.44-1.41-76.76-.02-5.54.24-11.93.12-16.6l-.32-37.11s0-1.16 1.73-2.02c1.73-.87 4.04.15 4.04.15 7.22 4.48 10.12 9.84 16.19 18.95l2.78 5.41v.22c-.17 15.51-.24 41.96-.62 57.58-.29 11.72.92 4.63-.15 27.19l.72 20.25-.16 7.04c-8.22.05-14.73.2-21.73 1.06zM399 470.103l-.81-3.656.096-7.53.483-9.16c-.68-5.02.86-11.67 5.3-19.77 5.16-9.43 15.89-10.65 25.41-11.66l6.45-.12 4.95.77c3.37.52 6.19-.13 6.48 1.49.38 2.08 1.96 2.66 3.98 3.33 0 0 4.25-2.91 3.35-5.82-.54-1.77-9.61-3.8-9.61-3.8-.45-1.34-9.62-2.46-9.62-2.46-6.04-3.36-18.11.89-20.35.89-2.24 0-5.38 3.3-5.38 3.3-5.52.67-5.22 4.262-5.8 4.52-.58.25 0 .23-.67-.22s-2.01 0-2.01.67-1.85 3.21-1.85 3.21c-5.78 3.66-7.68 24.953-7.68 24.953s1.27 19.04 1.27 22.393c0 3.36-1.34 2.688-1.34 2.688s-.67-5.82-.67-6.94-.9-22.82-.9-22.82c.67-1.34 2.68-12.97 2.68-12.97 1.78-1.56 1.55-3.58 1.79-4.47 1.3-4.95 9-9.87 9-9.87 1.83-1.54 1.5-1.98 1.5-1.98 3.45-3.44 11.57-5.69 17.58-6.5 3.35-.45 6.65-.09 6.65-.09 8.67.09 10.2 1.67 10.2 1.67 1.56.9 17.44 6.04 17.44 6.04 5.81-3.58.89-5.59.89-5.59-15.43-7.38-31.53-6.93-31.53-6.93-2.01 0-6.04-.89-16.99 3.58-10.95 4.48-20.12 17.9-20.12 17.9-2.91 1.57-.07 5.12-.67 5.82-2.6 2.98-2.02 7.83-2.02 7.83s-1.74 11.06-1.34 25.95c.11 4.05-.9 10.74-.9 10.74-1.34 3.58-3.13 4.03-1.56-1.12 1.57-5.14.22-14.54.22-14.54-.9-1.34-.22-2.68-.22-2.68 2.01-2.68 0-7.38 0-7.38-2.02-10.07 5.81-28.41 5.81-28.41 2.46-2.01 2.01-1.79 2.01-1.79.89-3.13 3.8-3.8 7.15-7.83 3.35-4.02 10.95-7.6 10.95-7.6 2.01-.67 12.52-3.13 12.52-3.13 6.26.89 8.5-.67 8.5-.67.89.44 5.14.89 5.81.67l3.35-1.12c6.71 4.47 12.52 4.25 12.52 4.25 4.03 3.8 9.84 4.92 9.84 4.92 2.24-.22 1.79 1.12 1.79 1.12s-9.61 14.09-11.4 15.88l-4.7 4.7-13.19 15.43c-.52.18-11.37 10.44-31.42 24.94l-7.76 5.55-1.11 1.66-3.74 1.25s-3.74 1.52.14-1.11c0 0 1.94-.41 2.49-1.66 0 0 1.8.14 2.77-1.52 0 0 5.34-3.27 3.92-5.17zM69.43 357.78c2.024 6.97 4.79 14.374 7.47 21.657-3.64 4.79-5.17-3.067-9.575-1.15-6.624 2.825-13.022 6.323-19.34 8.622-1.06.52-2.987 1.57-4.023 2.1-1.34 1.91 4.022 4.6.958 6.13-5.17 3.06-3.993-7.53-5.612-9.99-1.618-2.46-2.43-5.33-3.238-8.2 2.227-3.28 4.497 2.83 7.126 3.24 2.845-.83 4.404-1.73 7.852-3.45 3.895-.37 7.504-1.51 10.93-3.04 1.964-.87 3.815-.23 5.73-2.91 2.43-3.41-3.888-6.94-7.085-8.24-5.17-2.11-9.767.38-11.49-3.07-2.21-4.43 9.383-3.64 17.043-6.9 2.062-.88 3.255 5.17 3.255 5.17zm2.108 28.555c2.508-.837 4.927-3.693 6.51-2.107 1.916 1.916 8.044 16.864 13.98 25.87.766.383-.19 4.6-4.787-.383-8.03.002-4.13 2.306-11.68 5.365-.37.416-1.45.675-2.49 1.15-1.13.52-1.57 1.7-3.06 2.3-4.55 1.83-9.36 3.556-8.61 6.324.58 4.79-1.26 3.477-2.68 3.066-1.72-5.558-6.59-9.98-8.62-15.715.81-1.436 1.64-2.682 3.26-2.682.77 4.6 3.54 7.196 5.36 5.557 8.1-4.51 15.48-6.894 23.17-12.84 0-2.05.24-2.948-.57-4.79-4.78-5.174-16.66-4.6-15.89-8.24-.1-.933 1.54-1.34 6.13-2.875zm30.065 38.71c.81 1.436 4.02 2.875 1.532 4.984-4.213.95-3.256-4.03-6.894-2.5-3.64 3.48-17.13 13.52-20.1 16.29-2.68 2.49 7.28 10.73.19 9.2-4.24-5.75-16.27-18.78-12.44-19.74 2.3-2.11 5.42 4.01 7.09 3.83 3.83-1.35 6.46-4.12 8.81-7.09 5.17-3.07 13.29-6.32 13.41-8.63.58-11.5 5.75-.77 8.43 3.64zm25.277 32.387c.134 6.032-3.83 11.306-9.383 17.247-2.344 2.06-5.167 3.31-7.66 4.98-3.064-.19-5.214-.05-8.043-.58-4.475-2.43-7.085-7.86-9-12.27-1.213-4.51-9.49.18-7.468-5.56 9-3.07 8.234-7.29 10.15-6.13.207 3.64.352 9.28 1.34 12.83.828 2.98 2.2 4.12 5.17 5.17 8.043 1.34 17.59-8.34 17.81-12.08.19-3.26 1.53-6.71.574-9.2-1.26-3.27-4.988-5.81-8.234-5.56-2.49.19-7.098 5.78-6.894 8.43.19 2.49 3.315 5.17.766 5.94-1.915.57-10.35-10.29-13.788-14.18.202-1.23.88-2.07 2.298-2.69 2.427-1.23 3.552 3.39 5.17 1.34 2.834-1.84 5.955-4.53 9.192-5.55 7.468-1.54 15.895 11.49 18 17.82zm12.256 6.133c2.023 3.486 11.047 5.265 8.618 9.773-3.035 1.23-5.042-2.98-7.47-1.342-3.828 7.282-14.17 17.44-14.17 22.614-.202 2.458 4.788 3.45 2.49 6.707-5.058-1.437-11.826-7.85-16.277-10.923-.766-7.475 3.125.246 5.553-.576 6.033-4.886 11.682-14.18 16.852-19.93.916-2.068-.096-3.306-.383-4.79-2.88-1.342-.95-2.258-1.15-2.875 2.68-3.45 2.9.932 5.93 1.342zm33.514 26.062c1.914.574 4.24-1.598 6.06-1.19 2.025.618 2.184 1.834 1.98 3.68-2.022 1.845-5.552 7.283-6.892 7.283-1.34 0-7.66-16.864-14.797-17.208-2.82.727-5.88 1.303-2.63 8.777 10.92 12.45 13.75 15.36 12.64 25.87-2.83 3.48-6.72 5.26-11.1 3.64-8.81-3.26-11.49-11.12-15.13-13.42-1.42.61-6.81 1.24-6.89.19-.13-1.73 1.5-2.82 2.11-3.64 2.03-1.85 3.26-4.03 4.6-3.26 5.18 2.96 7.53 14.5 14.37 15.52.43 1.09 1.15-.62 1.92-.77.61-.37 1.62 1.4 2.3.96 1.59-1.06 2.72-4.51 2.3-5.94-5.26-7.99-17.97-13.26-14.93-24.53 1.22-3.9 5.54-7.26 9.38-7.67 10.73 2.49 12.83 11.11 14.75 11.69zm337.435-131.12c.855 2.09-1.068 5.015-3.627 5.43-2.136-1.46-1.478-1.74-3.4-3.827-.213-2.924.4-1.257 1.254-3.764 2.717-1.254 4.705-.344 5.773 2.162zm16.59 3.695c.637 1.253-.538 4.87-2.247 6.123-1.708.837-1.935.99-4.652.99-2.988-2.508.645-4.607-.208-7.322 2.562-1.88 5.395-2.507 7.106.21zm-24.037-222.95c1.045 3.766-2.608 3.485-3.25 2.025.212-1.673-1.313-3.07-3.02-3.906-4.83 1.85-9.405 6.28-14.42 11.3-3.563 3.57-8.058 4.97-8.152 7.32-.096 2.41 2.09 5.23 4.39 5.86 4.153 1.14 10.852 1.29 11.076 2.3.218.99-2.035 1.99-4.18 3.35-1.96 1.25-3.74 2.86-5.373 3.66-5.98-5.64-8.09-12.45-13.86-17.67-.22-1.67-1.47-3.35 1.25-3.76 3.71-.57 9.92-7.95 14.83-10.87 3.63-2.5 11.49-5.23 8.15-10.45 1.07-1.46 2.27-1.25 3.55-.21l8.98 11.09zm20.9 39.53c-3.142-9.426-14.004-29.28-15.884-28.235-1.88 1.046-.647 8.158.42 10.667-.875.655-1.845.466-2.718 1.046-7.48 4.973-14.746 8.39-20.482 15.685-.918 3.293.297 5.01 1.462 7.53 1.275 2.758 2.66 6.273 5.225 8.784 2.57.41 2.25 3.34 4.6 1.46 9.2-3.77 17.34-12.76 27.59-11.92 3.63-.42 1.08-2.93-.21-5.02zm-10.71 3.87c-5.14 2.647-10.366 7.308-16.25 8.678l-3.553-.836s-3.344-3.137-3.344-6.483c.67-5.33 5.79-6.72 9.83-8.57 2.75-1.26 7.44-4.76 8.96-5.46l2.35-.99.24-.1 2.89-.35c2.78 1.81 5.11 5.41 6.27 10.23l.08.42-7.44 3.48zm18.235 13.278c-2.134-4.176 1.32-1.888-1.88-5.437-2.136-.836-3.284 1.75-3.71 3.006-6.193 4.38-16 7.66-22.834 10.79-3.85 4.38-5.16-4.6-8.57-1.26 8.52 18.14 1.25 11.71 13.37 23.84 9.82.21 19.51-2.94 25.91-11.51.42-3.97 2.51-13.39-2.3-19.45zm1.414 12.095c-1.833 2.546-6.64 5.474-11.5 8.134-2.172 1.18-6.306 3.52-8.515 4.66-2.278.56-4.4.66-6.48-.84l-1.807-1.44-2.37-3.58 1.46-2.93c4.595-3.13 11.713-5.69 16.93-8.16 0 0 7.13-4.16 7.317-4.22 2.143-.26 4.387 3.17 4.387 3.17s2.41 2.64.57 5.19zm12.59 53.368c1.67.627 4.387 14.64.625 13.595-5.434-6.902-6.06-.628-11.076 0-3.63 0-14.042 5.73-13.585 8.784.63 4.183 14.7 3.767 21.32 6.065 4.06 1.464 1.6-6.69 5.02-5.437 2.72 2.3-2.51 7.11 2.09 8.783-1.07.416.84 6.274-1.67 6.485-2.71-.21-1.63-4.604-3.55-5.648-8.75-2.09-23.23-4.818-31.77-8.784-1.28-1.67-.67-2.34-.46-4.638 11.12-7.91 27.64-14.603 29.72-14.603.42-.837 1.68-5.23 3.35-4.602zM516.85 306.36c8.064 1.48 18.184.418 25.707 1.463 2.15-.29-.208-5.647 3.97-4.6 2.35 4.597.42 11.084-.417 18.823-1.068.208-1.87.416-2.508-.628-2.717-.21.21-5.437-2.717-6.692-9.823.21-18.183-2.092-26.125-.836.21 3.137.646 7.02-1.49 8.274-.852 0-2.103-.137-2.348-1.044-2.014-7.44 2.166-17.688 1.33-20.826 3.843-3.76 2.676 4.396 4.598 6.066zm26.125 27.19c2.933 4.983 0 11.292-3.135 16.73-.595 2.158 2.51 3.765.836 6.065-.96 1.32-6.06-2.51-6.06-2.51l-9.823-.208c-1.283-1.673-.233-3.138.835-4.183 7.733 1.045 7.942 2.3 11.914-2.51 2.032-2.462 2.945-7.114 2.09-9.62-2.134-3.55-7.66-3.557-11.078-4.183-5.978.63-12.87-3.54-16.928 3.14-.854 2.93-4.39 7.32.208 10.46 1.493.21 1.882 1.26 3.972 2.3.21 2.09-4.85 1.13-6.348.92-2.134-.42-3.672-4.05-4.102-6.35 1.462-6.48 1.88-13.8 6.598-16.62 12.003-2.2 14.935.31 24.333.94 2.3 1.26 4.337 2.31 6.688 5.65zm0-93.908s2.298-2.51-1.045-5.438c-3.344-2.928-12.123-5.647-18.81-3.137-6.687 2.51-17.973 6.902-14.63 21.542 3.345 14.64 22.154 7.52 22.154 7.52s15.624-4.42 13.376-17.36c-.836-4.81-3.553 5.02-3.553 5.02s-7.315 3.34-7.733 5.02c0 0-10.24 2.93-11.285 3.76 0 0-11.5 2.3-10.45-10.04 0 0 15.04-10.04 21.31-10.25 6.27-.21 6.48-1.05 8.57 1.88s2.09 1.46 2.09 1.46zM500.02 376.028c.404 1.417 1.62 2.024 2.83 2.43 7.278 4.045 19.57 10.998 21.824 11.29 2.253.295 5.06-4.312 6.372-3.562 1.312.75-2.085 7.468-4.31 10.503-5.624 1.31-14.55 1.2-20.617.18-.61.6-3.59 1.05-1.32 2.81 4.12 3.18 10.47 9.02 13.3 13.88-2.83 4.24-6.18 11.93-9.21 15.58-1.22.4-2.97 1.48-3.91-1.33-.38-3.57 5.43-6.38 2.71-8.7-6.88-5.87-15.65-10.17-23.33-13.81-2.63-.41-2.25 6-5.81 4.87-.94-2.63 5.46-12.56 7.87-16.7 1.41-.61 2.22 1.05 2.62 2.06-1.5 5.63 6.71 5.6 9.74 8.44 0 0 10.24 9 11.99 7.69 1.5-1.13-6.09-7.39-10.12-11.82-1.35-1.48-.55-3.69-1.31-3.76-2.06-.19-4.73-3.06-6.03-4.32-5.41-5.25 4.15-3.19 4.15-3.19 5.46 1.82 17.99 2.25 19.12 2.25s-12.75-8.06-18.56-9.75c-.96-.02-1.1 1.74-1.88 2.06-1.42 0-2.81-.38-2.81-2.25 2.62-5.44 2.81-9.01 4.87-9.19 2.43-.61 1.77 2.26 1.77 4.28zm-61.93 85.177c1.022-1.022 5.644.52 7.87 1.126 3.75 1.32 8.247.57 10.186.71.184 4.39 1.337 10.42 1.435 15.62-1.5 4.32-.86 6.66-.93 8.63 0 0-1.68-1.12-4.12 2.07 0 0-3 1.88-6.18-2.63-3.18-4.5-8.99-10.5-9.56-11.63-.56-1.12 0-5.25-3.37-7.12 0 0 2.82-1.5.94-4.31 0 0 2.07-.75 3.75-2.44zm-4.686 1.314c-4.685 1.12-5.886 6.23-9.757 8.21 0 0-3.516 1.39-2.425 2.66 1.125 1.31 4.685-2.25 5.06.37 3.04 2.18 5.435 7.13 5.435 7.13 6.177 5.66 5.247 5.06 11.62 15.19.14.95-2.433 2.83-2.436 3.75 0 .76 0 1.69 1.32 1.69 5.44-3.94 12-8.88 17.06-13.13 3.94-7.13 12.93-9.38 11.13-12.86-3.07-4.4-5.36 2.09-7.38.48-.49-1.5-.75-3.57-.18-5.07-2.25-2.26-3.32-4.17-2.81-5.82 8.81-1.69 10.68-.38 13.5.75 3.44 1.21-5.43 3 .57 6.94 3.75-1.13 3.56-6.57 10.5-10.13.61-1.22 5.87-6.61 4.25-7.42-1.01 0-3.27.39-3.87 1.6-2.24 0-1.8 2.75-3.37 2.81-4.87-3.38-13.63-1.73-19.68-1.88 0 0-.18-12-2.62-15.57-2.43-3.57-2.43-3.75-6.18-.57-3.75 3.19-3.21 5.15-3.21 5.15.58 2.73 4.2-.02 6.02-.84 1.31-1.5 3.46 8.4.75 11.25-2.02 2.13-2.06-2.44-10.12-1.32-1.5-1.69 4.31-1.31 0-5.82-5.26 2.02-4.87 3.75-8.81 7.5 0 0-4.12 2.63-4.31 4.88zm27.922-23.26c4.124-3.57 11.995.56 15.932 2.06 9.933 2.81 17.43 6.75 18.74 6.19 1.314-.57 5.81-6.94 5.25-8.82-.563-1.88-19.426-22.01-19.426-22.01-.81-2.23-3.44-6.88-4.377-5.38-.937 1.5-8.505 8.48-6.56 10.13 2.436 2.06 4.498-.38 4.498-.38 4.123-.94 5.333 1.77 6.747 3.19-2.02 2.43-5.81 9.56-8.996 7.87-.958-.82-6.185-1.13-2.06-4.5 0-1.32-.938-1.88-2.25-1.88-6.067 1.01-5.53 5.16-9.37 9-5.623 6.56.765 5.46 1.872 4.5zm18.4-4.3l-.56-.37.504-.45c.45-.4 1.446-3.15 1.71-3.91.38-1.08 2.378-1.07 3.375-1.5.657-.29 2.107.82 3.185 1.31 3.37 2.53 7.493 8.79 7.026 10.11-.466 1.32-11.754-2.97-15.24-5.22zm-60.19 47.62c3.636 5.87 8.847 10.03 10.87 16.5 1.21 2.43 3.18 4.43 5.81 2.81 3.185.56 2.81 1.5 2.06 3-3.795.85-4.132 3.64-6.56 2.62-4.684-2.25-11.344-5.56-16.4-9-.806-.21-1.415.4-1.82 1.01.98 7.42 1.368 11.84 1.166 18.11-3.64.8-9.934 7.87-12.183 4.31-1.13-2.44 2.24-4.32 1.68-5.63-2.44-5.69-6.69-11.52-12.56-19.88-1.73-2.46-6.75 2.06-5.06-2.25 0 0 10.73-6.21 12.3-6.77 1.57-.55 2.41.71 1.94 2.26-.39 1.26-4.31 3.37-1.31 5.81 1.68 1.69.07 2.63.93 3.94 3.93 4.87 5.57 11.12 8.81 12.94 3.56-10.88-1.82-16.75-2.63-23.63 3.23-1.82 2.35 1.7 5.99 1.5 9.37 3.56 11.11 7.93 12.93 7.12-1.82-4.25-7.5-11.26-11.62-15.38-.04-.01-4.42 1.64-5.25-.56 0-1.34.37-1.69 4.12-2.82 1.34-.41 2.28-2.4 3.75-3.38 2.25-1.5 3 7.31 3 7.31zm-255.2-425.99c4.676 6.86 9.965 14.77 14.847 21.63 3.007 2.26 3.964-1.75 6.203-1.13 4.886 4.32-.378 2.81-2.82 4.89-2.644 1.45-8.02 7.77-11.277 7.15-1.13-1.88 1.6-4.26 1.5-5.27-.46-4.4-3.39-7.37-6.77-10.91-1.7-1.78-3.43-5.84-5.27-7.71-2.26-2.3-2.85-4-4.89-6.02-1.63.21-3.86 3.05-5.08 2.63-.82 0-2.45-.94-2.07-2.82 0 0 3.74-2.89 6.58-4.89 3.19-2.26 7.89-3.95 7.89-3.95 4.7 1.12-.71 4.31 1.13 6.39zm-23.496 6.58c2.068 3.57 4.887 8.27 3.935 11.7-.552 1.98-13.52-.8-19.16 4.28-1.15 2.03-3.066 2.52-2.254 5.64 3.46 3.94 6.15.75 10.01 1.58 7.53-2.29 18.82-7.41 25.33-1.59 2.04 1.66 2.66 5.61 2.26 7.9-1.53 6.51-4.72 7.56-9.4 10.53-1.08.68-4.35 1.2-5.45 1.88-1.08.66-1.01 3.8-2.06 4.52-1.82 1.25-3.94 3.2-5.45 4.88-.94.94-4.13 1.51-2.25-3.95 1.13-3.01.94-5.64 1.51-8.65 3.01-3.01 7.52-1.13 12.59-1.5 3.57-.96 5.93-4.31 4.7-9.41-12.4-7.69-20.86 10.91-36.09.94.21-4.16-1.94-11.76 1.32-14.67 5.9-6.45 13.07-2.06 16.73-12.04 1.84-.21 3.76-4.35 3.76-2.07zm-20.486 47.03c-3.76-.38-5.827 1.69-6.766 1.13-.94-.57 1.315-7.72 0-12.04-1.316-4.33-6.58-4.33-13.533-3.76-.785.59-.878 2.21-1.692 3-4.51 2.07-7.454 6.93-10.713 11.1-1.627 2.91-8.458 4.89-3.76 9.4 3.196-.38 2.49-4.58 5.336-4.16l15.866 14.76c1.933 1.97 5.224 4.29 5.865 8.02.168.98-3.384 2.07-.94 4.51 3.383.75 6.578-8.65 12.525-11.87 0 0 .624-1.66 0-2.08-2.188-1.48-2.748 1.78-4.444 2.47-3.57-2.07-3.57-.19-3.57-.19-4.7-1.13-3.75-4.95-6.39-8.28-.753-2.82 2.38-3.27 3.194-4.52 4.272.2 8.458 1.69 13.533 3.95 3.863 1.45 10.034-2.75 9.774-6.4-.19-2.64-8.28.37-14.29-5.08zm-15.224 5.83c-1.44 1.68-4.18.48-6.166-1.3-.6-1-.82-1.81-1.728-2.47-1.433-1.05-1.88-1.13-2.444-3.01.166-2.05.438-4.26 3.57-6.4l2.86-.82c1.705.13 4.757.89 6.163 3.45 0 0-.08 7.2-2.255 10.53zm-45.673 48.34c0 2.25 4.548 3.96 9.022 9.78.2 1.87 7.89 6.96 5.82 9.03-2.07 2.06-24.81-2.07-24.81-2.07-3.05-1.04 2.44-4.14-.94-6.02-3.87-.42-3.03 4.88-5.27 6.96-.21 2.91-5.45 5.76-3.01 8.46 5.49-1.04 1.88-2.26 6.58-1.13 8.13 0 33.74 4.8 34.77.94 1.03-3.86.08-4.4-.94-5.65-4.22-6.2-9.17-13.14-12.97-17.12-2.06-2.16-4.51-2.64-4.51-3.76 0-1.55-3.77-9.06-3.76.56z"/> | ||
18 | <path d="M59.27 159.48c-1.222 1.04-3.81 7.434-5.64 6.395-4.135-2.822 2.256-11.286 4.7-12.602.94-3.198 3.563-6.267 4.987-8.967 2.338-5.08 5.725-13.416 9.86-15.297 1.89-.86 1.88-4.18 2.955-4.46 2.073-.55 4.94-.06 7.947 4.08 1.71 2.36 5.07 1.88 3.94 4.32-1.52 3.28-15.42-3.2-18.05 5.26-1.02 2.49-5.47 2.52-4.14 6.58 3.05 2.49 7.03 6.92 10.9 7.33 6.71-1.87-4.57-12.05 3.57-9.97 1.22 2.91 9.58 5.08 9.02 8.09-2.24.83-8.27.94-7.52 5.07 2.03 4.16 7.25 5.27 10.71 7.14 2.84-4.58 5.26-7.72 4.7-13.17-2.24-1.25-1.63-7.16-2.45-9.03 4.47-3.74 7.97 4.33 11.84 6.21.2 2.7-4.32 6.18-5.64 8.84-3.39 6.77-7.54 12.84-12.22 18.24-2.03-.21-.74-2.44-.94-4.52-8.54-5.82-16.92-12.6-27.37-16.45 0 1.25-1.52.82-1.39 3.85 0 0 .75.94.19 3.01zm-17.293 39.31c6.916 2.496 18.49 6.642 24.998 9.97 3.254 2.078 3.57-7.148 6.767-2.446-.813 4.573-3.384 4.703-4.837 15.03-.61.832-1.178 1.146-2.442.414-2.683-3.218 1.055-2.9-3.623-6.228-4.518-.71-15.036-6.96-24.058-9.216-1.65.112-1.315 2.82-3.383 3.574-2.07.752-2.82-.94-2.82-.94-.21-5.614 4.6-11.86 5.82-17.68 6.01-1.318-1.31 6.9 3.57 7.523zm-6.767 14.67c-.61 3.12-1.68 5.747.753 6.396 8.458 2.258 29.133 7.524 29.885 8.653.752 1.12-.863 7.07-1.88 9.78-3.57 2.82-21.293 1.19-27.598 3.68-2.238.62-4.68.62-6.713 2.08 6.592 1.72 18.523 2.51 26.98 3.64 1.626-.47 1.395-2.51 2.632-3.39 1.31-.75 2.76-1.02 3.38.56.62 1.58-2.11 13.65-3.2 13.35-3.39-.94-1.13-4.14-3.01-5.08-5.15-2.76-13.82-2.39-19.17-3.76-3.26 1.04-11.47-4.52-10.53 3.01-2.04 1.25-3.53 1.32-4.14-.76.1-1.25 1.4-2.21 1.5-3.58.3-4.11-.34-8.86 2.25-11.66 8.74-3.12 33.08-2.45 34.02-4.33.94-1.88-25.94-7.34-27.44-7.15-1.51.19-1.7 3.76-4.16 3.23-3.96-.85.39-7.74.39-7.74l1.69-8.09c2.44-.84 3.3.09 4.32 1.13zm22.038 50.1c4.277-1.196 2.773 22.692 1.862 24.387-.453.842-3.255 2.495-3.255 2.495-10.577 0-19.76-.428-28.914-.428-3.05.413-.74 2.063-3.38 4.702-.56.563-1.88 1.504-3.19 0 .45-3.378 1.19-6.516 1.32-9.405-.56-6.39-.28-9.8 1.13-9.4 2.82-.94 2.16 4.78 3.76 4.7 8.46-.37 17.98 2.57 26.32 1.32 4.27-2.7 3.95-6.58 3.24-11.78l-1.62-3.12c-2.93-.89-18.34-2.02-27.82-1.87 0 0-1.42 3.04-3.49 3.23-2.06.19-.94-10.91.57-13.16 2.45-2.49 2.78 4.39 5.45 4.52 16.36.76 21.06.76 28.06 3.83zm377.1-165.01c1.67-8.07 4.465-14.833 6.674-21.15-.6-2.003-2.846-3.972-4.45-4.174-8.063 4.174-19.185 14.75-28.083 21.15-1.21-1.404-2.43-1.112-5.29-4.175-1.61-.6-3.92-2.2-3.32-4.2 2.68-3.96 5.3-8.98 7.49-14.16.28-2.78 2.49-7.78 5-10.29 8.9 2.51 2.46 13.34 6.95 16.14 2.22 1.39 7.78-10.57 7.23-11.96-.35-.87-12.28-8.05-20.58-12.8-4.95-2.83-7.82-4.59-8.34-4.17-1.39 1.11-8.34 12.24-5.29 12.52.95.09 2.53-2.44 5-3.61 3.89.56 7.68-1.81 9.73-.55-5.01 8.35-9.18 18.65-12.79 26.16-2.61.6-10.29-4.17-10.29-1.95 0 6.68 13.9 7.55 18.35 13.36 4.45 3.06 11.68 9.18 12.51 6.96.83-2.22-6.4-6.96 3.61-9.46 2.78 2.78 6.34 4.6 8.34 6.4.8 2.8-1.59 5.11-1.39 7.51-1.2 1.21-3.89-4.45-5-1.11-3.06 1.95 10.34 12.15 11.4 10.02 1.94-3.89-2.5-4.73-2.23-5.84.4-1.59 2.94-5.57 4.73-10.57zm-5.84-3.62c-.653.57-1.743-.29-1.743-.29s-4.652-2.492-6.042-4.16c-1.39-1.67 6.952-6.958 6.952-6.958l6.395-3.34c.835 2.506-3.824 13.243-5.56 14.75zm48.106 11.967c.277 2.226-7.33 6.01-9.732 10.017-6.118 1.392 1.032-9.572.833-10.574-1.112-3.34-1.945-5.287-3.336-6.678-7.81 5.81-16.41 17.81-19.47 22.54.8 1.2 4.07 3.955 3.87 5.557-3.87 5.85-2.7-1.03-4.71-.83-.35-1-1.12 1.11-3.06-1.67-3.62-3.62-9.48-5.73-7.23-9.18 2.2-.61 4.12 2.63 6.12.83 5.2-7.21 13.97-15.82 20.57-21.43-1.39-.98-3.19-.99-4.73-1.67-1.54-.69-2.82-2.04-4.45-1.95-2.5 1.39-3.62 2.78-6.31 3.09-1 0-2.2.2-2.81-1 2.71-4.6 5.36-6.88 7.76-9.69h2.2l24.45 22.62zm-93.348 397.306c.81 1.845 1.784 2.954-1.215 4.267-2.99 3-5.62 1.37-6.87-1.808-1.21-2.256-.92-3.73.7-4.757 2.23-.614 6.39.454 7.4 2.298zm7.83 16.12c.81 2.252 1.27 4.77-1.36 5.59-2.02.41-3.853 2.308-5.32-.672-1.053-2.14-2.343-4.64-.116-6.08 5.248-2.06 5.583-.06 6.795 1.17zm76.88-392.828s-6.724-5.604.757-6.057c6.242-.38 5.487.757 5.676 2.27.18 1.515-1.52 4.734-2.46 5.112-.95.38-3.98-1.325-3.98-1.325zm-10.592 11.925s1.154 3.476 5.296-.946c2.838-3.03-.032-4.316-.756-4.922-2.27-1.892-7.944 1.135-6.81 3.975 1.135 2.84 2.27 1.894 2.27 1.894zM58.92 335.905s7.816.293 4.347 8.442c-2.94 6.907-7.158-.127-7.158-.127s-4.61-7.548 2.81-8.315zm-13.803 4.86s8.052.895 6.39 5.884c-1.66 4.98-9.458 5.24-9.842.76-.383-4.48 1.407-6.78 3.452-6.65z"/> | ||
19 | </svg> | ||
diff --git a/template.tex b/template.tex new file mode 100644 index 0000000..44a7322 --- /dev/null +++ b/template.tex | |||
@@ -0,0 +1,488 @@ | |||
1 | % Options for packages loaded elsewhere | ||
2 | \PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} | ||
3 | \PassOptionsToPackage{hyphens}{url} | ||
4 | $if(colorlinks)$ | ||
5 | \PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} | ||
6 | $endif$ | ||
7 | $if(dir)$ | ||
8 | $if(latex-dir-rtl)$ | ||
9 | \PassOptionsToPackage{RTLdocument}{bidi} | ||
10 | $endif$ | ||
11 | $endif$ | ||
12 | % | ||
13 | \documentclass[ | ||
14 | $if(fontsize)$ | ||
15 | $fontsize$, | ||
16 | $endif$ | ||
17 | $if(lang)$ | ||
18 | $babel-lang$, | ||
19 | $endif$ | ||
20 | $if(papersize)$ | ||
21 | $papersize$paper, | ||
22 | $endif$ | ||
23 | $if(beamer)$ | ||
24 | ignorenonframetext, | ||
25 | $if(handout)$ | ||
26 | handout, | ||
27 | $endif$ | ||
28 | $if(aspectratio)$ | ||
29 | aspectratio=$aspectratio$, | ||
30 | $endif$ | ||
31 | $endif$ | ||
32 | $for(classoption)$ | ||
33 | $classoption$$sep$, | ||
34 | $endfor$ | ||
35 | ]{$documentclass$} | ||
36 | $if(beamer)$ | ||
37 | $if(background-image)$ | ||
38 | \usebackgroundtemplate{% | ||
39 | \includegraphics[width=\paperwidth]{$background-image$}% | ||
40 | } | ||
41 | $endif$ | ||
42 | \usepackage{pgfpages} | ||
43 | \setbeamertemplate{caption}[numbered] | ||
44 | \setbeamertemplate{caption label separator}{: } | ||
45 | \setbeamercolor{caption name}{fg=normal text.fg} | ||
46 | \beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ | ||
47 | $for(beameroption)$ | ||
48 | \setbeameroption{$beameroption$} | ||
49 | $endfor$ | ||
50 | % Prevent slide breaks in the middle of a paragraph | ||
51 | \widowpenalties 1 10000 | ||
52 | \raggedbottom | ||
53 | $if(section-titles)$ | ||
54 | \setbeamertemplate{part page}{ | ||
55 | \centering | ||
56 | \begin{beamercolorbox}[sep=16pt,center]{part title} | ||
57 | \usebeamerfont{part title}\insertpart\par | ||
58 | \end{beamercolorbox} | ||
59 | } | ||
60 | \setbeamertemplate{section page}{ | ||
61 | \centering | ||
62 | \begin{beamercolorbox}[sep=12pt,center]{part title} | ||
63 | \usebeamerfont{section title}\insertsection\par | ||
64 | \end{beamercolorbox} | ||
65 | } | ||
66 | \setbeamertemplate{subsection page}{ | ||
67 | \centering | ||
68 | \begin{beamercolorbox}[sep=8pt,center]{part title} | ||
69 | \usebeamerfont{subsection title}\insertsubsection\par | ||
70 | \end{beamercolorbox} | ||
71 | } | ||
72 | \AtBeginPart{ | ||
73 | \frame{\partpage} | ||
74 | } | ||
75 | \AtBeginSection{ | ||
76 | \ifbibliography | ||
77 | \else | ||
78 | \frame{\sectionpage} | ||
79 | \fi | ||
80 | } | ||
81 | \AtBeginSubsection{ | ||
82 | \frame{\subsectionpage} | ||
83 | } | ||
84 | $endif$ | ||
85 | $endif$ | ||
86 | $if(beamerarticle)$ | ||
87 | \usepackage{beamerarticle} % needs to be loaded first | ||
88 | $endif$ | ||
89 | $if(fontfamily)$ | ||
90 | \usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} | ||
91 | $else$ | ||
92 | \usepackage{lmodern} | ||
93 | $endif$ | ||
94 | $if(linestretch)$ | ||
95 | \usepackage{setspace} | ||
96 | $endif$ | ||
97 | \usepackage{amssymb,amsmath} | ||
98 | \usepackage{ifxetex,ifluatex} | ||
99 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex | ||
100 | \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} | ||
101 | \usepackage[utf8]{inputenc} | ||
102 | \usepackage{textcomp} % provide euro and other symbols | ||
103 | \else % if luatex or xetex | ||
104 | $if(mathspec)$ | ||
105 | \ifxetex | ||
106 | \usepackage{mathspec} | ||
107 | \else | ||
108 | \usepackage{unicode-math} | ||
109 | \fi | ||
110 | $else$ | ||
111 | \usepackage{unicode-math} | ||
112 | $endif$ | ||
113 | \defaultfontfeatures{Scale=MatchLowercase} | ||
114 | \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} | ||
115 | $if(mainfont)$ | ||
116 | \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} | ||
117 | $endif$ | ||
118 | $if(sansfont)$ | ||
119 | \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} | ||
120 | $endif$ | ||
121 | $if(monofont)$ | ||
122 | \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} | ||
123 | $endif$ | ||
124 | $for(fontfamilies)$ | ||
125 | \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} | ||
126 | $endfor$ | ||
127 | $if(mathfont)$ | ||
128 | $if(mathspec)$ | ||
129 | \ifxetex | ||
130 | \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} | ||
131 | \else | ||
132 | \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} | ||
133 | \fi | ||
134 | $else$ | ||
135 | \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} | ||
136 | $endif$ | ||
137 | $endif$ | ||
138 | $if(CJKmainfont)$ | ||
139 | \ifxetex | ||
140 | \usepackage{xeCJK} | ||
141 | \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} | ||
142 | \fi | ||
143 | $endif$ | ||
144 | $if(luatexjapresetoptions)$ | ||
145 | \ifluatex | ||
146 | \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} | ||
147 | \fi | ||
148 | $endif$ | ||
149 | $if(CJKmainfont)$ | ||
150 | \ifluatex | ||
151 | \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} | ||
152 | \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} | ||
153 | \fi | ||
154 | $endif$ | ||
155 | \fi | ||
156 | $if(beamer)$ | ||
157 | $if(theme)$ | ||
158 | \usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} | ||
159 | $endif$ | ||
160 | $if(colortheme)$ | ||
161 | \usecolortheme{$colortheme$} | ||
162 | $endif$ | ||
163 | $if(fonttheme)$ | ||
164 | \usefonttheme{$fonttheme$} | ||
165 | $endif$ | ||
166 | $if(mainfont)$ | ||
167 | \usefonttheme{serif} % use mainfont rather than sansfont for slide text | ||
168 | $endif$ | ||
169 | $if(innertheme)$ | ||
170 | \useinnertheme{$innertheme$} | ||
171 | $endif$ | ||
172 | $if(outertheme)$ | ||
173 | \useoutertheme{$outertheme$} | ||
174 | $endif$ | ||
175 | $endif$ | ||
176 | % Use upquote if available, for straight quotes in verbatim environments | ||
177 | \IfFileExists{upquote.sty}{\usepackage{upquote}}{} | ||
178 | \IfFileExists{microtype.sty}{% use microtype if available | ||
179 | \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} | ||
180 | \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts | ||
181 | }{} | ||
182 | $if(indent)$ | ||
183 | $else$ | ||
184 | \makeatletter | ||
185 | \@ifundefined{KOMAClassName}{% if non-KOMA class | ||
186 | \IfFileExists{parskip.sty}{% | ||
187 | \usepackage{parskip} | ||
188 | }{% else | ||
189 | \setlength{\parindent}{0pt} | ||
190 | \setlength{\parskip}{6pt plus 2pt minus 1pt}} | ||
191 | }{% if KOMA class | ||
192 | \KOMAoptions{parskip=half}} | ||
193 | \makeatother | ||
194 | $endif$ | ||
195 | $if(verbatim-in-note)$ | ||
196 | \usepackage{fancyvrb} | ||
197 | $endif$ | ||
198 | \usepackage{xcolor} | ||
199 | \IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available | ||
200 | \IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} | ||
201 | \hypersetup{ | ||
202 | $if(title-meta)$ | ||
203 | pdftitle={$title-meta$}, | ||
204 | $endif$ | ||
205 | $if(author-meta)$ | ||
206 | pdfauthor={$author-meta$}, | ||
207 | $endif$ | ||
208 | $if(subject)$ | ||
209 | pdfsubject={$subject$}, | ||
210 | $endif$ | ||
211 | $if(keywords)$ | ||
212 | pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, | ||
213 | $endif$ | ||
214 | $if(colorlinks)$ | ||
215 | colorlinks=true, | ||
216 | linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, | ||
217 | filecolor=$if(filecolor)$$filecolor$$else$Maroon$endif$, | ||
218 | citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, | ||
219 | urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, | ||
220 | $else$ | ||
221 | hidelinks, | ||
222 | $endif$ | ||
223 | pdfcreator={LaTeX via pandoc}} | ||
224 | \urlstyle{same} % disable monospaced font for URLs | ||
225 | $if(verbatim-in-note)$ | ||
226 | \VerbatimFootnotes % allow verbatim text in footnotes | ||
227 | $endif$ | ||
228 | $if(geometry)$ | ||
229 | \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} | ||
230 | $endif$ | ||
231 | $if(beamer)$ | ||
232 | \newif\ifbibliography | ||
233 | $endif$ | ||
234 | $if(listings)$ | ||
235 | \usepackage{listings} | ||
236 | \newcommand{\passthrough}[1]{#1} | ||
237 | \lstset{defaultdialect=[5.3]Lua} | ||
238 | \lstset{defaultdialect=[x86masm]Assembler} | ||
239 | $endif$ | ||
240 | $if(lhs)$ | ||
241 | \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} | ||
242 | $endif$ | ||
243 | $if(highlighting-macros)$ | ||
244 | $highlighting-macros$ | ||
245 | $endif$ | ||
246 | $if(tables)$ | ||
247 | \usepackage{longtable,booktabs} | ||
248 | $if(beamer)$ | ||
249 | \usepackage{caption} | ||
250 | % Make caption package work with longtable | ||
251 | \makeatletter | ||
252 | \def\fnum@table{\tablename~\thetable} | ||
253 | \makeatother | ||
254 | $else$ | ||
255 | % Correct order of tables after \paragraph or \subparagraph | ||
256 | \usepackage{etoolbox} | ||
257 | \makeatletter | ||
258 | \patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} | ||
259 | \makeatother | ||
260 | % Allow footnotes in longtable head/foot | ||
261 | \IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} | ||
262 | \makesavenoteenv{longtable} | ||
263 | $endif$ | ||
264 | $endif$ | ||
265 | $if(graphics)$ | ||
266 | \usepackage{graphicx,grffile} | ||
267 | \makeatletter | ||
268 | \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} | ||
269 | \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} | ||
270 | \makeatother | ||
271 | % Scale images if necessary, so that they will not overflow the page | ||
272 | % margins by default, and it is still possible to overwrite the defaults | ||
273 | % using explicit options in \includegraphics[width, height, ...]{} | ||
274 | \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} | ||
275 | % Set default figure placement to htbp | ||
276 | \makeatletter | ||
277 | \def\fps@figure{htbp} | ||
278 | \makeatother | ||
279 | $endif$ | ||
280 | $if(links-as-notes)$ | ||
281 | % Make links footnotes instead of hotlinks: | ||
282 | \DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} | ||
283 | $endif$ | ||
284 | $if(strikeout)$ | ||
285 | \usepackage[normalem]{ulem} | ||
286 | % Avoid problems with \sout in headers with hyperref | ||
287 | \pdfstringdefDisableCommands{\renewcommand{\sout}{}} | ||
288 | $endif$ | ||
289 | \setlength{\emergencystretch}{3em} % prevent overfull lines | ||
290 | \providecommand{\tightlist}{% | ||
291 | \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} | ||
292 | $if(numbersections)$ | ||
293 | \setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} | ||
294 | $else$ | ||
295 | \setcounter{secnumdepth}{-\maxdimen} % remove section numbering | ||
296 | $endif$ | ||
297 | $if(beamer)$ | ||
298 | $else$ | ||
299 | $if(block-headings)$ | ||
300 | % Make \paragraph and \subparagraph free-standing | ||
301 | \ifx\paragraph\undefined\else | ||
302 | \let\oldparagraph\paragraph | ||
303 | \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} | ||
304 | \fi | ||
305 | \ifx\subparagraph\undefined\else | ||
306 | \let\oldsubparagraph\subparagraph | ||
307 | \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} | ||
308 | \fi | ||
309 | $endif$ | ||
310 | $endif$ | ||
311 | $if(pagestyle)$ | ||
312 | \pagestyle{$pagestyle$} | ||
313 | $endif$ | ||
314 | $for(header-includes)$ | ||
315 | $header-includes$ | ||
316 | $endfor$ | ||
317 | $if(lang)$ | ||
318 | \ifxetex | ||
319 | % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic) | ||
320 | \usepackage{polyglossia} | ||
321 | \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} | ||
322 | $for(polyglossia-otherlangs)$ | ||
323 | \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} | ||
324 | $endfor$ | ||
325 | \else | ||
326 | \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} | ||
327 | $if(babel-newcommands)$ | ||
328 | $babel-newcommands$ | ||
329 | $endif$ | ||
330 | \fi | ||
331 | $endif$ | ||
332 | $if(dir)$ | ||
333 | \ifxetex | ||
334 | % Load bidi as late as possible as it modifies e.g. graphicx | ||
335 | \usepackage{bidi} | ||
336 | \fi | ||
337 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex | ||
338 | \TeXXeTstate=1 | ||
339 | \newcommand{\RL}[1]{\beginR #1\endR} | ||
340 | \newcommand{\LR}[1]{\beginL #1\endL} | ||
341 | \newenvironment{RTL}{\beginR}{\endR} | ||
342 | \newenvironment{LTR}{\beginL}{\endL} | ||
343 | \fi | ||
344 | $endif$ | ||
345 | $if(natbib)$ | ||
346 | \usepackage[$natbiboptions$]{natbib} | ||
347 | \bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} | ||
348 | $endif$ | ||
349 | $if(biblatex)$ | ||
350 | \usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} | ||
351 | $for(bibliography)$ | ||
352 | \addbibresource{$bibliography$} | ||
353 | $endfor$ | ||
354 | $endif$ | ||
355 | |||
356 | $if(title)$ | ||
357 | \title{$title$$if(thanks)$\thanks{$thanks$}$endif$} | ||
358 | $endif$ | ||
359 | $if(subtitle)$ | ||
360 | $if(beamer)$ | ||
361 | $else$ | ||
362 | \usepackage{etoolbox} | ||
363 | \makeatletter | ||
364 | \providecommand{\subtitle}[1]{% add subtitle to \maketitle | ||
365 | \apptocmd{\@title}{\par {\large #1 \par}}{}{} | ||
366 | } | ||
367 | \makeatother | ||
368 | $endif$ | ||
369 | \subtitle{$subtitle$} | ||
370 | $endif$ | ||
371 | $if(author)$ | ||
372 | \author{$for(author)$$author$$sep$ \and $endfor$} | ||
373 | $endif$ | ||
374 | \date{$date$} | ||
375 | $if(beamer)$ | ||
376 | $if(institute)$ | ||
377 | \institute{$for(institute)$$institute$$sep$ \and $endfor$} | ||
378 | $endif$ | ||
379 | $if(titlegraphic)$ | ||
380 | \titlegraphic{\includegraphics{$titlegraphic$}} | ||
381 | $endif$ | ||
382 | $if(logo)$ | ||
383 | \logo{\includegraphics{$logo$}} | ||
384 | $endif$ | ||
385 | $endif$ | ||
386 | |||
387 | \begin{document} | ||
388 | $if(has-frontmatter)$ | ||
389 | \frontmatter | ||
390 | $endif$ | ||
391 | $if(title)$ | ||
392 | $if(beamer)$ | ||
393 | \frame{\titlepage} | ||
394 | $else$ | ||
395 | \maketitle | ||
396 | $endif$ | ||
397 | $if(abstract)$ | ||
398 | \begin{abstract} | ||
399 | $abstract$ | ||
400 | \end{abstract} | ||
401 | $endif$ | ||
402 | $endif$ | ||
403 | |||
404 | $for(include-before)$ | ||
405 | $include-before$ | ||
406 | |||
407 | $endfor$ | ||
408 | $if(toc)$ | ||
409 | $if(toc-title)$ | ||
410 | \renewcommand*\contentsname{$toc-title$} | ||
411 | $endif$ | ||
412 | $if(beamer)$ | ||
413 | \begin{frame} | ||
414 | $if(toc-title)$ | ||
415 | \frametitle{$toc-title$} | ||
416 | $endif$ | ||
417 | \tableofcontents[hideallsubsections] | ||
418 | \end{frame} | ||
419 | $else$ | ||
420 | { | ||
421 | $if(colorlinks)$ | ||
422 | \hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} | ||
423 | $endif$ | ||
424 | \setcounter{tocdepth}{$toc-depth$} | ||
425 | \tableofcontents | ||
426 | } | ||
427 | $endif$ | ||
428 | $endif$ | ||
429 | $if(lot)$ | ||
430 | \listoftables | ||
431 | $endif$ | ||
432 | $if(lof)$ | ||
433 | \listoffigures | ||
434 | $endif$ | ||
435 | $if(linestretch)$ | ||
436 | \setstretch{$linestretch$} | ||
437 | $endif$ | ||
438 | $if(has-frontmatter)$ | ||
439 | \mainmatter | ||
440 | $endif$ | ||
441 | $body$ | ||
442 | |||
443 | $if(has-frontmatter)$ | ||
444 | \backmatter | ||
445 | $endif$ | ||
446 | $if(natbib)$ | ||
447 | $if(bibliography)$ | ||
448 | $if(biblio-title)$ | ||
449 | $if(has-chapters)$ | ||
450 | \renewcommand\bibname{$biblio-title$} | ||
451 | $else$ | ||
452 | \renewcommand\refname{$biblio-title$} | ||
453 | $endif$ | ||
454 | $endif$ | ||
455 | $if(beamer)$ | ||
456 | \begin{frame}[allowframebreaks]{$biblio-title$} | ||
457 | \bibliographytrue | ||
458 | $endif$ | ||
459 | \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} | ||
460 | $if(beamer)$ | ||
461 | \end{frame} | ||
462 | $endif$ | ||
463 | |||
464 | $endif$ | ||
465 | $endif$ | ||
466 | $if(biblatex)$ | ||
467 | $if(beamer)$ | ||
468 | \begin{frame}[allowframebreaks]{$biblio-title$} | ||
469 | \bibliographytrue | ||
470 | \printbibliography[heading=none] | ||
471 | \end{frame} | ||
472 | $else$ | ||
473 | \printbibliography[ | ||
474 | $if(biblio-title)$ | ||
475 | title=$biblio-title$, | ||
476 | $endif$ | ||
477 | $if(biblio-heading)$ | ||
478 | heading=$biblio-heading$, | ||
479 | $endif$ | ||
480 | ] | ||
481 | $endif$ | ||
482 | |||
483 | $endif$ | ||
484 | $for(include-after)$ | ||
485 | $include-after$ | ||
486 | |||
487 | $endfor$ | ||
488 | \end{document} | ||
diff --git a/thesis.args b/thesis.args index bf836dc..3416ee6 100644 --- a/thesis.args +++ b/thesis.args | |||
@@ -1 +1 @@ | |||
--table-of-contents \ No newline at end of file | --template=template.tex \ No newline at end of file | ||
diff --git a/thesis.deps b/thesis.deps index b1cfe6a..4460750 100644 --- a/thesis.deps +++ b/thesis.deps | |||
@@ -1,3 +1,9 @@ | |||
1 | presentation/switchdfst.tex | 1 | presentation/switchdfst.tex |
2 | presentation/comptree.tex | 2 | presentation/comptree.tex |
3 | screenshot.png \ No newline at end of file | 3 | screenshot.png |
4 | sigillum.pdf_tex | ||
5 | sigillum.pdf | ||
6 | cover.tex | ||
7 | title.tex | ||
8 | abstract.tex | ||
9 | org.tex \ No newline at end of file | ||
diff --git a/thesis.meta.yml.gup b/thesis.meta.yml.gup index b13ea3a..8f4a69c 100644 --- a/thesis.meta.yml.gup +++ b/thesis.meta.yml.gup | |||
@@ -4,24 +4,37 @@ gup -u literature.bibtex | |||
4 | 4 | ||
5 | cat >$1 <<'EOF' | 5 | cat >$1 <<'EOF' |
6 | --- | 6 | --- |
7 | title: Inkrementelle Parser als edit-lenses anhand von DFSTs | 7 | include-before: |
8 | abstract: |- | 8 | - |- |
9 | Parser, die bekannte Texte nach einer kleinen Änderung neu analysieren können, ohne die ganze Eingabe erneut zu betrachten, nennt man inkrementell. | 9 | \pagenumbering{gobble} |
10 | 10 | \pagestyle{empty} | |
11 | Inkrementelle Parser sind seit den 1970er-Jahren bekannt und inzwischen umfangreich erforscht. | 11 | - \input{./cover.tex} |
12 | 12 | - \input{./title.tex} | |
13 | Edit-lenses sind eine vergleichsweise neue algebraische Darstellung von Programmen, die algebraisch strukturierte Änderungen zwischen Strukturen übersetzen. | 13 | - \cleardoublepage |
14 | 14 | - |- | |
15 | Wir demonstrieren, dass sich Inkrementelle Parser in der Sprache von edit-lenses fassen lassen, anhand einer besonders einfachen Klasse von Parsern, den deterministic finite state transducers. | 15 | \pagenumbering{roman} |
16 | 16 | \pagestyle{plain} | |
17 | Hierzu speichern wir im unterliegenden Zustand der assoziierten edit-lens die Ausgabe-Wirkung des DFST als balancierten Binärbaum um Teile davon effizient austauschen zu können. | 17 | - \input{./abstract.tex} |
18 | 18 | - \cleardoublepage | |
19 | Im Rahmen dessen stellen wir eine Implementierung von edit-lenses im Allgemeinen und unserem Verfahren in möglichst idiomatischem Haskell vor. | 19 | - |- |
20 | \setcounter{tocdepth}{3} | ||
21 | \tableofcontents | ||
22 | include-after: | ||
23 | - \cleardoublepage | ||
24 | - |- | ||
25 | \pagenumbering{gobble} | ||
26 | \pagestyle{empty} | ||
27 | - \input{./org.tex} | ||
20 | lang: de-de | 28 | lang: de-de |
21 | link-citations: true | 29 | link-citations: true |
22 | bibliography: literature.bibtex | 30 | bibliography: literature.bibtex |
23 | author: Gregor Kleen | ||
24 | date: \formatdate{30}{05}{2019} | ||
25 | numbersections: true | 31 | numbersections: true |
32 | biblatexoptions: | ||
33 | - style=alphabetic | ||
34 | - citestyle=alphabetic | ||
35 | has-frontmatter: true | ||
36 | biblio-heading: bibintoc | ||
37 | classoption: | ||
38 | - twoside | ||
26 | ... | 39 | ... |
27 | EOF | 40 | EOF |
@@ -1,5 +1,3 @@ | |||
1 | \input{./org.tex} | ||
2 | |||
3 | \section{Einführung} | 1 | \section{Einführung} |
4 | \input{./intro.tex} | 2 | \input{./intro.tex} |
5 | 3 | ||
@@ -22,7 +20,7 @@ Dabei werden wir die Definitionen aus \cite{hofmann2012edit} sowohl in natürlic | |||
22 | \input{./edit-lens/src/Control/DFST/Lens.lhs.tex} | 20 | \input{./edit-lens/src/Control/DFST/Lens.lhs.tex} |
23 | \input{./edit-lens/src/Control/Edit/String/Affected.lhs.tex} | 21 | \input{./edit-lens/src/Control/Edit/String/Affected.lhs.tex} |
24 | 22 | ||
25 | \subsection{Ausblick: Edit-lenses für non-determinische finite state transducers} | 23 | \subsection{Ausblick: Edit-lenses für nicht-determinische finite state transducers} |
26 | 24 | ||
27 | \input{./edit-lens/src/Control/FST/Lens.tex} | 25 | \input{./edit-lens/src/Control/FST/Lens.tex} |
28 | 26 | ||
@@ -36,6 +34,6 @@ Dabei werden wir die Definitionen aus \cite{hofmann2012edit} sowohl in natürlic | |||
36 | 34 | ||
37 | \input{./edit-lens/src/Control/Lens/Edit/ActionTree.lhs.tex} | 35 | \input{./edit-lens/src/Control/Lens/Edit/ActionTree.lhs.tex} |
38 | 36 | ||
39 | \section{Fazit} | 37 | \section{Zusammenfassung} |
40 | 38 | ||
41 | \input{conclusion.tex} | 39 | \input{conclusion.tex} |
diff --git a/title.tex b/title.tex new file mode 100644 index 0000000..9353f5d --- /dev/null +++ b/title.tex | |||
@@ -0,0 +1,28 @@ | |||
1 | \begin{titlepage} | ||
2 | \centering | ||
3 | {\scshape\LARGE Ludwig-Maximilians-Universität München\par} | ||
4 | Institut für Informatik\par | ||
5 | Lehr- und Forschungseinheit für Theoretische Informatik\par | ||
6 | %\vspace{1cm} | ||
7 | %\def\svgwidth{0.33 \textwidth} | ||
8 | %\input{sigillum.pdf_tex}\par\vspace{1cm} | ||
9 | \vspace{0.75cm} | ||
10 | {\scshape\Large Bachelorarbeit\par} | ||
11 | %\vspace{1cm} | ||
12 | \vfill | ||
13 | {\huge Inkrementelle Parser als edit-lenses anhand von DFSTs \par} | ||
14 | \vspace{1.5cm} | ||
15 | {\LARGE Gregor \textsc{Kleen}\par} | ||
16 | \vfill | ||
17 | Betreuer\par | ||
18 | Stephan \textsc{Barth}\par | ||
19 | \vspace{1cm} | ||
20 | Verantwortliche Hochschullehrer\par | ||
21 | \textdagger Prof.~Martin \textsc{Hofmann}, PhD \par | ||
22 | Dr.~Steffen \textsc{Jost} | ||
23 | |||
24 | \vfill | ||
25 | |||
26 | % Bottom of the page | ||
27 | {\LARGE \today\par} | ||
28 | \end{titlepage} | ||