From 241b816e7fbada986856d46127aa74fe4934fa6c Mon Sep 17 00:00:00 2001 From: dengwenjie <775747758@qq.com> Date: Sun, 13 Apr 2025 20:33:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9B=AE=E6=A0=87=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 287 +++------ db/faces-data.db | Bin 408576 -> 0 bytes examples/output/retinaface_detected.jpg | Bin 366007 -> 0 bytes examples/pom.xml | 115 ---- .../java/smartai/examples/face/FaceDemo.java | 278 --------- .../smartai/examples/utils/ImageUtils.java | 56 -- examples/src/main/resources/jsy.jpg | Bin 49467 -> 0 bytes examples/src/main/resources/kana1.jpg | Bin 51500 -> 0 bytes examples/src/main/resources/kana2.jpg | Bin 41847 -> 0 bytes .../src/main/resources/largest_selfie.jpg | Bin 473832 -> 0 bytes examples/src/main/resources/logback.xml | 14 - pom.xml | 103 ++- smartjavaai-all/pom.xml | 139 +++++ smartjavaai-common/pom.xml | 2 +- .../common/entity/DetectionRectangle.java | 84 +++ .../common/entity/DetectionResponse.java | 21 + .../smartjavaai/common/entity/Rectangle.java | 49 -- .../smartjavaai/common/enums/DeviceEnum.java | 14 + .../pool/ModelPredictorPoolManager.java | 71 +++ .../common/pool/PredictorFactory.java | 35 ++ .../smartjavaai/common/utils/FileUtils.java | 21 + .../smartjavaai/common/utils/ImageUtils.java | 18 + smartjavaai-face/pom.xml | 4 +- .../face/AbstractFaceAlgorithm.java | 87 --- .../smartjavaai/face/AbstractFaceModel.java | 143 +++++ .../cn/smartjavaai/face/FaceAlgorithm.java | 133 ---- .../face/FaceAlgorithmFactory.java | 122 ---- .../smartjavaai/face/FaceDetectedResult.java | 40 -- .../java/cn/smartjavaai/face/FaceModel.java | 206 ++++++ .../cn/smartjavaai/face/FaceModelConfig.java | 45 ++ .../cn/smartjavaai/face/FaceModelEnum.java | 44 ++ .../cn/smartjavaai/face/FaceModelFactory.java | 127 ++++ .../java/cn/smartjavaai/face/ModelConfig.java | 88 --- .../face/algo/FeatureExtractionAlgo.java | 162 ----- .../cn/smartjavaai/face/algo/RetinaFace.java | 144 ----- .../smartjavaai/face/algo/SeetaFace6Algo.java | 319 ---------- .../face/algo/UltraLightFastGenericFace.java | 135 ---- .../face/exception/FaceException.java | 30 + .../face/factory/SeetaFace6Factory.java | 34 + .../face/model/FeatureExtractionModel.java | 259 ++++++++ .../face/model/RetinaFaceModel.java | 243 ++++++++ .../face/model/SeetaFace6Model.java | 585 ++++++++++++++++++ .../model/UltraLightFastGenericFaceModel.java | 232 +++++++ .../FaceDetectionTranslator.java | 2 +- .../translator/FaceFeatureTranslator.java | 2 +- .../cn/smartjavaai/face/utils/FaceUtils.java | 167 +++++ .../java/com/seetaface/SeetaFace6JNI.java | 8 + smartjavaai-objectdetection/pom.xml | 137 ++++ .../objectdetection/DetectorConfig.java | 14 + .../objectdetection/DetectorModelConfig.java | 29 + .../objectdetection/DetectorModelEnum.java | 62 ++ .../exception/DetectionException.java | 30 + .../objectdetection/model/DetectorModel.java | 216 +++++++ .../model/ObjectDetectionModelFactory.java | 73 +++ .../objectdetection/utils/DetectorUtils.java | 62 ++ smartjavaai-seetaface6-lib/pom.xml | 2 +- 56 files changed, 3300 insertions(+), 1993 deletions(-) delete mode 100644 db/faces-data.db delete mode 100644 examples/output/retinaface_detected.jpg delete mode 100644 examples/pom.xml delete mode 100644 examples/src/main/java/smartai/examples/face/FaceDemo.java delete mode 100644 examples/src/main/java/smartai/examples/utils/ImageUtils.java delete mode 100644 examples/src/main/resources/jsy.jpg delete mode 100644 examples/src/main/resources/kana1.jpg delete mode 100644 examples/src/main/resources/kana2.jpg delete mode 100644 examples/src/main/resources/largest_selfie.jpg delete mode 100644 examples/src/main/resources/logback.xml create mode 100644 smartjavaai-all/pom.xml create mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/entity/DetectionRectangle.java create mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/entity/DetectionResponse.java delete mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/entity/Rectangle.java create mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/enums/DeviceEnum.java create mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/pool/ModelPredictorPoolManager.java create mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/pool/PredictorFactory.java create mode 100644 smartjavaai-common/src/main/java/cn/smartjavaai/common/utils/FileUtils.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/AbstractFaceAlgorithm.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/AbstractFaceModel.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceAlgorithm.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceAlgorithmFactory.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceDetectedResult.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceModel.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceModelConfig.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceModelEnum.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/FaceModelFactory.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/ModelConfig.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/algo/FeatureExtractionAlgo.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/algo/RetinaFace.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/algo/SeetaFace6Algo.java delete mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/algo/UltraLightFastGenericFace.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/exception/FaceException.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/factory/SeetaFace6Factory.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/model/FeatureExtractionModel.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/model/RetinaFaceModel.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/model/SeetaFace6Model.java create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/model/UltraLightFastGenericFaceModel.java rename smartjavaai-face/src/main/java/cn/smartjavaai/face/{ => translator}/FaceDetectionTranslator.java (99%) create mode 100644 smartjavaai-face/src/main/java/cn/smartjavaai/face/utils/FaceUtils.java create mode 100644 smartjavaai-objectdetection/pom.xml create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/DetectorConfig.java create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/DetectorModelConfig.java create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/DetectorModelEnum.java create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/exception/DetectionException.java create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/model/DetectorModel.java create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/model/ObjectDetectionModelFactory.java create mode 100644 smartjavaai-objectdetection/src/main/java/cn/smartjavaai/objectdetection/utils/DetectorUtils.java diff --git a/README.md b/README.md index 5da7e3f..ec8f975 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,36 @@ -# SmartJavaAI:JAVA深度学习算法工具包 +
++ 🍬JAVA轻量级深度学习算法库,该库致力于构建Java生态与AI模型之间的高效桥梁 +
+## 📚简介 + +`SmartJavaAI`是专为Java 开发者打造的一个功能丰富、开箱即用的 Java 算法工具包,致力于帮助Java开发者高效集成各类智能算法。SmartJavaAI通过对多种主流算法的统一封装,开发者无需深入了解底层实现,即可轻松在 Java 代码中调用人脸识别、目标检测、OCR 等功能。目前已支持部分人脸识别与目标检测算法,底层实现涵盖了 C++、Python 等语言的深度学习模型。后续将持续扩展更多算法,最终将构建一个面向 Java 开发者的通用智能工具库。 - +## 🚀 核心亮点 +针对 Java 开发者在集成智能算法时常见的两大痛点: +- 🐍 主流AI深度学习框架(PyTorch/TensorFlow)的Python生态与Java工程体系割裂 -**SmartJavaAI**是基于 **DJL(Deep Java Library)** 封装的轻量级深度学习算法库,依托DJL的自动模型管理和跨框架特性,**无需安装Python环境**且无需手动下载模型文件(模型由DJL内部自动从云端加载),该库致力于构建Java生态与AI模型之间的高效桥梁。针对Java开发者面临的两大痛点: - -- 🐍 主流AI框架(PyTorch/TensorFlow)的Python生态与Java工程体系割裂 - -- ⚙️ 直接使用DJL需处理模型加载、预处理、后处理等复杂技术细节 +- ⚙️ 现有算法方案分散杂乱,封装不统一,使用门槛高,不易直接服务于 Java 业务开发 我们实现了: -✅ **开箱即用** - 两行代码完成人脸检测/识别 -✅ **多模型支持** - 集成RetinaFace/Ultra-Light-Fast-Generic-Face-Detector双检测模型(即将支持OCR/目标检测) -✅ **跨平台兼容** - 完美支持Windows/Linux/macOS系统(x86 & ARM架构) + +✅ **开箱即用** - 两行代码即可调用算法 + +✅ **支持多种深度学习引擎** - Pytorch、Tensorflow、MXNet、ONNX Runtime + +✅ **功能丰富** - 当前支持人脸识别与目标检测,未来将陆续支持 OCR、图像分类、NLP 等多个 AI 领域任务,构建全面的智能算法体系。 + +✅ **跨平台兼容** - 支持Windows/Linux/macOS系统(x86 & ARM架构) -## 🌟 核心优势 +## 🌟 AI集成方式对比 | 维度 | Python生态 | 原生DJL | 本工具包 | |------------|---------------------|-----------------|----------------| | 开发效率 | 需搭建Python环境 | 需实现完整AI Pipeline | 提供即用API | @@ -27,229 +38,115 @@ | 部署复杂度 | 需维护多语言服务 | 需处理底层资源调度 | 单一Jar包集成 | | 性能表现 | 原生高性能 | 依赖开发者优化经验 | 内置生产级调优 | + + ## 📌 支持功能 -### ✅ 已实现功能 +#### ✅ 已实现功能 - **人脸检测** - 支持图片/视频流中的多面孔定位与质量评估 + 人脸检测、人脸识别、人脸比对1:1、人脸比对1:N、人脸库注册、人脸库、人脸库删除 +- **目标检测** + 支持通用目标检测,能够识别图像中的多种物体类别,返回物体位置与类别信息 -- **人脸特征提取** - 基于深度学习算法生成512维特征向量 - -- **人脸特征比对** (1:1) - -- **人脸查询** (1:N) - 人脸库注册/人脸库查询/人脸库删除 - -### ⌛ 规划中功能 +#### ⌛ 规划中功能 - **OCR文字识别** - 即将支持身份证/银行卡/车牌等关键信息提取,适配复杂背景与模糊文本 - -- **目标检测** - 计划集成YOLOv9模型,支持车辆检测/安全帽识别/工业质检等场景 - + 即将支持身份证/银行卡/车牌等关键信息提取 - **图像分割** - - **语音识别** 基于Transformer的语音转文本引擎,支持中文/英文多语种识别 -## 目前已集成的人脸算法模型 -- **RetinaFace 模型**[[GitHub]](https://github.com/deepinsight/insightface/tree/master/detection/retinaface):一个高效的深度学习人脸检测模型,支持高精度的人脸检测,但目前不支持人脸比对 -- **Ultra-Light-Fast-Generic-Face-Detector-1MB** [[GitHub\]](https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB):一个轻量级的人脸检测模型,适用于需要较低延迟和较小模型尺寸的应用场景。 -- **Seetaface6** [[GitHub\]](https://github.com/seetafaceengine/SeetaFace6):是中科视拓最新开放的商业正式级版本,支持人脸检测、关键点定位、人脸识别。同时增加了活体检测、质量评估、年龄性别估计。并且响应时事,开放了口罩检测以及戴口罩的人脸识别模型 -- **[facenet-pytorch](https://github.com/timesler/facenet-pytorch)** [[GitHub\]](https://github.com/seetafaceengine/SeetaFace6):这是 pytorch 中 Inception Resnet (V1) 模型的存储库,在 VGGFace2 和 CASIA-Webface 上进行了预训练。Pytorch 模型权重使用从 David Sandberg 的 [tensorflow Facenet repo](https://github.com/davidsandberg/facenet) 移植的参数进行初始化。该存储库中还包含 MTCNN 的高效 pytorch 实现,用于推理之前的人脸检测。这些模型也是经过预训练的。据我们所知,这是最快的 MTCNN 实现。 +## 🛠️包含组件 -### 人脸模型对比及下载地址 +| 模块 | 介绍 | +| -------------------|---------------------------------------------------------------------------------- | +| smartjavaai-common | 基础通用模块,封装了公共功能,供各算法模块共享使用 | +| smartjavaai-face | 人脸功能模块 | +| smartjavaai-objectdetection | 目标检测模块 | +| smartjavaai-seetaface6-lib | seetaface6人脸算法JNI接口封装 | -| 模型名称 | 下载地址 | 文件大小 | 适用场景 | 兼容系统 | -| :-----------------------: | :----------------------------------------------------------: | :------: | :---------------: | ------------------- | -| retinaface | [下载](https://resources.djl.ai/test-models/pytorch/retinaface.zip) | 110MB | 高精度人脸检测 | Windows/Linux/MacOS | -| ultralightfastgenericface | [下载](https://resources.djl.ai/test-models/pytorch/ultranet.zip) | 1.7MB | 高速人脸检测 | Windows/Linux/MacOS | -| seetaface6 | [下载](https://pan.baidu.com/s/1hfNacA8ISV2qHrycjOkgqA?pwd=1234) | 288MB | 人脸检测/人脸识别 | Windows | -| facenet-pytorch | [下载](https://resources.djl.ai/test-models/pytorch/face_feature.zip) | 104MB | 人脸识别 | Windows/Linux/MacOS | +可以根据需求对每个模块单独引入 -## 环境要求 +------------------------------------------------------------------------------- + + + +## 📦 安装 + +#### 1、环境要求 - Java 版本:**JDK 11或更高版本** - 操作系统:不同模型支持的系统不一样,具体请查看文档 -## 使用步骤 - -> -> 📌 **运行提示**: -> -> (1)默认算法(RetinaFace)或轻量算法(Ultra-Light-Fast-Generic-Face-Detector )都为python算法,兼容 Windows、Linux、MacOS,Android 等系统,SmartJavaAI首次启动将自动下载模型到及依赖库到本地(.djl.ai隐藏文件夹),建议保持网络畅通。初始化完成后,后续启动可实现毫秒级响应。在无网络环境下,可指定本地模型路径(需提前下载模型包)。目前,这两种算法不支持人脸识别或人脸比对功能。 -> -> (2)Seetaface6 采用 C++ 编写,兼容 Windows、CentOS、Ubuntu 等系统,虽然Seetaface6 支持linux,但是我们目前仅实现了windows,如果后续对linux需求多,我们将兼容linux。Seetaface6 支持全功能人脸处理(人脸检测、人脸比对 1:1 或 1:N)。SmartJavaAI 通过 JNI 调用 C++ 接口,不支持在线下载模型,需手动下载并存储至本地。使用人脸比对等功能时,需要将项目中db/faces-data.db存放到您本地路径下并在config中指定人脸库路径。 - -### 1. 安装人脸算法依赖 - -在 Maven 项目的 `pom.xml` 中添加 SmartJavaAI的人脸算法依赖: +#### 2、Maven +在项目的pom.xml的dependencies中加入以下内容(全部功能),也可以根据需求对每个模块单独引入: ```xml -Vy(C0;w;l4f~(i=aBi_{y)GjqYs`sX7@W~ zJ-18ivQ6o*O=-7J?Q}}-a!Ln6>U2r(bj$1pxTLjP#nf6vR@uhZcw}}26g+=cG8Dxe zjxK*2&3qkO@g}QfGOb}Wjy3eGq&Fz9%|ENjKeI6~yE!bcHKL#`s<1t-xHGz-B_zGt zFP`ZUQREPiW#$^EZ5b@5?MkMY@etIx_!YUZ6a-Qjg{PneB(%jf9o3xUOd?8y z83TF!E6jKMSv?DJ4evwC2O_FoTgF#Nng?TqwH+dh3SKO rn-!V2mm#zcu80!yZYmbbT`x2<`T(~WshXT** z0w{C-3l}i=LJBs(eIyAZ1p{Ac4QC;FD_(IEyo9NcqP?O?uzhf$OL(cRf4;U&jGUgo zu#%IYjFpg_EmlYm$p>5}%Y#wE5U2zZT`a#MK}emVXl`Z`YUL2Frt5;jD-tENaYE`m zSUD70nh&GMi&f>pX^ASi={aOLM>N=k)|!XZ7zbDC`j?qLt1^qMGL5J(4rN%!)i|fO zx@LAMdE_a26`I7gn8vqSKxK4Nhjn6`b$qLJT#I#VvrT-HZ32h;91>a_6I+1zz+P}j zZnaNowM%WYOK-E!Y`4qqu*>bT&jWNj=J&W44R{s}c@~0-_b=eQSo{j$Rxs$A2h=v; zk~iR-`_d`rg=6*$hpc{B`LO M zjn;AXmeI9(0VTSAMJ6G1yO=7g@G?W+Ts8Xy9k(=#paSO@rddFaX+V~BXufj{-7AUZ zpI#G`QR|<=@{FZBh2~oOrCNF=7&?ZlnR+Yfxyex-C6ufL#q>~uYMjN%tH7Z=K6wO2 z9)XhN=9A^-l>u_(LP?@=6dXYbgQvho0KE^(FT;zG jBuL zc3Y=*+dv1NruV}1!^sYCW@?vha)(_~yFJGS>2ONza8B)TP4Du^?D5X&^UZzk4R!e0 zP>tW^mDTB$(e9Jk8IaTCo7Lr()aV>v6OhvxTG;c9)*D{Z7Y;3;xF@otFRtuGO65>y z&6}LMxA_h43K~bC&8dEs#Tv-190bJVHd%S62uK@qVdc4arICX2yd-5_q7o7(jX;ZW z^GfhwrGWc@@9=_hF!%g;3JzoxKLy1ni9|_o@knySBTk7=K!uN>gyu{+nF~ck6J)tD zAXkAvMG#m81ivbZq$8y42=r&@mgX2ncL*tV38PtgrHLw8V@Mh(3>Xd+ei1E_vaPgv zs7_#^O+rmLYq;veadPuyT>WTL^F(ajd-t3+{m^1*`xva4p_xxw+527QhrRO2gVM2` z%z?$c;nj+nqxS8)+QsAAg^%^@PmQ4T0r4$!(6IceZt19oeNef$SG{ytv;3)g^#r)D za_zig?Si>>$ymQC-MA^+yer$jFWbIjZhx-WyJPKv0{Flo#0|hh`TAq|+GE-BJ$><( zHh*0-cU8#2W#Rl);lfqnA_o|8BeH^xf`N~g)ia`~4xfOkn7XT>Q-YC8lA&{=b7-+$ zK)#-Ryo9>Dgqj KL{MsT)uA0`#Rsj{(&+1Hqt91RCnm%;nP}ZN^ryoeO zh_19xZgNOzRrM*-3}S-8YZ%>V7T;=>++mg2W*OhYS^OOCYqm>lu}^GuNNfQ(Cbz<+ z793OBI5d>nW|P)#lhI+5*=dvAWt-b=m)GN%*XLF+;GRDS_>16jU;eof{@MO>M>u4{ z{wMn==?73Wy`)rK#T4v_lBR;<#(aWQurs-^D%>Ilyh@Hj#-S2c(NynT=hWsX)<{O{ zLSf$~?Zr-9^|*I#uXRj~xIr*U!%NF8J-=_IX8fdS?y_ 8NCSqj+MqbY`Pw^<(4KDWGQk6KmyT)%t18)+KZ0w1oYM#y%-szoxBR6|Gzq zuicb@l-v4TwsThj_TI;Db)SBK$ya;uqi+94-R_U-&2MnIh03)r4ZFYBY<*{~ePOQL z)0b{b*f+)O>q7P=UeZ`p$yP+shKHy{mbX?i^fPjbv+ziPg>LGaq-GK#tmr5pX+@H@ z6_t17C+Tp3^2sHR7t$4zx0P0L iLBne$KUO`OB zoFJ|V{tgr`Y(E7gp9)$)M@GwE*D1@yw@ll!gz7=l^=F!f*BXYDn}7o>s?rh=Q)wK| z)byh%dleW&)>@@>X@yo9MmLznH=89ina4K+{aM5{!y*9svx#s06Ltyh_DLPKARCiF zLbh81k~=L^x-8RrEHip-GN0RK^ueD3MgxKaoem@zP$2+1f6^b2EYP2AS~rLC;1`oR zK-iimwu8k1eK0!UMZ2_a2S92Uz$q0}yl$6tK$lBeC(s{Up~NMn-32a5lHD6z^fIhu zFu1VaKf60H7uaney7YBeVShk&2Ov1VE1cFBTQ-nb`6i|MZCdR+KzhyFjGEz$>eq24 zJ@F+y>8!!R#`lHw?{ce#(iwd@tbzRMSJ@RWW3n59;~4gy3DW8|pjIHUvfO-9JUAI{ z(A!ZW+$do_oD>dE;TNFr Z` zm$N48`pViTsCi{Or8Q@EE=E<3q%_YIJm1LfTJkCAH3?^`d1hf{tYu9@{b+sVqX%^} zr&W_5X>T`a!y8pIAKN!?Yvw=IEF9G?eFW4j9@erC>z6+^terHh9oMgYtXVy(hV{Sl zscQA4a`miY^}KBLyma-VWc9LS?V7%ETe@|}fb|dDxBmbxkE(;G%H5~RoiA0}PgPrA zE7zZx%l8cSXF$o~P4U8Y@%%NkH1-W``4)heG7(X-m83e8 u$a(2k@G7wIbx_fp;Ns!Xl6MhhBQX_Yu@xU;%g3V2-X~U$ zr`Ao!m%oo?j>IwFCzg-KGKS;JhEpm>GwUWZ>n3uWrs-X58V8FdfX?}nt_6DcVp%Vn z^?arJ @41VR!#s7Rugpp=D_nyac|puSDCvYwxestfFP2?blc zupR=fh`_2Kh&m`)Ym$C|fTowQVX&H8rcX|HLd|$~`x5Q>c3$UdV(p}Ve!q@iAz8^q zNY>6PyQ83QrD^)2ZQ(kjW4h$^TFdff{qjlu`dQt^S@qg+_1eeEl|$C@LG9*A^#-us zVd>%?eR02h?WAh^ioSGQFn?6Acnp$_wsu>ve4W2^UA%Tn2kE!_$U1teJNdog^zRMF zf2%wEQM2={YU7Eu`dG2@P`Ub8yZNnp<7?IW7uMQC*~%TzAC1F(7epB|vaA_V(wLW| zEvxCKV;yedl3?Hvqh=Z;O?4y5*$T_s3sLL|lGbRPCNEw~P{fF$;w+))K$bKSAZd!p zTdV5(7}|!LJH=8>{56by^=(2#WDWVrY8ZktPD~3gstKdYPf$bh%5(9lV1$h2^n#5& z3QhgXl^k-^J&N@LD Gh LFX_1E(H$#1)w<&>m{_A# -^Ldpa&Wvn2W3?vLe4ntN!;T6E_<%G=0+B{@kQDsLt z9oYZE`eZ3v5sJMq#f~U#Evo1!sp=xH?QQHBYv-M2<{T%h>FN}aW$BS9Lv=(6a%Npn zQV#*v2v!b_SHcRaadAtd`PGRswsMAH#@@yH-gIfpR1L2Z4Iety5A^(6{oqpFfMSzp zWk8l%{zWPtdAgzH#xV^r`k?dch1VEH)tSaOaRgdYyG0^rVvM63jiVY(qnpfPT1;bF zf1=GK`Y#wqw;M-yn8W}&O=CJN61r?tdu>vBtdhDc5;{y{;rwQks3!OeMv)Chk@e8w zxYLq5f#&SfdYv-+U9(?$ #(nIB@xKO|I6q}9!4 zHZ5j1EoL^%=QgwRnio^5#?z`Na~kJq9jhfB%Yf3ZmGa*8vhLNg?v;wZHCF#d)yu7# zf$f?BXg6yHHfjeq>tAg*z1eAgy;Ie &^Q9rTXXWw!yWb$>YI^PaUr| z==CGa=JBfbnTDRlhVJ>w=CP#g1}y`3qOck`x`f2FQDD3w2;AIc(D{W#G(^R<$RZko zL=}FR7eR=?DIxj5JqG8Hh{8%DQdB` Yq%BqS z{jJ?nwar2mwLB q$W65mv`iL5ZxTQ7c^)5Bdoagq==f7BFe%PsA_*lL4iM4c8zI52I zb5Xx@Ub}T#w|h~(dPtk!$)DcLo8F|ckIL51i`d6Ne8nr5<-1RetuM6ohr-o++QtKY z`+)(f{=p;b@N3oKx2nBwtgSB<>ks8C_Z7?cEa1L>fVFyGv3k#3`OH|pEm^uQTDlZh zvc=$4a6}Doc4(Le8rVe{+DEII1j=Z-i746;Wvr!D-GpWB_((>)0=oP{#zHbSa#SxV z6&Et7z(P72M*bGg@fOZ;%6eYrE^$u&8FrqD{DKNZF- lf? P<88FPF7W2kz7IW9S7}!1^}~Ei()$wTiAXk7j8H6f3x7sreQgL~yKK zoo6+A5w(WVbtZA3{k51Uv;s`ynoXjcO#fQ{z=JL3v8`sYZKg48CV!#bB(}pOuG2KW z%PgVGB8fwMKhXtIGaxvQW|z Sah8;`R#JB+ zk~Fw^B>4!MNRl>6+=yS%mZ0i{Q*=N}TOtU$61x8SUfFgL<(6R#r`Q@WagBp%cCl6Z zKH0odW?WKc6x&Fzyq4_l>7t>fvJcx0tLOFW=PdR|I=DC2PRkY#OBeQQw$95}k1IFM zYWHp!t0#=LGsgNw(b7rY!g21xNx{+;%zf$BQ_1F6=H72*dtVuQkEMI}jGg UKH)RXgjD_pcg-iOvIc@%|X#TWd{sc{+Dr&pyT7>9Z zKhw4dkyLZUOBfSm%w?#qGE_IRtThi_iyNoSFKni)9iX7)C#v9t6)_Q4aZxu3HFk)% za7}Ua&$jVO)v^dNaf(&aal;bTxgg#~*1(Er@<7G`Sp!4X00Wx~DUBg&i>bJ3+9&C` z7ihQ?$l7LV`j%<>m#O>EG`x#+155ORN^}FDQ*02*FbFHx4Pj~pSLlJWBd$gFSvAN& zlh{TeKI@cDu>D|$IN~T8F0I#O3Q>co7UQVapTyU03Y5n|=RX0jn8$TmCG}V)c3OaJ z ? Q?r}6cE>${I#W2b#nS1)F+2j;F{&O+z1f9m4- i?`AW;njm}p)tuNQQhBlh}780`?^^81$ z=>&)>D6}L5w|P*)z 0$+yc`y(+RY0H=_=WW4G~6wn67|i)RJ1*T_@v})_#s@)Ey0CTMG&>o z(iQ|wcNE2%SHS_V;);{8(R0uAOl=Ox?e@-W2Vaj{a $Fq5;5@ycl{ z>|ZMAXXiYhD|p4OoI9$RKcG+V6isf{Y@AkaoK|g|Htye4Z=O|co>p&P6wmJg_m!@l z6@%W#J}z3hDBXN0+j*jIJ<&G4lx}}5-F+(Edt~fAlmP>7Ka_3UGgcw6^|@^6wtVRh zh>x{=U(Wtq&c0=`Z_3!$4E7~`@v?aFyl~-EK*ES5X(XfSplcbbZyTX% N_#fTdbcW`?^X{S)D9lj4jfeVZ`TbR zG!7lr5AHX=K5BdWspH*o+nY~aBd2{IE(WG<`o_+C$IhOQpTC&6d^vSJFnv8RbNzA} z`WJwqnXA`xH*XhiN0#pTKYZ$aw?8ocadPcpX7g!c_5Str>CpJ6R};s>Gnen?@4APN zT3&9=Z2TCVzj-lo(DQnuduTO1w^7d!1fV7aav-vbLWx3#4==9-iKHSasVgp~MItEk zp{3D0l4!I9FP{WVKL#g5B&kpoO!x^ZTs&|=NKulA77l!>NH8OnQ2c8AWL+^COAQ?_ zRjQkulD(F`kFcm751%}isD%{NKnd&OC>FwM&Ukqn9&uxCAp<@cYYDvoJ@*WYpkjw8 zmP 6Ec} zSiO19Ts^K>KdaukW^G?rY~O%mzi9a^d+uZE E<>n)3_#9cc{F%dji`R_BtI~ywlKC^*!dcP6X~Dt?Sgq!c z(dJGuN;)3WYK|ZVMHE1-vmwh`kYvmWl4iUlLn##x6}@0dWjBJjC0W`=O5H=%Bvj8f z*3vE2(Lc|^E!o65&d?zW)(uI*5Nv54i~>qfl~;(071b7$)W->FA~6aG9$68JwT4Bc zxo@G4TRzpTNW+7s>PgcLVHt*3>jpA(0!wuKi?n?UwEYY8LrM+9%5{RvsDVt~XSL=D z?V$JRhu0WKHvr{v;+;R$@}H_-lR-p-et5lpc!U14M!m2`qwrSKs1Ea(Zu97F)5uPf zh)&bUF7w!Ki@0vf_%4h14y*VMYd}JWO=2hTokLnL@SSJgkZ<9e0NOj?yAZ}`ICDI* zVj{Y7Dz WvYgijG`Eu1x}4v-T->o%+Ot*Gx6SO`qIa#8 z^=vSEHcPwKf$th#9k#sv1bd T?&POSjOz{BZRA{r=$i$2ZewuYn)mf9xMSel>N`^?HZZ zGFja=HO{`KRSue22f-ChA*D)0OiNf)1IJInU}Xga6-7j;06{?|US4T#ZV40wyddz2 z1N&D G&QGQMU8klM76 z-LYEOyIuTzr=WK$uX{bGb0xofoz}a>=-(-SzFX11$9l0>`EtMV 3V Z<-48szPXgFT1kot8Uu+yA}EwF4-c7-SBywdQdBU})UZ`ov6K+i z#PZ1?xkPw)L`Y=ipX) U{ z$}8LJ8v2Pzn(*ROdHGejFbce6Er{FWWlV9>rdVk+$c^C >jjC9VZ@uzn_s~L#v7%LpzU@ackZ(KL++*Pk%RIQ&k z?A}&wUY4(&m#?2!@7}U@Zp${WX{#66^PdvOcH>5NidXN8R_=>eAIkTBqix<50yA!1 zmu%lKcJ3hD&HCx?Vr@Q@uii12LHhlP>oQOn*_Wm43p)F}gnd@BbS9%>XXzZP$w_TA z#fuq8D%(-0E)vRiI8lAPm?2rlk}PYds1vB7A3~C`6BM_UR(034jWcpdfyHm`mg*W( ztZEXZY~-hBA1O_B#)%uCNK~?{DKAMADX4}fYVcqcxgq%qB@J;n88s&@+c<5fG$or< zRp&en&k`B?EbX8Q)98AmFqWoY5!EN3!+imTT7E@Z{w2VDz;}j`4aU*UVAz^OL#j^$ zv_?@4hEWX$k@XxvT4Y3nVPqpm&yQ|5iflEGXfuoIw20}pi0(Fv=r9d$H;d@BitVw9 z@3Befwn^-ANa=A-d+wI`(k=6aOU846N6vtM(QpW`9(^Q|H4aRd+O(A3x}4UslnMrH z^L$z}JELVOyKOnY4femd0jNFjl`v#=vaFG?oSB4*ov4xxPSOY~Vay|_&QI1da!pPw zeOWWO(K>dN(eOUCek7-TDyjahvQrdB-HzfE8OZ34YZ-}d8cFP)E*RM=ojNT1uwAxr zT(NS_TDyQNA6M_(mTz1^IHv?0n`>9}&Cf+E*NLOMF>klZcYhSJ@ADRJOV%Gswm#Fg zVD2xA)-MWIFF+|OUcM|@xhh?~VXWLRS8pp;Z&_=f{{iR&ZYtKU;rhzDW`RP|CK3u( zGOG4MvSu*-{G$3qDH9nrM+Gf+3e`hQ$(1DMNLFx>qWT)UrdxRDntEjFIwqQVW*WLA zD;fuBScXAtTv)*d$*&5EB8p#?AYq8YDWmbKSR$2+TM9>17ZA|`64W#cRkMsDs(Vvi z^0d9_;OtOv$yfI+rTUkudKW5tWK(_eAjV@5Lf7^$)(I+w>ttKTw;G1mYXwzu%sH5T zm}wxs;7XmKO5NZpy-*JKfzX5LH;!yJ3U4xe)@b~!(LA!vCbru#>A6eFOSiN^&x}_- z*~9*MZv%_o1=2>s7$2f4COHDFdiG~Kom4juQ=8MVn%A*b)Vo>wVz+$opyJgbbMT;S zV6SX&m-XtPX82>{yOY-U=dB~BEpJbnhmSdAH~gt}_%FWee1Fo#A-l7_59j?8mq2!d z(?2nJH8gegdiv(w+}-Hn 1CRl4to{S@j?4-|eT=yoG$0xT;qU zNfnZoK|})&qwsv!oH{RBn>V97wrjj_bc?mf$$G3@Ij`BgZrs0bJbbL#{amqiRla%6 z*tnvvU(wdD^Vnwzu>Oa)=y0X{<@-WNTHE?sym3 fN{-U%o>J=GVoL5rS$ide5F@8lJAc^!5~ux>mqT;6uNUrz7arcs-+{*d=I5l2 zEWm`p6h6&te4pR^0hrtPKD+jHdgXCu^$TEn?aS=?)7<9Qxvj7Bo8RWQzRhocTi618 zUD*D*xby8#uy?;La`1Iw=V^ZX%lzi!+{WYV`s2jX{nX0S%-Xlv^=}{8pT`!i#}}`s zR&Hn3ZayrWbo9@7_$NzI48ZvhCLabX1&RG6f+B&RA|a%vp=hcqZz4icMI*(z5h8f7 z@dOlcSPGG#EH0)ErU4$WKq9M)is}F$I0sG|UW_7 nSZ~j)X%P z3Q9nUAfcelraJI2PLG77SV_6|9i$( {4Q&*6%`y6ynS-n8Eu$Wp zwQBBhL?bWjBxZQcP;%!~LdR6zn~mbJz3kz&ip4V~NTh{N)!VlfKztC*-n;?sqeDK= z_5-;0<41O4hqtQs|0rVL=l|qB#_m01@2+(3wsadpp4Y{zm%x1x1T9^=Wv<^ GjT<5Xt_`{TxHbVq}07A zI)U=~A 8NHIu3;4}uI7X$YH_3G0l<1#vK9|)9s*U6 ztOYJ!4)=-c@(O9Gn};cyg^TC}83vR=Xp`#8(DY}5-lybQpx~CR?wil?bOh7&LrTE! zYZwOduolFfUTC#eKn1X#@v}O^uo~b#fMHmz(X)CZka(c&KdS= S)grq`cl*1ybbJkD&u?tpdvWfnRc4>Riz)9d%sYj;ztpC^|;Pb}TR9~oV^ z|G<7+-1*xW`|jQB kM1vQK1?i}MkO*7R4t*Z1;U&nq8j}CvYgr$uzUp-WhHdf z6ilT>wFvz3e4zQGB*7dO5?1Humm?5V#Km=GWsL*{RRjrYfc>yYKFfbDRw?m-(wO2dZX7u3Mu)sSde99ctB z-BDWGTfr t1}F)HVCQ$K*u-?a$p-RV_K~ez<6u7h-hP< v}{_V%+_a`kd z&F_!fM^8G&PkScL`@p!G0bD}cH+|Oq;kbM3xM%FR@5AYf$@8I^>*0mZ@0UPoJpw)~ zKaQ_Fj)VAGx&weXn%#I>-2Tqq`N7`)u?QTu@dQ}de45| BEtk zgZ;DLtDA;woI)`IkpEA_3sA^p6@IJ?7A;A@%1Q~VQ 9GI$ZV zZ}mF*)mqG}jhchM6)oNsE`BcE{8F}a&)mN+KfJFvcwp|{F*ZNb*KPpd^kr>5R_}hT z+ qd-XCM0Pnp ejIu*0I_S3A#>+ns%{d6(?SzHV;M_FKz^} zQi2!+IJJ?y3Vb*foS-^4N)CmQ$C5P&vStc~0rDo#WX+?E0?RdhO4YpST7eZxp2c#m zISOt$`e6*?FmUzLwfqZ=!k8uzm4@L}I>9W^@<7G=bN%bX7T|1$T9fbwvnWn@3mm-= zr810YuubZ6PJiy6HQ<%|+BfgD9~idzZ-NWnh8K^ LQ(G)tq*p@PT9*{*3d!in~$|`j_QYx8s2_v8u6b}{ljVJ#CiABMbFel z_xL#|cU_?3y+7$0gZ(chPZZOZkT+G;cF{Er&@v5#6bNpd8iH2|CuJ_B=VK9&o8K}) z>zd1Lok*&FQ}Jd!zh}lZwMsz4QN=YOprnsEvY$V&n)7lw|Mhz5 JSMxV-7H{8zv|)qB4#ao&0TlJMN03^xz;4?=K%1Lc zdzf1JNlEJui`!pUcE7Lg{s64(d RrihWL>Ii$@Vb)NoS3y#~(n~Lqv9PZn=Wvt&8ESyIV zuExFEsM!2QV}GWB&cE@63Ea2$x#IAl`qS6yqpwia0tq0H*$v!R0ZQN2BdmW8@$Ed- z?R{<7|JJw67sGNngik+&ir-p%#s-7p fV`myyBo1cDc ze)_g~{C(>${DA)E@wbgn-!?ve+c^5RdGKvz`*8*4d+%}m;A!>nX<_H{*wUws $h_|OS?DiFD86KQ+Z$(p*k2LfJ73-MAgMbH6%o-s!Hav(nfM}=IZJWl2S&(key0W z$K&Psc%=jd PpN%d`+m1^ z;xME6y{NvYu%VxITt)4~G2`t{X77Ar`$XZpjkev#rrn2#o{4O5f2>?o@7zNo7cgMK z?D4bSncS(5wE2tT+4FKv!q#oc;$_+TRoTWReeImSdQpG$jkSFb!OM*CJr;<#kH151 ze+A6_&J*0!sTOYSwD(lK^H2r3w0jTrhmTN>MwBp qCk-QKjiVRM zW9Kbn=dB+uIwr2VCa=0CE;~N}>v8lu2s93Wr+xnV&Em~laJa5;@NW5Ln0-CGc=dMi zW_0y_V&iFQ`}@?^)5QAY_}V=Lp{Ca#!FpZV`>}fX$IAY192VR9!rpoUf?GfMZTskN zJ0JfJfX>$8ADf52Zyf!$dGs5!oX+8I>xVyJ%dG8xTRnh%#KG#}PaJ(+J^HqC_;uy* zY5DNW^1+vt{ioIaudDk%)(?MQ+J2f|xn}P?F716;*twrtzx=@dG`VuJa&R}dewIyZ z)X;ap5#@O?5-79?FIr4eoGL_87Qo6X${A^>+o`GAf|8HH$YHVapz!mdrTDQF;65E~ z2iPe%oGetPL1;jLpe#sI6&BMXkTuAnI@0pyTKb+^`W^~uHbh}66cO-3VJbpKg&?j4 z`61jmc_daIL)5?uX=8+SM3k)M^gY$BLv@|wG@TRFoRU Go7p+7kTtl@db$6ncdBjVtQovh@6TGtF5Abif8w$O zEVs$){`tFs#fPEA`@#8}p@rL5AmtWsh8J(%v9Cv#I2c{N`LM#l`0DN0^7RP&a(wOc z%+}Mw-jBuoAB%h67Qh*?`?PZKW8>rBHjn?dvj1)E;M>;GkKN-x4o?5===?u@y!g+b zF8 E92If%tyg|MbWH@gMuAf9wJM{e?gFPJiD${cZQ;$IkJO?N8sgK7HFd{ Wi&7 FUl5A>UQqx_CRa9Em=NgtXyP$*zu?tDw>5d z-kZY7 FAWt5#M5VO<^)HHpjWf7@l5Ts-ntZoru=$xWu2dtM&b<9+; zNma5)kT;2vF$mFih}X1^kkoKOVH5;Jv_%!oNiyIY))N%h#*o!;L=`?kWfUiSN)AV) z0tuq{Rm2o66%9N!EJHNyqLi(pl^v3Fe2Wx0dVZdYH%;B2p%qe24WP?{Ug=$67|OJa zsRg&cQ5a-)*O)~&89l2r3vaZIZg-69a!KrUOL^{*{=ySj548H?ccHKgSX0r}Gx4=^ zNezo>%}b!tXSXat0J6A!jnT7N(YI6id>2sn`nYN2yk+#Vb?mBj?4s?%Mf><=&-6{- z%x(Y7&GV_t{+TPtvlyJadbI#Fck^!P=Kb>L(Us3*tGA;ox9^v4M%Y*H*jMB0_cJ@+ z7WRLi-~VlP`|Au?pqq~iJFx#{brp3y)QkcZ_58$DU9sX8Ldq^88lFTISL+a(OKg=} zLQVSr!PR?sHPvq2qv!RtH+qLa2qpC1dlftO-g{Rph$w;`1QoGSRJ!z<00|@^A*A=v zdq;iGckjP&=f-os-@SK?H8Qp_D6pSB*LvofYd)D(FUq*@8|80m#X-An8c-7~ymuYG z|M5+e^b2e7Y)<9LHx)NZ+Fy05Fz5J$sd&!TzUB{S^$gu@;2(HbdAo-Ds73OiL6lV1 z{fw@D&!7A#n!Z>_y8@*UO`h33lH4e{RLVJD!ns*5Nn;IXi5Jq@V`=QsN7xy%h99vA z{Z9s$82H8Hqi4{OxShAW!%thg?Xq;)=@Wh4C+?DS*a=IIU6g>s4xy**!_JX|PC7?j zaF4y{5`NOeF;34KGT1;1`w%m-pM|ZjjYGhCeag!9Buwn;n7XbtbXsMAIZ&_VIH*(C z1 zxA7<21ydcplO4U|9fI*r;WU7cBbn*skFf>gTwt7RR;ZX40sHVOpAkxD1kxG4bc!#T z=1ZsfvZ-F#bgz8ozkzFf$z%^;4yY#{<4DH3rQ<}%5EI? MZxE#0kcye%v}42_-4EIo7$?EYG& zuV?IvIXR38yTF{nd$XNejJ0D3rT|u~C$BefhA3#gk%y^mm~Z4!JC7aaj++c@qyN_N z+CU07_e^w(Jh|h-%M%asFFY$v|K9nsl9%zl>(Z-oa_~W8j~(I1Qd0`r-?l1WG>Fc= zt-6%olv2mb<__lYhchvp&el9;D$_ev*D6^F83oCWqBOcPsfvH2jQgNbnod_eY>_6{ z_dafyXZGOpqtI?#`N2I~%(~Smeasoj63=CHk3Z&&;yRr@jB{?$0?6ndgxAZno*}aH z)_~} #mxW!RrG0>osq S7;ZNeLtnD zIk9q9teTUm=B1hinf5;+)!>gr2ozI%`9zO=g0GnDRZj7hQ#~rg1W$>W#G8ECgitmv z*UX5O6MX4Nw|Iap9^fj5xvG&mmY|g{XUPXUW!Q!C>zTreMwYdmHynYM5ymNSEHPcP z#>T+N&C)v9k{n91i$L|_ ^E<;jay|I5tMj4;^2eO11Se@=RGcD=F|GVb_^c7_sPzG|9bP_kOOy;@)~nm zWDm<(H^0)Z6g6Kjq2HQSZ>>E&)dzeGWJxt%aX<3qR=)c!=b=i{gKf5_p6Xblf5I6gBJ=HS{>XRehT< z9ZNq`O0bJ>f|Y%sskN7xwdcy!CM(vMt=6UBSG3m9dA*6p22%|AQr76Z8`?!$xF*;K z?Q@Sg<+J6YOWaw `%ZrM{i2?S#e(!w z;geF)vl0Qw`J5^_U=EoLC4FwS{6mB0b4!0deeg?b|CiQ*qPC$D=2!`Hw1hEI#u%>b z90B%~w)K~_4^%P+s+ogCG2b~@-#OU88f@l_5dEf}33|_DJAb-EFhhiJnkkxMiYA#t zBD#dA*HG?Fqlg2d2^Dw>W`($rO$%jHV#TaPIgd3jk}tifm=PhAv;Pfzep;ZI?o~{2 zrNF+?ZV3@w=@`I{fIs 6lnKDN QXIVsT8G62{|af~#x@`du> z)XdG;*xA6qo@DJsruf=Wd@OA|4b5EE>5wtxyB=8$zF0aGTh~~s&lV?Nz+dz_L+W2J zgVAxYa*SAK;I 09D43u#D%=5iyxyeevG^HY3sH8y?0B%)t`IPc=37j maedlv`a$(P-V$tI=@$+hBc2ocBdUaN %@!OPNDu%%LjQSS@Fwjx$~d5g~iDi96BC zo22n3Te`;(tzhG^i|d_X2 r0y(~R0{>vIbQCwfM>ZnTPK)}dh5gflff>3$jTO+y zk+gKnTf5~|E!}6Yq*C3&R;|Nf)o{Wvf}PU_9Y;MQ4=dX+2iJJqdndPeJ8FbEYF8sF zybqA&42 Aw?V4Xnm6RDm`@d zoUNRqOex{$3G0(WodXV#y>=PdV>m2+Jt=ynS?DVBF#oOBV-7!xKAIMN?D6@GvL|2J zxiykE<$SckbsS>D58XYGoO|;_{qs70Mt#rCV%phH)wh3iJcMgShvX?!meC=-S;;t& zS9Pn50X{gRS@gJ$|EQ+t0lEX R(9`lKC@jFO%+2QE3-zVaXf6RIJ&=b%sQiBe=h8=f{ zI7taOMD{!A8hOUjJ<-^4ld(e#gpX!+VU`Y|jvg^)HokhM&KnHumi=wGW&>tps2G%3 zXXpyx!+a;~v~ `rmr^}uf1J@*4o zpwfXl8@zq!DR>jSi@lJy?OMUUJ0(X`DvziBIQ6*p%+toR&zsM`Y`qB7%Wl8&hH>qE z=gm*7yZPMYqMk>kq8HW5m(}u@Rk9bApmK$o6{0uQ1oq{(3>35s jG-T0qZN1}Q1^8VR56F@SR+jwto-q2&L{%wzrFVl XFZgH48!|o`2gt>oERh9K6CXaJ6ZuzT+0(E!THl z%s!r6xarjMotLsNJt do*{dIxc^0yje=mVQC)M^KKNioXM$3Ovz2SkrjLSRm`Q#@N+Lb52hG~ov_+| zJ?Pq-!|z(oe&eRJLEb!drB;5E)}P!p{*XKKfID@cGnULAxz|0C+B5Fvf5ge>05*Gm zQKvDk=j6ZN#$!9#W4o=_PMEilJ+?vEZ|V@e(ZXNPD!|k>#LPCxz`|4C)YZt+W1YU; zstwkwHlSy_ zbIWaS%rfnH6m4hDn7uUdhX9FF2sOH zyn_!9{8SA6Ru2DG4E>V!FG@7?_$!HWMxmLPD3L;uEvJBz0`&}EJ>8?3ZWr`7vgL@5 z-o6%=yrPlwrKEY+q01;w{$6DUkw0dfV3+pSN-IlpkhA+H@b+Nr9bKc{y*HU!dal={ ztl2;U0_qz(T9Lh}9uekb@3nfAzt&i+(6L>qW4BTt<`&M&^{E>n61NXFruc8P^u*|z zo~5s~OS} %t3?{~piH=XPFubuqK-QCa6(hVpi4+mW1aSBsk;G<9dRi_+VK_Zv7DiyBY7 zuYB0plh)AlsFs`hgL5Ib=J3;Ru*o{{vhvD@)>Aok0q0*(kEDj)$~~RWyjd;1+uC=B z)_=W0bqBU(tntS^Gig234|x-*+_8r}qiOtcd-vUDwws*%4n%Fg5wr7_Cnyh}y^a9~ zT#>T__uF7X*<+`z?`~b2@Qs#11~wrU4v}~S%*g&E`yecPJObG5qNdnr;HYa1Qv(ZZ zeAbzGFC+B-lsT1lMyZ+U8(16~`S-}!|1~)LkG6kNrJcu`z&cR(|I`fpL=saCEUE^7 zs)v5#RnfmF$6eRXOZ(;mBy~tC} zvm{ufp#29y{ E z2y*s}@eSH$Me&DY6lQ^SjGRoYJV|x|mbQL+CeCa1?A9ANz}ji8uB{QtbFIETo_0g1 zpmiuFWIqFI-<5h)2)y)cf-wbcU>oTccGxZSsIh&54k>btS;#8W;8hl3j-e+KFT8&6 zq2pLe(cybvE@YJ5d(&_^y*O&`o#lq!q5G4LKhD4Xr70T&OW#`#Wftyxm4EqL!!w5H zy>Q@se)Xk-x(79^w_WNxC2a?ueu=pF*#CI4{}BxT+_4BhxyC(lnZxGQF58_Cq-=Tk z{lrJc(ND}<_3GsIkt_AeoAiOZon!YoQ};OIcUhx%StEBb3CA7x4ms%^deSZMFx3~r z)jf_ryY0MoklnXpE)!wrxz&mq4V|K~O`wfaq^)zLt_g Toh&H< z8}uDvSg^*xZH2DuI*4Iyql_Fkk-YZU2Of0@JZ|fE%r5YhOXOw$?e~NCriUDO8nEwa z=+VrWb7)K!C0s2a`qH Hhl_M^dX!KdHa?vgI1u(XZ)AZy9%?IQ+ lr)iTX|VH1Y0 7(0#`AA?$us(9;MNC``<`t&o|AAYchl+jv8Uh1o%^`?a>34<#k+2o?z<1E z>C#^AS@VULsPNlvy<^_Z>%#rM|FJ6_qhQ|zFN#H(WztNdFD=ddA La~wY=$S&O}w$2%?rVR>vK$<&HJ 3rJd~?_zCPA9{r#G!C#ub1*K+A zuAT+<0r(KOAQr*EqI&2Tf`C8ZUH^iNz`l80Ab^8n%`Eb&L_LdyNnoD_n}r35dO@sN z6l<{rfAZCf*nptXjb?b4XoA^0(%h*iDsQiA6=c7!h}m>#-FkD}`;Ab!t~C8?nSs86 zy}L&Y)g|1 hQ<4{+Z~!7Q=jsh4eHfw{ zH~<+ aFRHHRG@O1?cH+_ZyYE_3KeX?<^m@5vC^i1fjvJX*bE_Ygcc%VeUN34m zlKu5`UisrDZZ1!=_u0n_pR3a9IL{jSC$hf#pS-6ZvfCo+h*i`v6aW2xlOmTpBp3uA zb3gE4OG@E!c!!qoFI9+==|lG!qt}|XH`|BqbdKF)PuymW-DZv6VU6B{7?wNk8+O_^ z{FJlrerspgV{LUt-y!s%d+>g@pnaYp2OK>&TiS&hS^AJ1LTsJGk?ZhFK%uuz$5zkS z3C@Cg#?FT39;ViQt2bco%O0xOWgA>JS_H%P!-%@s%r(*4`=EWmDZ7BvPGOgP67EJH zdJ%U#I|e<=! >K&j zH;kl?=iffs+I`1Ha+Im(u8@N%cR#g1uaP`1 U)z`F^XYVMlV-g}3GBbIRhbWZ1+WS?e16mrc-eO882Ln3WE( zD;?sfJ8y(uc$tv=`S9C@Yn8pX8ssO6IY}J@Nu49-Th!-Tlo#pRYs|r0oUx?t@g&aJ zZT9G$?os!^!w#OitQ dI4PQ}5Lnqz4VpzbfcqF>4aufa&l z?YjSo^RR%MR>(`k0BngMt6YqRW%eI64x~8M=#nVj)vMk&YCg1RzR(B0GKP`v%GqN- zx+iM5lQo=)8h{{sq@FX@)HBh 8(1KgEpnk5B`F~^n90ZQ=7Q!F6A^(ub#D*gfR2~_{^0etc~Z16;yc{%E}(SNk# z|EPz50{GO!3w@(M2giO5j{fQ&LaC2}f3AOEVQ}cz;LvX*K(%&WsV4RU>b?c+0)Tzk z6cEujuN+v^4FCQEf6Bq1f8g(bu}{*sR0(3IKw#gzoY*PMOH}g`ylNML!hF>NzTqzM zBwFHlZDDKcJ7kRv`PT}@w+hC)k5!gdt}w3F(Y1rA+270c)~qo#w{UZI4R>~paCVLK z@QHVFkD@q+SlarVSbFIi!P&*l$s@+vKFHAAeVwiy>b{k0EwL}qGjcSy_C}FtYVCu% zPsh@0m67XeQ;#+9Ycloxm##C#ds|H6)jh`_`bV84Ic>%;xS7*tL+WN~ P7LC|6Qoi{@+W*y9|xm?V>RV%wx zCA!ZTN$woG+S-4uec&c@B#AY)6r*>r?d_gO=1zD79&rsg=;*!M)@>WvZ3~)oRG%Go z9$Ty-!?nkLC(z8=&)nJ j?NGqx1v%8(Da*)1zW|Z an; zJn;xvxb84?+-l;o%i8CNQz)K)hxz{g1tdV+dlhcHb{^L#g!%@5VG&>{{Mi{URsKZw z``;XhMerw7coQpQX^(&nB(ZhG&XDLD%!)O0LN&p+vC$+)@gtqCW2$Jpp%zYmHC Ks#V4-mKzuuIZ&w~ZmyBmHond-5pEtaPHvIr zR^EoDZWcCvUjADhTq3a))@-Dp$FpAF0rl-h1FDW8)x^q+Obs(8`)@S&TyNoJWFNYL z u3+0TC1$=2Y8B!B$0uP29yni*PA?Z`w&5!h}Z< 36-JM9(|mqbe7 z3D?NWKJmAMwxz}$%G!1+Z~K`~n~uMWKc2hoT>k!B<;Nb>A4_dG_ORh(dh@yGG@#zq z9Om^mOaR}#kL*+oO@8G+`Obg(ou5g}5lM0?B} DwyVJE-gHl^>ck1h3IHP}DJ4 z+&Kc&t47A-PSkKlYgj-%P_|>}LemA)NN6p+lXUSkO*qxUpJ?Qbv %=2sW(?8ere>LjUmM!0;lluWt}*e!hQTeqdmse_)Z=@PYwB(WjZiHOfH1AAk>K zAVL9R`2W4~2NqEP{)s<3U*cN3u!NO(Waef6?V5=-^Fs9kUpdc_PGj4P(hu<0(5bGX zNh+I#rM29`Qbz8ly1OZFu*pTyw|oUouP{bz*kEaE>+9wog#yrl8tUX4L3NF=rG}VV zdFdEBA+cfo+dD@f3*zvLmFukGp1f*<4az`_{aV=u*gA!oEUo{wrtTX_e!#xJ4PF1z zbvAK`3`sZ(> 7%fOr3I?87_S zp >x+d7*xFg+R#Ulq`xE zv2c)~@E6rA|x7IUu zF}3nFF!$PE D$JdIPEZT+DY;{ >tf z;<@}?7Yg@W`F`+L#qpH7vyWTOX3)-Lw4Qm=dhuo3mDh~xZ}13o-pyk@fE~bB%oJhL zMDU`d7eyZ)ft(8Qn@S1d?GHj@|Di!eY;qYxC9KiHw!W`zeU EroQ|&@*a!1=CA{0$@LQN~10cF+;?yL{{ z$9b&(F5wu0EuO&o=gZK5|0z=a7OQ^?l?wvJtUxgXRzg0opdMaSk1V3%QxDB+hUT>c zSoTB^z&E(ij{xuy^*{B<(TDk0-qfU)cD-m6-79WCknv^L{dY;98Yp4=^r(@(i5HHi zygT#o!;#yscV2w#5_?q7C3cl<=t`TAzbym*vJ6~B-DDJW&;}xzZCA;gFL)n)u=8R5 zsdtUB_dZ76&AVF8z1<|gO~bIa@@Bi{8eM&vrn*d5UuX2+>KeMk9!X}8{)v?CF$;%S zC~(avk(PFm=HyUw>mUo8AZtnp*)G_|Ho(Z(8Gesz)>)&>+o%V}D?4O wB2n$GQa_rg-nOblYX>lxRdvbcwv=yZN@?*1Ms59&bMJX3wSk{a3#oyit7k zR@srHisScc&OU6qm_fh%yyMcd_G_=0ci-`n^LkP~_N075bU!M YnKe_E-gL |>!fVrjQhLWBoBce+>joO%nSIHzpILeYvaFsKHzD3c%Pl0BhC!c1C z##rb!OD9lLA<+pG;1_-=`u np&$qL$@>9<(=zRpd?^DW!H=shI}RtLd8q z(Mu3r!~cNqK>R8Fkoo|B;6Ct*90>LoScaNT(ZBHj!#?D?KdcAwS4(>YU>{K}64-~< z06L?y5-r#eqSwHYO$xL>LDMvJY49V{d%*jSg09Q2 Tfg4Q!otnXHNwj?*4sPY%PY>!E!u$^Mj{88Sok=(#W}b{n_2tA*}}lg z)7a7%uK+<1BBs{9X!z-oe08jREnK3l+~f4f!OQhsH)24@Aqsv_2TrF2$DT2_3CC2A z9yt=e2CkdVpUn7v^FvEoIrl}q_*{0?v8Ue-rR7JRO*8V^Y!kfuNb37NNtq`e zPySdFb2^z6zRwV*Y~EYeI7BS73Rv&HS }1-ptm-|_O1Gwe zJ%ma5^6n()zPpC65-VSIr9*qULwl`r;1+xME_du6ckB*l^fqhwE_=j^x(SZ}$uZ8> zC4q$LT~Z)`4-$22yI`tol&xK$v8fBJ?s2Tk8k~Bt+5!?O)V#))-Uen~|5{D{*J_Hc znZJWqqAfZC?l{q8r=jC^O2BbE0v@r~{kGkYIrMVJnGd_p=kK{xwC~FI1K05UJI%^f zGYV|mmO9>2)eN?9O7y@{(h!U3KdBE%@6U}#f<@n3q?#71ris#Mi7J!f9p#izF-g3S z*0*M^S3TPeb%YWO?RX=ruTwhH${YRBuCAb|F>O-TqRuX0W`Cx?FKB)K>T7WDc71(} zb{ni+3vW*|eLb=b$-|i%;t0;)Db&w5!P_Un&LPyq%nSG4)pN7GbBv*>5B!+*jJ>UF zL!pR3GBmUCCqdY68>nv+fSTXNbCab@jHz9?jcdG(Q=APoj^dKwAAS_F`Sqs$#*Xo8 zNnsYgyArRzKA8IX^84D *}d$LXB1)0y9&RIt3Zoi%ccwGZ33|LXI-7c(OFTyqTG zYwnh?o*cH!% 5|{!hv;i=x$|Mmy^lK{7M{*)+54(;e@@Mf zYQg0y{ T0Xva*O;5O?jhTbBob;n>lc=b1=DUD20WN_ZUXC!OfbG!!XWa zX&d6;5{uJ}-8|z>Ej%~s+MAhs;C0 `wW~ zyYY&7E34~9X6Nl3PU=U&qtC)eUj&c7^rn8{J}&HeRxHS@lw?;EyvEyVd0s7{xBpP1 zK;2i+L`XKiwhbY^cMO+yjaGI~0Q-J`(B(}u^@7nrRX^EE^eNGlo`m9%C7xpnq0Sfs z_Mxf=@UdmH1pE<@M^t>+A$Ex;7{ZZG@fhH*TQSX3&Gc&K1gNA`Gd#sqw`>wQP@n|4 z@KdJw4eXQm{gP=H33Ud+#m*^+fLLQvqMndxrsRE)b<7Z k)EgcDztQRf z_5t|h%4viGE1y{Wvncx1;7y1o7lD05eK+!tX5^ngtcOH{zA66wS(%pTj$y-#z?Vn~ z>USy70@Kb3)N}ae#RLD~M=NU qFC%m&NBVrdn7y zuUKIK>|3+iZ1rk06Jx52bEvCJxT{NqhkLZY?-n=r7%P&Wj=r<2XM%_CHVQQgvzt1G z?#AZ67UUo-esgO-QyV{$Q-r>?pAN~_#4+5)E5XDOhQGchcHvgk7+3$@n|56b-*k@b z7` v0nJ_0!^qL?vUg0i1IhH9rtFiV##qE$l|;F+I*CI@|K z%olM%<4b38*Z 2Bo=Pc_>E9MR4T`iTT60f9OAThjka zs6xU2Q>w;YCvH5^YF^4YQY}&TC 0_a`OL(wSzuc%Sg|4Y^P z6C?#1)Kb+f$STnF#2=T0J!o#DyMtyA(cr K1%O%Qb zA)4FrNr7Tg00pFKnx~xR$dSg;ry!KJ;O&~ahif_q8aZPS>K4?=-hS`?RNDRabMy18 z;^dTUPp??G8=&Kj6|iE3p`oE&NYFM $bse#p{DksMwDPvY6QtG*2XQ)+9ihM7-eY}VeJqV9(UR& z GRRc08l-`lp6_WsEx|^cw{Yw+ot{lrbWY-?a_FyyMQ$?HByx zPTG6#fQLGGgbh|9%Zz-NnFg-4i#7DxO$tBhz3+bTi6 lmzfM!$YEvh*t8ce!?zU_0!JwMa|FCn=5Qb~y zFk_n#L(2d|Gar&|u&aBVhi5#=#t%bW=9XUTHrlORYqM^ny|IO_sa1fHg})9ee9Iss zn{ZRCV~<_t)U5`#o6MYdS-9<^1f29vNb=cyJ7RyvwlnYcT>iZM9N3NAz1Iqk-7Pzt zT5~bI>FRU(tt{r9H|%?FyYJ+%lXH0hzQ RGU#)#{y)}f zKEOL*3I6gMHASrh-`a-}-#f6?1^kTw`#^Iv_D<8p^EA;ct#=w~oK_4J^-OdMra2M_ z(w6qN|6BC^7x?}c``A)E2ovZL0y}!tv&7=>TM%OXBXEI|N PX0jT hcKYi%pqiwIo^Y0>j&5+#v z-u$qHmQ};vfAhI>=pOJ!FcLAf3Dd{XS4Mto^?Y>ALg63c6MxAm>O48@3@Pla*S^$* zn;-XQR7PHZdmyv=>UYkqik?$A6{oP{dNu!clO&n0NN!i$Y!TjThv$#>A*&yA9S`B> z4@)1q@?o1gtzG-LU8`&54~r#pyKq~lXq5V<=H3Pd&X{92HFeX|r^1^BwzeA$-1N b}^sGqy;+y1UvE*fm zB(qGC1#+tzoR%W5PW8E=FTb(BuxX&Eb?7T?_*>h^_x926jM3sHQ7S|`m27k_ry6@^ zS_Jbn;T)|O*auZ2T7B5C&2~!{*wT5nbPnn6PsRfXqWE8`|Nn!19QiDwTQNg~k_fJP zwnsb1@0%x9z`!ptND%c;iTbxx^INL@B}HpTgXZGAm{4I55)8#4D)Tu6I-QCE)NX`m zhv4CfY>5N~j9ZjzuymmCpBBg<_nrZS$u)~Iv?>X(`=jZ`HU8N-2zx|?ya(wH-OWV_ zR6TgrE&yR)9SZ`*ms+SVU~Zhzx2*uQjjHj+YvxBGa bvzc#dn953r^#SG9iZ>ScR-J@>^r%zmXJS>wnNT_!uepxJAfG&%G%T=d$8& z YwXKEc}WbSQh;bTJ%bZ`iTyD2f?VCcMh9nO`oAtsj$Jq#@Z zO{~G~MPQ!`_j+r$owi>4^~jsnTgFoSj(Nvk580U#vF~xv&eToEU+=qGu>V@Yo-3dC z-N-+7zw| dia3dCuzVh+Ja5L$%=fqJ1=HP2Vg z_bBIh%2~X*biKeM`t9>Q#3yI@*oC6VmrrtJ0Ie~WY^+N<%92mC35T1x{VlxV<{mJA z#Jw+T8z`X-d~MQxs1W9ra6Wuze*E74`Fq>hD;ai9VHk2m-)^I>&Dyo5PENr-K5@u? zj*cN79qA&qQ_1q3mWPKyQ^*U%Z1(F;fpFRZV93z+A mIT zooU6VKhUpy=UhPE`_gu~gnhS3l0sM9r^}P+(z`Tqa+@p__Do&c$6c^6Q>C`aQ(NJN ztW0lHXSAs|qLQZs+quX41nu?@+U4LFVQAn2I~O>bVzd*Ev~cMlQ)94mv8KkM4{Az@ zF`>j7Qs82?$ l^8s7#CLDW(bmzVKUi`7F{nrXlB$uDKUv@5|`pT=u zTW{!hav8Vbkb{ P;ahVIp3{7%{<3Z%%A`yLOI>7n&uKQ zOK`yIUm$vy;wK>|1B&5IAQ8$jXfZ%lpkg2V1p%TGYMlO`L~RK11(7WmrO=@PI?)f8 z&-RGNxx(=t@q|zT_(QgYVu$#cm>`emMJh1%Xj*~1K(d91n@G96>N$am2q7i{2yn!I zy&xpsK?4F>+DWdQn0Mk3kHC1ha;if#`e*&O@+TS~XKEiP1ux#(U(~41E8~BFvF*3E zHy>-S-F_7wd(gnd8K$*>zxC@a936w)-6LIG!m;?heKrLJC3^d8#Sx>9&T(#@+Z>z| zOe})eZFF6;j%s8EwSS PDxDBk=~=2R-s%0}MHu99N%?0v2J zZH3}fU4LQo$XD7}A#J#zb*O+gR7fBGhDE>}FX@^nXH8agjaNXm${eX?jWux5xSs0} z%`*^!IR<~GOEkw4&tv1)C5H3`vivE~U>(9K20Gi4S(bc`t(Zq}aQoGZT+L6OmI$t9 zfuo*dD`#1XSvDF!vPG_Rfh(EkO6IyHGh8Wl6Vu)DDNtfOR7w!Ef+Xu(6lfQ4+kj16 z8B*?SH!
CJ7e<=^R%&%MoJ|ZiXes?sS^7Br5{I zfwJNdxtiFL-~uWmjvRt&ByD1j0PUP^d;_v603S;_&XN+q*GUArRzuCaftH@(Cf;Z* zdl&_OdHY}qeGu695ynKtoUDSjSD%~T715I(eT?3EifG#!*st9HcPCwvwWp_Nw6}L0 z$;#8gA=up`&eMB~w_l>O`xX)<(%LRs-^3SoOgL;C*k^4YW@zPW?HWz-h$p+nnL9?{ z#$(ungl&RTG}%7fiVV^;+|_HFo$IFcST4Xma)^O#$hIr#simzs9m2Glj--O>8+qmD zpMCb(azfwIcdd@It@9=$^FSk$Kr_n-BlB<@$L&sjM_fWrJBFY0*_piMO5VXo i|Ag9@IkxuK24ND7pHc}9(Kqcw2JRH z3GO%aK5UXaZjooSC@h^K%pG9b6Kd@c?%)(f!fG~h(^+q4WZ+_A3Ry=W$v(=~IUY{6 z)=mj%)*6wc;jzEQG;EDoq%Jvu?0v*1?nW@wiaS!mal+Ehhe3&HyDok@db{LIYSo4G zx{J^2u4Fdc$boMSJ?TwbQV#ugHa+=W=cA9@CxyZn-=xorBmlk_UnQ9(GOYi%n6a%= z LYXGi;6YgE zg*F6VqF5BF@P+d{tZ@El7jJ~!JI0fMt(#xc|GS5oxx^aUhT(8XbK59e>Sk-Z1d{D$ zit}zK-=n@USEBc&MIOr7ekJeFql(1)#TVXp+$j~_D(Ssd){C0|d?DlF_s+X@y^m 9<_-w7}7uS1T!HW(r4|mXKnK5bomRK;w4St;1Najj4>x;XMs~X9jxs` z9bIFr?LxtOk*U#S=Qtd>rDNs~ducnj9Ts+*Ov&*Uc3WKhjyd}scMUw_8+9#i|C59x zFC+Io_1SWN`}w?ckLxczYdM= sn?If(Gv`2aiIZwOQo zGiZ6D_t^n`z5v)a( )iFCsHDS28#gV=s(z}{n@Sk$ gB~~$1PIRbs-f+N4sw=*^(3AK&4%43vzG`MS}^$29N`=b<`x(M=8VAK z0u~e;;S5WJ #=80xdxrpbk4RHfC$g=dyJu`*$Sx0`t&T476vtQx z*UcuDLF))t5(+HLtSBMIB!3gzU`uMGjcY7u4rjmZ4j!AVD4`UG2pmgqWgTQ?6-0H3 z$IR$zLw9rMSR?WgxYc>SQPIk!`EEw^Or<%gbIPFQ*-Y_#;(HS;4oZ6evl z*ihohcAL#@;wi3s+=Ea1Z@S^X<8IXP7l}y)ds9nKy>7nviFxj0`^Cb}%iq~oOS`X? zbM7^W9?|8gbm^_S?%NH#G=}UkQ=U$QA_GTy;qc!!SvpPngeH4NQ#@-`klmteU8Brw z19VN?4b40;&u3}nXJzT@NR4!IiK9?sO{_yUnE2xGRUOkH6LK_8rZcpOHMH4e<-Et< z_qcP&xsdJmqxPnU?Rw Z7;+N7sTMx}+L@NukoxAw{a4@pqxM0px?&Z^QB7B`GdD1@quBepc|>|(`{xmD zPYrkTOz;id?GvzvWE&2`-^k1x`#>;2Iwqbgb*Z@h6b}qVY{yBYFfW6x9UOtE)M$jc znU9I7w;3tGj1r<}9RU50v2&zb{NYn+Z*RUUKKb~qZOHa@*4}H)J*_>r;B*i}>#&U` zn2X+|V-&p6AlNVBf=|??psly#jy#J!_3F@rk}J9G=ikz=<+GEDdy`6g?^cSgednC} z(tf$PGr3Ois1>#ry(vvSDb2ixtv#3n$shvby@CuH&Vdj;X%Rhb5kGH{yl9bl1|(q7 zuhX~JHF33}MnJ1$VD7DJ>S=Bp3iD#{|CmKHqW}cAICvylJ8rdh*zVxA*FWsMcgQ*K z(2L=l?`=Plx#Pr}_#>I2dos41dw=3l_08O_t8W;vdA@{WJhD4(K&SYo^X_~0gU>x_ zg~F%bB`=EQFH7Vvi{&rAN?(_$aw;_0<*MxRKiH>6>6cw0L+SUXO7Wqw|6{{IUTy#9 z#^L;y(Sp{|{MOO0?c*h#ljW>wL<#CX=GcGB{>j?zNtFG-z9!yuD{q=kRQ@wW5L1{4 zVm#^p1P~CQgGx|3-yvSoH9`O)o#}-1Lovs~Y=~-sr6z(+VBask@*lqZH&6PLD_I1G z!d)6 )0}C>rlyBbWYPsw zZ9 a#L35ioQO}!f0O!e_z#J}q zO|88UGeF*ez;6nM6U0Osq65El1o9!#07qTDz>zQFwM#nBl*}=Rr7+8o%rc2}Fwau_ z qd4$q2(}pV!T%3=h7Du~@n1~-S!WC(WJTC?EVT3I=)4&kcM7JRbVT38n) zQvRz-;ghedhj0+iYk2yp;n1bW&c5-h*ITaKi1T@k)@`t~bM$xf#BMFp-YL}4Il|L- zt6$J=51*Z6`zVras5K=N_a2C5Y~{DX!~^6OYJNu_SV0_e_1y}>+}b9{3E1ZlX>RJh zVS|Gq0Vu(cfBmiNs80zD-hJ-uqqj%yz4YCFe3cP(CAd}lP+OlJW@rak1g|mh)3pdU zB*j`f?(hshZ{fPvE&B4_8=o(MJNUr7Q^>tp*bVHvf+*nJEf-$<%D(WW{Z>Wy!$#4g zW?^z&cUmh7K>ouPZaR&hLF1>lB6`wWdeWQt>5aWl8U;8B^LdlV(LEA_Njk>P=45{d z_c)*)>=ic{d&0UCuGJ{|% ts1a|f)Hzj}-1>o!&BLEtM-YW{ z5WVANUD)SNmJ)NgqeQjO!NkgBJyrz*yf1eW>mSPr#0Tns_zpnlL%_$<;{Ol)0h=(e zw1j OaJsJesg7b5D4sp(3_`R 0oEw)f1mabf2-%jC}h>DssxFgWYrPvIJNweaSq!Ka%y z(MtILc*Pkz?Qje}>636HC^04caK`qld6% ict>hCk58KhY;X)5idOO9emXu1Cw5BW29NGR8m!a{%yH%Nc3ljyLiq8i*Lj zE5M?uXA&CzR>34qFhLWH(*@(uIHKA|QbHi@5H&ffaq$A~D2Lb+E`S(gEk&1PzLSVK zrg)AcSwzO`7B8|z^K9^EqB)Lu9z+Is2c$T{y=N)tJuo{U{0<103nIs2$3XyJYxh(W z8=8xeM#6=9q!|_o9H1UdtcR=H2dWu^wOu2P-4log&Uih0tPUes2-e6SKLuRWbPZ!J z>qi&1Hj@Zk5Hl+5k%sP(W>^>th*F _O#Ef8J`-{-c@cta>K;d=kN9A|N2{R^;#2iD;L0@JvGSQ zDFjk~cb^0_x~Z=5FzU3&eh{gQ6iBiSv9b#Vvt>%bd}}z!4!?-~o`IN&igR`b@P*rv zgDp(GRxCGPv!0@3;=a ^0X$w-KwsqZQ>_wg2%1gr*!^PTF(<2FQbK<(ag(e;$<}QpEmYBYZ3zc z%x%1NjHsq0A6T$i+J&sscZLH8%-XTrHLwaqqah&b1az4;&RcO3p{+}zN8pKo$V+|^ zm%_K+i`|_TyE`L1@zLhv*&sM>W_4W8?zogiKlQBfG|suf32xbp8#(OT@3{B#dLMle zrx!^PX$9icFTH66!lz%Qudvnqp?&j1lU<>DU9QNfRK2UxysyFY@2y5x<{J^p@68CD z1)% x$mY&ge2z8}UWlzxgL!fHeauj=`HJz$DRzE&a z-8ED~SAV6cztFU=8&prKrD^5Dv|=1P(fzofJtep1@%!qB*~LfBCmWh!=TG{3l@W$L z3{4y?tvxA@L0*0d6l$m~HO$2;!PR? E6m8>-Gh4j$EPUWz;^w#A zD`1CTP+~~P9(zg%$->tPRkW_diWO$iMd@02>XCgnpu)HEFd+NexW?ezZZn5S5@x?C zQ7h5Wv HjV==7M9f-T75PF_2_f)04%%o)!e6!#tO!AC+8u7qv7;S+t)JLXEn z?$qGK2Vr|3#~sbwcfA0>cP^v;*n`UbcZ*ME)ZY5QN-GiH%jYHKu~I%0=`Q1|^hK#E zvr_Y_O!e%$>~VoGqfq?(yDY0hmGc9rr_BZA)%M}_U5(~lwK}&36t6a~z8~?vVeozP z2(a(-683$j4d>H_zP1ko``|TJ-Z@mx=r4z#T<0LLuaP&7$t6@nC;%bu{%?%d@rD|B zLrp!yEs*-b`BwmPVF~;A)15t2a1dq*W?6!{uHG5srA`4jh&i?ds*uGl$wH@i9u*u* zG~W$;6fJOs^PHt?qVfksV$K)kclRjDc(^vUasX{ZEo>MH!+Lm%);$5s{RYMm{MsA3 z5JNSLejKy)1E(!92C6y+E87OkY5j0Lu4D|?u*R#A!x T>!j9ye%JjUN%PBeG35S-g(EDqJ!SdDU zd|6mnx!O>CfqmZon=#^P?;Hu6GZ)XzRF_yXc79PI-h z#6D_;k =fF2rk2X}r9x%t5E0yFSX{Jn#&DoQ3wsov z{EeN%^^CzrCQeour*S3`xWGvaI9jW`RaM%mE~UZv6@8b%?=1sGjeQ06+Jd^i!uo-N z+P=?K>JOEQ4;47MP*qrulWnx$8r2Bmw8Cc1_ZIC}L~Gx7^lWH27NxJEeXyo;7+G{F z(}EZSJqFa9fP-jrH(Z?hYPz)5U42!ozH+AKYa8a dk*8kW z{?vK$dG(Ha`RCuZq}50t)<`brGwzi2+%D<4UdXxfnRza^^$HSrt?+q^^f_^$z344V z`Ly}}A?v-v+rF-B(V1j!l1Va2+$~G8#NK=FofMlYRY*xx@4bt?6JRI7-a!xq2^RET z*+~EdK(P0sV#iKqGLt*+-g)JZw|->GeDC?&3m-(u_Gh1S*4by5wbj{!l0u$x&s2q6 zRS{2J#2qQ(j1_Uli#d~U{SF=RAS7r%CnRVOnFUzdM;*0}Ftdqt^*QVAf5Fk~45knJ zMc%~d!GQQj0f|pTlhXW8zHyFz>=yqr>=NnBlh&)*%sWM#dnEqtLeA|X_JeZaOLQW& zjboD6K@GcjWp?64~iNUt8n^2e|_?$!9DK7{zrd0 zj=( ?B%?dhF~n~7jR;i;N8q%t T?-lcNpwJOeSitu)|Ae}xz;?7n|=1GWP;ZEaEl!_;cxT<`XERQYC=ST~= z@* ZUx8O zgO~|suzAKj@H_d^Irgzj;tSv8+> dSg&P{vcqG$Nkg$X$Y@927OH zm<9^!c_5$4TW;pBRPS*gmY>32u4OIMvgY@>k0v2RDS8P{c!eon0rz3;L4T|fs1 u zgnoe% LR5jkDN3IN#JeOQGqisk$1fo Kt06vKOhW1?tc|6?48=^PSwKZqYhjyiVgUce3X&@Qcn{z@Qtp zVuPy&3*!;{UVx5 uVRj&oNE)!)C=?t(6sNHOzTn?^p2MgOp$2v z!d6}tO-!K*a!T4E?0@K}`!Dul{y+QKSD$`POloy>jsE7S53V?O|5MgZ2!IEhS^6D5 z;&t#_ucMZrjF8U{x|!RBz~l4qJ7Mn ZVJo#>v&= W)@N39*y|)OFwhl1Y6g0j^39%LT|f--nI+AX&rLY_srY4`&B8~v|DAY zYb67h$bA<}`tG-g?=%Tgs|U`P&{Il!uapnouHhB34HU&{t$L+Ipxs;45fX2NEEp-` zD)U%UEdL(ysqquCV4Tc{&p%#-wP%fCHo>{P29mw7H`ep_s7l;d|c0FWJWVL`d|V zu-N-PVb?8OPkTk(4Lz3@bRqMgf2vi?!{~>UhjsERWNtD>m{yAKREqCb2=A8*U)L!! zn@7NUIZeZ4+BB4cG4d$4V?4Kg3{zjwms#4YuYk59(@@?E)0g)WbsRN=CJ-N@7!907 z&|mG439H`1UvA~EH1Xl OV9+MpV2`e&>H!)Rh zUxxJyF@$S#K)B9eFLe(tFj$K{gA3jL^Hk Yi_6m)?+{Ie#W@9GZ%8&%k zCde0Q0wT@=oi(HexFZOcEHWg<9;uO`Ffo*-R*|lTtEmvoW--Pv5~8?&vV35ophKL~ zFjU&ctD}j_8~dNVDfJ0B4uxXOr2ffIzWA5lS{yj+VQCu%jWhUn_MX_NF(`*KxAL{L z_B{x37fT !42DL1kFeMFbrYCk-GDD%vG zCpG?FYWQAC|soSq?m`Ih@8gIhqBQ5q+^dguE&t1RI Kpj_dhtR9*H{jfboNZ;;B;}9JhzFP*DzSo&adwh)wXlf z^XonR6Mq4DCUmX-^S8hL#2RfIRu17utb-0)1=_jBxO>ODxJ9Dp*TFH^)jiV9GuqxM z Gx zp$wcQ(^4vWlS_Lpm-XGN=aB@)a@l-|SYIa574s*Gc%x+DSP@s9&ywd35m#R^Petad zNxWe)ev3C=!kZv-CQ0lGVn~5YteIsfMhx3I#e4ZDyLzAZ47dd1i->#R7k }GV* zn~>A5JrkbVM?dgM&W?FVIh#$tL>jtCVqYS0uayfQ)+wIUD>1(LS+yjiQC-|QS<#~} zXXqe0K p{fo4|1v+!Fi$2%ZX=rTK)i!A=YA4B+V}+%|Mdf3ps;QD1ZE?kPQTbF+`DAg~ zL}BS@9!Zs5Aj{5|6q0cMefl5M6gQf==PP?o6}MliU_5LSW)F@Ra5Y&2qv=d#K6fl@ zP?^tB!{^UuE3*2 A=0tIgajS# zHw=f_i-$v^2R5j}&;M#F=vZun`yg#FII+z| <=>icT&`NAteLDVq^Tv z6et7UKC%F4{9gMD_f4z`rZxrBTSNQY2NkeM;tt$XciQER>~PgPT;&c|vCEO}3<@?G zgR6{zHRjOf5PN4}Xp7df)Y@)rY}B =@vdK!)Sb6bS1$nZfL{m|sD=(QT zFVR<)%~qDpm643(LVa<*t|(VikTaQ+K9c!Lk@ifI`9hYLrY7Z1loo1pGlpM26TEoJ z%FYy(l@2#GYul+a^uF0a?jm2dCRD9U#!%{mSl0)s7U{0#Zn2?TYV1`l^p7leh>R^l zQ;T%9PPkabHdZ3#IjF71?bo9swF^njoYGcKRXeY`jeYLw3k$n|fBN}XKl%ALzy8Du z0yPK0VrD)^tO6Wdqa9r%t?h!2ntM4og}Jy#yLiMnx OG#{a-pRAX6?|6 zE?F^OU&zzsvc`%9lX+|;vqnlp;{_ZgeEysPaXwpK%vF)O#QrC-hf6qPWxUC9?0??0 zm2If4L)7PAdz#xsI(wXP^G$Z~KJOKn8W?%oJLGCW)a}s3C$SeY-J|c@N8E8ue1772 zQ*tgNrLg}DKFORb<-+TgqNfOLbWEnVPrRT=Gn$m7uF2Ydl&cX_{m_I?W@um~=tgJ4 z=_9xg1-l?V)N50QW-$+r*#E+nHW9e*FZ&<;=`fHWF+qm~M{l)Nh%z>uf8Vj(=cDBG zi8`{OsnSqiHC0unY^on&G7ZCH@0FN~grP;4+oj)?&+PCgaXjW3%7tF_a^DEb0hU_% z^9?LhJ&J|<4b@Ct?V!GihtoAv#T+G3#pEs#xs#t;$0%>-oV)qvAAkMrufN1BZOdPO zY6Y+6t8bhSAMtQ-40Cjev~voxaR_yAiSqJ2;pP=@ZXF068ylwxSFd<8>tM9~y8E2) z4otFfibf0xX>eqQKK;V^CqF&>PrtA ZX?-eiU!h1ovjg(2J3V7 RledtQkRSoE?2Mzm1 zVa?XDO%2@ndJr5)kZr2}t0GGih>tT5kpfsFd%k`MD>dK5h2k*!mo};54Vq+~E=8DQ z9R$~pv^L@K5s5$+QijNBBdIw`)b^mlXK;9D05-DQH@wXl-ee*GHua9H`M}qHz|{v0 zALv-1j7MceK{wI-Bbx^OAqB7j$rEs&0EREfiB4^crnlk!;r8S1U4wi=)^SHLvWo%J zT-g>|yb0DD;BGPp*LoPs-Q7!c+HwzVh1R*$+GMP&o~|w%r<70DmQB}{XsQb*D)YxH z@+Yf`v^B;0sv<*K{tPKcTa>LS%F-5R>vP^rW;`EBf1=KQIacsyvgqwp{;RR cJ zfRok^m{olYsV<+uGk7dO2ie>v#MKM!FhRfj-04@pvqy)BjZ5NTn`6H@5b(tjltQMQ zOwISl<$C7r?exyX8zpw(cRq1CZ61Cn{t4wq>EN}}fg4pUNV8n3#QFDIV=C5|@>L?j zFJHl2w7rDzdOsrncnIJ{0F!O>%C~xzTPSy>t2TQfVmG=yh!g;xYDjlOz-NXi;gV^g zUV`;rQ_rCE718?@;n vPtc^R^muHmY7PkRQ+F z+#Y*-Rhe;XxZv@4MY^uO(AYqpp_EKik`?teDjIc?FI
Z z78%M#hH9CiUh9^xB1b^9LbDf}*$a& x90 zg71(Da`H&<2|n-ccjmBV$iIB%{Pnkfzx&GlH($7Zb=d!adB{ BH~{g7P>Rltg^)yL(NTjm24L<)U?Eu?-2JJ!$ i-mN0^u+O|#&wf T!T4Mce%e=rT@pAEqng1c)x zgm{%3T-gR&ygtZXWezPfm`go9i*(vzH+7+_b-uI7)K+I~tuZuKYHLd-tBb}e^G7I! zQw_!Xx_oVIzLt_dLn$!S wOwO~(tjFU8FEwT9vsGF1 z73s5uPbV|(C|_L@=R6wAeTwt%-}b0elF!o@2@H?gg&6~*#p0QA`D_|fk;ar~vxf8e zV>v@ASRrqeB%CM_O_mC$VC5oBrDUc`tgjHwICvcQ48CaL6z|}3!9C=fTgZ)X9Zx$3 zUH3Zn$UWwvSK>2V!gul*4~hrw6b;-Vu^v?l@0IW#V&GY$`c 2Sr1xpB?O2=hAj)HM7)8 zeRuUNvu?S&a<;2XPc1XhD;7G*bFGD@mi+nF!iCnt#pZ&=hP;KEY!j?Lf4Q-Eqq%si zsc^GCccV6Yjgq-qo4Hz-v09h5TKjgH@*1{+&+3;;)vp(-)8=b3Of^|EHMvtYMPqek zqpfvgw9W};zgDbRmLT1&UJ#A1NHm+mX+-;$;rG!MOLWC5UA{(z`U7W~#@px;tatF2 zo7i(TgLr{MEM%0-P?z?p$qacx2d{)C$f@f|xtoRp$DjO %g9*2SZj-q$%pbu1Wj@U#T zwT-l}k3r4MVaHh8z!ZnDD*-2;hF?evI`=l_TH%QYRVSZN0xsq_BtA1g_P{*u(dmqi zD`i6$OZzXD4;;_yJYGP3*sZ$Uz)mP?kI1OKQP0jAnkI>6pLfa9`$vj}x++ZUWew-B zhl>Og1^m&RAw|xhyb#{LV5~$m@%Q~N)>Vu3pg$xU-2KlZm+9bj&Mn}wSJ*8FpGyw@ zSKPvH2cLL}z`jr7v!Ju-rytf_%ckEi<=!sgJg5>qs*ygRNS`&To;MA@XdZrpBhZ0t zu?AzEYnaB`enM-YmgqpAsoFmRL;4yPC=c=czu5l%Cnyj89e1ILaP$_N3DzShZ{POz z|57tr*9EKS-R#Exhtnrn>p^y3j`JU&tIHp6tDL4aX&GHJ{Y-;YzAnWe5!EtBxg;3h z5Kiy#CU<(|h>py6NtXJDcY4I@-JF#k&RREbt&@lL7$Uw>&zqz0W-Hj*9GX0vDlVXl z)0+kg+u7+Ao#Bb8UmtP(?WY!p4my1Ln{N*vu(z@DGqdn_@kn&{K4s$&V{RR8=M?Mg zdBPf#+o9Ei1-6c`N5ije)aQr%&;fQBqDZ#UPCjRyeb1RY#(i-l$ig|n(({yUaEkBA zhr#DwMqSQ4euw D0EA9KnTj>z2bb<14-C_B~tKFD2 zB0*9Ux7^y$e>Y;D(kAGSso3YfO*nmh@|`|{`*wSW-wlj^U{8JIPJe_bwMhF>hVpIw zcS^J{p_L7KKGWNydUPngQ)|$#_T#Yjdnt+$6_}#?opRzkkz$kCuV=I8c$@_udy(Bg z&+40J_b&37>w>;59({ALZJAL&-`}{*YFY22Ec8^)GHVujEnCd$1sYl3MVc9?Ug;@Y zrWP%>7c5bWS360o?ZqoCh0C?sa}D`ReYL;uDBEo#?@&wM(<^`9L4Mzmvr+SQsWo?} zHD|m2%}Qh1dQ0YZNACO1{O>voKeQKYH{~qXWXx1$PSh5RcTjYUc0IF4-^bKS z+c|PU0pB}|9LL@ss`^@6dH}=++-mcE!o?eL_J|`Vr;|`kz+BwHM zxnr {08`BUYg(k#P1p<>GzX#yReYO}Ha!!0n lqvt6rr+74jA9jkv z{`WieB N!X1y;L=H zt$}~HLwbVL6_eAHP=NCvh+NACQ3{F{ZsitJu|>H0@-3q9Q@IQ4k#F~^b_U0A<9)}Q zB7{xE)9 eR4M!pkCcUZhN7I&S)-QaOH1gv#2 zYn|0SN2{M|uNh~ynmE+eq1L6YN ~rgEnDiZ-eNa=9ISiSSF_zq*=99=&ujlfoxX4U KYw9dppw}*TQ4G`u zZD;djSH~o-Wubgkpju@smU*KaBK*hBeBY~FMMYzWXhER)VL-Oc;I0h_w!68jZLEdH zAtcxq>Ur}uTx02=rl@Z;kFJ1(PQ~DG30<5~O}qRs+tLYX80)XTw)yR^zWM4i%fkm< zKmWqX&Jof6(@t)Q2ag1R^}K^F_yi|=1)K-#p)L>&|CW$EcZ%~2zGP;943Z}ZaJU5| zn>)sT@olhs;3fC)t8UTPy%X+w#@)s8Uwzw@UMqxL|J5vN(52jO{8JBy-0)A$_r9EW zGOg`eIqP%|^#+A|w@G-ZqR;D2!TC}~9^U}&BZ=oolDW*G$$Y*pm#AnQ&tbzR@_G0z zZ60qTk2hWj;uC2|!l@#`B#bQ5luC4E5`CF?#>y=b!$@qs&RTn)xAaav>URDM+eDYh z`(cRZ-y|p8uSj}UpPE6vUC?*0Xz&r4^SoU2rbd=guRe&s7OV= zT3ZHD&0Z}6N!18&5HSuyP >vz*UhMx(rUI fUHRk !2}{k7xJgRR>`2X_-7aFLHOO;YM$>EL&q&;yS~aO< zvb -P4-)Zv9&d*=v@ytBW8r@5-(b-edzxlCYo_V-26o39uXD4%VX3=nuD^aw z(EdTx{*m3V&8piJw!D{id=xfs4^=PrkY~7cE5fFY-qKlm>0EEs+EBy0KFVfS`4Y8k ziCMob==!n0X}7W1$fx~LHT1uvy?>_FYz#Dh9BBC1Rkqn%{efBYU4Qj=16AJ-RQ n(wXK7;M?>tk$ T||7 K30_CCq-_1YS%K12kL4?LX2s!@HFaC~O)HS=Hi_s}*kMe10 zRlIw7^fM2u{LZFZN8GiFyyt%AP2iP+)WY7!4bqfC#`%2O`GW2X#ob8-)Y}dGw|(Q! zyOp_IU9s3yBr+C?44Bc1{ZEz}izS945wX<^gqk9;mL$=YNc1F;u1KIM5=@gtx>BjW zOlB;T8jd&~Gj~1i;GbgUeZkT@#meWhwf|M$6E7pL6eK*TJo~!&)YG~%PwQ{x_dY8V zyet>JC=(X8j2E>|6f}<&w@sFH>8g5+6ea@aD8&Z@BCn~b>_c)2(gU;m9{%5t02-(< z0Gd6I{SWt^Ain+m&-?%E|J8Q(U#ye2N)xU3NH=i={>FX15(GHb*+?#;;f>h;IRC+; z?af+7&%99bPC5Pu<