From ea986a826b838e7a5a956ec004f037c1337b466a Mon Sep 17 00:00:00 2001
From: n00b87 Function ActiveFont()
+ Returns the current font that will be used with DrawText +
+
+ test_font = LoadFont("test_font.ttf", 12)
+ SetFont(test_font)
+ If ActiveFont() = test_font Then
+ Print "Test Font is active"
+ End If
+
Related: + LoadFont + SetFont + DrawText +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/addcompositechild.html b/doc/doc_files/addcompositechild.html new file mode 100644 index 0000000..6f78325 --- /dev/null +++ b/doc/doc_files/addcompositechild.html @@ -0,0 +1,27 @@ + + + + + ++ Adds a child Actor to a composite actor. +
++ Returns the child index in the composite actor. +
++ NOTE: Reference the included Composite Demo for an example +
+Related: + CreateCompositeActor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/addprojectoreffectactor.html b/doc/doc_files/addprojectoreffectactor.html new file mode 100644 index 0000000..4cf5773 --- /dev/null +++ b/doc/doc_files/addprojectoreffectactor.html @@ -0,0 +1,27 @@ + + + + + ++ Add an effect actor from a projector. +
++ Returns the index of the effect actor in the projector. +
++ Refer to the included Projector Demo for an example +
+Related: + RemoveProjectorEffectActor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/addspritechild.html b/doc/doc_files/addspritechild.html new file mode 100644 index 0000000..8c0dff8 --- /dev/null +++ b/doc/doc_files/addspritechild.html @@ -0,0 +1,21 @@ + + + + + ++ Adds a sprite as a child to another sprite. Child sprite is offset by given position. +
+Related: + RemoveSpriteChild +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/addvehiclewheel.html b/doc/doc_files/addvehiclewheel.html new file mode 100644 index 0000000..240b93e --- /dev/null +++ b/doc/doc_files/addvehiclewheel.html @@ -0,0 +1,27 @@ + + + + + ++ Add a wheel to a vehicle actor +
++ is_front_wheel sets whether it should be considered a front wheel for physics and control +
++ NOTE: Once an actor is set as a wheel, the vehicle controls all transforms for the actor +
+Related: + CreateVehicleActor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/applywheelengineforce.html b/doc/doc_files/applywheelengineforce.html new file mode 100644 index 0000000..3dc970a --- /dev/null +++ b/doc/doc_files/applywheelengineforce.html @@ -0,0 +1,21 @@ + + + + + ++ Apply force to a wheel. +
++ NOTE: For movement, you can apply force to a vehicle the same way you apply it to any actor. Refer to the actor physics section for documentation on that. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/calculatecompositeprincipaltransform.html b/doc/doc_files/calculatecompositeprincipaltransform.html new file mode 100644 index 0000000..7caf9fa --- /dev/null +++ b/doc/doc_files/calculatecompositeprincipaltransform.html @@ -0,0 +1,35 @@ + + + + + ++ Calculates the center of mass and principal intertia axes for a composite actor. +
++ Parameters: +
+Related: + CreateCompositeActor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/clearposteffect.html b/doc/doc_files/clearposteffect.html new file mode 100644 index 0000000..16dd4dc --- /dev/null +++ b/doc/doc_files/clearposteffect.html @@ -0,0 +1,18 @@ + + + + + ++ Removes the current post effect from the canvas. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/createcompositeactor.html b/doc/doc_files/createcompositeactor.html new file mode 100644 index 0000000..c3d6bf2 --- /dev/null +++ b/doc/doc_files/createcompositeactor.html @@ -0,0 +1,24 @@ + + + + + ++ Creates a composite actor +
++ Refer to the included Composite Demo for an example +
+Related: + AddCompositeChild +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/createvehicleactor.html b/doc/doc_files/createvehicleactor.html new file mode 100644 index 0000000..846bbcc --- /dev/null +++ b/doc/doc_files/createvehicleactor.html @@ -0,0 +1,21 @@ + + + + + ++ Creates a vehicle actor. The chassis_actor is another actor that will be attached as the main body of the vehicle. +
+Related: + AddVehicleWheel +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/dotproduct.html b/doc/doc_files/dotproduct.html new file mode 100644 index 0000000..74ea766 --- /dev/null +++ b/doc/doc_files/dotproduct.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the dot product from 2 vectors +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/flipmeshsurfaces.html b/doc/doc_files/flipmeshsurfaces.html new file mode 100644 index 0000000..abfaf2d --- /dev/null +++ b/doc/doc_files/flipmeshsurfaces.html @@ -0,0 +1,18 @@ + + + + + ++ Changes the facing direction of triangles in a mesh +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/generatecompositeaabbfromchildren.html b/doc/doc_files/generatecompositeaabbfromchildren.html new file mode 100644 index 0000000..2e9ee4f --- /dev/null +++ b/doc/doc_files/generatecompositeaabbfromchildren.html @@ -0,0 +1,18 @@ + + + + + ++ Generates a bounding box based on the child actors +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorboneabsolutetranform.html b/doc/doc_files/getactorboneabsolutetranform.html new file mode 100644 index 0000000..6d1cae2 --- /dev/null +++ b/doc/doc_files/getactorboneabsolutetranform.html @@ -0,0 +1,21 @@ + + + + + ++ Stores the absolute transform of a bone in t_matrix +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorbonecount.html b/doc/doc_files/getactorbonecount.html new file mode 100644 index 0000000..cb76cd0 --- /dev/null +++ b/doc/doc_files/getactorbonecount.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the number of bones in an actor +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorboneindex.html b/doc/doc_files/getactorboneindex.html new file mode 100644 index 0000000..f4f19e6 --- /dev/null +++ b/doc/doc_files/getactorboneindex.html @@ -0,0 +1,21 @@ + + + + + ++ Returns a bone index based on its name +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorbonename.html b/doc/doc_files/getactorbonename.html new file mode 100644 index 0000000..3b9c7e7 --- /dev/null +++ b/doc/doc_files/getactorbonename.html @@ -0,0 +1,21 @@ + + + + + ++ Returns an actor's bone name +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorboneposition.html b/doc/doc_files/getactorboneposition.html new file mode 100644 index 0000000..fbcac35 --- /dev/null +++ b/doc/doc_files/getactorboneposition.html @@ -0,0 +1,21 @@ + + + + + ++ Gets an actor's bone position +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorbonerelativetranform.html b/doc/doc_files/getactorbonerelativetranform.html new file mode 100644 index 0000000..a0be9a2 --- /dev/null +++ b/doc/doc_files/getactorbonerelativetranform.html @@ -0,0 +1,21 @@ + + + + + ++ Stores the local transform of a bone in t_matrix +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorbonerotation.html b/doc/doc_files/getactorbonerotation.html new file mode 100644 index 0000000..4880110 --- /dev/null +++ b/doc/doc_files/getactorbonerotation.html @@ -0,0 +1,21 @@ + + + + + ++ Gets an actor's bone rotation +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactorbonescale.html b/doc/doc_files/getactorbonescale.html new file mode 100644 index 0000000..cc42a80 --- /dev/null +++ b/doc/doc_files/getactorbonescale.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the scale transform for an actor's bone +
++ NOTE: This is only for actors that use skeletal animation (ie. *.b3d, *.x, *.ms3d, and actors created from Anim8or files) +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getactortype.html b/doc/doc_files/getactortype.html new file mode 100644 index 0000000..10779b1 --- /dev/null +++ b/doc/doc_files/getactortype.html @@ -0,0 +1,62 @@ + + + + + ++ Returns an actor's type +
++ Actor Types +
++ NOTE: Cube and Sphere actors both return ACTOR_TYPE_PRIMITIVE +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getbillboardsize.html b/doc/doc_files/getbillboardsize.html new file mode 100644 index 0000000..6c70f75 --- /dev/null +++ b/doc/doc_files/getbillboardsize.html @@ -0,0 +1,18 @@ + + + + + ++ Gets the width and height of a billboard. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getcompositeaabb.html b/doc/doc_files/getcompositeaabb.html new file mode 100644 index 0000000..dbde9d7 --- /dev/null +++ b/doc/doc_files/getcompositeaabb.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the bounding box of a composite actor +
++ t_matrix will store the transform for the bounding box +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getcompositechild.html b/doc/doc_files/getcompositechild.html new file mode 100644 index 0000000..e2d288c --- /dev/null +++ b/doc/doc_files/getcompositechild.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the actor stored as the child actor at a given index in a composite actor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getcompositechildcount.html b/doc/doc_files/getcompositechildcount.html new file mode 100644 index 0000000..afaef77 --- /dev/null +++ b/doc/doc_files/getcompositechildcount.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the number of child actors in a composite actor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getcompositechildindex.html b/doc/doc_files/getcompositechildindex.html new file mode 100644 index 0000000..4647744 --- /dev/null +++ b/doc/doc_files/getcompositechildindex.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the index an actor is stored at in a composite actor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getcompositechildtransform.html b/doc/doc_files/getcompositechildtransform.html new file mode 100644 index 0000000..0102850 --- /dev/null +++ b/doc/doc_files/getcompositechildtransform.html @@ -0,0 +1,18 @@ + + + + + ++ Stores the transform from composite actor to the child index shape in t_matrix +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getcompositeupdaterevision.html b/doc/doc_files/getcompositeupdaterevision.html new file mode 100644 index 0000000..2b40c22 --- /dev/null +++ b/doc/doc_files/getcompositeupdaterevision.html @@ -0,0 +1,18 @@ + + + + + ++ Returns a counter that increments when the composite actor shape is modifed +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/gethorizontalangle.html b/doc/doc_files/gethorizontalangle.html new file mode 100644 index 0000000..7c22a2f --- /dev/null +++ b/doc/doc_files/gethorizontalangle.html @@ -0,0 +1,18 @@ + + + + + ++ Get the rotation vector that would make a (0,0,1) direction vector point in the same direction as the given direction vector +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getlineangle.html b/doc/doc_files/getlineangle.html new file mode 100644 index 0000000..27bad07 --- /dev/null +++ b/doc/doc_files/getlineangle.html @@ -0,0 +1,18 @@ + + + + + ++ Gets an angle between 2 points +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getmeshbuffer.html b/doc/doc_files/getmeshbuffer.html new file mode 100644 index 0000000..68e619a --- /dev/null +++ b/doc/doc_files/getmeshbuffer.html @@ -0,0 +1,21 @@ + + + + + ++ Gets the data in a mesh buffer. +
++ Returns TRUE if successful and FALSE if not. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getmeshbuffercount.html b/doc/doc_files/getmeshbuffercount.html new file mode 100644 index 0000000..fc5c260 --- /dev/null +++ b/doc/doc_files/getmeshbuffercount.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the number of mesh buffers in a mesh. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getmeshbufferindexcount.html b/doc/doc_files/getmeshbufferindexcount.html new file mode 100644 index 0000000..1af6c5d --- /dev/null +++ b/doc/doc_files/getmeshbufferindexcount.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the number of indices in a mesh buffer +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getmeshbuffervertexcount.html b/doc/doc_files/getmeshbuffervertexcount.html new file mode 100644 index 0000000..6415bea --- /dev/null +++ b/doc/doc_files/getmeshbuffervertexcount.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the number of vertices in a mesh buffer. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getmeshpolygoncount.html b/doc/doc_files/getmeshpolygoncount.html new file mode 100644 index 0000000..bf6741a --- /dev/null +++ b/doc/doc_files/getmeshpolygoncount.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the number of polygons in a mesh +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getphysics3d.html b/doc/doc_files/getphysics3d.html new file mode 100644 index 0000000..62d087c --- /dev/null +++ b/doc/doc_files/getphysics3d.html @@ -0,0 +1,24 @@ + + + + + ++ Return if the physics engine is enabled +
++ NOTE: While the physics engine is disabled, actor collisions won't be able to be checked. +
+Related: + SetPhysics3D +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getposteffectproperty.html b/doc/doc_files/getposteffectproperty.html new file mode 100644 index 0000000..6737d7a --- /dev/null +++ b/doc/doc_files/getposteffectproperty.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the value of the property on the current canvas post effect. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getposteffecttype.html b/doc/doc_files/getposteffecttype.html new file mode 100644 index 0000000..1e51454 --- /dev/null +++ b/doc/doc_files/getposteffecttype.html @@ -0,0 +1,44 @@ + + + + + ++ Returns the type of post effect set on the given canvas. +
++ Possible Effect Types +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getprojectoreffectactor.html b/doc/doc_files/getprojectoreffectactor.html new file mode 100644 index 0000000..f823da1 --- /dev/null +++ b/doc/doc_files/getprojectoreffectactor.html @@ -0,0 +1,24 @@ + + + + + ++ Returns the effect actor at tgt_index in a projector +
++ Refer to the included Projector Demo for an example +
+Related: + AddProjectorEffectActor +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getprojectoreffectactorcount.html b/doc/doc_files/getprojectoreffectactorcount.html new file mode 100644 index 0000000..c8490bb --- /dev/null +++ b/doc/doc_files/getprojectoreffectactorcount.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the number of effect actors on a projector +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getprojectortexture.html b/doc/doc_files/getprojectortexture.html new file mode 100644 index 0000000..702c794 --- /dev/null +++ b/doc/doc_files/getprojectortexture.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the image currently being projected by the projector +
+Related: + SetProjectorTexture +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getrotationtotarget.html b/doc/doc_files/getrotationtotarget.html new file mode 100644 index 0000000..cba75fd --- /dev/null +++ b/doc/doc_files/getrotationtotarget.html @@ -0,0 +1,18 @@ + + + + + ++ Gets a rotation vector to a target from an origin point +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getspriteanimationsource.html b/doc/doc_files/getspriteanimationsource.html new file mode 100644 index 0000000..658a666 --- /dev/null +++ b/doc/doc_files/getspriteanimationsource.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the image associated with the given sprite animation. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getspritechildindex.html b/doc/doc_files/getspritechildindex.html new file mode 100644 index 0000000..093dc5f --- /dev/null +++ b/doc/doc_files/getspritechildindex.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the index a child_sprite is stored at in a parent sprite +
++ Returns -1 if child_sprite is not a child of sprite +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getspriteworldcenter.html b/doc/doc_files/getspriteworldcenter.html new file mode 100644 index 0000000..2d63cfd --- /dev/null +++ b/doc/doc_files/getspriteworldcenter.html @@ -0,0 +1,18 @@ + + + + + ++ Gets the center of a sprite's shape as world coordinates. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getvehicleaxis.html b/doc/doc_files/getvehicleaxis.html new file mode 100644 index 0000000..4767e5b --- /dev/null +++ b/doc/doc_files/getvehicleaxis.html @@ -0,0 +1,29 @@ + + + + + ++ Gets the axis used to define a vehicles orientation. +
+| Direction | Axis | Meaning |
|---|---|---|
| X | Right Axis | Wheel axle direction |
| Y | Up Axis | Suspension direction |
| Z | Forward Axis | Driving direction |
Related: + SetWheelAxel + SetSuspensionLength + SetWheelDirection +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getvehiclechassisworldtransform.html b/doc/doc_files/getvehiclechassisworldtransform.html new file mode 100644 index 0000000..da4c808 --- /dev/null +++ b/doc/doc_files/getvehiclechassisworldtransform.html @@ -0,0 +1,18 @@ + + + + + ++ Stores the world transform of the chassis actor in a vehicle +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getvehiclecurrentspeed.html b/doc/doc_files/getvehiclecurrentspeed.html new file mode 100644 index 0000000..55eaacf --- /dev/null +++ b/doc/doc_files/getvehiclecurrentspeed.html @@ -0,0 +1,18 @@ + + + + + ++ Returns the current speed set on the vehicle +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getvehicleforwardvector.html b/doc/doc_files/getvehicleforwardvector.html new file mode 100644 index 0000000..9d90487 --- /dev/null +++ b/doc/doc_files/getvehicleforwardvector.html @@ -0,0 +1,18 @@ + + + + + ++ Gets the forward vector of a vehicle +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getvehiclepitchcontrol.html b/doc/doc_files/getvehiclepitchcontrol.html new file mode 100644 index 0000000..28e9658 --- /dev/null +++ b/doc/doc_files/getvehiclepitchcontrol.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the pitch control for a vehicle +
+Related: + SetVehiclePitchControl +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelactoroffsettransform.html b/doc/doc_files/getwheelactoroffsettransform.html new file mode 100644 index 0000000..af6f253 --- /dev/null +++ b/doc/doc_files/getwheelactoroffsettransform.html @@ -0,0 +1,27 @@ + + + + + ++ Stores the local offset transform for the wheel actor in t_matrix. +
++ This is mainly for when the actors local transform does not line up with the axis for the vehicle. +
++ Refer to the Vehicle demo to see an example of this. +
+Related: + SetWheelActorOffsetTransform +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelaxel.html b/doc/doc_files/getwheelaxel.html new file mode 100644 index 0000000..9a787d6 --- /dev/null +++ b/doc/doc_files/getwheelaxel.html @@ -0,0 +1,21 @@ + + + + + ++ Get the axel direction of a wheel on a vehicle +
+Related: + SetWheelAxel +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelbrake.html b/doc/doc_files/getwheelbrake.html new file mode 100644 index 0000000..de6c81c --- /dev/null +++ b/doc/doc_files/getwheelbrake.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the brake value of a wheel on a vehicle +
+Related: + SetWheelBrake +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelconnectionpoint.html b/doc/doc_files/getwheelconnectionpoint.html new file mode 100644 index 0000000..4d2f545 --- /dev/null +++ b/doc/doc_files/getwheelconnectionpoint.html @@ -0,0 +1,21 @@ + + + + + ++ Gets the point in local space that a wheel is connected to a vehicle at +
+Related: + SetWheelConnectionPoint +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelcount.html b/doc/doc_files/getwheelcount.html new file mode 100644 index 0000000..d29cd7f --- /dev/null +++ b/doc/doc_files/getwheelcount.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the number of wheels on a vehicle +
+Related: + AddVehicleWheel +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheeldampingcompression.html b/doc/doc_files/getwheeldampingcompression.html new file mode 100644 index 0000000..a4652c6 --- /dev/null +++ b/doc/doc_files/getwheeldampingcompression.html @@ -0,0 +1,22 @@ + + + + + ++ Returns the damping compression of a wheel +
+Related: + GetWheelDampingRelaxation + SetWheelDampingCompression +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheeldampingrelaxation.html b/doc/doc_files/getwheeldampingrelaxation.html new file mode 100644 index 0000000..1c3489f --- /dev/null +++ b/doc/doc_files/getwheeldampingrelaxation.html @@ -0,0 +1,22 @@ + + + + + ++ Returns the damping relaxation of a wheel +
+Related: + GetWheelDampingCompression + SetWheelDampingRelaxation +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheeldirection.html b/doc/doc_files/getwheeldirection.html new file mode 100644 index 0000000..87218a2 --- /dev/null +++ b/doc/doc_files/getwheeldirection.html @@ -0,0 +1,18 @@ + + + + + ++ Gets the direction of a wheel on a vehicle +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelengineforce.html b/doc/doc_files/getwheelengineforce.html new file mode 100644 index 0000000..1ece551 --- /dev/null +++ b/doc/doc_files/getwheelengineforce.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the engine force currently applied to a wheel +
+Related: + SetWheelEngineForce +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelfrictionslip.html b/doc/doc_files/getwheelfrictionslip.html new file mode 100644 index 0000000..aa0f0df --- /dev/null +++ b/doc/doc_files/getwheelfrictionslip.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the friction slip of a wheel +
+Related: + SetWheelFrictionSlip +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelinversecontactsuspension.html b/doc/doc_files/getwheelinversecontactsuspension.html new file mode 100644 index 0000000..6daa3b0 --- /dev/null +++ b/doc/doc_files/getwheelinversecontactsuspension.html @@ -0,0 +1,27 @@ + + + + + ++ Returns the clipped inverse contact dot suspension. +
++ This value is a stability factor used to adjust suspension force when the ground contact surface is tilted. +
++ It prevents suspension forces from exploding when the wheel contacts steep surfaces. +
+Related: + SetWheelInverseContactSuspension +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelmaxsuspensiontravel.html b/doc/doc_files/getwheelmaxsuspensiontravel.html new file mode 100644 index 0000000..51e1082 --- /dev/null +++ b/doc/doc_files/getwheelmaxsuspensiontravel.html @@ -0,0 +1,24 @@ + + + + + ++ Returns the max suspension travel distance. +
++ This value is the maximum distance the suspension is allowed to extend or compress from its rest length set with SetSuspensionLength(). +
+Related: + SetWheelMaxSuspension +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelradius.html b/doc/doc_files/getwheelradius.html new file mode 100644 index 0000000..f7a2932 --- /dev/null +++ b/doc/doc_files/getwheelradius.html @@ -0,0 +1,21 @@ + + + + + ++ You will never guess what this returns +
+Related: + SetWheelRadius +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelrollinfluence.html b/doc/doc_files/getwheelrollinfluence.html new file mode 100644 index 0000000..1a41e8e --- /dev/null +++ b/doc/doc_files/getwheelrollinfluence.html @@ -0,0 +1,27 @@ + + + + + ++ Returns the roll_influence for a wheel. +
++ Roll influence controls how much a wheel’s suspension force contributes to the vehicle’s body roll (sideways tipping). +
++ It’s essentially a stability scaling factor. +
+Related: + SetWheelRollInfluence +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelrotation.html b/doc/doc_files/getwheelrotation.html new file mode 100644 index 0000000..6a431d9 --- /dev/null +++ b/doc/doc_files/getwheelrotation.html @@ -0,0 +1,21 @@ + + + + + ++ Returns a wheel's spin rotation. +
+Related: + SetWheelRotation +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelrotationdelta.html b/doc/doc_files/getwheelrotationdelta.html new file mode 100644 index 0000000..fc348c9 --- /dev/null +++ b/doc/doc_files/getwheelrotationdelta.html @@ -0,0 +1,21 @@ + + + + + ++ Returns how much the wheels spin angle changed since the last frame. +
+Related: + SetWheelRotationDelta +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelsteeringvalue.html b/doc/doc_files/getwheelsteeringvalue.html new file mode 100644 index 0000000..bf2901c --- /dev/null +++ b/doc/doc_files/getwheelsteeringvalue.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the steering value for a wheel +
+Related: + SetWheelSteeringValue +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelsuspensionlength.html b/doc/doc_files/getwheelsuspensionlength.html new file mode 100644 index 0000000..7e6cdc9 --- /dev/null +++ b/doc/doc_files/getwheelsuspensionlength.html @@ -0,0 +1,21 @@ + + + + + ++ Returns the suspsension rest length of a wheel +
+Related: + SetWheelSuspensionLength +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelsuspensionstiffness.html b/doc/doc_files/getwheelsuspensionstiffness.html new file mode 100644 index 0000000..9f2ac2a --- /dev/null +++ b/doc/doc_files/getwheelsuspensionstiffness.html @@ -0,0 +1,29 @@ + + + + + ++ Returns the suspension stiffness of a wheel. +
+Related: + SetWheelSuspensionStiffness +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelsuspensionvelocity.html b/doc/doc_files/getwheelsuspensionvelocity.html new file mode 100644 index 0000000..129e2bd --- /dev/null +++ b/doc/doc_files/getwheelsuspensionvelocity.html @@ -0,0 +1,24 @@ + + + + + ++ Returns the suspension velocity. +
++ This value is the speed that the suspension compresses or extends at. +
+Related: + SetWheelSuspensionVelocity +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/getwheelworldtransform.html b/doc/doc_files/getwheelworldtransform.html new file mode 100644 index 0000000..1f27e96 --- /dev/null +++ b/doc/doc_files/getwheelworldtransform.html @@ -0,0 +1,24 @@ + + + + + ++ Returns the world transform of a wheel on a vehicle. +
++ NOTE: This will not be the world tranform of the actor if an offset transform has been set. In that case you will need to multiply the offset by the world transform. +
+Related: + SetWheelWorldTransform +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/graphics2.html b/doc/doc_files/graphics2.html new file mode 100644 index 0000000..0dccc58 --- /dev/null +++ b/doc/doc_files/graphics2.html @@ -0,0 +1,170 @@ + + + + + ++ The last section was a basic overview of graphics so in this section, I am going to go more indepth on sprites. In RCBasic, sprites are 2D objects with animation and physics properties. Sprite physics and animations are updated each time Update() is called. +
++ To create a sprite, you must have a sprite canvas as your active canvas. Here is a quick explanation of how to open a new sprite canvas. +
+
+ pos_x = 0
+ pos_y = 0
+ viewport_width = 640
+ viewport_height = 480
+
+ sprite_canvas = OpenCanvasSpriteLayer(pos_x, pos_y, viewport_width, viewport_height)
+
+ Sprite canvases are opened with OpenCanvasSpriteLayer(). You only need to pass the position in the window where the viewport starts at and the size of the viewport. Sprite canvases don't have a fixed size since it only renders the part of the canvas that is visible. +
++ Once you have opened a sprite canvas, use the Canvas() function to set the sprite canvas as active. +
+
+ Canvas(sprite_canvas)
+
+ Now you are ready to create a sprite. To create a sprite, normally you would need a sprite sheet. The sprite sheet is a image file that contains all the animations for your sprite. +
+
+ spriteSheet = LoadImage("graizor.png")
+
+ frame_width = 32
+ frame_height = 32
+
+ mySprite = CreateSprite(spriteSheet, frame_width, frame_height)
+
+ Sprites are created with the CreateSprite() function. Sprites have a default animation that is 1 frame in length and set as the first frame in the sprite sheet. The frames in a sprite sheet start at 0 and increase going from left to right and continue incrementing down each row. So if each row as 4 frames then the first row would have frames 0 to 3 and the second row would start at 4 and continue until the end of the last row. +
+![]()
+ To animate our sprite, we have to create an animation for it. You can create an animation with the CreateSpriteAnimation() function. +
+
+ walk_left_animation = CreateSpriteAnimation(mySprite, 4, 12)
+ SetSpriteAnimationFrame(mySprite, walk_left_animation, 0, 28)
+ SetSpriteAnimationFrame(mySprite, walk_left_animation, 1, 29)
+ SetSpriteAnimationFrame(mySprite, walk_left_animation, 2, 30)
+ SetSpriteAnimationFrame(mySprite, walk_left_animation, 3, 31)
+
+ CreateSpriteAnimation() takes 3 parameters +
++ SetSpriteAnimationFrame() takes 4 parameters +
++ Now to play the animation, we just set the animation on the sprite. +
+
+ SetSpriteAnimation(mySprite, walk_left_animation, -1)
+
+ SetSpriteAnimation() takes the sprite, the animation, and the last parameter is the number of times to loop the animation. Setting it to a value less than 0 will cause it to loop infinitely. +
++ Thats the basics of sprite animation. Next lets go over sprite physics. By default, a sprite is non-solid which means it won't collide with anything. To change our sprite to solid, we just call the SetSpriteSolid() function. +
+
+ SetSpriteSolid(mySprite, TRUE)
+
+ To have the sprite fall, we need to set gravity for our sprite canvas. We do that with SetGravity2D(). +
+
+ SetGravity2D(0, 30)
+
+ SetGravity2D() takes an x and y value for the direction gravity pulls in. We just want gravity pulling down on our sprite. This would have our sprite falling forever since there is no ground for the sprite to collide with. So we need to create another sprite for the ground. +
+
+ ground = CreateSprite(-1, 640, 100)
+ SetSpriteSolid(ground, TRUE)
+ SetSpritePosition(ground, 0, 380)
+ SetSpriteType(ground, SPRITE_TYPE_STATIC)
+
+ There is a few things to go over with how the ground was created. First, we use -1 instead of an image for the ground. If you use a value less than 0 when creating a sprite, it will just create a physics object without any animation. This works well for a ground since we can draw an image on a paint canvas or draw a tile map. +
++ On the next 2 lines we are setting the ground as solid and setting the grounds position to the bottom of our screen. +
++ The last line is setting the ground sprite as static. This sets the ground as an unmovable object. +
++ Since the ground does not have an image associated with it, we can just open a paint canvas over the sprite layer and draw a rectangle covering the area where our ground physics object is. +
+
+ paint_canvas = OpenCanvas(640, 480, 0, 0, 640, 480, 1)
+ SetCanvasZ(paint_canvas, 1)
+
+ We use OpenCanvas() from the last section to open a paint canvas here. Setting the last parameter in OpenCanvas() to 1 will make the canvas background clear so we can see the sprite canvas behind it. +
++ SetCanvasZ() changes the render order for the canvas. Canvases with a higher Z order are drawn on top of canvases with lower Z order. Now we can switch to the paint canvas to draw a rectangle using the functions from the last section. +
+
+ SetColor( RGB(200, 0, 0) ) 'Sets the drawing color to red
+ RectFill(0, 380, 640, 100) 'Draws a filled rectangle with the current draw color
+
+ We are drawing our rectangle at the location where we positioned our ground sprite above with the size that we made our ground sprite object. That will make our sprite ground visible for us to land on. +
++ The last thing we will do is make our sprite move when we press a key. +
+
+ If Key(K_RIGHT) Then
+ SetSpriteLinearVelocity(mySprite, 30, 0)
+ End If
+
+ Key() returns true if the key code parameter is pressed. You can see a list of all the key codes in the Key Codes section in the Appendix. +
++ We use SetSpriteLinearVelocity() to move the sprite instead of SetSpritePosition() because we don't want to directly move a sprite that we want physics to be applied to. There are a few functions for applying forces to a sprite that you can find under the Sprite Physics section in the manual. +
++ And that is it for our simple overview of sprites. To see a full working example of the concepts covered here, try out the Sprite Test example in the examples folder. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/graphics3.html b/doc/doc_files/graphics3.html new file mode 100644 index 0000000..502db35 --- /dev/null +++ b/doc/doc_files/graphics3.html @@ -0,0 +1,180 @@ + + + + + ++ This last section will cover how 3D graphics work in RCBasic. We can render the scene with a 3D canvas which is opened with OpenCanvas3D() +
+
+ viewport_width = 640
+ viewport_height = 480
+ scene_canvas = OpenCanvas3D(0, 0, viewport_width, viewport_height, 1)
+
+ OpenCanvas3D takes some of the same parameters as OpenCanvas. It will open a canvas to view the 3D scene. You can open multiple 3D canvases to view the 3D scene from different camera angles but there is only one 3D scene. +
++ Next, lets go over actors. Actors are objects in our 3D scene and similiar to what sprites are on a sprite canvas. There are different types of actors that we can create and each one serves a different purpose. For now lets just create an animated actor. +
+
+ hero_mesh = LoadMesh("char.ms3d") ' Load a 3D model from a file
+ hero = CreateAnimatedActor(hero_mesh) ' Create an animated object in our scene from the 3D model
+
+ We use LoadMesh() to load a 3D model into our program. If we want to make multiple actors in our scene from this 3D model, we only need to load the model once. +
++ After we load the model, we use CreateAnimatedActor() to create an object in our scene using the 3D model. Animated actors function like 3D version of sprites since they have animation and physics. Adding animation to our animated actor is a similiar process to adding animation to our sprite from the last section. +
+
+ RUN_ANIMATION = CreateActorAnimation(hero, 13, 36, 30)
+
+ CreateActorAnimation() takes 4 parameters. +
++ Now that we have an animation, we can set the actor's animation in the same way we set the sprite's animation in the last section. +
+
+ SetActorAnimation(hero, RUN_ANIMATION, -1)
+
+ SetActorAnimation() works the same way that SetSpriteAnimation() does. It takes the actor, the animation, and number of animation loops. We can set it to a value less than 0 to loop infinitely just like we did with our sprite in the last section. +
++ Currently, the actor will not have any color. We need to add a texture to the actor. We will also disable lighting for the actor for now so that it just renders with the texture applied. +
+
+ hero_material = GetActorMaterial(hero, 0)
+
+ SetMaterialLighting(hero_material, FALSE)
+
+ hero_texture = LoadImage("hero.png")
+ SetMaterialTexture(hero_material, 0, hero_texture)
+
+ First, we get a reference to our actors material with GetActorMaterial(). We use this reference to set properties for the actor's material. The material determines how the actor is rendered. +
++ Next, we disable lighting for the material. This means that lighting will not determine how light or dark the texture will be rendered at. +
++ Finally, we load an image and set it to the first texture slot on the material with SetMaterialTexture(). +
++ This now puts our actor in our scene with our texture applied. But just like in the sprite section, our actor needs to have physics applied to it. So lets make the actor solid and set our scene gravity. +
+
+ SetActorSolid(cube, TRUE)
+ SetGravity3D(0, -10, 0)
+
+ SetActorSolid() functions just like SetSpriteSolid() does. SetGravity3D() is like SetGravity2D() but it adds a 3rd dimension to it. +
++ Now we need a ground plane. Lets create a plane mesh and then create an octree actor from it to serve as our ground. Octree actors are actors with meshes that have optimizations for large scenes. +
+
+ plane_mesh = CreatePlaneMesh(1000, 1000, 100, 100, 100, 100)
+ plane = CreateOctreeActor(plane_mesh)
+
+ CreatePlaneMesh() is used to create a plane mesh rather than use LoadMesh() to load it from an external file like we did earlier. +
++ CreateOctreeActor() will create an octree actor rather than an animated actor. +
++ Next we will set a solid color material for our plane rather than load another texture. +
+
+ plane_material = CreateMaterial()
+ SetMaterialType(plane_material, FX_MATERIAL_TYPE_PLASTIC)
+ SetActorMaterial(plane, 0, plane_material)
+
+ We are using an FX material here which is a special type of material with separate properties from a normal material. This time we had to use CreateMaterial() to make a new material. To make FX materials, you must create a new material since you can not set any of the FX material types on a material attached to an actor. +
++ Then we just set our material type with SetMaterialType() and set the material on the actor with SetActorMaterial(). +
++ Now lets set our physics properties for our plane. +
+
+ SetActorSolid(plane, TRUE)
+ SetActorShape(plane, ACTOR_SHAPE_TRIMESH, 0)
+
+ Yet again, we are using SetActorSolid() to set our actor solid. We use SetActorShape() to change the shape of the plane to ACTOR_SHAPE_TRIMESH. By default, actors shapes are ACTOR_SHAPE_BOX. Boxes are fine for our actor's hit box but we want a shape with more geometry for our ground usually. +
++ Just like what we did with our sprites in the last lesson, lets have the actor move when a key is pressed. +
+
+ If Key(K_RIGHT) Then
+ SetActorLinearVelocityLocal(hero, 0, 0, 20)
+ End If
+
+ This looks very similiar to our code for moving the sprite in the last lesson. SetActorLinearVelocityLocal() has a little bit longer name. It has a companion function called SetActorLinearVelocityWorld() which applies a transform based on world instead of local space. +
++ Before moving on, I want to quickly explain the difference between local transforms and world transforms. +
++ Before ending this lesson, lets do a quick overview of how to set the camera. Each 3D canvas has its own camera. To set the camera for a 3D canvas you must make sure you set the 3D canvas active with Canvas(). +
+
+ Canvas(scene_canvas)
+
+ SetCameraPosition(0, 30, -100) 'Set the camera position
+ SetCameraRotation(20, 0, 0) 'Set the camera rotation
+
+ SetCameraPosition() and SetCameraRotation() do exactly what you think they do. There are also other functions to set camera FOV(field of view), aspect ratio, etc. Look in the camera section for more info. +
++ Refer to the Intro to 3D demo for the complete code for this lesson. +
++ RCBasic has several functions for graphics, physics, etc., so if you can't find it in the manual then feel free to ask a question on the forum. +
++
+ + + \ No newline at end of file diff --git a/doc/doc_files/images/banner.png b/doc/doc_files/images/banner.png new file mode 100755 index 0000000000000000000000000000000000000000..c19dea3d0fde2d5cdc04033423ea5a1d97464ebc GIT binary patch literal 24968 zcmYIu1yCK)vMuiJ?(P~K4t@ykZowhAySoH;cXxLS?hssqyB{2W?ydLUuiAU|)YMe( z>7F&Kx_eEel7cic0s#UT7#Ok)P(lR^41Dq5xhWjXzvGtF`qIAz-T|oX3=w3taw07AVPauFOR%CZ=PF7ytc z_A|?%jRdf;$Ms{RGmy#p9&79!|4AOi$<@OETSAooZ_U3Oxy81qngjEqpRa6a{MVe*^Wb#Wu>cf47GK-BUzdtGccdJoSu5^D% z); Yomx;BJ>!oRI&Zyg1tC8Qeba|C+R^?SPR#*Ckt2^!ba~{f}aLjzsJ> zc{^-3T7~Cx1wA?B<>g`ZTccSzfx=(!_pq`@MPj{osA_p{?GIZ>20jPqo}aEO`B28L zU<#*aA357-YP+Z_Lt}gY7|y{SYAf*S4}#?<+EpJSibtG{f)J^~8v_?>aOyPM9>w{y zoQq&g4)lfrWTo+{XZ#!hHQ1`MJP?g}Heeaubl430XP=1Z1tcC{RoDmXC|e7fNgeUf z$VOY^{(MfYAmpK_l>ZeK0V`jET2`Q3Xk*|NxAdI%=yfR$1hd#rY0NI1uWEl+>~|va z$2u;QYvV=GHtu?KqnyPz#rQRDOu}XNCwb7aJuAtUzfBRZUtD8q$;Aibv3Q=qn1SH> zP7|9di~Sg`xBs*Of!s0M>fsry`8U$Ta_D0c3=g4xs`_WNX2lsT>anYuV4FTh!#AwK zBKr^RPsPjGdUxZ?w5!9n>^?gtzsCgqDXKT7eU0_sp>pwqw{bb!pXOybOf(05{)@NX z9p$?nm^^b!OT(m}H?W@ju{ tw^6zepupW9HEGh6}e7l6dzJM_rdc{6Vh& z ct4&_8B7;qg%7Hq zYo^e>?u8blTqKB;3J{dml42?lb3Krqt%JQ51+L7NQv7i}3^G@L*u9`qR9yxs#g_62 zMN6w?=5C^`;WVUIzf` 98?bia&b#9zKJ3Y#xDZ z)J4*d^ m3{|&<(7LXA0=wW6*|fWdMa4 nZt%c_=3aBVZ)seD+oy;mp844xYwX0K5Xy?Hj{+pyyUUC=;u+rB| z(;I21;tw$-@(#buaENh3{y-MU2TE4$Mn9re-aK8%Q}2c>8XpqYuRAv+8G}JgglX5p zm7=Ii4`hi1r}7vtNh*0aV&`eXO2BpU^w0FAU%cAHP=3m=Su0?BxyQ4wNGc_>MQ$N@ z=gq2@&a $^cqs&nRsehx0N)Ipc-$&z5T;w4+b_iL0ljlwoJ z+hD3SywkahOgHF)oy^{6z51k!Z++12sE6wpUtT8VzYs@JSl99XE4*yO)o@}xB-TfN zaiq{M!sZa=OjQQG`~C)+()wkXIODVaR5ZiMH=!BSAod;v@NG=^g6u3oTibJ-)?D27 zy4>ChM!U(U_x3|Cv_s13pR@9qNXX`X;BG&|dg2(vM{~haD9I}zMP)O>s>X;;e|kcD zxrw!d!v(;}{MD7`-)YJ|Ze~FP2al3qR*laj hFsa+_Iz@MWX9o z8~NtDng09zq9Y66%e0{_?p47y@?{bGOamQco@9vVF|B@Gy!ZDx`^dUFtrVTKgz@fS zqM)-B*uH*pmJa&VistSOOdMPhh@afOC8hQ#vf}8ik{OGNda2&mE~Z|8)9Pw2W_#9> zGSsPQRZm;F-}+~jq-V?L1F-8q-_hP_cs!K)ZXXC8#37T_kJkj`2ge*8W{5nF6gBkz zb*tyt;8$=GF#=4>4#yGMPHh~f`gGAdV#&}{PPX$K_ugRMQt^PQ6w}SvCP7@()?f^! z8fbQKNt-sz!YeuRV`H+kMl?wAFKQ{Sa+5$BB?+_;+8lax>xc=*<42hc1Xn6Cq@iR- zsn|1?vz)@@({tRu1MJCduF_wXguG0IWPV{f9k0 $oS+mM5#Ci7LI?Jy2}WqbFp&=8)J%{ z^Qae%=Xs{*Z|5!4DG$@Q=ClX^e{094PrQM(_kCvH%L3nJ0$)ZbpCVEo*M$(VBXHu6 zVK!)th+f~Ut%l+acWgO+OqUdLbk?GT(K5hf^X@AAF(r?cwNvJsyIs=?CTEFXRLYdc zL6a~e^4hX1i;yg?Vy?TM*j0nz042Ra#(l|H2qd!L>*bgE@2Jll&$n{+{RBRY# S6V)Z_rP)Sq8#u^`lf4Iyc{QPEzs;;&Rzd61cg?v;_V@C?F5) zyt&I3uzub_#E_!8BBxTHhF0h fuYRpCo0 >1s*HC^e44Z*fk;_;ZxL8ZW;l5>Xn&k?5 zQVLW(Lw$^jN{BFTwdIg|pe$@bZzGPU(?WT=%`1SV%mw8>G97#ULN*iQL-{5G>P^31 z@5mbMZC*2B6{Nmiy`>t1tNr#=l);nt5Qv-C?W;k!m6zjsrrNjNot@Uuw#)!0i60+5 zB!Zx&5MlZXU);x^I=v-*a5o=mYIr5&Y3%p2eVw24w_E6(pq}ID#oCV*&$7wNHqCt5 zXT7z4hQ*vW<2CDaPlHdk;4qXux)>pnN #lh6(rp|3-`KQ4nT2Y>U zq<~=wWa`s3GB^zcl^Pmm#nEz+rbK`wR8y=RZ8TR{g@`w=`si}vx?#V!CPY-w_L}$x zgU!pg1`FDTOG5ZRMDUs7<#Lz>P!)I| 4yDxbKk1Q27gWj-GGZG+O>jU^k1eRwrX>S z5Ns&f>(! g;&;U=7tuIcJgmW|DAO<9rg zkt)}FtI6g?zLn1(rJT6HbGlgKtQApNbH6r(Zl2tOi&?|L#?jop-nXly6+{1zIcz%8 z^hjW*U87rP#;j^9U_84qQ)v6L{2-gL=x$C%qOmE(h1ep+!s}ABH04Yw7alio*=khv zaYnb8Edw(!3pV{zm35$D(deBD_`+QVk@HsI#ha`dXa#5|GKH@8MB9EwerVRRqRtN^ z*FuhJo=N{6;(F_WC4qMmBozGvicvS?;R8mjt-;^+fByw|G* (Q44Zh-em6M z?eEIKDPgI=>R9Q1d;{~UPFhxH<$PT*Vf#x`MqYqXDbia0(nXLRLNW4V0&kR9^ZjLs zf;gUHZ64Y}5$G>6JQRfQt|w$nS){i(g~iUyy`S*^0;(WY-@K0n=>gYiiVRVh84pQE zTX@ZE&&+*r`H4F6_b?*U|7Da@aagc$q5Rc{%N=EP$e_zIvCSusTsmbnqu6EkRi~K+ zxMov+cLS1*L~XxrW(sI)W?cD=I`d@YUly@s$YWJyc-CyhmDa%$A%-R46!FnThlr zY_1z7WL6eD?UR>IJXe{zAqw(wIAPxjpWui`Omv`LfhCQwMZ$^{ycLJF2kDfg>G0(9 z@YNC4ou#@@y-CvwxS#}~tQJ041#dh6n_q>LLvNLhg6 -n(+i0b zEGInd6cYRYQIK>nd E8(RKNZ2WBFiwK$y?2zhnEkkqI~EPduK(*nZd*_%Epl2tl`S`ITFaad}?rPrML z#lc9g{OpuE?QJFy&Q+9 ?C47GCg7elQagT~L%M;|Slo16Pc{-ej$S6|Izk3BY2 z<);`7wLUl0WPU)g;f62Ek@FwM2uO@{3|$!nC2aleP~ia3CZHYIXTqi!Z0dro-LSg{ zI(o5SqY=32CKz|L<%w&AvN3yub+GhN2-LxbB~UX7j=2&J?1B})gVuBxENg_a(N |S&i0T*tv5TKmWxq7&~bSfnX3t4G;(h zQ3C pLq-;9Z*nWS&xQk zIr^vp7#@USVUQuvLogj^lh9#8r?f6UY15!3277woKsR)zpeqiY-PXS+pMa~s3bmu$ z&PW1lpY;8gfdCwH8H_m<8p~npimWn??S`>e!cjLsyvvHuD}@RK*z!Ar))m&Ar+jjd zQJ<@z_OvJ!6Dx`DFxhtRPR7q2OYO0&H7O@5y9ca*=98_g`)%X6BwVmn1e|CADb(Ut*8814Z zDC}Q&Cwq5n<=uDR^&<;dGA^C6kf;7#_3mseXA+Na=d6(X3%~1yoV=Z7bBqagn&!NH z?$ cz!27@8J6{} zsX{mkbuo*{nlTV@$b{e|aKeOEVIAI`2GS<9nqa7qOy=AEWHT`OBG~x6WsIb%7ISUa zLH8~7#;alQWGn8kjwJwR2yyV2xwU7b%|x^dB4sLC6J$?j$uwn1H);&Jx&ou!0L9Nt z1!^=*`fw{pUMwDf!PL{Vyz>gB!!N^V_wIQrN|<=fCA2lH%6l&qoj^1`6I0JHZE7 JAvEqZDEjAB~W0q~q?sjhk(Oi0U$nDx6NzWrv>qH9y=DRDf$pGmSHN z0E9EtCEDEdrI|wr*)r8X8_@CSwPB``{!J{mFpgDeE?wWuD03od!_TG5_p_TWQZf<) z@z71K&p4LEiZr?9PLAmq>$aW1bPQl*;l?Fd qQE=84E+7vn^- -zj-q#X!qoirlj%M z3phCQYDVnc=FiPtsd2u`&7C!@zzJC$48>ZqRiaRygtDl0M4F??8ZqnlcAF{7?wz_0 zwZq|4SHg=wg|!dBs8^tAAME)fgiD}u3^Z+l_nrYY36xrS5;e&*YJB)oPD^ato8{eq z{*a@uX|(UtX 3i>t5OqG;~;3>Bik;S`MSCRk@p{ z2}+bi-KPsO(?s<@AcznS8_cY4 fVEC2U2%J{W%h$ z{neciJQG_17^#>w(c4B#LYfp^Mu=ppBJ9Z$atzX*tQ32Ixu=YHw67ee&4sn|O0cd> zD}?PfBHY4tW`JwRv6JmdNQ(8JqsUEG(qcV63P|}n7Meco-wjHO%Xl4E6F0`KYb9&B zC75>n=A2=aBZ_t0J^+tD{et+{rw<`Wcw*nmZDajYTqcizcykxdOgcsE*|w3nvzD`~ zF@tM- 1@nXv^;V-e4czKIs19$} Oo8w~IJyV+uYx_lveVMQ%$gW!L2{VFnEMixjEK>;&!lBjmZPt >G(uqC7(g) zDK0oa&6mG?MYlzuu4$&yQCFV9?Ejl%M!h796^7- 6)p8N4Rt0cit`3|NW3@@zdq}?tJLDop8Ce#JoJu=G@Z?reL(&Zf)+^k@9rj zk_66T>4=OSpSw^UcshraZlSXH+s9iNJPlf?yz;Yo?pVd1?HR6Kv`E?fwY$XNXC86M zNSW}h{V=`^rq;l?D(keClObqV3kPA4p%nRC2!?LO@ttx5oP8Ozry)83N=AcH23iQJ zrdcP(9NTYe!ho4oF*6|&Ln2g6NfIfKp?whI q0eF0H!{K?F5qFn?|XFRbY_ zi#&8uGfj9UGxwyJ{(+H7xcSQ`yU1ExS6mot;^lmBOtaG|%>MG`p}g7K(QM^+6z3Or zT)RuH_IGRCd3QN;^NBZ){D5{|IIc_n!#CVCg;XYYo)dYr=jNr{Zm*|4WZ3~+%~eKT zwR`H$dplRw!dSg}wRmAmlq=64jIKk*5a?NfrkQA2fv%fqnn25%WORY1XUXV-3n!M* z+_aCM|NQ5|FboXCz%)&2YHHjg%z6u>YukyNCA6gtk8oj?(c6x4yS%w0+F`n$^Fs^3 zGtIlJBe_5wvOFi>>xk9mUdjFM+?U~T!9wJ W)B?{Q zgRxC8rVJ)j!?+q4Sp(H^NQEI4g0#)t1l_5H927v$fD(u55l|6>YzQ(sWLvDD_SqOz zOn|Z}wt*C2pdbiih%iQrAl+zysZugJO3BCwW;#l?O(ok}IO36_fH2_1_6C|>+umh* z_2$E5nhy{P560gMqLt^9ZM2wayy_aFr86 g!wye+k;-W>1#52!yF9vKV6yov6ALrIv zZ|#h()3r^5vD-~-z58}i`}|{MBbGbM6V0%EfA0742#hR+q2(~70)|$>S=BIXpcTPL z3qx9kjQv*+LpBV0)INhWZ0()Ot}%vv>CxQhLeFF)_Wo-mci$A2dkR_vQ;*tiD%OSW zcYU$lShT47Sy2 %+5PZTf?7d+4+A^ zBLk=!^E(tq5E3f)-gSttFR$-W+jL1Y9XREcF2|}7z>&XR-V<87j6qXhaaBH{D4rEx z|H>i=8aK@>n9grkyd>`Vei+k~rA(hIzr6${OY}Jnu<){wY*^#$<>fzX!&0m9?!$P~ zbI@3%UOR6ezn1Hly1iO{jxPV_+|#n;E!T_3fggL{RZ2#FClrG4(R( |lm$|1xzx`ao8rHonwOW}s8OT(jFCS3-1FkzAC&XjK7&D1 zzUop{C^NZ#O&)iWKR!91b?esUJvV5|D?)zOuVm$=uQ;nS3i*ph{$5qchFwZc-rw#Z z9ZwQ=`-eMdQ^<|oLiJOClA?Y7w<}%}U;lm>Q#fbW7N)RhJ4h=y&gzpl|6D(omX|;t z$I`nlq~{&2ROz4`Jwd~#=TN@oWz-}4NExu827cTK`|Q=v6FO`;Ze0L12{@}9&Z>ez zRZv?ARaH<`4HdOeQDW`6W+K*7trh}QFhf$23tioT@cr!~)QF1SqH*Mf-Q8lO0K&}D zcHl2me(DzFUZ5x{v9gH(lnl9>aBK`lx{V9ZGkVNOp&Qn`o(b6g;x}k<=i5Gpk&-MO z{Yz>1&(JJhH=kQPTlw VHU;M(dyyL>U>WHkcf7o=l84VNo~_(vk6lk+6}j_F-Bjg1C{>p! zW$UdNDM8_s&EC=|<|9VVh|$TbSn{Wed5dpWHhlLRV%Sp;q6wX(3d@GV*LD|v{%Fd& z-nLeTDTzW&IaF6zOtrcSDykq^Y3+$7Dj-@3i5f_hLOgCU+iVClN#j&QmKLf+tV<1p z60 43fT~~}DdI6?ufK)(S_s=+;VBTd7 zY}+=Box2P>30t}cJjM;K_?jC`&c3JnMV{&v|2-c!kSsOvkSz^Xzb{I$`jAfb@#`So z309)b&6M0s>lW2-W$T~Co!kCH$h_IOeuRF5ECJ_?GI;s DX<+i2- z7uSD-m)0)lp@$w4_uO-j`)DqNr!O3%-49(WbhmHi>ethLGL!XiX8CuJyQ!z^`6UC7 z^D!RAd(KFcm)8_;Q?U1f VHqA7Vaq~T zGa;K1WLpd}jTvHt1l7|+`7WddpvJ <4p%IyfVGgGR<5Jr~vLvK<(dLgD0B++(} zDI5M(glX*}&%QLx(mSp^rH1O70g~(K7vn8VLH zz{2b2DNjH1g80?1NAkvBO#6M8Q%WuYiZobkd0Z&ARwg9rT4G){BhFv)wZ6GWf#s-| zq*~!JYvFmKP<`aw4ID|(tA#l36-tiB%V`S5%eOte)q26r-Ery3E2@wL1gS+F{_W-_ zIRD%>wrsqPRQvIQ $>}Q%9JTx z*^@jaeCZ4I%Jj?kik&+Qdp>pQ!+An-ud;s^D72oO1CXbkx~nfXbCBargQZm|SkCo| z#7uL3y*XLVbxT6(TW;UWr7819r~i6cv@^zY9mP3U`22HQJ8V-2PHf&>`;oJP2T9%# zmOD!akjL(y-}F8$Rh_pF+V@R|-{wo8Ud_^(1MIqz4dzVudGFc5p7(RNdmRl|F5&FM zJ26_D2rF>!X!zn*NcDj42m#G4) GANJC^_gMD} 3^K%9Zs;d8GSh7#?&{GtC9M2Rw?3``sln?@q77u+LWXli?i{9!}dKJvT18N&$HI z;mu KACYt8FD)I)LAF|-;(&Cru{j|E2d1x*2tm6LXhvhorZxC5~@Tb=S zT^{5wap%$HVV3Sp>>(o>gStAE^UgJ?uWw?+hz8(4ist&~H-@8~jOWwtsk3}6UYKOn z%7(mO-+c4UqIvZu=3K7x?&hTR#idp5rTL$?za8h-zkZ$DZu9Qd$XhFJ`zyI6L^laf zTf5Sq_cz(X72iBoa5FalJ@4-jjY8c3mGjQC+H~2nDP0=#xxVTfy#@PZ@jmas9lJl; zEY`nX&9-gQ*v(6;gK?a54wYqQ>922$%Jt;W!};tT)4e_?Ua@qUvgw<5iK-VLBbC*u zuZAT<;jsg~os$J43#k*<)qMyC%n31kX@p3riq=u2zL0{EF**A3VH($*`qqqgY#%~z zwZb-eNHVA_jdJ~*W88SdXZn<9bp+AP>k~oGFMjb0p{i {$1gd#<|bs#B(`yI8nz zp)zB}jBdZTe*Jn@tXR>j6K#K^qc-hLoXKPN@a!*;9WoZ(gwinFJ01ol` Lv?jEQ>RWn6|#Dao=ohSOomrqeYFp$ z=^u2~roD|bb?nYva+}h0`R5VUgJ{dbr32tA ZzjTdE$vDL?{&McDjoeE$UY-Z{*04-KKf$*s;ZE?)P@;&ed6) zo xn~N^D ztXsDZ!|1+=Vt*|0%IJx9x@*@ie)hAU^~q%0m*{Sr_7%?Lv0H!N!%EwQ3lWJjPNd=Q z&xIStK&YQ)`I6x<{(h()4_ZnTUEWngmho59E5|tS%Y*c`tP!u9NX@imnAtP~DneX$ zsm|SZ&F%HR*>4t10RjXF5TN(5;r_)U^zLd*B}F6w-`xn$?t*M5?kK&9Pz)yj7)C6G z3?a<49Xe3+g%dO)C?dwu4H Vj{&i#M)S!MO=)qQT%7igvd0t5(fnq%z~KN9M$ z$Ix5eL5=E!lJLw%SiJ!ndmj4MMcG+U|05W3Ewr`Sf$sh1nd%WBhS3^k@4vOP=b;|O zB`k<&Wfj%aW>S6OXNc-5 8i~3$8br3Mq009C7I0LZex!;TMo=3@kxE@V3 zlc vc(@cZwr`dfB*pkoI&`*qhA;L;gzH_2O*v%SpnM)!m4$! zbqA!{?UP@+fM^nCeh E3_S+40TPDZ7#?K%};k+RHvo&GdTE zRfa`MnLA`4ci+0GU-(+UOalZ65a0~MnrBxCqw%+-n_nYi9)q|bRt5VT;ZLu_#tqQi z48o-7A?=Yk%=!+Dy$Lb~=&H>?easZq(oFX}B-rr{jZ@;J3Pj42)LeQ#b+cy>3YAi( z$GD)nmWS`Wy V4*V+}=M&bMLwjgS@=BXt?5#7xZ?7$VHB@4(LcvpuF$Q5B*!Wz^1?KyCeGVx`rD zQ&GmpYneS@D7RdHeZTXvekUM6fB*pk^e>)!=0VYR@^`f9+ewqcjG2%GwG8wyy#F5T z+6o7@L*q`kXemrwXfaXE)=2%#)JTGsg?GQHu=l~9Xrl_@vM813529w~SSrsOh0r3z z(+Ng}>bRtQ7gUNC^_ONUZAwhpoh%+@gRY?ATe zp YEhj#(9AQK;PDU_O zAtHK`0p>s^DWjR73}x}P3qO2K6(9fr0P#sgK~%Op>tjn;fB*pk1n7S}v*zE$iO2?y zNB&An_#kN|V>3<@BUYH18WAuOV1_^tLJ&m|#mq(!S`<@@VrmggErLjgF;Y>?bQqD2 z5EEq#)`v0D7|9s@Y(77K$tQwOeIkeq5FkK+0R4|=pMO%c# 9gtR?( P9e-8QIh6_TzZ_-5l>x#mEtNCwVfsBl U~MeWMr0W{-YQ8<=^@(-N3Nt(;s!$$jGde+jG|N=}L)M zSu1SdBcmp;Sm9 zzZbP6e*J`yBbiF>8f^5GCMh~V3~(=2q& Xu z!(BiW<_1m}pVa?u3LF|B25~DFy$!tK5@++VQBDBNkvJGzqiB1SkDsgpPkUjJis @&RS}MlXtFuB-9%wD+^wQ4E(Tq)NJ+Up1zW5w*VxlcJiHzc*M) z1NqN3HCv&9JfbwTDDm=87~2jysL=X8U3;3f_}M0ZFU{|ZI_F_M@C>@R>qsFm^|c=4 zqV>@c5&R@SHJRNE3;7)5mHXjUKe*^JptKkK4FVqlQxNca05qGoDi^nX5nFtct!sof z`@twJ0kB+@9Grv_=ZQ>ATW+t#Y_j;)Q|R+z=!R9FnxW0tfX;0yropV;_zf35%{T(B z$ty2CYn?6*k*pJ+*>(;_*`~fUzB&j{d% JvNnJ^a~uj zxt0r^Wd^3%%eyy8lElOd)4N_${}jCl{uEAnNr}62Dte!z*ZZ*JR&C%AY6V+1q#V)v zIJ|8?%9ZiUS5ZaVY-P?u%+Q(KM$A>%cI7s*<~8_>QH#%N4@dlFE~K}jIFEeCl)lzO zq4FiXh9+B+vF_Tm?@pw O>ih5?Tlgq^^{OeO$kwN!icw8M zY%f?XsBZ!F%7UlR>Ry@HjJ!(QYPQhpO>~XwhKH=u mR7+4Jx&7Ns1H z%9b3=Q`MQJhyovnQBa2qp;NYH`kwYb@5C81 K&y|6Wk@7)<(jUEyLbn5+yAL_EnCO{CC#P z;&oA$49MfTi3%8rs2l2U)c5)r3uIdjGx&Gp6U7Qyr;jb7FHMr-QlRpTWPQ!43I8t= zomos@2Xxg2voh(E(F#BGr_y0TKtVRw{kyUM_3xD&OU6op-v_OZd6Iiqe3 076!{r7hv@3a@bhfdz0PK7y 0ik(>+%+#vls4z9FFPNNzZgQ0i2T|u?6EF8%S)7$SxE33HgZ;FkK=2L(h~Hmv zwH!xRwz)m3dUbB(W(&9hHfgY@oKqqa2cCyx4|Ka0IT|mDW3&TJLIU?~{q4tm(oNHk z-fg(Oz$;Dvlev 7PBQp^_cf!q4-eL29OlR#eJZx>d_($40XG#+x?QEbwS z+HHJTVs|&L1OF*&jM%fUQ(PHnjgqRDZa5D=7AiG>qMa^cqXmlGJNQ7$Iu92Eyj$o? zAnQceyG{(cExE^jms|yflcQ>pA7>O7-52-y8o;@;Wv?m39>(#XUg)dScLcWP+tzOZ zN(4P--R3ck{i6?sL;+>UGti_4UfvQ0R*o%3lSG)O^O!wc>uqqT;%1 ZGi8L{lxF!Tq5S9u>d~6x40;LB zCHqE5aaLgEh_^<%Zyk^Hb|@FhuXBpM50wB zl;&5A!Mt?NXCg~v{M qWsN0fx;Yw)Ln8;qA(3e=bysnaqwrCSry>UeI=Puva1c~U6 zXZcw6)Mu>|rdgAZGwvxT`9!>8KK~Tev#t*)eBx@NG-&yi`YXQcY+c&<8FUEVVum~n z0n+su+}6$RZ2Rt*ZF|8|UA!d!ntFl83DO? lV-6QPzOD)F}JclWc6 %YGiuwle0EwDLUG-xLc78`E+)UxMa^)Zr~qfG z{KfmxAo?HUM-keA(Y1jDQvtieAFX;lKI#HLi4=Aw(T1^PTm|XiiHI10GVRB<4p; zxvd?AxPAJCldBp=A0VdJ8zwM8VoYm`Tu8j^oks`X!E46SqSV=gu1+rE!~YS%l2f)M zy6I#0D9S0c)p)-fTAM`tiq=<%;2gYU^6+OrQU=sd9iS-`h(qF|QWgvg)j}T>WUA+< zG|c=q!>Sk*Yt@fGY3^tYq(fq9S+Kj;vx!lRaR(QSk}yz_eokaM+$H+uIQ3**qe7Sf z7*mKY54luAbFV04PVDx_ha}KO9sZRF4njlPPlvxh-Xxu>(!B>O)q`@Qy64Q3gFC#^ zXGhUha9j##b~WVZ^FuiaeZ|1WY8KcfsHf`*?mGV=S|r6)!g0?*^V2K%gDh`;(x4JW z&p`sp%%{h~7fOHcjWvf|-U4w8B`h-Lp6m%oF!*#%W7B64!x`F_K}(q!#cF*JZHs^* z30sWfD_c9Fj!0SDb7>1r6R?iPs179QE;>~>(fK<;5_tP8SVjdga72`%yrgU0-&hNl zj;N3?wG0Cs-(AB_u>Q;A2N&m(TmfRD-)~vrx|2mTsE!PLQX|3;_4-t`#h7O_k?s#J z;nH=D&TBDEqZpBhi9C;pTfsV0My_{Q{hH@E`q6^!A2$MWMoIjhh=J=Bq=(lMnEGv& z4chgKR6dn%#R2k{rYofNlL9waQC3-iS;jM+8Qb-M!&2*U!6Xub61Cb^Jx>CzKysW1 zLzygTWkda{A){i38nMG&`91h7`P 64XcU?$^avZQ;Hq!SxcUri zC)CR&iz$E69s!d)xjEOTua!Q$gDp=2Z!T8j$v*2`=#4^qJS0!P;fg$qcM2XzAxlbj z)qTG@`PZlqk*N3?FeI@F7ubWr2-^w%CA%9x3_U&w)CN~QmQwPjhkNsW#T^r4#VX6X zIG+Jtbbx1U$EUhA_VCOa(7SYl+8p)J=Oy<28GndDy(#_dG Nytqus{{<-lyVYJLjj zVawkonZiE?0bYZKAIyX&;LyCu1!ibCRz%Mp?B#gEsLd6Ffoplzb5O#?E7)uyc7)K& zk9r2mT*P5IA!LH7kk}znN|}r?o0dNh$?0OI5+LPX)ZuNn7Aab!VHQ@6^K=%Y+=a<@ zoImp1D|6w1DU*=P7bKp#yJ2da!gvS&wPNF@89^e?S^%Q*uA4MrzGeTQ!2US(=YTJn zpPYLr#p=q}XH>b|3~_H1{qlS=bQm}zd*}H}IG#(~dm9NVgjccjj1KXudC#@XYr1-9 z9k^$?Qp#3mxTgOw&migS_fr}^k0+$yM$b{RUXv$7@R| Bxzw;ln52gLhs*~pqK|7t-gZvs@guK;!xL=1*1Mv zlqC }?vR}oD{S`DUv6<$|UI>{%pPEr5DOoi`p=vn3qhQTB>eFNV zE1omVR|}}OfE#?QZEh>W) qAs@j_sj^iw*ah@hH(A38wmMu_ak3Z_ zRQ2xl@sIYLz;@ubTd3Z_d5J>$t$5 4G^H%RpjKJl zRdP9u{_$-&(Hp4dL0cnJHf4xUrO9Wps3MT&BlPC5+b42*Bhu*GY6rphf(2cBpi1I% z_UOT8YfnMFfNu2_!* oR^aPw5b%uXn$HKU?L0PJ*{6RFB+8v+5!8fkE;- zW*pM&br{579)q6f?+)dR9Fcysn??-@ng{j9?`$6>YG=U(KnHQrc)N~?u;j~&-*hJR zuA`~cHc;DrYXRQ2Oc^MilfnF3QVTi$y4kao<|z+38zOLB6I=|RiT&;ft;t8z48#BU z*_|a5JAX3-bFjpNRy{8K&c$$q=*=UDRmeqF;$91dA_-((#AIZ*jlTv}U%|>ttG|az zXja{b&W9EyIG$=7gpWM^YA8AK?hzp;AXUCR&9PN~E#F%TA%5vZ=p(?R^a*n`gN y9H!@@!T}3SKzpX{u3>(F7}P2kSd{@2t9rd}wRxaFmO_OwHVVUM>S_;45V@h*5>I zi(P-O{n_xU(BI%s@CiQc&=Yb)l#~kHT`5e7{i&yq5bZ4IApRI)`WkU|8Z3B{3M*Bx ztApn)C4P}KI)hmLakImpmxp*MngM;c!Zu{cpHnE4 !kQu$=A-P)r&4(*ek1>T4s6q^bhj%#>bMI0N%%Q^9n_J|vli})Vm zv|J%G_T^)(ROD{`+s~oXty-5{A7rkGMn?;E=P}uTURtfjAZkB2efNl{6ehhq4TMgU z&*m^m0m|Pvz6Vw<_3;4dV@F;O1bg#uCq(HD{k}9>C$d&s$~&FSK5vn7{IeL8n7=ga z&||COvM_Ao*1us?$~YPu@XgFzhmY|Z)jS7pu_|l~q(q7rO5VS-P4q!Vqgs813`joL z-o)Lzxi~mi{4Ai@Yqdfa13MBlWtI>feC?k>PQpfo&uO?oO2GB*K% >Gt87w)Gz|9OIfmZBTm;@yfu!#gntS%N}hSEKJ#!e)QTBAZIYU3L$?_A(MH z(iwdhs`2p|>~MnOFD*AOVqgTjT-f*zWUXFd>>+jSt^3`NN?{(h?Z;7#345?Ik4}j! zY-sMYAKc-a-0WH(4!fM7KvI^Nn9h2Fxc_lJB8+}WkRRh-uV*6^7xPg zXT9=wBAe~!|-z=dxUm|y>#=9yTG(pGB0VkhSMZgh+J}e z$`9`&%PjETy@bDuIy##9%XLKAOiXp;Q8wcK@aFvSN%ssuzQM}i8_>BEBfsDyTuwkN z@A7L&_%5^=NahP_>%xdZ#4=A{QrRuzw2DtnH0L}OIf7Z0`ZRb#h{`2)pThKt;|taS z6AxTw(VhJp75p- {4 zOF5&IM<>HkGySA=rH?P*%u%3u3ofGCMAB;x%ea(ePP8FGptd^haZ~W3-QP^1gRgWF zmWTM*SYsG 4kidAU9Y-pmQ?2fvM+37vvQ zT;1QuMoAMb3(?2?eXy%s=3)y#7CG`*>8385_eGpCGno*+oxt1`*YFoPykLT$!K1d_ zj9;itnTd#IB_uNBlKJ<{HO?y-juTq0zgMYX!tV2^%_|-V4z+V?SM&wCs ~4zwNujl(v_GK}OEAb-ez=J9Cc=_s@QSi$8uDpKydbq_ zMZdkm5^dsrt?;vc_;ENOq6i9Vh~OBpMcz0W#04r?esc80z`7F@BdL5vFLVLh*8|N~ zg2&Qf$+v2o1VQ5Cdu!FkK%)GIXE2YVD8*F6a_=$*n5@QJW;_e?Z&!&ti9gk(!co^z z(l%_OTvXU@HggDbrB`NZ0^2DzW9RJm7j=BmlVpGkX7JFk_YjC@P%?|~SFm=XfRDh# zrY3j8I#_<2sHzc%-B$z|Q#0mu(y6``3jwWzf2IQRk4ocSU3t=FC~S6wSuJw&Jza zCj23dv#KB3l+Qfy9~Dwwp{0_1f+B}scW)t!5?VkuBv1BX4}21lHqB#B>U+70kJu?O zEqg{&Jowa>fi(n!Jp;6>I^c9z1)MA(Ad$?*8^F^R%vj|^zwrl&dGfg2V84cg+@~9& z+Z_0{B-q8XuV#OrYa*+$PGw6L8#9qOo&naTT|jJm)_{0`>ER^43`Q5C(x2A0fJcPU zKl?_X$Gwj-p1CjDCh@OFh2-(qYK;>u3uOCRcYIEF?)~)TH~%?|AI1AZDNfMQs?}L_ zZ>0!z26~v0wrO2jcTMyWAybjB((-5HNp(R4`2gx ihKO zb7l_+Euuv84R)$2HJsb h zLzyC+?J%Z>p=ZxgiJqrkO4(E`Un#*Y4x=C2PP$`Ruw6Fd=U!+fa2`aq8qaOYLkBU9 zQ}N`4VUVB7HtMB!77lHPotOc8LCPk0_3Ad=(uQ4N)UW=#%Ka&?eyaG0C@=Dcndpx+ z@4;@6`^J38IL2SPengTGaV&7yr&Q>k)Fjk-3H0>~zF;=2W5YRlgrku6fNTlSX{YS? z3j`JrE%jnH&|(KwQu{(K7=vjX@o_-f5jb=Yd4VlN$M+D5;YP-@h?ZpdO1fi`Q78Sw z0xyDXhN=;*dP#f*gaS&4>Kx{;-Q$G#=K|skL0wuCh@bYd2c6}_1Jd=#espCr=JK@u zn_zQ2)Z3Mz>CR??>2z_$*iGf9;6OXbRZ*Y1t`N!3XOzz76Sb@14`r~Z-0rtC%h-^n z-|~0*r9@oZ7&N`nLvoLHS&i-FR&lL>h-_RRy35h>)h _pX6|G7Ibt6%AR6R2P8X%$rjaRLtv$$j^d zVEqQGA{X!xxkPmqCt2h_5#u(rex!P3q=a+BRDRiu6`I|c0NXFWjX8s8c*v8|tYFSB zrByd`+xUVbQUl({*B2Eg#lwSs(dQJFnF~_L9L-et%4L%-x>&)QBf{UN(fw5BBKx{_ ztnB~_(Of!w$#j1*?;(Hs3~1C1E;^3yC2f9-{Q7lXmW-U@9;lE{A@mc{yRH6^K2bsL zDY0?q;FIyQl;|eWm(iptXpnJ|EBlJ1D!+{nDITZ1t}|nif?YLGnMCckku!^@sy%J; zSNIEi+6ymV_gzpXb`wR8&@pLNV#evH2>k8d0r=Pif8#%wU6EbMRB?f~Fp(}dYvF$! z5 kzz+~M4cA X0a$_p z9K;pb{Y%Y d;u3uK;om?AhT*&Y2^N#W#Nm`GD;_L 6V{u)Ap~()}0$$gKmVS6?8k*OE|x|EbXHY#&%<15tms_!QrL8>9Gw4k2rIF zhW y bCVn;tZ42Ydi5e!;NF=a;aKGBeDKy-g@&ENHJO5wwY8tm zt?*}l@@`V@^ZEljDCskPV(uh)!83Xf4x6JZS1A!RBO>loB}(Q}QkZ5=_{iXmP;;Ih zo4Nh`>PsiCg@o6BGuO~F=bR!1wDYQ-@jIf;1FA!4b74DDPY29l6m=~`=tHU%KKA7g z`!da#+_|UwX5!e^rz@Y+Z?!YogjfylHgN=T&fh@0`t&uH*PwB6x}KE)<2O9Z( W1rMZaZZWX%;-r_{nDC}-l44S+&n3>>zO2hzM#3x{#VZ=?cT~10c?3q9uKH%D zVgB0cODuXjDQ>#uvz*a1pW00Z4U!i%ZM#&`sDhI6+2@a*eCR!F;^fm7Wp&t9=cD`e z%0R8Lx 2;bqjJ37=$Tq z+yLAsnbB%Clt#$l9^Fllvy#eO6dew=jrVKYp1$n}YEb2^!Mh|Hw`xADO52`|OBoLD^y98Ha`K_B$pMp$mhRwnQ=1Ilq2j|dW9OpSqEKsTvi !2~Zna!i)sCS<#+D{bcB1M?U4RFvFR$S!6 >kZ~ZPCoPh({b>hllnu;5Ab!_=q>WbqE>XYg>O+m-NFNL5_`KpFJM*iG%#WN&J zC??l6g=7Ajz9ryfne26BHsn%d+sB4~c`^(IPJ91)+N423O}(PPH_T+LL7~Ma9%R|u z=y%dAvR%qqdGj^lZ8q$imx%>5d4*b%*~NP*+oNe>es2WU3Ph=scNHwmSHAq_QTJ!H z@Coa~&B!%wb{6ZbS%G>!*FBs#IBIyp!l#fOf+O~HeeC5LFR8dLBKMj?yWocN0;csk zDqg9Z1fBe%HuPLjOZ8}TiDrl&flV~}LGspL^e{y<%d{eBchw`mbQf^5{dgh1#9!@? z5KO39^Q(%eFGf$ReFQP-PY35I3;M;`HJQ$0%Wo(TJMg{?ET6Rqcy7bDblWETZdx#M zCT7oJnSMe0r<=l}`|4f}2aAT-#1cxh#t?oW&vgeQawC#=QPjP$YiRl7$d%y+MZhBt zyf2E3vxzL%{d0g(=cLH2BI_Rz>v2Pi3i*xq;G2{vuNBh-1?Qw2 *>2kG!H+KzWT%^bWdWf7v8^9y6H{bGUR%Q-AM7(ioKLY+wkVg5_TfCkUW< zNo%ZN6Afx_)i)-{zT+#|iZlfR2QZL+h0bx4FPnk-BO1$l3nvTLa?SQq^^lfqm+g%v zQ$mR2-u9vjvziri-({uQ4feeTUPW%3*yHM8{bAE?IA=CuRfNmQ>V7^kIdH%%rBJ%M z_17Z_)1aAgsR+ME@3q+^#=gh!_T2mDN^gJ5i&4=|4ZJz7+ZTJ32EGd<)(3h<`|)_S zu ~x##^`ZCO>qcF#;otKhONbM$wYzuGG;+q@tOA4Uy@_IVv`Yti zRY265LTB^fTTOY{ #KvgC$^*H;r$rbDQD-+Jp=C_fj=ouaUeR4W= zMPzDgY~99^#*cM%Yp)2g>ru;!n1}5XRK2{wwYF#%nqAn9 bJsn|4Xaa+eXYR zqF1-xydolQDKz_Jc$MlfDr0``+84}9&S+cmb~eNJ6Kt@T<4c#rPq5dXqI?Ax`Hmd_ z`fbtts7>5Hn kT%z9O2qaVsGR|Q#=KJFtdDPnVx#c@tP!E89d8U!S=#L5} z+;}))l_}}?K`W^ZE%G<%B{1l#)-n;(t~yt{b {BVjRu2Pz;t+jnE%l zz(jFndz%kSQAkpx(0#Y`h^ky40>X6gO6gvf(kXi=X+Ts$TTD@Qqn )!ebEU2S9 zBd|XfBue|)7N!+9+tjQbv}@KKr|^X7Nz8OMXYEl+KX~N+UABXL&poHap5$LueZy>e zBvkdB$FXkG=c>ezt*P*ExewxT=klXsWlPQb)&%Tgwll3YX`v?*l8V-p_?xXiqMj^C zs;MhHD^^ig?chObj!g6QRFVG9IZ7)pKO&rrt}tpME!(8JQg WYD~_3!qskWo4iQYk@~xQ3fB-^uOa>j zv+BXJD@`>lFpXuAKT2{Y7_WPBr>9kY@XJ};y0sF!RA8jS+4aWA;~NbJ4kG@h`teTs zk$wxxeuFNl^uXo(XBqTEvlzd?eZ#n>@Qh5V3$T&qK}Rsbn2r^q9 TEN zAJ O a2!!Nq^pLZp4Ad@gDd%q`_&(+=BwBUSis+o)lWCzd$`ZpqeN zhqH`m`~H;ltYhrYjfj_O$A02&S37e-WuNg&^XWgHXvZ?m^@n3@)f_%oOMp?8U;k)N z%iPY%{AYy(9WTW1jnolYlXt!qs6W51(E6NF1Olj@;LP2|;rz{0BvM1yA`v-$AVNKn zule 4O<&K^ zN3g-`*4TzyjdK{wpVheQoItv$?%8~QOrp5QwTzawp2VXB0KH7^_uj?-oGLgDm~roy z(IZf~e4W6aZkca4)b)N5T`%4ya98cV6TK47F^(Bf6?axWd@~&K2cjZX^ru~R;+=U+ zQtte5v!puU78%13)Sd+^hoyFEHSsHK8!u?wmNuS5)L6^IC3?w|BIQ|;t!8bDbRH)> zU!+?r#(JKY V?8(X%8_PBGyC6(XgJgftcBXdJCeBV3q))M~_)8YHuw$r&o zt8w2KaO9-9_v&8uUO$wvM}JDWyrKnK8}K=Dfiov(Zw`4767J^A*D^1;5?`7fUe#Ee zdfNXF=}%;W2!x$fHs#Kx2~OR%eZe!45 qPQ1&q{2^xM-qqcU8_jiZa(U_fL}; zDJt^Z114sDl|1?IJB=K*pI`=q_*}efmV!i9Tf)iIl3(dbSK|I%(}D?_D?YZ!MK>-q zqcMa_n)3;-85 ^^`bDZg2BNp=#$Ja< zOBV*HZ?EcewsY @1- zjNx6`kql6I9ZGr)FcF_{4hhir5xo1zeIXSl3Q6ZOE9qTstA8N^!^&=p8~vDs&?}OI zO_=AOwa&n+I>g`r14HJ#J!A}YE6>IlCmkRpU1rd|VHexFm`EU4AJYPr&UCnoBj#@? zS@xRppMDH)_bnXY; D-j{TC3zt52dK7^UAx%adLBV_< zx>!ZN;YPXPeKXr?N^=P~)B-hMts4k?e`WPvunvc{7V50-F?&AdHoy2j?98q1)gDd2 zgMwr-C>PI|6cMO?OJc%M#&W$t0y`D;DPX!5K1 2IjYssMcWbaCiI`gajP+ zHU(qh?m-b5?b`}1GrHEC0B(idTpz!NYOwhVjCvic%7N~*fLm46twJYa#p5DeqB|I} z60ar_{nuY7*XWZ OTXAO;(7^eWWSp?hCig`=6Hz=4$p49ghL8FCrygV3jT4rb83G zi=C-oetQOO1=EMk1Xtl6Vi&T%q!5O42^-FFtlLFN45&$h5);?!^u--yV2$ASVZ%{E z;ymTCMqk5AiDauZe ^k!g 18Fd=PT}21vJg8#@NdJgJwJtn7yjUL{C4Z34oRbu3O7`84G*UM zs73O80J&|f%TaK}-4^g^G4wu?G}PH`^vI81-1du6iavAgdcu2zEyQNOxw&BE2Uvsx zB)J$5c?<10CLfC~KW~*r6L#GI>Q-N%Rr=AVVCK%P4qRx@7$I?FFaV(3%w;jQ~h7hS`iI<9D2aM>spPb!_ORni)#93F>Gu92y=``I_} z@R8tKA@YzLP>DbINJJSYOhODUR&She8R$g<{AL8Kjc%kcB{ Stp$Hcl{ z2I%eGL8Jxsv05YnxT?P@|BU>w2t6`J*<%W;Ga#Xe=Aow54L;ZGISV|_$+^ts#@z?E z{1gIn R%aLtR~w6-}dm0 ztfKC%j=p*bc6r@EDV6A8fl9*1_jxPoTar9U@MrPUJwKoi__GZ-c-2t2;tCNqE@n;_ zJ8A~jcfrg*K#r-7D@ct$ =^Z4!cX3MQ32yaiO*Z`iG3T0A21S{V=_{0~kc6bkUYYeml7PQHP3Gq$66Z0& zQdL7Crk!^td(ML}So~V$Yfdza5{_bX>o#(P7$2_wW5`-c+G+{AWHF)7BEcv@t^4m@ zC}%~#^vAx9O_F>rXZ!wVAWTRh!@D@6-=CkUfIaOTlaOb5FE9|Hry3DJTnAM2Ql86? z?AVwx5|9UZa&J|`d4!+slg8*au6x1UJk$(aK-7?-+WnHNgB;W!=}%h2P5*)X3M3>R zhHaG(iiWd{M%Oy}GcfOlWrR**Vj1V7%IV+7Ya0*n`g4{LKRuv3Pw(n=1IBR&H}^|8 znfS BV=)d6K8hqdg- zy-el`_a;%2nfzCze@Fj#NoizEDXGNW#}#wvrN{}l=J%wiCFbz%@PrWEF|NO2*I5w2 zB5EN9DJjbU!3Mc%uXblmn8vySwI$oUo}A1j!q)2!F%OK1m`j>vPb54CJWT3#V^m5H z^y#T7A#+ue1p6~%{-)7u_4a?Y&eP`-oe50na1u+uVZ>tX0k6$|Qk$2(Es!5S9h@~A z9 3)5avndMXBsUNnEXz*4PGZcov;D{6j zNb*g0-UsQdy5aVTLcyI~3Gy#(CmO0kY%lHF`jftA&_m&vvXvT)FQBiQgv%a&$_%xB z<@m Qi?!bT)BK9tC=pk>=C}_JzXH=6@1@#YrXx|;BdeUc$aNN%YW{-=o(W`Q z%X>|@cLX-rzwwe@{vUBEArfa*YAC)mSQ?j@R2vDV1zjtQ=-u35*2kJUtE~|*j=U6> z^|le|kmD;edI%^a5qKXajh6WVWrWCs>T){DS9lQL+=35OK4h(302Ulm3c-E#?wL`pKW5N>h0BFybhnp%5;}e#; zc_c(1;z=OZ<;Kbv;@TQ`+Ys}LD-`ro=u`C#V&xeUK;ogm;XJG=Z6|4m+_kBw;I{>A z>P3G8)*X= &}Wntceq|ABB+t=`T5^ **I6XF2PEbG$q7jq~qfueXBb{ee$I744~-Qg kBc3qE!5c#@0v`S0%}j(w|(|% z7ZiMAl+_hBLPJ3Flg$301rI#2G+e>@5v-%TuNMh~?E K^SN7dJmJ4Fx76>Gi)j=5&{XN~g-_jz?8fx~is)%=WMrip-@ z!L*0YqhhDPu7faBbHz)6FMHT`S8kAsJKM%;8puBh*z jUXj00ThzB?kMIdat_ VdjEHsQD z{22bzlS)@#L$A@bT_6G)6}oAx%;6KI7(UKav5if{@4g#3J$f~lo(2ke7VT`vCiuP- zL!%sILRoyU5>7%kkcsa1*?tY1=IfF(W)r rK 5V^{A~Fnn!FTO&4bcZZ~)El_8-e>dgUtQ5?+Qi~U&CY@uX zgJ`P-gc+2W%+*D?klklfD%3%JNceP%$Z6d=hG6;#0;6j7CU|jliV1ZUM(yY!fU;zw z4R}vlJ?J`C0!q|MDRc(gVR+U2{oXfWrq}D3r;z(`Csw$v@$KPKt*xhHM+nJcFzFwf z=x*?OVMmfDG_AdwZ|*J9UH~aa5FAcF2M#UvgDdj4Ap~Mq|0Ys}JLmU vvDWj?K)!2PKn}Q3P2Bgcn5K3K(_C9zbH0Eo~qq z=^ziLSYZSzQzY!iV|2lU>{=0GFeG+`LRM=YP~UlP`9d5b13jZ1aA=eprqo2P$q5vu zvWGM{()KICYu?wvQAdQ7cu(7bDYH51*R+un^ibM+)z4ZHfMOD}Ss>?neIYw@hM*wA zHroRn2FQp-sH`!NA_!lgB;!5GG;W!lo9l%AudcSgA28W-d)>7BK`Cii=^Y;>p!5Q@ zPv15FhVf>{(#5TKcx43>iuT$pBEJTzYI5rxN6`zxN?9!Q45ZL&v3~75G`IU0gA$4I zl4hLyBBAEW537J1UyL+ABc5JXjp9GxUlSM?pMxtXaf37IyVt&*m4?WWWhfO1IcNk?FXf1JxA8>HY%&4_B2Jw$JJWO>ovugpn zhrPFN{U}T_hkw`v9=Ad;Hf&fcrsts!S)2$?al8|L^n0`DETbQJ5>?|y6H6z|RBu&u zEJBJ=W-}nxV$3|fHl{p~us)vwou++q6bek?SIYGvg@S+hyB3Nir37ypQIHDGx~;RO zLdQSNVb}fC`KLpq4@OND_mu8V%m6A5P`E}Nf<6A^?- Prgx|3|fxh Yke_?x2!Jwclm c&u5Q1Go>e7o1jzYrL(BO&HstNy?6LKK63)pTDVg(|fO zdlB#tEO;3K5Pvd_C*U6E^ad}hCymNhROF$bLqJ00Rz6;OUn7a}&CAWI4HMI7nxy!j zt2yBF|Jx;mOkC4&{-j-#vSHg#tS}i-6mgPZE+*TWuR;pA`r1Y7zk`Luo^|^b+JbDX zI{*G>`0dWtK@s n;`y&7~90{$j$bxWddt*;aAMmC#zG i*vNdJL^M6n zxZ;3b-3T-8-%>CA?Q=qGi*d)I%U1F)eFIud?5+4!8`2`MecgYrJp}b)5(JV`QG|Yb zT}nR+-)NOSU~5L)=f{js+Ftj&5%~R0Ww$D~_EgpcRg{AqMeeQe9lh3nZ&is|Ycb>9 zYg}PyL$ml55dkeV4hBqK+W2p_v0SnU4{&nUM3%L7HfTB@Ljq7wc-V-|T?Y#qc5=}N z!LjKRRQx@=LS`ctf~SsSmm*w$N^{Cj;Ng!QYQ{? Px$o9C zhKFY?#eonQFpI*5K8soSgJxnZ9(75F869YcOaOXRg*n8)q#(G6BN6p-A@Hig*ciXu zeK)fqkiPdNIuVa$0Tt#0`NKtEVw4^i`L<|_j+LXp5>w2G$r+4lZ|2uqCq=0LCH>C5 zl-^CBpt-8vL`};Z!K0H-=>zC=lybU~Yn_~h9)NhUw5w;?QSDfb!28UU3DGJg>ED2B z**%AS+T(AuVw*bI8O<}hS5n10kW+5QSbsax4 1VJ z;blh6x_Ek3C=^u+qunr{FYL5ikj)Pgo6Fcz UlM)gcLE8E`i^TWgH*%G}R_(c375eqJ z4nA$Lh%l h^9d`gpnLpv;m#8Mc0<^euRbjmr8`Tn`;K~}{}${si5O+ij~ zDQ9rhdk}O7BS$q{aYUKE?9(Z*{F;W+dnCqTL1bjCTxCVW8cwG1>yAfw)F^mXbl^-g zq^Mi+J{8C3F;Rb0x+G8}WoT#+-$niG^ eUVk zXrMq4-h$}_ANZi#jwsH|7>)Q)ljtT^zf4+KijtR;Mi8LJXLT+QhmKj(s^5H#;{Xce z>uuE#6f}3&-ALcM=APxl+0a*TI>JMB-E-WhUz(|qimKd4CT4TITwnX(@85tziU@rv z0mudH((6C?!wR%S3l=CYFb%(^Zoa84N@D?>vRa@-y+ERji9QJzs-QECJ1g*R13DRx z^_JDtMZLwS(4gW$afqATNUHXJK^h+X{hC=Fj9O- b17hG;Q{|qFfoBJ?E50?aU_R{CEcc0^Xzez+ z)*0IXF1Eee)H!@G9r9JbWT=pgFl6se0KEe8)g6GUA==wbs56zX>5n0_-UoRNx}CuJ zHP4v!>kdArp_t+up~=_ibEHK3jHX+jLbsZ4?3hT^&_ntDm3#eo4Ys&sPY^8MVsu+R z5x*gy$5|g`lTMcoo)3@5&p4C|l-qz_jBxL6{mySYwR(;9PakerlaX| <%63d3w&!F%g zhJdW`n@h>FUhKP8ui`0Fd4Bc0@>Jrlt%jVQ*kD`1{INkXF3tw>=RnnXJ6<;HjY^LQ z9SWS7k=`gTr1^8W)z6~YhUdRAY75**UZK!Xe+f=lfbQN4S>$0(eDs+yKwM2Ey{cT3 zEgBFRM51^nq-i}jqMuCAcPflsSB%m)GL3pFxVc3bb9`F=hXi%|^!E9rw!Zi7bBa{2 zmI-FVZwsA;$gBFtaW_UUhz#yU8LntYH&3b1!=&igK$Xj|rz5`g5qO_6 l%kNbS)do#KIn+{+8$QGDoXGx!P@=hSSu4a%9A?djUEe8k`x zPiG8GE?KmTC;iaOQ=O}yKm_C7$0PLI(6whY3&_3xml5eeXZRZ5881o3cVB7u^|kNH z&^u}VnM_*kG0FyTa7u)! v(KJx8AXRQzP~125fRynbd5N# zBAsJm;!U-rYjaLqz8}*CJs!tc!mcaVe2{ed>CDA)8!-C;Z z#NQX?DBnG}9 Ce)Kc0|89E3J@T8{B;yFk z){ls@LCob6X}9t5?wD$$i|miT>EuJ&0sn#r>DLB8Jc}`#%CzMDht$jN9XnQWyV10w zwg67}^bbwv1Z|db?pCNd{x`^wN7*ra?bwSBMiq<@c|XC$CHAjb_j3}KLeS f2r_cF9`hp>vE1WhE;RPkmg6a(i6DZbG6x0o@+_P)TIu~Ggy>2j(oN}12TEA zMEWJ=Q??>Qdl!b{&=W1P+lD#m|K=1oO>#5LUcAaz3JD(mzuNl_sHV1VT{s-!6cmpf z1*KU~j};Z^CD=ejK}0$vDjrcHM0yFymLHX)2oX5+5*3wBL_lhY1&9R_X$dt^5CRDh zA&u1iHhS;7|9#_*`|i8 zvTfxhRyDh zX_(eI#TPY9Rj<_XW6~>2`RLJZlVx8>tj_2heNK^8hg*Cw_cc1l60P-bcTc4owuH`1v CNL~+JUFp(r$ zFM{C&6 MBZDk@hdgS5uawZM)RjRmh^4#7YTb+K@d?!YM3`JV5+<$Z~3$p_ttWASE7T> zmkID|^bdQYzS4S)Bm1woiV;oK?>ai}fqDfpjg;)yAw+sX#HM)(H{GSZ7yqG@B1o7K z;q=AYV+v _MW+QT4kb^5N)i&kJYB&{oxha&Wls?Q>g3@(dGY51v1Q#hpDT>iUQ5`O)mJIjy=Z;&z!1OdAMkMRuOWLT*A{PhTfG6 zMvtLwN2D^-Pv;5I31w;!mf|NZ5)z=ndEfbsxkUBs=_nTbAp{#cFR`=>t;e2%Wwzv( zcLQ*x)vPS@<8sRBm4*}Xck?B2T8c8YZtEYVBD0@*q;&zR!ieyv7`NtCgT9(NGwZdu z#WFo9OTyDl{SvEJmRi*p t)^_?mFqnlW_4p~?gYnUT$hmD&2o{CR(Sw)b4E{#hGl3}A3* zE};thdjEqqZp6hA P%1fk?>A>pT2mY!-PtSuKlPDjnK4gRu|jD<1glI`MLA z$*8XR8}W4rembMp+vJkO`RIhw;gj_0@Nu@h!g_;=0^b%Lq1_qe?IRdOV%?Q+;wM?) z+IszDCbIOV-s`*~(oiEQc~JD=kHiHFrLr9#V$X$zz{Y`m!OK1gPMn`wUZj!Z!zqYx z OYB 0Jh4Nbjkll zCrsbnnBoYt4Bb}*K8VEsiJq;hb% SFN0S&SZ7o5NkVpKw}erP4%SGsk6=PJxmBM|rRmwePTUm&F&tP;EL> zhegbLp%_l;v}`cCM%*iVRH{>Y;r?`VR={cAgDoGRas;F(-V|{9vO|eMKSnv~!oEm_ z=3%+-fQEdu8eOd )tB2Buq0W{P8ITJkp z)bm9ScCtQrVDLrT@LTc8{D65yYO|K5wn&Z5Gf v#Sl*SIry5Wl6aYtlIF4oT&bd#$9v z*;nmFy_&Xx%8D8Wn%MKw$2=WdPhnt3(dS*{<&pS0N`OLG^ZTHQ(yt4f+I-0evLT-( zbtMA^xo|}JGR}>!%uyF$t6{G~Fh@VY&i0w{xo>_a77wU4)47$AzY4^AxeABiSFxLR zMbH=fZAX#nDPq^b4IfRnrFtw>0vG3^Ji*lcOMFs*8=Okw$G%b_?mH+#iHzqHF76S{ zV_q->@ZzHP&p~@0ET}TN6XtH^u}}&$;!>trt-ne;K7Cv)G$S_tcH!gt{kDa?OCIOA zoCz8AW4&EfQrVQPYNz;zQR~z(Hge;t3*+A4@s%1JqmilorLHNVL9m08T^js5!%}s` zmH^Bt4xq|kRVBa9iJYfs*Qi_I*EbnFzp5H%a5GRI#PzKLinWic3q&5IKF)QM*9$vv zukEdG5vljVQ{BKwxUMsid#+Iw%KGto6;(MbhDIotdoF9Yy5kZT4shyZWuLze8p0}( zt=xF|Qv6QbTxTIGdK$=PtT?83jksp88WepgM^wg^D^^hoo2x-O+WmXk1ehs>ETrC=E9&Ot6Z6YHe#L=Ed3 z%>bvV{>{8x_| CGBekh>FB@`- 2Q)s;!O)J-!E%6MeO32t?N|{U) zMhw+848dVOHs9KJ22|4*h^FENp~RD4{o#?v9nIjOYS#nN zTP8@@l?w{1VmK4Y9`l+rh#4Tvy*KJ%R+`{bZ?>P2YaqRqbIEDQL!ILf-USovpAtN} zwGG2d1Q2TZevUraNNdh4^30HEu~C5O7rh;Q9GIUV&d%pG5VC=Ey)frEG8RHC-Rxqv z%cy5``;q8wKkCQm!;c}o_dWVMb~wR>_miCFDvEbeBvGvIp<9P`ha(k%yP0Yw`_-SQ z-Y<<@ZKEM2Zx$HQ5Dfa8=!;P-(PV5AkD>os;XqVH$ErY!)x$>9@eLE?0}WGvYQX(G zj-7>KCBG%BpL80Kx4n|ntTs{Rw#%qG#QN0fO>+U=Z7v_=wgkA|wLIPa7a#mejF~kr zPPc8R+gg1sh}lN^;$5t_+J?jera2-zGg}+fbnDby+(G6Qi)Wd1*rUL$GeBW;h*<~L zDnml&z=$y3(%ySMT5ORWo!l661)d}#&u&%F3pDE9-Gibey>?cw6YQQ(mP>UVApP?p z)g9=2Q;c2Nr?`*V!_aAXtWbLr!l=Bm_O+$i8 *gZ<_J}H z+Umr7WVK$RLAWQSJd<7>ldAD3=krdy (2DUkVh934FGI@OP zgg;3dHUuin=B>|3N0Ut|FTE{LU1d_7t8xVKz9j>)y^SQQOdFh!DLhN&(NWB^`>lk# zq;0-V(nfx+S(1L^J89*#P0kEZPXC24lm=C)WkMG#pzfPX*dlFX54wuaa&zn|1#$QU zB!YK%55dl_qJcWG!3Eh`39i5W&0&nXxQ2@k?HXh@yaG$ Iwk=b!eP##MePoBKQNP8V=F~!3vwa3@VR=n+ zQNGI})*#$~_127yM_{gQkrOSdKh@(uC!rcikvG05$Yc5Hew6bCaI<}i=+tkXafBx< zz;0p%YB4d*+MkBp!o*yu)ZZ*MaIZMCrvU!*? k#io{4^wEJt-}S2msD zEe)PuI|K0Q%@2TM%l)^71FX&SYLi-j+yfRr_vVgt?RqF-j@4*HOuf+LikzX96|NE- z;Me&s!UoWn0rI8#G=&)=>2pD;Bo^}Q{`xdR?ovZN0cQilB4*dFTNL_+o=4{g#G `F`J!t#VzgRqRXAz!y9`S;`p#pt4nN#GGx)}H}D1ydI-OqN8E4yoY2(E z;sjCkRoKKqCyk2PgenOZ(y+WBc_Z0l zCq(aK?NhUvA T9}i)7oL8k_LuXej z0)HfkVUsr&VP80H*04Ca?9qVvJv`tl^A9kR1m1p#mv)`~^`K+`fXPzG#GeRaQVasE zaPm>3QC~Y)+gpq|eLqtFK+)1IK S70~lg8ZdkWHG>e zjaKZ~i_d&$Yow0ILmri%j@vlfNk%J-Y^qq8Kh-?))qdM^)gRjJ9bcMMaE~vCy4$f= zu5ozxFntZq`$#`k&a4GrdMaGV1VI}Oyn+6H&tZnN*jvkD8mP3TXnt}64}F$3{K5QX zccD&n*r^-+xR;@e9~YP%;ZPonaZJD5=%{YxW;plJA~rttkz)7T3^kHcBoRGeU=5mR zVa_namkM1UVIw+^)p~b^D;$k 49^3({JkV1>$hEb}!rH3TxcfnO(KHCqU;o6X_?d%O(tyU;;L}u* zEE#F(tQARIebnZKy?R^(%RD&cPr7wnKN3P@$FpHS6ax1_z4cwAgDRES?-yW8-CzfA z +Xz_MA zL1;J4vg)76Iv>!>0lKLkGwhTnBzbOff|lG5j&4pV(m<~7HR`%qc>pq`^J~Q`BJhz{ zL v31>QSv~&MC3yb-fbbed@PXvKKJRViRqi{vI@HJlxGDr!<>o0dGkyNV_0r zQbgr=7HIM1g&Wv50i^MZ*KdDnu`Pt&@>1a$jvS>+Ul(DYF;ymPrw_sMY&TYc=G6G( zWdFf