From bf5df0bedac8f511ea430156fb785a3e1e63bad6 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:31:00 +0800 Subject: [PATCH 01/88] Merge pull request #2601 from ty-dc/docs/unit docs: fix performance value units --- docs/concepts/io-performance-zh_CN.md | 44 ++++++++++++------------ docs/concepts/io-performance.md | 44 ++++++++++++------------ docs/usage/underlay_cni_service-zh_CN.md | 5 ++- docs/usage/underlay_cni_service.md | 11 +++--- 4 files changed, 51 insertions(+), 53 deletions(-) diff --git a/docs/concepts/io-performance-zh_CN.md b/docs/concepts/io-performance-zh_CN.md index 81293ebabf..0cb03ec955 100644 --- a/docs/concepts/io-performance-zh_CN.md +++ b/docs/concepts/io-performance-zh_CN.md @@ -65,25 +65,25 @@ netperf 是一种广泛使用的网络性能测试工具,可让您测量网络 通过 `netperf -H -l 10 -c -t TCP_RR -- -r100,100` 测试跨节点 Pod 访问 Pod IP 的吞吐量,数据如下。 - | 测试对象 | Throughput | - | ------------------------------------------ | --------------------- | - | 基于 iptables datapath 和 无隧道 的 Calico | 9985.7 sec | - | 基于全量 eBPF 加速 和 无隧道 的 cilium | 17571.3 sec | - | 基于 macvlan 的同子网的 Spiderpool Pod | 19793.9 sec | - | 基于 macvlan 的跨子网的 Spiderpool Pod | 19215.2 sec | - | 节点到节点 | 47560.5 sec | + | 测试对象 | Throughput (rps) | + | ------------------------------------------ | ------------------ | + | 基于 iptables datapath 和 无隧道 的 Calico | 9985.7 | + | 基于全量 eBPF 加速 和 无隧道 的 cilium | 17571.3 | + | 基于 macvlan 的同子网的 Spiderpool Pod | 19793.9 | + | 基于 macvlan 的跨子网的 Spiderpool Pod | 19215.2 | + | 节点到节点 | 47560.5 | - 以 cluster IP 为目的的跨节点 Pod 的 netperf 测试。 通过 `netperf -H -l 10 -c -t TCP_RR -- -r100,100` 测试跨节点 Pod 访问 cluster IP 的吞吐量,数据如下。 - | 测试对象 | Throughput | - | --------------------------------------------------- | -------------------- | - | 基于 iptables datapath 和 无隧道 的 Calico | 9782.2 sec | - | 基于全量 eBPF 加速 和 无隧道 的 cilium | 17236.5 sec | - | 基于 macvlan 的同子网和 kube-proxy 的 Spiderpool Pod | 16002.3 sec | - | 基于 macvlan 的同子网且全量 eBPF 加速的 Spiderpool Pod | 18992.9 sec | - | 节点到节点 | 47560.5 sec | + | 测试对象 | Throughput (rps) | + | --------------------------------------------------- | ------------------ | + | 基于 iptables datapath 和 无隧道 的 Calico | 9782.2 rps | + | 基于全量 eBPF 加速 和 无隧道 的 cilium | 17236.5 rps | + | 基于 macvlan 的同子网和 kube-proxy 的 Spiderpool Pod | 16002.3 rps | + | 基于 macvlan 的同子网且全量 eBPF 加速的 Spiderpool Pod | 18992.9 rps | + | 节点到节点 | 47560.5 rps | ## iperf 网络性能测试 @@ -123,10 +123,10 @@ redis-benchmark 旨在通过模拟多个客户端并执行各种 Redis 命令来 | 测试对象 | get | set | | --------------------------------------- | -------------------- | -------------------- | - | 基于 iptables datapath 和 无隧道 的 Calico | 45682.96 sec | 46992.48 sec | - | 基于全量 eBPF 加速 和 无隧道 的 cilium | 59737.16 sec | 59988.00 sec | - | 基于 macvlan 的同子网的 Spiderpool Pod | 66357.00 sec | 66800.27 sec | - | 基于 macvlan 的跨子网的 Spiderpool Pod | 67444.45 sec | 67783.67 sec | + | 基于 iptables datapath 和 无隧道 的 Calico | 45682.96 rps | 46992.48 rps | + | 基于全量 eBPF 加速 和 无隧道 的 cilium | 59737.16 rps | 59988.00 rps | + | 基于 macvlan 的同子网的 Spiderpool Pod | 66357.00 rps | 66800.27 rps | + | 基于 macvlan 的跨子网的 Spiderpool Pod | 67444.45 rps | 67783.67 rps | - 以 cluster IP 为目的的跨节点 Pod 的 redis-benchmark 测试。 @@ -134,10 +134,10 @@ redis-benchmark 旨在通过模拟多个客户端并执行各种 Redis 命令来 | 测试对象 | get | set | | -------------------------------------------------- | --------------------- | -------------------- | - | 基于 iptables datapath 和 无隧道 的 Calico | 46082.95 sec | 46728.97 sec | - | 基于全量 eBPF 加速 和 无隧道 的 cilium | 60496.07 sec | 58927.52 sec | - | 基于 macvlan 的同子网和 kube-proxy 的 Spiderpool Pod | 45578.85 sec | 46274.87 sec | - | 基于 macvlan 的同子网且全量 eBPF 加速的 Spiderpool Pod | 63211.12 sec | 64061.50 sec | + | 基于 iptables datapath 和 无隧道 的 Calico | 46082.95 rps | 46728.97 rps | + | 基于全量 eBPF 加速 和 无隧道 的 cilium | 60496.07 rps | 58927.52 rps | + | 基于 macvlan 的同子网和 kube-proxy 的 Spiderpool Pod | 45578.85 rps | 46274.87 rps | + | 基于 macvlan 的同子网且全量 eBPF 加速的 Spiderpool Pod | 63211.12 rps | 64061.50 rps | ## 总结 diff --git a/docs/concepts/io-performance.md b/docs/concepts/io-performance.md index 395c11d27a..7a1e0dfa80 100644 --- a/docs/concepts/io-performance.md +++ b/docs/concepts/io-performance.md @@ -65,25 +65,25 @@ netperf is a widely used network performance testing tool that allows you to mea Use `netperf -H -l 10 -c -t TCP_RR -- -r100,100` to test the throughput of cross-node Pod access to Pod IP. The data is as follows. - | Test object | Throughput | - | -------------------------------------------------------- | ------------------- | - | Calico based on iptables datapath and tunnelless | 9985.7 sec | - | Cilium based on full eBPF acceleration and no tunneling | 17571.3 sec | - | Spiderpool Pod on the same subnet based on macvlan | 19793.9 sec | - | Spiderpool Pod across subnets based on macvlan | 19215.2 sec | - | node to node | 47560.5 sec | + | Test object | Throughput (rps) | + | -------------------------------------------------------- | ----------------- | + | Calico based on iptables datapath and tunnelless | 9985.7 | + | Cilium based on full eBPF acceleration and no tunneling | 17571.3 | + | Spiderpool Pod on the same subnet based on macvlan | 19793.9 | + | Spiderpool Pod across subnets based on macvlan | 19215.2 | + | node to node | 47560.5 | - Netperf testing across node Pods for cluster IP purposes. Use `netperf -H -l 10 -c -t TCP_RR -- -r100,100` to test the throughput of cross-node Pods accessing the cluster IP. The data is as follows. - | Test object | Throughput | - | ------------------------------------------------------------------------------ | ------------------ | - | Calico based on iptables datapath and tunnelless | 9782.2 sec | - | Cilium based on full eBPF acceleration and no tunneling | 17236.5 sec | - | Spiderpool Pod based on macvlan on the same subnet and kube-proxy | 16002.3 sec | - | Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated | 18992.9 sec | - | node to node | 47560.5 sec | + | Test object | Throughput (rps) | + | ------------------------------------------------------------------------------ | ---------------- | + | Calico based on iptables datapath and tunnelless | 9782.2 | + | Cilium based on full eBPF acceleration and no tunneling | 17236.5 | + | Spiderpool Pod based on macvlan on the same subnet and kube-proxy | 16002.3 | + | Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated | 18992.9 | + | node to node | 47560.5 | ## iperf network performance test @@ -123,10 +123,10 @@ redis-benchmark is designed to measure the performance and throughput of a Redis | Test object | get | set | | --------------------------------------------------------- | -------------------- | ------------------ | - | Calico based on iptables datapath and tunnelless | 45682.96 sec | 46992.48 sec | - | Cilium based on full eBPF acceleration and no tunneling | 59737.16 sec | 59988.00 sec | - | Spiderpool Pod on the same subnet based on macvlan | 66357.00 sec | 66800.27 sec | - | Spiderpool Pod across subnets based on macvlan | 67444.45 sec | 67783.67 sec | + | Calico based on iptables datapath and tunnelless | 45682.96 rps | 46992.48 rps | + | Cilium based on full eBPF acceleration and no tunneling | 59737.16 rps | 59988.00 rps | + | Spiderpool Pod on the same subnet based on macvlan | 66357.00 rps | 66800.27 rps | + | Spiderpool Pod across subnets based on macvlan | 67444.45 rps | 67783.67 rps | - Cross-node Pod redis-benchmark testing for cluster IP purposes. @@ -134,10 +134,10 @@ redis-benchmark is designed to measure the performance and throughput of a Redis | Test object | get | set | | ------------------------------------------------------------------------------ | --------------------- | -------------------- | - | Calico based on iptables datapath and tunnelless | 46082.95 sec | 46728.97 sec | - | Cilium based on full eBPF acceleration and no tunneling | 60496.07 sec | 58927.52 sec | - | Spiderpool Pod based on macvlan on the same subnet and kube-proxy | 45578.85 sec | 46274.87 sec | - | Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated | 63211.12 sec | 64061.50 sec | + | Calico based on iptables datapath and tunnelless | 46082.95 rps | 46728.97 rps | + | Cilium based on full eBPF acceleration and no tunneling | 60496.07 rps | 58927.52 rps | + | Spiderpool Pod based on macvlan on the same subnet and kube-proxy | 45578.85 rps | 46274.87 rps | + | Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated | 63211.12 rps | 64061.50 rps | ## Summary diff --git a/docs/usage/underlay_cni_service-zh_CN.md b/docs/usage/underlay_cni_service-zh_CN.md index 481530f507..9d3d910057 100644 --- a/docs/usage/underlay_cni_service-zh_CN.md +++ b/docs/usage/underlay_cni_service-zh_CN.md @@ -295,9 +295,8 @@ tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 byt | with kube-proxy | 36.763 | 72254.34 | | without kube-proxy | 27.743 | 107066.38 | -根据结果显示,经过 Cilium kube-proxy replacement 之后,访问 Service 大约加速 30%。 +根据结果显示,经过 Cilium kube-proxy replacement 之后,访问 Service 大约加速 30%。更多测试数据参考[网络 IO 性能](../concepts/io-performance-zh_CN.md) ## 结论 -Underlay CNI 访问 Service 有以上两种方案解决。kube-proxy 的方式更加常用稳定,大部分环境都可以稳定使用。 Cilium Without Kube-Proxy 为 Underlay CNI 访问 Service 提供了另一种可选方案,并且加速了 Service 访问, -尽管这有一定使用限制及门槛,但在特定场景下能够满足用户的需求。 +Underlay CNI 访问 Service 有以上两种方案解决。kube-proxy 的方式更加常用稳定,大部分环境都可以稳定使用。 Cilium Without Kube-Proxy 为 Underlay CNI 访问 Service 提供了另一种可选方案,并且加速了 Service 访问,尽管这有一定使用限制及门槛,但在特定场景下能够满足用户的需求。 diff --git a/docs/usage/underlay_cni_service.md b/docs/usage/underlay_cni_service.md index 9f06d8e926..4cfdbfcf9c 100644 --- a/docs/usage/underlay_cni_service.md +++ b/docs/usage/underlay_cni_service.md @@ -57,12 +57,12 @@ default via 10.6.0.1 dev eth0 - **10.6.212.101 dev veth0 scope link**: `10.6.212.101` is the node's IP, which ensure where the Pod access the same node via `veth0`. - **10.233.64.0/18 via 10.6.212.101 dev veth0**: 10.233.64.0/18 is cluster service subnet, which ensure the Pod access ClusterIP via `veth0`. -This solution heavily relies on the `MASQUERADE` of kube-proxy, otherwise the reply packets will be directly forwarded to the source Pod, -and if they pass through some security devices, the packets will be dropped. Therefore, in some special scenarios, we need to set `masqueradeAll` +This solution heavily relies on the `MASQUERADE` of kube-proxy, otherwise the reply packets will be directly forwarded to the source Pod, +and if they pass through some security devices, the packets will be dropped. Therefore, in some special scenarios, we need to set `masqueradeAll` of kube-proxy to true. > By default, the underlay subnet of a Pod is different from the clusterCIDR of the cluster, so there is no need to enable `masqueradeAll`, and access between them will be SNATed. -> +> > If the underlay subnet of a Pod is the same as the clusterCIDR of the cluster, then we must set `masqueradeAll` to true. ### coordinator run in overlay @@ -300,9 +300,8 @@ tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 byt | with kube-proxy | 36.763 | 72254.34 | | without kube-proxy | 27.743 | 107066.38 | -According to the results, after Cilium kube-proxy replacement, access to the service is accelerated by about 30%. +According to the results, after Cilium kube-proxy replacement, access to the service is accelerated by about 30%. For more test data, please refer to [Network I/O Performance](../concepts/io-performance.md) ## Conclusion -There are two solutions to the Underlay CNI Access Service. The kube-proxy method is more commonly used and stable, and can be used stably in most environments. Cilium Without Kube-Proxy provides an alternative option for Underlay CNI to access the Service, -and accelerates Service access. Although there are certain restrictions and thresholds for use, it can meet the needs of users in specific scenarios. +There are two solutions to the Underlay CNI Access Service. The kube-proxy method is more commonly used and stable, and can be used stably in most environments. Cilium Without Kube-Proxy provides an alternative option for Underlay CNI to access the Service and accelerates Service access. Although there are certain restrictions and thresholds for use, it can meet the needs of users in specific scenarios. From cd1a3dbe4d67b409ac4655ad9f1256898045be62 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Fri, 17 Nov 2023 16:03:08 +0800 Subject: [PATCH 02/88] Merge pull request #2603 from cyclinder/spidermultusconfig/file_empty_value spidermultusconfig: set default value if it not set --- charts/spiderpool/templates/tls.yaml | 28 +++ pkg/constant/k8s.go | 8 + pkg/coordinatormanager/coordinator_mutate.go | 6 +- .../v2beta1/spidercoordinator_types.go | 14 +- .../v2beta1/spidermultus_types.go | 26 +-- pkg/multuscniconfig/multusconfig_informer.go | 4 +- pkg/multuscniconfig/multusconfig_mutate.go | 168 ++++++++++++++++++ pkg/multuscniconfig/multusconfig_webhook.go | 17 ++ test/Makefile.defs | 2 - test/scripts/install-multus.sh | 2 +- test/scripts/prepare.sh | 17 -- 11 files changed, 248 insertions(+), 44 deletions(-) create mode 100644 pkg/multuscniconfig/multusconfig_mutate.go diff --git a/charts/spiderpool/templates/tls.yaml b/charts/spiderpool/templates/tls.yaml index 196d30b5ae..2521f3b3cc 100644 --- a/charts/spiderpool/templates/tls.yaml +++ b/charts/spiderpool/templates/tls.yaml @@ -36,6 +36,34 @@ webhooks: resources: - spidersubnets sideEffects: None +{{- if .Values.multus.enableMultusConfig }} +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: {{ .Values.spiderpoolController.name | trunc 63 | trimSuffix "-" }} + namespace: {{ .Release.Namespace }} + path: /mutate-spiderpool-spidernet-io-v2beta1-spidermultusconfig + port: {{ .Values.spiderpoolController.webhookPort }} + {{- if (eq .Values.spiderpoolController.tls.method "provided") }} + caBundle: {{ .Values.spiderpoolController.tls.provided.tlsCa | required "missing spiderpoolController.tls.provided.tlsCa" }} + {{- else if (eq .Values.spiderpoolController.tls.method "auto") }} + caBundle: {{ .ca.Cert | b64enc }} + {{- end }} + failurePolicy: Fail + name: spidermultusconfig.spiderpool.spidernet.io + rules: + - apiGroups: + - spiderpool.spidernet.io + apiVersions: + - v2beta1 + operations: + - CREATE + - UPDATE + resources: + - spidermultusconfigs + sideEffects: None +{{- end }} - admissionReviewVersions: - v1 clientConfig: diff --git a/pkg/constant/k8s.go b/pkg/constant/k8s.go index b8944692e3..3315ccd0f0 100644 --- a/pkg/constant/k8s.go +++ b/pkg/constant/k8s.go @@ -147,3 +147,11 @@ const ( ResourceNameAnnot = "k8s.v1.cni.cncf.io/resourceName" ResourceNameOvsCniValue = "ovs-cni.network.kubevirt.io" ) + +const ( + MacvlanCNI = "macvlan" + IPVlanCNI = "ipvlan" + SriovCNI = "sriov" + OvsCNI = "ovs" + CustomCNI = "custom" +) diff --git a/pkg/coordinatormanager/coordinator_mutate.go b/pkg/coordinatormanager/coordinator_mutate.go index 702bb4bcde..7bcf5957b3 100644 --- a/pkg/coordinatormanager/coordinator_mutate.go +++ b/pkg/coordinatormanager/coordinator_mutate.go @@ -6,12 +6,14 @@ package coordinatormanager import ( "context" "fmt" - "k8s.io/utils/pointer" "net/netip" "strings" + "k8s.io/utils/pointer" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + coordinator_cmd "github.com/spidernet-io/spiderpool/cmd/coordinator/cmd" "github.com/spidernet-io/spiderpool/pkg/constant" spiderpoolv2beta1 "github.com/spidernet-io/spiderpool/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1" "github.com/spidernet-io/spiderpool/pkg/logutils" @@ -22,7 +24,7 @@ func mutateCoordinator(ctx context.Context, coord *spiderpoolv2beta1.SpiderCoord logger.Info("Start to mutate Coordinator") if coord.Spec.Mode == nil { - coord.Spec.Mode = pointer.String("underlay") + coord.Spec.Mode = pointer.String(string(coordinator_cmd.ModeAuto)) } if coord.Spec.TunePodRoutes == nil { coord.Spec.TunePodRoutes = pointer.Bool(true) diff --git a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go index ff8abc1524..9f1f87c844 100644 --- a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go +++ b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go @@ -11,7 +11,7 @@ import ( type CoordinatorSpec struct { // +kubebuilder:validation:Enum=auto;underlay;overlay;disabled // +kubebuilder:validation:Optional - Mode *string `json:"mode,omitempty"` + Mode *string `json:"mode"` // CoordinatorSpec is used by SpiderCoordinator and SpiderMultusConfig // in spidermultusconfig CRD , podCIDRType should not be required, which could be merged from SpiderCoordinator CR @@ -21,16 +21,16 @@ type CoordinatorSpec struct { PodCIDRType *string `json:"podCIDRType,omitempty"` // +kubebuilder:validation:Optional - HijackCIDR []string `json:"hijackCIDR,omitempty"` + HijackCIDR []string `json:"hijackCIDR"` // +kubebuilder:validation:Optional - PodMACPrefix *string `json:"podMACPrefix,omitempty"` + PodMACPrefix *string `json:"podMACPrefix"` // +kubebuilder:validation:Optional - TunePodRoutes *bool `json:"tunePodRoutes,omitempty"` + TunePodRoutes *bool `json:"tunePodRoutes"` // +kubebuilder:validation:Optional - PodDefaultRouteNIC *string `json:"podDefaultRouteNIC,omitempty"` + PodDefaultRouteNIC *string `json:"podDefaultRouteNIC"` // +kubebuilder:validation:Optional HostRuleTable *int `json:"hostRuleTable,omitempty"` @@ -39,10 +39,10 @@ type CoordinatorSpec struct { HostRPFilter *int `json:"hostRPFilter,omitempty"` // +kubebuilder:validation:Optional - DetectIPConflict *bool `json:"detectIPConflict,omitempty"` + DetectIPConflict *bool `json:"detectIPConflict"` // +kubebuilder:validation:Optional - DetectGateway *bool `json:"detectGateway,omitempty"` + DetectGateway *bool `json:"detectGateway"` } // CoordinationStatus defines the observed state of SpiderCoordinator. diff --git a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go index 709d372621..a9b4484075 100644 --- a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go +++ b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go @@ -52,7 +52,7 @@ type MultusCNIConfigSpec struct { DisableIPAM *bool `json:"disableIPAM"` // +kubebuilder:validation:Optional - CoordinatorConfig *CoordinatorSpec `json:"coordinator,omitempty"` + CoordinatorConfig *CoordinatorSpec `json:"coordinator"` // OtherCniTypeConfig only used for CniType custom, valid json format, can be empty // +kubebuilder:validation:Optional @@ -66,13 +66,13 @@ type SpiderMacvlanCniConfig struct { // +kubebuilder:validation:Optional // +kubebuilder:validation:Minimum=0 // +kubebuilder:validation:Maximum=4094 - VlanID *int32 `json:"vlanID,omitempty"` + VlanID *int32 `json:"vlanID"` // +kubebuilder:validation:Optional - Bond *BondConfig `json:"bond,omitempty"` + Bond *BondConfig `json:"bond"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` } type SpiderIPvlanCniConfig struct { @@ -82,13 +82,13 @@ type SpiderIPvlanCniConfig struct { // +kubebuilder:validation:Optional // +kubebuilder:validation:Minimum=0 // +kubebuilder:validation:Maximum=4094 - VlanID *int32 `json:"vlanID,omitempty"` + VlanID *int32 `json:"vlanID"` // +kubebuilder:validation:Optional - Bond *BondConfig `json:"bond,omitempty"` + Bond *BondConfig `json:"bond"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` } type SpiderSRIOVCniConfig struct { @@ -98,14 +98,14 @@ type SpiderSRIOVCniConfig struct { // +kubebuilder:validation:Optional // +kubebuilder:validation:Minimum=0 // +kubebuilder:validation:Maximum=4094 - VlanID *int32 `json:"vlanID,omitempty"` + VlanID *int32 `json:"vlanID"` // +kubebuilder:default=false // +kubebuilder:validation:Optional EnableRdma bool `json:"enableRdma"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` } type SpiderOvsCniConfig struct { @@ -119,7 +119,7 @@ type SpiderOvsCniConfig struct { // PCI address of a VF in valid sysfs format DeviceID string `json:"deviceID"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` } type Trunk struct { @@ -147,16 +147,16 @@ type BondConfig struct { Mode int32 `json:"mode"` // +kubebuilder:validation:Optional - Options *string `json:"options,omitempty"` + Options *string `json:"options"` } // SpiderpoolPools could specify the IPAM spiderpool CNI configuration default IPv4&IPv6 pools. type SpiderpoolPools struct { // +kubebuilder:validation:Optional - IPv4IPPool []string `json:"ipv4,omitempty"` + IPv4IPPool []string `json:"ipv4"` // +kubebuilder:validation:Optional - IPv6IPPool []string `json:"ipv6,omitempty"` + IPv6IPPool []string `json:"ipv6"` } func init() { diff --git a/pkg/multuscniconfig/multusconfig_informer.go b/pkg/multuscniconfig/multusconfig_informer.go index 9a1aebd5c7..18dad916fd 100644 --- a/pkg/multuscniconfig/multusconfig_informer.go +++ b/pkg/multuscniconfig/multusconfig_informer.go @@ -386,7 +386,7 @@ func generateNetAttachDef(netAttachName string, multusConf *spiderpoolv2beta1.Sp macvlanCNIConf := generateMacvlanCNIConf(disableIPAM, *multusConfSpec) // head insertion plugins = append([]interface{}{macvlanCNIConf}, plugins...) - if multusConfSpec.MacvlanConfig.VlanID != nil && *multusConfSpec.MacvlanConfig.VlanID != 0 { + if len(multusConfSpec.MacvlanConfig.Master) > 0 || (multusConfSpec.MacvlanConfig.VlanID != nil && *multusConfSpec.MacvlanConfig.VlanID != 0) { // we need to set Subvlan as first at the CNI plugin chain subVlanCNIConf := generateIfacer(multusConfSpec.MacvlanConfig.Master, *multusConfSpec.MacvlanConfig.VlanID, @@ -402,7 +402,7 @@ func generateNetAttachDef(netAttachName string, multusConf *spiderpoolv2beta1.Sp ipvlanCNIConf := generateIPvlanCNIConf(disableIPAM, *multusConfSpec) // head insertion plugins = append([]interface{}{ipvlanCNIConf}, plugins...) - if multusConfSpec.IPVlanConfig.VlanID != nil && *multusConfSpec.IPVlanConfig.VlanID != 0 { + if len(multusConfSpec.IPVlanConfig.Master) > 0 || (multusConfSpec.IPVlanConfig.VlanID != nil && *multusConfSpec.IPVlanConfig.VlanID != 0) { // we need to set Subvlan as first at the CNI plugin chain subVlanCNIConf := generateIfacer(multusConfSpec.IPVlanConfig.Master, *multusConfSpec.IPVlanConfig.VlanID, diff --git a/pkg/multuscniconfig/multusconfig_mutate.go b/pkg/multuscniconfig/multusconfig_mutate.go new file mode 100644 index 0000000000..95425d5ea8 --- /dev/null +++ b/pkg/multuscniconfig/multusconfig_mutate.go @@ -0,0 +1,168 @@ +// Copyright 2022 Authors of spidernet-io +// SPDX-License-Identifier: Apache-2.0 +package multuscniconfig + +import ( + "context" + + "k8s.io/utils/pointer" + + coordinator_cmd "github.com/spidernet-io/spiderpool/cmd/coordinator/cmd" + "github.com/spidernet-io/spiderpool/pkg/constant" + spiderpoolv2beta1 "github.com/spidernet-io/spiderpool/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1" + "github.com/spidernet-io/spiderpool/pkg/logutils" +) + +func mutateSpiderMultusConfig(ctx context.Context, smc *spiderpoolv2beta1.SpiderMultusConfig) error { + logger := logutils.FromContext(ctx) + logger.Info("Start to mutate Spidermulutconfig") + + switch smc.Spec.CniType { + case constant.MacvlanCNI: + setMacvlanDefaultConfig(smc.Spec.MacvlanConfig) + case constant.IPVlanCNI: + setIPVlanDefaultConfig(smc.Spec.IPVlanConfig) + case constant.SriovCNI: + setSriovDefaultConfig(smc.Spec.SriovConfig) + case constant.OvsCNI: + setOvsDefaultConfig(smc.Spec.OvsConfig) + case constant.CustomCNI: + if smc.Spec.CustomCNIConfig == nil { + smc.Spec.CustomCNIConfig = pointer.String("") + } + } + + smc.Spec.CoordinatorConfig = setCoordinatorDefaultConfig(smc.Spec.CoordinatorConfig) + return nil +} + +func setMacvlanDefaultConfig(macvlanConfig *spiderpoolv2beta1.SpiderMacvlanCniConfig) { + if macvlanConfig == nil { + return + } + + if macvlanConfig.VlanID == nil { + macvlanConfig.VlanID = pointer.Int32(0) + } + + macvlanConfig.Bond = setBondDefaultConfig(macvlanConfig.Bond) + + if macvlanConfig.SpiderpoolConfigPools == nil { + macvlanConfig.SpiderpoolConfigPools = &spiderpoolv2beta1.SpiderpoolPools{ + IPv4IPPool: []string{}, + IPv6IPPool: []string{}, + } + } +} + +func setBondDefaultConfig(bond *spiderpoolv2beta1.BondConfig) *spiderpoolv2beta1.BondConfig { + if bond == nil { + return &spiderpoolv2beta1.BondConfig{ + Name: "", + Mode: 0, + Options: pointer.String(""), + } + } + + if bond.Options == nil { + bond.Options = pointer.String("") + } + return bond +} + +func setIPVlanDefaultConfig(ipvlanConfig *spiderpoolv2beta1.SpiderIPvlanCniConfig) { + if ipvlanConfig == nil { + return + } + + if ipvlanConfig.VlanID == nil { + ipvlanConfig.VlanID = pointer.Int32(0) + } + + ipvlanConfig.Bond = setBondDefaultConfig(ipvlanConfig.Bond) + + if ipvlanConfig.SpiderpoolConfigPools == nil { + ipvlanConfig.SpiderpoolConfigPools = &spiderpoolv2beta1.SpiderpoolPools{ + IPv4IPPool: []string{}, + IPv6IPPool: []string{}, + } + } +} + +func setSriovDefaultConfig(sriovConfig *spiderpoolv2beta1.SpiderSRIOVCniConfig) { + if sriovConfig == nil { + return + } + + if sriovConfig.VlanID == nil { + sriovConfig.VlanID = pointer.Int32(0) + } + + if sriovConfig.SpiderpoolConfigPools == nil { + sriovConfig.SpiderpoolConfigPools = &spiderpoolv2beta1.SpiderpoolPools{ + IPv4IPPool: []string{}, + IPv6IPPool: []string{}, + } + } +} + +func setOvsDefaultConfig(ovsConfig *spiderpoolv2beta1.SpiderOvsCniConfig) { + if ovsConfig == nil { + return + } + + if ovsConfig.VlanTag == nil { + ovsConfig.VlanTag = pointer.Int32(0) + } + + if ovsConfig.SpiderpoolConfigPools == nil { + ovsConfig.SpiderpoolConfigPools = &spiderpoolv2beta1.SpiderpoolPools{ + IPv4IPPool: []string{}, + IPv6IPPool: []string{}, + } + } +} + +func setCoordinatorDefaultConfig(coordinator *spiderpoolv2beta1.CoordinatorSpec) *spiderpoolv2beta1.CoordinatorSpec { + if coordinator == nil { + return &spiderpoolv2beta1.CoordinatorSpec{ + Mode: pointer.String(string(coordinator_cmd.ModeAuto)), + HijackCIDR: []string{}, + DetectGateway: pointer.Bool(false), + DetectIPConflict: pointer.Bool(false), + PodMACPrefix: pointer.String(""), + PodDefaultRouteNIC: pointer.String(""), + TunePodRoutes: pointer.Bool(true), + } + } + + if coordinator.Mode == nil { + coordinator.Mode = pointer.String(string(coordinator_cmd.ModeAuto)) + } + + if len(coordinator.HijackCIDR) == 0 { + coordinator.HijackCIDR = []string{} + } + + if coordinator.DetectGateway == nil { + coordinator.DetectGateway = pointer.Bool(false) + } + + if coordinator.DetectIPConflict == nil { + coordinator.DetectIPConflict = pointer.Bool(false) + } + + if coordinator.PodMACPrefix == nil { + coordinator.PodMACPrefix = pointer.String("") + } + + if coordinator.PodDefaultRouteNIC == nil { + coordinator.PodDefaultRouteNIC = pointer.String("") + } + + if coordinator.TunePodRoutes == nil { + coordinator.TunePodRoutes = pointer.Bool(false) + } + + return coordinator +} diff --git a/pkg/multuscniconfig/multusconfig_webhook.go b/pkg/multuscniconfig/multusconfig_webhook.go index 3beda4188e..2c20b26461 100644 --- a/pkg/multuscniconfig/multusconfig_webhook.go +++ b/pkg/multuscniconfig/multusconfig_webhook.go @@ -31,12 +31,29 @@ func (mcw *MultusConfigWebhook) SetupWebhookWithManager(mgr ctrl.Manager) error return ctrl.NewWebhookManagedBy(mgr). For(&spiderpoolv2beta1.SpiderMultusConfig{}). + WithDefaulter(mcw). WithValidator(mcw). Complete() } var _ webhook.CustomValidator = &MultusConfigWebhook{} +// Default implements admission.CustomDefaulter. +func (*MultusConfigWebhook) Default(ctx context.Context, obj runtime.Object) error { + smc := obj.(*spiderpoolv2beta1.SpiderMultusConfig) + + mutateLogger := logger.Named("Mutating").With( + zap.String("Spidermultusconfig", smc.Name)) + mutateLogger.Sugar().Debugf("Request Spidermultusconfig: %+v", *smc) + + if err := mutateSpiderMultusConfig(logutils.IntoContext(ctx, mutateLogger), smc); err != nil { + mutateLogger.Sugar().Errorf("Failed to mutate Spidermultusconfig: %v", err) + } + + mutateLogger.Sugar().Debugf("Finish Spidermultusconfig: %+v", smc) + return nil +} + func (mcw *MultusConfigWebhook) ValidateCreate(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { multusConfig := obj.(*spiderpoolv2beta1.SpiderMultusConfig) diff --git a/test/Makefile.defs b/test/Makefile.defs index 27c7c09b35..51dcc90616 100644 --- a/test/Makefile.defs +++ b/test/Makefile.defs @@ -57,8 +57,6 @@ INSTALL_SPIDERDOCTOR ?= true INSTALL_KUBEVIRT ?= false -CNI_PACKAGE_VERSION ?= v1.3.0 - #============ ginkgo-custom-flag ==================== E2E_CLUSTER_NAME ?= spider diff --git a/test/scripts/install-multus.sh b/test/scripts/install-multus.sh index 5e96033db5..2d334eeab7 100755 --- a/test/scripts/install-multus.sh +++ b/test/scripts/install-multus.sh @@ -366,7 +366,7 @@ Install::SpiderpoolCR kubectl get spidercoordinator default -o yaml --kubeconfig ${E2E_KUBECONFIG} kubectl get sp -o wide --kubeconfig ${E2E_KUBECONFIG} -kubectl get spidermultusconfig -n kube-system --kubeconfig ${E2E_KUBECONFIG} +kubectl get spidermultusconfig -n kube-system --kubeconfig ${E2E_KUBECONFIG} -o yaml kubectl get network-attachment-definitions.k8s.cni.cncf.io --kubeconfig ${E2E_KUBECONFIG} -n kube-system -o yaml echo "$CURRENT_FILENAME : done" \ No newline at end of file diff --git a/test/scripts/prepare.sh b/test/scripts/prepare.sh index a98f86438f..a13f68286c 100755 --- a/test/scripts/prepare.sh +++ b/test/scripts/prepare.sh @@ -7,9 +7,6 @@ DOWNLOAD_DIR="$1" mkdir -p $DOWNLOAD_DIR echo "Download Package to $DOWNLOAD_DIR " -[ -z "$CNI_PACKAGE_VERSION" ] && echo "error, miss CNI_PACKAGE_VERSION " && exit 1 -echo "Using CNI_PACKAGE_VERSION: $CNI_PACKAGE_VERSION" - [ -z "$ARCH" ] && echo "error, miss ARCH " && exit 1 echo "Using ARCH: $ARCH" @@ -17,20 +14,6 @@ echo "Using ARCH: $ARCH" echo "all images: $IMAGE_LIST" #================================= - -OS=$(uname | tr 'A-Z' 'a-z') - -# prepare cni-plugins -PACKAGE_NAME="cni-plugins-linux-${ARCH}-${CNI_PACKAGE_VERSION}.tgz" -if [ ! -f "${DOWNLOAD_DIR}/${PACKAGE_NAME}" ]; then - echo "begin to download cni-plugins ${PACKAGE_NAME} " - wget -P ${DOWNLOAD_DIR} https://github.com/containernetworking/plugins/releases/download/${CNI_PACKAGE_VERSION}/${PACKAGE_NAME} -else - echo "${DOWNLOAD_DIR}/${PACKAGE_NAME} exist, Skip download" -fi - -#================================= - for image in $IMAGE_LIST ; do PREFIX_IMAGE=$(echo $image | awk -F ':' '{print $1}') SUFFIX_IMAGE=$(echo $image | awk -F ':' '{print $2}') From 45c202e213cc1e4e2504051dd57ae94385e4ff1c Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:10:20 +0800 Subject: [PATCH 03/88] Merge pull request #2626 from ty-dc/docs/fix-description-error docs: Fix description when `multus.multusCNI.defaultCniCRName` is empty. --- docs/usage/install/cloud/get-started-alibaba-zh_CN.md | 2 +- docs/usage/install/cloud/get-started-aws-zh_CN.md | 2 +- docs/usage/install/overlay/get-started-calico-zh_cn.md | 2 +- docs/usage/install/overlay/get-started-cilium-zh_cn.md | 2 +- docs/usage/install/underlay/get-started-calico-zh_CN.md | 2 +- docs/usage/install/underlay/get-started-macvlan-zh_CN.md | 4 ++-- docs/usage/install/underlay/get-started-ovs-zh_CN.md | 2 +- docs/usage/install/underlay/get-started-sriov-zh_CN.md | 2 +- docs/usage/install/underlay/get-started-weave-zh_CN.md | 2 +- docs/usage/kubevirt-zh_CN.md | 1 - docs/usage/network-topology-zh_CN.md | 2 +- docs/usage/rdma-zh_CN.md | 4 ++-- 12 files changed, 13 insertions(+), 14 deletions(-) diff --git a/docs/usage/install/cloud/get-started-alibaba-zh_CN.md b/docs/usage/install/cloud/get-started-alibaba-zh_CN.md index 8d7f6534d3..981de6962f 100644 --- a/docs/usage/install/cloud/get-started-alibaba-zh_CN.md +++ b/docs/usage/install/cloud/get-started-alibaba-zh_CN.md @@ -55,7 +55,7 @@ helm install spiderpool spiderpool/spiderpool --namespace kube-system --set ipam > > Spiderpool 可以为控制器类型为:`Statefulset` 的应用副本固定 IP 地址。在公有云的 Underlay 网络场景中,云主机只能使用限定的 IP 地址,当 StatefulSet 类型的应用副本漂移到其他节点,但由于原固定的 IP 在其他节点是非法不可用的,新的 Pod 将出现网络不可用的问题。对此场景,将 `ipam.enableStatefulSet` 设置为 `false`,禁用该功能。 > -> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 +> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 ### 安装 CNI 配置 diff --git a/docs/usage/install/cloud/get-started-aws-zh_CN.md b/docs/usage/install/cloud/get-started-aws-zh_CN.md index 936681dc1e..65bf77a9fb 100644 --- a/docs/usage/install/cloud/get-started-aws-zh_CN.md +++ b/docs/usage/install/cloud/get-started-aws-zh_CN.md @@ -83,7 +83,7 @@ helm install spiderpool spiderpool/spiderpool --namespace kube-system --set ipam > > - Spiderpool 可以为控制器类型为:`Statefulset` 的应用副本固定 IP 地址。在公有云的 Underlay 网络场景中,云主机只能使用限定的 IP 地址,当 StatefulSet 类型的应用副本漂移到其他节点,但由于原固定的 IP 在其他节点是非法不可用的,新的 Pod 将出现网络不可用的问题。对此场景,将 `ipam.enableStatefulSet` 设置为 `false`,禁用该功能。 > -> - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 +> - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 ### 安装 CNI 配置 diff --git a/docs/usage/install/overlay/get-started-calico-zh_cn.md b/docs/usage/install/overlay/get-started-calico-zh_cn.md index a72afe9901..28733bf975 100644 --- a/docs/usage/install/overlay/get-started-calico-zh_cn.md +++ b/docs/usage/install/overlay/get-started-calico-zh_cn.md @@ -34,7 +34,7 @@ > 如果您的集群未安装 Macvlan CNI, 可指定 Helm 参数 `--set plugins.installCNI=true` 安装 Macvlan 到每个节点。 > -> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 +> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 等待安装完成,查看 Spiderpool 组件状态: diff --git a/docs/usage/install/overlay/get-started-cilium-zh_cn.md b/docs/usage/install/overlay/get-started-cilium-zh_cn.md index 2300ac381c..f1e9d9d00e 100644 --- a/docs/usage/install/overlay/get-started-cilium-zh_cn.md +++ b/docs/usage/install/overlay/get-started-cilium-zh_cn.md @@ -35,7 +35,7 @@ > 如果您的集群未安装 Macvlan CNI, 可指定 Helm 参数 `--set plugins.installCNI=true` 安装 Macvlan 到每个节点。 > -> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 +> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 等待安装完成,查看 Spiderpool 组件状态: diff --git a/docs/usage/install/underlay/get-started-calico-zh_CN.md b/docs/usage/install/underlay/get-started-calico-zh_CN.md index cfee855f22..bbc85e8e0c 100644 --- a/docs/usage/install/underlay/get-started-calico-zh_CN.md +++ b/docs/usage/install/underlay/get-started-calico-zh_CN.md @@ -30,7 +30,7 @@ helm install spiderpool spiderpool/spiderpool --namespace kube-system --set mult > 如果您是国内用户,可以指定参数 `--set global.imageRegistryOverride=ghcr.m.daocloud.io` 避免 Spiderpool 的镜像拉取失败。 > -> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 +> 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 创建 Pod 使用的 SpiderIPPool 实例: diff --git a/docs/usage/install/underlay/get-started-macvlan-zh_CN.md b/docs/usage/install/underlay/get-started-macvlan-zh_CN.md index 3c52b5d9fe..e0c475963d 100644 --- a/docs/usage/install/underlay/get-started-macvlan-zh_CN.md +++ b/docs/usage/install/underlay/get-started-macvlan-zh_CN.md @@ -29,10 +29,10 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方 ``` > 如果您的集群未安装 Macvlan CNI, 可指定 Helm 参数 `--set plugins.installCNI=true` 安装 Macvlan 到每个节点。 - > + > > 如果您是国内用户,可以指定参数 `--set global.imageRegistryOverride=ghcr.m.daocloud.io` 避免 Spiderpool 的镜像拉取失败。 > - > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 + > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 2. 创建 SpiderIPPool 实例。 diff --git a/docs/usage/install/underlay/get-started-ovs-zh_CN.md b/docs/usage/install/underlay/get-started-ovs-zh_CN.md index baa1c05df2..bac6f522e0 100644 --- a/docs/usage/install/underlay/get-started-ovs-zh_CN.md +++ b/docs/usage/install/underlay/get-started-ovs-zh_CN.md @@ -35,7 +35,7 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方 > > 如果您是国内用户,可以指定参数 `--set global.imageRegistryOverride=ghcr.m.daocloud.io` 以帮助您快速的拉取镜像。 > - > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 + > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 2. 在每个节点上配置 Open vSwitch 网桥。 diff --git a/docs/usage/install/underlay/get-started-sriov-zh_CN.md b/docs/usage/install/underlay/get-started-sriov-zh_CN.md index 600e3b878a..248d45bdc1 100644 --- a/docs/usage/install/underlay/get-started-sriov-zh_CN.md +++ b/docs/usage/install/underlay/get-started-sriov-zh_CN.md @@ -44,7 +44,7 @@ Spiderpool 可用作 underlay 网络场景下提供固定 IP 的一种解决方 > > 如果您是国内用户,可以指定参数 ` --set global.imageRegistryOverride=ghcr.m.daocloud.io ` 避免 Spiderpool 的镜像拉取失败。 > - > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 + > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 2. 给希望运行 SR-IOV CNI 的节点,按照如下命令打上 label,这样,sriov-network-operator 才会在指定的节点上安装组件 diff --git a/docs/usage/install/underlay/get-started-weave-zh_CN.md b/docs/usage/install/underlay/get-started-weave-zh_CN.md index 69e9c1fde2..4da1475952 100644 --- a/docs/usage/install/underlay/get-started-weave-zh_CN.md +++ b/docs/usage/install/underlay/get-started-weave-zh_CN.md @@ -35,7 +35,7 @@ > 如果您是国内用户,可以指定参数 `--set global.imageRegistryOverride=ghcr.m.daocloud.io` 避免 Spiderpool 的镜像拉取失败。 > - > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 + > 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 等待 Pod Running, 创建 Pod 所使用的 IP 池: diff --git a/docs/usage/kubevirt-zh_CN.md b/docs/usage/kubevirt-zh_CN.md index e031415758..9a8bec32fd 100644 --- a/docs/usage/kubevirt-zh_CN.md +++ b/docs/usage/kubevirt-zh_CN.md @@ -48,7 +48,6 @@ KubeVirt VM 会在以下一些场景中会出现固定地址的使用: 请参考 [Macvlan Quick Start](./install/underlay/get-started-macvlan-zh_CN.md) 安装 Spiderpool. 其中,可确保 helm 安装选项 `ipam.enableKubevirtStaticIP=true` - ### 创建 KubeVirt VM 应用 以下的示例 Yaml 中, 会创建 1 个 KubeVirt VM 应用 ,其中: diff --git a/docs/usage/network-topology-zh_CN.md b/docs/usage/network-topology-zh_CN.md index c9d0ce4feb..e0f40bde89 100644 --- a/docs/usage/network-topology-zh_CN.md +++ b/docs/usage/network-topology-zh_CN.md @@ -57,7 +57,7 @@ helm install spiderpool spiderpool/spiderpool --namespace kube-system --set mult > > - 如果您的集群未安装 Macvlan CNI, 可指定 Helm 参数 `--set plugins.installCNI=true` 安装 Macvlan 到每个节点。 > -> - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 +> - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 - 检查安装完成 diff --git a/docs/usage/rdma-zh_CN.md b/docs/usage/rdma-zh_CN.md index 890fc3abbe..bfc7112142 100644 --- a/docs/usage/rdma-zh_CN.md +++ b/docs/usage/rdma-zh_CN.md @@ -60,7 +60,7 @@ RDMA 网卡,也可以基于 SR-IOV CNI 来使用 exclusive 模式的网卡。 > > - 完成 Spiderpool 安装后,可以手动编辑 configmap spiderpool-rdma-shared-device-plugin 来重新配置 RDMA shared device plugin。 > - > - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 + > - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 完成后,安装的组件如下 @@ -267,7 +267,7 @@ RDMA 网卡,也可以基于 SR-IOV CNI 来使用 exclusive 模式的网卡。 > > - 完成 Spiderpool 安装后,可以手动编辑 configmap spiderpool-rdma-shared-device-plugin 来重新配置 RDMA shared device plugin > - > - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 + > - 通过 `multus.multusCNI.defaultCniCRName` 指定 multus 默认使用的 CNI 的 NetworkAttachmentDefinition 实例名。如果 `multus.multusCNI.defaultCniCRName` 选项不为空,则安装后会自动生成一个数据为空的 NetworkAttachmentDefinition 对应实例。如果 `multus.multusCNI.defaultCniCRName` 选项为空,会尝试通过 /etc/cni/net.d 目录下的第一个 CNI 配置来创建对应的 NetworkAttachmentDefinition 实例,否则会自动生成一个名为 `default` 的 NetworkAttachmentDefinition 实例,以完成 multus 的安装。 完成后,安装的组件如下 From 322f70b1f90a9c7800a1589e2db1896db511eda6 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:02:35 +0800 Subject: [PATCH 04/88] Merge pull request #2639 from cyclinder/ifacer/fix_bond ifacer: Fix the slave with bond was not set if vlanId was set to 0 --- cmd/ifacer/cmd/cmd_add.go | 48 +++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/cmd/ifacer/cmd/cmd_add.go b/cmd/ifacer/cmd/cmd_add.go index 1dfa861eb7..587ecb8753 100644 --- a/cmd/ifacer/cmd/cmd_add.go +++ b/cmd/ifacer/cmd/cmd_add.go @@ -55,25 +55,6 @@ func CmdAdd(args *skel.CmdArgs) error { return types.PrintResult(result, conf.CNIVersion) } - for _, slave := range conf.Interfaces { - link, err := netlink.LinkByName(slave) - if err != nil { - return fmt.Errorf("failed to InterfaceByName %s: %w", slave, err) - } - - if err = netlink.LinkSetDown(link); err != nil { - return fmt.Errorf("failed to set slave %s down: %w", slave, err) - } - - if err = networking.LinkSetBondSlave(slave, bond); err != nil { - return err - } - } - - if err = netlink.LinkSetUp(bond); err != nil { - return fmt.Errorf("failed to set %s up", bond.Name) - } - vlanName := getVlanIfaceName(conf.Bond.Name, conf.VlanID) if err := checkInterfaceWithSameVlan(conf.VlanID, vlanName); err != nil { return err @@ -150,8 +131,35 @@ func createBondDevice(conf *Ifacer) (*netlink.Bond, error) { } } + if err = netlink.LinkAdd(bond); err != nil { + return nil, err + } + + for _, slave := range conf.Interfaces { + link, err := netlink.LinkByName(slave) + if err != nil { + return nil, fmt.Errorf("failed to InterfaceByName %s: %w", slave, err) + } + + if err = netlink.LinkSetDown(link); err != nil { + return nil, fmt.Errorf("failed to set slave %s down: %w", slave, err) + } + + if err = networking.LinkSetBondSlave(slave, bond); err != nil { + return nil, err + } + + if err = netlink.LinkSetUp(link); err != nil { + return nil, err + } + } + + if err = netlink.LinkSetUp(bond); err != nil { + return nil, fmt.Errorf("failed to set %s up", bond.Name) + } + // create vlan interface base on bond - return bond, netlink.LinkAdd(bond) + return bond, nil } func createVlanDevice(conf *Ifacer) error { From 88cac5ada86dc6ddc04ffc464a9ca62653c2d8d2 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:12:21 +0800 Subject: [PATCH 05/88] Merge pull request #2622 from Icarus9913/fix/wk/crd supplement spidermultusconfig default value --- .../v2beta1/spidercoordinator_types.go | 14 ++++---- .../v2beta1/spidermultus_types.go | 32 +++++++++---------- pkg/multuscniconfig/multusconfig_informer.go | 6 ++-- pkg/multuscniconfig/multusconfig_mutate.go | 20 +++++------- 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go index 9f1f87c844..ff8abc1524 100644 --- a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go +++ b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidercoordinator_types.go @@ -11,7 +11,7 @@ import ( type CoordinatorSpec struct { // +kubebuilder:validation:Enum=auto;underlay;overlay;disabled // +kubebuilder:validation:Optional - Mode *string `json:"mode"` + Mode *string `json:"mode,omitempty"` // CoordinatorSpec is used by SpiderCoordinator and SpiderMultusConfig // in spidermultusconfig CRD , podCIDRType should not be required, which could be merged from SpiderCoordinator CR @@ -21,16 +21,16 @@ type CoordinatorSpec struct { PodCIDRType *string `json:"podCIDRType,omitempty"` // +kubebuilder:validation:Optional - HijackCIDR []string `json:"hijackCIDR"` + HijackCIDR []string `json:"hijackCIDR,omitempty"` // +kubebuilder:validation:Optional - PodMACPrefix *string `json:"podMACPrefix"` + PodMACPrefix *string `json:"podMACPrefix,omitempty"` // +kubebuilder:validation:Optional - TunePodRoutes *bool `json:"tunePodRoutes"` + TunePodRoutes *bool `json:"tunePodRoutes,omitempty"` // +kubebuilder:validation:Optional - PodDefaultRouteNIC *string `json:"podDefaultRouteNIC"` + PodDefaultRouteNIC *string `json:"podDefaultRouteNIC,omitempty"` // +kubebuilder:validation:Optional HostRuleTable *int `json:"hostRuleTable,omitempty"` @@ -39,10 +39,10 @@ type CoordinatorSpec struct { HostRPFilter *int `json:"hostRPFilter,omitempty"` // +kubebuilder:validation:Optional - DetectIPConflict *bool `json:"detectIPConflict"` + DetectIPConflict *bool `json:"detectIPConflict,omitempty"` // +kubebuilder:validation:Optional - DetectGateway *bool `json:"detectGateway"` + DetectGateway *bool `json:"detectGateway,omitempty"` } // CoordinationStatus defines the observed state of SpiderCoordinator. diff --git a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go index a9b4484075..3a7f00c1c6 100644 --- a/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go +++ b/pkg/k8s/apis/spiderpool.spidernet.io/v2beta1/spidermultus_types.go @@ -45,14 +45,14 @@ type MultusCNIConfigSpec struct { // +kubebuilder:default=true // +kubebuilder:validation:Optional - EnableCoordinator *bool `json:"enableCoordinator"` + EnableCoordinator *bool `json:"enableCoordinator,omitempty"` // +kubebuilder:default=false // +kubebuilder:validation:Optional - DisableIPAM *bool `json:"disableIPAM"` + DisableIPAM *bool `json:"disableIPAM,omitempty"` // +kubebuilder:validation:Optional - CoordinatorConfig *CoordinatorSpec `json:"coordinator"` + CoordinatorConfig *CoordinatorSpec `json:"coordinator,omitempty"` // OtherCniTypeConfig only used for CniType custom, valid json format, can be empty // +kubebuilder:validation:Optional @@ -66,13 +66,13 @@ type SpiderMacvlanCniConfig struct { // +kubebuilder:validation:Optional // +kubebuilder:validation:Minimum=0 // +kubebuilder:validation:Maximum=4094 - VlanID *int32 `json:"vlanID"` + VlanID *int32 `json:"vlanID,omitempty"` // +kubebuilder:validation:Optional - Bond *BondConfig `json:"bond"` + Bond *BondConfig `json:"bond,omitempty"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` } type SpiderIPvlanCniConfig struct { @@ -82,13 +82,13 @@ type SpiderIPvlanCniConfig struct { // +kubebuilder:validation:Optional // +kubebuilder:validation:Minimum=0 // +kubebuilder:validation:Maximum=4094 - VlanID *int32 `json:"vlanID"` + VlanID *int32 `json:"vlanID,omitempty"` // +kubebuilder:validation:Optional - Bond *BondConfig `json:"bond"` + Bond *BondConfig `json:"bond,omitempty"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` } type SpiderSRIOVCniConfig struct { @@ -98,28 +98,28 @@ type SpiderSRIOVCniConfig struct { // +kubebuilder:validation:Optional // +kubebuilder:validation:Minimum=0 // +kubebuilder:validation:Maximum=4094 - VlanID *int32 `json:"vlanID"` + VlanID *int32 `json:"vlanID,omitempty"` // +kubebuilder:default=false // +kubebuilder:validation:Optional EnableRdma bool `json:"enableRdma"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` } type SpiderOvsCniConfig struct { // +kubebuilder:validation:Required BrName string `json:"bridge"` // +kubebuilder:validation:Optional - VlanTag *int32 `json:"vlan"` + VlanTag *int32 `json:"vlan,omitempty"` // +kubebuilder:validation:Optional Trunk []*Trunk `json:"trunk,omitempty"` // +kubebuilder:validation:Optional // PCI address of a VF in valid sysfs format DeviceID string `json:"deviceID"` // +kubebuilder:validation:Optional - SpiderpoolConfigPools *SpiderpoolPools `json:"ippools"` + SpiderpoolConfigPools *SpiderpoolPools `json:"ippools,omitempty"` } type Trunk struct { @@ -147,16 +147,16 @@ type BondConfig struct { Mode int32 `json:"mode"` // +kubebuilder:validation:Optional - Options *string `json:"options"` + Options *string `json:"options,omitempty"` } // SpiderpoolPools could specify the IPAM spiderpool CNI configuration default IPv4&IPv6 pools. type SpiderpoolPools struct { // +kubebuilder:validation:Optional - IPv4IPPool []string `json:"ipv4"` + IPv4IPPool []string `json:"ipv4,omitempty"` // +kubebuilder:validation:Optional - IPv6IPPool []string `json:"ipv6"` + IPv6IPPool []string `json:"ipv6,omitempty"` } func init() { diff --git a/pkg/multuscniconfig/multusconfig_informer.go b/pkg/multuscniconfig/multusconfig_informer.go index 18dad916fd..1d9b900569 100644 --- a/pkg/multuscniconfig/multusconfig_informer.go +++ b/pkg/multuscniconfig/multusconfig_informer.go @@ -386,7 +386,8 @@ func generateNetAttachDef(netAttachName string, multusConf *spiderpoolv2beta1.Sp macvlanCNIConf := generateMacvlanCNIConf(disableIPAM, *multusConfSpec) // head insertion plugins = append([]interface{}{macvlanCNIConf}, plugins...) - if len(multusConfSpec.MacvlanConfig.Master) > 0 || (multusConfSpec.MacvlanConfig.VlanID != nil && *multusConfSpec.MacvlanConfig.VlanID != 0) { + if (multusConfSpec.MacvlanConfig.VlanID != nil && *multusConfSpec.MacvlanConfig.VlanID != 0) || + len(multusConfSpec.MacvlanConfig.Master) >= 2 { // we need to set Subvlan as first at the CNI plugin chain subVlanCNIConf := generateIfacer(multusConfSpec.MacvlanConfig.Master, *multusConfSpec.MacvlanConfig.VlanID, @@ -402,7 +403,8 @@ func generateNetAttachDef(netAttachName string, multusConf *spiderpoolv2beta1.Sp ipvlanCNIConf := generateIPvlanCNIConf(disableIPAM, *multusConfSpec) // head insertion plugins = append([]interface{}{ipvlanCNIConf}, plugins...) - if len(multusConfSpec.IPVlanConfig.Master) > 0 || (multusConfSpec.IPVlanConfig.VlanID != nil && *multusConfSpec.IPVlanConfig.VlanID != 0) { + if (multusConfSpec.IPVlanConfig.VlanID != nil && *multusConfSpec.IPVlanConfig.VlanID != 0) || + len(multusConfSpec.IPVlanConfig.Master) >= 2 { // we need to set Subvlan as first at the CNI plugin chain subVlanCNIConf := generateIfacer(multusConfSpec.IPVlanConfig.Master, *multusConfSpec.IPVlanConfig.VlanID, diff --git a/pkg/multuscniconfig/multusconfig_mutate.go b/pkg/multuscniconfig/multusconfig_mutate.go index 95425d5ea8..ccdee3e3e3 100644 --- a/pkg/multuscniconfig/multusconfig_mutate.go +++ b/pkg/multuscniconfig/multusconfig_mutate.go @@ -15,7 +15,7 @@ import ( func mutateSpiderMultusConfig(ctx context.Context, smc *spiderpoolv2beta1.SpiderMultusConfig) error { logger := logutils.FromContext(ctx) - logger.Info("Start to mutate Spidermulutconfig") + logger.Info("Start to mutate SpiderMultusConfig") switch smc.Spec.CniType { case constant.MacvlanCNI: @@ -45,7 +45,9 @@ func setMacvlanDefaultConfig(macvlanConfig *spiderpoolv2beta1.SpiderMacvlanCniCo macvlanConfig.VlanID = pointer.Int32(0) } - macvlanConfig.Bond = setBondDefaultConfig(macvlanConfig.Bond) + if macvlanConfig.Bond != nil { + macvlanConfig.Bond = setBondDefaultConfig(macvlanConfig.Bond) + } if macvlanConfig.SpiderpoolConfigPools == nil { macvlanConfig.SpiderpoolConfigPools = &spiderpoolv2beta1.SpiderpoolPools{ @@ -56,14 +58,6 @@ func setMacvlanDefaultConfig(macvlanConfig *spiderpoolv2beta1.SpiderMacvlanCniCo } func setBondDefaultConfig(bond *spiderpoolv2beta1.BondConfig) *spiderpoolv2beta1.BondConfig { - if bond == nil { - return &spiderpoolv2beta1.BondConfig{ - Name: "", - Mode: 0, - Options: pointer.String(""), - } - } - if bond.Options == nil { bond.Options = pointer.String("") } @@ -79,7 +73,9 @@ func setIPVlanDefaultConfig(ipvlanConfig *spiderpoolv2beta1.SpiderIPvlanCniConfi ipvlanConfig.VlanID = pointer.Int32(0) } - ipvlanConfig.Bond = setBondDefaultConfig(ipvlanConfig.Bond) + if ipvlanConfig.Bond != nil { + ipvlanConfig.Bond = setBondDefaultConfig(ipvlanConfig.Bond) + } if ipvlanConfig.SpiderpoolConfigPools == nil { ipvlanConfig.SpiderpoolConfigPools = &spiderpoolv2beta1.SpiderpoolPools{ @@ -140,7 +136,7 @@ func setCoordinatorDefaultConfig(coordinator *spiderpoolv2beta1.CoordinatorSpec) coordinator.Mode = pointer.String(string(coordinator_cmd.ModeAuto)) } - if len(coordinator.HijackCIDR) == 0 { + if coordinator.HijackCIDR == nil { coordinator.HijackCIDR = []string{} } From 5b9cb4c7fb826a5c230e9fcb18d57dcdece6fcd7 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Wed, 29 Nov 2023 17:30:57 +0800 Subject: [PATCH 06/88] Merge pull request #2661 from cyclinder/docs/ifacer_network_manager docs: Fix NetworkManager manager ifacer's interface --- docs/concepts/coordinator-zh_CN.md | 10 +++++++ docs/concepts/coordinator.md | 11 ++++++++ docs/reference/plugin-ifacer.md | 18 ++++++++++--- .../underlay/get-started-kind-zh_CN.md | 15 +++++++++++ .../install/underlay/get-started-kind.md | 15 +++++++++++ .../underlay/get-started-macvlan-zh_CN.md | 16 ++++++++++++ .../install/underlay/get-started-macvlan.md | 15 +++++++++++ .../install/underlay/get-started-ovs-zh_CN.md | 16 ++++++++++++ .../usage/install/underlay/get-started-ovs.md | 15 +++++++++++ .../underlay/get-started-sriov-zh_CN.md | 26 +++++++++++++++++++ .../install/underlay/get-started-sriov.md | 15 +++++++++++ 11 files changed, 169 insertions(+), 3 deletions(-) diff --git a/docs/concepts/coordinator-zh_CN.md b/docs/concepts/coordinator-zh_CN.md index a73e753907..a5120ab487 100644 --- a/docs/concepts/coordinator-zh_CN.md +++ b/docs/concepts/coordinator-zh_CN.md @@ -10,6 +10,16 @@ Spiderpool 内置一个叫 `coordinator` 的 CNI meta-plugin, 它在 Main CNI - 支持检测 Pod 的网关是否可达 - 支持固定 Pod 的 Mac 地址前缀 +注意: 如果您的操作系统是使用 NetworkManager 的 OS,比如 Fedora、Centos等,强烈建议配置 NetworkManager 的配置文件(/etc/NetworkManager/conf.d/spidernet.conf),避免 NetworkManager 干扰 `coordinator` 创建的 Veth 虚拟接口,影响通信: + +```shell +~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf +> [keyfile] +> unmanaged-devices=interface-name:^veth* +> EOF +~# systemctl restart NetworkManager +``` + 下面我们将详细的介绍 `coordinator` 如何解决或实现这些功能。 ## CNI 配置字段说明 diff --git a/docs/concepts/coordinator.md b/docs/concepts/coordinator.md index 0efa21eb02..6b20da5316 100644 --- a/docs/concepts/coordinator.md +++ b/docs/concepts/coordinator.md @@ -10,6 +10,17 @@ Spiderpool incorporates a CNI meta-plugin called `coordinator` that works after - Check the reachability of Pod gateways - Support fixed Mac address prefixes for Pods +Note: If your OS(such as Fedora, CentOS, etc.) uses NetworkManager, highly recommend configuring following configuration file at `/etc/NetworkManager/conf.d/spidernet.conf` to +prevent interference from NetworkManager with veth interfaces created through `coordinator`: + +```shell +~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf +> [keyfile] +> unmanaged-devices=interface-name:^veth* +> EOF +~# systemctl restart NetworkManager +``` + Let's delve into how coordinator implements these features. ## CNI fields description diff --git a/docs/reference/plugin-ifacer.md b/docs/reference/plugin-ifacer.md index 420963642d..5119d283a5 100644 --- a/docs/reference/plugin-ifacer.md +++ b/docs/reference/plugin-ifacer.md @@ -10,9 +10,21 @@ This plugin dynamically creates VLAN sub-interfaces or Bond interfaces on the no - Support dynamic creation of VLAN sub-interfaces - Support dynamic creation of Bond interfaces -> The VLAN/Bond interfaces created by this plugin will be lost when the node restarts, but they will be automatically recreated upon the Pod restarts -> Deleting existed VLAN/Bond interfaces is not supported -> Configuring the address of VLAN/Bond interfaces during creation is not supported +## Notes + +1. The VLAN/Bond interfaces created by this plugin will be lost when the node restarts, but they will be automatically recreated upon the Pod restarts. +2. Deleting existed VLAN/Bond interfaces is not supported. +3. Configuring the address of VLAN/Bond interfaces during creation is not supported. +4. If your OS(such as Fedora, CentOS, etc.) uses NetworkManager, Highly recommend configuring following configuration file at `/etc/NetworkManager/conf.d/spidernet.conf` to prevent interference from NetworkManager with Vlan and Bond interfaces created by `Ifacer`: + +```shell +~# INTERFACE= +~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf +> [keyfile] +> unmanaged-devices=interface-name:^veth*;interface-name:${INTERFACE} +> EOF +~# systemctl restart NetworkManager +``` ## Prerequisite diff --git a/docs/usage/install/underlay/get-started-kind-zh_CN.md b/docs/usage/install/underlay/get-started-kind-zh_CN.md index 45ae5e1496..e61fc9d38e 100644 --- a/docs/usage/install/underlay/get-started-kind-zh_CN.md +++ b/docs/usage/install/underlay/get-started-kind-zh_CN.md @@ -22,6 +22,21 @@ Kind 是一个使用 Docker 容器节点运行本地 Kubernetes 集群的工具 * 执行 `make dev-doctor`,检查本地主机上的开发工具是否满足部署 Kind 集群与 Spiderpool 的条件,如果缺少组件会为您自动安装。 +* 如果您使用如 Fedora、Centos 等 OS, 并且使用 NetworkManager 管理和配置网络,在以下场景时建议您需要配置 NetworkManager: + + 1. 如果你使用 Underlay 模式,`coordinator` 会在主机上创建 veth 接口,为了防止 NetworkManager 干扰 veth 接口, 导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + 2. 如果你通过 `Iface`r 创建 Vlan 和 Bond 接口,NetworkManager 可能会干扰这些接口,导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + ## Spiderpool 脚本支持的多种安装模式 如果您在中国大陆,安装时可以额外指定参数 `-e E2E_CHINA_IMAGE_REGISTRY=true` ,以帮助您更快的拉取镜像。 diff --git a/docs/usage/install/underlay/get-started-kind.md b/docs/usage/install/underlay/get-started-kind.md index 9cd62f7565..afd1abfcd2 100644 --- a/docs/usage/install/underlay/get-started-kind.md +++ b/docs/usage/install/underlay/get-started-kind.md @@ -22,6 +22,21 @@ Kind is a tool for running local Kubernetes clusters using Docker container "nod * Execute `make dev-doctor` to check that the development tools on the local host meet the conditions for deploying a Kind cluster with Spiderpool, and that the components are automatically installed for you if they are missing. +* If your OS is such as Fedora and CentOS and uses NetworkManager to manage network configurations, you need to configure NetworkManager in the following scenarios: + + 1. If you are using Underlay mode, the `coordinator` will create veth interfaces on the host. To prevent interference from NetworkManager with the veth interface. It is strongly recommended that you configure NetworkManager. + + 2. If you create VLAN and Bond interfaces through Ifacer, NetworkManager may interfere with these interfaces, leading to abnormal pod access. It is strongly recommended that you configure NetworkManager. + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + ## Various installation modes supported by Spiderpool script If you are mainland user who is not available to access ghcr.io, Additional parameter `-e E2E_CHINA_IMAGE_REGISTRY=true` can be specified during installation to help you pull images faster. diff --git a/docs/usage/install/underlay/get-started-macvlan-zh_CN.md b/docs/usage/install/underlay/get-started-macvlan-zh_CN.md index e0c475963d..176348e052 100644 --- a/docs/usage/install/underlay/get-started-macvlan-zh_CN.md +++ b/docs/usage/install/underlay/get-started-macvlan-zh_CN.md @@ -16,6 +16,22 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方 2. 已安装 [Helm](https://helm.sh/docs/intro/install/) +3. 如果您使用如 Fedora、Centos 等 OS, 并且使用 NetworkManager 管理和配置网络,在以下场景时建议您需要配置 NetworkManager: + + * 如果你使用 Underlay 模式,`coordinator` 会在主机上创建 veth 接口,为了防止 NetworkManager 干扰 veth 接口, 导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + * 如果你通过 `Iface`r 创建 Vlan 和 Bond 接口,NetworkManager 可能会干扰这些接口,导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + + ## 安装 Spiderpool 1. 安装 Spiderpool。 diff --git a/docs/usage/install/underlay/get-started-macvlan.md b/docs/usage/install/underlay/get-started-macvlan.md index 3a92f53e15..0eab5d353a 100644 --- a/docs/usage/install/underlay/get-started-macvlan.md +++ b/docs/usage/install/underlay/get-started-macvlan.md @@ -16,6 +16,21 @@ Spiderpool provides a solution for assigning static IP addresses in underlay net 2. [Helm](https://helm.sh/docs/intro/install/) has been already installed. +3. If your OS is such as Fedora and CentOS and uses NetworkManager to manage network configurations, you need to configure NetworkManager in the following scenarios: + + * If you are using Underlay mode, the `coordinator` will create veth interfaces on the host. To prevent interference from NetworkManager with the veth interface. It is strongly recommended that you configure NetworkManager. + + * If you create VLAN and Bond interfaces through Ifacer, NetworkManager may interfere with these interfaces, leading to abnormal pod access. It is strongly recommended that you configure NetworkManager. + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + ## Install Spiderpool 1. Install Spiderpool. diff --git a/docs/usage/install/underlay/get-started-ovs-zh_CN.md b/docs/usage/install/underlay/get-started-ovs-zh_CN.md index bac6f522e0..a7b29f2ac3 100644 --- a/docs/usage/install/underlay/get-started-ovs-zh_CN.md +++ b/docs/usage/install/underlay/get-started-ovs-zh_CN.md @@ -21,6 +21,22 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方 ~# sudo systemctl start openvswitch-switch ``` +4. 如果您使用如 Fedora、Centos 等 OS, 并且使用 NetworkManager 管理和配置网络,在以下场景时建议您需要配置 NetworkManager: + + * 如果你使用 Underlay 模式,`coordinator` 会在主机上创建 veth 接口,为了防止 NetworkManager 干扰 veth 接口, 导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + * 如果你通过 `Iface`r 创建 Vlan 和 Bond 接口,NetworkManager 可能会干扰这些接口,导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + + ## 安装 Spiderpool 1. 安装 Spiderpool。 diff --git a/docs/usage/install/underlay/get-started-ovs.md b/docs/usage/install/underlay/get-started-ovs.md index 49f7815834..eb6ccb4368 100644 --- a/docs/usage/install/underlay/get-started-ovs.md +++ b/docs/usage/install/underlay/get-started-ovs.md @@ -21,6 +21,21 @@ Spiderpool can be used as a solution to provide fixed IPs in an Underlay network ~# sudo systemctl start openvswitch-switch ``` +4. If your OS is such as Fedora and CentOS and uses NetworkManager to manage network configurations, you need to configure NetworkManager in the following scenarios: + + * If you are using Underlay mode, the `coordinator` will create veth interfaces on the host. To prevent interference from NetworkManager with the veth interface. It is strongly recommended that you configure NetworkManager. + + * If you create VLAN and Bond interfaces through Ifacer, NetworkManager may interfere with these interfaces, leading to abnormal pod access. It is strongly recommended that you configure NetworkManager. + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + ## Install Spiderpool 1. Install Spiderpool. diff --git a/docs/usage/install/underlay/get-started-sriov-zh_CN.md b/docs/usage/install/underlay/get-started-sriov-zh_CN.md index 248d45bdc1..db9a6a5748 100644 --- a/docs/usage/install/underlay/get-started-sriov-zh_CN.md +++ b/docs/usage/install/underlay/get-started-sriov-zh_CN.md @@ -30,6 +30,22 @@ Spiderpool 可用作 underlay 网络场景下提供固定 IP 的一种解决方 Capabilities: [180] Single Root I/O Virtualization (SR-IOV) ``` +4. 如果您使用如 Fedora、Centos 等 OS, 并且使用 NetworkManager 管理和配置网络,在以下场景时建议您需要配置 NetworkManager: + + * 如果你使用 Underlay 模式,`coordinator` 会在主机上创建 veth 接口,为了防止 NetworkManager 干扰 veth 接口, 导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + * 如果你通过 `Ifacer` 创建 Vlan 和 Bond 接口,NetworkManager 可能会干扰这些接口,导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。 + + ```shell + ~# IFACER_INTERFACE="" + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + + ## 安装 Spiderpool 1. 安装 Spiderpool。 @@ -185,6 +201,16 @@ Spiderpool 可用作 underlay 网络场景下提供固定 IP 的一种解决方 5. 创建 SpiderMultusConfig 实例。 + 注意: 如果您的操作系统是使用 NetworkManager 的 OS,比如 Fedora Centos等,强烈建议配置 NetworkManager 的配置文件(/etc/NetworkManager/conf.d/spidernet.conf),避免 NetworkManager 干扰 `coordinator` 创建的 Veth 虚拟接口,影响通信: + + ```shell + ~# cat << EOF | > /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth* + > EOF + ~# systemctl restart NetworkManager + ``` + ```shell $ cat < /etc/NetworkManager/conf.d/spidernet.conf + > [keyfile] + > unmanaged-devices=interface-name:^veth*;interface-name:${IFACER_INTERFACE} + > EOF + ~# systemctl restart NetworkManager + ``` + ## Install Spiderpool 1. Install Spiderpool. From 046bd9793382072ef9759ec481554cc91ea01e11 Mon Sep 17 00:00:00 2001 From: weizhoublue <45163302+weizhoublue@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:41:17 +0800 Subject: [PATCH 07/88] Merge pull request #2667 from Icarus9913/fix/wk/charts fix path typo in spiderpool-agent yaml --- charts/spiderpool/templates/daemonset.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/spiderpool/templates/daemonset.yaml b/charts/spiderpool/templates/daemonset.yaml index c329200ae9..e05954c061 100644 --- a/charts/spiderpool/templates/daemonset.yaml +++ b/charts/spiderpool/templates/daemonset.yaml @@ -246,7 +246,7 @@ spec: mountPath: /tmp/spiderpool/config-map readOnly: true - name: cni-bin-path - mountPath: /host/{{ .Values.global.cniBinHostPath }} + mountPath: /host{{ .Values.global.cniBinHostPath }} - name: ipam-unix-socket-dir mountPath: {{ dir .Values.global.ipamUNIXSocketHostPath }} {{- if .Values.spiderpoolAgent.extraVolumes }} From 6d7c3c44b634d9719a907ed89d4d2acb1d680648 Mon Sep 17 00:00:00 2001 From: Icarus9913 Date: Thu, 30 Nov 2023 10:05:06 +0800 Subject: [PATCH 08/88] update to v0.8.1 Signed-off-by: Icarus9913 --- VERSION | 2 +- charts/spiderpool/Chart.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 4ea5cafac8..349ca0e14b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.8.0 \ No newline at end of file +v0.8.1 \ No newline at end of file diff --git a/charts/spiderpool/Chart.yaml b/charts/spiderpool/Chart.yaml index f908504dd4..4de43d2d67 100644 --- a/charts/spiderpool/Chart.yaml +++ b/charts/spiderpool/Chart.yaml @@ -5,11 +5,11 @@ icon: https://raw.githubusercontent.com/spidernet-io/spiderpool/main/docs/images # application or library type: application # no need to modify this version , CI will auto update it with /VERSION -version: 0.8.0 +version: 0.8.1 # This field is informational, and has no impact on chart version calculations . # Leaving it unquoted can lead to parsing issues in some cases # no need to modify this version , CI will auto update it with /VERSION -appVersion: "0.8.0" +appVersion: "0.8.1" kubeVersion: ">= 1.16.0-0" description: underlay CNI solution for kubernetes sources: From 0e1ffd72f7f292f90991992dba7b6b12e961f6a5 Mon Sep 17 00:00:00 2001 From: "tao.yang" Date: Sat, 2 Dec 2023 13:21:43 +0800 Subject: [PATCH 09/88] Updated docs for spiderpool v0.8 Signed-off-by: tao.yang --- README-zh_CN.md | 36 +-- README.md | 35 +-- docs/README-zh_CN.md | 34 +-- docs/README.md | 35 +-- docs/concepts/coordinator-zh_CN.md | 2 +- docs/concepts/coordinator.md | 2 +- docs/concepts/io-performance-zh_CN.md | 4 + docs/concepts/io-performance.md | 4 + .../{ipam-zh_CN.md => ipam-des-zh_CN.md} | 2 +- docs/concepts/{ipam.md => ipam-des.md} | 2 +- docs/concepts/ipam-performance-zh_CN.md | 2 + docs/concepts/ipam-performance.md | 2 + docs/develop/roadmap.md | 19 +- docs/images/arch.png | Bin 40608 -> 813557 bytes docs/images/ipam-performance.png | Bin 0 -> 164155 bytes docs/images/performance-redis.png | Bin 0 -> 156864 bytes docs/images/performance-sockperf.png | Bin 0 -> 156894 bytes docs/mkdocs.yml | 8 +- docs/reference/crd-spidermultusconfig.md | 2 + docs/usage/cilium-chaining-zh_CN.md | 190 +++++++++++++ docs/usage/cilium-chaining.md | 187 +++++++++++++ docs/usage/debug.md | 3 - docs/usage/egress-zh_CN.md | 261 ++++++++++++++++++ docs/usage/egress.md | 261 ++++++++++++++++++ docs/usage/faq-zh_CN.md | 24 ++ docs/usage/faq.md | 24 ++ .../cloud/get-started-alibaba-zh_CN.md | 8 - .../install/cloud/get-started-alibaba.md | 8 - .../underlay/get-started-kind-zh_CN.md | 31 +-- .../install/underlay/get-started-kind.md | 31 +-- .../underlay/get-started-macvlan-zh_CN.md | 3 +- .../install/underlay/get-started-macvlan.md | 7 +- .../install/underlay/get-started-ovs-zh_CN.md | 3 +- .../usage/install/underlay/get-started-ovs.md | 5 +- .../underlay/get-started-sriov-zh_CN.md | 1 - docs/usage/kubevirt-zh_CN.md | 91 +++++- docs/usage/kubevirt.md | 89 +++++- docs/usage/network-topology-zh_CN.md | 4 - docs/usage/network-topology.md | 4 - docs/usage/readme-zh_CN.md | 2 +- docs/usage/readme.md | 2 +- docs/usage/spider-affinity-zh_CN.md | 2 +- docs/usage/spider-ippool-zh_CN.md | 19 +- docs/usage/spider-ippool.md | 18 +- docs/usage/spider-multus-config-zh_CN.md | 145 +++++++++- docs/usage/spider-multus-config.md | 155 ++++++++++- docs/usage/spider-subnet-zh_CN.md | 2 + docs/usage/spider-subnet.md | 2 + docs/usage/underlay_cni_service-zh_CN.md | 17 +- docs/usage/underlay_cni_service.md | 47 ++-- 50 files changed, 1627 insertions(+), 208 deletions(-) rename docs/concepts/{ipam-zh_CN.md => ipam-des-zh_CN.md} (99%) rename docs/concepts/{ipam.md => ipam-des.md} (99%) create mode 100644 docs/images/ipam-performance.png create mode 100644 docs/images/performance-redis.png create mode 100644 docs/images/performance-sockperf.png create mode 100644 docs/usage/cilium-chaining-zh_CN.md create mode 100644 docs/usage/cilium-chaining.md delete mode 100644 docs/usage/debug.md create mode 100644 docs/usage/faq-zh_CN.md create mode 100644 docs/usage/faq.md diff --git a/README-zh_CN.md b/README-zh_CN.md index 31749beacd..a6f794a515 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -13,18 +13,18 @@ [**English**](./README.md) | **简体中文** -Spiderpool 是 [CNCF Landscape 项目](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category) 。 - -![CNCF](./docs/images/cncf-cloud-gophers-transparent.png) +**作为一个 [CNCF Landscape 项目](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category),Spiderpool 提供了一个 Kubernetes 的 underlay 和 RDMA 网络解决方案, 它能运行在裸金属、虚拟机和公有云上** ## Spiderpool 介绍 Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [Macvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/macvlan), [ipvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/ipvlan), -[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni) 的功能,满足了各种网络需求,使得 underlay 网络方案可应用在**裸金属、虚拟机和公有云环境**中,可为网络 I/O 密集性、低延时应用带来优秀的网络性能,包括存储、中间件、AI 等应用。 +[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni) 的功能,满足了各种网络需求,使得 underlay 网络方案可应用在**裸金属、虚拟机和公有云环境**中,可为网络 I/O 密集性、低延时应用带来优秀的网络性能,包括**存储、中间件、AI 等应用**。详细的文档可参考[文档站](https://spidernet-io.github.io/spiderpool/) **为什么 Spiderpool 选择 macvlan、ipvlan、SR-IOV 为 datapath ?** +* macvlan、ipvlan、SR-IOV 是承载 RDMA 网络加速的重要技术,RDMA 能为 AI 应用、延时敏感型应用、网络 I/O 密集型应用带来极大的性能提升,其网络性能大幅超过 overlay 网络解决方案。 + * 区别于基于 veth 虚拟网卡的 CNI 解决方案,underlay 网络数据包避免了宿主机的三层网络转发,没有隧道封装开销,因此,它们能为应用提供了优秀的网络性能,包括优秀的网络吞吐量、低延时,节省了 CPU 的网络转发开销。 * 可直接对接 underlay 二层 VLAN 网络,应用可进行二层、三层网络通信,可进行组播、多播通信,数据包可受防火墙管控。 @@ -33,8 +33,6 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ * underlay CNI 可基于宿主机不同的父网卡来创建虚拟机接口,因此可为存储、观测性等网络开销大的应用提供隔离的子网。 -* macvlan、ipvlan、SR-IOV 是承载 RDMA 网络加速的重要技术,RDMA 能为延时敏感型应用、网络 I/O 密集型应用带来极大的性能提升,其网络性能大幅超过 overlay 网络解决方案。 -
Your Image Description
@@ -47,12 +45,12 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ * 基于 CRD 的双栈 IPAM 能力 - 提供了独享、共享的 IP 地址池,支持设置各种亲和性,为中间件等有状态应用和 kubevirt 等固定 IP 地址值,为无状态应用固定 IP 地址范围,自动化管理独享的 IP 池,优秀的 IP 回收避免 IP 泄露等。 + 提供了独享、共享的 IP 地址池,支持设置各种亲和性,为中间件等有状态应用和 kubevirt 等固定 IP 地址值,为无状态应用固定 IP 地址范围,自动化管理独享的 IP 池,优秀的 IP 回收避免 IP 泄露等。并且,具备优秀的 [IPAM 分配性能](./docs/concepts/ipam-performance-zh_CN.md) 。 * Pod 接入多网卡 它包括了 “Pod 插入多个 underlay CNI 网卡”、“Pod 插入一个 overlay CNI 和 多个 underlay CNI 网卡”两种场景,Pod 具备多种 CNI 网卡,Spiderpool 能够为多个 - underlay CNI 网卡定制不同的 IP 地址,调协所有网卡之间的策略路由,以确保请求向和回复向数据路径一致而避免丢包。 + underlay CNI 网卡定制不同的 IP 地址,调协所有网卡之间的策略路由,以确保请求向和回复向数据路径一致而避免丢包,它能够为 [cilium](https://github.com/cilium/cilium), [calico](https://github.com/projectcalico/calico), [kubevirt](https://github.com/kubevirt/kubevirt) 等项目进行增强。 * 增强网络连通性 @@ -60,9 +58,9 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ * eBPF 增强 - kube-proxy replacement 技术极大加速了访问 service 场景,同节点上的 socket 短路技术加速了本地 Pod 的通信效率。 + kube-proxy replacement 技术极大加速了访问 service 场景,同节点上的 socket 短路技术加速了本地 Pod 的通信效率。相比 kube proxy 解析方式,[网络延时有最大 25% 的改善,网络吞吐有 50% 的提高]((./docs/concepts/io-performance-zh_CN.md))。 -* RDMA +* RDMA 提供了基于 RoCE、infiniband 技术下的 RDMA 解决方案。 @@ -70,6 +68,10 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ Spiderpool 组件和其提供的所有功能,支持 ipv4-only、ipv6-only、dual-stack 场景。 +* 优秀的网络延时和吞吐量性能 + + Spiderpool 在网络延时和吞吐量方面表现出色,超过了 overlay CNI,可参考 [性能报告](./docs/concepts/io-performance-zh_CN.md) + * 指标 **Spiderpool 可应用在哪些场景?** @@ -84,6 +86,10 @@ Spiderpool 基于 underlay CNI 提供了比 overlay CNI 还优越的网络性能 * 网络延时敏感型应用 +## 快速开始 + +可参考 [快速搭建](./docs/usage/install/underlay/get-started-kind.md) 来使用 Spiderpool + ## Spiderpool 架构 Spiderpool 拥有清晰的架构设计,包括了如下应用场景: @@ -101,11 +107,11 @@ Spiderpool 拥有清晰的架构设计,包括了如下应用场景: ## 核心功能 | 功能 | macvlan | ipvlan | SR-IOV | -|----------------------------------|----------|----|-----------| +|----------------------------------|----------|---|-----------| | service by kubeproxy | Beta | Beta | Beta | | service by kubeproxy replacement | Alpha | Alpha | Alpha | -| network policy | In-plan | In-plan | In-plan | -| bandwidth | In-plan | In-plan | In-plan | +| network policy | In-plan | Alpha | In-plan | +| bandwidth | In-plan | Alpha | In-plan | | RDMA | Alpha | Alpha | Alpha | | IPAM | Beta | Beta | Beta | | egress policy | Alpha | Alpha | Alpha | @@ -114,10 +120,6 @@ Spiderpool 拥有清晰的架构设计,包括了如下应用场景: 关于所有的功能规划,具体可参考 [roadmap](./docs/develop/roadmap.md) -## 快速开始 - -可参考 [快速搭建](./docs/usage/readme-zh_CN.md) 来使用 Spiderpool - ## Blogs 可参考 [Blogs](./docs/concepts/blog-zh_CN.md) diff --git a/README.md b/README.md index 19e64dfd58..10b5d6a0a7 100644 --- a/README.md +++ b/README.md @@ -16,18 +16,19 @@ **English** | [**简体中文**](./README-zh_CN.md) -Spiderpool is a [CNCF Landscape Level Project](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category). - -![CNCF](./docs/images/cncf-cloud-gophers-transparent.png) +**As a [CNCF Landscape Level Project](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category), Spiderpool is the underlay and RDMA network solution of the Kubernetes, for bare metal, VM and any public cloud** ## Introduction Spiderpool is a Kubernetes underlay network solution that enhances the capabilities of [Macvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/macvlan), [ipvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/ipvlan), -[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni).It fulfills various networking needs and enables the utilization of underlay network solutions in **bare metal, virtual machine, and public cloud environments**. Spiderpool delivers exceptional network performance, particularly benefiting network I/O-intensive and low-latency applications like storage, middleware, and AI. +[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni).It fulfills various networking needs and enables the utilization of underlay network solutions in **bare metal, virtual machine, and public cloud environments**. Spiderpool delivers exceptional network performance, particularly benefiting network I/O-intensive and low-latency applications like **storage, middleware, and AI**. +It could refer to [website](https://spidernet-io.github.io/spiderpool/) for more details. **Why does Spiderpool select macvlan, ipvlan, and SR-IOV as datapaths?** +* macvlan, ipvlan, and SR-IOV is crucial for supporting RDMA network acceleration. RDMA significantly enhances performance for AI applicaitons, latency-sensitive and network I/O-intensive applications, surpassing overlay network solutions in terms of network performance. + * Unlike CNI solutions based on veth virtual interfaces, underlay networks eliminate layer 3 network forwarding on the host, avoiding tunnel encapsulation overhead. This translates to excellent network performance with high throughput, low latency, and reduced CPU utilization for network forwarding. * Connecting seamlessly with underlay layer 2 VLAN networks enables both layer 2 and layer 3 communication for applications. It supports multicast and broadcast communication, while allowing packets to be controlled by firewalls. @@ -36,8 +37,6 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit * Underlay CNI can create virtual interfaces using different parent network interfaces on the host, providing isolated subnets for applications with high network overhead, such as storage and observability. -* macvlan, ipvlan, and SR-IOV is crucial for supporting RDMA network acceleration. RDMA significantly enhances performance for latency-sensitive and network I/O-intensive applications, surpassing overlay network solutions in terms of network performance. -
Your Image Description
@@ -50,11 +49,11 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit * CRD-based dual-stack IPAM capability - Spiderpool provides exclusive and shared IP address pools, supporting various affinity settings. It allows configuring specific IP addresses for stateful applications like middleware and kubevirt, while enabling fixed IP address ranges for stateless ones. Spiderpool automates the management of exclusive IP pools, ensuring excellent IP reclamation to avoid IP leakage. + Spiderpool provides exclusive and shared IP address pools, supporting various affinity settings. It allows configuring specific IP addresses for stateful applications like middleware and kubevirt, while enabling fixed IP address ranges for stateless ones. Spiderpool automates the management of exclusive IP pools, ensuring excellent IP reclamation to avoid IP leakage. In additions, it owns [wonderful IPAM performance](./docs/concepts/ipam-performance.md) . * Multiple network interface access for Pods - Spiderpool enables scenarios where Pods can have multiple underlay CNI interfaces or a combination of overlay and underlay CNI interfaces. It ensures proper IP addressing for each CNI interface and effectively manages policy routing to maintain consistent data paths, eliminating packet loss concerns. + Spiderpool enables scenarios where Pods can have multiple underlay CNI interfaces or a combination of overlay and underlay CNI interfaces. It ensures proper IP addressing for each CNI interface and effectively manages policy routing to maintain consistent data paths, eliminating packet loss concerns. It could strengthen [cilium](https://github.com/cilium/cilium), [calico](https://github.com/projectcalico/calico), [kubevirt](https://github.com/kubevirt/kubevirt) . * Enhanced network connectivity @@ -62,7 +61,7 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit * eBPF enhancements - The eBPF-based kube-proxy replacement significantly accelerates service access, while socket short-circuiting technology improves local Pod communication efficiency within the same node. + The eBPF-based kube-proxy replacement significantly accelerates service access, while socket short-circuiting technology improves local Pod communication efficiency within the same node. Compared with kube-proxy manner, [the improvement of the performance is Up to 25% on network delay, up to 50% on network throughput]((./docs/concepts/io-performance.md)). * RDMA support @@ -72,6 +71,10 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit Spiderpool supports IPv4-only, IPv6-only, and dual-stack environments. +* Good network performance of latency and throughput + + Spiderpool performs better than overlay CNI on network latency and throughput, referring to [performance report](./docs/concepts/io-performance.md) + * Metrics **Which scenarios can Spiderpool be applied in?** @@ -86,6 +89,10 @@ Spiderpool, powered by underlay CNI, offers unparalleled network performance com * Latency-sensitive application. +## Quick start + +Refer to [Quick start](./docs/usage/install/underlay/get-started-kind.md) to explore Spiderpool quickly. + ## Spiderpool Architecture Spiderpool features a well-designed and comprehensive architecture that caters to various application scenarios, including: @@ -103,11 +110,11 @@ For more detailed information, please refer to [Spiderpool Architecture](./docs/ ## Major Features | Features | macvlan | ipvlan | SR-IOV | -|----------------------------------|------------|----|-------------| +|----------------------------------|------------|--|-------------| | Service by kubeproxy | Beta | Beta | Beta | | Service by kubeproxy replacement | Alpha | Alpha | Alpha | -| Network policy | In-plan | In-plan | In-plan | -| Bandwidth | In-plan | In-plan | In-plan | +| Network policy | In-plan | Alpha | In-plan | +| Bandwidth | In-plan | Alpha | In-plan | | RDMA | Alpha | Alpha | Alpha | | IPAM | Beta | Beta | Beta | | Egress policy | Alpha | Alpha | Alpha | @@ -116,10 +123,6 @@ For more detailed information, please refer to [Spiderpool Architecture](./docs/ For detailed information about all the planned features, please refer to the [roadmap](./docs/develop/roadmap.md). -## Quick start - -Refer to [Quick start](./docs/usage/readme.md) to explore Spiderpool quickly. - ## Blogs Refer to [Blogs](./docs/concepts/blog.md) diff --git a/docs/README-zh_CN.md b/docs/README-zh_CN.md index 6076e78a4c..9e89c9dc96 100644 --- a/docs/README-zh_CN.md +++ b/docs/README-zh_CN.md @@ -13,18 +13,18 @@ [**English**](./README.md) | **简体中文** -Spiderpool 是 [CNCF Landscape 项目](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category) 。 - -![CNCF](./images/cncf-cloud-gophers-transparent.png) +**作为一个 [CNCF Landscape 项目](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category),Spiderpool 提供了一个 Kubernetes 的 underlay 和 RDMA 网络解决方案, 它能运行在裸金属、虚拟机和公有云上** ## Spiderpool 介绍 Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [Macvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/macvlan), [ipvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/ipvlan), -[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni) 的功能,满足了各种网络需求,使得 underlay 网络方案可应用在**裸金属、虚拟机和公有云环境**中,可为网络 I/O 密集性、低延时应用带来优秀的网络性能,包括存储、中间件、AI 等应用。 +[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni) 的功能,满足了各种网络需求,使得 underlay 网络方案可应用在**裸金属、虚拟机和公有云环境**中,可为网络 I/O 密集性、低延时应用带来优秀的网络性能,包括**存储、中间件、AI 等应用**。详细的文档可参考[文档站](https://spidernet-io.github.io/spiderpool/) **为什么 Spiderpool 选择 macvlan、ipvlan、SR-IOV 为 datapath ?** +* macvlan、ipvlan、SR-IOV 是承载 RDMA 网络加速的重要技术,RDMA 能为 AI 应用、延时敏感型应用、网络 I/O 密集型应用带来极大的性能提升,其网络性能大幅超过 overlay 网络解决方案。 + * 区别于基于 veth 虚拟网卡的 CNI 解决方案,underlay 网络数据包避免了宿主机的三层网络转发,没有隧道封装开销,因此,它们能为应用提供了优秀的网络性能,包括优秀的网络吞吐量、低延时,节省了 CPU 的网络转发开销。 * 可直接对接 underlay 二层 VLAN 网络,应用可进行二层、三层网络通信,可进行组播、多播通信,数据包可受防火墙管控。 @@ -33,8 +33,6 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ * underlay CNI 可基于宿主机不同的父网卡来创建虚拟机接口,因此可为存储、观测性等网络开销大的应用提供隔离的子网。 -* macvlan、ipvlan、SR-IOV 是承载 RDMA 网络加速的重要技术,RDMA 能为延时敏感型应用、网络 I/O 密集型应用带来极大的性能提升,其网络性能大幅超过 overlay 网络解决方案。 -
Your Image Description
@@ -47,12 +45,12 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ * 基于 CRD 的双栈 IPAM 能力 - 提供了独享、共享的 IP 地址池,支持设置各种亲和性,为中间件等有状态应用和 kubevirt 等固定 IP 地址值,为无状态应用固定 IP 地址范围,自动化管理独享的 IP 池,优秀的 IP 回收避免 IP 泄露等。 + 提供了独享、共享的 IP 地址池,支持设置各种亲和性,为中间件等有状态应用和 kubevirt 等固定 IP 地址值,为无状态应用固定 IP 地址范围,自动化管理独享的 IP 池,优秀的 IP 回收避免 IP 泄露等。并且,具备优秀的 [IPAM 分配性能](./concepts/ipam-performance-zh_CN.md)。 * Pod 接入多网卡 它包括了 “Pod 插入多个 underlay CNI 网卡”、“Pod 插入一个 overlay CNI 和 多个 underlay CNI 网卡”两种场景,Pod 具备多种 CNI 网卡,Spiderpool 能够为多个 - underlay CNI 网卡定制不同的 IP 地址,调协所有网卡之间的策略路由,以确保请求向和回复向数据路径一致而避免丢包。 + underlay CNI 网卡定制不同的 IP 地址,调协所有网卡之间的策略路由,以确保请求向和回复向数据路径一致而避免丢包。它能够为 [cilium](https://github.com/cilium/cilium), [calico](https://github.com/projectcalico/calico), [kubevirt](https://github.com/kubevirt/kubevirt) 等项目进行增强。 * 增强网络连通性 @@ -60,7 +58,7 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ * eBPF 增强 - kube-proxy replacement 技术极大加速了访问 service 场景,同节点上的 socket 短路技术加速了本地 Pod 的通信效率。 + kube-proxy replacement 技术极大加速了访问 service 场景,同节点上的 socket 短路技术加速了本地 Pod 的通信效率。相比 kube proxy 解析方式,[网络延时有最大 25% 的改善,网络吞吐有 50% 的提高](./concepts/io-performance-zh_CN.md)。 * RDMA @@ -70,6 +68,10 @@ Spiderpool 是一个 kubernetes 的 underlay 网络解决方案,它增强了 [ Spiderpool 组件和其提供的所有功能,支持 ipv4-only、ipv6-only、dual-stack 场景。 +* 优秀的网络延时和吞吐量性能 + + Spiderpool 在网络延时和吞吐量方面表现出色,超过了 overlay CNI,可参考 [性能报告](./concepts/io-performance-zh_CN.md) + * 指标 **Spiderpool 可应用在哪些场景?** @@ -84,6 +86,10 @@ Spiderpool 基于 underlay CNI 提供了比 overlay CNI 还优越的网络性能 * 网络延时敏感型应用 +## 快速开始 + +可参考 [快速搭建](./usage/install/underlay/get-started-kind.md) 来使用 Spiderpool + ## Spiderpool 架构 Spiderpool 拥有清晰的架构设计,包括了如下应用场景: @@ -101,11 +107,11 @@ Spiderpool 拥有清晰的架构设计,包括了如下应用场景: ## 核心功能 | 功能 | macvlan | ipvlan | SR-IOV | -|----------------------------------|----------|----|-----------| +|----------------------------------|----------|---|-----------| | service by kubeproxy | Beta | Beta | Beta | | service by kubeproxy replacement | Alpha | Alpha | Alpha | -| network policy | In-plan | In-plan | In-plan | -| bandwidth | In-plan | In-plan | In-plan | +| network policy | In-plan | Alpha | In-plan | +| bandwidth | In-plan | Alpha | In-plan | | RDMA | Alpha | Alpha | Alpha | | IPAM | Beta | Beta | Beta | | egress policy | Alpha | Alpha | Alpha | @@ -114,10 +120,6 @@ Spiderpool 拥有清晰的架构设计,包括了如下应用场景: 关于所有的功能规划,具体可参考 [roadmap](./develop/roadmap.md) -## 快速开始 - -可参考 [快速搭建](./usage/readme-zh_CN.md) 来使用 Spiderpool - ## Blogs 可参考 [Blogs](./concepts/blog-zh_CN.md) diff --git a/docs/README.md b/docs/README.md index 534162cd70..e9b73b7f42 100644 --- a/docs/README.md +++ b/docs/README.md @@ -16,18 +16,19 @@ **English** | [**简体中文**](./README-zh_CN.md) -Spiderpool is a [CNCF Landscape Level Project](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category). - -![CNCF](./images/cncf-cloud-gophers-transparent.png) +**As a [CNCF Landscape Level Project](https://landscape.cncf.io/card-mode?category=cloud-native-network&grouping=category), Spiderpool is the underlay and RDMA network solution of the Kubernetes, for bare metal, VM and any public cloud** ## Introduction Spiderpool is a Kubernetes underlay network solution that enhances the capabilities of [Macvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/macvlan), [ipvlan CNI](https://github.com/containernetworking/plugins/tree/main/plugins/main/ipvlan), -[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni).It fulfills various networking needs and enables the utilization of underlay network solutions in **bare metal, virtual machine, and public cloud environments**. Spiderpool delivers exceptional network performance, particularly benefiting network I/O-intensive and low-latency applications like storage, middleware, and AI. +[SR-IOV CNI](https://github.com/k8snetworkplumbingwg/sriov-cni).It fulfills various networking needs and enables the utilization of underlay network solutions in **bare metal, virtual machine, and public cloud environments**. Spiderpool delivers exceptional network performance, particularly benefiting network I/O-intensive and low-latency applications like **storage, middleware, and AI**. +It could refer to [website](https://spidernet-io.github.io/spiderpool/) for more details. **Why does Spiderpool select macvlan, ipvlan, and SR-IOV as datapaths?** +* macvlan, ipvlan, and SR-IOV is crucial for supporting RDMA network acceleration. RDMA significantly enhances performance for AI applicaitons, latency-sensitive and network I/O-intensive applications, surpassing overlay network solutions in terms of network performance. + * Unlike CNI solutions based on veth virtual interfaces, underlay networks eliminate layer 3 network forwarding on the host, avoiding tunnel encapsulation overhead. This translates to excellent network performance with high throughput, low latency, and reduced CPU utilization for network forwarding. * Connecting seamlessly with underlay layer 2 VLAN networks enables both layer 2 and layer 3 communication for applications. It supports multicast and broadcast communication, while allowing packets to be controlled by firewalls. @@ -36,8 +37,6 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit * Underlay CNI can create virtual interfaces using different parent network interfaces on the host, providing isolated subnets for applications with high network overhead, such as storage and observability. -* macvlan, ipvlan, and SR-IOV is crucial for supporting RDMA network acceleration. RDMA significantly enhances performance for latency-sensitive and network I/O-intensive applications, surpassing overlay network solutions in terms of network performance. -
Your Image Description
@@ -50,11 +49,11 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit * CRD-based dual-stack IPAM capability - Spiderpool provides exclusive and shared IP address pools, supporting various affinity settings. It allows configuring specific IP addresses for stateful applications like middleware and kubevirt, while enabling fixed IP address ranges for stateless ones. Spiderpool automates the management of exclusive IP pools, ensuring excellent IP reclamation to avoid IP leakage. + Spiderpool provides exclusive and shared IP address pools, supporting various affinity settings. It allows configuring specific IP addresses for stateful applications like middleware and kubevirt, while enabling fixed IP address ranges for stateless ones. Spiderpool automates the management of exclusive IP pools, ensuring excellent IP reclamation to avoid IP leakage. In additions, it owns [wonderful IPAM performance](./concepts/ipam-performance.md). * Multiple network interface access for Pods - Spiderpool enables scenarios where Pods can have multiple underlay CNI interfaces or a combination of overlay and underlay CNI interfaces. It ensures proper IP addressing for each CNI interface and effectively manages policy routing to maintain consistent data paths, eliminating packet loss concerns. + Spiderpool enables scenarios where Pods can have multiple underlay CNI interfaces or a combination of overlay and underlay CNI interfaces. It ensures proper IP addressing for each CNI interface and effectively manages policy routing to maintain consistent data paths, eliminating packet loss concerns. It could strengthen [cilium](https://github.com/cilium/cilium), [calico](https://github.com/projectcalico/calico), [kubevirt](https://github.com/kubevirt/kubevirt) . * Enhanced network connectivity @@ -62,7 +61,7 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit * eBPF enhancements - The eBPF-based kube-proxy replacement significantly accelerates service access, while socket short-circuiting technology improves local Pod communication efficiency within the same node. + The eBPF-based kube-proxy replacement significantly accelerates service access, while socket short-circuiting technology improves local Pod communication efficiency within the same node. Compared with kube-proxy manner, [the improvement of the performance is Up to 25% on network delay, up to 50% on network throughput](./concepts/io-performance.md). * RDMA support @@ -72,6 +71,10 @@ Spiderpool is a Kubernetes underlay network solution that enhances the capabilit Spiderpool supports IPv4-only, IPv6-only, and dual-stack environments. +* Good network performance of latency and throughput + + Spiderpool performs better than overlay CNI on network latency and throughput, referring to [performance report](./concepts/io-performance.md) + * Metrics **Which scenarios can Spiderpool be applied in?** @@ -86,6 +89,10 @@ Spiderpool, powered by underlay CNI, offers unparalleled network performance com * Latency-sensitive application. +## Quick start + +Refer to [Quick start](./usage/install/underlay/get-started-kind.md) to explore Spiderpool quickly. + ## Spiderpool Architecture Spiderpool features a well-designed and comprehensive architecture that caters to various application scenarios, including: @@ -103,11 +110,11 @@ For more detailed information, please refer to [Spiderpool Architecture](./conce ## Major Features | Features | macvlan | ipvlan | SR-IOV | -|----------------------------------|------------|----|-------------| +|----------------------------------|------------|--|-------------| | Service by kubeproxy | Beta | Beta | Beta | | Service by kubeproxy replacement | Alpha | Alpha | Alpha | -| Network policy | In-plan | In-plan | In-plan | -| Bandwidth | In-plan | In-plan | In-plan | +| Network policy | In-plan | Alpha | In-plan | +| Bandwidth | In-plan | Alpha | In-plan | | RDMA | Alpha | Alpha | Alpha | | IPAM | Beta | Beta | Beta | | Egress policy | Alpha | Alpha | Alpha | @@ -116,10 +123,6 @@ For more detailed information, please refer to [Spiderpool Architecture](./conce For detailed information about all the planned features, please refer to the [roadmap](./develop/roadmap.md). -## Quick start - -Refer to [Quick start](./usage/readme.md) to explore Spiderpool quickly. - ## Blogs Refer to [Blogs](./concepts/blog.md) diff --git a/docs/concepts/coordinator-zh_CN.md b/docs/concepts/coordinator-zh_CN.md index a5120ab487..7e10b56b87 100644 --- a/docs/concepts/coordinator-zh_CN.md +++ b/docs/concepts/coordinator-zh_CN.md @@ -29,7 +29,7 @@ Spiderpool 内置一个叫 `coordinator` 的 CNI meta-plugin, 它在 Main CNI | type | CNI 的类型 | 字符串 | required |coordinator | | mode | coordinator 运行的模式. "auto": coordinator 自动判断运行在 Underlay 或者 Overlay; "underlay": 为 Pod 创建一对 Veth 设备,用于转发集群东西向流量。由 Pod 的 Underlay 网卡转发南北向流量; "overlay": 不额外创建 veth 设备,运行在多网卡模式。由 overlay 类型的 CNI(calico,cilium) 转发集群东西向流量,由 underlay 网卡转发南北向流量; "disable": 禁用 coordinator | 字符串 | optional | auto | | tunePodRoutes | Pod 多网卡模式下,是否调协 Pod 的路由,解决访问来回路径不一致的问题 | 布尔型 | optional | true | -| podDefaultRouteNic | 配置 Pod 的默认路由网卡 | 字符串 | optional | "" | +| podDefaultRouteNic | Pod 多网卡时,配置 Pod 的默认路由网卡。默认为 "", 其 value 实际为 Pod 第一张拥有默认路由的网卡| 字符串 | optional | "" | | podDefaultCniNic | K8s 中 Pod 默认的第一张网卡 | 布尔型 | optional | eth0 | | detectGateway | 创建 Pod 时是否检查网关是否可达 | 布尔型 | optional | false | | detectIPConflict | 创建 Pod 时是否检查 Pod 的 IP 是否可达 | 布尔型 | optional | false | diff --git a/docs/concepts/coordinator.md b/docs/concepts/coordinator.md index 6b20da5316..362f3206ff 100644 --- a/docs/concepts/coordinator.md +++ b/docs/concepts/coordinator.md @@ -30,7 +30,7 @@ Let's delve into how coordinator implements these features. | type | The name of this Spidercoordinators resource | string | required |coordinator | | mode | the mode in which the coordinator run. "auto": Automatically determine if it's overlay or underlay; "underlay": All NICs for pods are underlay NICs, and in this case the coordinator will create veth-pairs device to solve the problem of underlay pods accessing services; "overlay": The coordinator does not create veth-pair devices, but the first NIC of the pod cannot be an underlay NIC, which is created by overlay CNI (e.g. calico, cilium). Solve the problem of pod access to service through the first NIC; "disable": The coordinator does nothing and exits directly | string | optional | auto | | tunePodRoutes | Tune the pod's routing tables while a pod is in multi-NIC mode | bool | optional | true | -| podDefaultRouteNic | Configure the default routed NIC for the pod while a pod is in multi-NIC mode | string | optional | "" | +| podDefaultRouteNic | Configure the default routed NIC for the pod while a pod is in multi-NIC mode, The default value is 0, indicate that the first network interface of the pod has the default route. | string | optional | "" | | podDefaultCniNic | The name of the pod's first NIC defaults to eth0 in kubernetes | bool | optional | eth0 | | detectGateway | Enable gateway detection while creating pods, which prevent pod creation if the gateway is unreachable | bool | optional | false | | detectIPConflict | Enable IP conflicting checking for pods, which prevent pod creation if the pod's ip is conflicting | bool | optional | false | diff --git a/docs/concepts/io-performance-zh_CN.md b/docs/concepts/io-performance-zh_CN.md index 0cb03ec955..31928a0e9d 100644 --- a/docs/concepts/io-performance-zh_CN.md +++ b/docs/concepts/io-performance-zh_CN.md @@ -85,6 +85,8 @@ netperf 是一种广泛使用的网络性能测试工具,可让您测量网络 | 基于 macvlan 的同子网且全量 eBPF 加速的 Spiderpool Pod | 18992.9 rps | | 节点到节点 | 47560.5 rps | +![performance](../images/performance-sockperf.png) + ## iperf 网络性能测试 iperf 是一种流行的网络性能测试工具,可让您测量两个端点之间的网络带宽。它广泛用于评估网络连接的带宽和性能。在本章节中,我们通过它分别来测试 Pod 跨节点访问 Pod 和 Service。其中测试访问 Service 的 cluster IP 时,分为 `kube-proxy` 或者 `cilium + kube-proxy replacement` 两种场景。 @@ -139,6 +141,8 @@ redis-benchmark 旨在通过模拟多个客户端并执行各种 Redis 命令来 | 基于 macvlan 的同子网和 kube-proxy 的 Spiderpool Pod | 45578.85 rps | 46274.87 rps | | 基于 macvlan 的同子网且全量 eBPF 加速的 Spiderpool Pod | 63211.12 rps | 64061.50 rps | +![performance](../images/performance-redis.png) + ## 总结 Spiderpool 做为 Underlay 网络解决方案时,其 IO 性能在大部分场景下都领先于 Calico、Cilium。 diff --git a/docs/concepts/io-performance.md b/docs/concepts/io-performance.md index 7a1e0dfa80..f0d0a4c030 100644 --- a/docs/concepts/io-performance.md +++ b/docs/concepts/io-performance.md @@ -57,6 +57,8 @@ Sockperf is a network benchmarking tool that can be used to measure network late | Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated | 27.7 usec | | node to node | 32.2 usec | +![performance](../images/performance-sockperf.png) + ## netperf performance test netperf is a widely used network performance testing tool that allows you to measure various aspects of network performance, such as throughput. We can use netperf to test Pod's cross-node access to Pod and Service respectively. When testing access to Service's cluster IP, there are two scenarios: `kube-proxy` or `cilium + kube-proxy replacement`. @@ -139,6 +141,8 @@ redis-benchmark is designed to measure the performance and throughput of a Redis | Spiderpool Pod based on macvlan on the same subnet and kube-proxy | 45578.85 rps | 46274.87 rps | | Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated | 63211.12 rps | 64061.50 rps | +![performance](../images/performance-redis.png) + ## Summary When Spiderpool is used as an underlay network solution, its IO performance is ahead of Calico and Cilium in most scenarios. diff --git a/docs/concepts/ipam-zh_CN.md b/docs/concepts/ipam-des-zh_CN.md similarity index 99% rename from docs/concepts/ipam-zh_CN.md rename to docs/concepts/ipam-des-zh_CN.md index 9b3be281b4..7cf854d49a 100644 --- a/docs/concepts/ipam-zh_CN.md +++ b/docs/concepts/ipam-des-zh_CN.md @@ -1,6 +1,6 @@ # IPAM -**简体中文** | [**English**](./ipam.md) +**简体中文** | [**English**](./ipam-des.md) ## Underlay 网络和 Overlay 网络的 IPAM diff --git a/docs/concepts/ipam.md b/docs/concepts/ipam-des.md similarity index 99% rename from docs/concepts/ipam.md rename to docs/concepts/ipam-des.md index 85c0645426..23411fc456 100644 --- a/docs/concepts/ipam.md +++ b/docs/concepts/ipam-des.md @@ -1,6 +1,6 @@ # IPAM -**English** | [**简体中文**](./ipam-zh_CN.md) +**English** | [**简体中文**](./ipam-des-zh_CN.md) ## IPAM for Underlay and overlay network solutions diff --git a/docs/concepts/ipam-performance-zh_CN.md b/docs/concepts/ipam-performance-zh_CN.md index 9166323e22..809474d57b 100644 --- a/docs/concepts/ipam-performance-zh_CN.md +++ b/docs/concepts/ipam-performance-zh_CN.md @@ -70,6 +70,8 @@ ## 分析 +![performance](../images/ipam-performance.png) + Spiderpool 的 IPAM 分配原理,是整个集群节点的所有 Pod 都从同一个 CIDR 中分配 IP,所以 IP 分配和释放需要面临激烈的竞争,IP 分配性能的挑战会更大;Whereabouts 和 Calico 、Cilium的 IPAM 分配原理,是每个节点都有一个小的 IP 集合,所以 IP 分配的竞争比较小,IP 分配性能的挑战会小。但从上述实验数据上看,虽然 Spdierpool 的 IPAM 原理是 "吃亏" 的,但是分配 IP 的性能却是很好的。 在测试过程中,遇到如下现象: diff --git a/docs/concepts/ipam-performance.md b/docs/concepts/ipam-performance.md index 58a727131a..6f39973503 100644 --- a/docs/concepts/ipam-performance.md +++ b/docs/concepts/ipam-performance.md @@ -70,6 +70,8 @@ The following shows the results of the IPAM performance test, which includes two ## analyze +![performance](../images/ipam-performance.png) + Spiderpool allocate IP addresses from the same CIDR range to all Pods in the whole cluster. Consequently, IP allocation and release face intense competition, presenting larger challenges in terms of IP allocation performance. By comparison, Whereabouts, Calico, and Cilium adopt an IPAM allocation principle where each node has a small IP address pool. This reduces the competition for IP allocation and mitigates the associated performance challenges. However, experimental data shows that despite Spiderpool's "lossy" IPAM principle, its IP allocation performance is actually quite good. During testing, the following phenomenon was encountered: diff --git a/docs/develop/roadmap.md b/docs/develop/roadmap.md index cc0aa367d9..242de77ac2 100644 --- a/docs/develop/roadmap.md +++ b/docs/develop/roadmap.md @@ -31,20 +31,25 @@ | spidermultusconfig | support macvlan ipvlan sriov custom | v0.6.0 | v0.7.0 | | | | support ovs-cni | v0.7.0 | | | | ipam plugin | cni v1.0.0 | v0.4.0 | v0.5.0 | | -| ifacer plugin | bond interface | v0.6.0 | | | -| | vlan interface | v0.6.0 | | | +| ifacer plugin | bond interface | v0.6.0 | v0.8.0 | | +| | vlan interface | v0.6.0 | v0.8.0 | | | coordinator plugin | support underlay mode | v0.6.0 | v0.7.0 | | -| | support overlay mode | v0.6.0 | | | -| | CRD spidercoordinators for multus configuration | v0.6.0 | | | +| | support overlay mode | v0.6.0 | v0.8.0 | | +| | CRD spidercoordinators for multus configuration | v0.6.0 | v0.8.0 | | | | detect ip conflict and gateway | v0.6.0 | v0.6.0 | | -| | specify the MAC of pod | v0.6.0 | | | -| | tune the default route of pod multiple interfaces | v0.6.0 | | | +| | specify the MAC of pod | v0.6.0 | v0.8.0 | | +| | tune the default route of pod multiple interfaces | v0.6.0 | v0.8.0 | | | ovs/macvlan/sriov/ipvlan | visit service based on kube-proxy | v0.6.0 | v0.7.0 | | | | visit local node to guarantee the pod health check | v0.6.0 | v0.7.0 | | | | visit nodePort with spec.externalTrafficPolicy=local or spec.externalTrafficPolicy=cluster | v0.6.0 | | | | | bandwidth | In plan | | | | observability | eBPF: pod stats | In plan | | | -| network policy | eBPF | In plan | | | +| network policy | ipvlan | v0.8.0 | | | +| | macvlan | In plan | | | +| | sriov | In plan | | | +| bandwidth | ipvlan | v0.8.0 | | | +| | macvlan | In plan | | | +| | sriov | In plan | | | | accelerate | eBPF: visit service based on the kube-proxy replacement | In plan | | | | | eBPF: accelerate communication of pods on a same node | In plan | | | | recycle IP | recycle IP taken by deleted pod | v0.4.0 | v0.6.0 | | diff --git a/docs/images/arch.png b/docs/images/arch.png index a95ca8ac052269f00f123530bc13cb18b245570e..225ad956e949b3321d657954f27231b137bc1ef7 100644 GIT binary patch literal 813557 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 K>i1M}N= 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

#DFF>X^ z$SD3ctS`BON3Ptxd`sk*L&1<}FF=SRcQ04+B}>Qq7tM0Ew8-F2HiQTTKT2!NZq~?_ z);YuHAnim6!Vbw^oC|HcD%lU;LCWE&M~0p8a^F6`njgqlxOP1483kS{koj;3&PI3px?Q~< zP@XnBX!p`xG4Jhz0OIyMk6$>sx>aF>!fesw7j~rmlddo;>!fz*e(&;BG5{J!_wi37 z?$E?_zzX3QSmF(wLq0dq7H>e=;1q57(3AK~K_Vv6OLlh9AWxBI&U$vD0e5*LapTAC zm{$t|o>brjBkt{lH#iO_p+!tbp%sb-?|Un-#8wL7_9*6T{`D7!Am9E2REmJ_WxsRg z?4gAeVK9oEOy9re5mX#bu6bu?d%I`v59LjhY%+O>rJ-XNo~#m8D&|u66e*JwPChxr z*!GqCjZ&=zkzIrFLb5?;-NoC+EYUPNRql)g#&TgmA!0t=_L$IMgxsiAg6D|=Q~vz$ zI0a|_*4#16OcL+Noc;Zd!hPZSFn~8IOpK7Jml@_v4dp1-WB`TW>CqPx?cD38xWPT*J!{m131sWW;w{A>jejUf~O|o)O*mU1L6>yPFfgpbSW8J4}8` z7pJ{}*7nke(9TEO*uV0u*p>e9Fy!3foYKCbJNp1@(s_E36zjk}Ji&le+N!vJL4V)e zqk1n-tZ+#>4xs^EWLzj;cY;>TdOnYcN&P^5=x>0O6*TmwekgE07U9+QEx7VYYAG-! zir-SLP$#udkD^|l71>O>H-)159BOj^!>3{j_&y-Yeui(1{ z?hQT+ET5AOCNeNJ>No~kKaSokMS&9-b&$k7_8%N>d>*T2*InyVRL4gb(yxl1j2YF^ z%xFi;ev3=O_ihaBt#H30W__p02b>r)d*iXkc*%uz<+V|Gp^2#dqCOAh9afufpNqHO z!dP^vw1>I4vdC@M-h6(&=A&Pchx2#Gx36D9m@wZN$Aoh%%r^o`L*kyq3z}OFS8xK~ zvJ}truBG>l#>b{e>bW31P`};JM7PamPY0Nt*|2zMC=qkDy*EuR*|==GymMQ*VwG&i z5YZ7{ZC~axsTL&Kg2gltYSSC-JUK{qe5t1b=Jg=y&I5eLza`)fmQnz;T>UR+_N%=1 zz0QKsZrho6{@pp|UXo!fDfXrm$!_TcDhr`^H}NYXfti&oLykEn9|`KGo8QzK!1k_(S5(btj$`bepAPluu5cy#-L%cduXkZ7lhPiH<^cpGX=0 zsGP`Uu&#+^S?2^sJFIT9yp7LjKKv=bevbR|shj!-^D@69yq*}4 z?CnQI2iczw9^lHc)XyxS-X8amCv}Mj3p^u>tRRXjLdlTU!o|Old!L^~7WJWB03KHtE9Udvl;tPDF9g8su zM`s5-07i{E(z_2AZQcc2I%1mBWfoqBaw?yBM@+2Gw8Lu#^rr@7KUi| z-tx$v^@`zgWkl5tGHN3_S*BzArHNjC!@{^F<<_Z~@=hE2{;ukH!;T`GcNJg4bMrtJ z*8rjlSeYg}Bg40WHr-qqr6_ZvSK6&~QhnU?npQ4R=nbey9&Mj~WwB@UHA?DRqui6N z!Mj6C-3?wA%})hZU$7bqfFhFCZs1zf*$JSI7hPA%N6Kwv`W~QQxjK^19_UJZ=)5FV z|3G(e{R*qAz0|sq@*9xGwuIA%OpfhsH#?##E#23HS0;qd|Hu_y9L}i`KTj#q_BNkp z-JeqO8_ieuDbg%{ufD^QVBb#0NM5#48_iwcw*Mjtx5k?jLZRZ}7g;s9HmB=6UXcjb z?RknzY&aN8#_(su;@YM=6Nj46b-4MHAW9$+S8mfl5AU=1<)Z&3|er+by4FW7afLt|lk zq2{XWtslkrzL2~Mm+UcQv{<>MwS#hBTTU6NaMDCQ9}N>IvHt3%Q?t8hedo-c0OgNx zx$k#))B-d!$0GYG&pIGRs~zq?{v2qEu28b$yy&^>w_v@pvoTiUoI4PyxFXTF(Go9^ z1RZPZbB`_kS?@_N#b6^8V1nLZxxvF76{^_$1GTW1fOd1Tg1h%yyMx~`Q+h3DxWA!^ zF>FJ!GeS~qHZ|>tQ;)-&L!SJ^z=mUd{CWdfSz@D2UT9 z@y^j=!8jFocyq{S;dYbqg@6dW&{+alc@Sthmvlo&k5Wt@iJM)evffB|vGR(uF*||= z`*nmp`sY<_!L&!=ve4^yRyyurpeErQEyLIuGEaErE-qi5NySv@Jg+IMZc68`j%l-H zx3AtUvXqNuW1f-PaNaKigqfD%7uu~ncllD(GL|9b?#hy}D1=Q+_KKsxPd$(YdE`(D7J$)Om0eTZI_T{};PhI_d0 zR~U^H_1I+wy8bz?&_2^1a)*4R9k;?t-_M%`Mmy)BHE#%}N2_+j(zYQGj~Eq5>h2>f zrvA`47yLm)&AU73Z<7QSi5bzQ+VQ`xRp+^8eDB)TE-+Zp7%Fx2OV{JBlA*XiYpa~{ zxLD+CC}V(;=ijujN2rOwrlvlrMmI-`Fw0oaK5dqHODP9-)eq7S88r&xez3~-QS`mz zX4k!Ijz$>FH*wp})(<(M1p2Go=eTBR`lEFvck5{_HsZPsK0Bu+lrO5BG+F1ll1HJy z{?_$!c>Et6>Wx~hv|5k%h42)|oz&~fgB5m#TxVEvD>@O)?2=*0jAxru627K4dKN)J zDqx{stzu#JGZBQLuc^h%7M-~{+EuHv>T7`tf+de)g~F9G5hAzsBn5Sq>x`|fnUd*L zvd*9NpSO@0>Te}6{5g_Q;NH#BFs*7vH0Sw2w4WbRX^*Xm7sP8ldJ&Qu_WMd0& zB@W;?kv&gnZoJ%TERZ(I1PklDM9*zu4fVmt*Vt%ytjRG9 zkHtUxNvSFU;U>N2k!Qba&*y?%66nk!AZDd4jIt;ayy>|;(@k#FKPFOP?DMWcv6-Z= zC>zn)>mFH0to5UfSb6$Jx=4c{oOg&;aZEGPtPe0t*Va?3?TqCp%+aW#jd-#F9S_xL z7ESf5T$U>}PA398LhuXWP@AAE4SqQQSmwgDus{`~r3 z;ScFAl4Z7=&oUM@xtk&~dSAY~|6z(Sorr^(r^=2*cw!nl21Qz$vAue?m}k|0kv5)mm0IliIyOi@2VUJEfaGw%oUo@GeB(QL!%8Ojdr4pO98=_lDK^7b{VVCWS&p zzgyq62oU!Gujxc99FRXpsP#XyOyl=0_X&EQo=KQ5;0RwZ8>t&v)JFD4sDANdL9fW9|Y z>Z$yCO8R3NCAa?K4?m{{XrCd3yLP4k2URU{9dmmXlJmX%L_RUKR}c=VI= z3aeYj_k~-G{wV~ht)IJnrLi;o7IW*T-a+Rc$4Zm4x~}ed^yQdRw4eE8orr4^)b{}K z^Cr4A%%wMuRiEHX=9=ZD3>ASdvtNJ8F2)5PkM7>yXMDa~gsgY^qB$+MpT^uWO@8%p z!1`O_%@F$;p)U*iMsq2nprHLS8ybEtNPTCZr_!>-3B}zXFz!)aRHT_H*(%$U(#he! ze*akEws`R+c)h6^bxKF})hG3GzhTC2J+Bn*-3b>vA6C}uOOc}p6?HHjtgK3Rd$ANd zy3%mdM3k_>^co?ffX!-XTO3zU%5-}Buzff*9z9Gb;z-&=Na4PL$!kTl{9cW5 z`)h2@JQD%MI%`*YH43*9&zm&wAu>|Arn``4s7AXN!F9aoASx8^sqrc`y7md9mv!q$FwQD=a4g zumH5KBn$s35Kdsd(S5(*RP503QAuxL<}1NntRx*-kDaYZghz(5Qfox+dWXpc3ds78 zpEqMJ-jz-bD%ovR=eB`Vh0eF&&l}%w>H9o&j&&~PU7i_FvUK)cLB}W7{<=CmcKI1+ z>RI6%p-rs(V)~zHJwu?cS!vlTI zR^}$9G}DJ?sH?OR&XPmr*09Pn?p4X>a~k{K6F6R&h}7Q15@W|bPr=)}9#&XlHRmU` zc5xL{UaS@V1Ofw<*sq6ClUbhK%2ibSMY<+KdB!nPS#vr%Re==5FNCd|oXJKid=c;F zc;5)!zjj{#sj0X9QI4JmUID^+K@~jT9t))@h`X-d~N^N#McF=AP$cF>V@b;=6 zUpvDX%k5Hhma?lqWnK|mf_1D^w{P#onC!N_{4h5`1jq)pKjnH-o=K?w9A@%!ZcJkh z-LiV-=Gk0R6P)ZR!St@&8?;z)vpH_4djE(FFZRAgBbC$M89tvl#Ma35N1V^ZUEP4k zcRY^^^F&mG2|EX4aWkQ&S_MUxP1a7$n#6dUr1QVk1_d@fwNZTPJM2oeVz@JbJz=64 zqRAnA{Gq6poj&BzTEWE8;eFu6H(UjPAlYhMQm&2`Q^AV6V(nokBaNJwEH;0I%W03oKJbO7cx~{o!OrMX zAtx_6`9&Zq+%&5RSQeq?d5_w+daCv$Hd(CPrL-B2jRyiyew(4h23yl7SWjog$;KaCcF6o)R*C^ycBzu&cEYKTxAllLvcY62_WGn<; zFA}o?9Hq~@982=A<;qel0%)eQ#_I(^VLaMmKLL{Cn`&uEa4K7iv$?=P-mg!vv#F}) z&JMD#r|voPlnk{|<4W?SwX@ph1fX|C5b9`;-ux_gQK_&fWy61>xhn%kWZIWi^&sRz zLwC}vA)rU{1L=7g)e16?Hdqb$(PMiuJAj-1b%ON0D^#EZP;~n0m^* z{0Zvv>{xcO0DFMpo6y;`w3ScO?s`B`jOlX*QN* za_#UiMYH9eRcXNjqU__sn4 zEt;gAe|->{)L6i=G`^2GWVD%s)Vy$@x8DqecP5F$@mA8VkJ+de-Fq_dMC@0Zr%fpNP0MLZZX_qyUhra>dx)IkzGGoovk6d zL3_$SV0e}YAYlGBBZr$&Lk0Oy5fNMdlE%Ty;ICQ=`g0Y&R#M z*aw!ZVtUl-HGv=9@UjKgF03WqgaZIK-jR& z*=iIr_B^h?p*CuJ=)A&3<`-cp_$#*U?VX-w`Cqn?=3fUh0u0fqlqp8{n-izWwJqlO zDqX#5W3U_gYOcgr=dx=Ket~ap?@GEsPBwL{06!vhYze6I*hLXyS$zgaF zG``K!yzuRKM^JrIS-$JDEw330W=gjhdf_44{&i^`XF;da+|0sLQxG2*$Zg>q0 z5G+DkP}Cu%I~3`Xp@HD4Kky?ObJ8F?-VaQJ0ekxW2Z5UVo8jsl@^=naDxf3En$g| zFh{rh^6_7&2C4b~2Yt9$deNOVeQ7ICt&280cWJD;GwmUl^A9LQD+Q@^z;WOfs#Jec z_-Q|XdM(Y*Nv6kq6SYZtYf0MWzw>kD8TJOeAW#;5#$Z{Y@q&CSem4N?=2ZR@1keU6 za`!La5?t{^GxL$ouhcTPCz)srjW9F50SPp{iyRz|+PR^X=VMDRJ+BZK1faXtnAeF% zw>}3hM9IENr7^ZoFdIcFrYuQne^VD_&lm8tSvsn4q3km=XN}j?ymw}ym;|{mP73c3 zi}N$#7!IS5v{7xV8rNaPre9HQ4wNYStfxc8Gp&n}&)ZioDEl`@Jkn~~jIJZI(kzD# zd8!Qqa?a_w|Aw5NiPt25er)yX(GvXf(J4>!87pzl6U+I-QA7gygb^gGrT%X&@R{kk zG(Xv#uJlj&m)lLqa#V`!y^bm{b(Vv!A;vdd#5BZ(ZpILgVvFJ$` z6yAgNYnWI=9n*Ed3dH^$uVp5Trx#_q<AgTOMC8$WyShyoWc zHhK#V%TZS2!t#_+1?jR!5%*;`ecW&GmmMDUC)w?6GgUaO!4E$>Bw{m^GLz%UUR|c> zdQ;YZo}M2|CQL8;K`NkbcRW8HcVI@DoR6^kZ zCTeb5^lAhH_pipUf|+JH;^wgUkZUo;(N=|IxzD$YagHdE{VF?&kQ!NY@{P9#UM&&+ zb2_*%;I~at690D|sl^(;>;=*-dXlNwJf^PrwP(4`M$$WKexMRWju4~j?-CW6{mrEgvB$U&cKd|gy}5A0 zoUVacBOZ2%Zzj|W?#7!NQ4PV=yaHYmwJc!0X%-u)0?!{UK=ddUtph;2Nv=zxyHAEl zClrixh2I0CM1=Nt^<55EQ!EqT#zxsL{-9p3E8feTgA@MdBDsYdYCqa%1wFyB$Xy}i zRGaE+GtZn0eUy&vMY|AgaxOlc$kU3^=a2;YY3ZPmJv!6%@LMdNPqEM}vyQ;SsP+@9 z1K42eAsvF92%1?f+GbI`eq=GLZgR>YzkUeX!;N=r2Y;ZpEbPmPZD*ncf(twbvD0(% zp6$Hc`IZ(y*>DDz1LCj??x>~{>^Z90G*zMGILxS7B4anhWRk-Gw7z!GYk#9{43EJS zrSaH2RkR`N!JVi)ZKZV*W{9VTy=3WpC*{Hl=0{0ZKmg z+b)B3)A%pzhl5HkYg0a0<%3oEZHenr%eebHhy|awi5D6q0d$x72HER>#fui&#N6X#eIXJ)q@wib``u zfWhqgA_iniQOgO&A^@c>^C@pl;#4G988^(;-4(|G%?6DS>QZ3DxB8amh9q}0m<7Fq zq54UC=6RDpSn2Ma(ax{r02SP5j-6Rwq)Ozw?B|Ix{V0NCn^XU-RX`N3ndc3#Xq}zG z-8OQNFR0ZTzq7u*cA>iGpI&zK)B5IUvOGYR$I#M$m)^_v$;F%;Wf`<3N(?z*%**rm zB58T6dl>m0Mr5%VNvqYk2>`SY>~F^7BXO^pF>``dn}uu!;dfYH9e3>SZ5XE(#1vSP z#UQH@^69vr%!ZKu?h!(1mPMaehxba14Z7yNi*1*2>lRB7F}Gg-hwnOY6Y z)*T*kpii;NE!aO+7l3_y*_c8P;-vKH?$}sN$sDtXxbR-JC<{a*Gi&i&W9<#m$?}#zg#o-l$iAG3dEEy`GK$T31r)6HU#P;ONB6|;{?P7*2E z{%hvhx@K0R>6uo-oVIFm6P%T#D8}T4Y;&#ri*VIB&XS}3maFKof+9;tgOa#=G={@m z1vfdZ(k#_i8FK*aiZ)*bQwv*_7fIb~M}(flgH^J?PaXeTv?Oo<0M)vL_jbWk6_rg5 zlxh@H1Jy41rPp%J2C@tf61xDoTj!Mf^=z{AwLG|B%(+y7lsr&WFH2SrVp1|J;y`yTf9-^4R*KM98vUf&Y6Q@h6=R#Shn&aII4Up zD*DN~veH@;sNnntM9S%j8Aff1!<#8NuL}Xn)AS*UU}0M^ML4hQ*kHjWs|3(qRmuf> z`34h+ z>gQ5k$8XFkVROW$x76j!t8u5hH6LM?gUrq$;z@5UcoybOz(YUHqHeYtZU57DI2s(! z)3I4I8kES-+1_OD88T%^AG<%S_T)Iw?DBifLwRd*HYZ=@!tS4hZ#%WqKGVJxmm}Ib z(QmZ^i1R+C(rzu@Dr$zD;QjuN?vAtj{J|jn`toU;Xj2Y4U<`5QpL>tKfC~#^WZWZR z57Jxhpl3+j4a18@@>F#9E;)1y=x&9rzfs}8CfFnT_53m97ihCMhI9QQ0irCqG(b(( z$39#;ZwQt`wMuvWCA{%&WcmDR%>q4`l0$bn7h~OX1Pv0{s~48g9bSM3Rhuj>hy*+! zC>V26hH)yn9dP4LLOo6u4g4!#jP}l>yTrZh(s6HU9Zp**Jp&;#>7Tv9CE#2Zel6R= z?AzS%g-78`5t#2gOqb9lre4K0+m9j(Zl#M1~(#bu>Q$)6GX31V%7yT7`5GTWDhuVZBPXpeo*dA+RffvttR zp>jIQULLHlKjs2D&LE}* z^rbe~602k^qSLdS_HcrN7q-CfF}aXH&@rt@W3M7T+l62NLaS}->`tTYa@H*^-936l zU^8lC&&S^Qesak1igTc*LkN)nn)GcWR*d~Z=TDVruj8&RljgjISy6*5;L5oAf}oK z$GpgSDhy~y>D;W2K1}Am?(}#$Am8&&K}AWf(aFedfAfQZT>cUCo#qqO{QHZ|+f()S zP4QFr+HRTA9`;=@mRM{_wg(XtPp~GTbynAFROLjhMzD4)vM=&OuA0B{2(|+vp^WU2hR*FVGV!`o?{SGuux#DVq|Ps81E=b^f5IGJp@~pC18rgVdPp2geiD zwo6y2Kw%^6d6ZFcf-PG0X5IvWE6YC~dh$I&Fc5daCmXG~j5-oxlZspy6~Y!|mjB^G zz5P>u2A?rKhXG2>m)VFIX3e%E5Mect8FT0AWXty9-ycqi}xUuP`XR^+O&d_g-v&BPJsS`u%meudi+~ z^j(g`bT5Py1Hq?3SM(F4{vo=27~5JiQ~Sk+=sfUxFiOk=nDM0RuLVx$E~dg?7lJ#^M=C|%m__ypDzKAShdiy{9FFGgq_;s1mPZ)uYzM}+ z^$Knjjju?9foi!-krNCs^b5zj<_u@r@755GVF8yz$!5Yv_`xmY!crq%Av6B__W$M) zD17;Eu)Ave)oU90X|q|n($kfttW7Ni_%grSAlk6v!PRQ&qv zCJF$EIUx(;Ohf#fvP1^39r^5$s$)Ox8Yi&=Z2@a%1w(5IFq21OWeY)*`_xex>Q+a| z$ykj)K<@C(NjZ5uf4%O>QC2S>EC8BM)8cTXC6=ynn@$i;i2Aa2>khu$j(ys5RteGO zX#Zp{zSc`Rr&{ISq{}a?6(p{&d_qR}lj+_zdh-zR(OnDig@X5sggv!U&72C)%awK} zj>Y(jZDlaPy>w=D#qSX~$Jz1B9E<1#fL5hPs5OzF-TuL*lgTV)U`e^I*(EQZUV=yA zVmlxmQx?zd8g{P)4Um`M<}<`_zs2l)=|e2}k9TA;6P}g7iE|(~2)u4(KJ8LOYF)s` z@#Xds3P8G^A}x11iqY1*?xb%g%Iyp7{6rG%`~3EU9+~Qt@`A-}UibaTx;#eHvsB!j z75ukq@EOD#AS6&ITHr$@&5@lVLcY>EfId}K;Wb!RCvL) zGy*VOgZcV^9rRfZB+V5x)yuy^;yxN-C+dV+POm%pqe%3Aj+BOswejciFo!3FHJZc#yn5 zyuZ7~8ifLp+FY8G&zo5Pb3XXBxgl&@RhAteT7K)A3&he~s^}#(aOfpAjR>K{ozsil z7O596adLA804lJlwJD8bI1^}o`j!P=4$>NciX7HW^N@3g`_&;uj`oJuXi*$KWD&IE zJ@{P&&TKgMX;pp0SxLUCkIMdxVCX2M9yyV*Gn7o{zcIYRBf(PX^4tO&Z<$WSuIl~n|F zH@Tcir(B_UZvRIFO-<(xuvew3n)VL2R#8|u=w&bDHI)K6nw{wqZ~}R3Af3#!0n1-F zG7CNW-2T=T5w*wua3J51D;@4s|I`j>9%H9T1zcl$vWEx4)^safrGV-tORGgzQe$|< ztR>Ttfpf8Rxl5sXOP7)Nj$NHi#>SA^64&cS(w7KrzN(dKBQeX3mWXisoEqMYn=jD zX{|jB{&UoJt3iqSajN2j>;32y9E{sJq1Vf7d(njR^1*yVZb)&E;3X-*BWhEXYbs0l zteaTgd)R)PDEfA19JgQiZzn;kmgPc4;(ldYD04OD@HLj)!dT;Kh*!VrWJC`Z#TcQQ zITxDVU$uAKF@BKF2&A=THVEL~s}yizz-GG_?tHE8Fs5-Ekwg1mtjtDPKKpVriw4y5 z+bSJXz3eW=*$p+@-XM$GvNFEhp;50|~K(sk8YemZJxO;l6FdHETtMp2GZgqn*U3 zARY_=^0V?fW@p31>lUo2N7e+pK#y@I{myB0Dn5Nt7i$>HqQ>yg*3?GlI7V{w4lBhv z&uu$t`l!~NVF^^#QQd4EL2s{_#U>lF_tQ8NDTmlu()|7EYV$5)MR)w=1yKkFlBVr8 zb3v}MTZZ(~gQuGsR_kOfQ}+OZOq_LsD*1OhjTJ22bl$ z+F$OzgrUza4=V#QBS%4F`L$5Y>UKgEJrN2;2U=BpQW_cG*iZaQT4~Zc;p%e^t{W_Mb3Y5xp zfXt~h48-U($Z0X2i!kHkyWh60^aDS%sBYiHQy%Pv>G@AoM+>e)WSjo2Dw0f)9>U|! zc}zr<`>GeK-&j-Fh_T{j-=RPCOmr>uX&`3a8??vP&7>5n3uw7IndE9@&DFAYO;mC* zuQc?Y2i_x9w&db~#3~V?-MeKuq5@vq0pSdAR7hmZTv4VIVL@k_-^oCtkC~;>wkcQ! zyxk=SO@4p;&A_O^$`H%<1oQ$eeGjMI)S+JHo88iFBaXsX``-}I^k=WvUT|u{HMta! zh+f@CZMu&ly7}#krU9rgRdDSCM_%>|NunF3M(ljBh4G4IzYe4W=Gza}WC<+|9=EXB z&#IP3QUFvd*xM^t@ox!z>&79h<{hjwSIBBV;A@F>oK#fHr}JL^HT)w#eP_bfx@WC- z#aQ$j*=e$$!0sCsxY%a(r?B#33#+}o8q447cW4VmruohlTlcHBU9jj$ee1Bu{|)kb z%B8Cbkr(A~V8v^r3C)sPQ9fEt2%w4u9W)y&&R>V_J@mX8=gQjyr)I$Q7@j0r+Rdao zewtc-@>K4ls10<%=@73$rcRk z$=(qkP5OF~)}BWT5$*{~7e?2Xgtz?e@6&!T)E9Dl@Qj|YB~v39Nba)#TfFov`ZUAY zX9h*29PybarXim&S@;ucR3Ly-z6`FHq0t4hTu5HRG_-cIAHM`%Y~?Ac>ax z6q(R^tvBDY=e*hIFy~E9-Tb!Zkm6hfS>xvkjYx{_@0}M64<(mz_Gg*LY4>o6$}3se zYXb4fI8^|8_o_)4_-0+be`G;==WOkd4e*Pwk(@*Sxu*ex zokmdAL8^eVQe+)EO?tqlYNcI6FJ_D|$6h&f9*hOeAN2ix{pu7=)qSUO?zyV<0?v?F9!yGH*vn5ExKu5+t1$pT4rBK? z-$o?cn;dlPDKX`qi9(i$Ubx=ByLzkxtwC;^wIB1YH?HGfc4#3VC7}}Xz^d!#!CC84 z$iGqvguuw#(!CvYS+70FC9@nvIlVXsi<}RQKYcmvBax}plk3$Fn@&u73oFjOF?n7zcVbDw4;yp?$!EmP0l0GfjWE#x3vKe5Wcb zsWMnE?7o!JouHOSJPjsaqsqp6BjpxV%`gwoi1A4t3e(4&&e;K^Ls}*NfZ_(a>KVT_ zKT6U_qv5*CPBKSkbR5Fgz(of{kw3#cDxlxNpAkbr+bZ^P{M!_?I3G=fjr(#35pwr5 zQ0~>U%=xjyhuZ`Ii(@)to)8Lr?GA!9lJT-V&!Rv98>fS%MRfwE?nBgH z;~cmYDiUj)n*m}5AZz;^zl%<$7^;!s9%*4r)}(Pbm@Fx~L0=N5LSu;aqS38q_K)Pp zykIQR_pD6lG%#alxw<$?g0x=>qSyeIcwl32tZt|bV+^-ki5J#z2)Mk=01DI1#g2vy zGt=d!WBj=CD9n*KA2h7&uXYreDqGH119K2CD6P>Er9EV^am+3|HcNp6Z3l;^3nk)p&Eix)CX1>HUO}-A(dwHBd0PL zOgybNwMU!Hq4?jxU@}V^T^SCJ+o>qy3$e55riVN8W<a+L(Ly5Iv0TKKZgJ*VkFu!aV@VL!*>^C_(U4(DZ#6kru58-X1n@IP(yS6O_bse@ zBIC?Gp$cq}Mu$LWK#!grc_fIj#bfFv=PImlyq?^Ow#q%)AApQFBq zl1=Utj<}Xf4`f}vqgkn7O*QZ?mcKlxR&?)(X5?@odXV-4_ZwE0L&f1 zV>^YMktIhdSHA3ESy$N)uwHW8`xeucr)1x@mi@wFt1_ThE2{5Fs_uD2`AzUNx&A!O zf6jG)$NS(90ra4{^H5$*)OKlkw>e`2NAAxtcDSA*3SX?o79%%;}hzl@*s4BpTU_^Eu;N|sj< z>bmXLI*#Ad#sGpIP(ZOdxm3Cq(&et6xdPDD;?NN@YDyb14VsuyV9b8yjdx(ylg}0b z24VaE>^sYUu;w(-|GR__+ZcndyVd!-cL)DER+#wSDGIH8`lN963Lt5ZeB~TW8O1-T z1EBiwlV5<$y=2Gmr!5nYU?v8_?VR%m)0Z?(LSKw$rS_ zPX~UpQ(RCwjv=#Cdd1}!SiPFYKB;NvuC#{~_ZR976XR=_+4yFgF94Alb6{_FNd(x{ z9AzEq?(>oS>=Xo259(oA&Wfb>y0vXlHA!*_0{?F?SC+_l!8q3BP&GBt)6(mwFdhbW z<=D6i09}Hd#NWFxZrGI60;`rmU2u!xx5jg~To;i!C{BwpUE~hAX>L9^-En>S;h-(( z8!_)J}7(_&zFhL zz|{4AoL05wY?+BtY6u=+GAD#)a?=bg*z!SHti4m&yk@v0kU!7n+cN;cMx%CEv>CYJ z!U0>z5zMX<>rlK^OBzL4id$-}tHuS_$kgyUos4S9lY*(bWHJM(GY5^=5bR{?LZ zXRy*9ukFZjnO&Q#e944|%9#AlXg{U!PL}(+DMi~lpcLHzArx@uryOxx!qgHC|7Zum zh}Hzq4iD!OtGAy4**bdjPAT7loEh*zvLi1sQp20x4BF4#<}{7|W6C(KgRAMU%l*Q2 zcwpk^aSc1~L(cGVO9K!=X5(hpCb`pms)*r3G+>ufnR}}%%WJH#lpE(?*+DSK`DS%$tJ!xSb6)K?IRF6v+D3M>e>M_7Zj{* zs9WRdp7=8l6x58nr;rcLHh~W2W|`*})Jh|x9DtuW(7fuy&jtlpS#ZIJn2=&?wuhl$ zVO1xGATT?|C>ai9JuR}Z15(COC-C&eStiIaBXalv>k0)5fG;_Gf5^?V3UhE?d`D8W zp)K4D@s>7VW$w1HRN!m(*aNj1n(XmgBM6|eOg(tB(B*h=->txUY`_Cl?qZ|*r)@O( zr!cdYkO7gM5LoO~>3H@3PR{|~KKH!-vzTChpvOM*f%lB#PQ}44om3cy&*YbYH}+=) zV3F3`pCW(oNHH^2HnFnV=2{S!^Xi0kQ-n~85jWT!LUd$(utKg91^CHl1E^&CG|!U$ zQ@4fn7>lN2|3|WM*gPFr{Lsxfa~9Q(*pcI=!;B1#At*7S)_KI-eseGK$h-s7p@FV| zH)m~23}sD+o1#7zyB&zP=~JCyr%&V-V-MDMN*r;OPp#jzoS@g!-bmv<1J1u_fVk$q zz^|Sd!gl$q$?2pkLP%tyo)yvpP1%0T2_*Rktr$yWQji ze7l7uSi=O->Kpc=sSA+6M!RUw2+%K*1OX`D$iaGr?aL>eGef^)G56?SunsuQa~G=w z)0bo$AvxMmer*(REfr@@MSu=FgT)1GH&G$Qr|V~&ZfK&{RSdti&O|10r`d1-gz8@KH5$V? zPhqARe*;H?+BTG?;}Vl4-%js{f8lTLV8lmMa_|HOJ#h*L)I622s|kTZRzz%YDB#Yq z?H`*#Gd;Sxov}#Y%VaTS=RnKg8pK?;rWklPbd~Z}K3|1`Ef6iU?Zm4yE5^pbF`lPg zhB|hia&PLt?XC=HIZDF2XI^2!TFFx+_aZH-c1xI9rf5XZWyTg+teM>D-}*;3K4Z)N z=ugSQhMY~|YuqvDCtXAta8XN#-a3b&{I1p8k$5!}x4sySDLGx|a=FeHH2X#zlPWmj zImv7=i!;{NJQC|68?=2UOxUUfqMMkbMlmzsl&H8byX*7J zpGs#VS_l8%3a)Xo6UXuk>oDJRsP;V4td=K}DaiziLB-Fp$V(ewR~|aLjZh|*F=Kh8 z=&!>HI=Do_)$P+v+No{IDfMTzCuU=(x#1?S9r;}|KALl%t`k zEMX>Go4o+oTe&eyd$&O8rPkdk2EVMrAy%@1h)$Am?EtZo(-Pi~Z zBIEXHJNswR2~9(NXhV`}vD?@M@{RGiDyE)$BCr2BcYX%<3WPzeUEuu1D>v?nBtN5~ydgYFw8z3YwR@S#vhNj$49Qo_n9HZI zcH1l~xB4I*x4x==ria(y)ij1~u;n`n0$imp3RzI>5a?^o#D?!zlNvOahY1;Dh@g>g z7N9S5Ql?w+3IZr$%b~_CW;g%*xY*y?3@2AG-D3ThRMCDh9`P3W5jyE`8Re5+;XUlwVfB_`gO^&C}1{U z&uPJi=-O+RGE>dDf#FYeRn5#Mg0t_#1~aNCJ*%CBKjjt4ZkA0EA)D$F&*5tftHG)z zj-SA0&tg#zTgxmmi6zLL9%)tc*D7#4x z_T(t(?}-_+xDt2Na0+R*@#|sS5`+|_lJW@oa8cIP%f1X#-_x!$^00Uag$q4w-q<}p zSeasx=_QakF!Z1?bTP{lJ9`Attl&!TkAC49I*@HaUC6jwL`jLp^-UtEYLHnsILpR~ zTZxrWn!cHwlM{_V&h%Eqm5k-8km3`*j2HWa&-Iq(k#onkBTYwXhAmUqFSmvzf!zJ&d{PP0 zgcG1Qv*056(+Yyzu1heJP6Pwc8jhBaf0u4))hhMdOyAMMkW!VjsUAL9hTc$mp^a2` zbCrN_o5#D4Jh9zCL=kDzGdzZeQ+Wx_#&-t=w_M(2aBG8)e`w=#`Y2OST@v5dN^=%% z*pn)fcDoTtvvL;atfCzZi~K``PKi%DHiU}5{oon{TTzzwzt(7MAA5~Z`7Mve3_cE1Ye_tlQ(Bl5s1%hQtiA_vgi{=&ty7WXQ$BK?R zTsx`SOOTu4Vopa4iP%meYF(QxO7rafTh@SmS$i;GxDYQ&n>*(xvGVC4%2(4sS@rYb zSp*lN_YBd#1C^$Wqpn9Ywq2|~CqgHt^{7FMkPUhEtpXtRb9QfV`m}<@-9-H#ihZ|G#S6O!i^2s*e zm7I?u5L!r=JTahj@d=mPLuZ+kJGZ2^;8SmTmTDNR!6O$oH>_*+kh5rXeNf!Vnlrp? z)>W)QnJ?Yq`)9vbNmg1U%QUE@qq?w`9`qp|KC{!LA%w<|TbuLl{_*nXHz*2+Umt86 zJ3Z{sj+&uxa@pcHoyF&IqO>zDuX!v4YP+ePJ`e0!0uQE_{^y;i&D-cQxqv&{FP?nc zV5x+ZVM=8%-_c*S(U*>&HcU1okX@#7I<)pY{E^2Zk=3Tkz+;WgP+BXbq2@InK}Y5z zcB9E}IDNurn)B~q>m&HyFMO|DfwT}n7JJj|1=c47adzg0hN(X~@>zrp9|s=%N*j0) zk@2zbHdK`grgRn3!WTTcBlJjK;ONbI2t7|;k#BefaY`wPnCL|v%WA92I~$mJG*_uj zT>Y!>GWycyWwqIx$<+=_vMJNipV~iqxKgUD&b?jv!WzW;#paP0vSZ@wLp^^D&=W>h^V?8N&@7Z zc)uvJ)6#Jrln$3ixlc}Wp0X@BMD->u^o;*?1huj>&zt4OA>SE%TvXQQD_SDgdR8Sq zGTSbq6u#5v73yShfwc9Z<;8!=m_4GFKW+Sd5Tz=kYdbo%++j^il#1V~LbYmt9S0zZR5<_5Fd4-FDs72UN<@s6WJ zB=zWrREjqB5vn@uR@Cdt7)l-9)p+O0LA0M$mY>fS@8VRdIagmuu>-U~tkIMAD#V}X zc-3RNU8?}{-cdWrv#8(O#|u^xadPrLOG1E5&}l4nB0TdBl*_R>T-~#X_aj?^Q@df& zhSfojPw~Wn+p(uT#a6!{F4z|$*8eOk0am!R@ne67m*lb7@2Vj}04kuJi1M4?8RkZI zJZOfR2P2g~*RL;pNG=I_K% z)$s(@q|mnTg{Mr$0{D)qom5M_? zUf~zcvY|2=BViZcaD1L}Ywezs@Hgg}Ht;MxN^&Nx_LxDnoC^d4X-e0~UG=_BE~}~Y zVmx>ETJ0hTAmq-+Xxp!Y9=O|~Ti?f9Z|~N>hEJ41K?#1--etEVc-&!9seOPfRkg7| zLIg+Sb(b0emoW2YfUqF(Y2Stb(z51d)nmJT?hEOTiCzcxAWq)=+Z$ki52^EkV13(Q z7FDpI(@5$3-r><#V|||pRR(mt45>p~GTv0HkOUFs{-M@%T5r{c989*)tyZbM`aTj< z;RVSz2qI-&N*Tx+?h|W>*cf%5{dVarXMyaR4W9H82<06Dbmh=Pz2nERI1WC88s zOD~APW1lOtwwt`$g|;n@Z*e2dKGGPX4R$a?tclJRCSNy>ffLL2Y8)Dn%7}4MP$B4jt zl;8T+y(Fr!yLyj^ZYOZ8`KyyHmW|{`f~`PWPUJ(8S1i$6usismt{B2Hi?TY#`0uR*2^!&Q=#XM|1tGqIilxIh9u#&CNj&q7x7iOE4MqBV$}`@D zXE+uwY>u3Kp7&_x%_voNXazk!r4~Gn(kT)QDa3{jNDSpP)@4o7Fm&XB)F^i@h7yg%2xdk7gyPtJF$? z|IC#&PWCjV-^j)VDSnW~P-9Zo^xkFNjhz99yyZny)?4cunjqf$2bHqm4JdL0R6EIY zpLK{u_wcJWxz!LWb4`)W7kM2V>&nTGJZtk8@Z^UVYwt~c5jy%9Y1s;PGJq6Re+A+n z+X3x@?fL}qW4!o|i<`*?qe<^Q@Zx1v)hlr9RFvaPU&{5K`vJm4YjebUuVGc)vCVOD zM!;n~UEO04$G^{cW7_NFL2_x)u}1+(WYcL`k^nz5?<@MVR{R%eW*EJ?_m#nF8EQfM z({3505u4V^BD7`;vEbLudZ+z2l{7(c@*t(_7Yb1fT%&fCVZ%3ppew@r_qRMfVA9^3 z2JM^g+FwcF3QLm=G4)s5yilZazWvah${b;>RN52PQW}_|KvccD9`$MC8W>m)9MxT# zqF3v8-yCI(QMs;fne@RmP`p-1qZjdA2O+5-H<-JZ#+L8mcjSm$#dLezi7F>dvB+~vy#Y5Sldi;uzoI{44w3 zC*~@7|9FQVKA~1q1uLOeWD7+b#A{2Rf{7R--poP&NqGBjCIx@NXTr8OVNEX&90Lzl zD$*Wx+-C8(frrp29eZb8vu0*dxz;SUsO_>5GXHsv7^fk9=e3)|AlxLd`iLb^$7#G= z_ej@iGRAf+X7J@KxPh|Xg6*uqNu~$Wh#{DM0*4$c30M~@vhXm2-zWxM6O2~A2-KJ7W7tMJDt}E{soFxWfyMyu_%JMQB>)T+xoW|tcA)T1g91#F z->od#T)lf(qHgRnmDFuHTwxy1zv}DCYkU+acM!d8?<&zZ!jUy}EYy$JV(>dPg`|Pp zOTijJd)g_iW5Q|F{8S$a$~aCdiT)`q_Ugr5nVbw+`oHHFWFJxc*>3SV9DM|P7W)!FE&BLVt415`=Li! z$p+VAeI85A^Uw0GHPK@YoYtMG6VZfasI5z0A7J7n1bzxDl`Afr_3G{)GFle)d_on( z%a^$sO#vJe7JcpPU0hK{fOpdcR38Kt`~*X8SqPu_f(?aqrB^P~DQN5E<^?|~Dw4{8~! z!LBenHDO=0XmeLnC2`8`N&f4cM5S9EF#&6OV@yK1Ajk zM3Nb&nTQ`lxea9;w(=>4%ee528}?rh3gjL)LT-^ykIxk+%bxxYL^nXUcutw_v|IE( z1VJ`q93w&ZR~H@|S&Kz6(t0C5C^UFzuYT{-v`+hS-0nxd^!=eiB4Hj&<%?O@Kk&xv z7Y@*~OUYjP4-SjY!J%?lO`Hd#N#+w=8==K-d2C70c#V0r3tc#M2M)uT^9LoSO3;70 zY5j?>N5yh+F_`3>b$~1tqnm_th?98AW`};!d($0W8i-%W8j5JEzJc-suC?#_qW=?Jhn4!J7Ru;<%}7l;{h(qNi09AN6Q0$B{_zZK_eF^+!}Rlcb5A} zm?|bSDfMf6Vc#uE+7c0)C!UGht5xjs@3Dx0i#(X|at07ldUuTD9Sk~==re`NPw^p&}5#M6CiOqKWSIxI_t> zSDRZiHk@;FpeLh>Y@hD&yrADNxXrK_E`21AIC;HD>v0m}$gz#he1zjKX$)^>CD=G? zdl^n9A2{Sc!`)=qa*fsVHzqx?b5{an=tu7LmJEXl{u}uiwa8lNeZ#M zVsif&6q)OF2?_1Y8iV$^ga|%50Fv3&rqglk`4dn`iN34Eo<6MX8W2DGWl{wtOfE89G3_iw$LR0EJY4d(|GvOB)EFEQYVrm{E>DPE{CRA1UrJQ z)TlM&Yk98#QPs~PbmVY-z1pZ^*5fRtU||lcs{OE3!PXj)MadMUyh4O$6Drdi@@0SE zt(%eV(rAWx2ha2&gLHuoXwp91779iTl|zOUkRj`sl#co^nUkDf)io!_m3M69$7A~? zb%OeZ4$IP?7jf%)@bX!fX&RvkFGW>#Dn>m{Vp#s{ViHQD3Wd`)av4wy&;)b{hI z_pMC3u;8Wm;qv)-x+qif9l>p=)Jnw3(aMVX`Js|ASZ0S%m)lGr*DznnxWk3nK(*@u z{vEuW_Dd|6!42QHqy9ffbf{|cNFOrZnZ9y0c-h`*R@AC{rv`M>R9Q*R&RERW(bWU{ zmHj7|xB)}1*dcto(kkxA12%pf^`pIV`8JkwAjM!|YoUf?&P(IA`klNjWm+_su6qc9 z2_#gbvIukpw;hm3Wd+zvUJd>TiJkujfRcn!||C6Tg=r_IgtYVhIuGCivj7AWsM1^WZFCU)y~ z0{N{gGUuhLcwC>h3M%AX66`#Mxjs8T9-=pg-!30xPff3W7asB5;Ko^}1YUlO?p>Yu z>g68{{Y@{Y+sZ!>kXw^3It-+zujW96j|i=+k2{=S{`$1`Yg%;rLxXQ*l`ihHO0Vw> z*zy`K@X)7V8L8u!I$gdz!s&|fQfEZ&-eQ$#;hk=vKBi>SY$byzo4ZQjevnq+I&v6k zi1Ape-g#m>@e-x)jYC4u$5kP)w)->o;kf7KS2wYS%xWr1UcT8ludl6JS@_uwk{X&1 zd5wKWGRUKY=SR7_l)m}vNFKM(bH4(>%RL=s=c~wp1uu+O~ZSL%z4D&#M!x6_xo#ig?+*=@}yGm;8 zSK9c>kt{Q>23tIh6FA>|7?1R{_+-{aHF7y)5es&LcO3@4X;(rS~EPX`^Y8d`u}0? ztHYwszW;YoEI?EQlr|8M76EBiq@)xCq*Wv&r5hXr1O!x&E@>r(?ovuxx)}uN&H)C7 z-+j;MD(>p;$L0Ia@9__xXGUP&=bn4c>%30fJ3fYwi$dCOXo9B4U6&zFwBPZ;h;|u5 z+g|G`le8O?kK!kn+CH)l-OoVX7Q|1B zZL)pc=djBcwgYc#ED~Emz6i`$++;iOjS{rizVumn657eGxRdx!iaeS-z&)%j_n4iBS(RGTj zpQy;*lI2x01fxAxGh|ZCEnMA9>9&rG^~&rfQ{wD1zCPMe5;h4hz9t`b@j){vB`?m* zqt-@zB#G$Cc`3P=kEudsvQ8HtS*wGjQt)ZZ!*?~sHNZf7FzK=oEd_~kcuB0h%@f9fp4K;jNC5imX zaLoR+wsl6ojs8g=plyPUaEl9JPX z#Zt&Ip@Do}M#B8DqzlL=L=*h1jr%XwEVN$p{6vG;v;mcTK_%~RJ?7acvI5W< zk}@}e>kBqXC~9+cC~(szhwR~e1hP7+6wyGmKli2gidk-cv_Tvw3gQm@{Ky!DrxkbS z`DP(0mcHzf6ShPp$FzuUuQlzR?Re<>VzD$=izU>fd1~HQTtS*q}Kv(*Q{Rzg68Lu*9Mp(5v-DtZFPlwFi^yvL;%KU zS_~hlZsZueU>gxO^b$35Hh<|;55Q5^;bP4>cl@uwX@C?5+2>?PVK!i*sQnzrpQUIe zMdA-FD}iQkXd!vYjaN%Oh$YZ@BumbN#irUWzT(lQY>J`OGFeHL;NB|4dN?VjlM)7+ z-zbpjM^CPhmxGpRih}7dzTj4R2vqnE;I}Gy;O!nQdm(yYwOUK|Nm#Zf{3Cgxl;$ew zE<(N)zu@>G65a{GrZsy|mWVS@t$=6RkCX0ENuSx40w*aO-&YPv!*&XnOie;1{k0sM zV_rLh{`%_>x7LU6I+i7F9uZ&Z7I4KcPEJvfqACG={FH$D6v(w?Z9vWFIRnAxw)eGU z5FqmbpYd`WjvbAzRWekzlp_Rvo!r$>1-z6KF-iPrP*?UpT?w*Qqmpq0D|AB>*khyG9oOa@Jb_%&wVtYE_pAmyiYGEZI!7 zb2RX;jXjrAcODXWCOEma+;qr++qj-zq(;8pLY7aEh59}G_Jei&UZ>dygXJw!c#$F5 zvf67Xb!yU2#h`G2Xr>92DKacqR$=kfMy+^X{i0Xpt9>6VwbEb44QtJbiOds7mU|h zvN2D(kzUTXx=yc=ymb#y4Usq?w;7a*(+Dp+*h^Dr6R%C3avE7g?hSW`O1bai-Q;q_ zPw42FhPnS4HV=caiF}%#39gA-RH8`L8};D7LFc6RqS&F&*v$*CSQa10btkTDgYj6$cdg$+6e$5B+FgSjvd3^T*1I zuh)%?yz!|(BAm!WlDe`#>IC1CP~ly(klRwj&tIK-PFZt27j!SmUv2KGWXh8_lBvYq>i{#ZIGk@I*@>}Ivn)_7}41)hbY zs7Z?Cc=TMujPhUd^<4_Lk}lvW=)3@`r5<0?`_iS|@&nfnoOM_pCe_{dK0B;HEP{hI zrK3Lc)jUW8DH5~8N@Pc`7)Yp`wQu3vHRRXt*80j>WAALMG5kW-R;-o1{1R)2ege?l zNG+@Pldv4koRs)L9%rb}$k9;1?~fib=hWV-VW|}AP`N*7vH2b_r{-MCXzBd5b?_Y^ z0oQW;{&1t{qdUl-X|r*DIR3g>bsnB9gXJ5OcCvBTd1ogdPeT?yAw&HxAvx}BE&FMW zCi@SfH7Pew{>f6oi-n{5NhfrwZ?rBpmiKG$DV-lEfGByE4gb;PkuX-$m75~7o~In9 z!_^w0Y%V^6kA7rxb0clin(|hwg`8YYqtlkXC56*qP+sVRlb`J3cN`8eplG`jI(KrK zZ9=Q4(@aeW6D0{}1W<1iwHK3Z9)BhXZ%8W^Ou(^bac@V#yJVk4U)SJlh^-h_PkYZAy zwW;5sl(#KUT>(r<{gxuSy2ZK+97}MaO(__Ry0BU9h^|DZn;)pX98n>SvJr07$bJ&< zDkR@Ls}0p{=pv{z1Mlx*G>e&3IXK&wGc^e#D?^N4&V40`@t_*W+`WT&KGCKJ`}Z*z zvQ0cEIRdIlzJFl;_eR_y`r&bT7niv%3GNRK?}k!0^D8%zy;n0I39Rs3kiC$+>hC$baKJzAs1|Dd_5=F|&-r2hz?s4a zKD=NuW^9aC=oNp*nWNZgG_1Bt;k(H!fa|^hu3Ru8&`ab)Q14{wBedMxnXCtg8hv@~ zXaIE2OzstdkTR*r{m6H^)oFICt<$m3nti0N2^ZlThm1Xl@oOl*u4DuQ4IALFO#vEI zD+WVb>^u1B6M9cM?QH{nl9Ns@FT7uh%y>Uo>3?-2Pg!X7jBbRJcNA!~qL}3r0P)t_ z81fM+kMwLvK{}LaO~%fS`taqs7$IUE@>m!3L0@ZsS=PQSCrJ>er{R?#B_ijSuMKj}wDmn@);Wv$G>5k5ui?{n- zO0BjE;$l)3T?C4Qw*)(oy>-~OvmG#@S}A!-?4lx1LM^bjs@7Kl%(et!C$EA-h1(UJ zngaxVyhFjYNd)fCtWHQw(Bi&|70$X<)$O7gGbU5x)KEyDkDO|I8n4UzSwX0?Al^ShpEb6&^L=#h1qm*Sa<3mS3z}?xJmMjN)=UiM$DB&D3Z9ktdCdaF0a=P z6>`WijpNiO`SLHUwnSB--E{hYd#XscS=fnsyL7s@r6DiL@0=AG$6BpBCkd2O$u7nb z$U3A>QlUgaWy`Z2kM&$1+4%kiK*JjxRc$mxYT}qz;5mrLduNL{T>D*YB;g@P6SC_M z7E~(rSi5s}bkTr%!hA_F!eKPI)4WKCG&6U(pKiiwejEaSz$$5=MvBTvNhnC)8ZUed z6x=FMiS5TF{)(I36ZXbYLAZ?MUaO8>Unx0n-Q|RMUKJ1X5i)lPZ5mBbH!+cpNQ`Mb zLZY4^6K0<FJv>VHShMj75u;2R` zH-(3YK~bCu*Rqu^Fo7a$G{Wg*zRg+mTp-kg#$(F8qPylcOHIKL`uaVngo;F!RjS=? zXW$wbjd1bSi*RIuO0g1?FBT#rk4j`~cTlAP%CDWb!q|S+rAkJ*0^!|TGVt8g2gMM~ zX{eMr+9*U$I*HbqzppLJgL*!eulIp-0%xI{F*<5-#PDdS`K8%n2plKn(@$#qfZKVR z+-Rn=JG6#kI9QV2brWcuFWS>6v>20%TA7^8vRrqDsAbBUW}!|k&!i%wz+;1qtN_OA zL!nYBKGW7yN^nkR9-he)ilq4YJiI0)7A%u_Bqt2eE5s-@2gJ};67s>EHK?gdyi{-D zYqnxS`q;*5qSi`_Y$^eBR!tR)$YAlF5jdFCLKcm%7ibV19!q~P*8@*Aw;V54p2{`! zxlhRA0Ggj^4x=(0)PYKXk)2pEAyZWf>|@?KMwOV7XA<_rh3CR1OWdKY#695w<5%^c zSZU;BMb_(?oB-AM+fCANr;{8MuLC=va!w+=?F3hk0V?>nktDpn#q=$s-cH+* z>Z-wHZcTSkwmCZzW>dU6Q($Un@;uBGjSEH`T-=9y;Kx9?geTD|)PvBbWDz|NVZQkd zl>>GCN!sz9cYTvjcGYq9Oz9+R8T$$zN8JPyM8or|r$o*@C~g)Vqs-}H$nHy1ODb+( zZz{A~tZP~O;O0^_M2Mhj!HFF1lnv7Th#IB)d?W^(>^x4cqn#U=Wa*nFG>_I z^FXxQk!_?;f;2>K+DS#|O3vA<#Q4+PN0VF(taEx>`)Oy2GO?sA7(_T+Lwp%&JeZS+z z2Ne58)84_CCu}-)kH0XF`K`z+r}GTgY_3RBnzb7gb->EbM2)QP={RZ2AT2jAOe$Up z4Xd~cEePvA)ycO$`Ka0y^awZZbTw0*3`A=zmTMDM7;aGzvkGikO0Nzs1~)p41ljao zPwDeWtC^TA-xFfODIypVd>HlawcpEnXfcfvn(4ev@q- zYU_2Lu*F-_Aw!d+s}r@7oGjxP%k5l*TVL=Pkjz@~GY`8m9^>c~|Elt?>$T3t?;ObP18RslQUScK2 zUF*^!39|w2!8#Ob?N(ETf5O@p`QkH^fnG39cOd-j3vPrmQOwuXLmDj@RI4`0GkI_6 znXPqmI2ZL{bW!6ZdI%=2eM7P6=No8mC)Urb}MjYna@tBX`v1Hz@cjyWF zzzcKjyxVc|{6q60^-~(uZ0Hs<_B+iFSHU37d;y|<)1}1C_!cO$8Z1T7DNd$1Zf)9d zMhwR`PC_LLcDY15?Qpx1WDgoKmx#n=Mex1v(9Y_EJcNMRL;xF{BW1zPPLwOozX9=H z*64F!`I8WSesO~r=ToW4CZ8)@VwM&=74tc_=ZG$CIYs3~#bjwx@`LS|bQ3u@Js_5dw zuZE1bn;rCfbxb&bk1~KMRMY(Ug67wTl^}HuR-q52+rFBF!?`O9ctcNoy_pi`7Yej0 zLoGJFNxu3Wo&(Zh=V<-4jJ)p?J5Zu?E=+YQn5$o9_(sSfNXS)z_rHG<@)AZ!aPsxb zB=p}1Ne=_$fe*blXn`Amu=O<74p&+nY3_#@g^NnQ;u}>5O4~~m9r0Q$h71=!D+JrU zt|49pbQBb^9q?qgYF`_cgWiIg$r_@rr)cpE`@;B#mgF3x0^-5`o2k3MfD_Robm!AMl1 ztH%3XpH_JVv&swqxJrx03n%t~T=C5?iZGWYd$w61V1+6d*>J%Up@G+Ko*~Xs=dn#a z!UDKrAcp{BuvTx*@>%sT$_mXc*rzNY#v{B@7kHBjZ@*E+DYCe!^zgGSMn2m&l{>6D zKT*qibjrHZV#}ifoqCN$&!Wa`ZxtBsS50lVFm)zbL_4F^+vWfKGptgtd4dpa(6!&` zlMpQ+Mk{Hs;-AoI%c9QzdfNN*e4LPISJ5~1Z=r7NQRnpuA0i-f4M_nPcO;AsRqR)Zi`mBQ8P+LHBi*6!u zQj7DW7eg~{5pX2$foY3Hv|5?xt+MC-}|F}+}jk($DiB2J_Da?5E)*E2!Mn|7H7%c%5rwrx`d;HePV zH0Y-+`ZQeuBJ>m|&_NB?CBCos@~f=m#-0O9e9O7H<^w#Ud{EkD_V&(b2ZMys;KRlt z&|$1EeC1GY#r1e{#_Q%}1t#|-S z_A5t1iL4H3IPtEA=@1pv2fcm|T#(_!2O{>0O|AtpCT49evBDJt@>s=l4NY zdhHBK3``nub=s4B9_adnqgKQh7C%N01=o_XurWP4+skQryACwK^Ro>;u@tZd*qKvo zD?^00LI{*!TMU>w{nk*hRN1NPrZK7TR(-nzU0H@Uz}fRWwx*(M0_a#<))qvsg)Fy| zsxO=K`j3HHNut4lA{%eeBZJ%WxluY?o^qK>!<>--5S*cVq)N?REeqO=f0gTa50 z`l&^Iv{N(gp_LUFZPss_K+-m{Km8NHgcXQwCzq9@Mp@Jyn!#Io@A~ElQg*>C-}5MmHCx~lj!FY3fMIZ)9!{2 z0$mu2IW^Q{TAXreZLDXj8I+2g80FQjeo?5G;sDeaG;^D#gwAK4j8E+jo~+0V=syI_ zOr2aN{ssfu&H#Muw!S3v=`qZZ@|W*J3;^|#{LANl(L8XAE5ez_@DeditV8 z-tT+@kBSun`UX>nWZjh(8ri_iTfku8;Gn1i5?K$+n2QL50YH0ZQVqZ6Sw6^fFqUM=%obj-H?3Fz2f z1q99TXitnJMr^i4aMCt0r3j1@{%9%5pi?w;;(@7WBCCK<|M5++u%2Gfz=e2Wnyj15 zEhy|QI(~I74{`$Gto<9KLR;>TV}t7TTie03msTdGeFR)y#@3yj^1?whv%HHzfBG^T z5uT$Ux+NDn&lqRO0-dCQ`<8EjuKRSprH^;d^ijr?Li_WE?MbqW1YZ~c=I>?xfZVxL zbQJq(!KoN`R{ya(d;Kwh*g^{ml5=wblreMUU5P%1n%_HLT}3UnzSZJIxyahdOJY=X zmnn7NBKy{TyozQpO6_ma&~{8##%J4R3r8}+UMa+tgI4#g-cFyP7CAu=Xcj2KapS5q zC}-61AvQQ?pQ*97#*H|c+s_t)LuqXr@UI4+Ve9)HH`_k0o_8|k1afe%lmS`XIJacN zy`hv7w;8E4UQ%ILT&7Czzc!Q(dGI>30oQgH*8d1lf^2P%0rqUlc`FP`l>Hbbwn6x3 zOZ;t7A;|7)Xi(`4gEFD^D_1@q=k+BYSsWK0-b`(7pTpVQcH3{3}b zV`H(=Y@S)JJy=L8L)YxXO>#etjNmg|J*Fj_26XzD%E7F&mW;r}Bdp%vL8l%ySf8C@ zp*k!ivnH1uXFr{8lBq8!WySgWdo`i|F%A9=mW~@Iy(x!ZIQ>d>QO}rND%9q#Te_iA z%Oz0R$RxMN_MLP<4Tq5^pDR-&jZN`OxsHY->mza#QU!{ z_2>Txi{Nd{4f!3j9OcOJH|BBh9P2PFay5xPISIy8_9aGPJ}L4hbi-4UO}hb|I$By9 zz2c@?wla|^wqerHl@Yhjvs1F1I=nhkKs`9|rm<}zyG=c#>JBQoPog2xHsoSWa5)z* z=1PXZE+C9z2V>-HR%6AgB%;m0AjeqAYi%SbBcH78dp)fGRYAgCI7B7uEGC7s6{?GB zTh0v^(yGXGI+EhtLA~M*_Y$@%TLT@rJfr?7F3h4fVRfJdZlH*`vsiK|1b5`sdykqg zQ`!IP2|I>7=u)JVQ_ISuwbXsHLd<+mMbA^fzmLF;eCAt#a}|7;l` z%0oqLFX4SERBdhNGt7dQpxC{smn@TSf}@Q`imWxc4PWon{_Hz{1P03yG84GB_IVb7 zSRrmBUMWX!szkOWTrn{$x(w zwOCS*`gQ{~r}_!(Dc{dd`lEgL@$Z01EkYqa-hRi~3{?x>=)pF>nRq z?=sk!+(rX-iOl*#j)1zw7CHOG^n8|c>da-Sir3R5i4Cq+JLOEE4LL|oU8TTUqGi~7 zwl>>4oU%u!!B~11P(@r{Gb3iv^pG&TT4X*YOJ*CJ^EL*YIjvEP71`vO@EsN9?(AI0 z&}JHup;wPtnNX!GBdb484m$xD<_NTwf@3!cItxGHc*k+BtHZ3Jp0(Y;WTi{B9Ierw zvZJD~jWy^Ex>3islG$9#QPg&SG|~{-6SxO7RHX}Il`#qJ73l2da`AaA^omSxCG>u# zdHr!#V*hhqf?3~R{)$ZlW~SvxY=gh4mmHB5S|qwOnWgDV1ink_V|MF)2;fWWAdj}U z+4OMG^i=NOj8b}Fn4EhlX?|4bnrRE~*9TjE9_!H5d`PkwJ-hzB8{H2wyNL^)D;;T` zxOZJ?kmfY((7xZf_C7FH$3H`xE8E>ILrEcrIuVr35$5iDhu58>C5X${QNJo}D9*aM zob%omOY9Z`}e; z{kX(IwGJl+5akOi%cj*2xM^{EOs&PL^v;d6Pxv9dHND5 z$ouzRCcqr)9j1?rVJcA*>TM!&SxT0{{hfNfiag4?GIL{3z)neVBT#tu700~SR#BSp zFtRvRkmP(jZG3DDQ{D?QOhBo*DlDl|oP%yNHTDpp6ezpcpY>tkx?R_O$GrjGKW_-z z!qdPg4qv|jg`9COkM!-E+8U0-c$2=@x3PrKak>`c1FE1)LwhuC3%2>LCQSY6`B@;nG;=+ z_uul`LTeQsrORJ;#Vs-{8%|qD$6X_2J+U*9C9)3Jy3pZ5cz3Qv;M=M7;MFojA%n_s zTAk{Y_8ZVLugKzDu30FV77y>EY&7W-Vj4@2Q>XwC|!Dk}D~Qr5P*9opsgE)fYqWefnkQ=s(%#l{lO*>QIlZ`A$aM zmaPW84zb!nmFm~@3{uuvdmuQ3nIE|#uSC{^p2*>MJ;=(+WCvH7;?y*j;)O@cl7>JA`yyAY42K~ZLYxNB8D?NBSZqZ=$mqvxe5aIoSS0JM=sYq z*Mxt7)Eue4+t2SsLtM#x=SpX{z2)_RkqR%fS!3mZhC|PHs9I8UX<&Y||4H^P%Cb0( zmUFCB`KF2sVC~Pf(td{q%OWW-GWh3YQF+0IvWsZu;9Jp?xB91oVmThi{L3x>hr|X} zj_Vyh=3TNT1SghWi$y6_O!(Wm%Td3KVOk?5$Jl<&9{{uO7_TKFx{tc?+Pgl|EQ(^7 z$-QZJhu|dh&e#OaO_-i$7iEui7GcQUPmoO%zP{xX2QE!+H+t>nm^>$6V><^MtL|ERX7k)?QQ-M1Fi zP;N3xY6_Gt8*1F*R*E|JiAcR;zER4!@hXZnyMj=wAAHlBj*h6~JeoWj1omcfiCY*_ z_@~+b>4D865_jglBO5{Dz%H zaeptcm#vz0+KfF$L5B8evQlPtS8Mlg6cUp%wK%dfg`-z^g{iU3TqRj9oq;ciiRZ<& z@);&3S&Fw$K`zNETlp6?Awyw(7m@d=2u5$IT%j$cXCN_)pRi}jA{lIv3 z`=7>MVQ@@RSh7pv;@T!kTgZXid84NP{=J9-2V?bK+pEqGq;@D>E8htSZ8Rqx+yGzLW-VtgU%Z^1&&W+G%k~l|19#LX3~cKt8TH*#e*O z6nE)XWh;+2$vdaS6r$B#CMowbf%mU)K>s^T!@;|pP}8=6W_**{*qslqrHVuJ#N`sL z&XDPZ7Y5#MGy{K<;a$shnfr{sMK;z>#*XOz$*N5?%`aaq^52AFQy=K@DIufFw|Cq0 z!6Tm>WYoH@m3{4UO^x;P9w_&R`9Yxw&85||=DaaX#CKp%p7U@sbc3Iii!jlTD?tBR zH1o4_gOjrriF_->F(@wwrAn&+tAtDJs=Hy-9nG?s+jE#>pnui&|N1||Jo_`Lr=PgFEQ!5&XQ(<-A%aXkOXqQ4<%Qpi z<#hs#4ZPY1h?BPObXES4Ps!%xH*7MC+T#DFQ z$?CL7NWF=K6||QRdg^%%w>9h#Z`yaM9EOyuJSAt$oO(Sw^#r;Pu2DsQ($6n%55{X~ zeg`J9pJ|>{Okd#cIrLJ2+5y*KJ_p^6_4sx%QBhIVT_Ima*uSIse`nHc?l>YMBJu_@hRa z<4s4SO^@e6BA>pW=3jftcOr#w|8D2>JIY1~rv#ezK5`Z>2b28sre^U>KF`w`qLDW- zqOdswQ7RkH$(gQa%$m6O?Ug0DwBETsoMvFB5FS$W5cd!8&%81m)Ee2?IQwwZkB7OfJp2O=W43{)HCoK5H9 zHxIO|o!=Sjjm+HL?PFb8CS)H?W2qx5x`A@Bc47+V&dA&oJdk<0=FG9qNeqW9y$!rN z1b_I|TBT=C_mF9Xef+?X1=+-4MnvuzgE(b588)qNPG?|j?kBd+@2N0i9KAZ@)BkuV zOaS+l%XA9k;7FSc?fLqTmlWl>cp8ean{nnE2-6Q2WY=m-7F!!^Z}z;oPf_nlKGffn z629Pw^Y2XcADPSo%iOAksaOxp`+i_flIGEfg2{!#s)*-~muuo4_K9P)vwDD@fn2MR zzj#`%cu_So%ZB7q!H9>bSx>${znK3wC;fg_u%~#iQLday@>vR|cg?-6hqgv6I)+bb zQ;El}<m%p#z{>}N$pS9$` z>#%yhl`1@V4zXiQb{sEydNjoo*UO5CJn|tTB_`=%039#JNLTj)YaTWu&Hj|GjiuTc z=khCQW=HbVNbgVrpZgn(a+b;@`G*@sbwgfL)qI8qc9`+NiuWOAnc%1h;&Hc1{*!6Q!wjj49XiDGC|b2e@H z*XvfIMEdef?)17CN~!LWdw(AI^uBh(Pd*K-Hbi>b(Q&dzu9z5JXq8JNt*EHuII@zc z4ZetXZQohkoq?GfM{rlD1rH+}R_c!(JI1s+L7>e1xDnyhb~=t>T8@E%aeDI;e{9%K z&%oH|IhQ4#QxRfZb-)##lJW#)qHs+qJm+oe&qB)A9vA6|+d$$cu+kgSgwVQv#oB7I zcXeSiv6hss?BnH{bCEn)a9Mzgp{C?Pq5PY>9?WY|+nutezMwMq=Jo5ETx9zTGs%|F z>it8EJ0TIEkqk#Wdz|^HK-mQ!|0szcvlc%idU;pJB`d|@qi2|k9U>EL@Fe&A z<89S^PmuROpj2x`VUVNrC=?iQmMEOk6Gtr_r<;t^kav}vu6^=x8gX~g@14T`A9eS{ zr_|equu6g4hQz6h7H?vx776!W&mSLJOgrb``8@rcTCN#n*EBM~+3w6(omU8BK8sqM zHTDs3L%?N>(Cv+#y}icam(g>bU?p5sO^b@i}`@-)jPnw zCtlYuNCdRgz3_|8l52sSRX7Mh6Jtw-%RA7uSxB}WPA(IT2yD4RYGZu;u*@P^=?)D` zTo#Mm)Ys$BGE=6Qoni=Hb4?^EADu0JeS4(Z;R>ye9pb4Y#!3fpfTA>hlRqxF@Tp)j z8n&T58Bq0lSVo6ld)t>&d<{0=j}w2heUYuZvu90wB8)X0#CZg~UkVP5$2 zbalA+1uSE}2{GonR}>NU*0pHck6nvfyByjU9+_1U)J8`|MN!z*?M#6GsD49VpFZ49 z#|H4`u|i4eTqnEUVr$6;I))-!P>43w!xpSyIKbUlD%|!P848fOESKd(=fF$Gv@P@+ zpY*^@-782Nads%kzw;`E@|z5Jc4Zn-pD0IL`?V^et&cC#@^v&#&cz?SB&l+_=R6)1 zviy=kr6OHp6PM6AH<}JT>eKI?z0$B4o@ch4o@=&DOS&OTxIfs_7>vx!byph{_=X-C?`=e-#jO#{Kg+6z zNWD4E+JT*kwgaRXQs0=JDT;d5u$bSQZhzHrCZ#q{CKYI9|DF|lY{GLKSkf60o-otG z+++cCM+=|!UH!2_5seb_JH3w6vE%s0M|K1#X^=Rq#c0jKd~JlCg_6>>a-qD%g<5pZ~|`_8B$I8Rnd;_RcS43p80r z4v8%G6@6&V9gUN+;1Q{L>E{<)sF49-pKuoth%rP_?pk2AuW)+QR zoR+mb=GLI9qH@>}ex0I2J&m5_b)sZ{#l4^0we2erwuTYfuMc|J9IW)WIaoe0@ZPOh zU#7Njb%`0cx{dA%AukWq%&UCVB!wkWtq>De-8x!=?ruO1?FA+VI!a;`rpq327f^hr z*)F|4kB4^z9YBXqT+R|If{!|jud8%kCymG-Z_b@r@D#UiMbJT&@6&&v@G;K{lmHG% z^h&LN)_J|nX}(OxAu0#%a_KSD^0TUan`>0vdpKhGzgib|Sx-|+3s624A<1r0)52Ac zMcM(l({-?Vg7Po#URt#lv6UCB`9 zvx~k$K*+To_e)qITfr8K$&3i^fkCYe-+I(wP{)ea6_u_oIVQtkA^>MT!&0LaOLr8H z7f)c5!~cqHPnBUUdV6jmi=)#F8=rNyIB(p)70ygoFqBU_pJpW$eRE_9k9X+hE6~p7 z;+!eQjx<*)f=$mgx9{4AqahGKl-EI6z6fS=`is$cEBRoLFQ9q~6WD?877SQWeRECI zPx{NksrL>O(wUS~k8O}(Sjpj~P!?yK*<_aIP_`kdxKo&UI-XTX%_!L9*kV&G0-J#` z04~|5njB|gXxN+8uJ#A>Z`&W3B}D68(<9a3XJk>iz~|2rN(tDZm{oh(PYSl(kxM@w zfXdxYZnEY5B6NcTC_3@w`A1$>X0^eh^UpXvqw-&yU(*xd&jLFg*N*7Grq#Isn#oDU zSdTv_&2EoQo39sv;3fef&r!rnQg8ZLbWyM3t=)3k4U?iR1$F~bY?1gsT50L(z9mBZ z$`9HaW@Gxw6#VAr4pNOj0em~!c`exAF73m_BfyjT6B>D+5<*tm`QRwlN~IwnDj%J@ zaDZZxA1VS|;3{#taL{V$w)5f!4~KSts3+7~XSY$(sJoNk3F1l+Vw7fQu!#PBTOVl^ zpTl5hb@&DQC_ZnhEgEl%*#_w>Foe;rkw;^aYw$;%ap1ExfrBF=pl%|#0%#P(6^{7= zD#Jd{!~X{k6#pg*yvrvGe9GNZirHOa^YhQ?YFr~H;4qAG9(j_RU~S*pChOB3e1|uh~uKW4q}K)aTSBkY0i=~Ra;_fGUonr+7Pb&83xpcwc%7Onp)cCa1Bfm&P> zBY9~P>3M06)l=@P4{b)Ea@9e98f=&8SRzn++5ujnARIS7`@!j=D(%t!p)|uS_p#~8 zh`L79*B3DUybH2jhII!|Tu-}gt?pbMn!E6vCoM9~#LsljmI2BOE0U|RIgT?3S3!(d zYj7M6+KBeN@oj4FKMrV6WtwmNWjl(loghEL)p&JboTvPmjUEGXudjKY(Vsbibu9>= z%^tW>G`Gd4KCLWJ(~Q!|_s4eUgBCyf6m|KVQ+-X&NqoSQ%28FA$cb-iwKG-5RUJq_ zxwf(zOh!qbp!ucUv=Nkc8!dWOi<^=Jc13>V2*#RWyP^C(_0p*)^mnrhr#h<@nwqT6 zg3u+Zha4Z9;-REo3U?1z*c`oFw=PRqK8}WsQ6GB(gS`af31ss{RR7haFi9@MzH3U? zE-5OCUQ<@A1fG`=q)DtN^$wIHszkF|qF$QVpRWt0%9u2aN^=$ix)wREa=zGML=d9S^iD9p6;$%=j%3hOHW)>Y3xc zqgZ-(396CpQ=HwI;0ZqSN-_BSZ>l)b(K~@)ShRrwH>Y6w1A7}Bn-Z{eZDPytf1%fZ zSMY#ofiA^};C36`Iq9E4(ld)3#bmEf0lQIA;=%63j;w$lWD|8oSl`$Wc2??!yV#C+ z3Iv!>PXT4~sJhZ)(31wj+a&Xb9V&N0mLm-y(*b*==Exy1dsBME>u+jN|85_@WdSte zz%0!(@vmacUKp|)mEq7G^D5!UzT9~-9K9AF}C%R4q|-m+0jpTjQxj?{gZ%HfSt`F z#d;KW2%>4R=?`?-zDR}>h<5t)Ieb^Q@#7unEe}^`J}C1joI&Y zoqjcDf0Qx&ZDW@Dna#l^)J zoYpNv1zHdY>Rr2bv0u1gJJUh*=>8%jnjS-2JxEAAIpoTm0l4Mnb&sxlE&4 z<{YC{qpUWirYyq_*T!}=)4sV`mTlbZUBtZ;I%|oqo@*a+>A93oKd_z)cx=!t2 zY=EXmfR;0lrrq$1>zVpj%k-wZvx4d+2fpVx-@{=nSFRw@Z;6w!ob50AkTIRzQ)%5} zObRYlce0%6&Ff@K$6jrT{b=DzNH?~>Kf+$}apZTAn$TT1<40Ffh%GAC!nuoutAm~d z5s&alD?NxAn~x_Y{2)I5=ttMCM`~AjH${v4bl!BMBopMD$<=n8dqABu$Kt2q;|OTUTKu5=dCyQap%Fk@!XDJ7dbV5PCvW%ZFrV~O`_zR z&QvIi*J})KDsr$9-1cEl<$)^XRgc}o7zS))-!b`i3TEVygwWDScnQ_wNWG`f)>{48t!P)d z5H90e8TDMAGTeRVxw>xqy83wjct^L1_9a)048)l&Mwy(Bu<5s>>vu*?UoWsW-dK#- zGFmNMZdW6SXiHSC3NbA{o~V@U@q$sgQV2cob3N^rXjy!B33p4PGJJJRT!^g50qLEb z-TgXH^!c_6g5>FMNPvmGlczD3{9YYsB$#o;8HbrPkk7`1f3c2(AVOKwE_N6%dGYo+ zBc?Tyz>lm~pUVZXXxsuW@uVS)kK0lGJF+DK(`9qn zwb2k>)XvtMB;S$UV?tgqlW$lSFBc*BLbaWD+hgA209jS0EPvRq-d375?yVwGgI6GE)OsNIzmmU*3 zjfoIM0C!K}thM{eJGq2)cWXMY4X^ef(Cu?7xp!|CE;UOfdk7rA&UK^oUZ-(RUzCX3 z!DQ9i?L+vfWaxbcCo%A0TISanWT?vK#pyZH*(^~cvUbY%+X-r~)7l%P4$3jrnNi;Y6m zkYjl2uOnxv3ucQQrt(I^o8n|bNRmIC*tVygsQ{N{v1c^i!N6-C`lzE5XV`3JdIQ&iV;MtEsj=svKHsgyS3+O zLvR4wwU^6r9R$~@QGqW`4mrvsDO*h4IM&E`4za~B?G^RAD1!_6M4+IPJwJMNXujJJ z&S^NiGTkE%fPV|w@>0Z2S726m+iJft(``Pp{fWEDNU!Ia>(qsC&$28p@?liNR?9+L9aw^Hs#FU1R0MEeMmap*M|wL5F%Te=rJp|~7{U+!BY!q?$=j<-GdA zwGl+|zL>o|Agok#$DED`7jWPjKhFJ=+=b?f8VnbYq#WpuToBsg=8+KNY?Y}Tgfl_J zOkV-_Hy<522C*Yp2ZE&;spxNgM*VWsfQ zZop?WBxzf5V0jj!l@AC7J3p34j{$X`b_q%y4R;V5Z3t6KjTZk|2bS=}P&RkE@W;nF z@`;Ysf1U-6c%- z<7DVHdJ6$CWH;?EJR|UIqv8#qH^kLK8b9*TAFbe{+>M4%p83@wAMu68ICUt(%Q+4b zHNmw?;(BMOz6OP(Vx>>h-}u9254cLT6RaBbgKv1D0wcjg@;$f>4^ zko`@`YTOAwE7wus8}ow|^T0kZh+x=}(x+cpotiG^yx`jeLb+G}B<95MXP`Rz2N3S$ zH5G4+a1KB?bFEwZ(VnIEaq$L=Q8S)h8G5FzIuP4<^I$JlzxR5HU{z3 zg^$&c_Dx%F_88}QIU)PF!PnkrHaYyfXlA?PUWs+Vo-=PIzLM#U|;_9gvc#qpABNH$mFxm zw`t^G@Y2X!965pIYtmu7oFpvjxmO>8$WwX3jp7K1{ypD(u5dWyp9-AAn1SF&#B4E1 zsj-btgMkEv87r{Onh6fa2 zkXZOE$Ree5RCc#XgD>TducWl;Jq(fy%~@ZF?l~^_MmzyFA-3RB@Ex`Mcpo9(zj6m= zgK*-GlMXskvb8yTYOSQh1|-`o-uw&ij-9(L5i62P1-rPfaIt}Je$bP(vX-@k!jqKM z8%p^7nbkt>$wq6T+oXV&w7WjcWQx5(5Eym#Dr|tWecSZnD}Et$AMia%JHGD1YxUDPRt_8wnyv;nIH} zd0{N_L6kzgEOBSsk)OrNL!GIm3&XWTXwHHr^W6U9|Sd8IAd6&+JHG>xsFJ7+Vj3 zY&|{ck%R#ND|WNNa^QFyLcf){5_o=$*j~N(U!b8?mF9Si-v&!-<({)%$JnDj*t`S| z=XU_g7w13v%2fisp*>vl!uGSMoJ3>qUy9%#W20FCaY4cruOOHeaErxye(Yfuc{=cJ z;_}HzuYFK8V!i;enerjzV7rZRS_KKaQ-*Th0PH-s1p}8UlgA(aeKKw_jw@fshmfP%IZ<&62pzwoIt{$Tn zwvrnNC#0A4bobReQ2 z_0#yaTmDokz{^}@zr#>k6;;m-X>m%cYZR96|9IuDMzh<1cFxCT;}qmFgo3L#k~9jk zm3q3}KKa`F+b}NU?s5pzKu+fc*}aT&N&+{Tyi#jTZ3y&R=CnZZDK$YoxBZz^j+AUp zn`#46Fg2px{EN0yDHnbr}F<1_ulbXzil6QiOjM|%Lv(`GD5D3$VxJ@OGZY7 zRCZTdX0`@Wh%$<784WvoXJ(`_lI+6oIIrt->3cuF=l;E(=YIb9yLQF=9KsE4N@a z1^@JX#GVKi2C8VI9%hQr~R z?TS8L;IZ9GY8=W|=AAzoHeh32=TOY5ooIJc_`Mx|m z*wku*k0kC9pans`3O^vdUdri}j! z=MD)+FO@t5@y-yCRuY z{s1^bky+g8%I~UI=iXaDKFdwoFV&3lw3nsZBleyQfz!*7uJoSo-m4|^`DWV}?KJfI zQ90hk*Jp)jCXFXE`H={MAQ#(T`mlm_8UNV7M03|%ezZOXgmF!8U%DH1#9gZ>$Ci=8LWSLvVPb#&)49v}8DA*5k*I)=?()E=L!$X$Su1L9k@-;8Q(EoK{AjRvdfcBL|D{D3I_K-rW2AI zPk;SX^O2OMnYcK3(C8SoT0i7LX+*(;KB+VB9NDWCyA4Fo%!y8Ax4R|6Sloh}zhGwk zA20Mje4^@C4(4s=)n4Z+k7FEC4rhY4N$_lW5`ZsXqcH)vSprIO$CZxIq>+Ju%r(OPG_wRDs~~0#f^2{;R#enDUjW-@ih#vn>n@aEe6%^t zT;efTn{~a76uA8l-}P_s*d&ifpeMnTA~B?&%I!3BZaJ~{pwp?V%&Fn!Tcmp#?j2sf zkeIf2EC(`gy-(fQ*k8dfQ-6$CkPCOG2{uJgMC_$^)N{0%Tjh4>=u=)cCRU5o0728Y zJvDw&^(;h~&Xc*Fm2cdCZ7;cq;$SE~sYs@NByGmu*ZN0(h6P9e=1DSH&Gqb`!&OzT zjS8Itnt-zoLqHp{b=RSUJ=)Uv6A}Csaaa4hzpk1uzGJrlWBuINL5c)G>KYGr+dK|7 z|1-oM?C1&(_rvt(_i4M1+I2`Li5yIZ+q+Oid7%(Iv}pb>%U|TEbkL+)2FZT#VHwCN zwjH$7{l(@c{lAwMY^gK?$Q&cUIPrl~@nl{Y-Hq=MS8TLOGI1h!v~~mYz6;y-#$DE# z9q)YE&;5yj^ucj!yWs(7sdDQy?fiNe$`2m1fR28bNIJI(3M<+a5`+*3uMfVsLk)LN z`ovjOru(tB`XdX%uH!#W@~^-i<(#lD{67p#=0SmM1iz+T?3DybPt#D}b)}3cA^Dhy~G5^W_ zCv=nTxBhq+WJh|r*ZR>#wv<>GHMGgy;~v*>>g32WtKN1__rz>Xe>k54X(UE<4o*^6 zhC}SlR1}>P+)~86KhF5{4e6wGLA5DjQ@9`i?;@iVwb!n}ST-dS0O^CRkrf5!#yphB zxpJZMHOt}u4@pDFQhOFRn3LSmysQO?{lPD%Tp_Ur$$MfvKEfr4hoX?a!!KS8A zx7?<$_s>$3Z%Q9_Y)Zbdf73scpPP*mT3^1N&h+gWWC}& zSVkUx*c)J1zMT-j_#-6dC!XGmD@KC=PlOXLZhMNrmYe_s>47a<1jbRC2r$k|#|`@b zBs2Vf8}I+RCj8>4xG#t6myfo(?-C>_lfucsDSP$;?r5d%vodae4~jL!sqBjS*4x4UhTE!8BrOST9tq)ZuUq(hhcg6f?}g1&dF#Lf2uaP6i^51wxL$wIpY`jMgrK&T;%GSuo3ViN?l2 zY45@>l>G4ixw=rMcnwbmh6PiT5hO`!`+a0-0AqfsLX1i8sVE!)>7m zFAIv5cXyG8%sY(kaGavA&z7tCtVA23eHo9W_|1i@gLukH2>W@K>J->Fl8urrUr8a3 z6k$kBfi=Z1&o_j_o~XAo5pPrlQckIY@4={3ZsfC*?asMaeBE?lqqk>k?98=JKokgR zXyWrY2scoAHzILSwq12_p=`~&7tWQhn9q;7>{r|mrK*r!_AIw9k~FBB5itOcy_^N4 zCyE@>Kb5Mzic2*Uye%J8w+PzvMD`GV688`xr><_qKS1@hrg$RG%lyun)f&mN}St#FL ztaW&4MAe7>qjCZt83Ig(Awm#!Kd>~^1YlS;U!6PYS`lq3JTQ9pAd47olHYCpXmRRl z*`wk=TL{HC!gZX=EP!6$)q82ufT~?-nME&}DHZ_mlbI?Q7RrARMcg^O2^H_aX3zSA zogX0DVE;AN*r==(j=kNCV5pbt#EHFeEXaN4*tYUNK2aM`?g6J4g56Ra$_i(vFT~ei z2YZnA#7>jA-h}P2Ub|GI{lf4yT~{rZC|MvBGB$&dO$6+H?3LYovr%R^=xgUobLV}Q zMvQoycz6EHf}w!y+y+3QzIJ37E6=|ojdSF>M~3iab@7rMk=)k}hlH>6xpkT(J0QeN zkOTcyffwK@lry}>f0?~Hdn9O=oD`zyWLJ>PLC>;gIu>Y-s1454i90RQRzs%$MM%5` z!;F^LzCxzX3u(`Mx6PQ`scyzar;XmliP*1Mp27{pSG@2qJP51m_)4OEq{hIy%x2~@ zu&)?!Z?q@D$tl?EO8m;)OW$256<01BmZO3%Z<&1;9LWUlo|Yoo-fP3bKLL5j;tc_F z@&Pyy-*-PEj5$Wu!IpiSw4=$#IJtb@kAN)>JOBAvm7*|fT>%)=>w;dQacdETr039h z_D5a)pN&md(Y00%!y7fN2%*cXNo?Yux{IY4IY_8sZ|s3L&)4;Alj(eB}Ra~P7J zYu}%zY(K17as@J^#V^uj9N;k>zwepa6DkM-@~oEc3_&nLh2g*8z#a&Ja-`8YxD&?2`bpe(sqXgG)Q*xvS0=WZFVz}61xVC=Z>ae# z@^JAr6Ch61*gamEusNUKcO|W9Ycy$4{)hn=$L?4<#?{U=0A0hpsE@~s0mP`QS%?lC zcMgn!u){aw*lRP#-X~>w18u0b<11j#u^!)_i<x|umd|Z)1i!t z5WEjy`v|ZN5YaBqa!6xBL~bPf%4=zcP;&yL-x+?f5=zxlMI)$47h~e$??l&^8o48z zC&8&vE%^g6f(sB%a1wW%v|9B=W)z#nq*@FHbCQ+GTohC;S38fAxG_!JVPouPXO<=! zp}cY*th1pD)I%=v`lW<_rV=CD!E|5R$qY0gZzLLl&QLGe4wWHldE#yZGzHN9@2O&E zuzZzJs#l-Vu)aPE*od?b!~oACnb7{>c~EjU@;zT+dCZZA|ja| zHLv2D>g|HZ0AO@$=(drs8si401h73cWNFH`$+EL>3p)OWrFr*bV26woWA51uc#LPLZjKT)DR?FF#FFdi`Le6`?|rm7B}lNGQvf`K zj{|mZ5 zTNAnjHmG9wo}$_97Q{r|XazVO8R=HLyU0pa2Jgr};tx!X4>6^)$zba^C9p%leJ2Oj z?k>cRd(_qn$Or55Kyw`VLy!umfN)RDJRbl(X*JoErKg4)FcUm6j_uDJQ&WDYdVgsy z>{F*s4@S(y9YlUryT0LJU5xlWq!3w_HR0I_3!tkq-;yG-BZ5@z#ZU=!U%cv!{uXF8nN_W&|IFu?i59xUNe8_2p0w9A=Gt_XLnj)~LrpXV4jO=Q1ye8mT4TH~ z<7}Z3FJDNP1Sy5{^0$;Ku(p(#BNZqpAF2o(20~g8AR3tlL-)^z_&a%z8{dv#{gbXr zOm;1mx!kFLK?yO$*s;*6gqxm2k{3nf$o%WKFxk8XlR%-kp@kTD%EEfbUZv{Lco!cd z*>X)V%J~7cdl{SZvqDaOirqO~OK{mEG0m9C^R{ zSe(pcPHXLqrjJ1aApN(TLj{N$hD*pLg9jHE<8HaVw7fqJF6+~$(bGR6^n5Ph$3=`K z#!*c+&iquo4~CK19q2o)CChhsx%nR3t)ub8cL8^a>Xb52Y&*aDXDPTpOykGNQo(Pj zi6Iswth73|9C&a2)0#@-KI6k{ye&}8MVZcd0EOyJ9LdC@K@HB#MH6pB6+l7c1=dEV z(&hO-9s1VTns1i&304P!!4Qv%BpHhP@RRq)hQLg?nz+^<4CeO*`&41;lJ)DlG?b@CT}`9>0G zx~>ky1#G~7q(L-V=PwUzDhr&4x7QQ690My;S0#WB`SFXuv=?Z@FH`ew%$==)8Mw-n zEe3YfgQ9{+sir!hj2q}@;af;D1iAR~{Vuj1EXwXSvZ)N>kns7lc-&9RhcfHxkN$2o z)f_!mLb(8rS*SbFcWo6Vm-=qzfg}K8M&Q!QTxS)~SJiatT3?+7Cvwehln`g#0*YJu zB|azpcQqgSAUrt`EpBc$-wR;Vd8o728#UHr=d(&4?sQvW=B8To32E%!?(<@g7)AWL& z+%h(5{t}UbBpkZ-Szza}k*uEOK4bxZAORA07kV(f&t;_AIy17NXN#aZ{2^lA{SZ|x zUl-6^{neFq{(S!%cPn>#U@QU_swYEFjcs5uA$S9Jn9P^P$L7ad!CEfXJNYnE?!Lw) zMKXv}xo_<)UbI1um#5gxbVoG!& z8etSeLT&Xm^pTui({Hn5fgwJIYzvJQH=z;;>g0_7{QgcAVD@#Zmym5m0X(ph?~rB- zh8hz6I$2$bccgFno*M zOkn8;1mMygZsJvAGOs=|_NmQM1 z>o5%a(~5l@i!s+XYH)}Kw?pX!9v!gN0fui{7mm~*LBqWd*!`+L+{sx-tO)iYv*0Pi z)^LrNVAD!+89A`1P!58h$@IxKN%&gVE02Bnh&t%VOOG!SJG?!2rwQ#P3ROZOMCxAx ztbVTo!$$he@5n!{edE9ryN9CbZY}NE3^th`Z+;;VfN$LE*Q0?TM9gouHzrk?wGR+_ zSRfSs5tY;j*+RicxVp=ca|A9XHTok0MJVl1+&H>a2Kd$Z#WRSUwMk_sAtwQf6LMyd z=IpQKExIzfonC$#2RP(CCX%1oM^+vHgX1@iqcb2*O$`rLj3OLr&?*l~dh< zTgXu8iU>=5PyRp~MgZyt+49++H1;%95DyFfZct{#ry9r%Ps7hH|Xb_b3PFw;R^MERV>@*O06x6XVAra++i%69{+LZ7e4I0IgKjSAn|7s^YN*H`E8mI>d0 zC~R`26>`-flmwCny9&I)wFn3Akk0(b{VnQEsKMg!sr?(gJ?m31Vq0LT3o6?DZdAm< z+p~d2XcwlUL$HQ`2%}dN@RcpW{U(-fB2-L!Gz1xxpZR4g86w{ry{BBWfPBMFdn|7Y zkf~%zqets_r2VleK?>gXlS~gr zeyPp`Q7q1_J3X>IFRyo6jJVZUJf3Uq3Wm9!)fFq7Y9qWWODLXBKz(ymh9?y1r5Y61 z{vgtH7S7UM^}&8Dv}H(rg^M5afi&#%dka~@c4^b&<)ww^rayj4O;vWEXs`oZdgk;yN^H99G8|nd<4Vh4o7YoJt zZY{0Z=U`h>N|ng4`Pw>=jGR2dO|$)WX-UGZ7%8F{aW%Rs(h0hD5FX*SlF#&}k0i+J zo%~$EZXTpAR+!}QcqGQUQFbi$0(2_1pMSNHxYke~Jc^GI5|)j#sej12vOK5mOU8qp z3{~5iv(OvU44js1Q}L2noq_E}!$vH&a^9X{FGLM6)nWo6RTD5uBznO@th@*wtF+|n z-h{(T<2~cUj@S=#6~hltbY${{y)=By4^*@4Z1FO!jzh>jLVe>xO?G@u0=PO3k%ys} znCa3I)$aLWj~hg_(_{v+SEto=~cAl`o0`6P!&Tsarx%=Mc!7Ws4Q!wLG67`x{O(U$G0| zVO2Yb=nl^^bFqc-VD>~=zS#vuQTSf!kwU{7(=4IbrjeS6^MJNnrA?JVp0N1&j=^8) zGh{7*KByr8*Trakp~Qmt|LM>89Erzq9oJ6Lu^^fSAeHe>h!XV%1~ykfw91~=pN#<= zLVLk+$0kQfK~6JJ5GF@N0XC8aLnsgzXaw?W|NNpj@#DBo!hy-_y|yjv1?cuC5bC1( zGE@LL87{((x|m|&dULxxJ!8u#}-8Oa3e4<+{+Qp}2jZ>sEcR^k;OSs6cw6mP0% zyo)h46(sCwEE`cM$Z7Z?`abh^{C;L>NyuUz7MDuGQ8ju|?~ee}xj&f+%e+I6!cox# z>WqepmHnAf^-;OlHx3P`_eQR^nJgi)#K2tCF6>l2@$!u;kbTXM)essMa0x?X?vDCG zAyJ7GF9Art2AO27)YawB-_tv-4C!+*FfL!IB1OMV9&i}rTQXk# zGo@s>Py(krcUvC<&rQS)-GC>?C9$P*KOn_`XqK{;YzNqGIzV&0HwLC!fV42uEg{h9mHJ7eg#A(3CjP@RXH*`hyO z87zFl;^Tb@#5u8+lV~O->UIK`W@`3Ie>!anfZD;Jclz#N4~&liwbW?cVNm#=f#!dn ziqt||Pn8YiijgYfZ=w;wL`Sxf}gqMGXz^dC35)*UO2XHXp zos>Ih&{%Hv3})KxMB(UiuVu}*{?lT)3G3{`?bYE!Y*pFqlLL`)cpAj45RHIsNabC zUqbB)kUfY4E%xzH^(`#fX*)KE`l8UeSdK$uk3u}KH9T&fClTav&nOVh9@R(GTnf;^ z4*JnITsFJ$vJA9n^&kVu-*dt_`q(|l)0myKO}mS+_3~qboxJL;gvHvH zDA~>M&=dNkm!@CA7h}TYRJvqc6VAChePTCHF0V4UjhUb0fX8z164sB%uq5F z6(!0V_(f|PL{5=#>@5gS5rd{+zwe?J`PfvsS8Um zgRuk4?!|w@T~sS~i8eI0g$@Dd@r?ZFTL4h|9-1HUT}w~i(;p1l_T?@~Y=ne~x~4au zeufD0wJ9TAGsT@Q_=dQUj|To&^A4!~eA$U2Mw?jY<1~BNu*5rbGaf;;i0>P&4Y=3i z4~8~zQMac*kV5b3$Z}Q#6Gn4ra8|cC47|MIhxVB@y1Q>^5-m6*BNnHb!ns|skD0HY zo3woyx`^$z2srH5x)}}?FPs|nOO!CLk_0u5_^D-Gxgw~?3K1~)i)d)U!0-Nrr+}ch z_xCR!M0Hyr4q#GGgIN^TAu9E7q)#(qkgD5e2w{K|_n$ z@)aABH_#S^rRG{@jE_w=5H%Z6Ef=I}hStu>gm-Z0vj@;q0&qfP9p}(_UHBiISKc?U zu0wJIOIn7yhpcx185fWY+nUQf2(hnPjtUVs4ZXC zJoJpm1E*EvgLw5Uh+wPnjxfx6b;E*eURoRapBadcQuB|%Y|{mqwLQfg-*6!Nd62&_ql*~Q;Hy}dX_i~a@ z0LkTqqL3N=wCE96Qh{jZEB_-0Cd7oh476Q7bq}nPFK`!!=p+b#>MmXWo(A2X`8TLk zvA5&Wmc>KdQ3VYcr?bzZIS-%T-HPh@pmqyj5%%nfaLjqU-~}TH1n^@6Qw;0djfIkG zuoNwFqOh(Xms>L6VO7fPrYxv${{#){GmpL8a>7tky>}d)n(F$;{Ch3S`G&eev+Kl! z1HXb%3-Q}}NI*G^21|)m6U(EG9XX&TC`f&A?t44RtWzXRBuLIgM|2vh&C11BCe#FMUHPXxVX6qLU3(^hT|WY_{j63ihnb;+WQ1gD5^sio5he6&7WLC@yp7ZGjXXZ0d{=)hphsZ30gW{QyUw9uXsY1M#djyBf z$JW}`7c7|o!`)Z#yi&6rDtZBs{41iy3H^-8bHp>}S|i(a=<;0vBVO`0kMyMXFO)8f zD!Ox!$YDYvp|g79tMdHc()2S;3_r(-7@(xTSxC$r6PkyhH+J9IJTC$iFfQ(iJ5Q4rRZ zT^rAuM%ZqA5f#|_=d>5pq);!!AD9pz8fZOI9VT&YdN5K+kPcf_JsGrZiqksvJ+ZP4 zF<-CCp=V2bTAl;xQTo|;SjK`ST#_7+a79=#AHdGX0#+Lk81cCY5NWaa zChUBO33&8F%7Y|`V1A_~rj!LbZl1f#OQom7`9#g-Y{wRk<<6yq-(Jt1MYYaNbY-E| z?eMYUt3P&||Nhiz^yV2Q_BSl3uPtS-*UGqnWGZg1KTvR2?rTpV*0m0*-wq07a5}%h ze!M5p*z*AvKDMJ2vnuy%+V`G7AF>fFbJ7K1!_2mMB69&%PJv{h8;%1ma$?qi?MKJx zilE-mY>N)l4r17dnnW8iOs54H2u?v203gSvIHGa4|?jp)%=Dx}5{>_gsRY40tC4ki>C(D)hyVi-$;Y?^YuMj(j$DkijK4tz za>I2i)A`}@{C2+{EW@paTt{JnFH`--@_f;&9_-e^>MVF#RgrPtZh8LDP|rimmn6f} z7^{oUIxu-7Xoq9LlZhp9?{Dg;(Vp$)_}gU&r}fQ!i!otaVkSn@Ggr;52nZ&@X{?|skdR@w!i4Wu%Q4E zNVi?)(qf7UWkSqH1VHsn+`2C?e4cU^Au_k*^ETA4QWbtYS>{qvuhV6Pf|jEHi?IJvllc6&d8S zGMHYU-32;%h^Za8a0bWPA7XM82125o=`-ijnQze8QHwp5fTtDdp1H3(@(ql;ma(VJ zU>}v!7At>wLtH&nxx-1M_$N>#{b53fqu0i(Nm{^AXp2(9VLx7p8N?t?tNDaLnBQ8vCiURm^)#<#WT^N%r=M= zq95u|VUT^bKlaKI$Aq>Z=@7^xfE9XDOB*Ml_IoCL21NuY2nyRaf|)2?ZIF$B@yTzz zzHQURtOMpxl_7~|FI;Y~GaWEfFeaMSjbs%l2zou$-e5FfcJbUerdG<}pV%{oG#eM5 z28sosfpa7HOoc1-4ZMIb^T?(+ttoni2u2Z00FId#mfL&KMQOEWd3qAEt!mhhn?7+5> z0_}SGV7=;9h|rx^m&U3PuPlDMtcxWbw4!hb7v}b(cP}QJ$1Kkb>D?!DY6WtSjpdb8B*w~W3PCN4SXgveC3YJP3k4)5=quv z+S;(eM`+DQbKvRbJb7%}W#H*&HM5ADbCUf-YpW&DoM`yaj#J(GgIZ`&jlEU}AbZzDz%Z22 z9h3wssm+Ii5b6%BxeADfu!^o0gM-fAo_g-0TEq;CMH{xi{Ankb6#}a-61(xKSP=6o z)umI!@Sn9b7A1HZdNhAuJ<1P&;Ab>H3j+w)(1FUYI-Lhjd3$OWUL=))~Qo^H-3#e<&kbV}VMhJ0?)?OeVfQQ$()!_$yJMg(Kkvm^Xmb zq{7-;q0^3}+9R=>(s!W64~HbF(tL-X(T*J#}#Gb~Q#Z#J?}_ z0)y__PKy!-L{vv1k7L4W7iamUA#MlaH`eLA8N5OJ6hc9FEmKEq!-LU=@43)J+HgkL z@N;UWtxB-9qj@Bz$p+ZOjR7WiSYT^$`Fz;c+QZY#I^+D2*-5v=df4xf-lrGX+o_1i14*(Dc;l!*fm+J^YtqZ_B)_m*~Mkkrd z!08M@6<&C$6;+;rDYhh^A}UQVB)EjzC~D=-%OK)3FoFf#5Q9~wd-(GF!-yUdNKR}; z$vo`=@#)(htoBfy0r6>ma)!MH#IiFz#H5#@8X8p;?kH#Is3E2gnmECi1{iMt&%#FU zOf@;9JROAHtF@3OKH}Ffj~VMic%^j|I8hK9j-*QAL#mL=oEh62d+8_|GxE~54r7F- zW+8c@bCe@4hHC*9^YP!w!1(=#|11}|AoiD);dp#xX~`5H15p6DLifYIH_#YWTm~b? zA>DiFSj|>Mvi~!(SJ5B1&$`Yw>iPO0G#xY^q{#%@n6%4I5~P8P5{0lX+VRIvUz^CP z8Zszb)~k8UC$3`R^|QiV(~v~2-GyX^)cU%StPr`Le=7%LIUpTk*C#Qv&8ECrumBfwRDG(B-TEVNXC)rtYbk-)Ekc?mG| z(?!aOY8o|KE58@+K~17$b8*kpWDuEL-3HS2r+6&>mP{cY0SRb19sRC0N_cqUb)(qt zA2sx*FeLOrRV0yCNlw*v0^ZZ@Mm~}B$`xu1&ge^Cj+>^&fSG~MBP<-j7{P+7CkEng z@K9lFp6VzNYJ*V?P08i?w#cJgnA&SW+8`@v8QgLPIz&uhu#8o)DG()^VOr95<#Ug| zpn8Xi!~*uwt zupUa~bY~hEyWtEoNOCMYfs7(H4;6>)Di+1h(3|TDF05xSSa5Z4lCFTLdr3yf;lKE7 zysej%Ub=f=V>{m5686AqHC#;vprUaYAcUYK5PHLtX)Dm%(s$x-nh$Oqo__0zBQ6&8?NAlYy!Q3U9W@;Qn4DsP53Q`K7$FN;eN8qsmOiUyA!Gi> zcfOx|ImK>m&3C2V(2B}RK=-yzIMtThn@_hSFFw~U$X2S5WO=YXNm5@xSLXuGT$=Cv zgT$VRryBV>r?_37^Uj$!wyqRB{_H*9KlY|k_Q!sCb9=*#cF)Hp=D)KRey_O4!T%`~ z)L|R)SLsx}PLBSSN8)1rSWj<0CAa|YPW{Et@2x5KbTdt4h58a6^WuOGgZ?pcmygul zrDN&i-N?j6_;;6XBft4^>r|dmf#G@8E$nf8>)+Y1v2v1eTM|`Kb%DYSzvD3{h=1ui z`BBa5&Yr1v_GULoINqCRYIepxiwhshbhdYQ3!Xa5*xY9+8I7fJmyg|d?gopf(SZ-~ zdpi#XMDkso=yoOj!bV@J4~7eVJXWh8IXcv^m&7yOb$!JoP`zQhahXpER7m%zs3)sM zg@cH1ZaVac_}=ips@vh!`7eIxHedg^GU|OxEl%%h(jPl}N>;^{@RJrZeQ(3?m9;MZ zLhH)O6T7|V;|QCE_Klt_sAnai_7F$D>()Y!l4`Q+R3J?r)h<_7PS)tUb>@Hnv; znkT~$J6e#6r~PC=q_SPXR}s?BLz+%p2;=?hm&33Rzf3-~GyUuG?%c){%}4y4K8xqJ z=I@Yp6hTd^Mh0KS|MAQFmL$pil-Sp|m`C|~O-$JK%xams0tLxq$|`@qa}+jTX|s@p zqom`#uItUFq{ZW#m|^pmxdW2?f_nDII$VB8S|is7Sj?SkmyS++g5D~6!(2PPt@Pt< z&-cI-V5+Rn8n<8`tD0S&^Rc8~DCZ<|?pR4seW2)iJ2#xTDYyi*8gd%R>y^-QJj*WE!O!pYFacTNgVY=Cd=&12-cK6^G|7L*zU)Nk2Qt z2{N{trRh>1)Dt1UJRwKglIxuC%D<09xk);X?OZ=`u8mIA`y3adZFKB)RsD73s+8CyTaqpEO1my zJUNv5y7BKJf^JXk?HlQ+FHk5v-xwc3QkKPI*PV+MO(L|%p}AlLhKzh{Znw`YJdUc& zH>Xry++z_8Y`fHKxGtzLf%)|mrE)FLzK!2_us{5j>Vxc=<~aqm$BNLgn+>dqonluf zx=wxX$k>tW*kthcml@B_Sl!$ln7O_dr5ot1Bs9WY!<{`xZU=2$f3ush8;0jY>9v*m z&iC$a#wYfyFXjnfd4WRCF=pGUZTTu5i(lnQ>&H=ngwcOaQ2LMz?Nd1DZ;E^012gsN zV5SaFi{D7WiLmUEpo5+yW5vrrhnE@m(M}S%FZ)5CWQ+~SoVV(GQLvvK{XIV!!F}xZ zi0#iOcXo$IoIEUxJK4pu{@23M$(%^6|0{VAS;5I@YnknUlac;1Awl}t>t*O<>ZG6N z?sq)-z54aQ`eJ+-;bhpmEjz(hbPqT7udn~wNjRAWjR>7#;O$#=y*lS!^cz?*>QJkT zxWUbYw1xM!zt-QKyo+he6Mt0$OjgT7K**vBf|eoYvx18xWQ$He*Wp8R*G!74ebz1J z%}_XmV=@Al{nyo^1u4w8&oJsesOOm6fy+Vb-+2lvQMo*LbV>>x4@2J`l9|4{6BH(F zN4BcW#{vbW_ey)$6^2I%6z1k;;hUMLl05@m#iP^dkP*35uo~QK>KQ3gf^!K`@YGs2 zE%d~5`S@7&y%F{?T-xYd$SA&@KM&&%W6|9EkIhG6xY8)FfakLG^w$kj=w)QYmg&x} zt-rw={_+v^m;Tv@8P4`LxRX3896~=*4AGMv^X%~QvDE9w!aIo6zkkN^Vo;APB_vI@v@?Xz|Uh~!^?XOHEIl?7@lay?E&u%ovk$>mPg|FMzzoP`Q zfA4Ggt=@~3liZwKMJlAtWRL|f2}UpM(tT&o{~|J=VpLo7sZ9IwERA^T<1@Jb)kYAO`GMB$Dsw{-#hJp$t^8&7$bdM#Ok^S`my z@{g?(hhv!y6d7NSQdEUd5a2elGATWL#dj(D%DSN#0j-FCBSHVPDyYXV;iJ_0r-UO> z3O_DaP%7z2A9B!`ha`Qfo8i1_w%L?J@?inV%2nezq^MwLCZD%nb{o%E4= zAKPBiFK}(#LOhwE*2kD|Tj0RCsL|b40q*1;nEhAV9Q8skP3@&w$xxHRJbqmTJ|N{7 zdi%tFU0lL=AvROpYWy|M8oBYOe(T?1+ylnSViOzVRgQcW%Y?7|>j!2@1qb#~TeheOCZHk}R7U<)+-hI+>DToBNSj?J<@xh~x|xEXBv z=mR1t_TTBE!9IUc4LQn}gJdtfpyMptXJvV3#zCik6Qi69jG>ecx7Qc*92WDSEzG8D z{p0@dfU=ZT^B0@Jj_&rIk0iB0WxCtKtL69d&CYYD%*C(`?ws-eK0TUucxccgS5Gh(0pPjr$L zKM)C+OwbH0e+0UFtDB=h(A4I>w-5jSb1Kf`9T}2VwUIl`;;($NodM?St=?ZF1u8`6 zvYieObI+=Q$TkW>*x~E@=cfvAn9Rw2Pt&ppaG}WqsPnF)44Sgl!0l%=ULXp~PwW&c zY~nX}L;xM9JI@VxZITQ$4!m6qXixv#Lpzar?-wwVc>(1;8Sf|$a{_e=E`3hDdT({z zb%5&xdwv*q`5x)yxLlCP7IFvPd=H`}p>a8U{X0jIJ-_gZXG93u0yfii?Yv8l?D@85 z)v`4O3NFWv-&q%sqgtSZ)szBcQ@a#AbYaqUWK}DS+fs*F-+P+;7K>HGvKQ}3czzYf zoBOWl!B7ci!+gg$=;YM!SzWSG*@9}=01Pq}LSMuPuxn!gdN=_lV`ux@cf`H;%mWgA zuPZPT!tE0fs9MP-PFKZ~aepx{0BBwf#yUCt-oTP!-bUkgfBk1y zAuyj(9OlgfHTF+zIJ~~eizh&|A773zmL8t}FU|}0ZS|6-Q3lXNBY+vluafUPRR+fW z#4*O&RR|6v-ycmmsx=4`C9_>d)eK8Ka?{Uby*up$ZPQM+?x<5X-Yx<9nhjz2te&ws zyO@apOuz`p6Nk2gC;(SJML*ha6A~$EtZ#f07@<}$P*1R~J>Bs1pm;Dk*QcQSMVwje zg1>#6xb3r2Oa%F?(Uu13~d9pbPcQE3k1j0JlHZ<$dy9TDkVBGdBt&on_@Y_MN@1o2t!C-rr0? zS`)qi@<*#)mHR8}fg;sI*bhJc_@Mc1`FqdDc0)Cd=#=q;AQki>ZsA52z41xS*5>OL z=LQ$3A60FQy`Qt^Ol7RXdX_dF0~_YM#GgD5_wDFchU|KjSPbJwBA}~-m*Pn3Z;1G{ z>FMKWsS%N_4yK1ney@jGuz=>n1J0AMK$FB_g0CLL9MADENfmRdfJoVQ74LX2-6)57 zf+Nsxmcus#c8azw$d-2yDG6)7#=GfW7|CS`9eA=Pg4zii*iXIRCo@Y55}1xcCP2+` z;Y!51q1^|EPDkhVbUQ3A^|Q6j`r^pY;x<%MJKS*gB%_Qo{kym*Se*G!{ydk;N&j6Q zSN`Vsd%+QVlRYZ8qujbv02)C&L*f;YCx98kfPC)0&SM?*X@`5w>$+Z}+&9xg?!RU}YrFidoLx@VZ z`-fe(Mz21n@ zK{}Zy?T`+BEr0ztw=G5K;Eqp929QHFzi({#>uzx1Zs@g{jrbZm9lKs}tNehHy0EBG zj;cV|^yNo9R-ZX&J($GEAZ!hXOZ#N6ynw-A5HTJ@PB!WCw-y(GS=6V>QW%7KirmtG z@~8>peYxeXPF-%>N?s)fJzQ0dA|?e*^ABK%zNuQY$ny-;PJJhcQ?Wm<7pAx;gW`Yk z0Lt?5ZlFcgx^<%bH4#N)5pqMr+T;@mM|C zw)qgFB-tVE%-$&!pG=z;!Cc-EXrXoPeI#m}R}GfH62i60#?n7CbvjRuQVh>9NWn5C z#MqE$#OGijB3k|^z;FNk^63@-yn+g>unL;48V=dTa<|C%y25kenUQC$`PT&Xf8beF z+3=5jR}HWH=oh7=-!1!}9UCb)j1{tStwH4{gkUu-`@v zAmp4mkU^FCslG?qJNs?m=9jb#KMEueTA%5zfz@8_Kb7>6QH+frHc~*RvSv^k zFGDHp^ZM88Rb(e%z;$$@KTLfnkD#DbT(Rz3cd-0c!3xxV)ZL4f@0|Wl`_RXz-(;0+e z-K9UP+Gm5H^(V%*%;iOcaO&ig=1BW~l&zII$D!EnfL)vFC5A63+=4k7XDqA_V771{ zH%RVHraBoU!GaRekiSyN;bCgxK=zeMBjGA^w?a0w@Scz1774zZ2fL^SVdp4Jw2|_O zra(T1ix6Z`yrdfBxe08Rk@v#FC+-Q#4BrG^O_uk(DB z1KFaWv$YzU6jMaUlggnIJOZN{i^H_LAqz_a1EclgWO2FykCm<5I~u|%eE7#HeE&D6 zkme(@d8D*{BP~7B19Q!6Gm^#M$W(odOQa?S+DuL{u;}f?IFil5nP^y9XONU`?S99vmW10M6KI&nVA9(5YlD+S&ajZ7ERBU0|-u z4uilQR&l-6_9hav;kb7Y1D));PT6K!Ik^#Uy&uoG2%!h^$ML(#ltiGL&Y%$5i+5J_ z;@x7mP^fVQc*^3*EY96lpjulZ&7+cL!57anUu0iEMC% z%Dw+iz`D2|9QH2yNp+;n0S4Aqj+ThrJtnK=_*xbwtB~h=R(bb*AB?}6y6 zwWi!LSrhDn?H)@CL8_a4j$?zNxSdpg#?9AS0=UzS^R=MISyH7>bME(#R5E&+V`nZ- z556TNFxm;%DGz>6!||MlhR<0FWlI<~=>jusw?%2DG{NvYr>aRWD4mkM4bnIRsh<@H zaHZy+?m4(xai3V@4X|I&A$%J9IPC`(UNJShL4#otn)i}n=uF2GR>dttOv6?8*mvGY z;fuksEVzWr8BNGiL!Yj*=k&*jCZ6H>3-@N$RtDB;f~EWKXK8WKKZ6F;mUP4YM@s2L zACkjdjo-eKFzGk4L4~^!HJ#;l+?^CVGHa(BYH-kN@sgn4i%0{#?071M0=Q7p3T~JY zRH#V4!$9*i4Cjda_}(|X*Iloi5wCTWv8g(!BrYiTGLXlr;lWS;YfN3a_A$-LE(|4= zKRCoVXIl{z$8fc+8zB4zY`2C<=RV^u7NIuEBdaMtIWY597f*W`$jC`of^NxU+h$_ZFv&2U~-h5qgtYPgEAcY{haC6H$>!Z%8iA2kDObU*)k1_YipH5swUK*p>V;*4Ow@gCPTXW@)A*3B z+VfbZ33LV}fvcd76|EVURIUw|{$e(J-?^Bb#ZZN9qe;-8x0IYC8_1q?fqiAx*$j?E z#BaL$aw-*c&Nm3CSVI$?3rzUiJS68M4O5?9IMBxI)_QnAkioZ!O1YNoSp9AA8$23+ zL+_XT>!J5`9;;Y7A7-c}4@t|FeSa+N6c6x`h{_xUybQf8>gy>47d`=$YpLbAD#v2F zS&7khDTi$=FPJA|VZa>RwahkrMNmho=YBhkAs&U*3DzB>tGBhVVWH3CHBF)$^1Fg^ z1b+GLzK>#A0dh#ueXdi{eGFo_kAd{OcOXxV*xzwv{(y+HXQ;QeG4CKdp7(B~RaP;~ z5*&qyAO;%8mT$Pi@R%Dt=9-g0C5eXXvs7P{MLl!7AL+VB=SsVtK@IScF6xw|ScTs2 z&bw%=;-*84Q8uC&R#x^8ql^6OM-}R!> z_wtZGEr?-e%()za0uE+rg&07SXm9&h@~j{<$dU;;SNt5!HZ{SOSbE zt9{_&r?zD|)w-P<10t>p`Zg)DP#`EKjvQ4Uya$&65gyHY!u&-_W-`z-PyEB~u<=U*aYsiv8(A9!P za6h}?=@KW4Uvx*yv_t|Zjl)HB=9^VGPe6m0!<}u?GILXXJvA(64Udrl>o^QL5ILe( z&9h*hjT$hTcPUm;s&Y+1e8RE7*r2iYjw#>f*@8n9`5V4a-Z06~_ZL&)rr=pC&PBMW zG8BTfL)#M|%2tIaYL~)r&Z`|^k~tfjM_|sh>_xGR8R-G9*XUNkknf~CB@e-NE{h;n z#hki^HrnJ6Kpo+LQH9#|$qtmi1%>s~wKJJ*+Kxy~(c%TBMioW1lf2T^Lru< zW4lS*IcCAS?@KT`So&>IT!i|r8;O_}NDg1bl^VX7YM9)b;i~Ld zKi<19-)CCZlZ-`hc;XVOMenflsthTI*~VP2ZN@&zfvn}tPIN~!NveWP;JDfN?AWml zPfMz;47w4B1qdANA05XWS^Ex=WG8UWkKtx19)@_p0mxrxhXIkLqJ{CT;#Vbf(})gK z>(uXXoBHjhJaBB9-iU>QhUL{vixv#MYr1edsYm7TNwOnYd0U=A@YvHyh*A?`0~u@q zUoec9)YeySc@<|0w7hu17{~rMhF7L~A7l$UR3a+Zrymip%d^gqUq-(>xHaz^9qj_T zE&J?e+7s^&kYD^jWc&v*CU@BerH|8wp+_nvca z=kocyUa#l#`B={m{r6IQn8iqi6xE&z)o{`PrLemb(B`^+e`I=sEOIBG+#`Fc{^r}0 zrX=QZs-+}1$<0G)6LAoqAo?BJw3Kr9V=th|13-oW@E98|wc{MQ!3P=8VGQgtXc^*; zm4ID;o{tN~uz`;{0Qxt}o@a1D+plZ1i@? zVPn>;=8qjhZh8tnnA`W*DFP?7JuglV%U)L;-K(%ERY5pQ*$?|AefGFrB?IcE$$eNmL`-p~}Zm7>2R z`_iZQ{*Y`w&9!~qsKJ#4=ifdtBxn-oyV>gdfrAM0^%5TWp*8-6lV)dEBZFZgGz#Gm zWksIhq__lYaSbkZ_)}4~>IP!2pNb9vYL87Ax+x%vYGS|RYHvHk+ zU4N`l_yNUpCX*MgE~~fG9qm-Y7a?yY0mi{MP*^IKLZF~ufeZ!F%~(K#9J-@nY%2L@ z@T)m{vDfgwj-}45BIOXEQC&2)0v(%Lc6=Yt& zHW3UK53lnN)M=vUgWw@z<>3TGh5qd`G=CP^FuAO zq|^PzvI%)}{4;Z&p+uTsH(bSz_nH7oa;rvrNnvd$arb_G-}RTZ!lIox_$p z*=*9`sQr$9lM0@2m=R9p3+<-|DE;R5?z;V|&P|U`eIch~Rp>AFN_3z*lLKkxauT{{ z%%PsJUk~+L3jTSZk#`}IUD@f!UDJdb_>9fsnNi6t@Jo+eG}Hmrm`+Ufd5Qvlc)_Lr zeZhO>fAQZ9r)h{D{)m$1wy%W1e?8d0B?x-Y6C&8{&c&W?d^?%h1hC9xOt2)-#-zoN z=6g6wXmR2RuXBQ^Rzgh=&8brYp(+TDPwcgD(t3(xlbf~{!`idZb^y2sGA+L+J>|9a zgijCW^9vwK)`u97*;Ldj!bX<_#Ft>Cgc-@(11XihyUHKP6&uO(>o;7QQT6VR*@rfl zUn_lXDS^RGP;dFT>0??@C|sMWc8CLH87Fn(RQm+az_`8ahU7!YUqA8t^e_d87JZh+ zw?qipWSrw659%^S0fZL7_+n-`FrF1hOx)xC{dtb{mK{8xy`>P=A!*#;p69}Pi#0tv zc*LPhC4!YOSzdqDbguvP#`q5}A>APd0)}Dq(nxY!Ajc21Z5NfQPBufh66slHgC8h} zFRDQLUq}4?I)|Z4h{o>Xy%QdL=v?klEDQpObm{{N9zZnB;3`#z91KUA83uH9${|HO zcBsCvTTJv+%~c3jn5z_g{tqw7ACz|???Q6Z9n6Q-@!F?lrU|uco;-S_+-P#$RT1-q z8jvQoA3rcRu+{Sq=$O&LXh;YMS0@ zuQ%QsCs_vYy@25bEgGfFWVhl3pIn|VLs?p0!`(|WjX*Ea+kB{u|*AS5$&jEK0E zt0VH44f%k4HB4ANkcctAL^oM8<|p+g5@XoT=GM%Ow4?$d1*M%87}m88(Q1;VKcG-&wQr$g=|DQGmIppv1FH-W-NiH=}L$ghf@^b7k%tCwQ`xJMa#a;YOMbkR8 za23H-b~qUi;)y$;FA4PT;?a2of{lY)nbFDfp2w168*7r#x4#x|%)YV&RMP1eK7e5( zX)!KNKl~c&h|N`n&9hG*)&!{#=R?z}NWeZN8}P6ZR)SXGKLKRtrA4=L3{jN^z>6A} z8(C!xSoHlqd&aNwvi;RWK`NT?=9{RC#D_su(4l-rQ6NtgBRw-NuDRW)J@OO~R;hvb z0)}*XpVEVJg@qj?(}s#sJ=#z*7^=n%2;jK#2V^2M+lr8mSpz-MQA}dvd_)H82cP z(ZfDNV{IJr-nSmCXeOWGhD{~z<^r7mFLg~IOWctdv}#m9MQDYgr?OdOmGycVGYTJ- zTtW?^+fbubu#wQ%9r8$9?^tf%t;Ke6^4)wgulQ2F)agy7zZQdK*I zkzanBHJREu!9Jql0NBeibmu^kp(CsG0^iH|yE$*#iw*YYj*Wq%!f~lK>%wYuvf}rpBu_Z!FC9kS zOZQ})v1o31VqbGyzo4H{MoFD803O?wg8#rC9c2oY^9MiHpN+~On~|>oKveh1n}n;G za=sd-zqNZNxm)A4mwQu1oeWYV^EHuU{=QIqP=o6>bTgOT`t#=`7Z1+FCAK`|=dr`S zI1m5xp)a2~?;LUG2JObcddo4BC`2yik%Rgc43A9#CV{7Gu*%9EIp{K0ZO2$;U9;)? zS?#mA4=v0*-<))_VwSB_NsYQ1AQC{ZGQCD`hrzWQ7x_>= z|0<;^6Kc{dLyRH0#bLAAb-bqVv_T4NHJGgNU=ReYPgeD=5)Gy^lRsSM=J{Et)eEQyHesiW^%Thqc*uuCKc`sYbWWUX_)iP)_zCPrt1RoT zkin*7n|v$Q<+V6FN$^ncT6Cp~`}9*?UYC$Hn`ocS^)5I~=p=RU$Wc)_!L*8X+kGBFI8S%LkD zd?*V-4?4jIv4eKH_{Ky7iv_hjOu@|ci0@Vhk}SnFrZ zTl^u2goA`^ev0K{@6@$LX})-bsvkK1pYr2tQX9lBmbHBK0%#i&=fwx7+S*B%x>VSW z?0aT6-am<|WKsS{trsl`=$9nN6qWCNk3iD-z<1v9Ja*&LuM6o0&+oQZkFgi!PT1`z}V>( zA

osFzB&k>HjL667ce?^A7duMlo|eiZ01V0(n}_Ra~?K&OGIu#0%^#vXaw8#<0w zZej+x%M0Mo&h!w&{r;dS{sulKL7-H%2ItMLs-0m=V*{Om2DJZ+4%5ZuFx-X772Ov9 z+N^7YA>`)&N3rQREM$Z@^Q=q-JW7jOJmfYME5wQbqM zrO1b^=|*E#)q4?w3=nxAy}|})q2J8_48>lz_*|mP3lIu~_k6MSGq4%vd3|>2G5QZP{)^O;Jc@w_&ky_zWrBZrw?C@qOnrc1 zJ!;=WY6fRzPBFvJqz3Q)`@ld^pHosJ3_zgp^8dY#ugEv1o32A3*IB#$9*v;(RW>daHKA?~}8?i-=`ir_igT&vIAXAF|8wz%Y{p-0_+9u6fVwC@-6SYOf2z z($Kr6vVPHZOYsQ&cv&Lo_hQf&NQm`BJr~^?ZfbI-D+_qM|&<}}LpAcg0cQB;j)lR|MqOMQ1 z$9Xbt!$Z?Gs5;FQl|1hU`B#XbvBqsyY5idn!yV4xuevWGN+NF3Fece<8cl7Poel^{ z(ho$%=2Ct_++r$oZ`%pDiwB3GA+P{5fYS%F2U4KSe=Gto^5IK(ruBf5|*F}rez z88~&^rqQjp_Z>C2`#ak>c>+HB390>okR7oGZGonYxa*~pod8yp8)9)ME0g%{e2j_w z1VYRnSP{k7Kusb7Vcz`cbT>yG%kp}+Sy#Sy#570%142xL;xu?6)hCWFL>x}3bi12? z>&^G9VK>>2Ve00~17#d@q2G;}z_!gI2+fJITDDfdv9AUHV{+qFpbtz8a`0q%{eW_W zc3bQkI9F!h!N&Uw+YeT|&genwE4#-ZGYBZS^pi>kLA*8wChWmDFF@&dt^g54cd8-2 z=~QZi;!^r&4hj~!=rRneyfVxon@Vc;Po9fAc(-A-aG?lh^fShPU{jnY%(Z=h)Y+O= zTH|pe9Oay;m6&l5VpUMC97%1rhdeh0^?|8p&;w#mAl?R8=l>Ilh0wLBDlb)yvl92a zqfp;%L((m-JwRDfvq`L;g9zWBc*VFb6Ap~bchIMpLyZqJ;}n2TK;XHQ zekx!U^Bns|Aa@QX#;+(Zh-3>4y23WI*t2jqf(H0Id0{5I@p$}gGOU}E|j~ze91zCdc*68jCP4Q}hmAV|T?0I%UPx0=NLeXDCfGiU%X;d)5aa6k5^@hkB!v}ZP!hN2Bbnop zQUtU!`M@Qe=Zet@YK2vGs{oY<*dbSy#}K6C#4+1e3B6SbUqNATT&B)b+`T}EmT>}B)SSFCsM`&FpAc*guHXL# zWNZouV;z1bHMN1dRgVH`5R;zX(v=r8L3`Tm%jUjL6VFSK zMWVVJH2?3A7cGGdd28yuuy_^e!>Ui;KZF_Hs5Pz=S}kDt4CvTBb?p4pIuv+kD)d<| z_V&xtrAIIKop_*CctWtR{~A=Pqod%rS`WvCC=Rc}CHO6^V?zn-dQ#7$;0K(c=-A}d z8Oz#Bd%%#?wYY1@E->(G#e-IToN4_-VQh-5p92dnnv-~!wc>KiK9huwJLI< zkkdS=)v#jq{?L-pq~|R=?q^LUp%lv*D|`1b6L_b zdrYwI#<^D)=ia23_6+_oNN4p|1cC~I>ws6jr294ABk;uK%{xj_ss&UtN5GqU;;Cg3 zz`9PQTHwx*wyZ;6wF)%5TzbCnc#SQWhMpKmp4ZB<#QnlS%Cwe@^VnnO1*oKFmB^y* zrL!%MMh9FMzu4Psn^BMnKas=p@Kxamw1*73sm^uU1a_=6TCrOR2mBRE@w_4S?l89^ z3Y`ZU`VvP{<+CDr7I|u_Tbc%?1{!^ug>KeDzKrK`m{i{14?ooanwFst6oTM!piy1_ z1Dh6VJQgo$dM!f7Fyi?_7}y^&2WSKD1}E@b)H#9w$vY4_7smHl{xqOlX7ToK) z1du1I7Wa2TL&^{P8>3XPT6V>Ia3a$HU(PacN@?f(0uPt*iytLadrx3?y0pJWc(&;Z zSEo1Fey~wx+ADeb2{n+5V=SwgMPA9h-R4IY8r6Gk6hdh4yL~?djmGmA5lnO&dCua9Jt+1MnWcMKx$nF z`m{?5v+lNNrdR`9Cwi*!ODDLGXod4=f(&sHGAW-QC&}PVWI)A=%_uwS$nJcL9j}0` z-p#|@_rf)D|CMKQEg{wR&mtQd)L2G^B#Z z=9i@eWOF3w-oB-}KL`^`Uq2RZ&-Ry-QIjoFYH1bxDF~q`zx(?@LByl!Rm+XdzYet6 zk(@gc;6Vy87Q=Das+e4z;HQpd_^VA+VL^nKi^b}*0tj7gE}Fn95ZKY-jQ51$V~MB~pd+%m0qPJrq$I7YpUV|~(# zh4IXeD!70Rpmi{m74DT8Rn!p6)lM2-H@C|fd}@b-=}!uuQ-KRV=IIW>*k#@~0U+u6 zK{o%{&{5ob0eeDF{~?EGJqS*2nBIbx>Jt7LThvs_$8zJLUdFO(d0{mnOM%l6xA-8k z_c250o*tG+m-Q_AF>}7cD2XET@TUit;<3@hh`R@IVGcznYv;%hf3C6vR=NNp&K^7s z%m(tmmZ-B!2i7EZo5gbxRZHZ|r`~-2M0(07?uJFmyab2q){y8yQRyN;l3_%n;Bhpp z57lO1AUOM!$8P&ns9K3$q4$~Hpf4~9%6cG#{O-!&R`IFm2J0OaI}BPL8u0sTEs(kQ zT-H|wHL%&y2~D3!yK0K{40k$c>v9tYLtu1je+60Ly$98jp~Oc+Itp)l1~(!BA#tVH zUbU!#%_7zgV^w)IA>=fVvvXA2nX^<~sX|4&oWKlQ|4xsv>S?*Gw*KZHJO2BG_ zW6ScOq*G@+e&USP{b2|Oz47yBF}(D+VpsF-cjxRR%X1M~P?-7z5Q!ru;i8tU&B>ys zBaQDV)-#LNoh=TZl-fcCNR=RKYSTOk;uj#%PZ-* z2HS3$SnCnxIK`13$>l@w<-2cA-YG&qbxeDcW_|Mh;UPWrXiDniNqh{^O_*^YQ^euS z>C;Gx*?D^PJ+E}#kmX5Lb0!|5$mEWpu1@(|ksiq$BpEX6a6g=fk9vRN+`5f)XRI%- zj#Ix{-ao*S`t?c`~(za%;@2{OVidw;z4-%lb%x>R4*E7Psx9b zEz%na#s4vOYCjaW8HWJkX%n)p+wT0M-@J3Wew-9zBvme_v=ycPp5nUe;p6gp$E$L$ z%fn#&DH;)Bb?d$j$^}L%gzCc%^2vYh2E`UXY}y&}b%41&Ob!416*<>3cpqM*@NR=S z$t2)%kBf@yv4g0c!H4WsBEPMf1t&ocu}gpdvFCfOh(ZsVa^R%9^c8@*L|aCDn=fZ) zTp~$1quY^r$Jh(?lG9oud%UAi!V;*^7gE`q&g`TS~A^+z5n@{-|W0p%w zx0L`xok@?Jw%yQt1?nKVsdCF#t={V+q8pXnBg*%ZU;Ew~mn0&5$D>l2kYjDm@q^4m zA_vWMvG?PXY>EV_TLN>ZM$dM0tWdi9_I-SeC&)RjKaFa}tI%F3T)DfS@FqzhtFg_K z4`uoaWRu)xuF3KJ zSfwTU>v3g69N#v;_p9&769<~SSMxRMQ6PR4PX3B`wZnbsP85n%1*?;q>tUeO)l zfOO`!DZhA_zBlGR;OhSpzl{3p`}t=g5933nE@|dq#sOF?S7R!rzS%6i__#U^x1S6D zzloXK6OBGj?G*_^d13-F)&NP?C2r}luI;RK#RCj$;v|G_OYC)D!~%{ScMZteaH}m4 zJZ3)qZICr)9O=$Neqp?%+^#RR{zbTr3w7415~?k{wL*Egnj~sX!w$6}$;!-rspGI{ zO;#ovj9S@x5u9O{(!;S^*&sggJ>oWtY}{_~5(-fQ8TNT6im|qwvkr+aP1wPg^EkHM zpa)9xVbR_Z`1oU#31@?H0l##r5HF$n6{&oSc{WXij#Tt)I3d#iO{c5nQ`1v=v5lOo zrrC!^tq;VA$tzwTVCO(}P3vJFs52;>Hzc z|B0AWH~pwy5gpP%9lQkFU2l1hhZA@{;W>QUvHSyKokguh^_#XkC@Z!omXFhy{CY0& z*0w3+H*D`6@pA^LY*^N!R@W&X>x~^*=Gi9b-6!a2sA?s@OZ7itFrNh!?Q$BIqCn^$ zI^-!qhPj_1$rlNJx;Fm$Xy8SfW}}^re(x&}ECf2LN0#_Bj+V1BJ0u$4(%N=WKo95F z1Ak;l-uZ?=e<)gPIMAtaw$QltrtwZ*4)@KdYfWpvSkj)A94HR$Ck!SbK>@B;dog5_ zSGzXbcW*ka(!Kk1_}xcR%k|k-v-W(~>zx=Z6{=V}o8gCxv9Uz12 zF5Ww8HdrrE-TdU9Gx}B*HyE#S6A_z<{As8kXi%KsWs^ye+IR(s2o_M+C&aPme*Ks0gD&WE=I)Z$VeB`>rDCo-nx`cmHK{I1%>N8K5_)mrPDpI> z{08f8mp5*j6384SAUiPOq#9h@x@-Pa~huCN}*A>^m6-Mw?F6yPUSMbqsUV=CEZdu zOOKKN*BBlNFH|D8n2jeEFmcQ^cP9^^)k4*pS&D2i5gIAc2~9fel?I}uV&I>Q=ca`|2thk8=umYElf>`wURP1%<$LI%EzS^Xstbj$B_k3*C<#Ds2AdWMQQrM&-TOp-kzx6S0l*bOTkm!ihh16;i zvWUoEu1CD1r|&Sp&1w#-_JcO(oy_X-{Y)W|vLGadsGQADFJsbb>Xy5j-Wh18F(?I3 zB1&5S@m^P~$T>Q8_m3#b|7oN^cZGn|K0J1iDOu-wr(1N}*SAmf1$IHw;^fSCgQ&uU z=7{?O&(wPjG?YGHclF?Y5j-UpkvtpU+jRqFqmhO?h{#v3g&waA9%hm?Yd6)gUL@ zSM&@H?|rCK;(wul$~NiBT)*UVXIgX%7@2Nk&awmfF;|cGrtYx(tf2l;%k8e`1b?eI zmguZ;?eOsZSwZJHH7dL&<>L8)Y2|1xn`tInHzBQ?-Q=@!&P%qluQfwe#JeM4x6_9k z=EevN@1>66q9I-o)5E1}3e3fhnftxJ{-wGrkZ8ewc-FJ(Z3t_heQq#6Xm_sZunpk@ zbe13K6qJKNKUGCq?2R79!NTJYpmbj;aBwk>mKxi%TMQ=LS_dnj;k|g>0h( z0Q04p zhSU9v&?(9$46Dr#gS0nx`>bg}CF=Aatdo9@1E_pvux-Aj2-@v{Oe!H+t>Nothf$iQ z5`Q*4tF?^h72>2_4hOiR-ixb+(9SR*mbX1pWq~ZzS@gkSSpHCKCekvoNcxhyKIErfL>Y zMX3TCr}0Eh1A7ZkFzzh^Qj)h>vT2Z3QV{;Bvlgvh%n*yuUjc!b+aw1Qg-87RfvWh2 z#CGBv$o$f2o6_>Hi^+}^hHwzeKNa=21)`ezo;R)a!p-9;CK5EkWv+3g5+Xc{xZ^3- zU#w|vTf^{oeSliPvC<+o*?PuSY@C%w(YC$iTHXbV$EY07FEE1%__NkZvxocv0^dcs zTh(FsQmlr6fjEZT|8g9QwVw8kJ}}e8EIhW-S(#z)%(Hhs`F|oJ{^1fnp60K>R$s_G z>%fDs`@2@JL6e#C=C;l_&B?Pp^vTuI%~2PKO?~tQ5<@^!bmJo^kK!ag2?A)IjqxVC zT@#z!0tAK;Awc7kQ|*HXC)7Vy>Dco`Fp?(JfRxFYqMTp$Yi3927#@tWpB(YxWz_mG zR?pqtw~s!(CNjih*RaVNb{EaHQiwJ;dQ~kJb1txa@wOf6TboJY_4P61ka;)42rh2t zmB>gR4*M-O8f_lkso2?!jr|MTOR&%{9&9+bLq813rw6SH>KGkZ5(4HW$Hj*tBlKVv z3{PhfbJ1g^Z`|xeZ9GCy#^-LcGxa9yM)V%(vsPSS%XEarSB*_vjIueuu!_ ztKdHR!hkherz99A;k$)mPQ4J<=Y}V+>&)~uda85E0X(cGu5;U7Ak`u!G`3(Jv-(5+ zJ=FDW42D(g*xk0wfhtl{uvE0$Jrcr)mcW;>Uh4H#&NB}+GyxiY#9Odep1Xc<_5+>Z zqP*MfpNtRqk5MLpqytQj#4_{45OxKd*PdWl2h!&g9nHU}3bl_+J)vWU&)f=D09dW( z-&Usjxrutz5qO^sxvnE0eO}6jnAIfQJ3Vm7^`d701Zg>o`JLsSjbS*Y@m zxR+cgdk>(D`J5)`eJk0!UJ{;vCiSsG_{nXKp9a8D)Qg7o`Nm6M;thqt@vqLO1_Xc- zj5H`!t}FJKldn7M8ks;WF?CedB>6U(Es+TV@o(CB1gXNHn!VqOE0@?xJg>{cU@4^Z)+YlqmX^yLa+D(048Z_^s}25OB-_RjC1Pol!GVynIt zUy5JU`QdSN=z(<7A|7WI@T%{j<##OGhiB%MA?(hn(92;ZlNE3L%u``mMB>i-aIMHA z2c4$_atOP_FH3!CgC7gef0EEa9oMo$F=7N9`s?%wlvqIErV{t)Tx3D>6j|-g2VBJY zlm8(I$0&$35aU*3X90XJZ(zr$ZOo4Mm#J~4_rU)mB;q5k&L%^kQJvlNIs;`BIjv6! z{=9l+8MT!Q>j)kVdM|Ez9|J}#DgBGe)l>{C%~W78ImM$OpxHeEtQU%s1cDsVn)@`+ z<5x*Xr(o7eDjNI#DQaknGg-(L|vQ@Vfmm z^W*M?x0(m+8t!Ma<==0|FbEW#7?GmW_lJhrOkkjJEdoBbY9bqQz9bt?W{oc;R8fB5 z23m_wDwUWqcWc^|ndAYMEWt{djque^wU`V4X#oIys}qHzFo=s_JdIccBd#9HZ5(Wv z7N{y8VJ2+&${01VN#)esV=juVdMv(4W+>=s=rJD7iDT!S(tFnQe5BF^9;~JQ42xEn ziI>En7QE>d3p}-+FUkJyy1BvKW^lS+`n03@;_19mLEL&X&+3=!hdV9SIec@;P~@L> zVrL@Y?+jPwMHzs%c^5`r?)qnRNiPBo;wE}wGp;|me+mXp?>hQ&7ny^WM>wyz3L4}% zf?Y=gTm$F&u65mGPrT>1JFtl21Bj{GZ#U)Q@Lz$Ts5#ikjiI#++KEhIE@6;AThdoa z+`FRr6KKs?mCSci>Xflk5Hs5 zMm`N=dzE~Jd4p<8pHaxb{gW~$PiVuxs_x&ydbseCL)F(jMFR%;*hYJ=I~=kJQX<64 zz+CG{p6OfveXXQ3LE;gxt#uWgl))C9Bc0SAgmxs7WVF?L5&9V%wf+<3(7s~sz9$*y z*VzD)kN&8p76g{(2Ny1Uso6#tnR*|U`z)oM7AIX(+LRUWE=-t-(Tp_E(-at;Zs0v; z4nFdM)0cBOEpeXtaaIWLcsdqx5P&I=da=5L^q3<+>2WrA$YFz%l}7F z%JmntOG{7ov0{}>zGBq?2P$=}f%yQyCqV{_8qT#M46rfH>0ZS|FIox%RV@4-lR;4n z7+OE~OoSAXp3^+bfqgsmSVWivKRT9~sRz$KfHTK|{>9hqHEJa^IStI4q)=W(^D zuWj7uS4o5Kjm9E+p%VI=>=6(lm5|!Zj*gyO@$Wr*_O-OEQtttg*hkNrSFwI4n#+ov z!A=8O{qge`-E|ECg-9NppfGF7(Skx4E8dE&vZuutN=5f=^s7gVf4my~Vu9uQWinN^eH>tfn|NIivh)pd1mm z(JpX%Zy?)gt#|^tR!8}7GFX>d8yK~HiTf{tK;rR`(56^bzr`SY@-8vKC7nq*^<~1j zu9bu{NnA4|k{qwzdb{;FLH(>8D%Rz#AZH`)oeBBrB0Lzuq=+=4vNx^2vAkTsdiA-Y z-N<&>O>P3cBqBXE?uaJmO4T)n)EJUK3sxYiayt=DFNjxA|MDtH=lrO{wZ~#+U+=R_ zSFB<|ou&=C5wjP=dvf&AB>zmS&Tr@i%^Ira+!;cy`QUEoiZg#-;MW_ew!N&ee<6Rd z^hXdVS_!$&CvI0tc-rnyzOHoEh*z`vJ5`D2W@nt|b6OpBclY3rhIU+sXraE`U+QY`|U zp&w(GA{s1x@!aVKZ)kNlIR6jfN%NQRq))05FjSqp4T^{Qc#rMJ;Hq$-B^)_f#c{(v zisn=e)69-iCWy->J+ZLkXkQPE(qHyx{C#?>KPtaE8MDNb9;iT zWvtOu-&?eb)t}8yrG?3HYZzJR3S^ZxwFYdszmwLGK0@= z8;eM1UM~U%x3rzU#TI}~vis4E&A+~O2DC7ItHWh!o)&Upi@Nhr)M}c_`kMBNo#aa87UQIec_Kj<&C_;%jdqju z{``*p*Jbu+y&Bpg<#*+E5^Cwt5o|JyXIGu zuT^#hDwhOLn3RU3GgC0d7~cFAWy;LH(3YD;! zegQkki8nGtxq zLvR_@$Y@(0*an!wL3>7?xUwC1Ba@5#4!1jkBr7q3e@=tfc`nfP_M{8o*>=E`=|~zo z{VXDM-=>Qp0eM9=%iLDiK#qbP{OcM}Emn|UPW3`(N6FcEQc69F={-L}aqs3n=bcGO z3utxX!S8DFN)981cS%RZ6R-_!nT-%=brWsjiJ-$J5GvCOV3`soFkLtuS^&X67}kSR zs9eyn$kyZUu`o)eu5pTYgH+F;BUV(J8^<(*kDpwN61%2j@q$BiynjbjN`u#5Lls9O}QX7c^` z1>2Q+K)Y!lr*c{^wT{WPCM2t+y&MD{*KMZt_Fdx@#AJNWUsr9GMr2;&saHDRt^?P( zSHz(q`;*aig*ca&KpbG{Z;AZty*v;eG~vbF4=?H5Plyc_BygK;oi@SO)t-SeT#g;N zNF_ubt?Ay*zI&-HUp>52W3*a-tytdX)iDXmv;XH~8T#44Ev=%QmI_Slp` zi4gN0k@!%|jB0s>bEPkS666_>riS}%iD)AZvG7qy>~ z{2INFZ}33T86LGwA)Oxr;iRiAJn;wRDU{QM?Kqqoj6jdscf@Wl@_K|(d?V;|cc{i(du1IOP z`8FKGLa4L#hUx$4&Ofur5+HE7E9s8jN zumqx7QQSLM#>4luIO1FU#|N_{IRS!tIQ$_dxkfrV-MV_z2~R-mj2mMOyK+=CF@DN# zDq&IOZpoc=HlMYR)l7wX*=0Yzq>r$6d;V<@EWoT*PxI3L1%!zC^Z#JE$p1Cte`;6h zf8`)*HrNrDQ%BF&HSPXpe=HP&^-p%XPYw^ul9{WG6V(H?~Qi9`wD&{d}qpkhB!Me47 zlrgAItfmEDv|&qK7mG}$Crl4kxcm*F++SU``*KBsmitVh^pyKOKWS%{Ns8%3g@-<8 z%0c8q30_`YW zf_+5Aa0K$AAT2DcuF}>9{8A`#DJw4%dyH8z#ZL?>hzyN76ePm(~! z3h8+zM@=pf4~3{`;ssD;@Yun;l>%vMLQxcf-*ssGxKp)H`)0M!MaPxWD5l<8pUj0<*ezFJr__51wScWOrc4)(yg-^i?@r+