From c5bdb05fa4d48cc127cde33e09c7935b07a9d25d Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Wed, 6 Nov 2013 15:04:16 +0100 Subject: [PATCH] Target tactical info now looks better! --- game/engines/default/engine/Target.lua | 4 + game/modules/tome/class/Game.lua | 4 +- .../modules/tome/data/gfx/shaders/mm_fbo.frag | 172 ------------------ .../tome/data/gfx/shaders/target_fbo.frag | 139 ++++++++++++++ .../shaders/{mm_fbo.lua => target_fbo.lua} | 5 +- .../modules/tome/data/gfx/ui/targetshader.png | Bin 0 -> 25600 bytes 6 files changed, 150 insertions(+), 174 deletions(-) delete mode 100644 game/modules/tome/data/gfx/shaders/mm_fbo.frag create mode 100644 game/modules/tome/data/gfx/shaders/target_fbo.frag rename game/modules/tome/data/gfx/shaders/{mm_fbo.lua => target_fbo.lua} (89%) create mode 100644 game/modules/tome/data/gfx/ui/targetshader.png diff --git a/game/engines/default/engine/Target.lua b/game/engines/default/engine/Target.lua index 2ba0c60450..b3053a6989 100644 --- a/game/engines/default/engine/Target.lua +++ b/game/engines/default/engine/Target.lua @@ -33,6 +33,7 @@ function _M:init(map, source_actor) self.cursor = engine.Tiles:loadImage("target_cursor.png"):glTexture() self.arrow = engine.Tiles:loadImage("target_arrow.png"):glTexture() + self.targetshader = engine.Tiles:loadImage("ui/targetshader.png"):glTexture() --Use power of two (pot) width and height, rounded up local pot_width = math.pow(2, math.ceil(math.log(map.tile_w-0.1) / math.log(2.0))) @@ -100,6 +101,9 @@ function _M:display(dispx, dispy, prevfbo) self.fbo:use(true, 0, 0, 0, 0) self:realDisplay(0, 0) self.fbo:use(false, prevfbo) + self.targetshader:bind(1, false) + self.fbo_shader.shad:paramNumber2("tileSize", self.tile_w, self.tile_h) + self.fbo_shader.shad:paramNumber2("scrollOffset", 0, 0) self.fbo:toScreen(self.display_x, self.display_y, Map.viewport.width, Map.viewport.height, self.fbo_shader.shad, 1, 1, 1, 1, true) end end diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 56654231ca..2a2b7a2a5e 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -134,7 +134,7 @@ function _M:runReal() if not self.player then self:newGame() end engine.interface.GameTargeting.init(self) - if self.target then self.target:enableFBORenderer("mm_fbo") end + if self.target then self.target:enableFBORenderer("target_fbo") end self.uiset.hotkeys_display.actor = self.player self.uiset.npcs_display.actor = self.player @@ -516,6 +516,8 @@ function _M:createFBOs() if self.fbo and self.fbo2 then core.particles.defineFramebuffer(self.fbo) else core.particles.defineFramebuffer(nil) end + if self.target then self.target:enableFBORenderer("target_fbo") end + -- self.mm_fbo = core.display.newFBO(200, 200) -- if self.mm_fbo then self.mm_fbo_shader = Shader.new("mm_fbo") if not self.mm_fbo_shader.shad then self.mm_fbo = nil self.mm_fbo_shader = nil end end end diff --git a/game/modules/tome/data/gfx/shaders/mm_fbo.frag b/game/modules/tome/data/gfx/shaders/mm_fbo.frag deleted file mode 100644 index 79c44c55d5..0000000000 --- a/game/modules/tome/data/gfx/shaders/mm_fbo.frag +++ /dev/null @@ -1,172 +0,0 @@ -//#version 150 -uniform sampler2D Texture0; -//varying vec2 texCoord; - -#define HueLevCount 6 -#define SatLevCount 7 -#define ValLevCount 4 -float[HueLevCount] HueLevels = float[] (0.0,80.0,160.0,240.0,320.0,360.0); -float[SatLevCount] SatLevels = float[] (0.0,0.15,0.3,0.45,0.6,0.8,1.0); -float[ValLevCount] ValLevels = float[] (0.0,0.3,0.6,1.0); - -vec3 RGBtoHSV( float r, float g, float b) { - float minv, maxv, delta; - vec3 res; - - minv = min(min(r, g), b); - maxv = max(max(r, g), b); - res.z = maxv; // v - - delta = maxv - minv; - - if( maxv != 0.0 ) - res.y = delta / maxv; // s - else { - // r = g = b = 0 // s = 0, v is undefined - res.y = 0.0; - res.x = -1.0; - return res; - } - - if( r == maxv ) - res.x = ( g - b ) / delta; // between yellow & magenta - else if( g == maxv ) - res.x = 2.0 + ( b - r ) / delta; // between cyan & yellow - else - res.x = 4.0 + ( r - g ) / delta; // between magenta & cyan - - res.x = res.x * 60.0; // degrees - if( res.x < 0.0 ) - res.x = res.x + 360.0; - - return res; -} - -vec3 HSVtoRGB(float h, float s, float v ) { - int i; - float f, p, q, t; - vec3 res; - - if( s == 0.0 ) { - // achromatic (grey) - res.x = v; - res.y = v; - res.z = v; - return res; - } - - h /= 60.0; // sector 0 to 5 - i = int(floor( h )); - f = h - float(i); // factorial part of h - p = v * ( 1.0 - s ); - q = v * ( 1.0 - s * f ); - t = v * ( 1.0 - s * ( 1.0 - f ) ); - - switch( i ) { - case 0: - res.x = v; - res.y = t; - res.z = p; - break; - case 1: - res.x = q; - res.y = v; - res.z = p; - break; - case 2: - res.x = p; - res.y = v; - res.z = t; - break; - case 3: - res.x = p; - res.y = q; - res.z = v; - break; - case 4: - res.x = t; - res.y = p; - res.z = v; - break; - default: // case 5: - res.x = v; - res.y = p; - res.z = q; - break; - } - - return res; -} - -float nearestLevel(float col, int mode) { - int levCount; - if (mode==0) levCount = HueLevCount; - if (mode==1) levCount = SatLevCount; - if (mode==2) levCount = ValLevCount; - - for (int i =0; i<levCount-1; i++ ) { - if (mode==0) { - if (col >= HueLevels[i] && col <= HueLevels[i+1]) { - return HueLevels[i+1]; - } - } - if (mode==1) { - if (col >= SatLevels[i] && col <= SatLevels[i+1]) { - return SatLevels[i+1]; - } - } - if (mode==2) { - if (col >= ValLevels[i] && col <= ValLevels[i+1]) { - return ValLevels[i+1]; - } - } - } -} - -// averaged pixel intensity from 3 color channels -float avg_intensity(vec4 pix) { - return (pix.r + pix.g + pix.b)/3.; -} - -vec4 get_pixel(vec2 coords, float dx, float dy) { - return texture2D(Texture0,coords + vec2(dx, dy)); -} - -// returns pixel color -float IsEdge(in vec2 coords){ - float dxtex = 1.0 /float(textureSize(Texture0,0)) ; - float dytex = 1.0 /float(textureSize(Texture0,0)); - float pix[9]; - int k = -1; - float delta; - - // read neighboring pixel intensities - for (int i=-1; i<2; i++) { - for(int j=-1; j<2; j++) { - k++; - pix[k] = avg_intensity(get_pixel(coords,float(i)*dxtex, - float(j)*dytex)); - } - } - - // average color differences around neighboring pixels - delta = (abs(pix[1]-pix[7])+ - abs(pix[5]-pix[3]) + - abs(pix[0]-pix[8])+ - abs(pix[2]-pix[6]) - )/4.; - - return clamp(5.5*delta,0.0,1.0); -} - -void main(void) -{ - vec4 colorOrg = texture2D( Texture0, gl_TexCoord[0].st ); - vec3 vHSV = RGBtoHSV(colorOrg.r,colorOrg.g,colorOrg.b); - vHSV.x = nearestLevel(vHSV.x, 0); - vHSV.y = nearestLevel(vHSV.y, 1); - vHSV.z = nearestLevel(vHSV.z, 2); - float edg = IsEdge(gl_TexCoord[0].st); - vec3 vRGB = (edg >= 0.3)? vec3(0.0,0.0,0.0):HSVtoRGB(vHSV.x,vHSV.y,vHSV.z); - gl_FragColor = vec4(vRGB.x,vRGB.y,vRGB.z,1.0); -} diff --git a/game/modules/tome/data/gfx/shaders/target_fbo.frag b/game/modules/tome/data/gfx/shaders/target_fbo.frag new file mode 100644 index 0000000000..77a229d828 --- /dev/null +++ b/game/modules/tome/data/gfx/shaders/target_fbo.frag @@ -0,0 +1,139 @@ +//#version 150 +uniform sampler2D fboTex; +uniform sampler2D targetSkin; +uniform vec2 mapCoord; +uniform vec2 tileSize; +uniform vec2 scrollOffset; + +void main(void) +{ + vec2 offset = vec2(1.0, 1.0) / mapCoord * tileSize * 0.5; + + vec4 colorm0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, 0.0)); + vec4 colorp0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x, 0.0)); + + vec4 color0m = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0, -offset.y)); + vec4 color0p = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0, offset.y)); + + vec4 colormm = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x,-offset.y)); + vec4 colormp = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, offset.y)); + vec4 colorpm = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x,-offset.y)); + vec4 colorpp = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x, offset.y)); + + vec4 color00 = texture2D( fboTex, gl_TexCoord[0].xy); + + vec4 resultColor = color00; + + bool loc1 = false; + bool loc2 = false; + bool loc3 = false; + bool loc4 = false; + bool loc5 = false; + bool loc6 = false; + bool loc7 = false; + bool loc8 = false; + bool loc9 = false; + + if(colormm.a > 0.1) + loc1 = true; + if(colormp.a > 0.1) + loc7 = true; + if(colorpm.a > 0.1) + loc3 = true; + if(colorpp.a > 0.1) + loc9 = true; + + int location = 5; + bool isInternal = false; + + if(loc1 && !loc9 && loc7 && !loc3) + location = 6; + if(loc1 && !loc9 && loc3 && !loc7) + location = 8; + if(loc3 && !loc7 && loc9 && !loc1) + location = 4; + if(loc7 && !loc3 && loc9 && !loc1) + location = 2; + + if(loc1 && !loc7 && !loc3 && !loc9) + location = 9; + if(loc7 && !loc1 && !loc9 && !loc3) + location = 3; + if(loc9 && !loc7 && !loc3 && !loc1) + location = 1; + if(loc3 && !loc1 && !loc9 && !loc7) + location = 7; + + if(loc1 && loc7 && loc3 && !loc9) + { + location = 1; + isInternal = true; + } + if(loc7 && loc1 && loc9 && !loc3) + { + location = 7; + isInternal = true; + } + if(loc9 && loc7 && loc3 && !loc1) + { + location = 9; + isInternal = true; + } + if(loc3 && loc1 && loc9 && !loc7) + { + location = 3; + isInternal = true; + } + + vec2 fboCoord = gl_TexCoord[0].xy; + fboCoord.y = 1.0 - fboCoord.y; + vec2 texCoord = (fboCoord * mapCoord + scrollOffset) / tileSize + vec2(0.5, 0.5); + texCoord.x = mod(texCoord.x, 1.0); + texCoord.y = mod(texCoord.y, 1.0); + + vec4 borderColor = vec4(0.0, 0.0, 0.0, 0.0); + if(location == 1) + { + if(isInternal) + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 3.0)); + else + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 1.0)); + } + + if(location == 2) + borderColor += texture2D( targetSkin, texCoord / vec2(2.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 1.0)); + + if(location == 3) + { + if(isInternal) + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 3.0)); + else + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 1.0)); + } + if(location == 6) + borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 2.0) + vec2(1.0 / 4.0 * 3.0, 1.0 / 4.0 * 2.0)); + + if(location == 9) + { + if(isInternal) + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 2.0)); + else + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 0.0)); + } + if(location == 8) + borderColor += texture2D( targetSkin, texCoord / vec2(2.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 0.0)); + + if(location == 7) + { + if(isInternal) + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 2.0)); + else + borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 0.0)); + } + if(location == 4) + borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 2.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 2.0)); + + borderColor.rgb *= borderColor.a; + resultColor += borderColor; + gl_FragColor = resultColor; +} diff --git a/game/modules/tome/data/gfx/shaders/mm_fbo.lua b/game/modules/tome/data/gfx/shaders/target_fbo.lua similarity index 89% rename from game/modules/tome/data/gfx/shaders/mm_fbo.lua rename to game/modules/tome/data/gfx/shaders/target_fbo.lua index 5f85eeb4d6..8e0ba1def4 100644 --- a/game/modules/tome/data/gfx/shaders/mm_fbo.lua +++ b/game/modules/tome/data/gfx/shaders/target_fbo.lua @@ -18,9 +18,12 @@ -- darkgod@te4.org return { - frag = "mm_fbo", + frag = "target_fbo", vert = nil, args = { + fboTex = { texture = 0 }, + targetSkin = { texture = 1 }, + scrollOffset = {0, 0}, }, clone = false, permanent = true, diff --git a/game/modules/tome/data/gfx/ui/targetshader.png b/game/modules/tome/data/gfx/ui/targetshader.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a84f5c3398bba3badf6203baae862ff75a74df GIT binary patch literal 25600 zcmd2?^;;C(+n*(+OOOTu7wKBML%KVpyBnkzkx;t3yBnkzY3VKrr5kC<cc1TH@&2%L zX0DxUu5-?ubKmzT=Bui*3>G>mIsgDza<WqD004rYf`C^j@aCginH9W2bCK0^hyO3| z-w%XHLm3JH=qk37lB%jU&K}P0HqI{8a*~qNE^f|Nwhop6@M$Gm!&+10fJpdu{YpY1 z0-B`YtWNlfT3sR%`Z^xW_!bRUKH_cuGND>8-iHrJWW#w8h%qtHC_*)6%x~yRsM~J~ zVnPZdzWsdo?N?~O(0RK%{@lDMvR8GP-8hK~dxe=I%caH*#VnVg#M=xR>L2{Q%_<g* zPUiyPzG}31>;6Ow0`3BZgqUbxsNDeQ(=5g-0H%})V<!)P!8w#j{|JJ90l_@t`4nD3 zUjt&kF%l(!m^28Qod(tb@{j<NQFF5`K$QhBp%2=f1)$k?>3$%<An7e3C@&tMCa{c< z0&E0<s!8o{9{^o;;I)-PKR>X<0<g>JSjhr)tpIES7o!1qg$b~$MT9Z{NPd9HFfHvT z;7dC2TKYmq=r2<Z?j9q2rqUaP+UWQ{1RK0!aYfb9VWoUOA@_#qHIFHRX@(f<51(`r z&R_`6=H(aw<i!)hM|=77X#%@uVuB~81>2bAum|OZ#>{N%d1tcHMGOFbdjw8DGqW|4 zLIqKvj?V?}PLXVkF!DTaBdr>6#F~M;gB6`im;dJGLw;P_^7791_L6+Rgn{W#oq%WS zAI319Cx?H5LXWrCo85otf;kO?WsvSRe~euz7L!jVpnWm>wHqt**oyJ;NHI&(FK5=K z%lLXr4c|3JDkJKWvzX?qL;}OWyO|e@KO4*sh$0)@K%Jck$S<Cy%+MV1Mu8qz*8}$F z762|foO|cqze0rCg#4cLemN6;lF54qK&|8wTmisHijGzDXQSxQD*%wn3udenC%ft; zW`?1V_agu5#dtK~`65Br|3d;-0^I^i?q<SJ^;zP5*mxZUqY2xb7zG5TW)qg^g3bCv z>pQlv3(mditDN5Voxx~G;=`{9Oy90VfXu$>(#E`clOB5awpSJjKa!4mB;vIijY2%P zEQk6xO=>M!iVI;k1pe@k((Unr!vN>!$FNQrj-=oQHQ_nTX34fPUeYhp1sGEn9vm65 zM0uH0ZcU`ZQ9Sv3Q<XM2E3qPyL+r49VpOhv2X@xMK8bohX0$}}(R!LH%*sL1I_)aN zj<46|ll9(6_`x4wXgo;X64a)Y;<CDmy2?wkWz^(!5WE#MUNponYCq^{63Y~t!0mYd z`iadrIl^^inQ0gBV+q)B{URj$dFk-KN^;V-#UaSm7irGm&q&WWsnZ@XmuEs`Nof;D zRxIorQ2CRXshNgDx3jnVwz;;+w%=YDpl6$jxfb1N{CThb(@vgb2X_augJPM+DXvwR zp}tm@uZhPUt1nTV-=bct7G6dG@yy^K4<V9MD6TF@o+Y(;V{>a;yYJDCx0Xz)oI0g5 zGkPGipSq8D<&B9IMi?>_Vf~&YlNgoQn#7y9HchdFWHypyNRyqH<0x$}9VgvcOP8^Q z(VsB>Cwj7cGB}xxkxjF_qNHNI0z>OkYg99~+(;v!Mp}zYW2+o(E~QedB3t!HgG|G^ zT(B&>!n({^Q?w{h@98UwUY}y0ie!;mUcK>F=O8tPIZ5Lu=C}4(m0_O2-2LGC@nwH6 z#*VZnijGL(it>DZNiKOVoksP`Br8$Wtu)uWEDvS0z4xW5mx15bU!O7jVIV7kD7JA} zezdPhNlnqMl&w^&lsW3+sW~alF6sKvq4yAsEj}bq|B+tCI(7m%drxCoW33dult@Wf z;JSvj!oHX+zeCEq$Eox*EvMTEnxp7ky6)4pcTXO`_N4jbcwc%ggQ<(sh)IXCia9|n zG{EiZEJVRJwE9;~(y&iVve-1)H1+qF__k@G!g=XvX`CqA!H-*XTaJT{gN0xe@LRBg z(xK96hPqN)2}6mXqM+i?_}F;C_(D2&rZC4M=U(Ps=3?eXtBL+6edd<3mhYBw4cq!9 zdZ#U&PNDkzdd0e0`i70t)!EhW7CNdsO7TkDloORJa~7=o>i)Kjw3N4!)a@*xtk$$R zwgi}3o4v7a9jNI$P3%exXb*^f5=O-eU&gMa(5DD=Z*qGrpe?YTF_CpD8ZdB`a=>P- zJBd5F#I@BzFv`$xo2`*KD`Wk}y3IZ0G9vP;!sk)eR1wxpvca|Cu5EdbYgfbHzBAX^ znT?r0PRdqmPkBylPs4xZjzMx6a`d>|r}~B^H`R8gMKN-d+3h!~0#zhcf~}kPXxYr! z;&rMQ>spJwD{f8C-iX|YxaDq%YzgtMbFS+dkMY7<hg(Ng`kZr&LpLOYXkRQ|d|#%4 zQs_I7HR9J`@n8dlhdW>Yw>>eU0;`rc4a+CuQF(3RgyONEt3U7bR=>3wK8~w?d%Kr5 z5kFyz9jY3*zc7Vrx@#KQ7l=t88Xl?>CK}@sp-Vc=k;?5o{Y%n)L+V~CMQT0MnnQ)Z zmPMYMQKW*^PH2U<9nvm3$ZDlGHm{qlE9am<&d<tN!{g-8z43T*8U82x55|_?n>4mz zLl>X?i62*?r9|bd_{;(+Vu}&Ud`aixxQt~)QSUAYyx+y3`~0BzVNJs}%`+XbB>9n% zQu#ubQOP&qIKGqHhi-tYn0cq|3w?Q9ry`c(TBbk_QHB?_Bd4%H7e`1!e4ML9#apGs z7VAUnT`RBAD$CG@=K-h4RyN9H)Dio}xGH2l7W5X0l6_76_lu0E4c3-ARz2fifAXhP z<}i()j5YpTjpNNa%Y8Y)|AGHIp`|!XL5GDxceks`j=w?3)n^rbix8P9OdF+2==--8 zM#p)T$`hT`n!qlwuabSRQSZ;sz0Dx|BMdF{ozQ@zUyCP(D!OcX8_lNoVcBFNgkQha zyk32iN*J{C{@14+vT*00J?X!an#wEt+bkxnW~>f&*I9B5uv02hcT=&Qu$EVvur{=t zPOfi0tg@w!zhCVLX_0Iz>=F9jX<0flF)k>oS)_TTd9TTHI<wYnx_IX_eM;unc>_6~ zUp45weG(bzUey9=Da~8WTRzA=G~SBVe62XROL=fKtX6h(JsCorL3~1`#co+_o13SY z5!O_XU0^zr!5*UOe$GDgX2IgY(u&R+{6p&^<+FWoi?(q~i6yY&73Ej;8+De-i^7_M z%}yfYB11Y;Bjdrq%%ELmOk{fDaNYM&W|ayj3nHZFBY&wmV!Lwic{b7dVlpZ_IXfVb z_1`a()q)nkJ@bhTI~?b;c3h9&Gap_e_XIlyCq7<$_qb?S-67EVu9HzKVC;D4aVYeh zIIA+$k=2n=)ArH6?bNrc+0W|sfGmf1V(qHS=P%LA!h8<D@LJcUuk-D|?ezxHTA&;K z)5K`UvN!!{b*D<F@s-$#__E|$_`ImW^RK0|UqN;-@4U<DUoy8Sp&^sc@z=39lE|^? zv7=#FVMjT9BK-V+MBSba9!n)BEhfP^Z=MUDM{C{?u?61EA1zKyr%mUlUZf`WIQkbq z9m0-CYF7t;3{rNFeB$CTy3&3)>Gl5QO>tJZfupkRPaX9B#pYlAwZ>HGLn29H;tLXD z+U27;7t1QV-lR5{RaXK4-**524FQ0EFYxvN06f_N;LrpB1kwQDjdOzWfHVN;G091Z zYkpce&h}2D(D8W@^?q=et$0(pnlk$R4JOahAP)};CT16s1T~WE-83S@7cp6cd^)<f z!MLxwQhRw?T-lbO9V~th%i5_`?JM1a24_!CuHE7Mq-z}s$MdH#kh9BQ*0<||-n&h= z4-1z$66KmSrCDwQoaKyEpR?S4f~etF{~wM57Mfh?I2bg}L{kV3=udo9Pw-wQzza-@ zbF<9=@oh&`>7O8RTpv%E0}N4KtoL6#avI13ID&p+gwaI^LH8;h$)J>Zd&@2FB09IA zN-z`b1bzxTM#bG}6Y=c;+)rfZ5O$5RS+v&_?nTm38>pDeUIJq5bXNAD6(|Ml8m4c8 zT!;MqNR=xVFcDV8imDL)kcY8U?xnj)>b7EBEfNFVBHCZAU|}LGf~XKEb1?x`(HKZ$ zD~ipOK;`T&Oa#P?%KDFpe2^xJ@5py~>%4$FIZ7*mskmv-96~4X>8(qAV5=woLnG&P zx6;ap|K@wt&co{<xk!7(08!-cVz=p_IXfXRMqDhaNQt#CwraF3r5VQnHT&^cd}TbL zdMit@7#ZrF(6!&|{dr+Bh*NcYjWIxV^k5onSvA>l6*TSRC1>Aew6z2V%_2Y!NX94j zJnj0Rr^Zufk%vcdmt#)Cts5i+58hHe3<q7vFHVMB1rIt1uRC~twTw^sJ=lRrJq<nW zqShXCO)BR-=LvU9^Bz*5H6ticj#5*bxE!p$8-&F}Zi+I6S|!v^PdMslmGo_F9Z+W* z4v(@EEi+ATJRTcULiMNsc1Xp))7eH}a#&{J2csPu*&L#P?3zq8W<pg+T`S^h%ZOb# z#o?-cHQwlO$Gb20qwF85bCxSwAg_e14jZjx?9=jJDzkM$YV4=EyI|F@6BruIkB+zo zIR}VY+-pYoD&AbF0-LM#x~*74B<)j2o?;Pza{c+3iL#ZzMJ1Vt1$0z>!Fc-AbGY}c zxmm7hJnNX5*AiuG2DUd6fC`opLl%_~H(B{tq;KDTe<_5qL25k_B8?+$QOT7oW?~O> z9Dt>_S3=Y%qPpNL`3zvs_%vR?znspbRbO>7{t$8LU2+9uMCYGRiUd+d8v8>}1SWf| zDGO>W^EL!ih6l^aWp0>DyLU8Jh!}KlSD*v;r>B2Uz3TvcDI+y?Gj%a0)EwGOFc~0V zc?pp{aV4om*L}ZgO|1JyY904{c`CLCej}4h+i|+KNlwiwQWehA-8%J!GVqLTlgh$P z_9-XrMg02q1xltq*{!(mAAa0uw45eW-evM5m1?2O?|KoD2eD6lTUf`7Chfgcxcdte z^kJ@*zun1wf5^~s(1yu{87#q`t||M(q7*8hF-zqyem$|$*z#nv0D@i>sQ-E}gzd5a z?##}oGA5T=msl>XeMNH?M3>AKH+PcEKMiEnE_Rvaybx~jBBmn50>+6q(;;Z$_)_cW zo2jsJ*jLhRdg#zq7P2o(3iv#r3s|qPU$59OV%t;ifNovFcQe8|(fwbqO^?kD=wzi5 z1~eDJn2}3_7nBN!W)%J7Qx5oqdj1h~xs~=SY>m$7qTsS3A#9EX_*hvVi#!pDlyk}L z+}wVa=sRzxsGPuKDOuh{Iuz~u%=%P=kK6o{<9i(4H<Lo<56xW)x68>y0+Ub%vS2-g zzuLBTefm0nS5@8CBW2?-OPC-x6|H`dFdeo8SwmC&H>2t!dZ?@;gG{u(-{^d7y&N(W zopBF)vvVre8!6r!&m{=gC$=m^3&sr-wP9yAq`LpxBS?Mmm-?axMWlSg0p)ZWX?*_k zL({VtB98rem8hBK2G${Ose*=XHS$W?*KUHlsMG0!jU1-N-R69%GfbK@QTF@^duR;x z#pw)m67l&1Vi4mwFCnmLwK*AlNPRH~?wwSteFh0ppA5&WF+VluoHBMfNWsF|!ysYq zP%h|f|6_eq&IcHyt-X%D(<HuZ6+z$P{%s`^l<WF|9=d_XM+CCAe{|L|Fk%3y&geJX zG?xZmM>1$1-OqBYd&klx*?<NSR@uQ>-my7rrTl*7yQ>6!jv5`-w%NMlUaj}d`WbuD z!hHw}W`@Q`P$q0#C)DTMb+#F2Uel}=7JL^Lgh=VNLY<A+r0L_BM3{iVrTPq4i%KX; z97^aZ^~HV2a3&jye#L~=Xp2akKa^{}p3NS?eDg!X@Q{4PIubKtOniSPtx0{!2&3T! z4ce!Al({hbjOMA>1sZ#ehaO5PBMiB!mzS%tjqpIB*HY^b!L7gxx<B33mKm-Oh5qJF znL;9u0>**rtj1vvx4RKy7PI3Xeay?2BF72|!i3S26V7=Y)IOvs|43t!59d?J;M8n0 zFB<XW)Sil|(9TnWy0ys#odc%76lVL!sLL;6n^dD$w(-EO6iByYWx4dB7ChqWQcgs0 z-*~Av_ZV9d9g7yxBG>q<W+NN3^W)?i1E5DI7nrcJ5-q1GsI%c|6R1F!@2c|TFGZTH zgr8Yl|6St9BWHHdS0>R}mCCvAOIq#}7uy@CV``ZHt!4(WvtJt=_zy&cQN9Zp;rb}) z<6c6<4(`sf#WwwUQ18AyQ+W{+U>(ou*LmT6tm@6$;bW}i7MHa&F89kHxbh4BTwDuk zL^fK5zQ5YS1N8?qyr9vXX~4I?%&o6U)?b@ck1R|ef<rHIW058xe9$+(sZ^Y$sv2gP zU}c^lyGkKV%I2@_0SPs=W+rPE)3J>rE6QH(&lh;&0gq5Ey%WozA6a1DtuqhGT)9qK zi2+u@Ck|ex)~ogCpOC@n$M2t<QpL=r{MFT|ykF7zqcUsTbn@6b3RO(TYV_3Les@S% z_Q_qyzvj~8YSIF<YHu6{EHWnsin1r;tz2`rsBCmHZ*2S>dF*;%7edjCcF`yI<u{<$ z&@LJvpK60bYW<d*uU??Tkf2_2ticGwWUOtH_+fXf6|t7EuX%L&1~ro-qEnh5WinnL zB9nJXXy~o>ljGlxhu;SUk8wr0Fh4oY8B)u`rKkqawBw-{)J~i`sr?};iXp{A1S=)+ zv{}wEJ@w?51iFw~BMdJOa<WCG?Q*&D)&R394nyzKv^h=>xtCjcjZ7w%O1kKuvjyEc ziym^Bf+`pRnY23(MFT8|&k`%6${cy~x;2Ss2*E$RgPG=eFnE&vQHJcISA-c1Ad5$I z7Wc&rE5t#uuxh#~d#^`SBI0Ti%S2xX5!qzA8&A^JcNv*nS5X|%Bh3ibsa0(K1hA~* zG%at?D!m_@m^jZgiFPv%&Dk}~9U|MOuGU_SM6qYIXVdF2B~y!c7?^0$r`kJB+#bxD zTK;*s@(rL1Ihp#y_!ZB%Mtrp-_y}-H>gUs9bOYI-J$<L2pY*jZ5UmcRVoAQ}@yv~% ziXHlSbz%>Tl@RT=#NXW(6YtR9vUp?J79~b@=EXH#6)j|d;YR<U(xMk5_g6$5Q^U>S z-fC!_@-@K=cA{%*ca*#{H!Pp?rhasaE!jkO^QzJ4NtY?iX9gt4JFxiKJiO>8V#S6a zGDV?|nLzg!8?-?!kLY^nR3ReUCQX40*_X-V<@23Y*UCb<A9H+|TZs`9IlXOo&WpXt zmW4gg472%Jv+?S&JWJ&oh7+s;^8OZ|!j~VnmQNKcV7H2~V`%)gsL^K!<GM>rwEEK7 z6W2$?B@?<CO6uQnU=y6>ts;2i8jaf`K4bNDZgM<f>7DvlihGAC))eZCK+H$E{UK*~ zB+k@l7ESST-FlsAJRY;n%BQTxls!m3m_sY}G0P31Jw|Nwt}mfwm7ML-jN?W^ZqRF7 zp_Rxv_q44%3gQQbaAMDPG|2!LfZR%*<@sl5>Ab1xRZuiy9M3n7_rW*d>aJY*KTav> zZdrpB8ur(()6pdFy9{g1X9B6b7tBi+{`A>tBsRAAHS<g+dri@?-#eGTEClak9Iqor zDf0kxN%5pOh^1cwA89y7BZyCwH*+CzU3C98FDX2)tx5S73EFjembNCiQsk?vTPJwa z5pD%YC3*@kSTqGumi#V%LUS(3u8SEWIs=E)APN{ylI>@ulA`M*_kXeI+E69U+Us2v z>+Y>d8U%=aBZ;JwX+6>PH$Cl!e4}l{=k}WEY)2QgYw4FY-IE53QZ0rGPy7T&26M!1 z?dT8BA|PK35kl}}C~6Y)>ePcO=N1YIJ)`(U!c1k5TON=EJYE8aP&tfY8;4_!j=5{+ ziAIf{F>kt8{s#BkEeeyCGRpYr7e2EtTyrDjkTta^Of*{Aj!z_(@Ed11l@<nI3X)2( zj68q2j>#=Fti?-EQWFezMk7X{Cj<27*;6NwGeU+R;&5FPX}ext-?{7$ZBWQ?e`s0s z=XhEsZ8F+q9GccDMJw|r3Jm9JQ$c5#Mi7jpQ+aCE$HgF2uUNdCNE~#_0Jj;A{U!71 zVoNHbkLcVx2s|pnzp)YeIjtx+F_K5cpOM(XF~E9-B7>Yu8+J&$9Ita?gLzHbL7Ffw za(U&QIcUv0Vnquvsz;ogjNkipI@U-Qf^L@9oG?e>TeCK7zG^4D<rza&u)Q?LHDH1j z6UJ9EnK8e<)D~{PawVY1UFAnneAZePJAdy`e5&V><xUh)@$R3B>)71qLjLQc`AQ!0 z9VyX@EZNjG&!rOkieeUr#k*B3DbIGRZYT`lXvqQ*s)GV(kCJ#7fS+Bh-FQHYsPVV{ zSc6;Yx7O%SL~=@JDTzf|h@7(^@*~ixw}f1T9F<D`15@bK0;ow3@qz08nT8)nWs#0~ zs^C5z5~cB_PSo=U>#JYubmJzOb1>nCNG4k#aR<~S2(eDwR!mZ-HkkRoTwR`>0MY(@ zi?LKi)HLNf6T=sX$W*OuS7ShTA}D)-(M~>Mm3zeh8;0C&&GxW6*D8x;RQ`ONLbrZc z)x&RR9NE2bT$OHmZC))_BX2)_)3IQygEg{n{V(HzA0O9#PQ)0>SunY9(2aToF=otP zD*C%pV*O^WrR~rl6=_*usHnL<Xc9zPiFc(OE(E=yzPRDD(SP6f3S%IRY@7ISZqzbi z)H5~^)zuM2>kSxGJl^(P&pEzKmpr!8mTAE@K10)`wWwvU$~KSW@pHm}HG22$CV`p9 z_IDB_QVG%LZn574d}M{>r5~eDMfHHG!bNT2R=q8o)?RJFgpLmZ^*8%zyStx2TM>nX zx}JgAgRZI=Q{dX~yC&1qLh=ly1s!KWim+c=!SN{EdtLg1A<BG<_dF;Rstt;3mCuv- z=2@p#JqsM((&UXlZW@bPsx*Q+=2DxLlYTF&j{L3st}ojovRb{^ci&CFlUi3IS8IO1 zv|aPZ0#S^+T!IRYZS@nH-xVixkV;k;YCktf>>u-3Corn@95)68*0u<h#h!xYQobu; z3^=ZqX;wQQKKX4oF$zSjmMq<qpo0R%pe`W<$-1f~(a~aWueQ1wU|ak%{kwK}9jlr$ z+ewED50t2{D8b8<B1Rvw3$}*aZ*iM~=!(UQMwEDC<`=|=cun60)<R}alZYT%bNS~5 z*Rz-<3udKTR4&1N8BALOJK$9$Vz0CpAG2pFQ@30>TYwGi=@TTP^JuB{l|;rL*CtGI z)GhtnM#MbC<)q6v)jNbCzb^U25KaW%_jDnBd_y{7kLCIfg4Zj#gK;VCdT+_Hm-82c zZvrZKKMaJ+(`Ge{i>*YNODcMs@gPN)pmYdEbhetf9SIiYT%X1I<k})Ag(4I`bUEYt z^fbN{REd_yDv57*;oP-lNu`z&mj{v$St;{VxK*Sh?6zV&a;vLURnM?x-g7rF#XHV3 zR{x&#Jb9DDFe^%6!Z*C3%bhS4>kNlO5}RvoiYIu`HuJxW|M16b8EqSIQ2vFm5Z?dY zljDiL0x8Mk-bWX`i|Mm!b;uJe*`f{$bO<gmyx|hx)=GRWw5I%Ly5)*7f$l#(h6Vyf z80_d?w9cn;hJ6X0dj5w~>QMW}EX(!<Ig3haonp4h>bWl_Y|H!yFHes!#f4vI6h(%H zayU1DS?_$IV2JBO1u_EfeudV`|CyX|rtI6c$1#_1^j4hx`|IOi%1gxweVs@|XB!-J zU_ae85}tDW=r8KsO`5$zfKJ8cQjc6n&iqADZ0LU|W;Fihn$d+saN8rT*n><!Gx}|@ zErw1z00rDhgs1}#DbrK2XJzct9AHGw(kyI2Dly;sSTl0-RK!{okvI2$Z~L#TO|n8- z%7&y9e&Eg~RI!Qej&!AwBNSbehsd!bG#Y-2yrJDrn#D6mNGc>?f7s5<x?z@G9>PEZ zcv=NCUf=(9#3lxU%DCe+lx2i~V+2<8r#k`|xA=B;*vM^9pWNm@PC25*!6^2pXV!z) zd05+{?4`6Mz&gS&N~v`fj)UgW;2`X$?{Ki-u>8c<Uxa5I{kKWQ51pn~J1{E!P?8Lc z?_#(QU%3~Q`WNrgX7R89v#U||P?}xP;+H^&NQ<$QlShiN!Srs-=o5~#AK)Gs--}n` z>tv)vBH=W)-mH=Ya5LSKxa=g32@O!)@ZxRm^~X^_?Ao{edan<Ll}{xK$HI(b3!7)4 zBTZo&#?=(}UOYvu*)QU(STtw7)ECc2RLl1Vi>7u5PhTulZvTmIH(NUVt^xCZnMGa4 zX3ntNon$CIP$zoiRKyD}yk2*rcO3fkWUQ#3V@tA?I+x=GpQLE<?GtPoXWRXux463s zY^CG?zAr+f(xPzc#LSrm3dA(Q{?|&ttlo(+wOEG&c+?eMEg{EyGq49`aa!~5cvz$Z zX$hmo$PU$yG*+<yvGuY$$5-)4q*r>w$aQ<eTJSfGwdpCoJ>Extr#hBuq|6V{L7)uf zb3{@`TvkWNLII0x5B~(y9DlfTa<<eE&BlCn^QX{Q+aL5l*h$I+(7N#5sV%6$M(dbW zYRp~fU6oU>Ep$|F>m4O_>fwP^w|fpwJ?3#<gS^86AJda40*D6rm%i|Sf2%O>mXiW@ z_r>+GHoxKUF#V<-2;AxK59#bFu)~Mx5tjAM<|9-t&gZp;(UFK^c{Qmb-o$iN)CpnQ zkAg^!4-)qrf^TypM;!d|6PMHew}_Vd-Wi25Bwq8C5cO1#+2d3Zk4!C{!lYPglojr& zFPyB;2%_D89z>u(!BMnzNJ4OWf~uI<iV{p#N7$(L9^(PzgbP4W;}^r1x6b_?z1QXc zC2Ybcu^$1(8Y~uqja;oQ=i(<n1?*lW50HSMgolge4NrdT@zAr-z(<305dRLO7-IMX zI!?Ej<<pQGR8*9%V2RKqTi|7B;V_xBa6xN}IIk(fPFtE4V*~KXC9F{{H)%6o_7OY# zVp$=MM={@lJ`XoqFJZ-H#V*RaVfrZZ?|`9_wS<XTg}0eVuLS1@Uy`?bzBs&|A|7zC zIP?@*Mfim$WkliPw?8yFnrf`vh5~#E`~}~kamU+XQ?U;NQe5n%r~3K|4NNWqv&184 z)y5!^kP*-CA4G!T$bACN##(kGx&P#bBE6#gu?>PU)OWr9u72Y#yv&^X^lp<DhQqEG z<IYh^)`i(P?-S6C=`KJ6h*3Tz6m>oP3ql~16n!qZbmbj!T^}+{un9~L6`!{qP~eyt zACeFawEii|j`D~&JA|63fej=|Q1yMfe|dNP&wtFRO<J++SXmMM9D!q2p&0ZL`8Ah1 zUYT5A)X?W)zs#mIs{B5skYTa`DPA}DD+57^6gx$g{MfbJq@lCy6OE<`h5cu55G}uY z#TBs_BWJ~Y^|~6yOG6Y>mLUh48qY|4B7Pf4h_-OJLxbGAdyx64+}+MqN>-_VHu-cw zQs-w>1+Ed?oBpLATH|TZn?#RgWtE^(LChbyxH#rZa~3*x0QTTHmig{qd)4CG^MErv zqOMxj_<TFa6cG&jYT|*8YsaxO;XU&DI~Kw8Qk0yP-K(cNdj1V1GDb5uh=4_bwmJUH zE?>qzd${S_)DbTUEC9<=BzEAv7R;cDX-a<4O3}7jzr>m31Wz&9*ssb*ZmdU{+Mu|n zZw4X5Ehm!)!G*PCW$s<t=juL$&)QL2KIyQIT^9=Ih*grCmopjx1#yad6-z`X2K&DY zQN(A=#_&MII?W-w@gax$0L2JHra?RU@<DfqRi!I8n4p$Sw?~v7&ZeAs4Gyj!(Zihh z&yBvwY5Q_|*80HO(x!H5ua+;7KE^|!=2xp(;M_yYz;Qf{)TS`s{wwns{;6smwdV{0 zYphiA=kmoBrX;=D!uG(V5EVo=K8bdD`|qmKm*h<DXN=8@iLh#QGL&o5`js&YL|7eH zoUH&nTT{hZyfl|jOOkG{`F6<?SXClZM2}Dq|Cqx()}RmiTn@QP6A*ll(gkB+5cwv@ z+^%)z*!{ftv+3-kFqLoz5g$W@kV?jQ9Exwfkv5r)x?d0N`JMRwP~{*f_XS0S?Edd= zmNCv(;1G{C841C?8C*GP(?5@W>0$n@&EXw?UI`W-C7--~Q<>l5{&P0IzQOeaB66@D zXkLCTsHHJXfx)E?W)hsY-{dDtT56aXeP1JU)acg$%7d*pUobnSYCdwGo9qvDt>DR~ zA1P!&rMq%|6ru6j!DOJk!|Ag)zZCJ6WLqt3P_{K$!Y(;N1q8TFGdb2D8A0RO3?3r- zW8G?zW#|O;x)bX|>9NIWo$s!;*3r%97^zo<zPhU`Bosj+i=Kbv(e_F=f0sYBmfN_s z%UTmA&AI=5(7puP4XH28<c>uicdfnj_jWu!^A8o^m^S0Ej|}7j?=A(8aIR@dCoCM^ zHv1aaa+~*V*Kkg@uGlovoqtRqO+~hTTH3okF!IXgv3azcYZ;$Wy}zm|=-aPue{m3Y z*A;74?xB#kEgKTJt;u!(Y)T&g8uj!$BtDVtHR@$t1#+ys9JVj3U!p?t*%pwZO@&%< zY~#Wpvd)XJ{+PZ}4NL)<L=kYwQ#1tS2rH*tya}d7C}lLAe$K>nb*Z`On0B6P8I=j& z*CZv>`xn#~M)3Nnl<`h7qf|^l+y3`Bu1j*(huw<YmKR#mAupNP1H!ac(*jBb3RL|< zqBU9hXywZNLWFD7>t(o;ML469u{!vJ*|u8ra@p)INAr&DxcjlJHB)}IN(r56T5WTi zM$eJDAJO4MI%)3bz{TorC(|=wDx&__1z~&g<W=M<(zV79_QxWqSD8D0x<$8=#}vYq zi+smFq!N#B?mnc=w(Qx7qzG;am+;%nJb<X-Qo%X7w8sHIOiO&50?}d72$~E#gNHYG zf!pJ$S+57fSJJFTaco8Lfaw(#O3XKt)`fGQH=8{YlIA@?dUL=9D&P;<;NO}o7s;?8 z4if)|N+mvw#`=+JB*>djtt(ghoAdA@pC_BJd~Y(%LR7VJ(BvyEML0#dXvN>wn{927 zWjN99^r3MG&{4$ymEvS#Wwsf+tm&IvM%G?Zzp5uG>f|(}s_|1wk)EJSEZsW!b$&1C zm>+=_!(#m2ztTu0l4SQ))r!Yipm62((!^Q}sWW#0N_Awx?DJ=0zu@jO&6ifbAGOMp zAFG~Y51b1dCvsooPG}mRh&SAPi~<E~hUe&&wl#SLW}hyWJ}e$lDv{1Ei@j)m;u(GW zLc@|Y33_2JahQh^-2ZJ>&&K<+{D&0hYp-#|0Oz-nmWP<rRfZ(R%2~tvUlj^#q!t~X zw{Niul8KaH^w}FYwzx;^^uR5870TR%NPuXbTwTvUjLo661Z#>U6(`bki;Xd6mW9N* z1y8fnY(m9SNS;AQgR)}NoGBlKZAgH}E|=J>a@W43=omWas`*sAU=}3SLo(Aynl=2h zY=tk6d%BEAD;acPI^L$$)*)A+WDq2lNgT9fdc|ru`yO23su+SYv|i(O?5+~jY9HXF zkS>Cy@2qg$y3a>h?ZH}>?bk$PK;cqJWJ1nV(vqQ(E9Tmj<9MlDL4H}RSF3O0(f);p z$Ucs!@;7i+Q3q6`J~0lJtki@iprjrR`B>qU%$!Fyy{~cYHZa(|x6D}LhB;@;J=ljv zR)h?9s6Rs;@5ianB~jaYih_+rV~C~&M@XT`#M;TM!*AS3z)X#FbqzBmhLLWq&l~yA zOZU-@&3vomE_I|IVgpz6Zw0ReR2$Uqra3p71$T#gXRw<q<1W0vPYS6Lw9fxCeBrZq zZZ7g~94x0EYz=k2v96gHm=GlwBcB!C`<h$THdDOkRXpD_QsRaY#N#5fKlEaeZ2>#l zv8;6q)OqbLoQJ&h?%+AjoYJ9B^Yy)kb)0k)U&<@pXL-dJl4V6LPQ03At7$NpJSF25 zSh*9av2xPtTQ=>S@P|d#>8E>S)dhkmbGF>mrKO#wd`C_daHMb3d5gWN-a$Y(opRUn zgqws7mnCW2StbSdQpG_C!m-!*0CTi`NKNxZFNl7Hi{{~lkzbRHFxV$PN3XEWn2EYu z<+g#RwRwD%0_T$}xpaj)`S(Jn2nSIJ!FN@WG9$Faf3VE!hag%s<Xk${Y&H#Q`QV9A z7#Vj;>(9mJm1$LU1}xt(Tk|$<56HP&b>X#}rpRI11`obY1}mx9tB-IzA*U`wHt=zk zL(e0VVrT?E;ZTgjC9x);l}ndr{UP^WDdhNR5vU~ysnyc0k&(6SDzZl0!0p2h5A?4W zv(>%5N98YBFlBsWjO>qhHw1@K7&K>+2u)b(e_IqX^sQ%D=m=we2LE<aH2Y~WEze;+ z9giDA{*m-p5wt-vlOzE3Lmorq{F@@sa)LcRq9~_mpUPvCbIS*okULo^@tiJb6V;g% z&|6%pP&fD8IJ_e=lL=X7MfpV|?Gq~DND=dODuloGf)X_5)I6W6?NPOGfY5ARJ&!Qp z;%6bz#`vO+mdbAi1A&$%o1Sau?u4m6<?i+ikf0*hc^)bpOOeSRu7WxKDG$l5=6f!^ zJ5N90n^ejA_Fn8=zkd1PlYUg>5ARo9fmI_Lv?Wdif1Yvg%>SXO?oSEi*-46abHM{5 z5QFw~7Xk<0#u(S8N(IT#>KKaeV#*^an!^*j>{4k@=$TMw&<4u$n%YAT>SHd^-m-pN zsr-*e`RQQqXfBaL#nZu36*NtQcRsa=>9f?-mF~xeDr}h}-?bJ`y|OgS_3O0J7r)xB zzyE3>e95!cq8(H{-lH7VI&1pean;~aPhS2Z)XJGkX4L`ratx24YO1qS?&PH<%`1P< zR1s)atBuhl>$nzTO7ah$l%sohv`|EY$OXYZBD5tPaBvmXIQokX>K*rGnIjc4CLQFg z&ZS3|<*^+>_$AAzXyCS>E(|6);m^o5@OYXQo7LO~srGh@5PfI6+R82Ifm6%`bgutI zHfc7i)m!CZY#z2`BL{+`pN9p-7gvw_WFSj@uuwSOnxPREhiObn_)whNJy~&|w<6@~ zr6CofZ1z~bh#Fh<T7Mqyz`1j8{ymg2rxDDi&~eA4^k*fh&>;x$d2buNGMkU=hUr2n z_p`;b35);v^JiLHg^6D!#(X^cY0n$XC}*yxzvY0j1^3u_YYOFU*uB~}yF%{57_|=j zflYUExE(LP=oZwID(%BtvUKba(4(sVQ!&9Gk<3uy<kv2=Qz3p~N$_1SuU&TYVPMO1 zU!hqimcG0D+zr8XhmK9wDW0rQF#oH?#1{8Zz`VrYKy=QXF`b8JY`OTBXjt0g#aKBM zColLSl%qD4)C&&s79;C3mma>K8|9x+yO_hZ8GOD+v~wNt?Wc6jLO92NiyH6UHg~5% z?sq_O|5TrGerE4N6p>Gb*b)}#9{^`{aP_gvOh$0)WbFczi|!uY%`ci@bGLnL*$@`1 zYS>jN>*_-&!r8x+Ko-k7-kP*)(lwy-^tOxFS82VbG_YPKK<Go^(2Xq06~<nxNN>z? z`KA2N(JR6<kO|9<6}<NFAt8b%)x319__O(?HvdHRhlC14yS^g|Rb3{fT{I5Eo*KUu zS7>xa^n$mkI4f8#KfBn^i1lE3Q_7Yyxw?CrBxGZsL}rzpO)eoRv#?G<f3!NLtxg=O ztGO}Jmqks;pK*#q!BX-GI-x;^b%2{EEJJ!Z!YRl@Bwsv2zz0wMc%K-rwrW%UIR&E} z^Jc)JV?62;olpAB_J_`9&RB7E9i~3Fb6suyL27E2=2>;JeSZlZhihlY9~<%AqyDv1 zU$7#HRHCt3i<Y{#uz{2@;1baFuT+2y?kiYJgwO{MI;Iobe4+E31|N?RH9E}w8vBvu z;1MR~m0gtabfV4iNP8bxL+qbJfa0%@xyXnnB&pbDN&X@ksd=|`z38sFLBydFLVT6F zB|F^Ku)N22WM3ju>p2!zO5yp~cCQrqC3sD8igu*S0M@KE)@Beuu@)=l;7WtTWtsDl z*>;1v+PsutqA}*D5&hU*67jFyUS_=ayb){*Xq&qgqUP=0)(zZHjU5vvnIOcE@G?T2 zA0{E{b<#6LKgM)0R7mHCL|N?;Z7}Ja4N13WlD*DI`WeKV%tWqILV_#Ow-K;MU9)yl zHf!s41U`=SwM?iEObJkK9kS!9Hfs<`sO}}Zy8rtYvsa%q!K+EhzIOA~>&$*_wmcgR zgUA@Gxnl0-WDB-$3OpdYi$18j&l@}TQI6S%VfN6#PUO3Xkh_tSNtjN;Y<|8twg~-i z)v3Co`<oHpO^XFYn;+!2gnLJhA4x~yMynAIK#8at;RY%GmeLl%%RSVSM^Es*m(UDy zX*SP%gN)sn^gn|8l2H?scwWhy3#)Y8$u9!jJaCd>*mfoh%2@Chq$uQ#A$PnK7Jf|m zKonKlxDEn%1?^h^i~20S51YCF$#<jxY#@y;MtiwZ5ZU5`OmnNjhm#mcruivRIv>TI z>;6zsV8p7Ru?SQ<ioh8|Zn!qH%X=9sk*|B^Vdm{u@l_#cU_v&ut3Akg!cFEqKwg0C zaLaug7AV9Sy`mNSx1aUxa@L;}pBATH+>sRP)btcYLAZ+K8nL>J)G1?b)4IB1#>`c{ zTrzre)jdD`>!V4f+q3?eS4iMu!NYv{B+qMyTePKY$D4>xl_$&5f|7Lnh+V|=%laT~ z`jH&GR<SVTmF2Xu&}fULo)#)|-y0&^<QC|V^4@YWdUyI;kVWCHFF&~7p9VbF5=YlD zZM8Q*x9UDLw->mlM~iKvk7_%%?upBsEQ?=Z6~~8aAd8>svf@mOhQZBan2rL?0wW=T zSGSu450BSlJ`<NETL@M?bsAyJJ9$>W8(H`$pYZKyy>|ajy^6mr+@f)cwd*GCn7v8x zG9`lF>WIJPmrlmNN{@|94ukGW_Jeincn59YtRmmI`Iy6Np^jUa9h8M`K(eZ|C)DC4 zbj>iW=Dns1gtg;$X{N=|l}*Kom&3{Tt3BX9Vv~JGMq?)lPJQtI|2xh~sVj*f@hcG_ z$KM)_^`;tEx{T}vbEmmqTbU}yb(6Ud@92hg1SZ{I%7&gD1=B+b#Tc%(J|Yeu)Y18U zbIh<C*p5yM;Xm>;tXwEd{Ts*zN{PM<Ky#n6bwb$o(AD?|0*E4(S2;>SvFJ#<-~Pq^ zG%?1&4l+a#+5ojemJ25__<?N?zFFn5=_OkMP#VrJWCs}eMpyE7+Hok!ku_JHd_oTi zpR$-2noAV)B<(feu_FS_!uCE)`Jyswi!U7uJi#dQP<82|^WT|2WuaxEV*)tk&aoh8 zAdt~T5Ks5$(dxC$l(QQab!lG$3Zo4W8N5R*qu1z<uo_&DMq_XB&#rv#UVKx|7MaU( zCM)Y+36-6m7vv_8Wn1)lL5~UdJMO2N=hmY}bOQci{A(Z<z0;Qid%~2%r&Nsn1Y_y= zO7OqC3v6E7^zn^+OZc*IX*~8GxH2dABLdK2*y+6P(EK^)m158iDV&$0<Bni(pvy}+ z9(*2}d;a`fOY`?i=i&xODYPvS&Rfk6Sk?Ua^aCT|3zivC+UN5nq$#)3C#@Nait7pn za|BE^5vjCHfS-Z~qAk9kL=M)=pFHF$yWav97_W!!`J}VYA}yOTMSjZ2{%^oxVFQ?& zKrlY|ZJ8WqgN%KXfcaC^;5K)Z0Kk4+_9DpfyZ35o?!S(Oa}5v@`LrTp3JyFX!iW@o zT^7ou$DBZU$^ornttd-8h7Pq^ZW+uKNvOCZ&$XZh1^F9u3G)D7OC`hz3M#Q`het+5 zO_M~i35BPUBz`RFh)zaD#yyP%tIYj1Me%KJ6a4q+q{G6AZRUr-s&47P8t>W)&o~6? z28Ly)ZKv@lGM@iU%L>M`MIDH`o(+2;B?pM(jr(qPXf_#xv#v2Tt+4@i<;+p2PDLWz z@)lq#1cqxf<1zYkp<iP~6nCoQFoL-tb!)Kk@&|5n&f#wfM2Lw4U&OCaagDJ*Vn-px zFV^xn1+<*Jf?H3);{BXbI98bs3?X7%>f%RD34twh&!Gqp$oPyMTxACiz1xolN`8uG zlSJ&Dq~9k&&@_gnYd$={<d%P<3>yOcM+bg;3lE6WXM3-ZbNh?rM1V2G2?T9KWJ4Vn zRaYtXe2PTlwO3<kG?TN`i->1aFUa{P8Ppd%2&G3Nt?grQ*?`Ktp@9f)GBwEJnSeR0 z5YKkCBJ!?oz}fitq;_rO$IN>O*wN;z<`RUf2Q86EAW8j6C~E77W32mJxwMN7f7q#y zZ}<?h5Nn}|NbEe6`Q((jAjM)83)A4lXpmmbesL5LYu>$N9z%KSZEZon<xG;(0;m>` z*aNI_O{9cdgD^HY8&gi)t&{sg{9UKV8TZGV0lwP!q&~HOJ(0^o92z$ogkZ<3j&@_v zs{v}B-)6`z4*I@G@j7gEOIW{ZtXbfoMpO93mcM{<-upmxE>)ee{NY95x?YVyfGMK0 zkv#ca<mv3$N^z28p4jl!7x8VDDYIoj=>4Fm5#VMf4a#GW$rda)Yexzj&xjSjS%)Md z>sQ>A{yQ>4BkVviB&>-HxJ9*)MqI)ck|}#Kyis!h7`=R`htWxMy+*_0#@<o1aB#a= zTGJu;j$4KT<v8{JPTLkeoAj3<5%77~01V}m!#IRHrI_e~&r*0)Lzg=OK!XN;<mc{d zv{UY<eP3K-kd3Gvf3TYATo}J1XF*v%xSE||?5dgdqaqMtlojMhCqQou<sd~SGT=Hy ze1AOTYLy*?j5=n`FHw>dADC0sY~;~I)=$<rpPQ(DxitA&N(hVq9EQ#;1ZEb8ek{eF zSGd2nlQ_xCqGkyAHn)y^A1E97o19|@jS$7E5b{}hIkws?hRh?NQ6%W&rpGsbtZam$ z)PqLVNw#k!#*Dk&`YTbHIm`4OtzO3t9EU9WO*!|@^f&TrXI9pDogX*n*sQ#5<1CEt zLSPukCP&xD$aa_dd8`qgzx(=sFTJOlEL(sPk4R@2sz-Y#X4{B$E%eQnPo5=c-{vU} zQZQh>PgI6M#$VG4(+n9gXV$3kOd7V=7$8FE(DZ2s8Tm4h&9>c0)cdeCo+KjojtEzp zq;Hx#piYRVxHe<)O(=I?xm=%)DO%dqN_tskiVc{m3(2ELW;1!x9puZ9X}3c@Nr-8? zkxN>?dVj<%Z8)QxW3^$CP^BIzcJCe2Up12@^43@^>n-r<Th|eBd&cBZ{~ehI7?z}o zlmY)Z(Qd_DeM=@AwEy1y#0#65<j*?dcPkswjoYMuV}^<t#W|u04gb7>4f3HjE*|X5 zGfA@x;~4jmjJb!}B29}UB@wk7*99OCGO-uS9~ez~-Kh3dGZ}Xu`{gs1{X(%~9tQIL zEn-jhVVE)<Fc$YS#cKFXL~qUyI)6+=-jSOgW%W7(>c6kgAFP*S>^3oC`fPP)+!E)8 zJ0wLZ-G6wKmq{vN9*bBf-@C$Pm%^CBzx=Q_*#m|%d-fc7k%-sTP4eoSWrH^_%wShS zCfPQl&6g%3QqS>-G3b`1`n5$_ZvF0=E?QrLIjN>;f!?SFz@B1BkVieT^seJhH$1); z7rmS86a3L+aLWrT81D}UbsVHJ6)PYdr2tDqr2PZqxhSG&0v30fI7?Vyrw;c#^+gII z8%Sgi^Ilys|0_QX<MVJP%lv&UIqWc5`hwT&SSLL2k!0=ij{0H&Ugk04-Z5?VN!%N% z8?KF0;_yvOAb^i&u^eX4R<}Pg^PRLXnyBm#{U;=fxah$F2;6HZX}1+r?#$)UQ#Bo7 zzMHHb*+YH#muBd3<(>7)Zc=*|as#&FV$l3%8t+~bN#+VOf>_lE+-xkwadozncW;xv zaSWn_E4)GQ5yA5X9{+9)LC9IWZ$Nd?Z8FTSIK{w<A;O0hS4`Iqb-m`O1>Rl#@M))k zPrDt+nr!oz2Ej%gHrdC@{r+dDq@RaZi&_GHBB<>T*?%5>n5DkZzm8B-q>=4u%J4); z8f8~Qw^&?H*PkQ8gga9o@|%i9;o(ZiR`sQ<MHo9vhLMDkHff!Fi*s<b|9m_xLM|3b zD!EY4>MPHPW~CCpph1yqj_P2kR^kUhHvFhv&JqGIkx&wrPOaaK|DnDR$qVf^AP7J> zXUnI;5$p*7?ld^YP`RNL`BXtuKK<FSV!}uK<d$3~M5`}>ojehpXFw0u(_Q6#;FQ{s z6RJ@p8de~QF2hSN1FQo6G*D*_U6Ky{NwHec8(A}|lV9%eaXq~5P(6MT$iuz=D|j7< zcwRjfTiw6G+-UbcL{V*SX|Wi{(`R&z1fB(gw<v>+Q`Cbo()MGb`3SQn$(p@RQ^2VU z#1##%09!I2*%^OrxQTWKVf`)HnP0=p2G*m#`Z1m2H;ZJ=``>fIqC`^b8=yUVlgb^b zw-KE_Fk=McS5Kd;;g}oY&s3~2nbi85VE6z&vCoeQ<S|`s!F|jQc!Sz`a0gX-K9zUL z@f<$*#EThz1$){5H}q94at4J_9oL6t2GTxPT93Zf8Ulx%0&g>+d&u#;f>&FDNCkRp z^v+s_Y&%~lsQE$rft!>8>tKd^i?Dm05BP4%Zy>fw%in9FG~DI0vbYI)uk^R!#sEX+ z@YSw_f-`vTf4ltqb{O&ANU`dfgJUlM^&Inv&jT*{C*0RCu3<O9^Qb<@Jz>LbE{;Fz z)z*AIRqkE}oA|cg<yLNR4?HiIP{t<N{uHpqa>e!WgJ#3YDso-?`@ccav(HBV*!X}v zU39o1pKn2Tg@&Xn#=UNX;vot_O#g`@8O<cp`twMi%{#y1-jwp#=06;MOL8IP8Bdnv zfdf_cfR3!N5vIRnZg$>?Ao|w$I-`gG8<%=7{L`tTH_L(^X_Q$a<?sc)NrBNxd$nbd zbtHn^DUaQww)wF<UesiRSx7?E32*C36V^nwH7~ksI}|#>7cg0|4tMDnZagPLx12dh zLJApdRb3!BsfRmP4etu9WGk1xeI*pd`){p8>7&Mxa_!@~+eTdYP+0%W5|Vl9(8u0U zvS32e#oub>$L_(G8}AXX{yN<^j`TgeE76_V)6@&S8?Hw=k9@tZBR7kbqXD?-tosSc zWsK!E#*?DIXVX!5>wU}Tjr+2JEgkvq>!lZyU#ZP{B)%qG1nC@e7G;{<>QFa+$o6_e z@!;A2Z{yU}#=FQk{1J;S$>+iwW(|*<(`JV=&fW=KPk(Iz8)kFfvxFe?HpL2K+ismi z3r{O#fO+`Zc0G4Wh}Q;dPBx7~n-n%{w!K9W1f_`M*_?&79#fBCuNN&g6;H(mxdV$r z84YW>cnq&)aeY!ve<Y<?CDKuMAriPQ=S*vE_Hu&7(C$dU_2oq(3v$#~ul5TuLC|^1 z)=`g+ob9+o)8HQ&2Y>3)WGj-!Tv};+8+3nrHk4x!gmsEWbmq!EEW^Ku@K5KgWH+6t zvIDRPi*}V2u|HJSkP!5dE43UVr1WpE(j7Rvk9C{ce(hl^M7Deb(0vVC5<Iny75B}* z)T2%Gf7V-oo3%Td_t}QNP>QlfZ>qDDJd9Y;;BtEZOh)$0UkHm{f$;54H$;J;Yp7F& zJq8+p>I^xhys3~6SPa)^p7_ku(auyP#ua;gldq=1Vp0i>A^9#C?&L|a4aJW>ee=mk zBH>dqcZKGCMJ%0+iByoxwcWTbm2mS$A};w4zG25_NwNoR{)~hWRq#(#_BV+Gt%O@A zJv0%Wm2lNw0@vpSZVbgOv5Ps`mreiBgOo_FwpS*_-4L_~z{}fbDU>wt7ILv{^cRZ# zGY2bkygQv}YaLvlNDk~DIY~{#<LrQDa(tl9Pa`K!k;Y_C`(f?(b)*FI<=}GcYvrgd zU*g2ob80^s_YCqAdUrrIR&Lpl9%Vi6gJI}jkB%Y1$^1v`c5@CnaRc?kKZ)vojp}bs zS<;G%;ia;G+{9OV)IgSSQ+~TXIwH^FAAv9EkM!qcim$Hme)`QcD%Rq1IhdYFu(d?& z>J9>VhL^Sq|5w3z$5Z|PQT%i7HL}TGQC+gLxnw4}ToNLCWRJv^k#$w5>}y>!eXYod zYh~V&eeHQk$lhcX;rIFde;<##-|yFXo##1A;|`i5pU43h*RWmvj6Q4g2_TakXoqLG zA2-*-eEfODg)hIv&g|MkTMNY6Q?X=TzayJLuDpsmlc-DiuQZ|_JU8axtjW|P)Dyj5 zY5;t&w1-J4ka>h-+<8Iy4{uR-LFHB<hr7f6K;86~{b${f1t>v`-ofLq9}IK-{__JJ zcj$%vw_2*zWD|ppkAh9n8fmbX$A_;=^IXx9@5OF{c6%Hf2xRb_f+-c__TLacYJi@d zi)kpQSk)BCyEBzAgsZ60Ahzo8&lc6%C0r5hk>z)Sq8hzD|6`meckyQ`$uR&4DVk<* z+dOlEet+}2)?=<NAIHH*Q$o+;!3F$BVu(tV@Lm6gp-HJ=F;j=$9=bmG<NEhfSrucE zJrLI<HmjS7`0)C4rdB!Qg~<#dU@Ed_Bg=f@jNM`5!)}6<F3%T}bYEy_R6#{E?|Uy? zPPBJTrHOrV*+?9&S1-6G-rr439&v#Yql*5|<WhBCs|7cc8`SU#ig&4lKjz!Jdp}Y* zb$#qYDWCySN1wLQ_eXET7}#SxyQchHad=nq?7HWK?baXIh#Xn9-GpZ<r%QXrv1GOz ze&CZJC>iLJ%?jCeBKZG2JysQ3(18cUn!>_CPeykY-*x!HsBYPqbNdNmukri(+|A!U zQ`^&vIU;v>-J)vhuVMRbo?K0|hQ6$7rvhvugbR-*as52w!s3fxaJm|c!zny*vexG? zkw9t7tHaI~HW=Z1#}DUWgcydKK%ffJbxW8SPh^d!NGwb)Tm85#ZZTPh+f>S+SpM&c zu><tMSl&+z)f|{>fX2HI(}Vjx@%aZj1L~i&a_%=!8OC30_q^X~P#2~wDA$m&mDXGO zUq~chQ=EVK#9$EIfKbM&;gv*Tc++cJ=;-f5Vpz0b5mM=&mNw*C8neso)hIa0f+(19 zjxZ=?Ku7(wU7oDTIOImXOgZ0ia!BFjh_+*c<QYPMumv2(zkLWJV`J_MomOJ>lJ+W} zI7mTZR;1DC{b&##`gEPtXpwk|<{n@&2d};7K>dc3ck$$cPTN<L<8v)?05#a<i@mG! ztn*OQO>b76Ma#x4s*c=D8gh+b@+J%eAOAv~%r~5<k;jK+$g^}N2qBf~yIP~W(uy?u zN;30;i3B*bcJ28~!oor6vta%jZdViYvi4N}hos>z5d4SU!V{<&I4+5}*yp@1$(7NY zth|E?0nkz%2A0Tyuz&3qy+S0kgojbH=>QoHi-v%rDN4%cN7iBW8yCv?1^(Ze;7B(W zs4(1_Q9&!Q=AsWu#|{>KeGlC%sWWO-vChA@Q9^sgxZjR9Q5vUf*MCEJ$a!woez6JV zCIk`{q{+FRa>+@*=W?J;GLjGD*nz=zmilece2B9VOr3ecq_dOTcWhdNa$QuVKDoC? zD;nnYHJdt_qOBjN(*s^&p@zVG6k!1J6IFfb;L_QdXViQ0W~I#rrH1hl*(E3rR+~_? z*Z_7p)3;NE542Hl|FRwTyK(dvQ1H(j1kQ&#F@^!ISI!&M4j02G(<al6Tlrs;zm1F* zJ&6vp8kt!0om1gG-7ha0bRe=BWif|S3(5x8b2y}I<uDjNf&g`TueQwE{5KkzTB?`$ zHb(nqr{hC7#YeU>3%46Q!bd`RnOP}fkprJa9SmNCYQjE)+ZJO@HJfsJe{g1Ar#|@- z<vH1`#*(+M+GX;w>wEfrWa$7_0}yh7dUlvVpH4RZfPc=q9^NHMDuEx>6nwGntJl5T z`fh1$@1AskmtR>{FLy_g3P2PfRfgZ}F{nMll_$tkt(`9-%Rnaf&IqSXF{H)nBGCqA z&t$2#W7A@gR&w|zKhh~ucTuPRma%4`e)!<`B`wEDC334{*}Svmxxcl*XF6lnrdbFO zaMyYTu#4adN31+97Pr6!Al;vnB`MGt<1Zh5vEoY~fLs`0e?28usL=o}NUmu~a~Fy; zGb+H7N^&y1=AOr)X7wXjmG1P@+SmCiyADH;dgo(_6y^t!88Q!nXLN%09i50!g!i%C zh}rv;o2w5r)qZ9k{Am!mOeLg(X({$UuAs%e5~5=1zQ}PlSe9L3B0>8&0kP+l0=K=O zD(5>4O2g)sF%KP&Ggm%((i>4ed0D~mRF|GI=c5q8mq;(s6nb#k!(gZ3{P@1deMAhO z<g94&JjW_N3&Xd0)IgXYi}j+a3;t#8{xzHZufzN}E;)&9T{*$iEU7}k2Re`*q!1m7 zzi=qBYai8u5D=Oz0d~5<g-mK{H1qRv5mLkjrrXa{ZM2Pof|CCM=AUqu?XB@YDNy~* zxFyu<{F)-R#PZPyCc^etEpMyQWfXBmLUeuBRY#389vbUvPoMO<OiV?qy5wf@t9(DU z<&c(R*XD%#@q}0i!H|58Fj$iop9%(j<ozaeJLvxN-PxG*Jy&68-u^uE+S+dO>z`q2 zl!M=@xd-rWduFUZLiQa9HYS4}Hp30?5B?M@e)ATDn*@q`6p7m$9uc)3UmeS%G{w)H zk65MX`{$6#fm$AJABeBSIX4$S!o%x1nzYf+@2tpfLZV%)=<@ulYnR^+0o1-jv{y<z zat1+JIp;L^v*W@8x>R%9ItszGW)1EGH*<Ck`Z&-g9--e^WdTXnm%E)?{&y_w_6<8% zhjP6o-%*|Qi^7094)-I+%sb2rFd=B0pVDw*=1`in!Tapa$x<#qLuwOM`Vb0dH9|Y* zMrJX&s-Z?AhV;9chWVa5_8BQ{xWr0CO<TF>+vu)SYYQe+=Ekh6Mv*MW>`l*PuRUH+ z?!)r2>Z+`2PAo|}gj{gP`&<MqwNSm?SVWEf^}8bW&?AaW`!Z~6Riiuu8vOoEN=Fb6 zVe7EjBGfHed(v8aL?Jf+y1pgQz_wUrE%3<8I0Lym5OkXN$VrqplP9X`>b_~58=oLz zZ94YwlRi<!qNpv6GpsNyZXFLn(Vds!l#bx5juL`Y3H6`UT#$zT_)5I@hzFkm84&9l zp_-dnfX#;-CT1U{jYgF8%A1(3>U^EGFzM1O&3?Hr=@RK|l6bL03Rlo=ud;BYN;bx_ z0<Pb-wrT|ZVZoDU%DRI32=B{lf<bzFS}I$p`FpIMjX_2aT~>++8W44>l}iW+XDVh; z_UY)lx|G|x0UQD)LgVXYAKW1}rXS~ZeCmzlaoKS}aPHNSu|D{Hh@iXj9z}`QPG<@z z{NgqaB~U6ggUijK>SJp<z3x|UJ*F~da&2Ynn~a!|8LPDD<$D8;PL`rquw_F)=fX)M zF$bI9lk<8%{kho?AZ^L|hnA!=2x8Q#F28Ij%0M%-z(6hW;284o6YL`&GSuu=aP>9( zs>97i<?*5{Ke2ciU{?xJP!7XfKmIA8I4hinup%s-o0Wv?MZ}B`szg7&`QDFtUSxh| zV=pAe@dMu_*;Ik!b<mZUd(&K$-FBk)DrG-Ruc^_3OM|jVo`7x7YnxbiBaiH77v4BB z>^wETX{(+b0_aOm4osdXi|G7A_CvFE=m^eIboNI4H1t=RhrjH!5ZEP^TYO7BP0#Jr z(#zUYGTfiB8MA#fTKD(_Nhug6rkNvP$#e}Ai+6j!9j}V~b$vJD=&ZASyQfX+PCP>% zHcB>B4g*5D*s=HeMr(VDy@6nQE6ioB3vr;PY(dd%L}YZ}ag2=Jx>9EHr#cO8UKZ^r z>P6$+^@Noq%w{QI86HKfp*Xj$oV*56{{RJ2q{#t?3qj(sepX^NbFqaNW6=Lo4a<n# zYqAZk;I7cme2ZD~o@T|cgL|HDT*tchapIsa&D<%l^?^UpB*T4JsgJrA$-zeMYVB~k zS=e&qI#Ak&(@cK)36<imAo3cNunMja+l2jpx1HvsyAj*(C9X2x*$I*F{F$0uT#$Vz zQ_ui?Jf6IyLc5uHb&nsJI$y>@F5a6^Wgbde`h$MTPZgQ)P?b6nL6>JS5>9`X_OX>Y z5cbS}pl|R^=2ZR8Wjma*qE(%kl$!bX6{{>JC|<Jq{`XYL*8k+Tf<JfqQDRgf0T1s~ z=?MPT#$F*DOKVn%8Uy@IXu(dZ$KuF2yX}XMF3)cWDm}9t7^J*Yamk_e6XCFP`19|9 zWbS2#QR-QbL6lQrwV7T{7@P6csvoPPIa_r<-T%r<5DI#m4h=aYzC_0&AP=y*2SP=^ z*6*$Paf25lNal0RA0RCGSo+%)lb(`afS+Z4_O2#Tp5%lTGjslEo6kycr*M`rk87<* z4e9(s42~4>d(2sWR?aB+Zr);(pr}ee$*!3O*fDormlHX9s`6Ih1diIcWn}iC=kICW zSobto5g_6wZJTEyP}E?wv0pFK$&s23*1yGe7H(N<K8=UF@R6pkdOo1^k02_^oAvTc z8FiB3^g55BhwhrT#XTO#4<t|=?|%2(`x81aNr`$w&rF*%7UK>3Nq@)IsG!p(JqZud zmYm5N#Y%k3#`v|ui&=TfvDq-k-77V0SUQ7ylvBAeBs#_J*1~~lu*yL22KA8GQlnvM zLhVs_)c%VL`oQ-CZGG#6l6kRfO+ubR&(p?MmT^QvvCK#@2R=)RcQ=eNnG~4Onzeo9 zqX^{wgQ%5q{@gdbwQUCPZNIfzuHfCEIvd1}K!vtfq-<ZrGqbfWh9}LJw&)B{hYx~j ze5--E#gV+5<g@qo#fem3Juq2POfQRNCMtcS+jdxzZ>O?YExT$?cuQt#(B+LvK|KE) z$cpfVE2Ien&tx%&DrQ&s<)g#0B}}W{cnUm6k>A5TDJZ9y7kraagPUl&h@ge2`|uzq z1>6vmQk+rJO3{zt*MB(QpUG8@M<n;42-cdb8JaEr;s!h=moXq?F)`DD%dgb2KF9_C zrrkk&l5%XYXexJO|5g>N{76sUOev8^tyh69LP~#K)8z}9qJ;*2x*mys`SaSO2)D&S z+!ere{KlO}rIre3Q3@71*hj55xaIY|$u1Ujmci}p0M(7#jQIfoJ19lj;fVbT(vgQ$ z*SMo-do|p$&B%0)@fpJ&x&{1FseAuBtUo&6I=i0noE+Pa9*>3rV{X{3zbh(E#FzG6 z6x32qNh2w>9sf|A=U@ibH1)4L>)!o=v!|%k!r}-J@&@H@z;!|U0{&El$12p%_%Dl9 zmI286Nz+P_-*;A_DIGq2zlxKd(J`RCHo7T`HLj7N1L~1p__40m`#js#b*1smB0@#m zBc{~>z;~Gsi=x1+?)(z}@3O|g2-%WdK<#-5tPAEny4er@Cd3}vlGA<GC+13UE5x+4 z_l@Sb*Iuk9D&FD4PJ2I~)}9aZ<fIcuQ@$!FVNY(~F``7ecHIa)jcu@IW$RqfMr*1` zq>oi=Ejr2-j!MN7+Gx-J3?7kYUqqDD9V&~MrDs&gCR)&lj-SYv=TwXx(JY&7bn9Gt zUbLx57Gs2?CnMkb#v-`pQnC~VsR5Jq)f~+_+n%CzO7~aY!Q7w0O-*>(bh_!IQJs3o zV^9>;*1T?icwSF#)Hkd`APyyLpC~{@c~>aWS2oeSaeaOBl75I%DV*VckOc$7XYbgM zYb4SZStsJGAn=pzv|i=wSx+pA<iM$qK$j5kj)UjS&gs)IqbC$gYZ<Gq<U7K3uhu(2 zYW)St;9B(U9Eu;d3r%v01Eb)KP00p+F>lfRvldoI@JQ*6ZUYU*P1rLz;DP%A=5#{; zmsr+4BhMn?n?;z}!M&Olm!$mZNo)aSfD~OeW^jTGx5$4ihI&(JoE${CM-w{vUYch5 zXr`u7K};QCl@oDfVgMB`tciS5c>I4}?*QENyl!nYpz)w85_`-os39a8UFlZ@*u_n> zKP~B<5DUaQa(lgR*BNc83Ax$n*2I}yLhAT=L{FJrYXj=bK+OS>tkXX?q{0{s*-xud zU4wP}@1{QY|M=MTZTlI|S7(u~?a__7t`4&LsuQ+hK{w;90{v|DIs==H)V$A!4V~Wy z&i19zb&3~>N^Z&K-9aA(g~!~PG1KJJ3CT+UORsBFas?Agi^Yx>Pxl8!6egTF_~vDG zOwnKzcrmB)d}|En4F{4G7-p#%bx~5h1pjTI0$jI)=V!P$9w2JxiTde_lav+lw+iX} zi`6g3;e}t73#9y>+}SW^q?hV3AXKn?_WtG>TsIk)%G6DI3w<4iVhpO|@5qlYI8{W} zPRq|{ffK_9@YH;MuLzoY&{AJjkM{hMf0bG5XK}=(&iRE#fP}QB_0~3{gwD4~<PDox zWM&B(^(qIag%`_y?TKdJx`=#CkP{RSjLBCizE!S6(T-6QIUotnd$K}X82_w9NP|ap zg@r5_NqRQXaOX|)GGSsUfx#Kp$A&s|^k3@=CZl))3K)*l{q<_mRbA<y8osd;JF#?w z*N*8=<a^+*DQOK>#D%v>(^5&vMX@-gC-H3aNq@daNjCA8hi^(8mtV-}P}IXL8)=yv zMS7#og6Ao5iR162v63z83s54}-8SEUWF8R#E`}qQe4oKrFzb6fC26P?Y3=oakNs8m z=J(f{<zqrh=rIAjT^;V1wRF}sXfEie>uc9wYN(#25V?YJ+IWIptLMt>#@V%M{I0#p zaR|!y9a^pPi<?H-kK;er>Ghuue1HK>YoI@MyHnL>phVB{Ml;i`BeO3sJSpJr_Y(|X zWEfAf4`>zr2igo$F)vD*pA)>!hN)jTN%MBJX4&NuJZr-&Xx!7;9%|LelhGAsTOW{L zDC@k-7W)S8&wG9qmXMSq{uQ>7Ury`U_bQ-(*z6m|f7=*f1QTtY5LaHlTY8!~U<*%< z#m7w}W>v0JAMbZ=+KRFNucA14ws%jALdVEqrVnRv-(E93{CekFp|8)|b={7XV+Enw zOQw>xmQ%~!SSrWO5Q2E-+0zWU7;-XYB)uYniW$nQpTR(9E(5XnewZa&C70Qp05C*` zg`hXU9+sq+*}X7zu$|`wmQHOoLnfpQ`dAS@b@Yg$F;2(Lq4ApadJXrBatq}Mc$hcm znW88QQty*b2v6PaM9&G=ysfdO!)xRK9qvl>-2}FsxJFw!LHQPy!^K%Jl)$W&n*|#} z`5WMKr~y~snm4MkC(7lTmYKKq`i)rlw=YR?h~>4g2+MjR5Bn0^?)~SvPirjEPiDNv zPu;I}%^|j$L`SsMqzfV6>0g*XT4liop1ijo(7Vii0^RBjY7wI=62Q2_9$N^!Rf{5B zZ^$;;PmLX+bBMK%#aE6#jNBYs-F6iH<r6g)+~n0H>@*kbG<F_Vy+Y>a*(h>uEnect zbS8v~Fw~1vugrElIBMluT(D8EK52UWmj9n>2ia&^O~>CLhhI(>WS?Z&Opoxi7l}2+ zszfSX>*})yzB?xmi5b+Q-{If_#;|@9D}dA2GXKxl(x&{NlFOKP%30Zh^;D=D&pq^e z+$cjqpnsD5Y9d{HotdRJz=Ed$`i)2fX=-*7g7(Wr{J%FMUq0<_pS;ob_>F=VR<2gh zh+t|OO1}qI{7l%p&(B>w_3_D+4v+C{Gj~`MhqfoSB<$7M>?O<E;4x<QH^^_<|7r(k z6A7?4YOQM%bQr-wZ@3m0`wb7j=bxyedj_$IA`RMo;>kh!*7#?2is^AC9DBAO{i?d* zJh>(GHowX0+XKF2E11s>An$9&km~ihr>LrT3quK)iqFq4bt0`p`LC-*bkkr40W=6R z(1jol7r8~P!eev2D8tx0HU6@EUND5S3C|+PTB$>%4i{k=-*5H(aFOrqOTb;mgSXX` zM7t;1#^k1ho2j{8N@-CDefJ=oY^$Lxk=KhEQ|Iy#j1uWJUD$p|7hiVPxS<k|m9g}D zl^FtT<3=M^5*>X&Gbw*r0t~&?Q=$)s5~4vInKSvE%|jzZ@lEq3^?8GpTY0)pXb9@u zQpoL#)y11)laLw>!e_nf-7u$PiwxzP@$$bz#OK4Ga~$U(IWZGfU=fCx5|=0Evt(TO zEy2uciB}_SxuNYXal+A4+DD<Ooi8w<qt3-LaaYzd1z6Z=2o=}gI?Gm9%7mcV<S_Y? zS)s=t_dR%>NfcJ#0<Fmi<yST~MGlX)`mg8W%K(ecsNi2(HVE2!1*}kEuCC{fY+wM3 zG~#@wLsY@kwPD-byOQt9S3(k(I5x3ti(Plsc0he8lA*L2@t{ZI7D#Wet5$+($c+4; zA9Q8hl>{UxmY!$dWxLaed9P$QLi<nYa52nfF1!a4F9uQ9<8+Saozsb#7~_ht5`IGT zhU95$`lKvv#p-ypSR99kbB=xx@Bp5135Evb!*>T#^beN7@vasN4z`y`nZe~1+Y`3I z@-GtFc~k{?YmjwMi{WRWv$}#9M-N~RwgZvz|Ak#%J@-eUYRRX-V?RCHh4_#U3K?-n z>5QJ<h!;Rk1gh-)UnR)IZ!5t0m6-w=_H5=O_<y@&%<TMsmxFOc=()2KC!k1gtY>dR zd!fY`M7}LGbz|m_M`l|YFHY)J=%xy7j8v&?bUNg6Eo3gIN_9HO)2Pk!Z<B?a?+n>h zH|BZ8@>wB0K=Ren)T#hMFT$20X>x&<kOh1KbDVo%z_iUDIJuDMJUG9L9Hke>et{oR zf=|2*QeTl_KW-OYm@@{wCmVQlR!VLV69Izn+t|h5cfkNWXvoVGGlKI8Dj>uR5>Y|8 zkSJ?{z-fPb+TT~*9xRHfn4+PCRWLNHLiw0Wk}||1YuC|@z206#$b9|0Cq-NGejZ-e zE}F2IJYwXIVUH1hM>vt`<k5G6H`0Yqbl3Zo00iggI+vlblHuvf(L1cQ&JR*0xt!*5 zKEz}!8Lnyp1bOU6G2ZBkq9y9U#^vh?U_1IV0#DBMy!t@?U5S6M#GK&UAPU9=7h7fG zWeDA&G3f6%znpGCVe9qyS~N@3KfTNm)pz1X29>gEEX_ufqMEEl+#`Oo#@bX~v`qSJ zluv|8fbY{WZV(k)99$=x_+s{K0L+DRB^%qzKoipIeml9*RSxh!kxi*WQzGBFWNR4d zK1I3vvO(;|e6CEl#YuZRn?9DgC-{Zz6nwoe#1GGwQk1M|o+l(;=o9Lf7E~D;bg%Bv z7`c=$KB+MIE1(W`1cX|!1Vo12nb(<(t`YM5sZojZ6BqQJ=ddHZ_yx|oRk_MybPoAX z62_5@Hvjk3y4)4OH+GHrRY1fdIqunjo?|IbK9ZaE#-M2}=eS~7XUPFrfoA5H;0^Om zH6CSao`N&Gs5o=`Ah)@oKlx65qW`--7?3HG<>_qlVk>LHBgTb|Jgf@=NMbekfDuVb z9e3DNbCd|GpzOyrdhV-(EPy9Fb7ji3d%Z>-K7eae5^4Tfb$%0cxUDrbCy`urkWKK= zE3Mn<T!Q^mMy5T=0y@&EA7M%J?m|q+q!B&jH$6Fn;Q!+!6vcGjhFJkXTWbDxs^;E% z<&*kiLJd{R_E*MwGmgp=*gZGRV{<TZ<Gt~+n|q|<>n=zjSl%KFHRE@qsUq@c)iTda zDGav76gccW5V#@+m?Z1J7#sH77OXUt`dbB$evkT+Bh7SeFc_(;%%FGr9N@JmLrYyd z(I$;2fPo*dgoynO=O;L8#Tb;2?W3oE!5?Zw>jf41yYGw9?@FO+6xp0wKd=6!GmQ>w zRw9?Iqt^d~eh<R>Y@c}9P<8e<C>~HI)q_|q1K-kA^T*hdkw+_ysnUqdn#W47x@Ry{ z<kOBN`Q%q!Kt<3tZAu14#<=?o;daiP%Jp}z9Y~?BjsrbABh#@^0)<rQtJej^wcf@r zckfsMgw)r(4vp@p?uvW%qQP6}6s*NLH0EKb8oT1drg>0!YL`ZSR2jgp6dI06q}0E& zZxk{P)GF#`g}ZPx9J^`^uBG4pB}k;Yb05N9Lg=a-AqsZQirjy+oy_o(nrlG#H-$ns z?Ws!9kJNF&QXa}-{uLn6Kkh4ZJ|FiZX0>N)y`S+3aeS(=rtjfdxwuua)Mt0R9B;L+ z^Y_ohrevqwo#9J;X^p<^XkkZsAp0f1czomWi`gcHWfrSgWcRw+c-H&krvaq}3%hWE zEh^30tsI&#?jFQzw^NBlzN#N_NQGHEpCq1UUy!u2C?H8XXOxkBdp6_r#eDk>sY&*< z3U}3g_A~^)V+lt}NtB#F`rX9R!`3gdI5xAcc(E1uVgil@+~C3tY2?+)muwE$#U1AE za)P6uLCmju<`Rh2=D+ZIlRO8`*Pqhktmu3AoYf-voQ!DEn4=@nK$nw%Y*Q&Gi>(AD zG7CywYvIoNa}jD5iVh(e<MWUa&iXQ`)=k)yF$LgUm~G$B6~jdp$yT0I24Gm<OzgB- z7xnK$U&T{zO5o)n2%t#V&4-~#?ur}J;A5C@K*BkxWAWn}<@0m05o35pO5r(X-m%W( zMoC0yKD&xE-A0GlU87Xx@3OfzUYr}NH@aduI|9$yd+(IhRJo1hfC&yDmE*4+$3J!U z-+_}V#zo=sv8rDu)9E{8ikTjz4*&FIon^(b*ky4}2}gZS^?k<)!&tbzsNJ|LdX^it zJaUDT2veNz$XK|iES%!g6P9N}KOZGYKR{DR9`}~1w2;a(c^AAB=8>?eH>B;r<bOOZ zXHqH*G|c?PR1|~lJY-RlR1TG01@be#Yj~+)tbc??+6I(fDKr=l<h|WTEA+DJA(l2C z8zA%rQ!T+C46!?3GKoc$$|WgV_#xbKdGKuPCm48VaFd%j3-8g0eE{<FyvH@Xi-%bq ztplH5NSUNb^KEMvamItxKR3XaMK7ohK14tA)HW3xn7(%4g~g>Yy^#FE7$a;e64E$| zQ}-ZC?)uEaJYr>|0poB2!w(>PF3XBaqJJJbRh6ZJ-5T^qnanF<b0W+?h(JimIL1{e zoXPyCq`=p{;b;GUemB67pCq#obykXuSI@e&(rvV#>|Q&`*8N3Y-4I*3SV7IDuK)iB zA_W0@{;5BgkKZv-J9@9?j{}6Qh@c2yr=DYVKA~9eCc4+HT6lYX2Q7<fl(zULnQSG7 zei_(zeBd05#xvvhJrtJfVd=g=_qq;fmaqc$xPsTF<0dj)WQU^@ux7gC`LTqz{;_s9 zpp??`|7YmGCzcm^aDJWe?EYoJ`)$h_7fq@T#h=PyNJ4&^6_6#r0(amH2IzU=63y94 z?sH*O=>JI^mD}ch{*UPW`wqy|2fI7ZN#?0Ak**aj*nhJJ^XsM?xR(x`gIFc0ncVbG z;WJ2i&3?PxQ_2eAF)RqHN6W;e4MX37OKXe|l&wPutwUYm__k3JK})v*>dKWXJ^N4H zxZrcNDWmoV!BZ!$l1*x@W**g9O9emdvAvDv2QGdN(j41Jb>*>QgWk!@T^B5#_wo{W Yl2UZp>nT46RxAU^dj?t+nszV$2f39$?*IS* literal 0 HcmV?d00001 -- GitLab