From 63bd2bff12992aef0ce23ae4b344e9cb5d65f05d Mon Sep 17 00:00:00 2001
From: Veikka Tuominen
{#syntax#}@errSetCast(value: anytype) anytype{#endsyntax#}
+ {#header_open|@errorCast#}
+ {#syntax#}@errorCast(value: anytype) anytype{#endsyntax#}
- Converts an error value from one error set to another error set. The return type is the + Converts an error set or error union value from one error set to another error set. The return type is the inferred result type. Attempting to convert an error which is not in the destination error set results in safety-protected {#link|Undefined Behavior#}.
@@ -10257,7 +10257,7 @@ const Set2 = error{ C, }; comptime { - _ = @as(Set2, @errSetCast(Set1.B)); + _ = @as(Set2, @errorCast(Set1.B)); } {#code_end#}At runtime:
@@ -10276,7 +10276,7 @@ pub fn main() void { foo(Set1.B); } fn foo(set1: Set1) void { - const x: Set2 = @errSetCast(set1); + const x: Set2 = @errorCast(set1); std.debug.print("value: {}\n", .{x}); } {#code_end#} diff --git a/lib/std/child_process.zig b/lib/std/child_process.zig index 6ddb92f55d..6a5fabc41f 100644 --- a/lib/std/child_process.zig +++ b/lib/std/child_process.zig @@ -446,7 +446,7 @@ pub const ChildProcess = struct { // has a value greater than 0 if ((fd[0].revents & std.os.POLL.IN) != 0) { const err_int = try readIntFd(err_pipe[0]); - return @as(SpawnError, @errSetCast(@errorFromInt(err_int))); + return @as(SpawnError, @errorCast(@errorFromInt(err_int))); } } else { // Write maxInt(ErrInt) to the write end of the err_pipe. This is after @@ -459,7 +459,7 @@ pub const ChildProcess = struct { // Here we potentially return the fork child's error from the parent // pid. if (err_int != maxInt(ErrInt)) { - return @as(SpawnError, @errSetCast(@errorFromInt(err_int))); + return @as(SpawnError, @errorCast(@errorFromInt(err_int))); } } } diff --git a/lib/std/os.zig b/lib/std/os.zig index 565546c281..ceeaa610d6 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -5419,7 +5419,7 @@ pub fn dl_iterate_phdr( } }.callbackC, @as(?*anyopaque, @ptrFromInt(@intFromPtr(&context))))) { 0 => return, - else => |err| return @as(Error, @errSetCast(@errorFromInt(@as(u16, @intCast(err))))), // TODO don't hardcode u16 + else => |err| return @as(Error, @errorCast(@errorFromInt(@as(u16, @intCast(err))))), // TODO don't hardcode u16 } } diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 709d9f7706..bb4d6a9e8e 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1444,7 +1444,7 @@ fn renderBuiltinCall( const slice = tree.tokenSlice(builtin_token); const rewrite_two_param_cast = params.len == 2 and for ([_][]const u8{ "@bitCast", - "@errSetCast", + "@errorCast", "@floatCast", "@intCast", "@ptrCast", @@ -1505,6 +1505,8 @@ fn renderBuiltinCall( try ais.writer().writeAll("@intFromPtr"); } else if (mem.eql(u8, slice, "@fabs")) { try ais.writer().writeAll("@abs"); + } else if (mem.eql(u8, slice, "@errSetCast")) { + try ais.writer().writeAll("@errorCast"); } else { try renderToken(ais, tree, builtin_token, .none); // @name } diff --git a/src/AstGen.zig b/src/AstGen.zig index 12e33bd803..346177e5ac 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -8454,11 +8454,11 @@ fn builtinCall( }); return rvalue(gz, ri, result, node); }, - .err_set_cast => { + .error_cast => { try emitDbgNode(gz, node); - const result = try gz.addExtendedPayload(.err_set_cast, Zir.Inst.BinNode{ - .lhs = try ri.rl.resultTypeForCast(gz, node, "@errSetCast"), + const result = try gz.addExtendedPayload(.error_cast, Zir.Inst.BinNode{ + .lhs = try ri.rl.resultTypeForCast(gz, node, "@errorCast"), .rhs = try expr(gz, scope, .{ .rl = .none }, params[0]), .node = gz.nodeIndexToRelative(node), }); diff --git a/src/AstRlAnnotate.zig b/src/AstRlAnnotate.zig index f9d6804328..c751adea9d 100644 --- a/src/AstRlAnnotate.zig +++ b/src/AstRlAnnotate.zig @@ -945,7 +945,7 @@ fn builtinCall(astrl: *AstRlAnnotate, block: ?*Block, ri: ResultInfo, node: Ast. .float_cast, .int_cast, .truncate, - .err_set_cast, + .error_cast, .ptr_cast, .align_cast, .addrspace_cast, diff --git a/src/BuiltinFn.zig b/src/BuiltinFn.zig index 0056854e77..3296114ef9 100644 --- a/src/BuiltinFn.zig +++ b/src/BuiltinFn.zig @@ -43,7 +43,7 @@ pub const Tag = enum { error_name, error_return_trace, int_from_error, - err_set_cast, + error_cast, @"export", @"extern", fence, @@ -455,9 +455,9 @@ pub const list = list: { }, }, .{ - "@errSetCast", + "@errorCast", .{ - .tag = .err_set_cast, + .tag = .error_cast, .eval_to_error = .always, .param_count = 1, }, diff --git a/src/Sema.zig b/src/Sema.zig index 963f7f5489..88dd5f5b09 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1252,7 +1252,7 @@ fn analyzeBodyInner( .wasm_memory_size => try sema.zirWasmMemorySize( block, extended), .wasm_memory_grow => try sema.zirWasmMemoryGrow( block, extended), .prefetch => try sema.zirPrefetch( block, extended), - .err_set_cast => try sema.zirErrSetCast( block, extended), + .error_cast => try sema.zirErrorCast( block, extended), .await_nosuspend => try sema.zirAwaitNosuspend( block, extended), .select => try sema.zirSelect( block, extended), .int_from_error => try sema.zirIntFromError( block, extended), @@ -21747,17 +21747,31 @@ fn ptrFromIntVal( }; } -fn zirErrSetCast(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { +fn zirErrorCast(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { const mod = sema.mod; const ip = &mod.intern_pool; const extra = sema.code.extraData(Zir.Inst.BinNode, extended.operand).data; const src = LazySrcLoc.nodeOffset(extra.node); const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = extra.node }; - const dest_ty = try sema.resolveDestType(block, src, extra.lhs, .remove_eu_opt, "@errSetCast"); + const base_dest_ty = try sema.resolveDestType(block, src, extra.lhs, .remove_opt, "@errorCast"); const operand = try sema.resolveInst(extra.rhs); - const operand_ty = sema.typeOf(operand); - try sema.checkErrorSetType(block, src, dest_ty); - try sema.checkErrorSetType(block, operand_src, operand_ty); + const base_operand_ty = sema.typeOf(operand); + const dest_tag = base_dest_ty.zigTypeTag(mod); + const operand_tag = base_operand_ty.zigTypeTag(mod); + if (dest_tag != operand_tag) { + return sema.fail(block, src, "expected source and destination types to match, found '{s}' and '{s}'", .{ + @tagName(operand_tag), @tagName(dest_tag), + }); + } else if (dest_tag != .ErrorSet and dest_tag != .ErrorUnion) { + return sema.fail(block, src, "expected error set or error union type, found '{s}'", .{@tagName(dest_tag)}); + } + const dest_ty, const operand_ty = if (dest_tag == .ErrorUnion) .{ + base_dest_ty.errorUnionSet(mod), + base_operand_ty.errorUnionSet(mod), + } else .{ + base_dest_ty, + base_operand_ty, + }; // operand must be defined since it can be an invalid error value const maybe_operand_val = try sema.resolveDefinedValue(block, operand_src, operand); @@ -21804,8 +21818,15 @@ fn zirErrSetCast(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDat } if (maybe_operand_val) |val| { - if (!dest_ty.isAnyError(mod)) { - const error_name = mod.intern_pool.indexToKey(val.toIntern()).err.name; + if (!dest_ty.isAnyError(mod)) check: { + const operand_val = mod.intern_pool.indexToKey(val.toIntern()); + var error_name: InternPool.NullTerminatedString = undefined; + if (dest_tag == .ErrorUnion) { + if (operand_val.error_union.val != .err_name) break :check; + error_name = operand_val.error_union.val.err_name; + } else { + error_name = operand_val.err.name; + } if (!Type.errorSetHasFieldIp(ip, dest_ty.toIntern(), error_name)) { const msg = msg: { const msg = try sema.errMsg( @@ -21822,16 +21843,29 @@ fn zirErrSetCast(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDat } } - return Air.internedToRef((try mod.getCoerced(val, dest_ty)).toIntern()); + return Air.internedToRef((try mod.getCoerced(val, base_dest_ty)).toIntern()); } try sema.requireRuntimeBlock(block, src, operand_src); if (block.wantSafety() and !dest_ty.isAnyError(mod) and sema.mod.backendSupportsFeature(.error_set_has_value)) { - const err_int_inst = try block.addBitCast(Type.err_int, operand); - const ok = try block.addTyOp(.error_set_has_value, dest_ty, err_int_inst); - try sema.addSafetyCheck(block, src, ok, .invalid_error_code); + if (dest_tag == .ErrorUnion) { + const err_code = try sema.analyzeErrUnionCode(block, operand_src, operand); + const err_int = try block.addBitCast(Type.err_int, err_code); + const zero_u16 = Air.internedToRef(try mod.intern(.{ + .int = .{ .ty = .u16_type, .storage = .{ .u64 = 0 } }, + })); + + const has_value = try block.addTyOp(.error_set_has_value, dest_ty, err_code); + const is_zero = try block.addBinOp(.cmp_eq, err_int, zero_u16); + const ok = try block.addBinOp(.bit_or, has_value, is_zero); + try sema.addSafetyCheck(block, src, ok, .invalid_error_code); + } else { + const err_int_inst = try block.addBitCast(Type.err_int, operand); + const ok = try block.addTyOp(.error_set_has_value, dest_ty, err_int_inst); + try sema.addSafetyCheck(block, src, ok, .invalid_error_code); + } } - return block.addBitCast(dest_ty, operand); + return block.addBitCast(base_dest_ty, operand); } fn zirPtrCastFull(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref { @@ -22916,14 +22950,6 @@ fn checkIntOrVectorAllowComptime( } } -fn checkErrorSetType(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) CompileError!void { - const mod = sema.mod; - switch (ty.zigTypeTag(mod)) { - .ErrorSet => return, - else => return sema.fail(block, src, "expected error set type, found '{}'", .{ty.fmt(mod)}), - } -} - const SimdBinOp = struct { len: ?usize, /// Coerced to `result_ty`. diff --git a/src/Zir.zig b/src/Zir.zig index 62c48ecbb6..973177c1b0 100644 --- a/src/Zir.zig +++ b/src/Zir.zig @@ -1997,9 +1997,9 @@ pub const Inst = struct { /// Implements `@setCold`. /// `operand` is payload index to `UnNode`. set_cold, - /// Implements the `@errSetCast` builtin. + /// Implements the `@errorCast` builtin. /// `operand` is payload index to `BinNode`. `lhs` is dest type, `rhs` is operand. - err_set_cast, + error_cast, /// `operand` is payload index to `UnNode`. await_nosuspend, /// Implements `@breakpoint`. diff --git a/src/print_zir.zig b/src/print_zir.zig index 5ced6cafe7..d295af2830 100644 --- a/src/print_zir.zig +++ b/src/print_zir.zig @@ -594,7 +594,7 @@ const Writer = struct { .builtin_extern, .c_define, - .err_set_cast, + .error_cast, .wasm_memory_grow, .prefetch, .c_va_arg, diff --git a/test/behavior/error.zig b/test/behavior/error.zig index 5a25714d14..2c3ba3b8c7 100644 --- a/test/behavior/error.zig +++ b/test/behavior/error.zig @@ -228,13 +228,29 @@ const Set1 = error{ A, B }; const Set2 = error{ A, C }; fn testExplicitErrorSetCast(set1: Set1) !void { - var x = @as(Set2, @errSetCast(set1)); + var x = @as(Set2, @errorCast(set1)); try expect(@TypeOf(x) == Set2); - var y = @as(Set1, @errSetCast(x)); + var y = @as(Set1, @errorCast(x)); try expect(@TypeOf(y) == Set1); try expect(y == error.A); } +test "@errorCast on error unions" { + const S = struct { + fn doTheTest() !void { + const casted: error{Bad}!i32 = @errorCast(retErrUnion()); + try expect((try casted) == 1234); + } + + fn retErrUnion() anyerror!i32 { + return 1234; + } + }; + + try S.doTheTest(); + try comptime S.doTheTest(); +} + test "comptime test error for empty error set" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO diff --git a/test/cases/compile_errors/explicit_error_set_cast_known_at_comptime_violates_error_sets.zig b/test/cases/compile_errors/explicit_error_set_cast_known_at_comptime_violates_error_sets.zig index cfb01c3ddc..fedfaf2d07 100644 --- a/test/cases/compile_errors/explicit_error_set_cast_known_at_comptime_violates_error_sets.zig +++ b/test/cases/compile_errors/explicit_error_set_cast_known_at_comptime_violates_error_sets.zig @@ -2,7 +2,7 @@ const Set1 = error{ A, B }; const Set2 = error{ A, C }; comptime { var x = Set1.B; - var y: Set2 = @errSetCast(x); + var y: Set2 = @errorCast(x); _ = y; } diff --git a/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig b/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig index 32f4657ed5..23c3917b44 100644 --- a/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig +++ b/test/cases/compile_errors/int_to_err_non_global_invalid_number.zig @@ -8,7 +8,7 @@ const Set2 = error{ }; comptime { var x = @intFromError(Set1.B); - var y: Set2 = @errSetCast(@errorFromInt(x)); + var y: Set2 = @errorCast(@errorFromInt(x)); _ = y; } diff --git a/test/cases/safety/@errSetCast error not present in destination.zig b/test/cases/safety/@errorCast error not present in destination.zig similarity index 93% rename from test/cases/safety/@errSetCast error not present in destination.zig rename to test/cases/safety/@errorCast error not present in destination.zig index 84aeb7610e..ff86e1f783 100644 --- a/test/cases/safety/@errSetCast error not present in destination.zig +++ b/test/cases/safety/@errorCast error not present in destination.zig @@ -14,7 +14,7 @@ pub fn main() !void { return error.TestFailed; } fn foo(set1: Set1) Set2 { - return @errSetCast(set1); + return @errorCast(set1); } // run // backend=llvm From 0b1ba6eb521a15b38b08f9923dd84329487d5755 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen)mXP(r{+v8h*#F_E zgNjo>wSOX)+W#Z}+y1QlvHcl&qWvRzntg&?W8Wy`68i=rm)k#-2ieDCdBL_{N z 1) ?z!c zV5h03kavexhEnRwE~_3O+XhEaV84b(V NY=5$W&n?8SN_Xjrw;=3HHl3WIW1e!JsF@{lo%d^IDFFl^>x-H# z*2V2}E%I&6Q<@>1b7g2^IF9wTB2G2M_sRPDUczMiH2R9Vmp_)Lh>b1lrUZ+ u9R@bOHSUh{Zoq}8C3^<6PN$*F!yi!-2MMM%)QAl_de+Vp~>PYKv%pr zag@)M$H;H*T!WEG7%B?rDf8Zo;LK*MuxTXCyn^Ldc||36g!x^>tcs(w9G101St zdl@P{2v2dK%tGfam~V2V+-)K?57;<`YMr6Or@6E0{{Mfd{^dh8sE2BZL)E>np}L}D z4}Q8iLzdEl( +6u#ZktgUUC65`f^)* z2BL?3S r8qz2t21t<~oTZq0l!9=Jsm) zH!RnK^jvdb)04&Bbpaxq9@NKi0C`7N;uxNXG_Qd0t2NV2E9_TUusdC_+b`&z ?--J9F%TBsvS5~|Luy*p)_*VYe$v;ovyda*CK*m~Z;|P5c>WYA>Tm>Nk zvgKM7fItp4 AnEe}k~*2WiDR8-S4}#UiODB`3*vxe(sO8%dR3e~?Km` d(HOW()T|+1}nK zOJ%RMZ^I;1*|qlFekNznOsH9B@+-dOR#cShRg|qT$+A@L+Qe~oy0Pmo(QNL3a)@vk zuPkM)wQpiYK&`J)QcpSu9c>qH(_J6UvY+(3vEBLJ(e@XAs}t(7?b}IfnzN}(IAe4D z8SPH>1rk|)o2j_<8OT{rVq;+rK;s618+SOb9xV%pbnQ*q_G@0VPT4X06~C^dTeI!I zd(rAL=QGFHrw;3cwru+iKcSVzGKM(;NOaLZfA=_DACLq3Y1c>X9odQFeSYnCu=%dE zJRZ>_yx}gV{}@^PYu#X1w!PJFu+1qx)-L{sPUz0I`}~Bh&gx@J!>+FTLFd$CXMNQ@ zFP=SxJV#lv>Cjd}1whV7Hu}$Naj@$$))`tkz}Q#+4D?R$Hd|C+F!r72!4r+z1qf%% zTh6n`+Nn2nNBXku5#5onEsfHHIkrEJn%vFz3>iZbWB !sqX=g&ZQAfU>tg}xtXmqu%=(V1~eDAkQrqRqn~&JLujhQ zZdB_~7=6v3GJ20_U%|q}W+tLcike$OG2PX{F!3K;;9c!G;hwJH7-g(kOLYmOT4Mfz z_ObaV==`rT*2|CfCs7@Ruw19U`3hjkN~H9`1^3XCbo4un_6ng}aZfv?Q{Qbvs;i@C z$KpEn+^Z1ls@n<56s`MW$8M$eHe%==}FG)*YtQjOFz(7D;%TGnV@OR@CRAc{x%| zGLv>O$=k@IDNpIfwAXh*RpV1*3~7vghp~Pa!mg^0DK9;Qx>9~+F(fhiJx0674KuWE zFAQxSQ`-N6agKSzA9G{xV62amF!X`c{xSdC&HmKJfW?r)*fTCctlyzj*i|Aj>4is- z 8UMv2M%myJn@AtgJ7=xZ45 z!36@Tq2?1|wQl4YGANH2K_@jjc7U-Nbdv9DGuhCe&jr%m^@SbFH#ITVA0VA?W6FmZ z6R`)2wmz^_ff~^mMi=hE0h?w2#phAy-3FR2^wtfW62@VEsIac*qSZp2*Q5T``ZOR8 z8AR*7?$HcpXPmWodar(09kVM=+re>)uL0^~cI{gqbKfh_$ISl}`j~&Pz{lwPM_ X z7wAmPa5fd4DSt#6wSmYUvq; He{e zjb?j|T{8xtkitQD9ot0vQMA7sE4T&^x?aD`#jM&urmN0qKb`6Q-+(8X6$Y6e7~6h> z59|mfuY3=oy8R}$Z)d4|wBKmp&j H_D!&rPUJM?O!1$8T@@*!Eie_U -Fe^KL!tuZLZyK?q!1KAC_zII(2i-Ri7(5 z)fHT}ur9yr4}zm;6Df{ox~8jkp%*^V9~#?WR}Ks_G}Y}Qe0gK=*=-t>pD)3n-ok3k zLWW_1&2PFbT?ytH?OON4?~C~17{)tvAqBtBDd|l(s-8jZRCa$+xBU{8***&m s)bK1wGo396F^%x(3G@|n_5&K1d)KS-5 zb1KLZ=MtA*31GO?oF6jj)lT5X7j0rlV(b~WBGx-LVT= tBKX1%}S Vm`?`#gQD#$t~#lgBpDwYN>CJY;Hg z&)#xykWCo`_NhY@H-;!~z~nH2GsNiu7*DpGclw0c+3)s4a;P*XfH#b>QH6vM#*s9K zh-3I954C-HAZ(ihYo 6CqM>fM$McjX3n>~1@g^XkSU%<-#aE#9GNa)CUnA*&B8`w?8BRxeb+Jn zNR7koyCx@bd!gUV(f&b6+WfvWC(@ zGFLS`?R@x^vJ{P9U;Kkls=9)=; 7NNfK38Nrsd_aYuV2vtreK^_@99zk5hxZelAb9f2LEmQ>OCxBvMlH7f5B9rYBKb z#=5gX$U2ci1}45j8@|%CcH?u}sNVh$d4{l&ky) P5eRfcZs&c}dxe-RX(=>{A9+oc&j)tTLcSepN1 zFttJrhp$?prq5n=rZcZWU(Hw|6OBQ%J;!35PZ#nvXBoQwEajSWcy|lf1DwGIPf5C` zMK|QRmGMxDZR)yEd3#>^^bm&!v!ZT3YTo^PdvDV{OU!K3J+#tMacuomowMbXBDW8> zjqO7Y`;fC1nL79ALr5L~Be&|nEwFZ0q9)LRP@2=^o5$AT>MoJ3BcqlvxVa)_j%+eJ z>K@s69W{tfpV9b` LX(Lds4_WRd*B6gUZb8%VA{AQ#kjjjg@*gml%DesDg(|y z?3;6pGMaKCO`YR3I~<|?N|IKFDhH}$ZDj~#K Nl2#uu %a zjY!*;mtNCaHsYE^&OKYeIPP~XTF$(d7A>9y0!$0RF4DSBbfe3dB0=&Pgyca9WQg~S z8lLu9S9}(r%~BKAs#9r98NoA*DMuf|H45}OZA=*%V@$c@VP3PK`Ex{t4%gO{S+u5% z&~^{&w}CSosj$U~5Y)6aCD!XM!ie>ID`DJ97 T;6p_&8A`I z5J#)h*k)G!-?4X4?2wEU7^6`8QEnT$L~KgBlMn5N1Y@(4*35M5HH=L%_B*h%!a0#X zT;ioOPwCBx5F{mY+?({@=CQ|n( !nS^E2yrOA sAlfdtQS%gO-uA zKZP>q=1*|zYOB6=^+k6S_oG ajSZCpU2E+}m)HrRI*6kdHRCKsAJrM~1)@=K) zT8q`0ZFh@Up_BUdMD>)8X~?$k6R`po>d!zT3Jql8?j%e1XW{ZBkGFC$M*`j%Sq#^5 zR+U6Ly>q@>ozZXOP>+lOWjeBW-Nqs#U<~iyVAk{S47)bWdShn%5eHG2HkB*alQWnr zrMpBd9#wN}eN_&(mU<}t;%sp{L;tE=fqPeO2W8^z`&PldOO0CcQ;gbX+Ub6b3hvrh zGcC1CoX*;br5m)Ne_O~t!@?CgjNh4vm>ukl*-g%KxWoV}eMob;PVU;NtBDxiVFI4O zJZ1XUN^LB}@zH0RSdVZ4QQzuHoG5XOxJ%KNA1Lor$fM66opo!c1g%&|-(o3sZ?U+y zS=?JJ!|v@BT#3|sv?1JL$uqZD61+cxdpmpFV!>#FUE;EdL=SK$a-F_l66H-~>`;?& zmBJDL=@5Ovb&>+AO` Z(Gqtf!lGMFU`oVDMr_}5=V!Z2oDMFQ%Ryd21@NN@#!#T-F;EK|4}R3kW;@fu+P zT{4a8^wl8r-E!$;kFory%SZ|LG7=iz$899+XmrE4jl^!GoBRZ~kq8>Eh+%s~&^*9! z)reI=4go}*T^eNXLK3> LJo#MeIbd1I15NJgIJ0u++5 beg$KZdi>;3?- z$E*PNr3xx=G&rzaCXbWHsL*N3LNtPaJPh~A3UUJwDImLns*iC#SZ}99;&Zgn7+QlH zt1v~@SLG~uG v*3?tQ}S+pn5rak$R6@VQk(YT_$hPgs=2`&N rp*e9?MZZ7XLFw^;kVtH!Uyw1=uzDryg1* zk5y%-Vrap__cF4_x+D8}e`GZoVcD?c!FpsB`cZbO8ChKw8umt3VPucp%g7#!kyTM? zigIMTM0H>?1``6{H0+s5q*zW@50Rx-0C*=2*JV)+~g*K4WjxVZm@!U z!49kOpXOdedWRJ>JFEy8G4_pvOn2` ^&PPQ%G5WAWT zQ@F;>f9MAFb$0jSe<~)!dTA+>F>Xr7UumyP)N+|2M}(NNo2W|QOpzg$oe^Se1pPY+ zY&fLqky%Tfa mwRL-_g z_a?vw*(1uuQG2y$Mucic@Aq**Ztxul-uYv=X@Ixn!1~ko-}Mbl*Q>?5EHGhAf${A3 zsEgl4o=JPZ=LIT&sVc@O-RU7BCbQE6#L$38Q+sX-UpN;u_Gvo(PZr4g$W9-*kq#G% z_ugqNeOL`v%3vj|{7O}D)p` x)L_g; z`Jq!7FHTc8-MKMQTNMb@aFKUQC>u^O;PJwDQ= SaFde}uSAvRR6RV$asHMlIud1awI!d@$h ze2K5DwUcC9T-30QLQch*gFhji-}%GOVz4bU8J%Z;c0kH|VW~=}`jkbH8R|%sy%&7e zG}GZW(>}HtN<}b0Mb_ik4E~sAtZi=ouCe*i(WYEorW0lG*61{yUN)xZU(i}vDAkfM zK{_*G+w54W^T_G@Ti2cMh@T&s{UXVJF|{VnFWTm3-@w;uyiRg%`FUjKlLGZ`;~%q) zd{W@etn1L(RR?;IAh$Ws{`_F8^$ln0FQ%rTQ&W}Ifu`eS$XHn|wHoj&cYy8I^Wl$p zsKbM5W2aT!qwp`bR4uhNGi|fX4e>2jvQWEd;!#~PMxj!hwMIa%IL?Z~aT$z!X*V3U zQYs(|VT+)Ch~*?TMIDSctS5aN!9jq>^m=lzSx*Y2UQZg&C5IvVEu;v`tQ;%t8=(*~ z5*3qpC%Ky2$%m~=MydmFYCs$cE-`R&z$K;thaFJAMCqX*9G1uw0Lx#N+D}BCZ=__@ zBKlwqZrQ@QFf}O`2pBjVn6R8%QWK32lO`((-&VN&Zvohh>+FD9lXi^D<&U{s&XX}h zH+bQA=;n>lM{c>8&{=?vvzX)*^Vdo&1nHIXB)~x#-qS~_`S5Fp&1VRvh5>AB2@JZL z#sTb4u0E0JLk|R~8ML)nKXAC&OAH uN=QA4?1(E1nxS>>h&AD;I{wJBryQ &)_0Oy#XrKce6d$S|H}kotrjR DroQ7174;qu+60f*1Kz7S1;Ov-@qju&6A>>D zBu>%0PF{-8mjgi05=35_JPrjxbZgC^b@1K P`n*?3*4c} zHN)427 0v?tj?8X2EN!WSv7VX02 z76B(R)P^ADP_0l;- IcpURY?@xV2yV<^wXfh_E}?e+L%$Y8RUY1Uy{+F8 zQLGsW)jX=-@*$ext<${aMb)8r+h*RNfQ4|Xw!W)##-i$JHau)z!4@Cj>%jXu70S+3 z7E?deueoqpfw%g)i`gIecr3zOt9i?bsu_42FmKsWxM)kL(G5ChR#a8st?vx|7NQ0f zX=m!UU{pQD7I&LhD+<4E2{pJ;C&CY54FTyoo3Bv`w`JPXkLHt}J1A@)Kmnjf?GDN! zu4R}EH0*r!>`AFGuWdxZS2?oBW47jl!u&B^S&D+%?~P^W{VxarHQ_=6WFQcU_7W74 zuwKxzeMA $J>Oq8@G)*==Bu{wAimBaeP4f>MP z)`RirWUz#qS~YaDv#Mcsc_E8oy#R$;Tnsd;5vrKe!Hzi>G}x*A!CKaUwII}bW$K>Q zqc1>U5Q+cPsx #@K&Tpi51!|qrS<#@lB{v+U=8XcF}SdM z^PCDy31UoxZnli%vh*5dgKeUcCe)q;U+q~V)2=u)r}e>kjQ(2ESnzPrL+0dT06wUw z5!59$L>izc7G{?9AYz*uqC80JFg})tF0tAWs i1zZ{w7G%CX zUy#gG)A{s5L2`0wvMljU=Y+-y!g9XVxF1w!VUJg1GmR45#JkK}W1TC!6gsA(nv4{& z&b^IOQ2wut`yFUf*u7p|IHR_{z0|hduVV4}U!2MX8Blp3h{P#y78p}Yu@2c2oEy(i zQqohMkARjUI7|62yg<0xbsWOKAd*6*-nm0xi-k_Fdz6ilIp$^VpxAspBDGpTFP&z6 zH2JXZv?oyYw@lT$nfo2)CZKBQNRX7y&e`Jk;T*J0WmKdxP=U28QelN5Bt(EC-ku1l z=ON_*j~3S~BMS &r# ATMSD-F<^i>giBGJ+gWPlD!yk#FV%)}VV z36dIGO^hK2#$daBj4HjJQ0`h!xQRSI!;1D<_ z8q1)o5fhUpQ?=W~q&q}r*00cLJ&e%Fc%`K&cz} SO>23C37)Ab__zp>8`G;bu)w}}9MuJL08tyw9uUPGx7>)PtW02SlZ_w&@ z8({`g2vX |#xjQNmiq1!BM23k$D8s2+81axs1UMvk{ zlo>!J!wFoKOaT|5s(&;=D$|%KROMiCYRYM9%8yjwICUnj9Gx!3kJlNBC|HRzwNhoN zfJC6H)Ai_T&_V1=h j%atVFHGUccHK_OQS^r(ZPLS?1(cyo~G>0e6GZi`Dj7 zM9dCAd?YnHR!!hx&d4X7bxuXa7TBYbCIr)%c@rZ1%oll?o1OcR`O)#2AKq)`d!2&j zii#&+8P| *_f&D=LmV !~F5`*7cddi_7b{H1k$dB-b4F=zu z2lN|kD$M9yjPC2{k;h>@&+GrWn&uWXXXUWl1FxLzthuxp$e->kysTo*)lZvQk)9@Q zgeHYcyh@s%KEo-vY-+jI7&m&c?YP)R!VmnB#C^@>PWNS>PkB7{BRJ2wXM@v*K8Evn z90T>GImSgSDg2V^I>4+p;}7g~y8~EeODk2e%8???dp?4>Xx>r^XSI4WO6^3%dGFE# z4k1Rl &8@#b+Ub-+4v(H_bZr zM>vJoV_Y5B!AG-@_3)9bzdA4s>~S^hWysaA=TMh2CXkA-AV6jaa9ybkbiy=eT^yFJ z7LPU2zkKJQO*0ZjvIt#MbryF)@J8!=Z_~sSe6%8R9iz~>o#-4*g}SgP2Ls8oanS-j z)+;o;>t6@|t;s?e#}Z5nmv!rJl4t8Ca7T h9wy_5~)3zH4bIe_(P~s_2&Tg)x}sw7gKH@u`0p}DPbU 0I6Q?6@4$|zDwoM)~|o_squg8*zWY*Ze2 z90>1K?EyCHDi)}Wgw_M{y{e)wWi15`PDKc*aDd@&!E*ZfaJzHz)f02Sr!}KfVPlfI zdQ!Q;Ph8tEX;0dqgQ>O9Noa2f&ep4sO!etrsrvF-8IXNK{zDl5=8fgB76H+*#|`C4 zG`E|r;H@5CDZ!y6-c(aLRkRE7)Qs{%TF`2LpEm!k_ Cp>vjOTThnH+# zt_vl8fKqkk&d;u?sk{$RQgPV&Fg8V|zD;;Ug#me=kWUGfN-QE^TUI3_&I{N4VwM#o zih2Sob-8wChLu+kq?{x?T16ma(AjXul% pb+;E) z;?G3 p+zl&30j=9+;9sRqmYhtLf->>Q~9*&7?gNk~uhk(~+gg zd>%HCUXFxyp3yD0p)jMipr~rN6Vt<7^n%7kH;dDDHjO&+o#9_i!%aN!t18iPWHQ3J z<9=A8^GNimvj<~dD5oSAAie@PL!_JuY%!dT+gA){KyAfvF6IcsIZLcv4EKXCYKHT$ zjxn4B#S%kM>UM^({Mv?aft-%xjw8{fG`;B~2e!R0dYd_h-hi+plM}E@Ce%kJr`tu? z2m_N*r|E_z6T5B%3ewc%qQp7uR%s2~h||^5RKu}=wSjxz3|M;+NmzF<1gzT`0@iMZ zfVGPuVBN|Puy!y6tnCZ|Ya2trx``oRZDt5in~og=Du!x`R=n*KR;UB0eKK>afFKo) z2g$k9x$yewE;vr_^^sHtAZ^gR5Rgp_0Z21L0Mf(|fHW`!AoUCZ$ZmENfQ&K(Aj1p+ z$PhySGQbdk^zQ+PqQXVP!EYz+!6e22QoPr(xtipflQ}l+=#^@R?k00=hS^nsG{g`f z4KM^q{R{z8A47n&lOaIb!4M$zFa${53<1(Mh5%_RLx9wI+@51YMb;-9n}vHFo9pj% z><({iQln@|jgAAS8wxCfvyCCZ*~$>$bTR}u?F<3V7KQ+46GMR0$`Ii244U9HG6XpK z_!;2T9ls|yRJDCFaBB8CLU(Y45*Z`p+<4O%a%) *A^fCk(I~W3t z?F<1%H$#BIBV~fIl_9{;$H@Srooim2c?UURp+(j} |h8KY-b1*bTb4Bx)=flTNwfc9Snhjc7{Mf8$+OA6GNb&nITZnv| o6Cq{Jaa)VaZob|SgLg1R(GhAP& Hs%Hpn?Z$4A*cxRBZ0T)2ur {lZ0%$SY;m_qYU??4JhmpAyD$5Y&L?IfYpUc#Qw6KmgLf>n-n+qh>5fI#9Yzwu z$scwv yL9+m38$*Dxl_9|BWC$?Y83K$g3<1U_h5)0LA;4&22rwEM0*rcw00UpT z8OJv!>-)|7;(pl%4Cn86mVC#RZ+NmaT8`?fL2C@B0;>$GfK`UD@El|~4cKKk3)p2? z0@`CJfn|m;$Jxnn5!fKZiNH3)BIgIcuC%svIGcYxJ(H1)lGOtzBMgC)A%?)oAVc7! zpCNFviy?5blOb@@%MduB?GJIXogr|d?S6oht|P|aL|`~*|FdsKlFArcbr5uc& Gvwd>ZHzOhg&sN*|*`3&|~s&|4bGt-wmXlQbWd8|3-x2+m&-3^EAgXijeucCQ|@ zNvJ!DZc^)T_MA!fJx2j1;AT5R;AR^`;HHZqaMQ^UxanXB+-zY8+_W(SZdw@vH_Z%z z8-36X+%z0D1~*ygUBmAuxyad@z?q2~&im2T$^GD63{NAglk;rp;p%$g%3O2zaAm}t zG_I S`y0xw$BY5L3y`QT z9IIu5U&p-!z~4 fIrL-;14nc_yY_9{w{_9zmFln?_~(^cQ6F_+Y#ywW%n`Y zQd%Y mVps z4UU@@og5m#+QAU8Zea*m+ZY1YR)&DJnIT|pWC&Or7y{NhhJbaqJ1s^KYFLNI&WjM* z9%kG78tU=WqW`GmTzE(Vth 3G;X*<9l1lJ;SP0UxI^<; z?$FANt;~@@@cpa7GKhv ##6u^Oa-_53rfSiSLhynh}TvV4rJf>A;V_N!;4?3MbR0-7n4Mm)b=tAQ4QXbz D|3>T`xX|?tgO_E0M zHW|+m_hv8kZe&B$u}S dxE@R8wk*5QFTtL#VLjPKpgGe zl2d8+7D|>Reymm2p!-EQUvqO#l_iP)_Tr_E$CoopVEK@Xi-j_Lnz|>nZiSY}kyYJx zGu(!_zL0X4M _gny(*M~jovrzOQz0+wIqD*;BS=LYu-rAmQz&E3owx6S5pIc!6kxTynDk% z$)}aH3`wbZniO^ffOcucG!)F!Y7;;49pvV6u O8iu}6vF3x z?=MazR;cO8*?&NzL5w|OY3#*qRfTn0 z;`C(1Sc=4Xt65i;s~&s_?r>ZMEb74(Xm!JF=q){5IU66SEd9BTbImNMok{$HGpbJ| z>zzj)m{OxV_&-`7%-*LPJUyeqU<_8CCQ-E#83!dGd^r1UpD_z(S&1pcM(YaP5d){A zRj@I6!tD3#Z7iqhfyppYM $eAK5b9Deqh-s z%IKlMrExDwJ$D_txP)DF5vH#igi2+29A9lDUv0$ncTF2_ei3~15N!x3UcdN|;+gL4 zHGI_4C>?Mqs~&Yn6F<{B1%TaI4MaTj;6W)cGmXn{>(OH}z|}){Dp=AT^mA;cq#o{m zjH_GVWHa2Exc^3?PWYV<5&8MbIvVc7HK}O}z$@90N*~7fky%=V;ykV7DHGg52z+y% zkC Z37^#loHW|}bk)-sKHG);i9Xqo^@yn#pGBB?Y~ zL>6}ACy>eG2 uiS!NneuyuOf3C5Uz_ZoB5F}y|_NnyOrr&LDpnQNF|B{m3; zbA^^+5x^8hYv3lD*4aQu7~E5&Y9Tvd>f+EKEW=pFfgyzhE1dS}Iq$BBUiLk5YYqh4 zC@@y=PPELAsv1GT 3|7jkvPNa7Rd@ZQktRaEIcNR;Req5Ea@Dh01;>K=^XB5 zNW+!2PYteAd&nc5oHw1EH|8FZaf{cM0QI#rojzfD_ALXLNUm?ZX9p-p%yFj@U5`nA zq<%Z=0E_5G=v_$e!n15}p8wrJsWNx9FDQk}YMg3GJWR%2NbSENomPf5If~(k%E{U^ z5a+SejI0bInWjZ_96PBfJ`?-?!*Ep{_a-JRS~*t)Y+wQc(su+ouEaN|uoZ!Px;61C zjODN_SxQ@Gf}x+V|0FHhVx woZ*c z3#3f+r8KpX&g@=?D^ZxXsvMP#0EKyFCY-*lr)zV~#8ar`B6=Mx@GFrJ*T6{p%Y8b# zZ%%zJGZ&^a<7>QoWY$s{4cLD(E^| 1L z_Mj`*TqoX|YfmA41 vVTn)qa;JYvF%_ZQt-Dzjj*EZS>xkmP1y-(Y49uAcz|*c1>Ch(ne6 z>P82hz%>WI>mEL6BAwZFZAOLpvykEws`{o|S7M{U`bD7v>=+{MGDYDQ1Pohopqs1I z@bsnl;543#pl@Ty54AIljguNi5vdo{JwHS~k(>e3K7moQz+%+z=-a5wQ7;ykb3cfS z9R5_*8QqVO55DU3K3e89EshlGX!m2}Z)?v;&YC$T`}iRF``Rs1!ZIHupFn;^8xiM} z-f~gk)b-AYoQ*kBCAQCiHOVc#Whq!qLf7OT<#*4Zcn(|N8FX!dE|<%yqd`*T_#cML zk{Il}8M^`;z;#(d1=ay_k}NkqOJc@n$$ZR?0`0Rz`>T}mT`lYZdiY$)hFiWAR-_D1 zCR#kw{w}IeuZ4Q6d`~921@y)EyFi;bIw<%2U7$hZ$;7hpndz7fZ)2t`W~y;z0>Q!f zdclSSmLk;9!U!kJuEIofZta~KE+ZQ7U3Vw=r}-|HIy@}pV`t@KsollW7L6rHQ&Wkf zT>MYt2w2Lcl~3%Z<*^JGAP2~W5Xj+l!E*uf$q<#&dg@pLAEm(9X`e69H@H4urfN(r zL 2dgNhhAuyG@7fdZArm+5+vcwdWFfa$q1$uC63s3Zo6Io&v6JbCf5N5-L z9QYzWYCxKbgU4f}z%;8?#N%8Nr%y6U11yA-+$9mi=r4(r$S(uVvyV^y+;bEO?DSg1 zg$pYJZ09p4g SSo{9k`M&AB#A2^s>df`y5Tz+pzgJHmD9L$ z>Ir!m71usY({UcG`13*mAp%@vV9Sv!50*#c+PVs?s;yPH8NtPyb|HC*bI>{Nla5?! z^?=8#o*Dio;k9$1&dt%Agw)%7UbJ_=0WiKDY{dn+h}>oDvv8O>{c%x()K-Ry+*w zfnO===L5fHw2Kda!$Th*Ud6*sKKup`y?9W)=n6!$fSs>W0ehk=(40a;I7%~uhMWJS zH!K`u@^%Q$`0{ZL06PJw9&$`}V8(QcuGck_bGHbP$o1tOguW3hIA#!nzb%s)TsIkm z+&^9K5M1d50|{9O8GnOYqlt5Yz}cu8+sqArPNsJS@Fbf<{q}4yc7L1bZ^m_3#`Yns zHeLeeAN2MF@R;v)B*qH^+$WNQqZB$~sYd4ZZGDM1^hTWLs3)g>c5KbY<`&DsUZB&v z8n;fDN} S>5)7Q8fDgY^p56ntp6|UzS_D*#SAq?%N7LFRb z-Lq=xBu*y|&oYTa3^N=|LatwGjUZAD&2s1Np3X!XXxUehW-uSCIKBN7m;&CVO#!{H z$|szaf1Or*Rx3nlPQ+3uA7LJc>r_$aCx5NT<0e(wfN>_mq;tz(XRqYm&(*I%;RI|& zz}ozXb{$dTM@U=(0_(n&;FH@`2Riu}amt^XSl9?ktP 8To+`=;;|_7mIp?XeDM(kX6}3_Bf9W?0A4S93fFRGg_o<21hDG?3 z(VI tpG_Lt3u*@;m;OY#KMJ!!DDX) z)HiCnxr8~Mhk{}=dutG*(Sj6@S;8qIu)?{SftS0V9fucQV@0>nT;c+F`s6Gm-G2nC zTt2?{KDg|X>?ETr*qPn}4rFkb0z1{h#u(&rb5a@T&4C{lY?VS1w`n_PBZRBn4u;^N zndcQ-5vMw4*Cs9$fvCo~)?9J?dvcaqoAy#<3yW-;U2E;jS<$<%W2)ACimBT5cNF*- zx1#s_J@br1tNHq88&VjBo7a7lLj4?%6t>O&KP83QLar>IkQC4yN#Wm56VE=C!i4gd z-F?wST_#Oznqz39mEky=XhWQ8owGNZ7|n)rn>~v}ttOUfn6ppzeH&@wkWWDq|6qZS zp^4GgGigG5IovVF&_u&WvWH=xCfeuxU!@5&XK3QzPaLqvpvbPC;irN=mN=R+iKAhz zA&z>6>KED!FBid#2cJ7rLLA2H$RW?F4Dk_ z7*{dN+5F-}xc_l}{o--iXI_AP(<8i Egg^ z?4sw$oRm0T5cw1m8uo2w0mAI@_HF+TDeY}@amd_xCrxW94Sm |Wna&gG;7eyKw=(W#mvf^VTOe1}j|O@wwHWN2_{xM7WZIpT7*focUWBT< z63#_*KcE=PF=s iIU&ylVg)CC3P|82=KN zO)Y_xiw#1t8IFNU-YcVXzk{?ss*)eC1_&r?1}8mUA3t32V9E%D N?V5mm3FQt zYP+52HCmHl-FmN(&$zeRM$x`Lr~2P@V8sbIN98FLd>%rF7foQlsvyqu@en+=&aZ{P zbM1Q*{aZj=l?rQ-aVv*?XoWQ|aVXKSX+9Jg+P`>_Gx#@|f?=Mnqe*WWn4=Ln{`ZIi z)6}xQYD#yAZJ-DB^ZB=7zUfFaJ0enaHpjh<*{1*R#zvSL1g#6)oz5q%=!h{wDQ33r z3#T);8e7m~PKP#zIpg%{?TA!u^Y_U;ucH %KN!ul=r@()&Ka z2L&G1nsaY1Kywa^nqyCTE%2V{iNJf-4hMFF1sLjpYZ7XKqh=85FbI0`e>$S9@OO55 zaxu6nz!a1PP@yJc&MmJ`Nx`;MK8ss+@(xi77DHU#A&i#{9n(4AOr0QS=l1!v_}e+( zb%ncgK6kG8dY>jL_ 3N&Mq6BkiF`lQ4 %s(bmo51+XtJC6h@hj?e9&8)Y<+3?2V)K {D&((4;$k4C zO0-vzK7}lSQZB}7R7X{ vo+g zZugt%(am(Hg#4@5&JMIgDq{Jbsw505yV=jbLV3N758Zg^s-m4+u^v{88xM}BVF1`S zL0gw#B@X7ZR?3p~+Bsw|S_vfZ)j5FC$Le+EJFCpX(OYGw;2{nGVbvWZjz2iB9_ID~ zYz=FBKSQkTyO=b@su1o1>{jA??m~llM~EKsYS34eS@Vag^qN2FLaW(3P7(bxL|SQw z;}O(WhL#%^uv(xK1CB?1aLF*wIsVNFsqeAx%?k`_R4W#qVoWQx*61!UO$#t|W~eqX zA5O-Y+`7O=A-Jf F@yhi{vI z4b-F_SGDN1!-a(Bj@>EJ;IF+YuvJe1@b*b?flH>d?}7U$H1DNB_?`?zZAzEg2obV^ z>ITCpJOGVFgHXVZ{SOKDV4Q?Y1rH%*aHw7e_AT)zgs&qD>xOY|}_sa7>; zhsB7}Hkx*slX~ldBv`V#ZURkdwDIfqsroU2*aysG^!BQ^;Y}phSvWd3b&)m)gPFv| z`sBB(+^j*}o~me!i1 zT}TjkB$6?~!TNAdXeoM8kM1W;oV}#bs#}6Yqa}a+Ks**Ze;=Ln9r|A&TWDMen<^Z3 zVuej$fn`OvBdHsH3y`|K)Jtesh}Y%=aEy`Z@2pWrWN7N^bwpa1k1g=`-;sxXttRj? z+t$Y_)q$7r%rC3I$hgJTfdTh@7vJfeWe~0D4`=uD;cVxTcc!I|HXW{CR7*GH?C4`c z>;9i&spG(p*k^@f1%@=Y+O` z(oww_EBT)_qL)$MtPzhe{I43ZgW hNn6w?4D%95}=!J z%_irIcviz$!$xr`#M;hx&e@&JeaC&fz}dRHGWT8g?Lz0(-SZ1C!pJpp>aDH`yveHm z;LLfyyyQcZNnHg`b%7 lCT>k9-hhE>cPnl&o!LwfI?VHxeBNxH zf63=7&GRNcZ!*tU@c9b!d^w*lGtZadnX|B!ap!@Wvs+29jZXFl(?y#z_k+q*y^G~t z!18 cDULxIovojgOz#k9XsdpSOR2Vc+6f`Mlfn zfdxLEyMgBcXU>QADY?EksZGcl0Y~$X8k==Q21jeu5g8oq1=PHgy*(4{^;6(!0`B_o zz-~Xsh;y8d56cA1ia%Uf^9Tm-&+HX2{RBJwXQ6U{m7RQsS_YnFU~>ZI(oev50@3%l z!~K^_mWtV_bv2@o#djcO$N(i@L)gRY&4_&6jr=>pCPqFFl6l{yq-XH_ocp{JtbW*J zW@lbt2R=aBb9^`o 484`G{`?ZPf|ah~a&i=mW-{00&@w!g=+znLvABA5?O))`F)wk6 zus61x(jaEQ6t3kaOO&Px)DzF2fh2sDPz90ky8B=in} zXn9P(!D%($o_$Kc!Tg19JSad;7_9J+5l?U?_b1q{;|ZRsvytO+s08giiY8Rlb*6av zg}3x`1;hqy@WQU!Qe+R|D>q@4zcLA5um$Q5f58FOBQS@cYuG$ l! >QPw^*VMrDxIgrq+~JQMSIU&2mu!Ua~`I?3~7W z_8Hfp_%?KreuG<7!gxPEcaAje9koDhy =y=*mGBW~F;JKHihOXOm^rR{XGGJEYFMkBx00c$M;PU -8s&iBr{C6{ix1_pPwuW_ z_(0o|Uuc<{Bg!WX-j7OpJxRF}mx4e6Eo*YbWDDWi9Px#zm$OZMkBASv*F*?<4-G-T z@>ENIjwn73l1{Jzx8*4Em}_$|(2gbpv;(2{dajfd@nwLfB3=ym*exfbP(a5Fu5q`w zR?G6RSTYy4YZF(1DiCZU)?B}0tO}Lm^2aaHohs1;`>d90!eY9}Y3T`zn!KS-*vZ0e zte&9wJWZ}BE1|)+dQB&A{{o)&`0;2s(y}5~95-7?t)s&{!v{A}61#J(T=-5ecu+(e z1Y((i3-3tFwp>vXd;U(|X;aW^C9Z7g&lR(dBGl*?1^+%p?}U8TE(p%Du7l-gVl%pm zeTwm{hNpn7v-5KqG?_+b+DWU6T3Sws2$>21=E^CshpKPGO#%ol>Q*3vJ#W%pG*m~Z zHqoZFo(3zx^sRzhqX6isBntgccTj&V1$f)SRd@yT{ICTtgYj5H7MUs|qS|&ars}h3 zjZH}_3g7E8mQuSzdQk;X&{xg2MnX%22lDGt_z+DlZrj1RKJ?FOyI?uE;lODDx~z8~ z*qJe@%OnMWQX~c3Bq$qVs4-V{nB?FRi+3l{^k)%Z75aisP2sx_tQc$6mvuz9epk?z zqN0S3+G?UeJcuemmGC-9yoT`z2VzNn&IL%uT^j|uqh)PWO|O+f^akID2%3HcO}{{u z+SVQ^IK&K=rj}R|B}L*-Stx~7S}&eag`)>(3`0qSDm1i1x4Fbxz;@7}TMfHZp|bT? z!=Q%Y2ZY$0AThYz!rY5$f5e?Z-Mx+=dJ8HrZ_lB#DXRl7svZeuNN5KKGbY!?epGb@ z;ZfPsE^EYXV}WhKT6LB_iS?|CP#kKpppDOz;Q~*P>anQ0dF1>na+U;k!DX{xib9)o zw%vJSOCoU}R6(DC`YovGqaU}gFgsksA?Ae^D4cjZs2k^wUL@`h!8|FdkTvlD93n 1gP=BI;;#P_wo9K!M`njtG zY~Eci0XDJ)47p`<6qb>2^yv2+@T6a$`fypR4*yNvPLWd>#XkD2bv^$+%y` 1+l*e5ar>(hBBMsAZm$g+v_fp;@gb*voP{Q~h%v(h9V5uYT`!5E zwgq-#IWMzOPlR#R7eRUN3ZLq^R<8`&4xR5Zv=|p7;MDYV>S8up%L6CsWtTn6QKhT! z=SHzsWgQPk-m>NPxR{jsmDf)gA>-bSTfYjZ1_|%(h|1B;=BPTk5`{w8Js3W&-SilC zj #{r>eb&wkcg&$@ipXMNV^ zwmwUBWsn$-trda#gn_a;UcWvnvOAbP;3ZYyZdk3e9j^s~!p7C+UJI*+v}i#JZ#xz? zs&b6n{>=3?R@>=qS7Ie`oO)E~$v6;OT>n4gyrl;7!M6IgP-RcQ0FSw-N58-vk^ivt zERrXtkcB+m#S{ey{FQlL*t5=g#G%uuz`^8R7=iv#+N<2jAV!B`~< z)R;2<|4y}?YkIX+L+aa6JzS+6(hGQp^fYeF_Q)PLh{K2B@LNWi_<=jzm4#OzcBhb( zwVW@l)@v#}3lB h9EXfe2F`?t7*cVDKncU6t1j`6A!=cfwb w~;cc$39ov&gC zo@P_nEXY@tQMx#@N;K-+uUF-DOm6K1YJ=4LDwc1$Ii^6BBNU7(P|;r2AqtDsQptjy zTP#n`%Po>8O2&oqEVtUIm*i)zd7(fRWhH_?1dUUm+M6G#%s+g!!S74E;UX=E9Tcs8 zrOke&o8$>GSj$1Zt@0b_p*-5jPq(>JrfE}EokK|5G}Bn3qUPTPD$6V^RONmPJD3(3 zZM)&tsS}M=LkDW1+q Gm#p(!$ngKfOnOdo5f;F~5afQNM+~w2*-n&O2~t&Mt}r zbz!WTPI4j^!)nxn>)fahS6Pl0uuG+hbhD{Qm1o2$xoIv|?MH~y#9GM)xNGD|FIUNv zUM`oX2i*1YlY6p6hsMu%q>bftGX`uE&Q}%nSX_Sz=kTPo5cCn {g54f|0JpeU?TLWkcYeyi_C{G|Uk*AFy zj;$tauVJ?{eWc8%bu;nH&6Fn)n;}miHcg%$#2%KP9>nJGGY+w7)Ca_j% Bdr-9Nf)lWc&rRh|sKS)L4jlRUk_@06e3;CJvdKKM c6xMN45N>< zhb54prwQKC#zcA2#sqn?aP~&}=|=hOEu1^~=`WlK{=)GjotzX||7HE~!%EsOAinqj zq=YLV -N1`4b=&3y?Zxyv?%$+A)SW(b#eu-Np5ir_B z Gq#Oq =m@OpgKnsBsT?dU -1hOxPCZ#PO`&Y=8@=9I4xLjH;m3mcrhh(WO+%^KE zrox3{;S`m--1eK;n9=|keRaZlM^INgc;-CzaCIz)KmG6uOw(m`Ftky&u%pE9MpiXP ztkBRfD^^ d5g$527D*BhS4BDtftQ`yvfFNobDff*OXKdsC(M)W)#3H6@2q=_i{DT(`v>+V z2!7(~Iz}MOyALsUee#ucOuNmVeYp3GpTKY3z-nnAE7m}d*_>GY4K0{um8xK$PCp=Z z#_t@I@N2)JO2)MNh+paS)6zgN*6Df)|M=Tl*mUHtwD4Su7B&&0?&lk*-yh(YkNA}q zo{$#eGb>RUf4+tNH86K%tO2wVA`QB&r*^iqpkh#(OGv@r*23U(G;l!<=t{fW44VpA!FK=f@(6HhG|ea*O?Ei)W`Z^Wt=W5Vs>;?dF?0s zFim0tAz+Q;m&i2egOP5iN;&^B<(<@Fdg2e}oK9+Rk6XO5;h?i6J(4P3%*58=6H!M8 zuw1(F0_;T27V~;1)xURATAfXnPf@|dKCR-@s-#c(Za`;sf_l>2(pimHFPg$?b#mM7 z4{)iIa%#$e4m$LdtTpDEYE=_jvl0#N^Jadv>Y$dGb=9h`de&sssF5KiAm}`0PN`94 z0qs0zuB=g$)jv&}F6t^Oy`_s9AA09~xRWrEKf3E5--kIVMP~|-{?=6;qFy)ix~g%Z z|45O}9s~362g1N)dh>5fj_am+sN2oLZmPR#G#_?TL)CKAp_aGt=J;B5w%THzs- yOr{Drxd z)H88mZg2BQPu0KaKRwhHS}kq5qPOa;Qr`~fRI{LuD$LA$$gOfUD3@v0_EA0Qi8??X zD;+vOol=O1iWNB=;9z&ChdMZ_(Mx5Re;%OL)V~vaC@WtuRk`CnX8AVq$N8=>t2w07 z>cREq6olWZ6fIb$tZf=o+_M_V#)d5j*yQ)-5%VmbY?EGp+nz)7OWGu{USp_CPI|I_ zenacDm)_yaV5}HcU9SzXY$w{_n6{TJCT@;b#CjC+lf~AZl$_=#`={e#rPCwzUM>DP z+gN&rUtH|rNo@xFWdB5StaOf_ESBiR_$=QhFcU*~qAL~>) 1(n2K+e(}Fa7s9EV7`@keE(Ej2Np- z*Z!(Yy%^3DW3l!7XMSSi$nwWA`ExqlayGyJ3~ Li`+4`8)BEI_{-+o{wk{0n9>326g_`|xom)Huh%UwQwOMq&}VYF zaVNWKr#xh4-HOHeI& et$PaJ(96P z;upFo$xY8)?P@ZD?j|w)IxEbwVXD6=7^db@lHXg@il$kvDpNcc4_A-N^ZbKV6HmkY z$fk=9RSQ&`IT)s_i5QG NV5v2-QoyYtB1D9nrdsS$2f_W7{|gQhgAF zO!JAVU1oMTC}zDB=X!I@k!o|#RVtd(5)L6}nF cDMvaln$t!A z#O3Ci5m2@3&DIfWHV+Gz`R&>V&DBS#0cO)kfYU1VMK9qI9y^X!$MYC^jN0lw`kPaa zRS(5}4?a$9R@XO`AFtk2JU>4{ZR2TpKeMUdAJu_cy<|q8sLn`CbI2bf<^yo1>yfI= z>^)Iss7p=gB(<*a<$cD;T$?XWvXjkticOEfDlL%aEH~9BGptL^%_pn-c?>&96`0tt za!ij?RX20ZDU5A@Sx?1M|9z^ugWr=*Q^)am|1|ZX_vmN#p3W$3Qa{5e+ncg8RKCeR zQ_Ul_-SHsE+;ddtrqZ+2#fp?KPEdz6y>+&lDKC=UMD}d~wb~3hSKY{C)w$}^!LJZh zPUKKIWfRGE8{favL1!x72J9(b#H^sRS`n3-gQ;L K1gl){5(|=P_LTo(dtad z$>`BsiaYKJ^WbRK*{Ub(ItxsH@aEfxeAG+7^q^g2CtA5mbZM{)?AZ={1!8K}BU*)I zdvHcYgR(p5VbZ1aDD0b9jsqjC&?HQSszbOAAzVuic56ze9uf{2b)m}7!f$A-tHU84 zre{T<`iPKIF6fvY4X{N8sZnT$)F}2K`xCat7fgk*vljW(a+^SSA;JM|l`c Aa8xN&j9JR9~_Y%3{l!#s1q7&wvF%&0M{D-Sb94R13gxyZzM zP20w({{&87taYefUF`udH5q{Za0x03xP=+;02qt|(4L(P2LuU%HmFs)+{);IR}66h zH`{b!u%|G_8lCO=qzI!5W8}rH%C`GIDhn>i^MD(Y4a3e4QxS_^MMdYsPz1`Ol5K&T z25 !s}S(mH)c3&1|$&iFQ8s5%nDB=(SZ^9!xub8!$tDVl8o7oU@ z-RI;{;ofy~)2n}HWvR91ihrnk)f=Y#3U#%5(@ejD=Es{QSEy1FH(mjmStm?hnOSkA zIx4z!>J;y?c-%-*8EvZD_9#?xb(SAy{5y;}@G5nZdfrUBN|mVXX3kaYrK!&8VeZ3g z2mE-HL esH~;BFwhFw4aZ;WoZ(-wLwa#&_kHI}}w+ zewN#XytUukytY|xvAj*1DBp1e0{n0r@3L=rFmf3SuXo#5 %HR4_=>IQgIlB(ycq-X>B?K>4Ufib-Wp%FZ@4KQAaAeRH=-)N zArZtIx7%0T59O8^ckOMH *KU(H z9I$MoAKqr(e=j%RTyc#WqNk>M!q=v2pbY;qW47ehs6U$-TXKi+7;`OHzA4@Ov?aGv zo|VnH6(kR7&g~?xUyN7n L}zrj4)-i|>duyva+nX%JPL zHh)p#V~B%I8~02i4GGAmZFt6v8>c$yUC*1j<5Xq-lwAaqU}*$hQm~LI=Wk~7IMuPu z+0ZdrGx8_Z8Qs+OdiAM_LA1_;Xq| `#H9d2fOmS#Pge*V%(m)>7b(h1|TX zvj<9;+JHOfX53A6_5kl~_xm=lf0p~SxS>LdakZU)t^DenCGra)V{ypU*#~-W56C6% zI{N@wC;|8TM;qj=kN5VuxbEug-dXjw*}GQQ*Irq~&keXUnr%Zpy|-( dPbjtg-n)Y7N-Axv36 c@LMh4jg+8E?)Z zee(9c*HK8H%=S;-976h}(alfV%AtIcH_4j{D4*ng?BzlEq?WylEY3jqWYT7PdC)y6 z`Eb1lHt3$bPW3ti-IKSKAKFnu_oRuYyDS8td-8Vk=N4*^J*o7=Ew(dIJ$ZZ0YXYi= zK hrOFgcS;%^{TdKTm+i sY?3`au>idyz_Eg+Su&A>ZUhx8Anp&)O6xkL4;pZ_L# zp;ndceT&3EtHf9>E#UI`POF`1+1`F3_@Es7Xx-~Cju53!>(u>@`b)WnFy2uS%d*j3 zxDD2r>ds$jPM@ke4_(d$G0sQ$ViQ#rhaGp(BldO~F%6>HQSwE9;X&jBhkIsV>Vxi9 z&W?H?n&neff7C8NPF1}QGIP)`$Doi>2CtlAap49@kM#sww3j*#nrTzBvYImyX+{|p zJ?KH9_{d~nP!(}(QVH_vUN0L*nxHg@HP+3yah9My>F%dOXeEe^eOqr<8`Zx)%CU|x z?FvidS(rj7@}r9Q*|;uC7*!Px$ ?{EB9xD+5ES-lY9wD_ @iyw;uYz8|%2+;8p>bKZ1SWX9g9I;$H@-d!l%pEJWaI#DkUpWT>)mM|o4SJJ?w zLlld3=uH_)aq>{&9oqM!SciPYW^DYpcV+>nY;)0cRWs}@sj+CkHHKg<_W@1oO3kL} z= mxsJ_GCT4a{>+M@$ZhN+UL~9WR5WGO&1di-E;c?MJab+_0LD(&8V*2lmlj z3~Z;=C }h1yMWaS;KU{;x+`}b!SUhhJw?iz zr_IJ0XkZ^Rf4^JRsmGc=yjz{9)yAg5Gu0f0ChVhG>L#_i>7x4(rh31lh=YzT!dHc% z);Lx4V7WN>p$F?kC KJhezj4ljpm^TRBx(#=K=Lk)T{SAs5 eYp&=3zAn8RnUXLF}u{`wy#uJT4rs3R6>@dvm5X=a!U- z!i3+x^wU@4d@Bb~lyj9?OF?txBPw0rn`6EluSx=ZWoA91@=v`=;Oq%ZED%27WCx$b zWSy)wBIk4X($Y8QO7ERA$?sOP6Gn@-MrHjD!3dzBuyL+2_%&XluUDq|q+p-6z6ojC z#>w%GclD#{?;1 cU`%^fjf?GM7I8y2!jfPZhWM^fed+3AXAgio9;VnWt*>l!Yezn5xN}lbV&mkQn2` zsaZGF=v;I1W9s~1`oNUCm5DT}L**=G{^JmiRc83(K>KA=_qgiW-`d0j?j}xw5MSCm zzbM8L_zTxQLny&qpEyed>Hrb6bu`bs`M9d?lqVN01$wBh8pT?KJiSTIaiU#7_XAGv z;u+2}gcmQ2`Yr91^Cpgev?an)@arbcoHSn@*vT)qmcu5rChL2X)J6~4ORtKzzi_^) z{&S1=D`V{^x7|-~lRgC8ZPG4Rcc5DZ8~jH0(1_oa_LL%jue3!UUEl6gXIze5p+>uL zfjX((rnxZfdpz*qSqkC{;gzFMtc{-*s4A6iMm&vdlo<}#$ajghA;5dIJ$mU?kSRw! zb?lg@F6V9~EWLo8^IM7DMKb_Gyu
*+w;$7Rxmo{-0Yv^^vg1f8Sal#PQ}haaiv|NTr|fo z2%vJ@Yb5-7Qb9 $1yt2t(&YTwW2COq)zWa!I_1#t|7@J|VRoV^e( zp#_+@5#VRRl#GvDvXeaHI);&D30NhiwZzhSEh4X*W1hl3|B9)9O7#L|7d)j-3i)Gm zo`$Bb4rWJ;dO}5h5lz>`03vw)U!W;-_A_V-!lNu?T3KhHs^D8Ps_wODDg 1?u``LGuiEvRCdnAID3QaW}^=2#)8tQ(IMNQP*D! zemPJ)*B)308g=HZMQX_Z604JdI`x^>NL|zdfGy$o-yn5i0*Y~@E|e)t5H b6u%0cOqHXSTDe(|nyd z|2cJF>MOzQ_U4wws@*Sbg9K@(b#EK~ Pf%)ghC0@C(1(jbu*c-WOWKCiK684JNl1o!YPx3?d4G>9#~2=8RX_ J&n|*rpJQQIl7YL`bBL-l z8<(mBtABwFWR5j9Mt=qLUDldLVIui&x HhGNIzzndUQ$!k7<1$bRax4M zjzlc7Ir1Q&2;X3l<>FRz?Fx+YW6U!v)IDu?%k9D`DT7itdccjF?ziL3c`MZb^?uX+ zD{<8;ms;e6J%2@&L{&5{mZtH_Y+s@JnX;GFGuaG*{u3I2lk;ZF%bY2=-$YicT6Lj0 zX0`fVHliW6!mubLrqZQ5|#T zYUMnY5>1tJNI`S+E2_HaVi7FHM#ZCx%@rrsZqWCjdHEIfi3*zqYt(=W48XN1*QUcd zt4l8C&|PL&^miAdGzvRSChb) zvtLsOpA?kJZ3EhUIjycXMa sJTtAkU6hcL$Rud7JkpqnlSPAIfA G;BWM1w^nsHBds!neBj-bt`zCVM#3lqXd*_KL z+*wHyz@VqAQGNP2RnDOi?6euouK2(N!y)m|AnJo?Tryb+VgR)OjFu9{$2K->l ScS$WqF5?-@eepBxzdA`OKnuN*XCmyLQ-c%hrTp*ad z c%9l_-p@yX$Mzmc$U1<|d3yZjP9UG}tg!8niu~HkRj#$EBxJ_$f6uj&0{P zF;VhnNYzs5M1Dx6X4zX@;1o;-Sftdh8&*!Kpj4g!50IrqGv&yr9l=7WYuvnRXlK5( z!wBZclVYh+8l5Zoi(3w3j^CmTW4R22;5`;<(N4c3(y@$Wu|E>3TPHQFd98sK)=JG( zx<;O4t&*$_v4O0L4P?eT)nVWyJXSd>?|-q)|6;3ru{-v~)})T?jdi5c)b*;MvQ#=G zsKbKG@(wvg5a1&ryUt5ZpY^IwhmZ$`YN)A9>j54rRYxN>ov7WBkhyWa>a6ZG3)ZW` z0x?&hRbc+)_NDpq44HS n`DFF3+`> zaAL^1tNUfWMPQeay^hllul_o{7iE1)BqE&`)aGz4m0LIxayKA%?#-2_%$z(y{n_%w z^=T&0cA}l1AqmoDo=L`sh*|o!dT^j!=*=v2f5A&D^FQZmwv2Gt?Is2b5;l>**0C*E z$0GOAAU8ArrP>EGQBizo{`oJQB%nN>{YzD-pvl;vYBHiy !4zX3(z*@Y^7V-E7RdgiB9}i zEdr7tC9~<$X?`odisM@RUX5&V617{r1d`I %yqS?A-UR>RfMY z+@_*=60~29aj(OGBzqjk`PfA{ww@Oba(jXG%+3p!$_>#$nO`{-S6b(GlX75{Ey+1F zz?e>iB06q24||O-bSTfg?m>GX;#plrKuSJTqionD6m4SS;;ea-IewEG+|y#)+#uLy z3DDZnc10rj?G#IpM5W6~1ltNSXD@70m4v7>TQ;eFnRkN0Tu#;w7fnDj5+Rq~zR3 zB21IaGay{l*5m&cwoPt`CZ!pI#m(GGLz#(&*tE XZ)M3Z4n|`qf>I@sGal|zD2I3XnUt-H*RdF$N9w3fRN_v2mpd@U z9oO6U(_DLfs&;pQsTt<<_thX=E~dY)4(0Lw`>Jm}_p18NX3`VqdB#A0*Fdvkzqfh6 zg&@$iR1hAAT*mLbAZ62dSj>qLzI4x0yPw+R@DttoPsmx~Lt$yiO#MLR)%y?tGVZdF zEHSR`YYm*<@>O=Yi}&d0J<7euf!?FLeYk$lGQGq+c@WZ?72LW?nWi+d&+|IgAiwz; z^d33hW2pCND-Sz$Q uSFCrCtp84?%VEiscmgtha&vfyxMLq~cz zOQl`yE3gGDduXe^$BB5KTL1s-(^V@CEUj3k-Qx2j5Tt&c!4BRt%Dlz0! ^?#O1)q!+(X$9fkoPU}r zAE_fb!nNfiT#qaRGNZk9HkY0vgB6;7AFG@pGUA!-W$&Jr?(gM`JIToR5Q~ivND@IF zlDf2$bquxxPl$6NbM41Sg&fHGSk)9hVoQ!A?mc@^p# C`RNlC zrF3K)9IuRz>jn5Lr-}mZLK~;wtAm>bthX~q#k{fhMBm(^KAMWlt|6Ie=mWHKIUmZC z>j-i!kZK~ul%$$y5zJz))04;m0=%AXIGs}t#h|Zc@m#riK!rQI+l88XgJpB@;IeN2 zL;8Lj$8R!B;da$0J0v`)cx9)-TK;~!Itp*_`?jm&JFiuk`8 QJ`>b&FFMMO?h-z(FGv+f@*dKvHI26=PYez@Nt9}8lZ%7jhw9QB(RCYgYZzXC~ zt*nv!dccwEF {c#(DZIZ#)x2$_{fRFyNDkzZdjg21immHKvkI!kssP|p z1CG&>?co{pfNV2k2SVy1aj_x}Mf?NL=fI+Ute-URw+Sr$U$HL1K((HcR*>6g(OAKx zf$&@q8PjK{D(yJg$B-HQ?Fs}rRjeJ4L7Ub;Qf9{NR2|Z$yg;bAN7U`JZYwnNcdAga zEZH)lE;3Af$ARe5VUbGn>Q2=?*P~Wj54Y8pnT*d>zY@O&nU9Ib*^GAbd6_x!bJbgg z%*~&x-*@zDOckW`M~uI@|BC_GUncbn)h{xG9@&7_{li7@y6$Y=SuBEQMWVV3nNz<| z<$WYbp9LuWwUhblkTZ{bp*q&Lr!vu|g@j}jF-Y_uViJp>og>&TTsG&9EZ**rA6O%L z@_>GJ r6HA-ErgGdX{=_LApdTIP }0xN`tXEXGYp%3-Yu zxm(d(dNoPX0i+C$SAxiK8|t0m^?s%4@f;`qt0eYIKA$T!E==@dapEVIzgXYq(Bz^e z@fku%%8Q-8nezR#fOMUc2)6HpooyUKC){1%dIuWyZbWH!FNOAyQtgAm9hWL!ReK*1 z>XkU1?pCi3bJLfq@|0+M&nlhb?DA24&DdzVrN_iR4Y#L7=QD+*VQIERf3ZnlBqcGn zSjn%GlTF@NsyI{$hqCKs)BP(|9;kG_F(bcH?L+fXr@_cy^pz^L1sd-(lVSzt@m1b* z?KgQy4groroFrWTl{&cILw=zgmeTxYyiH#5>9S3-EWI^m*XgfSTu*@*b^m!<;= 9lyN_h>BlD{eMdz_8AJq>VMk}h|A#r zO Z`db=*!|XR0bc62eqxpAg|aF0e=%F2b@)xu=EHB)Md8J)>`3}>A(UjnGb<6Z zMB8q2GR!64s_rNC@FZKIXMu1J>uNCPILO=_B5Ox7*k%3F;R26u@mR!F(;>v*JKO8w9q2DH8V&m7znBg_?h>p}9Sifz{Jo z_HXv-jO4ToGyC7_#N1xVX}wJ5_p05njM|g}))?}|R_SbVi3|(&Y3HDgv++&+GA-e2 z{`$Q-v@PCB?rf>R fBrd Q&^!xhnv@$&<4N;a?@Bnf{aRtkB^?x#o;DTORIvailLF z{hKM=_596FxL AFe5n@FzS#e$<4!g}b^bM~6F )ld z*46cTQ-Evo(1vUXM2f)XHUZcgnj@t-5Q)mDM5pR?E?mUc6YT(hVcGO(H|I%YJ N zO97|aD*ZRklmA2MgE0awQMxln)jv`Cunf5IU4LUi)|h@;AJk6R?13pOM^O*_!o+jQ zspk3--qFN0Y7~tT^FIN7QnZgPxI{8K+MhdtSr}C^pMNGldz;+>JvbY6Bq_TjrMnrN zs?S#)%)_brxl+p+VeQ^dZ=;qdxNGHiZPQgj-B)4qTo}?*JIvF`%(w88>o`De(Oa-b zaKwyG(;aht#hKK^RYYcHnjYD^r}qYPwVX5F?kd97^zxFx!L_5TQ>@%MwM%k$liQ=I zeY$Q`4hHV9cSTU6{0y2GGV~SboCjv=N7_mXEMe}vaRjf_Hv8L5-BFdAc3HZ@ev9Rk zQ8#$s9+9O_Ks|VOmhQ^q Vp26 YQ0WsWY$3Wf_J zC6vK?&N#XHq-r*qQRs`YuGUFVS9yqHJH`I{e{CG*^Vb^Ro2!5S+Zr$2@5s%pHoBnA zuQvB#8-2=wzdTk1O~efG!rsAVDM4yseldex;^ f`csxlCr;;lWf9|Ev}sne}$C2pjWgCXr|J=qOIj0(*H| zH` d~7fKF(o4f+uVep29)5VMH zan0Qgvdl!~;3L0fgNc?~;BJ#bfqe>@iwgK`rMbO85AK; p|DOWgeMrMow)q8?muXmvz$7< UzEkB|&`n;>tyVs8!dwv9Kpd5IZSs4LY1 zb913Cr5_Iz>b@<9_(`Geo=U?(Q(C0EtEbK3MY?^P34S|z5q05la%mCKj2BqNyFYYm z&dD_s3v~(gE-TW*TGpFWtUK1X8j#S71jrg?V5!amO@w3kHmp6))7m{&;xvbCq-39z zK$+UPGoZvAHgT8IF`*IsT<-sL7J_A{MK7>kLdi2@78L6dYQFigSodaRJxlb6kW@fy zuWL$liATU<9g_KexI_~z$9z>naHLr#TB=7EuCnE06XValnO&-@Dp;R&eRWkBrw_qU zPrq$Bg&5A8J*7HFO*Nr1Isi78>FT0nY!0$%NZ<{ie|eccr4q|99wJa+&VbnX7ou &H%K#j{n7it4U{lfypeRndQ1miv=d9avWJ; zo6B`S`drjbcOAfF+XXgAS$7(5yYW{Tg<~tsD}|jLlR;vIm76=->25i~yCda-##R;m zjVkEgA}Lv*YU6A2TNE%(g)V4SO|N~Ej<3*N^EMD5O|ZnCrb%} BFJ&z zLOD57t{>QFKC95-w&L~20Z~8=ZGpq*G)_f(9cd%ZYTm(7T+`gi=BW0%rue;d?|_S3 zo&X_nHm7I3+DZ2?x3t&C3`rZ9GChX{qiR#Ck?zG>HqCz@$9-S;K@Ciqk>hTghS4n5 zZiHCL#~cFj6}!19tJJ5~(+y;n90Gwrkz@RtJHaL-v2+bKA%0mKfk158Jz`C}C#No2 zC6P$n>$K=apaxlW(T-5n6jbP5N^=&B5*~5R#{&4UTvT$l5c9!Rp3D=r2JdMYlQ`D^ zFX>wZ(Q!exM+=hx4fhiR?u2ad2MU_nur521AM_>K`ytVQ%}kH>dC0B5WX!y9Z$b5N zANgw&hKFx}U6StYp?gVRxpVBeT7PKn4eR3i bv*Satckg#zD{Zl(!TXaaK9%NS9kX UMwQ#X?;-c?_dS{tk1T}mqFsoWn)?Ov1O z_gfCoaF)cqo(0mwOLcgCon$<=+=(RjG`&0MUiBo`rtHp^wctKYb_GvEcCT0qY&j`+ z `P8ON$>DBWo_FR%5Rz+C?#hwnQ=4*k4%C_Fj2x~-;W<5r_|811<=_JtaJ$z< zCF=DJTFiY2HT6VMZV&UJ>xaP*K%i6I0Jqq=>QEeNpes29JEz`oDrAJGdpG2&Ffm!X zc@6pe94_&^#kjkGJ3fP(m1CWEZ|1Ei_9h;>+oW2k(>SD!aGQbV$|~LW^x}A3( mG+!k2tJ)Ccz01?UKsU%&xAw2K7h_AWdP}3XtxU zodqD>B~O5Kw>*K*40!??yAuHwy94=9xg#fBm4HacR?t|>DNn(zbv)hma9kF*jsZ7$ zpBqd@u7$kCAQNzx@RmTXfAZD>xn_!=JrG(f&o)!5b-$Bh;6cEkbON z);GK*P-`!53Dg2)%~E@sd9=DUR*e$^2EcCQDFC}!o&f9?c>=JB@&sTv$rFH0kf#r@ z>-p{88ft+?Yq?MEAA&{UbXk^JC^bWD=QmB~q-ltsaCkROH=}BF#YvI|W6wzfeA{CM zkXNY`aVy_BU$)#5PeN{&6@j5+_1h|>uvZW>R$B)jRS5)U b-HK_+}he=H)=5C^LLXt09nlxvno+4bEUCt!7yGyL)VTtp`Ot^LZJ)kPQNrVdg& zBxr_EC9wLsF1k-RNC(CC85V~ Z%{gmc^co#|QOe zfeY@2+y4yi$^!S%SC+Sr!TDxKPhD*$cGKC}Zws#iPXgcdv6 u{P)vLR>kHt7&ZE#UAJ^)Uf0P!{LqVG8=Et+~ z%L_0uUW=`|*|Nb^@)3y0UsPDFx@jhM*S$(&6D-245JN#*I+tqa*GZaR=})%#cXxeQ znVm)kmNc_IWX#DubX`UZGI#I)?HqTjA1fyu#i}}|4PC+v(1t*w#Gtd->L1lhA>AUt zzrY2&;pI>Kfb1HEc#bcoTM|!QbKCI6Txwe0vL>s jP#?Uy15pVUYa2hApa M zE61DzEr3N)lv>tYZ#C`Cj(As@PzhzwF3P;l6k>!s9RPK9m~98@Uc=K78ElYKxLE4K z3Z7i0SmeD5Uj>*w)VRe0XX#po*ZXuF_Ri>wzUE`Yt(sMMxC;KHBzb81AKv19D6Vm( zP%T&}Zv=8HN(vZAgo4_X61Nf>x)d)yq0BD%68=8% z^V49R^Oa4lP5H^r4OgeaDgWsGmY;iLKRF;HUpMYkH@6K*#)NnVxQ5|gW=yO}&ezfa zXuJ#LuGYJijNA^83FS }O5j#NnW& zc)T(B<<6I8OMhKh|D`NzzW#{Q6&@Nea&IUW5xm^FNx7f^!|~djWEY&k@{?eaJE_Gh z55cJVW4?%0?R^Z@tW6mwTAO+c3ISWSo(A`Im=9Wc<7^tl8AAv$PAyT86~q$FWYc%^ z4~yk-%QwDZex5BICZ) V2p0^AgZp= z&iS{33bcV@ tOM%%8XiV =<}nMM})02k8Te)%^ZJy1Mvv!N#R?i5+Jn zhygAl{BVjsJVZaJW}B5m^dCcOMXCI}=`d9HE-9v#4Q!(kt~hibfviRggb0_J(d2TK z#mu34B+BcZL-p^=o{U}bAi&lZ*bpbws!isUVY;?$G~f^#i3yo7nH>Tg511Ll^vUhU zXm~s*8)&zIDrEUV4Y21Z;{LUDbqz;b2fO;9%o6%Ajm|iG&2_Fm12) 644*1uk?~<>aEr1K$r7^AbyRL3B~#hpx8%tsTC_&g<5A9?;y~rru Gx$ibD`kfA_=)~Oy!><-sj!(5afj1iCRRXz5 zRN 1T`Qh~2{y8$qiXhhX =jg|!ReGl_SFgZ(Y)94B9HdJcny zI9O;2(quuD7YC76mb%WE#HVr~3H<;dy34dbOoxe_F!V5e1VFg)Fnv=n4?pm`Ov&MT zNpUnCzm05UV5xuGb0DTznbXaehwE9fOIW5Iq5C-dK;YdY7~~R@c_gc=+zdNX55S=Q zk0W(^9(NvzdHvsJ$&tFSOX+aY?+NLdCPY`ejkmFkGMsN{%QM-53^L3NqekfS0NAJz zx@O<@W{=PZFdZ95=u`BqyG`GbwEItU{zyGi&mj2t HYFzP7X zrGz61a>Bo($L#xE2s*|LJqpWPzWM2NU2HBoN_Ra8j+p+*{)p(b%a 4O5`*F6Eejsksn6WiLZQ%l1;0Q=7eHY=-f1D;XH4#W$vfSTaVSn z#UEN;Xy0xvK330BcbmT)r-$&EeVpD%1m&xb*S!K!#P}zU*B1q(TOCi(U5NL3> N$GRp;sxbdfD$PQXxmomp~%E ;GcYlGqRUkG4}k(v&_*ALUVSATE&nEeOa$74=p&VKxZE+-&-=^y=WPW+=S+4oPj z Jp1F8>&?+8>oI!MT(j(C zozHoK^(X5d#Z&LNmU^ZMdb(WcJj4E=O!+DL&K%E0UH}_pQkI>ff1gUEv-?c(sk&1U zvI?S9y8Mv~L%fqc8_aR1>M|^nKbVV8)gv-x2N1%8Pu!YQbq95i*>$QubLc(X_2A>a zEaLf3vU-Jb%4&vsFtOb%9GrXEweZk;lBs0|)3|5^VGSpw({xb~O@K4g%s)+!RjFpy zfuSNZ=yaV|pYF^`(15@)POh_3_k7?*2IpRgG =I z&(Z~ik%B@DJFRt#+&p;;#Gx`q9K=<{ZzVMrb|%(A8p(C 4;8 z5gsM)Y}UkVQ+u{PA@8n$cx!n6d8ttSPt0v+quO}DJbbq9(PrKEs5USgp>e=_{d@Dt z*?K_PTFoAM06Y$l9dJIvP%IJ_sMHMnv%WdEcoZ}z#|@5%wy$#@G;jS`{|y(hLFedh z>LGLPIl7(NZLU8@AD@3!I2%iV9Ue^7L=fw0^Y~v`wCXSVxPeu~4wxvw;m7V @VX{-(!qUdiwL9MD_TUvx6o)e;HN;*DwWx%$`xqZ~0{ zP>d!1)x&W;F5+2>k9R$2&xzKV)6Ul=X4AR4yg1$mk^X@IeGtu&asQUp!Sp&03cTB# zdY(Qbklbt+^Pltd0r=mWA?Lw;?KUUW=|j?+?j@!#h-qfl>8j+41IZP?adT#|`KnHr z_bcPHE#^Vz5q2DlFml?3)9}uE;l{`WaO^+?9S^|E9Rk}UnY+!wqx4_PAvw1|zGX2b zpo59M03=;DN}t|^3=b|WM(5EakoaGuyBh@>1@sqa++94^l9D~bjzFjFa<{GJjn;!9 z_eYP`)oPx(d^8-vZZmf@`2Lt#HCq3^9OTUwtpcoWw!496o_sCXTWtDW!1{XJTylY~ z#qDI)1-b^`O&k$ssz@b+Y7;IKPdCnBhb!SnJg=r`zB3^p`lJJ#DdxKi^l`ZhQZ1`2 zoPDPAg!$uz`cD)=5Duq_aGVLh|D<{TLOqPApFdrwpHokmii`E{%#Ro8fvHb&FwWd_ zu`bJO3r!MghqucaWAyW0sjHAE?z&iaLZW!_V% DsLLcE@J7@G@PMCUYQ@wB<5gn#C?M?HkBpuCoi565YFEIc^`! z5nD>OSk2i O00tmDL=|~(~@ofM%vIHSe(4{*6 zQO@F25wYDp5I1UT7Qu0c*>br)NbN8cf7eGIzjkx{FpPFr@nY4w4YJFl;<^R5AWQg2 z5H5(cJ!lUDxY{|-$7fl%k71*vx3GC1n-~7B59&K1Ai`X@Bfe&qV<5t7FkH$Aoi{}L z5#zKi!(FZWOU;9w@ut`R=tI>`^Y{PJy{d6hLJK0g#skE^+O5R@)p90NM1o+OwMr7k z^Tz+^iuRO7vLJDemz$0cbUm*kZa6oZ?0@KR31#Rj1Qs-Di|vcrv%$Q3%)$TALxIS+ zf9U?5C}h>u?gXaXHe+Xehh_gJ-o}attxL@Z|Iq#NMPA(#D`rt-hv{~OK8Cukyn y#_?iM%bm67KIt^YxXwKN3Q>t91LqN2Tj)WtuXXRj$qg-|sPJ zTm?D#+|0O2cgh}z2q-suPDn*b_u5qmOFK--)zFz2jC(cCR`+lLkM7#ORYh?|-{;<6 z 1i7%5}mW%=`67E>-4-dObw%dC3fFfc8%}Cp93HZ7>rW^pgXk!d6d@kppOxx41}L zW`zsj4zMLzcppK(+LZe+A-rfVzeZQt>(lPPhKVaSA6^4HxWS}dtIy)?yld^-8@K90 zbH;UWM^jDHwZQ-9a@w28*XiS1Ww#$^eeb%B(|@7n$>W%~4TdU<%&r@BhvG6und`Y8 z=fF34#2AOvLDxe9%FJok>+#9uNvga-7t)ghZ?Faabc4P&xj>>qg}3Rx6^ vT`P6zGVFtKBCF^ZHiA)$aMZ-_>QUtlx`Y5tWPk*Lbd z*qijDt*bOtS ipR?nb-(iX{eE0=h#W7NZ!HwepecvraAPU0W>v_K ztc>`q^1`fItwelQC*LNsS}&wUF2#HJ7Tr5g>R5OWu#n00K%Ezk`9A{c$RtFWGIR8; zx?w+sHKcIg!tNw}#eNE_{TA-gs3)nfx!prwkav}g7w(UTCHoW2klXYP+?XZ2tB0dW zxl7Ha+jKqOo;n$x=qfXQvi^Je=S#8X=fOdw-Od^y@ETsxYQ6c>?fPZgCDz0MbLtd5 zEY`sy^KXN;VrtX6DIj4Y_4ujm22-2rrh)|da?)djtXnK(Lf)WzMl?H#;(jG1)AUYN zz-{QFZfoODpS`o!EIUaTv`vVVnc3{iDcoE;bUNaf2-l}h*L|$GJ$btBrA{-;r|bVg z)iLBQ-nN*F?!t?Av$^pu{aAGr0gxGHvHFHfZ}w3wUX3sji?0i#ecB9tc8ymU?2H!= z#KaQfh9!!RGT+V6ePimLK6k?)Eiq@^tq<&K?TBm>b>hJto1A5qJ6q=qdOrEcFw5_T zU_D?yy<7MB-HTjngTnov_)N&jMqhx`V!`#wlO-y#Aa^%=avy$%F;P#Pr?{f;%zH2s z@SJgvF6o8BsCxn#F#95hN`Ib2VwnCRkz;fsat!(_lu57NtIImxD_O*#A>!MFaWioX z#hXdgGeIkB`fc8RT(2T?(7if6GcIjrnPcwN?ey{w%; ZymU?*y68R0+=Or zX6FYjJ40J2dZjb^s}Icfd-X8(q%Je{WX`!gKNFS11?J0{I^V(3Ku9q S zT?td?a0dOG7#WAN2}%f~v>a6Q0)Q+yBfE`wT$XkIK%ohHns2|n(9E2r+wEKZnpv!p zm&^~dQ2wqki|#|syxDwkA7pc-`OEzX@~g}p_d~W{GTZLw5YP(qhuNriO3hWXb(dgi zIEVXJ=g!tW+sn^YT;6EU1QffaBXZdDT@H;XINW0M{cJso80>$20Fw8zne~7^pg5Xl z<1)1kXQH^xiQ3C9iIHT!c!0&c*_1s 6L)f{#|z;$S~&yb2ZDtT5M724^3)NGOc&)z!0`qjFu@OvIx z=Wh4QnyR__=yvZFkS>lJHGz_7C+j;F?L2&I%J3BDU32SPU99IlZ62D7zy7!8>$&=7 zd2N`dd*}Gly=+y^IcCW`U6H;sR`b?*x~k}YuFMeI9BzUVt417?FLUoV?H|)Ux#I4a z$1sM<2tAfiI6-$;i&03NL*M_&+YzH#&MQ6y;9>* ;$sd<;LS<>s8nb>#4$nMTX7;bQJ2V_1vjo6Ok>t$!8$bPdue zY#{;1