From 756be8fb85d42d23ace8c6765d20fe90d5b31f1f Mon Sep 17 00:00:00 2001 From: Hui Zhang Date: Fri, 8 Oct 2021 11:56:17 +0000 Subject: [PATCH] fix dist batch sampler set_epcoh call --- deepspeech/exps/u2/model.py | 50 +++--------------- deepspeech/frontend/augmentor/spec_augment.py | 9 ++-- .../frontend/featurizer/text_featurizer.py | 5 +- deepspeech/models/u2/u2.py | 6 ++- deepspeech/training/trainer.py | 13 +++-- examples/tiny/s0/conf/augmentation.json | 26 +++++++++ examples/tiny/s0/local/data.sh | 2 +- examples/tiny/s1/path.sh | 2 +- examples/tiny/s1/test.profile | Bin 130998 -> 0 bytes 9 files changed, 55 insertions(+), 58 deletions(-) delete mode 100644 examples/tiny/s1/test.profile diff --git a/deepspeech/exps/u2/model.py b/deepspeech/exps/u2/model.py index af84d9cf..df233cdc 100644 --- a/deepspeech/exps/u2/model.py +++ b/deepspeech/exps/u2/model.py @@ -24,6 +24,7 @@ import numpy as np import paddle from paddle import distributed as dist from paddle.io import DataLoader +from paddle.io import DistributedBatchSampler from yacs.config import CfgNode from deepspeech.io.collator import SpeechCollator @@ -162,8 +163,10 @@ class U2Trainer(Trainer): self.save(tag='init') self.lr_scheduler.step(self.iteration) - if self.parallel: - self.train_loader.batch_sampler.set_epoch(self.epoch) + if hasattr(self.train_loader, "batch_sampler"): + batch_sampler = self.train_loader.batch_sampler + if isinstance(batch_sampler, DistributedBatchSampler): + batch_sampler.set_epoch(self.epoch) logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") while self.epoch < self.config.training.n_epoch: @@ -476,13 +479,6 @@ class U2Tester(U2Trainer): }) f.write(data + '\n') - # def run_test(self): - # self.resume_or_scratch() - # try: - # self.test() - # except KeyboardInterrupt: - # sys.exit(-1) - def load_inferspec(self): """infer model and input spec. @@ -491,7 +487,7 @@ class U2Tester(U2Trainer): List[paddle.static.InputSpec]: input spec. """ from deepspeech.models.u2 import U2InferModel - infer_model = U2InferModel.from_pretrained(self.test_loader.dataset, + infer_model = U2InferModel.from_pretrained(self.test_loader, self.config.model.clone(), self.args.checkpoint_path) feat_dim = self.test_loader.dataset.feature_size @@ -511,37 +507,3 @@ class U2Tester(U2Trainer): static_model = paddle.jit.to_static(infer_model, input_spec=input_spec) logger.info(f"Export code: {static_model.forward.code}") paddle.jit.save(static_model, self.args.export_path) - - # def run_export(self): - # try: - # self.export() - # except KeyboardInterrupt: - # sys.exit(-1) - - # def setup(self): - # """Setup the experiment. - # """ - # paddle.set_device(self.args.device) - - # self.setup_output_dir() - # self.setup_checkpointer() - - # self.setup_dataloader() - # self.setup_model() - - # self.iteration = 0 - # self.epoch = 0 - - # def setup_output_dir(self): - # """Create a directory used for output. - # """ - # # output dir - # if self.args.output: - # output_dir = Path(self.args.output).expanduser() - # output_dir.mkdir(parents=True, exist_ok=True) - # else: - # output_dir = Path( - # self.args.checkpoint_path).expanduser().parent.parent - # output_dir.mkdir(parents=True, exist_ok=True) - - # self.output_dir = output_dir diff --git a/deepspeech/frontend/augmentor/spec_augment.py b/deepspeech/frontend/augmentor/spec_augment.py index 1c2e09fc..956975c6 100644 --- a/deepspeech/frontend/augmentor/spec_augment.py +++ b/deepspeech/frontend/augmentor/spec_augment.py @@ -25,10 +25,10 @@ class SpecAugmentor(AugmentorBase): SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition https://arxiv.org/abs/1904.08779 - + SpecAugment on Large Scale Datasets https://arxiv.org/abs/1912.05533 - + """ def __init__(self, @@ -41,7 +41,8 @@ class SpecAugmentor(AugmentorBase): W=40, adaptive_number_ratio=0, adaptive_size_ratio=0, - max_n_time_masks=20): + max_n_time_masks=20, + **kwargs): """SpecAugment class. Args: rng (random.Random): random generator object. @@ -121,7 +122,7 @@ class SpecAugmentor(AugmentorBase): def time_mask(self): return self._time_mask - def time_warp(xs, W=40): + def time_warp(self, xs, W=40): raise NotImplementedError def mask_freq(self, xs, replace_with_zero=False): diff --git a/deepspeech/frontend/featurizer/text_featurizer.py b/deepspeech/frontend/featurizer/text_featurizer.py index 6c481f91..47c1e6b0 100644 --- a/deepspeech/frontend/featurizer/text_featurizer.py +++ b/deepspeech/frontend/featurizer/text_featurizer.py @@ -13,6 +13,7 @@ # limitations under the License. """Contains the text featurizer class.""" import sentencepiece as spm +from pprint import pformat from ..utility import EOS from ..utility import SPACE @@ -206,7 +207,7 @@ class TextFeaturizer(): """Load vocabulary from file.""" vocab_list = load_dict(vocab_filepath, maskctc) assert vocab_list is not None - logger.info(f"Vocab: {vocab_list}") + logger.info(f"Vocab: {pformat(vocab_list)}") id2token = dict( [(idx, token) for (idx, token) in enumerate(vocab_list)]) @@ -220,10 +221,10 @@ class TextFeaturizer(): sos_id = vocab_list.index(SOS) if SOS in vocab_list else -1 space_id = vocab_list.index(SPACE) if SPACE in vocab_list else -1 + logger.info(f"BLANK id: {blank_id}") logger.info(f"UNK id: {unk_id}") logger.info(f"EOS id: {eos_id}") logger.info(f"SOS id: {sos_id}") logger.info(f"SPACE id: {space_id}") - logger.info(f"BLANK id: {blank_id}") logger.info(f"MASKCTC id: {maskctc_id}") return token2id, id2token, vocab_list, unk_id, eos_id diff --git a/deepspeech/models/u2/u2.py b/deepspeech/models/u2/u2.py index e6cd7b5c..579961c1 100644 --- a/deepspeech/models/u2/u2.py +++ b/deepspeech/models/u2/u2.py @@ -911,8 +911,10 @@ class U2Model(U2BaseModel): DeepSpeech2Model: The model built from pretrained result. """ with UpdateConfig(config): - config.input_dim = dataloader.collate_fn.feature_size - config.output_dim = dataloader.collate_fn.vocab_size + #config.input_dim = dataloader.collate_fn.feature_size + #config.output_dim = dataloader.collate_fn.vocab_size + config.input_dim = dataloader.dataset.feature_size + config.output_dim = dataloader.dataset.vocab_size model = cls.from_config(config) diff --git a/deepspeech/training/trainer.py b/deepspeech/training/trainer.py index 70d7ec1f..c0b628ab 100644 --- a/deepspeech/training/trainer.py +++ b/deepspeech/training/trainer.py @@ -17,6 +17,7 @@ from pathlib import Path import paddle from paddle import distributed as dist +from paddle.io import DistributedBatchSampler from tensorboardX import SummaryWriter from deepspeech.utils import mp_tools @@ -179,8 +180,10 @@ class Trainer(): """Reset the train loader seed and increment `epoch`. """ self.epoch += 1 - if self.parallel: - self.train_loader.batch_sampler.set_epoch(self.epoch) + if hasattr(self.train_loader, "batch_sampler"): + batch_sampler = self.train_loader.batch_sampler + if isinstance(batch_sampler, DistributedBatchSampler): + batch_sampler.set_epoch(self.epoch) def train(self): """The training process control by epoch.""" @@ -190,8 +193,10 @@ class Trainer(): self.save(tag='init') self.lr_scheduler.step(self.iteration) - if self.parallel: - self.train_loader.batch_sampler.set_epoch(self.epoch) + if hasattr(self.train_loader, "batch_sampler"): + batch_sampler = self.train_loader.batch_sampler + if isinstance(batch_sampler, DistributedBatchSampler): + batch_sampler.set_epoch(self.epoch) logger.info(f"Train Total Examples: {len(self.train_loader.dataset)}") while self.epoch < self.config.training.n_epoch: diff --git a/examples/tiny/s0/conf/augmentation.json b/examples/tiny/s0/conf/augmentation.json index a1a759e6..4480307b 100644 --- a/examples/tiny/s0/conf/augmentation.json +++ b/examples/tiny/s0/conf/augmentation.json @@ -1,4 +1,13 @@ [ + { + "type": "speed", + "params": { + "min_speed_rate": 0.9, + "max_speed_rate": 1.1, + "num_rates": 3 + }, + "prob": 0.0 + }, { "type": "shift", "params": { @@ -6,5 +15,22 @@ "max_shift_ms": 5 }, "prob": 1.0 + }, + { + "type": "specaug", + "params": { + "W": 5, + "warp_mode": "PIL", + "F": 30, + "n_freq_masks": 2, + "T": 40, + "n_time_masks": 2, + "p": 1.0, + "adaptive_number_ratio": 0, + "adaptive_size_ratio": 0, + "max_n_time_masks": 20, + "replace_with_zero": true + }, + "prob": 1.0 } ] diff --git a/examples/tiny/s0/local/data.sh b/examples/tiny/s0/local/data.sh index e2bfffc7..fabf2e40 100755 --- a/examples/tiny/s0/local/data.sh +++ b/examples/tiny/s0/local/data.sh @@ -1,4 +1,4 @@ -#! /usr/bin/env bash +#!/bin/bash stage=-1 stop_stage=100 diff --git a/examples/tiny/s1/path.sh b/examples/tiny/s1/path.sh index 30adb6ca..29841bc1 100644 --- a/examples/tiny/s1/path.sh +++ b/examples/tiny/s1/path.sh @@ -1,4 +1,4 @@ -export MAIN_ROOT=${PWD}/../../../ +export MAIN_ROOT=`realpath ${PWD}/../../../` export PATH=${MAIN_ROOT}:${MAIN_ROOT}/utils:${PATH} export LC_ALL=C diff --git a/examples/tiny/s1/test.profile b/examples/tiny/s1/test.profile deleted file mode 100644 index c64affa2343aae4b5f32f60a642cc47761e73123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130998 zcmcG13!IHr_y1sK7~_7;{Z`~U?&LDhh;j+J7NOIbIcJ`Em^o)WXJ*ip6iMzOT~G+2 z6e1-`H&QCOghLWar&2`7_5WRaKYKsVbDo*=sAu}@Rf`TEqsWikRYfijN*LqUM+Gw7Dc*!`UT@~WOs_X3 zt!c||Eb(27(F7N1UcRF?Tcu5(neK9-+li`tNV5yzX7!u|knRlxTv=&u(sN4-{W3D^Uf%e; zqKc1Py%d_aQ6YYkFm@_#R{0neepO3xr@MUqEb4@<#AyW-s(ag=#JNK4 zR3XlHu3F?Cd0&PiKZtX80dns1C8TEiQnFy<-02CLFEcxf)NV8y55{>jlD!^}=2O8t zk&_QicHaM&9(VgZqu=NH^b}88lwfg zu8eGE0-|6*_1b7ty}QV|^j~JLRpf^p1@v=1Fa<+PAUoMEm$Fx)`%Q21tfGn!NsB2v z@sorp7+Nq%f);IB6HEzIsOLTlygQ+JktF#cXwmi+2MiVJ6!$YNLVta$$PdgK1*yI^ z>*>nQ($WK@z8Jev!OAXoW~SHYaV2Z+fJ^ha3?qwKewQ60?i2%6bMVfZ4gxuP4sl(&`^Y6(3}r z9{JCV6A?h2dx3hUxJeZHGXhO^wr|lmxdQ&wEJs%qtC1D=%+YO%Dn5ws)c=fcH>`7x zn=CZVOD|Gy$75O&wAp%HP$WsSv)}R-6cL^nH-(nb^7xy_Hr08zW|AsCi1XzCjPn$K zMh53PI|f|GrfWX0Tepp0L5QTt&hV``L7ZVe1#7$GF|w#oW4rHsBT(WOMSc*^!wQgR z!}A4m?sSzDyc#KZEGGxdMj+*XXVyD56O*pNY%iD@jS6+~lzU2aoc_5YKZx0aG}zM3 z_i35g=~AnkQ~#DQ-Tf>-7&liRr6&H{*z?wBiYh)}`;y4^O=Wt)nXwIoyVp;MJF+aXRKw<~2sl~6PR*^XRZ_L| zbeG#V&Xul>3R|NM891~;PXFzSDn6+53ertBIxmHmOWYiVUL#$NOU(vRM3Al51R0VZ zJJ+plp$|N|KhvL0%K~j%Y4kf4YPBAf7d%k>gd#tv8`_at9LB;oSk$Nlnj+M()70V? zXcDVMEj1QRQlS=6R=YoHuwIcL)B_Lw2eyJ%C1fh*k@#a6C1CScj0RSyHQw4^^TOTh z6#3y?xP4uH&O>*;l&+}a!!C(iv7A}DmhM84Z678RNB#Nh6Ys-`7a!C=J*j^>Q2#_z zHQO)|aI%7(q}I34IazSlMj7U2Hsj35k3A|)Ss?A+c;H)H{OAk!b<-LRtu=6NS3{U|hn-tKL@R2P&%gL3^5pU`aNSi#Ea7 zCNkbssPCRnTixK?4n=<08M_rTsC!u~m#O`amC*nd>KkM0o%^EJVMTsOdC$eq!J2w3m;c>rmq?%)ei-pz%tim{@_B4Nt{_BG zWM}wR^u%HwEq-pHK9fq`|F%a_#fQ|BZe$*d8ntY5xB!)P>_pvSFQm9>I9kFWKOT#p zyXvXYiYh*cBpOwr8ziV$$O(09ViJ(Dik+fcSqjkZ2+bh%Xa=D|4LsHMuE+LlROAQI z!^}f}Mh_~C%OtlrLKQnb3Af^#;{|Dn_Var{-4Xb|Y>X$fh8nWx)O%|4@%@zs^xq@j)~dN4ID* zXc{bn3bxTIz$Cn#qnV6GGIokH-MTwH-J4FjL++-&gwtcH z45w$Upl5BOy{B$=o>9~N$?kM!>dZyKmY;vyQUBlmiYh*6RI`QChu9hlmbUt7*f_F{ z@bjM*`{}#ws4G4or-F=9@hK`*cV~F%Ln*aOZU$tOPAW@1TvIBYo zY&bTl?dNB>t%PMK$sQ!q*g%M}^l)nLkE^PC3n{AjATBllR69ppGx+FG5vschg}Su< z<;Uigy_hIJAo!N~62REZ)cq+qLjf`p*aX9NA-e(@ju5z0>1;_VR1tid!!s{F8C9Wk zR1ar9yknUea(0Nt3`tfh(QFz$#;uX_YxcOqZc&dD@1cLGm6DhT(!FkMdk5S(UR&RD zUD+na#m+?8R56m;N2qRV$pJ4~Vyod`8J9a{bhd`WRajlZN6e=&j%9aZuKr2B4G0+7 zz(istjs}!}jL+-&KiG(XSx8G@)=XBdy->OM!BY4BaV}9Uni$)-@5WRmSN|}aS_h24 z89KwMb>YAP^um=lwSvbyFiSxT7=hWM&M{1rxjJ(&IgdsuvLi1*XT-c=s*FHu%)4hW zkLfRh=1>O|0^HPN2e>5X3iKoxi(UzMv%uw2s!oN0*fKLoiaKKy24fJ0(d}xCTI`Qj zdhE~8Vr>Wr3C4QdUThTRp^la|Bv~|4xcXZAG-hc7?|`nqC#r{{Z=0|DNPYShTC(AE zz(|}2ffGa4=N;q2v}5biO|HbDEr$P)sEUtVeMdNA@sos+h|Mmt68pwOd-|73ErJ7x zX(y&^yi|d@^s=`gd<`DQO7^>T&yWN!jx1uzgp=kPqYFoMC5U%wL70CUt2jMJt|(^` zRX#L|D3VF)b$u5J#mc0F-(J4U!e`2-F}>YQtur5yn{A6heF|ks}%B@BvdCoisqfC{e}Nvg}U~E(=X5dzP%zpNYH}|LeSX3&(^aO=zy8ZRsdQH zuoaA^f4~|o0tr%VO^D_g&4W(DGSIBiyy^}q?JWM8 z73z0UM+?VIbt&p+of>POxAS1oJH{r*3M$2iQ<$g!N}qK!6KDo(&=Z4jsE}ek52lR*v{!f2#N(W4jjr!JWloqCPBL zgi0jSL#Px&fH+G30R_gY3GZ$>xOt;h0loY7Sk^tSEg6b%GQ%1KK&>$ zl8+JDohTcnt}Kw%iM1I4%R!Wt6>7h>KNtT?$C^oe z*gG+r>cVP7s6fI#29~vKw5Fe+&WW+WKi}||+P|hft*F1Rn0KJpukXqZj07Wbwkp9m z@OiWh8wVB*;k{{@kHa{ix;AxjRFJK;Lu>jki~~ypV)R=qltTp_Fx0yRvOjO>T^GMr zz?J}QK_zTD&TH6)i=^XJ>-Y^FmlY$`wydifb~0`zG(g1$wf(8J8!-IMScFwe!9OLB z^rmECQEnYz4y+_GIlzKN@}>fot@xI?_s`0x!X{W6;2To=kKzFJ*N81NfG&N!U(*CgiwvGL8J~yrmPg>*R;VyKsWh_o!F* zhaIDLP-)}JIa1a=yKDHdzsD--tX6#vj&He{adlVzTv^N#JDMM`Aq zSjB^ML@f}W(AvTyVugC9*PK(A6MHLa%*Q7Ve-JxESye=T6;(oyQ@xr9x@WmO-c&ah z+q^mpA!_b)4ZK1f9t-pELIb?Ex%met!kp6N zXc91FD++p2cV$x?hj#Z;H5S3BO&rEz!Q|Bu4hq52Md@@DU7h`5&%KM&N-1iW_X-#P z=X@PzGOpogZ4HTeJH8OG#Ex~8UWnk^j5+_&@M*D%`oXx>U44_QDX;|$d_940W#9~w zgQwLP+^0X?qy0Ga zDmzEdIB>wzKw~7C9K={i%6&TKVv(Ac1WC2oK&zi`90oGX@{Y|ybcmdz?nHHr=EIH@ zh#-k@J{?FU5vE+MM94uSDw@2GH9Hj`ANvz zXjvakgrLJs(;%9cbl6#HBByT;BEWq97EJYHyy=!1JVrYjhkl{LSQ&3pCSR2g z4?VIyIB_zwIU4~)0Zk|o+92YktqjH^JV$d0(+z81OWoifp}hLq0R!BZ>*Y&7!rp0o zylRz5E#m^2=~|ZV_hUU9Do!eL8~#~3bn=5-N2(BNNj%15)@0MZo<)&;s*+DV;*{!X zD)nnT&6lX?*0CcHW2x7qYxUocx4oQbjjr%|xx5~h7a3HUwP&h@v;%b#*Pi$&DT<~o z*4!dqEyF#Eb^)|>Xj2H?9i`VH_V@rfou~=}DaoYf^qPRN4LTn4Ihm-AxGi+g>G3hl z?y`3F!D|Q>g`?vg!<-zGG)EoT#uTEhoJ+72phXhnEGC47LX>_7ktn7>BZ3ZdqSqp_ zq8SHPHe{UZG=&WrRXIdeERa&1!s?K458o1DmPE}VqAF0#92*C`nz1_W4ge z7H1TP>af|24GZ?cLr`sjGFS%Q2QDP$XaU@YHM~eulk!}aF?kT3dK1PMqm2_N9Safl zqdo$VVg9Q-%sRPsG_X`uJ-dZ>7hE2YUqvAXwC-FTWU3}-Zt zk&4B;*wv8AOoLl*z-cs>8oU{-6oui))!Pw_b@V%6Bu+A8dOeQQR6J>2`RbqqA`}MB z2rv@oQ5vkYa=`vrjKwJx$|SW)%q;UP(7&cHqmRUo%jw;`6sAmd10*vG}h7rO?jcxjpD#)kV;y`;>xCk9E z5-mwYPb7G&Zz9FPKaOF3a^Q5pNSq`yJ&EHqSre+Oa?6SsjgT=3Oz*;JjsP$5FCtMC z=a-bS18kc=g0|$L)|~V(jY9i|4Xx-fG(P_rc+Qq^f18)izPo4CL`4-Jfg?@cEG>f~)A}gDD?DmoacZ&CLlxfTV=PWb)EV`p$$5^H92%JJ1rp z_{hhFPW!U2vT_>k$%+r^w(e*kMDYbSk8-bqA_%5eETCnzNMvCI3%_1a(@cEW$od-T z5;Q8*sH+24cRPgpXyPMR@5MC8Lc_Oevw@2pIEN1y}tPxxMh`)FOVSEzn9&dV<+s3Rp>IMx?t3Cf~1UJP;9+rd?o7BH zhkMG6_3lJHm4kQ*oC>wq+V%_o-H))Q_^@+QHE&M%8E!xij?^*ieC)mH3mRd4w+Dc>$Xs@>u6#lGXb+tvhvRHMS-rTJ#Cv zLyXQmCS?IH+v!B@ROZLpV1#tOVd{z0rnp;0^A~ILNow;ct^#?qDd0t$mSbyHc}ZJV zJb3a<&jtfnZx+az1lw6Y^8nvKlGhRxwk~myA;=B|NL0mXpBYm%g%zyS<2UxFiVqsd zQ%Eq?@h|$caOnsz2``$_zaw}?mKDETg>#>YqCO67a=-xRav3lBAw!e`RKAVk$jWC9E)U;h(bMO z?^^LY;068==|?cyo8zVXXD9ZCG#6Bnt=$tD`4*u2MvPi(4$nR81`A%y&w>7PD?VvC_YGRVg2ar7sPwH zyw@h`GawS1YRC|s_y9)M(=?7n6dLPXrbzve5q+lvc zNwf9B{2^6lJofODidr=3$o@CJ2(od=n8{=k(6fEG^%tPMCR39gm4w*X?F4-Vv1heA za?r-LKDck(Z{3q}^_Rj$;D8Z0StMR>AC6O=+MZve^S*c8txdv7;q({7@jKupe%hze zn}_4)V#Rh?a`L&+87qe{^=zBJdRlalJ0A%Ci(^S4y37?UItE!uac0scN=Gx2EDBfY z9m2^HCnwY=npJICbNSsc;VTKo+C2^!!ucqnTYw^1(UnflKp-v4OBwhO4tHY-fexdX z9xK$vRX!`4bG3n@)+^nul6Jf)6E0y0^&n2-u{_4?PTm!{HxcT|mfxc0-$r3;$2Inj zoq@;iSJVo%i^DuV#7rEcG?(BXBY3O(bm*7u=O^8fh^6d^Df?@=dno$j;UIrUf6{l| zNJPCZ9-nq$Y@I&r_;7(_{IGcdI#v;of$0b|Cc%`(jEpU#_I^6#2GM zQ7GL+0NQXmUBenD{Zz%%2Y-u~SR3y7qOW-d=b*YesU4GDv z!0>M(nD;pT2=KsPFdm6bN4X?u1{_Re7sr3QvNI`MYLkwf1jPqYzm*7IgaRA?hD5FV zjRI5^A0#1GXACt}f|^RD9DHz#Y>ja>u}p@!`Zg{eQ~VAXLQZaQ=m#Kos^`GM$>o}z zY@w(ncJBOa%~LSddNYpGoU$A+0;l!>FN{4Uk-Tc-vT-9XzyP?mY8Oq)-rhtM|c$Gc_01raN#&$h~9QLHP^`yp^u^}S@lrCEfKTu*c_a%kJ+Cyq6#r7`sC( zYkVY{NV*+wNxC?4%Cu$IupfZXR5LW@fFYc#2;FKb-XM7EGEAJ&QV*1UCcXAXT2#EwahfxUJTLXV z?}OdLUw13|at>k|Bx$RE`=Q|U-9LqTe3~=6L424?-ZstwX{s5>5GpVNFxQ~v#IPpQsaRhvZ8loC*LtwulfUK6Z zQDBp}fR`1Cb*iWzqv9tLl{Hf)ub^%JOL8t1<%Uu<^l@9k9 zDs5}eQD3wdVopOmHm;C|IpFg8$>y01zWwX>qaN*to%AhpPQL$P=}i#%aiYztJq{Sc zJpxdn9O_0F<3(#7^I#M!)V&j*8n9vgMMZw(>TZV9vT>&VHT~U2&+buF@d1>8$@i?a z43EH2(C*(S$#+GuLjAYDTAUJmV8jjrrA0q^nNBiEXlSDB{ z*2&iaYEwd7kt6F&h5Ay;xCc8w(pOR6`)d3Tp>I-@RYoluyoe2_WToIvo;Ot+>q_>z zGoX-^)DuD)o?1GJ6>8l+TZ(jQ_^+bQNZRt2t9gYa(ePzLQLIzCJ0qFW+C*z-5=%v~ zLe2Q`wd;?5ejZt>R^R(}Y+5NcdcA8ykC*pm9#flo5U*mYKd#g*c$bQZThWd|j zm`ZFefj(lem?m#f`= zGoD$ZWz#T)*1vf0vElbAYSY3gj~AKCgV=vj-FZ~7{}_$X%9T00F}(M2%1pm=_n)(q zCv>ZaD~CVC^eWzDJ6S5~v(Q7pV7G6UB|aBzWkqdL;<>#C&TV9JyMk(ZRVs|3?ZW`j zs8C}|%t>6c^i@Uedg9sI-<+so4($jqqz<&U(Wx(-Uew)VH;n%5Aq=|{Es8vUHn+9J zX_+e>Fog3PLN|emC0t^bamw<7S)#|e`gZ`dkL7R}!l?l&bO%YE;|$??HNqh@7tDM5 z?YFa6bwN~5*?wf>q)+ndg|%6Uo$i~BHT$mLr*v&Qd%dDx`qXh?yY+)o?5DH^b{ao(m%_-~F8R-U3 z-YGlRLbU^iaGoY~v}qL3;{>EixPC5=4!pSC`GkMCNhstlm`wG!NwthT^ zY@$Q{4j74(oId>q(O`|TaBGPDf$GCM{L(39Cvg7B=`{P@0Ymb?HN{Hz2k3ex3kbk6 zdo*;2BckMp7Si%3j&#R#kZhg_vu2hEB=O4NV~N+|sA=QXiC>Q=n480C(qNSzUwI)) z)&04RlLzFo%lu3)^rA%g64DDReg{0svOpdTq??IqHV(d7k7tGGw571?IBy@Nmj+oz zbo-2mLg35}BwdmS{)HrGP)(ruzza!-a!ve}5ygXPxVy( zirnXTdq!k1gzB2~W(+QOsOZpp6}8f&zY}NvvKGU%0?^uca==LJ6G1qz8xPvKj9gqM zc4@Tv)-5jc>1D#PJ75HMjUwm4c+PUR4{jbP-$bIK!q`?go@iW`A>6ld+!0_T?nVH` z9t5R`bm6LZGCT5h2O8wpj=0|7awXpfJBhPr2J#3n5;^siUWJH>;l3a1+g2k#?3I`U zi&%o?gI7%5Vp{~&!-I3p$&8ES0h8@c%3g}~yN31m96Kc1!)FF+j2MINZTk*JnEcD~usS<{%W7q*hJ zhJ>!ZMz0(^iY$~DPr8>pP(yl47AL_0L-J$pbuQCA<5piF?=32uOKeP-<|>;{3KkfN zd$E+Y)!=jA2YqwzTMGs}-1vRyvqRVp7~s6z=cXJMdE7V^j|pY#>?{(`-sCd>g=W&{ zi1Xq(Nd1}YG8i|z(mB(CfSW$lPsdYm%7+}L-$@2_!!^Z$o@7=BP@&0y50>DRB6%k7 z5R)#sJtYP%g{10HMM|fk*AH*V0WTYxMGeK_9trZixsV&i+C{RK*c}(G=wt}>hWWN4 z;AJb6-!WK%@@E**r!7#^f#Z`og6-l%G!(i>4K?NsMSv&0=>0$Ig*)4$`R!^EYC#Pz zL18n(@{*|dp!uFUjLl2JpqK_(fEmXGPO%)xO$mMs;b#)GO58DsNDvJFom9yoaR)p} zoZ(+i_?aF!@#EM6uZTRT0{D$;D6fwX9aDE6pVKkDZmV`!P#`5$=KN$9 zNTzC`WRQY8%3f(7&|HLivbk2&W@{8So#yH25LC%Nu5T&)T?%W5MU5L{_e>9gMjL(y zyucs&jOdExAxK*jM{7=+@K{_M#qgd+n5?`{RZ0aikuJ@Yf|VObRneN>j<{(b&JFiJ zYbz=pzOMX;OE$%Xt+yn2D}D#Oz#rNN(rhs$tCRE3Q}+k{u3KJF#RrWq);V7jM^*V% z5oWCMx*yIIv0Z37q+nAGQCp&st$z}S(ZX7F_CAsF40 zuA*BTa8!^DWKk>Gq>xsl%-t|JTSI%NC%#p3u*pChVxTQCZ0&Lfyu?3-@Q>yAO@Rtm zQ=QeX)v~F_vzbZ}0~+nX1f%JWhK&J71=#>Q=aCfN1Kju`&$c`*tSg*olL!Zlz{!Zv z?+(Yw4I<9HOn#$C?LU75(N3HW7{V#{i}=X53VO(~#+(0n8Atd&?f%)k9!pi=bc8q@ zFcRl#67KI@xTdvgvhk>YL)XGd>Zp>-FVuawE4)F+2B8B+;=BiJJL&W%_vl;SH&{_e zUPx-(+yiggiPHfiarVp;Cl5Whf``tsakbA2rvpafq)k@+L^$tl>VGzTz(#De-2G6> z?l>2=!C^$0{J$W0hvGWmC4SRVTl=eOz}Rw4hYZU4hs(7#uJXr%8hq zC-2{f6*awZiLYMeG#BXWPxhl6Mvhml2aU9Hm?W?_jYDwen%O$A9kfYan$t|S1m*^Y z!*ovh0XW>A`}L!uZ;uH6Y|ebyfJc;?(i`P*a>!9nwnOKR^sjk8o9)Qe;Q5wQf1dw6 z+7bP1(q#>fIN&9IqD${ieQ4!FWU^4BYfY^9I`QE=*WiEwPHfDQKkZW!xlrnH!cC(i zy(;ctA7W7t=Dj~l(-RY@)p9%FiSUPjRUbwLgSQec1t~I3x zao`j=r_}O$s!r@%tTTksgDbs>(*YxJhECCxR7OOBkeZ$yjk8TR?aS|dddM|wkFropCme2Yh#AJ+RFPz1W%i=1t_z*ZF!AP8!^Tdg>059EJ9ypgj{Z*s% zwq@CA06-dNAnN3QMI_+Yv%E+-XWgxLU_WNn6`Ag#Ye{LR&`V^PZ5G^R`${}PO64Ln*AGvzJ zaP<{Gsp5k);YUJe=5n^;lmRQgvrF4J4xA1c!pTkrFCy*wm}#u_tb%w4h&wwtx2|s? z80$%6DL(;2IHwRg+NpC6UFkP*V`ZMzWe0ur&p3W_7(3u4e)G$+fm0Uz0oo~mGHIqsR)UpjbD|cC0VK1!wPn^)> z$qR!$aTm<^Aou=3h*f9H&8^{72`~vyRMCYg&4(gv!Daf1P2V2wU$6>q+Ods*Y6saI z%BrQIS}-0rIy6s9wve{@H;#I;IjW}*r~bG4H&@;&c74;F5!ivwN-B5ZG!7v<@2NOo zB+k)<^9d9-oF(3R|Fs)GBjUL~y8p#OOSzxNXlJ_s(Z(e$lUYXv*#K40ALc}x17T#j zEp=uTr(-lbyhrxoAY`uIEnKl3Fu-|}xg_M}P*rz(Qqr|d=o~xR;~c`mA{i!=5}`Vd zSUO;clAGJzMFNr(e|oy{wqmF%>HQMYFxxRIVVZ>fkzR!v1QtJ8O}m}};fC4+U6>Y{ z4iVoI!8X*gR?YujU%xHWLaL@OMzvrZJN`|3ozTGuwWvE~E#1qz(}d?PPdPCs1x`}|adqRiUxPSe!|!Tzk#f;G0o0HS&zTXamS~05($m7#Tm~tBzNh}N13l;h zont%P0Yf;+Wz|2VZZdpllT#TCIQ(JvYyT8q0Gx&k8UY443+B!bK2LA)Wvl+vRAI-8qc`2P1DojyHsr1xv zH8H@E)yw#k_)U7O`1$0DpakEXLdr&+w&ZMs#Q`HaF!VFgz+Gp(0)10q98yC_j5{}l z*dh+xNjDcaG1B~=+6~C7zZ?VkF(UGu8j;yEF!h7Vr*pEEVR!Agatv+Z7M$@G~ z8+*J9Efr(~R?ZgVxE_t9oRZV-TJj2tk6Sk@LqQ>$%y@zwiG0Yre2 zblyjFEu_?w6TfV=!A_daM5n=2 znM0I6s8Lf<*YrurZJKr({2G_BBEU$T>^cLZ!HQGrjCkuRkE{_67=cq~i=3t5be28Q z=I!6!tdD5+`Mxnn&MnM~P6rJ2%Ygj*<>u47j&r93=zV1VJPCiwvnaM;bw6{j^RP^O zY9k-VF+)k#`BLacqVPFQiE|JfbrjiwNjej#!)v31gK@}gjJ6+zcVW$-EDebGps~kl z-HED{6BEZga4?!DgRcV-=b5wq2e$oB^|WZfAX%)Ik&&I{PR917F;s$}!q{vtqnHmT z2_iG`v;HIy*i0>7KH+W2Z+?2{v^$}KVo=9g(Vu4EA$s73zgxgpA;oZ1mCpQCDyJCO zLzhSdv8lS(i!16@-4Amo&YOIcB|gZd_7MxFoQ2U>pQ>>q=BcQj=q^VH+5saql{WCj z3}NDw-7B_tX~eP-XpR;u)ed;k*V;CsI^KosKN?>fs5SiSqF^7 zT@#>~Qt)I7!m#}9apbi^zBd((Q1|kC8JsxlNet0Q1Q=?B#ekl)2*@nJc}U38=~)Kpsb0v%JCtUpTS9sU;k-v_WivyV_klrAgl%i${x2&bNf6-PA!Ux zA)!+SZF)zdL5lD(5RUhW*;OdMmZ8H>rZB^Feji(cgbCj|A3EUC(&e@{9eRWf^dV0Q zPJL1oXr!fo%?{vGI*x#f4>Ci~gK>?vDuU7d;K0}ngMgD2h0?$YbeoC67ah%_eREEvtzJLo=ybX`?~Pe8R1srOEfF ze(o>c_#QQKI zu7{A1#X;|=P)9ED=p)rMMeUO|XUKp*ak)vTJXuCc1Eo&T0Cdp42QwWb%sZ7NPTi1t9=<>ognZOUdq7M>Oj!5EJ> zIh*_fqLLK`skWt~V~BE@!ig0h`g^Evqf-1LK}d@0AeYb-fCkI!UKPnqVfBrjr|$-5D@osdif3* zVy!#G$*z*TE1J#NP1NX(v|H0eEkGBZzR@7I_6b-35e1DU$F zSwFhwsQawp%t$CD3HK2ly;0aKSI^R2-a`xDf%83T*Xn#a zU?fh|SW;BinIfUVP+%Q~V@h2q&BL*q+A+tluqWl^ZOCpX4N&pEa?-0O#cv`7bCO z2`I5{plQxaBg8l?WNQD`Wi1}+KDeu*ijQ1lF!`A~d6tzdIN`2G@Xuz26#T{SHs=-%nA??;loV*d1Re z`i~5YCBMppb$)KJKM_X?8jY@TV(PR#inxSo`n%GTTAuPvs|$AwQ^baEW1@=+JDVrao)N z+laLSNvLYDCZD=?BO;I^PS$Dj!I|g`Q){HF#_z3?1AGX87;zC`XwdHf>)OkNa}>eH zXn(-VWrccS_=@@;SJQD#c4VJ(GY9?voIIOABp8X4ZMot>G8}M0-m6T?J>Ha>p~CR& zEL)Rg62HeU+G}W@_B^Qy_NAgDRid_DCEfgoiVIvpO@2juT)lVxu60}9Xa@RUAsDMn z9552+V#2v394C*K;$iXn*S1!u*&0V03>vfy2$I8F@jKuJ{t%I(e?f}pJYR!lAGbH; z`|jk*Y4Rlvnt%~FEi_nhavjEuxunsGJ@>b#V;BzIaKK2M%tz3gYQ@X?mnO8G@8n7BTRr`%Jb<3dGP3sakUW`iPFqja2hbk&4uwAXZnkdZPA zjLaFPLjA{c{kwKr2Sv^LGiPh-dv+7JMv&%eC0Z{=-9&}DwAiY{haN=EyeW6q_fL4~ zV*)=-;1n(q*rQl|6e>@JTMK9L%g3#Fc_@4;$7OsuS4W>Xwx`9Zp?O@!mj@?jJY2G0 z)schPz6O)(6C_n*a=fb!6p9M9!mbyeYV*yziu&9OZPsmj@D6DJ+0XgFh@R5vroAx! z)JZz)sl_YPhYTEwCDjQ^(Ov^@?g--_0Y>0t@5mdyZ_yTiw~KF%+R#K%2NWIG`NaxP z0Ovt82>W14P^L53vH86jv1cAooNtQ>AJ33>0+fPdF*mB@Rot0xUTt|>y<|lXa*#sA zAQeWmtdgR(YujIZJAfse?QS*<4XO9Vu0ETK{MA z80g|Ul#!9-{yeg7$iy67;^S@`akMv6u&}u##xj@OmUG+O>kq%IsO@{V?(y+n%soQE z%=yUyBL%|lFB(EN1;TxmtBI;~T7)f#07E!qNv2rD!(fn42=akI4amF$e~T`EWeAr{%TWUDLJmE7ukL(qv&;vAlfm+bK%|`jb+?5wZ&0Q zG|I#M$N1)yOyIdQg*NZvsOH&Nx+A# zj-n&MOZ;caV$jYKR#RpoyEj*U+`2?9;J@_R%2pR=pJLN6n+2bx5fM#1S|3?-z)Sou zf=Q7h&2+H%G~ZECH~J<9{ik`l&sZX*7!|FF9_xipq)Pm&RWnQs-=@7W=ZnNGit`>X zA1cU`H)>DDv%@pzvvJUlL`Y^^@5@;xIOL+5;h%T5c7#CJh_1_ zGJWI`oN~aBFou$PA0%Ns!qsnA3H$>U>YeXCwc?Hk=Hu%7GauC-wQnC=0yNK`IZNc( z^2TR~!koc)<5d=9tw_hPkI;xDitRl=#EEKLA4E~1w%8SiC;eW6&q$tamBX;<{KhQ% zIUg9p`8mn$7#I!S#;$3q>HcKowiQ7%+`vQnP<<)dV})D`s>08s!N-tLtWDp}RV@NM zHQE#CG}^rl#vt_zXRv0f=6Q;lun)?qs3ch>KQkDMCo6m^9WV2eG^tQCwrf)w zUBw;6MSuT#?~p+o&}|0srUbb&gA;)5H}@KI;Lszq4mt~j{4DF=oL6%KpyOCIFAc#a z&%$Qd<9f&BwFBtaA3(DQPCL%x^s6tx|0g^VU|n&DY(dKckS+)@e5e|353`txwEen`KoNoOuU1>to4E& z?){20VeGD=(H-Wt#VfAKO%ri+`v7CBKefn?Fc0L-n)B@G@fDAK@bxG~ePF?j2W#B5 zp0Pze$b5-lVee=g1rBiHDv8iDDNJJMErGAx*B*HB!vlx|9C&4Dxy37Tq=K+3^T8t6 z+Jpw0z2ble{sNtYQt3SudY3yve$n>UJs><-mIB~7NbAl{$Nw8=9L>=o7ZWio7wzxN zTcgpz7Usb?xOn`<1>2Z%)FO$MBE4(}DI*vK6B6+9Bt864FVxPo%pz!MIJQ?2;Vj8j zEdq>aLYoLsG(oS?>+W&ngc=maXcTZ}g%PwzAJI-~xw1HmWHb>8Mm9m4UwUaG$x1dq zaF30qf8GyHz2?O^M(3`91BP%WL7qGYH346?5ykihAUg+UtJkJX>*QKIf}Ugq6PD zIj#4$w?`{ZYv9UF?K$CPob9^4q5q;%o{ch3yE&ZFh7umw=NDTYu6X$ojah>vkf1Gu z`snxK%O+yE;r4RYe`WHC1S4@yC7fM3*(RIf`h}{s_xe68`#5kKGLHZwaULg}*__TF zD?>I^sPpH2@a@^}mMZFkBGG~KWB&%uD8$Qcyz{#;*!~{ctlFY;1E(ucU^e^h2ex2z zj^-T$>$#Y4QlZXYw`9S!CxJ7OdNt{9)*T4PMrrJn+VkOj-Cn%u@7LG$Q`CGgQEJjt|%I_9KOLSoEJc?&@rmY7YY_r=71Ni zXwQ(2(=EmfG%);1VZ11ULfv_C-#5+MoPgbF*K*d?kFib@K4SzJiS#;<>SsU+2AZjj zU(74rW&f|3rrmva*MH{zscfJTt6B`PiXFXVzn{Gm6{(VJgevL9NIk8M@PHrIxEr!! z4o_*oAC_R}{wEPpj!gsyyu?q}>Vl={)FVBAE9a0Mc+^UxLVc_L{X_d4_*zl7FD`#~ z(GkCz{LsBgeGt=H2AU7NY|4a>vB1xuhd?HlO;T6v-CT0ytO|%9^UeRps|h5F>r#j1QU zuvC(I?1{#Q))gw31Z`p$Cg`TQ{t&pqkRFWtzN}DR=~`uVa-*H%v5c=2eHa6=So~4A4~s6f;)Q3*wivC=poJ3^>a|{{K7A+pTf7I-`Q_hsUfs=x ztMoJUYlJ^WOT=Jfg&H?)YWqc=?-VuI@wGL*>h6br#xTYs!H~Qe&R#S~?qm9C8LkhN zcGaIcd#a+IJwra{7pyJvcoIr#feXca(mKJCKDZkxwjrWT^i74~ z>~0ex+6I5xaix;8X@McK)Bj7dlj%im7kj~vKX+e>glZ5!m58Up5IfFMi$gh>>Ix?N zgR!g1m5eU_^G7&4Tht~38KgEZ5|ultFvvF7Co*2m7caJ^f=)EbG5Ye>^ph(tUPofKFEowNZgv5V2#uW zFk8|XCekM%(y&|ICg)BAp}zol*w_d#Quk>CM)Lj=e$rn?VdGsWw7PleyfSaDrZl9tk$kN3bifFlp-+I0Tsj8Z932g+Q^ zC1KN62XWNL^@$Ivsy7JlW5I(ZtA=9)IAExcQ~pbaQ<0ZTY%O7g;YF1!x|C&vuF0QN zqgIrtzIzWc^S(NJ(WZ5W_~SWu5~FNCsv$9IjdQr}sP#eoyxSFdqyq+;fz$R9ayJ@n zxY$%~t2y}NmCO1j4K!OKk;D_BFouMfpht0dYIm`<`D;^0(pk=3Tf+bu5JZ0?0Z796;2jo~0 z+0r1jz-7$9E9(*ttpxH?_z^OR03(rqM>I?1$TkS%T5oh2E7ZpSG%5D;B^UiGt|UWoj<6k z-4Fi19LHTboA7jC;xUS>V-Rp&-&z_#bW)dT>{svP`j?a^I>mB04twA zdVSSn>rPsVva@1u0YvNwn@35kG*$^9s~Mfd5kO z3*YWVDAN&nJHD!W)g#~I{mBXYpR2d%Nn978e1|pxOlEJGVk^8{+S*m;R(?Trv6u$! zxH$tAPrdp21FjJmyEoqYcHut_U%(oViPWOKcXb`TW5HE4dcDCD7iU%tt>!*Gg(hmkrI5Van;DC|C zitT3lAq>dYRQA)2OYa$Y5~0x*kG8z=>w>kw`7_sn2rv@oGt@_Ps}sY&9t=1u)RWCV zsqpijDT=B;OXrTU86d(7W&~pYI9loBE3yWvPdr&WY4XerMW=mT+mJZ)M-RL}ISCor=Ov`oDfEs4y`ZR()*kHzi_-2C z5@y&M-t_pa%fDA_tEj^}_AggX%VpZiCW5}COC^nIpWAJlG|TEoZ|sOeAe#lK^-bX1 zFxjRw9WYXwV@R4~xip(oWQ+=R%X8ySmX5_E$(KhQe0j~5AX}9YHEjOSDc`tlO5hJq zVcIxx<@kW--(5)zGjN&_^cD=zajyg z{9X7bi3BwMe<%Jz!dyyeU5Q$wLR~!a{KyG=U}xqI*nRqr86OjMmnRgwhcpgpQ!~>N zJpBJ@KQMqCJX%TuvIXO(3>U7S_yQuSsn!Vk7A%j5FOuD3ss|*VrOWVpC;-2HEr_Q= zJ@d?~H)?K~jJy}dNA9X3`aP)1mNLP3IwO(cV$TDD=?L|RY1e84TdgII_)kRo~1}g=`MO?#YiY&S~@5Q`;%+TT>Wl779zk% z^gRiEX(m#nT`G9|gBku&UT-FQs?Q}dEt$0O$;`Sua_&ewU?lxRN&NQ^zt$Oo!&?H8 zdC0^8LpVvzLc1YPymJ#6qfrzMDx8Ar`P2hk>Bz^UEEB9yKb(B*z3B@c!v5n{U)kG! zABKTVcf_EX5nx19ma}Iup=)SX?*UfSKR)`V&w|mw+4;SWqc)9TTTqw#6@(@muT1#q z-6x&yOa+VJDMi>#YB!(8C9!m&UB8!9*N`;}EllfwAb4dEX0XDp@75e(8Jc@?{bQj8 z>S)ygBXP3++YT7uG(!QuX!s&n^oOCgc=ZdH-y{8nM`bcN?&W9J^p%B9X#0uluERH`^n*2rR z_kSN{%PofELx|2;?ni=0n+1AF)BfxTS7&s8s1YO-EXMvDkE?@+6_}%0p$@3uW<#MN zKVyptx?MF5XZB%&R|8%ffSuT2oI4ZAU+GD9sCk51B)z_*SXCjNV4N45t%kX`m_Eli zq_#+2p(SWge;!}Z&v1KT8QZdtDw94Jrv;?QFvIfYutNQ$?6LuWr1b_%^wLkwLFoRS zq{`8eU?gg@>#SXUX4LI*pHzg;5b9ca-=f_;gTm~un^;@}(%OTAwzp|PtkMo;rF>%2|&3ZWHg_TEp$yL+>^of&nd1jtl!p3>r z9g&fEL7?-Bg}ezQ?ru77^GOhqLP`Ic^`u2f_t8x;}liA?B+b*&*?%!UcTdUCyA8ZZ8YyrT6JCQi>V^- zn*cYjLR!Hkz5M8SRl-h}sPyltFm&wzeN&;1X>{zBQ}+);=B#bX@?P_12yn|?CTqls zCx*WlN9dQ)Rj+Xp+`LbdCo%lQT4gL-xU&CCicf{gj}yUE_8QT0=5v3H2FCv)aA|m{ z#&H7{xD3&GNg)w)^(>O`sXJFKa*w>PGqLyx3|Q!Z1>Ed#d6}ix+V%_o-QR>Q0+^{E zOjeJXE~{H2ZY!zjMeALNTb$>@)d3@H5PL)-SjJd%F^|oQ{5Y`NG#pu>=3MSFVp%^# zDSqGnLA{iXM`4iYqBAVaQeuD#RVH|?G5uhJ3CY;=9?qs~Es@Yrp+4EM-|L+=_gB=$ zWjZ&UTlI*dKg>WZ15A2kJf{@y@ff{J;Y)Tz-biqUvu(wOR_cAV|2!!jtpc9V8PDukdt^-Zd*(OLFvKytl$9eU9C>OP4D{LD?4R1xR6*AYhYjJx6 zw4x6R?;Zz?#OWs?mZ4RIhn+S@-bErPMr#iotT3z{0)M~Yh*h;7bW!On(;`c95I(38 zKjeXvOj@gw=Ci)#lCkCz;nNyMI^_$gF>9!)3-gGc(wrVsJ~3Jqbb}UG725d0`uNxb zM@B=BqGoo^Z5A-4YW703Hi8fi_-9Sxi zcimB{(dY~bPL$~y2S0^a}i)<&k^OwYSrNi~|;SyI2drg8Bs=VJKKIAR9P9zyBoG=nM z&Rk(q01U-AacPYT^|E^s*jkH63QC7I zz5Qv^BoS*SGz^zIw~D{<*0wmScl^sk9bY?LHc1?$GJ`?vu=pN?J`z6K>)C$zT}5xj z1>cJz^;D?OEUVP3{_87{eEZU+Nq-!vMhB_bt!HvBMXcGR>-daa^`2-By4XvETdO1) zfi-O%5VJy^HGTgtHwM3eRmOn7RxKRRnlQ2}VTGyZi=cpaXkyIxZ0--cetla}n>_aT zn)_;$PZCFH%|rKCw3L7MRm7eD_~*}A7aN_+BarNV?ad#1_wKH!WvhO?{hz;}_l_UGR6WUgH_S8Vxp&sSj`PrETh3NraMd8vcaa>J$>_sK zw?waN3_9Lndqs>^7H)i;aZ2+Vzno^=+%iwT)%@g=c4Wa5IPoiw z;gT4F7z1==#>n*?quu*91V@GXPMsUOYA538rufK1U*9WS{Gan>5tJ1lPJQJM5A+f* z5cJApE?8~B?!8T58=I=J{EUUEvcQw8D!HMv=}jEe=Ta7rBmdH zuR$ZO47Q^){0P=+sV?tWBuc^5LnkF!p&nj*VOYohh^&YYv4YpCqq07UlO6$HHfF-d zXf>(>KNV_^0ee2({o6c6Em3IOI`!M-@JGG`t2Xyf`lDjWBv#^MNG4RMEpiX#1gkn9iJCYD7dX3lx=)SWoh zGvS``*UEHMggXJT<4!YS;iC;{;l!{L={Za*#6@>ThYnXMkL8-9b!KVQ3vL z0ZHjz1S@b)is4sQs2eheKK*qR9EEj9By82H0 zvahmo8uql0jo((JNU;ytnr<~DuN5bWzJbDK-W~9SpLwuupyq)b>#+lVMJW~uO)`rl zD$|od^C6DYv=TggdOgud+u1_eJy2{|Pp(2p);^^AH&;iNYEGScc~n7c#Mll<8~dj+ zg`z9Xn~oQRX^*BUs18=5{A6?#-Mk-e?3$XRQpTCZM;_}x@slb(h#mib#tw^hxcDQn z7M41Zc$c7nmJJ7ceA^`BZ(HM&eAdXqKrpd>+Mv9m1W+!x@okBW_(f!`w0yAY$0E+1ezY zEN<{j-<#Wg1W>9!zhLF^_wRvt90x`C+rll80d;Zj*LHs1UMwvw3qej99NwH~e_Qk9 znwHE;Eu$8fQ^9-1Vj$%We$I9r8>gR>u-QqfKf-OU1D@Do_-jI%cmpsz9cY+;vJ;cT zX^wO$5ky6}53`dk2ibuDN=X*1Dh?ZXynz(9T}w&$`1ybsZ7i^{LXCamqZgYF%~sTz zY&o0_5za?_Sn&ujM87XyG@)CU)#blmDpyr);>m?=!yuhzL4c>K~;nz07$g@J7etv1r zN5vOoNy&VmJq$m)i$$p+^gmGvGBFcFjQ%2a&*v+i$1{!7OTY6%#!i|f88{_z(9bY% zi;7kIeo&>SM+{QbaXW9E{Oc$?#X{hEX&O&uNP^b&)zJIbe7Lz0;%V+r_cr!cK|Cat z2#(h10SZ>ATd%#J_QlvNBvEtC&l%b5b*8i=KrIPO>1m8XOLhnT+6P>&iTBa;`i{vU z`7-)BPO+D0qC$1RLx7hbDR8sML%#|1`T$G5?gkyf(&9WG&dyKcD z;4s4Zrc*5=y#iSOmh)$tEbe!O?U+7|j?la$4hRdRYYg-w6h+pC`b;Zxp8Pr5FX7c=YxS%Qex1jkP^gLRI*O=$@^9wn}B) zTxak8b9VBCZrB7Z{aA?y7LMGiI727jOxbhvSo}nQ-0{%gV}n2CadEyv;;^Dcb8!lm zr`q@^j{~WE40&<$`mdCd{`y;wr84bd_$xv&IlOgS(E%^<&m#OO48JAC!jbr0#qZgS;AHtb zlgoZuio1>s|9QgC;G-kKOZ?wAhBn7AEr#aA!veEH-7|Re2j5Ia6!-3LQ}>_x4W}QR zn)6A*Kj&7|MF8-ZT{%xD4#85Y1XC`{HP3->R)uMP4fkj%A9?$q%|8FI2?$-u1!vm* z(;M2bu?j@69?g5=(01L*A#307FbtYx?a}+<^i( z@2UfwRH$`79@J`7!`Zk`U1t0JCmy~ICSynt(UD+)vtZtSvn^gUKOKYo9+w`Fo-os$ zGK%G%!S14Et;=Ika;g#^A~B4`;S@g^y94`}uQwg+YlYE?`V1xr%d@b;FI8VVeq-j! zev2RoBOYf?kq#K4L3#rc?wuT`sU6Lm{x0%&K^`?PuRf;aZ$D2Mh_f;18Q> zJ}pbb6NyOIMXN!UFnS52*Rty`9Vv=A zfC_?zE;bAyTn-090-J>56-7``5l|5oL8VwgMT#^Plp>&_s92ELuoDp}@`y&%_dDCq z-J6TQ_wzjYV_ms(W@l$-+w7FeB}o-R;DJYUNpRB*=M<#ClWE(K;M4=r4Q(c&D!LoA zN>bjwtZ~S;2(LF-IAc*WU+PehKeweY^(hdaM}QWzCxFq|ZBKmars%6MK=SMqGC~2! z4QYfmjT(KOvUFwff}8*Ar&wWqO)m&!LwG;&q8_DQ)q$=?1Zmk=3bov#-`$AAROm+( z|DjJeZ2jWFZhTdZ8RKMYjPcMq=l%C^^soO}`$HErS!4_mo4^o}jTC$}d~)E4uaD87 za$O^rZCmDen7IejJpYD|ADqkDj^+C!!RIfgo|U50E%g-(>mo>%u(EMJQiEqrptu=gE6tv2_?LO(KwAX+c<^AQC&nstUTbVFN@5FkkQ+02&V(1nNgKyVy)1y z*&}9iNXKJR6`GZtqx8C!S3iVA2#1Zz7J8+-HcIS;f@C8f6UQzrx98V$pr4Qx$nbyP zl~pLFgpv&ome~>7!5Y!3Aq8p)hKEt1BO~aF<{^LFTSgtQC%^WD6pxOir&%sKX(qn| zqsQ8;s5Z{eD_>Lg=2LjcT$kRs(&{6ffpcjrP6tNgG|QWf^WyD)ANhPe-j!GOIX<&v zi%*UG7&;vo-S;QZJbRM&-I^Cg$tC6-oc?a;_0uH_KFrj8PXwcJRs*|Xy^9Gqc2XMi z$t1~4IgyK~yQi(I6teCvwZ|{J^Y#Hy(8-D(q`!d^E(bCS=%h&C zkIo4#qRDI(=;wvrwsl1jo(M)am7Ij8YN@82)jHW)t%Yu~BFskKxuMJze^%53ng~V@ z=pthMVicGlW`<{txZ;|onGk06(xiz`0Ha5;9qlAb#Yp;Ou1#**?(>M`4dyxt;P7eJ0D!mT!IRkzt4e1+tTE$<|!@mI}E>mx6EfUCF15*DnQm6}GLyMeqQ@=$9c?Da^Lj(wBkCKd6xc zDtN2z)@?a3X)5Wso>y)h#W<5XYAir&>p*O&@V~mI(T>+k!GuG&olMu$%UaaLs~rpl zR$jgM^JD!xdh8jnHnghT|8n~kow`i${KvXio?UC=WI6{wPyFvk#lTqbwC#UQD_LT= z=Zkl}QTzzT*EF*O+Dq@vTh7I+0d|Tb8E<+W?uJb<@N;9VOd15SV_FnD@QNLL&1BCK zJ+`(*I2SB~CpwSDwU^`Px(3qEu-UQnJMe@bl*mWh0XmoHpa@oFx;hQc8iXumnSQed zS)&>>^Ru%24D9$UD<=y!n%Md&^Dg|Yv$NCuNb5_l78L-G7=vu!*(ne)ESd5}Q2S@7 zN|ceJ8t1MAFkuRtIM2$d*|-Zua$3WxZFE+44jIFSTUEMUZN(8~6pA&}ssn>o3(hMv zDK4TCjwgRVx>hbGIW5jIDGlx>>M9l521Z-;(ZFvYnOaT*-+&KHB6#XHho|F0jJ>yM zM%?&y3foGU1)E|~J1`oxA;l&=Ss4(D>2nTnil-inTn8pRO6|2AVN~#JHF89dlPx5O zlG=^T8rOOt|4&Fz_ywH`t+Lk@aIc_Ip~E3jVlYae^Ee0bCL)AOqwU9czw!~hWDP!N z_ZJNw1LbEhR#;8nq_YGS{!d5#cf9H|hsh6~fKcHS}6vZ_uPjZ%^L2MLrcy?rSuU&mj&Z2R}jC z&I^BZ;{#VWU!9Am<|E&9s=Y0$@5I&}Iw`mW_itYKvpdY}+G7z+h7Qi(_CwungJ}QJ z++eQ@aWfs)c@3NHZvR)66T*Cm!;c~El@;7mgJ-^@qE$-x$AaCzaMu5)zr*OTyav$ER7wPzKO_OLIYArJ{*G|p=Yv4gYx zAAX4wcfjbNM62_L=S-oSxr5Vz`QJ>B+{|D?ZiG8tld^^sozloZc$|#FsPL=pZMACV z8;|4J;W3I#3_%3Xc91kbPul{rcxFc6s!unW1RoJo_($9);{Y+yK12v-KD*a*U;SnFB0t4D2Fbqb*t+T2AR zHF*AY&rA-CZi_n2-XOt(4U}dQ++jbRRtl?vh=)%msE&1tP-$J@`On|5e?Wy%gFLs3 z3oB*!`FLUn7&d#IJ4T*O_1JSlgw5*uX}R$|HeP_|E&ixjbvezZ=g|M)T6*PNiW&yO zT#P4Aeh(35aXu6YbO!LX=sD^GcUgU%Pj2gMqSQ~k6uR9b4pmNoBWOAf zn>d+LybP++VT^M2!7Lz`L4S}#_Xhd_!gvw~OkVi?$ho%$lp(4@2eYC0jNMBs(v$J~ zYu#tuwDZEg4JcKGShANEfxijmqlD7VNDcexYK;y7UR8($g3te&Sa<*h#MC71R$v-l z;m==B@KQHp;6MK9`R9vmzyqDC#7S?ie$p@sCwq?w=QP+f|5b6#wMQSr#b;T{TlG3U z5J2=lilx(mA)Hl+1!QW(s-XZMOv?JY>xZ6OaVpMN#UGkk`>yj|2hJxr`xC)voMeft z&Q}I!u|T=dpV&qwmJx-Wh_7dR zT39fI^Hq=-@a$nU?fIb;=U_}Z^Sma^&Wgb#)tmkF6|Xe{y?q64Gv&kq9)8d2k%HY8 z3!?41g^gNyvy$k>{L>MsLEEK07i9*pR(B&bdI_L)FMNoa$E9MpGd5U z1*`!iC9g#K=q!;uEx{+c3HpS67~6#IrnrBU<=d^kC9%x}pJb8bz!Uy8gqnAAEo$h3 z>9QEbLn*$%|0f=`$t&~)`s$OGO>v>bttT^g-1sT2W$F+6(i2>Ow_jfP zKQ*S9J@9!_l_>j}2u!>K$TN6LLPLcQEe2Bh0gbAJ>1(CwqqvNS9)C6hO&F%duRXE) z`qs1IR3R%-R=^45QJO@kCiRns3Af%tw@#7$&(?J3Y6t{Rgi;tCTpymZ1CvSOYh3BgZ1ez;X z$nJ>UBfy8z*`Er(?xUZdzwVQ1IQz>=xbKGZ2v14YUuWsQvjSNgWTB#A!Gv3{=O|8u zO!8zjP?!WuN}(TA$auH&kTit{zMY3PDTA+}7Dd{rMOD;g@JT{Lh2Ny;m@x-$02);Z z6XbeXNrJM|GN&l2ta<0CXfzMZ{B>Z$P1Y}z2bAP0tToarq^juV%%ZP;l4^>h+}=Vj z1?(l79Ld37Bp^i~r~bg(1|I$J#AGC5?pb_o#t)mp*w15Uxab0WjxOJyd8*yHZRrSW zR;(lO!Qp!*vbxp`gC7;(bOqq%7k-DkEB^d@o3@_+!MvG+e)!==cp-9-U?LGoh5yIN zVm~h*G|BUYE$U{EeIMJXJ_9O)lMs#7V`W7-5=o`lHz{njz-R_eA<|B(Hbz`);jxWd zR3^VkS-Yp;Q3Fphs{!Bk^Z*nzEM&a#;vQiPDoPr1<9en<*;kb)D=zwy046M9g|&$7 z-?V78>ufS1nVS zYmg5Sep1*YmhL1(sbi6mx#>AU76rR9;_rMKYO27j_5AbDa+iz1S?QsD@INGgRQTy> zcVicM77o<1LU-yPiK4?)x=AoTz3dSLKlq=% z@KV(X6q&uApYI4h$R&%FZ&AZZ-mF#6dpp_=e`^7hiC<6p zu+_!uJ@kr$d!+&HtbRJG<)1eeJKk^QKn?ym_A6G%+KLE9%BG5#M(9~43h3m?NRKR; zX!|tsTXgh8t^c}`!9G$}qDmkWz>q**|KG4TvIG)UyyB!o8iSrCF_%jP*(%(qwcDTc z{&;oLN7$4^*4{fX)XuR}ttHx<#NF*bL4?kM9{|l0kK8+FO1(SuPzPo#Y)6grdly|c ze0N89)vuaf>u}ysG`kL5#mqLll>?&&Ah-zQi+H?g85yvY%pOl}cRXB(`BuGRTF;qZ zh*^;UM&maEVb3(ZONkAlhN0QaGzUiGJOCjhnlq<_X*Sh9MGvx+CXt80;n&%Q z)EX69K6E9@&J`^rfT0!uBrj0zAq@&EhV7>{*~ijU`x=AK3%>-{+>L;`SXQEp0&$>2 z=JqTOY4BuK6}A)|4=Dsb*>mYvU%U-8ssf4%8W*a6niNSJ%Odpn$(GX|iI5sNQP72k zCyp>ZRqKY|gU8Eg$a!C$*uE50vf7*uR+0XJ3VHa!4d&nvyHDNOq&^+y*3z#$Psw@# zzKl3Uh1~CcRKDk@>G)aD_rI}-WCxRJ)u0%Ec_kS%*g-Z0>^G9?EC^B7Dppb*7#ine zfMT1d_Zz4?$yV>Rq^b%cCkdQ}L+U3j*3{)8|BWt-b<;|A9FV?>WfKLkJHUTL+?x;Y zJlZV%*3o$4O78H?@HsQE2FNQobts_1ueYn~Plq=n1gQwcnN9o5a~QFJluUWG)f-#p zc=5DFW?THpCKZA^o`#nSsqKgB@b%l0GQW5?o3E(Ezu+38tT77k&q$kg|Nmq0tHat{ zU6e~3=Ql|yJ1%&c0A7txz#n~|>kt2OBQE>(0;B;U}j+zxZ<5T67$26x|KMSnMD~>=u;E%b( zI5?wh5Ao18cX42--R6b1J0?3TvyCN_`FvRuid1Vh>ODtry$obhCa5tp)`1}|7LYV? z4J}1tMsEzfn7z1IPRP1#=VdcG0;i({a9}jfmOz)6oRO6_66(%;VgvgNZOJvbmFFLR zyv*hw|H$St8jyIBJ3O1f$3A}>!T&?>+P|sJRC+u@=76XWkD>%lg|_*XI=ecwXvXx* zzO;z_6N*~3IMWE6pLhf)@UKk5brrSSiD*dXJrdn|=(iH7k6s14yst8{k?M}|ZgC=r z5$ueZCd7e4;E8cX!Tew-;Pc9`v`G}^n+Nx{nt5^m7rC9j%kq3xp}m}cX2?oP1phDk z3cE|$*ZhqbhP)EuA40OBWl1OJuHy{_9#kxt&` zcB5BwwH4vM!O>ec8V5$9XSIkXij|2;!f{f-5P5VdxZqRtij&|7jBu@HS+^W<@ zt6?-wI=bOTz=QU~fN~;DY93^f3K^^JOp1)NiR_CCcLErNTL@-tLGMmlX{pf1B44f(Hp;G)@u(Mxnz%C(0s1ZiKf96sy8(f&z-zJRm^nh+@GIPJYZ?gh!IRaw8)X z@!qFnNsxjz_`uWvY-)@Cq})9Da0kpM;`KLOp5O_4uQ`{mlW* zfzdeY;XMZqm}DFw+%r>oh95|Ek20W|3V-(NM@v`vY^vvXIaQw*C# z5QgJD6n^;ucX>M(z3lnPGhfL3&*HKO^dfQ)@Si!L3q!2yOCm^z8stF;CIe?V1k~b% zU*oBBW2qb~Cc=DHTJ-g>k&mVsOsi69S z-oUwni;Z;zP|JYNvz;NIf^ujzQlO9E{~7uB2c3h9XdQhAc!JBR)qEj{6HyPS@Ok?6 z%DBrN`l#fClPau@le?-a4`q+jU(f4*FSy~6dp)*S&}AA;RyMUF1JCc$ujoYEQ3Vhm%s|2Z!8ahl zM5=1oAhl=mtlkJ5Ieh%P_5RvUysHSD!npBb8Zr9@``h~|*B<{2!8PCgZqc~Rt2W^& ziDR@9W?WnG(OFmh(H&j~)n4rV^(}YmkZHf*aXz5JrvSzu{PT+ES1bAcu|J0v?e0d< z(uttvCg0U#VJ|c^N-)O6LFsh;a_q`iBhyCtPPz4~&-2`15M!gSHt9MXR;BN?>HB`_ z;V(S)tl*c?7?y0X;hy<_0!!~bAHVtH`u!ej8VjOnS+-%>yAv{Jc+$7fIwy!jK&t1D z_%!XRg6PsX8K+8TK9%vn`l#nG|L)_iB}VdOX9-kNL1y-NoIvTw^CCtruVj#oBtc~Q zWNkib#gRM4DOfku660Yu9|wje<@uO{{18GaWMwyIiG>IwS_gJ?qrbg-!|&(uW926# zMid>5-OlAA5xj0>FX+L2Ae)|t_B~-%7!Jpxy^5q`ZaGCoCt^a&j5G)mYZJR0~J!g%meTb?{I)=EcQ< z2of1&iiw$%0Egxf^@Gvb2}5giBud?)c@#(I;lL=IJRKp^~jm?OxT->RY zpjykF7!la_h^ytVm;tgKv?kB_4vcPxWPr7arCmp)6{nfYa4v9YcVIM5k_pz%!pXxt zKhu4b|G~x8J-^3eYe!#naUX-z(5YA}EoQ6ITFgbY2%gIF%5(XQD_g?CwyHs{iCIjq zW=m;7Lm)UzT3+~ff7oZ^D~lU>{+X30_Fp}sEr@AN1S57y;V>HKKEf$Y6stZ4dmbwM zUE_0$yfN%)#4M5(x_oi!4`ZVX-)2lJN};DU-%1cS;Ul%VnMr|;@IPNw6nJ~$P;%-B z+`O^9y$wfdUigidwn8{jP^Bum7yIeGspQDWs5ID~;#86}87Cbo{GC(3`{b$59`tlY z&pflJYW;_*C_;SDomT-TwG6xo3FJs`5Om7NibI9}dYR*2`~W4huCOkG^$B{(x^j@< zk-5M^g@40G&0gNwbUJ*CWkvTZkNTA~mKc#7WM`Hw!V7;_-K2V}#%#y%$cpY%6B=?V zq`K{hvXwicmr9zB>_S22ygpA^nA;PFRc}5;lP8KxExCwRmSfh5 zcg@*UkEi&n`fO^#wqu2FE*HQv)JAE2&}Xk3+mAC zii@_oKA2SNVehM6TzOapDA+7I-j{@$g*3kygL?@r6?#YaKdk!j+XD1i~-V596}^)L`8B3@e$=`p`!{?i$y%FC3Pc_yH7#P|-T;=J%LDEGjJ2Y$T^`KtJ(evZ03 zTQNb!eH98jRaq%pDJF9$!hV}-|d z6P32w9KpzIrVk(H`KqFO#bXBa=UfX;cLYi*{EAI??P)f0C$5|AuAA`OhPTlxM-LKt zX8qp}7uoFj`|n;jwf=Hgv5w;%x8B!tC)6o_sMT=K&usr(xoq+Nm7q+cJC?!nJHr;n4mw#3$1>~SASV`1&%KH)6V<(vp(y&{PWMsqU+Ez zA~*?run^!xxNA~Q)PAM0W>ewMDYbk1)9LTvxP8u-FKqww6TbQ5q9x5^TnBi{X_Nzu ztpj*N3A_|tJpo3|-|C=;4HEn{DIUI$N5^~qJf6=RKCEmomqaVAgae~-uBGFj zxI|d-VtzjG_%Gc~+=`v(`N@rcee-tU93bSt#FTMhG)`hS8z|^Be7<7YBLgnjbSLu2 z>|DI$>I$2H^BI9N0gT4kk=Ehzbm^s#OHh@Lp!Xs3m?P4soUihzoDb}e3+xGCG8|l<)t#;eAi; z{sA}_a5~vG5*jM}HeVI2`Etb&*h$|$`iHkJToA_>TIoytM)%y@YwhO`daf^YyM15X z*)s{g%Ds1w`SqXY4tQ)$EV~bF+<1J;;Ki_{y009onI=NDa?yVWi$Pvl;i(UEsR&&- zMpVL-rox{zWAv)g*%_X$z(o{C8=h$m82(Zk!H+Apts7Zm|D zYJ&hO{N}|=uFpw^N>Ekei2Iq^eWs63&cWg#EA9}f+!Q)Vg(ko_$=WiT)%?fVTWi9n zwq43QH*b7=Ci*R-Wtw^5z-XM`!|^t+n!MYl#zb?O&=P&4!XI3_-AnJKgKkxcGyXj% z^;ukfKswayvVy&jLa&Gj537YJngB7Qw$^(4o{15>LduG!=^=WaDlaosi&rWLqj`H0 z$DnrV{Sps=Xo(9kJ#4YYVl7MnuUo1|3bKkSu&K<3jkd-joDnblJG%S(pZV!#J zuM3J^?&Eo<7=>=YF0$q&^M?0CQeo~ zw;K|-k!D(Y|Kc?qDseJX%|H@zaQ!fzzIfr+JXs3*^)xtk$qK17kD*`e3p&>&39`() zhq!-2Wu_|X>2E1@lnUuHf;*$K4Q7u3U+9h`#=zD-)DXjKj8z>FaF-{6?gvQLU(jWC zOrFB17LG8gqIuDYc+p727ZfR6RW9~ewpi*>eSB3FE%-E`c~v>OnD6aNp!zHn?~hL$ z`ktln4cux^Yuklzkh|qq;D3l|4h*`OAQTK-E^#j)lb)Nooo& zKwdC_2px<9M8pn@1y6jAftNSRdok+Ti%EOzD*XBXAt5U%@DnKKh6}IpUrCpfGCYL| zblTj;-6S?r>O`saKgvUbak4g&7<1cIw;K>Z^-QXIK_2-s)tD7QUvTMtwRjxj?rj|X z2!c-+!x@K5ioL4W!F2?`RLqA2@VeIq-o2+EQuGwTPBfCQ#g<5krY#ta^FGj!S0Xhv zGJ#uZFC*qtA(uuyEw`m8vh&H!1Mec_#w!y1KqwM?r<+frDBjq z5XT_$5z&VPFdDHLR$H2t5L-BNV;2?&M&mSNZ)Z=?beflv(SptnG()H`cXkD%aqcDt z;GTm#m;4!0-*c?jNcGfX%vKKg*ISMc3;WKJ>2cxFvF0cb=N{C>noj(R1qozzqh7PxzlcEU*Xg|7hrEu!R>gn^I3tSJ+Jg3b!K}GVtERQl`u)2s*{kvO<*zChpIeB%JoQnASZrG znOTqQ?G7#QKhwKZ{6Bj4D44_xpGW082aT!>`21B+nHGHXNK(h4mL8hK(xmsL4RujL&H6VZO|k`TgdNJIB*eu-WCYvl}sto@|q2}B&iA;Cg!@iYTa;a znQ14=^~IyGtYERDJtiO}rBDjmN<{K&s8SJnTvbuvMu(VW=?8P(d!^UjJ75Z}DxjBR zH|oJ8OFj7aqn|vpb}Q&r6*eH2UP>8LeK$Z<#nr7iJauo6LVo%vLF(fvWyZ||(RC{P z+wW-5edb&kajJ^ieMQ_GTp~%yerSM#KT>PxO?4M6NAl;ollqoy30p_7rU}Rwrb`?? ziKFHp`3}6opZ^t5lex3Juw`Y!EC5Xz(k4GL`}b?!xfiC%vJz#J1)mbY0DVFILM`PP z4`SLG3t?Vy9IJ3v0m9H*&-*Dl<8G8~2Oy?h0vPH|6u$@LQiM}5IY=W^Y6!7@Xi`ad ziDmQ=BSP4%sD&DF;B_NisgV+h#R?Y^cp9xC+Na@j8FRdi=YKij-nrkM?1ys}ot}Y~ zel7$?qowmLEJVN%vTNOp4|(DL`1FYMn|nhAswxU=A{fHTWxou~Ri2*H=CTTxpfg9f#10dVDhYe`e z=-#)=V&+ZnmwmEPRS$zT9ZU?!;4`meDkVU|HOGDk6RSQXN3FEP1O5#~%v8RMh9pOG zK$-^uue*?Bb-{rreiZJ%mkonGDTibt39IKKY$^$vJr05!aPSbDd_KPi&ZK@`3z{Jf z+(F5fedi0^OX3W>E4Br7?Ur1@eI1c7mHlL@DCMR$TvgdpbN#lR|V65q;=Gp96 zzKG_aUQx#@;tMCY7I9vri@_Q~nE|rm5Nds?TOvx?eTBB9nvAkJ1mkudI2DY>Nz|~p zu{ibBS{A z3^*gA*;VMsuHl+Bj+T<8e$!E($%P4KoDYgrN>Qc?hC+#MK=lU5Y=NGwiqwfaXL=*k19L#G3yan7RUwKPr{sR%kr z*@>*t(=1b!IMk}2LR&H|5`5ui55-ce=C65waknf7MpIi3=<+J!or})3ly8M%hdyS0(<}H3F+a%BeT3ak^w<{-2cFsjq||k{)lo4K%!qtJL}bX+ zjBG?O9@V-(3Y>nJ9WTvdpd-go!k!HD`A6|vUI~$_3-=hd9vq{>-!o#-;Eta>V_pYgB6r&ss+{%MiN*KQ}8EGmNXw zrT+ZuH64#Hho)z}tVG$@f?T5Z3-=e?Sd50x!Rf$g zoQzmdo`xpb($%&qzHi{V#SeM@H$@7j{xj;Acq|Z^AMh5i`1dirC(MPfW$D-vE>d&k z-jlgd@w_(b<&2ztuj;(irni(^c<)p=L_Ga+^&Mj_$cvMgdefs%)_H8*3|JctrSQ}M zIUPG3LemS2pks%cRao-XEH3?AJd1%QR$TONNlnZaD*TJ@&Hm_v39z&rxSq9XJN6{{ zm&J(>HbY6o3;)!ZY5V&xpXT{Bwhk(KddrbGl!;I%c%`T}wDGI^+wV8cz71@7m0-~} zf+6w>u7x?=vCQW2);F$uCbiLA&sUWwJ1k_u=Q|4WUvk{G;x_cAd0H_sh(x&nxku5zwvtNsdOxb-#iJ zw4xN{?6h7*MBun)P)oFYyyAOR9zwI<#14@Iqq-7wA)H-faVj@hfAEme4IX~?R^a?S z7N-M4I4N)hqsMv`F{&;-Us2)zFu(fFkBhWW4Z6b9m$*=#^AO1@MWz zGg!wcmP-SX#3oTssL-MAbcM|k#K#_D4ynuSp%k`6fRHg4qe32U5D`?Ib55p&_9_$K zIu+3)5Ee9&8kwA$Dt0W9^~u_&?1P;?a;QoOuNw|n+qL4XPH9BxvDb7&ZA$u>$mE;1 z0nuk$RnY@=J`L2J#6CNKmU_AIYuBuB=g6WI^iuNAjDnyYN+Pj4;>k(!kNozyn~C;L z^~ZJI-udb$>v1_AfuUw&smMTqX3cZI?umLvCuI%6a}yR}X5s4A@cy7abgdv%hqWq; zdd^9pRBw4zpvua~polg6Q5)vl;Uk&&-135rGWqxqs^neCfzeISp){`=gkxOR#7OE$ z+>hzhN1?_;=RS3c)-=Yk=5SziBcq6w+>S=Z%%K-{EwLuPje1-+BdEA0y^HF4F8lP! zM`Ts00?Tk3Gy0pAK8aDhggFfDaRJ zz9xWYpCRMh(S;EaXRfMAi=_9W;RG<@hFj`}F~M?qcag_%9Mnp%6U6mu@)Vl^L3s*c zLWTccpJR1Wqqy6sN*u2+FpB?a&4cTVroPr_!sMAC*%Uui=Ey6Qy5_aus!WA{C^B=- zy4zspqbhOCh}6jGA!OY-^DH;DD_2n#uca_Pkrme`Z|}j2m#^vz2WM4reex;~-1O4w zZjU1Dm#l>Q*jNvNQ09qor&vxQ*3W=@R6vE_{dKxnuJv>UA&KdvX7B$l>vuuiVSH1L zJe#P{A@Oy^%^9I~akHIgh=r*d@G~lO*fw1$ECiu7`Pef8%hUJ|qe9|8uFeg|Nl#xB zePW%d=puS&rnA#KfKxyXR+BJZ%fW-4bi|~>7cYAC;J9A#vKqlR^*lzQTfvNR_=XqK zm9>cSX~n^1s=#8boE_H)M(>B<`jyl&6^GD{0Dz5NU3`s{Hat$N#Mi9078X7XkN$7t6IVDL{&f+J%d1w8uoz6S0J;_J0sve>Np_Hr8fLgYI&hxM(lCaI#szEG$D>S+NlbgE*5|FySW6#?B%WBY2Q4q){V= z&R9m(G*18%YLsOXk@givn4*pF)l9yo=cj3_&ZIZO&f*3Fp?M6aSbp5cpqARDH^ zrH>>{7JR5-wwc5)Ik@8$AfUoO_~QE|_kIe^Pw%~V)F1O1#h0V^<~XN3tPg5ySCPgN zOdHlyP_~R_78ROXy22)Nkl@{ZAchKmX@!=bpL}4Xrz@-_pDvcIs7g3vc2_4I<5i!% zzHa|hgFRnWus~8k>fi<9l6?6wORnIsy(){CgTa0T$>D_#MyxApL%AH}iGUD-HOSha zD#{2fr4O)B;dgD)01nrgo~|gLVlK`>~yz0f`nd$ir?TgYHpz6|*C0EPb>c zBFdau&mxp@*0z{iL~^iw3rMBHFMhN_^AcA;ZK^6d0!adxkT4cl3zs>CI!*S1rEfrm zzx=t<%YG>i4`Ef&fdWh)o%Ngj1is)*VoaacUO70cd@*e8x{Waxz}!Z zYB}s)RR!MpV#b%me|RoS-ECcAAAt;T(WHAMC3n9GK%**!ktJg5iVeac>$lfI78QQv z!eRY#hT$}?Dzwm5Azqr4i*`E2UN3Y6e;aK`KRkUj|@fRL(yTA zsPgGM&i#1JSA+0OAuC~`I%%S8fs?8|Bx}lU-H*X#EHd)4unHnMIJy>tO@+UahX6uO zKUImckHs`y2V2U33jdB`$G-b89WbiGCWtL1_L5|sQXn$J0mK?$oLP>LYV!!EL(!>9 zxMLUUj#-!Df77p>;L08w zD?s{UtO6?h*@td#d2nq*fnC_Z0?|$=vF`tjBJR#UdC{+mq3UYpd&- zwcng&(=gIt&+~u7HFHVaKe*oy=T6N=ECE@GDoPW;gvYL<9y>Er{%=HVDt-FxEkh>3 zJ4sgJ5TSn3FkvFj)kGjkgP5%_RkTl$!BIL>P$4tBWBn94s41(nlmp}Ze`Z|2`#=4q zKK$xsMacmLvks{6%f0m$UYigvLRI9cil4dcgO{}p;XD+R_uGz(vhI$YwZYR35QJG) z0RB5os#!Ft{@^0yte_V5Fi*_(1S5m=G!~yP7Ctn>|MXp-_5mK%^Hod@mJ!>&10QbR zoH4}9K-^)mns-ivQFTW&XAB1>+~h^h;htMxrKUE>8r6Vw?ebdDAT6gs+sU0rbsW`k zWTaEu3nOjm=s%6NJSudwNL`6C^6baa90On2b(N9NGeC@b**VK#Jo^wUIToJJC80_e z;QaJ#(!baWbgjHr6@V`WX7)H0PoMxXW=nQh2Q#)th3XE-^f{e&()^pL$C6e~Hx>FO zp(~+*U~8!LWGgPcPAnkaQHo*C+405sq0NB_;k3@IB6Wn6r<|~vOzi#5njR461bz`& z)Z5?~4NpnIy9B7hl$n_(BgMrh%{-0^)mJO!kJ$>`Xdz}-0+?`{=75qt9){gMR8%rx~M9c{%ZilRYq*xSto!3KTHzy(pkYFuC&Q8 z;ad*AR4Jjr9h#nz$dd_GIb?9TIPaB>D1y6Re48Do)1f+1bLCAD6=%K=2u`)7t>I1kcs|qV4mXid+f|>Imeh$bGk*yHm#`sVy znN>Xb+Kt!gT>=E96hDW?u=tt9A|q=Ow=2Yx80_32h+56YGu!Y&avyU~xM3lm2lIur zBxn&_!9pVgs(g7?aCDi!Z&al*zl!smn?LYEX7mOHBD+IFZc+hA`RZ!=!zi0h{Q2}= z1#pxKpU1-dev z^HCM-sD-;E@i^o`y249toOz{F`Ql9m*Ga)4(nV3>E7xUR36G}HoH7_XBM%|2e(_mQ z5jU`a3cq(fG9F`4Hp&W?l!AKQp!>WflGy;k6SEk?A&zLBIwC782a=ICJ|$Q}L(>ce zh)aMeOq>}SvZIuW`WR7jmR5U{W^~Dlv;0~x;T8=$VqcnLnhodyj2Her8-A}=;^iykGUG<+?@W%iZ5Hh=~Y%(F+u!av@}p5_flxel{%bN zj_sdwOvK!vN1%Y4m-zzRoGR7RxPD^;_^$xsFN=9ew84ay{MDF20&7)?gGA8U^q-3>6R@-Mp0{uEv9KypWg+)S*IXJ-Tm z%73@=nWGsDtux>y8F!*2y0S&pYP*cuq{1aDERe?Z0Rb9EMqr{lDkx;pwIZq~$2#ao z*$mNH6A#^i2{&wRTp~7V+`a~zNy4d+{?3;u$LC8hklSMy?s(G1Gn&pIcGMBzM#Z8X zcU47cVT?JF8{9(XE;I}l>O(6_q&h^H!=E;MQWeaCCyAuJAc?&x=!!kU9a6^o4}#o5RBA=pnK5~DdT>5%=ZqQLt@)vLgboH`m&fd3A9 zgL)SBKd1v#_zJ16uo-{@y?F#eg)hufad1_YkT9^92|n4~i>NDz5ncPaGZ36KF={)W1q>B_ z!A;|K{oNiglYU!JGJoY6k4d{4%IYandx}8prA%V#P_qS%oq^T8R9P*Ev#~b~YjeV5i8FpN>5S0`Ozx8R?F#i;(p>eN&%Q%yZL z+>skSMPrmi{6vS0h74^z(0v%s?S@plm zWlh9gUsl|xGUBq;NL{uXdCZ9_qh_+6(r!+u)AQ~+T&WANsLIOXYy-`N#kBBk=V9r1vT*+$qRo0k9WTTenGMl7QBhnRXC#2Veu^s(Zl`x-PrnZFBZ9Yl1emK>qeA+fgP-6>dG`T6W&9j)5?tOCN z;NZscIiYGgL=J9-eDQ4+WHu04l^W>9IN+<(KB9yQUjz$j>FG+8ofPuDjAV)my|n6z z6keW~Rb*!!a3Jr`!PRk-U%lR2-+NDe?D?$+%|BE=p8|MG zYgf~(bL?g_K@wO1WQE;)z%hO@-$caM5R0@__a?kAi=qSy?1tyR=|f%>DC6|D;566gV)_NRmpGveKcD{eE7Kl9R6$jd3nHIgVv4Cf zTCPn8Q`irJ+ynyS#wI+qb>^YX_hFYgZ$tm~T{nQ-@@Ex0cCQ#Ob2SoozoJTi2<`1d zqSFS%9nw@jt%8eyj2Hf%S2oWnaU2H+Rl#^s$mXCiI>yTIMuV5GEK`IR{+y|A?VizU zAN-3Cyndv^kB2-JvUzh8d_#p_?SZuFStDTvrYfwCAU)B#A|7S}GG60_KlQPNktzji;;%#Byy=|57klcoQo#cjD*VWtTkh^P3D$qA!nSb+ zI0lIJ%%~w6GPBfKdQ`fP#wCeSDEucoS6|t7<8V(`+%(oY`LC)lXEO!g`JY|}F&O-5 z_;HZLn4rtJ6uNXti^DAxb&U$&JLlV-KSv;HKYrEv&)jEcdn{F8F-wEH22BSMSf&i8 zMH1D(voU#k~IY)6U0a=Fg!rwG? zUcr&-y^!zZ-a7CDzR^SPD18%fas}NGQ^;xbybl86oZrK zBrl|i3uIknAh_)RFMy&G-%GvbEC(?G6*4L%cqGD8wkOiJf?$yj;5EUoJ&gfQh0I7l zN~NYB<*|WcV2st4$ju9LD^+1bVnO!pEPd6pxmO}}wXC4g!)Pk#iIHXbqR}BFYgG6z zHtl!))dzs_okrDe?D63U&s7L3r%!ELpx%ef))RA<+m@ov`sREfK;Bns1w6CW5zB{J z%G}wrQp}!Z_>b5$)Trv=Mem-&KL(T^o1Moo2203rh6-PVTeu9?@V$#J8@~H88UZ>k zbCY{y0pfGhDEb@%6gb&Pu@(Zm@kViOfeM^!^ezzCpQBHy(1$HuQCT>R^NPC)IT}@c z)le1IPtbL`BYI7RKXK>A%NLf%7OpDFc-Y)V+^5r#f?Sk^JrKJdw(&-TAK@vIxp0U~ z5RRNj0^{Jj2|QB}U`E4bhP)l#Ni3y8hZENo6{9PWXx)Pp1^Jm7r@~MiXaXIUK&LRT-?ZxD!;X(DXfeDNz^HMXWBp*sgS4h(&mw& zu%+F8s+dS!wPW+vZL)e_y9Vg0s<24{#HhL^=QnLv>IEpwRE1T5P@zX=MR4wzAqE#D za7U&`lRN!yacpV4rcSt>c_}?$_`B%D=W2wM2zK zBdC?q=oz%6Dj}-bWXwoVmVHIVBEduy{=u6re6R8!ufdeytExu^qY`CJW5+h0DBMD0 z#!s~5yaL7E?QTJTEkF|U%uZw5)S11xt z;XgY+Be!c4=z3KJg8mMu3Aim{KBp_7_<+37>7{i=Mp?10K2&=Q*^hWk!-P|sE#&;N9!Q*c&?}2G(x`ExF}6g2 z8&iw}r@wB{@NJlts|s5hi?QF~|1>-CGFCfPQASbbu~P8B@~vmZ#bjItAt-Fmkh+8w z2z(w;;a5FA_Po+N;P;{`ZbE}MN|bFD{0+-7RZ%x@Bbn|=yB0siCekdqsf}FWbuPi$ zoKsaWb``0=t!W!>BN{at0i}Yqb+I)G@9b zysEe%Rvdu=kN9bo-?PUHy3E^?OP3Qa*1@PE`JIZ7=2z#|MFAsKI6B#AulCT-8>u+t|GRP^h_NMIApAFebE# z79@C}%*euPEPr%1nFVg`QMPogVYhj{szlj3K~w^maEl4vxW}bUrnAPX<#=nR!k<&} z#-D$?{%gEP%SxQcd4iLbRHl$ho_exo%YcRof9L*f^Tu2UG^*m-U@OZnZ36c1i4MpT zfiLZ1eHR2-7j`Hb!G z4@4e?c6HnJeIK6x0ck2Ycn*Q%JuVEsHbQd)|;f z9;53R00@)CGbwWGJCmYz$8p5PW#FP;{ja49n;ke0NkyjLH?2(X@iClB5abR1St7_= za&RFuti14>@vt;&JY9*Z7v}^p;htW@xffj66x%Hoevj$j?0NLn_mQY^Ri8~wdRFNk zRYzpwnB3x-{r$QSOvyEGu09tq%HYf>9-MPixY@%rAb9B3%S-vYD-GTE#0k%TbjFh9 zL&}#zvuS+L62XLUTINK_np_MuZ!-S#f#v-APq+P>%%a&v0Yz-1O6l?Fi&ID#93IixA7rk*vau zKU$7_5pz>jqKxbwa4Js#6KayR+0@1Go}KhwdTTUsg3(|=Q%i7-e15S4!}1Sl;qV1lbgc z8GSTgtV?fPY4s6Y2~{QB$M&L+X0_MZSCpM*lwB&QNB|SY*-_v`FXUNLYaor92lq&j1PXxJ=l`zq+jfx<85`%h*X0N%$?;Y9YiT9@Mz^j+6 zVD@r?62XL9bEl?gZG14E8nc!}^^%}1E^q>fWsn0CZp>YpL}R%kojSE=mO{sqJj%#0 z2LqA-Cfr_O<3B2!+*OE|Kaur66*8M56v85{Vjrx8(t5@0mCml<+U-M>`JdMAvdUsa zj2e0JuFv{qHEbAEh5aI!G92FoRLBQ0oXN!Aa9+%rEadQ!fX2CmkP2TdGP)9F zLLI?>E(9jb8sihe(>ds7`%|1)M(#_7IS*08RLCb%sMf@zX$Q!f)9~FN_SyK#Vmu40 z3VT&Z|1ugjD&!Njow)S>7*vvNqG5o(o5D>{;ZN`X<(?1fF2s%D^zKSU>MjRmjt|Uh zRbRTf-1msn^VL&9|Be-xc#LElqq!N_M0&B`-cPyq_-Er0Q9S$B^YlGJ{9(p6bxuz_Z54dCb8|+ec0u}Ea^)sbe}zy|;Xl=(?a6gbVOgUpBy-=P$$%RR zcB0NEC4vu=;A#s}v&JLSR8AJd*#&XY!V?V?@IO8Cv4G$o5^o^k7ES&HJHVtJbz)>> zLN0|y(^6$^;Lhq4Wjh1`W|Mbd!UQyTxt=y6y>%)I9FpOOmYE*mIgn}X{EZwDsqotm zY1?9DRTyZzd&zmX9?L?=FL>ddTc{I0p@a(}cLN(FL?;2Re@~&xrmQGrOVE8`5h?P{ zHB#Am8}S2K8?4N1Dx^ZaD&K+0$v^TP_%Ic&Xdtu35L-Z|H%B?+52CBDSmX)zQ`xHZ@LhquOclCnYTaL~5ZPxC)d%SO%?X_@5H#KK8i=>Tg&3#)bm6ZGk8f-I=_1oQ& zxwK_N=;34~%JxDMFmV#VgqwD+;i~Dh3}SFjBo+S|OYJ^RLPmvrHL$L{|7Iy=8wF{J zE(20jjr8CX{->t}+l>E@voct!w{Qnt2P4%%y7Y2KO>{0eLHi&Te%6WOPZZzV!_yVo zCfB3YU?YBJpYrw-!H3&7i4@Y(C*%f9CH;{DOw0{!SY`>jV*8*s7u*6e#NPiT3(q03RI=AuCYi)1itd(e5d&9bS;)t zt8Lx2ZPfU76d@rNU9;fBgtXRipi&Xo7W<3xPyE-USc{=1WfzgMJ3c8Ee3+D0HYwQh z{tuL(CH|*nT~mVak4k-Q&1?y7439#Tuuin-C0kmTx2u2oeWTaXO|Z{G7b@7?i+4sm zp!^J>56w57qgGYa6TcZ=adU&8{kHivT0g(0D{?R37y&G1?u*!dxKAF;&ANQV^uF*M z6x$SDNnJx4C%^Qa+@fFL9HT!H^t2p|v1&^HR_xCTuJU@3ro$`lT z4Uf6~83M8DjmRAZRiB)!Ah0Lp2k6t!UWP2wi9RPzls-7+M$cCjr2P^5sqsHmKWUgS zd(6R|YiX>OIVF*iLrHlP(rxnvNUTE6RVd1&RgGDx9GEZx9rUbJZ{2IG~XPrsoE1cIxaEfB&UgN!o#Uvtm-`@`}b;pQMKD$$V@RY*9~!#rG7 z)FNT#uCraOEY7aP&)fkkuX1Yk=&VWP+C47YCnxKS(1suumUGk!b54x7n+<`++wiyW z?iu!qvs!C}58_(twwRE)Vo@=)E89#ND(6HBDAr*iW5r7z}xkGZ`z!QG{SUh`+S!z1}$ zOIi;+zwGN=8aVuOU^IK4OJ*W?-7WK~ZYPnfwlA~Q{I6HQ{{Jz0C;bTBdRnl`NV{Ms z4rpp2X5Wi$U4a#YQK450|Ja#jNq^mSGXmjqEWt0Z(dC8zF3-1#mg-k~XxW13N7`qH zydVQAWVkjYYv=qy!$@vABT8uoEt?;7cA-uKe`=ph;R77#uLq2z^!EHnmLo# zExMi)&)2-yKs=w@>ui^452?vGnq^yRZ?g(8H7X}Qm!h;Q?O$eTu`XeOQkBKc*dkpqo|Az5MrSU zcV?x9SQB!L;CU2Bd#3BHP*Fr%cMRe7tasoweo9T4R{{s9Nan;ii^==OVj`-d3C8ln zf+4i@w8qFpkX0gnCtDWytybTZwPe zEGOH=T4;JJzP3Pgv-JMV8gdR=TWvCr5{0LX9ZRlS{?@K8=t?0tL7GZy=w5X693I~_ly{eW}W9c2L@e95D$+>nj^(h zMue2y?ZBD5YV_bN%?}Vb3ojSQ*#)UI3MWChm8&w!E(FD3djc5Z>0{Kd4^iYLjY~s> zG+Wd!NE>(GqB~Ehd;m;f6i1$YD%ddrx*w6t_>U(ZC^cvJTkxs< z`rX=FRv(~%g5t2jqZPbB@OH3y2c9V6_~|_+FL@G<*_6W9v`~9TyS+~&J>&VR5@mz< zLYxSOuwDZwYrVABKc!QZcjVt`Ar|W&t!Jzs$8W8#4m{!Kn-up$>=i4U;`aP&ir+G$ z#O4M!VsBFLw5hSH1b%ZQbl^4qX&jz&-I9Gl4-Aptz3AINzZr9oL!-iJUc$v9W|@}|&HSm2#8$xDaV;Ep z;4f%d=w_+rNOl|k+NUQ{Sxh86u|NgJri4UYuh`<|a4cRpDhEdQ(a@Z1#o`crMn*5e zoFps`g5;I2$PNqtjAB z=)luJ?53H%7O2@CVvoJx>shQuFiuc52S(%McfR*yacUYCo@}_H_SP~OTq)vl=u|LD z#M$>mERV8o)2WU?p&&p*(0jgJvTI}c;J_1p9-(Ln@u3;#vlYvA>sO=qlz$yD7^eT- zb6%}WW`X8m)UTw#816T@zsjo{Hvy*P2RD51Lzh_|+lrYLI_HRH5i3RsFIyQ4B7T7c zs0v#pK+JZav8akBp3DqcS?X-E6;Y{pQue9ew?2+&2V=J6%&)Z##Cre)@g|eWwqlRA zAK!fujBu;;Io1B&t)APzhO0}?|K?j9CQt5LT5d?YyW;du(5w$>aJD~N|KLaC^iTC% Wb15`uO2m#Ogq#0K@NFq=+x|b9$9Y)* -- GitLab