Rovinn kivky

 

Uivatelsk souadn soustava

 

Jak ji vme, DELPHI pracuje s tzv. svtovmi souadnicemi, kter jsou na pipojenm obrzku vyznaeny mode. Prce v takov soustav je pro uivatele znan nepjemn. Vytvome si proto tzv. uivatelskou souadnou soustavu, kter je vyznaena erven. Dlku osy  (interval ) jako i dlku osy  (interval ) budeme moci mnit. V obrzku je  resp.  dlka uivatelsk jednotky na ose   resp.  ve svtovch souadnicch. Zejm je

 

;                                                       (1)

 

Souadnice uivatelskho potku O  ve svtovch souadnicch jsou pak

 

 ;                                                      (2)

 

Je-li pak  libovoln bod na kreslic ploe,  jeho souadnice v uivatelsk soustav a  jeho souadnice ve svtov soustav, pak zejm plat

 

;                                         (3)

 

Realizujme nyn uivatelskou souadnou soustavu a vykresleme trojhelnk s danmi vrcholy. Na formul jsme opt umstili objekt Image, proceduru, kter trojhelnk vykresluje, jsme nazvali Triangle a budeme ji aktivovat OnClick. Po tchto zkladnch pravch za ns DELPHI zape do unity, kterou jsme pejmenovali na Graph2D,  nsledujc ern (event. modr) dky (viz dle). Vimnme si nejdve dku TForm1 = class(TForm). Ten se v unit objev automaticky, i kdy do formule nezaadme dnou komponentu. Deklaruje typ TForm1 jako ddice typu TForm. Znamen to, e TForm1 automaticky pebr vlastnosti typu TForm a navc meme definovat jeho dal vlastnosti. Nco za ns opt provede DELPHI. Zaadme-li do formule komponentu Image, objev se nov promnn ddice - Image1, kter je typu TImage. Spojme-li s udlost OnClick proceduru, kterou v Object Inspectoru nazveme Triangle, pak, jak ji vme, DELPHI tuto proceduru zape na konec zdrojovho textu [procedure TForm1.Triangle (Sender: TObject);] a automaticky ns na ni navede, abychom ji mohli vypsat.

 

unit Graph2D;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs,ExtCtrls;

type

   TPoint = array [1..2] of Double;

   TForm1 = class(TForm)

       Image1: TImage;

   procedure Triangle(Sender:TObject); 

                                          

private

          { Private declarations }

public

          { Public declarations }

procedure Scale(x1,x2,y1,y2:Double);

function   XCoor(x:Double):integer;

function    YCoor(y:Double):integer;

end;

 

Vimnte si vak, e se hlavika tto procedury automaticky zapsala tak jako nov vlastnost typu TForm. Tmto zpsobem meme i my sami obohacovat typ TForm o nov promnn, procedury a funkce, nejlpe do odstavce Public (zde budou tyto vlastnosti v ppad poteby dostupn i z jinch jednotek). Nyn se tedy dostvme k ervenmu textu, kter musme dopsat sami a kterm realizujeme uivatelskou souadnou soustavu.

 

var  Form1                    :TForm1;

     Unit_X,Unit_Y,x1,x2,y1,y2:Double;

     O                        :TPoint;

 

implementation

 

{$R *.DFM}

procedure TForm1.Scale(x1,x2,y1,y2:Double);

  begin

    Unit_X:= Image1.Width/(x2-x1);

    Unit_Y:=Image1.Height/(y2-y1);

    O[1]:= -x1*Unit_X;O[2]:=y2*Unit_Y;

  end;

 

 function  TForm1.XCoor(x:Double):integer;

    begin  XCoor:=trunc(O[1]+Unit_X*x);end;

 

  function  TForm1.YCoor(y:Double):integer;

     begin YCoor:=trunc(O[2]-Unit_Y*y);end;

 

procedure TForm1.Triangle(Sender: TObject);

  begin

  end;

end.

 

Protoe budeme chtt pracovat s body v rovin, deklarujeme v sti Interface  typ TPoint jako uspodanou dvojici relnch sel (pedefinovali jsme tedy typ TPoint, kter je v DELPHI deklarovn. Dvody budou zejm pozdji). Dle do odstavce public typu TForm1 zapeme hlaviku procedury Scale(x1,x2,y1,y2:Double). Parametry tto procedury jsou uivatelsk rozmry kreslic plochy tak, jak bylo popsno ve. Procedura bude realizovat vpoty dle vzorc (1), (2). Dle dv funkce Function XCoor (x:Double):Integer; Function YCoor(y:Double):Integer. Funkce jsou zvltn typy procedur, kter maj prv jeden vstup (procedury mohou mt vstup vce, nebo tak dn). Tyto funkce budou reln uivatelsk souadnice x resp. y pepotvat na svtov celoseln souadnice podle vzorc (3). Dle je teba deklarovat promnn, kter budou pouvny v cel jednotce (globln promnn). Jsou to reln sla Unit_XUnit_Y  - dlky uivatelskch jednotek na jedn. osch,  dle bod O (uivatelsk potek) - promnn nmi definovanho typu TPoint a konen x1,x2,y1,y2 - uivatelsk rozmry kreslic plochy. Do sti Implemantation za zpis {$R *.DFM} (co je direktiva pekladae, kterou zapsalo DELPHI) musme nyn tyto procedury a funkce specifikovat. Vimnte si, e zde je v hlavikch ped nzvem specifikovn typ,  kter procedura i funkce obohacuje procedure TForm1.Scale(x1,x2,y1,y2:Double);].

 

Pklad 1: Ve uveden st kdu by samozejm jet trojhelnk nevykreslila. Doplme jej tak, abychom na vstupu trojhelnk dostali. V eenm pkladu jsou podobn jako ve uveden ti procedury a funkce doplnny dal:

 

          procedure PutPixel(X:TPoint;Color:DWord);

          procedure MoveTo(X:TPoint);

          procedure LineTo(X:TPoint;Color:DWord);

          procedure Line(X,Y:TPoint;Color:DWord);

          procedure XAxis(x1,x2,y:Double;Color:DWord);

          procedure YAxis(y1,y2,x:Double;Color:DWord);

 

Procedury PutPixel, MoveTo LineTo funguj analogicky, jako metody obsaen v TCanvas ve standardnm DELPHI, pracuj vak v uivatelskch souadnicch (v argumentu jsou promnn typu TPoint) a dle promnn definujc barvu, kterou se m kreslit. Dle je zde procedura Line, kter spoj dva uivatelsk body X, Y sekou. Konen procedury XAxis resp. YAxis sestrojuj souadn osy, pesnji eeno vodorovn resp. svisl pmky. Nap. u XAxis uruj parametry x1,x2 x ov souadnice krajnch bod, parametr y pak y ovou souadnici prseku s osou y (YAxis analogicky). Vechny tyto procedury vyuvaj standardnch metod objektu TCanvas. Napklad procedura LineTo vypad takto:

 

procedure TForm1.LineTo(X:TPoint;Color:DWord);

  begin

   With Image1.Canvas do

     Begin

      Pen.Color:=Color;LineTo(XCoor(X[1]),YCoor(X[2]));

     end;

  end;

 

V tchto procedurch tedy nen vyuit pstup do bitmapy pes obrazov dky tak, jak bylo uvedeno v matematickch podrobnostech pedchoz kapitoly. V dalm textu budeme prozatm pouvat osmibitov barvy, resp. peddeklarovan konstanty - nap. slRed, slGreen atd., kter byly popsny v matematickch podrobnostech pedchoz kapitoly, a vlastn proceduru Line pro seku, kter je popsna v matematickch podrobnostech tto kapitoly  .

 

Jsou-li k dispozici ve uveden procedury, pak trojhelnk vykreslme velmi jednodue:

 

procedure TForm1.Triangle(Sender: TObject);

var A,B,C:TPoint;

begin

    A[1]:=-2;A[2]:=6; B[1]:= 4;B[2]:=-1; C[1]:= 5;C[2]:=5;             {definice vrchol}

    x1:=-4;x2:=7;y1:=-3;y2:=8;

    Scale(x1,x2,y1,y2);        {definice uivatelsk kreslic plochy}

    Line(A,B,slRed);Line(B,C,slRed);Line(A,C,slRed);          {vlastn konstrukce}

end;

 

Zde najdete kompletn              zdrojov kd         a zde               spustiteln kd

 

Pklad 2:  Pedchoz pklad vylepme o cejchovn souadnch os, kter obstarvaj procedury XGauge (x1,x2,y:Double;Color:Byte); resp. YGauge (y1,y2,x:Double; Color: Byte). Podle velikosti mtka procedury zvol vhodnou velikost jednotky na popis, k popisu pipoj vzdlenost sousednch fous. Funguj nsledujcm zpsobem (jako pklad uveme popis osy x):

 

procedure TForm1.XScale(x1,x2,y:Double;Color:DWord);

var   AxisUnit       :Double;

      Text           :String;

      Lx,Exponent    :Integer;

begin

Image1.Canvas.Font.Color:=Color;

AxisUnit:=1E30;Lx:=0;Exponent:=30;

While (x2-x1)/AxisUnit<1 do

begin

  AxisUnit:=AxisUnit/10;Exponent:=Exponent-1;

end;                                                         {nalezen vhodn velikosti jednotky}

if x1<0                                                                              {nalezen nejmen popisky}

     then Repeat Lx:=Lx-1 Until AxisUnit*(Lx-1)<x1                

     else Repeat Lx:=Lx+1 Until AxisUnit*(Lx+1)>x1;

With Image1.Canvas do

  repeat

      MoveTo(XCoor(AxisUnit*Lx),YCoor(y)-3);     {cejchovn osy}

      LineTo(XCoor(AxisUnit*Lx),YCoor(y)+3);

Str(Lx,Text);TextOut(XCoor(AxisUnit*Lx),YCoor(y)+5,Text);Lx:=Lx+1;                                                                                                                                {popisky}

  until AxisUnit*Lx>x2;

Str(Exponent,Text);                {funkce Str pevd selnou hodnotu na etzec}          

