Ausarbeitungen zum Seminar “Algorithmische Geometrie” Veranstalter: Mathias Katzer & Marc Hanheide Sommersemester 2003 28. Januar 2004 1. Christoph Hermes: Konvexe Hüllen 2. Andrea Matyssek: Polygone und der Sweep-Line-Algorithmus 3. Nadine Brandt: Bereichsbäume, Bereichssuche und Fractional Cascading 4. Christian Höner zu Siederdissen: Quadtrees 5. Jan Schäfer: Der KD-Baum 6. Marion Zysik: Triangulation Alle Arbeiten in dieser Zusammenstellung sind von Studenten erstellt. Es besteht keinerlei Gewähr bzgl. der Korrektheit und Gültigkeit der Aussagen. 1 Seminar Algorithmische Geometrie Konvexe Hüllen Christoph Hermes [email protected] 30. September 2003 Inhaltsverzeichnis 1 Einleitung 1 2 Vorüberlegungen 2.1 Mathe... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 grundlegende Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Eigenschaften der konvexen Hülle . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 3 3 Algorithmen für konvexe Hüllen 3.1 Gift Wrapping (Einwickeln) 3.2 QuickHull . . . . . . . . . . 3.3 GrahamScan . . . . . . . . . 3.4 GrahamScan (improved) . . 3.5 Divide&Conquer-Verfahren . 4 4 5 7 9 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Ein Ausflug in die 3D-Welt 12 5 Fazit 14 1 Einleitung Die konvexe Hülle (oft auch nur „die Hülle“ genannt) ist eines der verbreitetsten Strukturen innerhalb der algorithmischen Geometrie. Einfach gesagt ist sie das kleinstmögliche Polygon, das in einer Ebene von Punkten alle Punkte umschließt. Bildlich gesprochen kann man sie sich als ein Gummiband vorstellen, das um eine Menge von Nägeln gespannt ist. Aus dieser wichtigen Eigenschaft heraus ergeben sich nun eine Reihe von Anwendungsmöglichkeiten und das nicht nur innerhalb der Geometrie: Kollisionsabfrage: Die Geometrie eines Roboters kann als relativ komplex angesehen werden, so dass es bei der Kollisionsabfrage innerhalb eines Pathfinding zu sehr vielen Berechnungen kommen kann. Wird aber zuerst die konvexe Hülle des Gefährts bestimmt, so vereinfacht sich auch die Geometrie des Roboters erheblich; es verringern sich somit auch die Berechnungen, was vor allem bei der Echtzeitplanung von Vorteil ist. Die Vereinfachung von komplexen Gebilden wird allgemein auch als Näherung für die Objektgeometrie bezeichnet. Data Mining: Daten mit gleichen Eigenschaften können mit Hilfe der konvexen Hülle zusammengefasst werden. So lassen sich dann verschiedene Hüllen auf Überschneidung und dergleichen überprüfen. smallest box: Bei diesem Problem soll (wie der Name schon treffend aussagt) die kleinste mögliche Box berechnet werden, in die eine Punktmenge passt. Dies gilt vor allem im 3D-Bereich. Die Berechnung der konvexen Hülle ist hier zwingend notwendig, möchte man nicht jeden Punkt mit jedem vergleichen. Allein durch die Hülle werden im Allgemeinen schon sehr viele Punkte ausgesondert. Die Stärke der konvexen Hülle liegt also vor allem in der Vereinfachung von bereits bestehenden Daten, die als Grundlage für weitere Berechnungen verwendet werden. In dieser Ausarbeitung wird mit genaueren (mathematischen) Definitionen für die konvexe Hülle begonnen, die teilweise in den Algorithmen wieder erscheinen. Es wird noch kurz darauf eingegangen, auf welchen Daten in diesen Beispielen gearbeitet wird. Danach werden einige wichtige Eigenschaften noch zusätzlich zu den Definitionen behandelt, die sie ergänzen sollen und eher in die Kategorie Trickkiste passen. Nun erst wird mit der Beschreibung der Verfahren zur Lösung des Problems der konvexen Hülle begonnen. In der Darstellung der nachfolgenden Algorithmen für die Berechnung der konvexen Hülle wird allerdings bewusst auf eine besondere Programmiersprache (Java, C(++), etc.) verzichtet und nur ein Pseudocode gegeben, da sich geometrische Algorithmen im Allgemeinen leichter auf einer höheren Abstraktionsebene besprechen lassen, als sie direkt in eine Sprache zu implementieren. Diese Schwierigkeiten beruhen vor allem auf der Tatsache, dass ein Computer nicht exakt rechnen kann und somit sämtliche Ausnahmefälle betrachtet werden müssten. In dieser Ausarbeitung werden zum großen Teil nur die Grundalgorithmen in der 2D-Ebene betrachtet, in der „Realität“ jedoch wird meist mit höheren Räumen gearbeitet. Darum werden zum Schluss einige Ansätze für die Anwendung des Problems in 3D gegeben. Natürlich darf am Ende die Diskussion, welcher der aufgezeigten Algorithmen nun der optimalste für jedes Problem dieser Art ist, nicht fehlen. 1 2 Vorüberlegungen Bevor wir mit der Darstellung und Beschreibung der eigentlichen Algorithmen beginnen, sind noch einige Vorüberlegungen fällig, die nachher bei der Darstellung der einzelnen Verfahren auftreten und erheblich zum Verständnis beitragen. 2.1 Mathe... Ein Problem präzise zu formulieren, heißt in der Informatik meist, es mathematisch zu beschreiben. Das gilt vor allem für das Problem der konvexen Hülle. Es sei aber darauf hingewiesen, dass es mehrere Definitionen für die konvexe Hülle und Konvexität an sich gibt, die sich zwar zumeist alle entsprechen, aber dennoch verschieden ausgeprägt in den Algorithmen erscheinen können. Abbildung 1 zeigt anschaulich den Unterschied zwischen einem konvexen und nicht-konvexen Polygon. y x keine konvexe Hülle konvexe Hülle Abbildung 1: Vergleich zweier Polygone auf Konvexität Die Definitionen und damit auch die Eigenschaften folgen auf dem Fuß: 1. Eine Menge wird als konvex bezeichnet, wenn das Segment mit dig in der Menge enthalten ist: vollstän- Diese Aussage kann als primäre Definition aufgefasst werden. Man beachte, dass die Definition nicht auf eine Dimension beschränkt ist. Es sollte klar sein, dass der innere Winkel eines konvexen Polygons nicht sein darf, bzw. dass es keine „Dellen“ hat, wie das erste Bild in Abbildung 1 zeigt. 2. Eine Konvexkombination1 von Punkten ist eine Summe der Form Die Punkte !#" $ &% ' $ &% )(+* kann (und sollte man auch höheren Dimensionen) als Vektoren ansehen. Somit ist das in Def. 1 besprochene Segment eine Konvexkombination aus den Punkten und . Ein Dreieck wäre demnach eine Konvexkombination aus seinen drei Endpunkten und in 3D bestünde ein Tetraeder aus der Konvexkombination seiner vier Endpunkte. Man beachte, dass diese Objekte selbst wieder konvex sind. 1 Ein sehr gutes Beispiel hierzu kann man in [MBrg] nachlesen. 2 3. Eine konvexe Hülle einer Menge von Punkten , ist die Menge aller Konvexkombinationen der Punkte von , . Sie wird häufig mathematisch als -.0/1,32 geschrieben. 4. Die konvexe Hülle einer Menge von Punkten , in 4 Dimensionen ist die Menge aller Konvexkombinationen von 46587 (oder weniger) Punkten von , . Somit ist die Hülle einer Menge von Punkten im zweidimensionalen Bereich eine Konvexkombination einer Untermenge von drei Punkten, die je ein Dreieck aufspannen. 5. Die konvexe Hülle einer Menge von Punkten , in einer Ebene ist das kleinste Polygon 9 9;: 9=<!9>:? , das , einschließt. Somit gibt es kein anderes Polygon für das gilt: , . 6. Die konvexe Hülle einer Menge von Punkten , in einer Ebene ist das konvexe Polygon 9 , das , einschließt und die kleinste Fläche besitzt. 7. Die konvexe Hülle einer Menge von Punkten , in einer Ebene ist das konvexe Polygon 9 , das , einschließt und den kleinsten Umfang besitzt. Die Definitionen 5-7 erscheinen trivial, legen aber dennoch im einzelnen fest, dass es nur eine konvexe Hülle geben kann, die exakt charakterisiert wird. 2.2 grundlegende Datenstrukturen Bevor man Algorithmen zur Lösung eines Problems entwirft, sollte man wissen, auf welche Art von Daten sie angewendet werden sollen; in unserem Fall operieren wir auf Punkten in einer Ebene (im dreidimensionalen Raum) mit dem Ergebnis ein Polygon (3D-Hülle) zur erhalten, dass alle Punkte einschließt. Diese Ansicht dient nur dazu, anschaulich die Algorithmen zur Bestimmung der konvexen Hülle zu erläutern. In der Realität werden sie geeignet modifiziert werden müssen, um zum Beispiel auf verschiedenene Datensätzen arbeiten zu können. Punkte (engl. Points) sind einfach darzustellen; viele Programmiersprachen (Java, C/C++, etc.) bieten dafür sogar eigene Klassen an. Polygone lassen sich auf die Punktdarstellung zurückführen: Als eine Liste von Punkten, dessen Reihenfolge dem Entlanggehen den Polygons entspricht. Die Realisierung einer solchen Liste kann durch einen Array oder einer (doppelt) verketteten Liste erfolgen, abhängig von dem Algorithmus. 2.3 Eigenschaften der konvexen Hülle Die Definitionen (siehe Abschnitt 2.1) liefern zwar schon eine gute Grundlage für die Entwicklung von Algorithmen für das dargestellte Problem, einige Besonderheiten sollten jedoch trotzdem hervorgehoben werden. Zu diesen Besonderheiten zählen vor allem die Extremalpunkte einer konvexen Hülle. Das sind Punkte, die garantiert zur Hülle gehören und sich schnell und intuitiv bestimmen lassen. Sie werden häufig als Ausgangspunkte für die Algorithmen verwendet (als Ankerpunkte oder Pivotelemente). Dessen Bestimmung in einer Ebene ist einfach: Es sind Punkte mit der kleinsten (größten) @ -Koordinate oder kleinsten (größten) A -Koordinate. Das enspricht der Bestimmung der äußersten Punkte in den vier Himmelsrichtungen. In Definition 1 wurde ein weiterer Aspekt nebenbei erwähnt, der hier aber noch mal deutlich hervorgehoben werden sollte: Der innere Winkel der Hülle. Es ist klar, dass er nicht BDC sein darf, da sonst eine „Delle“ entsteht und somit keine konvexe Hülle mehr vorhanden ist. 3 Eine weitere Winkeleigenschaft kann aber auch wie folgt beschrieben werden: Gegeben sei eine Menge von Punkten E , ihre konvexe Hülle F)G0HIEKJ8L E und drei Punkte MNOPNRQTS E U MOVQWXFGYHIE3J , wobei sich MOZQ gegen den Uhrzeigersinn auf der Hülle dreht. Nun gilt für alle Punkte Q\[PS]E3^V_`MNOPNRQVa : b b H MOcN OVQdJfe b H MOPN OVQ [ J Der angegebene Winkel ( ) sollte als innerer Winkel verstanden werden. Die (Un-)Gleichung klärt auch gleichzeitig die Frage, ob Punkte, die sich auf dem Segment zweier zusammenliegender Punkte der Hülle liegen (sich also durch die eine Konvexkombination zweier zusammenliegender Punkte darstellen lassen), noch zur Hülle gehören oder nicht. (Die Antwort ist ja!) 3 Algorithmen für konvexe Hüllen Die folgenden Algorithmen beschränken sich auf die Lösung des Problem in einer Ebene (2D) mit einer Menge von Punkten. Es wird davon ausgegangen, dass alle Punkte dieser Menge paarweise verschieden und keine drei Punkte kollinear sind. 3.1 Gift Wrapping (Einwickeln) Zu den ersten Verfahren, die für die Bestimmung der konvexen Hülle entwickelt wurden, zählt das Einwickeln (engl. wrap) der Menge von Punkten. Es ist dem naiven Verfahren nachempfunden, wie Menschen ein solches Problem mit Papier und Bleistift lösen würden. jk ghgi tu vw no O pq lm rs y x Abbildung 2: Einwickelverfahren graphisch Daher ist die Beschreibung auch recht einfach (siehe Abb. 2): Man beginne mit einem Punkt, der garantiert zur Hülle gehört, wie etwa der Punkt mit der kleinsten O -Koordinate (hier x ), nehme einen horizontalen, in die positive verlaufenden Strahl und „schwenke“ ihn gegen den Uhrzeigersinn, bis er auf einen weiteren Punkt trifft; dieser Punkt (M ) muss zur Hülle gehören. Dann benutze man diesen Punkt als Angelpunkt und drehe weiter gegen den Uhrzeigersinn, bis ein weiterer Punkt getroffen wird. Das Verfahren wird so lange wiederholt, bis der Ausgangspunkt x wieder erreicht ist; das Paket ist nun eingewickelt. Die etwas schwammige Formulierung „Schwenken“ beinhaltet nicht anderes als die Berechnung des Winkels2 y zwischen dem verlängerten Strahl der letzten beiden Punkte (hier 2 Dass es auch möglich ist, ohne die doch recht zeitaufwändigen trigonometrischen Funktionen bei der Berechnung von z aus zukommen, wird in [RSed, S. 405] gezeigt. 4 gestrichelt dargestellt) und der Verbindung des Angelpunktes zu jedem noch nicht betrachteten Punkt. Derjenige neue Punkt mit dem kleinsten Winkel ist ein Punkt der konvexen Hülle. Der folgende Pseudocode zeigt dieses Verfahren noch einmal kurz: 1 2 3 4 5 6 7 8 9 10 11 12 Algorithmus wrap Finde Pivotelement {| mit {P}~Y&V Finde Punkt {c mit kleinstem zur Horizontalen {|`h] {V{ { |) { while ({ { { for each {d {\`} {{I {V¡{d } {V¢f£>&Z ¤{\¥} Füge {Z¢ der Hülle hinzu {¦{V¢ } Zeile 3 ist ein Vorgriff auf die innere Schleife (Zeile 6-8), um die Bestimmung von § zu ermöglichen. In Zeile 7 wird nur der Winkel zu jedem neuen Punkt berechnet, derjenige Punkt mit dem kleinsten Winkel wird in Zeile 9 ermittelt. Erfahrungsgemäß sind die meisten naiven Verfahren nicht immer die besten; nicht anders verhält es sich mit der konvexen Hülle. Der Algorithmus berechnet immer wieder neu den Winkel zu den noch nicht aufgenommenen Punkten, ohne evtl. vorher berechnete Informationen zu nutzen. Das macht eine Effizienzanalyse für den Zeitaufwand einfach (¨ ist Anzahl der zu betrachtenden Punkte): © ª ­ ¬«c ­ ¨ ³ ¨ ®µ´¥± ¨®°¯¤±3² ¶ · ¸ ­ ¨¹º± Diese Abschätzung gilt nicht nur für den worst-case, sondern auch für den best-case » ­ ¨ ¹±. 3.2 QuickHull Dieser Algorithmus wurde in den späten 70ern von mehreren Wissenschaftlern unabhängig voneinander vorgeschlagen. Es setzte sich der Name „QuickHull“ auf Grund der Ähnlichkeit zu QuickSort durch, denn beide beruhen auf dem Divide&Conquer-Verfahren. Das Prinzip ist einfach: Aus einer Menge von Punkten lassen sich viele Elemente schon mit wenigen Rechenschritten eindeutig als innere Punkte der Hülle identifizieren und somit ausschalten. Die restlichen Punkte, die zwangsweise näher zur Hülle liegen, werden nun erst genauer betrachtet. Diese allgemeine Formulierung lässt sie wie folgt präzisieren: In einem ersten Schritt (siehe Abb. 3) findet eine grobe Unterteilung der Punktmenge ¼ statt; dabei werden zunächst die beiden horizontal am weitesten entfernte Punkte (entspricht Westen ½ und Osten ¾ ) ermittelt und als Grenze für eine Unterteilung der Punkte in eine obere und untere Hälfte verwendet. Der zweite, entscheidende Schritt (siehe Abb. 4) besteht in der getrennten Betrachtung der beiden Hälften, die so lange rekursiv aufgerufen wird, bis nur noch die Hülle übrig bleibt. Dabei wird aus der Punktmenge ¼ der Punkt ¿ mit dem weitesten Abstand zu ÀÂÁ bestimmt. ¿ kann nun als Punkt der Hülle betrachtet werden, so dass alle Punkte, die sich innerhalb des Dreiecks ÀÂÁ¿ befinden, nicht zur Hülle gehören können. Sie werden eliminiert. Die verbleibenden Punkte (sollte es welche geben) werden nun wiederum in zwei Hälften (hier à und Ä ) 5 ÏÐ w ãä ÇÈ ÅÆ ÑÒ áâ ÕÖ ÙÚ ÓÔ ÍÎ ÛÜ ßà ËÌ åæ ÉÊ c íî ×Ø e ÷ø b Abbildung 3: erste Einteilung der Punkte ûü ç èç èP B ùú ÝÞ ïð A óô õö ýþ ÿ ñò ëì a éê Abbildung 4: genauere Betrachtung des Randes geteilt. Bei der Unterteilung werden die Segmente und als Vektoren aufgefasst, die eine (in Pfeilrichtung) linke und rechte Seite haben. Der neuen Menge werden somit alle Punkte, sich sich rechts von befinden und der neuen Menge alle Punkte, die sich rechts von befinden, zugeordnet3 . Der rekursive Aufruf erfolgt dann auf und . Somit ergibt sich folgender Pseudocode für die Funktion QuickHull: 1 2 3 4 5 6 7 8 9 10 Algorithmus Quickhull function QuickHull { if ( ) { return } Punkt mit max. Abstand von ! "# Punkte rechts von ! $% Punkte rechts von return QuickHull &'"(*)+) QuickHull '$, } Ein Aufruf der Funktion geschieht dann folgendermaßen: 1 2 3 4 5 -. Punkt /0 mit 21435#6,798 :; Punkt /0 mit 2143 #6,<'= "# Punkte oberhalb von ->: $? Punkte unterhalb von ->: QuickHull @-:A"(*)+) QuickHull B:CD-$, Eine Effizienzanalyse erweist sich hier als weitaus schwieriger, als bei dem vorangegangenen Gift Wrapping. Man kann zwar schon erahnen, dass QuickHull ähnliche Effizienzen wie QuickSort an den Tag legen wird, der endgültige Beweis fehlt aber noch. Sei E die Menge der zu verarbeitenden Punkte und FHGJIKELI deren Anzahl. Die Teilung der Punkte zu Anfang lässt sich innerhalb von MONPFRQ bewerkstelligen, die Kosten der rekursiven Aufrufe hängen aber von I SI und I4HI ab. Sei TUGVI I und WXGJI4HI mit TZYHW[G\F,]X^_G`MONaFbQ . Wenn die Zeitkomplexität für den Aufruf von Quickhull cdNPFRQ ist, dann lässt sich ceNPFRQ rekursiv ausdrücken: m ceNPFRQG\M/NaFbQRYfcdNgThQbYfcdNaWiQ 3 (1) Analog gilt natürlich, dass der Menge j alle Punkte zugeordnet werden, die sich links von kl befinden. Für gilt das entsprechende. 6 Leider kann man diese Rekursion nicht lösen, ohne den genauen Zusammenhang zwischen , o und p zu kennen. Darum muss hier eine Überlegung zum best-case und worst-case erfolgen: n q best-case: Jede Division ist so balanciert wie nur irgend möglich: nsr r o pt Hier wird – mit dem Hinweis auf die doch sehr grobe Analyse – gewissenhaft ignoriert, dass nvu o r pvwyx und n und o ganze Zahlen sein sollten. Diese Tatsachen fallen bei der Klassifizierung der Effizienz dieses Algorithmus’ kaum ins Gewicht. Somit ergibt sich aus Gl. (1): ze{ t r pR| z~} p t { u { pb| p_@ pb| Die genauen Rechenschritte zur Auflösung dieser Rekursion sind in [JRou, S. 101f] beschrieben. q worst-case: Jede Division ist so unausgeglichen wie möglich; das entspricht dem Fall, dass alle Punkte schon auf einer konvexen Hülle liegen und somit kein Punkt eliminiert werden kann: { nUr x r o pw?xA| { nUr pw?x o r xC| Die Werte für n und o in Gl. (1) eingesetzt ergibt dann: ze{ zd{ u { r zd{ u pw%xA| p | b pt w%xA| p { { u u uyCu p pw?xC| p w | r pR| r r { r ; p { { pw.| p t u 9 r~ { L*; pw.D| xA| p | Im schlechtesten Fall ist QuickHull also genauso schlecht wie das naive Verfahren. Es hat { sich aber in der Anwendung gezeigt, dass die Effizienz im Mittel bei ¡ p_@ pb| liegt und (ähnlich wie QuickSort beim Sortieren) eines der schnellsten Verfahren auf dem Gebiet der Berechnung der konvexen Hülle ist. 3.3 GrahamScan Dieses Verfahren, das 1972 von R.L. Graham entwickelt wurde, gilt als eines der besten auf diesem Gebiet. Es deshalb so gut, weil es die best-case-Effizienz von Quickhull sogar im schlechtesten Fall halten kann, wie wir später noch sehen werden. Der GrahamScan besteht aus zwei wichtigen Teilen, der Sortierung der Punkte und dem Backtracking-Verfahren. Der zuerst genannte Teil (siehe Abb. 5) beginnt mit der Auswahl 7 ª« ¼½ ®¯ ¦§ ¾¿ ¨© h Âà ¤¥ °± º d »º »¶ f ¸¶¸¹ g ÀÁ ²³² ´ ´ ³ ¬­ e ÄÅ c µ ·µ ·¶ b ÆÇ i ¢£ a a Abbildung 5: Sortieren der Punkte Abbildung 6: Backtracking-Verfahren eines geeigneten Pivotelementes aus einer Menge von Punkten È , vorzugsweise ist das derjenige Punkt mit der kleinsten É -Koordinate (und größten Ê -Koordinate). In der Abbildung ist das der Punkt Ë . Das Kriterium, nach dem nun die restlichen Punkte sortiert werden, ist ihr Winkel zu dem Pivotelement (und sein in die Horizontale und positiv verlaufenden Strahl). Das Sortierverfahren kann zwar beliebig gewählt werden, es gilt aber zu beachten, dass selbst die worst-case-Effizienz von ÌOÍPÎ_Ï@ÐÑÎbÒ nicht überschritten wird; daher hier die Empfehlung, entweder Shell- oder MergeSort zu verwenden. Die herausragende Leistung des GrahamScan’s liegt in dem zweiten Schritt, dem Backtracking-Verfahren (siehe Abb. 6). Das Prinzip dieses Verfahrens ist die Erweiterung einer schon bestehenden konvexen Hülle um einen Punkt und die nachfolgende Überprüfung auf Konvexität des neuen Polygons. In der Abbildung beginnt man also mit der (natürlich konvexen) Hülle ËÓÔ und fügt den Punkt Õ hinzu. Der Algorithmus geht nun einen Punkt zu Ô zurück (back tracking) und stellt fest, dass die Hülle einen Knick nach links macht. Somit ist ËÓ ÔÕ eine konvexe Hülle. Nun wird der Punkt Ö aufgenommen und der Algorithmus stellt fest, dass die Hülle bei Õ einen Knick nach rechts macht. Õ kann folglich nicht zur Hülle gehören und wird daher eliminiert. Eine neue Überprüfung bei Ô ergibt, dass Ô zur Hülle gehören muss (Knick nach links), und es wird ein neuer Punkt zur bisherigen Hülle ËÓ ÔÖ hinzugefügt. Das Verfahren wiederholt sich so lange, bis die sortierte Menge È abgearbeitet ist. Die Überprüfung, ob die Hülle an einem Punkt É in einem Abschnitt Ê×É&Ø einen Knick nach rechts oder links macht, kann unter anderem so gelöst werden, dass getestet wird, ob sich É in dem Dreieck Ù5ÚÜÛÝÊ2Ø befindet, wobei ÚÜÛ das Pivotelement (Angelpunkt) ist. Die Zusammenfassung des GrahamScan’s lässt sich durch folgenden Pseudocode beschreiben: 1 2 3 4 5 6 7 8 9 10 Algorithmus GrahamScan Û ß Punkt Þáâ mit Þ2ã4ä_å.æ,ç9è&é'âiê Þ à ë Þ2ã4ìeå.æ,í'î&é'âhê Þ2ï ðããã ð ÞñóòÜï ß Sortiere alle Punkte Þôõáâö¶éDÞ Û ê nach ÷ùø Þ Û Þôgð Þ Û øPúûUüü for ý ßÿþ , ý , ý³úUú { ß ý while Hülle knickt bei Þ òÜï rechts ab { lösche Þ òÜï ß } } Bei der Bedingung, ob die Hülle einen Knick nach rechts macht (Zeile 6), wird davon ausgegangen, dass zuvor bei dem Sortierverfahren (Zeile 3) gegen den Uhrzeigersinn sortiert wurde. Das entspricht einer Sortierung von Ú ï Ú ñóòÜï nach aufsteigenden Winkel-Werten zu ÚÜÛ . 8 Die Effizienzanalyse des GrahamScan’s beginnt mit dem Sortierverfahren. Es ist ja allgemein bekannt, dass eine Sortierung, die nur auf Schlüsselvergleichen beruht, mindestens erfordert. Wir nehmen an, dass das verwendete Verfahren auch im worst !Schritte "# case braucht. Dass das danach verwendete Backtracking-Verfahren nur Schritte benötigt, ist schon etwas schwerer einzusehen. Aber nach jedem Test der Hülle auf Rechts-Knicke schreiten wir entweder voran oder wir eliminieren einen Punkt. Da es nur Punkte gibt, kann man höchstens Vorwärtsschritte durchführen, aber auch höchstens Punkte # eliminieren und daher höchstens -mal zurückgehen. Somit benötigt der Durchlauf nur "%$ '& Schritte. !( Insgesamt werden damit also Schritte im schlechtesten Fall benötigt. 3.4 GrahamScan (improved) Dieser Abschnitt sollte als Ergänzung zum vorherigen verstanden werden, da es den GrahamScan um eine nützliche Methode erweitert: Der Eliminierung von unnötigen Punkten. Diese Idee wurde schon beim QuickHull-Verfahren (siehe Abschnitt 3.2) verwendet, wo zu Beginn des Algorithmus’ sehr viele Punkte mit einem Schlag eliminiert wurden. PQ ./ JK ,- :; RS <= 45 HI )*)+ NO 89 67 LM 01 z{ >? @A BC FG DE XY fg ^_ Abbildung 7: Bestimmung des Vierecks rs VW de |} 23 tu U*T UT xy bc `a vw Z[ hi jk lm pq no \] Abbildung 8: Anpassen des Rechtecks Der Ansatz ist, ein sehr schnelles Berechnungsverfahren zu entwickeln, um eine unnötige Sortierung und spätere Betrachtung von Punkten zu verhindern. Die Realisierung (siehe Abb. 7) erfolgt durch die Ermittlung eines rechteck-ähnlichen Polygons aus einer Menge von Punkten. In dieses Viereck wird nun ein Rechteck gesetzt (siehe Abb. 8). Der Gewinn aus diesem zweiten Schritt besteht in der vereinfachten Eliminierung der Punkte. Auf eine Darstellung eines Pseudocodes wird hier verzichtet. Statt dessen bleibt anzumer ken, dass diese Vorberechnung Schritte erfordert und laut stochastischer Geometrie ~ Punkte im Mittel bei einer rein zufälligen Verteilung übrig bleiben. Die nachfolgende Berechnug des GrahamScan’s kann nun sehr viel schneller ablaufen, besonders bei der geschwindigkeitsbestimmenden Sortierung. 3.5 Divide&Conquer-Verfahren Das letzte Verfahren, das hier für das Problem der konvexen Hülle in einer Ebene (2D) vorgestellt wird, wurde nach der Methode benannt, die es verwendet: Divide&Conquer. Zum ersten Mal fand eine Anwendung dieses Algorithmus’ auf konvexe Hüllen 1977 nach den Vorschlägen von Preparata und Hong statt. Die Methode „Divide&Conquer“ wurde schon in dem Algorithmus von QuickHull (siehe Abschnitt 3.2) verwendet. Dort wurde von maximalen Dreiecken 9 ausgegangen, die sich zum Rand immer weiter verfeinern; hier wird dieses Prinzip umgekehrt: Man teilt die Menge von Punkten so weit, bis nur noch Basishüllen (ein, zwei oder drei Punkte) vorhanden sind, diese werden dann wieder zu einer großen Hülle verschmolzen. Ein solcher Algorithmus kann folgendermaßen über die Punktmenge formuliert werden: 1 2 3 Algorithmus Divide&Conquer Sortiere alle Punkte nach ihrer -Koordinate Divide&Conquer Mit der Funktion: 4 5 6 7 8 9 10 11 12 13 function Divide&Conquer { if ( * ) { return } } ¡¢£%¤ ¥ ¦ §¨ Divide&Conquer ! © Divide&Conquer ¡ª return merge «§¢¬­©® Die Sortierung (Zeile 2), die übrigens zur einmal ausgeführt werden muss, garantiert, dass bei der Trennung der Menge von Punkten (Zeile 8 und 9) ¯ und ° entsprechend einer vertikalen Linie getrennt werden, wobei wir annehmen, dass alle Punkte paarweise verschieden in ihrer ± -Koordinate sind. Das vereinfacht den merge-Schritt (Zeile 13) erheblich, bei dem in diesem Algorithmus die Hauptarbeit liegt. 4 5 3 6 4 2 B 3 7 5 A 2 1 8 1 6 0 9 10 0 Abbildung 9: Auffinden der untersten Tangente Die meisten naiven Algorithmen, die zwei konvexe Hüllen zu einer verbinden, werden wahrscheinlich mindestens ²´³ µ#¶· Schritte benötigen. Dass es auch schneller geht, haben Preparata und Hong gezeigt; ihr Vorschlag braucht nur ²´³µ#· Schritte. Zur Beschreibung dieser Idee (siehe Abb. 9) legen wir fest, dass ¸ und ¹ Indizes der Punkte von den Hüllen º und » sein sollen, beginnend mit ¼ und sich die Nummerierung gegen den Uhrzeigersinn um die Ecken (Punkte) der Hüllen fortsetzt. Somit kann ¸¾½À¿ oder ¸Á¿ als der nächste oder der vorherige Punkt von ¸ aus auf der Hülle interpretiert werden. Das Ziel dieses merge-Algorithmus’ 10 ist es, zwei Tangenten für beide Hüllen zu finden; eine nähert sich von oben, die andere von unten an beiden Hülle an. Im weiteren Verlauf werden wir nur den Algorithmus für das Auffinden der unteren Tangente beschreiben, das Verfahren für die Findung der oberen Tangente (in der Abbildung gestrichelt) verläuft analog. Die Idee von Preparata und Hong zur Berechnung der unteren Tangente à sieht nun vor, dass von der Hülle Ä der Punkt mit der größten Å -Koordinate und von der Hülle Æ der Punkt mit der kleinsten Å -Koordinate genommen wird, um diese zu einer (vorläufigen) Tangente zu verbinden: Ã£Ç ÈÊÉ . In der Abbildung sind das die Punkte ÈÌË und ÉÍ . Nun wird jede Seite der Hülle abwechselnd so lange nach unten abgeschritten, bis jeweils beim gegenüberliegenden Punkt die Tangente unterhalb seiner beiden Nachbarpunkte liegt. Mathematisch kann man die Bedingung für eine Wechsel der Angelpunkte so ausdrücken, wenn man à als eine Gerade auffasst: ÃÏÎÉÐÑÓÒÔÕÅ×Ö¾ØÉÙÐ!ÑÓÒÔÕÚ Û ÃÏÎÜÉÙÐÞÝ×ÒÔÕÚßÖàØáÉÐâÝ×ÒÔãÚ Hier wurde È als Angelpunkt verwendet. à ist nun von È aus gesehen die untere Tangente von Æ . Für É als Angelpunkt gilt natürlich das entsprechende. In unserem Beispiel (Abb. 9) fangen wir, wie oben schon erwähnt, mit ÃäÇ ÈßËÙÉÍ an und nehmen ÈÊË (blau markiert) als Angelpunkt für die Betrachtung der gegenüberliegenden Punkte von der Hülle Æ . Nun verhält es sich aber so, dass nicht beide Nachbarpunkte von ÉÍ gleichzeitig über à liegen, darum wird É inkrementiert. Der gleiche Umstand ist auch bei Éæå bis Éç gegeben, bis zum Punkt Éè , wo à nun die untere Tangente von Æ ist. Es wird nun gewechselt: Éè wird als neuer Angelpunkt genommen und È wird bis zur Erfüllung der Bedingung dekrementiert. Das Ende und damit das Erreichen der unteren Tangente ist gegeben, wenn die Bedingung für beide Indizes È und É gleichzeitig erfüllt ist. Der folgende Pseudocode findet die untere Tangente: 1 2 3 4 5 6 7 8 9 Algorithmus Finde unter Tangente éê£ë Ð mit ë Ðíìî ï ë Ððòñó¨ôõöÌ÷î'ø ùê£ë Ð mit ë Ð#ìú ï ë Ðûðòñ­ó¨ôüþýÌ÷úÿø while ( ó éù nicht untere Tangente zu î und while ( nicht untere Tangente zu î ) ú ) { é ê é while ( nicht untere Tangente zu ú ) } ùªê ù In Zeile 6 und 8 wird beachtet, dass die Indizierung beider Hüllen gegen den Uhrzeigersinn läuft, aber die Tangente trotzdem Richtung Boden gehen muss. Wir gehen hier davon aus, dass alle Schleifen, die bei der Findung der unteren und oberen Tangenten verwendet werden, terminieren4 . Dessen Effizienz liegt innerhalb von Î Ö , da zum einen immer nur der nächste Punkt betrachtet wird und somit kein Rückschritt stattfindet und zum anderen, weil die Anzahl der Schleifendurchläufe nur durch die Anzahl der Punkte aus Ä und Æ begrenzt ist. Somit ist der merge-Schritt linear, was uns insgesamt – wie bei dem GrahamScan – auf Grund der notwendigen Vorsortierung auf eine Effizienz von ´Î#Ö führt. 4 Den Beweis zur Terminierung kann man in [JRou, S.105f] nachlesen 11 4 Ein Ausflug in die 3D-Welt Wie schon eingangs erwähnt, findet die Berechnung der konvexen Hülle vor allem Anwendung in der 3D-Computergrafik. Hier soll dazu ein kleiner Überblick gewährt werden, nach welchen Verfahren dieses Problem gelöst werden kann. Auf eine genauere Beschreibung (Pseudocode) wird allerdings verzichtet, da eine Implementation sehr schwierig ist und ein ganze Bücher füllen kann. Abbildung 10: Punktmenge im 3D-Raum Lange Zeit war die Berechnung der konvexen Hülle im 3D-Raum (siehe Abb. 10) dem Gift Wrapping, der schon in Abschnitt 3.1 besprochen wurde, vorbehalten, da er sich problemlos auch auf höhere Dimensionen erweitern lässt. Die Darstellung entspricht der vorherigen: Zunächst wird aus einer Menge von Punkten das Pivotelement mit !#"$&% gesucht (siehe Abb. 11) und an ihm eine waagerechte Ebene angelagert. Diese Ebene wird nun mit als Angelpunkt so lange in eine Richtung geschwenkt, bis sie auf einen neuen Punkt trifft, wie in Abb. 12 gezeigt. Abbildung 11: Ebene an Punkt mit ')(+*-, Abbildung 12: Finde nächsten Punkt Abbildung 13 zeigt den nächsten Schritt: Die Ebene wird an den beiden bisher ermittelten Punkten geknickt und beide Hälften jeweils so lange nach oben gedreht, bis ein neuer Punkt gefunden wurde. Man kann dies mit dem Zuklappen eines Buches vergleichen. Dieses Verfahren wird so lange fortgesetzt, bis die Punktmenge eingewickelt ist (siehe Abb. 14). Das Problem ist die zurweilen sehr schlechte Effizienz von .0/ ,132 . Es liegt also nahe, andere – bessere – Algorithmen zu verwenden. QuickHull lässt sich zwar auch auf höhere Dimensionen anwenden, hat aber auch im schlechtesten Fall wie das Gift Wrapping eine Effizienz von 12 Abbildung 13: Knicke Ebene an den bisher gefundenen Punkten Abbildung 14: Eingewickeltes Paket 45687:9 . Der GrahamScan besitzt diese schlechte Eigenschaft nicht, er läßt sich aber auch nicht auf höhere Dimensionen anwenden, da seine Vorsortierung auf die Berechnung von Polarkoordinaten beruht. Den einzigen Ausweg scheint das Divide&Conquer-Verfahren zu bieten: Es 45 6;=<>?6@9 und ist auch auf die dritte Dimension anwendbar. hat eine Effizienz von Abbildung 15: Zwei konvexe Hüllen (Würfel) Abbildung 16: nach der Anwendung des Divide&Conquer-Verfahrens Die grobe Beschreibung des Verfahrens entspricht genau dem der Methode in der zweiten Dimension: Zunächst werden die Punkte aus der Punktmenge A nach ihrer B -Koordinate sortiert, dann wird A in zwei Mengen C und D aufgeteilt und es werden rekursiv die konvexen 5 9 und EGF 5 D 9 berechnet. Schliesslich werden diese Hüllen wieder zusammenHüllen EGF C gesetzt (merge). Die Hauptarbeit liegt wieder bei dem merge-Schritt. Besonders in der dritten Dimension ist dies schwierig zum implementieren, darum wird hier darauf verzichtet und auf [JRou] verwiesen. 13 5 Fazit Alle vorgestellten Algorithmen dienen nur einem Zweck: Zur Berechnung der konvexen Hülle. Die Frage ist nur, welche von diesen vier grundlegenden Algorithmen nun der bessere ist? Und vor allem: Kann es noch einen Algorithmus geben, der diese „magische“ Grenze von HJI KL=MNOK@P durchbricht? Fangen wir mit der zweiten Frage, der Komplexitätsanalyse, an. Vielleicht wird der aufmerksame Leser schon bemerkt haben, dass man bei den Algorithmen um eine Sortierung nicht herumkommt: Das Gift Wrapping ähnelt sehr dem SelectionSort, wo sukzessive jeweils der beste Punkt aus dem Rest herausgesucht wird, und QuickHull, dessen Name nicht unbegründet dem von QuickSort sehr ähnelt. Im GrahamScan und Divide&Conquer-Verfahren wird ja explizit eine Sortierung vorgeschlagen. Es erscheint darum nicht ungewöhnlich, dass man das Problem der Sortierung auf das der konvexen Hülle transfertiert, zumal die Komplexität der Sortierung ja hinreichend bekannt ist. nun jede Zahl QZ durch QZJ[ Q@RTSVUWUWUVSXQY Zahlen, die sortiert werden sollen. I QZ\SXSeien I P0` Bilde Punkt auf der Normalparabel _ Q ab. Somit ergibt sich die PunktQ^Z] P als`ceinen Q ] bdI Q^ZeSfQ^] Phgjilknm0knKpo . Nun gilt es zu beachten, dass jede (Normal-)Parabel menge a Z I P auch gleichzeitig eine konvexe Hülle ist, alle Punkte befinden sich somit auf q8r a . Wird nun derjenige Punkt mit der kleinsten Q -Koordinate bestimmt und werden dann von ihm aus gegen den Uhrzeigersinn auf der Parabel alle Punkte aufgenommen, d.h. wird die konvexe Hülle berechnet, kann die Folge QRTSVUWUWUVSXQY als sortiert betrachtet werden. Auf Grund dieses HJI KL=MNOK@P Zusammenhangs braucht die Berechnung einer konvexen Hülle immer mindestens s Schritte. Aus dieser Darstellung folgt, dass der GrahamScan und das Divide&Conquer-Verfahren für das Problem optimale Effizenzen an den Tag legen, bei QuickHull ist es zumindest möglich. Aber welches ist nun der beste Algorithmus? Eindeutig lässt sich das (wie immer) nicht sagen, es kommt eher auf eine mögliche Punkteverteilung an. Fangen wir mit dem Problem der konvexen Hülle in 2D an: Wenn die Wahrscheinlichkeit groß ist, dass alle Punkte schon auf einer konvexen Hülle liegen, eignet sich wohl am besten der GrahamScan ohne eine vorherige Eliminierung der Punkte. Auch das Divide&Conquer-Verfahren ist hier ein guter Kandidat. Für den anderen Fall, die Punkte sind hauptsächlich um einen Punkt gelagert, eignet sich auch Quickhull sehr gut, da es sich empirisch gezeigt hat, dass dieses Verfahren im Mittel schneller ist als der GrahamScan, bzw. das Divide&Conquer-Verfahren. Wahrscheinlich wiegt dann allerdings eine Vorberechnung zur Eliminierung von Punkten bei dem GrahamScan und dem Divide&Conquer-Verfahren (die Eliminierung wurde nicht nur für den GrahamScan entwickelt!) wieder einiges auf; näheres müsste mit dem jeweiligen Problem getestet werden. Im dreidimensionalen Bereich gibt es eigentlich nur ein Standartverfahren, dass mit einer akteptablen Geschwindigkeit läuft: Das Divide&Conquer-Verfahren. Zumindest würde dieser Algorithmus von den hier dargestellten Algorithmen verwendet werden, es sei aber erwähnt, dass es auch andere Verfahren für die Lösung des Problems in 3D gibt, welche sich zum Teil auch etwas leichter implementieren lassen. 14 Literatur [RSed] Robert Sedgewick: Algorithmen Addison-Wesley Verlag, 2002 [JRou] Joseph O‘Rourke: Computational Geometry in C Cambridge University Press, 1994 [MBrg] Mark de Berg: Computational Geometry Springer Verlag, 1998 [IMue] Algorithmische Geometrie, WWU Münster, WS 2001/02 http://wwwmath.uni-muenster.de/u/chr/Geometrie/Folien/Kapitel03.pdf 15 tvu?wexzy{u?|~}|~}8 {l}}j\|~}w\yued~ fV¡ \¢d£X£f¥¤ ~¦§£¨©Xª¥«= ¨¦§¬«­®z©¯­ V°¥£±²V­ «©X£³X´¬µX«= f¯­v«=£f¶3¯·J¥µ­vT ¨X«V¸ ¹ «=º©VX£f«= $» ¼½«¥´T¾V´¿±²µ­v­ VX£f¥­v¥£X ¨¥zÀ©ÁÁ À©Ã§Ä±dVŧ fV­ª#VÀ©Á©ÁÂ Æ Ç ÈÊÉÌËÍÌÎÏÉÑÐÒËÓ Ô ÕTÖØ×WÙTÕ¥ÚÜÛÏÝÜÚ$Þ~ÔÕ¥Öß×WÙ¥ÕTÚÜàÝÜá ÙTÛãâ äÜåØÛÌÖØÛÌÚåØÚÞÛÌæ@çèÚéêÕ¥æ-ëjì:í-åØîðïTÕ¥æGìTÖßÖØÛÌëñ$ÛXå²ÞÛXæpòÕTë&äÜÝó í-ÛXæ-Ù¥æeì:ô¡îÝ¡Ú¡ÞðåØÚÞÛXæ8õÕTñ©Õ:í-åØî&ÛÌåØÚÜÛpõÕTÖØÖßÛ¥ö¥çèëø÷¡ÕTÖØÙTÛÌÚ$ÞÛÌÚðù@åØæÑÞjÛÌæeÖìTá Ýí-ÛXæ ífúTùGìTâ8ÔÕTÖØ×Vó ÙTÕ¥ÚÜÛ¨û:ÔÕTÖØ×WÙTÕTÚ¡àWÝÜá Ù¥ÛÝÜá ñ$ÛXæ-ü$ì:ÝÜäíOâ-åßÚ$ÞýÝÜÚ$ÞýÛfâùÛXæeÞÛXÚýÛXåßÚÜåØÙTÛjâ-ä$ÛXàÌåØÛÌÖØÖßÛjÔÕ¥Öß×WÙTÕ¥ÚÜàÝ¡á ÙTÛ ïTÕ¥æ-Ù¥ÛXâ í-ÛXÖßÖßíXö þpÛÌæãÿùÛXÛÌäó åØÚÜÛ ó ÖØÙTÕ¥æ-åßí-ü¡ëÝ¡ââ í-ÛXÖßÖßípÛXåß Ú ÛÌæ-é ì:üÜæeÛÌ Ú ÝÜÚVí-ÛÌæãì:Ú¡ÞÜÛÌæeÛÌë @àXÝÜæã ÿ Ñü¡ÚÜå í-í ó äÜÝÜÚ¡î¥íÑâ ñ©ÛXâ í-åØë&ëÝÜÚ¡Ù?ïTÕTÚjÿVíeæ-Û ÑîTÛÌÚ&ÞÜìTæXú:â-Õ?ÞÜìTâeâÛÌæ^ìTÝ Ñüjì:ÝéÔÕTÖØ×WÙTÕTÚ¡à ÝÜá Ù¥Ûì:Ú¡ÙTÛÌù8ÛÌÚÜó ÞÛÌí8ù8ÛÌæÑÞÛÌÚî3ì:ÚÜÚ öÜÿWÕ½Ö ì á :í@â-å ÑüðàXÝÜ ë 8ÛÌå â-äÜåßÛXÖñ$ÛXæ-Û ÑüÜÚÜÛÌÚ²úVù8ÛÌÖ ÑüÜÛãÔÕTÖØ×VÙ¥ÕTÚÜà ÝÜá ÙTÛâ-å Ñü ÝÜá ñ©ÛÌæeÖØìTÙTÛXæ-Ú ö ^ÒËJÍ?ÓÎÏË þpåßÛåØë ÷¡ÕTÖØÙTÛXÚ¡ÞÛÌÚ&ï¥ÕTæeÙTÛXâ í-ÛXÖßÖßí-ÛXÚ½ÔÕ¥Öß×WÙ¥ÕTÚÜàÝÜá ÙTÛ8ñ$ÛfâíeÛÌüÜÛXÚðì:Ý¡â^ÿWí-æeÛÑîTÛXÚ öTþãì:ñ©ÛÌå$åØâ í^ÛXâ ù@åÑü¥íeåßÙ$ú¥àXù@åØâ ÑüÜÛXÚ ãÛÌæÑìTÞÜÛÌÚzÝ¡Ú¡ÞÿVíeæ-Û ÑîTÛXÚðàÌÝ~ÝÜÚVí-ÛXæeâ ÑüÜÛÌå ÞÛXÚ ö #åßÚ¡!Û ãÛXæeì¥ÞÛ å â í8ÛXåßÚÜÛ " Ý¡ÚÜÛÌÚ¡ÞÜÖßå ÑüÖ ì:Ú¡ÙT# Û åØÚÜåØÛ $Üö ^åØÚÜÛÿVíeæ- Û ÑîTÛ üÜåØÚÜÙTÛXÙTÛÌÚå âíÛÌåØ% Ú Ý¡âeâ ÑüÜÚÜåßí íýì:Ý$ââ Õ¥Ö ÑüÛÌåØÚÜÛÌ æ ãÛXæeì¥ÞÛÌÚ²öpÿWåØÛ ù@åØæÑÞ ïTÕ¥Ú{ÛXåßÚ¡ÛÌ& ë Úé ìTÚÜÙ¥â ó^ÝÜÚ¡Þ~ÛÌåØÚÜÛX ë ^Ú¡ÞÜäÜÝÜÚÜîVí ñ©ÛÌÙ¥æ-ÛXÚÜà ífö¥ÿWÕTÖ ì:Ú¡ÙTÛGîTÛXåßÚÜÛõå ÑüVí-Ý¡ÚÜÙ?ÞÛÌæ ÿVíeæ-Û ÑîTÛðéêÛfâíeÙTÛXÖßÛXÙ:í{ù8ÕTæÑÞÛXÚåØâ íXúîÕ¥á ÚÜÚÜÛÌÚvñ$ÛXåØÞÜÛ~Ô#ÝÜÚÜîVí-Û Úé ìTÚÜÙ¥â ó?ñÜàÌù?'ö #Ú¡ÞäÜÝÜÚ¡î¥í â-ÛÌåØÚ ö ( ) *,+.-0/213+54628 7 <>=@? 139 4:;*,+.-0/213+549 8 ACBED!FHGJI G@KLFMLKLFONKLPQSRTKUFWVSY X RLBZF []\_^` ab\_ced g f a_h i@jckhjceh#lWchjcmckehnnohjqp g ceasrb\_ctuh^qjhtejasrvjqh^qhcxwvyonhz|{_hc}~ g ck }>_L\_thjT Jhhj^ik hn2Lck g ce{ y2hjcehnw yonhz|{bhxk hn2lHc mcabi@.ted#LTcke g ce{ y hjcehnWm_ck hnhcxw ynohz|{_h#i@hjqc g bhcum_z|pjqyohn|my g nShn|k hci@jh#m g z|pm^iWw ynohz|{_hcdvg f abh thdhjz|peceh0y hnT[]\_^`va_\bced g ak hnTm g i'k hcwvyonhz|{_hc.}H}!_}!}Hbq_}vE0}H.tuhiJyhp yTSjnk5kemcc m^iS[]\_^`va_\bced g a5}W}}H }vE}Htuhdhjz|pech0yuUhjioejh^ g f nHhjcehcx[]\_^`va_\bced g au ¡!¢¢£¥¤_¦¨§S©ª¨«¬ ©­v®¯_¬ °>±³² ´¶µZ·b¸ ¹'ºH»S¸ µZ¼o½Jµ¾µZ¼@ºHµZ·À¿ÁL½ÂSÃTÁUºWÄÅWÃLµZ· ÆbÇÈ ÇÉÊ]ËbÌqÍvÎ_ËbÏeÐÑÎÓÒÔÕWÖ.×TÏÈ ØÑeÏeÙ ÕoÇ Ú È ÛqÇÜ>Ü@ÛÏÈÎ_ÇÉ|Ô_ÈeÇÈ ÛÇÝ@ÞßÉoÇÛqÇÏà5ÊTÑeÏeÙ ÕÇ_Ú ÛqÏÈ Ç0á ÏeÇÏÀÏ ÑÉÓÇÛÏeÇ2â ÕÉoÇã|Ù_ÇÔÏÙ_Ë_äsä3ÕåæäèçWÌÌqÎbÇäsÇÛÏeÇÏÜoÛÏÈÀÈeÔ_Ü3ÊTÑeÏeÙ ÕÇéWêÑeÏuÈÀéHëEÚ ÔÌÜoË5È ÇÉSÙvÌqÇÛqÏÜ@ÕoÇ#ÑÏÈÎ_ÉË_ ì íÕÇæÏuÈ Ç0îEå ïÛqÇ3â ÕÉoÇã|Ù_ÇÏéHðTÑeÏÈé>ñ#ÒeÇÛí_ÇÏâ ÇÛqÕoÇÏ ïÛqÇÓÊLÑeÏeÙ ÕoÇ#éHðTÒeÇÛí_ÇÏ×Uã|Ù_ÇÏ Ë È ÇÉHâvÇÎbä5ÇÏ ÕoÇ òeÐó#åu×Lã|ÙvØeÑeÏeÙ ÕÇ ïÛqÇôLÔ_ ì ÏeÎ_Ç!ÇÛqÏeÇÜSÊ]Ë_ÌÍvÎ_Ë_ÏÐÑeÎbÇÜ È ÇÜSÊ]Ë_ÌÍ ÎbË_ÏeÐÑeÎ_ÇÜå ÈeÇÜWÊ]ËbÌqÍvÎ_ËbÏeÐÑÎ_ÇÜå ÛÜ@Õ#ÈeÇ0õÏeÛÇÉoÕ#ÔÌÜÈeÛqÇâvÑeäsäsÇÈ ÇÉ!ôUÔ ì ÏeÎbÇÏöÈ ÇÉ!ÇÛÏ á ÐÇÌqÏÇÏxâ ÕoÉÇã|ÙbÇÏÚeÈ ÛÇÓÈ ÇÏÊ]ËbÌqÍvÎbË_ÏeÐÑeÎ3òeÛÌÈ ÇÏå ÆbÇÈ Ç×Lã|ÙbÇ2ÒÔÕ5ÇÛqÏeÇÏø÷!ÏeÛã|ÙvóSÛqÏÙ_ÇÌ åLâvÇÛÏùÇÉÜ@ÕoÇÉsâeã|ÒeÇÏeÙbÇÌ>ÛÜJÕÇÛÏeÇÈ ÇÉsòÇÛÈ ÇÏúÛÏ È Çäû×Lã|ÙvØeÑeÏeÙ Õ>ÇÏÈeÇÏÈ ÇÏâvÕoÉÇã|Ù_ÇÏÚvÈ ÇÉSÔÏuÈ ÇÉÇÈeÛqÇ ìÑ òÇÉSÈ ÛÇ!×Uã|Ù_ÇÒeÛqÏuÔÑÜoÎ_ÇÒeÇÏÈeÇ e ì ÏeÎbÇÉÑeÏeÎsÈ ÇÉWÔ_ÏÈ ÇÉÇÏxâ ÕÉoÇã|Ù_Ç_å ü'ÇÉÌ Ô °>±³° ýþºU¸ µÿ ¸ µZ¼o½@ÅHºHà ¼oº Á µZºWµ%ÅHº»OÃTµZ·½JÁL·v· µZºHµ,¿ÁL½JÂSÃTÁLºWÄÅH ÃTµ ìÑ ÎbÇÌÔ_ÜÜ@ÇÏÜoÛã|ÒÛÏËÇÏeÇ!ÑeÏÈÎbÇÜã|ÒeÌqË ÜoÜoÇÏÇÊ]ËbÌqÍvÎ_ËbÏeÐ ìÑ Î_ÇHÇÛqÏ ÕÇÛÌqÇÏå â ÕÉoÇã|Ù_ÇÏÐ e UÇÛ ÈeÇÏ3ÎbÇÜã|ÒeÌËbÜÜ@ÇÏeÇÏ2Ê]ËbÌqÍvÎbË_ÏeÐ e ìÑ Î_ÇÏ ÜoÛÏÈÓçWÏeÞÔÏeÎ ÜJáÑeÏÈ.×TÏÈ ØÑeÏeÙ Õ ÎbÌqÇÛã|ÒÚóË_òÇÛ òuÇÌqÛÇòeÛÎ3ÛÜ@ÕÚ óUÇÌã|ÒeÇÉUÈ ÇÉLòÇÛÈ ÇÏÊTÑeÏÙbÕÇÔ_ÌÜUçWÏ ÞÔ_ÏeÎbÜ@á ÑeÏuÈóUÇÌã|ÒÇÉUÔ_ÌÜU×TÏÈeØeÑeÏeÙ Õ òuÇÐÇÛã|ÒeÏeÇÕWóSÛqÉ|ÈEå ïÛqÇÜ@Ç#Ê]Ë_ÌÍvÎ_ËbÏeÐ e ìÑ ÎbÇÜã|ÒeÌÛqÇí_ÇÏÔÌÜoË.ÇÛqÏeÇ Ì Ô_ ì ã|ÒeÇ!ÇÛqÏå ÇÏeÇÓÊ]Ë_ÌÍvÎ_Ë_ÏÐveìÑ ÎbÇ ÒeÛÏeÎ_ÇÎ_ÇÏÒÔ_òuÇÏÙbÇÛÏeÇ!Î_ÌÇÛã|ÒeÇÏçWÏeÞÔÏeÎ ÜJáTÑeÏuÈ×LÏÈ ØeÑÏeÙ ÕoÇ_å !#"%$#'&(*)+$-,/.0$#13254$6178)91:$-;18$-<=>148?87818.(9$#18$@14$-)*$A&(*)+$-,/.0$ B$#)78C D8)+$#13E >1@&14$-)FG;H4$-)I&(*)+$-,/.0$#18C78$J4$K&(+)*$L,/.$K$-;B$#)L2M$K";)/4N-7@48$#1@OP$#18$-1 QRS018C780$#1T0$#(CD8;-E U5VXW Y[Z\^]`_a8\]3Za]cb9degfh>di_kjm l h] n 7op$-;1$#<q$-$#B$#1$#1rQR0;S018#7s.t181r<s1r$#18$-1N)+;$-1(*$#)**$#19QRS018#78 $-)u Dv+$#13214$#<w<K14$-1x&(+)*$L,/.$-132(754$#1$#1y$-)5o$L^+$#D(-2$#18${z,/D0+7818|-E }N1 B$##$-,/D18$~R$#18$#1K4$-)R14?8718.(*$ n 1FG180*?87818.(H4$-RQR0;S018#7$--2-48$#)H148$#)+$ ^H4811J4$-)R14?8718.(-EpF+78C )RR$-o$-L^$-4$-<QRS1#780$#17I#"%$#}[0C ,/Du .$-v+$#1328*KDR^$L4$#)QR0;S018-78I0$#17-"i$-M $#)/+,/D8;$L4$#1$'p)+;$-1(*$#)+7818$-13E k<q4$-1NQRS(018-78K48181-7o$-18$#118$#132o<s1N48$#1 n 18FG18(?8718.(p$#)/*$- 781448$#1N>1o4?87818.(pk;$#*~+$-p13EB$)+$-*,/D8$-1Q>7818.(+$"i$-)+48$#19;1N48$#)z$-;D$#1u FX${D8)+$#)pp)+;$-10+;$-)*718|18$-o$-13E %$#H0$-+,/D8;(**$#1$#1rQR0;S018C7$#1I4;$KAD8>48$- n 18FG18(?8718.(*$-{B$#$#82348 178)4${zk$#D8$#1FX0;0$'4$#)Q>718.(*${$#18$'z${*?8$#;-2848|1o4$#)+$ n 1FG180*?87818.(+$178) #S.+,/D8$sH$#)/+,/D8;$-878180$#1A;$#FX$#)+13E`p$#)I14?8718.(I$#)+J*,/D4818110,/DA$-*$~u 718s4$#)pp)+;$-1(*$#)+7818|781494$- n 1FG10*?87818.(*$L#E %$#)+$#1(*$#)**$-1QRS(018 78C $-1'8$#o$-1J4$%%$L^/14+$#;$%$#,/D32L178)H4;$5{18,/.";1u .$-M"i$-)+48$#148B$##79)+;$-1(*$#)**$#19{18,/.";18.0$#13E8p$#)k$-;18-;0$'k1(*$-)++,/D8$-4x#74$-1 18,/D(u)+;$-10+;$-)+$#1K{18,/.("18.0$#1s-2(48+4$z$-;D$#1FX0;0$4$#)5&,/D8$-18.$-8FX$-*0$#$# ^LE0p$#)%$#)/^+$p&,/D8$-18.$-8%48;$pH$#)+C 18$-)*781{48$#)%&*)+$-,/.$0204$k1y4$-*$#<,/.?8718.( $#1o4$~L24$#)-"i$-v+$&,/D8$#1.$#M4;$I&*)+$-,/.$024;$'14$#<Q>781.0kB$#0;110LE U5V m0{m hj m Z:Zk]_ia8k]d>Z\^] JQR0;S018C7$B$#)+$#;+5,/.0$#1TDo$-1328)/7,/D(i<s1y178)54;$'&$-v+$#194$-5QRS01u #7$-k;1r'1(*$#1978<K-78o$-18$#118$#132P781o4<s1$#)+DC v$-;1$#1r)/?8D8$-13Eo<K;p+$-1 *,/D94811x14$#)+$ n 7FX(B$#1*$-;78180$#190C *$#13E ¡ ªk«¬ ¢¤£J¥~¦y§I£|¨9© ­¯®M°{±²^³²´±k®`±wµi´±¶x´i·g¸¹>´±®± º »¼½(¾0»¿8À Á¿þ0À-Á+Ä/Å8¼»0Á+ÁÀ-¿8ÀºR»¼½¾»0¿8ÆÈ Ç ¾0ÀÉ#Ã8Â;ÀÊ È Á*Á*À#ËÃÀ#¿|Ì»0Ë*¾0À-Á+Ä/Å8Ë*ÂÀ#ÍBÀ#¿À#¿'ÎË+À~ÏBÐ R Ñ8È ¿8Ò(Ó*À-¿9ÒÀ#¿8À{¾À-ÔKÀ#¿Á*ÊÔKÀ#¿9º È ¿8Ò(Ó+À'ÍoÀLÁÂ;Ó*Æ-À#¿3Õ ÖpÂ;Àp×Ó*Ë+À-Ä/ÒÀ-¿sÁ*Ä/Å8¿À#ÂÃÀ#¿TÁ*ÂÄ/ÅTʼÁ*»'¿8ÂÄ/Å(Ó-É0Á*»¿oÃÀ#Ë+¿|Ó*Ë+À~ÏPÀ#¿TÁ*ÂÄ/Ås¿ È ËiÂ;¿TÃÀ-¿TØÄ/Ò Ñ8È ¿Ò0Ð Ó*À-¿yÃÀLÁºR»¼½¾»0¿8Æ È ¾0À-Á-ÕÙÀ¿ÊÄ/ÅTÚÂvÓ+À#Ë/ÊÓ È ËÛ%À#Ë/ÃÀ#¿TÃÂÀpºR»0¼;½¾0»¿8ÀkÊ È Ä/ÅTʼÁ>ÜpÂ;À-¼;ÀLÄ/ÒÀÉ ¿ÐgØÄ/Ò0Àp»ÃÀ-ËkÝkÊ¿ÃÀ#¿8ÀLÁÜÂÀ#¼À-Ä/ÒÁ5ÍBÀ#Æ#À-ÂÄ/Å¿8À~ÓLÕÞ%À#Â Ñ Â;À-¼;Àß/È Ç ËpºR»¼½(¾0»¿8À0à á{â-âLãä(åækçèêé#ë(çìPí ªk«î ïA®ð0³ñH±ò³®²*·^®¤ó±òqô²¹>®±ðõoökñR÷+³®`±µ´±¶9´·g¸¹>´±®± ºR»¼½¾»0¿8À5ÅÊÍBÀ#¿yØiÄ/ÒÀ-¿ È ¿Ãy×À-ÂvÓ+À#¿ Õ(ÖÊIÁ*ÂÄ/ÅTÃ8À#Ë5ÝkÊ¿ÃyʼÁ>¾ÀLÁ*Ä/ż;»(Á*Á*À#¿8À-˺R»¼½¾»0¿Ð Æ È 6 ¾ ÍBÀ~Ó+Ë+Ê0Ä/Å0Ó+À#¿!¼Ê0Ç Á*ÁÓ-ÉÔ È Á+ÁKÃÂÀ9ø¿8Æ-ÊÅ8¼ÃÀ#ËsØiÄ/ÒÀ#¿ È ¿Ã×À#Â;Ó*À-¿!¾0¼;À-ÂÄ/ÅùÁÀ-Â;¿3ÕHÖpÀ#Ë úʼ;¼ÉHÃ8ÊÁ|ÃÀ-Ë|û{¿8ÂÄ/ÒÛÂ;¿ÒÀ#¼%Æ#ÛÂÁ+Ä/Å8À#¿[Æ-ÛiÀ-Âk×À#Â;Ó*À-¿ü¾À-Ë+Ê0ÃÀNýLþÿyÍBÀ~Ó*ËtÊÇ ¾Ó-ÉÛÂ;Ë/Ã[ÂÔ øk¼¼¾À#ÔKÀ-Â;¿8À-¿9Â;¾0¿8»Ë+Â;À-ËÓ È ¿Ã9ÃÂÀ{ÍoÀ-ÂÃ8À#¿r×À-ÂvÓ+À#¿9ÛiÀ-Ë+Ã8À#¿9ʼÁ5À#¿8À{ÍoÀ#Ó*Ë/ÊÄ/Å(Ó*À#Ó-Õ ºR»¼½¾»0¿8ÀI¼Â;À-¾À-¿6¿8»0Ë*Ôsʼ;À-Ë*Û%À#ÂÁÀ|¿@À-Â;¿À#ËØ>ÍBÀ#¿ÀÉÁ*Â;ÀKÒM»Ç ¿¿8À#¿ÊÍBÀ#ËÊ È Ä/Å@ËLÊ Ç È ÔK¼;ÂÄ/Å Á*À#¿3Õ Ø>Ë+Û%À#Â;Ó*À#Ë*ÓMÔsÊ¿'ÃÂÀÖÀ¿8Â;Ó*»¿ÃÀ-˺R»¼½¾»0¿8À`À#Ó^Û%Ê0Á#É ¼ÊÁ+Á*À#¿'ÁÂÄ/Å'Ê È Ä/ÅÌÀ-Ë+Á+Ä/Å8¼ È ¿8¾0À#¿8À{ºR»¼½¾»¿À Æ È ÃÀ-¿KºR»0¼;½¾0»¿8À-¿Æ ÊÇ Å8¼;À-¿3ÕÖÊÍBÀ#ÂÃ È Ç ËßXÀ-¿|Á*ÂÄ/ÅKÃÂÀk×(Ó*Ë+À-Ä/Ò0À#¿KÃÀ-ÁHºR»0¼;½¾»0¿8Æ È ¾À-Á`Ã8Ê¿¿ Ê È Ä/Å¿ʿÃÀ-Ë*À-¿º È ¿8Ò(Ó*À-¿9ʼÁÃ8À#¿N×Ä/Å8¿8Â;ÓÓ Ñ8È ¿8Ò(Ó+À#¿NÁ+Ä/Å8¿8À#ÂÃÀ-¿3Õ Ù0ÀJ¿Ê0Ä/ÅÃÀ-Ô Ûi»ß+È Ç Ë{ÔsÊ¿AÃÂ;ÀTºR»0¼;½¾0»¿8ÀÍË+Ê È Ä/Å(Ó-ÉMÒÊ¿8¿@À-Á È ¿(Ó+À#ËkÔsÁÓLÊÇ ¿ÃÀ#¿Ê È Ä/Å Á*Â;¿8¿Ì0»¼¼3ÁÀ-Â;¿3ÉBÃÂÀú`¼ÊÇ Ä/ÅÀÃÂ;ÀJÃÀ#ËÝÊ¿Ã9À-Â;¿Á+Ä/Å8¼Â;ÀÓkÆ È ÍBÀ~Ó+Ë+Ê0Ä/Å(Ó*À#¿É È ¿ÃÃÂÀ-Á*À#¿NʼÁ Ã8Ê0ÁºR»¼½(¾0»¿TÆ È ÍoÀ-Æ#À#ÂÄ/Å8¿8À-¿3Õ ªk« ³®± µ´±q¶9´·^¸¹>´±k®`± PÈ Á*ÊÔKÔ|À-¿8ÅÊÇ ¿8¾À-¿ÃÀ'ºR»¼½¾»¿À g¿Æ È Á+ÊÔKÔKÀ#¿8ÅÊÇ ¿8¾À-¿ÃÀ-¿NºR»¼½(¾0»¿8À-¿¼ÊÁ+Á*À#¿ÁÂÄ/Å^À#Û%À#¼ÁÆ#Û%À#º È ¿8Ò(Ó+ÀIÃ È Ë/Ä/Å À-Â;¿À#¿ºR»¼½¾»¿Æ È ¾JÌÀ#Ë+Í8¿ÃÀ-¿3É8ÃÀ#ËÆ È Ô ºR»0¼;½¾0»¿y¾0À#Å»0Ç ËÓLÕ Â Ä/Å(Ó*ÐÆ È Á*ÊÔKÔ|À-¿8Å ÊÇ ¿8¾À-¿ÃÀ'ºR»¼½¾»¿À ÂÄ/Å(Ó*ÐÆ È Á*ÊÔKÔ|À-¿8Å ÊÇ ¿8¾À-¿ÃÀHºR»¼½¾»¿ÀÍBÀ-ÁÓ*À-Å8À#¿'Ê È ÁMÔKÀ#Å8Ë+À#Ë+À#¿{Æ È Á*ÊÔKÔ|À-¿8Å ÊÇ ¿8¾À-¿Ð Ã8À#¿ºR»¼½¾»¿À#¿3ÉÃÂÀ{ÒÀ#¿8À'¾0À#ÔKÀ#¿Á+ÊÔKÀ#¿9×(Ó*Ë+À-Ä/Ò0À#¿xÅÊÍBÀ#¿3Õ À-Û»Ç Å8¿¼;ÂÄ/Å8À-ÁºR»0¼;½¾0»¿ ¿(Ó*À#ËsÀ-Â;¿À#Ô ¾0À#Û»0Ç Å8¿8¼ÂÄ/Å8À-¿!ºR»0¼;½¾»0¿[ÌÀ-Ë+ÁÓ*À-Å(Ó|ÔsÊ¿À-Â;¿ºR»¼½¾»¿É`ÍBÀ#ÂÃ8À#Ô !#"%$&'$(*)+,-$.$0/-13245$768$!9$9:($;<$>=<)+?:A@B!$CD9?/-@BE#$!0$F21G/-HJI HK$AM/DL 0.-$G&'$ONP@Q/-L 0$O$B>R'1A0&SAT9UH$A(:$(:$*$!02$@BA$= V D/ A$WG$3.-BW'9U$X0E8Y$!A$O.$0/-1A$(:$OZUT9$([9:$B@!10A.\!3HK$A([]^/'I_WA24O=0$B']^/A21'I :/DHKHK$A /-L A.-$0&'$a`[email protected]$*Ed4X!$*$B']^/A$O`[email protected]$= )_BA$X/DG&'$(:$XZUT9$([9:$B@!1A0.a&A$(_`[email protected]$e%9fR-!$gB,E-A,d/ih$+1AG&J,E-8h-$j'$+`[email protected]$ $BA21'9$!@B$>= V !$ V $k0A!9BE-\] 1AL (5&'B$lW<$&'$#m5$.-(:n;o$U$(][email protected]_4XB$lB#&'$(+ql0/D@Bc'[_W<$ ,-E8h-$rj'$sWA24O=0,-E-0,i/ih$St3$A.$>= )_B`bE@!c8.-E%9_.$0/-1J&A/-AK,-E-8h$rj Rd45$0?"%$4+$!@b245$A$BA$(b`e1AA,T9$U&A1A(:$BA$ u $(/-&'$ah-$(W01A0&'$v45$(&'$S, E-L A0$>RA&'B$O,-EHKwA@!$9[9XBSBAHx@!B$.-9= )_BS`bE@!c8.-E#%9X.$0/-1S&A/-AY,-EA,d/ih RA45$AS$UABT9X,-E8h-$rjs[9= yUzpy P!P^ {}|+~P|ll?|U_P|l|? M%8MATl U0M|llM voF8PP<T V !$0!$(lh-E(.$[9$@!@!9$Y`bE@!c8.E-A2 1AL .-$*1A0&&A!$F`bE@!c8.E-A$a45$(&'$YB&'$(?']pE-(:H\/d9:!, h-E(?/-@!@B$HB&'$(O+EHw01'9$(.(:/Dk0,S/-A.-$45/-0&89f= V /DW<$b4+$(:&A$N@ /-L A$&'1A(`bE-I @BcT.E-A$a/Dw0wA(Eij'BHK!$([9f= 3&'$(Ut/d90$H\/d9:!,v4+$(:&'$S/-Y689$@B@B$Oh-E-Y`[email protected]$vH$B[9l&'B$0E-S$(:4 /DL AT9$ u (/DwAA$vh$(:4+$0&'$9= qU1GSBY&'$( u $E-.(:/-wAAB$?45$(&'$S`[email protected] .$i d`bE@!c8.E-A$gh-$(45$G&'$r9f= P!P¡ ¢£8¤^¥T¦d§ ¨ ©P¦i8P8ª V ! $#`bE@!c8.E-A$WG$f0( /-L A,-$««/-1']X245$ V BH$0!EA$>=¬l/D9FH\/D­$BA$® E-L (:wG$( &'$(Xh-E-SHK$A(:$(:$Y`[email protected]$sW<$.($A2r9X%9fR0E0$[9l&'B$$(X`bE-@Bc-$f&'$(f= \&'$(_t/d90$H\/d9:!,J4+$(:&'$JHK!9+¬UB@!]p$Xh-E-K`[email protected]$< u (:/-wAA$¯?w'9BHK!$(10A.:/D1']°I ./-WG$v.$@ EL [9= ± ² ³µ´U¶¸·s¹º´U´l»#¼G½¾¿Y´5¼<ÀÂÁÃFÄJ¶_¾ÅbÆ3ÇÉÈYÊ ËgÌ[Í Î3Ï[Ð?Ñ%ÒMÏ%Ó'Ô?ÐUÕ Ö5×Ø5Ù'×ÚÜÛ8Ý5××ÞAßQàMØ!áA×ßQâlã!äå-æ:Ønç:èAÚFéGêaè0ëDá0ÙA×ã!çJ×êJê[Øìè«éAÚ¸×ØBá­í7×æî^ëDèAæ:×á­ïéAæJÖ5×fëDæß ð × Ø!çéAáAäSä-×å-ÚK×rç:æØê:ìèA×ælñ*ëdç:×á>òoÝXØB×J×fêlïéAÚÖ5×Øê[Þ0Ø!×ãPØBáÙ'×æOó+åÚKÞAé'ç×æ[ß%ô*æëdõ0öYëDá'ß ä-×Ý+×á0Ù'×çgÝXØBæÙø÷ ñ?Ø!×sô*æ:éAá0Ù'ØÙ'××sÙ0ë ð ×Ø7Øê%çfòø×ØBáA×\ù ð ×áA×\Ù'éAæìè×ØBáA×sô*×æë-Ù'×\ÙAë-æïé0ê%ç:×ãBã!×á>÷>Û8ØBá0Ù«Ù'Ø!× ïé ð ×fëDæ ð ×Ønç:×á0Ù'×áú ð'û ×öTç×#ÚK×èAæ:ÙAØ!ÚK×áGê[ØBå-á0ë-ãòPæ×fÙ'éAïØ!×æ[çÚKë-áÙ'ØB×Sñ?ØBÚ×á0êØ!åá û ×rß Ý5×ØBãBêXé0Úýüò0ê%çëdççaú ð'û ×öTç:×áÙ'×ælñlØBÚK×á0êØBå-áÙ ð ×rçæë-ìèTç:×rçUÚ\ëDá3ÙAë-áAáú ð'û ×öTç:×Ù'×æ ñ?Ø!ÚK×áGê[ØBå-á3Ù8ßü-÷ ËgÌþ ÿ 7Ô +Ó bÐ éAæUÙ'×á3Û'Ý+××Þ'ßà>ØBáA×rßâUãBä-åæØ!çè0ÚFé0ê ð ×á å-çØBäDçUÚ\ëDáYÙ'ØB×aîpå-ãBä-×áGÙ'×á sú ð'û ×öTç× ùeØ!á0×ñ?ëDç×áGê%ç:æéAöTç:éAæ Jò0ÙAØ!×Ù'×áYÛ8ç:ëdç:é0êUÙ'×fêlÛ8Ý5××Þ0êXÙAëDæê[ç×ãBã!ç÷ "$#&%$#(' ) * ùeØ!á0×ñ?ëDç×áGê%ç:æéAöTç:éAæ Fò0ÙAØ!×ë-ãBê «ëDæç×fêìèAãëDá0ä-×?î éAæUÙ'ØB×ù -×áTç:êgÙ'ØB×áTç÷ ! ùeØ!á0×Fô*×æë-Ù'× vò0Ù'ØB×ëDé0ìè3Û8Ý5××ÞAßQàMØ!áA×aä×á0ë-áAáTçgÝXØBæÙø÷ $ + áOÙ'×æPñ?ëDç×áGê%ç:æéAöTç:éAæ êØ!áGÙOëDãBã!×_ù -×áTçêo×áTçè0ë-ãnç:×á>òÙ'Ø!×eØ!Ú í7×æ:ãBë-é'îp×_Ù'×æMâUé0ê[î éAèAæ:éAáAä Ù'×fê*âlã!äå-æ:Ønç:èAÚFéGê[×fê?ë-é'î°çæ:×rç:×á>÷øñ?Ø!×fê[×ö å-áAáA×áê:ìèAå-áïéÖ+×ä-ØBáAáë-ã!ãB× ð ×öië-áAáTçaê×ØBá>ò å'Ù'×æXÝ5×æÙ'×á èAØBáAïéAä-×î éAäDçfòAê[å ð ëDãÙvêØB×aë-é'î°çæ:×rç:×á>÷ ñ?Ø!×lù -×áçê7ê[ØBá0ÙKá0ëìè\Ù'×á lß aå8å-æÙ'ØBá0ëdç:×áKä-×å-æÙ'áA×çòdØBásÙ'Ø!×fê[×Ú GëDãBã0ØBásëDé'î^ê[ç×Ø!ä×á'ß Ù'×æ X×ØBèA×áAîpå-ãBä-×-÷ , /. + 0 "$#&%$#&% 1 2 43 +* + $ 5 6* 7 3 9: 8* "$#&%$#7; ! 6! BC - =<?> @> A. ñ?Ø!×?Ø!á × áTçè0ë-ãnç:×áA×*âUæç+Ù'×æ á'îpåæÚ\ëdç:Ø!åáA×á\è ëDáAä-ç -åásÙ'×æ+ïé ð ×ë-æ ð ×Ø!ç×á0Ù'×ávâUé'î°ß äë ð ×Oë ð ò û ×Ù'å'ìèYä-Ø ð çX×ê eéAáAöTç×òAÙ'ØB×O×æî éAã!ã!çlê×ØBáSÚ é0ê:ê×á ü÷gñ?ØB×OØ!á 8! ä-×fê[Þ<×ØìèA×æ[ç:× áAîpå-æ:ÚKëDçØBå-áSØBê[çXæ×ãBëDçØ sïé0æ båêØnç:Ø!åáSÙ'×ælô*×æë-Ù'× v÷ ÷ £Ù0ëDæîPá8éAælë-áv×á0Ù'ãBØBìè 8Ø!×ã!×áYÛ8ç×ãBãB×á -×æ ë-á0Ù'×æçgÝ+×æ:Ù'×á>÷ 0÷gù+êeêØ!áGÙ\ä-×áTé0ä á'îpå-æ:Ú\ëdç:Ø!åáA×áK×áTç:è0ëDã!ç×á>òé0ÚºÙ0ë-ê5ú?æ:ØBä-ØBá0ëDãBÞAæ:å ð ãB×Ú ð ×Ý+×äDç5êØìèsö-åáç:Ø!á8éAØB×æ:ãBØBìè å-á ñ?Ø!×Oô*×æë-Ù'× ×ØBáA×Úxù ×áTçXëDé0ê ë-á>òAÝXØBæ:Ù -×æ ë-á0Ù'×æç÷ D ð ØBê ïésã åê×á>÷ ÷ aåÚKÚç5êØB×?ÙAë ð ×Ø<ë-á E FHG IKJLNMO6LPJQSRUVT W JLYXJ[Z\X:]^J_X` V Xa`JM,b:]KJ$J$OcedfLYXJgceZ\QPa+h W Ljik?l V Mnm bokX?LjiUiqp+h+XrdfLYXLYJXMAJ$a:lsJ_X+itJX {Nu6vx7wvvxz5ynvxtzB|7v{Ntvx|nvx|7zz|Nv~N}=vxzzwv?v8ttvxt|7vv~|z x7vxv7zz5vz=$|7tzvx|7vxwz2{Nvxvwz4vv zANvvzAN Avxvzv:vtvz $¡7¢¡(£ ¤,¥_¦¨§©ª¬«¬­©t®S­¯°:©t± ²³¥¬ª_´ µ vxz |¶v6·z{N N~vx|7zt¸( 5 7v~u6v tvxz Nv6 t¸tz|YzANvBv{YNvz$ YNv vxÄ |7{fzv|&z{P2· t¸¹w7 |&z$,¬¶ z={4º4Å»(¼$½y¾¿7vxÆ 4|z\v{ÁÇ4À»¹½7ÃnÀ wÈ z¾8 w|& v{Nvxtz$Szt||7Yv{Nvx2z·AN7wvwN|7|Nytf {4{N É |7·4z2 vN$|7tzÊvx?Ç4»N»¹zË?|zYN¾~7zwÌANznv¾¿S|&{P: yv|+z|v5·z tvx4$|7z|7vxz{Nvxw4vzANvÁzqqt|v $¡7¢¡&Í Î,ÏÐ¥¬ª_«¬Ñ(«¬ÒUÒÌ«_ÒU­4ÓÒAÏe¦/©°_ÏÐÒUª_­ µt|vzÔPvxt|&vtvvxz4 {Yt|&¸Svx:tv|A|7vw{Nvxvxwvx·ynvxwzv$||7z|7vxz{{Nvxynwvx4vzAANv|7{Yz4vx×~¸¹{N7?wvzvxtvtvxÕnzf{t |v2yn2vxvx|&tzvxz4 z¶w5z Ö vx{YN|7zvxvfvxz¶vx{NN|v5N|7ez vzvx|7u6zvx z tvxvÁfw|zvzvx |7Øzvx|72z$|7|&{PvxvÙtt|7vBzz |NNtzvzØ-ÚwÛjvÜ~{Uz|tY|7Nzv Ðz$Svx·zqw{v{Yvtzvxvx |&{P $¡7¢¡7¢ Ý Ôjµ z|vt{Yv~|7v{NvxvxÙtvxzv|7{N |7zvxz{Y |7AzNØ|7¶ |7zØwvÚrz z 7zA7v, $|7z|7vxz{Nvxw2vxzANv,vxzAN vxz$t|7v5Þß{zv|7vxz$ ¶UUv|7vvfw 2{Nz|zvxtzA=vY{zg v:NÌvvxz|&zvxA?Þá àvxvx|7|7zvxvxztz¸¹wvz|7|YNvxzÚ?AÛ/fÜ~U:vt|v|7zf UNvxvxwz2wvxvxzANvÁtztvxtv ÚsÄ zt|7=zUzf6vx|7 zzvz { $¡7¢¡â ÓÒAÏ ©± ª_«¬ÒAÏÐ¥_ª¬´ÒUª\ãnäªåÝ ÚC|7æPvz Ä vx|7wz|7{:¸¹7wvztvN- çvxz,¶vxe ztvxNÖ è Ü~28Þé z5tvxê7|7zvz Ä ztzA¶z,, z$U|75Á|7zBÚë ¸¹wvxz22vxz$ ì Ü~28Þê zvxêvANvz Ä ztzA¶z=5 z$t|755 {ÚCvxzAY¸¹vNzA í yn×_vx|&|Éntv=z ÞîÄ 7 vxt2¸vxzAtNvxv~zï|7z5tÚCz¶|YvxN z{A¶ zð\zð×~|7\t|vKàv|vzt¸¹7wvÈtvx zµ ynvxvx||7z{Y|7 zzBtvxt|7z,z|ÚñNN{YNvzAvxNzv6 ¶z ì $|7z|7vxz{Nvxw4vzANvxz-zU zz- w7|&$vxzz,t|v{Yv $¡7¢¡& ò:ä­-´nÒU°²­¡(¡H¡ ÔjtzØvtU|7vvx{Nwvx4ßvzANvxv~|&{YvxzA|7Nvx: N|vxz=q{N|z eg¶tzqÚC |&{P{Nw7vxvvxw zw 4vz$z$t5 {{v|7|zØzv8óêUvynwvx2vxvx|zA{fv8t |v ANÄ |7¶Bz{N|z$z ANv Þôyv:vw?{N|&=zAz̶z57|7zt{z =NvA{·&{v{YNv{|7= { Ä ¶vz6 {óC2| õ öt÷øùAú7÷xû7üýYþN÷ü5ÿøötû7üþN÷ ÷ø÷ûþ÷þ üü ëü "ú !÷xüö÷#ý U÷ !$2÷xüA&þ %' ( )ø *%ø ÷+ø !,÷ ÷üöt÷-ý U÷ !$2÷xüA#þ %' . øø÷x/û þÁötû71 ýN? ÷ýüû7ü@6ü 9;Cû7ø÷öAûü ÷4< !n÷ 06÷x4<ø÷5!ø þøB47töt< ÷3÷ þ-ý 7C29 ûøü 'ö( 4ü øú&D=ý öt>÷xEüð4ùAüúþû7öF"ûü%8ùG ÷7ü H. 9Iü ö 54CüJùAþ5Eö÷4ý6üöFt÷,4!$2÷ûü÷ü÷ü@þý6!8÷$47:9÷ûûüøý+ö\$4ötû7÷÷ü ÿë.øø÷x÷xüû7ü û/ûþN!+þ ÷ 5þ544< öt!üûþ ù÷N7t-þ ÷06ný÷x÷ù øýNûþ $>öHx÷1÷x$Jü 2&þ CK\ú7öt+ý û7÷4øüðö-÷xû7ö øü5÷BnüA÷x,÷ þNûn4÷÷x÷ü û7ý 6ü . . %ù÷5üAü4-þ ûüþYþ ùû5üþ=4Hüöt4L÷ùA ýO-þ !U,÷ ÷ !4$2üöt÷xüA÷Lüþý'7A+ý GM7P99û7øû7øö-öQö\û÷ýYû7÷üRø+û7; ü !÷ú A< +ý Aþ 7A÷ýû7ýY þ ú&+ý fü/û A#þ $2,÷ #ø ùþ"û %8 ü 9ûøö 4< n÷xø 5ø 4< þ 7 ( )ø S4üö ÷xû7ü÷x6 ü !,÷ $2÷ûüý B$2÷6ü üûþYþ 54üùAþ ? ü6 ÷üLTK\ûøö÷xû7ü÷xø>!÷, 4üöt÷üL7T9û7øö÷xø2ûüÊÿr÷xû7ü!÷ 4< !þ7E9:÷üüåötû÷ÿøötû7üÐþ÷ !)ø < ýýN÷xøû7ýYþ 7Uú&ýötû7V ü^ ÷øúú&7ýT9&2_4øBöt4÷nötöt÷xû7÷ü@ýN÷xø ÷ üùAûþYþ üþ45û÷xþN4+þú7ú5üX÷ 4ùAWEüþTùA%ýNþ ûüXþ"û ÷VøNü5÷4ûötüþ÷-ýöV ø `Ø÷ 9þNøø÷xû]÷an÷5Zþûþ7eY$÷þþBû7ü 4÷ ý\[PýP÷þ?üöötûû7÷8÷ýNÿ ÷:n÷xû&öt÷xøü4ötû7ûbü øNþN÷-÷~WEùUú÷ýN]ûû" þN5bû Bø 4< ü ÷xþ ü4K\ûXü ûø;Xö2 ö ( Bnø ÷x`#û÷ûFü 4ücö `üû+ý þNd+þ 954û÷ üùASþ C!J,÷ 4üöt4÷üLü >ö 7ötV÷9ø÷x÷xøû7üöt÷x&÷ cü !)øB<4eG÷xø÷+#ÿ üfûþYþ 54øüötùAû7þNü >÷ Ð4þ< -÷ ÷=øú7ý ötUû7û7÷Iügö ùAþ+ú4ú7÷ ÷ú. ú7÷M%÷WEüAþýNý:ûþNûûbü,ü,hÿ ö÷xø!÷ 9ø ÷x÷÷5'ûþY÷þûü7A÷ û&ýPþ\Ðötþ÷x7&ø 9iûø"ú !Cö,öøûûþ÷ýY÷$Vø4ûSýü¹ÿë÷xøNþN÷xbû û7!ü7!4÷ü4< gö !þú7ú7÷ üûþN=þ 54üùþ÷8ýYû7üO ö !,÷ 4üöt÷Lü j-k l mCnpo qsrJnprJt:uvsrLw\xt#y{zS|St~}xt L7 / "$ I% IY ^ $ *H,4 b$c5 $ ^ b . % & d L7 @H B< 4$ 3H,4 ,! H,4O 4 +H L7\H / +4 !6%C ;$ I% AY A Ii#4 9- ^ 4 < X[f$>5 ,$ J < b!7 % &46 # < 4$ H,4' 4 +H L ÷ ôö n÷xÿ ü tþ÷xû ü ÷ úû÷ ü\4ü[÷øüüA÷öþNû7÷x=øú ÷xüü û ù AøHþ÷xþ øNû ÷A÷ú7úýþ÷ û ô÷x÷û7üAü þý n÷xýYù þN÷üü üþýNú7ûú$ü÷xö û7ü÷û&ýPþ6÷x÷øýù÷÷þNþN÷xxþNû7÷x÷ üA$þN÷û&ýPø þ÷ 4ú7ú7÷ý ü þNøû ötû7÷ö ÷xøú7û&÷ ýP2þ÷x÷üAýþýYû÷û7üø üü úú7÷xø ü 2ûþû÷ø÷xøù÷þN2þN÷x÷ þN÷xü $û&÷ýPü þ÷xtü^þ û7÷xýYü þ6÷ûü ÷xø üö j-kj x#TtE\V uLxt#y L/L I\U )¡¢: £ ¤¥¦§ H,4 J7\ B4\ $> 1¨c U© ? X[ / +4 !F% $ . ,$ ;ª! , 6© 1¨cs«+@4 4$ ªB4 H,44 J7: J < b! g$@ ¨c 8¬ b!\ \=&© r÷ötý û7÷û7ü ÷ AþÁú7÷ û2üð÷xù üAþNü÷ýP÷xþ û7ü üAþN÷ú7ø ÷ýNn÷x÷xü ûþ ø þ üö ü î¹ü ÿ n÷ûþ û ÷ j÷xüü ûþNû nú7÷xû7ýNü û÷þNø ûü þ üü ¹ü eú (ü n÷ûþ L/L/­ ®g¢: £ ¤¯¯°)±² £ ³ "! b ci + + ] @ J < b! X¨c UM© I4$ # ? 9 K &4 +H,4 L . -$34 < ' g; ! , -9 L7 D < / ¨c U¬ b!U \+: 9 "! L i#4 ,$´9 Ni ! A;µ! M9 J7U4 A 5 @4 s ! ! L ? d4 < P9 6¨c+ U¶ ¬ b!\ \=P© :! , B4\ ? P! / H "! ^û7ü û÷x÷-øNþ ÷(ûü e÷xú üAý þNú7û¹ú7ü ÷ýN÷÷xü ÷ ø :ný ÷÷xøNûþùtýýYý þNýN÷xýNú7÷xú7úû ÷ü5û ÷x¹ü ÷ ü UnþN÷xøü ÷ þNùû ÷üBþ û7ü ¹Cü ÷nûü ÷xûþ ÷ øöü÷ötþ ÷ü :÷÷øö:÷x÷ü ûú&týö ùUú7ý÷xû7ú üýPýNþýY÷xþü^ýNû ÿ ÷ ýN÷ ýN÷x÷øüöt÷ :÷ø øöt÷û7ü[øö ü ü¹ü ¹ø?ù ÷xeü ú ü (ü n÷÷xýPûþþ ÷xú7ú÷þ ø ÷xøöt÷xüþ üû÷ö^ýY÷ùý+û&ýPþ üú7÷xûþYû þ x÷ûøNþ÷ û föt÷xý ø · ¸¹,ºb»P¼¹½V¾»"¿CÀÁº]ÂÃÄVŽ+¹½Æ¼¹,ÁXÇĪ»ÇBÈ É¿C½=Â+¹,ÉʼÇBŹÁ=ÂƼÇÄ>º]ÂcË\¹ÉJÀBÈ Âº"¿ÂcÇBÅ\ÌÃʼ¹,ÁX¿¹Í ½ÇBÄM¹I¾#»b¿ÀÁº"Â+ÃÄXŽ#ÎcÏ=Ï É8ÐÑÒÓ)»bÀ¿UÏ É\Ò+Ò#ÔU¹,º"ÂÕ Ö× Ø Ù_Ú,ÛÝÜ'ÞTßIà@áEÚâãSä'å#âæçåÚ,âÜZÚ,åè éê"ëOì#íî+ïCðñïCî+ê]òíòðBò+êbóñLôõSîcî=óCö"öbë,ñÊ÷ê"ëZøùúñê"ò=òûíñüòëO÷ëýcþ3ÿLêbñê"ëñî+ë,ï>ëñCòëUë î=ò+ê VòPë,ý÷ëñ êbî=òI÷íýùú3÷êb ë Uë,ê/÷ë, ñ ø ð íö"ëñ gð ~ý+ëùúCòë, ñ ðBñ÷÷ðBýïëî=ò+ëö"ö"ò ÷ð \ëêLêbî=ò÷êbëMýëùúò+ëMøëê]òëV÷ëýðBüò+íë,öbö" ë Uí\îsòðBñ÷'íñ\÷Z÷ê"ëIöbêbñüëV÷ë, ý Uí\îsòðBñ÷Oë,êbñëñ øùúýê"ò=ò óCý+úëý Cëò ò#ê/îsò {ñóùúOö"ëë,!ý " ê/î=ò-ñíñZðçö"êbñüCë,ñZõ ñ÷ûíñüò÷ëî#öbðíë,ñøëï>ë,ñòî&ðBñïCë,üó$%cëñ éêbëî+ëî#&êbý÷ êbñ& ð í' ïëñó%>ë,ñ)( î+ê"ëúëý+ëùúCòë,ý#ðñ÷* +#í ñ &êbý÷hðBí\ùúQ÷ðCî'ý+óò+ëNøë,$ï cëñò'êb ñ ðí ' ïëñó %>ë,ñ,#÷ð ÷ê"ë-.0/óóý÷êbñðdòë ïý1óC îî+ë,ýPêbî=ò&êbý÷6î=ò+ëúCò#ëîí Uë,ý÷ë2ö/ðBíë,ñZøë,ï$cëñò 33 46587:9;<7:=?>A@CBEDGFH7= I=?J;K<7:LNMBED;@O=P=PQR;S$=UTV$;%WUXCJYR%R;<[Z\VY=]_^\XC>AV`= JYR8>PBED7;[<@a7 5b7:@C<7:;cMd7eL%7:;_=P7G@Df 7`ghV$>P@O= @aV$;7:;] i a@ 7MdjU7:7Q-k,@a;7D8Jl=`;dR;m<7:;mf 7BED_=P7;onp;8<QR;S_=<7!>G5XCJYR7;mMd7eL%7:;_=E>G7:f fP7@BED_=q JYXC>PVj@f <r<@7>P7>JR>Uste7XvV_u >PBED_=!] w 7=PI:=.j@f <x<7:fXa@;S7np;<QR;S_=G<7>\e$7:X587;oMd7eL%7:;_= >.7:f f 7:@CBED$=!qR;<<@a7!>A7!>.<JYL%@O= @;stJYRyze7:;VL%L%7:;] i J<@a7s|{~}GVdVfE<@;Jl= 7|SdXa7@a;7:f#@>A=\JYXC>#<@a7<7!>UfPV=P7:;xMd7eL%7:;_= > X@a7eY=7>R;$= 7:f\<@7>P7:Lr] ! .: EaA _Gac. c8!Y 8O YCP[ PE:cb:C: d%:_PG Gh_AaP&a .:UP!E$ . ¡$!¡ Y :& d%:_E¡ K: PE__&Y%a#a!A!?p :_P¢z: $! £U:2 p :CE:$:8r :%$E#aErP#:_P¢z: $! ¤¥ ¦\§¨©CªH«U¬®­¯:¯°±d§¨8²³Y­­¯´¡µ¯:¨_«Eªp©¨¶¸·§°E²¯:¨K¹b¯³°P¹b¯:©a«P¯:«±²³º©a«#©ªA«\²¯:°#»\­¼½$°P©a«P¾¿ º§8ªUÀz¯:°P«P©¼Á Â:à Ä6ÅÆ,ÅÇ:ÈpÉxÊ)Ë-ÌGÍxÎÏÅÐmÄ6ÅÆ,ÅÇÈÑÉxÊ)ÊÒÍcÈÑÉcÅÓÍxÔcÕ×ÖrÆhØÈ?ÙhÇ:ÚÔ-ØGÛ Ü ØÊhÈ.ØGÕxÇ:ÔxÝ Þ,ßÒà1ábÞhâ)ãYäã1å$ælçÒèAábépêaëÒÞhìîíEßhìvå$ïvå$èHå$ïvâ#êOâhå ð)ñ êò&ëhóëhô:ã ð8õõö ÷6ø`ùú)ûùú)ü ýÿþ "!$#&%')(+*,')(-').0/21436547849 !:!;!<!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! "!$#=!$# %')(?>@36')8A"B"/CB"A"'&!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! D "!EF%.G'H*,')(-').0/2143-3I8/21J';!;!:!;!<!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! K "!E"!$# %')(?>@36')8A"B"/CB"A"'&!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! L "! D %.G';MONQP.G'RJP)'R.$9TS+5'(654UG.0/2VW!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! L XZY[\]^_` a DJ!$#&%')(+*,')(-').0/21436547849 !:!;!<!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! b DJ!EF%.G'H*,')(-').0/2143-3I8/21J';!;!:!;!<!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! b DJ! D %.G';MONQP.G'RJP)'R.$9TS+5'(654UG.0/2VW!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! b cdfeW4]^gh ig]j; lkh_`m=nporqQsg]=n+trq2uWs]^gv"_ gi`wx\ y z{s]^vJw=`vJ+|vJw}vJg y ~"!$#.$'H3I.$')1+A".$'H6(-8JV68J(+5'.G9 J(27=/-.GB}R47Ul,7}36/7=A".$RJ78432!:!;!;!:!;! ~"!Ed.$':8JRJV6.$B=RJ.$')(6 3+!;!<!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;! ~"! DFM.$R*'.$36J.$')U!;!:!;!;!:!;!<!;!:!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;!#_ ~"! K %.G';MONQP.G'RJP)'R.$9TS+5'(654UG.0/2VW!;!;!:!;!:!;!:!;!<!;!;!:!;!:!;!:!;!;!:!;!#}# ZeWrng _ ý8ý e _vJv4_ ý8ý ýX # C¡¢)£?2¤¥¡¦ §©¨«ªp¬=­J¨®)¯±°"®²³:´Jµ2²I®_²¶¸·¹º»h¼0½h¾s¿+¼À_Á`¾sÂÄøÂ4º¿+ÂJ½r»h¼Å Æ$¨ÇÈ=¨¨®)µ2²6®)¨®²IÉ6®µ ÊË}Ë=Ì ¬=¯Í°"®)µ:Îp¯4ÆÐÏ©Ñ,ÆG®ÒG®)Ó®)Ò0°®)¯É-²IÉ-¬=¯4°Í°JÆG®Ô=È=µ-Ò$ÆG®Õ=®)¯°"®HÖpµ-×®ÆÐÉ:Ø)´ÙÑ®µ6®Æ$Ú2­²I×4Û=´J¨®)¯sÜ Ñ,®)µ-®)Æ0Ú2­4²-²I´4Ú2­4®<´4¯4°ÝJµ2¬=ÚCÉ6Æ$È=¯4¬=ÒÞ,¬=²-Ú)¬}°"Æ$¯JÕ4ßáà¬}²+ª?®)Ó®)µ2¬^É+×4ÆGÒ0°"®CÉ-®°"®¯Öp×4²-Ú2­JÒ$´JâãØ´ °"®¯ä´¬=°Ï©ålµ-®)®_²@´4¯4°³;°ÏæÑáÛ=´J¨®)¯sß ç`Æ$®)Ò°J®)µWÖ+µ6×`®)ÆGÉWÆ0²èÉW®_²QØ)´®µ6éÒ0Ûµ-®)¯sÜ,ê?Æ$®Ñ®µ6®Æ$Ú2­²6²6´4Ú2­J®Ó´J¯JéÉ-ÆGÈ}¯JÆG®µIÉ_Ü?ê®Ò$Ú2­4® ÖpÒ$Õ=È}µ6ÆGÉ6­4¨¸®¯°J¬^Óë4µØ´JµìO®µIÓë4Õ=´J¯JÕ²èÉ-®)­J®¯´J¯4°ÍÆG¯Íê®Ò$Ú2­J®¯íJµ2¬éÉ6Æ0²-Ú2­J®)¯Íî<®×JÆG®)É6®¯ °"Æ$®;Ñ®µ6®Æ$Ú2­²6²6´4Ú2­J®:Öp¯ê,®)¯4°"´4¯JÕ¸ï4¯4°"®)Éß à¬}²ªp®CÓ®)µ2¬^ÉÆ$²IÉ,²6ÈHÕ=®Õ=Ò$ÆG®_°"®)µ6ÉÜ°J¬=²-²Ø´J¯4Û}Ú2­4²èÉ,°"®)µ,Ñ®µ6®Æ$Ú2­²I×4¬=´J¨ð´4¯4°ã°"Æ$®Ñ,®)µ-®CÏ Æ0Ú2­4²6²6´4Ú2­J®<Æ$¨ Ê Ï©°"Æ$¨®)¯4²6ÆGÈ}¯4¬Ò$®)¯ªp¬´4¨T¬´²èÓëJ­4µ6Ò$Æ$Ú2­×`®²-Ú2­Jµ6Æ$®)×`®)¯ê,®)µ2°"®)¯sß §©¨ Ì ßå®)Æ$Ò"ê?ÆGµ2°¸°"®)µÑ,®)µ-®)Æ0Ú2­4²6×4¬´4¨ñ´J¯4°°"Æ$®pÑ®µ6®Æ$Ú2­²6²6´4Ú2­J®ÆG¨ò¯"Ïæ°JÆG¨®)¯²IÆ$È=¯4¬=ÒG®¯ ¯´Jµsé´Jµ-ØÔ=È=µ-Õ=®_²èÉ-®)Ò$ÒÐÉ_Ü°J¬?°JÆG®@ÇÉ-µ6´4é}É-´Jµ-®)¯HÛ­4¯JÒGÆ0Ú2­:Ø)´;°"®¯nÇÉ6µ-´JéÉ6´Jµ-®)¯:Æ$¨ Ê Ïæ°"Æ$¨®)¯4²6Æ$È=¯4¬=ÒG®¯ ²6ÆG¯4°sßôó=®ê®ÆGÒ0²Q¬¨öõ@¯4°"®Í°"®_² Ê ß´J¯°÷°J®² Ì ßiå®)Æ$Ò0²ã²IÆ$¯4°i°"Æ$®õOøQØ)Æ$®)¯JØ®)¯iØ)´²6¬=¨Ï ¨®)¯JÕ}®²IÉ6®ÒGÒGÉß ù+¬}Ú2­úÖp×4­4¬¯4°JÒG´J¯4Õû°"®µ¸à<¬^É-®)¯4²IÉ6µ-´JéÉ6´4µ6®¯fÓëJµQ°"Æ$®Ñ,®)µ-®)Æ0Ú2­4²6×4Û´4¨¸®ê?ÆGµ2°fÆ$¨ýü"ß Öpײ6Ú2­J¯4ÆÐÉ6ÉØ´þÝ4µ-¬}ÚÉ-ÆGÈ}¯4¬ÒnÞ,¬=²-Ú)¬}°"Æ$¯JÕÿ®ÆG¯J® ¯J®´J®=Ü:®)øØÆG®¯É6®)µ-® à¬É6®)¯²èÉ-µ6´JéÉ-´JµØ)´Jµ Ñ,®)µ-®)Æ0Ú2­4²-²I´4Ú2­4®+Ô=È}µ6Õ}®²IÉ6®ÒGÒGÉß §©¨ ßýå®)Æ$Ò¸²6Æ$¯4°ñ®)Æ$¯JÆ$Õ=®ÿ°J®)µÍ ¨ }Õ=Ò$Æ$Ú2­J®¯ Öp¯ê,®)¯4°"´4¯JÕ}²6Õ=®×JÆG®)É6®fÓë4µÙ°"Æ$®úÑ,®)µ-®CÏ Æ0Ú2­4²6²6´4Ú2­J®Ù¬´"ÓÕ}®)ØÛ=­JÒGÉß à+®¯ Öpײ6Ú2­JÒ$´Jâ÷°"®)µÖpµ-×®ÆÐÉ×JÆ$Ò$°J®CÉ®)Æ$¯ Öp¯J­¬¯JÕúëJ×®µ°"ÆG® ä´4¬}°Ïæåµ-®)®²Ü^³;°Ï©Ñ,Û=´J¨®@´J¯°ªp¬=¯JÕ=®áåµ6®®² Ñ,®)µ-®)Æ0Ú2­4²6×4Û´4¨¸® Ü^Æ$¯°"®¨ð°"®µ6®¯ÇÉ-µ6´4é}Ï É6´4µ6®¯<Æ$¯HÝJÈ}µ6¨ Ô=È}¯<Ö+×J×JÆ$Ò$°"´4¯JÕ=®¯;´J¯4°:®)Æ$¯J®µlå¬=×®ÒGÒ$®OØ)´²6¬=¨¸¨®¯JÕ=®)Ó¬=²-²èÉhÕ=®Õ=®¯ë4×®µ6Õ}®²IÉ6®)Ò$ÒGÉ ²6ÆG¯4°sß Ç"Û¨nÉ6Ò$Æ$Ú2­4®pÖp×J×JÆ$Ò0°"´J¯JÕ}®)¯ã²6ÆG¯4°Q¬=´4²O°"®¨ÄÑ,´4Ú2­Ô=È}¯Qà+®pÑ,®)µ- Õ ²6Æ$®)­J®ä´J®ÒGÒ$® ë4×®µIÏ ¯JÈ}¨¸¨®¯sÜJ¬´4²-²6®)µp°"Æ$®:Ø)´4²-¬¨¨®)¯"Ó¬}²6²6®)¯°"®)¯Ñ,ÆGÒ0°"®)µ?Æ$¨TÖ+¯J­4¬=¯JÕ4ß C£ð£?¤£ £?¡ln¡ ù+¬}Ú2­"ÓÈ=Ò$Õ=®¯4°²IÈ}ÒGÒsØ´J¯4Û}Ú2­4²èÉpÔ}È=µ-Õ=®_²èÉ-®)Ò$ÒÐÉ?ê,®)µ2°"®)¯sÜ4ê?ÆG®n°J®)µ Ê Ïæ°"Æ$¨®)¯4²6Æ$È=¯4¬=ÒG®;Ñ,®)µ-®)Æ0Ú2­4²IÏ ×4¬=´J¨ é=È}¯4²èÉ-µ6´4ÆG®µIÉnê?Æ$µ2°hÜ×JØê;ßfê?ÆG®®)µQ¬´²6²6ÆG®­Éß §©¨ýÖp¯²6Ú2­JÒ$´Jâû°J¬µ2¬¯ê?Æ$µ2°é´Jµ-Ø Ô=È}µ6Õ}®²IÉ6®ÒGÒGÉÜê?Æ$®:°JÆG® Ê Ïæ°"Æ$¨®)¯4²6Æ$È=¯4¬=ÒG®:Ñ,®)µ-®)Æ0Ú2­4²I´Ú2­J®<°4¬¨ÆÐÉ+¬=×JÒ0Û´"ÓÅÉ_ß !"#%$&('*),+.-0/.1 à®)µ Ê Ï©°"Æ$¨®)¯4²6ÆGÈ}¯4¬Ò$®Ñ,®)µ-®)Æ0Ú2­4²I׬´J¨ Æ0²èÉã®ÆG¯²6È=µ6É6Æ$®)µ6É6®µ¸Ñ,Æ$¯4Ûµ-×4¬´4¨ß î<®Õ=®×®¯÷²6®)Æ ®)Æ$¯J®ÍÖ+¯JÈ=µ2°"¯´J¯JÕ32 Ô=È}¯i¯42´J¯JéÉ-®)¯ Æ$¯ °"®µWõ×`®)¯4®=ßòÖ+´4²°"ÆG®_²I®¯42´J¯4é}É-®)¯ôê?Æ$µ2° ê?Æ$®ÓÈ}ÒGÕ=Éã°"®)µ Ê àÑ,®)µ-®)Æ0Ú2­4²6×4¬´4¨5Ñ6¸é=È}¯4²èÉ-µ6´4ÆG®µIÉ_Ü°"®µã¬´4²Øê®Æ87CÏ©°"ÆG¨®¯4²IÆ$È}¬=¯JÒ$®)¯ Ñ,®)µ-®)Æ0Ú2­4²6×4Û´J¨®9 ¯ å ´J¯4 ° :;=<?>A@CBA,×`®²IÉ6®­Éß ÖpÒ0²s®µ-²IÉ6®_²rꮵ-°"®¯;°"ÆG0® 2@´J¯JéÉ6®¯¬=Ú2­:ÆG­4µ6®*¯ DÏ©³+ÈÈ}µ-°"Æ$¯4¬É6®)¯<²IÈ}µIÉ-ÆG®µIÉ_ßlàÆG®Ç"È=µ6É6Æ$®)µ-´J¯JÕ ®)µ6ÓÈ=Ò$ÕÉ_Ü4Æ$¯4°"®¨ Ø´J¯4Û}Ú2­4²èÉ<°"ÆG®¨ÆÐÉ6É6Ò$®)µ-E ® DÏæ³ÈÈ=µ2°"Æ$¯4¬^É- ® GFIHJ>AKLKG<Cp×®_²èÉ-ÆG¨¨HÉ<ê?ÆGµ2°´J¯° ¨ÆÐJ É MpÆ$ÒÐÓ®ãÔ}È=¯ ìO®)µ-Õ=Ò$®)Æ0Ú2­J®¯û¬=ÒGÒ$N ® 2´J¯JéÉ-®=ÜO°"®)µ-®)O ¯ DÏ©³+ÈÈ=µ2°"Æ$¯4¬^É-®)¯ÙéÒ$®)Æ$¯J®µn²IÆ$¯4° ¯4¬}Ú2­ Ò$ÆG¯Jé"²H²6È=µ6É6Æ$®)µ6ÉHê,®)µ2°"®)¯ ´J¯4°f¬=ÒGÒ$N ® 2´J¯4é}É-®=ÜO°"®µ6®9 ¯ DÏ©³+ÈÈ}µ-°"Æ$¯4¬É6®)¯ÙÕ=Pµ =â}®)µ;²IÆ$¯4°hܯ4¬}Ú2­ µ-®Ú2­É-²²IÈ}µIÉ-ÆG®µIÉꮵ-°"®¯sQ ß F HJ>AKLKG< Æ0²èÉ°"®S µ Rû´Jµ-Ø)®)Ò$é¯JÈÉ-®)¯ôÔrÜÔ=È=¯ °"®) ¨ Tè®ê®ÆGÒ0²®)Æ$¯ Ò$ÆG¯Jé}®)µH´4¯4° ®)Æ$¯µ-®Ú2­É6®µHål®ÆGÒ$×4¬´4¨ ¬=×JØ)ê,®)Æ$ÕÉ_ßàÆGS ® 2´J¯JéÉ-®°"Æ$®ã¯4¬}Ú2­ûÒ$Æ$¯Jé"²n²6È=µ6É6Æ$®)µ6É ê?´Jµ2°"®)¯Q×4ÆGÒ0°"®)¯°"®)¯QÒ$ÆG¯4é=®)¯ãå®)Æ$Ò$×4¬´JU ¨ GVXW >AY[Z\*]_^ W >`YaZ\ Ü"°"Æ$®pµ-®²IÉ6Ò$Æ$Ú2­J®N ¯ 2´J¯JéÉ-®°"®¯ Ê bPcCdfe,ghcCikj%cl`m`n(oqp#rQsutqvfwx?yzG{0|~}vfwx?yzG{%cCl[ cCb%lAm p#i( cCmAl`i#acCi8p#i( 8 cbPcCdfe,ghcCi j%cl`mAn(oap#rcCcbf cioqpdfeS6l`cC cCb l`ck,?*,[bP #lAi(oqghcCi[bgPlAcCbgp#i( l`c8rlghghm`cbPck, *,[bP #lAi(oqghc0n#l`m cg ciEiadfe(ghcCiki#qgPcicgPdq`%*l`c?.abf l`i(oXgPcikcbf ciEhamoqi#[c habhghl`cbhg*p#i( 9e(oamAn#l`cbhgCn#l`ip#b8i#dfe9cl`i#cJ,?*,[bP #lAi(oqghcE(n#bhl`n#mAcClAn#gC.l`cChc6l`bf #oai#il`r moXghgNoan#ac¡Icldfe#cCbg¢*lAc£mXghghcb #cCNn#lhm`oai#¤= #lArcil`ai(oamAcCicbPc ldfe(noqp#r¥s¦jkp#rJ§GoaPhciOi,p(i" #ci¨cbPcldfe3© «ª «¬ ­® « eoqm`m`c,?*,[bP #lAi(oqghcCi¯ cbi ° p#i([gPc l`cl`i¯ cCb*±ncCi#cm`lAcCacCi.*lAccCb¤= l`rci(hl`ai(oamAcEcbPcldfe(hn(oqp(r²sGj.rp(³ ip#i´CpcClAi#cCr¶µ? l`rJcCi(hlA[i(oqm`cicbPcldfe(hn(oqp(r·s¦6¸cCbhclAghcCbg¹cCbP cCi,lAi( #cr¶oap(dfe l`cº,=*abf l`i(oXgPci cb ° p#i#,ghc*ncCbhdfhldfe[gPlAag¸¹cCbP #ci¸»Ip l`cChcr¼»IcCdf6lAbf ½¾c cCr¿ki#aghciÀ ck¤? l`rJcCi(hlA[i(oqm`cilAi(abhnoqp#rÁs¦j#nIcbcClAi#cCi9»Icl`acCb6 cb.oap§0 lAc  p#bh´Ccm6 cnIcl`acCabf i#cghcioap#rcCsuÃÄ=w?ÅAÆÇA´Ccl`qg¸cl`i3clAghcCbhcCbS¤= l`rci(hl`ai(oamAcCb lAiqbPn(oqp#rÈnIcl`acCabf i#cg8sGÃÄ®w¾ÅÆÇA .cCb¹nIcl`acCabf i#cghc*l`i(qbPn(oap#rÉsGà Įw¾ÅÆÇ 0cCi,ghe(amg lAcº,=*abf l`i(oXgPciN cb ° p#i#,gPca cCbhcCiOÊ6cClAe(ci§u[mA[cJnIcbPclAgPkl`r²l`i(qbPn(oap#rÁ cCbk,?*,[bP #lAi(oqghcCi3sGj*§uc¾gPacm`cag8l`gC « e`E lAc˺,?.[bP l`i(oqghciÌl`i( Ìi#ldfe,g¯[bgPlAcCbg~.l`cËncClA[c[bP i(cghcCiÌl`i(qbPn(ap#rc suÃÄ=w?ÅAÆÇAÀcbf ciÎÍ[aiÏki#aghciδCpÐki#aghciÎm`cl`i#cbEn#lOhdfe#m`l`c³am`ldfeÌnIcl`rÑm`cgh´ghcCi ki#aghcin#´C8*moXgg cClAi(abhnoqp#rcCsGjlAr·nIcl`ac[bP #i#cgPci£oqp#rsGëÄ=w?ÅAÆÇAip#b i#dfe3 cCb ° p#i#,gNac¡Icldfe#cbhglgC¨Òl`cbPnIcll`gN6l`dfe,gPlA¸ #oq³9lAi! ci¢m`qgghcCbhi cC nIcl`ac[bP #i#cgPci9oap#rcCsuÃÄ=w?ÅAÆCÇA*i#ldfe,g8i,p(bk #lAcº,=*abf l`i(oXgPcaÓ[i( cbPi9 #cb ° p#i#,g oqiOldfe£[cCh¡cCl`dfe#cCbgkl¾gÔarlAgkp(r§Go[hg8 cbEµ?¹l`i(abhn(oap#rU ciOcbPcldfe¨© «ª «¬ ­ © ºIª ºÓ¬ ­=Xl`iJ cCrÏ l`ci ° p#i#,gPcoai#acCabf i#cghlAi( oqe#cCb0 cbÕ.oarJcµqcbPcldfe(hn(oqp#r sG6 Ö×GØI×GØ ÙÚ,ÛÜ8ÝCÚÞß%àáaàßÚ âãqä(åaæIçè,é[ê#ëIìOíîqë(ïðañ,íïqæ(ï(ç,òéIìóîXëaêô?í«õ ö÷ø ëè¹ùúÓç ÷ ï¢â ÷ åqæû ÷ ë ÷ ä!üþý#å ÷ ü,ë ÷ÿ è#ï ÷ ç ÷ û#ïaæ4ú,óï ÷ ï Xëè ø ëèùñÓça ï ëæ #ïã!ï(ç ÷ ï#ì!ð XûIçêIï ÷ ìçaå ÷ îã,ï ÷ íïqæ(ï(ç,òéIìóîqë[ê !#"%$&%('*)+,+-.!%0/-1 !-+3254.!76&&%$68 :9 ; <=6,%0=6&%$7%&>?@ AB &>7C%&D<3=)-@&+FEBGH!+!=6&&%$I J&K >&.! C%&D<!-.%!#"&$&%3E0E:GMLNPORQTSU VW %@%3X@&.687YD#Z?@<&([\!-=.Z?@<&]G^2 _`QbacedG f<+g%,!.6&%$]G!,h1 %!-+3$@&3@&K > i-jkQTlmlnO-Go!3f Z%?@<&pG2pqrOtsRuvlndGf<%+g%,!-36&$]G^!% h-1 !-+.&wgF@&&K >,i jkQ`lmlnO !( y _`QTaced{z )+9|&)&K > +fW}t2 _`QTaced~ x B y qOtsRuvlndz )+9|&)&K > +fW}2 qOsRuelnd~ B C%&D<3=&,EBGM!=i jkQ`lmlnO J&K>BG*)@!% y _`QTaced !+F@ %$.!FE7E:GM)@!y qrOtsRuvlnd !+{K > -!FE=E,!F)@!L NPORQTSU GH!-. %!#"&%$&&% E=EW B&%,E ,t75t& HTTT¡ £¢% ¤¥¦§W v¨ vª©r«¤¬­®¯±°n§³²µ´ ­¶¶H¶®¶·¢%b £¥¸P¢%b¯* v¶¤b¹¶­T º§W v¨ vª©r«¤¤t®©r« ­®¤t» e¡¼«¨B½W v¨r¢% v¶ ¾À¿-b v¢% ¨W§W v¨ vª©r«¤¤t®©r« µª¤ÁW ¤ « ¨­®¤Ãv®%Ķ¢% v¶Å½W vª©r« µÆB®¶´& ¤b©r«T¶M T¶ ¯Ç­¶» » v¬- v¶ v¶^§W ¨ b©r«^¬ vĶ¢% ¶¾ È v» v¬- v¶M¤t ¡¹b»bb©r«^ vb¶H¥¦§W ¨ b©r«¤¬­®¯É°n§³²W®¶¢^ vb¶§W ¨ b©r«ËÊ ÌÍ ÌÎ ÏÌ·Ê ÐÍ ÐÎ ÏѾ È ¤®©r«&º¤tb¶¢Â5½³T *¬- v¨ vT¤Ò ¨½Ó«¶& ­bT *Æ:®¶´& Å¢%b ÔT¶¢% ¯±­¶» v» v¬- v¶ ¶Ë§W v¨ e¸ ª©r«HTb v» v¶¾¦b k¥¸P¢%b¯* v¶¤b¹¶­T º§W v¨ vª©r«¤¤t®©r« Õ¬ ¤Á v«&Õ­®¤Ãv½W vWÖe¸R¢%T¯* ¶¤tb¹¶­b v¶ §W v¨ vª©r«¤¤t®©r« v¶¾ ׯآ%b ¤ (Æ:®¶´& ³­¶Ã vb» ¶ºÃv®£´Ù¶¶ v¶£´ ­¶¶Ú¶®¶Ú¡¹b» ¶¢% v¨¯Ô­Û v¶ Ü ¹¨»¿- v®»& ­¨¶¤t» v½³¶ÔT¨r½W¢Ò v¤t¨rª¢%©r«Õ v¶¢Í ­¨r­®&´¹¶Ã v¶&¨T ¨t¢%b :Æ:®¶´ :Ãv®Ä¶¢% v¶Â¢% ¨ ¶Ì&¸Rݹ&¹¨¢T¶­ ¶ b¯7§W v¨ vª©r«*Ê ÌÍ ÌÎ ÏbT » ¶¾ÞB¤ ½³T¨r¢Ò¢­¯*T ¬ »¹¶¶ v¶  ¯*TÌ®¶¢ÌÎvT¯ßÖe¸R¢%T¯* ¶¤tb¹¶­b v¶ §W v¨ vª©r«¤¬­®¯à°náµ²¶­©r«o¢% ¯â ¨¤t ¶HÝÒ¶¹ v¶ y SeOPlnORQT_ãl à ®·¤t®©r« v¶Â-­¶o¢% ¯É¤tª©r«H¢% v¨ ÆÀn­¢; vbT ¾MäR¯±bb¶´ ¶á5 vbb¬­®¯ Ü ¹¶ y SORlnORQ`_`l ½³T¨r¢¯*`ºÌ½W vT v¨Ú» ¤®©r«&Õ®¶¢­¶ å ¢ v¯ÉÝÒ¶¹ v¶Â Ü ¹¶o¢% v¯É­®¤¢% ¨æ®©r«ç%n­¢ Ü ¹¶MÌMTb¶´%¤½W vT ¨» v«& Â-­bT ºÆB®¶´& ¢%b Õ¨ ©r«&¤¢­ Ü ¹¶^bb v» ¶­¶» Ãv T» ¾ È ¤®©r«&µ½³T¨r¢¤t¹b­¶» Â%¬b¤³¢ v¨µÆÀn­¢ Ü ¹¶^Ì^b¯ §Wb­tÕè. v¶¢% v ¾ È ¶­®¤¹M½³T¨r¢Ë¯kTÕÌÎb¯é¨ ©r«& v¶á5 vbT¬­®¯ê» ¤®©r«&®¶¢;T¯*¯* v¨ ½W v¶¶¢% v¨µæ®©r«ç%n­¢ Ü ¹¶ÅÌÎ%¨ ©r«&r¤B½W vT ¨» v«&(½W v¨r¢% v¶^­bT Æ:®¶´& Ò¢T Tb¶´%¤³¢­ Ü ¹¶ bT » v¶.­¶» và vb» ¾.¦b o殩r« M¯*TkÌÎ:¢­® v¨Ô¤t¹b­¶» Â:¬ª¤Ô¢% v¨*ÆÀn­¢b¯ë§Wª­tÔèÀÎ v¶¢% e¾¦­¶¶·½( ¨¢% ¶·¢%b £§WªÓt v¨Ãv½³ª¤©r« ¶o讶¢·èÀλ v稼%mÂ-®¯âà ®·»®©r´ ¶Â¹¬ ¤T Ò vb¶ ¶ÆB®¶´& ¹%¢% ¨³Æ:®¶´& Ú­®¤³¢ v¯âæ%®©r«¬ ¨ b©r«^¬ T¶«­T v¶ ¾ ì íî\ïðvñrîòótôðeõ¡òö÷ðvöHøWðvñr÷%ðvöoóùúbúû-øWðvúªürïðºý:òöþÿð òürï- ðvñðªürïHúbðvôðvöû Ú ò µöóürïúbòM÷îöîürï·ôð óòürï&ÿøWðvñr÷%ðvö ûùË÷Tðùùñr÷böîÿðvö·÷%ð ñÒý:òöþ&ÿðû ÷%ð ñð ö ùùñr÷böîÿðvöWðvñðªürï·úTð ôð öûîòürïWðvñðªürï·úTð ôðvö BóÕø!bñr÷oðböð"vøWðTÿð # R÷*ðvöó$Tùöîúbð%(ð ñð&bürïóóòürïðûBöîürï.÷%ð&ëôúTð&bürïð ö3ý:ñ$bö"&'3ø!bðo÷TðHð ñótÿðWðvñð( ªürïóóòürïð*öòñº÷bð ó$Ô îú)Tÿ*· òö÷+ , îòóôðeõ.- ïñtÿ/Å íîv" òø!bñ÷+-- ðvñÚ÷bð1-0 ð&Tôðvñ2bö D ôðótòürïÿûEªók÷TðMýÀõnî÷%ð1F ùö5 òö÷G , 3 ð ÷ð4- ðbôðvùñ÷öðeÿðvö56bö7 ñ8 îò:9.;=<>@?BA/C£ bö·ðböð&( úªîÿÿð ö÷%ð ö=2µ úªóúbðeÿ8e" ÿð óø!Tñr÷oø!bðH ð ñð&`ÿróI- ð:÷%ð ñJ% òürïðHHTÿ òö÷ , ôðóürïðvïð öûôð' ñ8%- õmÿWù^ ÷ðvñK( ð ñð&bürïLv" ø!ªóürïð öM* òö÷1 , ð&Töð ö\ý:òöþ&ÿ û " ø2p ýBòöþ&ÿð îòóÚ÷%ð&N òürï- ðvñðªürïO- ðböïîúTÿðvÿ&· íîPbö{÷%ð öGW ú7 ÿtÿð ñöOF ùöO;=<>@?A&:C öbürï&ÿÚöòñk÷Tð ùùñr÷böîÿðvöûpótùö÷%ðvñö#÷bð\ý:òöþ&ÿð^îö{ó$bürïôð ó$' ð&bürïð ñtÿ£ø³òñ÷ðvöû]þQ ööð ö#÷Tðótð öòöMîöôðv" ð&Tôÿ³ø(ð ñ÷%ð ö= R S=TUS=TWV X Y[L\2]&Y^`_baca=_`Y Z dfehgijlknmoqprlsutvwxjxky/o ssnr y/ofx{z@w}|~6@}$~ 6 }$l / rmM k tvwfxjxkyno s/fhrqp5wr xk wfxjxkyno~6}$~ 6@ } rm rm6Mdfeexr mxk w| kxkpwfxjxkynoekhxgx Z@W@B B¡lk x¢xkqex x £ ihmx z¢)|¤)|E t)kn¥(W@ ¦+xk wfemm§ksm ¨} mofx j©¥x{|i xhjªk (W@ ¦gxs xky/ofxjmxOr m gxq«xkngm ¬ xj x pr­K ®6 xesx¯z°¡iehgx xnp±¥ ²kqs5³r ³´ x xµxs&vwfxjxkyno ssnr ynofxkp ¶ mxjhrqpjxynomlsG·i/p±¸xg6¹° ·» eybz(W@ ¦ º ¼} ¬ o²kqex· xk wlehmm½ksm ¾} ik¥³À¿Ál Ã} mofx &vwfxjxkyno ssnr ynofx`zIJŠ@B/Æ zjlybz¤· |~ 6@ }$f Ç} ·§» eybz·l nÈ} xesx5·§»Éjlybz·l j©¥x{|i xhjªk ·gxs xkynofxhjmxÊr m± gxq«xk/gm ¬ xj x t) ¡iehgx xnp±¥ ·i jlybz@W@B B(G²ksu}Zr µ´ x x³xs vwfxjxkyno ss/r ynofxk ± xnpwfxjxkyno~ @ }$)|+k ± xj xkngxihj q xmx µË mjr mqrj xs ¶ mxjfhrp xsb|1ek s5·inp j©¥x{|i xhjqr m}| xj§kpwfemm³gxs xkynoxjm±kqsm§k xnp xj¥ x xm}| gxq«xkngm ¬ xj x pr­6 KÌ ÍÏΠгÑÒÓZÔÖÕ=ÑÒ×ØÕ²Òb×ÙÑ$Ú ÛµÜ2Ò=ÝÜßÞÑ$àá âäãå6æçèéêãëfìéíëîïãäðã&å$ã&éñ¹òfìóîôêªólãëõhö$é÷hö6ãéëãë+øfù=úqûüqý=úþ&ùEÿ íqë ÿ !èã&åLìéUñ¹òµîhôìLèãå Ië &îòïäèãå )ôë ö$ã Wë !êôïBö8é ïé éãå$öLêéBöZèãå Kéã .ãPèã&ì ÷ã/ì$îê*ö8ãë1ð6ã&å$ã&éñ¹òì$óîôêã&ì .ïí÷ë 6ã&å$÷qéóö âIéã ¤þ ¤û úqû å`èãë ð6ãå8ãéUñ¹òì$óîhôêãëö¹ì å8éUñ¹òqö`èãê lãéUñ¹òãå ïUîö íqë ÿ èîJèéã Iíqëì¤ö8å$ô qö8éíqë*ãéëã/ì)ð6éë å$ófîhôêã&ì`ólãéã&éëãåEôëì$íå$ö$éãå$ö$ã&ë Øëíå¹èëôë÷ qíë )ôë qö8ãëÊîhóò hë÷qé÷ éUì¤ö íqëPèãå Øë &îhòï`èã&å }ôë ö$ã .ë Iôëè èãå Kéã .ã*èã/ì!ð6îôêã&ì Wïíq÷Hë âIéã úqþ/úqûüqý `üqý=úôëèµèîqì Øë &ãé÷ã&ë³èãå åLãéëã&ë³ðã&å$ã&éñ¹ò÷qã .ôëèãëã&ë )ôë qö8ãßèîhôã&åö )ð6ãé ¤ã/èãê Jëíhö$ã&ëMéê äîhô öç@ðã&å$ã&éñ¹òfìóîôê !éå¹è ãéëã )ëö8ì8ñ¹òã&éèôë÷Ê÷ã(ö8å$í lã&ë µâIéã&ì$ã )ëö8ì8ñ¹òãéUèôë÷ólãëõhö$é÷hö qíëìö8îëö$ã lãéö ìö$ãòö åZèéã Ië &îòïßèãåLéê ØîhòêHã&ë³èãå Øë .å¹îh÷qã îhë÷ã &ãé÷hö8ãë )ôë ö8ã ªâßîì ôñ¹òãë éëèãå{ólãé÷ãíqå8èëã(ö8ãë ö$å8ô ö$ôåEèîôãå$ö .ïí÷ßë Kéã .ã!èã/ìEð6îôêã&ì Øë &îhòï èãåKîhë &ô ã&é÷qãëèã&ë )ôë qö8ã ê ôïö$é ïé &éã&åöKêéBö!èã&å hë÷qãäèã/ì ôñ¹ò Wîqèã&ì éê Iîhô öç@ð6ãå8ãéUñ¹òìófîhôê íqë .ïí÷ë Eâßîhå¹îhôìãå8÷éóö6ì$éUñ¹òMãéëã ßã&ì8îhê*ö8ã éãë íqë åIèéã*ð6ãå8ãéUñ¹òì8ìôñ¹òã $ (')+*, .-0/1 2+*3 ;< = ! = C" F ? $ ? 879 ? A : : B H"6 V> n ? dn ZY cb C" XW B[ I7 VW $ ,U ^% 7 #" ?@ @ ! E% ]\ ? 2 G**- ) &% IJ LKNM&O1PQSR)T1?% "6 ? ? B[ 45"6 (> D 1" edf &C % `_ # HghiN! a u ]% 3%a ]% C" lk5@ jg m7 Do aq LKrM&O9P#QHRsT1t"6 1" CpH ? pr­6 ¥ v wJxSyzl{|zJ}<~#z0~#S z l2 ^a^52?Aj A`A]?2 ¡:¢£ ]a¤1&¥m#¡:#§¦©¨?2ª«,¢¬­3I®¯?¡¨°]¨?#¡:` ¬­#?.#a±§²,¢1®³ ´]#«,¢? «,ª0µi¶ =¤1`A]4 :¡¢£ :.s¤1&H¥i3¡3 ¦©¨2ª?«]¢¬­3t®¯¡·3¶i3( ¬­#? ]3^¸¹3¡ º¼» ¤1 ¬­#?.?«,± ¥m#¡:#§¦©¨?ª?«,¢¬¾½N¥¿D¶ ¡:¤;9¢¡t¢¬À¶m# 3¡HªE# ´]3]¡©¤1# ¥l²,¢¬­3¡2» ¶m# #¡ 3¸ Á ´.#.¬­¬I3t&|´] ª1 |­A¬­#2 ]3^µ]¤«]´.ª +&|IA9]¡©¤1« 3Dá:AÄe¢?£ 3¸ Å«]l¨3Æ] 3µ¤«]ÆI¤13¡#¡©4 :D¥i3¡3 ¦©¨2ª?«]¢¬V«,¢m¤#¡#¡©2 #BA.¡:¤?«, A£.]?2 ¡:¢ #¡ ¶ ¡:¤¸ÇA&I´]3:¦©¨ #¨ Â?«.¦©¨¤13¬q´]± #§¦©¨#sȦ©¨#¬H«`¶ ª3¡3É ©Â®¯?¡I¤13hº]A¥m#¡:C» §¦©¨?ª?«]¢¬Ê½r¥¿jªE3:¦©¨¡ #ªE#0¸|Ëj.DÌ43¤#¬Í$, :#¤3m¥m«]¢¬­3η## ´, i# ÏE# ´]3¡i«]¢1® ¤1 Ð;¢¡:·##± £9, :#h¤13Ì4#¶m# ± Ñ]¸;ªE# ´]#.¡:¤C :#¥m ?²,¡:ª?«,¢?¬I&½NÒÓÔÖÕ×&Ø ¿µi¤1#¡­«,¢? ¤13¡S·#¶m# 3A9]¡©¤1 ?« :B½N1»©Ñ&¿$£.]?2 ¡:¢ #¡ $¶ ¡©¤¸Ëj.¬¾Ñ.¸ ªE# ´]3]¡©¤1C :#¥m?²]¡2» ª?«]¢¬Ù½Ò^ÓÔÖÕ×3Ø¿·#3´] Ŷ 3¤#¡ÅÚ]]Ì43¤13¬<$, :#Û# ÏE3´.#¡A«]¢1®i¤1 IÐÛ¢¡:·#3±£9] 3 ¤1&0Ì43¶i3±§lº1¸+ª3´.#.¡:¤1?C 3¥m²,¡:ª?«,¢¬­&A½NÒÓÔÖÕ×&غ]¿Cµ9¤#¡«,¢?m¤13¡l¤¡ 2 :# A9]¡©¤1» ?«, ½N1»Öº.¿j£.]?2 ¡:¢ #¡ e¶¡©¤µC :¦]¸¸jA#¬ÜÑ.¸|¥l«,¢?¬n¶m#¡©¤13­®]± ´]± ¦©¨H ?´]3:«,¬Â ½1»©Ñ&¿ ¥l²,¢¬­$ªE# ´]#.¡:¤C &¸ lrÝ ¹2Þ^52?A9A? A¨°]¨?#¡t¤¬­#2 ]?«]±¥m#¡:#§¦©¨?¢?¦©¨H±§²,¢®³ IÚ.]¬ßÄe¡:·3è#¡I´]3?«,¢?)«]ª^µj¶ ¤1 )º¼»Ö¤1 ¬I3?.?«,± ¥m3¡3 ¦©¨?:¢?¦©¨]µi9¢¡¤«]Æ; ¬­#¨¡¥l²]¢¬­#a¢?¤2 :«, 2 ¬­É º A.¡:¤?«, 3¬­É (BA.¡:¤?«, 3´]&2¢¦©¨. ¶m#¡©¤1#¬Â¢?Æ?¸ lr ¹2áàânã^20ä(ã5äÊ åD^Åæ2ç ADèjéH·33·#33¡´.#ªE#B2§¦©¨B«,¢?¤13?#± ª3B$¡: #¡: #^µ9¶ D¬êº¼»Ö ¬­#?.?«,± #0¸ ëEìí.î2ï.ð^í.ñ#ìjòóEôLõö=÷ùøúûrü&ý9þ9ÿ ªE#5º]f¶m«]¡l3ͽB± ]´­¿ ô2ñ1ô2î õ1í.î4ô©ö÷XøLú ûNü&ý1þ9ÿ ªE#|º,f¶l«,¡l3ͽNB±.´IE¿ í.ñ¼í]î2ï.ð |ï.ð^í1ö=÷Nûrü&ý þ ª35º, ¶l«,¡&!" NûNü&ý$#%& ' ( )+*%,.-0/214356/872/69:56,;3=<>76/6?A@B,DCEFG,H*JIAKL1M56,;30E"FG,H* N KO=1M14356*%/2PQ@B,H/SR*%/25T9VU%,H*%WX Y[Z]\_^ `acb;deaf$Z]`HY`gf$Z]h ij hilknm aof Zp`HY[`!aq`!Zsr^\q\tjr^`"j hfAf$`hAY[`!aq`!Zsr^\_udejv2wefdexQ\tZsr^ dey]y]`lz|{~}l|af$Z]hdq`!hMj hf2dypy]`{~} aqf Zphde_`hMj h_`!a\qr^ `!Zsf$`!h Z]`\_`aqdj\q\t`!_!jh i Zs\HZ]h2f$`aHoadz$Z]\;\_`!^ a;j ha_`gdey]Z]\t_Zs\_r^ `\_^dypu2bHZpaf&\_Zsr^&knypi`!hf$`vaqZsrMu`gf$Zp`hw j v0f d\;oaquyp`v!jy]\_`!h h i`!h v8vA`h8Zpv!jM\_jr^ `!hf$`!hMY[`!aq`!Zsr^y]Z]`!i`hMf$Zp`loj h _` j hfMBHv8Zpf$`h } aqf Zphde_`h " ¡ j hf4 ¢n£|e ¡ wf ^Bf Zp`o"j h _`o^deu¤`!h4f$Z]`oiy]`!Zsr^ `!h{¥} |af$Z]hdq`!h j\[f$`v"j h [ dehhvMdehMh|j h&f$`hoj h; e¦§G w e w ¡ vMdr^ `hwZphf `!v vMdeh2`!a\¨f$Z]`4{¥} |af$Z]hdq` deh f$Z]`oz|{¥} |af$Z]hdq`j hfDf dh hVf$Z]`oz|{~}l|aqf$Z]hde_`odehf$Zp`{¥} |af$Zphd_`^©h iegBd\ ª y]`!Zsr^ `Qy]©xe¨\tZsr^2vAZpl vMdr^ `hw\_|fdex\tZsr^«c ¦B¬n£ w | w £|¡ `!aqiZ]u$g8df j aqr^«Zs\4i`b[©^ aqyp`Z]\t_`!wf dx \_Z]r^f$Z]`4u`Z]f$`hoj h _`4Z]hZp^a_`h }l|aqf$Z]hde_`!h6j h_`aq\qr^ `!Zsf$`hw$_aqeqf$`v­deu¤`!a \tkna_Hf `!aq`!h2`r^_`h} |af$Z]hdq`!h !j2`!aq`h h `h2\_Zphfwf d8f$Z]` aqvAvMd\q`!y]yp`Qf$`!a;z|{w$u !b4of `!aH{¥} |af$Z]hdq` `h\t®a_Zsr^ ¯ ° 3cPVWo@B*!1D/6PVU²±GPDRW[PD52*%/29 ³ adr%_Z]hdy´[d\_rdf$Z]h iDZs\t[`Zph `µ`a_u¤`\q\_`!a__` dq`!h\t_aqj _ja[j a;Y`a_`Z]r^\_\_jr^ `c Zp` ¶f$``f$`\6³ adr%_Z]hdy´[d\qr!df$Zphi«Zs\t&`\w¨f$Z]` dj `!a2f$`!a2·|jr^ `¸Z]v¹u`Zpi`!aqf$h`%_`h Y;dej vºµh» y]i¸h²¼ ¡ dej$k» t½ ¼¾ ¡ !j¿a_`gf$j !Z]`!aq`!h¸lZ]`\_`\A\typyv8ZÀ8Á¨Z]yÀkn` µh6\_a__Z]`!a__`h aqadÂ|\[deys\;u¤`!Z]i`!aqf h `%q`!a¨·_aqj _jaHj hfÄä`!Z]i`a_h6a_`gdey]Z]\_Zp`at;b[`!af$`!h df$j ar^2bHZpaf6f Zp` hb[a__`!Zp[µh¸»ÆÅÇÉÈgÊ %Ë&Ì¿ÍÎ dj$k"» y]i8h¼ ¡ µ`!aqu`g\_\_`!a_ Ï;ÐtÑ ÒSÓtÔ¸ÕÓtÔÖ×8Ø ÓÔ«Ù[×|ÚÛ¨Ü[× Û¨ÚÝ4ÔÓ_ÞSß¨Ú àá¤×$Ótâ"ã¨àäåæàÕ|áàØlÓ_ã¨ç¿àÛ Õ è Y[`!Z]vé³aqdrqZphdyQ´[d\_rdf$Z]h iJb[`!af$`!hf$Z]`¸z|{~}l|aqf$Z]hde_`!h²f$`a&oj hq`æbHZ]`¸u¤`!aq`!Zpq\ i`^deu w[Zph²`!Z]h `vê\_a__Z]`!a__`!h²Y[Zph©eaqudej vëi`\_®¤`!Zsr^ `!a_ Zp`{~} aqf Zphde_`hìb`at{ f$`h6^ Z]h i`!i`h2\tqdetHZ]h2`Zph`!vu¤`!Z]i`af$h `%q`!hY;dej vZ]h\tatqZp`atq`!h aqaqdÂ$\bHZp`kny]ie i`g\t®¤`!Zsr^ `atg l`a&í«j aq!`!y]|h eq`!h²µvëY[Zph©eaqudej vë!`!Z]ie2dej$k4f$`!hî`aq\t_`hï\_a__Z]`!a__`h aqaqdÂw b[`!ysr^ `!aVdypy]`µaqv8v8`!hf$`!hð{¥} |af$Z]hdq`!h«`!h_^©yÀg `!aA!b[`!Zp_`wy]Zph`6}Qhe_`h Z]vñY[Zph©eaqudej vñv8ZÀf `!h«z|{¥} |af$Zphd_`h`!Z]ieVdej kHf `!hð!b[`!Zp_`hð\_a__Z]`!a__`h aqaqdÂw f$`aQdypy]`AZpvñypZ]h `hðäb[`!Z]i2h $r^µa_v8v8`!hf `!h¸{~}l|af$Z]hdq`!h\_a__Z]`!a_du i`g\t®¤`%{ Zsr^ `!a_6^deóòou¤`!h\_¿`!Z]ieÄf$`!a2!b[`!Zp_`wlaq`r^_`æ}Qh eq`!hZ]vôY[Zph©a_udej v¹v8ZÀÄf$`h z|{¥} |af$Z]hdq`!hMdej$kf `!h&b`ZÀq`!h&\_a__Z]`!a__`h aqaqdÂwf$`a[dypy]`lZ]vÆaq`r^_`h6äb`ZpiVh $r^ µa_v8v8`!hf `!hÄ{¥} |af$Z]hdq`!hÄ\tatqZp`atQdeu i`\_®`Z]r^`!a_l^d{;j hf\_&b[`!Zp_`aQh õ `f `!vf$aqm u¤`!aqypZ]`!i`!hf$`h aqaqdÂAi`^ `!hä`!Z]i`a"!j6f$`!h õ `!b[`!Z]y]\[f$aqj h_`!a[y]Zp`i`!hf$`!h at{ adÂ|\w$f$Z]`bHZ]`Qkny]ieHi`\_`%_!¨\tZ]hf ö`gf$`!a h$kÉdh iµv aqadÂ^d !b[`!Zcä`Zpi`!ag `!a¨`aq\t_` a_adÂ^del`!Z]h `h¸Ã`!Z]i`!a !jv÷ypZ]h `h¿j hf¿òoZ]h `h¿!jvøa_`gr^_`!h aqaqdÂð `!a8b`ZÀq`6y]Zph` a_adÂð^d8`!Z]h `h ù ú¤ûüpýû!þlÿ$þqü_û püû ¨þqþoü û æÿ $þqü_û¸þqû_û¨þqþ þ% $ û!ü _û!& !"# '!"_" û!þ$ û ÿ!û!ü]ý(*)û $ ûü+",$ü]ûoü-$þ./¤û!þpü]û!ýû ! û 0¨þqþlýû"1¤û!ü+ û!þ_û23546#7#þ$ü!8qû (9:)û&$ûDûü û¨þqþ$þ! qû!þpü]û!ýû ! û0 3;46##þ ü!(_û 7 üpû=<>$ûþ¨ü?$þ./¤û!þpü]û!ýû *3 $û@l þ_þ8 ýû&"1¤û!ü+ û!þ_û3;4A#7#þ$ü!(_ûlü+"% B6 * þ,CEDF üpû=l þ_þ*"6" # þ_ ü]û!þG!!HAüAú¤ûüpýû!þGIû!þ"_û û"_ü!,J"1!eþGKE "_ü üpûKL7! ûüH$ û!þG¤ / û!ü]ýû # þ ûMq û Lq þ! þ&%G B üpû&t" ûKLq þ þ6û NOEE! ýû&" ü_ û _ û[ P û!þqû!ü+!"/!(@% QSRUT VXWY[Z]\A^A_a`Wbc^AWY,d*`fehgji k6l7mn o(pn(mmqsrtl!o8rtqhu8pwv ' ýû # OAûyxCz{!yx,|}"tü!ÿ $ û!ü '#þ*7ýû NI #Ey~6/*)û _û,%Jû û"C~6/*)û !([ ûü ûG'O8 û!þE"L*.!"t" ûU%2 B üpûN'#þ! ýû"tü!&üF$û F"#þqüpûþqû lþ_þ*" z! ¨ | ýû" 1 ûü ûþ&%JA"#Ep û=(p ûG~6/) û _û¨üxCzS!xf|6( ýû!ÿû!ü]ý( $ û!þ$û , $ ûþ_û@L*!.!"_" û ü[ P û!þqû!ü+ w w Cp ü]û!ýû ,% 6!w7K& *! S*=6 ¡¢£E¤E¥§¦f¨¥©¢ª« +*¥¢+j¬­¢K* ¥®*! ¯ A ¥® F6* ¡¢£ ¤E¥°¦C±²'f³ ,³´*µ ª« ¢7¶¡8·(¥¥®¬O¢¸'¹º£E¤ ¥°»:¼ ¥ ¹º¤E¼E¥!*¬K·(½ ¥­£E¬O*¥¾ª« * ¥C¿JÀH ¥¥=ÁN±Â Ã: ¥6* ¡¢}¬O¢«*¬Ä*!! ÅEÆ ¼E&Ç: +¢2!·8¢&²E¤GªÈ¥»:¼ 2µ ¶OÁ ¨ ¼ Ç¢&²8µ ¶K*¬É¡7¥!¢¥=*! Ê Å Æ ³cËG*¢AS¡ ¥ ¥@¤E+ ¥*!U²¤Oµ ¼(¢'*6»: ¼ES£E¤E¥@ÁG±( ÃC¥!ÌC E³ ÍÎ!Ï 7Ð8ÑÒ(ÓUÔ8Ô Ay*!:*A6* ¡¢G£E¤ ¥¦ ± ¶¥!F¦f¨(²G¬ÖÕ«Â ×w¿ ×:Ø Ãf ¼ ¥,²*¤E¥ ·(¥!¼E µ ¼(¢Ùª« * ¥,³Ù»:¶¢c¶ ¢}¬K·E¥­¬O¢}×¾¥KÁ ± ²E¶¬Ú* ¥K¡7 ¥!¢ ¥=*!! Ê × µ ¶FÛ!¥* ¥,³«ÜÙ¤E¥* ¬¡7¥!¢¥*! Ê ×¼E ¢'¬K·E¥F¬ÞÝ'·×K¥!· @& ¢ ² +Gµ ¶ß* ¬à¼ á ½(¢ ¥*!Sâã×wØw¶¥!µ ¼(¢0·(­·EÙÇ!·E¢ ¥H6* ¡¢O·(¥,³ 6@7¶!¥!·Eä×ߥjÁ ± +åE ¢­¬O·E¥ä: Ýy ÃS ¥* ¥,³ß6 K*! «£E¤ ¥äÝy Ã+ ¢ ¹º¤E¼E+F*¡7¥!¢N¥¦ ± Ê × ³ 6·H*FÝA¥¥!·E¬OFªS·(&²Ù·EO**! *K6 ¡¢F£E¤ ¥j¦f¨ ¥FæA¥¢ ·8¯ ¥¤ *¥7¶¥!¼* =*!! S* 6* ¡ ¢£ ¤E¥j¦ ± ¥,²a ½(¢O·E²c· ¾*K»w ¼E £E¤ ¥çÁG±( Ã'·(¶¹G*¥j¡7 ¥! ¢ ¥®*! S£ ¤E¥çÁ ¨ µ ¼(¢&²a* Ê ×©¢³j*¤E¬O¢K¡8·(¥!¥ *¬»: ¼Ea¼ M¹º¤E¼(¢Sª« * ¥=¶!¥!¥@Á ¨ ¼E¥!·(¶=ªGµ ¶£ ¤E«¥@ÁG±A¥!· ¢a¼E¼ ·(¥¯ ¼E¥ª« *¥,²,+0µ ¶ß*¬è¼EáE½E¢¥H*!â×wسKG·E*¶ß·(¶¢y· 0Ý'¥µ ¼E¥ *O6* ¡ ¢£ ¤E¥ç¦ ¨ ¥¶!Oêé ëìÖ¡í­»: ¢²Ùª«¤E: «¡HFÝ'¥µ&·(S* ­·(¥¼ µ ¼(¢¥ Ý'¥¢ ª«¤E¢¥·(¥!¼E*¢³ îSïUð ñòó?ôßõCòö÷Gò õCø Ý'¥¼ ¥¤ ¬O¬­¥ä¾¤ a¥!·Ej6 ¡¢¥ä¼E&¶!¢yª« * ¥C²2 ¥©×¯5ù6¤7¤E*¥!·8¢ ¥ ¬Õ« +Âûú(ü!¿ ýþÃf ¼ ¥,³ »:¶¢C¶ ¢,¬K·E¥GªÙµ ¶!£E¤E,·E¶!,²&¬O¢,ÿG¶¥!GÿfØM¶¥Nǹs¢²ªa!2ÿ¯;ù6¤¤ ¥!·(¢¥ ¬ Õ« +¼E ¥C ³ ;¬ ¢ ¥ùN¥!¤(¢ ¥ Æ ¼E ¢S ¥»w ¼E «µ ¶!¬Ý'¥¹h·(¥¼O*S¯ ¢ ¥KÝA·×*{Á ± ²* ¥O ¢×¯5ù6¤7¤E*¥·8¢«*'¡7¥!¢+¢² ¼ á ½E 2¤**}¼E + ú(üçéh*¾×¯;ùA¤7¤E*¥!·8¢=·(¶!­*¬ µ ¶ç¶!¥!* ¥§Õ« +íN+ ¢& ³ ;¥j*&¬ ÕaÇ ªSå(6· *y ú ³{ÜÙ¤E¥@·O·(¶!«¼E¢S¬K·E¥¥!· ¢²7+S¬O·E¥F·E¶*¹J¥! ¥*! ¼EáE½ ·(+ý þ¾¢ :¢A¶¥!@µ ¼(¢A·(S¥¡*6·£E¤ ¥F·E¥,³aÝA¥!! ½ ¥!¹º¤E¼(¢A¬K·E¥@ ¬ »:¼ &²(* 2£E¤ ¥­ } ú Oéh ¬É¡7 ¥! ¢ ¥K*! Ê ×í{·(¶*¹wÁA¨Sµ ¼E¢ ³ ;¥­& ¬ !·E µ ¼E¢'* G»w ¼E '·E¶*¹Ù* ¥*!f¬O¢6 '¶!¬­¬O Eü!²* ¬?¡7¥!¢¥*! ëü !#"%$!'&()+*-,.0/21!)+&43256,')+78)+(9,::/-0,;<&=*>)?;<&43>/?@A7(B/256,,.C9D)+()? E <; &(:F0/>/G)?:03>*HI83?@0JC)?*K1!*HL!M)?*K,:B/ON!PRQS#JC)?/H)+5UTV,::W.(0/H)+*OXWY Z[/G3?]\::)2^_7C`a)+b43H)dc$! e @0JC)+*>)+ E ;<&(:F0/>/G)?:f5hgi)+*>)+B;<&R:)?1)+#ji)+*<JC)+/H;<&0:)+M!:B;<&#,(1)?k+)?13? lOmSn oqpGrts#uwvxpGrAyvfrzyhpH{ |~}rx(}dGpH( (. *>;<& T(*<,;3>$!0,:i,/>;+,J((1c)+*>78)?/>/G)?*G3x56,-4.0*JC)OW)+3H)+29SF(*J()igK)?*H)?;<&V/H/H.0;<&()!@ JC)/G&0,:7RjD*<JR,.0;<&.(*OJC)d%6k+)+0k9SF(*DJC)gK)?*H)?;<&V/H/H.0;<&(),(1)?1)?7V)?x@!c!)+*>1:;<&0)+ 53J()+*D%6k+)+0k9SF(*JC)2gi)+*>)+B;<&0/H/H.0;<&()_53:9S)-JC)/DgK)?*H)?;<&V/G70,.(5)?/? <zz8(!>4 ¡4¢¤£z?¥¢¤£z8¦ §f¨>©ª+«¬­®8©¡¯K°]©¤±+ª<©²¡¬®³!´µ·¶¸¯­>³®¹tº» ¼½+¨H½+¬ª>¾±+¿>©ÀCÁ´µÃÂÄÅÆ ÇRÈÊÉ(Ë x<zz8(!>4 ¡4¢¤£z?¥¢¤£z8¦ §f¨>©ª+«¬­®8©¡¯K°]©¤±+ª<©²¡¬®³!´µÃÂÄÅÆCÌÍfÎ ÇRÈÏÉ(Ë ¼½+¨H½+¬ª>¾±+¿>©ÀCÁ´µÃÂÄÅÆCÌ ÇRÈÏÉ(Ë Ð ÑÓÒÔÕDÒ#Ö×#Ò#Ø2ÙAØ2ÕOÚÛÜÕiÝzÕ Þ 9S$:1)+VJC)+àßd)+70)+3H)+#á0VJC)Ü3JC)2gi)+*>)+B;<&0/>/G.0;<&0).x ,(]\4ji)+VJC.((1Vâ ã ¡, 3>)+70,(b)? ãä $78$3Hb ã ßd)?$5)Ü3>*HB/>;<&()+gi)+*>)?;<&(.((1!)+ ã K$!5å(.C3H)?*H1!*>,å(&(b Ñ æç×#ÙAè-éêéëÕDÒ#ì¡è2ÙAÙz×Ò#Ø \JC)?/H)+* E 3>)+::)Oji)+*<JC)+JC)í_.0,!JîðïA*>)+)/+@¡ñJîðïA*>)+)/.(0J ä ,(1!)ÜîðïA*>)+)/AT($*>5Ãc$! \707(:BJC.((1!)+($C;<&(56,:f1!*H$!7Rk?.0/H,55)?(1)+9,/>/a3DJ(,*H1!)?/G3H)+::3? \.(M!)+*<JC)+5ò/G0JJC)%6k+)+(k?)+)?()?*ïz,7V)?::)k+.0/>,55)+01)Ü9,!/H/G3? óó ôõ ö ÷UøùDú+úÜù ûàüýHþÿ?ý ü ü ý ü ý ü ÿ#ü ü ! "# ý +ý%$!&'(ÿ $)&*** " ',+%*-./++10 +12 Quadtrees, Christian Höner zu Siederdissen Quadtrees Eine Betrachtung dieser lang genutzten Art der Datenrepräsentation Christian Höner zu Siederdissen Universität Bielefeld, September 2003 [email protected] Quadtrees sind einer der älteren Datenstrukturen in der Informatik. Sie dienen derAufteilung von Räumen und werden trotz des Vorhandenseins neuerer Strukturen weiterhin in vielen Bereichen verwendet. Im Folgenden wird eine Art der Quadtree-Konstruktion genauer betrachtet, sowie die Vor- und Nachteile dieser Datenstruktur. 1 Quadtrees, Christian Höner zu Siederdissen Grundlegende Beschreibung von Quadtrees Quadtrees sind eine einfach zu programmierende Struktur die in gewissen Bereichen höchst effektiv eingesetzt werden kann, was es wert macht, sich diese genauer zu betrachten. Quadtrees sind den verketteten Listen ähnlich und es wird davon ausgegangen das der Leser eine Vorstellung davon hat, wie diese aussehen und programmiert werden. Die Literaturliste enthält Hinweise auf Texte zu Listen.2 Für die beschriebenen Operationen sollte Basiswissen der Geometrie ausreichend sein, da die Operationen im zweidimensionalen Raum dargestellt werden. Einige beispielhafte Anwendungsgebiete für Quadtrees Das hauptsächliche oder zumindest bekannteste Anwendungsgebiet ist die Computergrafik. Quadtrees eignen sich gut zur Speicherung von Landschaften und besonders Spiele greifen häufig auf diese zurück. Ebenso helfen sie beim Ray-Tracing und „hidden surface removal“. Weitere Anwendung finden Quadtrees unter anderem in der Bildanalyse und Bildkompression. Definition des Quadtrees und der Knotenstruktur Quadtrees dienen der Raumteilung. Objekte innerhalb des partitionierten Raumes werden nach ihrer Position in Gruppen geordnet. Die Ordnung entsteht durch eine Baumstruktur in der jeder Knoten entweder vier oder keinen Kindsknoten enthält. Die Kindsknoten selbst sind durch ihre geometrische Position geordnet, wobei es keine Überlappungen der Kindsknoten gibt. Knoten ohne weitere Kinder werden Blattknoten genannt. Seite Ecke Kante Pseudocode der Struktur eines Knotens Erklärung Knoten{ Elementliste enthält die gespeicherten Objekte im Knoten Kinderliste enthält die 4 Kindsknoten (wenn existent) Vater verweist auf den Vaterknoten Boundingbox speichert die Position des Knotens in der Ebene } 2 Quadtrees, Christian Höner zu Siederdissen Ein Hinweis Ausgehend von der beschriebenen Grundstruktur werden im Folgenden Operationen auf Punktmengen durchgeführt. Punktmengen eigenen sich zur Demonstration hervorragend, da sie nur durch ihre Koordinaten in (hier) zwei Dimensionen bestimmt werden. Im Anhang sind Verweise zur Nutzung von Quadtrees für andere Datensätze als Punktmengen zu finden. Die Literaturliste mag ebenso als Einstieg dienen. 3 Quadtrees, Christian Höner zu Siederdissen Einen Quadtree aus einer Punktmenge erstellen Die Grundoperation ist das Erstellen des Quadtrees selbst auf einer Menge. Die zu benutzende Menge soll aus aus n Punkten mit jeweils (x,y)-Koordinaten bestehen, welche sich alle in einem definiert begrenzten Feld befinden. Sämtliche Punkte der Menge müssen von dem so genannten Wurzelknoten eingeschlossen ein, welcher eine weitere Bedingung erfüllen soll, seine Seitenlänge soll einer Zweier-Potenz entsprechen. Dies ermöglicht für das Beispiel eine einfache Partition des Raumes, stellt jedoch für die Nutzung des Trees an Sich kein Muß dar. Durch die Andeutung des Wurzelknotens ist bereits zu sehen, das der Quadtree relativ viel „leeren Raum“ umschliessen wird. Der Partitionsalgorithmus verläuft relativ einfach: Befinden sich im momentan Knoten (hier: der Wurzelknoten) nur noch ein oder kein weiterer Punkt, so kann die Partitionierung dieses Knoten beendet werden. Wenn dies nicht der Fall ist, wie im Bild, so muss der aktuelle Knoten weiter unterteilt werden, da jeder Knoten nur maximal einen Punkt umfassen soll. 4 Quadtrees, Christian Höner zu Siederdissen Sollten zwei oder mehr Punkte in diesem Knoten seien, so werden für den Knoten vier Kindsknoten erzeugt und alle im Knoten vorhandenen Punkte auf die vier Kindsknoten verteilt. Es werden in jedem Fall alle vier Kindsknoten erzeugt, auch wenn diese leer sein sollten nach Verteilung aller Punkte. Dies vereinfacht und beschleunigt auf dem Quadtree arbeitende Algorithmen. Sollten sich Punkte auf den Trennlinien der Kindsknoten befinden, so werden diese nach einer einfachen Formel auf die Kindsknoten verteilt. DeBerg1 nutzt in seiner Beispielimplementation Folgende: Die vier Unterknoten NE, NW, SW, SE mit den Mittelpunkten: Xmid := (X+X‘) / 2 Ymid := (Y+Y‘) / 2 Verteilen nach: Pne := {p € P : px > Xmid && py > Ymid} Pnw := {p € P : px <= Xmid && py > Ymid} Psw := {p € P : px <= Xmid && py <= Ymid} Pse := {p € P : px > Xmid && py <= Ymid} NE..SE sind die Unterknoten nach Kompassrichtung Xmid, Ymid der Mittelpunkt des Knotens Pne..Pse Einfügepunkt nach Unterknoten p € P Punkt aus Punktmenge Rekursiv wird nun für die vier vorhanden Kindsknoten ebenso partitioniert, falls noch mehr als ein Punkt der Menge sich in dem Quadrant des Kindsknoten befinden sollte. Dies Partitionierung erfolgt, wie in der Grafik ersichtlich, nur im südwestlichen Knoten. Dieses Verfahren wird solange fort geführt bis sich in jedem einzelnen Knoten maximal ein Punkt der Punktmenge befindet. Hierbei ist es durchaus normal, das an einigen Orten sich Mengen von Knoten häufen, da dort mehr Punkte auf engem Raum sind, als an anderen Orten. 5 Quadtrees, Christian Höner zu Siederdissen Für die Partitionierung gelten folgende Kosten an Rechenzeit und Speicheraufwand: Die Tiefe des Baumes: d Kleinste Punktdistanz: c Seitenlänge des Wurzelknotens s Die Anzahl der Punkte, welche im Baum gespeichert werden sollen: n Die Anzahl der benötigten Knoten: O ((d+1)n) (in einem Baum mit „d“ Ebenen existieren maximal „n“ Knoten auf jeder Ebene)2 Die benötigte Zeit zur Erstellung des Baumes: O ((d+1)n) (Anzahl der benötigten Knoten, Knoten können in konstanter Zeit erstellt werden)2 Die minimale Tiefe des Baumes: O (log n) (optimale Verteilung führt zu log n Ebenen)2 Die maximale Tiefe des Baumes: O (log (s/c)) Anzahl der Blattknoten bei vollständiger Balancierung2: (s/c)² Pseudocode zur Partitionierung eines Knotens und Verteilung der Punkte auf seine Kinderknoten Teile_Knoten (Punktmenge, Boundingbox) wenn card(Punktmenge) <= 1 „return“ „erstelle Unterknoten“ „verteile Punktmenge nach Unterknoten-Boundingbox“ „für jeden Unterknoten:“ Teile_Knoten (Unterknoten->Punktmenge, Unterknoten->Boundingbox) 6 Teile_Knoten nimmt eine Menge von Punkten an und eine „Box“, die diese Menge umfassen soll. Sollte es nur noch maximal einen Punkt in der Menge geben, so muss nicht weiter geteilt werden und der Algorithmus kann abbrechen. So der Algorithmus nicht abbrach, werden alle vier Unterknoten erstellt. Mit Hilfe eines Algorithmus und einfachen Regeln wird die Punktmenge nun in vier Submengen geteilt, welche auf die erstellten Unterknoten verteilt wird. Jeder der Unterknoten kann wieder mehr als einen Punkt enthalten, deshalb wird rekursiv der Algorithmus auf jeden Unterknoten angewandt. Quadtrees, Christian Höner zu Siederdissen Dynamische Operationen auf einem Quadtree Der erstellte Quadtree ist bisher noch statisch. Um ihn dynamisch zu machen soll es möglich sein, beliebige Punkte zu löschen und einzufügen in den Baum. Ein Punkt wird nur dann gelöscht, wenn er auch existiert, also gefunden wird, bzw. nur dann eingefügt, wenn er noch nicht an der entsprechenden Stelle existiert. Alternativlösungen zu diesem Verfahren finden sich im Anhang und auch in den Game Programming Gems3 4 5 6. An Operationen werden das Einfügen, Löschen und Finden des nächsten Nachbarn besprochen. Speziellere Formen von Quadtrees bieten noch weitere Möglichkeiten, doch soll dies ein möglichst generischer Ausblick auf Quadtrees werden. Weitere Operationen werden detailliert in den angegebenen Quellen aufgezeigt. 7 Quadtrees, Christian Höner zu Siederdissen Das Einfügen eines Punktes in den Tree Ein Punkt soll in den Quadtree eingefügt werden. Im Wurzelknoten ist ein Punkt vorhanden. Der einzufügende Punkt wird zunächst dem Wurzelknoten hinzugefügt. Die Punktmenge im Wurzelknoten ist in diesem Beispiel >1 deshalb wird eine Partitionierung des Wurzelknotens durchgeführt und beide Punkte auf die Kinderknoten verteilt. Wäre kein Punkt im Wurzelknoten gespeichert gewesen, so hätte auf eine Partitionierung verzichtet werden können. 8 Quadtrees, Christian Höner zu Siederdissen Ein weiterer Punkt wird dem Quadtree hinzu gefügt. Dieser Punkt kann nicht im Wurzelknoten zu liegen kommen, da dieser bereits mindestens einen Punkt enthält. (Der Wurzelknoten ist partitioniert) Der hinzu zufügende Punkt wird an den passenden Subknoten weiter gereicht. (in diesem Falle der süd-westliche) Da auch in diesem Knoten bereits ein Punkt vorhanden ist, wir der Knoten geteilt und beide Punkt auf passende Kinderknoten verteilt. Da nun im gesamten Baum wieder maximal ein Punkt je Knoten existiert, ist das Einfügen beendet. Für das Hinzufügen gelten folgende Kosten an Rechenzeit und Speicheraufwand: Die Knotentraversierung: O (log n) O (n) bei degeneriertem Baum Die Einfügeoperation: Gesamtbedarf an Speicher und Zeit: O (1) Zeitbedarf: O (log n) + O (1) (+ Balancierung) (+ eventuelle Balancierung (siehe unten)) Speicherbedarf: O (1) Pseudocode zum Einfügen eines Punktes in den Quadtree Knoten <- root Die Funktion wird mit dem Wurzelknoten „root“ beginnen Punkt_hinzufügen (Knoten) wenn „Knoten leer“ oder „nicht vorhanden“ „füge Punkt in Knoten ein“ sonst „finde den Punkt einschliessenden Kindsknoten n“ „erstelle 4 Kindsknoten“ „füge Punkt in passenden Knoten ein“ Punkt_hinzufügen (n) 9 sollte in dem jetzigen Knoten keine Partitionierung vorhanden sein und ebenfalls kein vorhandener Punkt, so füge den Punkt ein. Sollte der Knoten nicht existieren, so wird er beim Einfügen erstellt. (wenn der erste Punkt überhaupt eingefügt wird) Ansonsten finde den passenden Kindsknoten (siehe Formel weiter oben) und erstelle die vier Kindsknoten (so nicht bereits vorhanden). Füge dann den Punkt in den Kindsknoten ein. Der Kindsknoten könnte ebenfalls mehr als das Maximum an Punkten enthalten, deshalb rufe die Funktion rekursiv auf dem Kindsknoten auf. Quadtrees, Christian Höner zu Siederdissen Das Löschen eines Punktes aus dem Quadtree Es wird davon ausgegangen das der zu löschende Punkt durch seine geometrische Position (x/y-Koordinaten) genau zu bestimmen ist und im Tree existiert. Der den Punkt haltende Blattknoten ist auf die selbe Art zu finden, als würde man den zu löschenden Punkt in den Tree einfügen wollen. Beginnend von der Wurzelebene aus wird der Baum traversiert bis zum Blattknoten. Der Punkt wird nun aus dem Blattknoten gelöscht. Rekursiv werden folgend die aufsteigenden Vaterknoten untersucht und solange die Kindsknoten gelöscht und eventuell vorhandene Punkte in die Vaterknoten kopiert, wie das Partitionskriterium nicht erfüllt wurde. In diesem Fall wird eine Teilung entfernt, da im südwestlichen Knoten nur noch ein Punkt existiert. 10 Quadtrees, Christian Höner zu Siederdissen Für das Löschen gelten folgende Kosten an Rechenzeit und Speicheraufwand (Freigabe!): Die Knotentraversierung: O (log n) O (n) bei degeneriertem Baum Die Löschoperation: O (1) Gesamtbedarf an Speicher und Zeit: Zeitbedarf: O (log n) + O (1) (+ Balancierung) (+ eventuelle Balancierung (siehe unten)) Speicherfreigabe: O (1) Pseudocode zum Löschen eines Punktes aus dem Quadtree Initialisiere die Funktion mit dem Knoten <- root Wurzelknoten Punkt_löschen (Knoten) wenn „nicht vorhanden“ „return“ wenn der Knoten nicht vorhanden ist, so beende hier. wenn „Punkt in Knoten“ „lösche Punkt“ Sollte der Punkt im Knoten vorhanden sein, so wird der Punkt gelöscht sonst „finde den Punkt einschliessenden Kindsknoten n“ Der Punkt ist vielleicht in einem der Kinderknoten dieses Knotens, Punkt_löschen (n) traversiere rekursiv den Baum wenn „mindestens drei Kindsknoten leer“ „kopiere verbliebenen Punkt (wenn den Vaterknoten“ „gehe in den Vaterknoten“ „lösche Kinderknoten“ 11 Bei der Rückkehr aus der Rekursion wird kontrolliert, ob drei von vier Kindsknoten leer sind. vorhanden) in So dem so ist, wird der letzte verbliebene Punkt aus einem der vier Kindsknoten in den Vater kopiert, so ein Punkt vorhanden sein sollte. Der Vaterknoten löscht nun die vier Kinderknoten, da sie nicht zur Partitionierung benötigt werden. Quadtrees, Christian Höner zu Siederdissen Den nächsten Nachbarn zu einem gegebenen Punkt finden Bei bestimmten geeigneten Datensätzen eignen sich Quadtrees hervorragend dafür, den nächsten Nachbarn zu einem gegebenen Punkt zu finden. Da jeder Punkt in seinem eigenen Blattknoten liegt, muss der nächste Blattknoten in der zu suchenden Richtung gefunden werden. Soll nicht in einer gegebenen Richtung gesucht werden, so erfolgt eine Suche in allen Acht Richtungen (Nord, Nordwest,...) indem die Suchfunktion für alle acht Richtungen aufgerufen wird. Sollte der Startknoten der Wurzelknoten sein, so kann die Suche abgebrochen werden, da dann kein Nachbarknoten existieren kann. Ist der nächste Nachbarknoten einer der vier Knoten des Vaterknotens, so ist die Suche ebenfalls deutlich vereinfacht und es müssen nur noch eventuelle weitere Kinderknoten verglichen werden. Sollte dem nicht so sein, wir solange in die nächst höhere Ebene gegangen, bis entweder der Wurzelknoten erreicht wurde, oder in einen entsprechenden Nachbarknoten des Vaterknotens gewechselt werden kann. Von diesem Nachbarknoten aus muss dann in die Blattebene des Knotens gegangen werden, welche sich eine Kante mit dem Startknoten teilt. Eine solche Kante existiert immer, es sei denn, die Seiten des Wurzelknotens wurden erreicht. In diesem Fall existiert in der angegebenen Richtung kein Nachbar. Der nächste Nachbar ist dadurch mit relativ wenigen Schritten zu finden, solange der Tree nicht degeniert ist. In degenerierten Bäumen ist die Suche deshalb erschwert weil es viele Ebenen gibt. Für das Finden des nächsten Nachbarn gelten folgende Kosten an Rechenzeit: Startknoten: v Tiefe des Baumes: Nächster Nachbar in bestimmter Richtung: d O (d+1) (es muss maximal vom tiefst liegenden Blattknoten bis zum Wurzelknoten und wieder eine Ebene hinab gegangen werden) 12 Quadtrees, Christian Höner zu Siederdissen Pseudocode zum Finden des nächsten Nachbarn: Nördlicher_Nachbar (Knoten) Die Funktion soll nur den nördlichen Nachbarknoten finden. Das Vorgehen ist analog für die sieben anderen Fälle. wenn „Knoten = Wurzel“ „return null“ wenn „Knoten = SW“ „return NW“ wenn „Knoten = SE“ „return NE“ temp <- Nördlicher_Nachbar (Vaterknoten) wenn „temp = null“ oder „temp = blatt“ „return temp“ sonst wenn „Knoten = NW“ „return SW von temp“ sonst „return SE von temp“ Sollten wir uns im Wurzelknoten befinden, so wird abgebrochen, da die Wurzel keine Nachbarn hat. Für die südlichen Knoten (eines Vaterknotens) können einfach die nördlichen Knoten genommen werden, da immer alle vier Knoten existieren. Sollte es sich um die nördlichen Knoten handeln, so muss der nördliche Nachbar des Vaterknotens gefunden werden. Wenn es keinen gibt so wird „null“ zurück gegeben und die Funktion bricht ab. Sollte der nördliche Nachbar ein Blattknoten sein, so wird dieser ebenfalls einfach zurück gegeben. Ansonsten wird der passende Kinderknoten des Nachbarn des Vaters zurück gegeben. Zwecks erleichterter Darstellung wurde darauf verzichtet von allen Knoten in die potentiellen Blattknoten zu gehen. Dies ist allerdings einfach machbar (besonders in balancierten Bäumen, siehe unten). 13 Quadtrees, Christian Höner zu Siederdissen Einen Quadtree balancieren Das Balancieren eines Quadtrees ist eine spezielle Operation, die nicht wie die vorigen Operationen zu den Basisoperationen gehört, sondern für bestimmte Nutzungen des Trees wichtig ist, beispielsweise das Raytracing durch einen Tree. Ob balanciert wird, hängt damit von den Daten und der Verwendung des Trees ab. Die Balancierung ist die einzige nicht grundlegende Operation, die behandelt wird, da sie den Baum in einen „vorteilhaften“ Zustand bringt. Ein balancierter Quadtree soll dabei so verändert werden, das für jeden Blattknoten gilt, das seine Nachbarn sich maximal um eine gewisse Grössenkategorie unterscheiden. Dadurch sind jweils nur wenige Schritte notwendig um den nächsten Nachbarn in einer bestimmten Richtung zu finden. Oft ist der geforderte maximale Grössenunterschied „2“, ein Unterschied von „1“ würde zu einem vollständig ausgebildeten Tree führen mit der Maximalanzahl an Blattknoten und Unterschiede grösser als „2“ führen praktisch zu keiner Balancierung mehr. Dieser vollständige und korrekte Quadtree soll balanciert werden, da die Differenz der Kantenlänge zwischen den beiden grau gefärbten Blattknoten grösser als „2“ ist. Dies gilt ebenso für andere Kanten im Baum, diese werden analog bearbeitet, bzw. deren Blattknoten, bis alle Blattknoten wurden. Die Balancierung beginnt damit, alle Blattknoten in eine Liste zu geben. Solange diese Liste nicht leer ist, wird die Balancierung fort geführt. Begonnen werden soll mit dem dunkel gefärbten Blatt im nordöstlichen Bereich. Da dieses Blatt eine Kante hat, die um mehr als den Faktor zwei kleiner ist, wird gesplittet. 14 Quadtrees, Christian Höner zu Siederdissen Aus dem Blattknoten wird ein normaler Knoten mit vier leeren Blättern, die ebenfalls in die Liste der Blätter gegeben werden. Dieser bearbeitete (ehemalige Blatt-)knoten fällt dafür aus der Liste heraus. Sollte sich ein Punkt in dem Knoten befinden, so wird er in dem korrekten Blattknoten gespeichert. Der nächste zu bearbeitende Blattknoten (weiss) wurde bereits geteilt, da auch dieser Kanten besitzt, die der Balancierung nicht genügen. Die vier neu erstellten Blattknoten werden in die Liste der zu Bearbeitenden eingefügt. 15 Quadtrees, Christian Höner zu Siederdissen Auch während der Balancierung entstandene Blattknoten müssen teilweise erneut vier eigene Blattknoten erzeugen, wenn auch für diese Knoten die Bedingung der Balancierung nicht erfüllt wurde. Auch hierbei entstandene Blattknoten müssen in die Liste der zu Bearbeitenden eingefügt werden, da die Bedingung für alle Blattknoten später erfüllt sein soll. Diese Partitionierung kam nur deshalb zu Stande, weil in einem anderen Blatt partitioniert werden musste. Doch mit Setzen dieser vier Kinderknoten ist der Vorgabe der Balancierung Genüge getan und jedes Blatt hat zu jeder Seite hin maximal zwei Kanten. Der hieraus gewonnene Vorteil ist, das der nächste Nachbar zu jeder Kante in maximal drei Schritten gewonnen ist. (1) in den Vater empor steigen (2) dessen Nachbarn finden (3) in den (wenn vorhanden) Kinderknoten hinab steigen Die Balancierung garantiert dies. Kosten an Rechenzeit und Speicher: Knoten im Baum: m Knoten im balancierten Baum: O (m) Speicherbedarf für den balancierten Baum: O (m) 16 Quadtrees, Christian Höner zu Siederdissen Knoten im Baum: Benötigte Schrittzahl: m O ((d+1)m) (ein Baum der Tiefe d mit maximal m Blattknoten in der tiefsten Ebene hat garantiert weniger als (d+1)m Knoten) Anmerkung: Die Balancierung eines Trees ist eine potentiell teure Operation, welche allerdings in der Praxis oft nur wenige Schritte benötigt. 17 Quadtrees, Christian Höner zu Siederdissen Pseudocode zur Balancierung des Baumes: Quadtree Balancieren „alle Blätter in eine Liste geben“ Während „Liste nicht leer“ Der komplette Baum muss traversiert werden und sämtliche Blätter des Baumes in eine Liste gegeben. Für jedes Blatt in der Liste muss durchgeführt werden: „nehme ein Blatt aus der Liste“ Das Blatt selbst wird nur einmalig verarbeitet wenn „Blatt muss gesplittet werden“ Sollte es mehr als zwei Kanten geben zu einer Seite hin: „erstelle internen Knoten aus Blatt“ wenn „Knoten einen Punkt enthält“ Erstelle vier Kinderknoten in dem Blatt, womit das Blatt zu einem normalen Knoten wird. Füge einen möglichen Punkt in den passenden Kinderknoten ein. „Punkt in passendes Blatt einfügen“ „füge die neuen Blätter in die Liste ein“ wenn „Knoten“ hat nun Nachbarn, die gesplittet werden müssen“ „füge Nachbarn in Liste ein“ 18 Die vier neuen Blätter müssen in die Liste gegeben werden. Der Knoten könnte Nachbarn haben, die ebenfalls gesplittet werden müssen, diese werden ebenfalls in die Liste gefügt. Quadtrees, Christian Höner zu Siederdissen Zusammenfassung Quadtrees sind eine Struktur zur Datenverwaltung, welche man nur mit Umsicht einsetzen sollte, da sie ihre Vorteile nur bei sehr bestimmten Datensätzen entfalten können. Dies liegt besonders daran, das Quadtrees nicht die Daten selbst partitionieren, sondern den Raum in dem diese Daten sich befinden. Hat man Anwendungen, in denen die Daten relativ homogen im zu partitionierenden Raum verteilt sind, so sind Quadtrees gut nutzbar, ansonsten besteht die Gefahr das der Tree degeniert. Besonders negativ wirkt sich dabei aus, wenn der Datensatz auf einige wenige Orte im Raum sich konzentriert, da dann die maximale Tiefe des Baumes sich immer weiter von (log n) hin zu (n), mit „n“ als Baumtiefe, verschiebt. Hat man allerdings Daten, welche sich gut eignen, so bietet der Quadtree einige Vorteile, wie den Zugriff mit Operationen im Zeitbedarf von (log n) und sehr schnellen Intersektionstests. In vielen Bereichen der Informatik gibt es neuere und bessere (vor allem: schnellere) Strukturen als den Quadtree, doch durch seine Einfachheit besonders in der Implementation und durch Einsatzgebiete in denen die Datensätze vorgegeben oder sehr passend sind bleibt der Quadtree ein noch immer genutztes Werkzeug. Alternativen zu Quadtrees sind beispielweise: „BSP-Trees“ „kd-Bäume“. Beide Begriffe mögen bei der Suche hilfreich sein. 19 Quadtrees, Christian Höner zu Siederdissen Anhang: eine kurze Vorstellung spezialisierter Quadtrees Einige der Nachteile des vorgestellten Trees und der Algorithmen auf ihm lassen sich durch spezialisierte Formen der Quadtreeerstellung umgehen oder zumindest mindern. Dies ist besonders dadurch vorteilhaft, das ein prinzipieller Vorteil des Quadtrees erhalten bleibt, er ist sehr einfach zu programmieren. Im Folgenden werden fünf spezielle Formen vorgestellt, die teils Nachteile kompensieren, teils die schon existierenden Vorteile des Trees noch besser nutzbar machen sollen. Reguläre Quadtrees Reguläre Quadtrees sind balancierte Quadtrees, bei denen alle Blattknoten ausgebildet wurden, die gewählte Grössenkategorie bewusst „1“ ist. Jedes Blatt speichert in einem Vektor Referenzen auf alle Nachbarblattknoten. Intersektionstests, wenn auch nur Intersektion mit den Blättern, wird hierdurch eine extrem schnelle Operation, da jeweils von einem Blatt zum nächsten gesprungen werden kann. Auch Verschiebeoperationen von Datenelementen in einen anderen Blattknoten ist schnell möglich. Diese beiden Vorteile werden allerdings durch einen grossen Speicheroverhead erkauft, welcher durch viele leere Blätter entsteht. Ausserdem kann es passieren, das sich viele Datenelemente in einem Blatt ansammeln und somit der Zugriff wieder langsam wird, abhängig von der Struktur, welche die Datenelemente hält. Der Knotenzugriff auf einen Blattknoten erfolgt in O (log n) ähnlich dem normalen Quadtree. Intersektionstests sind in O (1) möglich, solange die Intersektionstests sich auf die Knoten beschränken. Der Speicherbedarf steigt von ca. (n * log n) auf (2n). Objektmengen statt Punktmengen Objekte unterscheiden sich von Punkten dadurch, das sie nicht nur durch einen Punkt (x,y) gekennzeichnet sind, sondern ebenfalls durch einen Radius (r). (Rechtecke oder beliebige Polygone können ebenfalls auf diese Art gespeichert werden, Kreise sind ein einfaches Mittel zur Erklärung) Objekte werden nun nicht mehr nur in den Blattknoten gespeichert, sondern können in jedem Knoten gespeichert werden. Beginnend mit dem Wurzelknoten wird versucht, Objekte in einer möglichst tiefen Ebene unterzubringen, bei der der Objektrand nicht mit den Knotengrenzen überlappt. Ausserdem ist jeder Knoten in der Lage mehr als nur ein Objekt zu speichern (zum Beispiel in Form von Listen). Sämtliche Operationen auf einem solchen Baum verlängern sich um den Faktor „k“ der Anzahl der im jeweiligen Knoten vorhandenen Elemente. Ein solcher Baum tendiert dazu, zu degenerieren, da Objekte oft auf den Knotengrenzen liegen, sich oft gar im Wurzelknoten ansammeln, womit die Zugriffe im worst case in O (n) liegen. 20 Quadtrees, Christian Höner zu Siederdissen „lose“ Quadtrees Lose Quadtrees versuchen Quadtrees für Objektmengen zu optimieren, so das eingefügte Objekte nach Möglichkeit tiefer im Baum zu liegen kommen, als dies bei einem normalen Baum der Fall wäre. Dies wird dadurch ermöglicht, das die Knotengrenzen sich jeweils überlappen dürfen, so das ein Objekt, welches normalerweise nicht in einem Knoten allein gespeichert werden könnte, dies nun kann. Für alle Operationen gilt weiterhin, das sie sich um den Faktor „k“, der Anzahl der Objekte im Knoten erhöhen, doch ist „k“ oftmals deutlich kleiner nun. Quadtrees mit direktem Zugriff (direct access quadtree) Quadtrees mit direktem Zugriff sind reguläre Quadtrees in denen Verweise auf die Knoten in einem Vektor gespeichert werden. Dies erlaubt es auf die Knoten in O (1) Zugriff zu nehmen, wenn man die geometrische Position des gewünschten Knotens kennt. Diese Art von Baum ist besonders mächtig, wenn häufig Datensätze in den Baum eingefügt oder aus dem Baum gelöscht werden müssen. Operationen auf dem Baum benötigen die selben Zugriffszeiten, wie Operationen auf normalen regulären Quadtrees. Im Unterschied zu diesen sind allerdings Zugriffe auf einzelne Knoten in O (1) möglich. Zu bedenken ist allerdings, das es hierbei um Zugriffe auf Knoten sich handelt. Jeder Knoten hält eine Liste oder einen Vektor, der die einzelnen Objekte beinhaltet, wodurch der Objektzugriff um den Faktor „k“ der Elemente im Knoten sich verlängert. Dies kann im worst case bei einem schlechten Datensatz linearen Zugriff bedeuten und damit O (n). Octrees Octrees erweitern den Quadtree um die dritte Dimension, wie der Name bereits andeutet. Anstatt nur in (x,y) bestimmt zu sein, werden Objekte in Octrees aufgrund ihrer (x,y,z)-Koordinaten in ein dreidimensionales Gitter eingepasst. Vom hinzu Fügen der dritten Dimension abgesehen, verhalten sich Octrees allerdings exakt wie Quadtrees und es sind auch sämtliche Operationen möglich, sowie die Nutzung spezialisierter Varianten. 21 1 Computational geometry : algorithms and applications, Springer, 2e 2000, Marc de Berg, chapter 14, p.291-306 2 Algorithmic geometry, Cambridge Univ. Press, Cambridge, 1998., Jean-Daniel Boissonnat and Mariette Yvinec. 3 Game Programming Gems, Charles River Media, ISBN 1-58450-049-2, p.439 – 443, Octree Construction by Dan Ginsburg 4 Game Programming Gems3, p.444 – 453, Loose Octrees by Thatcher Ulrich 5 Game Programming Gems 2, Charles River Media, ISBN 1-58450-054-9, p.388 – 393, Compressed Axis-Aligned Bounding Box Trees by Miguel Gomez 6 Game Programming Gems 25, p.394 – 401, Direct Access Quadtree Lookup by Matt Pritchard Fgt"MF/Dcwo Lcp"Uejcghgt UU"4225 Cwuctdgkvwpi"|wo"Xqtvtci"ko"Tcjogp"fgu Ugokpctu"Cniqtkvjokuejg"Igqogvtkg cp"fgt"Vgejpkuejgp"Hcmwnv v fgt"Wpkxgtukv v"Dkgnghgnf Xgtcpuvcnvgt Ocvjkcu"Mcv|gt Octe"Jcpjgkfg Kpjcnv 30"Gkpngkvwpi 40"Oqvkxcvkqp 50"Cejvwpi<"*M"F+kogpukqpgp 60"Mqpuvtwmvkqp"gkpgu"MF/Dcwou 603"GhÞ"|kgp|"fgu"Mqpuvtwmvkqpucniqtkvjowu 70"Cniqtkvjogp"cwh "fgo"MF/Dcwo 703"Dgtgkejuuwejg 70303"GhÞ"|kgp|"fgt"Dgtgkejuuwejg 80"Xgtingkej"okv"cpfgtgp"Fcvgpuvtwmvwtgp 90"Cpygpfwpigp :0"Hc|kv 30"Gkpngkvwpi Yqtwo"uqnn"gu"kp"fkgugo"Cwhucv|"igjgpA"Fgt"Vkvgn"uciv"gu"dgtgkvu<"Gu"igjv"wo"MF/D wog0"Fkgug"Ctdgkv"gpvuvcpf" ko"Tcjogp"fgu"Ugokpctu"Cniqtkvjokuejg"Igqogvtkg0"Fgt"Uejnwuu"nkgiv"pcjg."fcuu"gu"ukej"dgk"MF/D wogp"wo" Fcvgpuvtwmvwtgp"kp"Dcwohqto"jcpfgnv0"Wpf"igpcwuq"kuv"gu"cwej0"MF"uvgjv"fcdgk"h¯t"M/fkogpukqpcn0"Fgt"Cwhucv|" dgjcpfgnv" gkpg" Dcwofcvgpuvtwmvwt." fkg" h¯t" dgnkgdkifkogpukqpcng" Fcvgp" gt|gwiv" ygtfgp" mcpp0" Ykg" h¯t" D wog" ¯dnkej."uq"gto inkejv"cwej"fkgugt"gkpgp"uejpgnngp"¥witkhh "cwh "fkg"kp"kjo"gpvjcnvgpgp"Fcvgpgngogpvg0"Yqtkp"gt" ukej"igpcw"xqp"cpfgtgp"D wogp"wpvgtuejgkfgv"ugk"jkgt"pqej"pkejv"xgttcvgp0"Xgttcvgp"yktf"pwt."fcuu"fkgug"Uejtkhv" Gkpdnkem"igdgp"yknn"kp"fkg"Fcvgpuvtwmvwt"MF/Dcwo0"Ykg"ukg"gt|gwiv"yktf."ygnejg"Cniqtkvjogp"gu"cwh "kjt"ikdv."yq" ukg"|wo"Gkpucv|"mqoov."ykg"ukg"ko"Xgtingkej"okv"cpfgtgp" jpnkejgp"Uvtwmvwtgp"cduejpgkfgv"wpf"cnu"Itwpfncig" fkgugu"ngv|vgp"Rwpmvgu"pcv¯tnkej."kp"ygnejgp"GhÞ"|kgp|mncuugp"ukg"ukej"dgygiv0 40"Oqvkxcvkqp Igigdgp" ugk" gkpg" Ogpig" igqogvtkuejgt" Rwpmvg" kp" dgnkgdkigt" Fkogpukqp0" Lgfgt" Rwpmv" dgÞ"pfgv" ukej" cp" gkpgt" gkpfgwvkigp"Rqukvkqp."hguviguejtkgdgp"cnu"ugkpg"Mqqtfkpcvgp0"Pwp"uvgnngp"ykt"wpu"Htcigp"dg|¯inkej"fgt"Cpqtfpwpi" fgt"Rwpmvg0"¥wo"Dgkurkgn<"Ygnejgt"Rwpmv"nkgiv"co"p ejuvgp"dgk"gkpgo"dguvkoovgp"igigdgpgpA"Ygnejg"Rwpmvg" nkgigp"kp"gkpgo"igykuugp"DgtgkejA"Gu"ikdv"gkpg"Ogpig"Htcigp."fkg"ocp"dg|¯inkej"fgt"Cpqtfpwpi"fgt"Rwpmvg"uvgnngp" mcpp0"Wo"gkpg"Cpvyqtv"cwh "fkgug"Htcigp"|w"Þ"pfgp"o¯uugp"qhvocnu"cnng"Rwpmvg"dguwejv"wpf"¯dgtrt¯hv"ygtfgp0" Lgfgphcnnu"ygpp"ocp"cwh "fkg"pckxg"Ygkug"cp"fcu"Rtqdngo"jgtcpigjv0"Fkgu"kuv"pkejv"ugjt"ghÞ"|kgpv0"Fkg"GhÞ"|kgp|" mcpp"gtjgdnkej"xgtdguugtv"ygtfgp."ygpp"ocp"|wp ejuv"fkg"Rwpmvogpig"kp"gkpgt"iggkipgvgp"Ygkug"xqtxgtctdgkvgv" wpf"Xqtdgfkpiwpigp"uejchhv0"Fkgug"mcpp"ocp"ur vgt"h¯t"gkpgp"ghÞ"|kgpvgtgp"¥witkhh "cwh "fkg"Rwpmvg"cwupwv|gp0" Pcv¯tnkej" mquvgv" fkgug" Xqtxgtctdgkvwpi" cwej" ¥gkv" wpf" Urgkejgt0" Uvgnnv" ocp" ukej" fkg" ingkejg" Htcig" hvgtu." o inkejgtygkug"pwt"okv"xgt pfgtvgp"Rctcogvgtp."yktf"ukej"fgt"Cwhycpf"cdgt"uejpgnn"nqjpgp0 Gu"ikdv"xgtuejkgfgpg"Ogvjqfgp."fgp"¥witkhh "cwh "gkpg"igqogvtkuejg"Rwpmvogpig"|w"qrvkokgtgp0"Ogkuvgpu"ygtfgp" fkg"Rwpmvg"|wp ejuv"kp"gkpgt"urg|kgnngp"Fcvgpuvtwmvwt"cdigngiv0"Cwh "fkgugt"Fcvgpuvtwmvwt"gzkuvkgtgp"Cniqtkvjogp." fkg"dguvkoovg"Qrgtcvkqpgp"ghÞ"|kgpv"cwuh¯jtgp0"Fcdgk"ikdv"gu"pkejv"gkpg"ädguvgÑ"Fcvgpuvtwmvwt0"Ykg"uq"qhv"kp"fgt" Kphqtocvkm"jcv"lgfg"Ogvjqfg"kjtg"Xqt/"wpf"Pcejvgkng"wpf"ocp"owuu"cdy igp"ygnejg"h¯t"gkp"igigdgpgu"Rtqdngo" fgp"it ̌vgp"Pwv|gp"dtkpiv0 MF/D wog"ukpf"gkpg"fkgugt"Ogvjqfgp0"Ukg"ukpf"h¯t"fcu" fkg" Dgtgkejuuwejg" |wiguejpkvvgp0" Cnuq" h¯t" fkg" Htcig<" Ygnejg"Rwpmvg"nkgigp"kp"gkpgo"igigdgpgp"Dgtgkej0" Urg|kgnn" dgk" D wogp" vtkvv" qhvocnu" fcu" Rtqdngo" fgt" Gpvctvwpi"cwh0"Gkp"gpvctvgvgt"Dcwo"jcv"cnng"ugkpg"Dn vvgt" gpvygfgt"cp"fgt"tgejvgp."qfgt"cp"fgt"nkpmgp"Ugkvg"lgfgu" Mpqvgpu" j pigp0" Gt" ingkejv" cnuq" xqp" fgt" Uvtwmvwt" jgt" gkpgt" Nkuvg" wpf" jcv" cwej" fkg" ingkejgp" Gkigpuejchvgp" ycu" fkg" GhÞ"|kgp|" cpigjv0" Fcu" o ejvg" ocp" o inkejuv" xgtogkfgp0"MF/D wog"igjgp"cwej"fkgugu"Rtqdngo"cp0 50"Cejvwpi<"*M"F+kogpukqpgp Ykg" dgtgkvu" gty jpv." m ppgp" MF/D wog" h¯t" dgnkgdkifkogpukqpcng" Fcvgp" gt|gwiv" ygtfgp0" Fgt" Cdd04<"Gpvctvgvgt"Dkp tdcwo"okv":"Dn vvgtp0"Oczkocng"Vkghg jkgt<"p"/"3"?"90"Fcjgt"¥witkhh "cwh "gkp"Dncvv"ykg"dgk"gkpgt"Nkuvg"kp"Q*p+0 Gkphcejjgkv" jcndgt" o ejvg" kej" cp" fkgugt" Uvgnng" fgp" Cwhucv|" |wp ejuv" cwh " |ygk" Fkogpukqpgp" tgfw|kgtgp0" Ygpp"cwu"fgo"Vgzv"pkejvu"cpfgtgu"jgtxqtigjv."uq"ukpf"uvgjvu"4fkogpukqpcng"MF/D wog"*gkigpvnkej"lc"4F/D wog+" igogkpv0"Cp"iggkipgvgt"Uvgnng"ygtfg"kej"fcpp"lgygknu"fkg"Gtygkvgtwpi"cwh "M"Fkogpukqpgp"xqtpgjogp."ygpp"fkgu" pqvygpfki"kuv0"H¯tu"gtuvg"igp¯iv"gu"ko"Mqrh "|w"dgjcnvgp."fcuu"cnngu"ycu"kp"fgp"p ejuvgp"Mcrkvgnp"iguciv"yktf"ukej" kp"tgejv"cpcnqigt"Ygkug"xqp"|ygk"cwh "ogjt"Fkogpukqpgp"¯dgtvtcigp"n uuv0 60"Mqpuvtwmvkqp"gkpgu"MF/Dcwou Gkp"MF/Dcwo"kuv"gkp"dcncpekgtvgt"Dkp tdcwo0"Fkg"Ctv"wpf"Ygkug"ugkpgt"Mqpuvtwmvkqp"ictcpvkgtv"fkgug"Gkigpuejchv0" Fcokv"jcv"gt"pcv¯tnkej"cwej"fkg"Gkigpuejchvgp"gkpgu"uqnejgp0"Fgt"¥witkhh "cwh "gkp"dgnkgdkigu"Gngogpv."qfgt"Dncvv" mcpp" kp" oczkocn" nqi" p" Uejtkvvgp" tgcnkukgtv" ygtfgp0" Fkg" Cwhvgknwpi" fgt" Rwpmvogpig" cwh " fgp" Dcwo" iguejkgjv" cpjcpf"fgt"Mqqtfkpcvgp"fgt"Rwpmvg0"Jkgt"uqnn"pwp"|wp ejuv"fgt"Cniqtkvjowu"|wt"Mqpuvtwmvkqp"gkpgu"MF/Dcwou" /"4"/ fwtej"Rugwfqeqfg"wpf"Dknfgt"gtmn tv"wpf"cpuejnkǧgpf"ugkpg"GhÞ"|kgp|"cpcn{ukgtv"ygtfgp0"Mqoogp"ykt"|wp ejuv" |wo" Rugwfqeqfg0" Ykg" uq" qhv" ko" ¥wucoogpjcpi" okv" D wogp" mqoov" h¯t" fkg" Mqpuvtwmvkqp" fgu" MF/Dcwou" gkp" tgmwtukxgt" Cniqtkvjowu" |wt" Cpygpfwpi0" Fkg" gkp|kig" Xqtdgfkpiwpi" kuv." fcuu" fkg" Rwpmvogpig" pcej" lgfgt" Mqqtfkpcvg"uqtvkgtv"xqtnkgiv0 Cniqtkvjowu"DcwgMfDcwo*R."vkghg+ 11"R<"Xqtuqtvkgtvg"Rwpmvogpig 11"vkghg<"Fgt|gkvkig"Vkghg"ko"Dcwo kh"R"gpvj nv"pwt"gkpgp"Rwpmv vjgp tgvwtp"Dncvv"kp"fgo"fgt"Rwpmv"igurgkejgtv"kuv gnug"kh"vkghg"igtcfg vjgp"Vgkng"R"kp"|ygk"Wpvgtogpigp"okv"Jknhg"gkpgt"xgtvkmcngp" Nkpkg"n"fwtej"fkg"okvvngtg"Z/Mqqtfkpcvg"fgt"Rwpmvg"kp"R0"Ugk" R3"fkg"Rwpmvogpig"|wt"Nkpmgp"xqp" " " wpf"R4"fkg"Rwpmvogpig"|wt"Tgejvgp"xqp"n0 " " gnug"Vgkng"R"kp"|ygk"Wpvgtogpigp"okv"Jknhg"gkpgt"jqtk|qpvcngp" " " Nkpkg"n"fwtej"fkg"okvvngtg"[/Mqqtfkpcvg"fgt"Rwpmvg"kp"R0"" " " " Ugk"R3"fkg"Rwpmvogpig"wpvgtjcnd"xqp"n"wpf"R4"fkg"Rwpmvogpig" " " qdgtjcnd"xqp"n0 xnkpmu"">/"DcwgMfDcwo*R3."vkghg"-"3+ xtgejvu">/"DcwgMfDcwo*R4."vkghg"-"3+ Gtuvgnng"gkpgp"Mpqvgp"x."fgt"n"urgkejgtv."ocejg"xnkpmu"|w"ugkpgo" nkpmgp"Mkpfmpqvgp"wpf"xtgejvu"|w"ugkpgo"tgejvgp0 tgvwtp"x Fkg"Xqtigjgpuygkug"kuv"tgejv"ukorgn0"Ocp"dgikppv"fcokv"gkpg"Igtcfg"gpvncpi"gkpgt"Fkogpukqp"fwtej"fkg"Okvvg" fgt"Rwpmvg"|w"ngigp0"Fcokv"kuv"fkg"Okvvg"fgt"Rwpmvg"dg|¯inkej"fkgugt"Fkogpukqp"igogkpv0"Fcu"Dgkurkgn"cwh "fgp" hqnigpfgp" Ugkvgp" dgikppv" xgtvkmcn0" Fkg" gtuvg" Vtgppnkpkg" yktf" pwp" ko" Ywt|gnmpqvgp" fgu" Dcwou" cdigngiv0" Fkg" dgkfgp"Mkpfgt"fgu"Mpqvgpu"mqttgurqpfkgtgp"okv"fgp"dgkfgp"Jcndgdgpgp."fkg"fwtej"fkg"Vtgppnkpkg"cwhigurcppv" ygtfgp0"Ko"p ejuvgp"Uejtkvv"ygejugnv"ocp"pwp"fkg"Fkogpukqp"*ko"Dgkurkgn"xqp"xgtvkmcn"pcej"jqtk|qpvcn+."wpf" vgknv" fkg" dgkfgp" Jcndgdgpgp" kp" fgt" lgygknkigp" Okvvg0" Pcv¯tnkej" lgv|v" fkg" Okvvg" dg|¯inkej" fgt" pgwgp" Fkogpukqp0" Fkg"Vtgppnkpkgp"ygtfgp"kp"fgp"dgkfgp"Mkpfmpqvgp"fgu"Ywt|gnmpqvgpu"cdigngiv0"Fcokv"mqttgurqpfkgtgp"fkg"xkgt" Mkpfmpqvgp"fgt"40"Gdgpg"fgu"Dcwou"*ykt"dgikppgp"dgk"2"|w"| jngp+"okv"fgp"xkgt"fwtej"fkg"Vtgppnkpkgp"dgitgp|vgp" qhhgpgp"Gdgpgp0"Pwp"ygejugnv"ocp"ykgfgt"fkg"Fkogpukqp"*ko"Dgkurkgn"xqp"jqtk|qpvcn"pcej"xgtvkmcn."ocp"igjv" /"5"/ cnuq"ko"Mtgku+"wpf"vgknv"fkg"xkgt"Wpvgtogpigp0"Uq"h jtv"ocp"hqtv0"Kuv"kp"gkpgt"fgt"Wpvgtogpigp"pwt"pqej"gkp"Rwpmv" xqtjcpfgp." uq" yktf" fkgugt" |wo" Dncvv" fgu" Dcwou0" Gkpg" ygkvgtg" Vgknwpi" fgt" Ogpig"kuv" pkejv"ogjt" o inkej" wpf" fkg"Dgctdgkvwpi"fkgugu"¥ygkigu"yktf"dggpfgv0"Fgt"Cniqtkvjowu"vgknv"uq"fkg"igucovg"Ogpig"cwh0"Gu"uvgnnv"ukej"fkg" Htcig."ycu"rcuukgtv."ygpp"fkg"|w"vgkngpfg"Rwpmvogpig"gkpg"wpigtcfg"Cp|cjn"Rwpmvg"cwhygkuv0Ko"Dgkurkgn"yktf"fkg" Xqtigjgpuygkug"pqej"ocn"fgwvnkejgt0 Cdd05<"Mqpuvtwmvkqp"gkpgu"MF/Dcwou"h¯t"gkpg"Rwpmvogpig"fgt"O ejvkimgkv"320"Fkg"Tgkjgphqnig"fgt"Mqp/ uvtwmvkqp"kp"fgp"Dknfgtp"gpvurtkejv"pkejv"fgt"Tgkjgphqnig"ko"tgmwtukxgp"Cwhdcw."fkg"fwtej"fgp"Rugwfqeqfg" dguejtkgdgp"ywtfg0"Fkgug"gvycu"kpvwkvkxgtg"Knnwuvtcvkqp"xgtfgwvnkejv"cdgt"fkg"igpgtgnng"Xqtigjgpuygkug."fkg" Kfgg"fgt"Mqpuvtwmvkqp"fgu"MF/Dcwou0 Fkg"tgmwtukxg"Hwpmvkqp"y¯tfg"pcv¯tnkej"|wgtuv"xqp"lgfgo"Mpqvgp"pcej"nkpmu"ncwhgp"wpf"gtuv"pcejfgo"ukg" |w"fgo"Mpqvgp"|wt¯emigmgjtv"kuv"pcej"tgejvu0"Fgt"Dcwo"y¯tfg"cnuq"xqp"nkpmu"pcej"tgejvu"wpf"xqp"wpvgp" pcej"qdgp"cwhigdcwv0 /"6"/ Fwtej"fkg"Ycjn"fgt"Vtgppwpi"koogt"kp"fgt"Okvvg"fgt"Rwpmvogpigp"kuv"ictcpvkgtv."fcuu"fkg"Cp|cjn"fgt"Dn vvgt"fgt" |ygk"Mkpfvgknd wog"gkpgu"dgnkgdkigp"Mpqvgpu"wo"oczkocn"3"cdygkejv0"Fgt"Dcwo"kuv"cnuq"dcncpekgtv0"Gu"uvgnnv"ukej" fkg"Htcig"ycu"rcuukgtv."ygpp"Rwpmvg"fkg"ingkejgp"Mqqtfkpcvgp"jcdgp0"Fkgu"m ppvg"|w"gkpgo"wpdcncpekgtvgp"Dcwo" h¯jtgp." fc" fkg" Vtgppwpi" kp" fgt" Okvvg" fgt" Mqqtfkpcvgp" pwp" |ygk" xgtuejkgfgpo ejvkig" Wpvgtogpigp" gt|gwigp" y¯tfg0" Ugnduv" Rwpmvg" okv" ingkejgp" Mqqtfkpcvgp" kp" pwt" gkpgt" Fkogpukqp" m ppgp" |w" fkgugo" Rtqdngo" h¯jtgp0" Gkpg"O inkejmgkv"y tg."fkg"Mqqtfkpcvgp"|w"mqodkpkgtgp."cnuq"dgk"gkpgo"igigdgpgp"Rwpmv"okv"Mqqtfkpcvgp"*z.{+" pgwg"Mqqtfkpcvgp"*z{."{z+"|w"dknfgp0"Ingkejg"Rwpmvg"ygtfgp"kp"gkpgt"Nkuvg"|wucoogpighcuuv"wpf"h¯t"fkg"Nkuvg" pwt"gkpgp"Tgrt ugpvcpvgp"kp"fgt"Rwpmvogpig"dgncuugp0"Fkgu"tgkejv"cwu"wo"h¯t"cnng"|w"dgctdgkvgpfgp"Rwpmvg"kp" lgfgt"Fkogpukqp"pwt"rcctygkug"xgtuejkgfgpg"Mqqtfkpcvgp"|w"ictcpvkgtgp0"Uqokv"kuv"ukejgtiguvgnnv."fcuu"fgt"Dcwo" dcncpekgtv"cwuhcnngp"yktf0 603"GhÞ"|kgp|"fgu"Mqpuvtwmvkqpucniqtkvjowu Ykg" ncpig" fcwgtv" gu" pwp" fkgugp" Dcwo" cwh|wdcwgpA" Wo" cdy igp" |w" m ppgp." qd" gu" ukej" ¯dgtjcwrv" nqjpv" gkp" Rtqdngo" okv" Jknhg" gkpgu" MF/Dcwou" cp|wigjgp." uqnnvg" ocp" fkgug" Htcig" dgcpvyqtvgp0" Fgt" Gkphcejjgkv" jcndgt" oqfkÞ"|kgtv"ocp"fkgug"Htcig"ogkuvgpu"gvycu"|w<"Ykg"ncpig"fcwgtv"gu"oczkocn"gkpgp"MF/Dcwo"cwh|wdcwgpA"Fkg" GhÞ"|kgp|cpcn{ug"h¯t"fgp"yqtuv/ecug."fgp"uejnkoouvgp"Hcnn."kuv"ogkuv"ygugpvnkej"gkphcejgt"cnu"fkg""fgu"cxgtcig/ecug." fgu"fwtejuejpkvvnkejgp"Hcnnu0"Dgko"cxgtcig/ecug"owuu"ocp"ukej"¯dgtngigp."ykg"fkg"Rwpmvogpigp"cwh "fgpgp"ocp" ctdgkvgv"yqjn"ogkuvgpu"dguejchhgp"ukpf0"H¯t"fgp"yqtuv/ecug"¯dgtngiv"ocp"ukej"ngfkinkej."ykg"ukg"ko"uejnkoouvgp"Hcnn" cwuugjgp"y¯tfgp0"Fgt"cxgtcig/ecug"gthqtfgtv"fcjgt"igpcwgtg"Mgppvpku"fgu"Cpygpfwpiuigdkgvu"wo"gkpg"Cwuucig" fct¯dgt"ocejgp"|w"m ppgp"okv"ygnejgp"Fcvgp"ocp"ogkuvgpu"mqphtqpvkgtv"kuv0"Qhv"igp¯iv"gu"cdgt"dgtgkvu."ygpp" ocp"ucigp"mcpp<"Gicn"ycu"mqoov."gu"mcpp"pkg"uejnkoogt"ygtfgp"cnu"000"0"Fkgu"gttgkejv"ocp"fwtej"fkg"Cpcn{ug"fgt" yqtuv/ecug"GhÞ"|kgpv0 Ykt"ykuugp"dgtgkvu<"Lgfgt"MF/Dcwo"kuv"gkp"dcncpekgtvgt"Dkp tdcwo0"Wpf<"Dgxqt"ykt"fctcp"igjgp"m ppgp."fgp"Dcwo" cwh|wdcwgp."o¯uugp"ykt"|wp ejuv"fkg"Rwpmvogpig"uqtvkgtgp0"Gu"n uuv"ukej"|gkigp."fcuu"fcu"Uqtvkgtrtqdngo"kp"fgt" GhÞ"|kgp|mncuug"Q*p"nqi"p+"nkgiv0"Gu"ikdv"Cniqtkvjogp."fkg"kp"fkgugt"Mncuug"uqtvkgtgp0"¥wo"Dgkurkgn"Ogtiguqtv"wpf" Swkemuqtv0"Fkgug"Cniqtkvjogp"uqnngp"jkgt"cdgt"pkejv"gtn wvgtv"ygtfgp0"Ykuugpuygtv"kuv"pwt."fcuu"fkg"Mqpuvtwmvkqp" fgu"MF/Dcwou"cwh "lgfgp"Hcnn"kp"Q*p"nqi"p+"nkgiv0"Gkpg"dguugtg"GhÞ"|kgp|mncuug"kuv"pkejv"gttgkejdct."fc"ykt"uqtvkgtgp" o¯uugp0"Gu"dngkdv"fkg"Htcig."qd"fgt"Cwhdcwcniqtkvjowu"kp"gkpgt"uejngejvgtgp"Mncuug"nkgiv0 /"7"/ Ykg"ko"Rugwfqeqfg"|w"ugjgp"kuv."owuu"fkg"Rwpmvogpig"kp"lgfgt"Tgmwtukqp"kp"fgt"Okvvg"igvgknv"ygtfgp0"Fc"ukg"h¯t" lgfg"Fkogpukqp"uqtvkgtv"xqtnkgiv"wpf"mgkpg"Rwpmvg"okv"ingkejgp"Mqqtfkpcvgp"xqtmqoogp."kuv"fkgu"pkejv"ygkvgt" uejykgtki0"Ocp"vgknv"ukg"gkphcej"dg|¯inkej"kjtgt"O ejvkimgkv"kp"ingkej"itq̌g"J nhvgp0"Fkgu"owuu"pcv¯tnkej"cpjcpf" fgt"Uqtvkgtwpi"kp"fgt"cmvwgnngp"Fkogpukqp"iguejgjgp0"Dgiqppgp"yktf"|wo"Dgkurkgn"okv"fgo"mngkpuvgp"Gngogpv" kp"fgt"uqtvkgtvgp"Nkuvg0"Fkgugu"wpf"fkg"fctcwh "hqnigpfgp"dku"|wt"Okvvg"ygtfgp"gkpgt"Wpvgtogpig"|wigqtfpgv."fkg" ¯dtkigp"fgt"cpfgtgp0"Pwp"ikdv"gu"cdgt"gkp"Rtqdngo<"Fkg"Uqtvkgtwpigp"h¯t"lgfg"Fkogpukqp"o¯uugp"kp"fgp"dgkfgp" Vgknogpigp" gtjcnvgp" dngkdgp0" Wpf" gkpg" Pgwuqtvkgtwpi" mqoov" pkejv" kp" Htcig." fgpp" gu" uqnn" xgtokgfgp" ygtfgp." h¯t"fgp"Vgknwpiuxqticpi"cwu"fgt"GhÞ"|kgp|mncuug"Q*p+"jgtcwu|wtwvuejgp0"Fkgu"y¯tfg"p onkej."ykg"ingkej"pqej"|w" ugjgp"ugkp"yktf."fkg"Mqpuvtwmvkqp"fgu"Dcwogu"ncpiucogt"cnu"Q*p"nqi"p+"ocejgp0 Gu" hqniv" pwp" gkp" Xqtuejnci" |wt" N uwpi" fkgugu" Vgknwpiurtqdngou0" Cnu" Fcvgpuvtwmvwt" |wt" Urgkejgtwpi" fgt" Rwpmvogpig" wpf" kjtgt" Uqtvkgtwpigp" yktf" gkpg" xgtmgvvgvg" Nkuvg" xgtygpfgv0" Fkg" Gngogpvg" fgt" xgtmgvvgvgp" Nkuvg" gpvjcnvgp"fkg"Rwpmvg"fgt"Rwpmvogpig0"Ko"hqnigpfgp"kuv"okv"Xgtmgvvwpi"gkp"dguvkoovgt"Ygi"fwtej"cnng"Gngogpvg" igogkpv0"Fctkp"mqoov"lgfgu"Gngogpv"igpcw"gkpocn"xqt0"Fkg"Xgtmgvvwpi"yktf."ykg"kp"xgtmgvvgvgp"Nkuvgp"¯dnkej."cnu" Hqnig"xqp"¥gkigtp"tgcnkukgtv."fkg"kp"fgp"Gngogpvgp"fgt"Nkuvg"igurgkejgtv"ukpf0"Fkg"Uqtvkgtwpi"h¯t"lgfg"Fkogpukqp" yktf"cnu"gkpg"uqnejg"Xgtmgvvwpi"cnngt"Gngogpvg"igurgkejgtv0"Gu"ikdv"cnuq"h¯t"lgfg"Fkogpukqp"gkpg"Xgtmgvvwpi"cnngt" Rwpmvg0" O ejvg" ocp" fkg" Rwpmvg" kp" fgt" Tgkjgphqnig" kjtgt" Uqtvkgtwpi" dguwejgp." owuu" ocp" pwt" fkg" Xgtmgvvwpi" Cdd06<"Ogjthcej"xgtmgvvgvg"Nkuvg."fkg"fkg"Rwpmvg"gpvj nv0"Jkgt"h¯t"ftgk"Fkogpukqpgp0"Fkg"Rhgkng"tgrt ugpvkgtgp"¥gkigt"xqp"gkpgo"Gngogpv"|wo"p ejuvgp0 gpvncpi"ncwhgp0"Mqoogp"ykt"|wo"Vgknwpiuxqticpi0"Fc"wpu"fkg"O ejvkimgkv"fgt"Nkuvg"dgmcppv"kuv."kuv"wpf"cwej" fkg"O ejvkimgkv"o"kjtgt"J nhvgp"dgmcppv0"Ykt"fwtejncwhgp"cnuq"o"Gngogpvg"gpvncpi"fgt"Uqtvkgtwpi"fgt"cmvwgnngp" Fkogpukqp"wpf"octmkgtgp"fkgug0"Ukg"igj tgp"|w"fgt"gkpgp"J nhvg."fkg"wpoctmkgtvgp"|wt"cpfgtgp0"Pwp"hqniv"fcu" ⁄dgtpgjogp"fgt"Uqtvkgtwpi"gpvncpi"gkpgt"cpfgtgp"Fkogpukqp"kp"fkg"dgkfgp"J nhvgp0"Fkgu"iguejkgjv."kpfgo"ykt" cp" fgt" Xgtmgvvwpi" fkgugt" cpfgtgp" Fkogpukqp" gpvncpi" ncwhgp" wpf" fkg" Octmkgtwpigp" fgt" Gngogpvg" dgvtcejvgp0" Kuv"gkp"Gngogpv"octmkgtv."uq"gtuvgnngp"ykt"ko"|wngv|v"ighwpfgpgp"octmkgtvgp"Gngogpv"gkpgp"¥gkigt"cwh "fcu"pgwg" /"8"/ ighwpfgpg0"H¯t"fkg"Wpoctmkgtvgp"xgthcjtgp"ykt"cpcnqi0" Fkg"Nkuvg"owuu"uq"h¯t"lgfg"Fkogpukqp"gkpocn"mqorngvv" fwtejncwhgp"ygtfgp0"Ykt"dngkdgp"cnuq"kp"Q*p+0 Okv"fkgugo"Ykuugp"n uuv"ukej"|gkigp."fcuu"fkg"Mqpuvtwmvkqp" gkpgu"MF/Dcwou"kp"Q*p"nqi"p+"nkgiv0"Fc"fkg"Rwpmvogpig" dgk" lgfgt" Tgmwtukqp" cwhigvgknv" yktf" wpf" mgkpg" Rwpmvg" Cdd07<"Tgmwtukqpudcwo"wpf"Uejtkvvg"rtq"Tgmwtukqp"wpf"Tgmwtukqpu/ gdgpg0"Jkgt"h¯t"gkpg"Rwpmvogpig"fgt"O ejvkimgkv":0"Ocp"gtmgppv"fkg" nqi"p"-"3"Gdgpgp"wpf"fkg"p"Uejtkvvg"rtq"Gdgpg0 xgtfqrrgnv" ygtfgp" wpf" mgkpg" pgwgp" jkp|wmqoogp." o¯uugp" rtq" Tgmwtukqpugdgpg" Vgknogpigp" okv" gkpgt" Igucovo ejvkimgkv" xqp" p" cwhigvgknv" ygtfgp0" Fkg" Vgknogpigp"ygtfgp"|yct"rtq"Tgmwtukqpgdgpg" koogt"wo"fkg"J nhvg"mngkpgt."fcdgk"xgtfqrrgnv"ukej"kjtg"Cp|cjn" cdgt0"Fkg"Vgknwpi"fgt"Ogpigp"gthqtfgtv"cnuq"rtq"Gdgpg"p"Uejtkvvg0"Fc"fkg"Ogpigp"lgfguocn"jcndkgtv"ygtfgp."ukpf" ukg" kp" nqi" p" Uejtkvvgp" cwh " gkpgngogpvkig" Ogpigp" |wucoogpiguejtworhv." fgt" Cniqtkvjowu" vgtokpkgtv0" Gu" ukpf" cnuq"nqi"p"-"3"Tgmwtukqpgdgpgp"p vki"wo"fkg"Ogpig"mqorngvv"|w"|gtvgkngp0"Cwh "fgt"ngv|vgp"Gdgpg"owuu"|yct" pkejv"ogjt"igvgknv"ygtfgp."gkp"Xgtingkej"kuv"cdgt"fqej"p vki0"Gu"owuu"uejnkǧnkej"igrt¯hv"ygtfgp."qd"pwt"pqej"gkp" Gngogpv"kp"fgt"Ogpig"xqtjcpfgp"kuv0"Fcokv"jcdgp"ykt"h¯t"fgp"Mqpuvtwmvkqpucniqtkvjowu"gkpg"GhÞ"|kgp|mncuug" xqp"Q*p"nqi"p+0"Fkgu"iknv"h¯t"¥gkv"wpf"Urgkejgt."fc"gkp"Dkp tdcwo"p"nqi"p"Mpqvgp"wpf"Dn vvgt"gpvj nv"wpf"fgt"MF/ Dcwo"gkp"Dkp tdcwo"kuv0 Gdgphcnnu" iknv" fkgu" h¯t" Rwpmvogpigp" kp" j jgtfkogpukqpcngp" T wogp0" Fkg" Mqpuvtwmvkqpuygkug" fgu" MF/Dcwou" fwtej"Cwhvgknwpi"fgt"Ogpig"kp"koogt"|ygk"Wpvgtogpigp"gpvncpi"tgkjwo"ygejugnpfgt"Fkogpukqpgp"uqtiv"fch¯t." fcu"ukej"dgnkgdkifkogpukqpcng"Ogpigp"xqnnuv pfki"kp"gkpgo"Dkp tdcwo"okv"lg"|ygk"Mkpfgtp"rtq"Mpqvgp"urgkejgtp" ncuugp0"Fgt"Mqpuvtwmvkqpucniqtkvjowu"igjv"dgk"M"Fkogpukqpgp"igpcwuq"xqt"ykg"dgk"|ygkgp0"Nkpkgp"ukpf"fwtej" Hn ejgp."d|y0"J{rgtà" ejgp"|w"gtugv|gp."Hn ejgp"fwtej"T wog."d|y0"J{rgtt wog0 /"9"/ 70"Cniqtkvjogp"cwh "MF/D wogp 703"Dgtgkejuuwejg Gkpg" urg|kgnng" Cpygpfwpi" xqp" MF/D wogp" kuv" fkg" Dgtgkejuuwejg0" Fcdgk" igjv" gu" wo" fkg" Htcig" äYgnejg" Rwpmvg" dgÞ"pfgp" ukej" kp" gkpgo" igigdgpgp" TgejvgemAÑ0" MF/D wog" m ppgp" fkgug" Htcig" qhv" tgejv" uejpgnn" dgcpvyqtvgp0" Wo" fkg" Xqtigjgpuygkug" dgk" fgt" Dgtgkejuuwejg" kp" gkpgo" MF/ Dcwo"|w"gtmn tgp."owuu"|wp ejuv"fgt"Dgitkhh "fgt"Tgikqp"gtn wvgtv"ygtfgp0"Dgk"fgt"Mqpuvtwmvkqp"fgu"MF/Dcwou" ywtfg"gkpg"Cp|cjn"Vtgppnkpkgp"fwtej"fkg"Rwpmvogpig"igngiv0"Lgfg"fkgugt"Nkpkgp"mqttgurqpfkgtv"okv"gkpgt"igykuugp" Hn ejg"ko"|ygkfkogpukqpcngp"Tcwo0"Gu"jcpfgnv"ukej"fcdgk"wo"fkg"Hn ejg."fkg"xqp"fgt"Nkpkg"fwtejoguugp"wpf" igvgknv"yktf0"Fc"fkg"Vtgppnkpkgp"kp"fgp"Mpqvgp"fgu"Dcwou"igurgkejgtv"ygtfgp."mqttgurqpfkgtv"cwej"lgfgt"Mpqvgp" okv"gkpgt"uqnejgp"Hn ejg0"Fkg"Jkgtctejkg"fgt"Mpqvgp"n uuv"ukej"gdgphcnnu"cwh "fkg"Nkpkgp"¯dgtvtcigp"wpf" w̌gtv" ukej"fgtctv."fcuu"¯dgtigqtfpgvg"Nkpkgp"fkg"Tgikqpgp"wpvgtigqtfpgvgt"Nkpkgp"dgitgp|gp0"Fkgu"n uuv"ukej"co"dguvgp" cpjcpf"gkpkigt"Dknfgt"|gkigp0 Cdd08<"Tgikqp"fgt"gtuvgp"Vtgppnkpkg."d|y0"fgu"gtuvgp"Mpqvgpu0"Fkg"Nkpkg."gkigpvnkej" Cdd0:<"Tgikqp"fgt"ugejuvgp"Vtgppnkpkg0"Dgitgp|v"fwtej"fkg"¯dgtigqtfpgvg"ftkvvg" /":"/ Ocp" ukgjv" ugjt" fgwvnkej." ykg" fkg" Uvtwmvwt" fgu" Dcwou" ukej" igqogvtkuejg" cwungigp" n uuv0" Qd" gkp" Mpqvgp" nkpmgu" qfgt"tgejvgu"Mkpf"ugkpgu"Xcvgtu"kuv."dguvkoov"cwh "ygnejgt"Ugkvg"fkg"Vtgppnkpkg"fgu"Xcvgtu"fkg"Tgikqp"fgu"Mkpfgu" dgitgp|v0"Cwh "fkgug"Ygkug"n uuv"ukej"dgko"Cduvkgi"fwtej"fgp"Dcwo"|w"gkpgo"Mpqvgp"fguugp"Tgikqp"dguvkoogp0" Kp" fgp" Mpqvgp" ukpf" fkg" Mqqtfkpcvgp" fgt" Vtgppnkpkgp" igurgkejgtv0" Y jtgpf" fgu" Cduvkgiu" m ppgp" pcej" wpf" pcej"fkg"Dgitgp|wpigp"fgt"Tgikqp"cdigngugp"ygtfgp0"Tgikqpgp"wpvgtigqtfpgvgt"Mpqvgp."cnuq"xqp"Mpqvgp."fkg" wpvgtjcnd"gkpgu"cpfgtgp"Mpqvgpu"nkgigp."ygtfg"kej"ko"Ygkvgtgp"cnu"wpvgtigqtfpgvg"Tgikqpgp"dg|gkejpgp0"Ukg"ukpf" fgt"Tgikqp"fkgugu"¯dgtigqtfpgvgp"Mpqvgpu"wpvgtigqtfpgv0"Fkg"Tgikqpgp"fgt"Mpqvgp"wpvgtnkgigp"cnuq"fgt"ingkejgp" Jkgtctejkg"ykg"fkg"Mpqvgp"ugnduv0 H¯t" fkg" Dgtgkejuuwejg" ukpf" fkg" Tgikqpgp" xqp" Dgfgwvwpi0" Wo" |w" dgcpvyqtvgp." ygnejg" Rwpmvg" kp" gkpgo" igigdgpgp"Tgejvgem"nkgigp."igjv"ocp"hqnigpfgtocuugp"xqt<"Ocp"uvgkiv"fgp"Dcwo"tgmwtukx"xqp"fgt"Ywt|gn"cwu" jgtcd."dguvkoov"h¯t"lgfgp"Mpqvgp"ugkpg"Tgikqp"wpf"rt¯hv"cwej"uqhqtv."qd"fkg"Tgikqp"xqp"gkpgt"fgt"Ugkvgp"fgu" Tgejvgemu"iguejpkvvgp"yktf0"Kuv"fkgu"fgt"Hcnn."uq"o¯uugp"cwej"fkg"Tgikqpgp"fgt"Mkpfgt"fgu"cmvwgnngp"Mpqvgpu" igrt¯hv"ygtfgp0"Yktf"fkg"Tgikqp"lgfqej"pkejv"iguejpkvvgp."uq"ygǩ"ocp."fcuu"cwej"fkg"Tgikqpgp"cnngt"Mpqvgp" wpvgtjcnd" fgu" cmvwgnngp" Mpqvgpu" pkejv" xqo" Tgejvgem" dgt¯jtv" ygtfgp0" Ocp" mcpp" fcpp" cnuq"fkg"Tgmwtukqp"h¯t"fkgugu"¥ygki"dggpfgp0" Uvgnnv"ocp"hguv."fcuu"ukej"fkg"cmvwgnng"Tgikqp" xqnnuv pfki"ko"Tgejvgem"dgÞ"pfgv."uq"m ppgp" cnng" Dn vvgt" wpvgtjcnd" fgu" cmvwgnngp" Mpqvgpu" |wt¯emigigdgp" ygtfgp0" Ukg" nkgigp" kp" lgfgo" Hcnn"cnng"ko"Tgejvgem0 Fkg" Uwejg" uv¯v|v" ukej" cwh " fkg" Jkgtctejkg" fgt" Tgikqpgp" wpf" Vtgppnkpkgp0" Fc" wpvgtigqtfpgvg" Tgikqpgp" koogt" pwt" " fkg" Hn ejg" kjtgt" ¯dgtigqtfpgvgp" Tgikqp" ygkvgt" cwhvgkngp" wpf" fkg" ¯dgtigqtfpgvg" ykgfgtwo" xqp"kjtgt"¯dgtigqtfpgvgp"Vtgppnkpkg"dgitgp|v" yktf."kuv"mnct."fcuu"cwej"cnng"wpvgtigqtfpgvgp" Cdd032<"Dgtgkejuuwejg"kp"gkpgo"MF/Dcwo0"Tqv"<"Dgtgkejg."fkg"igrt¯hv"ygtfgp"o¯uugp0" Uejyct|<"Wpdgt¯jtvg"Dgtgkejg0"It¯p<"Dgtgkejg."fkg"wpigrt¯hv"|wt¯ejigigdgp"ygtfgp"m p/ pgp0"Ocp"ukgjv."dgk"mngkpgo"Uwejdgtgkej""m ppgp"igycnvkig"Gkpurctwpigp"o inkej"ygtfgp0 Tgikqpgp" xqp" fkgugt" Vtgppnkpkg" dgitgp|v" ygtfgp0" DgÞ"pfgv" ukej" cnuq" fgt" Uwejdgtgkej" /";"/ |wo"Dgkurkgn"xqnnuv pfki"tgejvu"xqp"gkpgt"Vtgppnkpkg."uq"o¯uugp"fkg"Tgikqpgp"nkpmu"xqp"fgt"Vtgppnkpkg"pkejv"ygkvgt" dgt¯emukejvkiv"ygtfgp0"Lg"pcejfgo."ykg"fgt"Uwejdgtgkej"cwuh nnv."m ppgp"fcjgt"ygkvg"Vgkng"fgu"Dcwogu"wpdgt¯jtv" dngkdgp0 70303"GhÞ"|kgp|"fgt"Dgtgkejuuwejg Gu" hqniv" pwp" fkg" Cpcn{ug" fgt" GhÞ"|kgpv" fgu" yqtuv/ecug" fgt" Dgtgkejuuwejg0" Ykg" uejqp" kp" Cduejpkvv" 603" ¯dgt" fkg" GhÞ"|kgp|" fgu" Mqpuvtwmvkqpucniqtkvjowu" iguciv." igjv" gu" dgk" fgt" yqtuv/ecug" GhÞ"|kgp|cpcn{ug" fctwo." fgp" uejngejvguvo inkejgp"Hcnn"|w"Þ"pfgp"wpf"ugkpg"GhÞ"|kgp|"|w"dguvkoogp0"Fkg"Dgtgkejuuwejg."d|y0"fcu"Fwtejncwhgp" fgu" MF/Dcwogu" wpf" fkg" ⁄dgtrt¯hwpi" fgt" gkp|gnpgp" Mpqvgp" wpf" Dn vvgt." igjv" wo" uq" uejpgnngt" xqp" uvcvvgp." lg" ygpkigt" Tgikqpgp" xqo" Uwejtgejvgem" iguejpkvvgp" ygtfgp0" Yktf" gkpg" Tgikqp" iguejpkvvgp." uq" owuu" cwh " fgt" p ejuvvkghgtgp" Gdgpg" gdgphcnnu" igrt¯hv" ygtfgp0" Yktf" gkpg" Tgikqp" pkejv" iguejpkvvgp." mcpp" fkg" Uwejg" h¯t" fkg" wpvgtigqtfpgvgp" Tgikqpgp" dggpfgv" ygtfgp0" Jkp|w" mqoov." fcuu" fcu" ¥wt¯emigdgp" fgt" ighwpfgpgp" Dn vvgt" gdgphcnnu"¥gkv"kp"Cpurtwej"pkoov0"Fctcwu"gtikdv"ukej."fcuu"fgt"yqtuv/ecug"fgt"Dgtgkejuuwejg"fcpp"gkpvtkvv."ygpp" fcu"Uwejtgejvgem"o inkejuv"itq̌"kuv."fkg"igucovg"Rwpmvogpig"wohcuuv0"Fc"fgt"MF/Dcwo"dcncpekgtv"kuv."jcdgp"fkg" Mpqvgp"cwh "gkpgt"Gdgpg"cnng"fkg"ingkejg"Cp|cjn"Mkpfmpqvgp"*okv"gkpgt"oczkocngp"Cdygkejwpi"xqp"3+0"Fcu"jgǩv" cdgt"cwej."fcuu"cnng"Tgikqpgp"fkg"ingkejg"Cp|cjn"¯dgtigqtfpgvgt"Tgikqpgp"jcdgp0"Fctcwu"hqniv."fcuu"gicn"yq"ocp" gkpg" jqtk|qpvcng" qfgt" xgtvkmcng" Igtcfg" fwtej" fkg" Rwpmvogpig" ngiv." koogt" fkg" ingkejg" Cp|cjn" cp" Tgikqpgp" iguejpkvvgp" yktf0" Ygpkigt"m ppgp"gu"pwt"ugkp."ygpp"gu"mgkpg"Igtcfg"uqpfgtp"pwt" gkpg" Uvtgemg" kuv" wpf" fkgug" pkejv" fkg" igucovg" Cwufgjpwpi" fgt" Rwpmvogpig" ¯dgturcppv0" Fkg" oczkocng" Cp|cjn" cp" Tgikqpgp" yktf" cnuq" fcpp" iguejpkvvgp." ygpp" fcu" Uwejtgejvgem" cwu" xkgt" Uvtgemgp"dguvgjv."|ygk"jqtk|qpvcngp"wpf"|ygk"xgtvkmcngp."fkg"fkg" igucovg"Cwufgjpwpi"fgt"Rwpmvogpig"wourcppgp0"Kp"fgo"Hcnn" o¯uugp" pcv¯tnkej" cwej" cnng" Rwpmvg" |wt¯emigigdgp" ygtfgp." ukg" nkgigp"lc"cnng"ko"Tgejvgem0"Fkg"Htcig"kuv"fcjgt."ykgxkgng"Tgikqpgp" igrt¯hv" ygtfgp" o¯uugp." d|y0" ykgxkgng" xqp" fgp" xkgt" Uvtgemgp" iguejpkvvgp"ygtfgp0 /"32"/ Cdd033<"Uejgocvkuejg"Fctuvgnnwpi"fgt"Tgmwttgp|0"Ko"Mpqvgp" cwh "fgt"20"Gdgpg"xgtn whv"fkg"Vtgppnkpkg"rctcnngn"|wt"Dgtgkeju/ itgp|g."gu"yktf"pwt"gkpg"Mkpftgikqp"iguejpkvvgp0"Fkg"Mkpfgt"fgu" uejyct|gp"Mpqvgp"cwh "fgt"30"Gdgpg"ygtfgp"dgkfg"iguejpkvvgp0" H¯t"ukg"mcpp"gtpgwv"fcu"Uejgoc"gkpigugv|v"ygtfgp0"Fcu"Uejgoc" kuv"cnuq"tgmwtukx0"Gu"xgtfgwvnkejv"fkg"Tgmwttgp|hqtogn0 Wo"fkgu"|w"dgcpvyqtvgp."dgvtcejvgp"ykt"pwt"gkpg"fgt"Uvtgemgp0"Okv"fgp"cpfgtgp"xgtj nv"gu"ukej"uejnkǧnkej"igpcwuq0" Fkg"⁄dgtngiwpi"kuv"hqnigpfg<"Jcdgp"ykt"gu"okv"gkpgt"fgt"xgtvkmcngp"Uvtgemgp"|w"vwp."uq"gtigdgp"ukej"|ygk"H nng0" Fgt"gtuvg"Hcnn"vtkvv"gkp."ygpp"fkg"Vtgppnkpkg"fgt"cmvwgnn"dgvtcejvgvgp"Gdgpg"gdgphcnnu"xgtvkmcn"xgtn whv0"Fcpp"mcpp" fkg"Uvtgemg"pwt"cwh "gkpgt"Ugkvg"fkgugt"Vtgppnkpkg"nkgigp."tgejvu"qfgt"nkpmu0"Kp"uq"gkpgo"Hcnn"yktf"cnuq"pwt"gkpg"fgt" wpvgtigqtfpgvgp"Tgikqpgp"iguejpkvvgp0"Fcu"jgǩv."Tgikqpgp."fkg"cwh "fgt"cpfgtgp"Ugkvg"nkgigp."m ppgp"wpvgt"mgkpgp" Wouv pfgp"ogjt"iguejpkvvgp"ygtfgp0"Kuv"fkg"Vtgppnkpkg"jkpigigp"jqtk|qpvcn."uq"ygtfgp"dgkfg"wpvgtigqtfpgvgp" Tgikqpgp"iguejpkvvgp0"Fkgug"Uejpkvvtgign"ugv|v"ukej"tgmwtukx"fwtej"fkg"Wpvgttgikqpgp"hqtv0"Ukg"n uuv"ukej"fcjgt"cnu" Tgmwttgp|hqtogn"uejtgkdgp< S*p+"? Q*3+." "hcnnu"p"?"3 }" "" 4"-"4S*p16+."uqpuv Kp"iguejnquugpgt"Hqto"iguejtkgdgp< 4 nqi6*p+ "-"4"nqi6*p+"-"4 nqi6*p+ Q*3+ Fkgug"Hqtogn"n uuv"ukej"cwà" ugp"|w"Q*p+"?"Áp0"Fkg"icp|g"⁄dgtngiwpi"iknv"cpcnqi"h¯t"fkg"jqtk|qpvcngp"Uvtgemgp."uq" fcuu"ykt"cwh "kpuigucov"6"Q*Áp+"iguejpkvvgpg"Tgikqpgp"mqoogp0"Fcu"dgfgwvgv"h¯t"fkg"Dgtgkejuuwejg."fcuu"6Q*Áp+" Mpqvgp"igrt¯hv"wpf"m"Rwpmvg"|wt¯emigigdgp"ygtfgp"o¯uugp0"Ykt"gtjcnvgp"6Q*Áp"-"m+"Uejtkvvg0"Fkg"GhÞ"|kgp|"fgt" Dgtgkejuuwejg"nkgiv"cnuq"kp"Q*Áp"-"m+0 Cpcn{ukgtv"ocp"fkg"Dgtgkejuuwejg"h¯t"dgnkgdkig"Fkogpukqpgp."gtj nv"ocp"gkpg"cnnigogkpgtg"Hqtogn0"H¯t"dgnkgdkig" Fkogpukqp"f"kuv"fkg"Dgtgkejuuwejg"cwu"Q*p3/31f"-"m+0 80"Xgtingkej"okv"cpfgtgp"Fcvgpuvtwmvwtgp Ykg" dgtgkvu" iguciv." gu" ikdv" ogkuvgpu" pkejv" fkg" Gkpg." dguvg" N uwpi0" Lgfgu" Rtqdngo" uvgnnv" cpfgtg" Cphqtfgtwpigp" cp"fgp"N uwpiuygi0"H¯t"ocpejg"Rtqdngog"kuv"fgt"gkpg"Cpucv|"dguugt"iggkipgv."h¯t"cpfgtg"Rtqdngog"fgt"cpfgtg" Cpucv|0"Fcjgt"kuv"gu"ykejvki."xgtuejkgfgpg"Cpu v|g"|wt"N uwpi"gkpgu"Rtqdngou"|w"dgvtcejvgp"wpf"|w"xgtingkejgp0" Pwt"uq"ukgjv"ocp"fkg"Uv tmgp"wpf"Uejy ejgp"lgfgu"gkp|gnpgp0"Cp"fkgugt"Uvgnng"urkgnv"pcv¯tnkej"fkg"GhÞ"|kgp|cpcn{ug" gkpg"icp|"gpvuejgkfgpfg"Tqnng."fgpp"ukg"ikdv"wpu"fkg"Swcnkv vgp"gkpgu"Cniqtkvjowu"kp"¥cjngp"|wt¯em0"Uqokv"ncuugp" ukej"fkg"gkp|gnpgp"Cniqtkvjogp"lgfgt"Fcvgpuvtwmvwt"pgdgpgkpcpfgt"uvgnngp"wpf"xgtingkejgp0 /"33"/ Pgdgp"fgo"MF/Dcwo"uqnngp"jkgt"pqej"|ygk"ygkvgtg"Dcwouvtwmvwtgp"dgvtcejvgv"ygtfgp0"Fkgu"ukpf"|wo"gkpgp" fgt"Swcfdcwo"wpf"|wo"cpfgtgp"fgt"Dgtgkejudcwo0"Ykg"fkg"Pcogp"xgtowvgp"ncuugp."jcpfgnv"gu"ukej"dgk"dgkfgp" wo"Dcwouvtwmvwtgp0"Dgkfg"qrgtkgtgp"cwh "Rwpmvogpigp0"Kjtg"Mqpuvtwmvkqpuygkug."GhÞ"|kgp|."Xqt/"wpf"Pcejvgkng"" igigp¯dgt"fgo"MF/Dcwo"uqnngp"jkgt"mwt|"wouejtkgdgp"ygtfgp0 Dgvtcejvgp" ykt" |wp ejuv" fgp" Swcfdcwo0" Ugkpg" Mqpuvtwmvkqpuygkug" jcv" gpvhgtpv" jpnkejmgkv" okv" fgt" fgu" MF/ Dcwou0" Wo" gkpg" igigdgpg" Rwpmvogpig" ngiv" ocp" |wp ejuv" gkp" Swcftcv." co" dguvgp" okv" gkpgt" ¥ygkgtrqvgp|" cnu"Ugkvgpn pigp0"Fcu"mcpp"pcv¯tnkej"fc|w"h¯jtgp."fcuu"fcu"Swcftcv"gkp"Uv¯em"it ̌gt"yktf."cnu"fkg"vcvu ejnkejg" Cwufgjpwpi"fgt"Rwpmvogpig."gu"n uuv"ukej"ur vgt"cdgt"dguugt"wpvgtvgkngp0"Fkg"Cwufgjpwpi"fgu"Swcftcvu"yktf" ko"Ywt|gnmpqvgp"fgu"Swcfdcwou"igurgkejgtv0"Pwp"yktf"fcu"Swcftcv"jqtk|qpvcn"wpf"xgtvkmcn"okvvki""igvgknv."cnuq" igxkgtvgnv0"Fcpp"rt¯hv"ocp"fkg"gpvuvcpfgpgp"Xkgtvgnswcftcvg"cwh "fkg"gpvjcnvgpg"Rwpmv|cjn0"Kuv"pwt"pqej"gkp"Rwpmv" gpvjcnvgp."uq"yktf"fgt"Cniqtkvjowu"h¯t"fkgugu"Swcftcv"dggpfgv."uqpuv"yktf"fcu"Swcftcv"gdgphcnnu"igxkgtvgnv0"H¯t" lgfgu"Xkgtvgnswcftcv"yktf"gkp"Mpqvgp."qfgt"Dncvv."ygpp"gu"pwt"gkpgp"Rwpmv"gpvj nv."cp"fgp"Ywt|gnmpqvgp"igj piv0" Cwh "fkgug"Ygkug"xgth jtv"ocp"ygkvgt0"Fkg"Swcftcvg"ygtfgp"uqncpig"igxkgtvgnv."dku"cnng"Rwpmv"kp"gkpgo"gkigpgp" Swcftcv"nkgigp0"Fgt"gpvuvcpfgpg"Dcwo"jcv"cp"lgfgo"Mpqvgp"xkgt"Mkpfgt."fcjgt"fgt"Pcog"Swcfdcwo0 Cdd0;<"Mqpuvtwmvkqp"gkpgu"Swcfdcwou"cwh "gkpgt"Rwpmvogpig"okv"J whwpiurwpmv0"Fgt"Swcfdcwo"kuv"gpvctvgv0 Kp"fgt"ItcÞ"m"gtmgppv"ocp"|wo"gkpgp"fkg"Mqpuvtwmvkqpuygkug"fgu"Swcfdcwou."|wo"cpfgtgp"cwej"ugkp"itq̌gu" Rtqdngo<" Fc" fkg" Rwpmvogpig" pkejv" cpjcpf" fgt" Rwpmvgxgtvgknwpi." uqpfgtp" gkphcej" koogt" okvvki" igvgknv" yktf." gpvctvgv"fgt"Swcfdcwo"dgk"Rwpmvogpigp"fkg"J whwpigp"cwhygkugp0"DgÞ"pfgp"ukej"cp"gkpgt"Uvgnng"dguqpfgtu"xkgng" Rwpmvg"cwh "gpigo"Tcwo."owuu"jkgt"ugjt"qhv"igxkgtvgnv"ygtfgp."dku"cnng"Rwpmvg"wpvgtigdtcejv"ukpf0"Cp"cpfgtgp" Uvgnngp"owuu"ygpkigt"qhv"igxkgtvgnv"ygtfgp0"Fgt"Vgkndcwo."fgt"fgo"Swcftcv"okv"fgp"xkgngp"Rwpmvgp"gpvurtkejv." y ejuv" fcjgt" igigp¯dgt" fgp" cpfgtgp" Vgknd wogp" ugjt" uvctm" cp0" Fwtej" fkg" Gpvctvwpi" xgtuejngejvgtv" ukej" fkg" GhÞ"|kgp|"fgu"Swcfdcwou"gpvurtgejgpf0 /"34"/ Gkp"Dgtgkejudcwo"dguvgjv"cwu"gkpgo"dcncpekgtvgp."uqtvkgtvgp"Dkp tdcwo."fgt"fkg"Z/Mqqtfkpcvgp"fgt"Rwpmvg"kp" fgt"igigdgpgp"Rwpmvogpig"gpvj nv0"Cp"lgfgo"Mpqvgp"fkgugu"Dcwou"j piv"gkp"dgkigqtfpgvgt"Dcwo."kp"fgo"fkg" |wigj tkigp"[/Mqqtfkpcvgp"igurgkejgtv"ygtfgp0"Fkgug"D wog"ukpf"gdgphcnn"dcncpekgtvg."uqtvkgtvg"Dkp td wog0"Ukg" gpvjcnvgp"pkejv"pwt"fkg"[/Mqqtfkpcvgp."uqpfgtp"fkg"icp|gp"Rwpmvg0"Fgt"gkpgo"Mpqvgp"ko"Z/Dcwo"dgkigqtfpgvg" [/Dcwo" gpvj nv" fkg" ingkejgp" Rwpmvg." fkg" wpvgt" fgo" Mpqvgp" ko" Z/Dcwo" nkgigp." cnngtfkpiu" kp" gkpgt" cpfgtgp" Uqtvkgtwpi."p onkej"gpvncpi"fgt"[/Mqqtfkpcvg0"Fwtej"fkgug"Mqpuvtwmvkqp"yktf"fkg"¥gkvghÞ"|kgp|"fgt"Dgtgkejuuwejg" igigp¯dgt" fgo" MF/Dcwo" pqej" xgtdguugtv0" Ocp" uwejv" |wp ejuv" ko" Z/Dcwo" fgp" igigdgpgp" Z/Dgtgkej0" Pwp" dtcwejv"ocp"pwt"pqej"fkg"fgp"ighwpfgpgp"Z/Mpqvgp"dgkigqtfpgvgp"[/D wog"|w"fwtejuwejgp0"Uqokv"urctv"ocp" ukej"gkpkig"Ctdgkv0"Fkgug"Xgtdguugtwpi"igjv"cnngtfkpiu"|w"Ncuvgp"fgt"UrgkejgtghÞ"|kgp|."fc"pwp"pkejv"pwt"gkp"Dcwo" igurgkejgtv"ygtfgp"owuu."uqpfgtp"|wu v|nkej"lgfgt"Vgkndcwo"fqrrgnv"xqtmqoov0"Fwtej"gkpg"ygkvgtg"Vgejpkm"n uuv" ukej"fkg"¥gkvghÞ"|kgp|"fgt"Dgtgkejuuwejg"uqict"pqej"ygkvgt"xgtdguugtp0 Gu" hqniv" pwp" gkp" ⁄dgtdnkem" fgt" GhÞ"|kgp|gp" fgt" dguejtkgdgpgp" D wog0" Fc" fgt" Swcfvtgg" pkejv" gzrnk|kv" h¯t" fkg" Dgtgkejuuwejg"iggkipgv"kuv."uqpfgtp"gjgt"cpfgtg"Cniqtkvjogp"wpvgtuv¯v|v."kuv"fkg"GhÞ"|kgp|"fgt"Dgtgkejuuwejg"pwt" h¯t"MF/Dcwo"wpf"Dgtgkejudcwo"cwhignkuvgv0 Swcfdcwo MF/Dcwo Dgtgkejudcwo Urgkejgtxgtdtcwej Q**v"-"3+"p+ Q*p+ Q*p"nqifko/3"p+ Mqpuvtwmvkqpu|gkv Q**v"-"3+"p+ Q*p"nqi"p+ Q*p"nqifko/3"p+ Dgtgkejuuwejg Q*p3/31fko"-"m+ Q*nqifko/3"p"-"m+ 90"Cpygpfwpigp MF/D wog"ukpf"h¯t"fkg"Dgtgkejuuwejg"iwv"iggkipgv0"Cnuq"h¯t"fkg"Dgcpvyqtvwpi"fgt"Htcig"äYgnejg"Rwpmvg"nkgigp" kp"gkpgo"igigdgpgp"Dgtgkej"*Tgejvgem."Swcfgt="000+AÑ0"Gkp"ykejvkigu"Cpygpfwpiuigdkgv"ukpf"fcjgt"Fcvgpdcpmgp0" Fgpp"fkg"Fcvgpu v|g"okv"lgygknu"z"Hgnfgtp."fkg"kp"fgt"Fcvgpdcpm"cdigngiv"ygtfgp."ncuugp"ukej"cnu"Rwpmvg"kp"gkpgo" z/fkogpukqpcngp" Tcwo" kpvgtrtgvkgtgp0" Fcokv" yktf" fkg" Fcvgpdcpm" |w" gkpgt" itq̌gp" Rwpmvogpig." cwu" fgt" ukej" gkp"MF/Dcwo" gt|gwigp"n uuv0" Cpigpqoogp." kp"fgt"Fcvgpdcpm" ukpf"Okvctdgkvgtfcvgp" igurgkejgtv0"Gkpg" Urcnvg" gpvj nv"fcu"Igjcnv."gkpg"cpfgtg"fcu"Cnvgt."gkpg"ftkvvg"fcu"Gkpuvgnnwpiufcvwo0"Dknfgv"ocp"fkgug"ftgk"Urcnvgp"cwh "fkg" /"35"/ Fkogpukqpucejugp"fgu"ftgkfkogpukqpcngp"Tcwou"cd."uq"ncuugp"ukej"cnng"Okvctdgkvgtfcvgpu v|g"cnu"Rwpmvg"kp"fgp" Tcwo"gkpqtfpgp0"Pwp"mcpp"gkp"ftgkfkogpukqpcngt"MF/Dcwo"gt|gwiv"ygtfgp."¯dgt"fgp"ocp"fcpp"Dgtgkejuuwejgp" kp"fgt"Fcvgpdcpm"cwuh¯jtgp"mcpp0"Gvyc"gkpg"Uwejg"pcej"cnngp"Okvctdgkvgtp"|ykuejgp"52"wpf"62"Lcjtgp."fkg"xqp" 5222"dku"7222"Gwtq"xgtfkgpgp"wpf"|ykuejgp"3;;2"wpf"3;;7"gkpiguvgnnv"ywtfgp0"Pcv¯tnkej"ncuugp"ukej"MF/D wog" cwej" kp" cpfgtgp" Dgtgkej" gkpugv|gp0" Gvyc" kp" fgt" EqorwvgtitcÞ"m0" Fgpp" cwej" jkgt" mqoogp" Rwpmvogpigp" wpf" Dgtgkejuuwejgp"xqt0 :0"Hc|kv MF/D wog"ukpf"pcv¯tnkej"iwv"iggkipgv."ygpp"ocp"cp"gkpg"Rwpmvogpig"fkg"Htcig"uvgnngp"yknn<"äYgnejg"Rwpmvg" nkgigp"kp"gkpgo"dguvkoovgp"DgtgkejAÑ0"Fkgug"Htcig"m ppgp"ukg"ogkuvgpu"tgejv"uejpgnn"dgcpvyqtvgp0"Pqej"uejpgnngt" m ppgp"fkgug"Htcig"cnngtfkpiu"fkg"Dgtgkejud wog"dgcpvyqtvgp0"Kjt"Pcejvgkn"kuv."fcuu"ukg"fch¯t"ogjt"Urgkejgtrncv|" xgtdtcwejgp."cnu"fkg"MF/D wog0"Fc"kp"fgt"jgwvkigp"¥gkv"Urgkejgtrncv|"tgejv"dknnki"igyqtfgp"kuv."¥gkv"cdgt"pcej" ykg"xqt"gkpg"itq̌g"Tqnng"urkgnv."yktf"ocp"yqjn"ogkuvgpu"fgp"Dgtgkejud wogp"fgp"Xqt|wi"igdgp0"MF/D wog" f¯thvgp" cdgt" cwej" gvycu" gkphcejgt" |w" korngogpvkgtgp" ugkp0" Urkgnv" fkg" Cwuh¯jtwpiuiguejykpfkimgkv" gkpg" gjgt" wpvgtigqtfpgvg"Tqnng."fkg"Gpvykemnwpiu|gkv"cdgt"gkpg"itq̌g."uqnnvg"ocp"xkgnngkejv"fqej"MF/D wog"dgxqt|wigp0 ;0"Nkvgtcvwt """Fg"Dgti."xcp"Mtghgnf."Qxgtoctu."Uejyct|mqrh<"Eqorwvcvkqpcn"Igqogvt{."Urtkpigt" V """Ugfigykem<"Cniqtkvjogp."Cffkuqp/Ygung{" V """Rtgrctcvc."Ujcoqu<"Eqorwvcvkqpcn"Igqogvt{."Urtkpigt" V /"36"/ Universität Bielefeld Polygone II: Triangulation ------------------------------------------------------ Ausarbeitung im Rahmen des Seminars Algorithmische Geometrie von Marion Zysik Bielefeld, den 20.09.2003 1 1 1.1 Was ist Triangulation? Kurze Erläuterung zur Triangulation Unter Triangulation versteht man im Allgemeinen und anschaulich die Zerlegung eines Polygons P, durch eine maximale Menge von sich nicht schneidenden Diagonalen, in Dreiecke. Verwendung findet dieses Verfahren unter anderem in der Robotik - bei der Bewegungsplanung von Robotern -, in der Bilderkennung, in der Standortplanung und zur Bewachung einer Gallerie, wobei diese Anwendung später noch genauer untersucht werden soll. 1.2 Grundlegendes 1. Wie im folgenden Beispiel an einem simplen Polygon zu sehen, ist jede Triangulation ein Unikat, das heißt, dass ein Polygon auf verschiedene Arten trianguliert werden kann. ................................................... ... ............. . ............. .. . . . . . . ... .... .. ... ...... .. .... . . . . . . . . . . . . .. ............... ...... ....................... ... ...... ...... .. ...................... ... .......................................... .. . .. ............ .. ...... ...... .... ... ..... ... .. .. .... ..... .. . ... ..... ... .. ....... .................................................. .. .... ...... ..... ..... . . .. . . . . . ... ... ............... ... ..... . . . . . . . . . . . . .. . . .. ........ ... ..... ........................................ ...... ...... .. .. ............................................................................................................. .. .. ........... .. .. ........ ...... .. ..... . .......... ..... .. ... ..... .. ...... 2. Bei einer Triangulation sollte immer die maximale Menge an Diagonalen erreicht werden. Die folgende Grafik zeigt ein Dreieck mit drei aufeinanderfolgenden kollinearen Knoten, dieses wird auch als entartetes Viereck bezeichnet. 2 Die Kanten von simplen Polygonen kreuzen sich nicht, sie enthalten also keine Löcher Die Triangulation muss hier also noch vervollständigt werden, was durch die gestrichelte Linie angedeutet wird. 2 Triangulationsverfahren 2.1 Konvexe Polygone 1.Verfahren: Bei diesem Verfahren der Zerlegung von konvexen Polygonen in Dreiecke, wird zunächst der linkeste Knoten ausfindig gemacht (hier ν). Existieren mehrere Knoten mit denselben x-Koordinaten, so wählt man den Untersten, also den mit dem kleinsten y-Wert. Von diesem Koten werden nun die Nachbarn gesucht (hier w und u) und zwischen diesen eine Strecke gezogen. Wird die Strecke von keinen weiteren Kanten geschnitten, so hat man eine Diagonale gefunden und das entstandene Dreieck kann abgetrennt werden. ....... ....... ...... . . . . . .... ... ...... ... w....•..... ... . . ... . . . .. .. . . . .. . . . . . .. .. ν •.......... . ....... . .. ....... . . . ......... ........................................ u• Dieses Verfahren wird solange angewandt, bis der trivialste Fall, nämlich ein Dreieck entsteht. Geschieht dies, ist die Triangulation komplett. .... .......... ...... . ... ...... .. ..... ...... ... .. ........ ... ... ... . ... ... ... ... .. ... .. .. . . . ... . . . . ... . .... ... ............................. . ....... ... .... ... ..... ... .. . ... ... .... ... ....... .. . . .. .. ...... ... . .. ...... .. . . .... ... ................................. 3 .. ....... ...... .. ...... .. ..... .... . . . . . ... ... ...... ................................. 2.Verfahren: Ein weiteres Verfahren für konvexe Polygone besteht darin, irgendeinen Knoten der Menge auszuwählen und diesen dann mit allen anderen Knoten außer den beiden Nachbarknoten und sich selbst zu verbinden. 2.2 Konkave Polygone Das Verfahren zur Triangulation konkaver Polygone ähnelt zunächst dem der konvexen im ersten Verfahren. So besteht auch hier der erste Schritt darin, den linkesten Knoten und dessen Nachbarn zu bestimmen. Wiederum werden die beiden Nachbarn durch eine Strecke verbunden. Hier jedoch kann es bei konkaven Polygonen vorkommen, dass die Strecke von Kanten geschnitten wird. w..•.......................................... ..... .. ..... ... .. . .......................... .... ...... ......... .. ....................................................... ............ . . . . . ....... ν • ...... • .. .........ν 0 ....... ......... .. ....... ....... ......... .. ... ..... ...... ...•... u .... ..... ............. .......... In diesem Fall wird deshalb noch zusätzlich der linkeste Knoten gesucht, der am weitesten von der geschnittenen Strecke entfernt liegt (hier ν 0 ). Zwischen diesem Knoten und dem linkesten des Polygons wird nun ebenfalls eine Strecke gezogen. Nach Voraussetzung kann diese Strecke nicht von einer Kante geschnitten werden. Da es keinen Knoten geben darf, der weiter von der Strecke zwischen u und w entfernt liegt. Eine Kante, die diese Strecke schneidet, hätte ihren Endpunkt im Polygon, so dass dieser Punkt noch weiter von der Strecke entfernt liegen müsste, was jedoch ein Widerspruch wäre. Die Strecke νν 0 teilt das Polygon nun in zwei Subpolygone P1 und P2 . 4 ........................................... ... ... ..... P1 ........ . . . . . . . . . . . . . ........... .... ..... . ... . . . . .......................... ......................... . . . . . . . . . . . . ....... .................................. ....... ......... ....... ......... P2 ....... ....... ......... ..... ..... ... . ..... ..... ..... ............. ....... Bei den entstandenen Polygonen kann dieses Verfahren wiederum angewandt werden, bis auch hier nur noch ein Dreieck zurück bleibt und die Triangulation abgeschlossen ist. 2.3 2.3.1 Effizienz Konkave Polygone Der Algorithmus zur Triangulation konkaver Polygone lässt sich grob in drei Teilbereiche gliedern: 1. Eine Diagonale finden: Dieses benötigt lineare Zeit. 2. Das Polygon in Sybpolygone teilen 3. und die Subpolygone rekursiv triangulieren Wird das Polygon bei der Teilung in ein Dreieck und ein Polygon mit n-1 Ecken geteilt, so kann der Algorithmus im schlimmsten Fall quadratische Zeit benötigen. 2.3.2 Konvexe Polygone Die Triangulation von konvexen Polygonen im zweiten Verfahren benötigt nur lineare Zeit. Jedoch sollte dieses nicht dazu verführen, ein konkaves Polygon in ein konvexes umzuwandeln, da dieses ebenso aufwendig ist, wie die sofortige Zerlegung. 5 2.4 Trapezzerlegung und Triangulation monotoner Polygone 2.4.1 Monotone Polygone Ein effizienteres Verfahren bietet das der Triangulation von monotonen Polygonen. Deshalb wird im weiteren die Zerlegung konvexer Polygone in monotone vorgestellt. Zunächst jedoch wird die Frage zu klären sein: Was sind monotone Polygone? Die untere Abbildung zeigt ein y-monotones Polygon. Y-monoton bedeutet, dass es eine Gerade gibt (hier die y − Achse), so dass jede Senkrechte zu dieser Geraden das Polygon in höchstens zwei Punkten schneidet. Ein Schnitt sollte also ein Punkt, ein Liniensegment oder leer sein. .. . .......... .......... .............. ............ ..... . ... .. ... . . . .. .. .. .................................................................................... ... ... ... ... .. .... . ... . . . ... .. ...... ... ... .... ... . ....................... ...... ... ... y....− Achse 2.4.2 Trapezzerlegung Eine effiziente Methode um aus einem konvexen ein monotones Polygon zu erstellen, ist die Trapezzerlegung. Hierbei gehen zuerst einmal von jedem Knoten des Polygons horizontale Strahlen aus, die, sobald sie auf eine Kante treffen, enden. Haben zwei oder mehrere Knoten dieselbe y-Koordinate, so wird das Polygon ein wenig gedreht, bis dieses nicht mehr der Fall ist. ................................................................................................................................................................................................... .... ...................................... .................. ..................................................................................................... ..... ..... .. .............................................................................. .... ........ . . . . . . . . . . . . . . . . ....... .. .. .. ............................................................................................................................................................................................................................................................................................... . . . . . . . . . . . . . . . . . . . . . . . .. ..... ......................................................... ........................................................................................................................................................................ ................................................................................................................................................................................................................... ...... ..... .. ...................................................................................................................................................................................................................................................................................................... .. .. .. .. .... ... ... ... ................................................................................................................................................ . ............................................................................................................................................................................ ............................................................................ . .. .. .. ............................ ..... ...................................... ... .. ... . .... ......................................................................... ................................................................................................................................................................... 6 Als nächstes werden die Teilstücke der Strahlen, die über den Rand des Polygons hinausragen abgeschnitten. Innerhalb des Polygons jedoch sind Trapeze entstanden. . ............ ..... .............. . ...................... . . . . . . . .. ............ ...... .. ....................................................................................... ...... ........................................................................................................................................................................................................... . . . . .. .................................................................................................................................................... . ........... .. ............ ............................................................................................................................. ...... ..... .. ................................................................................................................................................................................................................................................. . .. .. ..... .. ... ... .......................................................................... ... ................. .. .. ........................................................................................... ... . ... .. .... . In diesen Trapezen werden die sich diagonal gegenüberliegenden Knoten verbunden. ......... ..... .............. ............... . . . . . . . . . .. ............. .... ........... ................................................................................................................................................. ..... .... ................................................................. ..... ........................... ..... ......... ..... ..... ..... ..... ........................................................ ..... .... . . . . . . . . . . . . . . . . . . . . .. ...................... ...... ............................................................................................................................................................................................................................ ......... ..... ........................................................................................................................................................ . . . . . . . . . ... . . ... ...... ................................................................................................................................................................................................................................................................................................................. ... . . . ... ... . . ... ... ...... ... . . . ... . ...................................................................... .. . ................. . ... . ............................................................................ ................ ... .. ... . ... .. .... Entfernt man nun die ursprünglichen horizontalen Strahlen, so zerteilen die übrigbleibenden Geraden das Polygon in monotone Subpolygone. .......... ............... ..... .............. . . . . . . . . ............ ...... ............ .......... ............................................... ...... . .............. ................ . . . ........ . . . . . . . . . . . . . . . . . .. ...................... ............ . . . . . . . . . . ................................................ . ..................... ...................... . ................ ... ............ ........... . . . . . . . . . . .. . . ... ..................................................................... . ............ . .. . ... ... .. .. ..... . . . .. . ... .. . ................................. . ... . ... ............. .... ................ ... .. ... . ... .. .... 7 2.4.3 Triangulation monotoner Polygone Bei der Zerlegung eines y-monotonen Polygons bearbeitet der Algorithmus die Knoten in der Reihenfolge abnehmender y-Koordinaten. Die Abarbeitung der Knoten erfolgt mit Hilfe eines Stacks, der am Anfang leer ist, später aber alle Knoten enthält, von denen noch Diagonalen ausgehen können. Das Polygon der folgenden Abbildung soll nun trianguliert werden. u1 u2 u3 u4 u5 u6 u7 u8 u9 Bei dem Knoten mit der größten y-Koordinate wird also begonnen. Die ersten beiden Knoten können, ohne ihnen Beachtung zu schenken, da sie ja schon durch eine Kante miteinander verbunden sind, fürs erste auf dem Stack abgelegt werden. Bei der Betrachtung des dritten Knotens u3 stellt sich heraus, dass dieser mit keinem bisher gefundenen Knoten durch eine Diagonale innerhalb des Polygons verbunden werden kann. Auch u3 wird auf den Stack abgelegt. Stack u u1 u2 u1 u2 u3 u3 u4 8 Es wird dabei ein strikt ymonotones Polygon verwendet, d.h. ein Polygon ohne horizontale Kanten Auch u4 kann im Moment nicht weiter verwendet werden und landet auf dem Stack. Trifft man hier jedoch auf den Knoten u5 , so stellt man fest, dass es möglich ist, diesen mit u3 zu verbinden, dadurch wird u4 vom Polygon abgetrennt und aus dem Stack entfernt, da u5 mit keinem anderen Knoten verbunden werden kann, wird er auf dem Stack abgelegt und man geht über zu u6 . Stack u u1 u1 u1 u1 u1 u3 u4 u5 u5 u6 u2 u2 u2 u2 u2 u3 u3 u4 u3 u3 u5 u6 liegt auf der gegenüberliegenden Randhälfte und kann mit u2 , u3 , u4 und u5 verbunden werden. Danach werden alle Knoten, zu den keine weitere Diagonale mehr gezogen werden kann, entfernt. Auf dem Stack zurück bleiben nur noch u5 und u6 . Es kann mit u7 fortgefahren werden. Stack u u1 u1 u1 u1 u1 u5 u3 u4 u5 u5 u6 u7 u2 u2 u2 u2 u2 u6 u3 u3 u4 u3 u3 u5 Untersucht man nach diesem Schema alle notwendigen Knoten, so bleibt zuletzt wieder ein Dreieck übrig und die Triangulation ist abgeschlossen. 9 u1 u2 u3 u4 u5 u6 u7 u8 u9 2.4.4 Stack u u1 u1 u1 u1 u1 u5 u6 u6 u3 u4 u5 u5 u6 u7 u8 u8 u2 u2 u2 u2 u2 u6 u7 u3 u3 u4 u3 u3 u5 Algorithmus Algorithmus TrianguliereMonotonesPolygon(P ) Input. Ein strikt y-monotones Polygon (P ), welches in einer doppelt verketteten Kantenliste D gespeichert ist. Output. Eine Triangulation von P , welche in einer doppelt verketteten Kantenliste D gespeichert ist. 1. Verschmelze die Ecken des linken Randstücks und die Ecken des rechten Randstücks zu einer Sequenz, die nach abnehmender y-Koordinate sortiert ist. Wenn zwei Ecken die gleichen y-Koordinaten besitzen, dann kommt die linke zuerst. Sei u1 , ..., un die sortierte Sequenz. 2. Lege u1 und u2 auf dem Stack S ab. 3. for j ←− 3 to n − 1 4. do if uj und die Ecke oben auf dem Stack sind auf unterschiedlichen Randstücken 5. then nimm alle Ecken vom Stack herunter. 6. Füge eine Diagonale von uj zu allen vom Stack heruntergenommenen Ecken außer der letzten in D ein. 7. Lege uj − 1 und uj auf den Stack. 10 8. else nimm eine Ecke vom Stack herunter. 9. Nimm die restlichen Ecken solange vom Stack, wie es Diagonalen zwischen ihnen und uj innerhalb von P gibt. Füge diese Diagonalen in D ein. Lege die Ecke, die als letzte heruntergenommen wurde, wieder auf den Stack. 10. Lege uj auf den Stack. 11. Füge Diagonalen von un zu allen Ecken auf dem Stack (außer der ersten und der letzten) an. 2.4.5 Effizienz • Schritt 1 kostet O(n) Zeit • Schritt 2 kostet O(1) Zeit • Schritt 3 die for-Schleife wird n-3 mal durchlaufen, ein Durchlauf kann O(n) Zeit benötigen • Schritt 11 benötigt höchstens O(n) Zeit Jedesmal, wenn die for-Schleife durchlaufen wird, können höchstens zwei Knoten auf dem Stack abgelegt werden, zusammen mit Schritt 2 ist die Gesamtanzahl also durch 2n-4 begrenzt. Da die Anzahl der Entfernungsoperationen nicht höher ist, als die der Ablegeoperationen, kann der ganze Algorithmus in O(n) Zeit durchlaufen werden. Der Speicherplatzbedarf beträgt ebenso O(n). 2.5 Das Wächterproblem Bei dem Wächter- oder auch Art Gallery Problem geht es darum, eine Kunstgallerie möglichst lückenlos zu bewachen. Dieses wirft natürlich Fragen nach der Anzahl der Kamaras bzw. Wächter und deren Plazierung auf. Eine Lösung dieses Problems kann auch von der Triangulation geliefert werden. Hierbei muss dennoch beachtet werden, dass dadurch zwar eine lückenlose Bewachung berechnet wird, was jedoch die Anzahl der Kamaras bzw. Wächter betrifft ist diese Lösung nicht immer minimal. Zunächst einmal nehme man an, man hätte den Grundriss einer ”rellativ” verwinkelte Kunstgallerie, wie sie auf der folgenden Abbildung zu sehen ist. 11 Nach genauerem Hinsehen bemerkt man, dass diese Kunstgallerie durch die Kamaras (um 360 ◦ schwenkbar ) nicht ganz optimal bewacht wird. Um dieses zu ändern, wird die Gallerie zunächst trianguliert. Würde man nun in jedes Dreieck eine Kamara setzen, so wäre das Ziel der kompletten Überwachung erreicht. Man sieht jedoch leicht ein, dass dieses einem “overkill” gleichkommen würde. Demnach muss also noch eine andere Strategie gesucht werden. Zusätzlich zur Triangulation hilft hier die Tiefensucht in Graphen. Durch die Tiefensuche soll gezeigt werden, dass jedem Dreieck eine von drei Farben (hier schwarz , weiß und grau) zugeordnet werden kann, dazu wird in das Polygon ein Graph eingefügt. 12 Während man diesen Graph gemäß der Tiefensuche entlanggeht, fügt man in jedes Dreieck die noch fehlende Farbe ein. Es ergibt sich, dass wirklich jedem Dreieck alle drei Farben zugeordnet werden können. Wählt man nun eine der Farben aus, die am seltensten vorkommen und plaziert auf allen Knoten dieser Farbe eine Kamara, so ist die Gallerie vollständig überwacht, da ja jedes Dreieck diese Farbe besitzt. Die Anzahl der Kamaras reduziert sich dadurch im schlimmsten Fall auf n3 , wobei n die Anzahl aller Knoten ist. 13 2.6 Literaturangaben M.de Berg, M. van Kreveld, M. Overmars, O. Schwarzkopf Computational Geometry: Algorithms and Applications Seite 45 - 59 2. Auflage, Springer, 2000 Martin Aigner, Günter Ziegler Proofs from the Book Seite 179 - 181 2. Auflage, Springer, 2001 Steffen Bunzel, Jörg Finger Polygon Triangulation Internet: http://ad.informatik.uni-freiburg.de/lehre/ws9798/geometrischealgorithmen/termine/index.html Link: Triangulierung von Polygonen Stand: 24.Oktober 1997 Raimund Seidel A Simple and Fast Incremental Randomized Algorithm for Computing Trapezoidal Decompositions and for Triangulating Polygons Internet: http://citeseer.nj.nec.com/seidel91simple.html Link: tcs.cs.unisb.de/papers/trap.ps.gz Stand: 1991 Sébastien Loisel Zed3D - A compact reference for 3d Computer graphics programming Seite 91 - 93 1996 Klaus Hinrichs 4 Polygontriangulation: Wie bewacht man eine Kunstgalerie Internet: http://wwwmath.uni-muenster.de/u/chr/Geometrie/ Folien/Kapitel04.pdf Oder: http://wwwmath.uni-muenster.de/u/jacobm/Lehre/AlGeo/Vorlesung/ Link: Kapitel 04 4s.pdf Seite 37 - 44 Stand: 24.Juli 2003 Adrian Polko Die Berechnung der Triangulation eines Polygons in fast-linearer Zeit Internet: http://web.informatik.unibonn.de/I/Lehre/Seminare/Geometrie0102/index.html Link: Die Berechnung der Triangulations eines Polygons in fast-linearer Zeit Stand: 27.11.2001 14