From 205dcaa99b362540fac2dd464fa4f5f1c302baac Mon Sep 17 00:00:00 2001 From: wangsong Date: Sun, 26 Jun 2022 11:29:39 +0800 Subject: [PATCH] m --- aware_demo/pom.xml | 41 ++++++ .../aware_demo/AwareDemoApplication.java | 13 ++ .../org/javaboy/aware_demo/BeanUtils.java | 29 +++++ .../org/javaboy/aware_demo/UserService.java | 20 +++ .../src/main/resources/application.properties | 0 .../aware_demo/AwareDemoApplicationTests.java | 15 +++ dd_demo/pom.xml | 55 ++++++++ .../javaboy/dd_demo/DdDemoApplication.java | 13 ++ .../org/javaboy/dd_demo/Test08Service.java | 25 ++++ .../org/javaboy/dd_demo/Test09Service.java | 25 ++++ .../java/org/javaboy/dd_demo/UserMapper.java | 23 ++++ .../java/org/javaboy/dd_demo/UserService.java | 48 +++++++ dd_demo/src/main/resources/application.yaml | 14 ++ .../dd_demo/DdDemoApplicationTests.java | 22 ++++ permiss_demo/pom.xml | 45 +++++++ .../CustomPermissionEvaluator.java | 41 ++++++ .../permiss_demo/PermissDemoApplication.java | 13 ++ .../javaboy/permiss_demo/SecurityConfig.java | 45 +++++++ .../javaboy/permiss_demo/UserController.java | 39 ++++++ .../src/main/resources/application.properties | 0 .../PermissDemoApplicationTests.java | 24 ++++ seata-tcc.zip | Bin 0 -> 356224 bytes seata-tcc/account/pom.xml | 118 +++++++++++++++++ .../javaboy/account/AccountApplication.java | 13 ++ .../account/controller/AccountController.java | 41 ++++++ .../javaboy/account/mapper/AccountMapper.java | 25 ++++ .../org/javaboy/account/model/Account.java | 59 +++++++++ .../account/service/AccountService.java | 97 ++++++++++++++ .../src/main/resources/application.properties | 21 +++ .../account/src/main/resources/file.conf | 66 ++++++++++ .../account/src/main/resources/registry.conf | 79 ++++++++++++ .../account/AccountApplicationTests.java | 13 ++ seata-tcc/business/pom.xml | 104 +++++++++++++++ .../javaboy/business/BusinessApplication.java | 17 +++ .../controller/BusinessController.java | 33 +++++ .../business/feign/OrderServiceApiImpl.java | 17 +++ .../business/feign/StorageServiceApiImpl.java | 17 +++ .../business/service/BusinessService.java | 35 +++++ .../src/main/resources/application.properties | 7 + .../business/src/main/resources/file.conf | 66 ++++++++++ .../business/src/main/resources/registry.conf | 79 ++++++++++++ .../business/BusinessApplicationTests.java | 13 ++ seata-tcc/common/pom.xml | 32 +++++ .../java/org/javaboy/common/RespBean.java | 65 ++++++++++ .../common/exception/GlobalException.java | 26 ++++ .../common/feign/AccountServiceApi.java | 34 +++++ .../javaboy/common/feign/OrderServiceApi.java | 34 +++++ .../common/feign/StorageServiceApi.java | 32 +++++ seata-tcc/eureka/pom.xml | 92 +++++++++++++ .../org/javaboy/eureka/EurekaApplication.java | 15 +++ .../src/main/resources/application.properties | 9 ++ .../eureka/EurekaApplicationTests.java | 13 ++ seata-tcc/order/pom.xml | 122 ++++++++++++++++++ .../org/javaboy/order/OrderApplication.java | 17 +++ .../order/controller/OrderController.java | 44 +++++++ .../order/feign/AccountServiceApiImpl.java | 17 +++ .../org/javaboy/order/mapper/OrderMapper.java | 25 ++++ .../javaboy/order/service/OrderService.java | 61 +++++++++ .../src/main/resources/application.properties | 22 ++++ seata-tcc/order/src/main/resources/file.conf | 66 ++++++++++ .../order/src/main/resources/registry.conf | 79 ++++++++++++ .../javaboy/order/OrderApplicationTests.java | 13 ++ seata-tcc/pom.xml | 16 +++ seata-tcc/storage/pom.xml | 118 +++++++++++++++++ .../javaboy/storage/StorageApplication.java | 13 ++ .../storage/controller/StorageController.java | 42 ++++++ .../javaboy/storage/mapper/StorageMapper.java | 26 ++++ .../org/javaboy/storage/model/Storage.java | 49 +++++++ .../storage/service/StorageService.java | 92 +++++++++++++ .../src/main/resources/application.properties | 22 ++++ .../storage/src/main/resources/file.conf | 66 ++++++++++ .../storage/src/main/resources/registry.conf | 79 ++++++++++++ .../storage/StorageApplicationTests.java | 13 ++ seata-xa/account/pom.xml | 113 ++++++++++++++++ .../java/org/javaboy/AccountApplication.java | 18 +++ .../config/DataSourceConfiguration.java | 55 ++++++++ .../account/controller/AccountController.java | 38 ++++++ .../javaboy/account/mapper/AccountMapper.java | 24 ++++ .../account/service/AccountService.java | 30 +++++ .../src/main/resources/application.properties | 11 ++ seata-xa/account/src/main/resources/file.conf | 66 ++++++++++ .../account/src/main/resources/registry.conf | 79 ++++++++++++ .../account/AccountApplicationTests.java | 13 ++ seata-xa/business/pom.xml | 101 +++++++++++++++ .../java/org/javaboy/BusinessApplication.java | 15 +++ .../controller/BusinessController.java | 34 +++++ .../business/feign/OrderFeignClient.java | 24 ++++ .../business/feign/StorageFeignClient.java | 21 +++ .../business/service/BusinessService.java | 33 +++++ .../src/main/resources/application.properties | 5 + .../business/src/main/resources/file.conf | 66 ++++++++++ .../business/src/main/resources/registry.conf | 79 ++++++++++++ .../business/BusinessApplicationTests.java | 13 ++ seata-xa/common/pom.xml | 65 ++++++++++ .../java/org/javaboy/common/RespBean.java | 65 ++++++++++ .../common/exception/GlobalException.java | 25 ++++ seata-xa/eureka/pom.xml | 57 ++++++++ .../org/javaboy/eureka/EurekaApplication.java | 15 +++ .../src/main/resources/application.properties | 4 + .../eureka/EurekaApplicationTests.java | 13 ++ seata-xa/order/pom.xml | 117 +++++++++++++++++ .../java/org/javaboy/OrderApplication.java | 18 +++ .../order/config/DataSourceConfiguration.java | 51 ++++++++ .../order/controller/OrderController.java | 32 +++++ .../org/javaboy/order/feign/AccountFeign.java | 22 ++++ .../org/javaboy/order/mapper/OrderMapper.java | 20 +++ .../javaboy/order/service/OrderService.java | 32 +++++ .../src/main/resources/application.properties | 12 ++ seata-xa/order/src/main/resources/file.conf | 66 ++++++++++ .../order/src/main/resources/registry.conf | 79 ++++++++++++ .../javaboy/order/OrderApplicationTests.java | 13 ++ seata-xa/pom.xml | 16 +++ seata-xa/storage/pom.xml | 118 +++++++++++++++++ .../java/org/javaboy/StorageApplication.java | 16 +++ .../config/DataSourceConfiguration.java | 51 ++++++++ .../storage/controller/StorageController.java | 32 +++++ .../javaboy/storage/mapper/StorageMapper.java | 24 ++++ .../storage/service/StorageService.java | 31 +++++ .../src/main/resources/application.properties | 12 ++ seata-xa/storage/src/main/resources/file.conf | 66 ++++++++++ .../storage/src/main/resources/registry.conf | 79 ++++++++++++ .../storage/StorageApplicationTests.java | 13 ++ security_demo_new/pom.xml | 50 +++++++ .../SecurityDemoNewApplication.java | 13 ++ .../config/SecurityConfig.java | 56 ++++++++ .../controller/HelloController.java | 22 ++++ .../src/main/resources/application.properties | 0 .../SecurityDemoNewApplicationTests.java | 13 ++ 128 files changed, 4980 insertions(+) create mode 100644 aware_demo/pom.xml create mode 100644 aware_demo/src/main/java/org/javaboy/aware_demo/AwareDemoApplication.java create mode 100644 aware_demo/src/main/java/org/javaboy/aware_demo/BeanUtils.java create mode 100644 aware_demo/src/main/java/org/javaboy/aware_demo/UserService.java create mode 100644 aware_demo/src/main/resources/application.properties create mode 100644 aware_demo/src/test/java/org/javaboy/aware_demo/AwareDemoApplicationTests.java create mode 100644 dd_demo/pom.xml create mode 100644 dd_demo/src/main/java/org/javaboy/dd_demo/DdDemoApplication.java create mode 100644 dd_demo/src/main/java/org/javaboy/dd_demo/Test08Service.java create mode 100644 dd_demo/src/main/java/org/javaboy/dd_demo/Test09Service.java create mode 100644 dd_demo/src/main/java/org/javaboy/dd_demo/UserMapper.java create mode 100644 dd_demo/src/main/java/org/javaboy/dd_demo/UserService.java create mode 100644 dd_demo/src/main/resources/application.yaml create mode 100644 dd_demo/src/test/java/org/javaboy/dd_demo/DdDemoApplicationTests.java create mode 100644 permiss_demo/pom.xml create mode 100644 permiss_demo/src/main/java/org/javaboy/permiss_demo/CustomPermissionEvaluator.java create mode 100644 permiss_demo/src/main/java/org/javaboy/permiss_demo/PermissDemoApplication.java create mode 100644 permiss_demo/src/main/java/org/javaboy/permiss_demo/SecurityConfig.java create mode 100644 permiss_demo/src/main/java/org/javaboy/permiss_demo/UserController.java create mode 100644 permiss_demo/src/main/resources/application.properties create mode 100644 permiss_demo/src/test/java/org/javaboy/permiss_demo/PermissDemoApplicationTests.java create mode 100644 seata-tcc.zip create mode 100644 seata-tcc/account/pom.xml create mode 100644 seata-tcc/account/src/main/java/org/javaboy/account/AccountApplication.java create mode 100644 seata-tcc/account/src/main/java/org/javaboy/account/controller/AccountController.java create mode 100644 seata-tcc/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java create mode 100644 seata-tcc/account/src/main/java/org/javaboy/account/model/Account.java create mode 100644 seata-tcc/account/src/main/java/org/javaboy/account/service/AccountService.java create mode 100644 seata-tcc/account/src/main/resources/application.properties create mode 100755 seata-tcc/account/src/main/resources/file.conf create mode 100755 seata-tcc/account/src/main/resources/registry.conf create mode 100644 seata-tcc/account/src/test/java/org/javaboy/account/AccountApplicationTests.java create mode 100644 seata-tcc/business/pom.xml create mode 100644 seata-tcc/business/src/main/java/org/javaboy/business/BusinessApplication.java create mode 100644 seata-tcc/business/src/main/java/org/javaboy/business/controller/BusinessController.java create mode 100644 seata-tcc/business/src/main/java/org/javaboy/business/feign/OrderServiceApiImpl.java create mode 100644 seata-tcc/business/src/main/java/org/javaboy/business/feign/StorageServiceApiImpl.java create mode 100644 seata-tcc/business/src/main/java/org/javaboy/business/service/BusinessService.java create mode 100644 seata-tcc/business/src/main/resources/application.properties create mode 100755 seata-tcc/business/src/main/resources/file.conf create mode 100755 seata-tcc/business/src/main/resources/registry.conf create mode 100644 seata-tcc/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java create mode 100644 seata-tcc/common/pom.xml create mode 100644 seata-tcc/common/src/main/java/org/javaboy/common/RespBean.java create mode 100644 seata-tcc/common/src/main/java/org/javaboy/common/exception/GlobalException.java create mode 100644 seata-tcc/common/src/main/java/org/javaboy/common/feign/AccountServiceApi.java create mode 100644 seata-tcc/common/src/main/java/org/javaboy/common/feign/OrderServiceApi.java create mode 100644 seata-tcc/common/src/main/java/org/javaboy/common/feign/StorageServiceApi.java create mode 100644 seata-tcc/eureka/pom.xml create mode 100644 seata-tcc/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java create mode 100644 seata-tcc/eureka/src/main/resources/application.properties create mode 100644 seata-tcc/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java create mode 100644 seata-tcc/order/pom.xml create mode 100644 seata-tcc/order/src/main/java/org/javaboy/order/OrderApplication.java create mode 100644 seata-tcc/order/src/main/java/org/javaboy/order/controller/OrderController.java create mode 100644 seata-tcc/order/src/main/java/org/javaboy/order/feign/AccountServiceApiImpl.java create mode 100644 seata-tcc/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java create mode 100644 seata-tcc/order/src/main/java/org/javaboy/order/service/OrderService.java create mode 100644 seata-tcc/order/src/main/resources/application.properties create mode 100755 seata-tcc/order/src/main/resources/file.conf create mode 100755 seata-tcc/order/src/main/resources/registry.conf create mode 100644 seata-tcc/order/src/test/java/org/javaboy/order/OrderApplicationTests.java create mode 100644 seata-tcc/pom.xml create mode 100644 seata-tcc/storage/pom.xml create mode 100644 seata-tcc/storage/src/main/java/org/javaboy/storage/StorageApplication.java create mode 100644 seata-tcc/storage/src/main/java/org/javaboy/storage/controller/StorageController.java create mode 100644 seata-tcc/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java create mode 100644 seata-tcc/storage/src/main/java/org/javaboy/storage/model/Storage.java create mode 100644 seata-tcc/storage/src/main/java/org/javaboy/storage/service/StorageService.java create mode 100644 seata-tcc/storage/src/main/resources/application.properties create mode 100755 seata-tcc/storage/src/main/resources/file.conf create mode 100755 seata-tcc/storage/src/main/resources/registry.conf create mode 100644 seata-tcc/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java create mode 100644 seata-xa/account/pom.xml create mode 100644 seata-xa/account/src/main/java/org/javaboy/AccountApplication.java create mode 100644 seata-xa/account/src/main/java/org/javaboy/account/config/DataSourceConfiguration.java create mode 100644 seata-xa/account/src/main/java/org/javaboy/account/controller/AccountController.java create mode 100644 seata-xa/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java create mode 100644 seata-xa/account/src/main/java/org/javaboy/account/service/AccountService.java create mode 100644 seata-xa/account/src/main/resources/application.properties create mode 100755 seata-xa/account/src/main/resources/file.conf create mode 100755 seata-xa/account/src/main/resources/registry.conf create mode 100644 seata-xa/account/src/test/java/org/javaboy/account/AccountApplicationTests.java create mode 100644 seata-xa/business/pom.xml create mode 100644 seata-xa/business/src/main/java/org/javaboy/BusinessApplication.java create mode 100644 seata-xa/business/src/main/java/org/javaboy/business/controller/BusinessController.java create mode 100644 seata-xa/business/src/main/java/org/javaboy/business/feign/OrderFeignClient.java create mode 100644 seata-xa/business/src/main/java/org/javaboy/business/feign/StorageFeignClient.java create mode 100644 seata-xa/business/src/main/java/org/javaboy/business/service/BusinessService.java create mode 100644 seata-xa/business/src/main/resources/application.properties create mode 100755 seata-xa/business/src/main/resources/file.conf create mode 100755 seata-xa/business/src/main/resources/registry.conf create mode 100644 seata-xa/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java create mode 100644 seata-xa/common/pom.xml create mode 100644 seata-xa/common/src/main/java/org/javaboy/common/RespBean.java create mode 100644 seata-xa/common/src/main/java/org/javaboy/common/exception/GlobalException.java create mode 100644 seata-xa/eureka/pom.xml create mode 100644 seata-xa/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java create mode 100644 seata-xa/eureka/src/main/resources/application.properties create mode 100644 seata-xa/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java create mode 100644 seata-xa/order/pom.xml create mode 100644 seata-xa/order/src/main/java/org/javaboy/OrderApplication.java create mode 100644 seata-xa/order/src/main/java/org/javaboy/order/config/DataSourceConfiguration.java create mode 100644 seata-xa/order/src/main/java/org/javaboy/order/controller/OrderController.java create mode 100644 seata-xa/order/src/main/java/org/javaboy/order/feign/AccountFeign.java create mode 100644 seata-xa/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java create mode 100644 seata-xa/order/src/main/java/org/javaboy/order/service/OrderService.java create mode 100644 seata-xa/order/src/main/resources/application.properties create mode 100755 seata-xa/order/src/main/resources/file.conf create mode 100755 seata-xa/order/src/main/resources/registry.conf create mode 100644 seata-xa/order/src/test/java/org/javaboy/order/OrderApplicationTests.java create mode 100644 seata-xa/pom.xml create mode 100644 seata-xa/storage/pom.xml create mode 100644 seata-xa/storage/src/main/java/org/javaboy/StorageApplication.java create mode 100644 seata-xa/storage/src/main/java/org/javaboy/storage/config/DataSourceConfiguration.java create mode 100644 seata-xa/storage/src/main/java/org/javaboy/storage/controller/StorageController.java create mode 100644 seata-xa/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java create mode 100644 seata-xa/storage/src/main/java/org/javaboy/storage/service/StorageService.java create mode 100644 seata-xa/storage/src/main/resources/application.properties create mode 100755 seata-xa/storage/src/main/resources/file.conf create mode 100755 seata-xa/storage/src/main/resources/registry.conf create mode 100644 seata-xa/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java create mode 100644 security_demo_new/pom.xml create mode 100644 security_demo_new/src/main/java/org/javaboy/security_demo_new/SecurityDemoNewApplication.java create mode 100644 security_demo_new/src/main/java/org/javaboy/security_demo_new/config/SecurityConfig.java create mode 100644 security_demo_new/src/main/java/org/javaboy/security_demo_new/controller/HelloController.java create mode 100644 security_demo_new/src/main/resources/application.properties create mode 100644 security_demo_new/src/test/java/org/javaboy/security_demo_new/SecurityDemoNewApplicationTests.java diff --git a/aware_demo/pom.xml b/aware_demo/pom.xml new file mode 100644 index 0000000..14f2c3b --- /dev/null +++ b/aware_demo/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.0 + + + org.javaboy + aware_demo + 0.0.1-SNAPSHOT + aware_demo + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/aware_demo/src/main/java/org/javaboy/aware_demo/AwareDemoApplication.java b/aware_demo/src/main/java/org/javaboy/aware_demo/AwareDemoApplication.java new file mode 100644 index 0000000..857b88d --- /dev/null +++ b/aware_demo/src/main/java/org/javaboy/aware_demo/AwareDemoApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.aware_demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AwareDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(AwareDemoApplication.class, args); + } + +} diff --git a/aware_demo/src/main/java/org/javaboy/aware_demo/BeanUtils.java b/aware_demo/src/main/java/org/javaboy/aware_demo/BeanUtils.java new file mode 100644 index 0000000..a41ba3b --- /dev/null +++ b/aware_demo/src/main/java/org/javaboy/aware_demo/BeanUtils.java @@ -0,0 +1,29 @@ +package org.javaboy.aware_demo; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.stereotype.Component; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Component +public class BeanUtils implements BeanFactoryAware { + private static BeanFactory beanFactory = null; + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + BeanUtils.beanFactory = beanFactory; + } + + public static T getBean(String beanName) { + return (T) beanFactory.getBean(beanName); + } +} diff --git a/aware_demo/src/main/java/org/javaboy/aware_demo/UserService.java b/aware_demo/src/main/java/org/javaboy/aware_demo/UserService.java new file mode 100644 index 0000000..3b2bc51 --- /dev/null +++ b/aware_demo/src/main/java/org/javaboy/aware_demo/UserService.java @@ -0,0 +1,20 @@ +package org.javaboy.aware_demo; + +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class UserService { + + public void hello() { + System.out.println("hello javaboy!"); + } +} diff --git a/aware_demo/src/main/resources/application.properties b/aware_demo/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/aware_demo/src/test/java/org/javaboy/aware_demo/AwareDemoApplicationTests.java b/aware_demo/src/test/java/org/javaboy/aware_demo/AwareDemoApplicationTests.java new file mode 100644 index 0000000..fffd533 --- /dev/null +++ b/aware_demo/src/test/java/org/javaboy/aware_demo/AwareDemoApplicationTests.java @@ -0,0 +1,15 @@ +package org.javaboy.aware_demo; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AwareDemoApplicationTests { + + @Test + void contextLoads() { + UserService userService = BeanUtils.getBean("userService"); + userService.hello(); + } + +} diff --git a/dd_demo/pom.xml b/dd_demo/pom.xml new file mode 100644 index 0000000..605a005 --- /dev/null +++ b/dd_demo/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.0 + + + org.javaboy + dd_demo + 0.0.1-SNAPSHOT + dd_demo + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.2.2 + + + com.baomidou + dynamic-datasource-spring-boot-starter + 3.5.1 + + + mysql + mysql-connector-java + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dd_demo/src/main/java/org/javaboy/dd_demo/DdDemoApplication.java b/dd_demo/src/main/java/org/javaboy/dd_demo/DdDemoApplication.java new file mode 100644 index 0000000..20bf86b --- /dev/null +++ b/dd_demo/src/main/java/org/javaboy/dd_demo/DdDemoApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.dd_demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DdDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DdDemoApplication.class, args); + } + +} diff --git a/dd_demo/src/main/java/org/javaboy/dd_demo/Test08Service.java b/dd_demo/src/main/java/org/javaboy/dd_demo/Test08Service.java new file mode 100644 index 0000000..973ed32 --- /dev/null +++ b/dd_demo/src/main/java/org/javaboy/dd_demo/Test08Service.java @@ -0,0 +1,25 @@ +package org.javaboy.dd_demo; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class Test08Service { + + @Autowired + UserMapper userMapper; +// @DS("master") + public void addUser() { + userMapper.addUser("maba22", 9999); + } +} diff --git a/dd_demo/src/main/java/org/javaboy/dd_demo/Test09Service.java b/dd_demo/src/main/java/org/javaboy/dd_demo/Test09Service.java new file mode 100644 index 0000000..926cf25 --- /dev/null +++ b/dd_demo/src/main/java/org/javaboy/dd_demo/Test09Service.java @@ -0,0 +1,25 @@ +package org.javaboy.dd_demo; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class Test09Service { + + @Autowired + UserMapper userMapper; +// @DS("slave") + public void addUser() { + userMapper.addUser("qianshi22", 9999); + } +} diff --git a/dd_demo/src/main/java/org/javaboy/dd_demo/UserMapper.java b/dd_demo/src/main/java/org/javaboy/dd_demo/UserMapper.java new file mode 100644 index 0000000..bf85ae3 --- /dev/null +++ b/dd_demo/src/main/java/org/javaboy/dd_demo/UserMapper.java @@ -0,0 +1,23 @@ +package org.javaboy.dd_demo; + +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Mapper +public interface UserMapper { + @Select("select count(*) from user") + Integer getCount(); + + @Insert("insert into user(username,age) values(#{username},#{age})") + Integer addUser(String username, int age); +} diff --git a/dd_demo/src/main/java/org/javaboy/dd_demo/UserService.java b/dd_demo/src/main/java/org/javaboy/dd_demo/UserService.java new file mode 100644 index 0000000..a8e6dfb --- /dev/null +++ b/dd_demo/src/main/java/org/javaboy/dd_demo/UserService.java @@ -0,0 +1,48 @@ +package org.javaboy.dd_demo; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class UserService { + + @Autowired + UserMapper userMapper; + + @Autowired + Test08Service test08Service; + + @Autowired + Test09Service test09Service; + + @Transactional + @DS("master") + public Integer count() { + return userMapper.getCount(); + } + + @Transactional + @DS("slave") + public void addUser2() { + test08Service.addUser(); + int i = 1 / 0; + test09Service.addUser(); + } + + @Transactional + @DS("master") + public Integer addUser() { + return userMapper.addUser("fengqi", 101); + } +} diff --git a/dd_demo/src/main/resources/application.yaml b/dd_demo/src/main/resources/application.yaml new file mode 100644 index 0000000..df37932 --- /dev/null +++ b/dd_demo/src/main/resources/application.yaml @@ -0,0 +1,14 @@ +spring: + datasource: + dynamic: + primary: master #设置默认的数据源或者数据源组,默认值即为master + strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 + datasource: + master: + url: jdbc:mysql://localhost:3306/test08?serverTimezone=Asia/Shanghai&useSSL=false + username: root + password: 123 + slave_1: + url: jdbc:mysql://localhost:3306/test09?serverTimezone=Asia/Shanghai&useSSL=false + username: root + password: 123 \ No newline at end of file diff --git a/dd_demo/src/test/java/org/javaboy/dd_demo/DdDemoApplicationTests.java b/dd_demo/src/test/java/org/javaboy/dd_demo/DdDemoApplicationTests.java new file mode 100644 index 0000000..a198ebf --- /dev/null +++ b/dd_demo/src/test/java/org/javaboy/dd_demo/DdDemoApplicationTests.java @@ -0,0 +1,22 @@ +package org.javaboy.dd_demo; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DdDemoApplicationTests { + + @Autowired + UserService userService; + + @Test + void contextLoads() { +// System.out.println("userService.count() = " + userService.count()); +// System.out.println("userService.addUser() = " + userService.addUser()); + userService.addUser2(); + } + + + +} diff --git a/permiss_demo/pom.xml b/permiss_demo/pom.xml new file mode 100644 index 0000000..9c19fb9 --- /dev/null +++ b/permiss_demo/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.1 + + + org.javaboy + permiss_demo + 0.0.1-SNAPSHOT + permiss_demo + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/permiss_demo/src/main/java/org/javaboy/permiss_demo/CustomPermissionEvaluator.java b/permiss_demo/src/main/java/org/javaboy/permiss_demo/CustomPermissionEvaluator.java new file mode 100644 index 0000000..7d8c5a3 --- /dev/null +++ b/permiss_demo/src/main/java/org/javaboy/permiss_demo/CustomPermissionEvaluator.java @@ -0,0 +1,41 @@ +package org.javaboy.permiss_demo; + +import org.springframework.security.access.PermissionEvaluator; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; + +import java.io.Serializable; +import java.util.Collection; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Component +public class CustomPermissionEvaluator implements PermissionEvaluator { + + AntPathMatcher antPathMatcher = new AntPathMatcher(); + + @Override + public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) { + Collection authorities = authentication.getAuthorities(); + for (GrantedAuthority authority : authorities) { + if (antPathMatcher.match(authority.getAuthority(), (String) permission)) { + return true; + } + } + return false; + } + + @Override + public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) { + return false; + } +} diff --git a/permiss_demo/src/main/java/org/javaboy/permiss_demo/PermissDemoApplication.java b/permiss_demo/src/main/java/org/javaboy/permiss_demo/PermissDemoApplication.java new file mode 100644 index 0000000..5cb840c --- /dev/null +++ b/permiss_demo/src/main/java/org/javaboy/permiss_demo/PermissDemoApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.permiss_demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PermissDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(PermissDemoApplication.class, args); + } + +} diff --git a/permiss_demo/src/main/java/org/javaboy/permiss_demo/SecurityConfig.java b/permiss_demo/src/main/java/org/javaboy/permiss_demo/SecurityConfig.java new file mode 100644 index 0000000..66f151b --- /dev/null +++ b/permiss_demo/src/main/java/org/javaboy/permiss_demo/SecurityConfig.java @@ -0,0 +1,45 @@ +package org.javaboy.permiss_demo; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.PermissionEvaluator; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class SecurityConfig { + + @Bean + UserDetailsService userDetailsService() { + InMemoryUserDetailsManager m = new InMemoryUserDetailsManager(); + m.createUser(User.withUsername("javaboy").password("{noop}123").authorities("system:user:*").build()); + return m; + } + + @Bean + SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http.csrf().disable(); + http.authorizeRequests().anyRequest().authenticated() + .and() + .formLogin() + .permitAll(); + return http.build(); + } + +} diff --git a/permiss_demo/src/main/java/org/javaboy/permiss_demo/UserController.java b/permiss_demo/src/main/java/org/javaboy/permiss_demo/UserController.java new file mode 100644 index 0000000..d15c975 --- /dev/null +++ b/permiss_demo/src/main/java/org/javaboy/permiss_demo/UserController.java @@ -0,0 +1,39 @@ +package org.javaboy.permiss_demo; + +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class UserController { + + @GetMapping("/add") + @PreAuthorize("hasPermission('/add','system:user:add')") + public String addUser() { + return "add"; + } + @GetMapping("/delete") + @PreAuthorize("hasPermission('/delete','system:user:delete')") + public String deleteUser() { + return "delete"; + } + @GetMapping("/update") + @PreAuthorize("hasPermission('/update','system:user:update')") + public String updateUser() { + return "update"; + } + @GetMapping("/select") + @PreAuthorize("hasPermission('/select','system:user:select')") + public String selectUser() { + return "select"; + } +} diff --git a/permiss_demo/src/main/resources/application.properties b/permiss_demo/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/permiss_demo/src/test/java/org/javaboy/permiss_demo/PermissDemoApplicationTests.java b/permiss_demo/src/test/java/org/javaboy/permiss_demo/PermissDemoApplicationTests.java new file mode 100644 index 0000000..1f5d782 --- /dev/null +++ b/permiss_demo/src/test/java/org/javaboy/permiss_demo/PermissDemoApplicationTests.java @@ -0,0 +1,24 @@ +package org.javaboy.permiss_demo; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.AntPathMatcher; + +@SpringBootTest +class PermissDemoApplicationTests { + + AntPathMatcher antPathMatcher = new AntPathMatcher(); + + @Test + @PreAuthorize("hasPermission('system:user:add')") + void contextLoads() { + System.out.println("antPathMatcher.match(\"user:*\",\"user:aaa\") = " + antPathMatcher.match("user:*", "user:aaa")); + System.out.println("antPathMatcher.match(\"user:list:*\", \"user:list:add\") = " + antPathMatcher.match("user:list:*", "user:list:add")); + System.out.println("antPathMatcher.match(\"*:*:*\",\"aa:bb:cc\") = " + antPathMatcher.match("*:*:*", "aa:bb:cc")); + System.out.println("antPathMatcher.match(\"a:*:*\",\"c:bbb:ccc\") = " + antPathMatcher.match("a:*:*", "c:bbb:ccc")); + System.out.println("antPathMatcher.match(\"user:*:add\",\"user:aaa:add\") = " + antPathMatcher.match("user:*:add", "user:aaa:add")); + System.out.println("antPathMatcher.match(\"user:*:add\",\"user1:aa:add\") = " + antPathMatcher.match("user:*:add", "user1:aa:add")); + } + +} \ No newline at end of file diff --git a/seata-tcc.zip b/seata-tcc.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a43dd3a3d9c768d6589e396e7146f58e35a9ce9 GIT binary patch literal 356224 zcmbrlWk6n8vNa6B-QC^Y-QC@TySoQ>cZcBa!6CT2ySqzp2z*KR^mKRb+W~%XN&Ma8 z?^MHm%(3MFmadw0eWCHYqnLQ(mrw(%SSJVq;RQpz4Xd2iT(AT~aTs&pf~uSxv2wsT zT?`p@jwIQdYIQ#oWgSVQwa$!>3yq@lMp9uRg);=H=boxnQ}=D!+3i2Q@aeO>LlJyJ zkJxp_zJdiFg{^iuJqf;(;=jrXDz>r8rCMKW1qZK1k&~AK1GfMOwXXZ&WMFiFzqqj@ zzwdAEhxp+LU0oRgAvq=W-~1=?!+$?NfA{{c%aH!M?C;z6e*^fr0spl7C%~Wk_$$o6 z-bdnp2Scm-ziz3a9*UuC8KVuZ)FERRi zX8a2B^WFXz5GP|tCmKU5eMd)Q$NvD4{Qrn(>tOmHpwj;bs22Jz`UbY{{{cGde}VpI z6#c9QfA#e5QS_^)75-}*azE>ifSsL{xuL$3xvh=zkBxDp{cUG{R*|2k|1cjVKPm~t zfZTCx`31+i(gqpr;tQmS(i*uSiZ%?Y)iEzq)ZKzPqY)!7?`YCi58PFLUxpLB02-)6 ze5U8bunaHn<_6$rI4zly9#MdG09Fj<3He+eQ+b{v8T2{YJ7q>Qv64OK+R#Fb2zHVp ztYhHkx@sXCKOdefN%(-nN&=ttfBplD(?nu3y+C6@a z80UFYOj0(P+1jCYcucMqq>j{MJhj7!sKQZ?%^DHrqdvFE0;?k)BIj{X%;V>u+@1nLp@$@SO-tK92ac$&xVNH8z-*Z(9>f^gTdYOU_F==TZae2L?Rq zFARD(GDx{FB{R^UvSf5`J&VJ?e*Wm!qxgkXFrP+#Z203#TWTJV1HojwrwUe*){;$; zx4N=f7>)3y>N+>99)VK<+HnPBS{h98mHxQ@N2vT9;kgNiWc~k`;H)V4UJl(vw?wa&SH)+;KyIj0H@*PaYS<(>kl8PCHrJ(nh2tL_mce<>S zWe|~7CNhWc@YN4C*rhRd#`n3RT(q#aH;gy~hhzFkt(GsWwkhbZdEGeF`yd(GHL3#@ z=~#m>Z6xS>Yuql8bQSgm?+y|gWQ+H3zXSa&DCj|cx_dv0i4f?&D=0+&@3j0YbN0b%&hfd9^yU!;HS{-|UB4$t=Az?&GGo7()7_#J8fH1azs z|7t|>zc(UaXlUzf8S7!Z1#jZRC z-wb}Or4<}R0G_&eQl>a%&gdZih3IQK6kb;dB2wG2AlL--*re;h>B}xs7mX~-0VY%w zQqYrR@SfQ*5QVn##BkU5@R=hVl}evb>*kG>Y06B#!?2j!9WGt4ved$+4zvqo8(b2W zBFltBlLV^*Hi_y15R3&;%^jGh;PJY>m#wfDuApPH-dLH2^)yOt6mf>~{dI9oCC0X1 zzD-4Tsy0$}n=z#hk`#oL7jQBL$oIii3UcW>Sa}2g-c9a)>P3-@(~5l9LB5}HO)_Z8 zxALP?W&c5ze|D?u4u9WH_W#Dy*7|mKe>rjqJpal=zgm&_|6%2~HcRF=i+|t7Kg?z+ z$XH@Az~gX4XBAlUKCfqpujmCN6viq=!3D|FHy1EZNx_MgaQz|YJ{q8y9(}3kG<)W`~pqdG2GG&FF||D%yFlB ze0-HNr0$uSrxO@0lXk#<7K73L^3kFi@-;V;@T`7e0IE9D1^S+BKo*GsX&Hl*l4OY_ zk07>A=rjacl}`90Ay6q{PttvGM(jh1+_#SsTk5bT3qy?Gl#PR>!GfmQFTc4h-rZMG zuH5NemYD?05Qh-nRKGyG;F-RWR*+BSdn3Q~#$R2d8eb|mLN8dVS&*mC@OdyU#ib_n z3cESIO$vEEZ-#&y>awov9*JFR?~nOtDKQi6rsZERB9W_tIFIq>Uf?>oMsO5JO zRqnZQ9!ffd(eAcTCLZEpSY@Wqm^_N?-59|uC74TGdLXp=> z;$*r*!d|1Er+`gyvM27oi(2w%!CoK!1(aUuzrp ze-lSPnj0qvTPv%-MC@P7-0v0WS4;oqSnx;Z^t0aoQJ#OVqJOdUTht2u)AFB@`?JOR z!+esGmK>4*@>>zwLUJWOcsLq7-IBxcV^;tuODQoaaTKwh+g1OVO$g`I1#^8p{`)W* zQa~8o8-P#Z^_WX#!-u$#EXRqlv`el-u6n*tpI%_~aO6g=u097ca8vIhB(L2p(Wt<& zz>VUnqI+3u&YVd)76=Z@TU*Q?fbEC_KL-|@a$n%xoac_g1h-@n*OgH{C|CGLTM5TC z_E6&VL(3_pHk&HXZLsB0#WZm2`5`NeJ&2e!aBLgc`LQ9E$0Wtk_~Uq15gO|`%AxP?Sk>$Ck>^$COpBBdSvnO9*{lp5;FBs= zn;OZX3&zeD&CJ!+_-D{I=?{s>U8_k*gY?-GIf1mb-Q=&EaYAk&C}dn}E}r&tX*re4 zcr~~}qcBAF)i^+CB2wh$S~X-szQZ#ndWbf~PqhXbl$c9H&zjB&u;*U5px`Xh%{G?5 zhtJZ&ZxaZ)tC5i=Rwre2-67bYM&GxC*;51ImXxr(qPiGag_!K-`Kmpvy=pSm#$3fPIgQyK})?qSWd~;Eq*ZQ;E*;M?!vB` zK6yZ*4>GS~MjbOs*_^eBvod~ya-b@=bPQ73bfJ63i7*7-Eh(I4T`44sTg2xqs;NMAIOTP7GzQ~f0AD9)}o0cQserW2`d)wz;!nU z@<0rRX(C#tz`h7xETFM(I4AFmt9%#PpzFZ(+PVzpOyrlyEc1)y`orvRFIkQkEiZ$7 zeD9!oSZCK7#I||cB ztR8Wr3Ev=B#sJF~hgcO-Xs0!#4DNLcATU^I!FEO8kysrr6=7<#7M1a61q^OTuUaJ; zm9al;&ixkW-#xX9F<~~?@Woql{@iP$agLhJA(>OrQifI&E`DI>8%4fZfef#KMq_zP zur&&X%Oe9+wEliwbn+pYm8q(X<2YrRhK#HAVPcsIYY7p_BCkF>w~!5%HCb=gcg~{fVb8*Y4%d@Ce;n%wXw2koScX8(wj%Tb1+HEURWg_eJo5e7HI4!VaXPG46It_U zf^49|JzOSmXVWY_k(@d_nk~8Q9gq+-=8zapZO4{}ct2NCm<$)Qsv=JJ`FUp*D)f^o z#W;E72%=VeE(zf_mmC!jLG;NggmW-$ zhNquW2~sO6t9+_`6>U;9T|`p2)?DOJnl)|EK(J~hx_8|KyP2bh*vqzL+DUe;K`ys+ zK+c!&g_L50t3IPxLjzrQbZ%dyY;JOR?rt>T*-YxRc)s0&Dvsy8n7u{79q_e#T;4S8 zJl$8G`h34R&Owvg{Q5NfYI=B)`Q7Vnw;E%Cde4H9r`K6cR1{E5RaCZ{0Ua*&v4Jc) zqD&ghorAqhfIPLEx_8RqezVOh?taq8d3&Prn=vJh6jwZ>G>E&pvOupxF>`%ihXVZ@ z!0fuq@Tt^OGkxlqqL%Z;h2#RJyp}VaH*$QN9y&et>n16`ukh{BL1836VU;nX02&z= zo_*^aAU>nIr{B~zTSbM8*k{?#`NJz0Snx-xr#dWi4nCk~ z6H^GDDrHBL3P#aNQ$-;>d#7hBYo<-PYyz}N_CQ*}MhXx#PF3$g) zmM;?GDK$5@wBTH$EIg=T3_J+Eh2eOHRXmCxRQ0taa>Fl;+G;?mkO4Li<(J7{1!`Xe zLjgclWJAP-h{m-dxe`1fq1cn4%nlOXxZmdBmJ<#!+l0FHM(K{g{XXSwW$?f-7W`eh zicr`4w(~oAYBUb{B-9rw=~F$zuP2x#NdWhU^$`>Hg%1m=k$L<{$i^1ob;d{9e3& zRZhkJo8tXj(f*5Q`uD>9hh7?_C}WGn0Pih3Lrm?Ln20)(0=xt7(3JwIqFJJ>dQOpt zD6ri%+-8s3gvE8^Vg97Sz`cqG1+`#s4HHA z?>TD|t!eH(-Si2Ag8 zYYWu*+sFh_=!mcXM_VuUkGB5zNcvR^q5gkIl7q3SxucVV`@fVb$CaloR_T$wC)GmF z+@trbq79dX#OoNA7HUb5pB0%k?1h!3#BU_EAXl3%#EPi;qjPD`K?4x5M<1})J)ON` zV5$S14?x$W;640Y1RZWq2Pe}RjrF^+dg12ipy`6{9##Y14a*v%fR}0=PA*l?OXRj} zn8j?T*e@_+yvR-b&%hNb3-#t8RDebuPL8BT$6aj({NNWO>X?0{`b*ZRP6^d#sccw` za|NMUJ^=;FA;?sAs1{ifJ-mglV|)4{`d?SZ@h@`~M+_H~EAQ1uO0V4e`HYJ+xOS0P zf5jJ}Tjw7XVa*yh^uNKvcWdUMOKaXKv&R90T*C#ePjE`sdnXc+beN$usZ4R4H6ErP z0KC2|IT*`|{UVZGtm!o<#~j}|ptGot3i<@6EE{vu#fqLqRyM}O9TkPiS7q;}dfF6m z9x}e)zg&E$V8$mCxfmU?PW3fE%83e3J6MlcMU(~es`|9w#Qy1Gbot&*0u8xt0{ug&f&a%`@%JS8 zbujR6W)FXyNPmbVe+;8&?Hp`>Xf#gd#*ROQ{h1%9&OgQl*70(dNCM~smoF3_0O5LM zBmF4-L`v>b6HvOPQpci)i|W&yO&U#jDCU$k^Me{SXZe&xtPohQ^PC&@M$gVj$vXY( z6N(B_Pnj-xCojD>#t)6YBwS<;RoXl|>)FL{RC4-ei(vx?32A)>(Xmo6F*Mnu3r+~A zT6;|ObhBk(gACby(0{I^+x*1JZc?5K7{jQK644(Y7c>TyNG;*LhUM?Nmsgc;Vpe6L@m;(LAu~kA!0cCWE@~Uoj-!^m=RJ@`(7>NfGjWOwgX9h?iL#u5ZU^WoBmL^spuQ%<_ zh{q#loxgyynoFJyrnDV?^kRGWN+R6_gO7J`VNJ`+A4XRnA{yDLA5NLPY)=?=r@vw9 zzQk8Hj54{gy3r{;L*7l~1`r}9+IHpF?t8pH!0hA~3qlUy){)T6PZ=fA#Kl_smY+}Y z=HksV3#PQAK#HPIAT7FkB8JDEWbzOmB8+j4`~9SuUmVSdgsANZ1Apc+q04Jr&K-DI zZIoZn#d}S&zDE6u`vo3E6SI{F&S+whw+fXe5L^U}SQ!+>@5ri(|*ML4hBKLoQ95-bY$~*jI=*LD zBb%DtAFF7|zO>hNxTx;GK&uxh)t`5HxOZrr1(koF5j+ytbg+*(AQjcD)ylCHwhCaB zJ1myRZzmahQLuJ)DZOd_L?EXil9y}X+Ft=iIW9?%4V*Wm?@Y}uz38YDWHh{Ag`8Z> z4VGks66GtiB{Ll%YrV7>Z9{$5&jHjRel!xG-NiGVft1{=tKEeLwP~EtFBj0KKN)IDz9Z>5yBG!I<7E zhU61}^+52CvHd{!sidYZQjxQS^G)09N^31A8P3R?`GKpug|UxPn%Gbo;?1($BFuM7 ze8X{thK23;>$$;$Qn(sGk=eX_`;ZhSv3nwGsVZnYlN)2ak#y??pNXX^m>~d_N>;mf z`cu}#_rP|WR@b<3r>2aeecSs-iKHyYZrg2{j(!Pt}XKr6Xxll4cv`s zn871pnWnf(x^9ptM}avz_a>$ooPrTkHhEnU268CsoOS*qXpt$bPZs1GdAZr-*lU*u zu|P>kr)@kxwPiL0rnX@`GUl0Y!00fb!1wFoUE&=*PK5jOAIP&vn)=%e;StR;6+dqZl13 z!F>yuw*A>cOt;BKE&Ql=xrl!~)YVP!7g7uI4Vb(vm+_3QXYQYmT zZqZ8*A9(qK4Eq&>TIc4&cL?UfK!2%fV;XB55DnDwN}m3=(X$r*s}B1tlPbRvX8!7?_`cgA~4!LiUjx z31Gxfh$K>#*fQ5$*#-@bMn(Ec67TdR)`e&G6X}!VA1`4stCc++;_r2MT2D+Chpg;T z6F7~mE2Y)bF*!8oiZ^~9FYRq!Jl3u~2sy69^2uz{&`5b#Ky8!PKO+-8t+#%#O3M-Y z_C>vH-;z1#x`od;|kll+F04@|G3IS`%}#S$p()iPc9j+W?LxQvS%|1OIum6Hlo_0!#f9EB%=(c;Ljf6(W|mbeZBBfoOyRckGCI#{ zIDWR`IaZzc@}lMNquWU)+Ym=f+_miW{7P(7N=m10U${9bG=rrmafPD*kswliGUUcO z-FW~p55HfPV@BVIl=ovP3OF`nv1nNTaN&V%MW^7wP~TL3&OQNNL5|?PtjB8dO=RGdPM1( zpH#!Uv*Wv?!=>=?GkJr2MdtJwKS`7p=)eG_N-?9iCj+1Mw z*^@!15>Ow3j*r$DO5p}x?4!)35><5=O$3M$ADaudj4TKBg;GYkhGCmqDh$^(E15O( z)hLC2l5Uzq8+$xdDp;I4^=NuVDLnJB20ZEA1eYp7K`x zW;;$rwZg&I^xl0)t2IN+XvF%pHz zBs0szWP`_+QoEgCysl5A{tej!IuM76HBbF(U2v`&o`lwS>-Z}7W>T!xbU_MjV>CA+ zStBq=$L~u5%~Qbw$lBlOv||hO=*S*;-Hu?g9XdsK30`{{JuyLM`G%dt3X3|I!(}J7 zD5_=S;snj>kT4Q%$O#?!!MT={KcT+sc0ayJ%x!QIN*<~I8J&KJF?Vtzb%&Kgl1|`jY-(Z6}MRINf>M13XHZ3xG)7f{oj9 z_eN>kt0O8+RJa6`_CxU@PB$S{>Al(*uplJ$ z1gM+4X=Oi)1?tuaTzmJMw@V{g?-iB2cF~8G`e)L=Z0!qML7p$N9A~YQ+bQ0ZeD@kh z2^-A|hH%nZ1%VUmM!Q5tSlgctBTbvr$KC7I5D%$|o#ahhc|j4006B6Q$Q;e-k6ry1J*4{UoZ21xa4U&qp*y08W5#JDap-+#fW- z%Ame&)(Tx<15df71a)|C$Sq11-M>`D-;rsCDbmkU!(QNJ7%d-%YNo8$J+Dwil@`igifKTNgxJa_4f*h{I^q=qCOFWyV7b8ujhkbV zuz`-{Sf9j3dh^Uu%EbXmnlQNC?8&aNJuNVIWga%W?_8N3(9fuKWnaSk$)7^_RJp7l z;ur{Wa|jC_A~CPc@E`z~loZfQu>?bxX_xns`;4Sern<`L9lh1PsSe06#ZNG>)NRiW z^$WpnBlf9_1MTVu#&DRr1`Uq_S6X<$k z)X|qLeYRyaE`@Jbb^ssw`(@q);9A#gCo!(JR}gL1%yGsSgtX2tc(o;U%x?N=s#Dj% zVDNo8;#LEM<&}>}l+-D40W1?nSz8he_BX-axp{zH>o?-u_HTeoZwQqS9|nAWwkrk* z2!pOaE+wfU{kwMMU&#W0BRlJ#WJmK4>ib0&_{nsCP;=DyIAjk$H1L+^CJ9pQQoxqs zBS0xF>)Tl{Gv(v$jtyOhd&ZMqYW>7EC$Eqc@AG$hk)?Lidm|7y_d;j}4jG7kI&J;Y z&ZRHIiX}<7K+h-&B$zC_`3oI7WAX3a#X&+gJ1f4)JhnBxHLPX9+$sq!bI|Jq;tt8?hTc}WX>ho3zD^UeNvyUaGASR1K&()QKHj@3r%)qx-F)%uU0 zE)O=BKYrY2Iv!@Eak=jB*?0PgC=07pBxxjR$Pt%0P>2Wk=Dqm_2EJbJf^EmVzw&>d zHxf|+HYeHdI}-RrE-v)?eH?Dfr$hDeomlw$WMG}YL%c!W2&GeDQwvJtIUAr&ppSTdRha(hA?n6Gi_&+H@+Nug zO9$S0Zn=;Ysq8+&lpSZ6d(Hgc9HbDyQA#snDhgu=-Apw(5UX(5gE=3}JOIf_byM3| zgq<~(yHZt{@cOHy!k8C~n39ZD>wHuVf%{J7TkBJiIUw&6OLDZXQmj?5NtEQ+n(x3= z72cASIeijp&*(Tx{N5xK1K+7jVY=q~?l%>Y7v808^u-RLYd)}RzG_7dy@yTvM4GQ- z1K!`0M!%zKExhw;d2(TKdWyAmwoagu%FfMvQC32ljjCW8ix_)RyfwW2!p3-)fHXQ6 zkL18?2&TxaoXgob=)JbpfMkXrg;xZvS;R9m?h}t+Z0U&0I zB*sZ(>6@Tbw^BkC&Tipq2ks%jN&e^uSi5}*436e0{(0yN?|Y6gyQrVPdCiyoh4E{g zVKs=mu|0cSkC1`mG8%xL2mHj~<0YWyK-y6g%VA`)mZAhmIhB<2iIwt^7VXYUvboK8 zJaAJNt018q0H5DY-+ckSj1Q&x-K%6jhbaxTq zE=kLdG&l^aAu^Sa@6~VG_YefNE6{W7c+0BPlinG17Wy^v(vPrp!l|Pqrn6OqHZ9v6 z=tWmD>Z6{9V^hl`?TTFqevnmqb9g1+NDd>pUJt84nhcBqci<0X`wi&7(Nrwwe%VOiuN6%_OEsSMl5#(p~ z3JblGap2YvQK%W?0+w)a=4}DQu$*-VT{4)lGSo3X(f--c4Z$W8>;6trdw}k z`1$~0p(+~tn-|!E!Xx#+(9-)&3u}oC)4QpW-aeo;jWApAos_p^E}_oW+F_;@kQ{dP zpxZ~47-AKccpH7PZeT(a>)vu1_Q-~|9G5#TavmfMNDW2ZzL5tDU2$;bZUa$_=AG6c z1j|AK^wiqVmo8zs#6`H1X1UG*b;H%mBwbea|85-k&GKp>vDE zl;qj7uX3lc-Xt0(eq%jga~%xC!Hmw!i;~S>mEU@h#j|gN5s|bNavp++#i0!M#JkVc zIWn@fqB~sdaJDD5MOvYDB|lva->`R(w@;3+g^(rQ%Y(4IPQ5Z*_a=_yajzK$I!8Y}zyWok!bQmCyh3-N5mW!BhlXJkuRcYZv{y!_*9`vu~n zXY-alysy)8im6osRfyOopa*7`MlD>RQk!ca>8tm4vrzXFMRqwAH4UEU;hRewwYI9* z>@hnYC~bHLd})u$ps*SdXML8BFD`V*u)(F$?ui=kvl64tEO&56s?~YjP$2zXcPUFG z_si#xIvir(`Y1GZOg_lo*mC3aI5gf)WJB~@xT5g%Z=efCuDmL|AtT0mWRI$^bTx*} z(JHh?q%Li9O}q1V$>Zm|VH=Wjk<#WBEbmfn2xJK=NQ%i4R+HpUD|TcljoyWGTVU*y z&1KwB)kSDo5^fJvEL!9547faKw+*<1Ww1;#F~Qndb={G}xZk5NvTL9oYNhkNei}a? zUk0pMmp}y4=upo;_E~sY5quRejHQrFOkECAdlp5Ry*5&Qw?El2j|*?`lv)E5_ct&6I;EQ%`v zKh0(g!AIrP&3FT%ZBf#XkJ^Stuf)i#4on(o@@NpdW5H0lo4hQ8wWlWStBF4Gp3y~I zu0lW9Zi?@9IqhR3&q{qD~Ow4-TV0Ebsm zLA#OKV?8!zDU2U>g#!LA3wL5i(_YaIEUDCH0GbJ|Wiv!&% z90j8kMuK9WrrU;+JBN6V2)cDI(3N8gN}SAKOk`>YE`_TBoBj(cYKHSy z#k2?uRTI%9HP1lTE3wTogto^=fcJuu@WDpRQ3(l2necKF9K(K2GDy-i?H!x*0Z}mP z(YiYx6`&jTi>EBmWxaxu z(oakZe6*DgT_}N0$A#+LZR*yag#x|S9OsZ%KSFZ)5Sk7#?bk@RQzJG9n~9!qj>iWRl2uxV69bn+yq?J<#B}*Kr?kj(lUi2@~vO* z^bbBE*5NV|n2WWJB|Tn1A*77@Sot8tSti-x1cWhkWLMIlUv@PsqRbFA5Y{~Z%2zAB ze@0Uu0L)b@t;AQ7EpY3nis%>RP4T>0H$nmQ9Y@Nk2G zGxuYwlW_f4k&+(vLY@9lw&Y3;hkz2kkpZHp1=xN4(`2~Bcw6fnKw!M zK(TK^gd4jR3yeP`C0yN(N0*}$IY!{k0h-DZ6>1=!%=#R7EFQDEixKkGSRGMqDNYPV zkf>dBVZpX)L(z%{#TQlD&vtp!HYR!^r`OGDhfk#}CnY>E0872Yk_FyWGax|_%Tdx;!Mi@x&F-xm|_{YKA;@+j^f;U9R z>ng{f(u=-}CCptrY44!UwuaL~^za>Y?CN^pD2AO-CTUjbZ`v#3hz>a5Zeqkb$ISX- z(x*`#gHKptyX?X1aSW>0gTP=~G`=)0PCmSNTDIPfo{C(DjN_uSqL_hJVMP>buaFb5q*P`u981I} zWkv>9I+B;?mfoPYW2iLl0_%C%gB4bI5=Iop#;2iqCd_m2Jo$-$P>xQg+nC{{Hq4ed zQqCBgy?3yr_zcjzFG6sJ*qZJnwjE=_M%0;*++aQcT!lit_7705aCYA&>Fkkjy0%H#6)#FNf2q1fLY>?AU2Lx&yWQs(>u-GM4{cL7c3YWY`_XP{z4ZbJBjcQ4u$! zJblizFV-;*nFcEy(J7mjwjn? z()8pz2E%1rPs-MYoi-|8hLCZ{ z6p;HEPGKbd<`4Dx1jI-KOhPM1u(#J9g6L<=w;B&;PB!U99czLy9dA;OPi+eZO_{0R zjy}LEU4O+s;oEe2lVmDGppW*gEJy(F(Wbxn)P`!OONtWWcO*zm4FZ!M3e)xC+U}s& z3|JkwS#J`DMZ8}#DcoDoLI-GnnNh;6LyUIq?>P}ZD^*f3yB(Jl@(>6Owi&mv;;$z^ zb6!kXu^JvnVFiBG)b}FWug#Lyphcf>PzVP-M|`+w3><<>4tR+o}7E4#!)bTN%}FUOTB(Fi@&cZTO%U&RX)7WOGR&Pb0HkE39^8 zs!jT+7iP(?DnTRr$1oiyIlnwEidDcuT2d|UX&jqP*dbb>bRu!Mk18tLSjmlFVKIrW zo_+UvX;g*0OGEB(40XS)4S*_}7v&Q?bLZcyJIR^Q|)slgeU*Wgz}!eACib#8u4885F+l zD^7^@`mJ2BvxkAD06tc?!}-SJqLBms@@r}NgJz9YkuuV0`V3?1-$(Gc3aJf!gu1Nz zAV>EC6f(;>%)SUNq{H(9ZS*zu)G`xXY3v}*mJLTf=;g4tE)#;)TsN$NP=R(Cx&WlV zu=p^JkU^eAL-bweb!fYloS`{dop@GxT)YU>Ts_Cz`dQi#`{J!wQjRsqKxG zi8~OuM493N&dSf0twV!%e=GaOs;&~C%P>qsF` zadpDrM0?-k=7vjli{twsu42&)27e>21-L$7=eF1bVYjDvBxL)Z7m`L8a}p|E1%&HG zdXBolt=Q7)+iOjdT&E$`tZI!mzQYG;^kAdzbZGLfr|^c>a&{lUUL?2n1V@^pGvn6U zXM7>`#fUW;$~iS~jZ1>{SdVk<_|Vu0-W}!Cmf(-7bc;M83{Fp1i&z;W2=eE%+LFlHP#?1;&6y`2HQ&!&>(9Nr zbw;ox)MR|P4->{&VAn6*sO>I%${lc1qHNnBuBi17LFTII1yM$kEh`fwq`z3e;nwM79-Oaqu|?U5w#u zlc)%Vc7vh~aBZ%K-ZwO*m=#uM)_PD;xukG}@G6SOT48YeBuFv7q$Dz8xEA{45S~h; zCvXT>0;?htr6sA0qD$~J4?kyYzgOX7RHf=yBU~9v4pD?k>DJx+Vm_xABC=yt#`K9t z++0qp0c=5?6Gza}J%$*7TyHppUt(k4SyC_kV=4g$;`lF&7kAAy#R@^B#m07>@%5`J~#R-@k z`(1vZ!SoL|A!RZb4VPqEh+;W0X#0|xICf?bSRBap=@%BA8{)==lu;yAI+&iExwC0` zDSVyN+rw!QrMkrk;B$dM#n|eOSySz~u$1Us}{=|^i+MD0Dh`&^JJtVYBY2z7xA*G0l2!+~M(6^YcveN7LQK4_~;T2jt*gWh~ zoSBebOU@*WTNX2X@Vo}5Mf9wny{tZ7&4m%P`T@WrGNH45kos%WBhdX;K+PFO+bVD( z!ewLdW?`4cxtfhnxz}KV5DsO!<=faNY}1dUC|4M=W4`f;3G-yRx}qS{EiLW7o@`HC zK1}OL_W+`_%@9q(&0tLf&uO1@b~|j!Mb}|J5y|%q^55EDABlGj`YOe!Tz)gtK`0(Y z>`ky_=`ni6Dal1xazZbaj1hW({1Oq(cX@KA)@#5#DjC=fz!<`Ty z-NNje4JeNReC1A296nVBPxe}ssS+KAUO2`q^z(byM?$ch{nK?eJe;>~vCw-uVeKzV zj`Q%^t=rz7qOVg!t6y?QfsBWtyMjBhkdm-wpLFy~gh{(kkLtD6_U^xak2%%XNz;Z* zxsWzWuHP`Kf-%nyNlQM&IzO88MA-ycuKO5ixnq1ZpNAZ0%Ukn97NRj3h=i`kde26_ zxysI(ssR8W{Nh4Cnc*gb>qNc@HiQi^wN#3Otf6^;hVr;Jtdm+Ihl~33p{!k3c>ozH z2qo;ZR>{M}QW_PdVkvb?o*IT=I(opjwiSFzPbUPyTNM(SWxIAQ*Zg@RvQ=0-)X zi<|-A>TFxCcgu+vpi2nbE)ODGWwh=`;K6M}F5nl=g~{<)wG%P6!m3X`^cR_!X~=5! ze0|%UVb2cNVzj&+q0f>$n0q}3kltocb~uf3$g`vJUlnU^-21zw;`ySl zOhhg~z~m~d=Uja(IJO$_Zw&AW77+iKV3rVEbf z;H3@8_^PV*d1^z2HaJ6V5daRBdjoXd;b1NB(^_~*vcmotxcT*7#AQ&m%4eT>3h1=3 zD%aXEDl!SJ|7brZ0B`>iU_{Szr&7gc6Hr z_$H?_C(A6|ltKQCM_7(GG{1mr?^D^2Ke7w2p;c~E<@%^z&8>3;ksa{8G8jL^bg#8D zaP57N3oP76F`%F_fvIcd*~gqftG5^6VQN2PF;BhTgPmoB)4>Cm zP*{n`*lyg{o#H^RB*7D#ufO>q1%`2tw!la?l;;5%{>V!QDBcgXCg=upwDbrwB1&Wc z)%w9%i>@uD#pA;WfL}7)xBHic;>(7~?VRP9j-p=bQtAmEr*c!Q`D;PtzDRi`B`)OUV$h)R2t6WBC2O8qxsat$(Ikzpo199? zO|PF?R!*dtYB{H9`j-)X=Dm@AM7Ww4N1_5lo;`q>ohn?oRi;zk`;w|iOy1?fq|QL# zHivASf*q7RpDw({!YOJIJxf6NodJym2C(16YqS+HKPW`CryeqT+5K{`SvjGLT#gjCQU)v!K#(%SX zjl==#*j>yWf=d=LwQ>ic#_D1l)VhR5^Uwl_^1Fc-?`&s2Da;tflqM4RFqbsTuor|B zO(uCoDVNrcU$a#EXMV32)*jvHwN_?v^yW>jjWsK)iKYY23^2jMQ&nIqE~8zaZ(qjBO% z6p+$l%RtraH@90EkM%mWfOp3QUTg@otvu}5ZT+{9;*psZRk6F=yh+pAXsmgY0Q@{` zE~TPUd`|ZHGzj$DR8r56Oud^i-NEimP(n9UMz}eIo6%9X=QLxT6-1@1c%}K|> zoE2zQSL+TMWlvVmUAt#1jC=aw%|;D9C{&@nG7Hyb&w@X8)m)87cYJJ~?oP_fjveGo zAFJJb%7zYF?H`_NjMITUd>YSQMk%Hp-+=b-zd1^rJxP612}Or2f|lj7;V+kKC&Z|wqIST?a*8mP zBjI2(WCVd>xn+Z+63c$&8&4@Zo7)Gw;crx0!0Ht$&Bri@-UUZ^t`j*UJ_&UJ-W>INV_IBBq{quCL)+kiA=%ukg~V|14}9_SP?5= zK6k2pHL!c2F#QMmN|_pa2wblH1TG0*K;#)sLW;d;c#}A|4JgrHE%6%Qzsk1_D6k*a ziI)VJc+T`0chkf!jklR@vFBt~15^ac|1gOgK^4DX;g~EekkmgAoa-m<)PssdsJ2!hE6O7jjA2iRXbVefx)JB{U~X8yLJI*=AK^iU#B^M?x|I|&%M7&YiK z2Xpb$yM5up9*?g3k|bY3m(~}DN8`=UFH4pglJq^L7bvA1f%|Zt zASUgN#qz9sDvTh%@Bd5V4<_N&}@se%7z@@bY9NPf<$O&lBqZy zY%GD4GVEMcEiJLIJtOmOV4uz=i}g^WpMv2kndbRKjFSM*PD1Z*LduT^4F5vD;E}Aq zUOuS5jN;SVPkyAqB%du4#Z zD5dS@eZ8gz>-1z!kx!o^%sxnS=E?%JP=pxmy=h7C%0@nqq0^qgN>H|*%dS%KdKSij zUm|rw%6nB7%N@!UjI&zSKBUjlv$x?(8^@VoqZ%3_TmV)$W|)lUks*&YSeGS=z*!+@ zoQ376pCu}?$-)<%9+dg?ilu~DfNSKia^rH~J{Mmm2$gA9?~P7|3&NXRP;%>e0=1FN zel>%{7VhL{Pn^g-8@a$$F4-lRRR2_we?K7f7>o<`*iV!5QttT~n=omgm5LLg(_v)f z)#(~ZKWY^6p+pEO4g=3i7i#gVfNlD2qQRBdK_VDW2{!^ANWve+qAOD1zT}y7-n(qEQ%us6kYQ<4n^Tj&BeTA>LgMWY18s95h z_Pdy;BY^0K-x222kjJl1CC0rP6$Pl}<9*;S{XcH_e7a@8(ijSi6@>g{9Vei4SC;Mw z=Qwj3uAu5Mg_I02X#OE68mu9Usu%mJTNE z^)}U9F@4j>YmiC&udNjwwP)IieM@y|4_OcFKJ>z-Rqad8fH7?1XziGt5Qhu6lQl)L zjxaM9iNisJR+R;nqWa!#G#BxBiU$7Do{~M1tAc0hhnGHI`9^gUpO)f+ni50UT&r7E zuh_hbjtfZBg%`O!!ae}*;v$AS97Ak={xA;|+5Y;>-%g?k3HJxy)nE?2z zAvzr}oO6z^8gXbG2X3}qIwhW8Y`7z)QSo=3ZRowRt{<4o4pY|$MO#A-t(gO7kB)pT zV^j|kFw4~^$-F0tm~SSa?0i5Yy;&LDIZd@Fl2Ttgi>eA`Adm?ND)M|e7 zd|>-#d#nk9j#rHx`i#++vbKoa;JD|$cB+TmWa=anlCtl%-tb;+)A_vEc;{mIq(1CG zY&Lr~c&mpalm$t?rgsxGcuGBF!ux&CRCn_` zj^C@+G{r5)?u+{~ezYZ8c#i|B4tn{anv!}Kb=1}_I799&$0~WLJ2f!`FH%X7mfg;Mq7GS;dV1Q!e;A6Ej$+w?-~&MUcEkCuCF!SxP6Jj(-62@v(Zo)~yWn&(o~KS5wBlskrR74tr1 z7r>+{zuL)n%HNiA1hB@>w!MaL^l5Xj<*~olmDH3|Ol$UmCm-9DQp&qZp?~g_I4}b5 zDev zBp4E?0n$_%`l|>?U#>=?+oDlhom|MT4A6K6zs2p@J@9@j;tq~;1gYE8hmpGDJFVZ%jlxjecWJ!s6~){kcK#ml_6=I&Kht8SA0W1xgq=vRu_dOSz4q0VTnO?6 zsZ8xG-)iHb?anSfj{yL(Gc_MEs*Ej>NHTe$Z%m5m@oAD_&bB?D9zuEQ{e;3rSzuUZ zfA2f*0s0q^dc1(8Z%9&ZJxFt$k~?UK>8|${ZC@LR=K(;ga<S(=zg|+9FJa1%tbd)K5_IY8ZGGZgfep**~zdD=EaMj`=$lupjGP}e*`G~``(8i! zxQ0U&+x7Xx)oDnS_DvLtQkJ1(F^VSSl9lPIzs7u%P3+3lD!O4B5+?Im8>==wUrpqG!(YLdwh$7}kV?~-_`>tbOJ zu{=_s)qhh@GnU}zuryX8d*~gG!Z;>$o6T*+za|0h8Aa$4Y(d_pU+-6XKu^)g$RG%pfKd85vjR+Kb&FkE#w*7gW+ID&uuC16We1Sc?;Jzp1 z)0h#}EdvT`QCl#0iA~bRQk|6GPV1|yUa8MmX~Sr6%ou~6xqBiHvI`933Qr~9$l1wY1Mh$-1TXfV%GEw0sn+Ybzaj=|2i z5JY4*ZKK@LUV|+tHxj2pz^C?fO!wW1vGw{Bq07<;s3#J__aAu zp)OX0cbY49C`#=vi?i@I=%J7kmhAXI=LNoFUolSTDY4!Dpnli_hlUnPI2*~qHoXWp zJ`R&M#N4Dvu5mxD1R@tVT}H)|MpcOKAqokR3U?(vnK>~oo7u#MRuFGCU6{Bo%h@?o zXX!yy`Yqd$5)Lu3s}@3$9XziWsivBJ;w^lCo#MG<7z1g%&sL2_V?=7_D`%}*iC=h& zHOzSBEH}faTyENOELrVODKxcEVZ1iBfS*&rJGuD4h)3MGSrm^kZE?~LUbrpINbo=5 z6huzF{{i&lhs{6Mx6uC+oMitVssGQx-*vD5yQsh$M;+_CcctF=u;G9!oEe*Rvd%<% z%zTbTGSr%S@V4r5#bs_u=b*7#r9)Y+GzuQNSU}UHmI=C8fz1M@q0B;A4aVeJ@o9@# zz#lmHyECzw2Iu~rw8QJV=Xvt`x%>KlU!MPk;n$^MEDQ`NHmnm*8QH?0AoQq8a#mjV zF%=Z3Nm$p>#kj^3rNR!FWZ?0bO7cYmnZ=Pn-jNt9BxwT^?H7R)`{Umd>gEg^ypC=B z8|;pCrPMS#mlMj*+NLT5+vIgELDogBwWaJE>uCtSNIFH;^>V zkI+R48CYoyd)T5WcaUxfWBax=WUsKiNi}^}`SE@B`qJ`#E77D$hSw4aR|*)dDYABt zA#d-Yo^NX#H*&e>Fwal8SLe?A!2Y5e@lkKXY25ttWzqEZ%;NWnbjiP@a zGH0F9WMl{Xl$ckpZdvl7FM_a(pcuFEBS)Soo;&(SyoCt*kEt1{IQ5CIOZ%)PL=20u z&PPWBFLIK5)In+MtmvRNd@)N(M^djuc&;(kXm*$MooJbXwk%A;strugB7B%T=GUiH zf659n0|VD2GTHMQk<#EbC7HG3ucKOz!24HxYF1i}mouLX4>^l6AZ`;PT&meaJ>A3w zmGM!{@X+Hld^H?isn#L9pW2Pv^Fiw<=!=b5GL%817eu_AMV)E6QTfU+Lo66E%IMh@g%_^|Nv!>0X#GXvx4XbtQLL3swgHYe{T4!8aDP2@SB0 zyn#3;eT)ORR6{{YbTiroa{h@zu1aG%d4)&R4!JPwP}W(=UAkLv^=YOZH#9)sRn9hR zX&DikHp7&>re&@!-Ypa5iEoq$w!_s-%(>Kc%`$xyskU@Hv4_@b7Tp!BNK$0Y9MR1V z-@st4<3-xm^LVDReCDYK>o-J{oV$I|?&02E<(K`dlYdTo?OY3pPFou2jVS+`Gx#*U zsVy$JWLrsA`pg?bi$p-Ld`H!tHBqAxq#sgzoY2qJ#1SYXup|rIRkl*)(zue6IG(i# z(_%v+>6e41qgY23MeZBTUTK8CIKw1CQJ2|!;eLl@u}lOnOYB;mA0J0&)`?%GfVmp) z3JR#Sv`{5dY~@>7SKecbsjdD8lc8=`zw~4*Bktbo6_;DcjOYZ?M2(*GV;7AS%jFQ%I8a`AT>0 z8zjr8eBwLxRc=Vz&-ZLwu}dL(`a9nFDSlI5P%|DS#ch6h_jg1<#3csPb8eV6MSVfeK>v;6wBLb z7u8)xFZ7J3oS0#Eesr+(V<EQu(i;Hg#x1OenqS>SR5&`B%eML zCVbF_uCLxhHlO%y`Xt4Z>sT3Hv0mqAD(Xle9ij1(%ant6uC{&87TyIkLQuwfCxY>~ z&;q2!Q`SyZX6d*{e;CH$Hi}^|ky?bRoY;efB#v=@(fkKA%LE^GgJsjX^;n}%gLV~} zYX@8|?My00e_YYS?5~SE4{^CLmxwlnDzg)l(3BBHC~o*_!@#VF>{;=gtv&Qib1G3| zcApMj*|!8JT4cOP%fg}y5 z=KjZofJdd8RJ5v8r%PImWqTjNzK)c0G_dnzon^Et^?`xbW{r_-n0BY&YP>pA==0ES z9Huskzz|8$ZtnS&|K=qsD0rDNj3MP<20~WRByTmd7>nKH50p< z)>sO7Agx(bFVZNGB2Vyb>es`($sjHR z-jH&ekvlTI{63n84M-G3UG$rEsV_HXbmZxw?n;F8Oc1a4dZctc0c~4UU- zEq2#Zi!pGvJKklv7-;SBIBDn#&AI= zQ|JL@$vfso7yT_`e4!?4ChP;u;jpTDVt>3r5fTE$V?I{@;FFSLwSm8RLMzV&ZiSLL z&;`cMAFj&!^{H*;N?QwFqWVHUo=^w~23{gTRRZZGqcu^(T&vH&ypiQAAc*%U$x8U(1KRYmu)=+pwqza+__{37=q}({hH4%9% zQkYt6Na?3WH)GYbQ4gtXXP5ED1^DU->+4E8M;`<YYZ=Hfi~E&mZ6UaFHc<& z8qUqWNE%9me}$Zi3r(8!W?E$xtzv=3mhf?!L84Q)AlLTLFpnaZCv1|&@TQPml*R(bphP*37!8vIL zD^fWL#B*J+ofe(U3z-{V?_R93!21%ehw%@nifSZ_xSvDRNf;IGYPP zIhoiPTAMhM$k-VHtVJxGoE>%ujBOU2s8~TU#Tuh{=Gn-wF=Hz^S zLKq-q;^X#L$~+q~B4_tRh3<)z+#=A55tr{z7n~3rwBxp*l(%MRij#;_(KlJf!Xy{t zj|Cb0loQDcYr^oeL@+M>>8^|aRw5R3SaMlG<6DaSYP!ayl(B>ElWf;bvXFUy%Dld* zUQV@zyfrPG!E1odsugqxSW1@OQTCxREDt~iCP1q~mU$X(Q|0Hv*yq6qhT# zI`CLaf2!8O5;h$*1*w6{N1EJ=^q+Iub=xxVb6$+@eJ4E9m9f`gYwvQlZ2Sb*Z>Yce z1A{mf*2TaR@J%RN%qIi7?1X?5bom-XQl-a@f^#7o{#}MFWQ1szUk?ijY*cZ1quMs4 zpF8WuLE%&-%8jxS^JPG~mi;p-M_%E5$OXdf5}tY9q-T&RMo|>uxvjyr*|IH`^|z_m zczwDeyB5NYeFd5mNes-aT@XKgYG(^a6U=9%|EW-aAOW8K}Mbp*$n`SV^bQpaVmvtr<{FjU~_qlQn^Y zgwxk4jl25zJK!{=pnC{zsk*9zw_0T4li19?%Sn4~m(G(V;IQXEBYYOF^=OVJ*og3z z@JqaJZoW=+dEA>my`57G!c-avykG<>@mLt4Yny4V|68z zyMGdS@39I0yVT&>#YR&4h?O}NH?z0KOb5*7v?o1(wsJmE7)3pFWKLL}yp&9-5Cbhp z{A@U}#wM*@4~!dvX5N8yK6~~~ls8Nb48g`B&tUmwa79@dL|Ii`unZb_(ad?*Kg-qG zYej3pLO0wz}|(-iduys8Rch#6n)7SWY?Ck${_I5gz3nKPG` zA<)dE-%F*B8@W-kCY6CS8r?pDZkPdCz z6?iS3Onus6dJxe<#_ieJ5`LJLIz4RAO^7Q*^2?3-#3L__3Vw$HhTyW|!1T=4(UVBj z4?3oTBV-@iRfQR6u?SzhAd|N9YSG`?H#UNzLn5-8UQ7CIhE|;&FE#~b*2`^UL{dkT z-81ZW3yn}6HDn16hr2<^^(~@+l7C12@BULswCkZlX#6duP2Wkvgznk*AN<98KJL8% zh^^t2^~>p2aW5T3!0tMIU)5@#qQtq2HhuGzd)CA}1+j=z`=dW{Ru)Fk5UAc}rs=d3 zT5vmCiXoHr>~w*RQNV{m3AvfJrGsDADA1L97)BHzt%K)+?M@x#`ukhRTXC zoU6yi5s@)5eh?Jlw?60-bM(&^MNm2r9q2Pc_xJMTC^}dS7y)R0X@Zr0Z2CQmrgBzco&S=N`BQ{7tz1Sy6tIa{}>~ZeCpB?^{MlWyLl3aLvwA%8zr#m=Qmr#1WFJ_zKdalp1|$F>ysCeZ7bjUeEfQx zw1S7pTC^KIu;d6)GW;e+;~$nsZQ>ewbxE?BRUtOj)SW+vF8-}A#kHGC2#hwF>O4`>7t_9!N!f=brcnTSW@X z58A-x{*Rukj*sF{=A1v#mBYGWX6HB)EJUDtq@ZzGb~va*Dmv0YIO-%$iOYPFCj#<9 z*Ruz-td=Nu;kfxOq4_+flmrKx?-&cGfJ7Z}^QzNy)Br#(&=j9Ma~7Uo%N=7!7bTzz z!KQ7yk6>C*2jVpfg7NEmceAjIs_V_jBuM{W=J}3)kosgJlz3$%S&LB!=jombeoNKG z-ao|<2N|ON1;@PBYxPi&Ta12WHUcH5v?ao2F|i6XDwgx5X(!jdkDDu>v5&{8GB#ghr?IS}yByHM&J5ttcyfNjO zi`95SD>v2$b*0@yDowT09u|Zw!DkSnQD08Y$dB5QrE@APjCGE22x>zOMOHM0N}{X^ z0R!LY8D^RLiH$uuqpBMkt4bZpal|os5vs1s3V3&j6kAd^tg}q8=dwP`E>h_&pZeJ$4_N+Z z!`m#~Xp?!Z59hd8{i04$&f1)7Y|3)b_Vaf)`rp@!?bI?w|wemuGvB5w35pTq8FIYHJHr zhSwsJL|F*Fm=EzW@_W1K?s_*ift^B_x(DM@q0CdDrfp7^dax(>J{E~fq5STjzVW_q zNJ{N<1N?+u3I2A>q2AQF{188WY{CDNV`lp&$NXRaBa{Hx8vh>`t*WVwqK@es3ku%f zmR}|)x=?@!sfg4JYO!co3>O(vpwJ1sn+8k9yl+f2GkH~cscQGoKYqv4UC<3#%p>1@ z9c%fXLlOsS*xJrvHr1Ma?bUnu@ikK03&at9&0>whVbU31w~KjO1X~*YJ_kMB8L}_I zj;lT4&cu7Q#^YWxp~GCYn&iy-0_r-6^&D+KR)@S>pU#Q(40;AGGyVV$X351x4(6?X zp?N9}hwZ#jAZK8<&~#wV#!I{jWkf~_mQmokAt8%hQ$8hHFfE;d<v2AO|wry+2 zwpp=l+qP{xsn|v(m89b2*7={lw|n$6`rN1cxp%Cw-t4`{elvfcIlmKYE)(5t{`?>ga_l_asKg+SK)#)tsk{0Bo`>P`{Kck}^s(dV;q#A!iU>h}}prUP&y`L&U%KK}%T z^z<%k8ZKw&3fh$sWmhrFQ)F|hVILAJ4^u68x}oBO^p;|xrfUr>`qV~KOSO&%C|Fzq zN8JsZOnIqFSzUS8%tj>L4Lnbe`B>X5HKZ&g^XnfljlZgJ%v|pGaQ&5+fq)o=cJq9$ z)yB5v^e`p|!O^=@jIzf|(8N49Yt?*fM6ikcNYH+2_+&-$gc{yj>I}V=0|-|c(?UkO zN9TKR?)SDJ8f^Mnuw?l<8Wcw&9$WVuXF5CvpoBo=h6RN_a=s;@NNzr!B9*V^C@UOF zR;MF?oL3e42!>P?`<7aaMFgTnozXeUFe)vL#nioprmj}VtxclT|02wytv_UYVj1AS zs$rO-bHi4sH5HAGjDd>X>MR4y_)_{U)@ByRYZ9y{fn_tTD>Ye7M-AGmC{M(x^|mC0 zy<%4jb^bQxoMi`ZF++7BBnE3pa|3#HhO1&Fq>@~pIDb!W_=e`jnG}e8nAC)<$F$Qi z2=m^_r6h5er7)NK6xu4%sXbTRC z#-1ck{6!EUqfnKHOx_8`r5BhlC4ECYC~Lg9@N4O=5hB~NWil zhiO3Ho2A=O%XEi1K7I1PGlY)g+WuaJICpe^M_LDSA?@C(g=oSx&CP44$#bD8=Y**l zsOXn1o?hbnaH_US2jCv`!7sdm%oGyb1xXSyhMU%iW32*4yt3k3l=n&HvvmT!5j*T7 ztQa2epojwS zJ+zv~vtpfQPOEiOn8a}9>Tgk2c(yIgFMBlaV%We(y?gIr( zTgk~63pkjcS$C^)lSOW?!TwjwGOslaF1D_;zA~JnA;QL?ytlTfkKwXg%UayCVQj3J zJBKm&j;w871BkE7r!Ru}&poFdK>Sg328A0e8LO8*J_E^o|QeiNP8v_79t1k0!~+U(QWwR;QZ=wf-2@# zFs43Nun693yg?0UDdxV|Lyv_Fye2Of=!B}vMnY{TX&)@MMONfIRsndp<_P}_0 zldKOXazHG!$aq9NYY4|$_?K76ck??QUMz_YN%@5W4y9t{z%(!r5Xyf9pZq(#%VSFl*D1%x?7?}St(p)NMlEY)#yq?#B~u12 zI(KEUB_L({V`k3T0=JQWPf+oj^=W#~&p4<;=NDm*v=ZF2APn?_#Vu?9zi~*zN-Ymf@jTl4VJ0 zPQVQ{RnPO{O;jdvB?o1~y1!eBH9Csel$oDIx(+7|HAW7Pn>0C4xy!Fl$zmqLAcMJ8 zn8ha1YGp`7S5%VAL;}MNe`BNj$y%uiGO6K2_8zQod(t$9#(?sgiXj-H%>T-O2Sx_G zS|uOV3~sro0bvgKHfs%W3}rlOorR`bMav1J;e4+Yy) zXe1mHACnnc##A~9R@GR_e1R*rwc}^L!kx(&M;%DEU!B1wTY|T@py#yJYC&KKvhFTj>Fqv(B zAnXrL)x6X!#Nh`2P7?GS{%Pt>O{;(RJ(jZvR-G-FFh{j+dopXudS+!tjT9U&NBtJM zf4MlN#)R~Vytf0W(^ne!q~ama`9jS{5@$o&Kn2M~M=^h*;*GDL2O&t=z-z{xTL&{f zNkuPTb!?8C;E4p#f%steH01^|1gHpk_Asi7^fnl`UWJ?J% z+4)N%l9McTcSW;U<>H!05$QJ>QAvUBfS;BlB>`9U+JIfTi8% zV{|)qjNC$>=Ta5a(t^x&QnYpThNd_4X@YR$)?66uCP`pO)`jSFS@wesGcoQwZ1$iZ zqu%vP=LoSEXsyxhkA3%Z?BB_APP$LguN~UtUp(W)@C{G7d2P8jmxd-BU>yitH>tVH z=KB&OZ;{~_?ujz4dm|o4HfjwCw_VW!Z(}MYS^#AjH^$nptZ<{XH!jeHcO3Mo@nrje z*vDi>zF6oJ>tZLIJJpk&^sFD7DL zXavKJ?i14<{3&;C2%x8jmJE~avFX=l{qPD6unx{B@%ZoPuw#Pf1Os;*QR+8! zL*}80ynF$rWMUX(S`j+Xmb3{p{u_qp)&0y(h`Uq_p>OY)JCKy`4w?f|-eA^5T(jR0 z8{~V!(IpdUFtbL@JbsBTnBeQDTUDyj3(*NyL&C+|#u}g~<(%6%kXR8a_C(aquM*$Z z_l`fN>40UPSrH;AVkNz;DD7IP#9Cg4) zUNnvFwH6KDfs2^i>GTx?$lta|Y_9H}`pJU6K4)FD(fcw;C)6J5uN`$aJh0@HjIY57 z&!wM%E3S@jNS^Ugw|CVKY(zI84=AD380Ms)-p)JWoP6OEZ6gYmTs_xjJdvb2EGgP$ zrEPnGR__%&U8TX`o%n`!lzZTUfG;n}tO-e1hHBxq?{4IlS6EHP7`vlWW3`}3>=_f6 z^@zx*L}UPNw}-Hx5AHXVOA1Z=#QY(&#fb7mBZ$OuP&_VcfUpBqZqOwQ#91!A2?~|% zkH{qaAm4!%?yxcs;Z|ID2oNT{kPgISpPK`$&g}ed=lD7^Tyg87@^zYZVOObT*m1u; z!q|GmX#uziP<3eAcA-@BOLc0B_jnJaL3*!DwobUl-6S0CwjKt`k$2(|Nq;c2^#*j z@6yOw*v`fVXlpEEVQcayg>p6d_sy5tsuyzDf|$G{k*8AKXh=2}#p)XU%UT=MOG`g8 z(iE(SiOzcAFHl$egi=H=r0+E^31rrb5avQHU#96rljsWgUFmncoo1eA;0Ay4^ZS0$ z7!iZ=fwMyEEW4v-hY!{}9vxVax7MqM(Poz_>Cr6XWMj{&mTI4>4y>{Wua0n`wHE(D zL$SkRFadH_zrzK-n$GXbZIyT` z`64sf)ccIGRTD$Y$GstzV4-^zZy&hI{-7>lEDG2Y#AHq*^Q`!c)O0>m-`{$_6p*I) zg>26k73w~OST#X8_}ee*66Ts1ze%yEc!~lTbwD-PX;tKM{hOB~ctf-!28rLt`9$~K z`8n109BeB`Pd*0taNIm+AbL%v@)+}|L(E>ZWTv(hQ_nGGz1adRWU~^LSk;Y{Maihdr`?#|kKN2}| z&xyQs8@h8I>-?Ed*CRK{gKGrDNAM*UN=e?1p*fIcqbO&*%oYBD`x_{f^2SfdQHRj= zy43H$Cjln;6<8Z=h@)sepUd;SYwNVK!V2{aHNu7_EkSZX`?M+ML8fOcpJn zXZVD zPAS7x4Ab;jX7695-54vnzW+f@1?rzjllfYF64fqNu*1);~zCHxT_J zh=a8(ZR5~SqZLs7*O%<;mk8-BQ%#_y6SrL428TBgZqFWlml@6i`F@|7`33fh@-{;I z8y5=DdZeXibDm7S=5U(Lyxp$W)`IAa#uBe%n!?fKCdg{8DJhG3h%YO5rdVfGBrCya zS$b}{(rP-S&<2*^$~K!t87i)@H)PbzV7|c1R-{1r@6D9Mu_~LH=Po%-w;vu$GV2V>iFiX=%`nV|MC(`q z$-n;8PnaLlS+d1i2x~I@)D(){5XOJ6An2~GPrMs>!26zl8)bf!(XmCB^!@-jJ3%p+ z2g7IIMd)&Ajz&%*lrij4REG~NE21Qb2GcOE#n@|oA~mAodagWHOk1Gu#y?2zIzw=X zbSU0{L*Dg5&YbN9@<+m}%xXH^>Wt@@nPR!kYJO!W)|RWWZvNOgPt-<2A)3-%gCugl z30>`E430-D_9{hpRyVV<1=4}>o5Wp@wOza`lo1qDm=swyW{O;xb?Vs&0RIfKP46kc zombRlZJn50uH$=5Iv-p{2H)V_C-l#xZOiFVqRrt@;u1M2R0N5fRssMIhu52@%reul z(Nshl5YtXne*pJdad$pCEfJP1d4Wv{!(DUQbpfv}_A4<{Qp5udGM{J)QQrJJEjMJb zl6uk^^yO!w7Y~U~8nypinUC9XB>8^!TKalnze0if1+@9Jt-JloF(!7ev|J*!=viA1`gC)y ze%Uv%uq>h9JV;l3MZf;>*V_h^nfotUpdf?E20Kun*H0ESsWJc9(MQl*O6R!AE1 z>=ovEJql$3`=(IVd%ceBq8POhMuPAbQoo$qcIyPzNi+HbqM`+h-*o+oEgIsbL%BK4 zmG0w=3tmIoUd%)$1>o~t9+Nx>Bkddwo^kdDTNic^Y5)0I*01%Gb6|XL?EFj4Q{6An z?s1@gYcHHf+Xe#bRVaf0##jHsiZqCcDq2w}vKqc_2$BE3ueMR{Cw zw?(&fRhchCY;rOtS~%+jU0I8{J2T_)q$pM<#-WX|R`c1=1)FY1zn$SkRi{RVr#GQt zVipDA{*Lt{Uz2byYQg1&T4u|g*r)3tzkmZ^@@Q?T3DLA{Mc--1kSYZZRn>n_Q?Z1R z503uhTt(r*rK~I)0tb7Ig-{!Njg62SyBs@CH~6x@XPe;k;Rc8EpRJGMn)KNd+F(`s0`&8OBDm6reiHADX1S<2Ak^9iW1@qy@Eih$F z7siLAU!~VWdo=aE%{yV}FSK-he&t&|nBChoz0VkrWj9-@uS}&o&1~=db#Xo){M7dY zvxnRPPiu1G9F(Gvm7Y1#U2I`# zf_ApUij5XosbdO%j;2d@gkag&poelM>)tA`GDU%1z(YCJU}R3&L&u|H)ac~SsS==T zi?J{nsaX(a&yoR9(7D}e=E%KPR*^S~*gXpMKOWP{19Qbc?|z53qwm217e7EIhhX7IZ}8)%Pl zrUf1WvBc?cGBWY0Rj+PO^DZ zA$1xN1Bg=g$`k|6L{3xJP(vuyI1O)xIHRLU7lUz|7^lLGsyO-8Pj9i5uP%&t-=4*qHC#QDO;gMl0iR;^hy^rn^ z)7f>)N{@aI7%bI0(1A^9e~RyO`+R#qA<_c$KO!Oc#^rU(@c6#523=kTU(b%*Neh1`&38N^0em*ZcM58^*-p|g`)Z0j zg99L52@HOA{&?ndeWCR73DCs{md`fsqNL@+m_Fx_JbF~sK_W=z3(3ALfocQ>28d7F z=#_eXbI~%*zP?hV*s4{IU#9if{oRRAJ}Q`#cw%nnwf53bSF8&ZZ{Ti57sq~8$u3=0Iw z06pn9g;7rHpu^}uBou;mPP5~wOK)Z;)0yqr+8q!$LovbcarT=@^bG?V%nwmNSZsVI z(blTY&c)UjP~^x-E|)nc+4N!9%{um;aAut;XxUH5*wrEoA&3Ur2NcEl1IaQMSDketfz7Os%5q&e<93H^;qco_8 zm}v|9ZXrh~t1YJsL*-KoVCj9)iIyw1+RWMQg>S#NzUDsYSh9=-| zb`-qmrLUbhinIGAxL0EQNI!`ii&Of8JTrP{{sl{a_z7|Q^RC>5-bqXiuT?A{!s)@F+AO033L4cLHBp11e8b?F5k+ zl;5~YEPq7O8FQe8g@94R=9{6YoailgLml?rTaK|e#Z9>@)sYVQ9h?>UYRmt(|Kk^y z8^6FLMNn0i5H4(SlDl<{k(2o#Q^MYTKp)Qxs8*!fPW?OLqWdAq(yaN#dqCwE@6oH^ z9s=_jtZp6U| zcx@=7!aRoThv$G=&?$mG6dut!XgKe(Q$q~l#0)8Xr%ObqW);(^Xpfk;ZzrF*z@Rh4 zOhR9E9y7V5Gs;E6MR&^Y7&40i|)}t&-`hPKc+&gJS_eT%c;wffFDhSo|$=bHFb4;+?}1>0Xep3fDWwNZ9|h@619-l zVy!1hZoY`{)a_6!x73c5t0q@zH=t=J{u93`a=IUjUQ4dmVk}9KD0sr4pfXhD-4o)d z@n%p=VJRBCCmmrO{NvosX*RrM(sCm#v*?ibBjq$R!ibW^kSzuhl^H2U2FLUeUlvaV z1LEejCO4X8&uYS_slU3n>?VmcQ|f5P3IjJc8gPQd6)|kLpl5~zWWBeOE<-OMga+nR z_5yz(si~GlG@rM(RL~l;Ljm^GnwV`8gZRYp1g%{JoWF}b@b&MM-Up8J1e6o+QdeV*RBSkTuVNiBMi~)@;{>If zmrEUxleb5Sw7=~qo+HkC)jnRFDfmJ0EgzKonmg9HtvKlFA1gbu%dC*r7#a@hn|pjr3Lg= zH!uA269*FX@ab;HcG;2(ebU9kcyGh^_|0d1P+I>Jtmn?( z$lnqr4cfoMZCO9YetI@oj32>>jg|EiY}F}LMR`^sJyNWt&5~{0RN%Or)Hb+Fa%KL4 z!tvQh=IZ@qFJl%ObmsY!$JU8EhGSNK(D0bH)ouU9C1b=}XUAf(4fc-VF9L9Iv?&t* zWO4mp|A_#p|2_diCZ=|dCjUj4x>80lL;SRHw0GwuTM#N1#i4^C4I+tPKrA){w~7|P zDUSYa5_4d|k+}&-jl9=C%bl}xEy1%+SL<~dVR(<_+M?hjO;hG{9MQWK4`-+G`9X$NXu43woK1RGg<9*>0Fz*Sn}K(wkcXEzsIg_$f?!rDD$ zJk2}|1zat^D;crIRVqN;A@S1LJhfa**<|STQ9YM1Ky7_==n~|R%Agl|Of_DaY}CJN z2C!l;KP|t=7B{n1zWsm^q-wL;M}&gL(>+~590lT0dqQ<9S=1|Pqiy3kHBWdvpy^Il z)uiRn&3;jiA4f(f7Q@klgd_xBRrH|u&lEw0>V{tIK3AV3u82n>Oof&xvSvpp{^H#z zKjh{#QarG0x2yEh8}VY`^L< z)+xvg_>Od|9lp+cHI2Xg+holFqk=;|ZM(LYvv#2jdNlX5A6eFnw@rcr>q#D>RlH@Q zf~vJV4x3Y#AYB0r^44u2?|4=BkCeTwx4`Ohn?jhCjS#16ui7~La0b8|CGceVknVDL`TWZA6 zX&rBl;BrzRG({u)j#*o#M!w{fwr?#oPn&ZpJriAM_b3frWKiAW2FY zs(1XYF6tqENHOnuC@{h!$Zej${XO&D4S=?RNoh7>0XvGm*el=_g)rhbIF6ZPXe@@M z@*z|+jQ@({voV&!?9H-JmFv|MUGBI8afF~lJ=$12nzlBuOtC?kR4nSMur{CNch9ql zl7)H76YA-&o)yUAhkzmRXALVZMFK4;C|3Hm<77nDRUsBo`l(B zprv-m#xcaOYM*dVg7pRfw@?Vp^A%75Rf2m_r=ByF8cY@IBe zEnH2MogFP~&Hnt%9_aWVUZkV^M+FO_ewem87h4y%e2-95Q1lE$)0fUjBPW-|CZ#%i zRS01+=H8gHy|BCGzaPes@n+Z#n+#2aKqIULwfAy&;u2(iA=Sn0R1U}k6vtVTjS}R6hNj*krBClmV zs&I2A)twt0t&=8bV_3P5DM$fg17;K;w9@D?)$ID^=kPl<*gYasJ(koNV~q2DPYE0^ z(AVxPn9CiWQGs1-8pK_eaQ+0aV(GO}?tT%jbzEhx{{8I(S-1v6=3byH)ilt`NuaZY znRqKvc(^cJv;Sk~rT4bx_lfvIL4F%vaggmR51i;}-b~%A-zFy8M?bt>Sf;F*|3?EH z?OnvU7U?9(xCH%D58-1vDlENE*7Yik5TjeRpdQBWH(32uDb(sTSun32GBA7p^tO>m>q(-6O8FG-U}>!+{m~{ty4E zMei29ic|jyfVKblrXA`3{#li_wR5xmTLS+5iLx`$+2rpddZlsZhN_DG*eIt^w- zGXGt={7b^jLSC35qcHf8Ig~+~aR9S*eQpRflMf- z!%j@j!B_rQf~VnLf$r9djz(vvIuw3S4(IL%x1aA@N8PElex5(UK&)=t1DO1)Q?@Wx z7qklWV-d^)JFo~Enw_;;55kj>cC5d_nVU9jF+OBxT%Ed3N0+b~UrTg`n7oi=*Bqb2 z2!Uow1yKti#ig*XoUMnfQP|7AW)Z$$O@qREbNI9NVvmXEbw?sA2bzK33{jN!BMJl` zY&6xYkdy!h*x)S7qpqP;T7E7+NCXAkL8Qn%w=TCdgIyj%sqG4(yTl84*yv)=IMfdr((bJkBco~b zRVO3E3~XxA)gvO=E=$q|pmIb8yBR}zx_Gs&WELnyv}i-qEf=prJ_hz9evRpCQM#hi zW2DR=PFb^jG=X$pMEjwsjalPzcPkx4t3%^}MUSDeP};d_HIu|rU>O@g1J3rQ1>N4Q z{Yc?Fo5EOw+Qy?XpH@Itp>MskOq0EAxv+q@+@!O-Y`dyDtMl>C= zwgVot%$aHK#?Sg?^pOXZaV=R@0*TJAzgEhGGYU&=tmY)nC6ifHP)dPC7D%=NodG!G zc+9ZLL$1zosC4OB#cDGNyq8ni$es3y7;HnHT*Xc{Hs#ssaZo|c-U=eH&_ufJP!=s4 z`9IyLAc;@KVgvZ0S(4QfNq^guicukJD^pof5=6n@{W1&hy=gM!&`#HfXoa$-nyrTf_4zF%pR!3GuFj| z5ysEqm6}%f)o}hwWKb7HriW1O?@J#j-jztGiz~Uyb~F^X59ZV$1xoW`&c@L~Sb}eG zh}b}fRtk*);FVNN7>f)P47PMY$bKJyXo`=|q3PHbG`lp`vS(SjNo@{?*Yo7EZ!lA> z=3UO7$YVY#;EjDdIT%+Ab=GFcXWOE9aS zMvYNOy=W~%FB707xdnd!Ro~L7uTH`drS{>WxsTQ*^%W_Ssa%f*of{WM1_2~<&|P=8 zD=YV#xGdzRA`6SB(#J69c3QC4y7kQ7uNgn-u5o(k&J=#Ee!m-i2)mOS3uf8WCjxG5 z$vcG!(LAmbO#u^$;-Mao#!|U1`MaI2d7H# z`-SN}h*T=s}ah47Tq=xld{F38@xtWR7H4Alr4MscU0uj5$^g6@<}O1nR2YVq&${;q zbqLT`@Q<71$rs>2{N;*o_9YhOW9h@*_p>G|!H@xIob+={1b^h*0{f+kETW+$;*}!* zRmslov2}|`AgELCU}bJT>*%W!ep_eTS91GWfl+`64#my)K5_GHy`8vW{<7DyzOh;U zC&pMme~#t~x&1Rq-0Scj#uyAN>d4fBS`!Br4bf`a7?azS9lsM;k#bd>`vwlc#1>W0 zs(r~?#Opf< z!2&>QX}a)gl&`gYn2GdCc%9O#W6@%FE3tC$xRo7|rqRu=XD<2+W@ z!pZ56$oxBy3p$$phbUg1{4b$7`ni~rLa$8^Q$`s9^8>bFpY@9h5oPp*3Mw84$ z#@3pttAE;4L9H(u0jZ*d_YK%new3MOs#YF@tmI-gXQGqu-HwyR=iB=OP9HA5X`F%k zUU|nbPFD*ZZR$@Liz}*ab10K#+zqYYI;oS@4Rphh>OBgHcGf$sCO+LrKXP=G9;Uy4 zB@RR#^bRdDhd#hs(1S8|*SkhUp|bF&L%gb|yE2FelI`%;C;%nsytD@dkbTIR7_o9( z;rL>v0`hl65EkIT)~#$tt6?5e)bS=p+8fjl(Xa*nF2O7fzNhddrpom(Lr z$0gTRCI+~xOl=c4RoW@x&^l&}Jd!it#82sUr`)P;+d4>XGcX5DLiprsJbqCM;#?u` zY^ff!nGna8-=LLUa@WLtQRVf{EgVB@7Y&}eK>zfFEOcb6)+{@X>8z%xPF=F|nP9D!`6ptvdIj=hA!#T!W}fF@J5leFwK?7?Kr< zk=3CeInzbBLT<_(Qi1bDhMlrxw8-LveqSm8Yy_ERV#897l!@o#6-pd*ex5NqbG*t# z{~{Yok2eY`41|*c7-#S#Dh|K{8vTT#P{b$(ep){@*@vzGB7pa19tfTV$M*ciq3-Yq zN+bUgwlMw`KQsOaTgiW{?EDXe?Z2Vm26Qy}UxaP5s_tJ%@Gh>PrzE3;4>1T-2}zse zKS?SIV>6O}OITv@Z#{FRm0sU6b%lLVeuH?~4J0oRL-za5KjB_V+bmf*{c^jo#{HP% z^fRm7?d9qLKQ=^k~>Fymw$=B1Vk zsYCX4qB=DW1JAg0*9vMchpXfut`cDCadJVmGKK|Rg4#A?z~{MKlU>F^`yqUb^=I%h`ve5n-++ehv_ zR&LMCwi{1t-a<;*TFcUzq5~wdVh8h{qJ_@5XGB+h&N}u1Ik13hExh_sWO2zwBOVKT zo$=j2h_NIGi!fdx7V|0yiAZxv0U=&B4++zrCGz^O2g*9t}} z@|+yzO%>}Z9-(`?AFqt7JNhULK6(ppa`H0_&v^&jxB&lhayON zp&F;{y+?$}55`Hb1M3?}5QaKv@$PzvCRZ?d6mV0a)iLqr{MXnUvl)3i)`-pKJfj%q zTO!dB6N$@&-2+ zXGcsc+HjHR!O!U%>+>nQ_7Vspeg)qP)NHLpC8PmVHV-C5r76adv@kD%uxvb)DolQ% zL6Xeg%2HeJt9JjlE-g#6b`vqO1ZG(av&jL6qC#MMutzP13})wdRGCXLj<&nIuLzA% zN^$Bqy&pv2OGcBO@Y`p!;U*i0L<0nx(1Zg!t|moxr-r;rZUXF{8VMad{7+yM%2XI7 z@N<4ad#%o4^YU#jQMV6gUydJVTgECU8|`rm z8+JoSG$6fI@UvqhUhsyD+9WSRSY-3P7x4w8Jj;fY)zA?A1tQj^1Uc_`egV0xra;!}O%o)_v~88tvS2j#rOjb3ybBJA=R9bktc?NhN1F zW>q?|-C|TuB-msbbK#?V)J%;_;P9!n7{0!hId?Fs8($_JpbH5-%4An^D3eFWmY8L6 z2s!EFT){&{e;5csg$_fDn;R5Ild(Ws>D}9>$glY-Ek;3iE5?^u7gYWB&Vk!1uYs}? zkNj|ooui5hTEY9J{y0(+6!@{*(&0xV7L1gyIU~l!cO6?}gUMYf+tHfmOJVXTsJdzw zmY#cIc4V4fj}p55fbnR`7%rfJbmRbNgzjD4ex3HKxqg9!zKR{G!!xa@XtUe{03TiT z39EJ(C1#;&KX&K`&IxEYQ$nzBD#QC?vu;xAG~&QhU3-k4g#thnbx9>(LR7;y)FA@g zc1t@0o3T4JYU@Lzv46gJuc~inM)o4Y9q(tdM}B?i(a%M=QK+Lp+C$0-Ldt=$4W76A zm(<8hUP$@^0#f{s(`EmIHtOH!;O{c;za0VPzZcXgYqeBal|#Thg~Ke+H_`a+iZ6c! zkduS6q+xsiYUrktZt0x94!A9Sg7r=oktzu1@9Q-dIk8m-j|dM5-Ol#<<3rQi7wx=q zdqLBLWrZUY?gC55)(7-b)ugQ@XFYMkT(u!nuDDhLb}XT5>rdT(wL=ME$=iaM(&DOmGw@Pz+KOlU|#U z7c?KH29u>RT6u=@Ar%FPQD!+5fe`9J`Eab8Br2cs(4`z@!J*TyGoKr%FqUg;)MctC zb|C=Utaq**wdaz3$Z6dyCNtMKW;3_A9l5fIl;gXvxn43a;kaLfqhy>dFh`&ewJYF; zQ>c>+GYMFz?m`Na?Y7^7bbwWXjXwb&5Ga+w^}0Gh#+`nZuSW=!Bd3={_Xj;0ZJ-as zFj2N6B45gvr7ASvRC}V<1Rp3ly}oCiCEV?X>&TBS(yBIBr88F<+P*SoQvgs&#>^a0 zT9Fr)d_~cHiimqYOKyI;de0od`#q#NV?5^nJ^j2|F^UhV+jjGh*gGnr->PGy3K5)3JElhOm58G@6pPH~Lkg|GB7+SW z7qlk9kts~6ZuX=oi4F!17~oh4(HLzkG{&5>i^sNLBw?E8g~-{)e+L5vJI`PpNSJrI zWXgJBcr3l|8l&5?uk2q>4x)U!oQX8O9JOM9-8M$SkTgA)Gc%NY3Z5lxn8hALtD4jv z7d#*VVpqkMZ=KlSA~&7w@}<^b6|YM=!zz?0jucHCttr}-vS#h8QoQ^M z($jR=M5lKyu6u3$;M@?2mjqG}bb}ZBkC94GP}#0jV7Hx(C+P?*hSzjqZLlNzSL5c} z^=S}WSkQM=y%?LM+B59D-{eX9Y_7yF$w-z?aP-LCGP%C)vi6%nD%?1fTlR4TAJU*t zk|vJ|FGE{jb&kIP>m5kpPan}w*!^*Kn|2TSN55y!-E#K)+3$mY+3(-}`F{V8%X{oF zVDc@h|ESawm%V%p#Op!NEKf0Fy-HFv0$~C|VT(Kk)rwS(obGtuh+Y8FQFj2`I~pe- zJZS4a_$Ze7IF*z}+XL4(8O$ly*L$}JK=f7y#G+1EJ6Y7do!DaRsLFDU__dgkc@Cf3 z9T#OWp;@=D#M7a0B|azm1Bj4KyNKfGyW_1uvjPrH9|c^XbkFCMJx)WSK25uVmEgkV z`tr<#sB}T2)Wjw6s{O$75Go%vlz@j08462BqCaeUC$4L$c?mDje(kDat$ z6%DCS+`B_rma6#_P{!MS?nJA5%)osqc_uJDp@uudS6u5Kwa{n;2t zvLFf@5i7Ay&D(YmF?QDU72|_XqPrw=o*r&>{ns(K*hNJ#^=5CKG}R$gk2ncRkv;R_*aNe;W~W%BA$u;x#g^fPaE9i3`BsLj7LC@T##*raD>(aBmNN!RaqHp(ov&7t zQ`;MdlZT=?%5mHUS77LEten^~_=QV zNU{kjG9twy)3jK_3-Z1^Apn2VP3$4#bf>IIJnXEYT*sRi#$+&W;>KjUw3U=Px1efH zofuKDa|hduL*25_1#FhU3HGW`edI5<4YzjkzWYCK8!CSJ>P_m;_bf%ghhMyW>rwpM zW0kHcRXDU-O=y^}^nULksi63gYYt*?5gvdZfVJ@4 zPI@rzL3=qD;S``#LV^*NlWj-7urq)A!nu5Xa)Ik*y%bC=@4OSvJ&bs=%vkp$+gI}U#B7-BfE9!i3RbF828 zj?tacN`$--nP`wCH+T_Y7yuXd9iq`hnE;!;xA$Vl{!UPil&L${LKY=$9&rd}miqPR z?4ZPiJ5_?Xob|!FFeSN$M49h!P`$Y#RCQUt-BcXot)}n}FZwiPy$ZF&;+j$c^QiM; z<$UM)=0*y8p39r$5u8Bv@KD?-Yv3)&6#Z)JJd$ahQ@uAAorEY>r4@c`NSPlReC%+P zp>oQG<04>T1qvuojb?b1*M*9DgUJzw;>k_6-pHK1Ne!2jX0;Gn22H!I*`8WzaWg66 zlw|D)D^7vBDYcMrY$7RER1IHS$mj=j5}x6lqJJe>x^)%53coR&_EZ?aT=(g^O9>n= zIVAn?d3WR{#*$_TQy>JPZf{*NSs5uo%(rgb5Y{rguOG1L$5<7-&V}!171Kru0eV0r zev~!-%5GBhY@Gb;N3!gzc1l>F)_jndPeoCL+VTT_&X+7BU|H2P@ro3uF7(op2V=(g z%AYbI8vLp`Fq~4nji=^1ui0OHY-8aNz5GbOD)-$j(Qun$>r<<3F`zI7U4zv%A8lbUi(pW@ zcN=*3t?-eRvDd~63+@O0<#|v5HjSn5R7>O?YSf1g_07uw&1KP|L%?*Id&A+vwEukux1-ho0qoUn zvh5M)w_CSwk8WG=mUyn$1YV&Ap8{z3g&C$~P3^GD(u@ofD+gc|0PtAL%SMG&(?=zx zFb?)u-gSnpUX7iQ{=-oafdrPml>>!m*xnI?8?@M8W`cCgE4Wu-AUa`OQ;7(*Gkuwd zXo}N=Mz!a4?37`aq*^1qkanPwee$QKQw*V^Wr3%Mq^B!35;k|Qrx-?#Z+%m--PFI- zZJVnQlz^|5UGITlgLVviUx|C9&f_wv!<{$za1k55dyiP#jZs>YujKFcF@O7HGMwSQ zUIpX2QzZ18IZA_>iDWxQGJQW?a--b$LYTT_yf9JkfNCs1KXrQ#=rP$KTQGkMqd5$w zMKgV(RH876IpnGZIB(@XOeY1z9UXlcAL-$8TA3vYqD<`Pze?1}&u*3sjHt#8k2Zp~X^NNYSdC%Lk+^aMv~reL#n)bZ5zePT zoT;o^(vev3dPge%v5{e{ILn`cgNu)Apqo92MCt^iJ(|I>!xS^KRMw@fRE|m^06NR4 z>;Wit86@^2JZLej%%B<#f|>D&pH$f`4`?>dHMtIz2q&AuAPobimw34jd))WgJ9%k! zo3SY=iZVF4e9R_Wv)4)*GNvukI)j58^MjpwMLSFavsYs;K8l$4NyBl2DSs@Y!PV~a z^sD2$u(GA+0mdglv z#8dP<-|=n5joi5+!z&omA#iAiQpz1VVXnS~0`W0qD|1+(S2!$HRc@`zR_JnsoQJYM zkv6xcKs5+Fwost>el&Z+tEj*;0)o_q0ZGs5%IcPZ$U8CN&&%hTier( zDrQUieG@fW4<9c5cVT;-$tNLk@JAqtUvdLZdI`5kAjk*=Mo!|A9Tp_`orFuuaE11rhDH+-67=D3mn92UkA%F#0xlF(Kx2ENyri&g&NPIwNFu^Zq+s2Y=FwsyL~%yyvVh~Xh@rh zUPg;c!{Evof%mp#ls$-;#o4EmtSl~53z$AMJhtZVt?*2$%~W=;k!yrMj0c8t91xEQ ze=~U%N_XxtwuswI{L!YGG%2P*XRdDOU6WvCN`54o5gEBR2q)5MEI;@F!u*uzIzPZpf5yzLqRB&mw^V>}dH77_`o zbJGCFTuJKwj8MTu9BZc0AiI-~xQP?+OqtUu4RWVLO~OUo(V{H9?`$?`r0hV9cEiOI z8FwZ7H$@u!tP&KJy1C=l_n5Stwj9kNZ&b2b$>-AL`LE12gtF+iC`^>CKKH}c2e>7W z)15#EwNkHZXp#*Wyq+kdJ4nnky_9ykl}MM%&fk{H1=(COxnN?#OQxD+O-8p}CbDE8 zN^3$L0-u^QG+)70O*=Xd`7D%}9J1WAMv@C=!bDA4^`&_ybXu)EPP~y0t$4s;yfS|G zVjcPG7H-eVs+U@N*-($!{D2`|eW`tN&X7i9ocsYg2#HTBPIc^({n~fggP5U4)1KX^ z1T(x2IpUlqm7M%G+`!@KqljJY^c>y#Z=q#7y;lHN9=cVGJVn z9|)<$ZuD3kgi_=pGlDb5*->tDFcD@@cVye*A`YYG0l;qNWR~lW!0E;vBxHwNvA%UG z7+MiCS_MsL-;9`M^IfcW3jh^&#>A+A@Cc0qC`8*78v zWM#`F!Z9-LfJse#*vg6Pq+P6v6 zeW=&jyx01#yjc&7 z8Km$KS&U3X(vaBpKy{fBFNEDvzeH=I$lsEnrtE)dIZ#izswLf#?rJE|9$U})(gt9= z>eN+xjn-RLtB9JLHoJ~pu-GyKU=uJZ#voVg$DY5gK9^kEPyh0!i&lm+;(Thh^9+~K za+A`mt;c5Yy~W^>5oNhF$2juHmIXcbTllIeOGdZJs|0Y2$1Summyz0Dw{vXRD0cq) z)t*bnT&z$Yn=tt|@-_;O;X{eQ>qp+3+kwQl!jf~w!AbpX(xJJ~TWZYT7jrpoc{oa^ zEAzUNmhM3EVY8hONui7)d#ZxeFw{ZLC^(I>zMw0bg*K&UqaNf=@W;t(82%ujTZo)@ zYsqziFkr9AXTHgGWt@%6G_N&NAC+ES9n&DA_Z0vke3R^u7z z7raiJ4uW#*?nLZ>%KXL}Nr=ii>lwruc{S;_mfc}2f#&auS0y+bT75tu?x(n)h~F@I zNxAo9_eu?iY$f!1I44ckBYYp>lO)NTjb`>L1D#XaIOBSC3nWn@JB1B}2bVO#D**b<`$7Xwi|_>dt329f@oEaz)YHvVU7qQWk7ooPnG_lL z?Gk27N*kw55LTH8*ILS7loz~l&0HE7jmw)eO+n@KKFgw??YCz=9qttco z2-N^QS&<&Bp9xQE@|IdDOX|MP2XUbi9Jk?B+8i)GULV9A5cUbv9fuFy9Wro>Kf!|+ zz%2y3Cpc=o(w9<5sAW64XpRO$FLdh1g&Q0ornW(KW)0o6uWa8L5UaIBhp+-aKYU4U zUGIjVzQMUfE!ZFfubYa~dw&X#7nS4m{%e=uDWUBt3J;NIFI@?2x~wT}M$e#^jPi=H zyn%ayGw^&1V++hfNo@FAjZxf|Do!(18pV}vWT3_RoEV$N`nor~Q9 zr;M-nAksIe8)Mt!gm=VSEH`$(tXtW&fZHA1)Dcp?gzt-S`}vXb$MBpyR|S|0Dh?0T zisg?!p0(pf@MVhNYqNR5O_3loIi<^eF+dWbph^H2q(ISNCm*7Ve6$nn7HqU= z-cUS>AP%OmOVr+bZpM}R?hu3&)s;uipl|F6ef;{6o`apmx^9E7Z?y%w5c!DpIBri+ z6!p>d+_d6RHr|MMfHSw%4{{s7t+D`&r@ZPJZkf*BPxoMP;A0dv_#8`TYX*IYoR_`J1rYT z1~Q_0XM0sl8#7LgVIF8>yTvC=^t+nU(Dv0`2_`2! z;d82N1TYspFb{O7Cr6jbr7~SZ6UhT|>EXuC0G_~Ur*y;CNW(jjx)oubpu~5L8K|I6 zX|`{S2in4Qae5F=khD7bSROdi(b(ZbBk+eLTgYrV=-T&ecx!J@0+#%VZ4kc3C30TA z_8_yYAW=L$_&z=a7K(9zguWw?pP{Z5&!yU}a6b5>N+n_JaK1{S+(4YmWCQ4HOi5B_ z$w}^%tzu3s_lBA3;Ds*s<`5Hla;g%#gzvc>>Xujz6_46g2x>K^tw{j@Ehko~Ja(hX zr%F*(OQ2D+9%5c);krYdPeN* z9Gjyzlq_U(RTG5g^s!F4dd2R!N}Oaz-p%GSUZt9fA}tB$yOgdTur-lw!?Y~ONt#(^ zu_l{DG0s6O`a!JM-GwkgVtID=0$lRK21P4N$eo>ybstzn)pDoJ&=SP4LE9J6ce_cD zjb-J^?A|Uv(7(;HLvF@_Dy`yRw`z%9`GzSBg(Z_1AM0M7Qep!?Vs9|2teDE|?BEL$ z$aFh*1|OO+j~$fnpgIY>gBN$4RdrYJiUe8vE03P@hdN0*t9{;wRR%swC8@E@GqyNY zuPn3RHsJ~8_CvI-tB}rJEG~?uv8}cDZ;9ehLp-GIGlEXeKtXBEFd$e2? zuMer8i%PwYSD=3A-_JI&)O|wz{;^nSy(G6KW6eP_4i~4b_wp5|M;h8GL!T&)YFKMO z-R{DOb$u7HI}SeSBV$CQHDCWp>POFyYbeKef7$oMI(K_lg$M*xL-Ak5ME(*8F?bRg z`5&<@(?7I=JwBli_4{^2Fj7E?=(JZw(bh%jVAt3A`W9h?6ltPN7(_uh2bCh_MEh3P zN-gexNTjjT-g(7GGAf@LS1?r1Cv%IRVtI{a`pwmtL}G>mibb2nk@IrtvSo``^in(H zVZ#y#{(B@67}yOhcj8Q_i_!Qy`kf&W!uz-~jL?9zk@ev-%4IsNdBzW>V)O>&!#+s- z?{t0$yQ|753l#$61vv=sFx?iG%bbt1?W+RkLix<ArD4xRFF=&T5uOx-SyW9Zw!R16GHwcb6k^Ck1>K@gTJ8`z}Ea zD#T%|5!}aNn35Lho>UY$Vv(=@jY$bT_mdq_8Pf=J40O#|$W%G_n4H$l)X` zad)lWNS;F zf#6?=f>qFBxb8yy6xUz7mH+6iLL3X(?Zq1Hif-Pc-`AsqAQSBU_I`iLikFhQ2bytB zTiU%^2d8AhaBt&K*94-vwu{)7ptT?_WY&?X5#2C6eexKyRTw}QPuqt{X&|FU)+ly$ zS=bwz%@N$ab97%@7cLyzYTU-Q(b#rl+h$`Y4Vt7e8Yhiy+qP}nH$85@^PU&?{`IwE zCmkKhGxwTn;+b=<-`+gK@ zyf%e{s%>Iuq_3W$^a7P*%6p8;aOhw_->!*Kw940LE(YU@5lf|SVP>bcc=O=spbTR% zx|1=b=;?#io)-~Nft@?MC|^3WlH^}`CB*{o$CN%gDXtYP9pENRx3zx1tGeF6_6Z#D zM#-4WIEiyY62Cx*#{S#+3~&AnKYkH3@8V5)B%uYi_Jz($cX(g(eitU8?%>gti>Dhy z8|=7wH{)YlceWyRLBulpbPMJI?D=AjX6F{ymJ5pnQ2(ykrz~1KX@vo%bNRhhdX+pw6b^{f)uYIp?=aa3dZh~F|pHeOv z=Cs2=*`{|v@Weo!eni7Z=+Q89Zu!UBrNa}r^VwsK%HFZ2M<~9p5J??iU??C8Vs%kY zh8n2gSW%B-(*9uJhIR6DBxIi(;2R&0ZNo;!_fyd=um>-g(Mdk#Kb%t}xUB53SuL}@ zBp+!)1u|jleKLCpfX3E`D{G<#ew%gjHmWs8;wwqVF{#1?2dP^f-^Y^LERq}61a$rc z7pc|BK~r%$QtMNaV5rFPux( zY@aJOzs*_uO2!}hkxq`Hvd_TBM_QLE+Mer9QI-S)?6VE?x-rj~<@Mb?NCM z-7VYBenFh-yB$R9n17ShtABUQtUt(PhrM4ONui0Jl|q4-nqo-7Z*adKN!;`$v7Aj8 zG~%*yCK3NiwsoM%o1GOLs9O@TMOX!-5a(8F6}XL!ta6(lg7q8hIGFQIHW^6kHpF42w zMP!HRK4u3KV-kg;ErW*yY`AmRe%ZFfMrDOsqhX%Xq6^PxwfDAWdwMZzz%p@T9nOS6 z^M>551O13Z5v}S|miY=baRAR9-Gt=DGmS&24@AxKF)sjM-MeQ~x~=<(&^?AL(z}); z3@HE^F=t=W>TN!#ycwCmbCFA8FA|xnl%V+_$acu3@KB{p!d2gWqIVGdjeyes#p;b6=bo{ z3%Zo)q1jOH3M&me@5mHORGdaMQ&+@i$beT&ZyP?JuFnXZ(m5N zVC~$Q1T0)G7?*`sBEc}etrKRhRcw7j63~Uy-sR33mkXzi#~G{u`)(*VAV_;bht9fxuz6v28G?o|m!p(_NIT)%N@zy)~q`A1fzCnSc(#=UuS~71?%! z_w~=DA<1DHFmn=s#lB>`>*P>jQ6vGxX)!GV27BYZj>+JD>zJ*O*#;yp12YFRg9M$-m?=_|#uV|ioR|*l%hz|GG^3B30N%L625Q8LJBbID1Wzoqkxw+>T@*dFbk-zM zXo)eej8kvPvsIIW-G}xPOGic68J$PleFRR6_cunVbiAYp;t1;cW?SFg**;UQ6}ZV9 z8zf#`J`NlMj>Nr=csPYJXo+NbZrw-zux@W7&ndv?bCz8+MRhewZLWCdxNn0KUn?NKvB&4|YnXz-}b^ zdd(K^^CA0T-aVptab96t zDoNAgm|##PKLKJc{JF{HR>ap=DCH8s4f+bj5s?zP-^R+1Ib}M6@#U1V28|6DoMG z0X(KYjWxn8lbT|#*@j=+)hA!o$S+4-m$ibXTwzXRP5?xyi}0Ff`!k^eZ;8SJ9P|uS zpQtL2IZ;+n0MYqZ;scOny+Ht=;+{YX0%CmU6!DWQ2k1<3oTsxAOd_yrk{%hCjC{s~ z?R&pUfTp|UHZmNyaojC2W-W6=I0MNMLf)R~L7{|16suN|VT;Lb2ET&owgyzLBl z;aX4U7m-$cS_pKApsTnAe8HD5H(F>O4___&<4` zea@ms>^>YHcNTZTc_Y1t5w3YIw}vaX`~0@iwos^O7y(%goGJ)pX0THA4WH7?3W`vS z1H4Ge=1c+Gvn>`}g77CILkb=`|08M{6|}E-FqFJS_$cb1%f(k})*YxjAQCP;BE-N3 z-w)6lFbc%85#Lrk8YI!Ni0&Pw42^|nxL86EUf1;+xFZpA=w6NqD)Uw5ih;+m#I2MY zA#gI|k*3OlwuIP!u`)H_)IBgn2pL3>%$NE$75|J0U%?o`Ib)g8-22=kejlNJ1?RZYyCY~9^5@J?(z!b<8ep|bh6zQIwqN=VB= zo>r7^`S1ay<9RG;;|iR;;Lg{_?Lb1!(8}1K))`ayN2~Q`){|k+7!CY@m>H%#QM&K( zIcO!{W<0JvNy9ZLwsAK}U%xp4_WcUUov=PAHngS6>U%vp zK)mz=Z6|aQ_Ezw|Q1E9N1)P3;(XYO}!6CXB8BEiVA8i?tL$-5j0^*3mOBPEB+#5oq(s{)LOXiBNm#&7jcp+-O*uwZsTSZMp~VJALCUGb>9H z{XGcUnn@9d`B53}vm%dr@n;MVjKQ>aPd3n($F0plD=Q;ih*E~Bmj}nC zI9LSztI$dxP$2qt5FlOWX#mGt?g=l?@M9zQVD&R(i=&;ma}0LY>yptI&_kiv`-1GW zXnq7P1cWXIW#we8)(}ARBm1GDmyzx$`I4n4>=iW6-lF&XTbXyD-?FmH&R#%+^$i|W zE^-M1Jv24$jUw0VTfAcKHx8}*Tc39`Ua%ic$Q+uDRx{LJEbr`*M8(}T?C>ViGTRhJ zo=>DXY3fpy0<&GZL09kWvgft%xr@H^Uc=md8TC{(yC&+HC^sL;g>)%<$phOE_sPwc z*-b?h5qp|bwQ5NuxA9KJO%{9EFMbqcNQ?Dwz9>upe1Y26dZXkbdab~xafmTjwr^EP zbryA8&Df-;AVAPp{ z_~OnyCSINEww0Y)wkGhh4HNC@JnV8Vc7KPNiF%V}G342I$|&`c+(vxD?KbuVe{mQs zLp;L}P(A)aeE$-)V={WU#E=>&-9jUAA9ZC?Ds+i)ps{5IJ<=2h5O@n5^SlENgaNUe zb01Oh0xlyC4iR)sluA+n0D#sF03ag{3<3r4{SQ=HyTUL3`0Wb{00MxWfsVZnmA#%G zjg_swfh~=ltsae{G7Nx#Op>l%cD(KtAj&@=VEhXNdjmWB{{ja0pI}UN9CiK+Ec}0q zWo2vhU*M7dM|j_FQrF7mzrdyauW*0eoWI)`6aa|VzdvuS*#Ceo{oMd~t*y;X^mOb^ ztSl8?H_?vz`^vt{g(OV;!ypvH=-}FEVFaDh@ChiJdERIX>3TueTI5MAu-ZxhrZ1;t z834e?UaeH%)vV#f;0CwkbmczTeaL^oj8b&jFRIij@=D-*)$ z%of!uR)1N)Y45m57G;{ULdUKoOp*Fo^WffEOL4 zfPtTq5X=|TpC`KdGi79;FjBO5_c)b5*>qiz%+w5b_y8JG`nb0nxpstfbS%kwi|1%^QdDNRiaK zbjuBC{;KKSE>}s+mq{fv*r)l>5T5~Ti#O8frik@LZPqf!U0K06m`dP8X^9g~8_z!L z&0Zl?LIP~=sm_p(CUj=n>&ppjV|hZ!Sp)5vhG; z$9I#?k;z=@l+w4lx}wBhq$ZWU`|kX~X~VExqDHkM+~xSHK6>Z)u0AOlf`UT0xYz-^ z+93Ejw|L^y>(jc#5%{$-;Uv99j%rIkV^T}_Sa9UjceesBmo2kqZkdV*_L&}jN`Snx zwh$hU)nB=f+RR>kr^LNI`q_+%fQwjIKR6D(E06EaI<>`dfh385q$q|l@I7}$PnC57 zV@p)06Y6mtYhzWv14sy_r}#p_^g@HI&f>>&+X_!)J?m;^;2aGLP=@7b9e0(>S)$hL z&VY>`eBD%$cFvbyyd2%%TWb>t0DvFtS1z>nmS3ctZg#qi2<2XmQN>0;L0sfqObu$G=2$p~ zqANU|`UuPy5qsbUd&$k=V+3r8pTjoTQW%1(wM)SmGTZ$VrK3FQRZB);t5Mct%!rSqhCYW7vPIe2laPwQ1Gf9S;sZlYuQMHl znb2}ZFY&ItMT!G_kG31|>?Ch{FeS25Ff~{8V~;drR7``N>{SR+>)PW!ULBmnlr=fDc-6FXcH<5F=3vT z9CR7l+#L_hUE2xd(HwMf=HeTJC6jTbP_u3nV+nZS#W*K8ezxPrZ1c@?)!bJLHYLh- zUF4e&s#g`8iW!K^*&z|RYL)afjqQnejsU~Qz1@7e*(yCCI3aMVWTDhgB_@`K z{JawngI##TdsotU5vSxl{OJkod(PnZSpK*Q2mnw9`cFCIU$KCntjW&)HFN$q1d8fE zi~05j7S`rEudM2ibn;hj_NxQ@oS)eKGiaSZ6F#-It(CQbt-XnX-S^yr{+h9V&sr8y z(q_oK=-np|WI%xM?NXn-$-M>huHvIn+r;As!~1e75*!Sx4d0VZDyU}qSF28ND+rn+ zGM{BQRBa9%9ukwZ_*6vaWW^saoN$etxGxXw=vPJ`C-)Xv-aBYpN3a#Kd!-6vgZT5S zeFfDpmo?Ng+@uMJ_AOq#jdydlqGN#y+_=%XFQQrTU}iNehzE?I*Fg>KiuxQe!rT*> zCe#6MQ%S=?V{l6`chF-bi|rt^WGDz9;72qG)n@jI><=iwu6%J z8K}x5u|>Yb>i$fa08Om%;Ty5m0$*K49Kl6dV#cm-FB=wF?;dhliiQJ#Z1)-byoazA z1M>kTH3%|_&)20PcqB(F%^)cE62yB5=j&aAF*uI2H+n`%bVd7asyLw;FmZ{jntOe{ zIX`msv>J8x^9^98tCQ*zMS*Q)sFN=#lS24?b6w$x=BMVM_7GB=buInq#7z7Etofvn zJfq(djoT96(o`bBNS~=N=yIb#A+4CK*r-Ae1N;C}!s8W`DF%k& zu#9@TP=glY-&ZpMBamkW>@bO0$h(z=?`@nUKfs>ZY*fdqs7?JXLu0C)`@5@5%%-XX zz6M?h;D2(Je?{hhah3l^Wd2XA|2Jg*N4$Se=Cd+?tfc-i+5EER@AvsT?vG?1rRe7> z3oG(Rrpf$Ip8PM+4Gm0;{$#UCR7pRP&!1(;{LeCY_4KS9EbZkDY#mMX40x?gL|64iK~K_A&!pLH>YQiAP&a&fzSx4CC`So zAtCjlpi*{E=p3z~ebY5r&lY;&`BL{7QciaTD1H>JmnbKkij=Q0+6jCd%EiYiCzr(J z)khkYLDU;bmjGc0!oCF)5OUKHt87C3QF;P`KEKD$pWY@|;hpM@riK$gT)RSp`2gQ+ zJ8)t=kLlyxM>TcHiJKOJUFtyY%+%22I7x02mJkY(Ufl7sD zjYsc376>mOxGjhfN%dlEw|iZa0ylm>(aGY2Ap!Hlvif!llafjE-ODaPrm^u~6VmkS z^}UGsHM);y{Ah84|HFR$T;Tn&N#AR`PX)i4VOV6D6fhl3zzwHhH-36!D;21MQb0JW zFU?Nq;MRJtC=|riQeSqUf-K=a+1=601F~=_GV3JeaAO;y>oX%Iuvjk2&}X6=r4YWh zFd&BJ3W*$}VZ)WqK=k)2y`AX~GeATYTeMLWJ`}5E%$EMjBL=j97rT2M+Wr#Sj)1Na z4UR77et0Xbt3f&fwmMbZG&>a>Q!Q36ACu-ajh>9-08quX-p{*=h_+BZG=ANs$+j?=>aLG@34_A?&?xX$lPO5t$w9Tmp~{+o$lPN?QoM<~p}~-g%t3DDyMozSR&$nL z3$KIU6#Q#*q|5e4r(^ja6m0RDOkaB_znAGq_dl0>KMN85--Z0LnUcQ<{9_+^Uj_ay zv?+==bb<$^=j0A0;*f}nsI5ReJrI=YFk=;*G8fle zI71jA3Y@ga~>aYHhzU%Ig~W5aQjBbYFVMog!k#(bPw;TU5<(lr|?rVxI21T zB7OGS%nbZNOzZ%}`aEMw9T zA1`rwVR(lCYVqLJQ^!=7mO`9<{S5SM79z1wS%Wml`y#yuEdvh;Pzz{bwtli>^iFq> zGkE-SA?kM}g&XRG?+DYmj3C=9w$W1{py3A@Y}>$_OHTq6wWZzoY;Y$H?FPZKl^Ugb z3y~DXF;T?U8^PscXOuyOp#!PFg+pV_xhNMYDO(Qj-Y-mC0(93gA%8l&18JsMyIBP_ z!IPhL3`kiyoV0>1^LjQE&XXzMGu(mLr;{eI_rJ2^9YuFuCR1GBB z0hx{IsnQhm_|24vwdY5r@~6NCLUp#Fop-F(g-E@Eco4Wpub%-*qi+v+R^ub~&EENy zt={%+;Eli9?cEP4csl(@+vWHl%<8qHU~g+>ZvGeht&sRRYy2!o`u|SQFE-5ohu}Z# zxbju-@4~ATB)>Dy=93b1S25o~P0j>yE*>h-jOb zAuPOzocY>UBZL9Z&_>+jhq3xeLB|FO?rA&jX+}EF>&}={T!XaK%AyCVW=O_Mq0YTY)Bf&Mijl4mds^YLn*_Bef zPhZ$FyyY!TxP|42v-x5%b5lU3l+hu~_Vgf(-{~tGa>=8m(HG%Z>mB2AO1J8M@V_cI ztM%lb*Db+DYMHwfiLO-f0XFD8p^2MdF^aY-F)V4(()!pdHj$P_(y}Zq%`NGXEV<&L z5t5+Ml;qAy0xa;;e$M>n!^}=@jZCP3K(>k>PL@CLhrVVmq+3=< z`c#Kb5$&GvkyaV?2x)`kP!)0gwSglB8#43IuJ;qRSkNLn=mPQ;jGV!QH6io_%EY4T{dz)Y5SOQo-bqd)6Mr;#EU`U*mI2qryXpZS;(2agIhZYGz?V;my48I#dN?UkdS2}%bQyq5sg^X3mp=qESVw}~WV$3}h zQC^xMrj4yXM+b>uBEV!1^0SFt_+z?u`x>J#x|9QK4Vz*7xe9d08GEjur-zxeFURW zo|IG7^;+*C%HjuYY{xd%b;Q?qftHfRMl%M1F#^vqLl~DFd9eust|Q7ABKEXi^G@(2 zLKJ!tVxpfjK;U=s*Ow1TDnuGF1ru5km;fjjE;>pszuSV$TkVqE9o|NNA<@0JU7|>3BfC34x1r(AG z%kDDnAFH*(Kn>?|Y>RvkWG>^jZc|da`<{dRz3Yeh_fIa5lS!V+WT~-SG!5Wy7f()_ zK3qJxyDukA?GH2w$uwyMScpqZ2jCPArB_#~oX}Xm=|@b^N&A|Y8kgnm+9!>9JnD(Q z4HtctxO``r+$$tNfG6}$ESu2lDg%$v=iaCW&jBnrA;;958os~8Ni6i?OG(;d2hG+M z=sSt!eqirUA7%?sY96cHE+w@;ENNQ9r#g#MWOwZ>Zwx8htxvC~n^w&Uy!d|AO1uyw zvAM0GT=Ogpp$$NEhxn>svKuUPOF|YU6V?}`oVTQ8@g!L-B*UsBkmymJxOTJW6ErJ` za5GY9v%Lyow9^cnd*U5PjK z<3mII1L$0zD6o)2==_z_4?dJocCJ`kZ{0m`>oC1Q<9VQmZa83{!hsCHl{g;k2V9Bs zoTmBbTAHU*EG^bUK$M|Me<#wW06`YzuS6OI{hw6uy&s^ZCCSS#Ew4=T=eUtt>tAX^ zPa9RwNLyF?R8m6e6kaJv#tSGC9hd|G3$P3e!S@!GXAnSs?Om%EFl&Gx2yX%^t;X*6 z8vuuZ4r*m(dc7g%*Xz&u4}9H^dxH4Go)|dT8kqe$VB~+Dc^(n`%-LZ|e*AUJzx(wc z*76#;birS*|NrdluO(7b=8rVrbzkZ)0|60rbtWlzW#QDik{;J&n z$A*INlcAvh-A>!<*cuu9Iov+^i@p4+rJqs0ukKH?|4li+p?sf{Q|X!O*xCK1wfpZO z$^KKwzjnv|JuKaS1N(b3>-S>!-^2gNoc=)(f9;k1#hAVyN%*UjUybQ!bu0WYi}+27 z;4iU&_s@>_uOskZHt730zf1r94#H$4#ewM%QZCJ^G%SiV1>kXuKlN#?Z+0W1M9V=zj| zroY#dSvm>Bn54cGpf?uI+jJ-k%Ekz0CCb9u6Ufrj8BGx{H9Vm+8jYw-I8Sg!DD&7Z zr?sWN&6f716sJQ(tHSJC+$Mo(7oea>GtcVs>s+YuFRzW%8~iK*E@pCYH@TpJ`Gyg% z3#N!sUB5R4m5nK|o;J9VkLC4q&2Mn)%h0jiayc3Da-4)HH#3>-aLp|0h%jl4*7-+R zNfuWS`C#{9Twgri`i5_uDdds01RK$pm4c(*+tiR(_95&p+K-WerGf41fJC3_=ehgw|Hnap&IdoXSN|QZj-{p5_bHE+<)6cte=p%1Lzq*ymcM)bzei^H5AXH&c=DU(qa^`S(Ec`@+KH1}u^3P~J;TNW_E9=OBYbpMD(fdI|*^{t}K5eQMxJ34|Tf)%&pI{1g}>mF%<2WPa* zaBxI+I^1TP6rtTEIp}ka*YFeEQ32tP( zPR{LSr6xC`&+H*5(cprKVL`dAc&VWPEpJ!IRTpQWo}4;46E~sB+Ul9NGMzr8t&KvP z9@BO{7~?|KvQweE>Sm807X$t=UuLk|EKG8dcFkC-ofE_faLX?&P?e0Ou;ewGp#0V& z`+KwbC$InA;$OR~zaNJBX*Sv}`6pGBS8}d5>%SnQNR`@kZ~h4U!G>4XP_tfBmzP({ z&{kK}&?8k-Q`hpFg{g_GsUvg+RB33*~0vLEcwpu$FqJNadauINH5SLc${bytQj0h-7C~Ry^Hm3yrn07j;hxgW{+lo$G8#Da*mP`v9b5{f5QWgdqXI1`Mqj{ zpz-*|h=OC7dGJkJd-tsS~QkHoTuhLeTLab-wv$mc}Ku|5fy$4 zt-rW1ZP4e>GU8vHcoS@gx=L)T|HjN5j{R+<&XAo9E~o`dT1F;74P`{DDM=-%F(yGD zG-6w!oS3m6(rQY)2Pq)i%v~wS8Q+#aCKOAM8w}ad+><|-Tgn3#y8jiWyqXt@bHW6q! zU#aq^4lwUclSgJ|L`e~zG11&%=aV(^8!5T@`<@{&om23Dt0eZiYjkgjAcl^(*jjM% zp|Wg^jK83m(D|Y1w=8(f3Yf@#6RyUwFj|@67}sdai={URA*8iNn@JdCZ&BR=7AN&x zyHMT+KR0FFq_$zAEEYev=8YdF0)G9NgZWbWu$XW;&6H_eZmecfA1Cj0HCyAu#y*B8 zM^kf^!h7SoO-|_2yM5rouf|Hu0yT}vZyp@7j%q1@lM^1!G5ZrW?j_L=$g4xm$*0+e zGG{(+jq|M(7TXqG1p_JghNkF#V|7Dog=0e;u}$39Gz%&}M zpDS0Oe;XzAa3a)jdqpKRcM@*V6{h%XBy%1>8(21d@kAYK^%@H%jQ{=9=iOya8~arU zhEcz0d+h?W9E{ONT)1GTPRg|AwnwaCOW@snYqR_$i764GD*){9XTa~AEtG;0;d}oh z7xu5k|IcoT^>;yl+Q`KIbvpf9AH?EyLOk}HXTFaZGVP#6@H=@xfosN~)Hnxvf@IA0 z^ARsGpt8ULRY5B#;$LZwGH_KHs=+kOiknzyNTh-|7sy!qy3Mr9q4%lNwfhTSOLRS6 zNBV)iZnTy9sK(6*pC}anLiNxo9pfE{zicxxR41uEFGd8JU<^f`6=V6Sm4EL**e5SB z!u9r;@{r^%0v*zKd$U-KAHLn~yxVMYvlt%94V>Sk#Ix^Tl253hVX&>z5~=<=l;2T1 zv!`CR9k^GH<(XWgq7wHai`F2cb4Vg|P+@Uno{+|WQK|fG%Zy&d?Dm(VYYwMVz>BXT zS@MU`I#Y)_UmiifjLvhi% z%oLd_jyO9cJrQ(9=*&e|tZ?gH+s!)QY8ccw3~?5>Nz_f->(|Vvp6APvHFGgs-!oQp ziH9agjPSl8>(L|WhYrBTr6}!F@5iOL_6vT1M%sbyU8|;keV?VPOE)FaDR`CpVWPrS zdgC}jW;)5!DTI`42VwvsLc|j{6pTV+B&Sr;b8RtzHd#U8Z+)30-z8SpT z`H)RS9q|E#(%+06B=qu3Q`dPjA_jyqfWdvrxU&ztowq&6C+^06pfl44fo|$ce$eat zcULfBVLS_OV==9f@B$;P;!+Dk}(eMz>c)CFaTZ{6!r5rb0lw(DrFk7vSP>_*-PUIEa!{3=NmxTal|b z;tiE|3RXO$xWf41FfeB*HA{(M57*=rAFuN5S*RUG8ZB>yh>Ig_4zZONjWk` z^f@WM9S;P@tbzyHi&oq13s4FCikGGG@ImSmrHm_8w6V7_a*6}bAsUozJ&M137$HJy z##PHd9h}I^19Px=5I>(8@Xtg0m%t{aB{{Q z1D!k|b+n&P6W?Tw3h{jL0kb%vy;)pOVaiQ(SaXF4Q{Vs~P&Q@ZG}}0rU;Ee;mLMdM z2SyE)yMxn)PmzE9VGzWQilCO5Hmp%;;Lem_8t-ZAf~mW?ohfs{I)#_AwvAfqtFWI| zDeswkmr0`pvc+aj-eW6maK2A6?ZfJpfH~CB4AWl95~;P^dEV2kW%9%M3zJb-#8UFaNSQ{;FZ@rk~7jcm{7?GwT*FxAMJx7UY* zK^Mdva0QYn^N9yxJ+$xB)#5)GDVvYnc-F2AC!!)$^9wrAm5hLVOcfv16>989Djd!= z%5W&`h9}5Z(a0+T|1uSa918E4@+Hzb>8@F8YAVn3;ki90G`$Uy+$=x^DMk$r!Y6lx zIl**+(~{#(agLnj^9S%PW@(-HH`haEDTf5yQ41fv;j{>xd_tqWSB$J7=(^$IdOFvD z`fTqpNKsYy4E52<%kTQPzEBiSi*eC^-KEk8um^-+U!gYU1X2b627R$o#(#_r zGU^=X-{ih5JtLNL{ZJfrMWPxkM>|0Yclt7r zY;w%Lmb^mis89|~fZcuV1tp!8l!;N3vWr!5Nz7S35f9QWw)OKJTI`iC+YVedopYdBIme zMq!soUYQ&hz$|)zxh`6FYX$s;^F4@D#qww8t#gq4b9{xJn{LnVltmX2vB&B4(D(=B zf1)gZTNwV3IW4|tJF4IE=ud^=_f+?Lb`BdFf@0 ze2*$igvqp#Io+f&81>?w>(6hwKJOL#-m0{tl=)jgf%6UM_f;}92Iktna*X-kO25Ca zm;Sc&`-fGU>ezlSqrNZg_vIxw07qJiR}eQYR5vYDTP$?Ha;&A-?~XT?C$HbGlkIkr z5;&aJxouiJ1r-Do3%{s*QIRJ6W=kgG>y`2B<>&W!wgJ8t@$$&?G^H=72x3CC)w#>- zK`O%k_%sB+>e-}p`$8!2G~!q8V;iNL(NAt)uG?4UGx`J*lri#*<%f=BV4Q&y#-tDl z$Unu~jo5xbNH4^Ha9~PqFlhM!7Y$ADSmf9Fs$&h4sn0gmcNzvv%_Ycj0(m%2*SK0cnd{a<(6Py1bvK4zY)xsl2tH1%XS!(G!v$ z)v`ohSoU68hMqmqADtXQcUx$6pGk!H936+HhCN~R0nw`ahXI6*kcHU^%)FxI%jfeb zLRd|mtRY-^*-3A`0n64-Kp@_@iG1y?H7eAHMnVm>l)a- z_l*i*{pMXvz}_tIy&v^}p;;daNnK7fl(b^p(eQjhf1P^E3CZM2)LR!YR$vF>%k9*R z3G^dV@qCM|Mu!Nwwga=Qjb1tzciw7~LB1mGB4Zk5X-1=Q98MhnQI5DLm7D66%1GS8l?%iV5E)Gr<6G9Pv7zUjN-7Vy=?#v~ z^*743MtegQYfrw-yCB;6#PPUO3|gaW03e-(c$qYPh^;v2Awyx2>F+2qfS|WL(wwl} zEG5QO$s>`$fu0gf9_}?cNH7RgTTOz+u9mG$@7ORdx)m;}lBLsDNJuQ<1tKm%HjZ8| za7*sHXekd6FzsWOStswboNA1wP1NKFTQ^hPtLaw4r-m`7Ac%6$T4<`BHw022Ct?W6|JN$AE8usl7i>^ygU z4~r^>H^ObJj(x7FFlIy2dpQn0_`dN$Xlv&(;6d}YPMi&(a^YNKD)`_j$bfEYTbUAh zOeeUAR}xHTX<*K{+R1qB^HU)q+{}PJ!0fOe`g^9sCaf|F+%5*Q%oB8QsxNK8s8SRx zemP7u^wa4DPS7EeMk~T*l)%wKyn=sM*|4Q7@1W?HLsbW znL#B%$i#=~iQZF@V`mhcx_=i0MyG58$&>@*)RDMpn{w^*KFPLamCT6f-mSA}y}H6M z95!ls$#-Q59MsmB=Ho|l79S-ZiykJo&SiQe;(DklNCGC?Z@ByJolXv)KGhetg$VCV zv`5xS$d=8AiuvWJ3YdaYM&6QU+$Pxc^eSPEUMZnx3*qG^()vQ1hkuh1*?If`ze#LR z_l2hQ9JVT3HSt3G*Q)ca4ua6ay zi!bIaM#44(+crMYuj2p{Us(iAT)4KLfW98iu}&*2t#UgGS(#-kvr@uljaYX@ZFsxQ zop7rF2B#8w*lBkA;7Ef47mzRE5~G4JAv#dYbOpbwRFcsK4cgUu6*o(CJ$H1g!6tms zNv5)H2qblG#fj5yTYWj43fX1qg!;Z~8J+Lb{G;qM3R0wN>VWcmYjyA>wQPN8{OlUX zmjp3@KWe2=_(kz`^q@pJwk?uAe%&h!;tZ1&epK8L8zF1pB5;WP|{+1ww4U)BVt zs@{`0NkfZFivnM7$YLfdxch21f?VuRpGSGc7FCd(?V076T%fl7-KPj>>BpQ1v%NWt%0Q#BSgf{4jC=z^sO=W0iB%}t(0X0dlw^+-o{m*K$F3xvVS2NR*% zBxp6DrcWXrA%WR>dn=W$0cz71w#JC3r#0R!uq;8rbkCwj12Z$d)4bIVrW(d`%7VW! zR^TFRL^yg~>?Bac3F_;XN8Li;76av1?-ha1 zShz~=b!5@l!T@yRH5T?{xOq9g0lH-KABhrBATca3mw+L!s2X3CK&sU_|hWVxw} zY+F(N?Dw*jIUAHMzViEhT(p}+SIDs}>b4!NaJyM179@XdZOdFHd%FU-p!MDfp7)KB9kQAcG=W#eQj1T(KA{GO zKJR3tMI`awG%7xMm}b!pKl?YaCVOCv-d*dwDxGhq6M_nKVco&CQ;*zb5?hB<6}})G zWfJn-d5NObf^#3(5>j&N!zb9VR!-v7AU#%30>OQbi3=27Y{w{*Vf=QM@z~Qf>+J<9 zng#RPS+g~|f>>gURBV0oxcj>a!lvQ2bPi(SW1_4q(f~nJV>Zxuo4Yk1fuLDeAVUnC zb9skuzC@p14uuz>6WE2modh(JBFI)j+Mn>;cAeQ{b`i$sE;Zk!Sd|;@2_^b)+=>NP zuMSNu;vbb$WHZs~PF)@2hM3`3*+1raQurQ~(ObkHlLeW~5u!LrWq*`w0?JNLA-AA! z<&NwHTvJ0mhYX+(@nfAPVbN6bEi44B78!@JH(Gji|40%iXZ-X}z}Cq1`gwl?b-$?mM!&OiUS z^LQ3>!&<`Kzont-Ui%{UIfV&2f|sHP-Bl#M_A$@%(dqZ zD|mzTepJR2Zw&V`EwcC23hzuSRvNe+zzFexBJkS5Gy;z}lwXz<8)=`pn4JKZPF~v+ zf%Fu~ezFQkLHFMB3(fFWZ=KHDW&#>keJO}`LQzq12{$UhCDt-a3rnGEmw|)&hfTH~ zY0(72RF0&%Yg&Iv%n!-bY@gzuwtyxZ1s6k0;ag4q!T^9JBF2>P+Bn|z+V?P|K7JjMYPGw>xa>R{2A z=`Kg*6SK8ec;K;SxMDu5Q&Ipzk_$&Hjd7R4z{gOv!IQN}-HI4YH0Rwov}3@kw|$t^ zF1wRo6Y zk#?V8zlqv2irN$UB{WedqRF2@U^0J9Aq^o(MwXy5O15C#Gg+=juM0+$exK?%VzmE+ zL3h&79{07s1|$H7SE;>obyeHT#x{2`ZvL@PIbIf8zO(3g&>+K(QP_JmYg{FsAmx_R zK|xx0{4u{ImG*I4T^o`#6tf+FjE)atJ zSu^%N_lo_q7{fP2+HkL;tZ0aKb=qT(1~h9eV$?wIT|PoeP}syE*wzQ9MqBM#z!JZe z3d7G>gj=N}0v%a(G=MfINqL+agm2D#+=fFY#PhNy);@m;yzzqpU-`T|@1rd2$x=tzv;oYE#QUU9WgUF8JUK=7iWeRX z?GTgmDeV6PJV3+0Fg%8+BPeuqi*hmbZB6no=zyh!OQl!I=EDzdO8h0?*ioWcoV;6! zvC7c9Oz6W6*nzH-S)Py2HXW9utC5X1L267&SCRS695+OAj!~)3l*z;^jh3(F}9vkMj{LemOEC8BCr#ascyVU+%Z)$&zmDi?QiN+2*YY_ z-3OdXJE#>YHm;92KX;(hwv1F|s~@#P&Db@78eHZ{&#YO+$e~>qjz1OFrQ*2$XonFb zK6jp7f&-5%Jvtn4T}bSRcFHxENXS|PJyTb<9%r)dks<8UCfh>Ea9wEZigY6r=KRwv zuIFu2tI}X$5gsA|3Z1l;aWz9y6#)44XnWM*Owyum#OqpRZ%-#LUA3LQiV}C=y zZNv)85jQ3!lIJ(&)2e9$A+yyHJz+-j* zn)@|>GRh|k>W&G-@uIz4c&O|bb8PB+u6pkKL9p;)bGNs9xvP|Dx)?_Kr-}|kCY@L0 z%&JIoA$E;t9|6-))2iJJ2*F;Yhyw#Obv3+6$t2ago0Q`dWy)BYto&KDW0BMx{I)y9 z(B;Y{nM=2fYKG~3_eS-_*_zyrQ7P4U0p^Low5KjIB;wKAtn&1pAV zM1bBgH$haY&K?5;`heu0y)o)9xL^d~ADV__!I}&x!1;=`x~n*U0mBn`ypwY+rtD?9 zvHBoGSl5f(Eh^Mk2wCqT-H>|iT#|^8i$3C1n7M{tRxj5*hcR^d@YictDC$MTgnI_R zG5b&*&_ANV^|^;?XHWFo1}cr#22<({0C6RH&uOBJhnpZBfVJ>V;C0sHlvK$*~OT=MXDJ z!i2~UNgJ$;6}gqbDZoPOq9C8l<-<{4jjdL`WFAdxIYtq!OuFNvr$2Q2BPZz=GMdi# z9-%sH#vDRj>T?FE3SaH$V3S&IDX$70Otu6Zh{UWm$$so1}a@!Wb$!DQ#Ph z*k#!{OJJUOtk{eTaF}*O;L_nA^^HaqxQ*+HXI{${@EK0bfRdDx)hD4}Mg`Hixx9dTH~Bk% zGu@T;07fpj3AaSJ2e-!hnSNd4y>6>U-41>uP{PMR^l|a%NWjN{Q;${e^JrZWr^^z( zR?*4IDUY;By{2qxwXO3#}C!>PwoIMt$2R(!Oc_L z?FyqSJmo`Ah~M#tGpR7t#SzVLwr_#^537@Cmj@AIA0*KLhLuRC`q-QHAl~QVhXY@w zp0M5vdd47BzeXKDRxx`xu~pEhT`|KCGMyOh_ILOq2lD0X-8UZ{{=r9x_Af+SwAgdi z5L~+9eS1dy(8$}gq00kh$qc}TzZ(;k8`Jq+VW>nV!RzR=Tvz1wzWtBuVO^PA3YYFo zWR|nuWUdWqo`;#1=Ns+l)O!`*1=+G*jBDa$=+&YWk#9b*?o5>}X2y&Rvm5`O6!P$% zozSoV2*|JV z0o&8Np?$gPd;xZcH{(4LH?59eUIfSCV><-IwAe=zQx8krPVaX-Z2 zzlr*C@kcH`y@>isJsRY~<_dji3veB_krdO*P`*;I@_EI;T!=1+OckRxACfWOu)D5QX zM;w`_tmY71usJ*~vOmRAWVoPCCTpkx9J9{G% zuTME`6boTxqCUe~S$oRT*i4AM_?+at?Rv*Z&d$UN)Yh1`H5uxHLlSc1E3pxMTo=(8 zYKpLnOH{39s}roE9%PYLIaqvS_K+GF$-p<5*CCe!=w4Q%;JlnxqTsw*JTHcey*@67 zo4!_8pwQk`E{2;|*8mR=Jl+P?a^~EGe%y+vmQm%*2x;-;i|>W6RiJ;>DGZs3u6MDX zCv9+3es3;Z(rtmeHF9hSe_oUBZ4G#xbd&mHQEMEDD`k}f8|@g@OKPfx0@Z73wt#o< z(ZqNcT_S69+$Aon%}yzzapq8RsWhmCH5TI=R&t2z7NVU9e940fWkvq}{*S|UVb-8n zd)Oa8Ofml{o1y&2Z05hDF`_Yj@O=V^A>a8)332W}ATa3Irn-sZB}jtaEyvicrVk4T;#G&2`@%l1#LF5`GDjOro@}Iw- zooJe8F;MJ1L{C15qoh0JeyS*N&os@=`jfJuU4%Fz4 z`?8m_B6HB8mu*0?22Zq0e3g{eqM;cr7d=Dx63~`f>uh!>mn$um&E00}OHa|=>uasf zmuFjbms*0VBcML=O!yJ-)kqU72Ncuh4b#x2*7Q^_ROGanQY0wAb~9KpA$ZgjWtSX< zmera>+%-BzYL3$(BKHFij@fzd$GB98t}R)qk5D|BS$UVj zloc`)gF1qzb0$7$h$@*k`AX{dvT13AX^Th^Yr5rsY`J?Ti9lR(nGJ&9tK21W8|isR zc?mmC5}2*x5wL9T;RbD}En4Sl11kMud_L2^qb3c^DbQLI2+2E4HOYJlOD&uztf@O& z;(@qJyr4jQ`!>Q~j@-I5NEo=^JKo%EY|gjlI-3VVrR!D%Y!ts9qR0|l2M3X9Odvxp zitskcHM*QF$7nL&#zMIka5VHLW;dBhizd469H~AX2}N%jm?IGOd+bbePyD*rq?^>b0V^2^IQ~7V>0s`smFh&lLr!r)z{( zp8k0BO?ut3SA+j^);=5w7vQ2Ckl|teho{QY+Ez#Pp`y=cv5p(nW`iK296M8{sUSKy z)tLzx^q3}lsfA2u7fjmAgPNEvt|{=VU*a8WP+=on?81Dmmp-%2m!L*C)L$Noj>qWB zg+o}_bwi}IV-h6-o{P`A?-9J?G%+^0nXIKC^l&g~t|>Ouwe*2inbb^?4eX>_udiRn zWS-Bj)bV+qQO$dSAJdJ<_ff7F{4_+ep3?~Uz_9Smj=f&E(ZQ9Xo{+~nn#{4^`JN1g z+r`P$wvk;5=lRW^*%hZQ&E5=x#q#Et!SzV(RpY*2IE-*`Pmv8<2y7ii%}WuF%!OcB zSU-ae!Vs!HG*OZ;F2NI#;m<7UtqU&{MHiiR-hxk|a6>X%RafReHR}<~pGk6V$Yco_ zYv67jRggIFfRZXk)1kx;-hyPQq&9bp`h(LmwNpE0hfZp4^H5D7y$#7tXyr2G++kku zE3)xMbFwus_&T~2bTiX>I;_!9nT^QlIx!2p%atR@BN-*nRadwPAF?ZTeHGb?UrUJo zvNylNr}qW#pqyf_S7bgCUyboSs5TY^D_E1=HEy4f$gFN-Y?jya`#b{Huodd*c_J)n^_qE)1y0+M&f2Umk0N z%-H6%A8?&0avaG`tPqPw$1*&%J(Yh%qSY#?#AUsQF44TIL@4#4e4u znQpP?WL5>q@#|04sY_28xu+UheNfcRC*(8S@%F82oLgGjpDYTB<-FzxwK+&N;_4D@ zh@S+g%JK5oW5k8RgJO{8NgQ&aU(ir`Biv5DM9h0H*=}9wx6n4+$wEy&lk&K6{SFd6 zB3~F4Amal{V#CX2dW9A}_k(KEhni{2qAnug?V63`OxLN-V6$LbP?V|yVgv|+$p=dF z4ig91Upry%e{(yH<)vo+wxK$Z7BlovB2M#%3n4oR7`YfV=rad%@zc9~;ldt|uKSWC zUqYAG7l%jV&Cf4OmKl=tJ*5{Yr5u6#aIj@@31=JJUn*02yCGJgRQo6o=N||~EyOG< z-Qdw_F|vGq4G-^Ch$@36)pGJEczsPJ`-1k9RjxL$pUX<6CJ32jK5-@N+fIM+GEqj7 zdSHIf+6}_^mN0W%FgIkwd?8=@0~&eN#%w^2ysFqA=|^}0dlAkdNdFbhq^|GVe)dE_ z_N9zu#};Xyh~`p2_{I(5L9pA~T>lv>bQ^Q(wJQF?kHSA-(QxELc$MM+Kr?gE*hh(1 z5_Xr)Vm6sajYThKv<^9z7dd?BHipyznJbh}=e`UmWxBG_tgxiCOQf zZg~?R{PFoC`pUAz)6*y*ck412D$i{)oM5B;)x=7 zP?=F^PeeR{OK_8n91Xssn*0_9c(h&bOxD6){0TrU2QC|cwh365TDdUr?XI9gFLlSm zdkh8tER-ALpQ!9Du#aG&v$oJ|i?qsy9N%DXlRnDI2~*(fs``rTvaVCv9LWO z^KM|D&L)fXP@|uM;VPNt`9zG90MAZB?{7lNj|U9@LcZXUtiN79sK1Qj)7wveq`@Sg zEfdDI8*Z3QlJ$hBS(s(Lni(IRg|K98Z(p1?{_ww}wbQt^5g#(-ZUbwkQ~RTj$~$`y>W zTGl?K&(X8D;Y%CGnP8(D8X{Z(RybyujOURdk2P4AC5pgVB0?^RTA{c(!dXqU6Xjha ziu2s0)Imx>S>?cMfw_PXRU=I2TFj{o%`#n!VI}{>@rq`_K+3d>lFv(J%dGde=-I+S z9WzuZ#Iix-JVLF9e4R{+7?y0D>0uIiHS1T{LWweX7MC*+1>-KsAQ*?-oH>3SJZvUN z9ZAAsjXuU(qfl==j@D`LNsih;JGWL!-#J2`Zan>TETwcCE#;hr<*1(}DzeGK7o8rI z`SgmVgjj%Uv;mTk#WaQQ98c9ED6!M`&2r3Q( z&r26-@vDGs`fj4ZmDfQc7*7c|0v$-gAI739QsBPinRMQ~6~~onwLX3jK#Qjzn;3zx zvZ_e;{aUN2i72pMsAwp#vL{exG?nClh~XeW3HG8M$dq(Hx}yx$RW=u!q@#XHF7@^7 zXh&vx>&BJ~Tr}&{cs9&XYWr%%QCjoGI>CK~ueXDLf72S@D_i!vn5QFv=!f4C=G2hK zuTCY#y&4q-sO95*;4l3@Zuoq{pmbN3?g-~Na~iIo>M@0s3^8c_ zAt)NGA&aWC7FE?+)442cF#xC1D^=Zr?2w606mx#?>pPYXChhe$)m$-s)5vR(N&K&^ z6&vyo!zsNYjNExjn)@ z0Pf-$vWb4AM$Qo9GwSF=$Pu#>9>0#Yy;G4e)D`_`(}Hr34)GSjUD=o z(U-Eeh}__~=e~BThumc9BomUd@3!9XUTxF)yx4f>V)>*#>_BWhDt$}ea(k-_Mt_6% zp4ag8hraM??H3-w+(LM(ha;2)Nxr6c6Et{AJ!HcBea}>P^E-~;tJXBdEywPQ`!jyD zC0clo1F8;s`JtMUdKY!n)-E_h?k&eEd8s=!F#UWnlON&8Z|9L82p%MwOFJ%B=lRQX z!zP7N_2V+usulzn3?Uy^0>|6*LhH^exmu5wkFC7Atst~{_sd+9ZWd^?o_+2nR^wOS z37@4NoCLx34nRE115gPN^}e1Mct)D%Qq(^|U@DY5hHn+~K4cfbq$PAeP7bF3 z=&I4Er%We{ec_ijFS>(Ij}twAk2jD+W^yy;_A+|DtG$u=w@V}#5~u;vR2llK2uNS9 zMxxuIQCpo{$gd30cm}`4?b$u>ekr*y-8;Mq z(7EihU|f$u*Qm6*85d`cRwBl$I${y82MD(7WTcO_7D%d%qit-*4mpyZkLJOvHiX!9 zxx=EZE-I=GYPCn0={u;Ow^7ZG+qZ;ooQUCZ_|@q62(fihRa>;z1k#;JNxO~0P~3NE zyzLdm+#z=U9`N=JTH`;{Vx}J;wwi>UNU*Ubrk=g_)s$Qa@&u_&?JVDFd&Cxd1WEM`uexNK_4^EoRxS7B zVf2XaO47UO8QJA_@Uxup8tIIrwiqD}m}`ujA2r#ZO^N$nKl!+ZLlxWg`NY*}NR;@0 z=9VgpLd=iS73}lY3|Jkz--M`3*Z1T%WnlBSbrI6)8;kqhJ&41;#lJQ2Fakut7q;@G zN+H?pm@`V#B(CixUfJmSI>DfqkI-t8$q&bC`kU{Pc&h7SVGgl8QlQm;Q%^IN;ODS3 zRw8@o9ge~{CVf8!#zkkYnjU=rM+wYfzBa@L!jB(e1pjnmK>AN71~PVLX8-HBAXwQ( zeqI5S*A2%?eeCzHLJ1S%pbga{=`GA4CKMSNSQInqZe)AqveI1heGA@g=?n89Xf(kG z&=(061*@DBz)$EEr*|l5)}BgIZ&Z4R)lw&D|RSK?JkS6 z@Hgn8kQ0{d_(10czGGi8PUtDI-Tt6{*aC-!7D_l9$-y?g2sb_slQzWMq)4uDKdl5J z7dKr-#gj%=i0>f^36TnSB|VurF)o|g#D-Q7Z#G?+xGu}tIa6opK~(xJ+mR9uF|n%_ zLXjOjuNSGNntkFee1DzdxnvjvX}r%?jYeZcYUe9wty+m+c#Ad6c;zfN!>3$s+Hx#e z?N2E*wNPQaHnxDDQ^7mA_`rxq+_+g3k1=g=(hgp@EzL;qKj9QaPQCvD^y7!kKi0R< z{}Y^K{~oFT&%xhyum8KKz#B&$>$`WQ-uSTLfGeCCn{=|yM0?D9jzu!mntJfI>T<

$kD0;ZwNLRk&Q$>N8^82~_`hH)Y|Apb#rC}@#3@A3N6Hgi0!k-}Ys7i8HUiUE-6sSp9*U`ne#uKH& z4wz)%@t8{TMFW||kwD&&7%L=c0~75RffM`V-xBKP3>&>KP1Jab6+=o%ZACz8^O)q<=ka~n61G|i9DMF|;LX$*VVqA7Qf zZU|%hwlrj~u)Ik%eOLMMefIj&@_sAPq)CR?5(!rd7_BL?c8?)%@1dS=Ya2Imx#uv? zPqOqy8L2q+iLXohtR+MYi?Pl}M*}Z%l6%xaY3r=$ zpf-FlOG-yluS9sRG1X{xm-L-znSr(}Ov9=TOwb~Hm^nP}pjaV|2L8BK$yqrayX}MAP$}mGL7%|H3ZG@H83ob^DHFuv1f@u{g zo|o0JBFRFtxK42|rjaE(@PVl<5YQe&0?EHPi%4rInnuE00<(HlY+xWXUn$Il)6JQg z;3>%t+pZ0lA@LwaTfCE)#0Kc;kk;`?rw@s#6kcI0Va%s;Zq*tH;Jc-V0GdT*+u6$u zBs$zAQx5Y?$;wl4WFFRl9z8uL%+{~Qv9IrUC~91GvHc$#JuBxi36^ERmL&&O#2y)i z13uHCRd9{)j{!E7J(g=rNodhv_xjew;%MeSRhCIrn9Dg&tET7NW}r}=L&G$HDpM2}mqs(RmjYqbkX=8G zBGHJTjzaabaw6$om@jC_z%F$qcUTKn2L5YFY&gL;7PJWsu#UWeI46CK1GrQ}K}mEo z+68j{i9)VQV>)?-N7N3vFzis)S;<|xTX6MhrX4plK;Ko)Hfw1a5t=r`l)R>8t}fm! z6Xl6-lnA!N)lAH})OF1=eH5v-bUd+#)@l~r6|6{7WX&AW%?{tdV6Edt+Sc=Urm}qI zsR!#fM3kJnebMgW-d^RG{i~CIPJ8WK3y4lz8t9EE|C%%SG`*=UF1Tb{NmlyI8$ydj zK(Bm9)txm_qYr_qVp^hl->RPGxBHE4cwpy^9N6=oZWFWNiP5aX`c$^lk7gS7&b-a& zX9{=vEpiww8q+MUD*alNMc%1J(z-(5m@|c(YU4K`FoHqNCwK0^9+r*4uq4Q3ZT#<-Ex0GwT{u5a@$bS#)*rskXN3* zxmJQ>8(wK;*xB(-eK~#H`7U|V`iUE&d}MYCR_y|GupW0%UXoyPi=-MYRVs?m9=~lzQcmP^VxuPk~BX{P_}p35Ve~ zwPR;54#?dzi`hPaowF;NfJCvqghhI-HU5J67z@^Ka7&98>#M!RF@ucXY)n$0Nj=Lz zJD3m^>m4A_dHH0)ZG4CR3gc&drQNsJe~&V{1ii@xQ#PozcB&b+)VoiK@uf)9soTe2Iy)!-B4zxMslJ>RO~(IK2ni`zW=^hTNu$X$ zDkCo_zEKc>B3fB-9&(7YnAYWRluJ(}oVgQxWi)*_eiRhT+i4foT}ChTjHjHKVRwFX zu=HanJUF5ZnJ$9ZM~8HajyABh(1e8oqV0Y~tT0#{DY7J=J`*N<(1xzB-a|H@_-*- zT8(9UAHlwklyfw&^JJZ6v?}$1f!1b?k!+ZDr{HS5I#cNL&~6;2Hj2OyNziWY`IY41 zVuYQB_lrRFo8z3m*uvb)Xx(9ipBz`p$yPDQm3V0x`SyM04D3Bsg z@NMeX!@S8OO3RZy=9IqtsbScT&X@V+?7rRZT9X}{tc=v{?nF{I%oK?%x=prYz}`ohTPtea+{GmGQIphnuiTY z6hvM0n{}x#H)eF?>7njQg!D`hulIVSbUguWTU6uyVT&pRp3g0I*HViyaJD<%Ww{t= z?eRLWV>>*EcjeDo0PHMz@_{Sq)-UeUX!NBM_C48+$3L^V4|Xk&9+8)^sPdx}Hrf5U zD$h3A%59m`ULDw(bM6q|yxuKR{!9Wl4G@jzj;C{&joIUk~z=?#?BwE%KG)GZRJW^ z3tpo7LOz~Q2nYsVB0*IG=_I2yQN!emHXYAT^>*>X$92GH&@|xDYCark1T{EQ+hotZ z(0u##y_;OC&%eBp^yrS&)c)EW!|jxFHd);qSdq#jxQk%vNgPI)fAPTXy==pX#0t9~ zh)#SN=ZtvCeAc(%@gYAuFpbtwctxZNq5k;9QskuEIL0**c`QIv)XN;^j%1T>?f8J24dFKU4{*s+$Oj|VSLT@f12&Avz)N`rresV{_O zG?iW6@Q0AbXt~7Dp$sG%%9;_QX{~Dzdt21kS5k^Q#TQwuX^+-so>NV`j+@=L!ygxJ z^HXL_DH0H{@*6D2sJ)&2-0r+6HHrttWf+5YImB^G6vBm86pdUu~d$o=>rC3eQ_Heb3jlHXDY#D?`CKX$C7&ISIsbU9g=Noy-fF z8(;5Utg^uS63<^jio1HI!m4*_E3}vH*@zv#*vX@yFnjR=IoKAnv`3-doLmXec8n_* zA`X_~B6J;3+)MZd{yTC#eO@yJdE2e`sf{q`mAQ?1&>B>0ulChxS}dq^C2RU5)1Ce11Y0AY|g>_E*Y08!{qi z_e6#6iIm(T(25b4?@t$;5FE7QwxE=^W@w6&h*QxwS;oR77vqlw8T^zJ$qH-2@UuiP zF8%4Qi~m+47Iav0SwZ7liu`K2#-)_8gYJ`T*G;mJd4I~hzNubLwS~MjEt|n>fX=EF zbO%^UmflhJp)o8EKn5m2t3sA~6dQN0;Nxi{>)ba2q5~9{E4@1KSWADZ*1-}s9W@21 zfy+ml+>7*|bJ}&=GVpU=jP89WJkpi1*I;Y!a<**z1lMnAshZ(hAd=+XqI0O3khsgae1TKHl&|B>&8LhR3*xdvJvxT zK)ROwGb%@3;eE&j!tD~CdETUFkSRt{6ydq8!M545Etd7Ssn~dZx+1$4!i{|eniEM3 z%&c7yKYeOv3r7>oXQcnBP=6uLXmjPk9(Y6G$kRKhJf|9s58kxE@!v4PwVRgg{42q8 z{>KE5=D!V-e^nW%z51a%Bl%cKr_i7SL#M47P)&^`&<2w=fr5n7*C~y=`uIEGG^C(= z2yUsms)M&$Wa5+9%)QG=dv2G`lO^D==RYHS7OwSZjwaZM@RjgOyl-y4PIY_$ZzXT1oDHmgPC6v2=5_#{j3IDs);Mv7S zQu>IMITbgvx5i8d%;vNwJ%6@xK2aD&J#=JFSe?9-OsNn9ElB)qII+eitz8d{8-ixu zfptE6_D+;HObrad#v#vO`DJiLSr|lFRb8+Q8hFvndDlP7)!A!BYr#S{+(=^-MoiBv zDy1>RqU{)sMZD7#^##1D3SWpBU+osrm3b!&a8@`pL%lFU@ z6H@q-tAW=S(_P+~IjJUHjp9V19;FkLt+X>RM40R-vIdY2ZQB)iEuBn#+F^PS(L%=U z+1V0)n3g&{Y|u@JD@5|kjrznRFO3R*hXID*vf{w>%+}G9NYoEHrh+46AKF!g8E3Hw zU%Vibw)1My-`Y1ef}%qrvYK8?`fY|*ogFVW1!dODZDT}IN0i+&>~{-|P#ra72@Z$5 zLCN(kqJWZrNB!^qQ%SVzp+acTEpWS|kbk6xe^6 zuu-WB-T@WM-W{bo6srcTYHfoXpPtTW$NM8TNI>M(j`yt17U)Bp3U;WsNtwyRSxpHc zE~CA~a*yuEK+@J4A_XlwPBvh$`cmNADO|MMghz!%xb`6LYsNf2?35$oqJreDgXFXq znnkqi(vi=1?3;5wDa*O(ph>rBrpr@aHzoq;$gk-;hV?v2vrW(l`otyESS}hW@5gr{ zT_+!5;$q8RIQaThB7>`rn1cAZmbY0^ev@+o@r;ld5U$!CD3w$m7b)U-YYmwV0;HE< zko)i51)J`O2t<_|^znV<9=;MD)GBr*-gtWHA4gC`=ULG?rI|eiE%631&~S0PLcQ$}H$=AVe+P74zSrQVuAy`zEEiy1Y38C&+X*p8Lft1G=@i_3iK(h~Kl^NhQB z5{E-`ZO0oWu<7SFTf_uP5JtX>VS}E)?ZNAl7m;l%-}-#~dYrU^hsj#B8$Gb(2vIWp zCPw2QmPc*k8hUj}vYAyOHr3RfKZh>3d;}Lz~%mro~w?J;!x(C zKhc%Lx?yJLI1?;HpnIgCaandas6#3`(m*)sBuw0&yu#2ke&B!E3|6b<#j(?E)WFwS#Wh7aPQ3&Vho(g_T)y3XF#SjM>qW%TPyw+>= zP>@@Ueq=TRC8x9{!eueB3N+;x$FD%u+;38Qe;;mi`uxTy;!_PbEOId;-diR^GjA)2 ziLpxYF?VaYQnPlR#t0`9*dY2OhK;LzeJEm+sO;O?b-4wb($+Q4%B#1M6jq&_=;rrz z?Xk87CF#<@y5A`B)SeOo0Z=52zr^h$Lp>yI+JHM!)@-~n<(Z4sctR^T)(3T^-9su( zwbC9Ige<{l5Ta3EPR+=V+L5JmDl3e2j&TTTLk&e%G=)l{tO@}G-{=`;nfr;2JvpPQ z8yc%h9m;XUF?kWHuFDE|cZd{QQa7x#Ot9m^izKU)zA(l3DQ)VkD3L@Q^1J-USRBn*C~Rqe=L4F2k;Nx2VL{%6D6EZu06d94rUxLEz7 zPEpReJB9cT|2)>vP@iFpy zyXo$FH#UKtLYTS-<5Ho_Q=q18PL_JGC-^=ViA$mU?w`K#zHdlM?Q;YCgkA~$cFdvP z)Vcf+KYnb%|C3{8`zOczU;iVN0N5J;9~Z5vsg0tJ=^G0Q-rtsACMdd4fC#CG)C_8| zXjlvv8B(Co3A>vHOUAr!Of)ljRe7mu_s~Cn$J1TV4Oz@1-+dix`JO`(2Wr^b&S5sy zntkond-(A+Qrio}5q-^KjlyBl8D6)Gd0PZq8vQ;8J>40yFTswhJ>ky8d$q>nUNWJ> zT(z3y%=!ZAI*IihZ9i6ryj!2niS-P61}-!H01jr!#YGP0t$v|-Dh`M3yig!#V7Ab7 zV9v%%ya{DQMhccu;JP6pi(OMbC0Z~ooq^@gJo|m7E@B`r2Ysa=(v2EM7Z9A#hMkSS` z;^fx(pT4(y^fUV0r~A2gtg+tgy~lntf1f$O6KgIL-EIE+#|5x?r9;3hYqf|mjR|7` zFt+bH;h2>qv8aVW*8IkZ0N(ruLtg4m5y^M-0dvzODujck5MfX+X;UfSvjgHc>=>v^ z26iTEPR&?736d*uni%TK*!je1L0Rhe6X&J_a3cA&k*Yrb1cmhUE^8VtXXgsql@VoE zG0RhAbE;t<5-Sf=EqJ=2;)C>-Vxp#N4J`W9MpH|*jt3}MTmnbk4Vz4PsY+R0dDqNF zB;5@>PmlRn+blJtEF|;mA25x-s&LF)?)Py0m6w5l7=?E8e6H2Tw&nCNCI`XMyHkv^ z$4k(}JU46Ad}~CoiTp^=erot+Me>9i-dgGmy_Ew9R~genM!QGndvNaewjdg8`dYAL z`8paDMP&75WHmqD7t2Im$39Ese$0y@jT(R>-YQqSXH)%%ZJ7WP4&6;J>P2n4)vTR;V=fay-l!TZsd8=qX+p^=rMf7w{B-wI!LBU^@$0Ty*#cAcSHwR$=y|K|& z2VH>wK8m7NynLVX6nm*P+Rxjn-I6D`9rn7pA8qL~$?Ua#!@BMY}Ub##YmK;N6C+fd7NhdDld z^1m~Lj^o?5og9`B%t0`TSP7t=c^drF58iWrooh&(eXk?Cmn@va}9kbWxVxCD#46A&EwSdM^sOXw39 z`3A*4vqx(`1+iI~_afx(IX#u39df({JbQ+rdxzJi#nwi0()@TQ&)p4uw)T0&_{*1i zff~@Af`fppLjR9fxBOcJOW4lV)WXcg5%}*3aB|X)GL9U_+Y8zo>NwA4iMhuO?mAcHetv;1cG6H9@kr;$`u(v|o*{v;shE1M(A}`mFB~ca?q{ZtOv z5U=wGt0_GT!Z9=2kGKK3A|1PGL%o6~Oc6 z?X!H_-osElUD`;OA@0siwjewXlI!q2M)PI2bwvRCAXSK%tW(~%GzVvP-0-qjLy^Vz zjE@mg1}6qymZV>EBSlM>H#1?av@{aH5j(~#zCw7jNGIm}k`MCfiUcC%1`_F%7^Q`E z{b_rIoy@$=_YZuEEWyE8aEqC|`6kcb@gGZwgBhvQhMM-kczTnp4<~X!EVRgYL_BK< z$6EN8SIBqsJ04yvi4IBmg#r&Il(98|84o5&-qX&4lUL(+F<-HUxL2IJcIUTm=-URj zpwjL4(LFiS#r&NDe5ot+b^B+PIeJfvRK>70|1*qKI zV?#w(qC#qxW{i>u455by_710jlM+CB5JPx`oG`_CV;0GM@t97{nh zqW-E09jH=n>IE)A4ziXKP!%GGtrVAmYs?DwE5TBWM8Fg*t^>6Q5%O6NW+5&Rb%2mx zXR4?u zm~VsDmCU^M@{{e&c{C-B9s=3Bd$id0a$0qo?Y?_k`PB0Q>vMf$4-)WUs*i#s~lNqXoAlmi4hDjnCf$q4OaU&FHFkswDy4Nqf13P?ImGzl{y|H)F;m_ za~#v_vSih|nh{Gk^@>_UHt=MBch-*PfEt78+mFNYrLj4C{q8qMh;vSoTtoB@5^XEK zHCD$TB>3gbxl5Pj*mo|!rt$A$tU2t`gJ#(70|J)ep;(e-Noh{N4K-EI^WsfZCUGSP zWx~3@TZ%P0irAEypG3M2Ck-`54v(8OIZ(OFuTRNhCc+?txmB3OCednTNJLjulFLK_ z!wr99qx;EPsR=Tv;Y9WxtZ;kMG=|22@|ubv7^2Mo%76z(2E1A&AJq(Qxu^kQ4)``} z4RH)*JZj^aFW+IkONHV>^8ZM&iM1ARJe^H_$P`pPw= zp5Q0+zJP2mw?@UO5IdMb(jqoiJB=&zCI#eqDR{VJq6%i`9L@J@<+)2E(Ii8_dLTzt z-a(B7-Uv|>dqWID<&W>thAtw*mQ_fVL}*s?#A>l+8levb+f-;I91|at8Cv9L7F#xU zks$CEG3D;4Sss;lDLJdO-L0lYSVK(51#yd4L-Ttdyu>po)cAvvO2v5_dfy;ujG7k) zCW*3?Zhg%!*T=Oy%&J(2z5UhV)Z)KDq$o^BXUX;~es#?idP?U3R{}~c*{bdxOANg( zQsX~Hs>n#(`f7>J$oIbS)$W4{@yom)i1k>vrbVxckPpEbm5qMh(8>~jPm zG~jto8M2X3F<9bf-=4uwW~FS+Q>DEG8Js7=?6-zm8&5EqZGIr^4^Gv*)GWl|2LDbH z^c?P=0nfA>9>vjYXiF zJ*VqxZwkY)H%2SEanZ~@)Q12P6NZCQ!M7nC5mkXCKl zA7SJPWSW%p1|2c_khic9nb+2O!?ib7EfN`NKOCuPI1oE0dF+TE>~2jF*=-+9ensjI z|Ge>1t0QcIX?Y@68zpEEYb58SQ+tL&@f(y(TG@tQc@v9z1$W(uEVM)8KrC7UI%PDg zZ}oF>myO$q<<3QDo`lSL&vLN8`%#@@vlKdFWCJeCPY+(IoWQ6!zyxPSqO*Ro(C?^n zX-*{J!q4$qx*p7VN4`$={5{#GzqeL<=$mY| z6BO1aVULHj3iW(QCdB8lysKP1>vaonDbkKpbWO~+N+*D&-REO;J9doRLZ9bS71Yv# z%ym+q6k>MBa zi88KxBOXUKY7GguUC{z>V=5(D0A(0A#@er}aHF+1F3^Q{9Q3L2Wcz^F$7DvnSm+b$ zVkgtF#ww?lDNg32^rI|RPBT#t*Wbu&m+)g#v)t*e;Zxe6WZtJQCSqM^1jCK)6Vo32 zDR*uNpr?nH43q7#>DOlc@CpsE4$dg?`1gev6!W97V}j=d19u!z>Nj;m=Antad;z6o zVi;sv5jxP8vyHpIJZ||5pkd*HZngdbZVAe!jv)>RKz`H77gBk ziuI`@t$%4K`!Yx;)E?@u9d$Q6u;i4CufYk=rJsQ-u8wa= zp7Bw)chwJUL^mK0D52CC=A@wB&O70peBl#qBMOyVJ=bPDk)%2-DcWVFZF_-M?-e{< zrNQ8x_=a|rd*FhAFE7cg2}xImYT>r;Zse9%SWU(lyQ5QMwV+At855WFh{&i!WB_ir zhp?az?l+W63QhdP{2{c(i1I`uh{SSGJT7a1ume?Y&?O7RSuVW^3YG1T$RzwA-+>kG zurd$fR$O=p5GK8l4#Z=hn**%Q?EG%$_&PIOaqFV;b((cySE*&#albyo*m}fi0k{cJ zb!gjmp;Yrrb!v+Dcn_pOdaq2jPPoS1BpmJI$Jqohq9e+xD?5yKgsaS{u|$OFuHw6s(Ae&U)c5 zP*?keQbaGL?=>$8WY&ui=0YuBrs+kK=nD8<>36)HW}au@27mJN`+m_F5rgu9vqI}E zyQ5}@57s*#9axaJ)~klmW|u1I(JbR+W6!FVYM-hOtg;BNj&Py17XLv+30ElomUcmA zi}ny3OakN}x@V?!gLnWlI-N~RIkRR2-w)>rY*6Jyqz1)=Aqn~tf|TB?&43YOO>6 zH9omF6EOngG0z120SezdBndcbqr_YLxU(BS5;=0uiM(|ix^o`u z{FzVJBR9!|YXrnc@Ff;XN#2g3Ign+eC}+IP75;(y8z_|W#!tvmhtT!9)bGG31%6K| zCNbXhfX*fcA){bZl(Zs60z>+Ks%r4E+_&&@`IELsL1{L7eQA0Y#?`)qM)ae)Omrd> z6cHSk@{_J=SxZjO5DrDSIi4@k5=B{*4|*#aG*vgv))u z){=jf>VCuTSYOCPeu35MWfZbuHe3$g|t%iDTBunDjoWw#*7A>J?_?VTJPi-dI zpH(Sz_q#=9C_`>+o~DaD<%<$2FLc`k&xs+OyrHao*Bk3SRfIP<<-UbZDZ^C^)AU$o z?_Z?d7%RHI|3OU!>YqrH{NE+*-^;!KHFMQ!R@ykCsJ@}rKS-@N5d9;FgS9Me<$v zvc*~mYcl-Q6pGyt#(%FM=&r3#yc>DI`<{LqWqy>=u|=2k{s1{UK{1#I!)M<`=yGX} zMouD>G3-%PhYu_(q9lk0(=e{Z*lT?vHKO8rt~^#uTcGd8KS=I6LvV<6DBgfW-t|Jx zob3hjN5ZSjYC7ENjOUn{V!6#~eq|@tmaDOD{@6KB)J8%fn$lf^ByztAUF~EHjz=r@ zDn)lzH?y(@(t+`t#9fcIUA!xl5foFH6j?TAid>j=>e&bY{|vHC?~&EZhu5;-YU1c{th0ss$(*PExzGSjiqR74sO(@s=> z0QXvPcRo5T5tb}@flUd+U31!X0k19gD=|}2!~+d7pJ)nE-uyc)H)OGre70)|mpnRp z9jRgbl$Sc0cSxuTt+UIlMb{k0YOCt790MwF@TOv78c@E)#Dvn@a)4>VKrzE?=i(cf~3WjZk!Gs#XM zW9%I6d%$<3gFhyc194`<2z9++YoyDdP%!EpH#R8r__jCmHd(BOlhuEYEJgDuKW>4f zZ7|aBCU&p1Tq3pTSz8YJbaSqL**CeTt%X_Y z?$#OMz8hzPJWjm#XpTCan6E*CTKauJOrMVchFL&7g9N8irHa^ANE-6&73O+93S|NN zrcl;jc(GGx`Ifq6LfJbp47g8seoxxjD_1?&FLLUPIbm z%tR&y;PYJ`lRO9`?HmoBarOpV7j_V7|M^+gul192V0>@v{7cSL-7nDYaiD%{FPul) z1_KYBa5b&{GF?dShi~#Br4RkYWDrak@+)SugJBk-wWQ3PdAKP)iqVWgmI6{qhTDpQ zz`RK_Bpzfw0ih(yPTUsdJME96y`?s%a^&@a#UY>2qS!X48Ha`aZG>Tz@l_2Pqt^M@ zDbabzAhR=6d^ID3GIR}-%g;)fcfXUC9d*3-LH@s-q~!^rSPeJ`$PC>7ksSFCE>Y0Y z%*DpU)>+iu$i)8NtGU^6g7O25sH2~vKb#8)VZ@N5H^HMK#RG`|A}EQ&fr!^8EQO{Q zDYjs}DHO;Ez99Tb^?2aX$OymZdLCbX{(RTp;n&*%(b=C9iP@!2%8?~GmrKK&qeA&D zvp{LM;Ob-hI6#Cu^cR_`PZ2Sd-p~LSn-eL+4La8sp)a^5=!`@7L z0Kw7c)@OKstU8Voy_JJh?tm5S*&XV@a5%H|XlxOAg?W@DXc&4~qv5KWWn_(a#$@`= z1J9TdeRKvEkZ*{ht2Cv=50aMbsw=7n){` z`_|`Ogd1@zX@Er0e0^w1x7lNs)5hKH^KW<%7mk*GVue@}0nLFovm&HPg*lAz1aPtk zVL5IGQ~=<KAl`nq+1 zT(;Tsl2*inZiF)dUh`|cJ*A&iD1PP@I;oQfkv3a`)ZVgTPOHpCd0ce2MYnWSnJ+_Z zaxx}bIO_ymS&O+lGvo23C{`xMp^dRt^V!e^n{G$Ho#8}Pr$&aSH=$u-76sw{j`bs7 zlW;C-!R3WoX3L$}r|TfUfCFIiXl2YZc$P#b%VjgT9=96L@o__Dueo8a`}28Z+IU-N^!9Jxs{e+<_7kAq<>{|$r5 z|3}PJwbfD7Q9s}@D1s#WRN6HvHAIAohdR{+D)W+&`_RD!^Wn!WFl9^^#)qU|rPo7y zH1)mBJ7MTAv~+!b8@y;fF{H;Uy8B!WFy9RQBj(o=$yj6BDoM6mZD0)qF&DuyD_Ez;eLClr29h8WEU zp_e36+uF;@4psE^I4m-4Rf2ZUQx93FbB&0p#e8Fc9?HC8DK4$rAirvYD?sb!B0fbi zkA`Qk;1H=ve%WM$$*fXDd_TSV-uIPjy}lMq+(BmWyFeRgk8!329s#k$>2NYPd-Agb z9v+nIK6nAPT!N*MFINZ>3RIfq^?HneymMQH@Z!gd28A3@WpIpMYPu!{T#mVpELREo zt1D8)J)mUII@(%l_;koaXUSfWP^AzCFV#Ms6|itQ*Kba;c~c>E8W97CQufLe1I|QF zQ`b;KDAhO(Z-zLdqe&Noahn*Y!i}mp`PENvv6Qbaj=OPxaapH{{7zl(v-YqQQW)|c z_o+#;WFXdY*J)_ji{tk z!KKDhb+@!o#Y0>ilPH47><~86wRu*hY5vI1xH9?6pp0dOBZ2wu_(e5>L!r6p;sW%( z?O9Uw=^T>M;wu-vL9~zRE$X(!BKRZ7{SV*#!b)({(;os62AUQoo3iqii=?@Xdt`;k8TV!>G+sfPzI5$iy1J9%k$CiUlhDv-Y1TlOK$GCdIoS2+O1L<(*sFh zhiN-kdd&pHj225R>6O*)JlU-H%gqIM6+9eL!c6&SD%k>)y**;OOK%#e+l0N3?h@14b<0YReh(Nd)jQCE zO=*9M?{oWndq5%50`xy3A^67Sb<5-t@N&dphS>WbsAe64!MP{Z+&%(!eVPxr79-kFv;W!U`P~3o|>>mWSFCzhB$UmjnJL=#8|_hJ&{v06Q1C5UuRa$ zt3fU5pV*FZ_G1?<1_Dp1(vziYfc?rreTJNg{637&kZx3gN2JUhkLaE{(cBuk$88_z z^H1>jzOe>fUIt&!j@(HLe<#g%JR$*nHpF)dYPZ==(l7gJiadh@AYKU!es=zN=5u|a z^zsSN#RrzpHtwRN<-?dh=a4*lRMkNuNahR4zAS-i1O^6(Puu8~dVO=zGR?leQl!|b zRgPb#_1FE~iBCQ%n3H&7Zs)c3(oo}qP@#oE-+JwUb(9c`tV9`~PLL76Qw0j0ESSS` z(!AYABdh0#pr^}Md)<)1@PuVi-(tgK3BnBBqM975HgjU345(d=T(hJ;Hp^LF{d;7a zO}$PU2?7Kp2loFc6Z{V@R{`kgWa3CFX!<8iidi^1IV-yu{@d4o`{8Ld?Z2kCKT7Cm zX(v_N-FsE(>FRcMBP8e^DGhFx3N=x?Oo5cmuW1jztB={JQ@PV1n<=s+YC zf^|-_s?N^E))!FZ$Vo1j zIVailVc5+&_MUKNohfM9PsrHSA`Bsj2HNC>BQ<9oFP~EEBeRMqcoG$^sx{khK!64_ zxx<(j@Y*d$(TGvDy%T8#>Gu#{=!1tpxsE3$o3;S*%M<}Z;rwc>n zQww0}ebI@QE4A9p+3kgIzqjPN5%s!*q~O>5om{$asSd#kByfXMM+1RDZ9g|3Q3-9_ z)wFUk)->>H_Cf+KaAQe8zx_!f5M|Qw^BY-MB55v4_O5WKO{m%qz?6v?VXl$MeMat^ z-&b5)E*s`1UM?5r0$`~JPU9c2h%Qy7s%9N;GanYbUzd5|@pgnEx<5K+twpV1UZCrl z(VU1vs9zWfg{NHFJS#e#S}Gg;Zc|i59Q1u}z9|06%G`z~;BR&myy&H`oj8iK`z5$n zV*E%yi5rVk`hz?(dT0IxOMmzYar^VG+=bprObxG9EFi;~O=mEx?vT=oX7M_eh{Sxc z#ik>?Y3xWQ#|49C&G=!0%0TcaG#~&RcyD(CUs?kyPgCs#krsH;3L zFN}E;4_geM$$34~GoRN1uZ^!YO%j1D(WV)KG}FW~cOGuU!3cP5D5JtWhU|yufLhQg zf<6=;(K={2@3K=v4B^BKDSW3(M5ksI)2V2Wn73~ypSi%GGsH|nUv(Zcxui47MZ!gQ z%I_F5qe2b3twy-iYAR$@M;D)^jd6P@YP$z)M9!6`fH)pkYO+SFV%k{*Gkj)Pv^o26b zY-bn$0BvVU-MpTed2=;&b$#5Oo!tRBwr7A2tlMovlU@?Fkk(?YCrNI;i15_yP%F38 zj+Cn=S7|q(X(#>@zbSIMAB$c~uGeBLNs%ac!l0lsROQ_h;;8XvP)uPd8oVbRVIBPA z+|6k=ykydHBP_G%koP0yG&918lEsiM1`?GSDMkjz^blVbPXzt-id&mZ2UFDE;M7}RiW*h=;^Jy7A=GH1`@qb$@WC0rY-vS26J zb)_#VEsOw%=B1rtZkjgkgfK4&rSY($an+?T4`_#;kand7^i?-6{PPnB67=xtZpU`n zk_&y(+TYynuWsiALO$QulUC-0FBr?izNCEndX8yK_?9z*>~~_%7qoq%W`$MHAe*xC z#iofdihQsSagyZ#R7_~Zs%0+5%oliX!}s{jXMIpw{}Zg|&fm!25+x1Vzr$@=KgND~ zHdu@w!HA8O^%HE>DO5#yRv|r7tfkG8ZQNAgxSZ5BxJz_VzCYOj^Qr?aB#FK68~gz{a^oy0IB~z0YWCG zc8(_hMVPu$MlnPDv~jd|=OkMYDi+0|gCPwfiC{o1HUzhd7QiWv{%sO-V8M~O2}q5+ z*FVdhvvV!Mvrbp*bs1rJkLB8;;3Q2`=4@hqkGtf3b?xlk@^a06zkAIEaePt}jk4c* zpblvVYF!MJr6U9zS$iIjgxtVYTH-*osxfCb7hHvzELOtWJ!L%2JPZX~Ex#)nvBp&@ zK;0qn(%C$v)V_5g2vN5T|pcL;!%4-bt_raD{7-{<2f}?cs!u#PFB^V<N3_T$PD<7bgLb{&U-bD zzx>-|%>ko=Lq2W0wwJSZp$vL7_p={a){M7Jf&=SG9->veWuk(rwLA`+Q)2w0;T@wifW!Tk9Yxa1w_LdhP>=sm zD77ZgQ$`PBaHQ@b)$v(u{vL@ju($zRwNEoJ)t{M}TEbgu#L#ISZ>Vw5#jVUlwaV)o zK|;RDdrYvuNa3C0$eaC)rp3kF1MzOgH)by^@vN*Stm{H-qPA$~|P?|CRN z!XwCSp1}P*^W6=Awt-1$HevxgioVz@;1z{1;x{;snPX@yhNbc$R5OhKisZ8~mcs1K zvQU-l)f8RsxC3#7phG>{SUj4xHn2>wL77x6>Z-6dpXGPYvx$<0dCC*&>93v@$swBR z-Xc#T??Jn0&HPrbW-vR50oN}Jug&K(ArBz6M`%?zT#9YHWJAvP<=&^DL_y4WdmAfujy*<+xkcF4vt#IS0gd$t;p z^&$KOx&E&v$R+B_&eor>3i9oroQleS->C=#olGQcolI<_NXvf0)8Z0<`ON!%Zb3VrRZ?9jn-L55Xgv)3K85I z=`*5s_J4o%sVS~kHY4XsBpL)h+CH;jWeHj4H?E_i321Djvpexlh(8@`mvxJ#=D^Ym3FkG|$W9Oy! zw&wSV_(DN`8(wjc?JEzQ=xN?e-K*awCfi3pyj@tPteO8u103yL#JCpeB+0l0{ZbF% zV>&7I|sgIGV6y z^Rri4u2EXjOv);Sy#0%9N=POPwCDZ9%+`JMU4Hq#&mA18Wv;A8F{{4xvGtk-O?<0Dpaps1qivHPMB+NPuW<)aoUAp{B!puTmm?5Ju z_>ei2L7H&@vw3l+3=Frbjj9W1Tg(P6wXFlu{><1ZhmnCyD5k?sOwPeq{#Syh;a-96 z){2fsXQw(8eoqeP?gzJ@?^{RRskMHdKfyq(ZrcNx{Hs&8Fjg0|3iM+U%mX{H2pXE5 zwOS9tlaO|-zrmTCHf%9IWM^ERx=u%zuo_=WbcUF`kYv{!pTh`&W=aK73n0a%u&Kl=dSE1RrcP)vJ({00!9LEX$*= zp;TIaEQbxWC4Fw#f_ z1>8ZT$UV0%w={!Y9zv<@3Zc8i3wYS*V$e9$4;j+#trR1pY4lYmBf|`AYSGmrBH1oW z(gvV%L1$ECqS9le%pgu#vwSpxbY4XJ zp{b2o<8pT^9Ym``@r}W#o2$y@+x+W~x(Ya1ce6`!yW> z%|GEM+a&&+#Pc`NvW|8iHo|)KI_dxy^CRB+ez1SyWI;fkhTbwgR02IOBNCu*pNN&T*)8=~=~U zGYPzxQ`yL!_K6s5L!Mm4PBu2>+3ImnLCxL@BCyazy6sRFEgShi-KZdmPsL&b_@P;n z)e=d6+mnh>A!{pBSy2*1!QcHd3-7&YGUU)s*N13@vZk7^y9zmoTj=2lc$A4UU|@0e zsO=-^6{Mp^%P&(xH3!BuuDWSBg%?5D3ipC`5U|W1sKhhY#exyW&*7DtR`=C#{z_y} z7e%IrQ10(bA1L0HNT`b|xyyDm6t@rN)F1^)^J31%(Lz{)Z*Yj%K!;WejRD}5R7@C) z3=|BubU?^{AAo3zkI$j$*cLRqG}f|bS-DAV4u{wCY*3>!@x|p;KTLE^jf&I(0`xpm7gtqR&cx!ugP6NmpS6pDC}V zsWO||<|o77W9kay$zl$6AV}mmR1NT*-pd#y(>4y zL-ag{Gtvl?LzS=eEJ$~Yo0B^MyI`U{-r6ldFc|TZ)MV2(lha0xQAoXLEkiF8pd`5k ze*jhA(y6ab!V#tR;i0*Y)+O~7DUzvNj|H6@7e)pFBy-SRceg7m_nWvZK1Z zFz9w#u-Cfv%-*jVKk2SzI4O7Q!N+Z+-h=Z_EYw2O52 z3>?5t5BT=U;0tcYv9lHycfP*a%~odxNKtrURM)y`Mn^YiF(0qBt5G==P!3jz6JgfmI;d2Dd{D+lT2Dn z9$7P3X6k{`rm4`Z#S`AmD|204$SleLyc^~&LoQSphL+E|_Xl+d&{yz}o8-wC;6VK4 zif{HM7Ug5 z>{-btbjXky2Pxm^;yo{MPZ9GOjWJ7BjNf`Tz7ap;l=W)&JH ztU*e_up8s4!r!}~j@|I#Tl8}Nd4z)ue(q5%5<=_LtKY=yI|#u7`!QJ`W4y9hZ79$i z?jv%9kq`QI+6yx`AhsOnjUMs#uWGB97Zsb_pBz>e_5b5MR@TDF>5s_#JCF-Hn*E0; zUY-0ep*i}wn36)TO%GE>83FSHwqc+3izre*CQY1y<^D#K%tXf4nyIUQ+EYQTFB$=< zqJ;Mi*i(L#nQN+69)qmpVm4=@lkeS*lf~!T`vXoNF1~4;f%{&0$1qM;3mt9hPZ*0U zs%>*9lV#iut=~GSlhqA$!;tDd3W;{sJFO-@-AF%jbd(;ZzkekTL>=@FEi#8bz*^9Q zGIrOyMns{q@TWt(s;9d$hzFAG@YW~*CFs1g2LzCP$e9?ia$Mo~Vx|J}cSH~t;K0_c zY(}eL9#YitCPvyD)DPr>X|y+Pfz&@*d_tDx7;LoxQVV&L{Av)I)Ecpg{0R(xyPcbk zZB^Qt{sncx173kmF&S;&fgySu{El*ts;f%!qKt<;9#NfJAsfdf*H$J5xT{QU6E{`b zDdEsMW{f2;^vs&3mlNNqDP2TelwBQ3~Q*A@6Ld9<-Sd$Clrqm0fbz z#C=ia_0BCELu(fep1MH)^n@&QWUJOJJB{hArl?L`vh(DwAXl^D1uHDYY~-?oJEoxu z)^ct83CkbY3D=lyk$-Gg83H_A@=|)xqCH2MAbKxaU_A9N(ZznL~sH!h6{4xL~jB_1cJDuP3}2k_b|B#gcpYwzKHd(daNVJ zG}|x8%3)(TP#r43j%2Mm_oC<0d#i zf2{2M4}|T%q2LB|H2GhIZL_NGUr6vSuArwRqk|7I2viA4o8&)9DhgvWl7CBBV)1W1 zbETDD-!gTDeNldcc-ajkFAzia`_4b%UP{|6Svmc3yRgRnnB(*_tKIG8>NT|%B;}Sc z1aUBgq!QB3-bo(Q#h1|fK;f5|u*6`Mrr37*YP&9#M$3=m1vIATrajG=Zr`!uUgi5X z3d1nQD#)VqK4!Rd{&zU(;2p>2xMcVdT;ZjS#?3<|eQR|*m`>BRl*hRKECd*ME%S;Y z#Bpvk08~gLmm%gHqL|JoAu?QS0Qy`xaXih6BAywdNmylBwP`o)A+ughd{rUD=wUN* zYD&ZVbQp5Xp2OTwH@E+i%+m8@1EI7h1pw~gF4)JnFB-eGQfxjkMR&T`m6iH;L5y^o zF=pN7;x1#Vs;U)6K*vyhEAA_ceJ94n&S~i$bCoVI^x!bVuvXj-= zpsc4@X#4H4AKJ6Fo0|OAXpHIbBj}>&LMJ+BM*DoJ6${%(?mbp+&&;+PPix*nO4(Y= z(wU+IB(h=$^PZxG&bVhpSAEVp_5nGtfNL$h`cY(Y$wea`3wxdM-9L!2BnOKyULh9q zDhP>4b4dXqUNsL2EmeX6S5UrD9#hUNhVfTVFt2#;;KXc6UcJT88rO^Q%zhh5N45Ymd~NG%=!gPEX*=Q z?VZ`SYhVb##66*eU*Ubrx<9J1eLJ1(c9oT3Xg~#5=PbT$&26_bi!+doeoTKo&m}Eo za*Ea_&pp{x)1s0oOkco~IjAM_`mYDdI_G#pD*hl+`j3c+{!bD4&xMI%mH)dvSC!;Q zN4N`tW~oiD8xbZIAE}y{0V!iCaet*CH<94ly0*2ya}#>A4~r=YH~T?Q*n@du%}z)M zGaTB;Z02e@Gv(I9sqg3W0ZJHch7B5oHc5Y0KpnxYR2#-?asJarv06%-A>|vdl`8eX z<_u1WH=VWkItq^JYMo4rdN7^Nni0%=||9S zvO$(j6CuXUXuo);89g_R9#TBb$I*VQ;Z4=4US#43pZPb?h-#viCYfN|` z-DmDMV<@fp4TlB8{e`o052orD3MZflpbYpu&XSHTfJlcTNP3|fr|rE*gvk%aNw5R! z8%Yp`I%x6kdWa@hFnJVkQ=!!{@#g&3*c-DMc{|pK&E`C#80K3d(Ge4hxC>gp?xvBa z3S44c##ru2(s-_TO%%cifs8Q^`3z!{UR=m)&;vU61dRBxjCe-O9=2BlRt+XHObu!N z9Fq

7#ulkUBt524z3o+ekXyRGMk@u%*jO0>xDO=v?v!Hx_3{Oe@-Ok?6tC=^N|w zDZBO(2qJz3-wV`itwbfH0aP{*CPbwv#*wrzFM_aaJe4X;exX5<%-+gUTkorO|FNve0MBqzClb!I} zXSCra8;3*#1e(x<13RuJMRuo#yh?5Y?4BA49X$L`U=+$!7$xv?enES!&SCTNZ7xx_ z4`<|yhNn<~=GfV&Ab7@hKSwQgjIS>-lxLYYt^hp4Fjhm3$w!QntWh73fAJ#?nu0O?hadlcB! z6Q}|%#Hhpcq}0}Z?!+4H+;Wark79E{^b9+Lzu$D!SyV|SXE|n7IEm3%Lq&fW2tkDo zLyMam6i1V>KwIhE+o#B{`6?|&L3b<0msuB7{r1j*+bXYtvJ;Q|aEhIyiV9l6`=$Ok zQW6ySvD?z&M#>ICXTVsRCT`Akqn&(Sl@+hdfY8RHCdtr8DnqH3*y8VFh zXv!Eapn-Jc0BD5nUEO}2_N%#mfrP$_9jU`Jt*B_T+yej~UG)j8b{HjQp=v*N=m*XT zXg5I|G}sJ2h(SL!+^O zzId;yZ)ZmKBElW-XR=3redy88MYvI@qd?k2$_YZsfw2vqxBHjW$V*;G`T_z{{EyRR z|ARK_-{;`(GVi|~0p-6J)G2GVR9Tfnz&wS+EYLU6`0k1?e+7_}gR`Vzd;eXfR~ zAbe*uCk*s8$p+-*=OPumTQoM42c{ZMCrd@!!M4(aif^GX;#G4K?d|PDhxExFWiWZ} z2id51X(Q9kaO+S%w!{r{5UG}*a)iQS&k$hivXAtM>JXm-NdqXok3=ql;*E}#eXIAF zfcIqwwdR5&pF*{jVOEeOiuE0hVmg5 z1&C2*ITV2q>OuK%teYe%pYqV99A&|w)2}n18>ldrYirbHswZ|K0Nbp0t{t`Kl6}Z& z-7F?E*EnV~x40d-vWS%9yRW%kGB4q{UxcG%oGma%pb)hy;D%GElMFKnSg7to3X|=& z--2|2Re_B^0Ur=3mBID8IzYyqewD9B2$UnImqhmmJsEAF55q7~wj&~6%9o`oG~ZNv zqSgc-C^@~pXPqV7?S|{fk1f)wHdm!HR~g#AGG;*C!F3S-O@OHjqV4V)#Xu#!4PL|$n$^I_LWg}Y}wX$aM$4O z?wa7igS$I{gS)%CLvYvN9^47;mIQYVu3v6#&T`PfQ!J<2+M(>q~qc#+a%;!T2t-m6J4Hy@+Cc%*@OsQ`6q$r6F z1`ZhDSP0P=Z7ej#oU@C^wqPV-n&*Yc*~Whd0|h(JU>!)9ce!NBdSQ4hz3&>M+p@3h zUr!FAe7l^9G`$?PVt?H>M!}FYJ(n{xlza-FC2g3+9z&~|)E*Z+AOT`m#g=cK*x({J zo$d0a)?gK{OFF|UlqilAO&qN$+Lh$fY8`{`ty;q?*m%h{wWW!csO8D~E%PwFFtAho zotZQ5vqI~1E%F)NWdx#Pef$TmJ!ORhjaUIop^`y{zTP{w`gRIft{+=I02(!eRUT$}TDulWg%2RR@eRC7JK>aFu>a zp?+y3O>gN6Z1M`0xU%-<(`Dy7{H_!x>8SOCvtYK!XqJU5PPu2f*RosB2y2rP!zbYX3@Z;REvo;h)DoAydpu7>miai9lt$YF z*Ebo=Dc9F~w+KM=RtChPPFOox)V-b9V(h5Oa*g=4n2~u7pW7W5Wig>yx39$0p>QQW zC;9`3kWIUY;^@2Mtw6H^4ox2gT%dH%=afB8L!v%SyMmSA!sYt%%!H_PP-PidktgbE z@7j(dkYr5+^B|r1T}bgco01a0A;WQe(AEt-_g|IQw#kp3v|bersZiXzLs^!p`4mug z^Gcv2vN{HYisr$&dgVKOF1Ll5nt2Ad#+aDKq`q7)P=o3L6nCu};m~b`UXk z*7OzQgHNKnByye}Zgu_FF}K)7MKSeeZ=E#NAykhz2}+SZ0_=)-uSeJev$$rbSfn9) zF2%)`;e~L9=6d;7hN~8h)}qE*u>31H`&O1S21{}4;sc$pR+CfP8;6sJqB+WO+yz%) z=xwZ=*fRKqOMf≈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

7#ulkUBt524z3o+ekXyRGMk@ zu%*jO0>xDO=v?v!Hx_3{Oe@-Ok?6tC=^N|wDZBO(2qJz3-wV`itwbfH0aP{*CPbwv z#*wrzFM_aaJe4X;exX5<%-+gUTkorO|FNve0MBqzClb!I}XSCra8;3*#1e(x<13RuJMRuo#yh?5Y z?4BA49X$L`U=+$!7$xv?enES!&SCTNZ7xx_4`<|yhNn<~=GfV&Ab7@hKSwQgjIS>- zlxLYYt^hp4Fjhm3$w!Qn ztWh73fAJ#?nu0O?hadlcB!6Q}|%#Hhpcq}0}Z?!+4H+;Wark79E{ z^b9+Lzu$D!SyV|SXE|n7IEm3%Lq&fW2tkDoLyMam6i1V>KwIhE+o#B{`6?|&L3b<0 zmsuB7{r1j*+bXYtvJ;Q|aEhIyiV9l6`=$OkQW6ySvD?z&M#>ICXTVsRC zT`Akqn&(Sl@+hdfY8RHCdtr8DnqH3*y8VFhXv!Eapn-Jc0BD5nUEO}2_N%#mfrP$_ z9jU`Jt*B_T+yej~UG)j8b{HjQp=v*N=m*XTXg5I|G}sJ2h(SL!+^OzId;yZ)ZmKBElW-XR=3redy88MYvI@ zqd?k2$_YZsfw2vqxBHjW$V*;G`T_z{{EyRR|ARK_-{;`(GVi|~0p-6J)G2GVR9Tfn zz&wS+EYLU6`0k1?e+7_}gR`Vzd;eXfR~Abe*uCk*s8$p+-*=OPumTQoM42c{ZM zCrd@!!M4(aif^GX;#G4K?d|PDhxExFWiWZ}2id51X(Q9kaO+S%w!{r{5UG}*a)iQS z&k$hivXAtM>JXm-NdqXok3=ql;*E}#eXIAFfcIqwwdR5&pF*{jVOEeO ziuE0hVmg51&C2*ITV2q>OuK%teYe%pYqV99A&|w z)2}n18>ldrYirbHswZ|K0Nbp0t{t`Kl6}Z&-7F?E*EnV~x40d-vWS%9yRW%kGB4q{ zUxcG%oGma%pb)hy;D%GElMFKnSg7to3X|=&--2|2Re_B^0Ur=3mBID8IzYyqewD9B z2$UnImqhmmJsEAF55q7~wj&~6%9o`oG~ZNvqSgc-C^@~pXPqV7?S|{fk1f)wHdm!H zR~g#AGG;*C!F3S-O@OH zjqV4V)#Xu#!4PL|$n$^I_LWg}Y}wX$aM$4O?wa7igS$I{gS)%CLvYvN9^47;mIQYV zu3v6#&T`PfQ!J<2+M(>q~ zqc#+a%;!T2t-m6J4Hy@+Cc%*@OsQ`6q$r6F1`ZhDSP0P=Z7ej#oU@C^wqPV-n&*Yc z*~Whd0|h(JU>!)9ce!NBdSQ4hz3&>M+p@3hUr!FAe7l^9G`$?PVt?H>M!}FYJ(n{x zlza-FC2g3+9z&~|)E*Z+AOT`m#g=cK*x({Jo$d0a)?gK{OFF|UlqilAO&qN$+Lh$f zY8`{`ty;q?*m%h{wWW!csO8D~E%PwFFtAhootZQ5vqI~1E%F)NWdx#Pef$TmJ!ORh zjaUIop^`y{zT}Fay;8GHL{PO+`wc(c^9z+jHJqWn zCF1A{wMHacK=tJA9zWx)Kn%M6nXa+^% zrL4XWtkO5OomSnX@RF~v#;V;|gWyhON=K7KK+*84Y1)Uk103OqY)IoyN-sQHJESJT0F2cr2c+zuddOMhv?g(`sE(6}=YDASJZA!t@;Rj#En0>9mT;F#>4= z@o9%}g3bmjgr}Z5tp$Dtn38n_SmD4V#p5(O;=20~f6p2hE3^ze&w?>RHb3uD55eRoOl#VL&T-+8P1s#+Vw5vn#xf3?K3&$Q`tqLXEGuFz(g)zcNXh2F&Hd)B zQl4rcI7wVk^-R0*z1WXZ{MlTR&E9d}x^^BeM|=zIWb`pqqDT)-&X&RnBlRRfuJF?C zHAF7hQlgRC@w=^EC+1*3-fG6p*9}Ib)qF;Q{VKE4%>OCA=>F~6;w!OC!YXz!-{9TO z#xFY@u5@Z?QH_XY=h0RbQg~5i7Gw<1i|E2tcu-h~6qQn=%MJ*14s+j8wtS?sn~7}F z-&@!}&(qZ}2ny0&8(5|>&f+UXutJJOaRD6%JCzGB09Q8{6sY9lyHNM`#&7sp`R{(Y zSMo1L4V%mEQ>}QSV0~1IX8;qoKH3CMD_4q1Q)Hkt#?sdV*ep=^B-8=*u=vd;pJW$z%L2 zyMhu?&f}6S_5KvJK0R8?%|5-Rnz&f@`b-n4G<4YtTkz#j{?)1pP_y_B$eSV=w{4nw z*m{S{wnuJDEOPhzL&?MOTS~!>0L>QHBiW~A-NY&=_Fj%dMb;WsNu$K_@9t-KUo-Eb zOc7MA(R7MY;TBPiBOGz1@1hR85#M{h_pCi%k@`Y=%Im_0wt<`}&*zO8A7d`uR>9!$ z*wyIjX5)3F--;|jxm~k{M_G=yot3PkBC4m&5r&GZ!*a~rp%7`1!@f7p77H-_iR82) z&6Rs2(~c*c*`(UziYX-(Tzuw?RldO+Mln-}3b8j{DT2v1Xk}b8ZQE>{fxw;=R-qa) zO}r7m&mP};ISORAlmpKF1YL)<;=P!+pKVFTW%y*;l$dV|VvEl&2N zKoUSoYyGWG|BIANcc|KHP^Y_*e2JsKq`^T9*z8s3)4XM|iO|-;~{sKv7Rx+)P z1Pb<_+Ex{?w@UNR;b@5NlA2pb940T)LR9YGTbmwi&B;0zo0=)kIbsX=O%0rlbI?sWz|= zZikeph^5~rpHF~eD3VHP0|-_03nYDl4W73LH7xR zjCZ8oVg+H2zPTK?;;>%@rDe?T%n)T-2omrM50QH;)60;B+;_9or(@x&<6;LfmCQNU z$V6#DS>L5gVE3^EN<}WJVJndDXI47l7I=w%Gs}c)u1y=FCDZJP<#bzm9`$x|V;?m1Dfr8dvkU-p zSl+pU_%^1RWFIb}h`*s@%h}!v=kqXl1$WHc#r))D{k;lopQJYX{iJQjxAS3kMr}Fn zP7Ydvu4~F*J~}+!%<~WBR)8`Y#7H+@4!~82qU973BalV6`bJy~Z(DL}O^hzwMJFIl zW&+@@M~4AM^(V9WJM5BNx;MINUfsazbLId5k7v!RP7wF%)#@!HEY!~9oyz7xK4*bt z02$r+VdU#co>UA^g~GhuD5!-3aIP{uEaay+Eliw83wNWkX76A6IV>&mrCS!k3nacR z4%p9dVGYp-t7bvdz}s$wqCr_3k6l|`J_w?g!7VAkD0tdOsCLi(I95A8SCz0O(jhb2 z?XnV=Xw}65fiP^Ed09`2D(oMc{b*6pBJf#>R*0VfLWPDcN)vR6(UxvON7dDn5=3{`S#fjoyVgdedfsnL2s=di)#3o^K6D`e9Kv27QDvRdwNNsxl} z;NZAn?8uam3jJBWSrRQ!(KR?K6TfFvnx1i{VPMX-oulslnWfI7A-|)mvHAxoIu< z)h|2mf{7cqztT3BRa)PdKgMRr?w;lZ(#r_*!I~6$gG>(^0{39UMm32TGF#$!uU%|r zaNHsuCbX~*CW6_!&Nw*XNF_{rG^&2JM+9_)hNJ}8oHa)+xoQ^#&1rmD9nIQU_srsq z)=S8?rd4ik5K1MHP@bRM_X>WRUheItj2<`+gDI&d#rwiNr5vrpT|$&n74PEoG~iM* ze!_fZBZ;hUQK*x1DySu{A0qhxN)_-j003)^Va}mwiEc|{;#{9qXJqJ5O*6rlBuheO z3sl2-_>l8fD!g%y0BLTLNke?Ahtk`rbk)DQrQs@kZ4hK=qh(6YLywFsB@a>HBA5f? zA1&f7M=D^a`D!kAD`xfXQwmVO-F%HrymIgSXII3r0-n^bC2CVqD(7E>$zLm@v`bir zGrWC5B22S1I_n^O!vZxsJ~`6rm|XPRZPg`&W>)6jX<37;tTfZ^6WPbr_qh=fq00j9 zK=ITn%C~`dex+OL>a6TNkuc805?JHwy3Q`R|>y7j$|Qwklc5tdxq17Nx^V`!>F*0ae^l%=P&^Oc0!PGMRVoj4oZp zg&hn)-ZOrHqT`1{hw)wm9CRDw!+S}=`qkcww^8}+-x^}c4a6VZ-Z81d<5E96YP+Nj zQfBsgO=A+lo#`;hwbnssEd*sb!Z1jIa*5gKdO5tE51JF&Amr|K$k=bd;iaxxHK=jR zewKU|)`ZfKwtgL_j^CM<_eHpcB5^E{3}f+NtLjtK>YbPO<5!{+XzU(SP4Hp*9%xqe zN!I)-(E+6QewgFgwbHWL7PCyNW}ZWD*9UUgv<%dC8;PU@eHIE4@BTJ~?sZ$I7yB_V zv3Ic`ri7AO9y*bWk+W|1tn^%>XjH+WJj&FUI~3gC1{)y)(u2Vn0T*KS`sembRQ=0up@sk zpTuj9iD(FVcP^1MO$KXIz%SV)xH6gjRv?)%8|5DJggSKhB4IcZKe7m7K9wLL$2B!> z&D|!}q}E}N;#(?IeHz@G+PND#8lD7aFm4(%3t_gfvD`y*6~@u8vw)h~-O z5sOcr_@CXry4j3H3hAak0kT5`Ns~+2A4fkgIWGDnW(iHFuNHzZw7{`#<~CfiXg4s~ zQEVjBq8r72xM&$#wjn-O#Kqy%$J}lOG|}pjxOQV|HSg7iA-KVX_}XLfT?NNiZkvF? zo1t$}*20z+(LlygZ+VjdE@v08!(vx2{wTcTpbv*gFF?Jr&7K@x6_G&|RMKcYG|}Kn zqr?#!;9UY$>UPAYC>qaKGn;UeUXC74*N&na^>V%4tqw;!hO3kJ!4R#3HDR1x!fooT z-|m%y93@&&jb_lPVyGc>zDASm)U?o1CQfH3XDk*qqn%wQPLAkH;a{w4$Euda_1qw; z&Apqxup>>TsY_xP8OPr#87+j8B+~Rova{=4N5+>XF~x|EqKBp!IbjcPSzHUnR~dOb zJ|14}BOKwB#XdJ&>Y}4R^%RwK zTNnyD+O}ajhTX3a!qjQDgH55b3I~^!u`)@P4+);_3uj$pTdEhGaVuOxhOF1oVNZR( zQ{s;|Z)-_YLf*!9_;o{!ymUd0_R$-6{>!QtkGjgioOo0#lI- zH$3)9h%~;da_s`9*#qm*nfb>a#%waujYY((QKu#!Cf=)!KTLsXH6P9>x`fTCDHaDN zr!Y5%Yg8=I18cpbCGW#iKI%_zFXKv3UzUEo%nwoWXV`Q#sk?$nn6!zRDk<$ZIB)I! z7KNza$k@+%IS>!}@kZ^gh)i6ley|wCDzu-fhAts$>2tlU*}?~hm&e(3@jmqunfEEQ z_bivpP!SvaK^;fJYbncKJ@sADwtbzV&*oEEjT34nBkO3kY!=R}Vg(deP0{hEJeS(l zX$YcOp#&~P-ZQi_ykj3&!>ZacDU$t|^9*y|Z%du`51OLC;AN@>raGDq+Na|$a2^l) zn7rk~A2eSLNY=3BYK2`+XhIbC9MYQ&bmtJD%eB-{wKy71)g4QNUm6!Jz!Jf#-R#9@ zjM>8VpwM(#+Nbk4zY8&2(Lr5YS80kqUAQmFMfZ))a`FRV@kuFdVH}{fNTtAe+Z>+? z9D5Eu^(>jYb-s;|p!3LNS zfB(WtDmh2!in|d*G?)@*a6=B9CcnhG^~D|rWL9)@Mq0sX#J&mg)-BK4w+kV0%1hO} zp$7v^y=k2IyIj0+qH9$;$t!p%=2!lYCnM>KXK*zR&A2q6osID;h_CqkN3`WfWZ8!t zez1Pv35=Z-01u;&e85s6=OB;8oJ$55CQx%T)1&el=?4)Jh9K{gkTLE~kPO7dunHs* zl#(FkRfjZV(ORrW)iKe-hEo`}tvcX&52eGfw+4H&A13B~v_AvKJG|pL2fQJubzkobn}wu3tCS%5s6b$H0Vbmddb9qm<8bc6!pF& z15(=bGG3KT{IG2d+&T*hyM9A)37eMdGj0zK!VTm!P5}HW4!u9t!z z=la3lb}rP>OskzcC8O{d*z$(m=y;H_GQ|MUa(O1TNO7}6Tx;GPqngzit;ui(0REvsy^YAYV^juheYH zGOq$C0xh{RbJh9MK0nV|Samm-$er!9a68+CRfVx!Vg~=t+UmVMjqH0nbDmSQw@uX; zdM;`-94R)~U&b4SvG&03x*kGq(MuTQet9OKG6^ryz5LwmxE;&uuq&)g^ec zoFDJFxIj>Ytv!9)2qQDH%23AhmP)O-?sCM4wU4dZ#Ijd-Qit_`_e~{4v7`uL!jxYs3J5?&s`Qo9A!n#SOjc1m zQ?|~muGxULGP1V8x5`zTsuTYdJRxj&W-i4K-Z)P2T`$fO=`ipd2TI--q2puhlpK~= zNieOyg#9u2%80uIR%PFhB z?VR!L2PMDX*jySLOrAYoF))usvaJ0C6HaoASaN;`!^-(ER3Aj67g5Av5rlZS7CJAa zlwUg8*qf%r5TKRg3EHnw7Mz?DJkXk-zkfj0_C+?%mOvNaWd)BT*b#VCnir!w z^$^LeoL+P86{aW8z)+@D7$>z2$5aOwIjGVPQT{H+v8COO z1o7fRgoM5TOXavJQ5Z6L$MKMckJ$CtKp#5cSrc`=!7!xHUgF#bpRe;BY`dFFT@+;KsEYDt8fALLar&YYTT%5vzrPNTfO8fi)xn%xYe7Yep z|GGU4k^G#QcK{x@cN(cObh(UB;;=@x>1p4YH)Xl*4k$d*z z<76fjjjCLuTJm+R`7*i|D&N9F6r@3;0BwP?L7dU9qQ(!WMpT~^1MTtMj~tSm)a;2r zQXhp$n~Lbfkfa{8S#vi;2^fr-#EUf1AdTTjzvlo}3Mg|-Ahae0bw$0vt2ugnJHwN_ zN4o^+;}sJ6VyBqZdLlO8nU#wf(Zb>Z@*$8NOAU5z1)1XR`Fv|X%!g#g$``MJ4I;`N zWtiMSr|SO5sYt&4y?0Ck7tN_N{Jg$XK|zEIXexuQLJ#kJmgiH4&9KA|D^j!cOvTf^ zzG((}D^BP%obo*(&uccvz3!LtVM8yT^kSX_Tdd`*&*%8yy*qxsarYPsPKa&-Pqvm+ zTWVDWFVO3V`(rQi%;J&4cy?jn&r9X1*=No)kyMe&7?$nab zJEz2oTQzca8yKZ@t@oxu?C6S?Tu*uDUkbY2`?U1dAdw;8E-GoXK=N56x-o%+YG`F> zp|6{z^aPb-DtwC0w(n*@->r{TwEU{kRtCluE0#{*&dg42j`rwauL5H}v6nro=;4jk zRT$x4ja{&?B407Tp5j+?EyV)w%ak=SBd!@F?e8K?x3l@Mue#aH777k{t7JrGl)^bJ zNl+|AV^?%J&--q>jQFMP1=uosg^XXNDC*~5jQ6L!k1kMXIq zFHe!WIARTbt{w9T_HrfvbI%Ufjx&n{(9phVXfCa-w8AjcrTkNXzDvc8cl|4JCEhb;8w`}<#;fKX4*1(f7RqC!0J(jMAe=cCG7W3v z+tO#WkyPf)9;>uh>(FoHO;BJAot7|{-9kYb>^d0S3$+o|Nz!fRQz{_CoU_kZM4m9)n_p}gs@=^8LRAfa}~rPu_yPbhhuH@>QtC}06zzLc!ry;N+&&ELo* z;}3CV^rjX}tTh=?`Q~IA$S;Sq@T#aBQDD1*cJ&BP!JTYnI*brTkF}TI2`dlF2Ftws zDe7AnHrz`{7OI=gGL$GguM+IVGSG~Gt#XS1^81>z>zXiOgoA@1J_!ajJXo>Z@4Xd> zm2`98*kW4Fp8H+=rt|^Lv(S5?-qVMrzpw?GXPj89TnPgpifuh}fbAjXJX^l&+V$%VQ_+B%gOmHpR zG2H6K&I%6HCyCfD{0XE4=T7q*cu$;WU>235FjszY?=Vw<*{6^Ue!&H3n0RkE^xfWD z1oLn1?VIM4YYRZ2q-0k>W!~oLtNMy#NwvvbyrzrqxW0;P$9FOCxd9hkMRuDUVsobBWvr%24ys#V0u6V2JHF3_SFjq!Di`iF;vJ3c* z2?r}yb(@c7jPDzp+cXGo`6%+Z3@FpcpbvU2WO?MF`vYPfYgrKy6=bo{i+fe*q1jOG zOKJ>y?#UF(KRJ$nPG1+FCj(wLxoeI(-<%hOnNr{@xH$)jft)Q*-My0hgtd2X?7#ed z*{Cw41__1{w^5k6L9qjk)V~*}tJjS+p#V+=pEF1S7H_n`KTvC(=R-PT!Xe1PoaY>X z!r7YPBcc6%OXo;_6E9;&=zX-TXmZ zU=}3+%Y4XqH_4&GqDlQpGGf~W^be*6suWK7Vb#)5`Ih|x!FZU!ec`HO%4T?w#6kd* z(=ZR@N{Rv9h*x062YOc5oU%w=F`xLwJ@hbutH2A$ip3z&>>=ka zuwW@hb2wA*voh5IAkV7Uqv_-`O;VTAE9jkZ5p1E9OdETD4&IAyQi%$O$aZ5r5qMrH ze9)#wa1i`ft?kNEogXp@3*ksjw!7>*@;L^?Xc*6=dM))hD-(a#9E#^F0fAV*+tkxf%yPuF~vX23Rce4uz;)f8|n zI1=|J;_)o@CF^^!#G?0@lel!^eK}@7 zE_^@~FRLjQt#$eK4xHr1?I7;U3_$^kbK05T=}{NvWfg^S@qVD5#Hp!p8kM9;S!@uf zlCJ;>7s2ApS_k6W6-ot!a3elK3B(_W-R|P$CmnMf!1(ejSOcdJx%y^UF*irBi5HBW z9?=IR4czSuQnDur<**g9ROCEnN~gZzY%9HHksMpR-MVBGZ1tM1nFAGc&IL`A$IVLgK4QaoObM{xpq}>PK8i3aO zwN5e|m#OzVV$7Om25|b4<3zmub0b1Y$;g%+B4g&4b-+DgT<8ypV%5=1DwdHA(Zbi#RUlfPWc3*wjuNh)CJ#i^$??W%{n3%tp6zRUX}X53c! z^t7j}2hI!WBaCqUOO+K|m2DJmi%p48=@`O0HE^mxkol1sRWv@O`E_KWSbKPpwC(v~ zwig>LxFq3FVgm{uI=>TYnNO&h_%M{br3A?8QB~sW^_%w8-4IFN-6O=nMm`SH>N5%? zvXR_XKk28?v4|d=q>WC7XFFR!5ZyEm=(`~iap-)X6jb4>DG&osU`bf7GDP5H#{ZBm z2ihKN7iVdr}{fDk-_Ao*3QXg2W$6TX@;f^*&?yKUg5U;H6L{n`;S=FvUIApsjV z&kvnhkZ&CqS@E;F=&rDo`gMKmqHN>+8t`6xBEow57?Fxu(cs90OAVyO2u}xc(N}o? zim5`Dj41`q0dS|A(=H&PHfR;>&`riP{)sxh`OQ?=3r2lkAZCVH59GcF0uEY9-0Y`~ zXKA=*#ZK;4=^L~&V4qB&j|o<=pJ*SKduQv|3dF5UjkDh#FaMa41IBuwObZkr z@8D6GpeA~d477b>_sYfHN~E=lHX`)0I1!d%B{2@skmb&cr)QLFYH2~LcK|_KKf^>@ zgRlLxcgMf5G$F%%QR?0#{(|9-F_O{c!3O&Jw6i^8X=$hfQNb|#`slEl0E?h^9a7^B z3Pj%p0;J1OQEp!4#Vcr#p8n&fs{+CR_s<#+ zhLIa~?Vhm@TgR4u9WVRYuh>tuK)>DF<}GOwaF@mn+`!z&O?ar9-VpasSDB3$Ksr~x7J_Ywdl%%%?587&h&?Z= zTDB*XTYIIyPZfJTEPE1U$cT4$x++Nme1$sHL{oAWy;0!PIL274JhUvKx`@8{dVYKL z8kqmASzOyrLGfmkRP{$A)2}7k?;Q;z43Km+g5oM{Z;5Zn$dlAXM?#DAbqaF&Mf&p7>m-`XqIbd6JEU>dNc~qe z#hlMb+@t3n?t_vm9tC5);%f!Q)8nrdA@i1s@0>)R-rjAz!>~?1vmBay2{3&ks+HZw z*sOU)xTb%1&38M#tXP*h1gd zmd4gbmqt+q27q5CMTa6UQRf;E`EQ6||7#+4`nGoe0VVwZg_4Q3gZ6(wj`-gpXK7>j zACRQ_cS-(Os*a`ee?Xe~KPCMSb^Vp9kO3gxe*dg*`Tv>+-*4F9wX!lZ*44H%wzN=q zQ?4!bj|cs+01K*rVns3hBU~3PjF4jn0U>1@58D0+7@F0xOj4aSax-XQgbjP9p;XIZs|V@KQ_1IHX9FYo*8=~Al8wHtrM-== zzU@C~=2ZUE-hNeLF4K3pKN>B~zfIG?*i4^V*V4k^hk{Jr6l4c*qxHj>?G+>~muX>I z_mmOFv=i!#m|>2MNA zVEU?_ltqn>0RlNP*O&}#_imEaWPPHo62z2I4Wa?TP;g-hP=tpn3?e-=;8phrz<|&c z1hbW_m+9W292prXj5JN&15TAt>)vb9`TDVLZ$JZTU*oEEC(3JjNUf(xY(a0zR1cn4 za-(R0m~YL#gLf-ISHwf{NIMPPyR{uz?hp7S^eF>kPTM_6;S+hZfH5?VM&4jM{?~#` zIXEI01`7h*7ueuxp3U`4;Wq$DjTw*0>RROc2EM9 zlmuIFu087g89FE9?G^)@c%Be))&M)EQ5ukhn`QP8!L!Ex7FC_L)PVqjl-?}U{*~rB zFIC1|L#fPuy@ru9;p;;#Ilo(L=M1mrriU@iqE_=MdlKIFd&xwl;dcnq;^yZ7m_7t} z9}L$k8z7i^O{=_Rf=z|ymM-4s2?!PVkb#|Xs9JD*-R#q6ElH>IRPP*4b$mDyw0=?A?O zlud`e9qT2Iz^|DDC+Q_}(ohkFNiE@R&XM2L*8#j%xyG8aVoBX@OwtyL0ZdvuQ@ z%4s8OOYM+7NHC^{_;T^wa}h&%Fn{I~iE zbkaq-IA4K(m^-?km*zGQ002MOujc-%K}E#X{uBin{%wP@(Kj@l$*97*0)L5+ zqY9HI%e2UDK{+0*VpdE>V}`8fuZrczFqct)h((E z16ioFIXqK3DU|+Z!6=QW1FA=5Swpc+~N2{(~?dQpM;g z-dngraYUdpO<}>LpT!5m5B(itXZwZ#k0s!5Hgrstgu}j zDzS9q)1hT-i9Ygv&z#i$ecE+>wSrZ=hX0#CaGbw$QlP6YUMpxb&OrS)+?c) zn9UTqL1}{RwEiG%AK=AV;qFLUWQ|~YfvRi2G-GsopT@j4D%d@|f>gv|2QzvaY0(G+ zXIK~}cbT=5(oucLNxi$|pib717=jBJe2G;kd z!;3ez0);e3y_^LEMqsIATxry-TV+@Rp7^m&Ne)rA+?bs{gTMBGa z6`PG6j?CX96}j$^^e~C$J;ZI)Q*6uBo{wK*6?Z1sxJAHF2 zGwrtw>>r`!kEz_Rmhk6r#rbbj*ZyZ7Ky77XX{B#tXRL4gdz|?_h%tp%ngH=43qIZl zgPIyHBGW-kgIvM_rtF;DZNh~!bdRJ|+=KGgAefo)L4j)5)?Jt~r#uPH7`dE%3|JOT z-m22DNa-zE#a6NUoP-FzR};-MglVDWogK)F0pn$F@pyJ!lH^WOPBT6z?e?HCdt$LZ z(yqeu8lKK^B&zr6rUP9lLid{-1!E6QYxF|c=PUd+-WkRUFhSAn2jikr5RE0C=Yloe z_?PNiWw~Y6?My{L&{RpDj<1JnafFsR?_wfSX=S7o-CZB(Z-@`hO&`nic=de|{}mup)bYa@YSG zNPiLV4~hJ~{D1H;&^I>xXZEJ_mJt13+5Bn_f99n0znH`S#!24J(ni}*UtZtF!B|(H z*UDJ*%_M)yn15e`dE}^AHxIJk?G-Y=a&oVpB@0SthCObk#8ir%89l>@1d<>KViU5p zq8QqylnjWnYQ+P6P?qHeQDvkmOLgK^n(cUN^n)%Y5GpxQ0b^b|E9vKK4DeD>0LpC* zUlmF}daO{IO_g(hJU7Bv*aIK2B>2Z@`(;!rlr8N{BbX!^-A!Qv3?zInmecOTkAdh` zx`vJ6J{3MLjC6!q=eI|0)(oTT*D@06R}se6k2f^()MrBl81FF% zZ`E0b>AONtK8m#zeR;>AS!NK!J@bWIt%V7CnwJ=+MDF!Hoo%X9t+bl%z=&l97NE5D zC_oLOCv2Bs>)b8}&MJ0gb%@@k;7ETcmJHxEpylc9C69~t~#Yfj<+P;=5Ydipm1mfqUMdUz1}9^Ha>$R#TeT6YD`rS&&}u~YP- zOA?N$n^Oc3d3`AaOTxFHD&HY@ih)XNlF+TFC33&t_8vvPdTvXy6q0k~1Mc7h-Hy$l zLEP&RW!%bSy6^&Z4MYgZlQHnI7Q}{LL)unx&XnTG8}ZW^^w;o-55DM7X7raRgtR7% zauN{vR_fSZ=7I=pQ6yQXk8ietC@Jv)`Ng@F#=_wKQPKIiQk9cg?&3PygBy8z@5xqa zrR{k*cDVV{IGkU1JKWsxlThMUxqu*faLazm_~QE-;nMPAZ$}4h_A)=~JjPXE1Gsku z7Y9S=v{x((;hqH*1^`VE9bnoyvU``MUWJ;h3qthP1iLzYupcs-JYCv92J8E7i~!u) zX?COSBR&68dBIlE&Hm8a}|A=?w|D%-pGdq?4 z8|;2Bjrsqvf}c$M_f^EnkDI>ZMQ%IOq}#56)V{Hxt|VCE=MBB3=Wt#P6*cf@v8)Co z3zR{~D+DLY3n2J_OwPw!;XUg?vb^xxwKxjTg8yMmdt>ym?ab|JO^rfNlc)oRe1?U+N^sUTQX&j&+pJoA-l1yC0zG=aiD!zBK8gKej>RM3eUsr8bHJ}DM<1ut zOr*1g2(@76P|2=gs*XaYpU#bJ?#&*amPZFaB@KDFra!r6;JPNeat~>GtOh21ZcR(a zt$rWXiX!+a-deCtv6Yd!i7AGyv5AdKg`Z0G@LAb}u2PN2!7aa~wP4>JGl6q2C@8zp ziV@(WHz-&p6rc*P0I$pSg_q=(SF{A2udNx~Ew}Rxqt;7Jf)9Cj?X%X!L)(Z*9EM-* zfEHSX5{>*-QOJ(AKJ~E-9S2D+>@I6!^08!6 z3;EcO8+htN%65idN>Kno#AInc+DyZn#tbXpZ!{mFSzaa-)Izyui1JqTcQs2BE$9rQ z&&e(!MqaTo(ms-K@g9|5AiB zO5KfIzo8x$eelB;KOpnP7PIt=<&zf8GJXx! zi1Cm;30S>WZVu4Tb3Qw9$%z8AhN7c4*L{H^K{zCXmnTJG@5fmRLSBFbVq;!Hidi}X z1VmfP_8{wG*rch+C*5&0gf{L^_5G$r#; z`HinCdo~RE<9nAo1pSgbTdXXcSjaCzFB!CW=57=>GGfa7(7GcvA9wJ-u(<9&8*!AT zoaE&)7}GtFt|F?=Fft8*7gN`#jCwMCLX*QZ9(MP5Wc6@lYj&x2dVJn^u$4`IePVyS zHg>|noB3Tu=5M>(e6F~E1nahU0Aa6h(9ir0 z`o9Ki?LRqvss9>|zr*kkUCE!J_**g=CNpdTOb65QNZ~4he+PaOogaZaQ28CtrB!IK zOz&v{N$jQdbHCRF2og>x@o1?3g%;emlI?FZ?+qqg71)J|uyjd5q|*6|miK|9v4A9Q z0=jvPcXJ)=?+%{>!I0?f;mIQ3VdVpAz|}#T4R3xzWUx6M4vCLGq{B=%XDxyU`nYr} z{;G5<4N+OosA4yR%$4w()CyA3Xewi7(V4Kw4c%p^VKfzrkh4-}R9>@Pj!>o0-K&r< zG#1*L3Se9-9^zGQ3EA13;2mFTQKgJOeK-cHXjwiEq_LCX%Nq2HsOi){z5CJCeEKcE z{wnJIvhJU9XT+aGZDnar?PPBDqiW-OYxQ>{CI6BT`$ct1b<@K5pScB--;&^1@hHXz zK?51<#;_wO$M{p{h!&BU4llopt_=kyV0nFUU#>hbQIK2;857G%F!HjEg&LJ4wr>>} ze|$VfEmh%L9>WH8{8~_}k?mt^&Kv0c*$9T}+@~YIc+jF5pM~{SG1~4+r(CGgSe-Wd zxfKqKvU3|=d5Zl3#fO31IygqO1P2OetSZy)PCvR=^Nbh4(7Iq9RMunN9zKR53F730 z21wMZ*r%!Jf!Q>++6a`ZopZ!5P7E2b5;_8zwwE{!SKcV!@N84%ZL)+$BCY{z*BMR2 zvbRY?53Upwxy6*YR!@ckPST@A(*n4dx~iNt4gIWhVkbAi*R^v8LrH_q&@6}AeyRUr zo)mMD-^2^@)=~PWbN#c3e>9IZH6?lZrR7y<{yAKs*8CUJ*40AMHPq74I+v7CI)_&Z zl<@?LL`k<6hZnwAm;r>#Q!&log{L+O$ZPK48x$s8L7!u ztpF^v1P37-06>*9Zzu7W5UY^oWQe_;qpy{MJ&duX0T#|1G(BPPI>Q*aq8Cto%b3UT zeG&Kq-E_MJ!f3Dfo^(3+-3NBM`*xk4$h z-UZY7sbn1~ms9qvTUqVgKXPj`y+Y%=qlawSW1qu;48xT>93A>!i}Rdk_!U@~Wl^lI zG(kXAqDcR6XC?rF=2dTE1VR5}ByY|6xjy|NioXEBA7v`|Cet6EpUclb%k;~ zYyL~|{%cHCV!dGsg=Yjnegm(=6PVTC7lbzng;rz##}k1=KnHfPGQB;a(@$W*{}Wg+ z{!-a?+BSyzzmEHUUD8>$vmlJ(pWP8+wCdSpZtrfTf(X2KL4h!%*@Pgh1yP)4q zD6gBNOx)-cV0H}|TNJ{K@uTS7L15F7t zL7Z#LNDk*XEh1`d@<10VDNL6D1x1EgZg1%JGD}`nL!>-qq?xdo@zMPZ7GQ0lCDOwz~}4~gY*8d01JAs{wU2iJb4qcjhnDNl+a!h1O4%!k9k+J%3b8rO#Pe@c_NqTn6lo2M1Qk zLZ^nTfHJq7$ZFc{rwr2=J*4iu>ZqU|4f+WKO?MdVPW~Bvu$bdYxnuDnfw`> zKX*=l$M$dj;E%50&nETPQ2$$3@H@GmMx?8fDLS8ib20yKMEd_mr2l^$k^Xg9{rOdz ze_@)xN7O%?=U(eZ%Jg^M>UYck@8Av^B|;^K2Mm`qH;PxLreuX zpnVP4=Ca&>?G0tnDA zL%~}MvJ69Ry$$7~K^S))+3DU&7}x)(^TCX5^Goy|@PST8b&*oesMakrTo`wUi{_() zr=j+TFxoa4CRkC!KoQoD+ijA@qrD}b>v^eEV18K;Iy!Etg%$Koq`KhoLb@L*dX!rt z1?-z{nbE@F(e!RM&kS20;Bt&5(r3XHi)yr9M zH5{YI$lDzEIy$r$o$%iR=+h4@OsNtU0@7?9c2n0IN1q;^w@5t;7Dfm|n%VTMXd)h+ zzQqSvIL8Xoh0Icl!T1fB5UN&Dk9t87@i!JphMWZfZyXV(r(S;G+P(HDsYj1DX`Ltv zH!BpmH~$35Z|dfbhyEATAXQ$|=F2FEGS@H&gWN_1fa z8io8Z7++D{oHn=KKE@`cv`D7y$lleM3nI9WR&&iRFae9cXxjSVPIfQd_bp+;A={n}HYg92?kv=vH_ z)+psvw=Kl(fmO1AOK*riRx6rg`x4XtKtEK<%!x9oqg!xfPx8(pPf7Ps#riAymu^d2 zWn6vrJO$%iv3_?h7BV^q_*{%GKWYgAE-{woSMFD=`EJ@fxepY|I%Kw@rc!ZJb9+Hf zo64i};TI$4ad&y6g2<-kgr8N?jO zUo?tPcJHqVGUwbn?ORLmqQl=>=*M4h;^H>-`5=iVp|qPbE|c5AH?Zi`iAG#N5kC-~ z#&)Etc6qi0QWC1+X!vN{+oe_P`T%17f9$eh>Pdd;0c`j_#k|7qMbJ>sRKQGxEvInPX(mph+1(L2klz{O{Z5*K9JNv+TJO z(8HRJuei#7KMxmdXY9N~t2Nx*Uk%xdAYXqwG$D2aJ4F9+z*GON1Lpd_wF?_NV-xGY z)yV$Oe6RTbo1%Z1;eXiPziJImkg=QRhY#6y&Vnn+d?2#XB%cWZa8`tH+yOl+QY?~0 zz(;w!Vvqcpyq0{4-&^woB51%LuP0V;!n(59nQf1;fyu}0C|%;~Y10EU1;?QDKP6n0)oFbe$NLw=Fz5losh9z8+U4 z2*V)rV=ValvzEU0{mf zx(oc~{D8QX8DAP*a#A!D(xTx9%RD%hJlUf7f<3n?Yc-qW z?2uvMY8P^?rsTY-$a95n4SffVlf*Dy2Ct6%G`J#7AU3AJ(myeO96H|ElUAw*5~y@qgwM|EfMYH_m)pA&pj z-4@IIHbHTX$2R+tqf6?c!z!e~6-URkd(JWU^fC8w*5~JFwkH7Vz9H~=Z3pt7n`}aS zE>P;|qWr;uFJkqfV1?yFd+A~CQVG5s!uW8GCJ}7uCuGF>&}sS=qJj}3e}N4PW5X3F z4TRInhWwjG%m$uo+z{~Ld+~V5D;6Ml($_CDI;zQlw=)G zUc)Y;Fwsn>H#N4Cm*pzB6aP(%u?%<2*qpO8mZxBy2YPUJi2;y-Q;spoR3;D$M*1!+MS~%!6x6^_9cRZ+;K9&H9WN>; zL5>Dk`c1lI8$g8Hkm^iB6Ozmh0kS`a|Dai71cJRJ3(U(&p|WtqF5RL~5$T|Q`xj&B zWTf-7yUMr&&s>5sQTEa$h;;U>z$SiqMAe9?X0wWlYJK}gYJ+(db;a^eJT~&x`(~gD z?NKy_M!sMkp+Ui@s}Dj_^ggb|BsJQ21R}F?&F-ml{l__$tAp2>c2L54>&XRZPg1Gm z-Be*CeRJ8-=%M{h#3iG^pyL^0!DM=fj0OXQj20#@7v=8zT-}`RyQ|N(*kj)h>#xY` z*1(`3;wkYNhQS$b-(yIa_`d#CEZ?t>*@B8|o|hdfHFn?2xBkp+arW^hC2^^dp18Qf z$xM0@?nu!PXS8iw2eaEs+U?K%t7OuIt=xCrAd+5D**@ke24xgg%KmbbM+s!e0Ln1) z*Q~;ulY6VJtk?e7t?!#&vS)1)-&UK$4&?!N2&UFr;s+rlB}}@3qwh^l=qf5&mh!~p zoPb7^gpAAZH&a-;91tBqG4b<=W;dHS5}Y7|42r89lBU_Eo_XR*vkL~2IPGFC3J;uPrX?UIbF1XjkIgp97XDJtt}EZ z>WtGdU9lElgvUmS-tUtcfJJJa;8Ne5H^j43?mQQwuF(Z1TAL0KmrVxS+a!T0-CwE> zDDWawkB#v&vYN&df)5-Dg7uL$YzhlLSc4+yXD={^t^`@7v~9sNbT|$0W(YB}*X3k% z&Iio!x1dAE@~lv0L~^ck2+58uI4ueaK~;TnrIpo|v71AbfK356B*ME|;DdZK4}-EJ zHevEuLKvL#;j#<+B9OjFpWRWL4_daT9Z;Fc&dLdVA}>gw=B zE_UZ1>3cd?-7B*VBt~&uxPU(fL>3XnE@Mtr_>9IyitVL528@>k-D_Z-+rK6O-&hDx zGp+_kkx~ZsH{O6vyU_8>#x&CCXoJuO!tah;vGSeyVoif-(V$t zyX^)=fB-}2;T58s)v=<-j4R9#rS_?_d9lDCuenJdYG(WEuD!t#&DDiS=J)vOWmilC zIM1U39@yU#vpUj9#Nj{5x)AigBB}o#z-a$ZqRRh5$^X|P?*C88|NkB(|Gz%`{kH(d zKkFWUN@V|RZu>V<`@b5MO@f@=JU#l*^(%5RuY!2V@Jjf85g-j z7qZv2<<{{FQyBhb64rpeVwssBSk|^*&`Y%`x!SRCTn_g}SF@jk8}#T=TVSItIU8@4 zKPQ&xfoM(osF5LC8oivpJe(dZ*k9m-!RkL1LA&=pb)9fU4Ls4al0QXQf`{M9>bt8C z_t~%*Pf|WDDM>dU>wol8`?Mf@e&ul(VX&u{B5{HqkP^l@qD6REcnw6K(}aFplLqde z7?N>-9}I34W!~si3K9HVOKkm!o_h-+p zy0*E$JkWEL1WKF?Q%LB5KSRD{uS0JW3qK?6Sws8lva;{g)B;enX2^`Rup@M?et7CqZv$_O4*JXjqj2e3Mc z;f`xle{a=ngePRtij(gTm=jD$duy#T6(Cs_*d1KR^ychN_ip{#+Yeo`%_?*<8t~E( z5LO}AP=!bAEGR=)i`M|>$T30OWAz~ldisgPQ9tH4NzN{;BF}V*7AmlKrQ~$6zcdD_ zeid}YAw^gyOe^G}a3ra(I5@1u;H{Kk`r~7l0kLh$fydYuzJ;M|VzrAStLy0#9w$%j zJiOsAgP-T#} zfIHxP6;{8ibBp>(ap|ftE>1#<;CgoBK%C0gs>>ADj{JTnMpCAzrSRTIS1VVin)^zR zTv0jRymV!g0n2}^VJ@tMeD=WIo0?sE*|Ai({J=pCQi^6;plDshNI%g{>7iZ;=ZQy* z4eejm8*I-`DQp{HTeqaKDWEZPoCQb7bn|3O-aC-lzCoW zo)N8T!3w)@QeIx5BXV&I@H3_G=e3M+h3tak6r8fw?;>c|vZo5erMhxStpFB%T!Qu~ zAuHMVAKJ0SxrD&1VNqI=Z|xB{oxxtYLX9vbBVlEc4HhzCUZQ0t(SNZLNU~_LD96;8 zn|||6*9WaC;DTOg?pqjR0qD%qFJH0d!Pt+(gopr2ClhzF;rzfdhlOTFCB|4O54ON$ z-tH&8Ma>jBra$o&TA=~#;;vLZV^m5>P~cGqE7<-E(0DaHbesC)?En$~HEk2l{m)L~ zF9O_u@ZSFElW5H>oc?s*{DTW-^ao|1`Nw1dp4dstetP(z>vv?>-x$<7cRxNMn2Uk} zq-soPY;Zs{P%Em0wtpv>cxX(vV44=D&aZc5(170w=kNYHVmaY5iW=}3N*3%+Y$xc? zJ9jcnw9}r^d7c)OfD~G9p1fgTegzIz_)Q8qKyEC65lbPGL{)0XTz_L1JTe{~{(6jm(B)|}HC+wYht3^X2^;-e8L*C$mO!U0L=Gi(uSLnV`z5LLMQN!xxZ~SlPn?<0FKYS{g zKNXw5N+^E^6#sqK(EjUPvvK)*!_r@l^`9H|A3{X_ZR_#=_d;A9{sVaYOW54M%ysy? zv;TKt|1~9v_OE~RPhm0!E+)2Wf0rz5=W1(hXYi+Q=6_Ofe;{T2Pd(XcHg@Z*@LyMY zy>CK9B{5kjE1=Ba^eis)cHuTJBpM3HfHd>0TImboW914D-PbYs)}smYm2YwC#Mf7C z$GUE3S!^R5ZSl9Vw~K3WEvc#9dIJ#_q|gjjqQsSs0z`sH4JnXYn{=0f#E{#!aS)TJ z#0XHumGbcO@Lz4&tnT`fjuazW-wAGRzfPMos;HFf5+PP+a1iF=gqdb~Sv2m#5T00! z>j<>t)qny_xab&Y@{o5=C9Z$ybJeAXr7a29`65;K9KOcPpz8-a!RixbX!@u|^yb8abE$0D z*I6Rbq>>gz(1?_df3d?nFb*L6a8pStLC7{`oFQ82);g-nEv*4ZLMX zmwxYpz=#>0w4b?@d+!JA+)U8F@&DMwb6O7qG}90D9^A1E8jY80u04=JrxH*fgHDLi z7)j*@ULK&#qY_nh7*7I-6`xoLv5Kky^@CDIx`km|SSgCoGcTPt_tPkYewA)nK%00u zRx2W*ja37t4z{8Mj(oV)HFP_OO#-G4Ve(!y9~i~%6X**INPTu1A1DZbXIM-w3nLbh z-^PT2_N{zL!L&yt2#vE#J3`vQ$@0VoD^Rfec$mSG^OJUv$w>XG`Ldg&qFUqNYx(Xy zrq!AwW;AB~-5*Dng>n80dZ|~40r1VFVqA7mEc1e>n4NWKW=6@`Upg#l``Q;WaCY?p zZ`$IDHE~rex4FB&V~g&T3lE|{$)r`M{)Q^T(0kdp4x5T2)Ga^AMUs_mYP!W^N2%RO zFj+q!((r}s0UdqG9tk7y zj-1euADnAN*$4GoulMEqM-AMzpRM}TdCn)bya!F9xxYD5wln_)Dx^a@a(w z;(@5%MGn+RXo-OR_Ik%DWRFE4^eB&gbg#vlMf3gf z0e;{%`uLj+w89xt{^S5qn``>#jlFD^k__iv5AbMZE&w8ROEzw+{X3;yude8HQQ=Zh z+8-syIK6~aWlw4oz>YLTt)%qPovP!nmPAVgpNID>L%;i23fAqj1*ltlX=Q(j1?kla z+1(v*+iWCXwlARo9pZWS*Z*j5I_x-D{I5Mvng3>BP12IVp7CfM2nl;^W zo!ge{Rb`cuEnW@mkX6ng4ee>tD*J+nFJaxwA6AdZH6Sw4f7{F+oM8wKc6ea-$Ed>_ z204o6nbJo|fT=NRef{g$VKPC z!Cl^4a?6s%Pw&+Uk7SzRiuCi;uvd7Q#;d2{dAq4)`36Opk!d~@hL*;@=cYtlvkS9M zt&|OVmz9dB(n2{au}!E^5IY5=p+CM=$Gk$p1cwHethV@|adS-*x6rX18b@7`F- zxHuq56Nh(OJ=ryOX9X5+EW+mxovU&J2N|_)ewOn31W*W{E0+&KoB}~^k6^(=B;|J) z9R&iDk^*`umSX5J?eku9Uyu~Z)KnXPqqn=a)B_o%`U?h?xgFS}HWKVNW1qWN!t55L zNhFP2-FS><%{=8~WiE259e>X@U|Ut=Qn(S(uodricn4f|N2q-KJmmXV+G2=+Fzotg0)!gUf0wrW z*A;^Q6z**P3U@UB2!8)oA^0oS{WCyEPfkMi@k0aecy5y*)vW~X7`*_L(XxJBgfLUS zJnY%hb-8E0>ZdhK?Q-%8N%6jY(u=HgnmrkVz_}MeGjPa24AN;EjCZdzjw+TW;{v^* zD3D;X>=!I`=}aVidzS9jXDih}+PU7`wcc#AKJ+Ki+Whl$dA7a&^LWZ~ zJkCt#a^2(m+3hQ$EUZ$QtdXoCM_leeAs*JMB*)hJ2&Ss=m7>h)n^<>2 z$5HD4C7~GfO4`Mv8&zxR zn^((|3yafJtfRYq3YAoLVXjeG328pMl4&Ax;$88<=%JB~@i7r;d?5kJf!PR5ky*Kb zagNc6e@4uhVo7yZN41>~fg-tdb|RM5p`N_NT@#uyN_d29+m%nV74lgP?1QK^2d zlq!PV($yZ^Lx7X~#UHS4_Zk=+%~Sl>NF(oet}wf(e}F}8$4Uptm5}aZ{^NWU{v6L`XT6)XS;0im^8B?rXAz?F2k`P<9|^(ubp* z{CV_COQ|xO!%pW|#olwP!u=5jcW;4aiwVIh{VH=hbvb6UIUGyJME%s9=G$TYJ~j;i z>;6(+=vRp1)Obt%ApaRDN`3L-NDArtjdJ9Y=$t#FGU~pdH!eA-CRO&S5^_BeRBijU z_bmVlQTYuOB-n?IpH>JihUb7d;Ua5shB~4YxO3j<-d$zy;Gh}qBEmhAR$b|E7}g_X zDxse>U)oO)1a)iB3+#BSs?^ione~hW3RN-FP#K#4;6)) zGbv<=0B7D6KwJ%z;PtzbPS#GmTN=2V`iW$m1xqvThAdJ^fTwWBf=^g4L!9-4g2rJY zr$mg2iirTnV_CQ?>TT04Wh|UABtx=B4kf+xW!Ao2SF)*QL1VW4VUBMA5EiPkd9Zbf zEjS{|ppll|e^yvaWR%`bjr8Fet!0ealJBgdEo%jJzRn&qy^!R%rw{#Sbg2h7I9SlF6_D|ZKoVhr!B1|e8B5}>EnVS#ih z%QY^-qcqEHE~p!>eilLB+G0cmA1h!05GRb<*zi*Hyj^~U=lvh}HQfNG`QaxhO}4U) zqA(~`Bt|8{&y5l-!`m(R_PvQUtdAsgD(KE~wM+^4v)=?2h#u2Yr~ok-(<_=N)-B6) z%P3^<1%%MUiKiNhoXjGNZ}?%L4C+52Sc;)t`!fz4vY!HYG99{iD9lLSJO`@wnj1`G zU=p@A1GhK9Kpf2Jyu2vc0#x~JhFLrZwippf+aVVrh*%uTanHO5T%Dt$+ADh_#E$3t z;@YGY>eeD9gNikUEkUT`UdZ!b(ti$*sAA1Ls-hQ(5|m`n2SQoLl*@}Bf2hG7keak5 z)AhVTREssHd#2nwz;9MFDdp&M2adxy@>BqxZgC9T;|g}DC#MY8nA?V>!oe7aR<{n8 zF~Qe7N7QM_+9^{znvg>6>{yEDFs`!3-CvNcWIy`zr10`jZX6bhi(V{R_3{20C$5-Q zEl`b!Z3=p1er?>w1uC_@0g|!)WIqq}G*xV$TUp!Wc^R?2!ck|Zip?Io=Yi6Jcf^-pcX_ccNO8-wOpY*z=gWLh`hF`J%%ic0WL& zv1j^2_RfwQr_Z7JVJZh=(9#u!XK)K$Fly~X;R_it&Ld}BeXXZCe1TS>Ju+=&muuFY zzegTF_Y2#IoQsq;zi@S*YD*wnP(e~mmavATU{|VJu3t8LAQFSnyaF?BJi_pCJ=m7PQ8qG zAljCtgZQW&X!J^q%<90TL8dQ;aeI~wRr@KcGFS&{(teugQ{S0A#1&d3@_ypOvt_du z8D?uM52vk5G2fwMlY)3h{C!!rv;m%EuV8q5d)VIrY(RUOHid9_m6fzxX?->m6IR0b z;WsGY-?DIL_B5T9oxqYx9fqKJ;U)SBysHa0afO_NO~Z0=Lv=XN?ZVM8O5r3ZKhyO( zQ1TWKFA+f<{ry#IcLDVoD|?cp@^U+0*V#59p@&vb5`kD*@O5AG!)c}nTnpiz&6Rmc z7LbhVK>7wZ4sgVg3!vYSt@UWkwwMt7TY=DgAm43-pewLE)^WFKCTS);SXnM@X0vb9 zphe!ne(tlZYa=L->DuI7LxruKT2kUil|xSMc;C&snq?F02#PWm-GotWW1_iYKOF4rSA(n`NFDe%!&IrN|e zIh_`%b9boQ{1OWC+HhPzUe|@>^d&SKVLGgp?xaR+4KWu*8RF7`sk>nfznoH7p;dnp zxem^}ZI+OzA;4&OK!E1G`nn9OXXx_E3U6glPT2jS5V4E#I!TerO7!+MO0}^aX4C~w z%l}11$qxKVHbC+18K(4P@4#B8@UjiKuE*mFCxB+=h@@o(Mda78*&PsaMy$hSEU*w~ z6GwWwghEIety}dh#91!cyFiV{U9dx`!z?rAp?j+psTcos) zy+~&;j4h=~!y&MgZ)}JtdI|Q>;5-E`DZ$Pr7Z6x8X&+VK_mJ+#4=DC+hzJw65`oF* zC&cW3#^3l{_fS{^G%yY)BL?;MJKLXEVI>kd8*mB^9IFuN2>4 zx;om$6ab?LUTwO>Rf}0KFyQoh6kO*1sCms})0y1V=g1FL4-mvn)1U(`YjKrwBZ)Ex zx`C19CH*U{ga5Zeqkbr_2Uo(&y10!>?H3`|NKs z^1cMKxDUB;BR6&gw|XgZKz#sa2Nv%OjjT5%xx;)0xCw*$7#yNp&5F386&VX=196T~Fy#_X z%o0w-LFrwz8K_FP;Fzpl+2j#qSxC|}W?44urxsi7=xyN$ay&UM(`IL%7!21PeW}03 zT7W}v1XTM5c6RjremazFq^^C8s;4PHDGgM8O_=06GK=}|6wYa+5oNz{J1fhH&3%;B zvT~0F@#P+rh+`hatb3EwEk!) zARtB>ViH*mnHZT7bU%++_)2<$6Rsg*Et1 z%fP$rpf*c-lNNpAQ4t*U0`c*(32-Pr40I_B+Z0%Vs^y&e%skEFstm{jQ$XPrIp8C1 zKdgsjp6m(_(bX*0lN?u;%z&`PLamEJ?l|Us##`oqx&fh8siF#J!#6*MeuTx{A~rpD zNGTDylT)Mv!=sJN9o>mvQIJ%T+UQX~oQ>oM$@YpuzD8E3R(RdmOo#MIKg^1Mb)rU2 z>@+J*NE6w4_@6>m)XtutSVO*;LZ#09AC3iIN+?!g4ZQ1N;6B6`evbYrqlO zkPkz1j-n_bG(-xQY6M{|Qev5Hr^E(>3gdJpk@%(EnG$%vrR^qImLyjx3I%I*EIXg; zuleREWs?fLCZWj{7C%hwBZ=usjlq#T9kduel%=A*)-Ur=1Y%y-9Gw85SZW?lY4BBY~_dFtw8n+(1y*79B(B&~wi zd7N~`gpbm6GqK~}cyJIRi|um^)5>CmhxOx|;y)kfXY4L2UNHT9n7kw*692HUhK$B+D9@OQ%|q_&}cM@U%>uo<{Fqe93x4WYKgK8IsAIJ zda#^1qQia`eH>iP*vN0z<`B8W-Ne7@X_L@5b65B*vfncFI#CExT%R&L(?0aLyW^7G z;rJZJRV<#v;BUsY1UCTe-W7W$?DZ6ng6ur-LedClPDaJ6gmAse$W<435L;RQ`lwBo z>o%gASFP2?_jn9m&FQKGY|fUs?cTcgm>l8TgRyO5ERmkHVAB%z+hSl7P%fXs1p<2W zJIL)~IHPOT2j0cY2r=%>fF|#Gjc97GVD|;=M{?^-bfhW1Fln!Q!xvItj@+Q3Tu=ko zxF*<)^SIPb2#bs4-BV6$3(-}jTjmL6aC*I2wo)fQ6B!8d1np*cm&cjm%Re`W2zd9q zCn9TiBX`(Kx{@-eH?K@4C|JzyNG9t*eaVruV4ix>{JwN;xb*JT8N-rLlkw#~PMlt<(aej1wuEd3)MKhtwjEt@_$?E_bH|EP!u(ZTjNxLNs2GKIi=qQ?W1)}U zFD$i$6;@~7W>`_Vv}la*CYr}aVR-i}STUirG%9km4*KjEo=T)IXarUQt1=3uExCuH zNANr!KX>A=UqLszO7*ufu8b9jC_p#3H*?hKsDy#Hm@CbEL!6in{VeSV_wX03L8YRGfmm^awiwC^?!5v|IFWfWyo*uFX&jt zUn##G5n89T^-Q>uQba|BLTxS_ST0am>vz;u7+8M(fYuJN2)`C*CZyMrGY#jK#f%uf ztc7V4y%=OKZ%9ycVFayt2JnbV?Cu<<{@wBd^t2OLdx6oh4xEH=-5j!A)T42!X6sww zHJm7fLz!XqHQ|G8raO*ugCRTNmyndWNS3E33NqW)*6HWT_R8hUw3++_AWGW`(IVUm z)-v>#?xVBcWm_S-3F|{7-#5(v@bmUWyl2=?DOTnB-dqQvWE`PM5Mk23+0OqRt|HMq6%4@;k9Za!Bw4)VZ6)&wf9rTJ6iBZqr*;dyPqIJ>?-}q+pcrUs|QlQ!D9Il!|54 zq50fa~)edERYjUVtv4 zZ2LTjY*jIOy1>J`MqI$}oJ-S_acXB`Y(>>RzVugFnCZxBKluiByTjicZpCPMyTaZi zc`y(9jv&3wq3m&*y*Rum|XgY*ejvFMj z6_c_Q`9F{39m<$XgIQ4bu~Z$x&QbHT!M#QUAx%WSzP@7nT@03fse7*A@kuj$Q)K3S z3|k*{7c%5Cc;9&c2qV~jm4Ntp#fMLSvQpe0zDFV+uthVPImRZVGOhO0-6xpP3QQt_ z;oW;R-uv3qDWLFB2Nm2PgNuNX{wL>%ga+JijKQmR7k#l}lH>hFj+ZA}8>(Dg-~&?4Z3nXybdB3oOD{F|e>Ik*R0x z&DVlJtG^%MdFC*4IbXfOgPmoJ)4>n)gJo(EV3?iuEd^dGNLY!;#D3Dxo#IHpG|>~A zZ?N?!6^8MEw$NBFjOQ5{{=`cMD8V1KHuw&6yzB%sGFoH^)#lk*i>@QJ&Ev-yfPV_y z{nPtW$#v88r>X5T+8Z77FoeH-pd0d!anSyv?U(GNkkshldLY<^lj!&Q)CNMwnY>gR z{yI>(Mk%l4q^0~k3>q{Zp%=uN6wPyM7qV0;n&in%({m}g+0ApSs;N{nE$39tfO4W= zym!(s2sex3NK|0R^G7iAGet`e%5=&HjcJO+I?*K3&s4UjRb?$^Vu%3;+s8fCHa-02$bseMT(j7Wi;0VR&4 zyyjt)>1?l(XV3K(7C{z~;s{plhrZTro}}UY+79V30oxTDBo0`o?qco`T(XF1ReK1v z)>pfrHl;M0$Cf~ppN3w%^W6ocFcTCrnn>WIT+%F~UJz0=S>%;vTv~hntx}!8_`Tj) z`}ATq+L^`CTerEkHmt3uT8=m~!32xWRe`OMyK(bJ5VgU;;w_}{g=iygSVvjfvuK9R z8MlW7+feP9A4pBv(#?FsUx_4G!ZBkgX|HSgPsL5nCz4IHa&4+tG2_ney0@S!s2GSU-k~N*uR>)S0`3}yS@|z$~-r`X2j2+)jCW)s}K*~z2f>d+9+#X~+HtW>_ zza5u&u_4fQ^0DJ~4ZcE4#^%;k#UAtWr_JhOuog`N@$<2{l#0vnIoTJ}A@K;G+kdBABDAcN{(Hl0-nXXy5b7Ou~k2Y>0Qy_t;Z(rumXP0r7W8|KWIsM~(cfev0D99?LR*MU5K zoy=K9DWRR*f({tGJ4)?+6u(s2|EKgeLIM39i#AO;PYiWBgFN5C&Gb&?#$at_}pnF4Ae=F)(&qDvg z*^cbQH1EM#IV+zYJ#xy)0M$93Of*7-K{BnP)(U}FPvz{5vKpZ$74}un*4h@o%)$jFRo4yaV2ROaC)^$=4ZaHTxSJ0 z0npA%QS+E>eXBRQO0G#KghuU0MaZ+~K3dkI87?g?bm{O~-XMw|u2tZ~%26YpeKxrR z_NYuHe5BYgBX<)|vafLdB4yctNmnTCY-hPJeFTr4%4pPO!X15b_d{pHwl1R415f+J zvv>z7D>22pFezc0Ot^IKV_bbJAdnO#wK@WoKCf%JH%qPOFZxfgH_3ENPjKz(PheUI zJ^lj>8NrAybGJnHRv7YGJ(^q0o$j#~81h=YrSMeXG`Fb-4A=Pq+US;a+qz?8Rglr! zbGfB5DLIU`5=>2R`GrZc1E!7Jrz)!~EzPxDYRHJg&LglU4sn*fGen!PT;S5N+q-3> zf#AMC!?+^}Y==C(8F>$)4cXtq6P|RdwmPRRGprkC*%11;x5Gc3mQX$f~PGolZqm&>N~8}zm0lgfV>0)q#Pf=S-PB7v>waT#3u zI&wuH7MXrE=W)iNGCjx>%HD@U5pY4Ex1qC~Fo8MV&Ubk4_Tk1>zb6pu38pTgg^KM@ zPSZ)HU?e>76rqt9Vf(+^*P8rCs34l)q3<)j2GjSF zLhqVXK7Kzcz4;%Y&tLv16vxc|)QYwjo-mhkbv;T;G@*u5n#q>yC)}bfw7Y zp-EM#Ch<#CjmV<%N}MV^Oe%L~VGiZRX4Ys&qAmd}Xeg--W%$*e%Z$K1pvPQ0FpH-) z?#q!{I+id)_xkO}3k3@3T3i_1`XxmHLq9xnOUO1tfe7b_UoG`b) zlzn0pHq7sWj1N>$w?>_7>7_p14+wr5Fj_3XW(f6E%{Ka*%j#c(bk4*5p3orQ)Ja(T zxuq90wXynn4b3ywk&R;^*xOFJQxgHg=H>}y>^Roc{z;4%+A1_Ob+tT1_qO`EQ>2lP z@&&m8yOiliufkD@0MoL9*LH$qv0%{Og1>j-E4y`hOS_}?=GWzX3VVrjX^@7Rux!(0 z5*~v}HPTGFGBEJ6gPX-019T?OHdw0?*LC!{7V621E|0vsib2mGjAi5Ha)~B*#T}2v zel*Glp`Gw`r|TDBViIZtsIr@;MIFZz#ImTTl0@`q5DL35dSy#Tpr=@8of;szvz)7~2!=Ddp{6pygY46e;-iOdWO4Z5a9fj#<4E)wM)MA7 z70BCh$1GXgNW`r1bG4{SZgU9c+H!w7Q5QL3(Hv$4AC~5lP}Yz3p=IMHy*@+~1*!X4 z9n?DPJM8eH>5+mbTc}+}%Z5PpWopYioV)*Mil6jh2^>JZIxv&V8sWie>rtUyB}r5M zR*v`O!+$`Jf_hw$OT1USdd0}3x5!P7K+2mpFg{p3#gyQ)M83-t2B(AtnwCPdyshxF zd9%&$OWRT?iw=ElHv|G0b z(670i1fGP70JF2uR9?MTQD>ywl)ZoqM4=V!3N4kImClG5DDnAVv^JhTUVy7T!VoTO zA#0y6dN}0OueY)GIf_QHfH;!HPOjwas_F{@)2X62bkNe)tZgR-*YE~)@yYbX(0p>} zA4}`Fuw>Vp*rE$Q#lC|+upNY~B9AO3-Mn8tlI~#5UuDLq!TBdQGGU6>#Hn1V56eXd zfGdJF>lPHppK|R5=R)a#^WnVX(~aOP+4dFb059bPoH+DZjxjZuKh3ehY@2mBNpke8 zTZxJlZe6o&PP*!<@zTa&m6pLow1i-*(t*rkW4vgLl;IHR#}~;)JITV+>_~rI__`5% zqgTP7J&$tkIpE#dYGY@E$)2R0&7HP*5?TW-So++1>A#zLRzd{Cs72$vMa`zxH-~NP zv>yL`h(#46jhsMY)WiZXL}WXqx^Sd|R@ES+r}eJD!?I-Q0997<76pD@!foy%omi@#6GXG=?@ z$s)aXQ(5WS1Lb0oczk2o;)G2dn2w$pJ$_eo#lN;l5u+oP0?sL8yj6gU>s5>9ujeah zWowVrK+m{=b`M^z^4$1P{keC>5x8u9J~Y04pJy7Ej|psV{hICYC~0kzs}o|T?V>?n zJ62%1w6Prn%`8ThaHxXQ5TOPPy!qU?Ft!<0yga(V#(Ef*BOxdDsJDVOXvMj$Kfj8W zvK+>;Ni6M@t2DPoVKQdDCCDx-Z1?BO;>inmowI_9R^u}8T(*QnM|7Y3hO0&ACCcCi zfy)=}%@d5~KHt1yF&=(%Mo_kRZ5>H*PS?|7k~a7s5~K7b^|s}H-sKc6Z!91{JrfHa zLwOWUyf~wKo}F~W>8(YA!BjI(F0P>a*=JCnh=#tpsqZz{HQ*asoJXf$k)61rEswZk zRsxrK*lG1Ms*N62*fAh~g+ud1*7ovG_7cy0=s5f3>_oM~9jA3Wi&o9rQD)Z|o-Amm z4g7r~Ffm4q)Z%`9c88fF*D6vMu#rS)l+B5Sm|KO(M6mC0XFQ+65 z?RkJ-7L5CKZJYGn(qoF305!D zm?YBJdVlpjnd{%_pCJ+547s4G%7EDo{pX0WC!zU2#Yj8kX8y>^lsrYb3=;R zNjtLV6&1Q=)9M!e=Jpflf!S@IgmCpx(EE^bgu~9$l1wY1Mh$-1TXfV%GEw0sn+Ybzaj=|2i5JY4*ZKK@LUV|+t zHxj2pz^C?fO!wW1vGw{Bq07<;s3#J__aAup)OX0cbY49C`#=v zi?i@I=%J7kmhAXI=LNoFUolSTDY4!Dpnli_hlUnPI2*~qHoXWpJ`R&M#N4Dvu5mxD z1R@tVT}H)|MpcOKAqokR3U?(vnK>~oo7u#MRuFGCU6{Bo%h@?oXX!yy`Yqd$5)Lu3 zs}@3$9XziWsivBJ;w^lCo#MG<7z1g%&sL2_V?=7_D`%}*iC=h&HOzSBEH}faTyENO zELrVODKxcEVZ1iBfS*&rJGuD4h)3MGSrm^kZE?~LUbrpINbo=56huzF{{i&lhs{6M zx6uC+oMitVssGQx-*vD5yQsh$M;+_CcctF=u;G9!oEe*Rvd%<%%zTbTGSr%S@V4r5 z#bs_u=b*7#r9)Y+GzuQNSU}UHmI=C8fz1M@q0B;A4aVeJ@o9@#z#lmHyECzw2Iu~r zw8QJV=Xvt`x%>KlU!MPk;n$^MEDQ`NHmnm*8QH?0AoQq8a#mjVF%=Z3Nm$p>#kj^3 zrNR!FWZ?0bO7cYmnZ=Pn-jNt9BxwT^?H7R)`{Umd>gEg^ypC=B8|;pCrPMS#mlMj* z+NLT5+vIgELDogBwWaJE>uCtSNIFH;^>VkI+R48CYoyd)T5W zcaUxfWBax=WUsKiNi}^}`SE@B`qJ`#E77D$hSw4aR|*)dDYABtA#d-Yo^NX#H*&e> zFwal8SLe?A!2Y5e@lkKXY25ttWzqEZ%;NWnbjiP@aGH0F9WMl{Xl$ckp zZdvl7FM_a(pcuFEBS)Soo;&(SyoCt*kEt1{IQ5CIOZ%)PL=20u&PPWBFLIK5)In+M ztmvRNd@)N(M^djuc&;(kXm*$MooJbXwk%A;strugB7B%T=GUiHf659n0|VD2GTHMQ zk<#EbC7HG3ucKOz!24HxYF1i}mouLX4>^l6AZ`;PT&meaJ>A3wmGM!{@X+Hld^H?i zsn#L9pW2Pv^Fiw<=!=b5GL%817eu_AMV)E6QTfU+Lo66E%IMh@g%_^|Nv!>0X#GXvx4XbtQLL3swgHYe{T4!8aDP2@SB0yn#3;eT)ORR6{{Y zbTiroa{h@zu1aG%d4)&R4!JPwP}W(=UAkLv^=YOZH#9)sRn9hRX&DikHp7&>re&@! z-Ypa5iEoq$w!_s-%(>Kc%`$xyskU@Hv4_@b7Tp!BNK$0Y9MR1V-@st4<3-xm^LVDR zeCDYK>o-J{oV$I|?&02E<(K`dlYdTo?OY3pPFou2jVS+`Gx#*UsVy$JWLrsA`pg?b zi$p-Ld`H!tHBqAxq#sgzoY2qJ#1SYXup|rIRkl*)(zue6IG(i#(_%v+>6e41qgY23 zMeZBTUTK8CIKw1CQJ2|!;eLl@u}lOnOYB;mA0J0&)`?%GfVmp)3JR#Sv`{5dY~@>7 zSKecbsjdD8lc8=`zw~4*Bktbo6_;DcjOYZ?M2(*GV;7AS%jFQ%I8a`AT>08zjr8eBwLxRc=Vz z&-ZLwu}dL(`a9nFDSlI5P%|DS#ch6h_jg1<#3csPb8eV6MSVfeK>v;6wBLb7u8)xFZ7J3oS0#E zesr+(V<EQu(i;Hg#x1OenqS>SR5&`B%eMLCVbF_uCLxhHlO%y z`Xt4Z>sT3Hv0mqAD(Xle9ij1(%ant6uC{&87TyIkLQuwfCxY>~&;q2!Q`SyZX6d*{ ze;CH$Hi}^|ky?bRoY;efB#v=@(fkKA%LE^GgJsjX^;n}%gLV~}YX@8|?My00e_YYS z?5~SE4{^CLmxwlnDzg)l(3BBHC~o*_!@#VF>{;=gtv&Qib1G3|cApMj*|!8JT4cOP z%fg}y5=KjZofJdd8RJ5v8 zr%PImWqTjNzK)c0G_dnzon^Et^?`xbW{r_-n0BY&YP>pA==0ES9Huskzz|8$ZtnS& z|K=qsD0rDNj3MP<20~WRByTmd7>nKH50p<)>sO7Agx(bFVZNG zB2Vyb>es`($sjHR-jH&ekvlTI{63n8 z4M-G3UG$rEsV_HXbmZxw?n;F8Oc1a4dZctc0c~4UU-Eq2#Zi!pGvJKklv z7-;SBIBDn#&AI=Q|JL@$vfso7yT_` ze4!?4ChP;u;jpTDVt>3r5fTE$V?I{@;FFSLwSm8RLMzV&ZiSLL&;`cMAFj&!^{H*; zN?QwFqWVHUo=^w~23{gTRRZZGqcu^(T&vH&ypiQAAc*%U$x8U(1KRYmu)=+pwqza+__{37=q}({hH4%9%QkYt6Na?3WH)GYb zQ4gtXXP5ED1^DU->+4E8M;`<YYZ=Hfi~E&mZ6UaFHc<&8qUqWNE%9me}$

Zi3r(8!W?E$xt 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 _30lUukoDqU8*aB&EsAje3bAQR3>Us7cUy-r_^A zV1WqiKoU-e+WvUNy`A&KKf(vPYuCbp@srPUSMKh_uEY+35Tnv|1NJR@dJYMwE3ANS)-@t2zF18xEOAj3s6(Krw~wE>Kw(pdkz_ zL9HSbT#>R%-?!p*F2e|!^nQ;@2FyLnFl97Em^mi+v;1Y7F*ix+?VZihj-q*P2qgBo z$Yp&JBs*gC(M4E7w5Li3mp7N+vS$!HHX$gUQU$+?bd_&vWjtc*W)On6jfeaN#;jRT=ln<*-^Rq z-UH{Bm=NEd&LmiDs>#gId$b8|%s{{ts;Li#u+peEpVCx3$Om}#?!p2_z6)3!jN&w% zL(sNl*W#QF@ib+G0yZ<%e-y_0B0DfmAENx>{Z9_NRlz^KPxcq@1B0LfJ(qC*A3b&` zpqGb~umV4=n6wD}OEZbAWyZpvzo>u0qCPX>d}=1eFD)h_EU!Q(CGsm`gl7oEz)ukV z+6jMUjP=Y|?;nj#E$QrZKj_++{t|}#8BEEqVE%GW`@dz1Uw}&1yang_+l63#1_}c5 zZ-ZJ{TF_bj?>PHayTP7OWPtp22>;3g=9$GL$g@HJD?_AbhVY>OWVZPC9VPS6%%5FT z(7(@86LWXH0zX$S9q7N7Q~RHz1~}||t$w;o{uzE5%%8%4 zIR*dx<>bt7Z)ai%urt;F`*z)z4G?7Yi?o6T0y4q`0%Ca90CxC4(|~`D?q_|8T=5fa z?dO;B89F%juh9Pm>_(RQtEHclLl8a?5XCcCSe#$LiUDlxbj{8G&&HBduigC|-xhz! ztvy5Kqxl7@q@}U({{@L;W&2t4rz3}cUS0ZUkl}Q{fRy^<>~Dp@{^+9r9Q;srFq5$;Q4c<+Fv3+t(D034EdGNe_Cty zCCAgUY|p0&d9nYf2IEVDr=?Kno)Jh&{n=V?znUs>fu0_mO8@Gv{6#aLmVS8iteFA- z3hG}MR(VPGR6%lxlJ=?a_w)aVru|>5wZ9~LDq79{jBG~dKUNlhN%B;t zmE{>ppx%F`hW(P^smSDWSKS!@M)B8|v`>}&_@B|HfA|f0mM`g^YJQ17qss*RPVvB( zyifI;6rS;(+x-907kk-)r_vJ=&svaW|65g~UJ^ge@PB^EP27K{&c#dKr)ksA?0sci zm)jC9-J*0i(%mK9-QC^Y-Hp;I-3SQMCEcCUsHC)nG+a_BrQ%yH|hk;{(jR z@2qEH%{*)UZ_2_xSScVli(KAv8&A<}lJ~6oMz4d+E(xn-R?t>$TlPfFJbKR<#<$OU z79h@_kjCCBBs%4ATG!sNk}$jo>Rb`I?w&L1NQJxcU>X&x&UahQO)LMzf3pS?>Tw zYVq^vW0Nw$BeX4zRV(P>rUZbXQ{dR^b#Ndwh>g7SR~0wl(qiBc!QY;z5x)TdK<)wn zkQM_5fdaVu$DiIN|NV!b-;e>G0oWPn*y~W*>*-P3*<0D_7#UF8+3Ha%D8m5oOQ-0L z*dWYuw38J=!*2rWqmkX^sx_ z8uHY~*75jT3vI5?3p6qHw(UiL(g_`f1QU46g_Bd2g24ulsCa#_#81F?uF$nD4jOw4 z_=VfAzjlSchOvc?iRIrcCWB4K1D|^Sm!|$M$kxEl%E4C8!0uln2~U#$gNuY)4I~LA)SP3V^MqLEOG2WO@eCHW<-OfPoSrPMI(*CS{>?AEIr(R}-{4m& zQa_D*6Hp!0+6x}O^70MXC&bV%8+qDClbwv}9;ur1Y2#|#H^FHO`jVEFx`xll5IKjW zY1-G4tVe4S?Gz!#j4R;`@%usxih*8vslvd~K?5GPlK=*Vr#v&C&%7S*?8}yxhC)l# z;`zd%9B$KjO#Go{sNEOPkjmfW-I6oKF&(7#WhAD6FU4yw?i(`WX#SXw4gS5S^C5@N z`{LnOYuneVS~5M)@rvnEdPJR9I+9+Ff~^J~3ovG534b-5=I8o~39jbd zP{a808$eQB`b9F^bQLlXEe=H`tu~efLgtf#F&NKO39Tcy{LuFqnm%o^l|;PRl+pve znima;S-`e=NqbhR2g!NBs048YX|m( zjyE}F15RvQ(tR50&xg>9nk>c~h+o<5Tjv)Bhf_ru2}F@1 zY9=@}`xQHvUohW~6l{+R3v1kKe|6>b5O-Cc<%Acm#Jp+UZ-v&8(Ohz$!mqlz;;p@K zO&VL**};X=vSFKejcUb9m)+y~nDyPW`jpoYUu4N%H5C@z~ydy-8A7gj+^hkjvC;j zwE_eHzz6oj*MIoatGKEME=u=L{mItA$i&Xx*5!duMYIKf_t!!BQPVjZM2}&m;BA+e zE9Nitrul^5(N0g5KSw;5Wl*uuwntmt!^w08I;|M(Pba8hr~{5q=KOB-imD?(rps+N_Y`*uq&`|Q z2w9D=?4rMNCo%NhhL9=A)t-P<0PeTl+z{&@bh@4QJo^y#j=@{3vtXWl3txGh+>+5C zlNW~36WCu0PNJkqG0&XfxnR!#V0&xZyOI26rG2{ zufXnd2cPGn`$s?kfO62k%N>7R89WO4cJ{Y9^gk)CsQ)Qa?F}rf&2?@ou79PKUn{pC zZtyr$vHw%yI)9{pDr;LSYXe(*69c>Z9CM$)ETW~X#%WNy_RbLF$ZWVn`AE?VWc?Ys z%83IbYvoIqtG>Kun;tS|@nK+NAW5lwB6uPM>_6=v8xI}cGC_?%yc6=)JEmHW*ww?F zYj4j*bKQ<^Ucymo)sgsY_Csy|w&4@*56_u=+wvqv{9&2uGGM04;?vb%J!Q8&)Y~1s z>YS%R4PONBtx20dFSZ$&q5-BdXrn-cs;P9hzjn1hGGRG=76AV4N*1j7^OdGOwxEt1 z>g%{G0mgvt3*vXprK`)#7<3!)SEgh{3&-z(S}8nh;I6JSS@qCZk_r&mz*dOxBkfQ^ zT}|9OBDN@lF87H1mN#^XSs_+B7jskgHH!Ik`CiuT@>Uk41DCdv9k&v)C33b% z=s;^R!tEU|OX9Ytj?OsMxtyO!IjN?Dg04*HK>&x%6g_*vH&H(T$oIKRFjAt z$vP6GFlJ;JA8CW=(_QDJ{%XJUQ6eTBs-+aH*lS-UE~GDvGiJoZ)NAV}u_9oDBuI8c z8k7BUeH0be6$K{f-%vFJ0N~UnVPpX?bToMUL^irfMKmBzpw3h0ph5L69oc~4HdVMO ztD)XVvld2iR~{7_M92&?Vm0H_pdgJF>9=v+`3$iP#50iF7z_*icRusi)&6&%`M*}} z{~_)FR<-|7;=ix<{Y)Pgh<{z}|6cOrYCmA>alQDs+86tK$Np~HJ8RrO`@M!gSNs1e z^i_W;^aG^W?+X0|52#nTnd%wP)&VbrTc21Up4+St3P2q1=9qwc!lxCVRAGII7muJ2 z)G)~j-RlF7_eTP#cA~(GSq#AvCz$xa9IvP_z!QhY!SX>xqV+)fvPv4J*u}UwMD{IU zH-F=8FM=45O3_4UA?ie#%IN+6DL@Oun}HyIQ_LC7GGcb~KANDkAz|H1rb3(4w_LFu zD%UC*wuhEqQD!&+#rHw(pja#sD3^CzNekYF@IOj_HtUBA@^9kcUz*F}HZB_2{wv^0 zA3t7~$BHEW%XRsw=;!iCd{_HmW$sl+M7N5zb3Y5*a|zAWoW)OR5Fl}te#)EaOqF7v zTud}$KyOl*i_7~8KTY%tPa|aLM-k9B)Z?n>$fdo4YR4n$hK_4Soqw~=ZQTKJaBY85KDkY6n|~gs2bZbvj&2=MY_GaGp{K%}w7Q!9w zoDh1F{ckZx{vZTmL_WkF*MA9z+YO$*t(Cd?FW6JOb1WP(Lb1lsh z7IB3j+69c6qv3nzljEnp2XLfpz0svhY4E9Ur3^_iKv$PipJsx>H)O1PqJjxh^u+Kj}Z&EJ^Ov|XUyo=jDdfCztlJGVBIT%n_mnDQP z3^WWk8jv(ktz^FGVh92?;_LlLG`>)l`Ph)FcX<4`HY$xGs4iBbfHT#h1cuLb zUv3%ZjO}B%S^C&|>?6FiEXFfL|CS7T`zddvNVBNXS?=t>%wUNx=dp|I-9GNc0AHMd zD!xz(>ByT*auP`Z6R%X45qR@NEcF0(C#%(j^6M8bQtOy+jjHn#q@9Vy9=s6bd&vzY z^5;su1{hVZbMW@Jmuq|bv#xLEi|5OFrPA8L^+r@rKNd$NvztyxS4o+IY*H`FD>-lu zuoXFl&7z0b`ywBnGDka#Gov_cUIN`Y($1kSuE=dIkpcc|0Pla4QQ7`WY+G3A8<_tq ze#34*j^B^<2>wrce!9;Cr@7bZ@kii(VfwUp0UyG5Hf02yBt>6baol`bTvi?m|A^#s zA>z}|64D@2WXc{%U1K%YDGWPA3-vVvH^W>@Lqu6aXvf~xpOW$!a+$c8^;USN2B@6y zjL`!pjZt%Wz8U*+qO6?k;5DF0a+c@!S)BkvunfJ0HJs1Xl(naqw}W;m&M{oDh7Y_!5y$r+_XTXI9efgLI77| ztlGA9hR@Pug9AV*(?W$3;*mq=h%8r|gHAhx^A3SXAh{A%>q`>*+-THU?3g{QE9dIS z3_@W^*o~c#FedSKLHTL9Xu+OIgmIy8nO8+z(~8=7E9u3QA5v=Ex(Y$xn`lG5L|)r6 zR{<=k)hK4ULek_Ly$I=1!hA#FrPJ^If(ywxH2d2?z4;(e*M>g~)Exiiy4xApI-2Mi z{0m`Q#E+x&V@*>3qo$u2ll!6g0o3l5?h;Hq*Z#pRZ``Zx30{SU{sfa@IYKd|_9* zboPFRZGfYljN89>WZXOysT0N_F48!gs)y9F&0A+bnIH#WJtKlt&>(_rJZIq3QQ5jJ zhPqRay!v!|n<7mKSam21mAGLlI`*!kEmrRiltDEmBJ|j(j2Pmm3f-K64xnLGyK9xY z-b>(U$&C+R_bs*nWPr%ONx9T3*4;2LsTJDi2xEt9EAbBH47Zc^MNei>t)QubY^TLn z8QIq2NrkW_NYB#EE8y}Jpn-4jH%3yzrM(>Ik|z^UXU1N?IENV%f*O!hz!S0ilIgXqskb^m8$exhG2BjY)1A^aEOec# z6fx;`T{8T_W9t2qrdyqGkti$p!I^85WL?`6g(m!Jg>jQzFDpvT&HYg35L`l2I3_eq z@y{a0SgV_fN-)dnFvZqL&xh2srFgc1Bkci&T~;D^{TpS1d(HfflR7FBx1xi&qEM0; zVSJxj8itbMT9yIF#Io{AF<1rX-aLs$d}Rz8%cMU}YNAZcoPmHcI{>LAXHIOHe32wZcJc5&!{KFwf42b?w_iN<*{v;tdeG z;)8siDOZOI0GR4o-5&^H(W*{Gvx%VpO4nOm0Rul*QLLZ&QAUAuvm=m=HN;{cy;7*( z@UkJ{>g+Hg4kNhq=A#QyluM~nL`KCY?PT+pnA>S)bGDz*%jeGzg0$Xzh-o-Zrz-Js zpK9=lfYyu<_O8fK6F!P%Sno+IsPNH5tJhsF@X(N%@9KYV#+oL_8^?bUg77@6Ql6xy zA3r52l>mL&xUYX{>ir->C6l72{x_oDF%@+LrUEYEZ)S(;32fC-U}BytjtWrDHxsp? zu_K2VDV9VfftA)}`hldz{F)4Kbn-JetO%W2((7K6K< zPZ4Q~ZaVyrT)C5Yw-tQGZxjJ7#y~~7U=3iYEzk>D3jnH=aWaZG3-=CDR{FWGOZ2f~ zsFw+*6u|U;t(G?oZfgWRXY@3(e<{-tp8qr6U=O`g`*}wU-e4@c^rr!(_I4QQ;B1b1 zbQ&9?%r)g&83d^t;wbfFgM)nisGQ;C7zm-X0m_+MN^dDTmaMH;&n~!h7;m8QJW<1z z9WeJ{LHc3eI&N(S9*c4Brw8O)nrD(P%-2Ielp{&q8PXIW*y7#owh#pMS3@>sKQ!c> zCA738c=)8`l&SxilKx^*fm@5-eLbwaA6xWpAoSOAsI>mlxO&=1dPds1+WQjXiu+F$ zgQdNJB2j^fpJ4!&V?6UaMdBU+ko$z&;tk9a=nuk^ghZpUarZvp5YWLbER47B=Y0G1 z$F>)#?%_(K{%)o1b!?3ceoSre@N!P@M@{r&g#1_v+22SpGO#qTy=_YBQ~o;h`e$;P z{v)|MmX=m`y;UpA9}Upo>%e-n0ejek`nj+_Eud$vV`ulXoq8wjt^snt&Oa>iSlYvh z^Y5kI_n`in#D{(5zm|C4$GP*)e)R&=D&7`egXaO70^aKbRO3KPJy9;iP0a? zN`v|joB!C=KDPP8x%R)e(9hraq2^(+#A9tj_5IZ!TQOB`P7;Im8CDF2G{lIQx8}ww zWD!*JND;ggp6v6S5kZjSOpgQCpw6=Lnrdd!=BXf0ZmyzDXTE5nT-kAt>Ei*+bo%b) ztFMQ1P5><4MvT*it#V+KsLSfEU<(V?bn}_}zH`_ovbIsAp0Vt?qjh;leH-zk*v;qd z-*Pvg)1XrKOK(48zS-y{WK713`HK$i3x*Gx$NSl~WTNGTRbTOGSi#=TbrH=Q=-kvH zy}(3u>jX#rD*Poej5gjW{E!&G-}jlHs8$Xu-So;3208o+-&2l?L`bnXr5aUMjKrY; zYZi+Ti2mdbH1qiphtY3w9fo$M~n(!90@(MY8tdI+Yc*>pV{MN$0K&P{ZHDf49e`@gj7f2zc8y3J~uFC z(}|;kHl4lmiAaBG{hSbfM3I>O?$& zgslCB^0A#1mj@eZuN#!%=n~{3%3T~SIPj+YcDp-}0{Ia~e_-%2)c+?8^62SVIau2N zEZF~q!Fvz5#h@j^Ee4qrEW}c()yLw+>No&-kHvU|Jw*K?BV~i5L&2R7*v2PzN}Hw^ z{V&md9hxByi=LoSiyDlG4kvbLAT4zr)ulExX$?Y=}t`w^*3&75xvVGPt!eg%jSBk zlt?}0C1px8Z!!3c6^vS~>swtv??oXJDQra3N4{{EV*6KNknuGUhuyarg!Sv=CS*lh zT;mnxyKD?(r(b{pOXO!@>dYS3drx3*zUen@mPl#z1$oGFI#GbTPI2D>__8)3 zI!ylS@&IYXP*tvypi}s_(@q?Rw;js+{2O>U&To$P_j(`=o{VBQUG`{SP>gFv?EBqD z!LpKD1Wq`@XgWn;*(L;DLX!)!(0)snqWK&(MvFpEwTH1TC6Ek;2ew)+Om|S$8xb*T zYtjpLkW{1Oq{^P2c%5slTq(RNnw*2iaG(oZsrS4*l?=>mEL^ZJJ*%04*00Z^C&N-A znx9uw%1SX0zz;>B*#pkqrSit)5{AoYte;L{7V|Ce05b(ok;1KWV#R;t(PnpskYFte+NZb13PP810BoXr{IX#+n$BYv+kSx1PxVW(ga0Ns{&){7GG@!?GXrC zJRXr^ystKDFCEGk7#q~!o8yS!!-+UCxLyr+CGE)0?iB9Z4s8z&SY6Xs?Cdo!c>yW6 z^I_#u^cCpil|^|*=6xD7q;TVojJe& zih1$g^y7@ApL!uMdD*##TNR(m)1CxtE(miZ@NqCdv4+wQG-nQjSNc;6iv11)AI5G@ z)m32=W^AA4w49di^eF8pO1N4TtIFBx)L1f}P~J{KHdaHk)?ARr#tzkA34ZNx+}4gs zri%YoXuZFfSEtTJ?ABC(Iv;?ZkDe3=Q#1;6&>3wDigrVhmvMX1Lj*Uqi^8}^?Cv`T zu7h<2V0>>$?;Y#REB{?lhZ}~Br=#QI)tl8#_3k={_+64hl^x|k6*oy)FTueS%MCNU z(Kx9vdT`CO5d(c_)!}lUblzJ z>41PqtJBg`2^bisL*zZG zjm(cdG!Kp(`ao)&`&#buJJ&X0-dQyHwn_crC+X<-+k+SXonsg{>ls+zZEU`G5g!-d zzpsjA|5sH)=2p5o<^uPs|8UB?ba0;%;^e+J60h@)e5;^rWuTmSxYZcV#ocM*Bjsf~ zb7J+y&OZYuExa_aW*;Ar47(=xkXiQQYQZt!sF*M%V|w@0XlUnRh}F)p`R4TeNejaK zFoEAHhhkZBx5RwkCr4N()OT~TA`R^{3S>2?V-59`sD_)eA%e{q5OzI&!5nrDSO*22 z5%%9klB&Du45y3C#=lCQdV`-gp=??zkxMl~3k-{nX$rD^l-Wtp&`D(UFfdRGcZZ3S zU4V0jQ^Fd?fmZ5USJ)SrccZE$(4QFCBm@flJn|vBJZJ5Vs7b#@IGA(%NcRf@h4qL} z8a73PYJ2h^nz#yc%h~Ey9ktyG?C^oX^uXB1h1cUZL^cs}8l!{_I0&6t{Z_Lp7mm5gd*>6{2)9=^mVmcQ2P zl-MH56jMpsXE0`OL$yG~PPp!p^i)vhOTI=s$!(cGCCu+V*wD8(#C8X}Nc5+U8Xy{S zSrI`Vg1@EQMS6lNk@ox4^oowMUhN~uYSA3)z%<8xe4D-s^HnmXm7?=)lxEH}=9j~_ zt-J?REE?LhfD6JK@zMN3${?QKM>Ld@K!U)x=m&m~79Mw{e%oxYwz8mdwlKfnaNRej zO62=3Z<|Vu>*QJU7Ka71P)WG3@+BakNUF#6HZY0s?C+lVG{4>24}{8LVm07sV5ip% zs8*ceP`9=4j~*-tC70=WE>{>CV|c{r%KJ)&9M-sWGMpZRt(sxb*wkVXm(cHd0;;XH z+{?JMNS0Fv9 z(UxhhO@94k6&@!d_RIy_aY<%7XcUtnfoV}9FQWt%xPscmoJE;Co>mlg%;X3h!V<<~l`JIo)*c^5SwmXWt#dymBV_GaSeVS#?$gipSxXf2d71c^*T4VZY zu?^(g9WK3>*cK$+rdc5iVK$?8w+z)eP}lH%Kxk6l2)H&tOD)YzGw^saThbjJUN>io z)f^J*^*zC~qm5!tu5X@^w+1?UVUMA8t^V2SF5@GI*T@CjX8eesOZy|Rk!L+TM1b_W zXmfvt;4Wav7Ck;g@L0ren~rxP{&j@lpUJ`bt4H}R=R1+(9&G=^Lw%>|{Bt?K?F-$# z+;=$-`QX2QP5MU`|I63>gFtlucshTw{bOMSe`T{jg#FsJ`u76K|CzwYO{+f()_By} zen{K>*~~X;5oUl!e?LtY911NcUQR$G%4|&6uD2{~Ev*wudakj#P*=>H?M;P!W}KbCh^b4C z0I%?lwCTat;l)hK@|O=vhaZ-xq_~g^XI>qC8Gc%kUGe2)d1j89oc1ux=}?MT-?*e6 z0YoKU#xj+qouTiT^et;sEeC6TU=hFl!Ut10mL3FfDmi`}>kFC)s5F}nz?!fyKafsT zau{7K-&%i&#xmQq{4tVG;nwS_3*dn{gNfn+3w$ruVCF(&P_S*Jlo9GaflIgfqAthI zaGS_yj9SG{Po`NwX zVWaB|%IdE=!WX1h3oASEwo5(P6e?dL{B*uxS#Y`4`#HZ<*^Q|Nn{=3&$_Y9&Mq;m2 z_#`I=TExbjtsl8vbI~_tmV&5`qnNJtYw>m6h89CnTMg;u*v0obQUQ(Y4CZadp8H8^ z{ykwx{D1I<$1R0>l-`w&_dKCoxmL^ZTa;dqD{?-Usd_JmR~G^zpY^P&Noni2LuGTD zV#`51Ao7{)D+rsSB5X2C;gU!eK=^=kk>GQbVl4J)i(uj2*1n-eW~-eOL0ZoqeB1(p z^Y922Z=u*_WB+JaZhqTwn-1YjCVpHAZ#2QSmpoKLlQf#rHC{(& z(r%`$8>k2dl&`^zq@~G=hZns^=vLE1WjvtV;{HE~Wu9fESbPn6zATfn6-H+e|km3URXJ+~F2O zA})UMTF?k8^$GryQWza?jWSmAAUAeKED*eo6>H?L_e9P_p{LS%`GnTi)!O5_XjToc z&Kz_}%SjewKP8G*l=2G9R%bvkkPcZiAOvI&GB%ianJA4%x!73nUCSI$(-!nOMR}}V zey8DQ)Obgb+#;6c!Lg3V6u18+vi^A%@b56oDpPrf*+D=u8N|`WH^;7@DI6T*7klQm;`rYos;5m94-@&*NGel;o6bP9M_r zQVB`YYE1HCAs{fDOr@a+^@ZAUr|VlDBXdYP4C}9mF)Qej+WkgJ*#_I+k=ZXl>ejY6 zyc}wTNsHtt!!p1vnb8VRi3cDSJQ9ZPkVOFlNnY#T#PsBQsGO9$_-Uunz89xPxQ$&qMf^O6^WsH>3UWiq zMT`kPbO|agFp-Ey6t3x6NU=Ij+iX5|$Sf0tdu};JWy)!)@zptK(WP6hvs~D^t8(%y z^#IFY>w#Q{mIy@ju~OjN3=xN2mSsgst;K*81XTw6Iui%$<-Dtk4K2e-e=CB^`5*DK zF^%;E=oXCu58|iOqay7gyYrt`EC1?){R+R&Ka03jSqU*99@O`HZ=GKeeHI;g4vFu( z`HbfZAW1`OYSO_eDMB9{%gI1z-FPd7i2C(GIWCZKIbFq67foi4W-W$GOp`S!Or`xT;P(TCJ{^8BbY)F!d_7F1xt`qsk^G)ZlG8H( zDyVl(+x573WuWUr#RVP%%L%hX)7(zH1(hwj51e2pQ}$Q)X)WE{5RId}@ zp}9t#3fqAo$}eej@;#uj3v%DERUvV2KSw-9B&<9#oxd8ilL8soz@@ultA(y)UiCe! ze!D(u)@we)LepM0c@+4f2{#1^k#E9*)bE@+E9F1E$xF-=s$X&}m==_}_`WgjO+OPV zy4^j=KR7!CpZ9S0^pIQjPhs-su26RQADgTn3H`CA-_EK2ZQ=QcrpHa8UlDq*JvC-n z6qxo|*DV1Za}N8RlbcCgCzPrVxu%#SyQQ8}%=2DHB+}rIG959o*c~Yu5NYyd=X52x zRyy@pdTL=AtSgac9)}W!(ZQ}yHi41Hh=VFcG;G8<-~xRSSPpQ<#P>OPDZ>3H-jIOH zSHezk+l7Y`E?@iP;1TjN32STx#||it%6D%nF##sjhJS!qRY#pivfJ%xA;t53=Z`~x1^VYMx)%8)!(j`TTcT8-iveLh`Q8`I^VD2gU&kDlj9{E zH=LTQ!=S}EhnoYJ=kyzzPj=^=Cvq73MWg*`EZEdvEy%=lo3JhDT)2lMOSaAH4ndD^ zl1MW~9offxk=@Q?Gw|mekLgeZXoQpl)5Zo=#-)%~o&-Ydv~1zn29+mmM1x2GtC0DG z;9sT^u=>g1b)p$^+xF|6^X){<*Yax@qmd;CX*;oDbCaPv+jEkWj;}S0ijya3J;Ic! zSTD;uA{mcA^+spt^%~g%$wDOoe)d}g%pJJt(XTi|w8}(2|Bl2bWl!UxZ;{CGfaUm@ z$pQbM;M4grnEc*#eei$Af4Xdf|f?%wYYYSq1ceu}wk z+ECuJQSNMZC)49kJetcVdEykr>gP8- zjg}q;9+hZBmBSF=$f3GM(k~m^mN}{y*Kq02LlWV*+1n{7F7n=kk3qcva!t58YO2eH z^B7EQ%hxa`F;gx+493MoKyoLFv{*htS(5&AxvSll4y=2TY?xwmrUVK4*m(PeRJhGN zT!a$e*C?ac2)opfnSc^t?Oq&FJa6?6g#*05Q}Syh zxa*U;{}Ks)ApNnpzl{X<;vU?Y0VtKC>-JOb|GzWi|KFMM|Kgn)Kbzx^T=U_zHje_! zy)WG-)W`1mdy$m?#M^((b@w^$SI_?;`spL?HsgOP`u>IPRa{H{F)jFgaCvx`_x|r6 zv4?+s`uktu`BMh{W4;b>8-MQKE<(2dmUoKy0u~P;5YgBbJwBQ zomY=E3&Z z_GQ>u(!>TvT%6(o4+(2-N251byo?@;d&(k&+Y|Q=&h{?xK>=H0x$Y59hp65SR%};H zHF%r8b%TvTG}T%T0y6H{Nyxt}*uD-~}T%U-N<1CgBBFY~F=$+g_kd z%L#vgG{ZyH2`Hl_81C@bP6Zt7*%FCJo_bMaZqxE_ulC1 zp;?gY?}x=G31L|xZZq)EgADvQ={(%f-!J+o+tlT z0r#u&fJh0ky94D$W?Yr3B~32S5M!aWWQ(CeuFs$-eREy+aZ~KY<)RnLX5@>GUb%cP z;d;TVL92Xd*bj#q4!7Mso4f#8o->e1zir|43k=I!W+97Tb7cybb`pXaN@)s7gxZDv za^N$XWG* zrrh`=@X@FU6{$o34uM|8lnRx0QO55Zi^uB6+Ys5U7;>(xAPV(SnQ?QH9 zoI9CO%ijc0Z$A|^@&ljYAjr(61t3q+L0lNx1j<}(6>;S`9WWTE@O$2SMY0mzu(y0es*)C#P|D0`UbOwAt1H9$Ba=QZq>| zjd3_Fj|5pqN6u&tBgZLI1J)+DQ(n>n=$X{}L{xG2J7|SF&F04A^J6>irY5-!*PYDI zXf=CXg6t!j2{_j(wSerRdue zg1NsP-+g7K$&TDKM6;Ap61ox}sxT78SR#QBZ(u*L-w2N6R5G?>L5^Q%wN3RjXM}bM zSx1)w4hG(tQexo!yLSR*2-LBPz2t%FE+%1k%{r>`bM_i0XH*eDCR`A@dWj_|()QK< z3YO_uYcW!x8|jx7F(Vrt$&x~|*@jGD#QfV1CEHM9BoVe6Xr}6fzH`CEIz0kPUq6_L z3v}2}+6y$OpRuaEWk+9xs~=1W*>XD7AJ38ha6Tp!C_?+XtIQo1R`z)=YokS7wbVXs zxR7AK-*N&PV{RZ(C?aiXT0W)H0cgGiZktA+?syJUtW~U>%dWrso0lh*<$L|!;G#8w z#EX$%%g#B8Xjiknvw{q86pBxk1$x1SLUeW-$MqA>$U82yg#sr$4NyBxcn!?OCZ`Cb z8m1HoT8(a?7-qLu&HEHL6OsFGE=Vq~&0oUjzXaLC(e}C4e#!uG{&51&Evgan9p?;( z3jE6{lUbX0RF;hgSli^RdWpThK4!K2ZQ`7besTJN1_ST-J{QYusP}g*Wb@U9f7kV8{GOB`-4XP24xc`y8fAutv z7>iqw-%?i9MBONjNLOV5DM`k7KY{Rof~?*$Ry};8PY-5GkA>?9KD>cMZ;l~Sg_pPl z@FZCtSjc_)f!xZ{(de4~aBgO<`Ns1Kuq?2hFt7~1+Y}zIn8bO&kcsZB5g9I8T{qV0HiCg~TLocGwXhlH|;XgqXhkRsHOO2{RsBcqkNIP&JiZx9eD}B)lh;fl$awlshGFkN6c-olrpF z=kn5?|U~(a*Da8*%^XbJX6~|p@bCu&rcy8Ny z)GuZ-CY;bFIJ1jpW^K&Et`EAC{4AtfcG^L zUlN%$(FdKm4loPeD>V;&Py3-zclN3tXuk8sJKyycVzr#L=}%Vti(1*#2o}8XYVqpRX53dq`># z&%u8ZI*bd>ES3F>s}YIOR0+*m;U!e#=TElFL4%}~euTcbcA2<`Jpn$qKe_a&Yyh^^ z^hX@#Y=Fu5;fiJAhLQOD6!1hM^{MOtwl$+LYeIpFfbvZ7@x-_D$nr!!>6_UGr2FJ& zY&n#DbI0V5G42W8DIbM0S;;O`vd&z1FKRWkprL*A?U z>6mgqPr?5y3H_=*F8;!9LLRZZxu(IQdag1c9>^jWS$=xQkGllQBH%p<;+*eMs~qiM zo>=yv?Bi^M8QTl%ja;vVVr$%Y&mYkt3k9ISk+I&UQVb-^Mn#k{gNf@6}^LX z>#yC0*3;agxzaA}akyV_9%aL)))ll&aWn=}0WNSJoqp-qe<9d*R4&O{|_`(8$U|5T=$0Gd3GRV5& z$0Cap>v?uHfD50SYz8s#J&BroO+=ZOgn`Q8^AW(WM&fB9On`=}_>PDmxI(s6-ej>q zA}bv(2D+D{zviL0VE+gG0fJ0)g5)eo;xRKWTNoR@i2lIY(!l7@-ZHY0PK(@NOlYwt zBB?A|fw59zlk%>Q*icL&lI(mO$@vth?{3H7SYqk+;bT!8n zd>v#U{2W2+pd0v~ol`Q+!NTmI)Y;_UJhk#*c3Au7$Bshe)yUzp3clO&EXtb{KLjo? z6ujB}dSf#oXW#nsnif~Om;G_a#LV0L(uMTPwexnhrBId*1tD6Z&onQCorAQxzLo~B zD)WHv^*HA?`I{+=Wc9{$gJL3m#eNy$jMFXfx_LCh6P07?FyY9?ra!4uu&FayjwE<`RE_su z+D(udG(?5S1Ww|F4_l@!f`kk0X>Z=z)msF9 z9ig&eN%X>OCTM2)W8Yj1x;$L_H16)z{>C%dn@ucH<0NZgL2MS|USJyw6G|U!g5XR* zM^LU}E|;ZAmm&~!g>TT4yPyBHG17DaISK(Xzi~|SYC@Q70~)l47tM<7BiE)iE;vJ9 z=7ngz(RgYyj)vb6;b^Lj$)rWuR=iDIHVlOTqlSPQAY(x;dlPC8Nf-uwRL%?`yQ%}U z%B0h$US6r4y`E<9z1^(sxt_BsN1!$kcgCY;_s*oADk9^qy#W%ZNM^utCIMFSkb}CV z*#?pxUcVDCs4!&t5A(M-AB#32kQ{h|wqCqwOfy6D?S^WA@~j7o63XU?ffdrojO9NnrEjSkd&@@l?{(y)v*ek+F!NiQ+&%dP;1C%ip#!TxrA33Tu$s|AbZ) zv{>sLRSlGZVJ;H7r#9+Z!mSmtQ8fF>^u`ETW~Z&NQDc39Gf>FW6^W8TGIshmaXqcWu#$OOQo}q^P+i! zAA$@5iGozZ*K`{vLaU{OmGrhcns`oIX1pGEAwn88(#lv0Bw~SYSUFf1vQ;sRUPOz3 zQz+@J`FT``@I0gypw|(;MuTucLTlG;gItIDr49~fn`eT_*mM4~I(zCm`{7!9A&q*t zASxqO$YHM9U`#+HpjnM-5M*ORuNXn1dd}HTUk;n+iyU!l3O>W8HHEZoO`)ZK0W_#| z51K?_YOv6U-lx7xof_2L<~+A)6Zz+j48Px6J-oj8FH+~9uA2R|75)FOn*D$8s@dOT z>2Jp{_uKTpzOVIe8-73Eczj>0SRsRSE`&+Ao)iq8O`&>s<(JniKksX;lu4{?w)bM- z4weu$scV4{zoN4lOFM;PF=2PeV&$w(Uq9irI$%ZHC1f|UeG}upV>WLPF9$y25E774 zRsf7?tOtzG|3b+4toQh|fPk5E4Vz1O;E7+WF_-ZB1%7@_FI#))17*ldZgy~P!Xq+EN+^x zld0?_E(SLWV0Hut-fr)CZV=mD-cgcQube*__7mMS^nN6)pO=IMcByk)C2~jEid2r& zD{XjI(!$0>^2U!yJ%Dl3uXjWH9DuzI{=F&w;!bxeci>$1;hydC_FnpKB_{$@Phs~n zFro^1JlDViBL#d@a_Z}FfC&(Zioh0G$Mrs1*qTx+y)G&{ny+#jaOF8GK}j6Y^q8+Z z_TKkozvu8|?QYTQ5a#PgM!K8V-*fH;m6ojLn4Wo_Xz8H3At5n?#)F22n)iMK?BUdSvFp4du;=K)Qc_S${A%ii?>%u+wi4vrWLYQIB97+P5v-01SQD@5PuQF<>@CpcQGn5a%7jL@kRlw z8nt&#m9@+$DE<2Nm53>5@mZEhhWripF;ii-b@05P0O7)xByn9OWsXbLUHH1?@|u2ncB# zN(P=(?~X(1*FNsw>7KlJnx4I1SCf*#iWxplO)Sh!-x(Gfc`DSi+SofFSaen-omg{r zBAX?P!fMwSObLJmgjFLhq(GB1;~`R-RaRpQFvT9_&|BeetU?CnE+l5_B`)%rkc_rFijB{aOX`ysCYXlq(O*@Gq#@outf!-C7+E=$adfCXy{JnF>^K+(eOezw)(9a;ThdqJjRc@^Q;;{e0W1 zj-Y-YC}p$oeQ?=*Irq0WJ(5Mx9iZY+K3I}P8KL{aJjQ`LxQfm=`fHL*=bouZ~@4Ju=@MR^y;ZMpu6A62*1kxIK5m)!w?Xn>`trFlraU(oul4j z&++mU^8fI4PEmriOS&%Gwr$(CZChQoZ5v&-ZQHhOySnQ1zxK?TGkfiIZt}Z}ToD)X zMn=Z>L@yVR4~={ds($4zzd}IIk$ai9$MrS{uB?z63C#uo$qYv@ARaggr~V zTY0JR>Q>}*ocbwA{T9x8c8(Ln@R-XTpDM)9Z&G&KKdqt(zt|@Z{kN^Wao5oRxDAT$ z`H?>Wdbf<+kq%WP*OPn*?;=J6LP`?NkhPx~bc0^JHcZ@y%$^<7pL&ULTKpAp*{E%^ z%C*O%l7ZIK=ywv z$>EKgwi;wW2)_M9f$PDf(R~2=1Ibbx94K9DN^6S?s)<%vExg;4XzHms-HK&al(x9p znMn)rAX2dZ`-Jt3+crbgF#pooD9K)DPWN?IND@kTvt{~@k>wpEM6rhq zYKX!_5HpTaG?}{0o~7Z=K4fe%CfZ+$Uba z^>3m7-&frJTN3F0G2-Un|@x;Zdk9ZA|+ne@NJ@<=j_A$=(gnPOB<&F5(w6tFRp-4+I7)EO` zk}4-bVj<+lRH&V8`s*MPsNMT`$Z0eZMCg(#1%yR}@Ae!v4+AMD$}#PqM0fY!=PjAl z)GGB!kn3}}hzs!|%ya#$nh)WKFRUi@ggWsGb_e0gh)ju&jV-R(Xd*&<9Jr2l6gZ^> z2!opq?(qtT0-NTxGF7`ST$Y(1OF}QjS}p}wbvIkj_MSnKw?GEm^%>#mD_KzG{*Exd{;5s#^~AR>-tzWW|yBnV_p;_Z~)4RmTMVuLpp8F;ELI zWJUaziLd>CpM{B|-%qpqHd1&&_Z%29pWTp{vE$PYbJy~pgMeMzi3WE8U)%W3o56tQ z24OzKdse~Y3GyvGObJKQ*Wp0#iVp`>L4^B)>I%-PxpF8?niOSAT*)OKFbzE z<2VC?1L1*bug;T0g@Fi+%PHmIB%%ttSg-+VvVAXrhe$ z*8`hyX}H3@3d7u_**RurJG}N(I$ea*4MU=h-zc6i!MMz91sXjKq51CklG=Z46Kg!$ z$gnpvg(!7Q(cOvVOu(U>{;UbM&4mi0==`DAi7zssCx7L0KZDJ6>=ipC{2FBP!UA37 zA9sl;F6mv5l$+V3td&bh5VCAQ#!PykAaW9b;9gVlMf=h3fBONdh2QnJ)0nx;{X?VR zNt_7s|(F%G9>aX2|70MgEoaF>bxm!c(*5(s8{%ka8&ki%M<>9X$$ z5u?HlK&)ZK&SQP}puF$h9g`s@QU*o`RCpy_XMnYE(;-KYrmde&?zecbex2aG&#+~e46^M}N!eE)LqvICHpA!Mv4{=S^(yOm z&NhXE(nHxF?`hPC$%0TwXWdOuc=3MpTNEVzLV$E?5Wdk}^j}7O2!&ZmH7K+G>XInB zDNh(<{taf{dS%nUR5WI{n~bCGEos) zghgE#YiB{cbEW5u#JVPss%A>f3tXy3;EBsMb<3*3Q)H@ySk z^oiX9qmlx4%^e^ZN8sT`hxUQS9X~KBP_-_Uze)qmOwbw{-Y1SzsH;|__?Uj5(V74_ z1HvEd(pm5TX@OTjKkn8G-{64Exu=D6`|QZCN|n5P)+9cYYegtAEYiT;;AfevpGV~H zrZe&BURR*!UM2Qnq+HFGCJM`|KZ^UackU3a6f(kDSseR zIei`R`=@L%LPQ*O``d3)NB;knE&sVk@W15F_8+;U{Vyf`x1BEkXx)DcbjQPI!Yr#pq6LFRTak(xtnWoBGuq> zgmS%Fcmh(8>8E$HinwU5_ob^c;}6$JN3g7zFsGQRHTbC+gA83NbTp=;a6&yNm*r{S zrP-?DkSfcww>^WaDSoG_aQP+GU(s`x1$;{?1^>{L!}cu?z3eKXto%sZ8H%66)B$m5 zeQ8IJ{Y1?BMO$v;0KUAC#r~jaul(?7dvRlPd5L%ScFdrW$t^83sVE~a##Av+MNNGw zJsCeWu`@j_YZ*l3TEdacw1CZhPG25~tLEXhm0_KN%o|*T zNctqH`C<)`UHd*KM#-J5#-x|=)ZF?+mr`F+091{^5`Nhu>1j0g*J%xCtC1;yd=cVP z*2)!*>XfenwQXUDtHdON@y={d#z~Ky6kn5oOaV7WP6Sn~|I!rk6i{0WIX0Jeu>q57 z=Yr&MtfXdYRj0O zSFMmX=DLa~$_Gc4l|k7wNJp3$^nz&-Ya|5Az97{Dnfk42UY^223eA9AWB-tsoYX=W@=_aT+daJ^5~Ck_tc39rqE2OT6xrrvbTAM z3O%Xj+9l2Tj;96wAwW3js+Qrl750$GXu~EthJbkyZP9TCcXhI-SM=5i7AyXX%J%Fv zw8eS{tc)Vk)4lZ2xiHq#^5-QkqeMaJ;b{903gF=z zj&3}iph~fP^O{89Imm!s+Q)@5WvsV&h|e;t_jzFMcm~;o0~^bck^F3cfxuj_>Jy_Y zF^l#Em0piiMK&3RxGhh=z-V(+Y?Va7sG~5e2!CyrY8&0}Aaoo|ZD4;T|AiKGRj6l4 zB3$$kRw8-MN}~b9V$QBr(yyYDBNP(Bj3%9HDsi!hE`Jb&gE4CSf@Cd$aU0A$ za?E)N)o{qP#9K4@t)i-k?x*$&#>1_yPtp!fEsVh>akupMRf8roq(BI|%! zh9qWntiZeQ8FF)pj_#=Hj}$*$9Efk1QLNvHk_s--60riMiGQOgc+2=TI;Ms__pF9d zEJj$G$q)o>6I-Dmar&hWe?(^5opWZz!NkH>%?0Lc)r6q z>VPNIsgaU8T5Dk!o(2zV5?0eTT+WP8`x;rVEoZMn<77$(y|-s2k;}Bs7XNrfzLxVG zz?;e^FuiqLBq4USY(2pDH7~D}UL#n8gkuJFVsUHI&J8BLy9JuL`Qoq${W4SHkXKdL z>~$TvyT(~>uZF`Bci@TIiGRYM@umU>rx|rMWc~K(N{<2;S}x;}tckEFIoZbg41cCp zThI>;I^6f1wnqB0e*LD)DgHP_sd-=qB==y?gFE2Z@-&kRIc(*I$~(M+Ar!swrTC44 z6z`cksj<=560t<5*b$Y!w$DB9A<(BlkoS#aOuLS~#!N zoufSY9LZyac}%{P^+4SarEN{LKT@@7OK>pa`l{18;sKt;I?K!q=U~(KOabfhg3839 ziFT@;$^Yd$eLcMnShp>S1gzPuQF!jR^0^`OC1@N^DV3bQ9-{sshPrrfqVn_W;=nQ? zQfqC?Lzx!0b28@F#|`*XYecU0I|dri=lvkSN1hDJB7cSjBC@i7RC8l^PF8g@Zr|Ea zLh!vln%24)o+!dRyD20;wR1ny1E`Kw*)RcGCpv>N6N?52S+LogQT%}wWA$O`x-9mQ zx{SXT#>`JvA4#P)se-@6=zRISWv2PY+S7U4O6*VA#Iz9piNHX%9bKRo`8zm1{{hZV zAUp7ZmTeI{epMCSPWpiD)ReUdLBt&@#E%^Og#&F@RTqeqa;FhkenhE3BH#MbU3?MO zaPz2q{75}6OovDeta1b?>aPs_PSpG*q-!KFr+@&px_v+crmDVV>HNH|_f7U~D43Bo z)FfawRsy{@g9zFgLboFLR|^$B(j{b*deDL4ts`6sltP#f6dQe7^BrcyfHq)sU#L%8 zVVFv6&rQ5t+G*NpPd3(T+xeV3br{i4@Lz|ln>vV!*`Zh{G>+Vg zcO!PgH#Rhk*I!B*QC4bZVkzog!ESfryA_C?Z*KrUMP-qrEm)J1l2Wpfm87`F!(8N0 zWEnaKcGn|f;I@+u&%CO@4;(k|IbiETWtobrOhlB_XC9_J5J~av`G>%LR@45CFK6a> zuLC>6YO4)MO>{Ev%!>SU)sB6r!OrK!8a$mEw!ejgy|8yLI2vm@FVRTB4s z6eIUB-=`_l*oZ&A$Emk=!;QNU=mfs0sW?F1$%iO^yuy`V930u|72kFNH}!el;04jm zoshN7p^5z)w|fIaFGzH`O$3+XZR5$#S5S$lV)UwCg}ExEx}AYB$Icwenhh)N7DZJU zV@4v{mcRJxWsa|C8-qZ&>t&Sr%Q7YDMAy|hGjd8gVi!5FcW=|QA$|95!@vV?$SPHS z9Or4WVS-P02)Xk0I-Ersdqm3yIEr_$Nk)V^-jf4KGvSlN0T2^8i7# zk`K`Ydq(uWfS@^cAtO!QO9iK2Qh>JCmE*AYxJXg=zJj99k z>uk=b_mpNvqe#_n`mo_TbfD=ZLJ~`=e=YX;(6uCcAr=HTP0ah*?y0Py&o2dbjJ5R4-@0!9p zT%tVv-BLu-JPS7Dx)EO`Kb9nWq!%Prs^(|vAo;+Rv;jT?wwl{8RuZk2Ek<#BU))L& znX9}_Cr`+{QM}XDg@3&Q{^BeLehzX`@?C_q2JK>Kc`14yHjRhDhH3#;gB?|@vq3@3 znpT~?axR&ek{umd?L<+TU;cpBg{j(d2x8#<3%t0>izuo%J~0E`D`}aN_dP%qlxlK5 z)6N1vy?L?BiE6>r;-{N6&2NPEXBCnw%-;MUx$_(gE~>$d^a1M?;4U2cYj}iegRB2} zrGqNj1r;moCoJ)DD~R>IL^GPrK|eO^MlV*ioWm_E6d}ulJC)vISY^^XN_*;dKi;S@ z84Jz*EDh}juo-_GtHtAN>9-2U8bV62i&L-tr~+%MG5jj(s2)1V_BDK zt=V6TElPM{m6=QCL-9`0uoaTdERxP7!5Q6jnP|%Q5Lj&9ITVrP*~l`q=GnF!=axGi z80`^=^1QjOv*s6nFd1(<2hx5|w1R}<3aSkZ?d=)(|8gwdO56Av*GN}{RvxPUo-!?P zVi6D6D_YP@C(e1}aZ!;MU-&Ao&1LvH(J_Feh{EasXAaJ~>14W`6cJi89G}>Ad3j|? z(Cwu5XAGN$N&|g~;}StOYy)a6BqTu|VHVyvgL}I76vDV-dD48na<E05G>;9H@ zdhc8@YRyi6JOe^dzVE@g;NNxrmSV0zWQg^zE=qzJ&|$do?L>3XCqoSjI1?hF0fo&B zhwb}x>vA+`1FQ|+Z8S^3CONK~6&WmQrw9CXn^nf6OM-qM=rt3$C|y>xxSx;`_8JTW zzMHVK5on;Wa9v7NwHcW}X#;WBI`k>TCD_-rftK!4_694uX|K7KL?Z!7ghy1S-W zpqbsJ9Z^3q*C}&02)h-fB zs_ZVHxSB%W$Z>c_O|KZj7I=a_;>*~Qt0YDQ1DVRL7D-fxoK$YtCAr0@$~2orEOBjr zp$su-Ww#BUEyZ1iO379e$HDLRd$A>2#k3N?S$KMl)gMdeL~^!Db9gLY7d@6Ab*1>A z?b{*@k%Z4JS2qwij)s>D$3a)(D%^E~HBDkn3z%0~y#>#_;UP{LA0AS4xnqHGRz;ks0yL1Ee_rN} zq=scZi_*Vq!x^d3u!9?J@ie#`z|ZDsywG%7EP5nRVJo9>)S{&(T2>~*ka24J&jdbq zF^#dGaG&iE)Z|f+Vs<5`MU&7JqzKT<^j@T#d!3qK^{lPIuUr?ee)J5 zHCUgqD?sKas~^(@In+fg zDQNgrkZw1bc^ZOG;%l4VUv(++y~fmwYIQmUp3focx!v`EEjhCHy*rPd(_{Pxuy)N% zr83i&?Ajv!JB;jtDit$$z`!5=M|s_h7xZlgAp7{4p(g#AFcf|7k1&hK}t)*2KS zqC>%6V7-i=3b=Fp1($}AfuH`5#N-|B6pjbUH`0a;7F8*Ph08geDde4KZ@E&IEHiIf zKi6)J*FOEa6WEgKvVJ_LNz<%w+qdpC4mW<4j(BM?_MMP-G=`_3OSKF_mY$riJ{h%v zMDFfYPQ763X$>#+8T=1b#sege8wILlbJYYF4?Oy$*)0teOt(rkhwdQ`nCZ{j(S7Nx zzkm028uW9oSH-wq4fuOm2BA>o$lOuM`RbN9nR_$Rm6FeadCru{bzmrseq;f7?OAh4 zTD)tBGhXcym!Q(^P<8@tEe$aEho_aY!RapAjw-2?6;BY|#qioHj_zNCC?%GaMMsU- z!(5yqP>T)(kHJY|S4E??r}RjG22&8zXH#I=$N5SXjCA--V&Q?hKgksdH==9 zQgKq+YR9gbu5(HotvFhECFfFEvA+6EH z^5V*0%qU3X@15Tt&xk75FGYk{3I;C4(QwL{>&mYT!`DA`UbIrsn+uKutkJRkg=gpyCWmVU|iaYroAhtn(14u}TN&Em|aq}zi^M97?R5N&ZUY81oCGULe4 zn_j{(=-~?ZRj~ceSkN(8*ttruR&hTjyh&x}m3SkqgoXr-)>1UITBy1)=%lAOwEFr5 zqZ4WwaVx<>#Goy27QrKj6*+oc2iq=oHOx`bn5gc`1XlYB;2E9N+ciql)A|PdvKLf$ zh1t0Yl8kuU61rR5r+KYz=U3@Hnk0-%m1+Gw<%?skH;H-8M%M<}D$)ktI`Wa>t9#gOS1Gm)=S!?GFe>o$>;6olZ`5BoPWATD zLKm@g5~*8letd#5u1TW1#Kx+XIJWm}ZD&kj-4sH8=N6)OB9yl;7UOOde)&=U2H@{< zQ{Tt_Y2~eJs6uLKj2hvUm_c6{9Le(~@Z zdJ&zbHK%0+osNAUFR`z=vCXFZNnq1)n7+_nY~&Q|#dlr9G7+-=%dkWF*)(56%%LOP2_I!1J+d{NvBhfI8 z*gv@_4|lmab9Dd^qfM?1vsv!4c+M2N;A1$Db8F?eD4JR)=%{a7-)-tH6l*(zs3M@KcugM{k=w%v~xl3(!3c@1$chW~=B8dt&tP}$p zvUjTTUFD4cHy1neecCU)0bRq`4|$Q;t7G-`Kt}hCxj{a;R%WN;)i1=^i)(!S7;dt$ zGEmfi@el3yMtnHli_`IShkr=%VjT^fK>1ieJK(k?pe#-*^eELmcntUHgwut~pcb;> zC-TSMnTg(jg3DLgF1h(xaqcw}JQxuWGV-ZnG{4i=F-NRZj)#nrC;v9(rgHf9B%3b; z-8pnvf-Sig$H^$IIziB_<0rsV+y+*~;g6VEtyGhxAd!KbbsBoTKq5|4#3-p8K4N|*+Grl(f8*OjeSu-B!< zLmwK|%|{oO)uX2Vdu~USE;LJh6#yQNX9sNA@nkF5cPp|iRq=QV!t(wo>NccS^|#+L zB}_&{&0lCXxvhh;uRWd4f^9%2tD_BspI*|9Ev$QvbJB;gqBTwgwP^}4_BFX61j4+MM(jF%~fT-1z{76YjoCLjJnpCtx^RE9r$RsZGT8$x6aE}6*q>9d~TbL-_CSaht524R@VO~^$0It(v~ry2ne&5RYF z>@q1ba#&y}WL_Y9CK7=LTA7PMSoe_Noe=!B(X~sQe(7?~Z$zBAFqFRoegDDaB6x&F zN`*~4{*c$3mt&D>&Zuz3Dt~c3Jkn1osHi%Lxo_jc&yrAka1h{i?l^0;K%>!!M48ysVcOq=^2DGl$qR>nxa}kjmg$JD$V5M!_Z0=<%v%>YF#xSDAdX=N5bR`msK38T9 z#=kr~6w@@EkksW&ku6p(F{{``LZUy6=%lcK!)D%-9Y}>CVQK@7P_gSCx1((;;Wf0H z<#7r;8JZqx1IegN$U$6zrA}mg7U5JG?C(++uML)#!In`Hh}Ip)em3o1WDx>7jv26l zyOmp{j@aiO;vSIPa!Bdb2Z(hxH~V0=WwctSR=`w$jJ)|4dke{6rzq#NkRisoWmw0( zA*E@vDXPl3wGRT?q`Q6#cz?1D=*Mn#ut;FE?Q-vI+1Sjqo^WM>3l(3gf!Lt*;uVY` z>41YLSjrFx(?#B~jk9)S(~ep&?T!ewqdBlVk(se)nEOS%6HBs2V8v3=-PR7COPF3x zrI>2x+19LM#a}%1?!Z(k$Pg&?#!a3Lr88BhXgQ~^k*}5TA6+yTG()0(#G^f!IDMQ= zlgy%mmX}%wtL1*XKgoJ-H>d~wIIZyEK%(yz;Kc76eutG#ENrNWKj#s$?Z*QD_^PN)4A z<5<$ii;NvTn+y@wSaT6BYBEM51rJLS?2^@YnN$Y=>xK=&v(dUSEaF9=c)rPRa z6`htwjGGEE(9qxyf*nAp;A2rtWT5LuPT2no395#sM-fHOaoq`&&vy`J(pFVJ;b*-> zoXV4Qv>P*l#I)YC!&Qyvxbsh>5?jn4g4+o+DKBDki~0y!WNudGHVc!pvU^mJCFq77 zm$f)%I@&VSyQ6Nn7jtT0Wq9N2KyhYX^yI3VSICGNJLh7A?wU*?9wWviomEwDgT!y3 zcJV=7kJOhA|88LK9VmSTz5ShSRI6^nhom2K&s)ZZ212cow9RVwx0h07XKdp^^Gc*2 zUoV8TmOKhLyIw8(t3Xe_tCEKhc<-&aWx}qZ&4)rY&$J6tv+k=h^wsMSJ$u<4kB$ze zY;+@k7*!w7I%sO`qzT_4hr$tOT($}!N_>=wr$sjG2U56Sq6w`1y6qLYk`gz{5_j3`|;LZ<&YzM%~eSelAP1CiQ*&#l6T zwa)7|!yoVusSGSH2%VZgAas!W0!Ns#LXq7T?nxYNuoUz9wD(why%Vjl6m|G35osXl z?lVuAZi_>7F|8SP^`|CkpyT(K@+;-i@|f+VSXw>`OVi{>%v<*_)z;bCS{r#ZP?5)7 zC*aMT608RoNVeg5AY~Kx539yQAp=21@h6fvj`{j?3ZBGUay=qbUi9mBy63HPY+K_( zvV2JoZNL7&A@LIFW1tco0!tYUPMUg#pz*#2SuKQRT22)1bjNwnf`(_$KKMXQugd5RLfWS zq<}xghY+P5qM_d2o3~_a@b-m;zf}#V3L;&0e4udmktO{Md`VKRVXMoVlqx2J$S~#m zMf#UD=y%VgD3<7H;5)kkJMfmu;H1OAZZhaisQ&?s<*__sBM{qFv4(#x?hfdMI72A$ zgF0PQbGzyLA|mio9Bnd+W|x4EhFgGud-?R3#h^*s@>e79-)rpnl@v^mLVP^N^jl-CpR`_r;I-aNXRh3JN2(OQC03-5 z^LWS7(3BUUd0T1cfrR#Qqr~N@MO~#X`CCh!*s|(If;uByI&W@i0rkyx-gr;4J`p^4 zB)J`R^xc8moX{h%&q60Co3}3h+lfXdg>+dsxzWSLqNYrUG_%4rz_6IpJ0@^19=we# zO7F0Hr-$?!Nqd$g2-JVL(xKBgeO4SAt@RMwx=-j3k}S@N%vM}WkBx>Qh*km4%@#4QX@^P zo#F1f=C=^N%jlpN4CoI{GWKC!*%fVFoI!qL%bZPA(?lrFuCw0ERG^53MPfMzt_@8< zGSiigDlKh&9WU{tok89VS=6&aVP4=qRmRD?NOTgwtenuTz0gD)ILwbw&t5`RuO44n zZ}h?9ro3-aKS>@f@<=nbUAk=Ib8wkvx@mVNCVoyxi$qhP?)1eLTXoW=t^xN_14Z%m ziBES4*yWRnT!MTa@f4qg)5!!-lR_}Yb+@JD-GmrlT>fHipOivN?qrS9y(ij;zdn(R z@PwBt+9d7-YILL43SZIed}HgrH1=qQK_M0vkq&?whgo{`X#!y!t411WWS=IH5M8)d zejDe2rfd`Pu`Y4s<5tm|vCOH~R5{EvlWvqD>Ce!8q*=efL{n7a zthDK5)obh7`hXxVvkK)B9u zM%Y$1r!Ov#4VeV4* zvOH3%hVcRP9K7WBr^w=94S(ySI>$rDJw9}OGKdsQ_1hS^Q0Rdy9R_amN`KoAyMq3dRY4*Qc}R93T!{hvkpgO^y`G~C=bbLp(G<&O zK3@cZs8akajDWg^3W?W0T9suH6m@!K78G?2<9^ndv6-n=_Z`xY>uqEUmtOmWG7JFBPOK%8{Hm=+#cej=nCMubY!VNQCtdF1PRXgRxgs>1DgM9! zD{IT%b!K#nXw;CH&R7mBpnw5d*~Eh*zum?WTkZEywn(yS@fLeG*Q26 zja0Q&_dwyo3C%Vhh3LS^=4ecnEM>#hu!yj+PB>ep``_lw` z2t1NZX>K~T)AvcIL9!5~=R>BI3N#RO7(#q?pwZ1Iq01TScCEP7xazKsYJw(@*GZiu zJ2Z=?T%Q{@tEI02qXUE*BY!IwTPI(t(xEQr5dgy^IAmVGIQDoEGe_o=7bef1%I<{sR%sFp zq%yz-70i!H2nqcfv4YJ4MeQ7&v09ipcd*{!>vi5cU+M$6SSOJ3&Bd^UjzivAJbq^I zgUws^DHKLJ9E+fQRaEO*mlcKm5G>M9sLR*_r zIL^e}xRd@$w%|3F_Q8T`I;sj-t7h@^bMCUdR>kSq&DLQ1?C||xZ_8(I5cMvKs@hGf zAPYH?lASRF3R`ZLUDv3?TZFFPcy}+bT8I3LMkV+JEt$bN5_R>YCAr-%%gH(re}@=l zu4#6y4)d>P==kCQ0UDTD@fjjBG2zF6Afotc=PatJTCqO4~S|SXqfrk za^C`epvQZ5`4`(uDB1B!IAtetTZEt2yrS9aV~3vt3RF6_Ol9w`{^BV0Du9W1Sj|aN zFWPh7w6|>2svBoJK27DZH}Q5(ru2F7Ff3s*A|CP8QupZP%9?gqJ|G<1-6>uZ_8LO-0+D=% zt?e+$eEx)qP@{c4GJFcZm0IXL$6P;ly=%fOd<_#b0 z8SZ7hX8;oELvMK~k|JEcPG^={B&oS3)muON;OhUK7B^>=I1WE*{gHK>=w5MYWC&N! zqx5^(Pg$Nhb?>x}MUBYo3^#UwgUp8?Y(&(&CKJ#5M;vm>u!n63Y#=B z9E{1;%I{+IExj%$JXvbnWdc^b(v>EGH;1^nH2B>#Zz8 z-(jWDoYI%zZ$BNVTyZ&^78Dw%ve&!|{d~^p%dN7OKOWf|uAb;M)#=pU0lb}iJ>*A= z>4?j;z);qT+6?XyvI`?hImvr+mz9-z<+B==gBA``7(qGhUPSN>&@hKk@n(Rmo_^t)d;T>@nd%`9}=GDc5-{7-p4dYnJ^s;b8(}`)67a zL`>Li3%BO=f@mq&kxGU7N?)91UbiFapFfcECl?^f$dS4j;7GhrLTSVDLXc42nmHBn z>C}SVGO1lDq^{|r8t>T8^5c>$ksu`>p|ng`!DuV2}5+bwjZ8 z!6mT`Z52t>{Nk?$Awp-@6&p?xQw_f*gn~?fawFx<;AEuBS|18kL$GJlO>d){T<26a zKNnQ_pxsPBf@7?&L=#HD<*7w4FUj;dp!N34IcPV*0JiL!Rf`cb7O^^|Hm}x-(07kw zopL{>VIM5jvD|$&2&r|N_Zhz|w7vE~rM2Tax{j~t6*G4-namT-p zA|luQ1Nih8G{e8rI`@N|ZSsRx{xjRZ>r(sES=NUwj(geZR=o38x9?A#jhW@#FeBnM zc|-e@aLbcH~Iw-ZDy~ z51-?$les;HgZ?QBCia z5f!COQe$;~xNQWvcmOWlWbZy*>OmAZV>m%zCjo<+#1a_!8a)8{^KcjG;sge}E7tZ4 z`zqF@c!`BO4S8aAql5}%^T>r(a7DDbx%dkE3Wmo?;_VCzJC!_fA!<3WiqZ+2J)UJc zZcY>uQ^OL*YpsCNE#3~o__Kw@q_(b0lGR83{od#0W8uMt>|$mPWh%nq!$x5-C-Z_gnoroa!M z$vkJ?#02~^IbFTRPV*t3KCmw8H%99Nv3M?JF87CcR|v#MTsdYr$8$uj^k)^R2uxJ{ zjJP;3yQNVBl2}ru9dxgoQm;(v0TA+Cr_kzE5>;D>bc{H0C@Qc+My$0y|_Por-l~-t8gK zlzYYLySYOaZ&n<=@)g3ayp5R6N5M;qv#1yirewiFbdj!X(HzTm#rFvYVHym^i5uJC zlx1i-u^3jjJg7iRRLb16<$9uVp~g13U-Tsjq}+D_<+KQMc)~#Ay&O>z))bjy13EyB zo+>s51T6ZLQ^AYV85w(&<8YfbuxW(%1Y+75#=a)hBSs#rH*#X zSP*-i#bE%MqNbbclQ1M)TO`VGk22#E%D+tTR{ZgJdC8|%YDem8Z`~-YbX@EI;A8Vr zpE5$Gn)aoVf~yYUVTJ(nE#|8_#N5RJvZe5*T1!h>%p1IZtPCGmobaorN~)$$a>^f$ zbHdiyA95UzF^vj6_^lV4ec|{IxDY1?%8F5L-s8Y%BVh*Nd9GKMoNk%@R>%<^Wbvm` zMnO*#V{S?VGF*z+<&Pnn5C0u2^xWu3bgq|9Z!z9S=R)eH0j&o1Z7pfT(a(<71PNOg z+ZDh;?h_5%rXnmT>CC(V>i8WYR3l}~}aC81<8jWa(D zx7%k>eJHxI^5|aD;C)gKe#tJ9oZaa&f3v@%cbxX8GRaTQ>skjoTuvM7EQaDIllhIM zyPTG;%|u&L?PCgCC`v@2)?0izhgGovyFQ~dzS{6#4Bj~WBl2pX=DR)ObkMea%KXN;}8!D$T6+GDOAa^rr) zeAVEGO3PxL8P>~8*Yue=l-mcbBL*$j-w^?-KU&G6JLRGa9YVY5%puuUhwKClfr8WI zKC8OUV=BSlRW#VELUnQG={y!bBCrd*O+9)>{r0nbZj8-LCwF#&uxvOT7=cpH=N7HfLXLwCkk_JwLd2nSHrw>~LV{YwrvlUPd<*yW*e2UrMYIQ^HvT zD43*obc*Z?DOcxCp41N?-}GB|&kEGl1xWo^WJ&)rR zN)1@$1EjRS-jVzu!}i&mjm_!d#y2nA4xleSZ zaw^$Y^V#AucWOoLlJGw(KL5Z3DjhJmR$#U)b;?KF7fURbZ;tA7ag+ZLnSLdd_hh5V zj{K-XKvHU$$<>%h7LKz}5z|xjC?fb1X=(n#a|~}xUpaP2mX;^UZb$YuW%1$gMM0U| zv_xOl6{CNOF3nCibn|ttdorfr;V6K~pbK0R4|9%+WvgqR3l0G)xb_vTV$i^$Y#_>7G>=m-5-; zoE=UHTVx-CMFJaVQvjUr9W^JI|y8nG?pR84Z-$e9}h2g?0I#Z`caj@5R(aF7vngDZ5EJ8#q6X z(5;<#$E*ZyrtUAk%rIC96cOF0ESGY6b~ERr^ZXmB;3t{C^W>gI&b)xO+A4>C45O$( za%X8>SCyg|9a^||OxrOmuJ5_(jJbKj-HvCq0Ip~}9s;P(SLkmREuM;zUwGGJM)@1t z;azFt@DkGM%N`0**w+7aP|dQfPuONG>fx?sINc!ZcI%lw7q$=HKH9EI?9i_$OInOL z2$CzG0h*3;pNOIVp*8l-C$l2E0-oBhtMD}P>k>pn0va~vQ~TLVN;GZ`==Bhyo&~iF zN#vXZ9ht$enfQ4Ad+S6>8(Od6Lx?X|0RjR{k4R7z=$xdGRdMhriVb&G{@L|@VAQ40 zVvc2R-ii;$5`>jQdDCRJd(QjwxjRdza<;cC;pr@PdFgutXYe}NiA{4GMU@1BsKn;~XJ!CkZnD*yX!Na?6(i(`Zp z(St@QUCUbHyi|=hQi@v~AB3f_05jDZhTbZGZLK~vKMtH; zUKbH-X1YfLODf1Oq?|t3lqE%X=PoRM#G-v@E+2*jYa$b|(6ZVZ!ApB-Rb45Pdl+4_ z$}(=nELT~!Gd63xbr2uj?oruHh7t*(?g5)-w5&Vl&(=*B1#2Yuu<75ghH`1>MeK== z^Rn9dW8_z}EQQ^NXx7rAKj0n3SR<5PjREeqUDU$; zoR(nJN}P~GPP%nDXgO2R8QA)_dQ}a5pGdR%f{~q`B?A?1R@6;tH|ycJy=&uzzZtyl zfjHOD8k@xPcd~UL=Uk(y(TU(v4~U#`<+r5Yz`nU1#T(o%RzlwIjlb~i=ia|59n}Fi zvY@#*GuAM)vN#gQ)-VC9L}{|KacN<6vuUrsQU4DBK0v|0$VV&b%A+VE@;1_TDyVC; zJc95GLRw%rA5Ky*5+X)R7LsM~y%;#I>#eO@yJdE2e`sf{q`mAQ?1&>B>0ulChxS}d zq^C2RU5)1Ce11Y0AY|g>_E*Y08!{qi_e6#6iIm(T(25b4?@t$;5FE7QwxE=^W@w6& zh*QxwS;oR77vqlw8T^zJ$qH-2@UuiPF8%4Qi~m+47Iav0SwZ7liu`K2#-)_8gYJ`T z*G;mJd4I~hzNubLwS~MjEt|n>fX=EFbO%^UmflhJp)o8EKn5m2t3sA~6dQN0;Nxi{ z>)ba2q5~9{E4@1KSWADZ*1-}s9W@21fy+ml+>7*|bJ}&=GVpU=jP89WJkpi1*I;Y! za<**z1lMnAshZ(hAd=+XqI0O z3khsgae1TKHl&|B>&8LhR3*xdvJvxTK)ROwGb%@3;eE&j!tD~CdETUFkSRt{6ydq8 z!M545Etd7Ssn~dZx+1$4!i{|eniEM3%&c7yKYeOv3r7>oXQcnBP=6uLXmjPk9(Y6G z$kRKhJf|9s58kxE@!v4PwVRgg{42q8{>KE5=D!V-e^nW%z51a%Bl%cKr_i7SL#M47 zP)&^`&<2w=fr5n7*C~y=`uIEGG^C(=2yUsms)M&$Wa5+9%)QG=dv2G`lO^D==RYHS z7OwSZjwaZM@RjgOyl-y4PIY_$Z zzXT1oDHmgPC6v2=5_#{j3IDs);Mv7SQu>IMITbgvx5i8d%;vNwJ%6@xK2aD&J#=JF zSe?9-OsNn9ElB)qII+eitz8d{8-ixufptE6_D+;HObrad#v#vO`DJiLSr|lFRb8+Q z8hFvndDlP7)!A!BYr#S{+(=^-MoiBvDy1>RqU{)sMZD7#^##1D3SWpBU+osrm3b!& za8@`pL%lFU@6H@q-tAW=S(_P+~IjJUHjp9V19;FkLt+X>R zM40R-vIdY2ZQB)iEuBn#+F^PS(L%=U+1V0)n3g&{Y|u@JD@5|kjrznRFO3R*hXID* zvf{w>%+}G9NYoEHrh+46AKF!g8E3HwU%Vibw)1My-`Y1ef}%qrvYK8?`fY|*ogFVW z1!dODZDT}IN0i+&>~{-|P#ra72@Z$5LCN(kqJWZrNB!^qQ%SVzp+acTEpWS|kbk6xe^6uu-WB-T@WM-W{bo6srcTYHfoXpPtTW$NM8T zNI>M(j`yt17U)Bp3U;WsNtwyRSxpHcE~CA~a*yuEK+@J4A_XlwPBvh$`cmNADO|MM zghz!%xb`6LYsNf2?35$oqJreDgXFXqnnkqi(vi=1?3;5wDa*O(ph>rBrpr@aHzoq; z$gk-;hV?v2vrW(l`otyESS}hW@5gr{T_+!5;$q8RIQaThB7>`rn1cAZmbY0^ev@+o z@r;ld5U$!CD3w$m7b)U-YYmwV0;HEPLcQ$}H$=AVe+P74zSrQVuAy`zEEiy1Y3 z8C&+X*p8Lft1G=@i_3iK(h~Kl^NhQB5{E-`ZO0oWu<7SFTf_uP5JtX>VS}E)?ZNAl z7m;l%-}-#~dYrU^hsj#B8$Gb(2vIWpCPw2QmPc*k8hUj}vYAyOHr3RfKZh>3d;}Lz~%mro~w?J;!x(CKhc%Lx?yJLI1?;HpnIgCaandas6#3`(m*)s zBuw0&yu#2ke&B!E3|6b<#j(?E)WFwS#Wh7aP zQ3&Vho(g_T)y3XF#SjM>qW%TPyw+>=P>@@Ueq=TRC8x9{!eueB3N+;x$FD%u+;38Q ze;;mi`uxTy;!_PbEOId;-diR^GjA)2iLpxYF?VaYQnPlR#t0`9*dY2OhK;LzeJEm+ zsO;O?b-4wb($+Q4%B#1M6jq&_=;rrz?Xk87CF#<@y5A`B)SeOo0Z=52zr^h$Lp>yI z+JHM!)@-~n<(Z4sctR^T)(3T^-9su(wbC9Ige<{l5Ta3EPR+=V+L5JmDl3e2j&TTT zLk&e%G=)l{tO@}G-{=`;nfr;2JvpPQ8yc%h9m;XUF?kWHuFDE|cZd{QQa7x#Ot9m^ zizKU)zA(l3DQ)VkD3L@Q^1J-USRBn*C~Rqe=L z4F2k;Nx2VL{%6D6EZu06d94rUxLEz7PEpReJB9cT|2)>vP@iFpyyXo$FH#UKtLYTS-<5Ho_Q=q18PL_JGC-^=V ziA$mU?w`K#zHdlM?Q;YCgkA~$cFdvP)Vcf+KYnb%|C3{8`zOczU;iVN0N5J;9~Z5v zsg0tJ=^G0Q-rtsACMdd4fC#CG)C_8|Xjlvv8B(Co3A>vHOUAr!Of)ljRe7mu_s~Cn z$J1TV4Oz@1-+dix`JO`(2Wr^b&S5syntkond-(A+Qrio}5q-^KjlyBl8D6)Gd0PZq z8vQ;8J>40yFTswhJ>ky8d$q>nUNWJ>T(z3y%=!ZAI*IihZ9i6ryj!2niS-P61}-!H z01jr!#YGP0t$v|-Dh`M3yig!#V7Ab7V9v%%ya{DQMhccu;JP6pi(OMbC0Z~ooq^@g zJo|m7E@B`r2Ysa=(v2EM7Z9A#hMkSS`;^fx(pT4(y^fUV0r~A2gtg+tgy~lntf1f$O z6KgIL-EIE+#|5x?r9;3hYqf|mjR|7`Ft+bH;h2>qv8aVW*8IkZ0N(ruLtg4m5y^M- z0dvzODujck5MfX+X;UfSvjgHc>=>v^26iTEPR&?736d*uni%TK*!je1L0Rhe6X&J_ za3cA&k*Yrb1cmhUE^8VtXXgsql@VoEG0RhAbE;t<5-Sf=EqJ=2;)C>-Vxp#N4J`W9 zMpH|*jt3}MTmnbk4Vz4PsY+R0dDqNFB;5@>PmlRn+blJtEF|;mA25x-s&LF)?)Py0 zm6w5l7=?E8e6H2Tw&nCNCI`XMyHkv^$4k(}JU46Ad}~CoiTp^=erot+Me>9i-dgGm zy_Ew9R~genM!QGndvNaewjdg8`dYAL`8paDMP&75WHmqD7t2Im$39Ese$0y@jT(R>-YQqSXH) z%%ZJ7WP4&6;J>P2n4)vTR;V=fay-l!TZsd8=qX+p^=rMf7w{ zB-wI!LBU^@$0Ty*#cAcSHwR$=y|K|&2VH>wK8m7NynLVX6nm*P+Rxjn-I6D`9rn7p zA8qL~$?Ua#!@BMY}Ub##YmK;N6C+fd7NhdDld^1m~Lj^o?5og9`B%t0`TSP7t=c^drF58iWrooh&(eXk?Cmn z@va}9kbWxVxCD#46A&EwSdM^sOXw39`3A*4vqx(`1+iI~_afx(IX#u39df({JbQ+r zdxzJi#nwi0()@TQ&)p4uw)T0&_{*1iff~@Af`fppLjR9fxBOcJOW4lV)WXcg5%}*3 zaB|X)GL9U_+Y8zo>NwA4iMhuO?mAcHetv;1c zG6H9@kr;$`u(v|o*{v;shE1M(A}`mFB~ca?q{ZtOv5U=wGt0_GT!Z9=2kGKK3A|1PGL%o6~Oc6?X!H_-osElUD`;OA@0siwjewXlI!q2M)PI2 zbwvRCAXSK%tW(~%GzVvP-0-qjLy^VzjE@mg1}6qymZV>EBSlM>H#1?av@{aH5j(~# zzCw7jNGIm}k`MCfiUcC%1`_F%7^Q`E{b_rIoy@$=_YZuEEWyE8aEqC|`6kcb@gGZw zgBhvQhMM-kczTnp4<~X!EVRgYL_BK<$6EN8SIBqsJ04yvi4IBmg#r&Il(98|84o5& z-qX&4lUL(+F<-HUxL2IJcIUTm=-URjpwjL4(LFiS#r&NDe5ot+b^B+PIeJfvRK>70|1*qKIV?#w(qC#qxW{i>u455by_710jlM+CB5JPx` zoG`_CV;0GM@t97{nhqW-E09jH=n>IE)A4ziXKP!%GGtrVAmYs?Dw zE5TBWM8Fg*t^>6Q5%O6NW+5&Rb%2mxXR4?um~VsDmCU^M@{{e&c{C-B9s=3Bd$id0a$0qo z?Y?_k`PB0Q>vMf$4-)WUs*i#s~lNqXoAlmi4hDjnCf$q4OaU& zFHFkswDy4Nqf13P?ImGzl{y|H)F;m_a~#v_vSih|nh{Gk^@>_UHt=MBch-*PfEt78 z+mFNYrLj4C{q8qMh;vSoTtoB@5^XEKHCD$TB>3gbxl5Pj*mo|!rt$A$tU2t`gJ#(7 z0|J)ep;(e-Noh{N4K-EI^WsfZCUGSPWx~3@TZ%P0irAEypG3M2Ck-`54v(8OIZ(OF zuTRNhCc+?txmB3OCednTNJLjulFLK_!wr99qx;EPsR=Tv;Y9WxtZ;kMG=|22@|ubv z7^2Mo%76z(2E1A&AJq(Qxu^kQ4)``}4RH)*JZj^aFW+IkONHV>^8ZM&iM1ARJe^H_$P`pPw=p5Q0+zJP2mw?@UO5IdMb(jqoiJB=&zCI#eq zDR{VJq6%i`9L@J@<+)2E(Ii8_dLTzt-a(B7-Uv|>dqWID<&W>thAtw*mQ_fVL}*s? z#A>l+8levb+f-;I91|at8Cv9L7F#xUks$CEG3D;4Sss;lDLJdO-L0lYSVK(51#yd4 zL-Ttdyu>po)cAvvO2v5_dfy;ujG7k)CW*3?Zhg%!*T=Oy%&J(2z5UhV)Z)KDq$o^B zXUX;~es#?idP?U3R{}~c*{bdxOANg(QsX~Hs>n#(`f7>J$oIbS)$W4{@yom)i1k>v zrbVxckPpEbm5qMh(8>~jPmG~jto8M2X3F<9bf-=4uwW~FS+Q>DEG8Js7= z?6-zm8&5EqZGIr^4^Gv*)GWl|2LDbH^c?P=0nfA>9>vjYXiFJ*VqxZwkY)H%2SEanZ~@)Q12P6NZCQ!M7nC z5mkXCKlA7SJPWSW%p1|2c_khic9nb+2O!?ib7EfN`N zKOCuPI1oE0dF+TE>~2jF*=-+9ensjI|Ge>1t0QcIX?Y@68zpEEYb58SQ+tL&@f(y( zTG@tQc@v9z1$W(uEVM)8KrC7UI%PDgZ}oF>myO$q<<3QDo`lSL&vLN8`%#@@vlKdF zWCJeCPY+(IoWQ6!zyxPSqO*Ro(C?^nX-*{J!q4$qx*p7VN4`$={5{#GzqeL<=$mY|6BO1aVULHj3iW(QCdB8lysKP1>vaonDbkKp zbWO~+N+*D&-REO;J9doRLZ9bS71Yv#%ym+q6!({)s?iJ4306bG#oNXjpeW^>+c=O| z5i0gX)XuLG-`4kzKc?w`Wu93PB4>u^nA_>}6$8lMwn%KQ?wys;S+5m3YAW)XffeqsG7sTaTzCi&CcTgj#ABbE1FX*M{BGy?Ix}2x>!R{? znss4Usb$!4zdpj)dchuuDE9XjzxjP2{3UjtMhiLPp+G=rQT}PuCEh=Y9V6?1UTylH zl@tH}+n)&<{EMsA7@+XCIHTn0=m)WWpa@c~Hyd;sQQr&1sHW$U} z8vV;!8`MinKQhu3tcZ!udf_inSNnugL@%W8H7^Nd){7A4LM>mW=|z+13iw^=cf6fu zo@d|&fAaJDe$f~agYtp1LhCHMqh^N>);k^@Sdh2YtA^2Lmn!MeEaPNj&#IPcpQ;Y5 zvIwt^aG|vp|3O3vS1A6Lc0p!~_7EFP0^}gNXQp+7cmOjxolQ$Qvt|U}59bMNP~}9V z2E~LS3HlO(l-{e&fDx2^5S(CuIjaVzH{rCAbZ4sI06&c_%;j~_u>dzeIaa#tcWP&c zkU4&|fD?qr)CDEXlhbW)7pg=m&K2KnNoAw760a#p{? z1-_cj@5^nKcq;iKGuhPpjIvb|L(9j#A(mjFdlhdVxXS*ZE@3PR*b~HLP9yWI_>9za zK2zV{dcPEqrucWdm`e z#9RBgvl~AWIdad5ymcG8a~|vbnNQavH_3x*1jI-1B^F9a-j1O;kY%GNXS~c6{(<`& zD3tQXPsmY+(Dl01@4zSpeorbUG2Zlm&L##SqhM2%v?4_UL;8NIYVfk$xA1cLleR}e zX*PR(X?hmM)xLv9^rN~=bRrWJ5geEDldfu6OHR)a4n?>*o-ff7MOl;&dMg?blU{ai6Nc5p{#t@ z8|yt)gf}?lzJ*RH!&MB^^jK!^U!>g_E4se_K}`kfpGcGZ-zDwe%f0_KbJc2A+Bl-9 zzMm9(|V?&I0*< zpPBgu_KNa0Li-yR3eb9_rDt=VOugoCn$5i3uGZFq=#0h^uVb3R(c~t`YOX0Mi+YGJ zD|e6>@l*6$qo0;b> zIZvk>-iR7;LIOvACS8g)8aL*I|+f&3$ReS~J98y?6kyX3C zsbV`_#Q4=gL9B!~vnFs{YeYkeX$qT+h4JXTCw zpzp>%NbWjAaENp$-he~i^+L{^?FI5j!mG?`I^61v=a`vdxy@>RWhd5_tFdnW*f~$s zMnWN)(p`fja=!^(?PLs&M=SO!MR!&=v$6%!f$^KfU5~Y0yepIu6jPWKSvF>hT$pw0 z*$4pt46;q{DZiap)Mag*m|U*odrUeXTt)`p;N2(m&!lb3=~1H1;ZWidIVn^GiJVpf z01t=Po2Se&)3MQ1L>ds&PE>yY_gZmxJ~}NCmMnRJO$ozYbJ}$QuPyc~F;h~+0}V2t zXbMr@{5vf-WU-QbwrdHOJUV(EsbTz-mpYkuNT>>}v&*bS*Br)btLm`i*PAf^t#A3T zoX|8+0YaLK>`UFlvLV-|*Hhp(XJl&S4Z!&|!W9>TcUz;~pBKPHj`ac08^b-iF~q|2aCFzOvQHYoJ? zwm0)OS*(VW)qjpGMe`^>Zh@q2Fw-r!Y~e<+&{Xj)62e9q=9l*D|I7?k{S=dy9FDUB zoXGQ#hVVkOJ4D9zB*zV~I*v6cHlRM_j380SJ%VHHwO~~(@|tC6rdf}(Dq8^K@?QHs z16T^!F`J2fipxqFL-{|D{q@b~LJ*s;u8k3b`3Y6Q%lN-Sf%*ls`LwOO{mL;WcCWNt zBDLsQTMqhkbFO~bH@T;+g<0zE)*0cx8)t$%PQ3SMjyj!~uR(%Z`h7r5pN{~BSwK94 z1gBD^ir7|28uIKF=6XE}WdZx9P}Y0Bj_sltwGc*v@D@_PoZ5El1lCD2`U9e(1&iNw z{faFb;-y2mIn9;sFVOCBpnhvFoJZRR0}q{WHLd+JT}bYSZ}K6f5Bb9Qh9}QP9!M#m2SOyjK$vHEY2R;KlnN8*waYfJD)JeP~Iy*<+T|#@+4nZ+H+Fj+TC6 zg;)~-&4D+wBBV)$IgIfHaIyzsIc^730N}o@PmY!;iAo9w2E2kK1%SXsDgfjtN^J~35rJqzNe&!WAsgnnhHd}(! z-m+m%tIS1tTy(cZw{%sRFGFl{GA3F$>jYg{i@7^9kq+0X@>Zb!eJ z;Y3xZMuw+1pydV^&?-Ca4u@W<%L>i%bnP#>ma{?17PxKZK(;-v}{G+X~&Q% z1rAl!e@|1fgpm)9{^MLl;lZV>EE@s`dyR!q8+(n7kQ=)kJ5D$FvcG4W;Pl}Jhx6rM z^Mkw`xk)mA4A%LNgJCTH4TH)5N6b{U)lt+@Kj1Maf+YJ?+BGUQM1+ZlI@JU!^OBMK z(7^@s;m0j7WlR^whooPn*F$?W^}WqIVdyWkbbWs1TRoWF+cmw<7>{K)TdJ>2r8~`R z@BDRfJ|Fzl_XD$s+%Y#t!fei#85qMUmrWnTiY-od-^YCJaz-w%N>6KY;vAHskd>Y} z(Oqm|X@YjP!-|a-S*c?Re~zY0cZ6Ws*r11UChOiRurft~UBE**)nH^!*+a*pV$|s5 z&Z!chYm2ck8L3$iX3vrVP|&&EYUaqjR#uTWiscI=f<0Ir0FKtuQ-YI>JjbC#u=gMW zg7?KLh9c1|(%pU{y zg&a_2aExARx+Vr(j=7F3R|)#7D^kThpk&WF+FEM(bjU+z$zG69r4R-$)jpjSuy8ro zZ%(p#Qz3O45d(-)_R16k&O}aA*HA+!)i@1rhB%|6Nf(20n;56UjjA~L)lYA+l&>z1 zyK#SUS*MBoPF?S__OKLE81f$XsY$YAAl7l$X=dpst1eY)S>|hlkSC{h(&3i{KC^I< z{d}&92=Q%P_skaa`GWpA( zjAex*f%)$EMKyv$p}Fbe0`$J^SyJ`s9Fo%FD;K^&w2$g7>bArp_#?>u58wR4N^sND z9|92unieLTvhtOSmckX3`Y^aLa@WylAiM*QZVWW(_?TEw29d3c88C^<^U?2L6ue&E zCyts+Ztl2x25=GDtx_4&14&?qX**YX%>=}Z7E3MZmDTP%*{t}>%>{QAJRDNOO!;Uk z*#eWjJz}~|S=y~JE(;P9T4h`WJh8F4Dwu`<3D!rwD}382U0|Gx99Dwg5g6KkbtNKn zp7?~m*H02?62%a$i{0R#ki~*=jNL-aZ*b^Eb_>a0etS{Z+k3acjd_nE*}#nI9f|AP zguRdM64Tjr%Sw-a4;U=fJJ5kmX@83EbNhUIKq1ls^gkjY_{QaR%j6O8a>QVU*!v%- zW*vgTxhK`!J_2@qnh&@ZBjZQDk*^0x)|~55UCG``?~>alCw>k|^X*lGT~QYkbVozi zs#yY#gQ@+SUh~0ijWXa)PNEAk%ny^M>n4_GAICfBt z(4F|iSi_$^kyA4hp5Ss{XI9OtK`rW^*p6}bV;3z30#B*Zlcj5b{mMaohMbA~K8(+h zZd8Fsq|6v+vt^geRI(=&Az@;q}Zxej$fwr*ZtjzPd+M`lXzlo=e73IP~(D7p@l);dhLL9 zln{%oL>Zq>kP*OB1qz)kn8R|?yxm75tLKQIr^{D+-H^fXgk@3RV#8wz!VKM_njEV( zb7G+ks9lX*v!p&Y%UNFidt{qUy-pel0t6%n_Wvjo{0}Zy0qE#t;z%lJ`X@|^SvWd5 zE4vu}+t+{l;b}GPzoxf8O6X{5Cso_sdsXS_>UMP_B!8EvKqM4`bxyP6sY`EWC)1hj+1ectI72bP?{W5)$fW*u)c9~Qh{ zmwDmwc7!3iKRRcvMXg|7pzE2@oQOiGUl<96r(D`RD>|K8DjWT7Q&dD8^nGu>DE`XI z+=eFLZ*~;C=%ufnIEu6TCAe2&{765E8;eu=gFG{OXZ{6CfA|S;`}3~ch2BX_4X;%! zAj6qWXE3YokkX1~@j8`=#C);ErX##*>_{fZ1%qbI_+f&|K=3FuAOIYAZ+8M;S_3Li zQ|$zi7?j_*N-Tdw(iwB0g@u4o!{(czsGR66cS9Za-CK^aH^oi4E7g$>`5l}U`D)Am zxBuf8mK(poBt=kFmJlv%agw`rjggc2AXCELeLx@245(J5+D`pD;-dQ@$I z7w^%l;2r|=HBooYiG&%bt2{3+jCm6eTMVDcc|FrJpVtAejjuIL5`iqyrWt}X)5J1& z9&W_J2zYHMqryCf?1$%oTF@ziJ`^6&I%qiWvQtA0;lvCne5Xr9r)Cw?sc4Uww{It( zxxk<^#7sh8bsjUhq%+Dz!bNw=?-(+pLJhjDM!3}EX>!4bLDr)zOZtB?dfYo{MfXP% zk^Lj1g8xHC|CUHjf3sPf{I54ojD9-NRqMb)pn(%0Az9GihP?=RlS|1^CxFNvMr*D& zXSH}uKY+Z;^~8yg%?}~;g)+@-XBYnfZD&c{yq=kPb2W8!ecYX$-2pkaXMhf@+igRW zUJ|vC)?%$ENp8M~@YL;4E4S2+l&dCJX*Zy0C;k(^DRR0Wi(X5v*J3P5ktle=prA5T z<=qqFsPSe{OkpV+yeA!D9sJ|m&1p8gWYTgYEVJm4_ao&rGs1|H#gHuq5|tS#Mh3_9 z5MLHg1q0&dwI(;3WzTBDr>VcXx9lc~G*jwm#|i^CHyUt)#1%1Yx1eW+1Z2IplP*Iq zAcO|yRQ3XYAgQUAMKqtcw^Yy?vqJ&))S8%W5`*}}@dT}11f0K%J@EFmme7Ys1{H^; zxjZOxc2-228lt8?#OM*>I!6#1mOCq>DB8qEj@PaRpW+zzBAKs-eCp&}~)NpOsO7=88 zP~qA#XV2rKEYv0?TpOygU?Mw0)vxg;mcWo3ir7rin3%e6SC3lH~wYOlZWaWiH0d7kF>O_xR0ceNbBe z6RhXX-^kw*B@NoY!);kV#(sJ>Sd1URh>ex?6KvHfR7H7KAw5#8rOlFU+*IJWoYXeB zOLArYg2M6HN9OANWG`bD8g%CQlgHMHJBDLce$eokw$*L_#U*3JTW7~&u?_Z);V%Mk zaI`5B|73CfU;l{!ssBC!LMEnmjwb&_n7UF%F+=>cakO{mBwG+F7R8~1Aq^slU_dN3 z1hjF=sayT!on| zR>ImnWjxJ13*zbhHB##Jgn-68SP**vveOxa}U^-(>SFhFg6bm$V~kjkJJdQ3H5 znQYX*YX-1lFF!56$QC!VRlfaz5u|Ff+DC+f#?w7rK^z6*QF}slD_PVlYNKuAIW^@hYBd&-?B20yrD6(cp zDE{KzC_m)pG*UdUYqzWP(i`>)dh_3G3YcU3E*Spt8r19~>Qk5JrldE|7=%I{gF;@w zxo}IQ6okLnAkxj3MKUF7yIQZt^=+pHyLCF+8?=C)r2DO*}td$`J3UWoA1 zd~Cn!GS(@`4ET<8s~x`1do_)}{M%&B0i%LLK5e_Um$P=E40<&8vmaU3jJHjK1M5j1 zqE)d_`C}yvCR(?zUL)xhM3js*kXg> z9iudW!~K>WMbgW+T)7BPkN;38wIzen>Izc_=W#Bgk!@!2Lb*-3@@Yfk|mLVgWmfzSt|^6@@V3H#m-& zV`wafrSc(EGmQU=A4W1yvW$i^|muxg)swi=Q3A^Zfn{;wv;CF;x0)}OEn^6j6TipqcAsR#p|OeAfc zOl+MjoGn~Ul${+dY|Z}s%pU0YA6}%R{6_@~qJEgRIu~0Pw|tLKQ&98_MAMhfNFyhg z#U`aXdsPTwGUncxvc0go<-Z@sknv{Zd(G|2TH6xH!!#NgylkK1-1&1g^85O{LmD7( z!_$TY3Lx%go$cT*!5!@Q-Gop6(e}DC&A_HP}5OQ$3c{8Dos| zeoqM;FVNTSESSq3o>75aY#PK}mT>+Auwv=8QSN>bu60~xuKxY)16jBRL*`zfE7dg6 z%1NNJgqe6NQFyp8T(kdU=cV_y=J$#CLP35TUU87^D-WFLY2HlTtKTLj+ebgVU09~9 zng2%v9PM4ixEARo$+!glQV-!{Iw~x^PvgkAFR^?_CipI2iX>B`Kg)Ac0W)dj!w5t~ z^)CwABr`ETmQE4s45;5Yny_Q@vsYTKQCiYW$|{At{fli%NG1!k=l#RX)_wF{g&CO^ z(|E*&iBqfRJBpTb?R|G^4}Gzn@GE*Gvf$Ll2mh20~rv@~T2Q^SE3 z`Th_8szvV>y^2%+34pc#_@*7{|NdE(wzYG!{aXV5{fV+O(AnhgBYLHA=7y?@{@Gn5 z%sLHbL^A(fy8KJR%tBt6A)_$(kU5k=nsETLd2y!<47aL{staga%myvBtpm~i%-AW1 zk%3Goro&E5&cRpySAwVEUV-k`ijGESr#cjVPY&nq2e+T^TSwigwSJyI!9c8T+XI;V zt5dcxRu{Ai^kWgs13Rz?8k(K8S`WgLkan!U!I_&jY%xA$XI!1SPDhup8edCvhM2sN zWY-*@!w7+9N(E61AjPGyubi!itWns@zGe}=UrmF;dUN=*_F|8T=XFOSD+ii^-waWd z_9F@eA8a($tB{lc2H4;%%cHKLR9b#6LN>dPuqxfU4mw!a0!!!3ENw@~0j!NB>@V+0 zroV^5gtRbcuGq6OSc?_*F9yBXu}k(^popxbw|E%DQ_j1Td{_y-F1tVnv1v>C5P{Dm zbKuNFO(@dUqfSzFOPN$K(ntga+(D$sJ-05mG=p6pLaFTvp}WKjc-ZJ-&^Xi&8Pe{p z6eFW)^i?M#!whU{(bXd&*)B`c2B3082D=$Udb)VEu4EP{M6_r_(=8XTK|TidBYutP zYf-wQ(qp8|AWm7cd^CY{UPSw$sf}6Va(62oM5{yNfJKj?u~6E%YBiI@QeYVyKm*S9 zrUl*Jt^G*hJe$H;gWATUF`rgIR-tdbv`mw|Y`L(2x7?(&yllIwI<3+Sk|)^@IdMc~ zyH5~oTKjA0aB>tSl^Ec75j&>h5!g}>O>Hrt>BlC7O15Lm{ zr$#g#vbF;rw9J`l?#9phW%Q8;m2oXuRRW35ufJBxgfj|DY^>%a&LxvsR8UHRMHWc5 z0-XUk<9N)l$wRKraj10ZS;cBI3A~q6*~p#ti5P4{o?OLFHa6wi>Tys(&E5(ku+T)h z?NAmi8~H!os33_?#bN{ap;?mE5=npClZsIxYb#S(Q4&PK-~BQR@4aa<K*)X{fM|-3&!Oqq7Bssw*0N_=xk+sfhu8Du zvTra`t>#_Mp2%Z9D&UQMJ2@Cv40YCK$YI&n@Vh(m7NaQ$F4e*`b%NQi(A-W~a zDOi^vwVq#W$(hr5u$^Y>*8U|!^gM?%(g>47m9O+HNOy~ylRE*sV4^+V+ATmZ81a+T zWYad2(?*R^NWEw+LoXAcB)J8D09D`8sjp7L5vBIwp}CLNCG{04lBrye1)UogMg{>S zbI@IPw<|06o473GrXmZAr_#qT=yqDL*Shu0-me)y>8^2l=*|>=tbV^6eF(dg8VhFG z)F%RNZOJ=@3FFcjDO|Il;lrgF89T%bq&EU1m~FH+&+E|)5p)L_y2;DBDV^sy3kD3Q ztp}${@cW9}91l6NC%pQ6#r~WMS47Srs2PS=pgcv+fcZM9%0eA(AE?N)g*YPJApOzgVafYsOOdIH@>VPHIYIKD*k5W@ z_s;t0R=PH=>aU4vhu78PTxG*fTvWOq@akz-q6~&fR~|%GL*@1=a(?~jY%97Wt-&8H zLAYrAk(Ifv#vyCd>FGZe)&RS0LMUq^WQuJ*z$E zFLz141^yA135wS#=_R<6Oj=AHSu>VeXxsnD#&6W+}$b6s7?EXn}98|E%UE>swX zme0EP2XzS0SMZOUX#3Z}ue?y39Eb7SAf?5*?77fvA+8C4DlpVhlSdns7ocjh2 zz{D0+&#JPLKv!(>J}Shi_~CKvS;;4K$dDNaDc|VgJuh)j5%U?1H$~6L<37$CVb6oR zYPZ5WV7D29f-xp>=#mI#6&fb2K}x}}8{?_M-@BlW-SFXC^m6`rgo6xz?ollgLhID4 z-^A-X2*CpTFg^aZF4A-W!w#|-#V$2)eUsRkm@}OiFVdIttLL*NI!CP zlpdzPez}Bs7Myp{SQq=J#M%o+H59ESrv^Q>n)IVB$LYCziY_$PW z3we|LY7m;#8nKD|2@HO_otutrRoa>U1$Ds#UV%+98ExNzA$lA9j&hEwt4i{sjE6iP zQJq^M8^k}h1fPuaG0%C>FWHc#2MZQHhOpHsGtuey7B=5~M6b7yAV%$2!v<&P)c+!0Ug zC*Qqygm(Siel@;o!yYIV^^nzmeE?^19@Mgf^&8{_-YVous&$;Nl_~}hm-elK$80{g zXd1o;orWIQ1Kr$EaPdT(CH*C75n|(f%m`Ml)D4ME(oay(jvlS493&w-AjV*5hdm)% zAR!R{)&l8EcEcz7Hi$s95VY>lhgy$HqEY4zy3uicLpC`a%HC+BDvqc8qj@g~t$961_KJwiD5^7 zP$aOOe6krh9XrQ`z6h}-VtztV!UQG&p_^V4Q^NHEV}1nY%MFr)`DpO6tc6qq5dL~H z!G*{M9eI2o%DcRVkRbX(YNr20;br=S&>ZuvJb#A|yy(f>1#@D4(G9e2D8JMdyQZzq zEg>!lfMC_X%)YgC(Xz5PW=_=H1hg z*q~Nt|8VH29sWrDbI(+hfaIL7OBp5%UL>x%jAr88Hm%tBM*Nb4sx2)Y~1T{yv@y$v&fk{D46!69~j>NGh4qm~uGs}{RG z*Hk!RHb%aa+r7K^Ic7k6(?XcWUpz-^3UUs_nndYS??Y zCv35z`e-r86Bo*t_q<0;M$0tRwo!XipRlx=TUnxJ_I6Q+x8Bg4k^a7H7I|__bew-I zK*nJz^5#{B0=*%6$*p2DGuezKYq>2Tv8FLGpOz0yTyFq=mz^Ip-D)bN>OIZz2*_Uh z%aW$^Ro=*cOqd84+B55Bi#N267(9YrhXD1C5+Y2@Q5=v!hXo#rM%f=wRjykeS8yZtNk;NqO=w*f=Qfh@=RX+3<-^~L-;c34ELJSLVi4jlx}Z4dnw87YYq4~ z$B~;LAiz z&$!+7_U5J@#~&UI@DUV{Ki~M}Rs-A(rewsxnXuPKtqv_Xm=2Z)%C3&?0430^gJCfP zS;c)-_;C8Fl(2>^?LQYp>NF%W2oA7nk|-Z~4`F1&er7d2b3jF(T4YH@c+h7}??VyZ zd^m&H`dHK+0(nMMjJ@AxVjoJQoKYSKpNP)d*7GMz{~#ECmY&ZIPC{jiuf-ro#fg8b zA3~`x;)u{8w*E1;pl&TcWWAXDzQg@%z*5Q$f6Mgpry+UO3v3AJz(-JnBYg2G8WdSB zL@vxT_jG(T%`dSKLNSj#%#w>P(ZDhIVewkvGc0k0U=FjJOOH@eReE=1JH@;uhMU9p zl~t?;40q1u(5XYN0`x;o!a2kr;jPdbJ(tCCB~V%h+QVv>;`46RZqms85Pp#i@Gme1 z2|8M%mb1VdPau)cb&+l&leo>Qz$&n$j8d@XpV$d-U?&CM#IYQFvS7x%n;T*rTT1EX z_q9b6l0ZXBZ^v4A#BuT5%;&O8MmR$4_pLD`;L-xO}zH(nvPC{9vdDF;RzZ7y}H+7tr&p6{QJ= zF*$NoN|R)WZtm!)fryfqus>z%!V}t+6iLXs-Y{+4BgG040tQK+4Fu+_CKYxm3GS4z z0Xomdgv8-`m(@caS3)PbcJ$%*teV!pyS1j3Z-F=6j|eW2`*pawR*LU7?7}Nb;}Tgz z$B=jhq~4uf#8fd^Q?$q$tJDOEaIZCR6D}_!g32%#)zGT)vQf#h^7*Q1m*c5jf}yTu zFpW{68;xhGIZR20bzu*U?mIs7g`^#xWORWFir@{mPE04DW^~tub^}_-HSxVU zY!=}IlyJESg#F^@y4a>!r&ak{z{?xLblyPUbI*@bAlkvwf&0S6W$(*D%!^HjXw?`4 zNB(;l&VZgBr$u!oaS~H@6J?INEdwPP;#DII$Grm2MX4ys-RrU@^zQB?c31jxEL~EZ zTxdw{aU)d+@&wV5<-5%8(^v`HEY-e2EfyPfUIyqCo##h;B`3$pN2I1sVGouOF8gn&|sr*%KW=mQQI>z zI|zsm*;$-KS3qgt=OO{nri&yea7G;`i^Z8>L7i{6TTQvGsmLQ?KhBkDy{M1(@!X7X zt9)qz-@4#9q`k7t5Rk%q%!2V(0PE?_(e4%FRSyo}K@Zv@g=LeH zdXiu-SI_|U?9aL9%Wyhh(Ab24hC+SMFN@>ic$<^VZn#z&Z~q4w)Hq6rqpLF(RQ5V$ z@E8bq$gSze*FS;_8)z4u4xaoAf#3TbkS~EGN0-6x6_yICNKCoy`?Z<~6sucRfLy5a zEYD=Oe47Lz^~Yvg;v;#=QSP@)^yomkg5LRL@=hqtFD(e#p)v{}@Mmf~F|{MBg+1J5 zGjIU0oGB6DITY&`^ySL=)qg#p@bJQdAc@ePCYCSadzmtm!Q8Wqf$bk05u$WxGP5Rt z7h}qhNeXZDHO~ix+vd^#R(AYxad9CSazBP^Oz(aPzE4f}#jzCkA zzDg`f_*)s&TJ}z0^!nj7#RN)HnNe>l!&s!a2VF5#AcXZF*jn^*sj94^gykf9~A_fij;9CL|&`^03c4R+MT30r3#XllmUoIrxUN ze3EKJArgs7QiPtsxiPGB;RopDn~4Z@$5Vt^Or&J$l1HPO|wWgFM`iTV`%2f zSyhXeR58}O8BG)cA{yiDKi3+UkV3+U+R5d8iEcN6k5 z8N?N~TGz(4XNB)c^66q))ijeq=0nZ#QqfX!sl4m3eF~D3u_X9DhLFkNkSE>xrH|?L z;Ci9O7MG7wTUw52Bk0V{IEt}I->S4Uq+|y7B~S{RT=|St8QbgO+{hJr3YhgGqtpN;^Wyn~yZ?AevOdNX8R5WeafG`{T>arSZ|ykhn6|3R2X_iAo%oS<5vame zP^m!Hu0$m|KkmFBAOC8S;Mxt3KLBZW7df!mxKB)2zt^-&kp0Vp#-#zy)Y%qs>XTMG zmOZ3l?(hhruV4S|eVmpOCBfxwZcBaKZS9 z^Sv6G^rZA5ph2&B)GRs3Hj;OK!D&sX#Fe(%)B0m~6XCnli~@pF0NPtjoP@00TD6j1 zOI8%w2?TZUij%%|Ezz6mpTms@a|BJbSy!bl^o+uFrt{97eeqYT>Os0Ov1A#$`_V1N zw(iUN#|(bTO}0eMM|%*w`CQp}(ikW@K}}uf=pKMG9I-uFygAv`4||sk7x-7v9@CjE zhsXD|s{r4%tDVmmpRbq+&vSacTblB((nX|{E-#qDGyWNBSq6hH2?b^#eINn-2rkg2 zaHZ(XOSkP%9e{axSAb1UOfq~fvooG&^5hq`q(qSo;FX^klN2i}o-Gi3_bOn6`7&yp z>Wf`js|M$#;|@{JO{sD2a5)<|XvPeA>Mb>c3wd@VJY=uHp|R2(p}&ti{#5Zb0KrM) zfokPC%^W3i%LwN4NO$-r?e-tM-cAOVI>{MhsKt?;T3oG16U7=ygWTa~y=aTwuxG?0 z^$-l$d(AGxazE)Ntu&9tWHsubz?R8vb_l8`m%n_sExwb;C93BD3k*N(Yx6kZ^kUG= zifcoxzK*x6mBEjzwxMA9SVI@B$A`i~q^gsd+HgT&a9O@b`4b?U-$Cq%mgNBfA$+Vt41Y3aRVzPAtaxD+uJg(~ zt&t40VIz9m-@``jjY)|dEx8slS?Kb$j^G=Sf?M^opjOGfkdNhZ-urYduq`gP-EX|M zSd>05r_!f0Pt?M_A-bJjXY%hGhN<;X97CL^%504q(q^eO_dZwnWx3CBmIxa5Xa*Ii zaBHaMF|K&B&v7UIh`7ISe>Gii%6QOU@_VwQ?IGtX3iu-?Cs>Pi*E0FO^|yI>JNTU$ zcOgqr?>BDaQ`g|{=cOB{i5uy2Mxo*v{5)svRf;t!;5eFLPXt&{C%tUV^5Wggb>fR= zwP^6YW68(_mt4GJQ*8BzQO*^iK^#g}iD7XJ+nmwO+PB(gB6KE$Rce6Dl58Uwb|$dj zhyyvS;)L_LKsR8k#g*_6a;(g`jh@Szmk8`cOf!om{^^FOj}CzLgp)rflm?K|)$(L8 z@+l)1omj@XB7jO_jcX5KlKlE`e4aZP$f@k#n)%SzPEXPnER=R-C)d?RsN}5Py`_Zx zr>giGj_#G&xC^Rj@OQcb;9cpR!GYJ&%l9&#XZA$KK4K={!?oNdh2<{IDDsEJ8CSe{ zmSWdWw5&jKl_C@$E3q^@Os{jh#5{-b;6H?V`k+wca#1F3i7P?j9sy&B!N13(o3}?Z zJH=sB5>1*AG{B@gs@AeKEbN&mekU4TKv2o}wNo_3+F21&s3^heYK|U*J0WH7W#;>m zsJA<#^g#76WIigP_i89G@kT)VsOlMct5Kq%sa`& z`%I@$6X~fhG2etEm(bqN$AcRVKab}y;$yy-v(slPbVijNa@4HpdRrOpA#}Zq^-w-- z(ahOp7@R3qSTp1bsG};+3bLW?LJo5EijXX_mne>~s$B32{cyzEud@dW@qA39mxV|{ zL7z20K(PghtJDryV!^Z4r;pH+>u|+#d#bvQ`>xzL3=Mq={(0ao2f!Ltbgd-0kEtm= zj7KCEZ0g#1b+pO#F#%r7o3MPdGI!hZq6RxGt4b|B)7@J?8ZlY7Sdud1nyyK0$|E` zE?=Z836En$-4dm@u)?!#Wu!9^E%nBdIdx$4=e}B>^TUd*hu=K zc49sf=DVYy9tyy<+QfuNkn(~kNfABVquRD}aFtF}R_y11Jc1uca(5DNkm>3+VgOd- zs;-H@(}6ZoKzxNwFeKUcRwk zNl0M{6)O^}YfTBdNVKiDV%^qa&!Tlk1w!Jlnk4NjKfM4K7*E|W&%)_HjAa8^KVR$+ zvAR5C)Hb5zH4k#5NV>r}MU3uScd*QO6{GuBcUc8Yy z$3iw)<3Pa#hjFJDx(i4@Gt5_eGUz=DBWMV`lRXEGG!n>ssq>>AiN&!Qn`D^C(qWhw zR{v)6@RT#PDE+CpmaRcC&`CPdN?>cY0?qXLLl88#nGG#8dvn7pn=5)h5y!?Zh2=3Q zwNxTSLCU~8_ytCV?@k$maGWOdGVRJQrAI0SdZ&j(C{=3y71>$9RaSyT#j0jfdAo6_ zbIWR|m0skr0svJ?_&ET8P3ADyQ1rx4RS8L69~z5t45*g5;Oo+r5lbZ+(R>2PMVqz$ zIA?%#kLhF)fequ?Jv4?|W!_nMN@cCWOx^S>=|$+Vu~n22N<4(iV1iTS{541=9CT&Y z3QrPtKh!gTMx0g}9gX(oc=VYMCR5NKI_?oY;JbY9}_z#wG4X`6Qj!m9zgLmDJyn^{3>Hu z@9(P{x{xx@#S%hrAD0!}K#j~KClG*G1Y$L)VOW9#A%v9BNaowAy_kA2i#y;r6RpM< zIt3}i z=9B_zP&K6E2~T|zAFvOg@TJc0Te`e`(620jOIeg0d1@ma(vV`E@t@oFXGC&dL8A5N zF>d*DGZ$!`hsOj|>VqRb2fLn;JOSZ8sCdt{b7MUewb@2EK!v_QU}qMhFpk5aU)>!9 zbi-go<*1gY%0{iMY*RI%a_kV88B)(1$J$cN#{$9CESLN2!|d5#QQFG{G7Zvm4S?#h5k zp{p4}Z#68>6^2O$lt;qB(9h+&K4?K?tB8-^Df5U4r=ONa{h0O>$5r}OR69y**3Ltc z7C~QDk%wp}RqAvq1;*ORpL+GUt!F>~w=&`jXzW2tUGNFUL1;FuIkw_@@lhn)Ak3Nk zCRzD>n2|Tz0Vb=GgB1v@9$S9cg&6Z z_qLOhL@_Al6$Ur7R#axP;Lzh#NA(Rq2#bL=N!5b5Kll_@g-n>!NkC(unm53F`aRLc zo+c1kN)8J}k+LQrXAD{LC}Bp||B2^(RH$;%4K%#$gf#%4GGeXE)KXp+ec<#d?PwA( z57wiEd1pax9eIYVfOOa#xfWH=y1^*wl9cs%1w0Iq7wIV<>Trp((0~ua0^J(w{=J&P zx;h}LE{mF3)p>ylNL&{FV9156jfwZWfq|3k%5{4_u+fQN4_evz>r1rKy%TK9|na$W!1hz`` z>SIUq2QM{~tbz5%&E!&vRXk4v%iygfu?tyz;7tlOmS*v==$+Z*1)O4&OkIgC?MY%O z6Vp4%6QFBajBR=b{gTD$M$#fJ+N9s-LL@8&aDZ~snV5C^l%+X2;9sZ{Q?cte8${xv zP5OnTH6DuG$(%H*z7G|~!Bx5S>UT2wJQ?7;oT1vxjF+cqc&y3AtiAst(D5$wc9@P8 zG0c1i&_YA>B0-7Jy(rgMD5 zf#g~l4~NSbbH5AFLT^y&!JDPadPpCJ@DUH9Y|!Rj4JS}xpODF)X?RWE#*rS;M9$S{ z<2NB(!69I;&7o29S#z*pr7JYRj})5B{g~h4 zXnbW>4$&4voP%6mz2%QuHAaVjdR?8E?k;e{A-cvIqqzD-yS3PMUsS?erMghf7SU-E zXdw*B;z-r-(IrZ%z6UdTUV#LQWLQ_p%a71^mZATKQO@5b;hu7qWBbv84=7md~ zq^O{Si4iqcD@-@Uh6je_+j+qNtK0ufBauZ6A>=BjiNB2J0#L zOT5j4FosfnDTm^mo9u<4S~bRn-+>g%GGNWfc!Ic}f${Q}xU~1`c-Yy#1Isz=ajgiZ zL5CA;28~@bxV)U5MY>`{_|kAR+cx`pi}<2<={hoGi-7@0ChkFHF#d|8EnOvLH~VSX zo&;spswVxLKi-PRmLK!6$mDie1b@)h(!fOQeNGYND*wsfq=QKpRz%7LyAk|35NBaiEd|X z_zkx7$2$)9iGNtn=e5mhT1@VsIkMZhvq_Xt-L=OjU-I4RH)J7*=S32FmisT#FY-^5 zvqjZ+=TfByu@;#Y;O@&@kBnKOf8ytAhGx22jyY!&ta6=C1Xz6QVRGFs6Vh#Lg(gwY z3%Us9BbV$B6T@W$=o&puR6WktOD)%`@Xxk28?aQc25)D{MRWFOBPcY(pFImjT=ycZ zb_`HA5B0j@?>9c{3h~2JOI(6LSOPLCe=ttaI%P88{2k6Oh0cGCzYk-IhmLccVGLrp zvz#<1Z|PI}9bSd2lCWWEc=O?3mbB)C?$Eo7w>=p?Nx+6!k=%Q*kx4HTdExCP5RYX< znLJVgXDP0;{qb;y0a+6Ny(p{XHtF0B`Q%+>AJ~tOI`5}p-8zVYrqw<}a<7nVp6XSf zP5K31g;^%ZeKDD>dyp2FNm1@JocCIBoG zaSifT!L@F3V*$0ixG<%toqZA$V+w+shK%uifn*{nfmI@npppi$qA{+Uh}LO8rG<$e zHIc!zZ`TXYe<~Y={by__|8;gHKwk$q+2se{sbDlG&y)AYm7q$)VXAMAM!0RMHBy#$ zWxscIa>Hyqptql*K-f;Ug;Pr~LiKHs32Q1k64Z{(t zYl3{6HmsGP0WFLd!$7J=7_L8i2Ge#iSrJ=6C6P5x`13zYu?#o<1iB7tQvY=6uGCy> z`n7?xxrnIH9e5RC|Mn7hJ93@Lr3#t~O$i6T6n+rHlil=34I6ho)t>ogir_FHE>m@=U@=}uM zbgu0=r1$%4Y<57_P`gb)jcpTXJHkuo1DlPk9P-25!)D`edDiVvw_i*xOYja@JyrDp zktLm{7&d9s+p-BVv+^?V=vi4| zE3JQCPUX#aTYXw;$EwHJsI-FrVQ+`)Oec@)WX*Sp_I;=tgVO5t8RDSyAjVk2k@DQ` zqtMh-Sqh6uCQ2XI%&=pKOzOTPeSY?FNgI-sjC;?q+zNyqjhi0csgz7KWvqx%Tkyvi zu*1pT@H9YnuX%~nz_Qo?XKXu)es=DlYZOLlu8euJZ6x@5zq7puf=p~9$EzAH+x*<> zo*>b62(jj<75nk}la-sLtt?RTdzdvs_b`crPWK~zLnXdE7xyy{4+v_w{jb1oqS&0g zYLuCx^(s4_=K={5{d2o+iTq8z%n2jlV@oM<1=BI{%fu=J8JefywA0-n+Q&nLA07_n zNbP}FZ8)dNYH%nq>&g%oEX7sgfB-aPDrH+?W^2(CA^37Jw9VYa3u}!Uk^3yn1D#OVr#m(CD_lX#WO0ofUV=9;PO zta=>|qW(q|lYJM$A3Y+| zIuXgXNgXDd^a-)@`Wc3e>vg;(jLs;goYN)@@pLzdX zcCq(uZq*DE{j`AdNN=dbdZ^GQ*AP5pUIT+ka@%9m7g7M+EJ-5)E@`c_M<$ib#%7B| zTrHFN&wd=%ErIy14xWCVcw}n)01suQ%1ftbqZUdHd|6I}L|3$GuFvt#3~Sw@x4_3| zotjw}aSMsz6h9*zT1nN@ElP@Z=*jqPagckn~M;=0$UDdzA6()KaRDK`?N*aK=#Fox@4JafIr<0_Pw70VIe|PhuqWRahF=-%_O!bI+Ww zSp@}xv%ebS9`=~VjX5gahvAD2?!op4c*NeXoO~cUD#op{pl5H^d5lCg1M144 zo|gEIqDCqn>-y}HB^8pCPHbhyJJfnsPAH{|x0AC?fdzM*VTcu%t^7mqdHu7XEpHno z+AH~6Mj7~q?5P#_=rijW(`KzSn?9@zbNBQvx4DsWT5%BjSR)d~2^kpNM=8IXdOW5> zlIElp`zx#D=z}&)2h1Qn8h}XLo&qdq!A=98XStvfJ%AGs=k)@Vu@ef7H6ZRm4M{;a z3YN~WT){au2fgCsr$|5y+!DakP=y8>r!+6Z4O9LaA;8H^DW6h%K(!U<-wtH1QK$VJ(I7;q^+_2n=~TbKR%k=pHfkfhtVlm|Me0?0l@i@zDrlkt(OAt$Sb-XNngiR z0@%=N7ekmA;Wpa^J1YeN_&?4+9({br!&Bnh!PD)fHP^c|z)Ot!?QH+Zt$^gWH%F`{ z=QiQf8ZF0_A#TxgdEcTpD5LYC$!>&*o8uRVER(x9tFL0EPa*P6*H1CD7s}VkrWcQ- z8T9{lQQ0c!1U$C&bXF{gtqVqO(s?A1cNz`78py2ddv;5$ebS`laDY+C*2A?7<3Lxo z<#{i<_9z+f8P+q}hD3(^ZdB4{gA}kv{Ad9O)!N0>$=JL^{R>oqrSv^M-+6!u{jeob z*|to(yBdrqQ6ihMhn0iY8tu)+Sq;W|_9%Zz+1DSdzcePe0lQ>%Q?YhsCnKowLFOlX zAWPotqNHw^Y_O*&!@=*@V~yV(?2+JrPby{MdF4Cctl!_ZDsT~4Q=tslp;3Hs>zi{%h|KjbaIGSoOvKy*=BILSQGU6Obp`~ zO5rl+n~YZBC2JI&js`o%mMUUo0C{`F5G|gISVnaV{4r*BkXGf&pRRM(>@{xVPf=oy zT#&Ms|AT@u)_*c~6zL#tkY?B+pi)ACx$Hbqx9?XGwlL9V6w~1aJsV}ktN7l!b$$hR zyLzeJI6Bw$4keHakud-Uh76)4(H8G&qKyKM75_db8w3V!(x$jZMiJKm-}!#&5H&M@ znvHIaJ$c89P8M1Ac1xA!zH`KGyUqTUd7%Rp!h&rWY55imjco*1*F_7AS9paN-&-t| zOEz#xuC%~O?%5{bRnuBX_QaNkE|}&nv%5HHVFlOB7F$6m`$Kb>+7M0P?BoMiup62l z27wt+W#s6izz#cDg;Ay&NRZe+#lo08XuOBzdm)a?2Dt@&gquf0+8OVH`f;SOf7JAZ zl-3=O>Nm(sO6A*%`CWrl$xq;oTj`d=Tjg%N;=No7!3ZyAe_G+xCW}e6T{p{6K?S7M zFJ;x3630!nyEk|$-gG<534|y{tfS&SSVdTNSk?{oxZQqixX*|@RBwk3C~*#c71)~% zphY1^)lMN~+{UYi#wbyQlanw3DJD&PSc$^>p<2W`hUH!MgwCsv5znA`V?gUX^dTr* z#;EL1_E77b3!BY5k@4B{8-*c51EiO2ht(v+rLpHp)PZ%hj8UVPOID*v7Dw#U`dBI* z^ujDE#Oy2+DnaAd(^%53r1W}r1JIcJ#+7u!2l?KKE3q-Cgj( zB;C+F8dp)C;)n8Rp(h0EU7w!c)^ppdK%it4cRnFPFnOYUL^EKV^8SeP@YlpUCSq+p}nhED4arT#QFXm*;E zs%*OR%{KcT>h$MTvjuOHcDCUx2zCEacy?x-k*cEC_$aj6p(PFGdtq3RzWbzej_`+Q z*}mil0Bpnmv|u=RU5GegdLV!4xxkPCkdtr=Aa6btfGS;)3&}jng>-#8ARH?0bm`YY zuw*rBE>#ruhB=h%(s&>#_$|tlGxF1_%%=JVzIWEej!nyf+lm>tt)p9;=t+R8h{uFF zivs#&$VQ$|5qcyf(Y1*U5m8AV3%z1UjS-q1<)yOGWblPTxklY}Mkjkma)knT$Ktso z?)vwNFwDG?K*{4ZNCMlVPXCZM zTS^I>8Ua_B5-k2yNpPs%4j*|oV#+DV$?~sd0Hv#K(>EgLi%=~o_;i@RBt79mT~NwORWYS@!7rrVqdfXbs5?~`{# z!9#yFG+zFcxnsQuN_rh+0#}0Xiq9M9=aCCJ9o41m0(=8R@g%rZw? z#i(R-#Y6Z9rEj$XhysX=DQ zjV||8p`4*Z-+nvUD{=`5 z_}>&&Ezvy8(pu@IJ<)~4L=~m&^^k#OpwW;B4#uEg z!(vDs%kVAuNVg1ONyHzqruT~t|7si0G6-sHLa1Dy2H`y|O@k+1~C zJ?kpy@~j{8ww}to;yBbu>e5m)i$>a_Ix!4XB~XZzhj49iyBG1hg;EI-++=`A3JE!h z_j9u1oNIv#m_TtYTj)F@&+sA}=I=>tl2voJH}p|y6CdZ2jQlww1#G1}H3i?rs`*`< zeU+~~(sP^du1gN#c3;`L1yErp9pH)WIczbW1+-La-S&cd9{yz-rh&y;25b#<^-61E zYeFC@L&T4KhjGM8{547&aL_AIW8xZoRwRX?!6di2q-P-8hLZq5)gvKPM5KgnS&~-| z&d>#tI3G7Pm?U72WFvC!`DM&$hp&N+09`NJeH1vJ^SB2Rth!bvaK_Rz#QY=6lOk#9 z$hN&=)7H1mz=KgdxVB%KrHA?OqOHDeUt+z4^bqI}p${n=gu-7*Pr9f+Z%KC{g>@M6 zz__5GvHWHQR!{=2$Kk*G)9*O~LH(5(tMU(EVu*{zCZasTh~$5tmX(Unx^Mp$tkLs> zIOju>30ePi8|=!u8|3W=Z?|0O_rFP)aa6s$9IPIM^F!i>5pDUbw}Y#9jKk}6s1&K1 zM);u#P7?~UGTEqsCZMvigDjHh3@?_ozf!^e>3{{7CK^d%LdC}rbU`bpj+#pVL(N}B zh^!S?FS*n5+nII%BJJKMMgnY-dxGAWStymA^ts{PID_G*_{l}q)LeAFyA1^KW80{) zHxe!gVP3@pj2RqFn(8)jdRYaHk>ZHRcZf&Yt2u+TL4I`_+{`S}Tlk{%-C5=A9yd=%~YFIv! zj4ae!&6Gg8*L{_O{gL!9DUv(RMii6ySktiWNvE{;%f`)=_&TkA7iP*y_HnzbOauIa zI@Lu}aTkA763{-!SgSj=t)#h$e=NIxy88+({?M&x>LK=|)R_8=v=TYuRYCO?zf~$u zI=~Rm-S#aG{)pcz8{KzQ-9rBoxmihRlui10&Y3IreTMZ&raQ^D@CoBBm;iZ~x#>;m zlzqrR&c4asc>kJ1^IY>Ung4+_qY-QTrKwz?gTy;^?dvlpz3E#rJtVnZV!kl*RU5Hl ztNg=F{QY}x<1>bR`jzeY+-Hd8J8_fzKE{DV@0En5_t*>b!uiYS7Q`zoMdG(X(q}H$ zBfVo=X_L2*p?&eskqy(qEW|Hw);Y=M63>I8?7BUnuS1vwU$<%ZTZz{f%mS3B9P26H zv1?|TugpHuD_+mJ5BR(D1Ub?brr_rJFVfeq_#^Y#^DUXu1ET1^&N<1izh~mARq5lew*p(zjC`Y5(#Y|6<*n=08G2Ihp~kpB_foHHVOh zx*Gu6*dzeD)x1<{V^v}kNT7?;d;$QM`mD!vLZZ8Xl}(&x+dN-GN9_B^?*%|_fJ8lP zbX=8_F*Kw&MhyYlk?2@DTXTz$pqtofEhsL&4qs* z$JYAhHvfe;BZCJ2fm9^_a;*Of+E1??D+4HW>^{j&auC_uaMK3LSh>MNo4{ z-xzr0esl%c9&-4}ak1Y0(h!T5cb3j(_JStgS7`Q@k&I2Ffe8X7GS9Re{lHGmjvMs@Bc$GYEVi&eb*3-h7o}OeP{M9U;MntK*d57uGSWfoz+qEw zp3f^mC1b{@gxmgLTJ&rYJzxTztC>I8LGXhxO9779jmfGI?+rG%=C6(xmgq--w6>hL zbdJ>~R3HXC>P7}V9O)l9jW=i4g@ou zp2}EBnyWU&-fBu_VKhQlDqCD|dIU~|XeX6WX=$(}*ZNcbI?x3<-+c=llKCPi*+QIH zrszOY9yd55gs<90IyDTsGe<*&GKTUjM>ac}{WO>hO=WUNj9MqJL?2Fh6oQ`Y-E;gp z+Fz$J%e$=Sok{s|kJ5>&qMs3DC9SUkFarqj$xV0aS|M15EbIN{!YxIX*Kcr(ghWaL zD8R0Gac~xVuMhU0@9+?giei+h!{`un-d-vpA1TgM6{G7M)Hu+IfxNFWSXd;XRyut$x2s(pxkb{AYyFAX}`T>kIfVTt^S`)7=LG01yQG8`uBF zrz^SPI(7*C^N@>nwgC5y?Mm6-@J$m0N+Hh4+te#{db(YNO>+w3uorI*;}OEC3OE;t6}p)7dKqwkFW|5Ns<7!Nbo* zz~TOEWG0=_SicWz0Dh4UhA!ygX(Qmvu)H}6WVO!W^h)KTRCd>fS=4rx?GiJ_i`>Nj z974XTNN*8R8F<3s^jLCY%JqA}2Vo_mp81#LQ0XSs8KK$&l?{t=o&XGs4{)F?qI6Z4 zO0gBu(`Wb=w&yP-|C_2fzBSI0h_S*7rTvCTsr5%c-zniH*Ip9qZhT?7Exr+9)~qQ* z|6444w^nYtwASC{_Bh~Bo48;N2~Np+Uqr$Z4)c^IRVj`O#$)uufHzmAhm%>cjl$U_ z8eSu^%<(GXDtyIAyWt6TbUl@&3L6F zSE56|ZV?)*c;&O6ksqxJn4kz%nU#vS``d+3$+wMZU``HTT0#C_iX zcsi&(Bf27TZTv}Xlub%J@gu(QSvl?~6$ZQViT|ah^DafjZ94J;>@V>o=(Fv$3kU#E z2l`*l9sgPy{8P$zbo!n||0n8-?!OzUPR7=DR{GzP>))r9|5LjCjRyZbQ*r)x!S(-R z{-?Ebu(dOGa56V`{QDg9_xZ~@Ueb4=r#a{7iO2Sq9pjRi z)6}6N!Rx|u(>PfXeAYQED7Us07~9Mcm{5pY)a+&K;klIPC(j`+ui7MRK%W_}Sog#J z+YIK26$;a?0%>IaYonJ_9XrP-GqzV~zu=k=O@QtVKV3USK`l4TG}ULm#NJI`*?Eom z%kxD$Ogl!1 z?VB=i!0v6H2c%wTXR&IrhSePiRlOXn}jh2ldfRQ#R5qJcbnko}oP|0qtG|Ih)%!Dd`>~dLPv>^07`GkU<>K&a@%f(3IF^f1WH8-U;o&ZmW{zx|!VK#P zQ^WTwv`7QYygR72Ii15aJ2*Ws4JfsQ>wb83^$-jqjof%uL3s_Wu#_|1S2e z0{>AS{%f)SpCkXX*q6lkXSMjxVqfyVruARP_AjIH_iO*Vh5x_U|4(&(kn9wkKRrzM z6NSg(;5le(Xie{&8~Kl9$V$l;{m8wotX}?ru${7#rxlNRoHQ`?$o4rg7G7lYsj(rT zUbt+MX`^d{Ec2k?!|D05boO!!o#gE&6~)H$@E%l&IF^p(bmA#YyYWF)2y9=ZUBxWZ zMed+q2M&keF|q)YYQ_YIRl{)?DB$%rsza{FFaE@&=M9*uR-bb5n>L!chlc~d=}g{0 z==-4m5{ok+Yd0m|LR#cIga3!}H#ho6kNjWK;J+L%>+iH^?C|gT7IZKDpJe<$8w^5`+$qu=q!r?s5`kfnsnnRgW*3P|{zIYoDou|v71EE*A3b-xqy2Wuq z$OzH_qX-dL2K4v`K`Dbp7H@iuScOqDm|@t*f500yl$})V{-89gCD{PN!`?))5!DW_ z1+$HImJ?!6QLe%)lsIMPkAc4Za7fXOF|kd#t9TmP=P$aQIa*us=J87Rj=arS;Z1wF zcll%^#WiR&RX0yhhbhWUSuGw2$e%K5M~DAeTEt-PARI9}ZJSTTbov;&XKzr^u7=tU z<7_w)QVT8#riTKkMnqkp!xe)_(maFRF92dMfrIaXC7cce6EIq%bKa>HuAGQe;twul zTN}_Us{juYOAI!5e0c>EE~rvo>amsB`s>wg)s`xMQ=m^k6-~uLqsFb-fkNJ1nj9?g zyL#B{KEZv_^0;m@*0Cf?!m3Sm2+rU)_}d_3?JKk#8F9rp zjxa*2@`DQq@V}+yKx8SOZ%kQ3zWS-fwNDuxCGL1;?s%?5GuXKL5%I?fuMkXIB{p#3 z1k;DT*6iOM*7%JZ{S|deV7$4vU}oL|QWoac&Ym8!U|@N1!E;&$wg+~rcst#i4MeU| z3f`!cjyl`+->Ot5h_r~yOO)vfM~0$4kNW7u3~`S2nlt6LhMLY#HT zZaiKYbklY~UtoDikiS0?v*v;p0lU4&GE_3yoSuWV+pIAM94La4*>&43H7W>L?JgU=CHi{o)ze{M@>C*~>rYa4RP%%tySR#?! zDq4K8qI{HFpN28cPogFTeXVq!wC3&~!?;h+a{O}zCns+YjW=g3u+Sd2HS3DLO}4YF zl98S00NKe}CXZF0MTbkODLK8Y9vk;6LOpWpxxE)pUG6(cO3p{cV8r{J7^&1ZP8KVL z=0?!-=ImG4eCyzsvchE3i{(OP^|C{ZPv;8{TwpUhYWuN?)`#On=3nj0R61qvK5~JD z&8Q>v-R|*C=JQu&T?x-J_@Hn%wvT%F9G&ugH(GqQ{hgE3;{9y2Rgt%_SllQBgPRGN z`Xkn^n6bL?$DgkiXSJJJmo>j-zN@|W`(@L+7d0{aKfU96QS!{-sJ46Gc+Jx!Qm z9-W__S@8bFkNahEr?pEyozGXS)lrkX@vxTZO8>QY(Syr7!TOQ*&(XV$$7%`85i%TD z9mV|f^^kS6dGOuQ-WsZcVJ^ybhj)zZw`J=6msj>IQCMd4SJ~jQhrDU&g1YHdhxd#t z^sW8f_o4VGOPxRE>%9Aghl?&BHPLol$SCD$rPyES-1PX2=?cgQX9B zW5fJr$@l^qg4 z7o2-Fvu>q{n#aYIBSl-*j`rPg{u+2?+faDpYpiBQ8iDNdLVwhQ(vRUDq~A@W4)qEN z_x14NT=}}7Lyo%-8Of%HNbSDkzyjttjvfGJgEQy421%Mpt^RdhrpZ_Su2cM zOG?Vprdk~DlOmopbZPyosK@yUQQrQNExIX!i!-;L-=k{3c%bF-q-*=K#2Qpj-?P;; zvr1e>9~-NsDD**j$n~9DtQz-!u@#kD;y5&Jeoexd*BfQFs$E)S_M-miH06r{ua|v3 z-k>(;wM_i^^VRiEX)ANH`xN$lyW@LiLCTzS!HbQO8oy-p$qorN@mjoizUA&kDv{5n z&stB56W5676TB$dz4xK*?{$@2gY!&{QuZ#Ws^7Hb;`xXpTjPwLH^`jZx!$@U_^Qr? z-NwCrHe@6}(D_<5euemBEC3T61Lo7{JqnBl~}BjfGzcg#%w;GgbkEB~qAGC8R<6YWib??cSRRDVbfUU$&Y zQGO11z(2**aN{3Y)078Ua|Vq&a(vXXTn8EZtkD&7g$x|5wwPZxxwpMxU9{FZ-A574 zhZi=TxslW)-db)d_tUN7=YN$~N~-?+n&P4-n)JS=(DLAf#gb*(x$z2_PIbZu@}o_s zKA>g1+B##K-<^~-MLLtV@BQA?M^x(fhmB(4rD1-tv-HLUZP7CRLz^YMSLDIb+RsLb zQZz}krLr^MS}L!1Hlc0Zl|1;9gqmWCeR-e7W~v@LMi{AE(Pkxi3~;77r>~KjpX#op z8a>MI;EO$d!*>B;3pLBol*-!Qt#LumJ{ImY!SlzIY zy{RqL=WSjZL_8^vYPof@RXK6>zYu9jx!1~LTeGA0RtxG%Yb+frdi4C1RNabsVRj4i z>3w~wu4RPJFIUz*Afs-VlDR%*j=OVfv9`Tp#MEt`;LY1w2BiVJ7y7+8+UwhdKeJ*^ z{@woO+|AwdtTxVDdEl^8Rl;~b!4;ATjx!Znr9yl70HlGUNCB-sIy@6hUqV>ZskP0$aDGpDDmygq@yEm-XGdp z{OliifM)Bzo6FRL4i0}jCFl0F*MASk#4fwr_$v6qXx-3XEjc$TE6&|K=cX6Bi*aXH zcup@di$sIO)SJu9E=4A;9aq`Bs47ot8`Ge;rD;>4ThiQbNo&^@CjNc-@=)V}g4dNR zekMAn-u?XJ>}$>Jok^_&U=)j+*+-d$k@RFRz0kX-HbH* zlc)ICUV$D#p1y%gLNy};{9${?#3pg^i}n%Vxo3C$1Ze}-Ro}4D8W5Fc_mTFnZsjSp z=i5wbuUY0enng%jcr$jnxjc_n5UH!|H?gTnGcU)@DnM-Pu>B%>t7M$kzgr>g<64^j z{))k+x0n8_k4gXdw(5zQ%g^n3)2Bu$GkkIg&AV*}$I$`-Drhf5?4e_r4J zM;SAa(lS z*w>H4`eg1*tGRgAR=3DCt^BR_rHskp**8*J`sY`N7~~9J|7=fu71Z_HhB3O&K#drW zU+{=jhlVlXSIw ztbp}Qqb4O&gN;+G`(Cd-{M}wvf&S6zo!N5(;b?`ymmPy&>%NZcr*%DNz?F^GbNwEw z*ylgX^l$JSRv>CQ_{9WKp?kCL=W0JoUeMd)`^Cv8-3$wb`0E6o>47GR8x>v7CZ{}1c1c;W)9|jPdc)=fmEj&I1o}p% znwTps8d$ygYdmeC=>+kM#rrLdH=1Q_jRr5fF&5t5c<|HH*0_D8`Wr=tY`tZ;U&J); za<$2w?=K7<7wig|C_T}%-x^EVN72cX?LFf&a}^%uDH!_AT6Jg0AQ(MkK(g}usB zXcQdp@=)wU%lO^5zotBGSt;_aCf-RmIaa^fU{F=A zWA5rDQFT5^sxPM8thGoNS57+Sn5(Z{P-VMl%jh)CH)^sat=~!%ey$MysaifbM$25- z!e?ne8|^{|$>rWJ1$7e+q`79q)*aic(&#o)^@oz@n|q0YCDSBso2(lBE`Rw@i7I#f z$}^GK;TF<|2W~JsaiMzhojPXJ!zo)`gGw*|bYC=m%3xh_gS)r-{+)c(*<9S&X`arT zTQN}@-lMB8Dm=cIxOa)(@fF2utMsni3|<`?;O{y-daaL7h23%2|5}x=XeB2-*eW(g zN8DbrT&D2DPP=cFyGAx9TrH9QTok6?KkO;bt{-jUVkF zC!L@0eB5=_NfAwApX5*e+OAyJZ+@_c*tc<$)=ACwFV0LIV6rN-?()NvnlNO2C&{&RkNBmKWE50%zLT&~=9sb2Tec*Eo$DkEEB7sjns zDf-tJdav)AhXJFI3MGAbq=i_ws(N7D8F`P~>oFc88 zq^hCne?2Iuf9a=7GEb&W{jlIi)!(SfU!&d$t3A77I=iB`#xPmh*&B1`wv>OodthjK z=p(;#?{++WW8ti$*L$RYj^2g%tD*6OGxcxFEPR#d`>TObTpN;ZbV1th?ao*w^Y^p- z9mQ!AXiKZ&e?1s$t6CT~ICF^0o&zF+Dff@<4eJwiV_C?oz~ftA8(W4R9N#i&?W@L> zafim4HN8!dQH|VKXZIjhU30dz$VQ8WfBfbd3|OTzLM_`OS}sz)Do52q$0R*se{$S- zp&#C9f6rD{s}8og7&(7st*Aslw|>Iw?OtEeI9Ri})oowkpc{&x>O&@_U#fDN9uy;8 zkh%8ihqT@gqOYww^KRY0n^k>H%f?^+EB^28L=~w+KJ;Gcm-`7r zso36n%2~gBR?hQ`^vNre9wYw#aG0jhW7#DeJmx0*HyUS@-4DB2=_ZsWo?7l`sULPI z)nx6ud#}fS-MC=jiA70CF?8_{WqQz_&fVXZy$w|0jP`jC_3;m-IR0=C&aH`_ugT*_ zB6lZ9^?ADb_M4DT#WU~3Y*TV|lJ09aD@<+7KnX4Jy|&-$2mVNt)5#xjM&X0ldJ#Ll zN6So42tAxtvNY;_q+dyF-?_<)W@IGp{WQL2tcZYeQsd)siCN*M%k&>Pec63n^vUX) z)u~&KQGd#&3cs?2p9381jRy6Toff#<=*U}v7L9j9zlR!Uwk}N zkCB9TsaVF1`uuIXE|}Q93GhtV@b^nlUR0L`ndD+pba1SKsaTXzsW-1wqll0U1|obW7c%*ZaSc z&=Y;9|7J#GnZUG*^0428~`eYU16=TLlF!+*vhy`@m(E)k}L7$e!@X9-`6sGIHXd z%P$MRzpQ-cVzGDDiIl|B@Yypa&zhoW{YhBEF7NoR>P-nZX3g^{UGn~c)Uz>K7qY9i z?)l(ifhX8#V=Rj4;?S-*Pirh?^pa?ANxd>)Q4U19XE8$`{|4C71{2K-Tf0{rheAFbX<1u0{7n!wwUx& zsj!YX^~pJ6LS1@Vo%WeQvWY8F`t0hRIKj+xP1V#PVe0SxHf813+p0Q8Z8rF|!NMV5 zCeCH;f0DnZgRyqe_hl|o<|!^V;r;jO7|yO02+;KM*jlsS=zh-q4;C3BPtVaegiX`9 z_A7Dwd+D^^AIf(J5A>XW=1ta1DcAC24QJNY6y+*hk=|1KVlA`edijN_+WVS5Ikk^< zKCfKq{rpTWa~60+Z@J~!lk1wly~)(wQUAU~WqY9HhjgEhZ^v9+Gi*(fl<=DEDN7|b zT1CnQn=T%=_=tQ-f~4Q3AKLvLtQV_?XP-AbIF^_?fVp8 z8CkVnCr*Ftp}lV>PPEaTpfKREyZOkbiSmbZN}tyZ^4Beydr&(4bMTSY8BMy?WtGQd zTE)`LXNYcJ5_vY~-d2TOGgAI!(WgEw*l(2KxY@t{>YK>$Q?8pnNKRT^S9I=kgs#H) ze!I0NI2m5dPT3v2-^5-zSiyV9)t1rE8~W9CO;1IY)H&onyQD zPd(b);N4W0wP;q6Pwu+eV@9|Lh$im66E?k{RIkA)sTb54F|`+73D#`b^!xF!B=NVO zu8yq?%6;7w6yU$+!Im@fB`%HG~Vi; zzhfTK{*Q+y4ojV#^_-^N-#S&utWYrEirI=~Ep^wQ?lf7IcDZ^&*>>$yAyFfq3~qWM z=(0kmFmKL>h2dYvX*;Qid>gw-?AV$az4r!aZWp1)#5T*y=7;_YSCp|?c`vF(FK9@A zW~FVt;oGFiO%t}7H;z@jf105jw`hsfzRXXh#mNJoPWmv^tT`iL_`r%V)uKKA zFNP~b1pl30`TNP}slsWy7ELW2BYnM5`Zv?)%^K6gIhtb3)qT?UD5qr6&u1+ym0F{4 z&V5a*&|G7aBIQ5lvwUfDXN*6ytgKmRp~oDP`1hgLD(1*tmkim(HEv*xV zEx#SFWU&AKZQ;y&hc-6Xq;1@EXLPSdi@r5$l{cSnJ?h>6>cF>)e|iWEb-Mjme69cQ zQn#UBBi2dX%kZdle15<_WqrRi@X+U(#h_B0 zUlyAERcHRsH$^oH_pVMjnL5zJ@6vTU-&4tp9=P-~X1qGP@6r3r7(u)FbNu{VQ=flJ zzND`9KC?D#OORD_nRtJ*e;4NNKU|VR+mch~o_*|9Y{M*f4adrb5+<|^tu6JJ<6R$0 znYO+ho?m(7d=5WX{U=53rwx@c5W7@ zZlO~Buan3El8JFU^v-- zOY`=s=zBaR6};(e+nZA|hQjNftXj(W?j3UX_PuQ`(dxf03hi{(cr@$1{)R(U$2{_O z-Escz7uiN3GD-7sIIadoTR>DosVKgT4b9Ng>m z{Mo6pSTDb!CqHaZchK8$AZh-Gui2S;j}DqYs#6bby8OLWJ+#Pf?=P=}2QdkIZ1N`V zX!{4BS^vO*{0~+vtUT;BWpl5OTVHL?Qu`sb+Ia3nxiqPqgE}YPU0e8CI^T1a@tgy* zzUfPTykV#?%~4s*-(G26{BNUC38C`Mic0_f{*GxDw+l6PKdyOibGhx~JyGJ>%cXkB zRz|Ds2+`1UVYWvHb@h7e))a2kbpp$CYq%TIDZdY<&vRD#R7aoJ=h5f>|pelWKCw{ zV+#WBP8hVIUO&cbS>LI1=A_LL?7xO#WT$5IBv)y+XK-!qLbLD8rL!bv#`m69UYQ_& z-eA*P2Tcp%2O{SbhYc7pwpaW|$5ZObRf$cnV|JR|yfER9fbc@K!yiwXneYFY`BX$o z;(qAnkF^^XN&TngcW=^upR}O~ljLst+>fuCSkrHn%BUS*ex2c zdB)C`FCW#ymW7{rs5CF(+tm@a(G14Bq9l*(Cu!rCZg+WkHd6TWmk>P{75}A-9l0BB zmn|?qb?o;rRrTU+XBb-x|2ePK^o}hE|8uMEvQdq(0dribykKy@otZZRYtGs(3Wzv9 zMRkAO#6wEusQI(fhK1?evZ74SUYo0f7{Gm&qLWcK=b6h1Z z_GuY-gG#fT%&p2puWjsNr@2mv(@~d`Sdv*$d9U$7>FuMs{_C|o<9~c?Yq?j;**M#S zlsTr;28tZTIe7#H1cSnhvV9V>_m1_w34> zqv@BhK5L)s-9Kc*u$_+|=a-LnsI81TZ+fKEee92d7in_`$xU(fncZSvaenH`bXV!# z)oMC3)PjD5A9t+2Fk*t?B58l|Cj?>;@6bacIpSDyaf zqy9QuC)Mbe503VG?Gw8sY|3f(a7B}NdAFfg(>9%WZYlgdBH7c_^4)9I#@)YDj~y)7 z=e+2dk-)VP+F#}mDOh3k{9$um%E+&`=c^|>yk4HMf2%`rugn2vr)>9M+^s)SWXTuF zcl}!?{wQTgjyYN-TKOniSJ>lD+DMw;x*;Emr&-d6O6?Y^tc@Nyac{ud8H@={HSfLm zKYB6tvv@yMB}d86{blZ)k&Q~3I_>g=lZvzETLpgkDG3W0$)>M6w83dqf+2|Q>|TP> zy;-aO_fm1c5fK;wvj4U}hD;j#FYzG294Dc+<^REPzDJSfBqGMAxvVDT;z zb2mvd9$|!J3vDe>iJO}h&Dh4l35;)q1WW)|@Q2DrCLxKDxQdd%mBkM+RKynAFKS|h z)^L)9)Hy6>Dc!9<{Sa|i+AfBgSoud%R4#^Oc zF^G#@fp8BD41z1XL4mMaNDZgC3?DX+z~H37V490WWQ&*ig$GS22fE*mSv=jHH(})I z5FvqQR%lqJK8(>A>u11U;=wxVPP~pm4I|#nA91oLkwJ=&;>y>;K<0?@B>@`*ccLqn z_-&z1TFaS=L0#z%l(!ccCvglb6fEbkt|yk)LclROOAN|E=+^k&1S`}En1(6ffMhomK&;eomwwl0TYGIFxdZU2 z*$52L` zA{E}S_5g+}pohr8pr7gjLJ&+fG?xY~_xBBS3kdQI^KYvRV4Nai6-#;WLVi|yXhARF zKtka3(EFc3*BHT5EU<9Re*6`C{6$Eh2%HshO|zVYoc3xWGBRmLM{$KCGMcson4H!S zHbISJfZ?=s8K(`DD#0OuS^6vlyAg#qtalUxT^^MHo6ZO@gYKu;QNZA!09HSS<>Ony ziUfMGiGbCVu!a}CUjd7-0xmWTBN(sTk)Y-h-{s({Y%d1`z@dA9EfutugERp-&L3%n zCX<$@LP0YioVa_*ZT(VRN$u1r|I41%mq4PlaM6Xc> zeI75eR_@_mf%8}xGlL=m{e#@0SHL?SW~aYFiA+X>dYP2D>0}7d3``_&XP7yjhadqE zQKMZfk~2U!LT@YqAsqTH0@N88bkzx6g7b3^fnq@n0*B=c%@=KU zzR9kZcwyj0_B8O!e&>4OUi1=3geiV|JL6Owu=+Can}tZjp#RqmB=Q~Zh`bwtRqYZy zP@5@kSeGlQrEPmKjGF@0NaZG8v;FCeB>E}>mLm)%m7MTJ1Zc^L=N+@FI^mZfj+LFT z69`{QfX09Lcs82dU^YNcc*7S;hYSZI!AG?_yA^PYu6f5766Yaa{(^@FVrNX6!F#?i z(8qbnFf4P1=ZpCV!Z%*0-^WE*76qRNA z_euQ@yxCJ$+jV$SyF-H1?tp;5^WKgs0K-(loS{-b2gIx}S5o+nt z#GFZM{MvQt*21%s~mn{rr18dKqPStlb-8dD8MOoU0h4CoRGqgPmn z*HTvQYz&&1%+Yu^0`3x^^5S*pS1MAN*ur410PYr`83uWVh|+AKH8)X;jqph|_k(<* zsvLue%%IQw(-}>YMyXgHMAE1XLY_%`1;}^MC~5Ln&rvMvjK~yGhM6?QzuYOdH6hx1 zameV87kPYU6vi)kG;QDofzJ{0y8=PZ9(Y0Fp+>ElPi3J=1Y%FHc~2m+ToWFTM@oc| zIk;QoL8Ns=4xB;X(*s14HitvnnyiwD(_Dp|5Zq8ZG@g?$ZRIXM(J&+T%IZi4Ne&u# z-gK`^7*s7XUU(xB4Kryf|G3LUwtZfd@u7McACytE=S3Z>_h>nMQYTwHFO*4`c18*G z;u>(++UdmD2{4wi!=raroqF~>Fm@?$x8h}gboanI*g4U@hYm-@gTu#N-*AqtpDcAkx@aRB z?3PBBEF+i(kV?C-T5YrcO#X+%S}4ul6apR zy`6Y*jc<^I@kg9|Iq?FShV5lHqgN)>&NG;IyTwtadeNV20-@`#Pmbw2mRikoxo!>{w0B zF>VPT`J|3Ca;ZchJ03c_V$x_}5rxv0+tfmcfOm3n9F`S8RiW8|E@lNueByA=5MXw| zOM!R*IDWS?**F0J7l!&|@Br|YH(_=F;Dg! z0ujeR9Q|v5r}78D`IA9{YK|R!bGNWM1OQHB6Z$^E0qeYScHoO#XwQd9GY1QUgg26K4xGF|4Jc4B9CNcx-l~R9k5A4|-9pJ!8C5HB}(5 zXj4T6KX|9`r}t3d};4#_rNggf(J#2$Z~9`$2B{} z2hIXctpZvs&X{%S=54q62WuAL#1&o#~8C8=HUUgL2)E z148X|%80QrX)B)a1A_V+Ap|vjJdr8jn?BnP*{;S52OpBDKIK;qHV(($*??q=CZGIt zOmREA4@gW!xjDCK;SOD}03$F7IQU!ymO*doDJ(j#>9CB=ji2)ej|ITls2G+qtq^3c*>Aa!~`zKw(@*SB}tT5R=|o z!H*g`Y#i|u+p!CTHv2U{K-gL})Gd{}p=;GN#K;+RM%O^t-rsS#8p4vHp&~!$xP(0f zv8NjR(CeN-A79OneB4V{Dvgp8416>f^rkaJB8_QFR>`>xIo&2h;lbl^cc9vEsj?aZ zn`NP}FjKSD%U%V-XRSDSDSF0RN-;?-ZgPEA3tFydiyPfyX3!;SC~4wN?(5cxi`6(= z%&hzZk_AW4`GfZ2nKX-!)MU{%H<==nL=m5#?dpUgyF1K|f0`U#S!#up(MC7A*217y z@IjeJt6LCMuw+oEAhgwuJ4r!3cLlM<>8#le5eWsd#Ds`wvm13120g8ztBCFGZU{p_ zQJ+5gH~^D2`=B7z4U0Csc@aeGeI{);cY@Hj+B(xPM)IOM3Wm*oZ}0ntN10)&Z^m-!3zeR$1rInU4>y^BNSRAO!QFMf|`9GZh%E% z0SDwj7<9cud}@s?76*@=2XrWo;opS9!xWL1@VLz_KFpOFtO-u0Dsci2jCf&pmIqa$ zhs-{*V;9+NaFz)Ch~BXFd1t_k{Bg$k=vUK`q2$A)fqj9;J*DH8-EFKLsn6WrdD zkMj#gYVVT|hYW*n?Y8g@)3L!%AhC`KngN<4p)Du|-Q@(o0&&lipc)C|ppMIUz&m`h zbJVt|#I`#^AZpThz^mhjboT=u?GzuJqvb3&DZG#4-iZgigI$H;1Ryq^+Xc3_vb08C z-bT%UNfSuvqF5X}yjekBoQA07-j#C7pcF3yKfGDt*F#k5-T)eDsrVUqN$UmVrx5(` zI#B6M&$K|*JE7)=btZ)*8$c^3u={wnyWCK82gZ?tH-x@s{X72$P{Kg)$_>10GyB~C z0h)akBFzC*83aev208<|k(spO^WEi$+!~-ViCdBaJN^Mp908iZUup{KZPHLyDa zs1C@yxPw#CS}~aH{ATk#&isrZ^;=8jzycuB1@J?28wUMwnjqEuOw)}kRhF@g zB#pNu5JfR*bFQKchO#<{oUM@ooS6ZO!yMAw5MRBDr=*3A4Wj|UjU2IA43amoQKBuh zBk7c4qnuJr4I!uK)DX?+z*{IfCrTO`QZYS>q*eR@!RQPsts*l+xO^zaQ7%gl^56mh zr_T9Rw|EP%Hw0&ky(I1__D{d!k)$d-?d>A-S6 zB=9)4J*Ud)k3wb$hFC^JwnMyaIXtryhKL>;+FpasG>~MOWDtB_w7hE|9Vqa+ zD~Dh5Z2N=pf*%<44FurfkUM-z!G>X*Ilpjt)*aJbIOOp?Tu8zkb{${5+W|QA4&cx> zm_yh15VhT<$?q(}8KFK@d_()my>4ool;7gWgbJo7P1J|a@)?5Z7b&J?_Z+!h4M=v& ziD}S%s9aRycAtXQ1sGAjHNwpcWgS)sM~Zrr2n0fx{A3cu{$qL=Lb(WANG` zJM7S7dkWhwI=iyq96UEx(3vB)hC%;S#D@kt^w02Xf)H87PG}G;8^pl$2)$Mr^vU2& zp2WyIv^_H?Z3A%cG~s}(qb1+tcqc8jq!U0QS!l}z$r%GVmn9?N<@$iqt|PU*mi;m;)!tBT^DrxX( zoCnAdo^mE!tkZy0ImtfwpP`7wgDSp)k}7)`2iYVOG$9ehcZG+8Hw|~RCrwC@J-lL9 z4n-VJS@J`|=qwJ+v>9|C-h}xW#gQ?gcF<8A?i};Lss;~XcunF6?GcBJPU2AK059$R z&_%%ZK^#OOkf;xS2zKz#_VlI@jXj5>I(M=mp#?OPHgqpHdeEgfr9Lkv@yYI@&WXaD zk8jHO69=h$P-Z8`{3ruoo)n1fR2gl2lUvgKplD-9=-fpVc5r9=A8{6hX+Eg6>>CH7 z1bF=sX-g}!n`rGnIlz6-w3BS%)@=G48`e4P!YxaiqKIjkk^C?D$)B$3VM{i`8$E|!=BA-~u*6nyZ81F;MoS^$~}p{X`#=JE@~JsW~LB_LP($Oq-_ zN4PpZsY3zS-8KA3SlU_dhj%0K2xoqnw|3AtN{(3YoOBBi$1jX+S_d+y1~MhoBLXxd%1?sntNr ziWj>^M|%X?t^m?ogxczD4jU}l$um!U-PG<__t+qHAE5l?ISvG7ep@`!0u(_c zU?+d8=fLecK$;Ki3l8dmV27oLMP6#!EBcvvwH%cC3D7h-0tzt+n-b2!$%8#DD@W=_Bev&@(^|QK6izyK;q%x z#Q=Ec%`>HEsO@sI>wWad2}W4r+wR20M<;kp+R1Y$Bj8Io0YR*{&%)icnsK;H&q?#K zVc1E2pdy8h$4-Oi^bYeFkD)YMXbq{osiuMmpRmILf9TUPkWX|vhGtw0y3YB|Xp)9w zR4hxAhGY1i=~FSQ)cHM{7}bp&k#PTqxlCvDA*<& zEx(H>h(Az)Y3;#70Qy!9CQaiKe+pxZ)DDKP`?!wBT@aqpsjuraeuAKH0~)>flQ(fa zfy84Ucn*kY_~OE|0x=Z+V`fMI+;6e$z==#+4}|aV`beA;DxK&J&~k_SC82;5e5WHZ zy$76-_Kk2p2>)Se1fI=*uOeq1069qscmxLRUNY#)*Sp1sy;o?kk(YZQH)v|t#k=nY zH@gMx73tv>3_pg`){~*K0VuJCwV-KlAaQS?d3>|ybWdT;{DT&|`ej6lb ze;VHpB$GpLWG2mp8#zw9jUSqL@Ag=yG-2G~oNU*aZQw?j)3D)(S^R#{xyMDH6#W`1 z>XS&Pg{xv~r_?c3xRcI}Oc;OVMG0@h=&i_$IKGH6HoG&Ov~i7=%j}Dt4B|>kRk0Qm zjovj7(w!)%#=f9fPBVdYC!){7Flp7@!osga7t)mo5l>B6StbX9&`U4|#KXVY{Vu5x zyM#O5Lr~>V%L@SyWIkX?dL(__jaV@JRT+8F>34i2@-EBT=e zyeysjq&vVJZ$e@lpQUz)I`D#c{9YigHYiQ;yezASsN{Ep%kDZc5muP=Tu@S8>8MJH;(WFX&S{9xfdwng2- zLd^;$6@(614ghsHf5F``=D@8xE^g-b2($fm=`cv+ESW%N2!>eRO}0ZkUpQXUiNd+J zG{}}o20@4D;QKgT1EK0^kO3!Kj0&hIg^|^boaO2ju-xoDpjA@%_=@>TZfpn&9BbgbKd*pEkq`h_43{#CeES zGw7B72jq4&AR`=3XvHmoVCbb+_8suNroc*&zoT!1V9-n7byF4XTo6`>D}!|mWZ%R4 zH?1|@#72iH5SHwN5Y}~kjz0~EI|K|<@a;+8k3EEK7o9y#;b@ge6ZpvN@wfx~@Y0Gbu~av)!(=z;-=}VfQo=(doqs_8tJ~lbdRXxSR}`SO+N11 zlV5*RNrP`s!gtvm5<~ zwN7eB-k{dp@b72`WD*_-@hJE~2mxnO!~;21A&p?A{Z*;LE!^ zZcmC`;7?<0nb>GFme+JB`rzM#oWOdI;Dp+AaZ}T}$c+r^*{7#&gvh(+F>B)dFrkm-SqA?NxKrX0E}@Gk?3lyW*lbzcN1>%X=~LEt5=6L; z+mnC0iPkZ~akj{)f}5`=E;4F`Oq$xwt|^u+GE#m+)9+i2ug*cxiT3OB*MahTC`ehY zFw>9g8ECr#NZXT8b}}3AxTVBmM}Ut`2s{NNYqaW7-A8c%7gW=0x;^6Nr}y-oAGJqB)<9x3|KtCe7frH6D<&kOJV$lvcCJ80Pr zm7oiLXzL52#?5h30aGCX(+)d~n|g@at^sz{%@$t|V}x4#L5LqPX>apT@il!ty@>ph zERq?BC2t$X=sp9nBp!%`zj|`i!;X}^0zHB}eFK+-YDNb5!w_Wxisu)kBIpOGD~)ej z>n;W)ofHKG(C;BJ=r)f!k`42n=@sg`B+x4arCY#xG>;|t2GR>C@tOX>Cmref28ITE zdBANL+mIlbmasmP0FT#)^syyK{M`L*+1r3yGeBnx-3VmR7xG6Op!fkix0znv?qUAR z*}}9cQsX(&j$DDCA4>;6w5DayT?;!36Yjy$Iu$`^pQ6q$zt0ArXf4wuAEr@JM}iSS zAxlGp-95b6d_wym+X(#5Wwo4*Gi-XsfCI%hbUv1MBpcux>cOT6&4c(FCo6@4<{{bi ub%!>f2p%USz4~VNtBw@Gd_Nc*9))rA1wAnErOjS$y)5?tL#qVwSm1wUjI{m$ literal 0 HcmV?d00001 diff --git a/seata-tcc/account/pom.xml b/seata-tcc/account/pom.xml new file mode 100644 index 0000000..1d7ef11 --- /dev/null +++ b/seata-tcc/account/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + org.javaboy + account + 0.0.1-SNAPSHOT + account + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.javaboy + 1.0-SNAPSHOT + common + + + mysql + mysql-connector-java + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + org.javaboy.account.AccountApplication + + + + repackage + + repackage + + + + + + + + diff --git a/seata-tcc/account/src/main/java/org/javaboy/account/AccountApplication.java b/seata-tcc/account/src/main/java/org/javaboy/account/AccountApplication.java new file mode 100644 index 0000000..d65698e --- /dev/null +++ b/seata-tcc/account/src/main/java/org/javaboy/account/AccountApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.account; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = "org.javaboy") +public class AccountApplication { + + public static void main(String[] args) { + SpringApplication.run(AccountApplication.class, args); + } + +} diff --git a/seata-tcc/account/src/main/java/org/javaboy/account/controller/AccountController.java b/seata-tcc/account/src/main/java/org/javaboy/account/controller/AccountController.java new file mode 100644 index 0000000..08ec2b3 --- /dev/null +++ b/seata-tcc/account/src/main/java/org/javaboy/account/controller/AccountController.java @@ -0,0 +1,41 @@ +package org.javaboy.account.controller; + +import io.seata.rm.tcc.api.BusinessActionContext; +import org.javaboy.account.service.AccountService; +import org.javaboy.common.RespBean; +import org.javaboy.common.feign.AccountServiceApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class AccountController implements AccountServiceApi { + @Autowired + AccountService accountService; + + @Override + public boolean prepare(BusinessActionContext actionContext, String userId, Double money) { + return accountService.prepareDeduct(userId, money); + } + + @Override + public boolean commit(BusinessActionContext actionContext) { + return accountService.commitDeduct(actionContext); + } + + @Override + public boolean rollback(BusinessActionContext actionContext) { + return accountService.rollbackDeduct(actionContext); + } +} diff --git a/seata-tcc/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java b/seata-tcc/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java new file mode 100644 index 0000000..344b0cc --- /dev/null +++ b/seata-tcc/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java @@ -0,0 +1,25 @@ +package org.javaboy.account.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.javaboy.account.model.Account; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Mapper +public interface AccountMapper { + + @Select("select * from account_tbl where userId=#{userId}") + Account getAccountByUserId(String userId); + + @Update("update account_tbl set freezeMoney=#{freezeMoney},money=#{money} where userId=#{userId}") + Integer updateAccount(Account account); +} diff --git a/seata-tcc/account/src/main/java/org/javaboy/account/model/Account.java b/seata-tcc/account/src/main/java/org/javaboy/account/model/Account.java new file mode 100644 index 0000000..88c26b0 --- /dev/null +++ b/seata-tcc/account/src/main/java/org/javaboy/account/model/Account.java @@ -0,0 +1,59 @@ +package org.javaboy.account.model; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class Account { + private Integer id; + private String userId; + private Double money; + private Double freezeMoney; + + @Override + public String toString() { + return "Account{" + + "id=" + id + + ", userId='" + userId + '\'' + + ", money=" + money + + ", freezeMoney=" + freezeMoney + + '}'; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public Double getMoney() { + return money; + } + + public void setMoney(Double money) { + this.money = money; + } + + public Double getFreezeMoney() { + return freezeMoney; + } + + public void setFreezeMoney(Double freezeMoney) { + this.freezeMoney = freezeMoney; + } +} diff --git a/seata-tcc/account/src/main/java/org/javaboy/account/service/AccountService.java b/seata-tcc/account/src/main/java/org/javaboy/account/service/AccountService.java new file mode 100644 index 0000000..beb02bb --- /dev/null +++ b/seata-tcc/account/src/main/java/org/javaboy/account/service/AccountService.java @@ -0,0 +1,97 @@ +package org.javaboy.account.service; + +import io.seata.rm.tcc.api.BusinessActionContext; +import org.javaboy.account.model.Account; +import org.javaboy.account.mapper.AccountMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class AccountService { + + private static final Logger logger = LoggerFactory.getLogger(AccountService.class); + + @Autowired + AccountMapper accountMapper; + + /** + * 预扣款阶段 + * 检查账户余额 + * + * @param userId + * @param money + * @return + */ + @Transactional(rollbackFor = Exception.class) + public boolean prepareDeduct(String userId, Double money) { + Account account = accountMapper.getAccountByUserId(userId); + if (account == null) { + throw new RuntimeException("账户不存在"); + } + if (account.getMoney() < money) { + throw new RuntimeException("余额不足,预扣款失败"); + } + account.setFreezeMoney(account.getFreezeMoney() + money); + account.setMoney(account.getMoney() - money); + Integer i = accountMapper.updateAccount(account); + logger.info("{} 账户预扣款 {} 元", userId, money); + return i == 1; + } + + /** + * 实际扣款阶段 + * + * @param actionContext + * @return + */ + @Transactional(rollbackFor = Exception.class) + public boolean commitDeduct(BusinessActionContext actionContext) { + String userId = (String) actionContext.getActionContext("userId"); + Double money = ((BigDecimal) actionContext.getActionContext("money")).doubleValue(); + Account account = accountMapper.getAccountByUserId(userId); + if (account.getFreezeMoney() < money) { + throw new RuntimeException("余额不足,扣款失败"); + } + account.setFreezeMoney(account.getFreezeMoney() - money); + Integer i = accountMapper.updateAccount(account); + logger.info("{} 账户扣款 {} 元", userId, money); + return i == 1; + } + + /** + * 账户回滚阶段 + * + * @param actionContext + * @return + */ + @Transactional(rollbackFor = Exception.class) + public boolean rollbackDeduct(BusinessActionContext actionContext) { + String userId = (String) actionContext.getActionContext("userId"); + Double money = ((BigDecimal) actionContext.getActionContext("money")).doubleValue(); + Account account = accountMapper.getAccountByUserId(userId); + if (account.getFreezeMoney() >= money) { + account.setMoney(account.getMoney() + money); + account.setFreezeMoney(account.getFreezeMoney() - money); + Integer i = accountMapper.updateAccount(account); + logger.info("{} 账户释放冻结金额 {} 元", userId, money); + return i == 1; + } + logger.info("{} 账户资金已释放",userId); + //说明prepare中抛出异常,未冻结资金 + return true; + } +} \ No newline at end of file diff --git a/seata-tcc/account/src/main/resources/application.properties b/seata-tcc/account/src/main/resources/application.properties new file mode 100644 index 0000000..426d3db --- /dev/null +++ b/seata-tcc/account/src/main/resources/application.properties @@ -0,0 +1,21 @@ +# 应用名称 +spring.application.name=account +# 应用服务 WEB 访问端口 +server.port=1111 +#下面这些内容是为了让MyBatis映射 +#指定Mybatis的Mapper文件 +mybatis.mapper-locations=classpath:mappers/*xml +#指定Mybatis的实体目录 +mybatis.type-aliases-package=org.javaboy.account.mybatis.entity +# 数据库驱动: +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +# 数据源名称 +spring.datasource.name=defaultDataSource +# 数据库连接地址 +spring.datasource.url=jdbc:mysql://localhost:3306/tcc_account?serverTimezone=UTC +# 数据库用户名&密码: +spring.datasource.username=root +spring.datasource.password=123 + +eureka.client.service-url.defaultZone=http://localhost:8761/eureka +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group \ No newline at end of file diff --git a/seata-tcc/account/src/main/resources/file.conf b/seata-tcc/account/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-tcc/account/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-tcc/account/src/main/resources/registry.conf b/seata-tcc/account/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-tcc/account/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-tcc/account/src/test/java/org/javaboy/account/AccountApplicationTests.java b/seata-tcc/account/src/test/java/org/javaboy/account/AccountApplicationTests.java new file mode 100644 index 0000000..fca712c --- /dev/null +++ b/seata-tcc/account/src/test/java/org/javaboy/account/AccountApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.account; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AccountApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-tcc/business/pom.xml b/seata-tcc/business/pom.xml new file mode 100644 index 0000000..af1f8ae --- /dev/null +++ b/seata-tcc/business/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + org.javaboy + business + 0.0.1-SNAPSHOT + business + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.javaboy + 1.0-SNAPSHOT + common + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + org.javaboy.business.BusinessApplication + + + + repackage + + repackage + + + + + + + + diff --git a/seata-tcc/business/src/main/java/org/javaboy/business/BusinessApplication.java b/seata-tcc/business/src/main/java/org/javaboy/business/BusinessApplication.java new file mode 100644 index 0000000..5b02212 --- /dev/null +++ b/seata-tcc/business/src/main/java/org/javaboy/business/BusinessApplication.java @@ -0,0 +1,17 @@ +package org.javaboy.business; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication(scanBasePackages = "org.javaboy") +@EnableFeignClients +@EnableDiscoveryClient +public class BusinessApplication { + + public static void main(String[] args) { + SpringApplication.run(BusinessApplication.class, args); + } + +} diff --git a/seata-tcc/business/src/main/java/org/javaboy/business/controller/BusinessController.java b/seata-tcc/business/src/main/java/org/javaboy/business/controller/BusinessController.java new file mode 100644 index 0000000..0c4fd0b --- /dev/null +++ b/seata-tcc/business/src/main/java/org/javaboy/business/controller/BusinessController.java @@ -0,0 +1,33 @@ +package org.javaboy.business.controller; + +import org.javaboy.business.service.BusinessService; +import org.javaboy.common.RespBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class BusinessController { + @Autowired + BusinessService businessService; + + @PostMapping("/order") + public RespBean order(String account, String productId, Integer count) { + try { + businessService.purchase(account, productId, count); + return RespBean.ok("下单成功"); + } catch (Exception e) { + e.printStackTrace(); + return RespBean.error("下单失败", e.getMessage()); + } + } +} diff --git a/seata-tcc/business/src/main/java/org/javaboy/business/feign/OrderServiceApiImpl.java b/seata-tcc/business/src/main/java/org/javaboy/business/feign/OrderServiceApiImpl.java new file mode 100644 index 0000000..bc42e4f --- /dev/null +++ b/seata-tcc/business/src/main/java/org/javaboy/business/feign/OrderServiceApiImpl.java @@ -0,0 +1,17 @@ +package org.javaboy.business.feign; + +import org.javaboy.common.feign.OrderServiceApi; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@FeignClient("order") +public interface OrderServiceApiImpl extends OrderServiceApi { +} diff --git a/seata-tcc/business/src/main/java/org/javaboy/business/feign/StorageServiceApiImpl.java b/seata-tcc/business/src/main/java/org/javaboy/business/feign/StorageServiceApiImpl.java new file mode 100644 index 0000000..e477b23 --- /dev/null +++ b/seata-tcc/business/src/main/java/org/javaboy/business/feign/StorageServiceApiImpl.java @@ -0,0 +1,17 @@ +package org.javaboy.business.feign; + +import org.javaboy.common.feign.StorageServiceApi; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@FeignClient("storage") +public interface StorageServiceApiImpl extends StorageServiceApi { +} diff --git a/seata-tcc/business/src/main/java/org/javaboy/business/service/BusinessService.java b/seata-tcc/business/src/main/java/org/javaboy/business/service/BusinessService.java new file mode 100644 index 0000000..1d84db5 --- /dev/null +++ b/seata-tcc/business/src/main/java/org/javaboy/business/service/BusinessService.java @@ -0,0 +1,35 @@ +package org.javaboy.business.service; + +import io.seata.core.context.RootContext; +import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.spring.annotation.GlobalTransactional; +import org.javaboy.common.feign.OrderServiceApi; +import org.javaboy.common.feign.StorageServiceApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class BusinessService { + @Autowired + StorageServiceApi storageServiceApi; + @Autowired + OrderServiceApi orderServiceApi; + + @GlobalTransactional + public void purchase(String account, String productId, Integer count) { + String xid = RootContext.getXID(); + BusinessActionContext actionContext = new BusinessActionContext(); + actionContext.setXid(xid); + storageServiceApi.deduct(actionContext, productId, count); + orderServiceApi.prepare(actionContext, account, productId, count); + } +} \ No newline at end of file diff --git a/seata-tcc/business/src/main/resources/application.properties b/seata-tcc/business/src/main/resources/application.properties new file mode 100644 index 0000000..3bd5731 --- /dev/null +++ b/seata-tcc/business/src/main/resources/application.properties @@ -0,0 +1,7 @@ +# 应用名称 +spring.application.name=business +# 应用服务 WEB 访问端口 +server.port=1112 + +eureka.client.service-url.defaultZone=http://localhost:8761/eureka +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group \ No newline at end of file diff --git a/seata-tcc/business/src/main/resources/file.conf b/seata-tcc/business/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-tcc/business/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-tcc/business/src/main/resources/registry.conf b/seata-tcc/business/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-tcc/business/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-tcc/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java b/seata-tcc/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java new file mode 100644 index 0000000..02e5fc2 --- /dev/null +++ b/seata-tcc/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.business; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class BusinessApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-tcc/common/pom.xml b/seata-tcc/common/pom.xml new file mode 100644 index 0000000..62836a5 --- /dev/null +++ b/seata-tcc/common/pom.xml @@ -0,0 +1,32 @@ + + + + seata-tcc + org.javaboy + 1.0-SNAPSHOT + + 4.0.0 + + common + + + + org.springframework.boot + spring-boot-starter-web + 2.3.7.RELEASE + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + 2.2.2.RELEASE + + + org.springframework.cloud + spring-cloud-starter-openfeign + 2.2.6.RELEASE + + + + \ No newline at end of file diff --git a/seata-tcc/common/src/main/java/org/javaboy/common/RespBean.java b/seata-tcc/common/src/main/java/org/javaboy/common/RespBean.java new file mode 100644 index 0000000..10c4913 --- /dev/null +++ b/seata-tcc/common/src/main/java/org/javaboy/common/RespBean.java @@ -0,0 +1,65 @@ +package org.javaboy.common; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class RespBean { + private Integer status; + private String msg; + private Object data; + + public static RespBean ok(String msg, Object data) { + return new RespBean(200, msg, data); + } + + public static RespBean ok(String msg) { + return new RespBean(200, msg, null); + } + + public static RespBean error(String msg, Object data) { + return new RespBean(500, msg, data); + } + + public static RespBean error(String msg) { + return new RespBean(500, msg, null); + } + + private RespBean() { + } + + private RespBean(Integer status, String msg, Object data) { + this.status = status; + this.msg = msg; + this.data = data; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} diff --git a/seata-tcc/common/src/main/java/org/javaboy/common/exception/GlobalException.java b/seata-tcc/common/src/main/java/org/javaboy/common/exception/GlobalException.java new file mode 100644 index 0000000..2302b49 --- /dev/null +++ b/seata-tcc/common/src/main/java/org/javaboy/common/exception/GlobalException.java @@ -0,0 +1,26 @@ +package org.javaboy.common.exception; + +import org.javaboy.common.RespBean; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestControllerAdvice +public class GlobalException { + + @ExceptionHandler(RuntimeException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public RespBean runtimeException(RuntimeException e) { + return RespBean.error(e.getMessage()); + } +} diff --git a/seata-tcc/common/src/main/java/org/javaboy/common/feign/AccountServiceApi.java b/seata-tcc/common/src/main/java/org/javaboy/common/feign/AccountServiceApi.java new file mode 100644 index 0000000..341b980 --- /dev/null +++ b/seata-tcc/common/src/main/java/org/javaboy/common/feign/AccountServiceApi.java @@ -0,0 +1,34 @@ +package org.javaboy.common.feign; + +import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.LocalTCC; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; +import org.javaboy.common.RespBean; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@LocalTCC +public interface AccountServiceApi { + @PostMapping("/account/deduct/prepare") + @TwoPhaseBusinessAction(name = "accountServiceApi", commitMethod = "commit", rollbackMethod = "rollback") + boolean prepare(@RequestBody BusinessActionContext actionContext, @RequestParam("userId") @BusinessActionContextParameter(paramName = "userId") String userId, @RequestParam("money") @BusinessActionContextParameter(paramName = "money") Double money); + + @RequestMapping("/account/deduct/commit") + boolean commit(@RequestBody BusinessActionContext actionContext); + + @RequestMapping("/account/deduct/rollback") + boolean rollback(@RequestBody BusinessActionContext actionContext); +} diff --git a/seata-tcc/common/src/main/java/org/javaboy/common/feign/OrderServiceApi.java b/seata-tcc/common/src/main/java/org/javaboy/common/feign/OrderServiceApi.java new file mode 100644 index 0000000..7f91424 --- /dev/null +++ b/seata-tcc/common/src/main/java/org/javaboy/common/feign/OrderServiceApi.java @@ -0,0 +1,34 @@ +package org.javaboy.common.feign; + +import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.LocalTCC; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; +import org.javaboy.common.RespBean; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@LocalTCC +public interface OrderServiceApi { + @PostMapping("/order/create/prepare") + @TwoPhaseBusinessAction(name = "orderServiceApi", commitMethod = "commit", rollbackMethod = "rollback") + boolean prepare(@RequestBody BusinessActionContext actionContext, @RequestParam("userId") @BusinessActionContextParameter(paramName = "userId") String userId, @RequestParam("productId") @BusinessActionContextParameter(paramName = "productId") String productId, @RequestParam("count") @BusinessActionContextParameter(paramName = "count") Integer count); + + @RequestMapping("/order/create/commit") + boolean commit(@RequestBody BusinessActionContext actionContext); + + @RequestMapping("/order/create/rollback") + boolean rollback(@RequestBody BusinessActionContext actionContext); +} diff --git a/seata-tcc/common/src/main/java/org/javaboy/common/feign/StorageServiceApi.java b/seata-tcc/common/src/main/java/org/javaboy/common/feign/StorageServiceApi.java new file mode 100644 index 0000000..f4907cc --- /dev/null +++ b/seata-tcc/common/src/main/java/org/javaboy/common/feign/StorageServiceApi.java @@ -0,0 +1,32 @@ +package org.javaboy.common.feign; + +import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.BusinessActionContextParameter; +import io.seata.rm.tcc.api.LocalTCC; +import io.seata.rm.tcc.api.TwoPhaseBusinessAction; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@LocalTCC +public interface StorageServiceApi { + @PostMapping("/storage/deduct/prepare") + @TwoPhaseBusinessAction(name = "storageServiceApi",commitMethod = "commit",rollbackMethod = "rollback") + boolean deduct(@RequestBody BusinessActionContext actionContext, @RequestParam("productId")@BusinessActionContextParameter(paramName = "productId") String productId, @RequestParam("count") @BusinessActionContextParameter(paramName = "count") Integer count); + + @RequestMapping("/storage/deduct/commit") + boolean commit(@RequestBody BusinessActionContext actionContext); + + @RequestMapping("/storage/deduct/rollback") + boolean rollback(@RequestBody BusinessActionContext actionContext); +} diff --git a/seata-tcc/eureka/pom.xml b/seata-tcc/eureka/pom.xml new file mode 100644 index 0000000..f156104 --- /dev/null +++ b/seata-tcc/eureka/pom.xml @@ -0,0 +1,92 @@ + + + 4.0.0 + org.javaboy + eureka + 0.0.1-SNAPSHOT + eureka + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-server + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + org.javaboy.eureka.EurekaApplication + + + + repackage + + repackage + + + + + + + + diff --git a/seata-tcc/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java b/seata-tcc/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java new file mode 100644 index 0000000..5d70e8d --- /dev/null +++ b/seata-tcc/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java @@ -0,0 +1,15 @@ +package org.javaboy.eureka; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaApplication { + + public static void main(String[] args) { + SpringApplication.run(EurekaApplication.class, args); + } + +} diff --git a/seata-tcc/eureka/src/main/resources/application.properties b/seata-tcc/eureka/src/main/resources/application.properties new file mode 100644 index 0000000..6e491bc --- /dev/null +++ b/seata-tcc/eureka/src/main/resources/application.properties @@ -0,0 +1,9 @@ +# 应用名称 +spring.application.name=eureka +# 应用服务 WEB 访问端口 +server.port=8761 + +eureka.client.fetch-registry=false +eureka.client.register-with-eureka=false + + diff --git a/seata-tcc/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java b/seata-tcc/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java new file mode 100644 index 0000000..0f0b07c --- /dev/null +++ b/seata-tcc/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.eureka; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class EurekaApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-tcc/order/pom.xml b/seata-tcc/order/pom.xml new file mode 100644 index 0000000..e9e634a --- /dev/null +++ b/seata-tcc/order/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + org.javaboy + order + 0.0.1-SNAPSHOT + order + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.javaboy + 1.0-SNAPSHOT + common + + + mysql + mysql-connector-java + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + org.javaboy.order.OrderApplication + + + + repackage + + repackage + + + + + + + + diff --git a/seata-tcc/order/src/main/java/org/javaboy/order/OrderApplication.java b/seata-tcc/order/src/main/java/org/javaboy/order/OrderApplication.java new file mode 100644 index 0000000..16f2db6 --- /dev/null +++ b/seata-tcc/order/src/main/java/org/javaboy/order/OrderApplication.java @@ -0,0 +1,17 @@ +package org.javaboy.order; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication(scanBasePackages = "org.javaboy") +@EnableEurekaClient +@EnableFeignClients +public class OrderApplication { + + public static void main(String[] args) { + SpringApplication.run(OrderApplication.class, args); + } + +} diff --git a/seata-tcc/order/src/main/java/org/javaboy/order/controller/OrderController.java b/seata-tcc/order/src/main/java/org/javaboy/order/controller/OrderController.java new file mode 100644 index 0000000..ee2d4a0 --- /dev/null +++ b/seata-tcc/order/src/main/java/org/javaboy/order/controller/OrderController.java @@ -0,0 +1,44 @@ +package org.javaboy.order.controller; + +import io.seata.rm.tcc.api.BusinessActionContext; +import org.javaboy.common.RespBean; +import org.javaboy.common.feign.OrderServiceApi; +import org.javaboy.order.service.OrderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class OrderController implements OrderServiceApi { + + @Autowired + OrderService orderService; + + @Override + public boolean prepare(BusinessActionContext actionContext, String userId, String productId, Integer count) { + return orderService.prepareCreateOrder(actionContext,userId, productId, count); + } + + @Override + public boolean commit(BusinessActionContext actionContext) { + return orderService.commitOrder(actionContext); + } + + @Override + public boolean rollback(BusinessActionContext actionContext) { + return orderService.rollbackOrder(actionContext); + } +} diff --git a/seata-tcc/order/src/main/java/org/javaboy/order/feign/AccountServiceApiImpl.java b/seata-tcc/order/src/main/java/org/javaboy/order/feign/AccountServiceApiImpl.java new file mode 100644 index 0000000..7164a1b --- /dev/null +++ b/seata-tcc/order/src/main/java/org/javaboy/order/feign/AccountServiceApiImpl.java @@ -0,0 +1,17 @@ +package org.javaboy.order.feign; + +import org.javaboy.common.feign.AccountServiceApi; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@FeignClient("account") +public interface AccountServiceApiImpl extends AccountServiceApi { +} diff --git a/seata-tcc/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java b/seata-tcc/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java new file mode 100644 index 0000000..70dc1bc --- /dev/null +++ b/seata-tcc/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java @@ -0,0 +1,25 @@ +package org.javaboy.order.mapper; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Mapper +public interface OrderMapper { + @Insert("insert into order_tbl(userId,productId,count,money) values(#{userId},#{productId},#{count},#{money})") + int addOrder(@Param("userId") String userId, @Param("productId") String productId, @Param("count") Integer count, @Param("money") Double money); + + @Delete("delete from order_tbl where userId=#{userId} and productId=#{productId} and count=#{count} order by id desc limit 1") + int deleteLatestOrder(@Param("userId") String userId, @Param("productId") String productId, @Param("count") Integer count); +} + diff --git a/seata-tcc/order/src/main/java/org/javaboy/order/service/OrderService.java b/seata-tcc/order/src/main/java/org/javaboy/order/service/OrderService.java new file mode 100644 index 0000000..a430d3a --- /dev/null +++ b/seata-tcc/order/src/main/java/org/javaboy/order/service/OrderService.java @@ -0,0 +1,61 @@ +package org.javaboy.order.service; + +import io.seata.core.context.RootContext; +import io.seata.rm.tcc.api.BusinessActionContext; +import org.javaboy.common.feign.AccountServiceApi; +import org.javaboy.order.mapper.OrderMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class OrderService { + + private static final Logger logger = LoggerFactory.getLogger(OrderService.class); + + @Autowired + AccountServiceApi accountServiceApi; + + @Autowired + OrderMapper orderMapper; + + @Transactional(rollbackFor = Exception.class) + public boolean prepareCreateOrder(BusinessActionContext actionContext, String userId, String productId, Integer count) { + //先去扣款,假设每个产品100块钱 + boolean resp = accountServiceApi.prepare(actionContext, userId, count * 100.0); + logger.info("{} 用户购买的 {} 商品共计 {} 件,预下单成功", userId, productId, count); + return resp; + } + + @Transactional(rollbackFor = Exception.class) + public boolean commitOrder(BusinessActionContext actionContext) { + String userId = (String) actionContext.getActionContext("userId"); + String productId = (String) actionContext.getActionContext("productId"); + Integer count = (Integer) actionContext.getActionContext("count"); + int i = orderMapper.addOrder(userId, productId, count, count * 100.0); + logger.info("{} 用户购买的 {} 商品共计 {} 件,下单成功", userId, productId, count); + return i==1; + } + + @Transactional(rollbackFor = Exception.class) + public boolean rollbackOrder(BusinessActionContext actionContext) { + String userId = (String) actionContext.getActionContext("userId"); + String productId = (String) actionContext.getActionContext("productId"); + Integer count = (Integer) actionContext.getActionContext("count"); + logger.info("{} 用户购买的 {} 商品共计 {} 件,订单回滚成功", userId, productId, count); + return true; + } +} diff --git a/seata-tcc/order/src/main/resources/application.properties b/seata-tcc/order/src/main/resources/application.properties new file mode 100644 index 0000000..3fc2f6f --- /dev/null +++ b/seata-tcc/order/src/main/resources/application.properties @@ -0,0 +1,22 @@ +# 应用名称 +spring.application.name=order +# 应用服务 WEB 访问端口 +server.port=1113 +#下面这些内容是为了让MyBatis映射 +#指定Mybatis的Mapper文件 +mybatis.mapper-locations=classpath:mappers/*xml +#指定Mybatis的实体目录 +mybatis.type-aliases-package=org.javaboy.order.mybatis.entity +# 数据库驱动: +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +# 数据源名称 +spring.datasource.name=defaultDataSource +# 数据库连接地址 +spring.datasource.url=jdbc:mysql://localhost:3306/tcc_order?serverTimezone=UTC +# 数据库用户名&密码: +spring.datasource.username=root +spring.datasource.password=123 + + +eureka.client.service-url.defaultZone=http://localhost:8761/eureka +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group \ No newline at end of file diff --git a/seata-tcc/order/src/main/resources/file.conf b/seata-tcc/order/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-tcc/order/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-tcc/order/src/main/resources/registry.conf b/seata-tcc/order/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-tcc/order/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-tcc/order/src/test/java/org/javaboy/order/OrderApplicationTests.java b/seata-tcc/order/src/test/java/org/javaboy/order/OrderApplicationTests.java new file mode 100644 index 0000000..e4b4b00 --- /dev/null +++ b/seata-tcc/order/src/test/java/org/javaboy/order/OrderApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.order; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class OrderApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-tcc/pom.xml b/seata-tcc/pom.xml new file mode 100644 index 0000000..b081830 --- /dev/null +++ b/seata-tcc/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + org.javaboy + seata-tcc + pom + 1.0-SNAPSHOT + + common + + + + \ No newline at end of file diff --git a/seata-tcc/storage/pom.xml b/seata-tcc/storage/pom.xml new file mode 100644 index 0000000..be083b4 --- /dev/null +++ b/seata-tcc/storage/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + org.javaboy + storage + 0.0.1-SNAPSHOT + storage + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.javaboy + 1.0-SNAPSHOT + common + + + mysql + mysql-connector-java + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + org.javaboy.storage.StorageApplication + + + + repackage + + repackage + + + + + + + + diff --git a/seata-tcc/storage/src/main/java/org/javaboy/storage/StorageApplication.java b/seata-tcc/storage/src/main/java/org/javaboy/storage/StorageApplication.java new file mode 100644 index 0000000..6461571 --- /dev/null +++ b/seata-tcc/storage/src/main/java/org/javaboy/storage/StorageApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.storage; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = "org.javaboy") +public class StorageApplication { + + public static void main(String[] args) { + SpringApplication.run(StorageApplication.class, args); + } + +} diff --git a/seata-tcc/storage/src/main/java/org/javaboy/storage/controller/StorageController.java b/seata-tcc/storage/src/main/java/org/javaboy/storage/controller/StorageController.java new file mode 100644 index 0000000..dd1ae07 --- /dev/null +++ b/seata-tcc/storage/src/main/java/org/javaboy/storage/controller/StorageController.java @@ -0,0 +1,42 @@ +package org.javaboy.storage.controller; + +import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.LocalTCC; +import org.javaboy.common.RespBean; +import org.javaboy.common.feign.StorageServiceApi; +import org.javaboy.storage.service.StorageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class StorageController implements StorageServiceApi { + + @Autowired + StorageService storageService; + + @Override + public boolean deduct(BusinessActionContext actionContext, String productId, Integer count) { + return storageService.prepareDeduct(productId, count); + } + + @Override + public boolean commit(BusinessActionContext actionContext) { + return storageService.commitDeduct(actionContext); + } + + @Override + public boolean rollback(BusinessActionContext actionContext) { + return storageService.rollbackDeduct(actionContext); + } +} diff --git a/seata-tcc/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java b/seata-tcc/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java new file mode 100644 index 0000000..3bf0228 --- /dev/null +++ b/seata-tcc/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java @@ -0,0 +1,26 @@ +package org.javaboy.storage.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.javaboy.storage.model.Storage; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Mapper +public interface StorageMapper { + + @Update("update storage_tbl set freezeCount=#{freezeCount},count=#{count} where productId=#{productId}") + int updateStorage(Storage storage); + + @Select("select * from storage_tbl where productId=#{productId}") + Storage getStorageByProductId(String productId); +} diff --git a/seata-tcc/storage/src/main/java/org/javaboy/storage/model/Storage.java b/seata-tcc/storage/src/main/java/org/javaboy/storage/model/Storage.java new file mode 100644 index 0000000..fb9b94d --- /dev/null +++ b/seata-tcc/storage/src/main/java/org/javaboy/storage/model/Storage.java @@ -0,0 +1,49 @@ +package org.javaboy.storage.model; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class Storage { + private Integer id; + private String productId; + private Integer count; + private Integer freezeCount; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getProductId() { + return productId; + } + + public void setProductId(String productId) { + this.productId = productId; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + public Integer getFreezeCount() { + return freezeCount; + } + + public void setFreezeCount(Integer freezeCount) { + this.freezeCount = freezeCount; + } +} diff --git a/seata-tcc/storage/src/main/java/org/javaboy/storage/service/StorageService.java b/seata-tcc/storage/src/main/java/org/javaboy/storage/service/StorageService.java new file mode 100644 index 0000000..f18ac7d --- /dev/null +++ b/seata-tcc/storage/src/main/java/org/javaboy/storage/service/StorageService.java @@ -0,0 +1,92 @@ +package org.javaboy.storage.service; + +import io.seata.rm.tcc.api.BusinessActionContext; +import io.seata.rm.tcc.api.LocalTCC; +import io.seata.spring.annotation.GlobalTransactional; +import org.javaboy.storage.mapper.StorageMapper; +import org.javaboy.storage.model.Storage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import reactor.core.publisher.Mono; + +import java.net.Inet4Address; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class StorageService { + + private static final Logger logger = LoggerFactory.getLogger(StorageService.class); + + @Autowired + StorageMapper storageMapper; + + /** + * 预扣库存 + * + * @param productId + * @param count + * @return + */ + @Transactional(rollbackFor = Exception.class) + public boolean prepareDeduct(String productId, Integer count) { + Storage storage = storageMapper.getStorageByProductId(productId); + if (storage == null) { + throw new RuntimeException("商品不存在"); + } + if (storage.getCount() < count) { + throw new RuntimeException("库存不足,预扣库存失败"); + } + storage.setFreezeCount(storage.getFreezeCount() + count); + storage.setCount(storage.getCount() - count); + int i = storageMapper.updateStorage(storage); + logger.info("{} 商品库存冻结 {} 个", productId, count); + return i == 1; + } + + /** + * 扣库存 + * + * @param actionContext + * @return + */ + @Transactional(rollbackFor = Exception.class) + public boolean commitDeduct(BusinessActionContext actionContext) { + String productId = (String) actionContext.getActionContext("productId"); + Integer count = (Integer) actionContext.getActionContext("count"); + Storage storage = storageMapper.getStorageByProductId(productId); + if (storage.getFreezeCount() < count) { + throw new RuntimeException("库存不足,扣库存失败"); + } + storage.setFreezeCount(storage.getFreezeCount() - count); + int i = storageMapper.updateStorage(storage); + logger.info("{} 商品库存扣除 {} 个", productId, count); + return i == 1; + } + + @Transactional(rollbackFor = Exception.class) + public boolean rollbackDeduct(BusinessActionContext actionContext) { + String productId = (String) actionContext.getActionContext("productId"); + Integer count = (Integer) actionContext.getActionContext("count"); + Storage storage = storageMapper.getStorageByProductId(productId); + if (storage.getFreezeCount() >= count) { + storage.setFreezeCount(storage.getFreezeCount() - count); + storage.setCount(storage.getCount() + count); + int i = storageMapper.updateStorage(storage); + logger.info("{} 商品释放库存 {} 个", productId, count); + return i == 1; + } + //说明 prepare 阶段就没有冻结 + return true; + } +} diff --git a/seata-tcc/storage/src/main/resources/application.properties b/seata-tcc/storage/src/main/resources/application.properties new file mode 100644 index 0000000..4d8418c --- /dev/null +++ b/seata-tcc/storage/src/main/resources/application.properties @@ -0,0 +1,22 @@ +# 应用名称 +spring.application.name=storage +# 应用服务 WEB 访问端口 +server.port=1114 +#下面这些内容是为了让MyBatis映射 +#指定Mybatis的Mapper文件 +mybatis.mapper-locations=classpath:mappers/*xml +#指定Mybatis的实体目录 +mybatis.type-aliases-package=org.javaboy.storage.mybatis.entity +# 数据库驱动: +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +# 数据源名称 +spring.datasource.name=defaultDataSource +# 数据库连接地址 +spring.datasource.url=jdbc:mysql://localhost:3306/tcc_storage?serverTimezone=UTC +# 数据库用户名&密码: +spring.datasource.username=root +spring.datasource.password=123 + + +eureka.client.service-url.defaultZone=http://localhost:8761/eureka +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group \ No newline at end of file diff --git a/seata-tcc/storage/src/main/resources/file.conf b/seata-tcc/storage/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-tcc/storage/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-tcc/storage/src/main/resources/registry.conf b/seata-tcc/storage/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-tcc/storage/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-tcc/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java b/seata-tcc/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java new file mode 100644 index 0000000..0a32d95 --- /dev/null +++ b/seata-tcc/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.storage; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class StorageApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-xa/account/pom.xml b/seata-xa/account/pom.xml new file mode 100644 index 0000000..d94f764 --- /dev/null +++ b/seata-xa/account/pom.xml @@ -0,0 +1,113 @@ + + + 4.0.0 + org.javaboy + account + 0.0.1-SNAPSHOT + + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + common + org.javaboy + 1.0-SNAPSHOT + + + mysql + mysql-connector-java + runtime + 8.0.11 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + + + + + diff --git a/seata-xa/account/src/main/java/org/javaboy/AccountApplication.java b/seata-xa/account/src/main/java/org/javaboy/AccountApplication.java new file mode 100644 index 0000000..35e183f --- /dev/null +++ b/seata-xa/account/src/main/java/org/javaboy/AccountApplication.java @@ -0,0 +1,18 @@ +package org.javaboy; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +@EnableEurekaClient +@MapperScan(basePackages = "org.javaboy.account.mapper") +public class AccountApplication { + + public static void main(String[] args) { + SpringApplication.run(AccountApplication.class, args); + } + +} diff --git a/seata-xa/account/src/main/java/org/javaboy/account/config/DataSourceConfiguration.java b/seata-xa/account/src/main/java/org/javaboy/account/config/DataSourceConfiguration.java new file mode 100644 index 0000000..0726528 --- /dev/null +++ b/seata-xa/account/src/main/java/org/javaboy/account/config/DataSourceConfiguration.java @@ -0,0 +1,55 @@ +package org.javaboy.account.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.zaxxer.hikari.HikariDataSource; +import io.seata.rm.datasource.xa.DataSourceProxyXA; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.transaction.SpringManagedTransactionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; + +import javax.sql.DataSource; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +public class DataSourceConfiguration { + + @Bean + @ConfigurationProperties(prefix = "spring.datasource") + public DruidDataSource druidDataSource() { + return new DruidDataSource(); + } + + @Bean("dataSourceProxy") + @Primary + public DataSource dataSource(DruidDataSource druidDataSource) { + return new DataSourceProxyXA(druidDataSource); + } + + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSourceProxy)throws Exception{ + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(dataSourceProxy); + sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); + return sqlSessionFactoryBean.getObject(); + } + +} \ No newline at end of file diff --git a/seata-xa/account/src/main/java/org/javaboy/account/controller/AccountController.java b/seata-xa/account/src/main/java/org/javaboy/account/controller/AccountController.java new file mode 100644 index 0000000..3dfd7ae --- /dev/null +++ b/seata-xa/account/src/main/java/org/javaboy/account/controller/AccountController.java @@ -0,0 +1,38 @@ +package org.javaboy.account.controller; + +import org.javaboy.account.service.AccountService; +import org.javaboy.common.RespBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.sql.DataSource; +import java.util.Map; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class AccountController { + + @Autowired + AccountService accountService; + + @Autowired + DataSource dataSource; + + @PostMapping("/deductAccount") + public RespBean deductAccount(String account, Double money) { + System.out.println("dataSource.getClass() = " + dataSource.getClass()); + if (accountService.deductAccount(account, money)) { + return RespBean.ok("扣款成功"); + } + return RespBean.error("扣款失败"); + } +} diff --git a/seata-xa/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java b/seata-xa/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java new file mode 100644 index 0000000..6fe3b38 --- /dev/null +++ b/seata-xa/account/src/main/java/org/javaboy/account/mapper/AccountMapper.java @@ -0,0 +1,24 @@ +package org.javaboy.account.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Mapper +public interface AccountMapper { + @Update("update account_tbl set money=money-#{money} where user_id=#{account}") + int updateAccount(@Param("account") String account, @Param("money") Double money); + + @Select("select money from account_tbl where user_id=#{account}") + Double getMoneyByAccount(String account); +} diff --git a/seata-xa/account/src/main/java/org/javaboy/account/service/AccountService.java b/seata-xa/account/src/main/java/org/javaboy/account/service/AccountService.java new file mode 100644 index 0000000..8c676d0 --- /dev/null +++ b/seata-xa/account/src/main/java/org/javaboy/account/service/AccountService.java @@ -0,0 +1,30 @@ +package org.javaboy.account.service; + +import org.javaboy.account.mapper.AccountMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class AccountService { + + @Autowired + AccountMapper accountMapper; + + public boolean deductAccount(String account, Double money) { + Double m = accountMapper.getMoneyByAccount(account); + if (m < money) { + throw new RuntimeException("账户余额不足"); + } + int i = accountMapper.updateAccount(account, money); + return i == 1; + } +} diff --git a/seata-xa/account/src/main/resources/application.properties b/seata-xa/account/src/main/resources/application.properties new file mode 100644 index 0000000..172c2c4 --- /dev/null +++ b/seata-xa/account/src/main/resources/application.properties @@ -0,0 +1,11 @@ +server.port=1111 +spring.application.name=account +eureka.client.service-url.defaultZone=http://localhost:8761/eureka + +spring.datasource.username=root +spring.datasource.password=123 +spring.datasource.url=jdbc:mysql:///xa_account?serverTimezone=Asia/Shanghai&useSSL=false + +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group + +seata.enable-auto-data-source-proxy=false \ No newline at end of file diff --git a/seata-xa/account/src/main/resources/file.conf b/seata-xa/account/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-xa/account/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-xa/account/src/main/resources/registry.conf b/seata-xa/account/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-xa/account/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-xa/account/src/test/java/org/javaboy/account/AccountApplicationTests.java b/seata-xa/account/src/test/java/org/javaboy/account/AccountApplicationTests.java new file mode 100644 index 0000000..fca712c --- /dev/null +++ b/seata-xa/account/src/test/java/org/javaboy/account/AccountApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.account; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AccountApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-xa/business/pom.xml b/seata-xa/business/pom.xml new file mode 100644 index 0000000..eba6af4 --- /dev/null +++ b/seata-xa/business/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + org.javaboy + business + 0.0.1-SNAPSHOT + + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + common + org.javaboy + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + + + + diff --git a/seata-xa/business/src/main/java/org/javaboy/BusinessApplication.java b/seata-xa/business/src/main/java/org/javaboy/BusinessApplication.java new file mode 100644 index 0000000..7ab3255 --- /dev/null +++ b/seata-xa/business/src/main/java/org/javaboy/BusinessApplication.java @@ -0,0 +1,15 @@ +package org.javaboy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@EnableFeignClients +public class BusinessApplication { + + public static void main(String[] args) { + SpringApplication.run(BusinessApplication.class, args); + } + +} diff --git a/seata-xa/business/src/main/java/org/javaboy/business/controller/BusinessController.java b/seata-xa/business/src/main/java/org/javaboy/business/controller/BusinessController.java new file mode 100644 index 0000000..b4c2974 --- /dev/null +++ b/seata-xa/business/src/main/java/org/javaboy/business/controller/BusinessController.java @@ -0,0 +1,34 @@ +package org.javaboy.business.controller; + +import org.javaboy.business.service.BusinessService; +import org.javaboy.common.RespBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class BusinessController { + + @Autowired + BusinessService businessService; + + @GetMapping("/order") + public RespBean order(String account, Integer count, String productId) { + try { + businessService.purchase(account, count, productId); + return RespBean.ok("下单成功"); + } catch (Exception e) { + return RespBean.error(e.getMessage()); + } + + } +} diff --git a/seata-xa/business/src/main/java/org/javaboy/business/feign/OrderFeignClient.java b/seata-xa/business/src/main/java/org/javaboy/business/feign/OrderFeignClient.java new file mode 100644 index 0000000..7d9cea5 --- /dev/null +++ b/seata-xa/business/src/main/java/org/javaboy/business/feign/OrderFeignClient.java @@ -0,0 +1,24 @@ +package org.javaboy.business.feign; + +import org.javaboy.common.RespBean; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.ws.rs.POST; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@FeignClient("order") +public interface OrderFeignClient { + @PostMapping("/createOrder") + RespBean createOrder(@RequestParam("acount") String account, @RequestParam("count") Integer count, @RequestParam("productId") String productId); +} diff --git a/seata-xa/business/src/main/java/org/javaboy/business/feign/StorageFeignClient.java b/seata-xa/business/src/main/java/org/javaboy/business/feign/StorageFeignClient.java new file mode 100644 index 0000000..e6468a5 --- /dev/null +++ b/seata-xa/business/src/main/java/org/javaboy/business/feign/StorageFeignClient.java @@ -0,0 +1,21 @@ +package org.javaboy.business.feign; + +import org.javaboy.common.RespBean; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@FeignClient("storage") +public interface StorageFeignClient { + @PostMapping("/deduct") + RespBean deduce(@RequestParam("productId") String productId, @RequestParam("count") Integer count); +} diff --git a/seata-xa/business/src/main/java/org/javaboy/business/service/BusinessService.java b/seata-xa/business/src/main/java/org/javaboy/business/service/BusinessService.java new file mode 100644 index 0000000..dc14d50 --- /dev/null +++ b/seata-xa/business/src/main/java/org/javaboy/business/service/BusinessService.java @@ -0,0 +1,33 @@ +package org.javaboy.business.service; + +import io.seata.spring.annotation.GlobalTransactional; +import org.javaboy.business.feign.OrderFeignClient; +import org.javaboy.business.feign.StorageFeignClient; +import org.javaboy.common.RespBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class BusinessService { + + @Autowired + StorageFeignClient storageFeignClient; + @Autowired + OrderFeignClient orderFeignClient; + + + @GlobalTransactional(rollbackFor = Exception.class) + public void purchase(String account, Integer count, String productId) { + storageFeignClient.deduce(productId, count); + orderFeignClient.createOrder(account, count, productId); + } +} diff --git a/seata-xa/business/src/main/resources/application.properties b/seata-xa/business/src/main/resources/application.properties new file mode 100644 index 0000000..c017008 --- /dev/null +++ b/seata-xa/business/src/main/resources/application.properties @@ -0,0 +1,5 @@ +server.port=1112 +spring.application.name=business +eureka.client.service-url.defaultZone=http://localhost:8761/eureka + +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group \ No newline at end of file diff --git a/seata-xa/business/src/main/resources/file.conf b/seata-xa/business/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-xa/business/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-xa/business/src/main/resources/registry.conf b/seata-xa/business/src/main/resources/registry.conf new file mode 100755 index 0000000..b76b193 --- /dev/null +++ b/seata-xa/business/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "file" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "eureka" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-xa/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java b/seata-xa/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java new file mode 100644 index 0000000..02e5fc2 --- /dev/null +++ b/seata-xa/business/src/test/java/org/javaboy/business/BusinessApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.business; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class BusinessApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-xa/common/pom.xml b/seata-xa/common/pom.xml new file mode 100644 index 0000000..ef251de --- /dev/null +++ b/seata-xa/common/pom.xml @@ -0,0 +1,65 @@ + + + + seata-xa + org.javaboy + 1.0-SNAPSHOT + + 4.0.0 + + common + + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + + + + + \ No newline at end of file diff --git a/seata-xa/common/src/main/java/org/javaboy/common/RespBean.java b/seata-xa/common/src/main/java/org/javaboy/common/RespBean.java new file mode 100644 index 0000000..c6ff68f --- /dev/null +++ b/seata-xa/common/src/main/java/org/javaboy/common/RespBean.java @@ -0,0 +1,65 @@ +package org.javaboy.common; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class RespBean { + private Integer status; + private String message; + private Object data; + + public static RespBean ok(String message, Object data) { + return new RespBean(200, message, data); + } + + public static RespBean ok(String message) { + return new RespBean(200, message, null); + } + + public static RespBean error(String message, Object data) { + return new RespBean(500, message, data); + } + + public static RespBean error(String message) { + return new RespBean(500, message, null); + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + private RespBean() { + } + + private RespBean(Integer status, String message, Object data) { + this.status = status; + this.message = message; + this.data = data; + } +} diff --git a/seata-xa/common/src/main/java/org/javaboy/common/exception/GlobalException.java b/seata-xa/common/src/main/java/org/javaboy/common/exception/GlobalException.java new file mode 100644 index 0000000..768b192 --- /dev/null +++ b/seata-xa/common/src/main/java/org/javaboy/common/exception/GlobalException.java @@ -0,0 +1,25 @@ +package org.javaboy.common.exception; + +import org.javaboy.common.RespBean; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestControllerAdvice +public class GlobalException { + @ExceptionHandler(RuntimeException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public RespBean runtimeException(RuntimeException e) { + return RespBean.error(e.getMessage()); + } +} diff --git a/seata-xa/eureka/pom.xml b/seata-xa/eureka/pom.xml new file mode 100644 index 0000000..ddaf0f4 --- /dev/null +++ b/seata-xa/eureka/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.6.8 + + + org.javaboy + eureka + 0.0.1-SNAPSHOT + eureka + Demo project for Spring Boot + + 17 + 2021.0.2 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-server + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/seata-xa/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java b/seata-xa/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java new file mode 100644 index 0000000..5d70e8d --- /dev/null +++ b/seata-xa/eureka/src/main/java/org/javaboy/eureka/EurekaApplication.java @@ -0,0 +1,15 @@ +package org.javaboy.eureka; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaApplication { + + public static void main(String[] args) { + SpringApplication.run(EurekaApplication.class, args); + } + +} diff --git a/seata-xa/eureka/src/main/resources/application.properties b/seata-xa/eureka/src/main/resources/application.properties new file mode 100644 index 0000000..156cbda --- /dev/null +++ b/seata-xa/eureka/src/main/resources/application.properties @@ -0,0 +1,4 @@ +eureka.client.fetch-registry=false +eureka.client.register-with-eureka=false + +server.port=8761 \ No newline at end of file diff --git a/seata-xa/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java b/seata-xa/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java new file mode 100644 index 0000000..0f0b07c --- /dev/null +++ b/seata-xa/eureka/src/test/java/org/javaboy/eureka/EurekaApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.eureka; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class EurekaApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-xa/order/pom.xml b/seata-xa/order/pom.xml new file mode 100644 index 0000000..204f65f --- /dev/null +++ b/seata-xa/order/pom.xml @@ -0,0 +1,117 @@ + + + 4.0.0 + org.javaboy + order + 0.0.1-SNAPSHOT + + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + common + org.javaboy + 1.0-SNAPSHOT + + + mysql + mysql-connector-java + runtime + 8.0.11 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + + + + diff --git a/seata-xa/order/src/main/java/org/javaboy/OrderApplication.java b/seata-xa/order/src/main/java/org/javaboy/OrderApplication.java new file mode 100644 index 0000000..c1cab27 --- /dev/null +++ b/seata-xa/order/src/main/java/org/javaboy/OrderApplication.java @@ -0,0 +1,18 @@ +package org.javaboy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +@EnableEurekaClient +@EnableFeignClients +public class OrderApplication { + + public static void main(String[] args) { + SpringApplication.run(OrderApplication.class, args); + } + +} diff --git a/seata-xa/order/src/main/java/org/javaboy/order/config/DataSourceConfiguration.java b/seata-xa/order/src/main/java/org/javaboy/order/config/DataSourceConfiguration.java new file mode 100644 index 0000000..6053c7c --- /dev/null +++ b/seata-xa/order/src/main/java/org/javaboy/order/config/DataSourceConfiguration.java @@ -0,0 +1,51 @@ +package org.javaboy.order.config; + +import com.alibaba.druid.pool.DruidDataSource; +import io.seata.rm.datasource.xa.DataSourceProxyXA; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.transaction.SpringManagedTransactionFactory; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.sql.DataSource; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +public class DataSourceConfiguration { + + @Bean + @ConfigurationProperties(prefix = "spring.datasource") + public DruidDataSource druidDataSource() { + return new DruidDataSource(); + } + + @Bean("dataSourceProxy") + @Primary + public DataSource dataSource(DruidDataSource druidDataSource) { + return new DataSourceProxyXA(druidDataSource); + } + + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSourceProxy)throws Exception{ + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(dataSourceProxy); +// sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() +// .getResources("classpath*:/mapper/*.xml")); +// sqlSessionFactoryBean.setTypeAliasesPackage("io.seata.sample.entity"); + sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); + return sqlSessionFactoryBean.getObject(); + } + +} \ No newline at end of file diff --git a/seata-xa/order/src/main/java/org/javaboy/order/controller/OrderController.java b/seata-xa/order/src/main/java/org/javaboy/order/controller/OrderController.java new file mode 100644 index 0000000..157d03e --- /dev/null +++ b/seata-xa/order/src/main/java/org/javaboy/order/controller/OrderController.java @@ -0,0 +1,32 @@ +package org.javaboy.order.controller; + +import org.javaboy.common.RespBean; +import org.javaboy.order.service.OrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class OrderController { + @Autowired + OrderService orderService; + + @PostMapping("/createOrder") + public RespBean createOrder(@RequestParam("acount") String account, @RequestParam("count") Integer count, @RequestParam("productId") String productId) { + if (orderService.createOrder(account, productId, count)) { + return RespBean.ok("下单成功"); + } + return RespBean.error("下单失败"); + } +} diff --git a/seata-xa/order/src/main/java/org/javaboy/order/feign/AccountFeign.java b/seata-xa/order/src/main/java/org/javaboy/order/feign/AccountFeign.java new file mode 100644 index 0000000..70c0710 --- /dev/null +++ b/seata-xa/order/src/main/java/org/javaboy/order/feign/AccountFeign.java @@ -0,0 +1,22 @@ +package org.javaboy.order.feign; + +import org.apache.ibatis.annotations.Param; +import org.javaboy.common.RespBean; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@FeignClient("account") +public interface AccountFeign { + @PostMapping("/deductAccount") + RespBean deductAccount(@RequestParam("account") String account, @RequestParam("money") Double money); +} diff --git a/seata-xa/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java b/seata-xa/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java new file mode 100644 index 0000000..2aaee20 --- /dev/null +++ b/seata-xa/order/src/main/java/org/javaboy/order/mapper/OrderMapper.java @@ -0,0 +1,20 @@ +package org.javaboy.order.mapper; + +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Mapper +public interface OrderMapper { + @Insert("insert into order_tbl(user_id,commodity_code,count) values(#{account},#{productId},#{count})") + int createOrder(@Param("account") String account, @Param("productId") String productId, @Param("count") Integer count); +} diff --git a/seata-xa/order/src/main/java/org/javaboy/order/service/OrderService.java b/seata-xa/order/src/main/java/org/javaboy/order/service/OrderService.java new file mode 100644 index 0000000..ac5e25d --- /dev/null +++ b/seata-xa/order/src/main/java/org/javaboy/order/service/OrderService.java @@ -0,0 +1,32 @@ +package org.javaboy.order.service; + +import org.javaboy.common.RespBean; +import org.javaboy.order.feign.AccountFeign; +import org.javaboy.order.mapper.OrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class OrderService { + + @Autowired + OrderMapper orderMapper; + @Autowired + AccountFeign accountFeign; + + public boolean createOrder(String account, String productId, Integer count) { + //扣款,每件商品 100 块钱 + RespBean respBean = accountFeign.deductAccount(account, count * 100.0); + int order = orderMapper.createOrder(account, productId, count); + return order == 1 && respBean.getStatus() == 200; + } +} diff --git a/seata-xa/order/src/main/resources/application.properties b/seata-xa/order/src/main/resources/application.properties new file mode 100644 index 0000000..f542522 --- /dev/null +++ b/seata-xa/order/src/main/resources/application.properties @@ -0,0 +1,12 @@ +server.port=1113 +spring.application.name=order +eureka.client.service-url.defaultZone=http://localhost:8761/eureka + +spring.datasource.username=root +spring.datasource.password=123 +spring.datasource.url=jdbc:mysql:///xa_order?serverTimezone=Asia/Shanghai&useSSL=false +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource + +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group +seata.enable-auto-data-source-proxy=false \ No newline at end of file diff --git a/seata-xa/order/src/main/resources/file.conf b/seata-xa/order/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-xa/order/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-xa/order/src/main/resources/registry.conf b/seata-xa/order/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-xa/order/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-xa/order/src/test/java/org/javaboy/order/OrderApplicationTests.java b/seata-xa/order/src/test/java/org/javaboy/order/OrderApplicationTests.java new file mode 100644 index 0000000..e4b4b00 --- /dev/null +++ b/seata-xa/order/src/test/java/org/javaboy/order/OrderApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.order; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class OrderApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/seata-xa/pom.xml b/seata-xa/pom.xml new file mode 100644 index 0000000..12cf1bb --- /dev/null +++ b/seata-xa/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + org.javaboy + seata-xa + pom + 1.0-SNAPSHOT + + common + + + + \ No newline at end of file diff --git a/seata-xa/storage/pom.xml b/seata-xa/storage/pom.xml new file mode 100644 index 0000000..d3dc71e --- /dev/null +++ b/seata-xa/storage/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + org.javaboy + storage + 0.0.1-SNAPSHOT + + Demo project for Spring Boot + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + 2.2.2.RELEASE + Hoxton.SR9 + + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + common + org.javaboy + 1.0-SNAPSHOT + + + mysql + mysql-connector-java + runtime + 8.0.11 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + + + + diff --git a/seata-xa/storage/src/main/java/org/javaboy/StorageApplication.java b/seata-xa/storage/src/main/java/org/javaboy/StorageApplication.java new file mode 100644 index 0000000..2a943d4 --- /dev/null +++ b/seata-xa/storage/src/main/java/org/javaboy/StorageApplication.java @@ -0,0 +1,16 @@ +package org.javaboy; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +@MapperScan(basePackages = "org.javaboy.storage.mapper") +public class StorageApplication { + + public static void main(String[] args) { + SpringApplication.run(StorageApplication.class, args); + } + +} diff --git a/seata-xa/storage/src/main/java/org/javaboy/storage/config/DataSourceConfiguration.java b/seata-xa/storage/src/main/java/org/javaboy/storage/config/DataSourceConfiguration.java new file mode 100644 index 0000000..69bc74d --- /dev/null +++ b/seata-xa/storage/src/main/java/org/javaboy/storage/config/DataSourceConfiguration.java @@ -0,0 +1,51 @@ +package org.javaboy.storage.config; + +import com.alibaba.druid.pool.DruidDataSource; +import io.seata.rm.datasource.xa.DataSourceProxyXA; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.transaction.SpringManagedTransactionFactory; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.sql.DataSource; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +public class DataSourceConfiguration { + + @Bean + @ConfigurationProperties(prefix = "spring.datasource") + public DruidDataSource druidDataSource() { + return new DruidDataSource(); + } + + @Bean("dataSourceProxy") + @Primary + public DataSource dataSource(DruidDataSource druidDataSource) { + return new DataSourceProxyXA(druidDataSource); + } + + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSourceProxy)throws Exception{ + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(dataSourceProxy); +// sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() +// .getResources("classpath*:/mapper/*.xml")); +// sqlSessionFactoryBean.setTypeAliasesPackage("io.seata.sample.entity"); + sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory()); + return sqlSessionFactoryBean.getObject(); + } + +} \ No newline at end of file diff --git a/seata-xa/storage/src/main/java/org/javaboy/storage/controller/StorageController.java b/seata-xa/storage/src/main/java/org/javaboy/storage/controller/StorageController.java new file mode 100644 index 0000000..2361f14 --- /dev/null +++ b/seata-xa/storage/src/main/java/org/javaboy/storage/controller/StorageController.java @@ -0,0 +1,32 @@ +package org.javaboy.storage.controller; + +import org.javaboy.common.RespBean; +import org.javaboy.storage.service.StorageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class StorageController { + + @Autowired + StorageService storageService; + + @PostMapping("/deduct") + public RespBean deduct(@RequestParam("productId") String productId, @RequestParam("count") Integer count) { + if (storageService.deduct(productId, count)) { + return RespBean.ok("扣库存成功"); + } + return RespBean.error("扣库存失败"); + } +} diff --git a/seata-xa/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java b/seata-xa/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java new file mode 100644 index 0000000..65f2668 --- /dev/null +++ b/seata-xa/storage/src/main/java/org/javaboy/storage/mapper/StorageMapper.java @@ -0,0 +1,24 @@ +package org.javaboy.storage.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +//@Mapper +public interface StorageMapper { + @Update("update storage_tbl set count=count-#{count} where commodity_code=#{productId}") + int deduct(@Param("productId") String productId, @Param("count") Integer count); + + @Select("select count from storage_tbl where commodity_code=#{productId}") + int getCountByProductId(String productId); +} diff --git a/seata-xa/storage/src/main/java/org/javaboy/storage/service/StorageService.java b/seata-xa/storage/src/main/java/org/javaboy/storage/service/StorageService.java new file mode 100644 index 0000000..5613d01 --- /dev/null +++ b/seata-xa/storage/src/main/java/org/javaboy/storage/service/StorageService.java @@ -0,0 +1,31 @@ +package org.javaboy.storage.service; + +import org.javaboy.storage.mapper.StorageMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Service +public class StorageService { + @Autowired + StorageMapper storageMapper; + + public boolean deduct(String productId, Integer count) { + System.out.println("productId = " + productId); + System.out.println("count = " + count); + int c = storageMapper.getCountByProductId(productId); + if (c < count) { + throw new RuntimeException("库存不足,扣库存失败"); + } + int deduct = storageMapper.deduct(productId, count); + return deduct == 1; + } +} diff --git a/seata-xa/storage/src/main/resources/application.properties b/seata-xa/storage/src/main/resources/application.properties new file mode 100644 index 0000000..9527981 --- /dev/null +++ b/seata-xa/storage/src/main/resources/application.properties @@ -0,0 +1,12 @@ +server.port=1114 +spring.application.name=storage +eureka.client.service-url.defaultZone=http://localhost:8761/eureka + +spring.datasource.username=root +spring.datasource.password=123 +spring.datasource.url=jdbc:mysql:///xa_storage?serverTimezone=Asia/Shanghai&useSSL=false +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource + +spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group +seata.enable-auto-data-source-proxy=false \ No newline at end of file diff --git a/seata-xa/storage/src/main/resources/file.conf b/seata-xa/storage/src/main/resources/file.conf new file mode 100755 index 0000000..e38ee82 --- /dev/null +++ b/seata-xa/storage/src/main/resources/file.conf @@ -0,0 +1,66 @@ +transport { + # tcp udt unix-domain-socket + type = "TCP" + #NIO NATIVE + server = "NIO" + #enable heartbeat + heartbeat = true + # the client batch send request enable + enableClientBatchSendRequest = true + #thread factory for netty + threadFactory { + bossThreadPrefix = "NettyBoss" + workerThreadPrefix = "NettyServerNIOWorker" + serverExecutorThread-prefix = "NettyServerBizHandler" + shareBossWorker = false + clientSelectorThreadPrefix = "NettyClientSelector" + clientSelectorThreadSize = 1 + clientWorkerThreadPrefix = "NettyClientWorkerThread" + # netty boss thread size,will not be used for UDT + bossThreadSize = 1 + #auto default pin or 8 + workerThreadSize = "default" + } + shutdown { + # when destroy server, wait seconds + wait = 3 + } + serialization = "seata" + compressor = "none" +} +service { + #transaction service group mapping + vgroupMapping.my_test_tx_group = "default" + #only support when registry.type=file, please don't set multiple addresses + default.grouplist = "127.0.0.1:8091" + #degrade, current not support + enableDegrade = false + #disable seata + disableGlobalTransaction = false +} + +client { + rm { + asyncCommitBufferLimit = 10000 + lock { + retryInterval = 10 + retryTimes = 30 + retryPolicyBranchRollbackOnConflict = true + } + reportRetryCount = 5 + tableMetaCheckEnable = false + reportSuccessEnable = false + } + tm { + commitRetryCount = 5 + rollbackRetryCount = 5 + } + undo { + dataValidation = true + logSerialization = "jackson" + logTable = "undo_log" + } + log { + exceptionRate = 100 + } +} \ No newline at end of file diff --git a/seata-xa/storage/src/main/resources/registry.conf b/seata-xa/storage/src/main/resources/registry.conf new file mode 100755 index 0000000..7f2236f --- /dev/null +++ b/seata-xa/storage/src/main/resources/registry.conf @@ -0,0 +1,79 @@ +registry { + # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa + type = "eureka" + + nacos { + application = "seata-server" + serverAddr = "localhost" + namespace = "" + username = "" + password = "" + } + eureka { + serviceUrl = "http://localhost:8761/eureka" + weight = "1" + } + redis { + serverAddr = "localhost:6379" + db = "0" + password = "" + timeout = "0" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + sofa { + serverAddr = "127.0.0.1:9603" + region = "DEFAULT_ZONE" + datacenter = "DefaultDataCenter" + group = "SEATA_GROUP" + addressWaitTime = "3000" + } + file { + name = "file.conf" + } +} + +config { + # file、nacos 、apollo、zk、consul、etcd3、springCloudConfig + type = "file" + + nacos { + serverAddr = "localhost" + namespace = "" + group = "SEATA_GROUP" + username = "" + password = "" + } + consul { + serverAddr = "127.0.0.1:8500" + } + apollo { + appId = "seata-server" + apolloMeta = "http://192.168.1.204:8801" + namespace = "application" + } + zk { + serverAddr = "127.0.0.1:2181" + sessionTimeout = 6000 + connectTimeout = 2000 + username = "" + password = "" + } + etcd3 { + serverAddr = "http://localhost:2379" + } + file { + name = "file.conf" + } +} diff --git a/seata-xa/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java b/seata-xa/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java new file mode 100644 index 0000000..0a32d95 --- /dev/null +++ b/seata-xa/storage/src/test/java/org/javaboy/storage/StorageApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.storage; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class StorageApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/security_demo_new/pom.xml b/security_demo_new/pom.xml new file mode 100644 index 0000000..b575c0c --- /dev/null +++ b/security_demo_new/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.0 + + + org.javaboy + security_demo_new + 0.0.1-SNAPSHOT + security_demo_new + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/security_demo_new/src/main/java/org/javaboy/security_demo_new/SecurityDemoNewApplication.java b/security_demo_new/src/main/java/org/javaboy/security_demo_new/SecurityDemoNewApplication.java new file mode 100644 index 0000000..13076b8 --- /dev/null +++ b/security_demo_new/src/main/java/org/javaboy/security_demo_new/SecurityDemoNewApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.security_demo_new; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SecurityDemoNewApplication { + + public static void main(String[] args) { + SpringApplication.run(SecurityDemoNewApplication.class, args); + } + +} diff --git a/security_demo_new/src/main/java/org/javaboy/security_demo_new/config/SecurityConfig.java b/security_demo_new/src/main/java/org/javaboy/security_demo_new/config/SecurityConfig.java new file mode 100644 index 0000000..5fb8de1 --- /dev/null +++ b/security_demo_new/src/main/java/org/javaboy/security_demo_new/config/SecurityConfig.java @@ -0,0 +1,56 @@ +package org.javaboy.security_demo_new.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.DefaultSecurityFilterChain; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; + +import javax.servlet.Filter; +import java.util.ArrayList; +import java.util.List; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +public class SecurityConfig { + + @Bean + UserDetailsService userDetailsService() { + InMemoryUserDetailsManager users = new InMemoryUserDetailsManager(); + users.createUser(User.withUsername("javaboy").password("{noop}123").roles("admin").build()); + users.createUser(User.withUsername("江南一点雨").password("{noop}123").roles("admin").build()); + return users; + } + +// @Bean + WebSecurityCustomizer webSecurityCustomizer() { + return web -> web.ignoring().antMatchers("/hello"); + } + + @Bean + SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http.authorizeRequests() + .anyRequest().authenticated() + .and() + .formLogin() + .permitAll() + .and() + .csrf().disable(); + return http.build(); + } + +} diff --git a/security_demo_new/src/main/java/org/javaboy/security_demo_new/controller/HelloController.java b/security_demo_new/src/main/java/org/javaboy/security_demo_new/controller/HelloController.java new file mode 100644 index 0000000..b9bbdb9 --- /dev/null +++ b/security_demo_new/src/main/java/org/javaboy/security_demo_new/controller/HelloController.java @@ -0,0 +1,22 @@ +package org.javaboy.security_demo_new.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class HelloController { + + @GetMapping("/hello") + public String hello() { + return "hello 江南一点雨!"; + } +} diff --git a/security_demo_new/src/main/resources/application.properties b/security_demo_new/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/security_demo_new/src/test/java/org/javaboy/security_demo_new/SecurityDemoNewApplicationTests.java b/security_demo_new/src/test/java/org/javaboy/security_demo_new/SecurityDemoNewApplicationTests.java new file mode 100644 index 0000000..c734a6c --- /dev/null +++ b/security_demo_new/src/test/java/org/javaboy/security_demo_new/SecurityDemoNewApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.security_demo_new; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SecurityDemoNewApplicationTests { + + @Test + void contextLoads() { + } + +}