Image1.Canvas.TextOut(XCoor(x2)+15,YCoor(y)+5,'*10');

                                                                                                          {jednotka a exponent}  

Image1.Canvas.TextOut(XCoor(x2)+35,YCoor(y),Text);                

end;

 

Zde najdete kompletn              zdrojov kd         a zde               spustiteln kd

 

Pedchoz pklady neumouj mnit parametry za bhu programu. Tento nedostatek napravme v nsledujcm pkladu.

 

Pklad 3: K ovldn naeho formule Form1 zalome cel nov formul. V menu File klikneme na New Form. Objev se nm nov formul Form2 spolu s novou jednotkou Unit2. Tomuto formuli zmnme titulek na Control Panel. a umstme na nj ti tlatka, kter vybereme ze strnky Standard vcestrnkov lity. Tmto tlatkm zmnme titulky na Start, Clear ImageExit. Dle nkolik objekt Static Text, tento typ najdeme v lit Additional, jejich titulky budou Triangle, Scale, dal budou slouit pro popis vrchol - A=, B=, C= a uivatelskch rozmr kreslic plochy x, y. Dle zde umstme Check Box (lita Standard) s titulkem Show Axses, s jeho pomoc bude uivatel vybrat monost zobrazen souadnch os. O tom, zda se souadn osy maj i nemaj zobrazit, rozhoduje vlastnost Checked typu Boolean.  Konen pidme potebn poet objekt  Edit (opt v lit Standard), do kterch bude uivatel zadvat hodnoty. Zmnme jejich jmna (vlastnost Name v Object Inspectoru) na EditA1, EditA2, , resp EditX1, EditX2, a Text, tak, aby pi sputn programu tato okna obsahovala vchoz parametry. N formul vypad tak, jak vidme na piloenm obrzku. Procedury tkajc se rovinn uivatelsk souadn soustavy jsou v samostatn jednotce - pvodn Unit1 pejmenujeme na Graph2D pomoc File/SaveAs. Do tto jednotky jsme tak umstili objekt typu TImage, kter jsme nazvali Draw2D a vechny konstrukce probhaj v tomto objektu. Nap. procedura pro mazn kreslic plochy kresl pes celou tuto plochu bl obdlnk:

 

procedure TDraw2D.ClearImage;

begin

  with Image1.Canvas do

    begin Pen.Color:=clWhite;Brush.Color:=clWhite;end;

    with Image1 do Canvas.Rectangle(0,0,Width-1,Height-1);

end;

 

V Control Panelu nejdve zadme ten parametr z Edit-oknek, a to procedurou Setting:

 

Procedure TControl_Panel.Setting;

var Code:Integer;

begin

   With Draw2D do

   begin

      Val(EditA1.Text,A[1],Code);

      Val(EditA2.Text,A[2],Code);

      Val(EditY2.Text,y2,Code);

      Scale(x1,x2,y1,y2);

  end;

end;

 

Tlatka v Control Panelu spojme pes udlost OnClick poad s procedurami Triangle, ClearImage a Exit:

 

procedure TControl_Panel.Triangle(Sender: TObject);

begin

    With Draw2D do

      begin

      ClearImage;Setting;

      if CheckBox1.Checked then CoorSystem(slRed);

      Line(A,B,slBlue);Line(B,C,slBlue);Line(A,C,slBlue);

     end;

end;

 

procedure TControl_Panel.ClearImage(Sender: TObject);

begin  Draw2D.ClearImage;end;

 

procedure TControl_Panel.Exit(Sender: TObject);

begin Halt; end;

 

V pkladu je navc eeno zadvn vrchol trojhelnka my

 

Zde najdete kompletn              zdrojov kd         a zde               spustiteln kd

 

Kivky typu

 

Z hlediska konstrukce se jedn o nejjednodu kivky. Lze je konstruovat jako lomen ry sloen z seek dle pipojenho obrzku:

 

