From 5b818bb31849c6e9e51478a7c006d364d95015be Mon Sep 17 00:00:00 2001 From: PanicTitan <66186142+PanicTitan@users.noreply.github.com> Date: Tue, 25 Aug 2026 14:14:58 -0300 Subject: [PATCH] [examples] New example models procedural decals (#6083) * [examples] Add models_procedural_decals A decal example that works on the web * Using raygui button --- examples/models/models_procedural_decals.c | 504 +++++++++++++++++++ examples/models/models_procedural_decals.png | Bin 0 -> 48764 bytes 2 files changed, 504 insertions(+) create mode 100644 examples/models/models_procedural_decals.c create mode 100644 examples/models/models_procedural_decals.png diff --git a/examples/models/models_procedural_decals.c b/examples/models/models_procedural_decals.c new file mode 100644 index 000000000..ee636acff --- /dev/null +++ b/examples/models/models_procedural_decals.c @@ -0,0 +1,504 @@ +/******************************************************************************************* +* +* raylib [models] example - procedural decals +* +* Example demonstrates projecting decals onto a 3D mesh surface by transforming the +* mesh's own triangles into the decal's local space and clipping them against a box, +* using only procedurally generated geometry and textures (no external resource files) +* +* NOTE: This is the same clip-space decal projection idea used by models_decals.c +* (in turn based on three.js' DecalGeometry), applied here to a generated mesh and +* generated textures instead of a loaded model, so the example is fully self-contained +* +* Example complexity rating: [★★★★] 4/4 +* +* Example originally created with raylib 6.0, last time updated with raylib 6.0 +* +* Example contributed by PanicTitan (@PanicTitan) and reviewed by Ramon Santamaria (@raysan5) +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2025 PanicTitan (@PanicTitan) +* +********************************************************************************************/ + +#include "raylib.h" +#define RAYGUI_IMPLEMENTATION +#include "raygui.h" +#include "raymath.h" + +#include // Required for: NULL +#include // Required for: memcpy() +#include // Required for: fabsf(), fminf() + +//-------------------------------------------------------------------------------------- +// Global Definitions +//-------------------------------------------------------------------------------------- +#define MAX_DECALS 256 + +//-------------------------------------------------------------------------------------- +// Types and Structures Definition +//-------------------------------------------------------------------------------------- + +// Growable triangle-soup buffer used while building a clipped decal mesh +typedef struct MeshBuilder { + int vertexCount; + int vertexCapacity; + Vector3 *vertices; + Vector2 *uvs; +} MeshBuilder; + +//------------------------------------------------------------------------------------ +// Module Functions Declaration +//------------------------------------------------------------------------------------ +static void AddTriangleToMeshBuilder(MeshBuilder *mb, Vector3 v0, Vector3 v1, Vector3 v2); +static void FreeMeshBuilder(MeshBuilder *mb); +static Mesh BuildMesh(MeshBuilder *mb); +static Vector3 ClipSegment(Vector3 v0, Vector3 v1, Vector3 p, float s); +static Mesh GenMeshDecal(Model model, Matrix projection, float decalSize, float decalOffset); + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + SetConfigFlags(FLAG_MSAA_4X_HINT); + InitWindow(screenWidth, screenHeight, "raylib [models] example - procedural decals"); + + Camera3D camera = { 0 }; + camera.position = (Vector3){ 0.0f, 2.5f, 5.0f }; + camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.projection = CAMERA_PERSPECTIVE; + + // Target model: a procedurally generated knot with a checkerboard skin + Model model = LoadModelFromMesh(GenMeshTorus(0.8f, 1.8f, 32, 64)); + + Image checkerImage = GenImageChecked(512, 512, 32, 32, LIGHTGRAY, GRAY); + Texture2D modelTexture = LoadTextureFromImage(checkerImage); + UnloadImage(checkerImage); + SetTextureFilter(modelTexture, TEXTURE_FILTER_BILINEAR); + model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = modelTexture; + + BoundingBox modelBBox = GetMeshBoundingBox(model.meshes[0]); + camera.target = Vector3Lerp(modelBBox.min, modelBBox.max, 0.5f); + + float modelSize = fminf(fminf(fabsf(modelBBox.max.x - modelBBox.min.x), + fabsf(modelBBox.max.y - modelBBox.min.y)), fabsf(modelBBox.max.z - modelBBox.min.z)); + + float decalSize = modelSize*0.35f; + float decalOffset = 0.01f; + + // Translucent cube previewing where the next decal will land + Model placementCube = LoadModelFromMesh(GenMeshCube(decalSize, decalSize, decalSize)); + placementCube.materials[0].maps[0].color = LIME; + + // Decal texture: a procedurally drawn target/bullseye, no image file needed + Image decalImage = GenImageColor(128, 128, BLANK); + ImageDrawCircle(&decalImage, 64, 64, 60, RED); + ImageDrawCircle(&decalImage, 64, 64, 45, WHITE); + ImageDrawCircle(&decalImage, 64, 64, 30, RED); + ImageDrawCircle(&decalImage, 64, 64, 15, YELLOW); + + Texture2D decalTexture = LoadTextureFromImage(decalImage); + UnloadImage(decalImage); + SetTextureFilter(decalTexture, TEXTURE_FILTER_BILINEAR); + + Material decalMaterial = LoadMaterialDefault(); + decalMaterial.maps[MATERIAL_MAP_DIFFUSE].texture = decalTexture; + decalMaterial.maps[MATERIAL_MAP_DIFFUSE].color = RAYWHITE; + + bool showModel = true; + Model decals[MAX_DECALS] = { 0 }; + int decalCount = 0; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) UpdateCamera(&camera, CAMERA_THIRD_PERSON); + + // Cast a ray from the mouse and keep the closest point it hits on the model + Ray ray = GetScreenToWorldRay(GetMousePosition(), camera); + RayCollision collision = { 0 }; + + if (GetRayCollisionBox(ray, modelBBox).hit && (decalCount < MAX_DECALS)) + { + for (int m = 0; m < model.meshCount; m++) + { + RayCollision meshHit = GetRayCollisionMesh(ray, model.meshes[m], model.transform); + if (meshHit.hit && (!collision.hit || (meshHit.distance < collision.distance))) collision = meshHit; + } + } + + // Project a new decal at the hit point, facing along the surface normal + if (collision.hit && IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && (decalCount < MAX_DECALS)) + { + Vector3 lookTarget = Vector3Add(collision.point, collision.normal); + Matrix splat = MatrixLookAt(collision.point, lookTarget, (Vector3){ 0.0f, 1.0f, 0.0f }); + splat = MatrixMultiply(splat, MatrixRotateZ(DEG2RAD*(float)GetRandomValue(-180, 180))); + + Mesh decalMesh = GenMeshDecal(model, splat, decalSize, decalOffset); + + if (decalMesh.vertexCount > 0) + { + decals[decalCount] = LoadModelFromMesh(decalMesh); + decals[decalCount].materials[0].maps[0] = decalMaterial.maps[0]; + decalCount++; + } + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + BeginMode3D(camera); + + if (showModel) DrawModel(model, Vector3Zero(), 1.0f, WHITE); + + for (int i = 0; i < decalCount; i++) DrawModel(decals[i], Vector3Zero(), 1.0f, WHITE); + + // Preview cube at the surface point currently under the mouse + if (collision.hit) + { + Vector3 lookTarget = Vector3Add(collision.point, collision.normal); + Matrix splat = MatrixLookAt(collision.point, lookTarget, (Vector3){ 0.0f, 1.0f, 0.0f }); + placementCube.transform = MatrixInvert(splat); + DrawModel(placementCube, Vector3Zero(), 1.0f, Fade(WHITE, 0.5f)); + } + + DrawGrid(10, 1.0f); + + EndMode3D(); + + // Vertex/triangle counts: base model vs total once decal geometry is added + int baseVertices = 0, baseTriangles = 0; + for (int i = 0; i < model.meshCount; i++) + { + baseVertices += model.meshes[i].vertexCount; + baseTriangles += model.meshes[i].triangleCount; + } + + int totalVertices = baseVertices, totalTriangles = baseTriangles; + for (int i = 0; i < decalCount; i++) + { + totalVertices += decals[i].meshes[0].vertexCount; + totalTriangles += decals[i].meshes[0].triangleCount; + } + + int statX = screenWidth - 280; + DrawText("Vertices", statX + 90, 10, 10, LIME); + DrawText("Triangles", statX + 180, 10, 10, LIME); + DrawText("Base Model", statX, 25, 10, LIME); + DrawText(TextFormat("%d", baseVertices), statX + 90, 25, 10, LIME); + DrawText(TextFormat("%d", baseTriangles), statX + 180, 25, 10, LIME); + DrawText("TOTAL", statX, 40, 10, LIME); + DrawText(TextFormat("%d", totalVertices), statX + 90, 40, 10, LIME); + DrawText(TextFormat("%d", totalTriangles), statX + 180, 40, 10, LIME); + + if (GuiButton((Rectangle){ 10, screenHeight - 80.0f, 100, 40 }, showModel ? "Hide Model" : "Show Model")) + showModel = !showModel; + + if (GuiButton((Rectangle){ 120, screenHeight - 80.0f, 100, 40 }, "Clear Decals")) + { + for (int i = 0; i < decalCount; i++) UnloadModel(decals[i]); + decalCount = 0; + } + + DrawText("Left click: place decal | Right drag: orbit camera", 10, screenHeight - 25, 10, DARKGRAY); + DrawFPS(10, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + for (int i = 0; i < decalCount; i++) UnloadModel(decals[i]); + + UnloadModel(placementCube); + UnloadTexture(decalTexture); + UnloadTexture(modelTexture); + UnloadModel(model); + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition +//---------------------------------------------------------------------------------- + +// Appends a triangle to a growable mesh builder buffer, growing it in fixed-size chunks +static void AddTriangleToMeshBuilder(MeshBuilder *mb, Vector3 v0, Vector3 v1, Vector3 v2) +{ + if (mb->vertexCapacity <= (mb->vertexCount + 3)) + { + int newVertexCapacity = (1 + (mb->vertexCapacity/256))*256; + Vector3 *newVertices = (Vector3 *)MemAlloc(newVertexCapacity*sizeof(Vector3)); + + if (mb->vertexCapacity > 0) + { + memcpy(newVertices, mb->vertices, mb->vertexCount*sizeof(Vector3)); + MemFree(mb->vertices); + } + + mb->vertices = newVertices; + mb->vertexCapacity = newVertexCapacity; + } + + int index = mb->vertexCount; + mb->vertexCount += 3; + + mb->vertices[index + 0] = v0; + mb->vertices[index + 1] = v1; + mb->vertices[index + 2] = v2; +} + +// Frees a mesh builder's backing buffers +static void FreeMeshBuilder(MeshBuilder *mb) +{ + if (mb->vertices != NULL) MemFree(mb->vertices); + if (mb->uvs != NULL) MemFree(mb->uvs); + *mb = (MeshBuilder){ 0 }; +} + +// Converts a mesh builder's triangle soup into a standard uploaded raylib Mesh +static Mesh BuildMesh(MeshBuilder *mb) +{ + Mesh outMesh = { 0 }; + + outMesh.vertexCount = mb->vertexCount; + outMesh.triangleCount = mb->vertexCount/3; + outMesh.vertices = (float *)MemAlloc(outMesh.vertexCount*3*sizeof(float)); + if (mb->uvs != NULL) outMesh.texcoords = (float *)MemAlloc(outMesh.vertexCount*2*sizeof(float)); + + for (int i = 0; i < mb->vertexCount; i++) + { + outMesh.vertices[3*i + 0] = mb->vertices[i].x; + outMesh.vertices[3*i + 1] = mb->vertices[i].y; + outMesh.vertices[3*i + 2] = mb->vertices[i].z; + + if (mb->uvs != NULL) + { + outMesh.texcoords[2*i + 0] = mb->uvs[i].x; + outMesh.texcoords[2*i + 1] = mb->uvs[i].y; + } + } + + UploadMesh(&outMesh, false); + + return outMesh; +} + +// Clips the segment [v0, v1] against the plane p.x = s, returning the intersection point +static Vector3 ClipSegment(Vector3 v0, Vector3 v1, Vector3 p, float s) +{ + float d0 = Vector3DotProduct(v0, p) - s; + float d1 = Vector3DotProduct(v1, p) - s; + float t = d0/(d0 - d1); + + return Vector3Lerp(v0, v1, t); +} + +// Builds a decal mesh: the model's triangles are transformed into the decal's local space +// (so the decal sits at the origin, facing +Z) and clipped against a decalSize-sided box, +// following the same clip-space projection idea used by engines' decal systems (and by +// three.js' DecalGeometry, which the technique is commonly traced back to). What's left +// after clipping becomes the decal's own small mesh, UV-mapped from its local coordinates +static Mesh GenMeshDecal(Model model, Matrix projection, float decalSize, float decalOffset) +{ + Matrix invProj = MatrixInvert(projection); + MeshBuilder meshBuilders[2] = { 0 }; + int mbIndex = 0; + + // Gather triangles that land anywhere near the decal box; this is a loose, cheap + // pre-filter meant to skip most of the model, the precise clip happens below + for (int meshIndex = 0; meshIndex < model.meshCount; meshIndex++) + { + Mesh mesh = model.meshes[meshIndex]; + + for (int tri = 0; tri < mesh.triangleCount; tri++) + { + Vector3 vertices[3] = { 0 }; + + if (mesh.indices == NULL) + { + for (int v = 0; v < 3; v++) + { + vertices[v] = (Vector3){ + mesh.vertices[3*3*tri + 3*v + 0], + mesh.vertices[3*3*tri + 3*v + 1], + mesh.vertices[3*3*tri + 3*v + 2] + }; + } + } + else + { + for (int v = 0; v < 3; v++) + { + int idx = mesh.indices[3*tri + v]; + vertices[v] = (Vector3){ + mesh.vertices[3*idx + 0], + mesh.vertices[3*idx + 1], + mesh.vertices[3*idx + 2] + }; + } + } + + int insideCount = 0; + for (int i = 0; i < 3; i++) + { + Vector3 v = Vector3Transform(vertices[i], projection); + if ((fabsf(v.x) < decalSize) || (fabsf(v.y) <= decalSize) || (fabsf(v.z) <= decalSize)) insideCount++; + vertices[i] = v; + } + + if (insideCount > 0) AddTriangleToMeshBuilder(&meshBuilders[mbIndex], vertices[0], vertices[1], vertices[2]); + } + } + + // Clip the surviving triangles against each of the decal box's 6 faces in turn + Vector3 planes[6] = { + { 1, 0, 0 }, { -1, 0, 0 }, + { 0, 1, 0 }, { 0, -1, 0 }, + { 0, 0, 1 }, { 0, 0, -1 } + }; + + for (int face = 0; face < 6; face++) + { + mbIndex = 1 - mbIndex; + + MeshBuilder *inMesh = &meshBuilders[1 - mbIndex]; + MeshBuilder *outMesh = &meshBuilders[mbIndex]; + + outMesh->vertexCount = 0; + float s = 0.5f*decalSize; + + for (int i = 0; i < inMesh->vertexCount; i += 3) + { + Vector3 nV1, nV2, nV3, nV4; + + float d1 = Vector3DotProduct(inMesh->vertices[i + 0], planes[face]) - s; + float d2 = Vector3DotProduct(inMesh->vertices[i + 1], planes[face]) - s; + float d3 = Vector3DotProduct(inMesh->vertices[i + 2], planes[face]) - s; + + int v1Out = (d1 > 0); + int v2Out = (d2 > 0); + int v3Out = (d3 > 0); + int total = v1Out + v2Out + v3Out; + + switch (total) + { + case 0: + // Whole triangle is inside this face, keep it as-is + AddTriangleToMeshBuilder(outMesh, inMesh->vertices[i], inMesh->vertices[i + 1], inMesh->vertices[i + 2]); + break; + case 1: + // One corner is outside; clip it off, turning the triangle into a quad + if (v1Out) + { + nV1 = inMesh->vertices[i + 1]; + nV2 = inMesh->vertices[i + 2]; + nV3 = ClipSegment(inMesh->vertices[i], nV1, planes[face], s); + nV4 = ClipSegment(inMesh->vertices[i], nV2, planes[face], s); + } + + if (v2Out) + { + nV1 = inMesh->vertices[i]; + nV2 = inMesh->vertices[i + 2]; + nV3 = ClipSegment(inMesh->vertices[i + 1], nV1, planes[face], s); + nV4 = ClipSegment(inMesh->vertices[i + 1], nV2, planes[face], s); + + AddTriangleToMeshBuilder(outMesh, nV3, nV2, nV1); + AddTriangleToMeshBuilder(outMesh, nV2, nV3, nV4); + break; + } + + if (v3Out) + { + nV1 = inMesh->vertices[i]; + nV2 = inMesh->vertices[i + 1]; + nV3 = ClipSegment(inMesh->vertices[i + 2], nV1, planes[face], s); + nV4 = ClipSegment(inMesh->vertices[i + 2], nV2, planes[face], s); + } + + AddTriangleToMeshBuilder(outMesh, nV1, nV2, nV3); + AddTriangleToMeshBuilder(outMesh, nV4, nV3, nV2); + break; + case 2: + // Two corners are outside; only the small corner near the surviving vertex remains + if (!v1Out) + { + nV1 = inMesh->vertices[i]; + nV2 = ClipSegment(nV1, inMesh->vertices[i + 1], planes[face], s); + nV3 = ClipSegment(nV1, inMesh->vertices[i + 2], planes[face], s); + AddTriangleToMeshBuilder(outMesh, nV1, nV2, nV3); + } + + if (!v2Out) + { + nV1 = inMesh->vertices[i + 1]; + nV2 = ClipSegment(nV1, inMesh->vertices[i + 2], planes[face], s); + nV3 = ClipSegment(nV1, inMesh->vertices[i], planes[face], s); + AddTriangleToMeshBuilder(outMesh, nV1, nV2, nV3); + } + + if (!v3Out) + { + nV1 = inMesh->vertices[i + 2]; + nV2 = ClipSegment(nV1, inMesh->vertices[i], planes[face], s); + nV3 = ClipSegment(nV1, inMesh->vertices[i + 1], planes[face], s); + AddTriangleToMeshBuilder(outMesh, nV1, nV2, nV3); + } + break; + default: + // All 3 corners are outside this face, the triangle is fully clipped away + break; + } + } + } + + MeshBuilder *finalMesh = &meshBuilders[mbIndex]; + Mesh decalMesh = { 0 }; + + if (finalMesh->vertexCount > 0) + { + finalMesh->uvs = (Vector2 *)MemAlloc(sizeof(Vector2)*finalMesh->vertexCount); + + for (int i = 0; i < finalMesh->vertexCount; i++) + { + // Clipped coordinates run roughly (-decalSize/2 .. decalSize/2); remap to (0..1) + finalMesh->uvs[i].x = (finalMesh->vertices[i].x/decalSize + 0.5f); + finalMesh->uvs[i].y = (finalMesh->vertices[i].y/decalSize + 0.5f); + + // Nudge slightly along the normal so the decal doesn't z-fight with the surface + finalMesh->vertices[i].z -= decalOffset; + finalMesh->vertices[i] = Vector3Transform(finalMesh->vertices[i], invProj); + } + + decalMesh = BuildMesh(finalMesh); + } + + FreeMeshBuilder(&meshBuilders[0]); + FreeMeshBuilder(&meshBuilders[1]); + + return decalMesh; +} diff --git a/examples/models/models_procedural_decals.png b/examples/models/models_procedural_decals.png new file mode 100644 index 0000000000000000000000000000000000000000..1d31a2b1c3de9a0a467c7d2f741320c8f4c502b7 GIT binary patch literal 48764 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̞ zfzjA%k>RI9jQ1~TC-vWFk-g0swae+`vDkpcQYBYj1njMi3=Evec%@=#+FI^eCmTx5 z9KJZbYju3r5OZ(e?jH?Rr|4Ml2|hTWjoon{UG(vs-;KZyP3reCtz_aCyj>)cfs$`?a>}nz{YT z?tKOg-*^RPFLW?(YL+UDL+a(Yl`ie{ZHQ#dFi`t zw?lbugVhAkw4}4-gx&fqCa;;J>R5NhOpf^9e2P85veEl*hI&h)OXJ0FA}YJw4>MM8 zlHc1gA*ac*&&8EGQz9qEIT3QUv6aH_nL6L%{M#cZX$ro%ZCOyngQ?jseeCXB1*!=R7qt~T|g$os#*9pJ= zFq8Y#?j><6IA>{IymBRF!Pkukn)mWB@ZRaYCflK$?DBGd$#rpiPZ`8C?Ac>eA=Yx??7ao& z*j8L-ob^+2>tgeO#ILV^>9!pyHt*avFVd&Qv7m^ZxqB7YQ9re<#-FMlrhIrKt5K6U z*Se+;H1)%vYddN3WNEWZ!71ws+wG1{Kks&X?t}}H z7iA}0JjA%QfZ?NC^)uz|j}BaAR4lvCzKuzIi#W@c9_B4Grw1HPdEfoXdh)9f66mpe#bY>%GB^3*t>?(kFnfaT04849|( zz7wxIZmwGJiFvl-;<*BCg1m0lsU0umPrkhBMYSaDLmz9~8~E;2e8~8po9rwZFf;oseJQqJP)t0{@z*S3HNj(=MG|Z~sj; z?MFaR_w{}251f0j-LkggYQrOT5&s3X)=P5s$z@IKdcRIUQ&W>Ipl)f(H)b)p#hVot z^ZLeACU5y`cRv^(hiXmy)WNvZ2fURd)qxu-FM7d3NaT(8;;=9p# zB_qeJ_l#LPl*}JFRC75b8cdPiB;UB%yv0i1hEtHorc!cBrEp2KwX*Wbv<~?@r#|c~ z=Q@0SX?DS@zfm!V58S=obUo)r;qe8vN(=r9EvR5Qs=lq(#@W)&@${J)jm!HL<$p1} z(h2^3BaxYznJsI&y0hgScmESky|xh*J=?q$9vV&ZJ0rEtSYdIm*BPZM6Cbz3EVe8! z41Y6j7QQlpd95zH?puZD5f={Ld%<9O$ALGru&|J4c~f5ltE?~AE{}p0X7grzmrv}d z_$Ighv**m8KmNZqXI7ThKKxyGx5U3YdyamneO$(N!B#<`aDr-%+b^CujrVwDzFp(# zvAN^IF1@h#<&QK+2Y2=6G}aAw_wa*8clf?mJ6>QGDtlv^@r`+k{X}-o6;s39(;eMj z%Ozd9lp&p(vUGCdbwu&rlgSA07HQ{wbK+!AFeO_$ac8YG}oSis>;exID zf;P>4*1`_kgPNtbou6kbJ!v1?*}9as7H)ITu@|&Gu5}bWeE#rpPcH6t3i53GW(hS_ z?bC}s`(bCgmS3s(lqHf&UTbeS)!esoZ`oU^!}S+*c=&`9yfP71djtUD-YIF)I|WyV7bq&Ig4`ujYdmN=nF{5=R-HiRJrT)CU zyt96?gsf{gC0@eqX05nf!fm?C;$>YI%ecSgSll_3dg48!r0i=o8owNmf1I?*pS`4> zBV*f>gU##@zA$)+^EeCqVZJB9KZ~*Q&kw^JU$?w!X_!`)_`1QMr@&yBI*T!*!uw{4 zwW|dm8sGWWZovC=4}W$-zgobR2$t5<8PA!kPs#C$d+fMS{8IFU+l9a_8+_L%B_;7F z*jza!7Z@1GR$N^C;q0>|Wp)mAtg>&pUN!KT*4O|0z_@<0<=?#=RWFw=wGQ3;S8s2} zg32D5Hx^eT<{qCT%b07Yp5D**;#t*&m67WH^HLa0pR`B)X}a_0(^Kycn~X1pDvm7*>3CSera)zJ2|< zf;TrdI_^Isu;mL^iIsH5H)h)f=jK=*{_y&`{;VT&_w2E0+qrnN!UP4$w=EC+iWYBH zym6RqXS3Orw5~Q6_LMD;9b+C>Z3%9(o#SRL|Kl?MTED$aH@UL*ByXPE+RD0zhkMJK z&O`yG3lmp^##gkow0L}cu4t<{{$o4aWH71l{80y%%iq`k(Es+hkMrouHT(7BjQ;E^ zY+tZh^5*}>s|COIB|gxsIHFMYhKJezq%&LCTz!_Wb+2YLg!Arh)%5#$J$!xRQ-|tF zD{9@jR}|JiKPTJv_;|l@LiPjxHWmKYH4S&V&e|^U6IpwwGgnjWum(f>fedw)awmzo zyo!1`ZC>sv0r^httdBAdOI0tD=9NEWdM)EQvuRJk-QSMgyX3dTGnp_qozA(C!;qoI zQlfM%A#xMbt>uhXT_U$*<*slk2e7kj(cvw5{4F8BxVF0K_l<-L&x*xDQ|H9}xYAUg zYp?uXo^4_4b%_~E4W_3Tw(dz{NSyF+{f82zeQR$WI1nD#aGCdvP|}X(AA(2nm*m;0 ztDbZ4o~;+R=LCb7|AG=$ulQ!gbB^EVHcX3aG`sY;h(CjkWy^ZjDg7@Wrd`lE;bAYx zEp~2$--(Rd?A527-!18F6U>r0cqmz83qSi?9*#8+EoSZ5kbdCe2gMlGzA`(GcEPo2 z_72r*9XIt2Bc>%ardc{{mR%qz9aU!MV90dqw^4}M;_Q31EyjX{Hy*~w^ym_x`;5wYDg1t*sQc8 zO-AAci$nRG2D5q1dI~Bjsv0>NrWuA-+)egh+|!*n+RtZ5Jmg!v&>-66g_XkMYDtdk zPK$Z7|0J5sYTMAxzc0B@}xKN~hp^m@Gl*w`K=7k$1?|%Jj zKF9Hpq?AKhLFZfx-z{-rTk|Wf{7JH4ad}h1 zbUvZmf=q8S8B6E9m}u_yy=g(4(V9lvE7!gmUl8mmbK)q!l8~#^=E%l&R%p#agIJRb zh2~OjEy)R6irs3omL7e>{-P`+Ncz(PRnG-81ukq7DC%=usuJHc?P!C+-p^(^lGg$( zbvdJdY|uFIkY}5Hx%>mZAfvXuENb^seoR>3clAvD`g@PIbVqtIEuZt^c|MQ7U0uo# zhX*qfvzGH-nB;sRGm?4YH;1xjD}@C!d4vA2zOrbX)*tx$TlobY4&Cny40)Iv_AE&& zapm~NAsaiX)qWxWwbV#vJLV>vDBD>(3)B}~R1I&*o^+3hqnu0 zjoo64`=+dW$!5y-{{H^+3|T4{jS?JWWiRBOU*LDbLCx{P8}=9HS`Y4#w5@uXHpfw= zE=inO`NNFV9Im+PcH=*_|Abb@HJ&tY+&-gT$@0a=T({{KrANqniX-Ig1>8{_0|-n!LyjSoD}Tf)`YDD_8vf@;KK z<*P@QuDVzt#jBn*)qcx7M#k7n?kl4mr8hhF7F{qBjM6uSv{Y{t1=!|Nf;ioOR<(X<|6r5VNCz zagLtj%gJJSj88Q$xK(87m@}Wf6`;KT@#p6+vN-;%OxTj^5Thr_yZoT6UrB6J>z+GZ zi6Rep8ZQ(iod|>8*eYtnqg8Q_!SeD=E4}GLE{onupMwgZxlX!8CebaJ> z&BE#D=cO+Awol=Lt@`3Vk6-+HtXJ>GCeEs1EeTWz$9hr9kouikMbz0%&iNAhw3J8=SIz;otpjPnx(n#AYi@bJvvARqYqyV*N$w#byFg}(*xZ1(B>-+oc_{A2}K;UWpK1zi!<*hFz0W49e^h98PUsD)U)V6-s%-Gg8E3NMyw^LO{-?stH+JJF&)3|3bdul!ta^+ILhukSfQf7p5a~F|Nran7qasT3p2M1znk1sH}`4skJ`D?^%wpnrc}&d zb@IbTC)V{=Zh3lhKE;dc9M;_K;x{F61M`Kt?&9a?4F9m`i7FpmyP#HO!8yjY{!?}r zJ>?2*E+`Re+4Df=ZHs_>-U;PDJc}C=I4&6NS#ga~Que62u4;dq_)E+BEuS5uW+6BMu7mU^%wBmNkv*7w-^7!g6 zyTI;;!CScwf9GAqQ$OG7TjC#s7>q%EF zp4zX{=I>Ntnst&vx14Eiifd2ve}?IE8o$*xq}jiCc+fcgT))e5!#s5#` zr5;nTSjxS8qP$m@WZfHUpUq2}-v8^Lf85`A&w0J0ncssR$SUwSb2MBs)u`ouFmozX zC3{H)^NVLiLFv94oLm8w3|itVMCY7%D*D22!bMThBkgZ8em8vyv5-nz(ki+2*58!* zO{TX#D(FvaF6k9pwnY8gMFVLYUDc{GJBNL2rX7yPiVN68Gd#JrO<*{y&>)q*pw0NO z0IPz1gMse!vkh+39o>bR4~fiVJ1f)p<3`iFIc-YKFTehdaQ=FJ?(Pa_X%p^GhfXxA z87h?(aK{zb=iEMPFo)qqip7N@od7HLrNTLN)n8wUGG{z%o;R0&g7v!C-Nzix@^Kv2 zP_Sl6Q2xERRPCcC22A6Q^IBkZ$j= zJvaEZM|8kJ=M0u-PO`CXT&6>q?n6<%eo1<)7zr6jVH>wwkG$+Ib$TV8XDERdEzRhP! zk~q@;{?N;~fafjNRxJ--Uos8pRI53?E-TkX4|HX@ewV#3>W<)KHk5XR6Yy?Ugiv4ZU zKOdUi`lw+0Cgbi!*4RF?3%ynsp5`ogs=8pNfUB!3TWILj#H;66&IUBRvsc{4%=Bsl z2PdatgO&6Xxkw)$204AN#0_s|H;2CbKYzc(KA(AK4@{ojby?%yBN?`PhjiM+)%;S9 zi=U{OcO;|fSG}Cwxeu?;u+DiUrqN-%fv-7)Icq_)*_`ISS<8;5Ha}sx*eh+m;u7P* zwC@>*Cw!4`jMFlXS}r7Cw|K7ksY_BG=7ukM-wUm|$Y%0$>y;O4*eeswrShgMw|sK5 z|8P6Maf6$?W^R6C-yPPshZ7`N7)qoBGAyS}nk00%fMtPdnz(*k3WMy@uCw(El&c-* zid^Uskd~Id+w`C^R=WA#;pY}_g>P@2*68UnL*u)^ZvB>t?cI(QCw17wEF~BH^*r%r z;l4jywhB|GPCfYB&Y{|c&AEZy%{{S`6sMq^M20!MC^i*FsSQNShYho zmiv=DXx;mX_yu48Y!G3b^|YbXitW|4l9S7{*w}2U9pf0kS9;93=N+Qt7U%Z$|L^j) z`R)D&4evfDY&T0!_`$vB$b^}Dgde#_J!js+&tjs@v1`qTgU#&Ci_#eH+B@~~acukR zwRp3_6Zel9HztagE#9p7q+QxWecwM8H};e*f*y5j^1Qn*ZjkN}V_186?!J9?hZ7hV z96P%V~|J3;fKctTT6M4{kcL86+ zhf9$>Yi1p}Uvlom$&&{jKI`bvHL{YwZAP`7O~&^1rIY$f2JF4d?P#WFXdZO=6MvQrlm zG`lMs-G9pId$Hzu%dx%D6~wmAA%B+T-|I6!^Stj~CHb%Zr`v_T?z2mI%94_J z7JOiBHP+Z8*`~oDYr!z<=YcXM*%uXY7tTI;;U3E060RS!<3K`Aj*swaclS@4+}AFC zP`3Z$mhQYlxJ)5<#&X};*A#Sh&l+%f@HbvOW}Lb*&E(Gt`MTr%^63n@UVDq5^D!?q zW?nGy`@w=Ex-YJ*{`~yB@q=3_+_%>7TJd(Yx3@RWo4sjeU|N&emF90%4b#>%q*XZl zYnaLX$y{4o`*6bR2u{xq<2%MzlLhXVi{uOZu_@_cERlIPUwV7s^oT%-g8hDTlPlgz zpZrk!*^jL)en01|G6lOCjyE0VGnRO&<~(B%S-0Se$rUT51zQ+i)jWtQPk9z4YRT#cLF#cSw9|hbjO7=!S=s$>m{!vu_36s3 z693mlf>$hAe!hNjaWM~Q>FbaG|Lw!H9Zzp8ILVuGQ&&;>@P_NhIu;23`~TzQhvfH) zY!`Y?ct`tp&H0mhNoRxQd!w!nv-J8F{^o7MuYBJuVAIXWoV|6cDYHgzbDBt-lP$-q zgyuWEQM205?_F?Mk}de&Qj?sIbIZ(k&FR>5L6+D4Rm=SslXN~En%J5sGC_oCF>m@Q z;WHT$m((sF{8k^3{6zT54apPU?1_pjvm_PD)YwbJnKD=;OoFTe)LjL;Zu-x+Yt#=? z`F6-+Le+(*c?;T}Cupy_nxrflrg75HMdy~ol*|9>|DI#8UfR_;e|qEHYeF4sC2qXc zk(9W3Q_{hFnem^0hd<V8}5ZEvy)UEup*!5`xZ{}^Naemp%b&K6MV)M=ftSz|%1 z!meGrcosKQDH`mO>E5(KCU%l*-H(TR*;7m=D?25Wtmi2WI-K#m`BT9W(Y6hI94|^_ zE(q~>GlE|{}t|Q*a`e&EVXlZ%Bfn`oMw@Ddi{n{2e;Rvx2|gQEN*xqAd#y+ zX0SCdw8QO2snRSWJYSI;9=d?>)S1ziUdzCkZ)T=T|KcGc1JU z`xeUz*d&_ny53xM^;*XB<~m=73rABHlsjYgRPEpCrD-)@q}Bx+`p-O)ij$O!Yr>U z0;-B6GM@Rw#?C!>>Cz-dli3ylnH*c@2wYKQlHKmzDeWLTq45j*iMKcWHYi{7U%+<; zG*{`y_!e9~&NXOjef;8{z@LYfyVzOWfApBmSUFkHeYwiY@XQC^lTUoFZBNYT4u4}ywS&5QbsWbsR&T$0Nnm#K8$#=8rA z`{{uzR`Jp5@BV1=rrRwzaV_zfjTivOe_0O(SEcT*iFfg}h&GoMCUZ z|CE`!<6C3TyVM1Fk0n!Xy;#Nn>2OI&KF7li(sLOP3b`$w%l}FwWwH1571#eMnfY2- zTQ}=Yoir&)VYxD+)X!822ZpHieXn=K2F+#7%4tk`1`n)z zJ8wm@UHQ3SS#9$}kK7AB3M(J7SY72a`@OOJeO%KmclQq~Ckr_~w2+#1h5PiynF4PT zEv=ZFMD!Lf{(5D#o4a)(v+%S9snQCw9lZk`HY+TMWC)6JdUvZb>xWp0qs$8xZ8j~Y z3$aogp2jS2lV$E@c%dg0@SL+`I{Vr;47#q2rORH}E_Pm7&+@fIV%jUkbBn8fKTvEw zv3NO8pZ+~#kAMH#6aS>EskQB%bB4#9r9vXk)7xM}XP3bTE{+3N3m+8-WPEF$wz+&k zGq1yP@5V=xBKNm+rC*rGKOuI*9v|Imhlk8ofqYZWORzCa5Kdcg_W6dzTRUT$EUbi` z_MVXC^?uc&T9lqw62>XGY_Y6BMg%B9g=h4(sUBXyuz-y{Hr>{AjHeoyUa6z>l zXc~R?Z^wW8OJ9pIuV8fUK4z`aS{6KAEhh(3}0$82cGy``no zL}tsIu4%G9GmIU?C7ZsrH9V3Q5x;Uyf5DfPt5$h!&fz%qc!3|s!s^nDrwjpd>f7cp z^2!BNJ2WMVOpsw(JXheA%B+j3kux5i*irxg-~YvxMc`d0FWL?~Jly`Uue`X}`QwSL z+1DjHWIwuG_dYLRS^SKrqStEeTNd4H#$LVP!*Unwgaewp?kS&A_1ZyXW$oBy| zOQt~2sY&2voHo%$*2F5v|89(-)I4V4c^mjT7B5zAV+O@P8~ehi{LGav6*4+SPV|1! zSnODB;=t=>YHHfGhIyyB374IK^2r5l`Wa#@C0tiC_8vRHz{Os5rfxy|R-O-L6*ng7 zcwN%ZFyp@RbHVkC`<W=qR=hF)^aItQPE+cEix_lco(ws z%NaCS@jvN{X|^(4Ao!#)>KN0lCI06)(+_Xm%#`J`dE-Xjj_(e~V`tBpF=4Nx?328J zdyBvCRbF7gJe8MOFk`{f2|wPj>ds_2TbHogy5+{xC5vT?Z?znFajfK3o3@Tk;_rU< zs9my!vH}sulS`BZzE1j;k>2;~D4XeFkt>XfCQdd1#tO`(-o`nV>??U^f#xUg>?}?{ z@S5|&L#8cvIDC899Z$EhSt&SdKf-_H4g0SBj;9}$l$3aI@m<&_dSPYpf|*kqIoy4H z&oXw}IZYR8O8c>*wCHX|^UPm?Hd4#3yl?5bVjvqRJKjeAfNv>{aP+dE;`L_x6%D zd5wBWX=!7D%_e*%#Z0ei8m4*hh1h)j@WFs5M4jb2kDP{oQ<}y~NwvkiX|I-VxM(2D z8=Td0pyNeDkKWEjzM|&07A~&aF-dyaw{PDnWSMu(5xBz1IQLQWx&j3&g#}B)7esb6 z=Bezj_}Ij_WunCW9Hxwwq8TSeb^C9qs>?W(_crL2Crd13C^=)Y?TgKXgN#M|8J=P* znj25cE{K#4c%Hlke;YHnMu{xVtEG%V)>g8I{LKFEz2fZs9e-G?M7eLy{o?g}Lv_8wPi_-wu33x=m)>36n|iC|UB-?}W-;xb z*}f)L3O>wWuH5qZpurIa+sir`m$l!teQ1neGn$cRKVdRw#x~|F8cc7s8}8=ViA)mA zu;gA5?Ago5_#%)0!akXR<7_SVb$?DUaCO_)|4ZQIiYd2hxYGQk@yp>eOf$WEPfIz< z_BUE>?Va+4;ntG%>(`%WxSh^YWV~-_B=gK`pb~`7-1aWRtV))f?6*q%*6%J!=uH(k zYrwTajA`*huh~afyq6!|>TA8mN@2siM;Q;DW}h**wNZMGsn|m0vW+{Xt|Tly#+tRH zjU!{`QHMMm^(XiI=i3?BChh=AQQgcy8Thk}73;+ss%hvf`!sg}Y)4 zRO=Ob&c;lrRj79SHo0ofM+Y6rMJhQCr`I{0?q$n<&iusu!X}@9nGS0&FYn-8|NHxU z;|a#i?5|Et3VvtU!!)b)K!$ot^@?DYvbbFwXT`BRF^w2 z=^kY2^=a-aUiw^?rTOnat_yDj-lV8r_}8_t=ssHpC-;fB3;we22-04W%zA4JU)B%) zFPn_&>gw18+TK29*vbAxZ^G{ny62g7<0nmk-fsn*c)|uQv#dmk-ERXOfyc`adL99>FVn4`0Y?`-S94J z2WVNw|NsBlYv;0BO%pHS(b?qecsj;muFr)}n-0EVyfBY5K&qv*&G8-UPU&qv?9aX( zEP121?*q%y;tOj;KIPt9P{ML5c|nPp#ABusO(l)9mwzQNPq1BZu6@xWCFY%{*)(lM zlC}st?G~}PGo6>WwwDtUbcJKJ+FEFkkRt&)IBt zLSEs2!?Zg*S6XK-VG%vCcfnql1y5^U{L+ivb%fzn3(vCP4HNEi%w}D9)qzn%e_?zN zm)CmciwEW3wp`f8Ai*1dtL#&o^Y8K#^O{(*W%~QhT~?deUuGxKX6g`E&b#W5Bd^Vc zX9ZER=GHU%yID=M9A~!{x>~GI%t=W(Vj!T-Dma_Naq+2Jw{Gz)aApNf5gSagmVZ&# zc9j2x(23RI>y3DxMVegbVSjPRD`zhMjQwoYe;U#pGXj4!eq(O5vUp*Bz1hzsS%USj z5lh0{2^U{1t>b7oRJNl1{e;&I4N}Jz_a@&;dw%i5(%M4LUW2x~j81*o8}Gj0-PI~_ zg>&JzBH4iDZE?%*Opp>=aCZBGbLpSb`yG0Vi;Iid*xA|HF68iL zcye!>IcMQL28;TCHaEBzm{dJDz}Plf-JfrlpIAm4e~CHkLR(&i$^iA04RXgEGV}#4 zGdWAH=)d^Da3S~Oi(eZ%1+&?gmN)j8O~{Nl>S;5~JuD%%Z-eB-g(27YSMr^Bv4;Ka z@`bI zPiG5w%6#ig?;EiTa?BTM^?44n957q1T+P0voHHcs?cLqe8Kcu@&5L6{d!j+=(2_Hs z8qMxDTPdEH{*iati$%{olNUr{*>50R9KC@d6%W6+a^CsUacWO(L;O_)Gs&>_~ zi|5!6cQ7odmH%PGW!1`YCDY-agLmG62C1kQ(w*$y3a?+iGMaGt2jf|j2ECci`vT|1 z)iJ%5Whk{NDJhZoaQ2pjloVh07M>_Mj$7u9r;QifYys8w4OU89_MPCHE$!fa7rbN1 zFOHFyiRaqwJ&tqPf~=nHc*K4skge2?BX%FhZi%UhB0RSRB;K}Mu*+({m2+aj`-Yx# zRTq}qNWHD$Ia{EXzSr!MaaOzwwg+RdG?Q0QFqE@q=!8q53_ z8c3aUHlK5H<&I9-wXAnjcwesJdg6ak6{K5|zUNtP8d@zxNZ!`N#Cu+^Xt}26INGuxVcGanZ6P@4hRjy>VoB zXqYyWcUy(h_kE%PR;;qqd0y2BRIie=d^u%Cqe#%9k}ZWk^F=JA&Mkh(!`w_nVC1eH#zW>Er3~I%bl)Cm$y5dJ|oelz#z-bYxS`!W_j}^xr|7$t=0z?*h(*m zl+2p{ifxy2%N;+vwTr~JuykM9!v4ymAx+#-J$ho%dI8JRdov14-e)|n*iv}LpyxnB z{3KJ*LJ9A6FQ)%;x0dHo=9{qFhPC84OUB9*Z*Omx?8w#NJvMp0iK(e%M&U!HjI(*k&nwwAHACzsHmSs8>3l0DJ9W27scvMOwNgM# zY+2-y=Dq{0rBWI*c^OMnVq#+@SG@EKXr6GR?MXsLbK^JJhr8XIL(H2lJ$!d}x8w<1 z9!9g*jI)+5Nd3`p$MVLz(~L`IIydQKU$j}>4$u0R z$eYz~z$0X!VFj8i0q-B;VvBa~mr{>z^pj>Pb#mCOcz=KWajD`dd2!3jiWp4ayew^J z&oOJc@|)M;^iqep;!!EA7d9D3-7WI>{oZ6Hw_uBFx518rhfK^Xm-}5Ty2dvubEmYcN5! z+43XkM4yL8I)zP2l~yqGMY*v?eQG(c6!42p_wJ&vYuL@q8>S`kF54S?W147Fnyrb6 ziG)LYLcnW|*d+gQP+_mf;%2S*rT5aoP39>Fz#;O*w_x#H+h5afDlgp3zH5WP7IT&@ zB`jqtrB-})JT2Ve(d&8P47=$&69skF#x!RK>63+L+Zz0MnBK}Ry#A(T_H5~^Mobz$ zD{lte+nmlHYow_$_ucL7{fs3^VrJZqo8{Q~fL<7+9&b#c?Y?43Dy$M#*2~t7tgV4 zusE2TT~<A%Cdu-s~SHhYRmV6RyVXeaQRmvgT1YG26VSn-h|Y93=& zN^r5V;m(t6CETAAJc~Bm6bMijH>qZ@GR;u9!xm+foRxK|;MbST9bXsp9y2pD3n@Q$ zykB0@;d_ySG|wjX%4FkRHnxXZt|+n`W!CV~u>3Y%ERXH(L1ru7+y$5QUu-MCuuyox zOqZbdixjWEU2yK~=JfMyp}K~*I2YEJ^t4&l9?vDrNzDLPPWE?R%04rB59;?x%{XIy>!CDn`4<6(-jqvL zAql6A9hC1Z5DX4*XSvqV_*QVC`vLhOP*_Ka&nx7li|a!$#gnJ(C8*2capPL{X)SG)DzX(<<%fI5x` z4H6PSJvA;i4VDkO`kZ~EBk!#l{qO6zFHF)2aAz>N)qC&4 zauchG={5y3S!eY!#zu71WLxcgr=h3kwvlb8b5dsJ$%cGMehuEnG`AJD%1lwemMvd? zoZ(h`v%Za^`{|}WW;q{r&4#oy4lkR+dW$c7(z9dNks z#%~peEJukg=1rG&dpjuKTF}S3G4s*g-Q_$B`~<4ln=YBK8uw4}W=J$vQuzLO*PBTZ z<&AmEkC#nn)%&}^TiS7Ma#qYO&$WLzX0bAsE?6;hzvJ?#gK0Jnh5kJ^7xbO-c-PQl z*22E7O_KL_a}>5J@XQuuG;LWS z*t{Sx>4IhqPcuuyw7nCnew&?mxga^hQKICc^a?}2Rpk!qF%zp^Fl@D!dy&_6cEtoC zxdlrT73vk{-*C-|Xz<$}6cC`Gt=e#h>sE{H1nDOeW%*vMX|}p{Wfp6rtN`PzN@dlC z7lkf{FI;Q!;GtB28*u#ITl_Yo@F=Ha~_)95|I1RX0TQ2Ab471!MA$?UDgVV zd+#^;?p^%QKB`JUnCXb#Mg?<|&d9pf(>WJ@)dURxA?3;#Z zERB9!m`X3Lh?HtDThn}o_2}aSjZ_C&feShu8gnNOZ^OY#d z=sI(obUX5Xc069tWU!)>4|>;yXY0m1z%Ts zF6cAOkQCRjW4GGiFgM^rt?CiE)^3~Ij%S(W9iCm<#O(CqTkVsI1>YKZmmK++pB$as75lx5o(yj}un3+GmJNnWpIWws+-%*@qlAODgcZ zYB(^h_d&EY->n^I4LBGw)E-@18(mV!nRAT8#Her2PdSma1#VVvnrttuOgQ1bbJ8xK z?rHNFOYJ7yWiC=bv3J3awx5iD!)h-)t@&cLN%Tr2^G*NPkuFJxB(~^t#Iv)QWOK}Z zyWr|x`z>~T;$`OChXoiG_ddAj$8ng0ZHnGWrInyk%J73`t_h!n+d&0x#;E&!Jg@FF z7_4~6I$P8+Kc>-aUh_0H-nIohi=J}box^Cgk@L3i%?$?3a~WFSNdzRzm&m+J@N`>n zQ|5`ST=}~@i42J~@0jP#V~g6w{>k3<42K;GE!^$^Sqr z-q|@bG{x6`{+r=wFU54Eg<*{_N09X{{gi}DJUa^yM8wDcpD&?qZDC=+vy8V=*)Y5B z*ue)KUk{4#&zm>Tg_TR!eUGE}{0*ihnWEAE|Nl>Sh>K&|wViQ`3H$A*MPK|3kKEbm zsB7N%ZjC~zCXa?}gVgWieX_|5zHYKf`paqclIw|FlKCv<+1#J(HDq20p8v9Mt?cyq z3E#IiSV?W*v$XYF?o`IV(p`G8l>L!u;ahfjcZ7WJyLOhRnW^X4;REi>nuQ0N-l|2X z=qvQ^=>Mk2u2+=kT?dM2;~NRx>_vSQOUpPeRjW*yI8m@>p-e`tT~1ibmEN6OJX{xW z-@TA;wLCP7_2=9>=h#p9E>Nvp@YiTcj??i{VJpo#H^2QG&IxMHO}%hW{Kj6REqam; z#}%8?;v7EOOjs(g;xO+lMW);<%f9r96#aGVJ^SVghqKdL@v7sOGya}2&^VA`!_!-l zaOnA&i*D~9bR4<(S8nmg0|p%j9rTVe+~nOA@b<^Y$2Oa_?k`ZRd;^E)BnNhr?do7?k`BGv0qxZbtmGBSFIM?W9u{CZaXLW4?O;PI$Qd<{n2$0Ver(vxY;@~|tc>c3 z44a;5PnvC6*s3mTyfHEjSj=If1nMHSHM8>@HGE5IxOV#T;zF*ddjIvQ26}pWD(ajU z)-Yuxn|mnd{O8FyDcoT%FjpYrIkVYq#%R0p_xEhsX6*L(_+*}K^@~Zq4&@;es-ApV z{{6kA-Q3+L6gKASH($B7m#6OZcB2>T@1IlHlPu4Cdf#E5_v_-)E2=-6F=t%^3uX_-t$uTr%`dQ><~fn^)5aKzZMmn|VxO>Q z9|^pC7PLauTR=ima$*kuisF_#E83@iJi&I*ie-!4HIZvK9p9%keEV>~N?AdwM4e}4 zx#Jw`^1jA79~4a;9G90pv`U&;{@s!7`}O&fH~v4qAGPxHTlwa5+wBEb&#!N|ke-)d z@l;=#`S8Un9&EnZ+9H-0I1?7!+~4?$gXh`oQ|z10w3zO2o6f*nbJkQ!ym|50hC7^& z=fyRQ6&8E1WAiW0-}2c|O5AzjXTyjz`wy+68Eh;j-b_*RSZ7HxKGnStD|97mPovc0 zFA;pqStU(w4?2Ct7c5S8?5&JZ{&u2THz6m$J>~bew;}#j+TrU`4qW?r!1OlbtD1%< z9+vkcO_*EP8hhoQZ^--O&VTvE(%F&@H{M@WZ<@;=bmuV7o8vdmMx9fTn$LaA+;3h> zw)~682^Ui%ZX_3#e5w6#C1!Dyvao@SJ$D=J|pjOo;*NEF~rSFCH0R5K;(87QeDX=@z^9S zVt&-uc#qv^!c)104Dz{OjCiyRq~x2`trAXeaLA2ydoblI=)MvSr-Ut^4R;7V3h3ld zlB!uElk4TB)8MvZWi7YW#&6ALbDF1xUR1u?U=_7srqG3n>lOYV`nGqDUF|H!+AH(K z-W}W;!ddc3?9H~~oNr3^MVscaC8RZdTMu3Yy-R4tT5z#+ zhU9|35(}z59DXx8Y&KkA`f-6R$CZ8ROlGtAU%hCMy3>-zFySx9Zf%zMX1*;erLHJ4 zOm*Cnv!nSA>#LfEjGEcs5;q$y;8WY@&E_b5)luT+{^#fCv&RQ{zKs+JNPq1bE8To> za=41BVp^dg+r!k&5;K1Ml#rNVz(4oT|EJo_%IfTg&tHCi(Ad$QPbT#T|D3CT_7zHd zerxzPzlLqre$7j>^NyZyIN!k2`l+boNo~Q=OBpph>wbU^x@!6%@wUdGr%6$YDJLg~ z`B_ob8Jh>6Wim|W&rptZRA+0n(lFqO`oy~HIHO3}f|(*EQh!4X1D-SPeC*uKp#EH} zsOYZa>YEl5svVABJ#?q_tlWjC-3wGpPe_RUTX0U9XR*AN0-KG~^{;=;7wtKdmUTqI zWOKj9)*hQX38inu)DmW$mD%*Xb^pE|#w(VU(}Pca_Cz<^R*@CX zjEA1&+*p3>Wz-R~AC7YcE^Iuy;J13lL?(x4lOBnAS!*p|X1#Ej-()i5?eETO+&Ljhnz?Lj)U%7ZOF(5SbXop$Q9S^TL&C{j@D)-KKZ`XBQLM$?qt+SYY#jT$X+b5{o z3FWk(xYg=X`SSM3&5J{SD{wJBxm@q2oL10sAY%?sjZIIP1DgV$L+_o7ZSNjvx3y=@ zv8niw;J{S8Kwm-Tgh{CKuXp+F)Ej^8%ArkBVojF~eInVb0pP$AGt_`zhNgdXZ;APBeVOZz=$<2BCH${V8 z>@9sOb4soye@J_|P{w@0V-0cLs3Q$~7^llA+D?$2&=}Lin$>gp@O%BZJqngmj=aWC zE+$^!jGB^{z<#!5VSEz@SN(;h_0P}EO=ie-TjpA$uv_{HC*#lVD{aeLT3DE0wCERo zI$WRN?)dU~{G6!Hmo+ufTjxD|K5?=`P16EliO5LF3TN3~7=c8}-3 zef`laGvg1lgreTFOLp*ateA88>eW<cX?An6e4Qhs_ng^IZ|rnPAVJ^+Z%eZNcUBFDA~Cx3BY=WV&D`@0X>TFT_6u zzMc_#qwN>yEcJlZpBwEiH{L5`(lu2nHFF6IoAzc!QAG1^jhKa&!kn{yA3D+aF!;F3 zA}e`?!~g#OJNsef%Gr!d_*?etMR{J}o2a^(W7W@JKaI~$($<}p@X)$~@ybteQP~;Y z;wwcv7JF}$VAGZ8mHy>+HiNx|@1gCjp9vDIB^-^y>IMCqCT(hIi&)Ngh3ABW{{BVb z>@4x^LbiPcr8*}pE3-GGgvH282U#h`#KfdjyFU|uH~ZYpo-ZF~aldj1km{SS?vq|I zKayvkILq|NGY5D-{CT^zV(qW54+PIHnj*%`xIndLhfGdlqG8nZo;C(w=Y%c7PWxHR zZZR$_jOZ`3V=K?Job!nNio}7fciJYkNvxBQdE3C#x5f9(8aBJqFLzopGc!AlA9TEp z3D~6Haw#JD$+IKbET&fS2HbT_{+p{ZpB_B$LA*S@<}_AHEaTI$Nq5`J9T zWH#%rVpT>Vh zXicM4CA-Lq1#ANB?CfV3Pn}`y=OD|KWF^1h_VJIFzYe$amw2x_vgGLH<^IAY{40c= zeB4_)J9k~3^W))Li@R*Q);EhW{ycPrbN$9Q7r1#gYJRHv+L>19-MyzHw=LM!wbd~= zcygjeBiKP_FaB6q3wDsmvBh)y5614`+5Uqu*QLGn$KLAi5}-3d7B3@lC@8C7F$`JTDfx#t5b*Cm(h=6~}jBl3~`{zYE;gv6X6h?0hP>MDG4wRT~?d z63w1}wf~$xY;t&bb-Lsczd3Bl4^5{_R%pu^Y*-;&e)!k%U1f9r3B1TVq{(iT`Rw-f z^(LImQD+(y%G(^9Wfm-+Gj+<82k+!pNnhCLdLTo&ykNVq+vE0aAB}G@E_D3SR|aa8 zF|;25tqIhN*>Qj&`kX_ztpf8_8K#m~mmFC2b*F7g{LEeSTu^QO^5yLBDki*Y1F!7& zTYX40t@``BrPT$GUJFP{N*eCiwQJH7wHtR;pP!$9{DS-Xl3y#=@h+cjIp=<}wd|Qq z_7AdVq}CY}u=Bt7dCnN=`boMhHW&9+hV`*twaGbehiO$NMub-Zt&a)u6)nR$)L#egP zT$P2M_!YSwcifz%q@={t)6>KAB<3536)&HOa#PJ0y{*#|9(FayU(b8cBe(CGHOu0@ z(C^&MC;C3~^u+Aw|M$1_p^;y4MYmDGsai4Nqy?-A$;pd5cRD#aJxD(4XmZ$qeKGHy zgYpL#7rM;0kb2t?U>M_WE#JIfK{B(DMaq|@)M=i5z2Dapk}LR5IGk&^u$q}^S2L5z zWyV>W7cN{-uzsf(w}<2U?)>|9lg=6%7%b?zdqnEdla?E=9Zm+#1|8?pV5PL+sm+3O zJhooT>et^-+}h^(M%?q-=k1T*t*Kd)cQEtX`M<{tPIcPXdQMhY;L6T&@8l2R^Z~K*@VSG`Qmi_c((jUOP&dCQZ8g`5&OP!fx7gC zT5$!QTdy5GCmq`6`1{Sx%^Ge(w~pwlskvil9_e2AB^6Zjk z{aYtel@=;CQ(h(Vcv@fe*p@;V+m2)dEGB%dl zIQ*W%arc(}9J2+B-A`mZF3Z@W?Dn{`>f@0^23#6kjTg@yzu@7p_~VfSA6{M6X1mZ~ zwnCZdmj8!GN4ePq)XMuo?qnRa^YinS*Hy8+J-eX9pYcVD(FMbkKbZJa_$?c`XFWVn-lBiT zCqTXBo-yN%Kg_oZ{8oHsyu|Lce!&**S0)pr^maVrPLazgdkQ`E&CRf?d$X$Zvu}$f zuKl$s>uS7vipP1*-Ahv*{`NcLcWJqsDjVPV?Jm~8|EH(T$+{_fOY~_9&k}~0Dvr2t& zppiLZYT)A+&-&%d}=$d8uAS-+mr+***2zk+Nfs>em}j z$p`#wvU%M2PSVb9-^E?2CM<0}90#oA7Uw#BT9i}5&(ZnNY}SRgu$LB>9(7-^6NuT! z{<@>VZ@!_SVIsrYne4p+lZ_8~o)$5>AS;k$9lO9*X2D*Wc0O6A`NvA0oDgISvXWn5 zz#==>+bd$yC5!gnKh4uFG~76K>XbxSG0b+q1xue-NUAHzSl2szwpAYdEwP_621DL9%YxXwX_sSzpdd}>y&7+&!b=e z!b{@?ystL+zFOdBoFO9J;^;nW(yfkVWnGeMmOpNowzzScX`@uklsESs`1CInX%!Ye zlA5#R9M6K|+$)%w4u!9aNo42^XnwM?u-W31k?n+?3ZFH7g%_M--1zV4){S!|%pXYK z{a^Z#i+T1wzBWT4_3s9I49X8?{mG6N-mv4q7HOUww;9rx_pcR7|8YsZ{c`4^?&Xim zzTL04czTZO)1|c!*v=L;7_3;ska)v&1<&G!Cjt_&U8Y-v&Sun1l#5?1E1+~ZXN#eA zR5MSz07LJp$wpc{SuIT)wrnwBUSZgIN0QOh;6$XFOQuDWR2%cgKip69X6#*Xu{xr? zIjmRb!qTcEEut&u^4Bc)dimmoL4&~yCHt&5<%~x~GgxGPCOPEPG5u_ua(SIYmZSL& z;ax6)At6&1J^7Z9W!>ylrrIX?-na|A6VYV$)PkwM6ub9S$3|>5E&TPgb)~T1&iHfN zOf+{nY@WD4d7on{)0)eSQTsg4u})E7pJWw%)PT#)Ibi~LaorXU$+ryxf^neYHT+!f z6ANbD!>``HJt~#C;J50DwJ#h`Z*(}l$wA`E2WC^7cXxIkX0VdvD!C-^;*o)X@9Wf{ z1(5<#cklJ;UI5=xk$u_m%S_{R35S2n-1`_xe>h}6cRc;L;HLY_GwgcBPoF+LczTJ0 zEQhA1=7*P=N6el%zH-Q9S;D_$epp^fSy`Gz#RmoEb%zBU9=g30a>|og?*8}x&+dn} zXZiBPDAq|ha@>*!ZEs!W*|L9c*#Yjv3!h8^{j1_{57x=MdFdM(PQ+MNq znFr4`3&;0U8m!b8D2K01HD4(!FfW!}@<>Ck+sgU-C7;y)JNmlEJmw8g`rI`VERD+N zx}sJrKDT8@pxpdqhs`=SzNI%e5IxI*}o zp5g3=*N?6iQLhATjrA)}pYv=_ug^hE^V8=iHqLetZ}_CQt%m2+;S_Lx1qy zrm7{c8h<3T>F;lF=QqBXAFQ8opQVbOMP#3QzueMHm-+Vfa_fI?;8QR(=2;+p?)%%@ z?#ADvA|nkOKG{|!OPDY_^Lm%wiIv>9{@$?zKY#PL6~?EXNq=zC<49KTg+D8K{_n3z ztjK)syv_K?x4eV|A&~#F-(1M%10qo3X z-JU*sf;N9XXu$QM?LbCz*$dSP7cG=!(ih7L$RwKFnjpJYu&s#WL3Ep|Z$0Nji&Y{w z`7UT!Ww^-RkK>Gvj%K^y`(VL2u6=Dn9(-Fun6EfEz29;tYSW~HKR-y$a-Dtn(AI>_ z@*9nfbBZ^nJrI4cyi$lUH-p{uOG0^B!;J--I%T>Yr~edO&A(UJv(w#k=1-+`F_tH0 z0jd12Ob&iK+i-~cCzF$x@~f~|#pb$P^ESiyG~FXN85uRxSo9t;oo)NWQr2<*dAPt^ z9dSebR0V zGZ=g>QOQo>yR39lXJie69)tC5aO z{2h?6Z?9pgSo7PJr+GG&cx@{>pc*3?&EJ@7t#IJrhbyC(gmq}CR$Q%xKlw*7OeTMnm=5N&;emUt0+qWLcRNcLn_0hWt z|Nl$wdw=izhvM&yZSvLph6deSh7D#jijTH1`yaogeCy`=7^aV_M1{nTY4N|R30N%b zbXNFdhvbO_iH8YW46RLs4`l3l*th*+wZnx&X=BgDU+zC&?oz1brx$;2 zze+23p1i>3$%lvR&R;H_<(YpjZoy1p2j#O1_A1 zZgu{ZHhixVjC+`x6dAJ5^s!yNz}0xM;xM@QUs52Md!$b+`>-a-MTroIMdf9aC zA)zabJGZ1-H)qu7H6NQCo)UTZ#MzSvUUKeP&sgDYGP{qBd2@?|>$$UgKF&BOx5K|d ztd8w2gWt=wPZn(bdt}$!OG~{&zO!jgmwIG%wJXBC(e0Vz@~Ib<^gfurah%)a|Mu?| zU8jc4>Md6CznyF|<9aT>R@rg!Y53yOPX(Nyeo>lFpWeZywv!pplV7BLzPLl#_ML7q8pdXBo?cF`lOvy`|yf!w+jE~B}a`7ygdyHDs~weEV_I7!2PJ^OtBY1=4one z>rY=d_`{+%@n>n@4z`_V*6-(ezwUm5z@;k-qSBn~wsMu!7_HpCxLL;O)L$uuuN$0M zS41jJsFG*jS?%cXka^bu!6#)!XBD2j-@DI`=iKa#`K$hKt5Rm>;QnG_TwoFS{a{`9DCmhzD=Hg>_8pYs;koRJmgio3^ji-E^#X~*UB!izsQURFr+*my!# z@{oc_y3h@oHL{{QY)|IxKD%IBrub1wE|bTN_X;muyQX$C#!LT^^odE0bCmnn$GO^m z1Klt3Ez`G3v61KcuB;DiXWJ)5v0d;v`agcZCf^}*Mb3oHpyP|#b{nq{y7+T}+nlCv z69ct#d-V1z*{Zm^UzTjsX*epov%S-RN7-PJwZevD+8U0aL11yF#dG-&1-4~NioJN2 zl;vu%^YvTLxql0ycTPR{=`#PGbI(rtF_ueIbZ=TYYo6ojtqyY~%eaM`p3SQJck;u# zm&Tjkh6e{HZ`ii&*ad#8pWe>RTW*S8IQC{?)RsoGDU%<4lQz#w*gHia#IGSQd3l;e zM_0G;8{PuNj3?gQ;RVkh`erB{p8oQ4N7pT-`7xykUy119{cOL!w<&m+#ErFQGNe{FU9OVY_x{f54;wd0uD9LEe$Ggzcbd{o-35K@ z`~J!;IQ`YZyC>oJ*+-ihO8&F0uYX~FqWy;%vBy=VIcEKQ{;sx7U%{qYFh*BdT-{*rETat> zD~$i_ESvlA_&(*7ow@5;`I_U?te9;XUnu#sL2h$*2;}Jbq8h1O#FheT40!imv{13* zD?Hm2v%hX`7H8wEa=nD&kaw-t6?e6^l`EgMmN#H;$Xm*GwoQO*&-d$j6GZkcPz^tl zW5#|qOQ3kw6obCxh>w=9uC0wW(Uu7b4fQmeJ!3E1|9^jz6-o+~P9$B}r+#6QPL|oc z(wMoDac5>bgw6Q-|J&S$$LBfo#4kIew)^u&lUvgrZ}#m|pVQd)VQHAs#Vc2iWL!fyA+daO`+_8|yzJE@_kKavOgtu~(Iu)I}ucqbW zkm&x(t(?z}VLstEp>>LkrO!DdouY5g9&kxSMn<*;Iz)2xlsUE4aY?N#v{*DPq1P&%$n!)KH76YdYz;9nsf7PyA!`9+^gWT z`p9u#b@C1-t}7>|Pnd9E0^863pP!#sS#EtHtu(-SmX!2@MBbvr%F4E-4m?FYvL8Is zA|I^GxN=4yKXRtTv{$PQIaaSWDo~KrX;QB>yuk1v`js2+YqxZJ3AckBJdG1~$YdWm z16ml^=H4gQ>;CGP^42uR8#iubOgivL{?WXt4?O)75}rIckgcB~tiSIZyWZLT`f;rJ zO#e1MSE#EuG&U}1{q;CRx$>V@nB@f_tqVG=s&iQ{2x;f^niiSQTRdOEwVUJWrAtbu zBXY_oH<+zF+;>Oyc)$g>tP5|rRK2?#%BLmVo=~fCr907c3jg8y2TPk3d^{ucCX1%c zc$j;7gYp^aJ3k%FxVNPA-!s4S|JT=UEzjhVZ_QPfIVEB(i4hGG#rl<#*iyD!w6ZaJ zo?#PYFX#B%VZ~JehTZ_-;&v9x^7@3&mMfT>v|Z}r_aFUWX4U(M;demT`2%_BClxxL zi{*qlKe#0Q;4l9Toy&i|^fK1=ImO1#b(FIT@>|L5czXMc#<>bNbYHr;xur;Zo=x@K zA;ajU{3NcVV~?Wjll$T8;{sKkWkBl?O`6?baV9IA{;2Do#8PHA%~jEF8PnU)pByEd zKb+moGtvKEV(ITlIkUFKQKxtgtzti@$zqS4!Y#APk36{b|DXZa39iPA z)@p6;ha^2eTD$?Rjk@-5qNe-fiJvN#d^OUMl$2!4G7Gr(@a7R+lg<434FQWkGj4wH zeBt8-!9Ka7+mGAFkrOma%v$XxAshL4gI=jC8!r z4ks0-JY&5xd&f8{dChQ1+ZTP4k73hn}8Z z+xqzZlb)7l#b0YbFZjf4mZR*B{QLV119pFId=nNhmvOeQlE{Pwe1ew0{V$wds^WWL zH?z~)-}Y|P<9ow=7ArQ`v$!29T9bI2QSxmK&-^#GQq!+=d*`@+3i@mjci~w^%{tZ8 zpQ5Mh->5yb{`e}G{hxAR=uGR%hV;AgI)Q{hH zWOeTqYhQ^KJRUPwDyEnkE>8?xyqUF_ecRLU#hc}?cq%OZ?I_X4EAg)IB!|tU5B8v` zrbh5xZdeFLs}=_3f>U)7r4DZHr`yB#N%s2RI+C8Buitj?$}VfB`+IqhoNK7DtDUF# zSnS)^XA2hROEyTazi9j6|MmQ~>0;|5n0uDLP-G65D4ad5KK4Q4j|q)`n@k!xb9rRS z!X(Q6{QlGWaOz(Eu-)wy*nKF@!0UzPl>phxh8g* z((`Y8YkG5gd%xDSRV!8m(I?=k3G zs-y)QWL!4Wuy3@|zG0=rym7i?V4$F~kAp1#g`*7%y2P#=P!q|hsi^^7VqK#BqwfE| zvjra>IDYWV|6%3!r9i-NbJUfR<8!UcS0v4uJXyHSa`9&QE#8KpqrDSZ6Fzckoo{bG z-d4lTaxH+>mFKXAgqWhit)CJzGE|D*jv_epaXoa55SZ+v&T;@g{>3pBNtELkFP=ImKXhg6G| z>MJL1UN~2%zxmGcB}<{j%Gk>)m z$WTwISZWba!#CYR_7Z4Q@vDqLJ1M3o?F`!@C$RI&1*m#x%Fg`v`LlXh`GZ#}4I;*z ziTn3IJg#>sP50m4^rMn&I;XlKp6)wy%@Zt04$+@g6j2+e&F_d(woYA}BBY)!Wm0cl| zBJ3|ze`~&wnQ&xRw4)=V^UD`+Kr3W;8867msd^)^OQ7XQjX|}4o(Z>5P52_q!zwCQIZ0&Ka<1*52UpZKHXa4&5 zm_77NYitrn){*8kVF&Zo#RUZcch4$(Z~EpNv!`NW;`euVA9xF|H05TVCAi>t4ok*O ziEYWt9OnuJxU-Z9s@oRn?|swwvo-2?Nwd|Q6Azu&N`|)uIvB9Hr8~BzD@nfkXr+?x zB%iy4@BA4Psr6s_umAZ|!}djZqr>bR$M3oUkEG1Z%-8~)#jbo%Dg7yWA}-Hn_O8O6 z-OM)_e{M>!410NgZ5Pj;tKU06U7F8+<9kkls>{P`|M`C>HU)k96w)7(l_%AHwyr_y zFY&KO*sGDGU<4euYPpw&r%(HqK zVpnk9TJG2#!xA;CCI7L_3BL=Su?xU~$NQ!l^9eut& ze!s>xzUa!NjEoZoTrb3#HXM8PqUh_xsju3K_VDfGJCUJWy5)o%FXO8=h73)yBK0RH zCMxq>v6v)o@~HCVCDm2#*SGiHme}!Uufdtrzyo{ly!@Re*e3s*Rnq1AgZt(mPaP6j zUcJ+qdBdrPufF^_QWzz!%II`dschW9ln{M<@BXL(&k*;A^T&8>-`CSYbT}@O^X*4ma326du&yYwN1y0 z1AjIKcRcLf&bY)mDf!R`Jumk4cK3{AWM}{1@xJh>>5{l)i7kRNZmEY)ytQJPtCs3B ziNv5ctff_szav&W4FlbH?A14wP1n}Q%#3aR2iMFBZEfw#YZn|SSLayS=P=(_cJ5z^ z8=va72piqvl+;l)PysDOzH;##`(cd*)f_x+r;jhIj7a?YJ-a_(&O^n*cMQz4I~lJY z@-BJpH79NFx5In&pV)nHG0a*spZ#q%L+-t0X-o-8QZ}yk8Rt1n|FUI0C@L-v&QZyb z7v3s$dV#f{gR#=LZ{K(poPD!EQYc7=)Sy7tbBfD72Ph`ohWhC33>v>hD2Elf16|`209>U(@=J`X<>-%<-;_N8gFhGN0KP zDfBzFy#C#tR(w|nVVr+$+zS!X41Tj zx7rT`ylmll#djj(d2&Vi)r&u5Yd&&It#mCDRh^x&zyAL@hNx4FyY9{sn(t?Lplf~&iE@!OUz`%APhohajvNy1CUK*PjbL^aF`#HT2X?{N?T=W=pO_!vG<*_eE zI)!=uf7JP`WFC`QI#Jg0-NLJO%oje{7ae9V=`q>*E$=}QbH+*ujr@qnNW&ASP8mIz zrOO~I=J0-Tx#RX{pzSw}lMGzqi`aJkPTlg+vcf5$L@cFZ`LTrp`E%HNUm*xw9qqt-afGJ)?17Sb;ms9m$QG zQxXym*8Y&+-OI`xA1b)y@uQUP%P}$1=N+Y%RWB;5a5#Q=QgMmi3ybiqUKjpvdtAC7 z7dy_4&&|!9w3lzzLWWX~7ousPLkeZ(F61!2NMQIP>Fo7w!Gy={;Poqy`}i(QGEVvZ z_RSl&?k|pFp!H!7=c=$*|KU58Tmf1k^Ylvw2Tu&g0{PS2QEo0TFL5d>D|hvIu+Hre z-78Y<{x~>W|M2?B=@Klvq&V4T9cU@*ViqgmF<7^_+_CL5XX3p*e7kG}Ob+?JX{}tq z``mw?%|cHlg>N2_Rm&VM80mQFuRroE?!v~c3ufQ%h@4>wNqAOE$Ik zwZBA;@)b=_4E(HO)E4M)SwLbgtK>hGK3WE?Tf5Nnw} zUHn}{mdt7Ib43zgE<}kuY&B;1U;ppaheIbC(-?V-e%Hpa`hEUbYL_qzbn%BnhRMGR z3!QnC1urD6=hl(Y)zSIDrkT-yG+~E0>&=M^`s`OcX7tiuz-{X|xAF7y^TrKU8|T~C zFY^@IS@l)x=rbkx-P}=57FNFve-wYtP*3?Wea8k1wyg)*y7Spx*;%e>$o2%g@GNe~ z0=JQ(IyH55dmHC;-`#Mw?m&&-8zGe#Mb@ZeE-M!DztU*<@LxZErPzZjZ*DZWZFzrp zcl*`c<9)J=GnE#8&-7YS!4^IvK-)n^W<$B3V`h=TTrRdx@AudLm$={`z}&gF?(Zzd zE1kA=e=H84oUAShK7(_YcdOJ~^O%SJ=X5wu*e>uBHuY1MUfc9i7@Yp*Uven4nenLd z!1sn8GcWgU&~4v)6d88i;B9g2mAjzB@oQ<)l3g-ej%`wKPZN`h<@f8Yr+MB_D(bxCeC7@NCdUO&BNnKd zp7<^2aC+Uonx9UWj~Gn&EzMEMGes}srX$nc*9+ILKi^QZoJ-@+%bgGB+&H0{#wnLk z&%x1rh9!3gyX+SRt83y@>>cV`Lt|6ShbPwk&656{p2?eI;R zEoS?g$94neRjF_i=ca(nWnDeAI2{Zv3 zySsPWdAHl?UpN{WBb!WT?QoxcZ?U35iSvQ0S4C@<=zWqET`(~;z@25wLy;{tEL+%Q zWSg&TIDEv#)m75rbo_}(ttQErObIpg9_hMymAZ_npZ;JM|_ z^w~HgjAzUF(|7L3)I3xzl52e$Izz&PKf~C5oAA*Ug&s#U<{E&mmv{ItAaUYpM9F*5 zV3k{#m~`*^hl2MP^s#=@;aDNqbcd1Abe6;E%?|rm?w_^_+y&ij{_mrFWqpU~{~p56Jto|>PN8pF!>Kln6%#|{hTji)a-Y@U6? zO8&+4)V_0dJb#Vq4erYxG~ikx$HXjpza+NF^p*suBAh1cY|S#kTJgo=c`esElRsN7 zoqdb5^_lyFc~ki>KR23jr^2D^!1@V7DHZ3BA3l(tiUMVt`h-21e zTHDMX`^rpUB2$#R|BBCyMdF|}tZtbXR{AcOJn=-S_KS>b3#a{X_{e-q-DTZw$A_$3 z=1FGXn*DOE3LmjBuL!mfc*x?_{^eaw!zbyLbNRn)Sorkq*Tq+lf(xz#Eey8PlP~^J zI&|^e@e`-r78ly>c`WlYE%}D6*poAL2b?&!e4I9IdqQ$IZ@^=*5_QhK$)|4In8A44 zsw(Ck!(0m%D?PE6leq?b&vx4v{G5GfrhGuVSV@a6$K;|_5*eH#FOux5ma|{DD}7@2 zp_hsF8TtY{#r2ymDQNUKzH_;^+GN-J5i9{XwH%kjinp3;Q?%)cH%M=&e+5pP2pJVOh+V z-m@)tK5bwY zr##u3@$2u8jtS`%%xlo(~5hb%x*TPUC`JnVRG7KeY3KJ+rb5((*`C?oGFp` zkuU3hpf$^iDz0l8%q35zOz%@U9HY4kf`Rq{fBIYX1*G+AiN znQpmiUkCG*&1pPwdny_q)kL+a>iQpSsyqbRvh}k>Yr=nre=I+zU$f*B$zSke@iN;5 zUs%1;7kqJhFVrlR$vADlqpU!{;gl`)2A`Y~wycxCS!!$g+4gFhgPZWvj72hQd)%~@ zvrLK{)P*iut2nBsH2OI%diF`=!W-tjX1kjGb}`+};N7)Uu4J;si?-4%^Lgw_rOkP6 z>~|kCT3yTn)jrepVv`oQKWBateu3xA-{0R?KFhse)t$uxdkff>c(PyBrO#j?*ArSeQz+?*Lin6A8O2)Y9r z#qD|HVkz~1ajTFHsQ6s)I8BptCg?!E1^ViXKs(?aKs(@jICg$(ympiS%Nynump?LA zaNA_C$d~NV$@#`0vW)p6hnmQ=1?T327TM>B9lvvD4r57;!HS1A7nWBv`mI`&;?I$B zjQPq>hO-S9c5h*5)m-|!;oLl1?(%OSCw-cCtM|f10of`=hqZnjuGJ21(({$AU-umQ zpYbO-nxAX8rtB0uhu#D)r_MRIXRQ>}Uf_Ff!P#v~X0ck$<=Wy{vmlr)W2MkOKA9I9 z@u0&i1lZ1+HDp|P!>RdBt(>3Zgj`CsV@{1bH~*8R6Hh#3wDMpmnI*ZhklV|B!*1gj zGxZ#PZ_>D{!*^=`f*PJ8^KIvjXUG~vvG=@VmD-uvaOsc#H{TbFS^1$u$OnX&7R(d~ zP-h7-4BVwDd!<6U!}sNaW702nL|^zMpOnAy+Qo~B5<1843C*%)%57u2JH4?co$WTCi8&K0kI2aP%vs|w-L2`2bcZBMO1TZ_Hj6D& zxJIHjrnZzXQ!s5NUYeYIOonC?pHS&trQphIJVt~U!-k8iE+SE z7E}K{Qo1kQoEgG70&X$L^4?r1&opHT<0Me)+QxnJnG7ijU*?ue3|sTP*xx2gtOzhS zH9cy*IT3WwRs?7{q0%!Zd#}SnS2);bGQL`Jao1zAkB2;O-qAWXtSS+ z)QSu2y6c_ngT$|VU@P@=P&ehB7Q)E2JpcYa-rX)-QB9^7W?!7hENXJN@YxwjwhK#} zPCQy5y!l1pWUF-?Y;$GUZe4cvWRkG`n6;%x-IT@6T5)k^+Z+>z684lW4=raMaC1&D zVe#N)%qnwo@Ge+UsG_xVBZt*Zu5JJ1xAZe!`6(bGA`{a2=;7h^!)6nk`o!gY<}u&( zXL{9A^Y@qN8=VWs>MwLgGCy?-V3#Z@l2HBDUuNfa`UhxAg0aZC;ffzeAY`PZiKX>G zhLwab`;#TiAiH??G|u59Ik-vBUEB#;%{GfogO@Su zd<*E<$Pyu;7h!o9Ub^YW?~@7PY`$~$xwB?zv)N*PweL;e{(+8#YMAzdcgk&tx&0Ss z_FpurGH3w}Lz~D>y2N=9JQ>uZwhZi%tX77t){0;D>B?St3FnC=$Y-TEn^yVxBR z+-%Vt0+%I^RtYMuc+B{TXJ`8FKDE||qD+frFJ2Vk^W>JN z@-$k>EQsWfF_v3!Og+P%W9jUA&5z6(pDp+Lb1~0tdHV9D=l3&=R*kRT-rmkUP1Ers zPgj1-@efUYCz(q7604mvo(2T$VqaSCb!PdqdHolwlD5oSkY;NrHS4f4%ZIP(25Aln zt)NjOlb_8_30s0Bec7+@F=m}>X)ueuzo&9?+QcvK?pn8jy3h}z^S-{nZ_gI+`2V}R zyP2m&w0(Y7{KY}`#Mu|8PMzXekev7NE+f;e)u1t2htroYvPC~n-ZDjoml3jDbe3F# zB7+zAj!Vp-I%A{dtc(fH2`08Z%h;oqvS*b$IT(vv>05ieU*5REOrrkRmrjkvjABZ5lXctJ)Y$trh#_Y?Br|`^&u`a_Z~r z>y7{X{M^1o;peBP+=m|?ZkKeZdMP?hVSoRYDcZWazUKPbSy@ImZrw8a@ZrOR9Q75O z84l^_=!6vNXKc1!I(OE^#bxfNe}W8eY~*14;-|TT+340!3E!RQGYO3ZYwkwGYxna+rK3#f3#@*e0kNGFzWQ#SQ17l*&FdSOE^iBrH1tZYt zzuRT;Dh`F^oN3|V*V{n*=Q~*}S=_AU7r$h*WyzSU=5T!GzN)WWdyceD+AFf)uY|(i zBYIOEzp1ad%rNWcj}H%-uL?0_I2*lq5eKS*`1tr%sq0*LbKF6e{m=jZ^&eLHGf#|m zQ1|`&>uWdTmY?%(eQP$G+5D~2!^LA=SrWbrUMMnn3;TffFC8%i_1+95oEoBx6&3b3NJTGb zlQaBR_5YtO^9zsI3!5~f=EQt?e4PJ-TIq#4p$jJiukd6CJWpG)EH3N)dIr-EygWPy zW}nHt7|HThnNjyR)7dr-Zf;@G+y#-sUg>O!KN(&6&sFtI`wG6st67o7p_YHy#T63Z zBs%x6gfBm{B)I(5<7PRV_23hKMm=ak?SS;zmxkR8vmV~uU9QjkLT}>z{q?~zXB5nZ zZ=YNgI;SaZ4x85A2B|MsW-MjUeR}EIwX}k=vNQo<;l(@46PBl}T(RQ8Tv2A-znivf zS#rbn%Z#5Ax~A^V4DlR2dPk*v}YD_4BE6j>(j>80}e~MFVre7@MBrp zn-j2D$YfLR8}kb*0~eg*%=nhPAW8O#-i5+d3))O9^CVvUHgMQ%c|dg!&y`yVzJ3x7 z(@r;DQn##fe8|UDUsYmNu#>;!kW|M0i=UsL51i6)Nqgx#rl-;Y|0Fvi`!DWF*`g=u zQ+hHZhv%F?f@JTEivkR-2Qpd>XYsK`b12N8CKyR<^USUu84{aw*|HwOS3)8J==BRTnUJ(t4Bt`BmD3H&n|M2mnVZ)`J z6D9~SuW;shHKE~>=F;se!SV3C*^ni{SaGrUfA`Dk8Z2(s3ZSB$#mzb4LL0-1Lbh3) zjBA^hFA-+4auVHg=hfNS<~&F4y>?vhzVFx}leaj?gIgF}iUzw_vQ6e1^_;8gQDcfxG>EvwwnCVx zNO|R4feS`r0&H^~jvPD2_U&0SJHJHU-Cd?Dlw$(}CptPhHZtB0+`OQh&#}ChXA3*q zVIiFei3d@u*tzTjESe4#8@O9&*fw2KJ<+=$`kLeNLkBPEYA%oGU3Ttx#$KbS^*rCI zQcc>}%vjvg9o#CoWY(&sFAkQ*yHff?cG1As%M;EN;q!a z;J+ozbO_X*OJ}*#s8%AVbV5d0SeUK4`u9brToV?yQVwu}Td+Vt;%!6EvSx5mr6|bM z+1Z&;-Xs+TYJxA|{&C~xP00&}8_V+=tc(}9y-vux(41!NV7{l>V1+ZQRaKcvoQ;P@ zW0PMG)7_m+T=D@Hysa#}Ugam|s^#Rd-7RK1wBVdZ#(a(!6$t@V>}Q`H%(&3Vwcw9I z)sc4@j&|S-KE)}ag!3AQ-}=Ry7E-==U}@WqQT zRaMot^7r=)8{RQE+S_){)2uSkImq-=UW9MK2ZmN|jhZ&6b<4u4nwQo;VU}i_{NMfc zjEh!jE3O$XHgx|jATgIwa^cFHElCo(acxB$2i&S1Wd*IRt-JCi*-f8-4`P+_m0R z>@AKjxu=}dC{@tVZMgI|;cZ3Fv~`OW9eltceDh^W30n%wvHzg7SEL}qs7D^Afn$+UJg`^>`c z?_${mFAYxpAZzIxZv2?9iQY21LnJ> zj8SFI>#R4FdO3K{aPXeBujc0=hC}!F)h08@yD7#kf>HYe({mvsFFQHZ4|k@B)Y5%$KR48wlc zQJ|x<6@1nz`#Ty7E^t${HMea3W+brtd$LKZvJ=A=@s?@QA1)sL_3iC#o&_atXV0-` ztUvyuuK!|)?Ib6LZ6etw*WBGWdh`xTF@CfGwJgtd@HRf26SiWn&g*AqXY+uTS7biA zbmdA4!`TL&V%rkNbKUho`R@LPRd{C>Z$380dH!lX%3 zy>>><3|n}(OO(W3>=VgiSJK$$_|Z?d*xi4-l<%{}iVYl%7kytUE1UL|Ik*-71qVk5 z7h_hri-WO<0#DQ@=2strwGAB8n!d&LsQG^a`JUy9=Y!|Z(-(wUG(DO=%X_z*wcO&B z)u3*E!jiTFFND@4%6tYD8?4friUvZLxiccgGPdyky~pDf#P>pE$=~1KjsN`rKR+k= z#m1VBOLq)!OiwuY$Ni;|S%6K`qsg=(^(n}e0O`_C$moY|wG850` zEe25+`qMsL6i|?1x-yTK@#cv`hYme>^@?lTpA!?6c@|XbdvtR9`T4O0u&0>(TOrJ} zAX4B$k(r#F+$0{BqtY7xR><;$VqUY_gr$SK@#4~m!`4ede)nzym$icOOj}-bG%#H~ zc8pDC+mf8HX_F@>ORTWgX-jruh^_kZcaY-y| zyLhwzqK;n{N6#|JGXlG7ej51-37xp}{QUf6)98?pDU4fm*iE{PZUlb}h-_lza(8oc zW2>#LWivE1Tyv1Ci$Ch9`I=(uC@n{)ge_|%eK{9@y__M%&t`baAD%c^>KTd z;&V8xjIJFx(BK#mQDG9dLV#&O0ZXg8Moj(RUq?T@ysW;e{q>7~eHWKlfomu!rX{Tm z${#8Y{$Jc^1{DF9jcCLdj>e0s5r-A#_WGswi-|pHJCJc}q2H~Wo74H5ckHk@+4lF( z&&dyu^-A;T$L~{#($C=UT(aazgZi(7TUfY7QrqzrV{T9TpThZ)j+^ zxRtL}(IDzukJ`eERoN-aK{hzs{B!62c+siGgoVwHB_<~3L7&1?lcm4Ezn^^NCqpEY zk^D`*3qs1QtgVcZn_Rnj@3bUMmios!x9#iWVgqo?ga21kG)%LMmFg{5wF|Nrscd;jspMdhwsw%j=O#FXYA zKYvP2nKDJf;rK7Urzco<%0JCVuTeM-O{jHZ0x>Dew1vlpg zGjPJ?SiT07aFZG*2}t+28B<-d^W!#uG`RYgU@#l=O!VS96PUab0c z-UX@=d-m*6x&NgvNB%_J1Z#(Pj61Ux4n02H&d`WK1-MCW#V0#wUT__U*H4YrNszc>Z+#|9`1JK0W1@cpSWZ?b@>pvsfjwI5|Y_ zRaI3jepv^~5D8$S0o(u*@TmfoWKUU_DjLjcW6PJ4I&o7l$cgoe=f;g2C5>bSg8WWO z=_bAqXIh+kF(XTQ?RmE}DNv&(>7!j#M8DXz#fk=doEa+1QjT_s^7zlUliebhmXac~ zC6Bpvc6H2HTNq z*QPOUVNY4$`~@`U_UzfS#jHmJcpEPoWtzO~yOyi056)@NeuGQ1ivki(iW6qe?0k6Z zXt(%b|3ayE6FIHcp1OIn(&TI(C^>=C6wgCYbCYM{329kHDcy8%(kN(USQk9UEa%37 zg75EQXR*p`oc?3tV}=R4nVFc}lxx9ZWWv(H1u8@1daC{LUqWwbyw;@Y)qJT)~nD(qS(>@Iv-d+~+@FQ{0b=DRpEamzgE$jpQi zwiJ`|{ZMyt@PXEuY^u3`_3BZER}DRC^I(1gMYn<}%M7>XoPzcPFIHU0;F1N2Ngxr7 zk03Si9=380&=EO>e|pO7+`9R*+74t?N%{JNONnMv7B}hM#hH_5DH_b0$5vk@^|pcM zl7&>RPM_E@unJ_tAr7=@fUW$LQgJScpR)&kSFDzcX*nM%TKEswPH4!b>AH{5Cx6~ z1ksiXZh6hQ==I5PkDHs@;>Z#P=LdIo7N^{_lgekFopZ8x`^7VuCE;OR7Eqt&GH4ad zX90=WI@4K4z~;AkarE?s^)CyJYB`XxORDB&))r=?S=YgG2y4Ntwo~rL>15f(Gh!XBbP##T! zj4C5V8mN8{R5Y;SHnLb$xrNy%>OoK20R!Gf(4H|*NDE^{+kp(_LX)?bj9A<*Uq7&X zJ;)?ENbeENBoKE&G${7ngl~g`8;t;^-pC1!z3)I~G#X1W9X4PAEj(9y4UXG|a!iYP zk6bkIc`YE}o6J1@7^wIA6XFbL`Ui)On{$E-c#&+vqFR`v(QJZpFX)1r?Tb5eO<39@ zIePT=OZi>`htgqH7B~0h?w5^hof1suUbLUvTjt>Q`5ROlIFrJN4nEM%x!T3`0VNLS z=32Ku%$^}(W;r1#=FyI({%g+;yivUx>#VrF`A-Y)WMTd%Kg6fsy~4Bmp+x@T(w7+K z@f;IKkbHA7DJ8|lRJ}=R=80#$W>%g2QC}(+l;23)JbzYZ@(vOI#i!T1Y0mAxlh znIv#02OSa!zcK07$_1@+m2LCfS8oR!2P0N08rKtJyDqAa&)G7)zQB%-W<BeV=7qLv=yF==^v!(T;*CqXPcnkMO$BT>y%_s3q zR!&QijW-ayqRKzgBqlsvA=>sL(Rt0^6TdVHyDtjd`EMAd+Y2pB5iuXY z*?6&=!~OCrgb*?-fwS=g#bh_8zoDK)&Vm^bpY4M9%#_8=eWCm1 ze-3R2GJY+#`2w=65{G3T;A4GKPo{2RHkt+U8AsazP!ik(sfS)F8r))#Im^r}%d|Li z!XF9HV9qm$pTHhNB^Y`!%G1-XS(F~w|DYsMHCQ!AL2Ff>}md>9nlatUIoI!=f zO}c)uW+G^g#7f0h3>0;h<=BJC&AA~@@qp7R-{Rv#jHw5Yyt!i9cp2RI#PJytGu= zsFnXK+kKDT?H3pqU0WOd2l=K#J}UEMH#~O}{wDVun+K ziEZDq<4|=6mHjvYF+?7R}MK%=3<+(Je+t?%5aH z?qx7yR=kT99eM>M-nJz0AHB%O5wru;{@|W{P=aak%OaClSlksV8r-@e?W@^r$l`Wc zHEj*3FZvlr-t1{(xa*X#g_()>)y2SP7h}w!js~Y+DB;j8ATgKKk@xCFJ`MvL(1b$k zSiTP$apL1V39i-1J#i{5234oWdC&J-3j2IamQSg#6d4y>+Ttmv>^K;on9go}dD zF5bcF%YKlJjV+%#-Zen|D8sb)WwA*u%#W3d2DeT~`&u?zvbbGVXFlBVwxP%Dog4RZ zXj~$r_5+vGkt<( z%ahKze!8 zSxs!!96e7=PC2bU;h3MI8@p>tR#;%twT#1kb~goW`x0I@&U%@!Lv-!pMB}JPsHYBq z-ExA9F+!cirC()!@Eyj3X0y1nJrc761hYCG8S{%7Dwry4?hNF<)V#*d-d4sF$A1}WunRPF7wlJYLboMAZOqCRP;ud7mSj&8*=hGx3As-LjqQ!hyejd1bSmg*8OFGOt-74uwq9^zK-)u@hU4=K+w@CeS`!2op5YKGOAD5&wzb#rW88er` z>0{ej+aH%0J@}@{Pk1YH>SfNBB1k8Nm$63CAjo~Xd+^ZpOgdUMzk(MQ?AHTC#JQN$cz#o)_h9Pnh)_ek8M#+2Tf5^NYkCC+A&zX;Sqiq3L23 ztOEfqZC1!JDX$fF`YI{#L_)HokNr&D6E=gKXU&(68LXR_6ti+d(ErJ+=7)U0xcHBQ zT&aA|Q&G)CxBhb?D;E1?T3oc6%Xh5AEJ_?2F%0WK$x+f*+F6ywEhtKLC3BPAug*Is z)VDou%wb!{W@cA?;p>B-?mL2wrZOK*Uo8IkM*hH4{~5AV+PqCBR*Q4Anj6+hbog|v z7Iu1-VP%=wKB0cG=N7jzn$G%oedg5s*rWY7==A!Xc>PZ0wOcQq9SBDtGbA(k)G}@(6V0q|us- zQ%t8gC8#V3pH=F>cK8kZ#?D-gouxZO6q_y2xL-b;;cALePHf?3T=r0E$Ku5&7vD_7 zR#9lQ9VpnZS{qU304YKOxEn8;SkFp><(zGb26v=O7QamY(R!f3Z}Z`G%tp5+Nb5F% z;}eZ&bLQZ=?#FRC;}g`~pk_XLsn1x|dSJt=2GG1u+MI=;LbA-{E-XrGof1kUuVr{i zcPSdkTz*47L-HzeEM3rLX>(;yDfyOca-8R? zfQ0Yv#hI`Q^My3i;?o=4g6{K{c#JKtgZs1jW1Hg-v2+ z&Y%+Rea0_HGk~|T5xg4h;uP~K&IuMv?q9T3SX^0vExbWu4S9+NDb@;$7aw1|GX*37 z8Hqr!RN4*%%x9IH1X;9^Xne&v!GyPe*+W<`+z^n6Z8M$4)LzBG^VGx!6a@dV)rDZ6 dT+n4