From e2a22af39cb290e61347ca80180442d03d49d63f Mon Sep 17 00:00:00 2001 From: Scout Wang <464621663@qq.com> Date: Sat, 16 Mar 2024 17:33:34 +0800 Subject: [PATCH] blog: add Kitex Dubbo interoperate (#1039) --- .../news/Kitex_Dubbo_interoperate/index.md | 342 ++++++++++++++++++ .../kitex_dubbo_interoperate.png | Bin 0 -> 43489 bytes .../types_convert_process.png | Bin 0 -> 19030 bytes .../types_convert_process_with_thrift.png | Bin 0 -> 24144 bytes 4 files changed, 342 insertions(+) create mode 100644 content/zh/blog/news/Kitex_Dubbo_interoperate/index.md create mode 100644 static/img/blog/Kitex_Dubbo_interoperate/kitex_dubbo_interoperate.png create mode 100644 static/img/blog/Kitex_Dubbo_interoperate/types_convert_process.png create mode 100644 static/img/blog/Kitex_Dubbo_interoperate/types_convert_process_with_thrift.png diff --git a/content/zh/blog/news/Kitex_Dubbo_interoperate/index.md b/content/zh/blog/news/Kitex_Dubbo_interoperate/index.md new file mode 100644 index 0000000000..9ee58ca560 --- /dev/null +++ b/content/zh/blog/news/Kitex_Dubbo_interoperate/index.md @@ -0,0 +1,342 @@ +--- +date: 2024-03-16 +title: "Kitex 支持 Dubbo 协议:助力多语言云原生生态融合" +projects: ["Kitex"] +linkTitle: "Kitex 支持 Dubbo 协议:助力多语言云原生生态融合" +keywords: ["Kitex", "CloudWeGo", "云原生", "开源", "Golang", "Java", "Dubbo"] +description: "本文介绍了 Kitex 支持与 Dubbo 互通,成功帮助企业完成 Java 转 Go 的落地案例。" +author: DMwangnima +--- + +## 背景 + +Kitex 是字节跳动基础架构服务框架团队推出的 Go 微服务 RPC 框架,支持 Thrift、Kitex Protobuf、gRPC 等消息协议,具有高性能、强可扩展的特点。于 2021 年 9 月正式开源后,已在多家外部企业成功落地,为他们带来了真实的成本、性能和稳定性收益。 + +很多企业用户在使用 Kitex 改造服务的过程中,需要 Kitex 能与现有的 Dubbo 框架实现的服务进行通信,这与 CloudWeGo 社区积极拓展生态的目标不谋而合,因此 Dubbo 互通项目 [codec-dubbo](https://github.com/kitex-contrib/codec-dubbo) 应运而生。 + +在社区同学的热情帮助下,目前 codec-dubbo 能做到 Kitex 与 Dubbo-Java,Kitex 与 Dubbo-Go 互通,支持 Dubbo 用户向 Kitex 迁移。 + +![image](/img/blog/Kitex_Dubbo_interoperate/kitex_dubbo_interoperate.png) + +本文将以方正证券利用 Kitex 与 codec-dubbo 成功进行服务改造为例,对改造过程中使用到的 codec-dubbo 主要功能进行阐述,并简要分析其中的实现细节。 + +## 企业落地案例 + +方正证券原有的服务采用 Java 和 Dubbo 框架编写,两者稳定且经过了大量场景的验证,符合他们的生产和开发需求。以请求量较大的小方个股详情页为例,高峰期的接口 QPS 在 3-4k,使用 16 台 16 Core 64G 虚拟机进行承载。 + +随着云原生架构的兴起,凭借内存占用与执行效率的优势以及天然适配云原生,Go 逐渐成为构建企业服务的重要技术选项。为了更好地降本增效,综合考虑成本、性能和稳定性等因素后,他们决定在新建应用上由 Java 转向 Go,引入 Kitex,Hertz 等 CloudWeGo 项目进行服务开发与重构,并整体迁移至 Kubernetes 环境。 + +在重构过程中,codec-dubbo 凭借接近原生 Kitex + Thrift 的使用体验以及对 Dubbo 概念的良好支持,降低了使用和理解成本,成功帮助他们解决了 Kitex <-> Dubbo 的互通问题,让 Kitex 服务顺利调用原有的 Dubbo 服务。 + +目前,使用了 codec-dubbo 的 Kitex 服务已成功上线,稳定运行两个月。还是以小方个股详情页为例,Kitex 和 Hertz 承载了该页面一半左右的接口,在 QPS 不变的情况下,只需要提供 12 个 4 Core 4G Pod,降低资源占用效果显著。 + +## codec-dubbo 功能特性 + +### Dubbo 协议编解码器 + +Dubbo 服务主要使用 Dubbo 协议进行通信,为了支持 Kitex <-> Dubbo 互通,我们需要在 Kitex 中实现 Dubbo 协议。得益于 Kitex 优秀的扩展性,codec-dubbo 根据 Kitex 提供的 Codec 接口实现了 DubboCodec 这一核心编解码器,只需在初始化时注入 DubboCodec 便能使用 Dubbo 协议。 + +### 类型映射与拓展 + +#### 类型映射 + +Dubbo 主要使用 Hessian2 序列化协议进行 Payload 的编解码,它最大的特点是自描述序列化类型,即不依赖外部 Schema 或接口定义。序列化过程依赖编程语言类型和 Hessian2 类型之间的映射,以 Go 类型转化为 Java 类型为例: + +![image](/img/blog/Kitex_Dubbo_interoperate/types_convert_process.png) + +经过分析,我们发现 Hessian2 的基础类型系统与 Thrift 基本重合。为了保证 Kitex + codec-dubbo 的使用体验与 Kitex + Thrift 基本一致,我们基于 Thrift IDL 来生成 Kitex Dubbo-Hessian2 脚手架代码,此时类型转化过程如下所示: + +![image](/img/blog/Kitex_Dubbo_interoperate/types_convert_process_with_thrift.png) + +参考 Dubbo 官方的 [dubbo-go-hessian2](https://github.com/apache/dubbo-go-hessian2) 类型映射,codec-dubbo 提供如下类型映射(此处仅包含部分映射,更多注意事项请参考 codec-dubbo Readme ): + +| **THRIFT 类型** | **Go 类型** | **HESSIAN2 类型** | **JAVA 类型** | +|:-------------------:|:--------------------:|:-------------------:|:-----------------------:| +| i32 | int32 | int | java.lang.Integer | +| double | float64 | double | java.lang.Double | +| string | string | string | java.lang.String | +| list | \[\]int32 | list | List | +| list | \[\]float64 | list | List | +| list | \[\]string | list | List | +| map | map\[bool\]int32 | map | Map | +| map | map\[bool\]float64 | map | Map | +| map | map\[bool\]string | map | Map | + +根据 codec-dubbo 提供的类型映射,我们能很轻松地将 Dubbo 接口定义转化为 Thrift IDL,并使用 Kitex 命令行工具生成项目脚手架代码,最终注入 DubboCodec 完成 Kitex -> Dubbo 的通信。以下方 Dubbo 接口定义为例: +```java +package org.cloudwego.kitex.samples.api; + +public interface GreetProvider { + GreetResponse Greet(GreetRequest req) throws Exception; +} + +public class GreetRequest implements Serializable { + String req; + + public GreetRequest(String req) { + this.req = req; + } +} + +public class GreetResponse implements Serializable { + String resp; + + public GreetResponse(String resp) { + this.resp = resp; + } +} +``` +对应的 api.thrift 文件如下所示,需要注意到其中的结构体定义都需要加上 ```JavaClassName``` 的注解,对应 Dubbo 接口定义中的 package + 类名。 +```thrift +struct GreetRequest { + 1: required string req, +} (JavaClassName="org.cloudwego.kitex.samples.api.GreetRequest") + +struct GreetResponse { + 1: required string resp, +} (JavaClassName="org.cloudwego.kitex.samples.api.GreetResponse") + +service GreetService { + GreetResponse Greet(1: GreetRequest req) +} +``` +使用 Kitex 命令行工具,并指定协议为 Hessian2: +```shell +kitex -module demo-client -protocol Hessian2 ./api.thrift +``` +之后初始化 DubboCodec 并将其注入 Kitex ,利用生成代码编写以下 Client 端代码即可实现 Kitex -> Dubbo 调用: +```go +javaClass := "org.cloudwego.kitex.samples.api.GreetProvider" +cli, err := greetservice.NewClient("helloworld", + // 指定想要访问的服务端地址,也支持 ZooKeeper 服务发现 + client.WithHostPorts("127.0.0.1:21000"), + // 配置 DubboCodec + client.WithCodec( + // 指定想要调用的 Dubbo Interface + dubbo.NewDubboCodec(dubbo.WithJavaClassName(javaClass)) + ), +) +if err != nil { + panic(err) +} + +resp, err := cli.Greet(context.Background(), + &hello.GreetRequest{Req: "world"}) +if err != nil { + klog.Error(err) + return +} +klog.Infof("resp: %s", resp.Resp) +``` +Kitex + codec-dubbo Server 端流程与 Client 端基本类似,具体例子可参考项目主页。 + +#### 类型拓展 + +Hessian2 schema-free 的特性导致 Dubbo 的实现“过于灵活”,可以使用任意类型。为了适配 Dubbo Hessian2 的类型使用灵活性,codec-dubbo 支持类型拓展,其中主要包括自定义映射与 Java 常用类型拓展。 + +##### 自定义映射 + +Java 的基础类型有与之对应的包装类型,例如 ```boolean``` 与 ```java.lang.Boolean```。类型映射中默认将 Go 的 类型映射到 Java 的 ```java.lang.Boolean``` 类型并不能覆盖到使用 ```boolean``` 的情况。 + +为了统一用户使用体验,让他们在 Kitex 侧只需使用 ```bool``` 类型,我们可以在 Thrift 的方法定义后面加上 ```hessian.argsType="boolean"``` 注解,利用 thriftgo 的 IDL 反射功能,提前生成 IDL 元信息并注入 codec-dubbo,便可以在运行时动态地将默认映射类型 ```java.lang.Boolean``` 改写成 ```boolean``` 。具体 Thrift 定义如下所示: +```thrift +service EchoService { + bool EchoBoolean(1: bool req) (hessian.argsType="boolean") +} +``` +与 ```boolean``` 和 ```java.lang.Boolean``` 类似,其他 Java 基础类型和包装类型也能通过这种方式进行自定义映射,此时 codec-dubbo 提供的完整类型映射如下: + +| **THRIFT 类型** | **GO 类型** | **HESSIAN2 类型** | **默认 JAVA 类型** | **可拓展 JAVA 类型** | +|:-------------------:|:--------------------:|:-------------------:|:-----------------------:|:------------------------------------------:| +| i32 | int32 | int | java.lang.Integer | int | +| double | float64 | double | java.lang.Double | double float / java.lang.Float | +| string | string | string | java.lang.String | \- | +| list | \[\]int32 | list | List | int\[\] / ArrayList | +| list | \[\]float64 | list | List | double\[\] / ArrayList float\[\] | +| list | \[\]string | list | List | String\[\] / ArrayList | +| map | map\[bool\]int32 | map | Map | HashMap | +| map | map\[bool\]float64 | map | Map | HashMap | +| map | map\[bool\]string | map | Map | HashMap | + +##### java 常用类型拓展 + +由于 Thrift 类型的局限性,我们无法直接使用 Java 类库中提供的常用类型。为此,codec-dubbo 在 [codec-dubbo/java](https://github.com/kitex-contrib/codec-dubbo/tree/main/java) 包中维护了 Thrift 不支持的 Java 类型(例如 ```java.lang.Object``` 、 ```java.util.Date``` )以及与之对应的 [java.thrift](https://github.com/kitex-contrib/codec-dubbo/blob/main/java/java.thrift) ,同时借助 thriftgo 提供的 idl-ref 功能,我们可以直接在 Thrift IDL 中引用这些类型并生成相应代码。当前的 java.thrift 如下所示: +```thrift +struct Object {} (JavaClassName="java.lang.Object") + +struct Date {} (JavaClassName="java.util.Date") + +struct Exception {} (JavaClassName="java.lang.Exception") +``` +为了启用这些类型,我们需要在 Thrift IDL 中使用 ```include "java.thrift"``` 导入它们,并且在使用 Kitex 命令行工具生成代码时添加 ```-hessian2 java_extension``` 参数来拉取该拓展包。 + +Kitex 命令行工具会自动下载 java.thrift ,你也可以手动下载后放到项目的根目录。引用 java.thrift 中类型的 Thrift IDL 示例: +```thrift +include "java.thrift" + +service EchoService { + // java.lang.Object + i64 EchoString2ObjectMap(1: map req) + // java.util.Date + i64 EchoDate(1: java.Date req) +} +``` +### 方法重载 + +Go 原生不支持方法重载,只能通过定义多个方法来达到类似重载的效果。为了将 Go 中的多个方法映射到 Java 中的重载方法,与自定义映射一节类似,我们在 Thrift 的方法定义后面加上 ```JavaMethodName``` 标签,借助 thriftgo 的 IDL 反射功能在运行时动态地将 Go 侧原本的方法名改写成 ```JavaMethodName``` 指定的 Java 侧中的重载方法。 + +以 Java 侧的 EchoMethod 为例: +```java +String EchoMethod(Boolean req); +String EchoMethod(Integer req); +String EchoMethod(int req); +String EchoMethod(Boolean req1, Integer req2); +``` +我们编写如下 Thrift 定义,即可完成 Go 与 Java 间的重载方法映射,注意到 ```JavaMethodName``` 和 ```hessian.argsType``` 可以同时使用: +```thrift +service EchoService { + string EchoMethodA(1: bool req) (JavaMethodName="EchoMethod") + string EchoMethodB(1: i32 req) (JavaMethodName="EchoMethod") + string EchoMethodC(1: i32 req) (JavaMethodName="EchoMethod", hessian.argsType="int") + string EchoMethodD(1: bool req1, 2: i32 req2) (JavaMethodName="EchoMethod") +} +``` +### 异常处理 + +codec-dubbo 将 Java 中的异常映射为 Go 中的错误,这些错误统一实现以下接口: +```go +type Throwabler interface { + Error() string + JavaClassName() string + GetStackTrace() []StackTraceElement +} +``` +根据 Dubbo 官方推荐的异常处理实践以及企业用户目前的需求,我们将异常划分为常见异常与自定义异常,同时兼顾用户的基础需求以及可扩展需求。 + +#### 常见异常 + +codec-dubbo 在 [pkg/hessian2/exception](https://github.com/kitex-contrib/codec-dubbo/tree/main/pkg/hessian2/exception) 包中提供了 Java 常见的异常,目前支持 ```java.lang.Exception``` 。 + +常见异常无需 Kitex 命令行工具的支持,直接引用即可,以下是 Client 端提取异常和 Server 端返回异常的示例。 + +##### Client端提取异常 +```go +resp, err := cli.Greet(context.Background(), + &hello.GreetRequest{Req: "world"}) +if err != nil { + // FromError 返回 Throwabler + exceptionRaw, ok := hessian2_exception.FromError(err) + if !ok { + // 视作常规错误处理 + } else { + // 若不关心 exceptionRaw 的具体类型,直接调用 Throwabler 提供的方法即可 + klog.Errorf("get %s type Exception", exceptionRaw.JavaClassName()) + // 若想获得 exceptionRaw 的具体类型,需要进行类型转换,但前提是已知该具体类型 + exception := exceptionRaw.(*hessian2_exception.Exception) + } +} +``` +##### Server端返回异常 +```go +func (s *GreetServiceImpl) Greet(ctx context.Context, req *hello.GreetRequest) (resp *hello.GreetResponse, err error) { + return nil, hessian2_exception.NewException("Your detailed message") +} +``` +#### 自定义异常 + +Java 中的自定义异常往往会继承一个基础异常,这里以 ```CustomizedException``` 为例,```CustomizedException``` 继承了 ```java.lang.Exception``` : +```java +public class CustomizedException extends Exception { + private final String customizedMessage; + + public CustomizedException(String customizedMessage) { + super(); + this.customizedMessage = customizedMessage; + } +} +``` +得益于 thriftgo 支持生成嵌套结构体,为了在 Kitex 侧定义与之对应的异常,我们在 Thrift 中编写如下定义: +```thrift +exception CustomizedException { + // thrift.nested=“true” 注解让 thriftgo 生成嵌套结构体 + 1: required java.Exception exception (thrift.nested="true") + 2: required string customizedMessage +}(JavaClassName="org.cloudwego.kitex.samples.api.CustomizedException") +``` +注意 ```exception``` 字段的注解 ```thrift.nested="true"``` ,它让 thriftgo 生成嵌套结构体,达到类似继承的效果。 + +和 Java 常用类型扩展一样,需要在使用 kitex 脚手架工具生成代码时添加 ```-hessian2 java_extension``` 参数来拉取拓展包,生成代码如下: +```go +type EchoCustomizedException struct { + java.Exception `thrift:"exception,1,required" frugal:"1,required,java.Exception" json:"exception"` + + CustomizedMessage string `thrift:"customizedMessage,2,required" frugal:"2,required,string" json:"customizedMessage"` +} +``` +使用方法与常见异常一致,此处不再赘述。 + +### 服务注册与发现 + +Dubbo 同时提供**接口级**与**应用级**服务注册发现模型,根据企业用户当前的生产环境需要,我们选择优先实现基于 zookeeper 的**接口级**模型:Dubbo registry-zookeeper。 + +与我们熟知的应用级模型不同,接口级模型需要维护接口名 => 服务(不同于微服务,更接近 Handler )的映射关系,一个接口名会映射到多个服务 ,这些服务可能会存在于同一个进程中。 + +考虑到 Dubbo 的接口级服务模型与 Kitex 的服务模型差别较大,且 Dubbo registry-zookeeper 应绑定 codec-dubbo 使用,因此不考虑修改 kitex-contrib 中原有的 registry-zookeeper,让 dubbo registry-zookeeper 成为 codec-dubbo 的一个子 go module 统一进行开发与维护。 + +综合考虑 Dubbo 接口级服务模型、Kitex API 与用户的使用体验,我们提供以下的配置层次: + +1. [registry/options.go](https://github.com/kitex-contrib/codec-dubbo/blob/main/registries/zookeeper/registry/options.go) 与 [resolver/options.go](https://github.com/kitex-contrib/codec-dubbo/blob/main/registries/zookeeper/resolver/options.go) 中的 WithServers 和 WithRegistryGroup 函数提供注册中心级别的配置,分别指定 zookeeper 的地址和这些 zookeeper 所属的组。用户使用这些函数生成 Kitex 中 ```registry.Registry``` 和 ```discovery.Resolver``` 实例。 + +2. 服务级别的配置由 ```client.WithTag``` 与 ```server.WithRegistryInfo``` 进行传递,[registries/common.go](https://github.com/kitex-contrib/codec-dubbo/blob/main/registries/common.go) 提供 Tag keys ,这些 key 与 Dubbo 中的服务元数据一一对应。 + +#### resolver 示例 +```go +intfName := "org.cloudwego.kitex.samples.api.GreetProvider" +res, err := resolver.NewZookeeperResolver( + // 指定 zookeeper 服务器的地址,可指定多个,请至少指定一个 + resolver.WithServers("127.0.0.1:2181"), +) +if err != nil { + panic(err) +} +cli, err := greetservice.NewClient("helloworld", + // 配置 ZookeeperResolver + client.WithResolver(res), + // 指定想要调用的 dubbo Interface + client.WithTag(registries.DubboServiceInterfaceKey, intfName), +) +if err != nil { + panic(err) +} +// 使用 cli 进行 RPC 调用 +``` +#### registry 示例 +```go +intfName := "org.cloudwego.kitex.samples.api.GreetProvider" +reg, err := registry.NewZookeeperRegistry( + // 指定 zookeeper 服务器的地址,可指定多个,请至少指定一个 + registry.WithServers("127.0.0.1:2181"), +) +if err != nil { + panic(err) +} + +svr := greetservice.NewServer(new(GreetServiceImpl), + server.WithRegistry(reg), + // 配置dubbo URL元数据 + server.WithRegistryInfo(&kitex_registry.Info{ + Tags: map[string]string{ + registries.DubboServiceInterfaceKey: intfName, + // application请与dubbo所设置的ApplicationConfig保持一致,此处仅为示例 + registries.DubboServiceApplicationKey: "application-name", + } + }), +) +// 启动 svr +``` +## 总结 + +Kitex 支持了 Dubbo 协议,是 CloudWeGo 助力多语言云原生生态融合的一大步,解决了众多企业用户 Java 转 Go 、 Java 与 Go 并存的痛点,欢迎大家试用和接入;如果在使用过程遇到任何问题,可以加入我们的飞书用户群,或者在 Github 上给我们提反馈。 + +[Kitex]: https://github.com/cloudwego/kitex +[codec-dubbo]: https://github.com/kitex-contrib/codec-dubbo diff --git a/static/img/blog/Kitex_Dubbo_interoperate/kitex_dubbo_interoperate.png b/static/img/blog/Kitex_Dubbo_interoperate/kitex_dubbo_interoperate.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3a0e405e7faf4774dd297ccc2276b7e56faea1 GIT binary patch literal 43489 zcmeFZbzIcZ(=QIV$YQ_(qJn}n3IZx6ostrg(jpxTN=k!*fJjMqcPX(*qlk1Zy~H9& zEGaF0&n`aS=id9gUcbM7f8M{8-OuODoS8W@b7tPN!K%u#S1(at!o$P6DlaFkhKF|n ziHApU9eNRbQkPQI4*tP+RFjp&EA73F!Na4&lb4pzcw@NQ;PsKV&1+GI;8@m|@`-?} z&sg>g3m7hfy;p>L+Voo zCr)C0g9az}UWi-e)*6ax8k`)Bbd}k;9j#TP`5;hnJOY?69)u1L|G)lQ51o7)u{SHt z^j{zR=R5HbJjukc|9;vXS{|AS#|HnL5DgRIM z|Ici&2j>5$153@AZRB&}Tv1;B>B3du7ySB(ZO1-;vz`3 zg^B!ht%1$HP@dM(OKNg9>1in`yrX4Cw^Uu}Z$ZWBt`U%m@R;Q0<#hu$N2?H%PXt_? zpCsgS(WPH=#!#L_@pc!@SCZ~8&+xa0TPs4>KWoqu!0yV3a~CZ3rI|R_-jqpwj|U;3 z^EIFpXH+AEUP%zochOXpbnh~7O^9LFCa>!}ny&s>o+$7RZaeHOVjxv8rN^@FyuonI?!Nc3es)<3i1WjC)LryYd^_AD=3%N{05G&or$z^8N6StWo(mcbSZrzN9F35J>and;b} z^bMb1jocP~lb*$IwR;fEl_nvsy-ky)0n5MbmuA>xPU5rW7n>gzXkapDjybOBjEN(V z06u@|1`wimB(njOCs3SXwUEw#=V$1~#;f}*WG4-GPTPxHbyOXvwX84seS)qYsGJQP zk2clxN1|Hi&A4k#WaR}Su3#l<4YXM3a-=E<9SX*ZbSFlB;nG}z}u%}&85qC^wi#qQxN;xY7ZOA*-XsybKS2x z%ITFpo8RQ(`I4q)0d~zqfSNuLy3<(ASXGVouFD>hzX;?i?hNFrSq;BS1zA?0)2J)l zlRS*ov%@T@7t4(9Qf5uU@~`_{T{(*j)3kE?GyQFE-I|v?#}6xJUjt1+HFAGE$j68D zD9x(t$g-x>TDSc=^wfZWkZM%qJ=u8uCa zc}m|8B><9vVq}~Q*og6=znKBGv^e}tu&6nixEy~`LjecmqCAe8NIR{xAi>9V z^r9#s*wuSUJbIC9tEQLyWMDutK&BQ%{ zf#`r7p~u?Z`m&z{IgT1>IZ@;dps8B~^dx_){8S_W-x(k?ASDz^kW44T3LSa} zCxEpp0%~Gh7iOjK2znTNBkZ(1)b*fOKH;djM~DQ~1BIbrKr3ZeJuh7XN)5o1biX^+ zag8994wh*U5Md`hn)3+=zz|E#jS6;$0A_g|WH}Y6B$VWfh;wT1RwaHD;zNhtiw9ls zhR>+0Ld9R)1$;|=Q_h81LU77;Vyxwi0cN>{wSm4a-@iC3m)lvNZm8324hSIR78N!8 z`WcG(4wVO|SniyBZXMtp_6o~kUIy6cD=6@^1Nu$g4F>eVn3JRZ8-;X|wJ=dy;L_Bf zINf8mu%-q>?qJ=lImDKprsU}jvOy>&(V5`GWj|`5V(sEDH~+AY&|M=Uz$XJsljghS zUxHAp%p4zVua!)_zWGEe_e&8qx&#l;uaOK${pFKd`>6nbzqL)iq+qbseV z#%rBd#G9DSh-bjUQ(u`y)9nv|S8>k%+o3|s_At<$d3PbnKK}9z&iIfUO%rT?lk6ME z%U${4C|d-4!dynyb)-m=_bwb~Y_l{QGv7`YWW^4j)kPZ}bS8{kPUVk|QJ(e;Hc}#B zWNaFF_MpxP^X@44NX&fNbEQYC-g#vt!6MboCH-Rm=Z=8KGo(rP4uFDA=v8CmIT^Cy zLW~8uo%qZ|J*3NkFT#K*m9e2b=mMiK~OR?0rn~jXK zo7?!(g#(mL8Nxziv_#L|WqmT?aaJO8cAES0z3qcOu~;@lSE=GK@-omCwMpj%d}y?6 z`jv+wPr>pS2bSkzRizWqZc( zSiCy(^@ay=C$DL6MgPLbBB|0E=g{#w`?Q1h(uWn^Q?-rzW7I+&e?@As(2od33n z9cK%8{#9?ek5t_r37q+B5?-YpY7j7>CD@aXq9DT?u z7^%qR3_W{f9w~MEkCz)cDR5t`ewi<8pVFU9@0W6~j5Jj9emmOg;u7*(zU6$llh7E9 zDgR-jgSk?n9iSSRd8~iM?u5TOQ7MVP>J#Fq@YLn7Tha`kmMMJk#1pGIUU+Lh!`lTri%j~VZxw~X11zj!a83hVyR(xEcmDbcIGSgeFvtpNsHC`0 zdTxIwG?`F-vTc93jdRoxdYZJ1+C!w~_J~;H{OZ|>cSk3Avsn&zH@Kd8z4QJQG(sdH z3%fSExI7$}cJR~4bv6AD8M4K8rQXeE;!LWI)>iC&M6Y55*5}AU+$jf7t|7_LMByho zirGI}e2zw31sk6=hJ7gy^BkXjhVHOPJF&^yN%LNocidf8EP2_UkQ*k&oHBtJ9B|zw z5<9+AGx+5w9%*3MIK~-x%4wnPvA53dHELo=Uy@=-p3*0>U%mD+B+BLM+W4Tzm(m@d zovg))*Mni`@wFpAr8`Ty@#W#APl#8R5>W+lSzdQe|9CA_#Y@%m+%h!V8Fwq3@*CK! zePg8Hh%DqrJqy}+rKzi^xH#dZmfU4p=nrSLIW)MgUI%Anb$+>%qpngJcAaf?ypG@5 zkBr{nOWD&%d^B%-Ynj~FqxHI;1a6CofgzpP-ZXBb)2%o`+TqTf(X^BIqg^AH8_&&F zEwDUQLhjZa%7LS0CQ|ma-ee{6VrN^J*vKO-{me%^^d~f=pqTP$K_tjBmKD-( zJT&-Gx^*J6a^!S&vY(W8vYH#Xfj(*wSy&qALp(eB&{!Hz~rSl@Yx`1 z;M#&srz>Y3nJtCI94jv$@bX%v`kdzesl3cY=KQ;T09l*Hr5-FGF#F-MavjV;+n9JrNpx&ey$>-X>jCY*3fRelF|xF7JU7xvy_Oooyz@+6 zG^`^ArCX#(MJ!7V86|PurA#Y$& zxJFg8U#d4c-%lrx*Je?o5noKzUFpPWSU;ASu_e!HxS6fP(L=u1a?4_bh}#gcw9L}5 z^lS>beB<~u334_C@unG<$A(Di*OLKZ*U+UhcId@0)U%!0Q}UWYbja#XUu$h1=04OE_Sj+wj!}F%u~DS8b;teBbM2Fg>kmN&Gln`*R&nUz`>CBhN7K8m zdYEKxG5gJeaEw(&h^A*x_+%%l7ymieYT9j){i&E*|!y9Q8bMi+fq$cG>g#emlH) zmV4pzefqWSZ=uUcye$}^mNL@y;Ub^K+sQF;Ht*4;vTEoK>Pdq>5c&2G*Ees2EG)UX z%4W2CcV$$G=`G{8+c$b!9XAz?=YEDRu!9YJTkwHPOqCwLy#U%9Kr zp4un2@7czdgG9jnvz;niJx0gkT?G}6{D?@Lf>}zU?Wbx>s(L0|x?{EPv+Uv-<-XRt z%NB?9JavOlHM-Fhg+w*L(PlQ|d_!S0S?1oSA!{$&y6!b*?XUB!OnbD{l&yP(ZJ73N zeDco;kwQxQ*^WpBl2jl1Bg*m!N2P;S#ixY4Cg3)DdcWotKd&9$Tl>1kFd@>o#kruH zPjzczN|%G{T|t+3v?{tDquq1MzS!k;6`VzH|3}wtnt`xS#T7VRm6+h+1c4k zhRujAPF8evXtk91ZO2~lxQrXCN}_gYK9m_AdcP}QCD0ZmhslQDhWmJ!4bp)7rc^Tu zU2HhGsbf{$nrrig#mbCdT>a_{GSHbXcla*1l z@z0-vt{XLBgufe7*?MSW4ftvu^A3Jzv;@oYt?j)Y9#}A~PU~`cCKxVyXc?zu$?d%M zwyNxYRl-;u6+B5rU(5;ZwKfHDNzwOG^Ww5$ubvVkL%L0m;s4-xG&9lK#hAUjdb00R zY0_WyM7t@VQn1FnpGV5F&#+cn5!oCW8)h>Rrg&F|yG~GL``EG1*>#wT31NM5`~m=(*h zQeB@woYcDQ#%R}?KlZZttEt@6&NfzoURFV$eIuRFB(ou$pnoyBnRx2`yWPUEiAJ zCgIhiq>>=S)fkH>H%z@!wX_f}mhrU(a%96;dZUYG%+Jo^^3Mz>BpLORf;NBF<04$9tQMDN_6jQvXtf3R zKF0QsVa6(S_bwOQ*zmU-le)rfU|>%AWG|B>k(rVOGf4C3&w0q#<{& zdbO1qdev0H{wx=jA?mp&EZo+zLig4Mjy!HJu2xhiXYR}waaDzNS>@=5@V%C`Y%ok? zp{-r$O#K|bT@fBVPN3s6D&4@|F7x3noM^FX@xz0vqfg0W9UC8Me%r9D`*VqYGtSEh zD75#fb0lcBSlzBF@szAcv+*~3=U6;GWVG13|Jqw?dj@kQd*r9k*>i!JdMNsO;nQq|UdzrwS1 zW?OV)g9zF6VB^)@HQ+!y)`RY%XoyU@(KXy{M~K{3Utk7k-~Q2klUT%bhmt@fuQTv&QKwKPeC+J*|r-U@z>fRSr&P^ zoutarXZU1?E}(KH{yCRkLB;A@;n^=}NtD?wX5xI|`MouvMyutd6ep2*>7s_WD}_>? zuUQ-8Urwl&!l!0UjR+}+pRs3LdL3x;B)};evE{YZ!CF^ZGmOr1AW@Vny7D@AGdSjc zZo^+WHSgC)BcrE%%OOuz3yUiQcU`rz(exWOL$X(6c;6h|+!J*>%+7jb=DhU?`Gu7f zDJ*~3Tf2bytJ6LAE@Pc;C}+=VpN_53X2Q)=b6S*@9F0nK$z|T6Z7eQoovw9LiY;o? z;f@^OHha{gz`pV>>GvCkB9SD9?25^jGiK5yD9HxiT|**7j6*Vt?IX%K7Lvk{E7cLbos84k zs~yXaeq@qf7DBhPA542SpL=k-S)nNJMvO^dPeJUl%ol^}V1)Xj(q|Ol0 z@xF1X+=NBIT8z@2U%LGCYwV`OS8Xk>nAukCc8IOni4mhm4ZS$Fj}a&I!JT&YPZUuj zB?*&%*=&!i{-pFcHz??ktZ&tOLov3xnz#QjMsi3Q5ePZhRo2!f8ql-9|L84n3u(QZ zuGQ&q;}a3x13H3%gvBUU6?glIkq;Hq8J5Ft;!l*ibMu2}qa$1n*uOO8iDs(I_h22- z>(&*sqM9PRO{dj4M|r)ZK^LMuRG;VbF+_aPxQz( zu%#?BQ<=R_M_Yf~Vw_RvL0{?HN|!BTOR){q^^KMxgq4SYx?!}NMjRVTv!PLCz_D1a zN$NXDLi#;>FOllXO>k>AB#&#ItbP*`y=;BPv1ZmyZr$KCSxlOH@hhp%l9a*zW-Cp& zSx$z-_*(&8w`wBBQN((7-QnK)_~;(>R2SZ|brOR`ZaIo|<=qOk25-7Wz~3u*8$yfQ zoCiNT*pg261+V@kAKtWaaavPOO&_){(NKh0Rwd&3<-+88t zilfgYqR(cI&dp;LatW~--kv}oC7}WeJ_=R-0LKksU-I&>s3=OYt6k36H-LT zZ`25U;(DpUyC>2Hm1CK8O{6q}zpoAHXiuU-s2kxF_92FA&4%%)4K=Q6%r#@$GS?Ik zb~pTH>9Rdw$Wk~fVqb9LvujWN0hHLt??oBjzJs~mT_o~Lfa#|QM**@;0mbBDs|u}} zwXGV&*S}D!7)DW5nca_RQYwedV`ffO9%UEu6|?tikwzMF6Je^J!uF`OmBF*!k9|Tj z6s$!)!#Z*kX5m_;%;Y;!7J6Un2^Ccp?>~L|^mnU_CsZTVcbYWVqD0gp#bYFPZON-& z=vk|3Y!C>@v1zd2sE`|6)B+LZQpm#Mlax;l{l*m* zeW{2bhc$-nn$iK~Hs>yXj&l9IXZ41&POD>INLY92xZy>GNeGj&KDC>7cZ#(9ekjT z6jsEb!_|wT1mAeo6P-_D6n$&VedjjyeO%#3Uo1o_*4si{RlNG05C;hsjRU-NtDh_#ve+)BLtM~v5+wjUR&mPzXNO-y{>$v8T!Krc~Wq13(;I@cDSG?0>I zpzTLVi9|e1ckrCwNzixY-B*{(b0gU0^_NN#2wks^8Ca`($?=S1^MQas$DTbpOsc+< zJi;d;~@RHi^4jEMhuIkcTD zMudBXF?&siX_W8Y=!qS|S3{8eUF7zKoUHMwzjX6S%AQ(Xyy}bFWS=dJ=XRZX-lDku ztzURVRJNAdj0j-DY`|4*I+tMRK;>GMs8yZ*f;cP$mKYH> zDuTMiX`#?K>SA@PsPy1db3QV5L>R6xX-@u!vR~IL_RWY2&EeN+^i-XzEAR66?~+9% z4gL&`7F%zKM);50EyPyzOF}x=4yRjJvUx~oPNNTw7wxC7L^5ZaRWuxLbp=~SFJQPY z8$^BQWL1CNH{kMC9wWWEYOkf{hfJ=mP2Hpnk#|YxdS8)Hrq@*Z&KPA~$kClusXtNc zH9iJkV$U|aCE{}Y<%dnFzHk(ad-TY+cSLGOYSF1(v=~h}_8!Cd<(gtd=qP&q4ixiy zAes{6I+oqT$MQ=t5#BvvoVDZS?{rN&bH0Zk?c|>0GDViM<2N`0BaCyk0hhE%(%ZuQ zzdkGW6$v~1HuK2eGYB0?2L`>qqQD>ApomvzZo=!^Q6SATVV)PqlugNH#V1^%%x4ii zX300oyItbxS-m4|wlS|P?xFUBGw<+Qs>l(_qR`X7lI51@>6dVqDjl8{HxrlbpI6FP zI5&a#S1x1-?`G})-obDu^gdZ_BrA_VtgyY)7kiXhX4I5wZqtj*FzGqt@gBPh`oNaDY2E3 zosHS<5Gb#C)y-O=t{VH4MfVQJl_k!l9qE@k&0-Xig#p+_xlR_n$|xJ|w8pZHp|ipq zK7GM7)tP}1a`;`bFx$G}a{qqz_=D2DF2PGI9;y^q_jvUR>rk%fMlTwM5p6ly)uGrt zWs&u#Vjt#O(6aGGrKp!>-qfT|{GGU-X4RXu+z~si`B7Ws1FDGCt&i6uuF{7_^xpQ^ zx@6Vxb$i?B=?RRfhx$ptz|&EivPRT;zmB9X*Itr+eIy%SlzHFm_X0UVHx^?3i7X_w zWJO=w>FT$q4^yH`FIF9GG&Rk6O9+X1uy8BMvBIMi9Pj@c3}1cpn-W>5PWx~zk;-+L zWBLr}pflr*dQ@7kZN<`sF)j-e9XPs6XN!dx^VcJjV+O@pn0DWOW?*C^At6Dxc*e{d z8U%yj2Y*{SEX=-SwW}j^ztW+|TfgnaWlSbRZGJ>-WNEOX_Va4*hHdC4Qr8^z&Fh3m zY#ElLQKxo`S@tc8Tn3>c9xeBBy_+hXzSVF34829lcecEsF`%m@=;9T#?${@0VR%>< zhw|xU3n8r-N!Xb;+g@fbtIR5EnhV>bRMWAt%+w!smGN|0udn8~xXV9Y%0Iz4K9Jwj zGb|%-_N-2He-e#2^#pa6o~7O-i-b8Zcuyj4O<2s6gPNQ7?r>Zj`_3P#O>QIb!r-j; zWz30Zec!VEURXo%@vN61>EK<1%|U;)p+^4Bezzyu^;cYy_B(~8>pp-pV5hW4pGpBSs42wwt`Y7?_p>SP&j4|x@;8; zcZ+oCQ83G)@F5;FuZnIPV3chzPoA5<#;tvl`8aXPV`o5?Vo=GX6mD7@_$SpvbgcK0 zl3ZQ#+of;!+pKgdYN+dH^#l?;y*`6BZN*2{qYd4h*z~>eQx1vDmFkjh^16?8TozKD>} z#P-M{+q1zVD)_J1xk|%o$F>y>(TLt0k>V3^E&Z&V^XV)c$5&nL#m(l9| zpyB*jy_@>1^amUB=M_g22)izk0*YB*w9TEUI1{S1M>FB(Vjb4m(wJ;XL*8_%1jjU_6=pojPj+sE#*6c4^mY#kh1xjhu=_^3o} z)Op30s$MS32g36$i(_&*{Lo%|tkKKEhA=UO+|Mo%dExy_+dOZ{q^C zOC2|5i`q-6Qs5vfp|m#0&?Hi6H{)h#IED3#^pm&C?~600d(4GJtcTuG0loI|b7scZ zl&=70{IJX%4S#&p$ecgetEQ;hRTBl_Wgj}R4*oM3!z~P-Qx+r&_2nEPf+1V~Zt{RW zm?~3| zRDWk$(q{Lsyu|nf2qrGS4maTsp}pUKEZ1O z)UQ`F&3-@NlO`r6CB(OSr{hNLVaWL}Ow3^4QJ`D@Qsgau)61)pujybgY$M;8FZ@TP zv0N-Ir(6s%_qi4U#wI*flOQ3moi(|z*PMLxO`fSBk`Iq3t zVo?&q)*Y2=)8sF7Q)GfPi+VDV?Fp0XQ*|kNHLNTwx_Y|;`-Ulqy7^c=!Aslx=)=;Q z#cG6ho^Lb&VC6IWU3EP!GvD1EoiH;pG%RhPc;@fKQO6Jf@DPVec=S{D-wy`k=mwW} z=DYYUD(4E8^mn_vpPu@=W!ghN)jK$rXrd!-D8CsU`+BetkmDj4NaBM!2Kc0F%5hjQ z&jNYBLZw#r+^-u=f1j+eK6^)wOrEz|zpT(hugV8tAmh?qiYgPn&fci`j~|CITaRxj zS=rf@&hzw=+~TvfoTBO>d7J5fw0(R-Ihn`jH~|y(LnmgP)J82poC0b|c~~v_b@+Ja zu*$_*tlXws|GA*i(ekLSoMUX>-bwf+@$_CB>^ zT&jl0#-6VT^XSzmLJS?$teYY^^tx5bjO_D{8?WB#+4ufauj6sF#=I!w00g}R0dO(= z?W#OMnm|K+L%u8_m!ZaG0FTP-(@90`OR(YjDUd@q@2fCN+_)dD#mAg)P&Bx;>a{*8 zAgw3y(~UL`dW(j}IW_tONNCce)ICN;mRIPdEBMm7xzI;DqR7R2*jdLe`IidN=aB` z3gh;;Gs>pCGs_2f?AYxGLQj>I5$l00{u1IYBde3PffvdjSj%t#^Yo_p+n1KgL)zDK zv4-(Jl)i+dStr%I>0&mi-veSE%zc%3j(C0cl<^qGa>}+5joXowD_5Mj3?@a@K1J3sMiVu=_QLH2@rXD49ll$6GEZ?3Z)l{r zs-&PbUGJ9vm}UV5Gv$$4tu_EVr&TA!5J<3YP+j!_l=1x)MCAM$GsCk z;lPV#6i_X>iFBYFmr;5V=un#YVDHvYQ)_3DpO$KsU_)&!Dki^PscVJj*F}8z_=t<0 z5UAoj7IA60dX8f6hY*C4A(bqjE<AhO!Poa8)XE(n$P)nTQpJ&4_9b$PkF5i081=&hJ zBXD5hGjFco82`?g?l`Efu5SMN^_L?oxU{WN&6)Z$Lg5RUi* zVG#R&ePIO{P>`|YKgI`k6z`IfL^9uKCGFHIMBn-jho)2@2XM7=ox9g?3u*+2qiV3Q zwb6E|F!S^Cs9>wOAX+M_ zhX4i4e~aJl_9c@?|K=2i0O+rlljDg1PHHcfAjtKk*!a>Aixnoal0(du$N1-}#q)Cl zFlu)wZhdh&BERgTTxRjA9=(Z%qT8?mO*@)S;Ml-^oaucdN);8KDW7ld3Vupb>r8c*EE% z7te1Cs?kB5peS8tP&Z<^o9vO(OK!9<4J5XjW<{VQ*roV>U+P-qg+NL?(axg= z2J-cPzF*EMbH8zqweKG6<;&Gs|IDMp7*@ zk%>HfXj}%uO(u0xzz8D4rJf$*1VEb6* z0^@;qfMV%NCS4@Q!x9d3o$Cf4IE5QQEegP>Nd6hse=xk~8mT3=v_WWP7$~=&t~H%h zFW49z>9$ERGBV19b#1*ld@qC(C0M@|FcrehM0l=OaVyAg@u!Qq@P}{<-yqJb0>u9` z>_7pAhh%>Kn?mwCCI9NOrrVWO-9?<>AS1mWCsu&7A3R7oz)4p?H(k%yYlcDFzl`;! z2=!d%s_&1fTl2StwlXUIBbEhd-7UwDHMu^ z)adW`8@i(=miW^+*5>Dt4Nit1j)G$GesEULNgiZsAS<95&tSVW~!o<~aTL`grT_Fm!k*jT)P z&uP83A?i}2NgGKX#iL-WlhFT|XAQVa%x^LAo-4m~; zny?!ZBvkHk!9o8e5mR6r7TgRM&xxly5s-f!92}&<>@j3!L6~x#?cA|JvDiVGrEJ>m zhZ}~HMdF_Uhy#-Nyeygk6bPK3JM2{o+_26C-euxC;Ml|I$H|tQR4R*3kH%3_B?Z3Q zy^1=vWE@!4G=i z?Vh_|KeGN06~az7w_JpA&MA25uEBf`$5e6>?epzVWVl`M1OX*Wgeqy`&i0Epz#uBu zJ!5CqWFuZ^qZAbt4LTgrPGUh(Ea#77L*P9QC6V*TEg?*n0N1wfS|Yu#F5Sj1BqU_B zu&_|OTvqa%O-e_vGw@>k$A4bq0*h}1?Soh4=keMcm@7z%O61yFy1PF{Hq&Ux3Gs7; zPoL;g-qAQ|C&C>RIxrLf#YiAoxX!nC&F|dT{I2on|Anfu;b1i_bsW@>18h;TNWwSqBp|vkbfBvFwp(rfODf@-hnCDGDUsF zpjVUFO560ya2;ETw7~iDAHedOwv?UcIZ+k!tF7Pi+#(`V&%8^dwUwl02~CS!;dRu6 z=gOi70g;qUROg)W=a5PR-J*d_Y#k^zsPvFh-Ab=v-oVqr;ZgC=Oulo2^dkTi2xm6$ zp4%fGgQ^7?%`iQ@Xg`cbsJq5-k*$h1Wt!;x6y5~W2s@wKqt3G)h?F?NPHElxa=r?f z(^->|n^-Q{o&u4#guU{g1Mp)3*3MtETX60{ud&dPi3kc>Gl|bhyj3TuTc&n`$8|P= zJXe#D*lM^;A#8BDGr{4UeG%aAR>tk3sc~v#6Q|Q4qseFhjub?kM$ej%Jy1plj!CZ( zH|_#XL@suqq@=aroV#dA;A%E}&W_&c1-pEE?Zyy3i{Z4M62ju6u(IU|7VnqTWhb=g z<4n9!s{iopWGjcIirpFHX~M)GKiWQI)I-Ei)wT8f9gAO7m$nha2TA|ph${>2?{VEs z?jI2gLEsV&)2pvj9@Ffxw6G@jV}K-@Y7^ee=IvKeR$@#IsV5Y^?01oT?6Yy!0I%55 zz6#IhJ&o}=@lQdi@$nC~CTZOJg&y(qFBa!&IkV5Ymvj)t3cKJ}X^}8&SsN7geA&=8C8g2(#Qlb0 ziLy-*e`-V5s#}ZVqL0$+cDaYY(C)Q8`-U+zXqStu~w5P8r}DCmSdcl%w!2n!M&e`Tmw^3to;z&6r5R?fw|dy z?&1(YnkF_KjJWC*_2b5y8zEXoK2xg)Q{f1${JCEMa2h;Nqaw*oOqY2wA<|P(t@e#7 zL9EO8=Z{iq7O$=M;7TZ2U1ZIbeFIy$h;@9ZmD%Ek5AKE+m1gor%M#FsJ$2a8JfRh@ zCNaOW011BSCtHreOIL64RhBkbZ@H`&FAMDt)h@M(LBd~-B1>6Okav=E@)fqNuxcP+nalI?6VnSw3B$dZ#dewwER;< z7}44rWWo!?T?_tYutD9_29SeJ{vs2(_a3!g0!RBV!@wY(vYskA)L-)7DBRSBcXi}q z|6MuhIgR_#qhapiz`@%!?HbS|fB{95Kcr;>7gMki5G zH_-H_#pbc{*g~H*M>cah?@U|EuJ)-|#opcorWNafE|L9BAw^HT);cU}eD&Sa+`UjW zQCOdpAZY2dG78~t(^YL#=gO2{CD{{uaQbIop0chpko+|`?S|N@>aebyO{@pcLdlWW z#>5NnW3jWwIK({edPoB~-D$VzE?{jOJDvJh4^+LBjK@&hbhQ|i0Ea?C_`^+G9ixL{ zrOG=xrSCaddS4%`K|yeV?oUnAo3SObDLj)%T5UaBO1Zo;DzsrAt`Lw;YkLH8tFEL;x_+kf77WYoi)An?_69o& zwO{Jl!oU)|6c7*)%lLT3Rq4O50QV)&h)s#D1sDb|?fv)x(Q7;!yA8#NerL9V@+6;6 zyZuT@Tn2vC4m(;_>CBHW?NsIdBv$HCiK>l*ltupLmVx&KeRh|H!Uu4#xr(E0<<5`w zltkDvGj(kgkX)jOWNOy@lu%DgwF0LEXnCw>aF)@K{im{zBb8`Kf{hmRQ(r}WgG#-l zjxJdfTfvWLZ`~^L&S5i@^ar@%pjnCZpV-K0BYg4r1244I4-~&ZJLH0Os-&ib^o{TQ ze*(P-tAPG(zCxVU*E6+@8bMK3mwnp|vRe4)?kA8w%`kv!c!KGBn0DXz#;)w{X2cM1zjXI={5AC^w3wRW!RaU8j1$b_i?5VXa^&x`URE*EJ* zlJ%VhD;bv%=MiNB6L``I=Z@B3}h(v%iv5d1oypA4KZDxd;|IA83rBL3|vca85aot%dBYaDX2CX<6pHMwJTpQnIkrKsCh z_UMScS*ha?`H-L<$1{WZiXF3HD}Segsjwg5xZlJz-*^me17-Vy9?%7E3Ti=l>F|#q zE4A{9?!Qm$7uC$qVtGDvgNb@=yVYtw>a*6_fYz%M4R~wqm4~4brIMsMS76X6oQ(>0 zH!75XRo`Nb?lMEc@f^7v_NJ)o^^qvplGq<6%&Xl~Zn31vB~Yf-w(-9Eg+08~#Ssgg?q%V#<7F7h5x=YZ*%~MmfMF-9C7ojq!}5^%1*Q>XIWq!WCQe-4)M;aX<&)d&{Mst;f)We z-+HCswzk~@WC0PqQjuSQ<|Z9hA>@Y5Pr{C%@`P}9i4n?Nnf@Ma1R08( zqt~56VB~_Dc94oCM)uS7<8BQ}EOEAer7JU)NiFk}SLl`QfP2^Blk?MDHVwvReZ@<# zlg6Vp62CQ`T4dHt7xtFOjT6a>*KuFJaYLxQyH=fsUZnjx0~Z)*KKI!=UhyapK2xz~ zB~oNqW9jJVsJv+G5T8xSKQ*oh4!a%s(i7tv3G7d!+GSOVB6ItvvOl)2qsJKah0n6gNETQ%qd`CT^f z3MKsc2SRZ1#0?5xz$9y20C6x5dva_1J5`kQYUWj+N}@=tQr~xR5#N(cH-vP;2Ed)Q zN+2gdeCqtQm66N$Ksx^bhIND&@JCHpP@N^3mPg)}%=`iZ;|^>xKnS(O(aeC}4kxG@ zq@BC3lhudWpmH!2izTOdOUf0cAU&b2XT@HvmDkqRR;23$hVC=S@2X2PW(T68O-cM_ z&g1pF4TJ^^h%x~CBG>K1gQtnwcJTSwpy_fmMX?ZZ6fB>^ub|)_x0o3E*=eyyW(8Z< zuC|WAG*Hrkf!rHkJ#(jh~11;r_b}NDOHz5xVcTtEi3{xg}1=^A=q8!Y5ANC1UpGPZJVFU)_$gECKY)Iy<**A! z^u$+P>Y3_)XM1()t?wOB5&i#yBOtKQ-a5=yJJ#urRA~vhtlrdkjlI(UVFG{*$P*sG zJ^#79*X^1?r495rvEjFF%G6&)MJ0({yYz7dlC82=GVa&40<<%|7nCOw)E$CLlvC&* z+&n+)-*#vmKsCi$1~AxUq(sLxN!|~Ng|6n`*qoZ$qc|b|TYZfGTt}E+*sS$7cI#bs zmhdT1iLy6nm_z*pH&fKeb$ellIHlAby8b&r7^kn8HGy2?vA?&#BLaHdzIc*?u6Ozc zEQw7=Q~DKbfluGv552{|pqxYmEan#|OOpl))kvlj<8mXj|06f*vP`{?-{5t$7wh{o z;W<^M`~`w{%)SP^&!>N1^kexqIWG?ey1?0=#`4#|z7Z79oL&{Gr&qtffi_~gm5TjE z1v&7G3etZ~ulhBg@94rtr3M&)UJAvTJX1NO5}BNkV3iW^^Oh@@zuQHEVQh!t{8Au; z(<_ZGSB@x<_&qF@ZQo6@{^WPPQqfh}SJL^R+a%J=;u*hdF+}y$l^_`hFjREh+3orIrlpYI%LVEf_RYyKCa_MDHnl z1s|Gy{`(Ju^Vm`lkG@>jn~_VE5GP%6@$EwKbU_GHD(E*%5VA=&VT5DL-^ zLkd4*hR}Z&<5)={KKamkrMzXp@;N&1&b-$hV8zYd!!J*>?nZaUSIulKL08!vot23BWzSMvBEaC!$J%oVU z+$>#xC0O{(O^NGI8S6oyLGO;u6~I*`#?=d|?{5=dT=wpo1M}M~t^g;$#o<8rQlFV? zfn$u3jY`IZUqsQF_5HuR)I+6}Et-6L^V_RaGfHK0URKZLW%qyNa27dW+ou`oyS?=3 z&V+dQ99Z7CxkEJ{8@O)?OB%jWZIJPwq{49I2kK^k4(^7Ht;Xt(85(*f&r`EV{1W;a zHylSTzh>Juj04C+1d9y8W+sD401*$x`=Qfpa$tnvoGNc!Dd%Ui{kr$RvR+@Z{R`Mj=~;PO$Uxo)J}bXT zfWHc&0#XpAJxHv9f!Xzd+4)>DRa_xU#ou@7^hFtv>ELVZIOXDRuKpp%aQaThf(Xg3 z#74qGsrCAdPB%%HymyL7g zyNI|9k^585CM6{$zZi~1y6lDg@JS`}=qq*eU*o(8q5ug})fV9IChA&jf!oTgnqz%T zF3%#Ina^ph3DHN!A(?C|e0S8maCc+n)@F_Rw*9`4l{g!2zGh(`I|nwk1nzts?4BK8 zm)uZ=jn(3<{LN?nzk`CAOE=!#AFso2VNK$=UR6!+^?$T--x~AI5VnyjCtqXemvbzo zQQJId=3Sh02r{uymri7W&I%1}*vU_z`ZPEyfG=d6XgkQ3d4)NSq0amRG-2mKo zTWOj{9d(XDGO`wKYXkfl98{jB?;5N3A;PkvLl2yo1Fv1f4w;2K$SlnEub5VwA*wU@ z5JsB1gCnX*=!()I`e!XdJg!^{OTCvK=LM_Am?TW88t$V2x#}Lq%d}u7ZwG$lHXX}z#)Kq$>18-0#&+c^@~4BJvixR^m{=gYKJc=>ceB7 zcEt}9Q1Nb8dHTv&yJcrTs`*n4W+;?{Q_R@Sd{5yvbR%Iy=Nj+S%VbF<{?m2z=-M$O4c(*~GJt@SU z+jS*5*J=9?@}*xP5<(CTEus!4I_WnMN6C*x(Nvzv!jZCmgmg}|7%win^5}(FLJc?C zi_e@o4H@R<*MW2y*rBkK)_r)TQo`=OtlQsk_YSDPw3i5<|H9zS^^E~NPkmL^@qxk~ zkNijZP^i%mznT15f60S>FUKNKgS+JusYDC(Alt4QDoGNe!7tB?- zKDs>cVC3;L8)<gECJgOc(#g7)EQr{ryGUh5bO})8@*4WI7#_#sb?#E9yoNef@FQ|4Q?fG7 zH_%l+1Yx~cP$)N66^el)t@oBl#jbhG?8-Kb%CV`BTLbwu2904T|;@iFS@RRl~@O(AqxsToDCE!uV2$F74RN)4cqx>zWWjGt8p32j?1k@^v*XszF5e32*cl01t}CAsWAvLH3zPRZ50lt}M1R7S zi=yB{yt>_6f5}^sh7iw3yXKNmp3Rv{5k1ObazoRXbmuihCIXMtura?kq%#Z?T}D^o z0XD*X7HABia5r&D6uanC9wn{M`pX|zQiA3*lLIv&_^+mo!PKJMZ0{=A+a*h)}cWj{L2jg&BQ!5?=W zecS$I)WeRJY{c=_9(_NTg^mjq_nAngmOt0~uV*?xb|xAE zc1?RyJZoEbFoi!KLVsj@*$Cwf?TG2$nYy9w7_f+)SpF33NDCiYbb&5P!_<~Q4*Nk* zt=ENxt@M0Q3^$*oy}NhtNwxG)Aj7dM9oy+p-hg5Ehn%By#j0+ayJOSg`g=cGE7vvY zN|CY~2l%7+!FDWl!`c3yv5!0>w<^Q+Fb}@hMhn5+IP&?1eRZy{;CMc%=5{y99gVs} zu$KM?rcjk<$?laeca{_}W(;Vx--mm6m#F6LQ>-5?U0{)uzwBmReXU(IZrxp<{eIiQ z0YzQ7opg2giT@F~{L&ni06Ra=9s%b7Jr#dF_*dnk4+drNU2(o;m3hUb4u>Sv9QB`5 zd`%3(cNG*aQb4vk#QWeCO*sOtoY(~*HPo4`PS?Lm4xLn4#W7f#JRKnfI}D8?6+ehf zzP{6Aq4HP^n;eOLfJ`UbghRx$Vna7$P>PbaTB^V^fA#KDV2`oq&B+7h*)f%15jeS()u*R;pw|lq5L1u#FDE4qJwsR_0 z-VAO35Wt}UqMV19x9evDZ=HQiobK{@Iczpmr9$s|(znB9UfAU})a^R2Un8Y$>Cu7P zeQHwO=Vy(g!zna8_|%gE zF!u0<1}sw2DMQ48uf79bh2_sy>%SOWmY0%y{sG|lXDvjCpNE3GV=xZmG8HgBbGxN@r`@Y zhZ)3!LGYKJz{7O|)rs}&Es3@aA_RE?;097FZKTWHqB+>}6ZYOZoEeD0t@9Hi@;sd6 zg*1>cJq?3i#;(%0@D?Eun~0uAdNO^kWL+^+Q-4M5X7f98pCmRqnOiXrbr^p|8IDXT zjiBLGQ!OpkTIx0Njc$ znr8KzN1y}+Fnl6*;!;wWDyX!MN)(OKuC;t0)yjI0Y|eZh*LbCWV~d;Xz+OeiQf)aGS8iMWBU`# zU+k|D!(Rah0yy)WH=ykcyS+8-v2lctMzELqmsg0Gt-FqSd-;OqjhWXTdcEIVE78MH%NN&{hV zKu-$g-v*9tuJOi?)k}2=LMYpz5u|Wsci!Gw1U8gnKJ2Yy>5c1twyiQU;)_ug@vAib zNsf$1N;M%K`QZ6H+Wl1Gr=RxsMnig z`wme5;B*-?+F9&;m-$fTD;OZ*px@FD;`JM84$aQ6<0daN4e#QCB9PzIFu`Svzf}LG zK}o}BT3Vo{cwYsilw3qAp#u>I7xdPhkNs?luAi>KVYo~K7bO)YBY)Ham(Yl!HKISQ zD%H5=|ND1P4Ay8;ETc=2Lz2%CgBZCkyF22AsORhV?M0I0G5BB)KljLEyl47HK(Zt*xPR*+x?8y9a^$o6vi;1W1mft=u7UE8_CnGf~Fc1h?n^n39mF6@I60W8Vk zpsu!dLH_}zJXpH-EA3g8|kacpm;p4DmBP zf}S<*tI_rcC>j5S%8|-_=w-CD<12#8=;g>w)nC&qZLY=lT-5NUz)T9`wP6l-5>n;d zHi||V=sW1vm;_91eex3vU+e|jpoQ>P?1s=S8+?UKnKB>tXqA5-wak6yx#Z{p@`}=)(c_)lsu(IQ% z)IJ)mIAH@C^mFR)!+{eLi}bz}it24xb(1gLMV{V{!DWlXfgXrb3nYO_>0 z=q^Z#OBtyz3c~RX{BqC`M1$rvC>}%`t+E}f3}z{;nR6LHj!}%5U`aDHhYp!mfBNge z<50fas#@oiu??r-^(i-y6>}ONED3gGJZKK?_?*_Iv}*OJy*rNCYjZ(=ebhbB0m!fU z%pUX_5%l}(oLulR=H$sp`tl-36ktgkF8Bq<5t#brSV>sfVIE6Ezh4%9YN>%XO2ST$ zl-3Z^Sp0^ESzh@`&RPaOuaK(7J?EMarfcf{V)Ncxa$5aXR7YP#Pa9TEolkFX^kMz= z1_|#D3*(`tFrNIWOi?e*$2M8T_wE~3c|R1ONKF<$GJ{uZTB23z+7AN?n9D10tb2Y- z>-^mnQA>+)rWV4*7pA<0u=G;|XrDl!kepfvmlCV=Vd?;%_rsdM*qM#AQ23O)=HlsP~kZdu}K_!Z>tI6$+z$-CeGMKYx4L3H7Vj;zfoNCXM82f48{CJRN zP&|MPP8 z(se{gF5$4EDdzftFhVL4c6EyUlt<0_i8Y4rM|c=_Ou}pL!dk3^i>Dz z>(GXFCq}v#w68ukgHAJ)BScnYSDWc)fU+WH6%8s&KxuQtmH$zFy{5Sp6gOmuZ5q}; ziw%I9poJT)`qXeAo9c|-Y1 zNaR~pc8hn9&zg68MxcQ>q{}&&v&MZJ*u%y1fZTNcb*%t%n%h||1$t9g!2?xQgo5aC zG;TCu3&l^ooSMN=WCVJ;W8bXqFsd;>ocR0k+-#lWhlag?2|G^P)u%g?Ef-Cc?d+mZ z5bG9*RG`3sKzQTkYPhubc*fkzq0PG*j~C{QMp+)qjCgByY)PcH-{!Sl^?2@$aLoA( z(YB1RV#5y{Vq6XCnOpKd$!B9Du%LK-v zq^YAr9AH(81OfUFij9d^1~S~o0>b)uPoTsN$jsaeV?B(viq(M9< zRe15wypI6)feqBYPX}0kbiWs;d>0S~-831UwuXm^Fs=JgP_9@&(Q=0pRDFxPGZ z_(!iHFJETD@SA~Y+!~{}_;~KJ{vha{-cIInpByDa> zat>lX@K$I zKlu=;|Dk38tyQFS;CsH_crIOBf_y08FD5<&Isi8>YXCl>Z8)f<6_gTd*0w)hnTG-< z@5aUkqVmStE~vkKADO=;a>=SlCTP1Z-&-wa|Nlgvg-sAL7xB*Ys=buE4^En z$eEljO%lz@5^xB0de6WqOmRN$)&BW1I2`FdDE-m9P#v%ya@#6_cU}c9*s@E0I-uoh z$mFqN^2Kd^hwPCNqe2^(>+keoA8+U}P|i7fVc(fQ5PA#IZ%HoDrlI)9y?wT!V-IYY zs7)-JJy-e2m4cLl40{bdq|)S|DY{J3AWb*0s&B{eIUIly49ni#Jcig1ONSSWf*&$~ zNhw40s_DL);@o4>{C)MH*q8JP`SKq)`}3%_#syLmnj0n{b#{90(qj@*2JYj^Biz;| z?+L&sy&w)db&9RmGSHzBCBJxmF0u$VPB&l-&?90N~C51bnaHiCYG2G7>e? z?TOsmri&Li9=xyn2mlG=`lbNCVo00;y{rHuQeXps@c(~R&c%K<%mU0kn}}sr9mach z#Tpa?*y$G?QmZoXlJgIMO`A?i)_X%H>Hrc^Buez;T2b}>tN|(UhWh&GRJcj-!|_J? z8@B-32I|6b7k~^-=GrxERxwy_;*QIZG5iAG%}g4cdYX;jC8y3b&PyS0SuOJh5uqYu zJ<04&6e1ZX%fJXU9Rs|Fl30aX#QZ|TAr2AqAbTEj>&1iz#3a#e>tAXXpG>TNg3>#2 z@u)dSO9xjS*X|Zaf7{I#RGk5k;EL{{yd|0+stQU*bt2=wi?CsL)VQw$dOb4FVR|Xf zs|SQghQc(Ual(%iZTPIb(=?!&itR<>chVT^eR~=ZAeSORkvl%few#G?a-`Q2^_7LA z&AcOnUV-xm8+i#5C6X0g$3f(w;0?h;3^gv`-6f7V9$3;lmBCjRDJ_w(;N123wEUkE| zJ1KkjZok<?xSlwjrb1M50hyxpL#WQ z>RRrf)TCYP$DZn}d-SmYIK^?bQ?kT7qliuj)UaRpZp`?WVMHvg&Rxy2icxVlGO6UY z=43C8U_H1|B*@nsh~~SlbC+L0z)L2Z=K}*R`xu{7HUMH(oY$@)CdL#*#g5NrA3A9EAn zZSg;dEZ|3X?(0RpGDxqoGCAPvNp_MXM3Pk=zU>w^yzqi}B!wGCJ!GK>IRV@-8?b%^ z@OA}&JH5W5rSvH3d3-aX`Hev#Wfwc!>UAe9p}4ABEH*Y4)m(YV+?-~eZw3!upZ3IGIb>fGO9@YjYaTiF$rT1=?Xa;mj1Nr~w7bL($OR}Y zezKB=$yHWXS_7&nr{=J1pOJsHnp6}Gafk3dSvr@i#8-fZE{zCry1u`5UTCa(CJF5X zlhfM&cqT#%sJ1@-`Q5AU?0|}bf1&CFTG$$3Iw7fu)&OQCwmH~1W+@#zw2q4{Oxxia z9!T*@-~ZHACnu|%jRHu6s~J^LKS#&12G2S<(G9`knA>xQ4xx8dL;%4?77%QL_D^oL zvqz!_7U~Pf5*DwlJIX$Uq>}w;Z`V{arF8UJhwph!XrB^&%hp$h!x{$}T;n+-d0{}* zhTU(Wd^bI9 z)$DOG`5@*N3C#UVZTD?{qBJEpkEn*yTowpmyuD-qA2|1JK{{|0)+DcK52$FBLG z*=TN7(NaJUEqVsQdsPw3ficM2 zb(%%%Uoed@R^(&~_6%S?&cN4d@F&Z*+Vp4j;`0v=Dp{k5vj>+ z4&?!WT`W@@J_P$#v?AC>nf`CMYNBzH2>J8b?kql0LAph*SFhj(u>ihp;CKHjMTiQp zNF>92obL@!5Swapf*EdpHS-j`Cf$JP+o7h`7~~6HpFh@TY6F)N9s<;6wxp!ed$1`G zM_OmTVUQjy^r~RDlxKQ%_TD{h>ViJ*VbBQYE!@TJOjgh^qjOde&-rA~z~WQ=&kLkF zL}ZY@13N5s1>!w6)JIP2ev&cBOBB55Jd!8$M*F;6Zq0&)ya3kS zLnDo{t6e#U!#oyh5 zTYNJBNM9AWW!{}7T-Vl?J9vsTe17ekk+&kRB%QKCN>817irR|07)s=*t{g66)KOW;Ia@v7uL>iKcRpP}L zTTu){HF@pzZmWXV5Pcq|U z_AcXGMsuYq3ecOTRQARNG9@;e5{SMZJIrW#tLf-~8M>4`fpI>ZF`2lKJMn-Vz)!!B z>B`Ev9B$09djIvE>3l8u;#Hjk`RJvj9|9WMKw;!Xj;qqSk3Lha@1AhidfKyt7C;mC z5@|?1IcO@5?;Nu+|MTX0V1R35o}QiGmU+N(`I9vGK*l{IcA&Xcn7#eso#D?Rw7E;l zU+6Wl)J00{!!T3R3RW7DW(2D(BLl%#+(( zlb-KZ?pZ+d;9AEPcg%0QX7U=VCWd}6pf4A{&r4K#DFU@0&qXQl`7xX zSuji3xPB^iBjuC=I})*>6lcCkYiAN4fa{L}?F`RaAS*!Z07cUmx^iZ31+*kF`6k4I z(D(82sd2S1F73sX;HZp48B0M8_$-zw{l3sr2@m3~X9!?Tf{5n~cmB`?1hXAc0%Sa} zY2MZQ&R8%YQU=jb%xNQJE>vbohYT<2F{cX@cryBKEssTjJGM3i%6ISV4(y%Hx#czV zJ1v2eOo=#T44I(E#Q54rt(oSC1ONg_R$7P}JOhwi^duKHDupXw&MwnW^v3JZ4Pa)N z*KRqct1W;2{CW76NO!Z+B2IiE7{Xv(_mGcbBZ}C%>1n9P;7ySPU)P;@_nCTg<}eSi zUhmSx&5cObf|L5AoZ%uvjVhQCHe*WhVilrGT12SWr5G3vXw@(p13k7_05Zx-6q%tuv1v3svExdRCLwDcnDMR`e0EL3TrfUMe z0MJbvKmO@`s-XKVh>&%l=;Tl}a?v<+=C;Spu`rbrN?ZZJ#)&#fM4m81huD7uEczIb z-}9tO%j2ruRR_S*C!H5x{_Q4-FFL**&24bn`J|)Oa(w;M`(y~;I*WESuwXD zu15l1v1A`0pmLe{h~5|m$42754>(8QItJsQyTt#zQovCTLbOZwrOv^G`@Aj#<#VUi zWMNU_L_hv{D`oh%MTuLW>M&p=~tMCGR>sQg63}CqdPV$VtC^)qnAYl2&YpD}Y z9t&PfoCM&1Nl&Z{u%iM(P#}Pk0b~erb40EAyjibiavjqrf&3L{R%Gvd>x8u*%*93y zar@0c{he_Dez(})ahm0M58DY#vPc?y`j|=F8rc596FyRMMa(mqy?plGq_8T<&)2th z8j8KR*4|~Xtm(~3b;1s0Am%Ba1mC}YY&?qCSM_FE&8@-k_kxNrSS%= ztrm)TrG3n0Hy%%BTwVMPL(Oz^IvD1+CqdM{61%-=4SUbD9P)OjsoSzj2}Y0oeRmIai1Q z2k{2JJny9oKs{=7wVn*QoF>4RpA`nUDGm{HijFr0OXc$a8-3y#dB`|q?PTq5F<(lH+ubaZ+RHbk1lpC?YuM#CA$RRClthvvbjKy6qrore}v^pFd!$ITExL*6DNrpmS2#RzdlE}yaGHspI_}62%49ZITcSy1dn2 zage=L-?qO$D~~T3kD%v`HmLaDv^*aJKIT|v>-gf|stPtao(Dr9D7EmHWEc>`11BpN zi8vwRf;r&>#%}sp(d>AN*a0J>oX6}B5AjEhd^(wtNpI3Z{tcBZQ8gjtZPy~P;2G132cvP4=7O@FYZj_$uv<|T=k z?dyAx$1wjgE*vzhduVc_u3Lw*VE*yR4}!h|&hK$Nc{1TJWLz;sZ4{LaK#JB<(Yn!g z+9JLC-z>W<2N=aG*jIEXvrL(?v#Tp@WMl-6Ar|d{_O%xvoLj`F9{$t|h~L&$rhVje zJov8^%z+BQ-s>clfBrO22ACRpAoNi2Fi1^LzY8d<%zYjP#x?~w{iQMl5ubmuVD5nH z)>k>ed6oG8_cSC~!NWeb*y2>WuEkKlqr(FrN<%9IDN=oT`NWOlfIfhfyf9HLk9f(3 zio&E(cFlCIG>c=Qg%6#Y_H3@I>A#nfBs#?lE|B6nc8XghV;2D19%u{Av5j%nh3<+u_hd~b7|HQ?qfm? zV8ePq4{EV>|F1}l8z4z{Ol#QxGyO#%lhg7y&4jeB>{Y5j6xaOmdw}!-_*vx@+JEa( zT*j*qShw<`fUWdj&s#GYk`|bhORN9v(*o=hwK`?@?-Q6vB9&YD{_2&YhSg>7F+V<=m1YKk;C?KC1p2)# zz5lJt|JMS50RkV9KZQ}qmrS0wlF2>eQ=$o-T^*C%Z-x+Z|b1 zC*5qB5q(BrTs-;B4|z$=#?H^`1JAOlm0`DxxmAUO!$^YV2PAarTt?1V)UwF1Dh z&20MYx+Hr+SY%G;u?w-?2eV4yTC)AglsTeQ&(~C`%Z#*RFy4|dWCsVqUaG{Cm0JmP z_q$juS`3sj!JD0re$_40A-r`bD{{K{wuKZm|0GBT69=RpSbd)T-_T@|mHd5tTd%L` zz;trrq6AyVG3)5qr!2wYn)IK&FOp)~`PrSwB^lfgCKF`xE!q>~? ziD5|wqU*%enKcD##kGU1 z_d9v$u84*2=v6ZO$+U!mOGHitaW0#Xf(+(PFQLzXYT5wlYz1dQYgriM13|pRLKZ&n z>O@qrSB`vB0!*54&?~2lCi@=Az_;6s_*PeS_W~zt z`9zos!u<%t!G)jXhDm-F9#5i4n&WRw3m4po4Vah=bGdc}@>dgi~?I^5zm*#5J<9d^(QEJGn|C`Xc#I!rH=Q?8To zZ$Yc3P~is94|!)X=U=@kB4^RWVC9C^(~e}AHGW*yigoIcmg~jpWQ*<%l!G62?&vgg zfvq4;5LFH{L8Z(3ZCkg~Pg5TI9nhB(QQAEKEi40{)FOJwjqR#8dy-S7n~!w*`?2?44|460r4Nl8w*L+^9`+1AaA$AH z2hyyLj&3RI&``vG8Pby%?b+Wd>UazDpasqlk-}7!uyWZP=@S>EPbq?4?Ts5DjQ)`_yNT{`LMjLSwOKkNqel< z0d?iPpGmqs?;vmy6$J&pL5IVEi4BU=xU@r{D4<4K@oK*`#DcCb{drY6VBd3++-P#s z=Y2nWDvjBb0@ygOC&Xy=-&n6~_CzE30#-r!);#K%lY2#4cN#HQpQL4DdRZ~B{2wpV}S zQdmyAbMR(}=CUfO&`dU^nL6L|-}r1S+DQ;Yeo#75Z!_}=b0>0wMof{7g48$(z>}r= zsyq+(&j1DRi8Igks;?I73&WJ^=py;e>Z>cMU~!i4KQwWv!(5?InPmF`vNth|Q&dr> zYHYr(F%2s{y+jdhvYhribmR3I^La_W-MNXQZ~H@NUbS5QXQx4^dV>U)mVLw6^+!m>;r_lGu8bpVm`GYaQRO%&5}Wc!B(A z*M*De8r~%ZRW=(x_8%4?Oo5-Qk-&sXqn4LJ^GD@dRy~DP#ntQEa$g#_C1RtDjvOuh zR2DrRNzv;wpmO%*GsjIHw;n`fPCGlzg`i*VJ!Jg(qTvsb%Nv{XvqysIt!+_Y4aL#^ z+8=v6lawdudEse}hhO81p-dE20}vkpC=D~Z$f~)Ddamb78P0t|Ecyw4t*7Zw;Hq&l zi*8wZM4W;3a707|oYQl3NWS5)0A*Q23l=s7MiS<*kAd-k)pON}Taa@rQ_@`u?6{mW z_BpS}()?YQN15I+N9b!R@F?mKHV6mLO~4TLty3~8vU!kxo&h}-!^ZD^1|4(%H8H+u zS`=>t_HMo|c$6jV>^-?=&Rl2@a`r=Lx+gHu(QLRpOsST6mD)AS

U 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�fbJVpE4zG)%`;V_pDHPs$dT=5h)9{| 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 O_!#JzXy-^Ufsz literal 0 HcmV?d00001 diff --git a/static/img/blog/Kitex_Dubbo_interoperate/types_convert_process.png b/static/img/blog/Kitex_Dubbo_interoperate/types_convert_process.png new file mode 100644 index 0000000000000000000000000000000000000000..b566ceee8323ee71e41bdc1d072edc25553410d8 GIT binary patch literal 19030 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 AX8-^I literal 0 HcmV?d00001 diff --git a/static/img/blog/Kitex_Dubbo_interoperate/types_convert_process_with_thrift.png b/static/img/blog/Kitex_Dubbo_interoperate/types_convert_process_with_thrift.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2f779074b6f68575f72bcd282296204ebfe899 GIT binary patch literal 24144 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 UZB;KGDB@|fHT5r)Y1oJT1I=I^3jhEB literal 0 HcmV?d00001