Pklad 1: Sestrojme proceduru Explicit_Curve, kter sestroj graf funkce   (viz pipojen vpis). Nejdve opt sestavme ovldac panel ze znmch komponent (v panelu NumberOfSegments bude uivatel zadvat poet segment, z kterch m bt kivka sestrojena. Stejn jako v pedchoz kapitole sestrojme uivatelskou kreslic plochu, souadn osy a definujeme barvu sestrojovan kivky. Vidme, e funkce   je definovna uvnit procedury.  Vlastn konstrukce spov v nastaven kroku hx a v postupn konstrukci seek :

 

 

Procedure  TControl_Panel.Explicit_Curve(Sender:TObject);

var x,hx:Double;

        A,B :TPoint;

function f(x:Double):Double;

begin if x=0 then f:=0

                           else f:=x+10*x*x*sin(1/x); end;

begin

  With Draw2D do                                                            {Uivatelsk kreslic plocha}

  begin

    if CheckBox1.Checked then

begin                                   {souadn osy a jejich popis}

 XScale(x1,x2,0,clRed);             {sestroj stupnici rovnobnou s osou x, resp. y.}

 YScale(y1,y2,0,clRed);     { Pro uren barvy je pouita standardn konstanta }

end;                    { kvli snazmu popisu os pomoc procedury TextOut}

hx:=(x2-x1)/NumberOfSegments;x:=x1;A[1]:=x;A[2]:=f(x);    

Repeat                            {konstrukce kivky jako lomen ry}

  B[1]:=x+hx;B[2]:=f(x+hx); Line(A,B,slBlue);A:=B;x:=x+hx

Until x>x2

end;

end;

 

 

Zde najdete kompletn              zdrojov kd         a zde               spustiteln kd

 

V ppad kivek bv vhodn posloupnost bod, ktermi kivka prochz, nejdve celou spotat a teprve potom proloit kivku.  Delphi m sice metodu PolyLine, kter umouje proloit polygon posloupnost bod. Tato metoda vak pracuje jen se svtovmi souadnicemi, kdeto my pracujeme ji v souadnicch uivatelskch. Tuto metodu si tedy opt pedefinujeme.

 

Pklad 2: Pedefinujme metodu PolyLine a funkci z p. 1. sestrojme pomoc tto nov metody. Nae metoda bude pracovat s posloupnost bod, musme tedy nejdve deklarovat nov typ, nejlpe hned za TPoint:

 

TPoint            = array [1..2] of Double;

TArrayOfPoints    =  array [0..800] of TPoint;

 

TPoint je tedy jeden bod - uspodan dvojice sel, TArrayOfPoints je posloupnost nejve osmi set bod. Do promnn tohoto typu se budou ukldat body, ktermi m prochzet nae kivka. S nstroji, kter ji mme k dispozici, je jej konstrukce jednoduch:

procedure Draw2D.PolyLine(Q:TArrayOfPoints; n:Word;Color:Byte);

var i:Word;

begin

   MoveTo(Q[1]);

   for i:=1 to n do LineTo(Q[i],Color);

end;

 

Vimnme si nejdve hlaviky: Q je posloupnost bod, n definuje poet bod, kter maj bt spojeny, Color pak barvu, kterou m bt kivka sestrojena. Procedura nejdve umst pero do prvnho bodu pomoc na metody MoveTo, do nsledujcch pak kresl seky na metodou LineTo. Samozejm je teba upravit i nai proceduru Explicit_Curve (uvdm pouze st kdu, kter se od pedchozho pkladu li).

 

procedure TControl_Panel.Explicit_Curve(Sender:TObject);

var x,hx:Double;     Q     :TArrayOfPoints;     i      :Word;

function f.....

begin

   .......

  hx:=(x2-x1)/NumberOfSegments;i:=0;x:=x1;

  Repeat

   Q[i,1]:=x;Q[i,2]:=f(x);       {konstrukce kivky jako lomen ry}

   x:=x+hx;i:=succ(i);

  Until x>x2+hx;

  PolyLine(Q,i,Color);

end;

 

Zde najdete kompletn              zdrojov kd         a zde               spustiteln kd

 

Je zde jedna ponkud nepjemn vc: V promnn typu TArrayOfPoints nm pibyl jeden index, kter udv poad bodu v posloupnosti. Ten je teba uvdt vdy jako prvn. Zpis Q [i,2] tedy znamen, e se jedn o druhou souadnici  i - tho bodu v posloupnosti Q. Nai metodu PolyLine pouijeme i pi konstrukci kivek zadanch parametricky a polrn. Zde bude ponkud odlin pouze zpsob naplnn pole Q.

 

Z hlediska uivatele zstv jin nepjemnost vc: z ovldacho panelu nen mon mnit zadn funkce.

 

pkladu 3, jeho                 zdrojov kd je zde                 a          spustiteln kd je zde,

 

 

je tento nedostatek odstrann. etezec zadvan do okna EditFunction je vyslovn v jednotce Graph2D_256 funkc Calc(Text:String; ErrorReport:String). V zadvanm etzci je mono zadvat vechny bn funkce vetn cyklometrickch, k oznaen promnnch lze pout x, y, t, k. ErrorReport vrac chybov hlen. Mme-li k dispozici tuto proceduru, odpad zadvn funkce f ve zdrojovm kdu. Promnnou f deklarujeme jako etzec a pkaz A[i,2]:=f(x) nahradme pkazem A[i,2]:=Calc(f, ErrorReport). etzec ErrorReport je pi korektnm vpotu sprvn. Pi chybnm vyhodnocen je vrcen popis chyby, eho je mono vyut k chybovmu hlen a peruen procedury, nap:

 

A[i,2]:=Calc(f, ErrorReport)

if ErrorReport<>

     then begin

         ShowMessage(ErrorReport);

         exit;

         end;

 

Samotn vyslen etezce (funkce Calc) vak nen jednoduchou zleitost, bezprostedn nesouvis pmo s grafickmi problmy a nebudeme se jm proto podrobnji zabvat.

 

Dve, ne postoupme dle, je teba uinit jet jednu poznmku. Barvy zadvme v Delphi pomoc peddeklarovanch konstant (clRed, clYellow). Tchto konstant je vak k dispozici pouze estnct pestoe jsou tyiadvacetibitov. Mme tedy k dispozici 2563 barev, kter lze zadat selnou hodnotou. Tyto barvy pracuj v systmu RGB popsanmu dve. Prozatm jsme pouvali jednotku Graph2D_256.pas, kter pracuje v reimu 256 barev, kter jsou deklarovny pomoc osmibitovch konstant - slRed, slYellow(scanlineRed) - Pstup k ostatnm barvm v prostoru RGB zajiuje jednotka Graph2D.pas, kter s barvami zachz ponkud jinak. Grafickm procedurm je teba barvu zadvat pomoc sloek Red, Green Blue. Dal odlinost spov v tom, e tyto procedury pracuj bu v objektu Canvas, anebo pmo v bitmap. Procedury pracujc z Canvasem jsou odlieny zkratkou cv nap. procedura cvPolyLine(Q,i,255,0,0) sestroj polygon napotan v poli Q.  Procedury pistupujc pmo do bitmapy tuto pedponu nemaj, ped jejich pouitm je vak teba bitmapu vytvoit. To lze provst metodou InitImage, kter je v Graph2D k dispozici. Bitmapu vytvome nejlpe na udlost onActivate ovldacho panelu. Sestrojen grafu funkce pmm pstupem do bitmapy pak vypad takto:

 

procedure TControl_Panel.FormActivate(Sender:TObject);

begin

   Draw2D.InitImage(Image1.Width,Image1.Height);

end;

 

procedure TControl_Panel.Explicit_Curve(Sender:TObject);

var x,hx:Double;     Q     :TArrayOfPoints;     i      :Word;

function f.....

begin

   .......

  hx:=(x2-x1)/NumberOfSegments;i:=0;x:=x1;

  Repeat

   Q[i,1]:=x;Q[i,2]:=f(x);       {konstrukce kivky jako lomen ry}

   x:=x+hx;i:=succ(i);

  Until x>x2+hx;

  PolyLine(Q,i,Color);

end;

 

Odkazy na kdy pracujc v True Color reimu budeme uvdt takto:

 

True Color:                  zdrojov kd                                      spustiteln kd

 

 

Kivky zadan parametricky a polrn

 

Konstrukce tchto kivek je velmi podobn, ukeme si ji na konkrtnm pkladu:

 

Pklad 1: Sestrojte kivku urenou obecn parametrickmi  rovnicemi ;  (jedn se o tzv. Lissajousovy kivky, kter opisuje kyvadlo rozkmitan ve dvou navzjem kolmch rovinch a amplitudami ,  a hlovmi frekvencemi ;). N kol e procedura Param_Curve. Nejprve jsou deklarovny konstanty t1, t2, kter definuj rozsah parametru. Msto promnnch x, hx je deklarovn parametr t a jeho krok ht. Na deklaraci parametrickch rovnic ve zdrojovm kdu musme msto funkce pout proceduru, nebo jako vstup potebujeme dv promnn - x, y.

 

procedure TControl_Panel.Param_Curve (Sender: TObject);

var i:Word;

procedure Lissajous(t:double;var x,y:double);

  begin

        x:=3*sin(3*t);  y:=3*cos(5*t);

     end;

begin

With Draw2D do

begin

  ClearImage(slWhite);          {vyplnn plochy blou barvou}

  Scale(x1,x2,y1,y2);

  ht:=(t2-t1)/NumberOfSegments;

  t:=t1;i:=0;

  Repeat

     Lissajous(t,Q[i,1],Q[i,2]);

     t:=t+ht;i:=succ(i);

  Until t>t2+ht;

  PolyLine(Q,i,slBlue);

  end;

end;

 

Vstupn parametry od vstupnch je teba v hlavice procedury oddlit klovm slovem var. Nsleduj parametrick rovnice (s konkrtnmi volbami za a, b, j, y). Ve vlastn procedue jsem se omezil opt vhradn na konstrukci kivky. Nejdve je poteba nastavit krok parametru ht a jeho poten hodnotu. V cyklu pak naplujeme pole Q  parametrickmi rovnicemi, dokud parametr t  krokem ht neprobhne cel interval t1;t2ñ (indexem i  potme body v posloupnosti Q). Nakonec kivku vykreslme opt pomoc PolyLine.

 

xhv}DN7џyǮ Ds]Tc{H|1E{RZ; 2aR-@%Ʒ-7M+ 0^=< {ff-‚]MK3߅{0Fvi!%4LH8Ъ> +P*asXa3ʍ ^BT+;R9'386A5GR/Oyl)SeԝusA}]Bljs&70FfLWYH(0hN1yP=1H?`ߩH'(~W <̋FJ@5TX9IU0BF9L4xkk(3 vnhs ӵTur@/~jMh[lvLd'-Fz5QRkfֻ{ك߯AdX~ˌ:O^ht#6DA81)vTf!.ԫ_ SQC+Yd'K,SǡrL 3'ҶYE Vae;6=rpvJg8+nnTJ/5JJF&8 *e.s\]hrzf\1gVB`^gO2>2 G4cນyh*@y *5|n#S{5$i >Y}6 Y 6 *cT\ruGRe:W>0lP5 lhGJH,Q`=,_3>GgmOsЍR6^/St1.u煜W88W*rN]=y̾ ~ Úkէ@uUvϋʐʋS]I׍W!^Z?yX1p-x$'t`t:!.VάfPʚ6}㊕rC?]^b'!?)JTzDmZB=Ek'T#$k~+k@? ^ 3U) ]]`KvcDMT,p萌2L)/}hY/%`1%gqz)'f 9C?z6S@7b X~mFw !o3T0$mu:k(}cd$uQ+4M,I1šMO+I>UƼ#m;GyC#xDQ+o"V@ rX$s%Bo}yk.u5Y?U&M@xрK™ QY՟.ý܉lNh},_E. e1;Iz|]7jg8w*<}PLR@13R5<|b҂̟V6'k❅ݸ2.7Ol~#q;Z>͋S"g@/CnKAŧ裷)x&GL-(dT1ᩔocl~QI7=/"^Qnڷ_:οe!y%܈d(*w X6+ L6=ƲD$HSgqEϗӼnFV9' *({*Ed}c48[0/GU XAO@4PM(H-9>QiROT #uIU~ר Ǔ_<h?bGbi*%S(G!zO+I|L P)BCХPMɁB[ɤ?؊s/<˜s4ǿxGlendstream endobj 3091 0 obj << /Type /Page /Contents 3092 0 R /Resources 3090 0 R /MediaBox [0 0 612 792] /Parent 3089 0 R /Annots [ 3094 0 R 3095 0 R 3096 0 R 3097 0 R 3098 0 R 3099 0 R ] >> endobj 3094 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3095 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [316.0468 655.0072 335.2248 666.9624] /Subtype /Link /A << /S /GoTo /D (subsection.42.45) >> >> endobj 3096 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [417.6645 655.0072 436.8425 666.9624] /Subtype /Link /A << /S /GoTo /D (subsection.42.58) >> >> endobj 3097 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [225.5554 384.3734 239.0049 396.3286] /Subtype /Link /A << /S /GoTo /D (subsection.42.36) >> >> endobj 3098 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [97.9029 89.1928 256.8056 100.3178] /Subtype/Link/A<> >> endobj 3099 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [502.3239 21.1249 515.7734 33.08] /Subtype /Link /A << /S /GoTo /D (subsection.42.40) >> >> endobj 3093 0 obj << /D [3091 0 R /XYZ 72 724.2023 null] >> endobj 806 0 obj << /D [3091 0 R /XYZ 72 65.4695 null] >> endobj 3090 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F25 2368 0 R /F11 2385 0 R /F18 1829 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3102 0 obj << /Length 2951 /Filter /FlateDecode >> stream x]۸}O2V)Q!R^,ЇڲW,md޶3R6Krh $Eß$D$$?ScH3Ƣwo|8 :xnS3\s4#XOǺ-lf!焈`ؘK:§Wȱ{Z N.AbMIAD _;o-gDP Xsa S~`zO* ;oL_[@ 4x,GCNgS|Db+T$ouh޶ha v%D>_?TC%C KNq]&*Y_`jLL3 VE/#07lGnu?Ƚu Tc5yC.T Πp 2HtY90w7Eq;_7'o l-'jc,njt nGa鮅6K.T*X*dCZ'cP !\bԑ).NBXBE] 9I 傧k©Yt<^iN:DiQ7;D%~\R/({ 8\ +`Y^"{(C'}Jd/B'w|J2?aރ36@WYlz/V1UTq b`(u p%S1)Tw1jbJ{+k6$5GAT[Wj=5 h`0^V򹝾!sB=E<(RDgf5E)6/*M$ mػiX7To@y .}|fI5OxMm1Amh~ rE늅7 Z"@P`[GAVJbP9tlDKb\lszv26!Pm:DW -!u0*oS/ 2p8 ;7:(NR?4@B~G^d# vo0wkUX i:_~9 B+04aN\Z#30魩OxlJ_y[očĕ&Io 6LѪYm9KwxKiHco< ˮ[\~B7A֍rǻT@d2;8zHvi]ETh J92wLErWZ]nUT=}Z%T ^ca/_b[m)pyCUpl  ?eb& %X98>I0b$I% $M^s[b6+vd7 ͳCј,,[RƩTiH f~yN g> endobj 3104 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3105 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [431.7729 209.5585 450.9509 221.5137] /Subtype /Link /A << /S /GoTo /D (subsection.42.89) >> >> endobj 3106 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.8257 130.8071 102.2752 142.7622] /Subtype /Link /A << /S /GoTo /D (subsection.42.40) >> >> endobj 3107 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [471.0367 75.966 484.4862 87.9211] /Subtype /Link /A << /S /GoTo /D (subsection.42.40) >> >> endobj 3108 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [469.5699 21.1249 483.0194 33.08] /Subtype /Link /A << /S /GoTo /D (subsection.42.40) >> >> endobj 3103 0 obj << /D [3101 0 R /XYZ 72 724.2023 null] >> endobj 810 0 obj << /D [3101 0 R /XYZ 72 708.6118 null] >> endobj 814 0 obj << /D [3101 0 R /XYZ 72 187.1651 null] >> endobj 818 0 obj << /D [3101 0 R /XYZ 72 117.8782 null] >> endobj 822 0 obj << /D [3101 0 R /XYZ 72 63.0371 null] >> endobj 3100 0 obj << /Font << /F8 1835 0 R /F18 1829 0 R /F24 1851 0 R /F25 2368 0 R /F11 2385 0 R /F27 3010 0 R /F14 2378 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3111 0 obj << /Length 3092 /Filter /FlateDecode >> stream xڵZY~_1rQd8"X78-Qc5$=ut7I q l>8/n.}~iMezy$Df>Jjh\<:^%QW Tai<؊8z ^,y~pū2 oDr|C|/4HOfw`Щ26W4jG=+'yK%nh]OOs$n:^1wL%*Z-DEpS#ZZƑC}E CkLi~aَY:Qn E Wr{S}eó+RzVDA~R;E;|Y5ŻfkX<-=!jܮjhתh-?q-U=O8m=%םPgáXXa,xגWV$+H >{Vk^VIܲ@*':P?5u5nNw<7^6 j#D'; mUi" a9* ;7h%W ˕wdvXYYᤍ#oL[Ԕ̺ҙ( IkquTdg̾5MXX Qr+͂dN4Sj~M|?~V4$07rF3&H5xJ:<'oqc#=+kVm mǪ^"97%O'q,5;Q}* juYa8O+H vT.@x oylSHʼz&,i#EfeK#iѱo+t\ٱu \$h\ԏZςYޝKQ@5w`u y-G|md0M#oM :"mL=ָ߽lQ-G]#vQ7%US+5:UNDFE. xʓ;=#r(Yvs'VrDT})Iʂi>5+$| R^*15A Ews~|F{_ Ig@܅KH~w=5>~vs`pȇYL?^BŦªGE]Yz43 _ ϕ9r+2ȳ'IL(y&t_N@;/Dd*x.p=!Aj]ZW`vWUZ:LH!YXg.bW>6J΍; 4Ͳn;4=y| Cwˠ3k4]P%\yϫZB|0qRe8ZZ`!_ g]zτv=Ks)eʮ켲k^ُa =` Gc`nʣ#!չ0$-e㑔b7nDgmr vzF 5 1h; J r",Hmb,~R*djO.G'8/)6>nᓆ%6ZdYM>v0uŎ}}l)C b]( 1c:`(h,ۺDjb:bԈY%wdq6-i̱Ez+kd[t|+}ЩaxHmPI_(OS_A/O# NjAYk0=<;,f\Gߑ㦂+ir⡔o[\vZx叡NJ_ rWÊv:跨2$*H j`ߗ8qws!*{!t+HHC'3 _,Lc(u> Fj.~t/>32I%Ghuй]&BLR!=PӒؤ L_2cG< 7y(CаWk AuV'SxP`_C f2u>$p#= $Y L (Z;? e/Tx F 6L8Gjc3GJ/D y\m&g/_)g=I/q) ?).8Rwkӓ^`bʻ#}Xz6?yz endstream endobj 3110 0 obj << /Type /Page /Contents 3111 0 R /Resources 3109 0 R /MediaBox [0 0 612 792] /Parent 3089 0 R /Annots [ 3113 0 R 3114 0 R ] >> endobj 3113 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3114 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.8257 396.5881 102.2752 408.5432] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 3112 0 obj << /D [3110 0 R /XYZ 72 724.2023 null] >> endobj 826 0 obj << /D [3110 0 R /XYZ 72 708.6118 null] >> endobj 830 0 obj << /D [3110 0 R /XYZ 72 464.9013 null] >> endobj 834 0 obj << /D [3110 0 R /XYZ 72 351.7957 null] >> endobj 3109 0 obj << /Font << /F8 1835 0 R /F18 1829 0 R /F25 2368 0 R /F24 1851 0 R /F14 2378 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3117 0 obj << /Length 3432 /Filter /FlateDecode >> stream xڍZIFБ Z4%@N&$38@[$)m̏m6b-ݛU꧑VUI?P7*ǵ7:CS$56'R5zcB&qj<ߏxVS$ݟ.Xz&MWiWǻ?:Xh3]{ْPJxk ?r1f?l7d1.{Gz{wa-Ne}[CX9E1(' ^kDLGn@ܐz]FR 4_kZU|N֓|\x~AՍ򭵱c'+}|jk"T}ZEEØ>7Ϟ.کDh:U"YY->3KeCsY7f,>c5ӛ_zf*9 L]ɞtI ?ʎgE_Dz.dN~0w?9Pvrܼ97&$E"P4 3)Z{sȎ'A2AЙCoX,&̚KC/0͹OBm35bXmӍ[X%ˠ8U]@ r`*s{{2~lv[G6m9 qYzY7C i}_'{W*R3uR&mA[D(Lw/]7G$!(la @`(PI-D:ʧ" IH3d D範0\]IBXVY &B늂 5Hz >] =NTF#rhx/b^WYGno&d2\%vcБ~[>bk/StЁ_ syg6Z2{jvbxI": YhNkѕEGWu1+E8YeOpr*N;YsvBSBT%uqᗖIՊ)D!x%6:g f x }|QYN(>+Xk b \w AL} FECƍw±L!4tISRF,)$KMf>F-բI|%L@pPOPb9rfKc(N'Pik!HiJ@i4(s*qR9ؤ_0/^_IP9@$VYai+)yiH% .\@Bqa[fO7Ro#oC1!;ՎW-4coRan s7՜١G?ɎI+P͍Kn\^ݱ~dpph0'⫫CL(xblho{n)(L9z%cLJ37=Oe]\ogr)pI%ڝM͢![` Ш|%Cp8MmOC$< # FT !QJ>(MS:qx^ʝ=wCn4t`]͓cp\ʮoڗ!4YM,>湫D dҸGc]PJɗj. s'xC )P?W{R\ }Kc)Ӱy>yB/23%vU Ӵ U,|S2 & ^i5iZvΊTXDwTr)O..lt q~ 7&"& nPB}n :*`MMÁvS2t)?:: PNو᫠%e=qȈw̔$ Hn)=-V B5w _k]X _;XItm =a-H(u(Yn? (A_&4i#/x!fR\os>ɔ?w$/ŋ\mꋿP_jk  h 껇7GdQb緬E?Z2'BDl_ U~e7ni#qm26=v> endobj 3119 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3120 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [311.1018 546.6701 330.2798 558.6253] /Subtype /Link /A << /S /GoTo /D (subsection.42.58) >> >> endobj 3118 0 obj << /D [3116 0 R /XYZ 72 724.2023 null] >> endobj 838 0 obj << /D [3116 0 R /XYZ 72 708.6118 null] >> endobj 842 0 obj << /D [3116 0 R /XYZ 72 324.4086 null] >> endobj 846 0 obj << /D [3116 0 R /XYZ 72 218.8806 null] >> endobj 3115 0 obj << /Font << /F8 1835 0 R /F18 1829 0 R /F24 1851 0 R /F25 2368 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3123 0 obj << /Length 3362 /Filter /FlateDecode >> stream xڭko/'CrkASA8Eqkq%H.I绢A.>gg=?"(8]VY bu__Ga|r}s6ZpQJuqk0 `Q?~hg ``ڳ" 2xfm.J7 9׀GHTqd$Xͳo"r~Àܡ8.)@N ^bTJ4jWiLW8Nr"̕IIØT!U,h-J=pKiwiYҁˁ l[*q:5x>*6qefTְڈid8eڬhOk&D(qvL$ O$ 'vOfcT nK@ßZn3K;Sޤ!GṬ 3rD `١\T4I. [So_Σh=/ b3BEf/8:p# [ 9w+?3;r!Ot$ I<bE|İQLq[-64 d:+%Qp}=f\4Y|Ä#`bj]O:a0$0\'Uj ' }[ypDJ37_w_!6qT J’PqO73`n?DF U7qy>3DNdM\k1x"bòJzUsY.4QA% 3uq3eA$ T*f^ g87AJq0t2teߒLa2:J:Hߔp̳ KY.t~%Y(u'' #{} @ NmMI '8nտb;hˉ(Sti7n,e4/{h ?o^6~٪o!\.>_ū㩮0't5LLmHKtzq}Afendstream endobj 3122 0 obj << /Type /Page /Contents 3123 0 R /Resources 3121 0 R /MediaBox [0 0 612 792] /Parent 3089 0 R /Annots [ 3125 0 R 3126 0 R 3127 0 R 3128 0 R 3129 0 R ] >> endobj 3125 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3126 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [158.5675 525.764 172.017 537.7191] /Subtype /Link /A << /S /GoTo /D (subsubsection.33.1.9) >> >> endobj 3127 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [312.5091 385.6782 331.6871 397.6334] /Subtype /Link /A << /S /GoTo /D (subsection.42.50) >> >> endobj 3128 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.8257 237.0135 102.2752 248.9687] /Subtype /Link /A << /S /GoTo /D (subsection.42.11) >> >> endobj 3129 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [189.6014 237.0135 208.7794 248.9687] /Subtype /Link /A << /S /GoTo /D (subsection.42.119) >> >> endobj 3124 0 obj << /D [3122 0 R /XYZ 72 724.2023 null] >> endobj 3121 0 obj << /Font << /F8 1835 0 R /F25 2368 0 R /F24 1851 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3132 0 obj << /Length 5202 /Filter /FlateDecode >> stream xڥ;ko8r+틭)JmrA0}[r[;juۋԋg7 f`Q$E|[MlYV_?Ti>^<3u4À31˲IVN__nm o%e7KzܤI*WxIUUxcr|#,CHEU&Oir7]gZ&|V]̳z….4?M*$˭ioyj5\BJ&:v H?YÐz|{|$7n~S*=?TOܑ{D@zUd.oJ<`Or!}}7_ߨP o4^Z_Zn hM/r}i7tī~?n{e d:[K{g V>yvwgؒ:NόT ᔩvgpED<{=Ac4 |"MܺnNE)BUqu*]ݾxfy!zC|'i]f :jW*EͯOs_uJHaQ}n*Cew<T ]i=&#) +ڑ '39P> y7K!H).7]!<m.|TG8MiQaZX/_j dY@:qWWLVD*EUm$sL„"u?]NYHK"+,)c̡J0n a(pRt8ۃ0jrBAvzM '#>8\C}f A7b 4c_(JC+JHYy3 Ƣ|1o(R>:{)u5LO<'eEi8x(%{G4$gc0F?I]ɵSH1(X @-d^x[rW'm̄v -B, 4 3,h/#?eb+/Oa᯲|dm[$|Bl3dmz6JR]{@Q'2mBx!da wx$0~2F>fY:KƂ쭏b4m6#D 8Arxs{Ll Ɩ S@{tF[[^%gK4ʽssMA*g(`;@ǁHQƛ?/:j6@ix8O~$F p:+$/DMj7zE%x";mgA*s%6p'5&5v1'6!pBB$ϽnVR޸)GJ'\AҢpOPyZ ?<0hKXW8gmW-jy()&H@6!nL4 =Y7O3H'Qra{3IWXo`kfk%&gz=XQԦ2\h {M1u~AW,*UC3Mo{wal.76a2wJhjqV (l#^ u `b.9 f# 8݇>Zу"z Oֵ~{PZ"2Y.j^KpfQCޮ0 7䳾y|g ,9L"n-sm {V\EmyG.2}~8ʾsyp|\;&R̴x|pFC|()/笔ቌK>[mN} 8E2ouxE 14 p088%(=/?c0q/@T\'T1Df}8PLrld &0:U"Gqȥ;+p$+; )̞':[wt dK+B@jUv9 %lbÅ'CÇ>᝺1M=ؽ?YNuhe#\._-ՉSiK=y"a."=LWƭeq_1ܹx0דKz %pJHUwlO}ՓMKXw{#=l—% x}͹׊wm-/MQOthD_MXί|#:Y&3HNCZbO[.Q5?h 4&D;v y[Z(mo\1bI3K5ѕR7šM'^U}!C+IS7\~ǠZ[eVh-J O7CH~ 0-tʕX&(Ȑ4>9 lޡ6iKEa:bAP6C?]Xn|'F+yȀB2Pa:hm,|(SmMNYkO1}ߨE'F0'qd?eLc"a.7*V=ɹfza M2M)gcGs%8C#/sE6FI4rHQ˹D!Q3͊ܿ/\ZF.k6х4B3o;8ω^Se+IS9kۍM{<}:=BWaZ<]SrŒNu£l65}km0QCPR8 Wz.5/=AkQ}Pjɇ0l4ͯ/IEa"#.Vj8nA~CpOWŵ$[8_1֕ui~`8)6jcet뢄8{x8P<;ݙ&[bZ&F395#īCQyfף#Ay<1H.2y4J^pC,h KWCYKE1\,(l|߫. ^'Ki;ɡeƕF$~jU["h*-Y指'pMbkQFDUR$) kx#;]SRI%$ Kvê|\CJVsq]V ?.=XdSQ+1s$Y(U+CEi*N!ХMtM®;?A(gMʢ,xLڪdRkfcy,!8 Sb,o^OXϓts+Gz`pmIlRey-+oqH,\ŎOq^,0b˃}?9\r !Gd'\N)vvogh )WUB{V-=?ڡ7_e@GMRwɬ\^_&yl u6ZL#{49z5?zhRW%x>@\ff΅Ժ^*MJ̸/UR9b]Mk)+zi0uu?E 2wM @%/:~<)霯)\^1?y0cdɤ(HB#xsigom ]&.>45aPXQ`״ MO\J6Y~ }} \=ܼLJ[[A"C\<$J:Kendstream endobj 3131 0 obj << /Type /Page /Contents 3132 0 R /Resources 3130 0 R /MediaBox [0 0 612 792] /Parent 3137 0 R /Annots [ 3134 0 R 3135 0 R 3136 0 R ] >> endobj 3134 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3135 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [140.7003 182.6398 159.8783 194.595] /Subtype /Link /A << /S /GoTo /D (subsection.42.75) >> >> endobj 3136 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [267.3098 182.6398 280.7593 194.595] /Subtype /Link /A << /S /GoTo /D (subsection.42.11) >> >> endobj 3133 0 obj << /D [3131 0 R /XYZ 72 724.2023 null] >> endobj 3130 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F14 2378 0 R /F11 2385 0 R /F25 2368 0 R /F27 3010 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3140 0 obj << /Length 3899 /Filter /FlateDecode >> stream xڭZmo_aiW@|hRHi %*uwvIJK[ZݝٙgwWeRf:{5ϓ(Jͭ*+Wݍ.VZuxskYDc]betշn~˻+u?HMq^tu}^s&,\*K}.\tWƹn#})+$"\z4)<1ϡ-{55(PW㻤tο@3YU;իtp?xB^?e?D+vNH%V˛o"cgI3Qai fYR6W/]ˮt6 Rt>0ϭy \*{MI,pܭ_̓*7 8 }6@Z?>WC}5osj޷0ϹcڧK2t)kxXhmdI^D;o wΔ^IG|vհ W#;_`{t~s8 ?8bΩl P6͹Lx U:: κ05IPVUC;D5IWD$KM8)}*⍤Mm Zբ9j[ ;'&zhCC6 W 9vwc60zahJ]|@= :MeH,ۥEC Ыئl6 ^_jqd Wtdpvkyodp("Y<"hP@+6~ݚMcHf`oEk`JP"{De[];~G\\* ȸt_&ߡ1ztnx5NB. g_OhE=J|x8Vdr\&aPiJwS2.e Q]': `$WE`uќK4'6S ǖ %xjGt7 #~1ڕY L4x@3 or 9tE=%l ̈́nBԋn=s-Ȗ&[+fmciuM GOt3"MSzC1`Nu R*;<'J34>ۜ%\ZԷ;>;E>3<]v&-?8Ɖ~T&}8'{]DbVPwԑ1J;&{JyqMeBp$!tسL}>d>0M>(}ܝ@ R@2,!\W蓗lSQ&YyB\tQ!G-  ʖ<CIa|((EX.I>+FY0N`Y3kS ȅu*ҵjoM+ O{2V X5u;FsSO= 8@m~X;Q_MLhM@ȸ[+7&ˬ)fCj ܞ1kDĶ@luL9d &|JEdښu)! I ]⃿OBS'K-ĕ\Xj4~sY4ۈCaċg6 ϼddЙ^f$M\1%e"@@yei_0 YHDyoXؓKgH߈;ԣ0P|@yʹOVU4f^v6Qnq#Tp Od~c&d`^Y =fe7bP&z{" ࢰ.8s_p[.H, |8ZTВ6vE{D>WNk^x+('rO3)%1{ęx+Cz.`/H};G"!@4?`^ ~:$en;`4NYJKgyM}`b62~ 2# ik*:MBIq^ [-^"5IE)~Pb_f#ʇ}qOf'gׄcOD=(u"`[:W';:0l(8&as H>^QL3dz׻̬M*!X@Av:yth vbU PGF_ԅiP4<2lC>K~'˖ mHH[$Jخ|8ʩ[}\<WL nH^JQzt] }%n B= P?RE>fqtcNɫ SS5 NeIk(!%;|:}/m sЙ#"*PgQҰ^gϷ/LW>~<ʰ*=Y>.:cxB?ȬdeS4 wP%qUXv~c\6Yv6=bQ|<4e:/|TgDCȚˤ'7\^.dyaѝc LڐbH{'m{O394B$ uC核&7#E1 Iv[AZ_M``\Vÿhn 1vĒTS蛑+VVH{P86?l_x2sl@e[k2X+ifyh SD|lcsR'`Ani>~m[6I Uk3sSTXvןstl݄Ƹ"uYNԨ ǛKW|H''gRǵ=Ď4?#ϲ~a6Y63CdT%ΆȨEaT:a)qx#rYv}/ a敼V3LM~+36Mb`aAOVȣ6jwuͧ'xo-|ogϼF^{6ENcQy>I@4/q89<-*)޵֫j̛!sN DƚS**Пo4,$dB͎lOy9|FW=3i_ݱ峾TEgE_v ngSk4&)L~4ΖXcrDC3U3Z?̬j'q+߭oןM3Ҭ+2aQWd`SDCL޽O'/ ^B]7cNNhDjr; zmendstream endobj 3139 0 obj << /Type /Page /Contents 3140 0 R /Resources 3138 0 R /MediaBox [0 0 612 792] /Parent 3137 0 R /Annots [ 3142 0 R 3143 0 R 3144 0 R 3145 0 R 3146 0 R ] >> endobj 3142 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3143 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [224.9392 218.3211 244.1172 230.2763] /Subtype /Link /A << /S /GoTo /D (subsection.42.50) >> >> endobj 3144 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [334.7198 218.3211 353.8978 230.2763] /Subtype /Link /A << /S /GoTo /D (subsection.42.119) >> >> endobj 3145 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [448.0013 218.3211 461.4508 230.2763] /Subtype /Link /A << /S /GoTo /D (subsection.42.11) >> >> endobj 3146 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.8257 206.3659 108.0037 218.3211] /Subtype /Link /A << /S /GoTo /D (subsubsection.49.77.7) >> >> endobj 3141 0 obj << /D [3139 0 R /XYZ 72 724.2023 null] >> endobj 850 0 obj << /D [3139 0 R /XYZ 72 193.5223 null] >> endobj 3138 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F25 2368 0 R /F18 1829 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3149 0 obj << /Length 3904 /Filter /FlateDecode >> stream xڭZ~ #0 ximS(eC Iev3CR)Pg8Ǜw]}:,:7 4ͮ-KEQ 7?.dҤ:/J6/mcTMZoFC~ a?AD 1bSV/^s_؍ycr׬MYRm/>̋%3#Νrv- ޾76i'ӤX29}te_^Lm>t^^7_yU^Ov^<}d/s*f$%ﺇҒWEs4:mB~TMOY92,){9?.GGp8 =rKn)8Svuw+Si@R&V@ NC7P0``6c?@Ws@&AKl[JS'zσn Rt01xp:-uqG_#1I ZfBKv}QsWYs?&r)R [f!ʼ/PX$ M|-YT SM|1҉|F#t "NL!ƬtxTV9n]7E1`Uil}MKKФy38],=m^;٢ sLzk{|1gb0tކ AGq(0FN;цir ;?;kmGo|rlsRts.tZ{9E vbfG:u2g!P&SL_-Re42idec #Y;g"!'80tFvxl6[ ؖ,fk0YUgVٟ69:1(pX*P6m;k!w ? 'Xy_$&FӋzFd'sك=$%92d"=i|$A1@a|UFJ㕝ٱJFAs N}^}?[yn͇.iw*q=F1Nx=! 3 oj[K"U&TViIr0Rw؃\Z$l IUp\Uy*mcnyk?ČS(4HƖTiJ3<8:rECbv}w{;hȼB,x&Hd!)^O<0D`:ʮ+D2Q x[Yqj |ԱLʤmŗOfl]&+ۛ77V pna*m8|hԵ*p8޹5mWcmFY\Va=fROcc"_ۃ=2Nwr'LscQ6L bt"ӧSK*3GZ2 x,C2RF2zp>u0nSӝM9AMr_0 YY_̓ V" ijNh8Ԓ=+6KtqJ;vT%-l;g3vAmu?-YgR]佝'.%]+@\<#lALXzZ~#GD`[1 ?vG:Pة~"Wc3 SFY*LIVYq*\W=6 AbgþxO7,'T&hd3MLDPC ׋79a=i:Η? %J|(^1ۃ]džq%zd(iUϱ2T3!r|%so(RhAjMե$Nk~<^,&!e;f8(I鶟g1y L,/@j eFGꖋFfeXC{hS# X_PqTC@ `ᆴۜc% dc]BW4ۑ{(/-kz>;tG{WDzɧ -_ki@ CG`d*f߭-\IIgj*ی"^-o=:s vܥ0թ5)faTe`TFsm68Kc zI:`[ql1\ F=>,Jc@[1Pxj+Ϣ jBz ؟垭d4J3gML"İbj;ӝ?YABtZ6qtI+K޶w _:gRi/ݙl*6azTHRi8Y MUGP7vS;2kh@b:M%6 _/"JS?[Q$TGAdc==jYxJV'F^"L59%-%>0Nx0c`ܯ:;xՋ,6Ň d~xosMhK+v~D8Mb;Kbw6a 89.X"J~AcH D%vT*!L],|] U/1ΥS& @쓋-XK,D9D3*`:TtRF$m>`!022vTywZlb۝DS2$mXoPW pnr)ARfEܖgRLF칻Fg;H/bf)eQ^Z6Yt:vnb|Zēk%-!{#Ȱ8I@uK蟹/ަG- GNRS&Pu}^aÿ:+-]@dadY-~$^i`+,%lKW 8lSd3{]^C5R۰0:˺k#V}PCP /69\^J78)ݠpLTg(=ǯot[;ClG؄ P9ȭTQ;vש>-7yvڭn@n1]CV ni%ňUV \endstream endobj 3148 0 obj << /Type /Page /Contents 3149 0 R /Resources 3147 0 R /MediaBox [0 0 612 792] /Parent 3137 0 R /Annots [ 3151 0 R 3152 0 R 3153 0 R ] >> endobj 3151 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3152 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [97.9029 165.5128 246.3449 176.6378] /Subtype/Link/A<> >> endobj 3153 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [447.2277 73.235 466.4057 85.1901] /Subtype /Link /A << /S /GoTo /D (section.46) >> >> endobj 3150 0 obj << /D [3148 0 R /XYZ 72 724.2023 null] >> endobj 3147 0 obj << /Font << /F8 1835 0 R /F25 2368 0 R /F24 1851 0 R /F11 2385 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3156 0 obj << /Length 3717 /Filter /FlateDecode >> stream xZmsܶ_oAfV8؊q{ Yͤ$v:\,gwE~Z(szq})D}$c3\Etb J GK:}q 7Z説$;dn=Q f]ҒW{;ɱy#!5S>󞛫r`Mص[o }#ֆo4k+j^؛#ot8탞&`i *VGVNI<nM DgыIq >,xcbQwkeIr×oLVYQs"> LW!E\ EܵII"Lv&nl:@]a'i N!u|]F""QpF2@&TsYSFvܖ"@IIK$k8 `qY Q`]H;=kJ㶊.LNR8h'[Zw Ze|Rt_^e IFL v>t-_V-7 @g_V[u;2v.hkwLkZ#^7㿒3oܾD\B ݠ۵Б>V|ܡe|ek#2< yìEwO1<Ɨ`{|8b0/U/@]sl㥢Ƞsbbui)$@Bm TPgV:zG*m4XG3Jq1^=v?eo{1`Q-vg ؼ;nMוXc$}>p -,ݔ]WoW7]^/OOqXHeJ@IO}ssu3;+ gvMY!RddžA w@pn)L@{qke!fr䌉bmPEddi:%+B|g6[Qw%jpoT8v:L=[E S$=Ckh8|YbJ"AJD'YwmRtYY16JPLVxf#ĈBs"P6aU,r}XׇAW. m}64 bπM볆دm{0)mA)6 m '}l{Kf H`ERh,,! Ҡ<jPvMGZAQbEc#6n9jRfY(]`$c-4 zKVd&,\hs1*Yp Ev Y[-fUlNjǠ̅9^XoI< :|`u3 aJ~ am\ݑ]}L`hXba,4eO9ME{^[\Fܮ9YŚ_|x[~Ht-Y޽;$&XXGΫXrz&x lw5*wu^bs d<~Xj* -}[~| -72hnUʕb2ET9F9#e'GA 1At q.Epuӎ8p;0e╋\oq=O| hţ/$23}+,cmԧ:s}f[J56$PZZ=L>Nyd-i\`c)bS4& FHUy=%M,wgAls:gO~0/? }e>wyܜe}H}Y:_xHV&Cd.sZuf` @WͤwlJULŸrDe!aCaCg?AL`}W K_euDhI+́%VW\]йvKBcM8'Agu9o/DoP$of+S0r4^e.4'K ~%gt;L %j$u iE`] X 6WMC?82mI\p)z9&?|m,W|]k)*-Iڣ|f6&敯8LhuUg2<-j8b0 .q.!jL ~c+tO@ kZS͐ҁĭ_\) xk NZك G蕹Gm ]f v)S6忑HؤOS=N?@hsKzHĖh~a$5OJd*-_>|uMW q5Ƅ!zLS^OPE?fXendstream endobj 3155 0 obj << /Type /Page /Contents 3156 0 R /Resources 3154 0 R /MediaBox [0 0 612 792] /Parent 3137 0 R /Annots [ 3158 0 R 3159 0 R 3160 0 R 3161 0 R 3162 0 R ] >> endobj 3158 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3159 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [97.9029 510.9088 345.7214 522.0337] /Subtype/Link/A<> >> endobj 3160 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [97.9029 478.4195 429.4068 489.5445] /Subtype/Link/A<> >> endobj 3161 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [391.4749 389.4738 410.6529 401.4289] /Subtype /Link /A << /S /GoTo /D (subsubsection.42.50.1) >> >> endobj 3162 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [499.3628 389.4738 518.5408 401.4289] /Subtype /Link /A << /S /GoTo /D (subsubsection.42.50.1) >> >> endobj 3157 0 obj << /D [3155 0 R /XYZ 72 724.2023 null] >> endobj 854 0 obj << /D [3155 0 R /XYZ 72 465.5357 null] >> endobj 858 0 obj << /D [3155 0 R /XYZ 72 127.9276 null] >> endobj 3154 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F11 2385 0 R /F25 2368 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3165 0 obj << /Length 2822 /Filter /FlateDecode >> stream xY}~ ƍuo`B#& ۲ [%J]00T(w~ruY B'-Y9nrbj"g+= d gFmd©[ՁQ3~|&$@8A1BX4GZ7<؈0Etp#qp9"RH $l"m]cJ\k) Ϳ:Rq>n!lc jrjE秳7;c. CT@)QexlBiU:椯^ے2+l+?ug#!%D7!bg&ش}йVqk(bTcؖ}vKrk^ʄ"+:u0O v38,iB?¨}Ȅٵiy]e|Klq@u]%p}ǜ. 9AbnX8!SL(e {QJBMS5ī96% ׅz8hEa`9hgfQXĹa0v(R͚t tQ[ž-$=1H)%XoRiH5}k, /lC;bGLA?DQ%P(b]̈́ӆv69 u * aiUI$U'{Qֆ "L CŭjaFζ͗ #aeQqK>Ep{ZȘ5[X@ oa+h!Eߣ5S;2-VսeND)zȆAĎv("K݇qNAN.Y乿?;}'U>pIpVlKnw_!T!pTҴ{CgSp SxF,,VrN<$|'&;È j>Cၚρ& {yBEk((;vdfgCҟ!'OVwfƜ@O_ͨzߥ5ARc*{p)`X/+wM4*i_iYqN#Gi=e=~*@C IldٷLf=~2qܽ v{cbыg T16T%(d5*ϦIvmZFJu@DcKOF~b*BcݢsW?w=bW(]+$7Z/j߯NO\pgGl)Nw} {“qO7?u'3ny(l4E6e@1L0݁YJ>秵sj4z][Yn OMn4 ͳŮfMݔ05Y/&gVGѰ zNؔyL f_]Jiq+~~, fƷWab葶¥{=a n@ןP۸XΌޅZ?vu:AxHǚr_;ҡ}!c26Uo"r~Y6s#$WY'CeCa&M`@]=vLq \D I8.֪}8:a,xO$nAˡA6zB 0U~פҩY"^$;̱T3kNi~q SbnD9?TLb: 6 47nNH Ռv̱[.5 4{ 瘣^2ȷ2aR$݇s5[#NCYuV^c_L!?7+–h{\HFqX0d~ȚYR95xģVcD ୫Aw>ߠ>6/*ޢ]*}}V$s(Wo&Q$KbVא:VԤ|` Bs!mc *lvEc/ffZtXhMS'"z11q "+@7ga,|oA+Q8;ʉty V٥]^:oZߓ㧒n#zL/G6]2w 3ϖyvS 8]A-ּ Vl:9(>(}V3Ƣ@I %3\%CTO}[dhz]T0H **b1BJYkN fcLy޷# &ftE2Av=8>#Rg+0, F0ˆQ.2/ N \>$~h˒@P;5@alU5a<㹒+\.쾚Ńus#՝PEkϡ Fo s/`eMP$HҴKZ3i`RxƘ!'sPڦz,Ft%R"kVYc BqPhu^^74Ę 4n ~`Cgܡ'{onj3c/dh#:Is3ձq$~z"e]"w;7&wk(k)ԷM`жkyN@+>_!6pW]?o ؐ;Gd">շ;$D#%mYh+ (bOjp&'mM[L_U8* #`7s/\T\Z<#/r3cT1L bI(-c*,-/}Yo^k!M0^`go3W6-Xtkrtv2ƛQW1]βެ&bvs !(_Y=HpOxCJW>b`w E8S8#lό lxDflz|+3TQ!cE!v y Y]e\&@AESWco>Q<Lwc3'y>?50c _IW]ߎwr?kapm^`Cn7؈8 /&tC_-?f9~ G\Z'v'0$Q9Sl'F"5.=S2;Y_x #|@C2ev^AOۆuu1"4}18, !~Y$[u*_ Bf@@sd&'q?KW(x]DxMgdVzrX޳LWO$?1?3_endstream endobj 3169 0 obj << /Type /Page /Contents 3170 0 R /Resources 3168 0 R /MediaBox [0 0 612 792] /Parent 3137 0 R /Annots [ 3172 0 R 3173 0 R ] >> endobj 3172 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3173 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [373.3577 415.3754 386.8072 427.3306] /Subtype /Link /A << /S /GoTo /D (subsubsection.33.1.2) >> >> endobj 3171 0 obj << /D [3169 0 R /XYZ 72 724.2023 null] >> endobj 866 0 obj << /D [3169 0 R /XYZ 72 708.6118 null] >> endobj 870 0 obj << /D [3169 0 R /XYZ 72 370.7684 null] >> endobj 874 0 obj << /D [3169 0 R /XYZ 72 97.4635 null] >> endobj 3168 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F11 2385 0 R /F25 2368 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3176 0 obj << /Length 3457 /Filter /FlateDecode >> stream xڵZ[~_1/ѶoN"OZďϹU,($bUNU:;/n>:-"5mf_gy^lR*zFGw[?ߘ<>M=M7n86 iUl}{ݍUl+7No7*E>ÇuQKGs柁m眾XRZq M[:زվbuUF+y顱l_rD®FfGuٚ,$a4C"{eYh绯3&1`$΋ĀP mw.$'ғLr8vΒh8W(.Ol׼.8L0ˠZE{ u{@1TJ-"NrަyB 32ҩQYDʼnʬ㹯j/q!tPg {`QqI Y^E&םyp?k2б+^"GX?YkljɗG=͢Ml#?}#ojTof8 zlaGHY԰pM=ǁDZ|cH^`MlLꍪl׸"cυf*%~i-IR-$d9v /( (j1je d7}jCU#5k_I'C?zE߽W[˱7Y?yuvbɍ1&4՛5%VKm ><91[wW|+R`<;BgPm?M>_>d)s(RK>,߉ }q~qytqg[˺V VvO@\+.8mtPv3t5}\˞a{~QvOC#<,x6'a->H͙$*l{dbRCL7zR{ޕ2 zI?!7]>A r{R4GLaB#j_4޲z4<[Ѣ{ھ8`:T!aT(CY#vn5&& U OnB,|8BTQJ~*cQ41.#"ܓV2eĄj lgH.R!8?%৖D*awkG=.eAD}?{ůM%YW2B"rdM&I>qBw? 5=,7f) ZD'S,0HO7EuAQc1wuvK -OiT㝬.|1orK2 ]f3^lP\f\35~qJ7zu "(%zH'6v֋ z9X1}SANz&i|v-,\cl Cg4V| |x;801fTb #NT+!X%Qv|nfKžPbĢRxZA}j *{@N5@2諪@xQ U*Aa#O3`]uLʨ,N ixѷ6C*OG9N<0*QHq|H*Ux4r? =_3 XP@~h֗DۍS=>NjBjf!#A^ QU?zV@S("Β8:עHF^zzr{oҤX@Ùc2-ܱ]YTҟ!d,Pq[ֽ4U\m9]ş h7i֎ғh(R;1I DW4p;Ù#K߬XY3J,ΧPE'[0qqBEpg[7E5c`rRp C8U5x J|<-mkKEBj0\c`gY=_ ßkγS8:͔n~Nf' #e3p?(WF᯸ WCǣ&I#ʉ9?jaCW-.xs+<-+T~KDfrڱ}]LDWsu\g'܂D[(ԅMgO G&b=Y|POv!)wם*:I& ʃl. Ƣ>{n]T#kUTBaCEl 4XԬH ~i]1!uEzrrODObc]L1Tlv!?fTB,37Y7-Fb ޚ$o|UbKUqnzF^)@rXDN]\URѸda~'Hk}Z>s XDTgk/-g?ET?.H畫R3P:w]TLZ["MEŮendstream endobj 3175 0 obj << /Type /Page /Contents 3176 0 R /Resources 3174 0 R /MediaBox [0 0 612 792] /Parent 3184 0 R /Annots [ 3178 0 R 3179 0 R 3180 0 R 3181 0 R 3182 0 R 3183 0 R ] >> endobj 3178 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3179 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [422.1599 424.9308 441.3379 436.886] /Subtype /Link /A << /S /GoTo /D (subsubsection.42.50.7) >> >> endobj 3180 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [88.8257 412.9756 108.0037 424.9308] /Subtype /Link /A << /S /GoTo /D (subsection.42.50) >> >> endobj 3181 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [179.3137 412.9756 198.4917 424.9308] /Subtype /Link /A << /S /GoTo /D (subsubsection.42.59.6) >> >> endobj 3182 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [456.2739 267.0156 469.7234 278.9708] /Subtype /Link /A << /S /GoTo /D (subsection.33.7) >> >> endobj 3183 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [316.371 21.1249 329.8205 33.08] /Subtype /Link /A << /S /GoTo /D (subsection.42.1) >> >> endobj 3177 0 obj << /D [3175 0 R /XYZ 72 724.2023 null] >> endobj 878 0 obj << /D [3175 0 R /XYZ 72 490.862 null] >> endobj 882 0 obj << /D [3175 0 R /XYZ 72 400.2395 null] >> endobj 886 0 obj << /D [3175 0 R /XYZ 72 238.5884 null] >> endobj 3174 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F25 2368 0 R /F11 2385 0 R /F18 1829 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3187 0 obj << /Length 3119 /Filter /FlateDecode >> stream xڵZ[~_!X Jp 46/i- DSBR^ 5f7Ep6߹LbQvqYi^f."^B2_"9EvR)T°,EhleY onE?~滫77WbRib]rl]e* ,e)+mߦ}2K,RKA,lk ^d$v]_#u_}+u̚T!ٶYrt-nP8<ҔQvkW2O>=;ܦ ︯LF?(>n =3jMlc;v}ML-O,%k"kdliYZii$OTRMvLHȽ\.%SȀ"&*q~ Y9\iNdUZ a#yӢ9Ǧ%]hDdCꁗN;*t)Hn Vn#2a@9Qw~G9o_WmɵAɌ(W=nW?vktA0a) jBRA@Ƴ\ gD_H; Q*/uAXښM3XC2L יJvgs>'{ .OOVIt!i w}Jd\2CmL^‚TiVp$۳gqQx~d| tc&RQnQZ:B态$whU3q:A҆|DpBg)L*BC]|&| JaS8:jvV4 W-9{IcQBl<8O66L%291"`9DY|Di I~4˱0"{raO4$eyEj8erh<=R~yh^⟟|z"]YNt7VA W iE4˥W9QxAP>PHsʞ,c؃5^+A/[N2 ~Q\ׂNX,κ923fͿ]2zYMDdu #]|BFk6\ݮ9%N.懲Fi1~8?((N L;5N[x6^Lgw$Öwp8)bnޘ)ȕ/f7nO5Lyq u |Η`rΊs."A/_Wծ~߭Hkgjmr!?6#2t"LS2v1HfO_WHv _GHvF 26uνcF1_ iHHc7o`~lN&/7vJ}'sI@RzBEB3u ٙ:P1D^j@B"3=$oo(8)Hie~6UXkft?@k’)!߻w T[*g>0ze aA勊FcSi];6T Fgޑg"0qG \Z*Ytߌۘ_/^ e{6mTXvm|:Գ<4ȳwރ_Dž&WLu9ÐF㳃%9/2$x1cqny! W-M}ͬOZIfK?s$qC`To:N6GK t%n(9..U9%YMYHv0o(v+WYvw^xa-'Wp_<@  Ij)qLgcE]<yf |_Ym/rՆ뉘+yvpcOqI ?p)W9dX7 `YSIh=A?rґԊ)#FdX콌B[w.,FlVŨA# WbnқzV "}~KJSu{ʜaS՘ƵU#ThT>EX-\"TH_Cکc-Uzcf"f#|VMD3*nЫnzWUR6k>qd]O?K𱺘_$9S\%N9}S 4&6fH/KhU@hsw Wn>d:灢Hzhv;S bvwK OW@a5̮2 J)Ξ6?ozZzbcЏݯQ>r4rūlԵǯ-~|Vn-DZyz,]umipWI w;aw̘0uCf5Q&ۼ,ӆ <|ŝ%]r\ >7-9h̘; 쓯Tj. wO9̱#Tx`MhKIz (7pl3bmې 4nKc,sz!d8)$DgLldN<ӄ uI(z 4Mh2g)-q~=p?Pendstream endobj 3186 0 obj << /Type /Page /Contents 3187 0 R /Resources 3185 0 R /MediaBox [0 0 612 792] /Parent 3184 0 R /Annots [ 3189 0 R 3190 0 R 3191 0 R 3192 0 R 3193 0 R 3194 0 R 3195 0 R ] >> endobj 3189 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3190 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [442.5801 666.9624 456.0296 678.9176] /Subtype /Link /A << /S /GoTo /D (subsection.42.35) >> >> endobj 3191 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [223.2744 655.0072 242.4524 666.9624] /Subtype /Link /A << /S /GoTo /D (section.44) >> >> endobj 3192 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [284.8143 602.8971 303.9923 614.8523] /Subtype /Link /A << /S /GoTo /D (subsection.42.88) >> >> endobj 3193 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [452.762 602.8971 466.2115 614.8523] /Subtype /Link /A << /S /GoTo /D (subsection.33.5) >> >> endobj 3194 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [97.9029 458.8288 225.4236 469.9538] /Subtype/Link/A<> >> endobj 3195 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [97.9029 426.3396 262.036 437.4645] /Subtype/Link/A<> >> endobj 3188 0 obj << /D [3186 0 R /XYZ 72 724.2023 null] >> endobj 890 0 obj << /D [3186 0 R /XYZ 72 413.5041 null] >> endobj 894 0 obj << /D [3186 0 R /XYZ 72 234.6687 null] >> endobj 3185 0 obj << /Font << /F8 1835 0 R /F24 1851 0 R /F25 2368 0 R /F18 1829 0 R /F11 2385 0 R /F14 2378 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3198 0 obj << /Length 3287 /Filter /FlateDecode >> stream xڭێ}BH_\ș) Kz*Jb %}LtLXԺafGص||_a[w# 钎JT\y&;a!X:-@WmI>Kқ@Ӈ˖,s9ZHTOveLgN*O+SUuYi.\!3THN%Cw+WH(gsq,iƅ0zjb2^D&{L y ri&U`yn0)K-r2HJLLOy2GOut7h>#]\5҅T ̐ ƭz:9ET~,I) u-BV*S~_ MXE)H!G8t5sjTHzx#c7mWy(>lV)|= |@FFLM\F{1Z%_i7C!jrQ ]䃚S!e NK1BAnXV3Kp6K2. 9³< <jG(쇮z!9ն0] K|I3qFI#R#x?-a_ΧNLT8fXm!ҽQrJڳRġKQƨ7 er.iySVZtZY'l>q&2?h!HH|? }(gY>уYx/Ϸ>QnȢ cylXB̞ I CTge>FOVۑc8xz`Gi]ɞTuA,Ff@xQ9\Qt ҁDTm{⼻d2ctPؾs j9X x} L8y?{}D\=?{)T(6BAɏmiI8C1de]5mrįC{?|k),ah')[봡}7ǂ8GXmy]Nl".7_p<YZ?g6 ʀB|*_B8c\}<߮7I_ -68QDF}ACKnq͕{E Sr(Vq IDKשu0nbYkKSU2II3mZLQc_Ugy*mZLlœ&1 B K|SFm| ʉ7:͌e)d!,ߕ5 _'0x2p֑!3R%umb  qǠD}\U|]\ˑ PڙDȅ*Nl|ӂ vH||< >3"Ee[-Ԡ!CBf1Ok%O6Be[(k[Q4 `lZz15rNѷ~w%'@;cx1jRxlp.ο qF_ 㼸j]PIr̓cI+nw++YR')(#zk>+9cn&p$0@_'^l$< 6a-= o;<:y/_6Ш3]U)SŇO^m ӷ\1V _N+SgI7.'/vrie PW`.tbe%/-vH^:x#=HW@q? ~ pD%xǣ?2JU@}&JGv]y#ԑyLJkp>pj $mw苫5f>.D17.uN¿?( 6_qnL`URDUvIF!%\R3ATϲ3#r-TH_jr :X?Tf>6k.fRY!aܷK6:YYŝ8g~UPg/fm˽e@oi a^T~諒B)d#>.6}M~U?|׋XJ:HxWA N|> endobj 3200 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [269.8517 723.206 324.1483 737.1537] /Subtype /Link /A << /S /GoTo /D (TableOfContents) >> >> endobj 3201 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [479.7105 695.1622 493.16 707.1174] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 3202 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [294.5027 602.8971 307.9522 614.8523] /Subtype /Link /A << /S /GoTo /D (subsection.14.1) >> >> endobj 3203 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [390.7898 602.8971 409.9678 614.8523] /Subtype /Link /A << /S /GoTo /D (subsubsection.42.59.3) >> >> endobj 3204 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [165.2138 578.9868 184.3918 590.9419] /Subtype /Link /A << /S /GoTo /D (subsubsection.42.59.8) >> >> endobj 3205 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [456.5776 326.4568 470.0271 338.4119] /Subtype /Link /A << /S /GoTo /D (subsection.42.36) >> >> endobj 3206 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [144.3685 254.4559 163.5465 266.4111] /Subtype /Link /A << /S /GoTo /D (subsection.42.88) >> >> endobj 3207 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [327.1218 101.4348 340.5713 113.3899] /Subtype /Link /A << /S /GoTo /D (subsubsection.33.1.6) >> >> endobj 3208 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [505.0913 101.yle=""> ve vrcholech obdlnka budeme zjiovat, zda kivka protn jeho obvod. Najdeme-li dv takov strany, pak metodou plen intervalu zjistme prseky A B s obvodem s pesnost na jeden fyzick pixel. Tmito body pak prolome seku, m vlastn kivku v tomto tverci interpolujeme. Pi realizaci programu musme rozliit, zda plme svislou i vodorovnou stranu obdlnka. Uveme pklad vodorovnho plen:

 

Procedure HorizHalf(x1,x2,y:Double; var x:Double);

{vstupn parametry v hlavice maj stejn vznam, jako pi konstrukci osy x, vstupn parametr udv x- ovou souadnici nalezenho prseku.}  

var i      :Integer;

        a,b,c:Double;                                                                                                                       

begin

  a:=x1;b:=x2;                                                             

  For i:=1 to Trunc(Step) do                                        

  begin                     {plen intervalu a vbr intervalu s prsekem}

     c:=(a+b)/2;if f(a,y)*f(c,y)<0 then b:=c else a:=c;                                                         

  end;

  x:=c;                                                                                          {nastaven vstupn hodnoty}

end;

 

Dle je teba zjistit, jak (a zda vbec) kivka testovan tverec protn. Kivka  protn testovan tverec zejm tehdy,  kdy v jeho vrcholech m funkce  rzn znamnka. Ohodnome vrcholy tverce  postupn hodnotami ; ; ; , a to prv tehdy, kdy v pslunm vrcholu je , jinak vrcholu piame nulu. Cel tverec tak me bt ohodnocen hodnotami   - z hlediska na konstrukce existuje prv estnct zpsob, jak me sestrojovan kivka testovan tverec protnat. tverec na obrzku vlevo je ohodnocen slem , tverec vpravo pak slem . Souet tchto ohodnocen je  a je zejm, e postup konstrukce bude v obou ppadech stejn - v obou ppadech je teba hledat prseky na sekch , . Akoli je tedy celkov poet ppad, kter je teba eit, trnct (tverce s ohodnocenmi 0 resp.15 kivka neprotn), program sta vtvit pouze na sedm vtv. Zajmav vyjden ohodnocen je ve dvojkov soustav, kdy bod je ohodnocen pouze nulou, i jednikou. Nap. pro lev obrzek mme:

       

 

Konen je teba si uvdomit, e v ppad  resp.  nelze jednoznan rozhodnout, jak interpolan seky vlastn sestrojit (viz monosti 5, 10 v pipojen sekvenci kdu - obrzek na dal stran). V tom ppad je teba vybrat jen jednu z obou monost.

 

begin

hx:=Step*(x2-x1)/Image1.Width;      {po obvyklm peten hodnot z Control}

hy:=Step*(y2-y1)/Image1.Height;   {Panelu a nastaven mtka nastavme }

x:=x1;           {kroky hx, hy tak,aby pesn odpovdaly uivatelskm rozmrm}

Repeat                         {fyzickho pixelu a zanme prochzet s}

y:=y1;                                                                     {Promnn h bude urovat, na kterch}

Repeat                         {stranch tverce byly nalezeny prseky}

  h:=0;

  if f(x,y)      >0 then h:=h+8;

  if f(x+hx,y)   >0 then h:=h+4;

  if f(x+hx,y+hy)>0 then h:=h+2;

  if f(x   ,y+hy)>0 then h:=h+1;

  Case h of

    1,14:begin

           K[1]:=x;VertHalf(y,y+hy,x,K[2]);

           HorizHalf(x,x+hx,y+hy,L[1]);L[2]:=y+hy;

           Line(K,L,Red,Green,Blue);

         end;

    5,10:begin

           K[1]:=x   ;VertHalf(y,y+hy,x+hx,K[2]);

           HorizHalf(x,x+hx,y,L[1]);L[2]:=y;

           Line(K,L,Red,Green,Blue);

           K[1]:=x   ;VertHalf(y,y+hy,x,K[2]);

           HorizHalf(x,x+hx,y+hy,L[1]);L[2]:=y+hy;

           Line(K,L,Red,Green,Blue);

          end;

    ..          {ostatn ppady analogicky}

      end;

  y:=y+hy;

Until y>y2;

x:=x+hx;

until x>x2;

 

          

 

V pkladu 5 je pedchoz algoritmus zpracovn.

 

Zde najdete kompletn  zdrojov kd               a zde                spustiteln kd

 

Podobnm zpsobem lze konstruovat plochy uren rovnic  v prostoru. Zde se podobnm zpsoben hledaj prseky plochy s hranami krychle a plocha se interpoluje pomoc trojhelnk. Rznch monost vak nen trnct resp. sedm, ale 254 resp. 127. Tmto problmem se budeme zabvat dle