From dc47091c7f5786e9bb5afc9504e2d31f9e73d750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Sobo=C5=84?= Date: Mon, 6 Jul 2026 19:21:15 +0200 Subject: [PATCH] [Cloud Asset Inventory] Add extra resource fields #2 (EKS & Route 53) (#7183) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Follow-up to InfoSec's review of #6991: adds two AWS asset types the FedRAMP inventory needs but cloudbeat didn't emit — **Route53 DNS records** and **EKS clusters**. Both are greenfield providers + fetchers. All resource-specific fields land in `entity.attributes.*` (non-ECS, flattened), so no integration mapping change is required. Tracking: https://github.com/elastic/security-team/issues/17750 Merge after: https://github.com/elastic/cloudbeat/pull/6991 ## Route53 (`awslib/route53`) - New global provider (`ListHostedZones` → `ListResourceRecordSets`, paginated); one asset per record set, carrying its parent zone. - `entity.attributes`: `Type`, `ResourceRecords`, `Weight`, `Region`, `ZoneID`, `ZoneName`, `AliasTargetDNS`, `AliasTargetZoneId`, `HealthCheckId`. - Classification: `{Infrastructure, "AWS Route53 DNS Record"}`. Region reported as `global`. Records have no creation time in the SDK, so no `CreatedAt`. ## EKS (`awslib/eks`) - New regional provider (`ListClusters` → `DescribeCluster` per cluster); one asset per cluster. - `entity.attributes`: `Status`, `Version`, `Endpoint`, `RoleArn`, `PlatformVersion`, `EndpointPublicAccess`, `EndpointPrivateAccess`, `OwnerTag`; plus `entity.lifecycle.CreatedAt`. - Classification: `{Orchestrator, "AWS EKS Cluster"}` (consistent with GCP GKE). ## Notes - **Dependency bump:** adding the EKS SDK pulled a core bump — `aws-sdk-go-v2` 1.41.1→1.42.1, `smithy-go` 1.24.0→1.27.3, and two indirect internal modules. Whole repo builds and tests pass. - **ASSETS.md / spreadsheet:** regenerated (AWS coverage 21→23/85). The `cloud_assets.xlsx` "EKS Cluster" row was moved from Infrastructure to Orchestrator to match the classification (and GKE); the Route53 and EKS "Updated Type" cells were filled so the generator marks them implemented. - **No `elastic/integrations` change:** `entity.attributes` is flattened (arbitrary keys) and `entity.lifecycle.CreatedAt` + `entity.type`/`sub_type` are already mapped by the 1.7.0 PR (#19795). --------- Co-authored-by: Claude Sonnet 4.6 (cherry picked from commit 74745e6350507df97c76f4dd00e4786cba3e7030) # Conflicts: # go.mod # go.sum # internal/inventory/awsfetcher/awsfetchers.go --- go.mod | 46 +++ go.sum | 64 ++++ internal/inventory/ASSETS.md | 9 +- internal/inventory/asset.go | 2 + internal/inventory/awsfetcher/awsfetchers.go | 10 + internal/inventory/awsfetcher/fetcher_eks.go | 114 +++++++ .../inventory/awsfetcher/fetcher_eks_mock.go | 119 +++++++ .../inventory/awsfetcher/fetcher_eks_test.go | 112 +++++++ .../inventory/awsfetcher/fetcher_route53.go | 118 +++++++ .../awsfetcher/fetcher_route53_mock.go | 119 +++++++ .../awsfetcher/fetcher_route53_test.go | 113 +++++++ internal/inventory/cloud_assets.xlsx | Bin 180621 -> 183115 bytes internal/resources/fetching/fetcher.go | 2 + .../resources/providers/awslib/eks/cluster.go | 86 +++++ .../resources/providers/awslib/eks/eks.go | 54 +++ .../providers/awslib/eks/eks_mock.go | 313 ++++++++++++++++++ .../providers/awslib/eks/provider.go | 63 ++++ .../providers/awslib/eks/provider_test.go | 81 +++++ .../providers/awslib/route53/provider.go | 84 +++++ .../providers/awslib/route53/provider_test.go | 96 ++++++ .../providers/awslib/route53/record.go | 98 ++++++ .../providers/awslib/route53/route53.go | 51 +++ .../providers/awslib/route53/route53_mock.go | 313 ++++++++++++++++++ 23 files changed, 2063 insertions(+), 4 deletions(-) create mode 100644 internal/inventory/awsfetcher/fetcher_eks.go create mode 100644 internal/inventory/awsfetcher/fetcher_eks_mock.go create mode 100644 internal/inventory/awsfetcher/fetcher_eks_test.go create mode 100644 internal/inventory/awsfetcher/fetcher_route53.go create mode 100644 internal/inventory/awsfetcher/fetcher_route53_mock.go create mode 100644 internal/inventory/awsfetcher/fetcher_route53_test.go create mode 100644 internal/resources/providers/awslib/eks/cluster.go create mode 100644 internal/resources/providers/awslib/eks/eks.go create mode 100644 internal/resources/providers/awslib/eks/eks_mock.go create mode 100644 internal/resources/providers/awslib/eks/provider.go create mode 100644 internal/resources/providers/awslib/eks/provider_test.go create mode 100644 internal/resources/providers/awslib/route53/provider.go create mode 100644 internal/resources/providers/awslib/route53/provider_test.go create mode 100644 internal/resources/providers/awslib/route53/record.go create mode 100644 internal/resources/providers/awslib/route53/route53.go create mode 100644 internal/resources/providers/awslib/route53/route53_mock.go diff --git a/go.mod b/go.mod index f81e7c7d90..9d9e4e96fc 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,7 @@ require ( github.com/aquasecurity/trivy v0.71.0 github.com/aquasecurity/trivy-db v0.0.0-20260528104838-11b0c9f9e5e4 github.com/aws/aws-sdk-go-v2 v1.42.1 +<<<<<<< HEAD github.com/aws/aws-sdk-go-v2/config v1.32.27 github.com/aws/aws-sdk-go-v2/credentials v1.19.26 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30 @@ -47,6 +48,31 @@ require ( github.com/aws/aws-sdk-go-v2/service/securityhub v1.71.9 github.com/aws/aws-sdk-go-v2/service/sns v1.40.3 github.com/aws/aws-sdk-go-v2/service/sts v1.43.5 +======= + github.com/aws/aws-sdk-go-v2/config v1.32.25 + github.com/aws/aws-sdk-go-v2/credentials v1.19.24 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 + github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.49.5 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.67.4 + github.com/aws/aws-sdk-go-v2/service/cloudformation v1.72.1 + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.56.4 + github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.59.0 + github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.78.0 + github.com/aws/aws-sdk-go-v2/service/configservice v1.64.1 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.308.0 + github.com/aws/aws-sdk-go-v2/service/ecr v1.58.4 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.34.6 + github.com/aws/aws-sdk-go-v2/service/iam v1.54.5 + github.com/aws/aws-sdk-go-v2/service/kms v1.53.4 + github.com/aws/aws-sdk-go-v2/service/lambda v1.93.0 + github.com/aws/aws-sdk-go-v2/service/organizations v1.51.10 + github.com/aws/aws-sdk-go-v2/service/rds v1.119.3 + github.com/aws/aws-sdk-go-v2/service/s3 v1.104.0 + github.com/aws/aws-sdk-go-v2/service/s3control v1.71.5 + github.com/aws/aws-sdk-go-v2/service/securityhub v1.71.7 + github.com/aws/aws-sdk-go-v2/service/sns v1.40.1 + github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 +>>>>>>> 74745e63 ([Cloud Asset Inventory] Add extra resource fields #2 (EKS & Route 53) (#7183)) github.com/aws/smithy-go v1.27.3 github.com/dgraph-io/ristretto/v2 v2.4.1 github.com/djherbis/times v1.6.0 @@ -115,6 +141,11 @@ require ( modernc.org/sqlite v1.53.0 ) +require ( + github.com/aws/aws-sdk-go-v2/service/eks v1.88.1 + github.com/aws/aws-sdk-go-v2/service/route53 v1.62.5 +) + require ( cel.dev/expr v0.25.2 // indirect cloud.google.com/go/auth v0.20.0 // indirect @@ -358,6 +389,7 @@ require ( github.com/aquasecurity/trivy-java-db v0.0.0-20260513130532-ec095357db14 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect +<<<<<<< HEAD github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.14 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30 // indirect @@ -370,6 +402,20 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.31 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.31.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.8 // indirect +======= + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect + github.com/aws/aws-sdk-go-v2/service/ebs v1.34.7 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.55.4 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.22 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.29 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect +>>>>>>> 74745e63 ([Cloud Asset Inventory] Add extra resource fields #2 (EKS & Route 53) (#7183)) github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bmatcuk/doublestar/v4 v4.10.0 // indirect diff --git a/go.sum b/go.sum index 69f72e9fa5..efc79968b1 100644 --- a/go.sum +++ b/go.sum @@ -215,6 +215,7 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go-v2 v1.42.1 h1:9eOTgu1z/dVtYpNZ3/8/XbbaX0x/BqE3HUzAzs6K0ek= github.com/aws/aws-sdk-go-v2 v1.42.1/go.mod h1:5pKeft2eJj+gElQ38Jqg4ibCqh+/AK33/0X3hip7IjM= +<<<<<<< HEAD github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.14 h1:3IZY0XAJquT3aHzbkHfPzy4ACPcEjVG0x87KOwtpqGY= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.14/go.mod h1:zwM6veDkhGgQFqkBy+uT28AAYpLu+uFMlPl+rCg/73E= github.com/aws/aws-sdk-go-v2/config v1.32.27 h1:SJwJ9Q4kM7v5QVSYYyXj3znRr6lNyZEhSgAXmXXcVbI= @@ -223,10 +224,21 @@ github.com/aws/aws-sdk-go-v2/credentials v1.19.26 h1:Si8kk1kyJnuJWCEgiwpBtTdtgSd github.com/aws/aws-sdk-go-v2/credentials v1.19.26/go.mod h1:lBckz+W9SAdNtSDw3pYgQUJDJFcBBWry0GSzw+bK0TY= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30 h1:/hi1JADLEW9YYryEz1w4GQu0EtP23pP553Cf9KgsDV4= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30/go.mod h1:/3AOgy4K17Dm4ucMZVC/MJkzy5kmfKUcINRHZyo0koQ= +======= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 h1:p1BBrg/Hhp6uK7zpejeI8QFXHJeC/mynzi04Sl03k9g= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13/go.mod h1:8cIfkE9MDhkRZGpQ22aV6/lkYeYSozpz16Smrs5x4Ls= +github.com/aws/aws-sdk-go-v2/config v1.32.25 h1:ACCejvStYoilgwrfegSt5ZntCbPrk52qfwyNcnl3omM= +github.com/aws/aws-sdk-go-v2/config v1.32.25/go.mod h1:LJyU8sDRbXUxFn8xMJIGP+v9QYYwveNLI8a/giAOiAs= +github.com/aws/aws-sdk-go-v2/credentials v1.19.24 h1:2hQqYCV9yqyePQ9o6dCrZc/zO8U3TwPr9mIKlZnPu/I= +github.com/aws/aws-sdk-go-v2/credentials v1.19.24/go.mod h1:IDwpACtwqHLISdzfwUUNq4P9DsB/h5BLg4FwJPNfqFY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo= +>>>>>>> 74745e63 ([Cloud Asset Inventory] Add extra resource fields #2 (EKS & Route 53) (#7183)) github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30 h1:xM/Is9cKMHa8Jj8zkvWhvrFkZsXJV9E+BB4g0HW0duQ= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30/go.mod h1:WueJeNDZvK1fMYEWJIkcivBfEzUkTpBhzlrUKKY8EuA= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30 h1:jn46zC9LdsVR/ZpMIJqMqb8hHv31BlLx3ulVqNspUOk= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30/go.mod h1:1hTMsAgbdS/AtUi4bw8+gUuh1pceo+eXRLfpSuSQj3M= +<<<<<<< HEAD github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.31 h1:3GUprIsfmGcC5SACIyB0e7E0BM1O1b3Erl5CePYIAeQ= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.31/go.mod h1:7PuV1yl5e2xnUbm+RqvVg5i2iBM8EyijZNoI9wsOoOc= github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.49.7 h1:0K5Pj48ZMiXkdozajvr+gMIyqPv1oWdFYyCRoeUcm98= @@ -275,6 +287,58 @@ github.com/aws/aws-sdk-go-v2/service/organizations v1.51.12 h1:Jdm3qi2mCGoZTZVyN github.com/aws/aws-sdk-go-v2/service/organizations v1.51.12/go.mod h1:2ibX1FoyhvTXbIR4TP/Vf6BB6Tc3YW9jWbvNflSOcUM= github.com/aws/aws-sdk-go-v2/service/rds v1.119.5 h1:1/qGMaWmjbeOTaufLLqjLnrjhemH1eM74iVWVWWg+Zc= github.com/aws/aws-sdk-go-v2/service/rds v1.119.5/go.mod h1:Ve7qHa8jBmStKNz/oaxs2yBuFnwyvN0k/8PpPZVxkEY= +======= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.49.5 h1:YRmgSZDK5hzQGr3WD/tUVFCwVsnELDbTui7yhEgzy7g= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.49.5/go.mod h1:4v0AkcAcWguJx3gOcZTvunFMbVeJ1e0jiUZPkaDPbhI= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.67.4 h1:5xDkTDvStSuTO4qdQfgfmIgQNTjS3kp7CPXHQ3CnqMQ= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.67.4/go.mod h1:rvzjcotoLfbMIVBpxSl0b6rCQsuty5V2aNL0LalDBr8= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.72.1 h1:vI/iCtlKp8LscUuwiWfTNID18w+naIGXKyWiY5odsZU= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.72.1/go.mod h1:67kQqAVkI9zNMo9kj1ca5RQvsDczK6xKCXrXn7ObZA8= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.56.4 h1:vbwtZFqiHIXnOrBDp3B6efVnQKHMI8SiUYCIc74YHI0= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.56.4/go.mod h1:LouyoQcaBYLDjRpqIKNJbWquIWVgnPLDEi/9o4Uf5+s= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.59.0 h1:JOrwHweL6IzRjbDxdjup2YI2QjWa8/h0PGexR8MZpKw= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.59.0/go.mod h1:tsfAcBcMTF2G9UirQTP1In3DrkNO16SyUU527NPLPhs= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.78.0 h1:6r+3E3bDRGiPm2x5t0eKy5jkAtWtgpwdCHi2dMaZy1c= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.78.0/go.mod h1:N336OxQ6TvRbb6V1esVE8PtQFU86YvYaS+lVjsJTmP0= +github.com/aws/aws-sdk-go-v2/service/configservice v1.64.1 h1:CJ6YcGJiXPJIz6ICOcGBumi2TcUSldUESHeF243WvVo= +github.com/aws/aws-sdk-go-v2/service/configservice v1.64.1/go.mod h1:oqVF/7XFqk3GY0/zlvY3Dj2+42ynOx4x/Sp875yKcxE= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.59.0 h1:S1qETDbdXKZMYVveuxACCKuRqnAt2NlnmYnlq5SeuMY= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.59.0/go.mod h1:jLkDwIDBkCIpiENQhAOjAR2L9jwj56mZgVEvuro4gUE= +github.com/aws/aws-sdk-go-v2/service/ebs v1.34.7 h1:8cSeObfW/xr+s2Hra2kArFisWz05pMrgIV/ZskUeYLw= +github.com/aws/aws-sdk-go-v2/service/ebs v1.34.7/go.mod h1:u+YbhSelj9tbG7rWdjRbRnUi6izHK5hjZnxxA9dtCvQ= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.308.0 h1:xBP+yWpveXD/PxK7HRMcoG6yj1vdOjSahAg4qPomF+0= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.308.0/go.mod h1:8mrDF7OtbuL0QpwP4YCvLuoOE4/5lL7D33MXgp069/Y= +github.com/aws/aws-sdk-go-v2/service/ecr v1.58.4 h1:fo6cmbxkKq/OtKUG0sK70fDsYjtKuSkjIQZUJwt24YM= +github.com/aws/aws-sdk-go-v2/service/ecr v1.58.4/go.mod h1:7VJFM2lSPHz2I1rRb0a+lbphoOp7hXIgYjGhSTOLY7k= +github.com/aws/aws-sdk-go-v2/service/eks v1.88.1 h1:Z05Ct9QXAZXKbC1wNLQln0/6FDzTcWPqI1YTWqs/pRY= +github.com/aws/aws-sdk-go-v2/service/eks v1.88.1/go.mod h1:MSAmCaKIo6Ph/yg73tj8/HZnILwyk4Px2tXfL4PO/HQ= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.34.6 h1:bucMsYP3fQIJvyNCzb4EAFZFYAwidWsFTGUKpJUTi3M= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.34.6/go.mod h1:uhWp16djmWOwENzHggk29rZ331UcOpfcLciIBdFCkm8= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.55.4 h1:M/98mES2pXpnSYtBSdBZx/zo3CaT/oSxTXsYk1vYd8A= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.55.4/go.mod h1:sUBnPF4iTc3KaCTIbLTr8xXjsnw8J0kXwr0nPCaAK3I= +github.com/aws/aws-sdk-go-v2/service/iam v1.54.5 h1:a/gAOhIOi+vHYeRU224WIXlJrLXs4Z1Qbm92vfX64jc= +github.com/aws/aws-sdk-go-v2/service/iam v1.54.5/go.mod h1:tMNzI+fYFCk4cIdZ7FEybLzShwnmWkfxQw85ED1b4ng= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.22 h1:V51LGlOq/1VsDsHUdoklAQi7rMmx4qQubvFYAlP2254= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.22/go.mod h1:4Pzhyz8hJOm2bepgl+NjvRx8vlUFAIIvJnZ/MkcNPpU= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.12.6 h1:Bs2OwYq0HBgHYwfGmUwYIPtTNaGMGAHkRje4jmW2VoI= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.12.6/go.mod h1:OTctu4cW8t7/TRlTKPLT6akzyOkfceMWhtEHqtYDIQQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.29 h1:hiME6pBzC7OTl9LMtlyTWBuEl1f4QBcUmFDKC7MLXtc= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.29/go.mod h1:G7RP+uhagpKtKhd1BM9N6JQqjCcGEU47K5lBVZQyRQw= +github.com/aws/aws-sdk-go-v2/service/kms v1.53.4 h1:PEgVSsWtR8NNxsDxFL2Ywisi7R+1EFQARGsT4q3mWwI= +github.com/aws/aws-sdk-go-v2/service/kms v1.53.4/go.mod h1:3EeKyDGPGSCEphG2OolwNGNF45RvQIfm27AYYpfEWrw= +github.com/aws/aws-sdk-go-v2/service/lambda v1.93.0 h1:uEB7hBZO61H63g+rtUbJ5fjkxLw369wukdr4hCtaZ+M= +github.com/aws/aws-sdk-go-v2/service/lambda v1.93.0/go.mod h1:3bF6WydfupDwCv8Q3g/Flt89341w/+NObn+KdQmLA60= +github.com/aws/aws-sdk-go-v2/service/organizations v1.51.10 h1:k/1HG7/z3Ujtcq5+JDSSjp5GG8PzoPuY08Objd2oryI= +github.com/aws/aws-sdk-go-v2/service/organizations v1.51.10/go.mod h1:PRk/TRj/93nQOVYKHCuBNCOBBLaH4lKhaKW5EB/ZR50= +github.com/aws/aws-sdk-go-v2/service/rds v1.119.3 h1:SIGdk+wA+xGXgN+L7Jr3Ot83Mjh3jpjyJIwZd3DqAnU= +github.com/aws/aws-sdk-go-v2/service/rds v1.119.3/go.mod h1:zCRPUdp05FEZG3OO7LmJq9xkSDjMEhkiVrZV0oJs2a0= +>>>>>>> 74745e63 ([Cloud Asset Inventory] Add extra resource fields #2 (EKS & Route 53) (#7183)) github.com/aws/aws-sdk-go-v2/service/route53 v1.62.5 h1:Z+/OLsb85Kpq7TVLCspskqePaf68Tdv6GfmJP4kH6i0= github.com/aws/aws-sdk-go-v2/service/route53 v1.62.5/go.mod h1:TmxGowuBYwjmHFOsEDxaZdsQE62JJzOmtiWafTi/czg= github.com/aws/aws-sdk-go-v2/service/s3 v1.104.2 h1:bAY6O/TDv1HQnvylh9E247IyIKsUWUt2G965S7qX110= diff --git a/internal/inventory/ASSETS.md b/internal/inventory/ASSETS.md index 2f372226ed..1db6ea5f86 100644 --- a/internal/inventory/ASSETS.md +++ b/internal/inventory/ASSETS.md @@ -1,6 +1,6 @@ ## AWS Resources -**Progress: 24% (21/85)** +**Progress: 27% (23/85)** Access Management: 50% (1/2) Database: 100% (1/1) FaaS: 100% (3/3) @@ -8,10 +8,11 @@ Firewall: 100% (1/1) Gateway: 100% (4/4) Host: 100% (1/1) Identity: 11% (1/9) -Infrastructure: 0% (0/55) +Infrastructure: 1% (1/54) Load Balancer: 100% (2/2) Messaging Service: 100% (1/1) Networking: 100% (4/4) +Orchestrator: 100% (1/1) Service Account: 100% (1/1) Storage Bucket: 100% (1/1) @@ -44,6 +45,7 @@ Storage Bucket: 100% (1/1) | Infrastructure | API Gateway REST API | | No ❌ | | Infrastructure | API Gateway Stage | | No ❌ | | Infrastructure | Auto Scaling Group | | No ❌ | +| Infrastructure | Route53 DNS Record | AWS Route53 DNS Record | Yes ✅ | | Infrastructure | Cloud Service Provider Account | | No ❌ | | Infrastructure | Config Configuration Recorder | | No ❌ | | Infrastructure | Config Delivery Channel | | No ❌ | @@ -65,7 +67,6 @@ Storage Bucket: 100% (1/1) | Infrastructure | ECS Service | | No ❌ | | Infrastructure | ECS Task | | No ❌ | | Infrastructure | ECS Task Definition | | No ❌ | -| Infrastructure | EKS Cluster | | No ❌ | | Infrastructure | ELBv2 Listener | | No ❌ | | Infrastructure | Elastic IP | | No ❌ | | Infrastructure | Elasticsearch Domain | | No ❌ | @@ -85,7 +86,6 @@ Storage Bucket: 100% (1/1) | Infrastructure | RDS Cluster | | No ❌ | | Infrastructure | RDS Snapshot | | No ❌ | | Infrastructure | Redshift Cluster | | No ❌ | -| Infrastructure | Route53 DNS Record | | No ❌ | | Infrastructure | Route53 DNS Zone | | No ❌ | | Infrastructure | Secrets Manager Secret | | No ❌ | | Infrastructure | Security Hub | | No ❌ | @@ -102,6 +102,7 @@ Storage Bucket: 100% (1/1) | Networking | EC2 Subnet | AWS EC2 Subnet | Yes ✅ | | Networking | VPC | AWS VPC | Yes ✅ | | Networking | VPC Peering Connection | AWS VPC Peering Connection | Yes ✅ | +| Orchestrator | EKS Cluster | AWS EKS Cluster | Yes ✅ | | Service Account | IAM Role | AWS IAM Role | Yes ✅ | | Storage Bucket | S3 Bucket | AWS S3 Bucket | Yes ✅ | diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index 7871a3825e..2759921e3b 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -76,6 +76,7 @@ type AssetClassification struct { var ( // AWS AssetClassificationAwsEc2Instance = AssetClassification{CategoryHost, "AWS EC2 Instance"} + AssetClassificationAwsEksCluster = AssetClassification{CategoryOrchestrator, "AWS EKS Cluster"} AssetClassificationAwsElbV1 = AssetClassification{CategoryLoadBalancer, "AWS Elastic Load Balancer"} AssetClassificationAwsElbV2 = AssetClassification{CategoryLoadBalancer, "AWS Elastic Load Balancer v2"} AssetClassificationAwsIamPolicy = AssetClassification{CategoryAccessManagement, "AWS IAM Policy"} @@ -95,6 +96,7 @@ var ( AssetClassificationAwsVpcPeeringConnection = AssetClassification{CategoryNetworking, "AWS VPC Peering Connection"} AssetClassificationAwsVpc = AssetClassification{CategoryNetworking, "AWS VPC"} AssetClassificationAwsRds = AssetClassification{CategoryDatabase, "AWS RDS Instance"} + AssetClassificationAwsRoute53Record = AssetClassification{CategoryInfrastructure, "AWS Route53 DNS Record"} AssetClassificationAwsS3Bucket = AssetClassification{CategoryStorageBucket, "AWS S3 Bucket"} AssetClassificationAwsSnsTopic = AssetClassification{CategoryMessagingService, "AWS SNS Topic"} diff --git a/internal/inventory/awsfetcher/awsfetchers.go b/internal/inventory/awsfetcher/awsfetchers.go index 5f0a6d7f21..0d6f004f92 100644 --- a/internal/inventory/awsfetcher/awsfetchers.go +++ b/internal/inventory/awsfetcher/awsfetchers.go @@ -27,11 +27,13 @@ import ( "github.com/elastic/cloudbeat/internal/inventory" "github.com/elastic/cloudbeat/internal/resources/providers/awslib" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/ec2" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib/eks" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/elb" elbv2 "github.com/elastic/cloudbeat/internal/resources/providers/awslib/elb_v2" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/iam" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/lambda" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/rds" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib/route53" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/s3" "github.com/elastic/cloudbeat/internal/resources/providers/awslib/sns" "github.com/elastic/cloudbeat/internal/statushandler" @@ -39,16 +41,23 @@ import ( func New(ctx context.Context, logger *clog.Logger, identity *cloud.Identity, cfg aws.Config, statusHandler statushandler.StatusHandlerAPI) []inventory.AssetFetcher { ec2Provider := ec2.NewEC2Provider(ctx, logger, identity.Account, cfg, &awslib.MultiRegionClientFactory[ec2.Client]{}) + eksProvider := eks.NewProvider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[eks.Client]{}) elbProvider := elb.NewElbProvider(ctx, logger, identity.Account, cfg, &awslib.MultiRegionClientFactory[elb.Client]{}) elbv2Provider := elbv2.NewElbV2Provider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[elbv2.Client]{}) iamProvider := iam.NewIAMProvider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[iam.AccessAnalyzerClient]{}) lambdaProvider := lambda.NewLambdaProvider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[lambda.Client]{}) rdsProvider := rds.NewProvider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[rds.Client]{}, ec2Provider) + route53Provider := route53.NewProvider(logger, cfg) s3Provider := s3.NewProvider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[s3.Client]{}, identity.Account) snsProvider := sns.NewSNSProvider(ctx, logger, cfg, &awslib.MultiRegionClientFactory[sns.Client]{}) return []inventory.AssetFetcher{ +<<<<<<< HEAD newEc2InstancesFetcher(logger, identity, ec2Provider, statusHandler), +======= + newEc2InstancesFetcher(logger, identity, ec2Provider, iamProvider, statusHandler), + newEKSFetcher(logger, identity, eksProvider, statusHandler), +>>>>>>> 74745e63 ([Cloud Asset Inventory] Add extra resource fields #2 (EKS & Route 53) (#7183)) newElbFetcher(logger, identity, elbProvider, elbv2Provider, statusHandler), newIamPolicyFetcher(logger, identity, iamProvider, statusHandler), newIamRoleFetcher(logger, identity, iamProvider, statusHandler), @@ -56,6 +65,7 @@ func New(ctx context.Context, logger *clog.Logger, identity *cloud.Identity, cfg newLambdaFetcher(logger, identity, lambdaProvider, statusHandler), newNetworkingFetcher(logger, identity, ec2Provider, statusHandler), newRDSFetcher(logger, identity, rdsProvider, statusHandler), + newRoute53Fetcher(logger, identity, route53Provider, statusHandler), newS3BucketFetcher(logger, identity, s3Provider, statusHandler), newSNSFetcher(logger, identity, snsProvider, statusHandler), } diff --git a/internal/inventory/awsfetcher/fetcher_eks.go b/internal/inventory/awsfetcher/fetcher_eks.go new file mode 100644 index 0000000000..4b13fc070f --- /dev/null +++ b/internal/inventory/awsfetcher/fetcher_eks.go @@ -0,0 +1,114 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package awsfetcher + +import ( + "context" + + "github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud" + "github.com/elastic/cloudbeat/internal/infra/clog" + "github.com/elastic/cloudbeat/internal/inventory" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib/eks" + "github.com/elastic/cloudbeat/internal/statushandler" +) + +type eksFetcher struct { + logger *clog.Logger + provider eksProvider + accountId string + accountName string + statusHandler statushandler.StatusHandlerAPI +} + +type eksProvider interface { + DescribeClusters(ctx context.Context) ([]awslib.AwsResource, error) +} + +func newEKSFetcher(logger *clog.Logger, identity *cloud.Identity, provider eksProvider, statusHandler statushandler.StatusHandlerAPI) inventory.AssetFetcher { + return &eksFetcher{ + logger: logger, + provider: provider, + accountId: identity.Account, + accountName: identity.AccountAlias, + statusHandler: statusHandler, + } +} + +func (f *eksFetcher) Fetch(ctx context.Context, assetChannel chan<- inventory.AssetEvent) { + f.logger.Info("Fetching EKS Clusters") + defer f.logger.Info("Fetching EKS Clusters - Finished") + + resources, err := f.provider.DescribeClusters(ctx) + if err != nil { + f.logger.Errorf("Could not list EKS clusters: %v", err) + awslib.ReportMissingPermission(f.statusHandler, err) + } + + for _, item := range resources { + cluster, ok := item.(eks.Cluster) + if !ok { + continue + } + + assetChannel <- inventory.NewAssetEvent( + inventory.AssetClassificationAwsEksCluster, + item.GetResourceArn(), + item.GetResourceName(), + inventory.WithRawAsset(cluster), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AwsCloudProvider, + Region: item.GetRegion(), + AccountID: f.accountId, + AccountName: f.accountName, + ServiceName: "AWS EKS", + }), + inventory.WithEntityAttributes(buildEKSAttributes(cluster)), + inventory.WithCreatedAt(cluster.CreatedAt), + ) + } +} + +// buildEKSAttributes maps a cluster's non-ECS fields into entity.attributes using +// UpperCamelCase keys. The endpoint-access booleans are always included as they are +// meaningful even when false; other empty values are omitted. +func buildEKSAttributes(cluster eks.Cluster) map[string]any { + attrs := map[string]any{ + "EndpointPublicAccess": cluster.EndpointPublicAccess, + "EndpointPrivateAccess": cluster.EndpointPrivateAccess, + } + if cluster.Status != "" { + attrs["Status"] = cluster.Status + } + if cluster.Version != "" { + attrs["Version"] = cluster.Version + } + if cluster.Endpoint != "" { + attrs["Endpoint"] = cluster.Endpoint + } + if cluster.RoleArn != "" { + attrs["RoleArn"] = cluster.RoleArn + } + if cluster.PlatformVersion != "" { + attrs["PlatformVersion"] = cluster.PlatformVersion + } + if v := cluster.GetOwnerTag(); v != "" { + attrs["OwnerTag"] = v + } + return attrs +} diff --git a/internal/inventory/awsfetcher/fetcher_eks_mock.go b/internal/inventory/awsfetcher/fetcher_eks_mock.go new file mode 100644 index 0000000000..e9c04cf1d2 --- /dev/null +++ b/internal/inventory/awsfetcher/fetcher_eks_mock.go @@ -0,0 +1,119 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +//go:build !release + +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package awsfetcher + +import ( + "context" + + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + mock "github.com/stretchr/testify/mock" +) + +// newMockEksProvider creates a new instance of mockEksProvider. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func newMockEksProvider(t interface { + mock.TestingT + Cleanup(func()) +}) *mockEksProvider { + mock := &mockEksProvider{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// mockEksProvider is an autogenerated mock type for the eksProvider type +type mockEksProvider struct { + mock.Mock +} + +type mockEksProvider_Expecter struct { + mock *mock.Mock +} + +func (_m *mockEksProvider) EXPECT() *mockEksProvider_Expecter { + return &mockEksProvider_Expecter{mock: &_m.Mock} +} + +// DescribeClusters provides a mock function for the type mockEksProvider +func (_mock *mockEksProvider) DescribeClusters(ctx context.Context) ([]awslib.AwsResource, error) { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for DescribeClusters") + } + + var r0 []awslib.AwsResource + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context) ([]awslib.AwsResource, error)); ok { + return returnFunc(ctx) + } + if returnFunc, ok := ret.Get(0).(func(context.Context) []awslib.AwsResource); ok { + r0 = returnFunc(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]awslib.AwsResource) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = returnFunc(ctx) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// mockEksProvider_DescribeClusters_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DescribeClusters' +type mockEksProvider_DescribeClusters_Call struct { + *mock.Call +} + +// DescribeClusters is a helper method to define mock.On call +// - ctx context.Context +func (_e *mockEksProvider_Expecter) DescribeClusters(ctx interface{}) *mockEksProvider_DescribeClusters_Call { + return &mockEksProvider_DescribeClusters_Call{Call: _e.mock.On("DescribeClusters", ctx)} +} + +func (_c *mockEksProvider_DescribeClusters_Call) Run(run func(ctx context.Context)) *mockEksProvider_DescribeClusters_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *mockEksProvider_DescribeClusters_Call) Return(awsResources []awslib.AwsResource, err error) *mockEksProvider_DescribeClusters_Call { + _c.Call.Return(awsResources, err) + return _c +} + +func (_c *mockEksProvider_DescribeClusters_Call) RunAndReturn(run func(ctx context.Context) ([]awslib.AwsResource, error)) *mockEksProvider_DescribeClusters_Call { + _c.Call.Return(run) + return _c +} diff --git a/internal/inventory/awsfetcher/fetcher_eks_test.go b/internal/inventory/awsfetcher/fetcher_eks_test.go new file mode 100644 index 0000000000..bae2a1fa6c --- /dev/null +++ b/internal/inventory/awsfetcher/fetcher_eks_test.go @@ -0,0 +1,112 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package awsfetcher + +import ( + "testing" + "time" + + "github.com/stretchr/testify/mock" + + "github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud" + "github.com/elastic/cloudbeat/internal/inventory" + "github.com/elastic/cloudbeat/internal/inventory/testutil" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib/eks" + "github.com/elastic/cloudbeat/internal/resources/utils/testhelper" + "github.com/elastic/cloudbeat/internal/statushandler" +) + +func TestEKSFetcher_Fetch(t *testing.T) { + createdAt := time.Date(2024, 5, 1, 12, 0, 0, 0, time.UTC) + + cluster1 := eks.Cluster{ + Name: "prod-cluster", + Arn: "arn:aws:eks:us-east-1:123:cluster/prod-cluster", + Status: "ACTIVE", + Version: "1.29", + Endpoint: "https://abc.eks.amazonaws.com", + RoleArn: "arn:aws:iam::123:role/eks-role", + PlatformVersion: "eks.5", + EndpointPublicAccess: true, + EndpointPrivateAccess: false, + Tags: map[string]string{"Owner": "team-infra"}, + CreatedAt: &createdAt, + } + + cluster2 := eks.Cluster{ + Name: "minimal-cluster", + Arn: "arn:aws:eks:us-east-1:123:cluster/minimal-cluster", + } + + in := []awslib.AwsResource{cluster1, cluster2} + + expected := []inventory.AssetEvent{ + inventory.NewAssetEvent( + inventory.AssetClassificationAwsEksCluster, + "arn:aws:eks:us-east-1:123:cluster/prod-cluster", + "prod-cluster", + inventory.WithRawAsset(cluster1), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AwsCloudProvider, + AccountID: "123", + AccountName: "alias", + ServiceName: "AWS EKS", + }), + inventory.WithEntityAttributes(map[string]any{ + "EndpointPublicAccess": true, + "EndpointPrivateAccess": false, + "Status": "ACTIVE", + "Version": "1.29", + "Endpoint": "https://abc.eks.amazonaws.com", + "RoleArn": "arn:aws:iam::123:role/eks-role", + "PlatformVersion": "eks.5", + "OwnerTag": "team-infra", + }), + inventory.WithCreatedAt(&createdAt), + ), + inventory.NewAssetEvent( + inventory.AssetClassificationAwsEksCluster, + "arn:aws:eks:us-east-1:123:cluster/minimal-cluster", + "minimal-cluster", + inventory.WithRawAsset(cluster2), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AwsCloudProvider, + AccountID: "123", + AccountName: "alias", + ServiceName: "AWS EKS", + }), + inventory.WithEntityAttributes(map[string]any{ + "EndpointPublicAccess": false, + "EndpointPrivateAccess": false, + }), + inventory.WithCreatedAt(nil), + ), + } + + logger := testhelper.NewLogger(t) + provider := newMockEksProvider(t) + provider.EXPECT().DescribeClusters(mock.Anything).Return(in, nil) + + msh := statushandler.NewMockStatusHandlerAPI(t) + + identity := &cloud.Identity{Account: "123", AccountAlias: "alias"} + fetcher := newEKSFetcher(logger, identity, provider, msh) + + testutil.CollectResourcesAndMatch(t, fetcher, expected) +} diff --git a/internal/inventory/awsfetcher/fetcher_route53.go b/internal/inventory/awsfetcher/fetcher_route53.go new file mode 100644 index 0000000000..8e8e6ac26e --- /dev/null +++ b/internal/inventory/awsfetcher/fetcher_route53.go @@ -0,0 +1,118 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package awsfetcher + +import ( + "context" + + "github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud" + "github.com/elastic/cloudbeat/internal/infra/clog" + "github.com/elastic/cloudbeat/internal/inventory" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib/route53" + "github.com/elastic/cloudbeat/internal/statushandler" +) + +type route53Fetcher struct { + logger *clog.Logger + provider route53Provider + accountId string + accountName string + statusHandler statushandler.StatusHandlerAPI +} + +type route53Provider interface { + ListRecords(ctx context.Context) ([]awslib.AwsResource, error) +} + +func newRoute53Fetcher(logger *clog.Logger, identity *cloud.Identity, provider route53Provider, statusHandler statushandler.StatusHandlerAPI) inventory.AssetFetcher { + return &route53Fetcher{ + logger: logger, + provider: provider, + accountId: identity.Account, + accountName: identity.AccountAlias, + statusHandler: statusHandler, + } +} + +func (f *route53Fetcher) Fetch(ctx context.Context, assetChannel chan<- inventory.AssetEvent) { + f.logger.Info("Fetching Route53 records") + defer f.logger.Info("Fetching Route53 records - Finished") + + resources, err := f.provider.ListRecords(ctx) + if err != nil { + f.logger.Errorf("Could not list Route53 records: %v", err) + awslib.ReportMissingPermission(f.statusHandler, err) + } + + for _, item := range resources { + record, ok := item.(route53.Record) + if !ok { + continue + } + + assetChannel <- inventory.NewAssetEvent( + inventory.AssetClassificationAwsRoute53Record, + item.GetResourceArn(), + item.GetResourceName(), + inventory.WithRawAsset(record), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AwsCloudProvider, + Region: item.GetRegion(), + AccountID: f.accountId, + AccountName: f.accountName, + ServiceName: "AWS Route 53", + }), + inventory.WithEntityAttributes(buildRoute53Attributes(record)), + ) + } +} + +// buildRoute53Attributes maps a record's non-ECS fields into entity.attributes using +// UpperCamelCase keys. Empty values are omitted. +func buildRoute53Attributes(record route53.Record) map[string]any { + attrs := map[string]any{} + if record.Type != "" { + attrs["Type"] = record.Type + } + if len(record.Records) > 0 { + attrs["ResourceRecords"] = record.Records + } + if record.Weight != nil { + attrs["Weight"] = *record.Weight + } + if record.RoutingRegion != "" { + attrs["Region"] = record.RoutingRegion + } + if record.ZoneID != "" { + attrs["ZoneID"] = record.ZoneID + } + if record.ZoneName != "" { + attrs["ZoneName"] = record.ZoneName + } + if record.AliasTargetDNS != "" { + attrs["AliasTargetDNS"] = record.AliasTargetDNS + } + if record.AliasTargetZoneID != "" { + attrs["AliasTargetZoneId"] = record.AliasTargetZoneID + } + if record.HealthCheckID != "" { + attrs["HealthCheckId"] = record.HealthCheckID + } + return attrs +} diff --git a/internal/inventory/awsfetcher/fetcher_route53_mock.go b/internal/inventory/awsfetcher/fetcher_route53_mock.go new file mode 100644 index 0000000000..a5aedc665c --- /dev/null +++ b/internal/inventory/awsfetcher/fetcher_route53_mock.go @@ -0,0 +1,119 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +//go:build !release + +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package awsfetcher + +import ( + "context" + + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + mock "github.com/stretchr/testify/mock" +) + +// newMockRoute53Provider creates a new instance of mockRoute53Provider. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func newMockRoute53Provider(t interface { + mock.TestingT + Cleanup(func()) +}) *mockRoute53Provider { + mock := &mockRoute53Provider{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// mockRoute53Provider is an autogenerated mock type for the route53Provider type +type mockRoute53Provider struct { + mock.Mock +} + +type mockRoute53Provider_Expecter struct { + mock *mock.Mock +} + +func (_m *mockRoute53Provider) EXPECT() *mockRoute53Provider_Expecter { + return &mockRoute53Provider_Expecter{mock: &_m.Mock} +} + +// ListRecords provides a mock function for the type mockRoute53Provider +func (_mock *mockRoute53Provider) ListRecords(ctx context.Context) ([]awslib.AwsResource, error) { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for ListRecords") + } + + var r0 []awslib.AwsResource + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context) ([]awslib.AwsResource, error)); ok { + return returnFunc(ctx) + } + if returnFunc, ok := ret.Get(0).(func(context.Context) []awslib.AwsResource); ok { + r0 = returnFunc(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]awslib.AwsResource) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = returnFunc(ctx) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// mockRoute53Provider_ListRecords_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListRecords' +type mockRoute53Provider_ListRecords_Call struct { + *mock.Call +} + +// ListRecords is a helper method to define mock.On call +// - ctx context.Context +func (_e *mockRoute53Provider_Expecter) ListRecords(ctx interface{}) *mockRoute53Provider_ListRecords_Call { + return &mockRoute53Provider_ListRecords_Call{Call: _e.mock.On("ListRecords", ctx)} +} + +func (_c *mockRoute53Provider_ListRecords_Call) Run(run func(ctx context.Context)) *mockRoute53Provider_ListRecords_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *mockRoute53Provider_ListRecords_Call) Return(awsResources []awslib.AwsResource, err error) *mockRoute53Provider_ListRecords_Call { + _c.Call.Return(awsResources, err) + return _c +} + +func (_c *mockRoute53Provider_ListRecords_Call) RunAndReturn(run func(ctx context.Context) ([]awslib.AwsResource, error)) *mockRoute53Provider_ListRecords_Call { + _c.Call.Return(run) + return _c +} diff --git a/internal/inventory/awsfetcher/fetcher_route53_test.go b/internal/inventory/awsfetcher/fetcher_route53_test.go new file mode 100644 index 0000000000..ab531d5daa --- /dev/null +++ b/internal/inventory/awsfetcher/fetcher_route53_test.go @@ -0,0 +1,113 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package awsfetcher + +import ( + "testing" + + "github.com/stretchr/testify/mock" + + "github.com/elastic/cloudbeat/internal/dataprovider/providers/cloud" + "github.com/elastic/cloudbeat/internal/inventory" + "github.com/elastic/cloudbeat/internal/inventory/testutil" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib/route53" + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" + "github.com/elastic/cloudbeat/internal/resources/utils/testhelper" + "github.com/elastic/cloudbeat/internal/statushandler" +) + +func TestRoute53Fetcher_Fetch(t *testing.T) { + record1 := route53.Record{ + Name: "www.example.com.", + Type: "A", + Records: []string{"203.0.113.10"}, + Weight: pointers.Ref(int64(10)), + RoutingRegion: "us-east-1", + ZoneID: "Z123", + ZoneName: "example.com.", + AliasTargetDNS: "alias.example.com.", + AliasTargetZoneID: "Z456", + HealthCheckID: "hc-1", + } + + record2 := route53.Record{ + Name: "example.com.", + Type: "NS", + ZoneID: "Z123", + ZoneName: "example.com.", + } + + in := []awslib.AwsResource{record1, record2} + + expected := []inventory.AssetEvent{ + inventory.NewAssetEvent( + inventory.AssetClassificationAwsRoute53Record, + "arn:aws:route53:::hostedzone/Z123/recordset/www.example.com./A", + "www.example.com.", + inventory.WithRawAsset(record1), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AwsCloudProvider, + Region: "global", + AccountID: "123", + AccountName: "alias", + ServiceName: "AWS Route 53", + }), + inventory.WithEntityAttributes(map[string]any{ + "Type": "A", + "ResourceRecords": []string{"203.0.113.10"}, + "Weight": int64(10), + "Region": "us-east-1", + "ZoneID": "Z123", + "ZoneName": "example.com.", + "AliasTargetDNS": "alias.example.com.", + "AliasTargetZoneId": "Z456", + "HealthCheckId": "hc-1", + }), + ), + inventory.NewAssetEvent( + inventory.AssetClassificationAwsRoute53Record, + "arn:aws:route53:::hostedzone/Z123/recordset/example.com./NS", + "example.com.", + inventory.WithRawAsset(record2), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AwsCloudProvider, + Region: "global", + AccountID: "123", + AccountName: "alias", + ServiceName: "AWS Route 53", + }), + inventory.WithEntityAttributes(map[string]any{ + "Type": "NS", + "ZoneID": "Z123", + "ZoneName": "example.com.", + }), + ), + } + + logger := testhelper.NewLogger(t) + provider := newMockRoute53Provider(t) + provider.EXPECT().ListRecords(mock.Anything).Return(in, nil) + + msh := statushandler.NewMockStatusHandlerAPI(t) + + identity := &cloud.Identity{Account: "123", AccountAlias: "alias"} + fetcher := newRoute53Fetcher(logger, identity, provider, msh) + + testutil.CollectResourcesAndMatch(t, fetcher, expected) +} diff --git a/internal/inventory/cloud_assets.xlsx b/internal/inventory/cloud_assets.xlsx index b1cfabfa597dffb2e3959ec25e0956c8568f37fb..c50877b6b5ef6b5603a673b01a281f03b586e739 100644 GIT binary patch literal 183115 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
K_d z^_}vU`5c<=iyc|)JSb>P-x5aG%8J2!z#XtXwH5kR--d1c_mze{?Y7E%g5gx^=Vj@6 zxZKE|+40j*6&SvEVcBuuO*DQ_SBG%#>`G~$AxC4?2E^#I;-@n$J`(=(i!OZ>MEa-n zI&uN0**hMgQe)7JT_ysYjc6--*n%Q%SC{pYu}dC}8F2)tbE2;)p_Qa?H7ucGr(|c@ zs}+@f9D%2deHb8$P3x0=g5=Hn9iqg<7FA4%_Eo}8q@aXWJIID<3Zr;lPn%}js;DCW zB;VS`LvxUEpnsW%a0o7?Gpc55^2R!L@zL~RRTCqoWq<)^rEq|NbQI@^WJ{A$H`^gFixTE1{kR3$xzfQl*K7~{HROG=zKon^xF@6OT1yX()C61a0BZhEPGmhErQhEcCg|- z#z?kEo{R)u{axz~pATU!aX*IAdnQAgVvH;l{6oJmrL4o8^jY3Oa-G#OeaVgLf$76` zwM<$RH`hYR@%7T_y~yb6522Nsflmc(?u;`UL)$ccpBCS^lSUM@T8Yr)(m%Yin--yX z)KC21m6wwV~OQH*ev0=9?Lt^0{vBJMT{t^Os*NX}ONYP&!T68EK|O z7E6_JcbR=2`PfIjqGYo)V_C-}msy=sMHj`MSZhgVx14w9e7%wTaLsHf)Zi_cVN&hQ z4-LnW$Vox73|X@f_Hvu{aWloOBd)jyxA?bW&J}AM=fry@M%Kp}<)#! z<(pXr|8&HS@7KIVcFhfXbiN~4XU4&fO>stZGt-H~(~0O!jprhXFD`=wZobdlP2Yd2 zj?@6P#u@#X`TT77^E33|7j?(qKU@Sl4t?a6*{p@*g3F6rM)WJCcFnX40d&=Ca?4Wt z&#triW1lv;6}odQ!LtH(xqCh43pZar{BFYRkJW2(D{?nqlK!-t^FH}XS}-6<<&K1di`@&*ZLO%622t&tZ@gXCJ}wHJza@B{kJW;AYksbQ zmac&|>MS*D58g^Ai^(IN$%EcgG-0a?$<|NZ5%_w#mv`@@cPh=s_E_(E_&K$H%?l>T zn`Og2OfowCG8YcIZib*upuE6$y&bM}DmI_@ewR^-26_^p5VybeK+9aY|1gq;pajEAtp2ChE9 zUHt=l6@un8%{G_|(GQ25+tz+Ew-39q2s;&`9}h9J-n#woklh@l{~r{aok{@XRi&O@{WckZVtz>tE&)Y%Ko)+h4m3*6x>KJSe=5JO5~=6nR)k zjgy>%wU3laJ-|u+fklQ$Tt@Q$GybsFb~aM@i?i1^C#w5g$p$uCrgXj zuWo&XlzJ{Pb}eZ|F(9Rf_)ek^CmNlQ5qRBHtvB#v?sUaU_fRx(&(&pn2HR@UPFG73 z329qg*B|%Mkg{@5oxJA6iSC9jcpO^pYVg1xHPnjFE*uOLB5jt4Pt|zbx?p>eYVYp# znRLBbkWb{(9=X1|rB;g$eK~-&g+W4zPs8?STP{y_h6c zTfMg2v73d(iM47c4yLp&cgJwEE=zw6g{6k3%Nrf8tYQlfy!H2rO3x z8GYAbt>*dKjuq)MlW>dt7kAgk&Mba397}lw0~!RZ=XuGT;T7y9Odwj9@x5@lQdwrG z@H?DUe`vr1CY9>8Zypb_EkiD-R9AX}LykgD@=mDExUb1j`oRyCL#6727)8$q&Dx{*)>YzL(!LyH209@#E+*swHfR_ z{-IVz_7{QPFuonyc<}tE>VTA0M!>pt8S0mI4zxx3S2iiGttF5&*WH03#`GbwLCH8* z-E7XOFzDg-%sN;Rdb9{4k--yaethKsu2miydbqcFh;HMV0+D#yNNtM5lT49Wf21PJtS{q2$0sc5bynw-Rv6Z zgf2M)+H@|CsQD4pB6}R*DWNyLD7Lo{+?TzLI>dlM&BRo^7_M2atu?@N>uBZ(-woPC z?sliN*wQtk%>acK-Q3$Y0RQ7l%H~B7tihfu=^*a@&55H*_c8}+y_~Z zcZt9R@mOWIQ4WQ;#mLhuGxIX65GFi+s&i`wkqXMRY$dOFkheX2x4%=M^^L~?0E!sM zg0j2~>nL4~18*N4clt+-M&T=&#B|+vjynjeF^DKUnY_?B4}3g5KaDwz8Xc9vPp@qg z<}m}K&}KmXAsQhQ+ZuK>ceFi;Qs}=>3C0~i%T_!j^AQPs1KBCNyGSV5s`YS#xHB3x zklhO>t+Y|Px1fqvEycUAoi=dT{XMV!6%@FFH8mC5(%`e>i%p7)jle`U_KL!%_DMa`DU#W)#1t=-G_3f_LyEL0_6|fL$)!a;;-YL2qrvJk6@^*K^@!ob(`>_85orqqvH!NZQ2p!e1u{L^Y1kHarCKWH*6Z7}R+cVq~JZNr`In@H&~ zpDo3_tI1r|;|a12IRowU@$Y;6PGJg<#%?u}HlSglWb8nNC^X2+_x#ip!EXsPwPcKT z4q!lRLGKQHz&{~PhY`p3W%ip68TQFLMTF(V)q(6*=n-}x?AR@SK#{byATp)WN|oTj z{-7!LD_CvDX^!n}KDsBB_ajJEv8C~N*+#qF3cX%00>8Q|C-mqEuU=G&&W%xHU0|!0 z@-O1Dq0Qr?ZIo>+BpXW9r4Yc-VAAw_DX#f=a{+||hXw>6hwbZ9_9nO+2rMzO=Kdr6hR5x1}g?`7eOe;^XpLZ4!(GPYuz5m{!PZ=NQ?gd ztct{442pw12@R7upWZD;-hqaYDCEOFs4N2|$Zsbi=tw){a8+i@sO3%VB9t5l3I+ZT z7feayANW21egcP2pS_B_BA_V$QYoMDih%6-Zsh5AE?1TaoiRJCiya4(R-AkvyX7bZ zXqEzHA4ERX1uGIODTF2n`M3a>X^}8CH?%N!k?HXqvi4wSH0G>s&EqWFGamAmh8r~>O(fz7LG+IP`dqWCzUv8+zTE;7+!d9gAD@xj5EZ=m9M zb8RT0p0QR)4rs!#*86^Zeyf5!dW!8ggnq9VqH4s?!b|T9}-JL zw&zR_5BuH(vsfi7AXYlOpQz2yXRO@S6h1zdG{s8Pc)aFL*Uhbx*UdLX^yVy0FJT(YF2DpGCavRj_>32|MC0~JpOC&5dkS*L2gj2{ zwEtl#Yh>|=n|?V@kr@S$O!l;y$tvdK2&|a=z4;k=M*JRA?YiVnkF{KydyNPR5d}T3 z;2k&+m*xzuuP3i`#Gn!W!ET?P^W!&pe%>7?6NF#85$BK+UP$A~*G z#&YP=?r#jnbVu$lUp2?(A++wr?H_*<+=K8~aaK%mS1@%j{RCIU>7(is#is9LzM~9? z^{JFn2wjnPY)i6OWJ^eV^sIerz*=;6e_h>rNZ)FRXV%X2e!Q_q2J^xwf?Etq7`z}kUV7HTzd*OI@D8+9;5;nHKpJpE!3XRuT zNz~>hE)}6&-Bxk3DEX;?~0u{2DiHxE6ah z?c46cqh)#XVD{&k4%~R+y`8m~o&64MQ-gT_y;(GsQ}=@r_XU$+N7Jq_Zr(_`Q@n{? z{HJEB>%wF^N3zbE6n*Ljbi5kucSr&=85cn|_a^S6-s_&q=P5F6OS30YJD=Ih3x6JP zl}g+x8?BjRa(AcIlj8`ud1~FQI&|EURgQD%wu5a{e!LT`{VC*X})hcg>!<&c({+ky27qq zJkLa<#23p%^Qs$uv}|i0eC;m9^R0s@G_qT(*&!9uFE*9cio&|gCP^q>rtelebs17< z5wb+Y{*qhCx0tVX>$w=%Jg;_IDJ0b+2_Q6Y=DSC+C-rJ{hKBG@6LLM zdxTuzUAB)@*yZHalBe@Xw~nL(tnH=)tkoy^M3yViSN*(u;s9)W*{l$-6T1Yly;u_Y$`5hb2sn@fQsETFu%M>L$#|Efg zO|wz;%x$p&7Cr%GzHk|!TGRhIn+dXi7fJ#uiS1oRZn0SO&jU_g&TJa>rZoGudBPr4I5>FBwM%fMb;fAC*%IIsoRl*NS~%}w`pq-JXY`&f8M_9XlT4xwv9MFgCQ)#jsp&}*uGEo#6`x2#3N@_ z!*<6mf-U%L*>}_5XyXUMC>n{?1Qg|b)@y^fyC?&RKaK&cIi-MzEbew zOtp28>?s#mYaI8>XoaWQm+rd0e5J*WP|EA}n^~qWb9<>6beeCEK2-Hvl?uJM-R~Rk zxv_3VH>=<(2TPZpzD)8CANz)Yxj+Ft)aBGz4dLE75oHsP+EPZ#_(et-Bd>lJDso8~_$Sp- zX^yo_et2V|@+7amsxLoNQ}O{8I~6QgsMf8x(DqjK1y z@jv>2G~L=J-JM+B#UKX`DUSE&#C;{5{bZc2Bv&l(u0{3{`haX5)P@c!Mkn)-PO8Y} z?(_)YYIN;X#_`3#7X@+_JM0#e=|zg}lkD(P{pB+aue9{}h3osIDv`dqK5(;I<#JxM zYMs4*-GWpdyP{s;ggmx<{Etz*Q=WNklle}%xdRB4GVX;sq2!oPpPWx0ojV%Sb+?6E z*S1#yv>o>T9Sc$&ihifhnb&sam;#jcF-`V;>GnJdr(8!_B3zUUV=F{9Dnwi=LU-w_ z-k6{NPMaou4pGm5C_C%Fuw(OP9s6Qar044|MCT;J4u#M!*L^!u$+|DydNHWdwZSODLb))` zt9-+&+{No;9Wl%sP_5(l*TmYEZ`hW**k*?E znv8ptpQ(TK-Zjsnw8>&M-NGT8-Ux14+FrqX6DE6mlB?2}u`+J*eWh!c5si(qD*RV9 zX0qBBRZZDE-G?3;k1Rja0Z`w3Q7ZRhmHmYS{0#@J3Z-NcpWr6x>Mi4HF0p2??%FOL z@f@H{s6u5{xy4rL*VR&E&xg~pjjOgx`?pKewP)>-nfxwHyfzDcCzHc$Ys-O|_>Gwu z8J3m8@&8`YZ+cnIdlS1fvam4%Ul=K#8254mw!-@!fzbugQ8?cy0C9FZQwKo4j4V`) zzza`sUbvm9KEWAT5FLT@oj^3*&J>*B3@=m+!@mrtO^oZfohbq!OT!Br!(HCa4svxI z8Rx`rB|iiXRZ&sd)(=H`(9^#LucJZrw-~`R+~HlECE}>GoV-~4t-XxS74dpNUrJZH2G21>?&GYlm+mp)EVF7&}27Cf0bC=on)_bk>4Xt$- ztvV29!!_TJMo(Gw``h7-55ui*4R$&T`uUt?E}o!0Uf+1U?(#VEAiDRAvkcV$CcK;*Tqkb)LVlr@IG{9NRQW~xk=O6OL@9M|9M?UI-z@vESPaV=7Xb1t_ zQ82p4T>1`=dW!;C^z3Ye{sHMQ=IKWz>Fx*@_jVPoY<*yoVX9(RExRC?y};Ta`%4~M z(k-X>TYk{_TAgfuNIH0TqadA4;|@VA2-GpDRplO)pTJ&Z>`G zpGP0Fn?d)FW;zdJtZB#_God%XjjRI9+Hea4jo-S-aWk3wngU7u<)PEkAM$nyTQreI)nTc91Pd9R4? zhR@EqKf+(Q3$C{O;AyFeoPvl>S+#PKPyM!Pf>15(GUu4xrQ%Ia`t}3YT4N6;b_iW+ z45h6$GG@}#xTJNwCFF8I+Sok8w1oh7B}bdvKJ;OP@1c*ByQ_E?S3Xk}=L_?Z*;Aw# zDF>5HJQrq}W}0I58L2HhPUXOMFXklGd^+$pVR_(+_%z5SOjVx~l%&UU1$w6MMg;%$ zyUNy;1pcR@OFRXVKaNF&U0AYAppj>3FLN0UXy9+1(dK}sI~DK5For7Jz{rL22R~J{FcrM=tJ zU2)k6xgFPHjcSp=pgTF@?R*Km$rv-xL5xgUw0~hxV*pJ}Sp|3g_Q7)d^?7|#dcb1a zEIN}T{JFOtO}L(O0nc$J$4G{p#Qt(Cqf*6*4Kc@m@K~iCw;ZB0Rl}>5XPT8;q)-l) zP`PKM*KV05bdI!`ydm8w6~Ewe@V#$bCXI>g-z&aN4jFm?}ZEhP$0)83qX6r zr0QG{WR@LL#CnwQ;Wzz(+3*y*R&kNwFP?^k$lvN}?x#aeG!Qr1Rdcs^w4p`tnNp=P zeyX4;Xrlt1Qe}tS%tT!J#th78ugR}$L_!xuA?BfWx^zd@y{hqSM;P{f2OGewNZf1$=TKiWD2`f{t&5}ya)ggK6oEYmQCUtX0 zN`n)f0SOpBD5g*f)9(ZNY*x9UU8Yi8Vgfrhg^ifVp%pUgkUs#rcXi0@I;Yq=G)G$W z2khxFGZ;HnlHPYsa=o_XZ$4S~E6;_#aObD9q=4M7Fe1`EVBe3Gl&BRKzD_22!kp?+ zKELgM7+ET)OT8&wi^Dd*#YV62KVLOaxD2dPetM1Jp1+%w_qrD0N`-F;_e(>-AGCkn zA=XM)R{ME9;ootBT{82f@M5l3)_~k3V&Q4J*!P1aO?1VD0m&pMnA2C(m9M@>@Q9x! zrT@U}V57Ejs8X$cH&rhT4V9j@g4|DXE6NsU-w2V2chRTZI#tm4&}eVpt?*D99STc0 zS!j$@&2cEqsa3=W$8yWqP(jo8P1y_{TeF01n72>6TY>&q#M`<;RxS~8VusG8NX_X8 z2cF|!7+KP7I;Sv!_B!L3>ZVU+0cLTDx zQt2~edzxNtf%6%g7t$ z7dArYaI}pth3-4ipQlxip75?9pQ&&;lSOG#GWMXQyP)y(#KoVPk(e!<&QNha5`M*4PaOrY(6IVP#Zr#A#$QQ zV5k>8H)a)@w~C-1eK)c7TCi^X_b~xGvP=A*`+|2nsjK^przhJP>HX!GDGV8U4E+oE zKk%hL(QPz7`_jB-Ckm7=F5su&3sXq0993foP1Z^1H(Qp05~S$}I>WlD?lh5qLF+Qm zWw_L`4u#yL`WJX&4hnZ%fE~#v9`LmPWf(drq*ZL^xZ@AWYe4*(#D+Vbm;}#)wFP5y zgZZInfFIgFE7oN6Tb4CHQQ^GWbuD6_H3p{5r-ilh>8tjX|IETqqlO zT6P9!WtDI^roD%EDF|Fe)8Y)8?gXJ!Y2=EjP_qGw65S0!7LG!rf z?RDV!V5+B@<;P8JA;k2MY|AjpXa{DQ>YsG9x2{xo^6~niKa{v9MI;a4z?S6suawyW z;!1Wrep0B9L^J$~{7f^tl!!)D{_>y6M(mzl3-V>+WN1_qRH@jgoNO(eOxswVSpQZ% zdv6*1ElIJjiRgk5bM}AH0?Zp-BrPW5FYF0IOw&I%sL@Mq`^4vW$ANbU8$zEo=ntRc zFmD9v027c_tV2r{qhQ=o2b^zm91}J+Hli@~3rLs+7j$^^6ltpL|A9{Z3;m$`7rHRn z0O0a{U9FvwpBfqjsTa?pfvSVz^1H6`eup%*W#vYKweLP}!C(BzN)7));@NrGP%L!_ z7n3UGR8d!y5Ky=rNzF~9W>~|ND)b3Tl{rE2dUQohg4rvh@8$Fru=U+?>?L%9z8**M z+r?qO>Vb)o%H}SR$SCRFi^fFPb#A=lHL7?$wJ!iIwF!D-*BQJt#eBfkV5X3I zRbyDZ9{-7IN35B0rj*ydEn!nPx`3Fb$(5&=A94il*!VeMF6%>k(TMB#wSG_SN)pViJM>Augbm zGg=&!V|wCS08|EIB7p~j`vMT$pR*VM_I_GE$^GnsKxj*pq5Ao11yDdjAwQ&~C_!cr z$w6hWOyDih`NXZKh(Y&oEX^^}*EXK4h}Ox96wfhUnQIBQYk=mP0=cjFQQ_a^UdX&_ z{3lq37rC+la1#f(H5LWR47PBD+jgV#+P(=Al(YWeC#x1F)9?pA(`TNaq-ZCTLk1b( zgqC}xF5`CE41?)NdS$pPRWCi!qv*+r9!`a^K4{f^ zLm;meqYD5X2$E>kMyH!YCBOzBULFG0C@9_O=H%B)PA3^{#pkclxla5g*_&nh1p1P{ zCjDhKdS6bTblM@aL`?@s@kz4AK_}~0IG(n$oF2=E%KaCji+0U-kxrM4(OY?Z!c0NC zHo9Wmc1Tz=)}ak>oz#^p|AiFWH2+lz#n)(`s8K6W@L}t(8IrK2bnU+^yMh5B0Lxq# z>9iA;r}6(Q%Ob99#uGEswS7>0iT2Mlxw3#gQUV@c``xkinAJ@@nx$ZvdId0(tny1| zMAz6&y!d}07yy#$CXQq&=&EfUh)mKY#nfb$g3!J&?M4+r-!M|VS20Lz#jhr;(W6$Q zo|hTJw)dCS^a(3>X+hTfnSiC;alqf8&l(a5=mMDb5N&b2;Ich*c|m0vz#4Uzb^@>p zzrsj$FxEObQ{bD&@mp5$?_if9d#n(vt9V9Y(N~Zop5b*QpUm5>Gas>!1Py$Oy5QAk)XFi~4?*B)Y|62y-J_MtGbs`u; z3Q7<|7;|kvr)x<;rENh%hAqAiTl_19_aQID)H`#=%t_dqvEZYijj4U{U(*rf)@)x(aCl2@SoFR&*&h1j& z6^w59NO91u6Q5JDD_Ovg!xsQ2;g<($$yXE-6hN-z zbT^lDAT(Bt+XL>RQZT+yIj)L!&2xdD?EPm>@Ix2)FG=iDx*Omd1_tSF0D&Y*y3rm6 z_zrWjJ*>^1L%TNiAM#i_%)hR&?t}6JT;q-)$`6Y2OShM^tewm^P14k?odnm0KC7)1 zv&v|@&$H47{Ojh$K|`!|iAr(40hVNlWi=$ey`HlQhxx?lX)MEut8lTEy-SajjNN4f zSqnbux$hghgAF!rMut~Rx(|tJ-Y%FtNw;4n8{$@d8Uva%ngx=R0-D+ah`9m$t3{;< z*f7AT7(pyWh?V#QUKP@$(F&l1oaFx85CCNr0oy&1g&?jX#8&)E$o18wa8u1m)dIYFglUOx1h9NNvm0wvPe7jl5V8Tl^6tbn)GYi4YMU0<-Vh zJneqfFEE*?d?p%cwW<{7h6s^clT~oQ*$h$s$u&k#W!&i4O(+JQ`6X+^>|O&)!8@<= zgC-*u%afC;Q)Y=w0sy*EevoK1qAvF=^b>EnE}{JvaJ9%-s*v$yDJYq7-CT4v`OkKr0=8a> zW^FsT)>^w3I3Y-JXr%*mk{riU9FFOXKBzOmUUfbuxt!e81f|>4Sk|`xm*i#PxYDTW zT_=F+kn85CYmSrj;Qz`X)(52uFenj3sX|ez>Gn4*YkvXc&YHEqz_kg5YxS`QuSnaX@)##O|(I9|H_DXE?Lg#w%+&k^F&X?%- ztmOYRVkipPx{;+@%AU#=vRsXAES0rnl4+5YB3ZITk$qo6 zmWdV-vhRjMvdg~x&KbkK^ZEXIJig!C{ih!Dp7VL1_vd`h=RD8reclilz!3+cjt_jA zkBd9TZhO#^{Y4JOc9h-r+!9%EzE?n_aU5|x>i9Uso$bL7pvfcK(I>X&{2+YhalUS# z$vloYA9WnOA?oaQ2hrPr7rRk*yK`HI_2&Z19cyxUm04cYSkdS zga>*c>CN5Lt0PItGGNIdm4&qfJu%sgFx%*^8vMafgYKT$ASVtsAE!^1CM=XDSe0IL zn;5s4t*FS)PnrR`L37g-$1#Axb?0iiUOBM5TAZMiQ2GWaGs6q^tKD9?wacma)LU?0 zzwpP|Rqm%PzZz1dv((5Y!9J2R$X5BmywABQ?Io^)xBGl_pSvlPh;{R|?YR!+xnLD= z2HR%_>h{@zINoDp&;_ze*cQOELohLCSzyjy9#nk$WbuHXvYb1@% zhv?Nmm73;${rRz;yJ6({Zy-Zdk} z?-pvwmhV{@>Lbp(BCVwkv)MQ$t_CSny|2I=w<9q*)#XgL>Aogt6&fut)IJiJ3ZywQnH$3Kpbql z%|1(76K1GXe4%g^Y|Li@f2eW>=R+``h^aacAuK*4<2db`iC#S`NW7mV29nd>8#qtP z>`9602>iMULj3*5wlbvyY@zIv(nstVA4gyv= zA=B>4P6-Sta7StV-K)UrX7{;gxmwqCtTbR|m@=EIWuC~IW3}cEOv_!lIW%fp{QyWn zRimhqPdp=W(?S%>*=kh2#j4M-gIv#pu3W;*sdAb}v0$Sdf@apjovUT3W>HwWv3L4J z`>H^ukaR|)jF{Hd0jJf~Zpd1!@=kYGYhp-V7kgsw*VqpACb>P<;l2_K@$g1o?VIwI zs65Hp`<#U#4rcihNBOM7A4+^y3zR3#3Z`1&RcM@TS#TSe*p5)tF;YePdZ$P@2zOgeh**aV(+y{AREwk7o?=KA1bvR zlGl%(d1wG$yjs?@hyuH=AUm_~VW$RR5@=5$%zDO|fu^r6dcVR-ZMb;j6;KFIy-pka zE;%D5nfN=*sq|cNu)T3W$ze@v@21vl6wC`%dgFQ{&T3bBFI0M4Rfa4`yFI@w8I%pK zyC^wxSu*jWlZlmR)vI8YmNhYXdk1mE!6@;;PiNK5Y(8Hv51!Gk6n^pa@myf=%Q98_ zZX8QPUd$%tBENIJe8ldk_gk&kcp_)9y=3Ii= zT)^&YH8>}z#~+6)FNKfT7$x2a_Eo>>MfZv8YJinjYw816rUgqTSa}P<{%gP1S&+EM zxHjr!eGX=&?dx&Sbkg&D^K7m}!YfB`jA8DZxi5Ct^J7Oq5 z{JeKH8x7N4;C7B`0;y%*zADWLcI&9S62PJwaeS{vMEOEQxmQF;Jn?A8k}%t^}{iS^y$^?;TXn4eDu7bll5B$rzy1Et2437&(g*Xan; z;CX7&yLz5P0AQ?QdvUBv0vw4XRXIjoJ#3xknaR(()jCbqdW^%GZQ=& z&kQ2YU0@?N_=`8lbha}+Mt2-$Ve}E$#^l4X$?p(Yy8cM+Zf+c!#l8i;J6LO=mQ&fg zP`ux&_=w|t|8N&5{w(5d$+v4iRrx`0Gk*Nk^|LizMB=Ew_-NvWlGW~DQQ5Wrx!w^r zZdUQtb1eFG8>AWC4;vdr4+?Z9^zC{Pai#S1{1*Lsc<#kj$Xcc41iIK8KeHFUfW;=sb!(0av3ucB*%om*p@)^Ui*+FaXoz~crJ%i0o+%nY;Qsers zkLYvV;wmW6FRpK%&js#Le~Mn`IZjkB3u& z1tuS>N87D=uiDqXzQ`|CXFS@@Aab~?fU!zLpV6sEF5K^t&iILo2FFsaok;w=MW2zH zCGXG#k+W}+2Gjcr*jNO?jfLZr0+;VWE_|`J*zWO|e8w`kGN;5%`(`CPoZK>7X?-JK z?GFaZaLOoC&v1x73RMgA9M zwR0oQb;D9ABh|ev)(oj2J6c+*Umlig?VVd)5c0gLs(G{7I6M)2z#S}mrFr+2fms%B zwKn{2A*Bn)+q%`;G8Ni}KpAt0Bk}Ur{Lyb^*0}D7vsz`=3uV?;W%DDsPO>}RhUGZ1 z4{MUyLKb*eCwWakTs0uzvMt1n-CuZTgiGG=KK5m+OrG&&W$?}2PVV^KDoY& zw#r)d4ld3K6S)PBvq6p^f2o(Xs)TA9%`I@44RQb`&a9<`?2(qfg|`Ds8QJEIHE@|{ z5g;~Ch&MOIRd6<^!>soaHSc7O)4OVWye~B6rKr+~Z%ieApoA@<8WMlk^FH%fm@%bK z9>(s8pG#Gi87;o$ZmL|s%l7XM) zy4=nO2D)z&=l2Bb_ExgWHAKao*vq?rl=g=WW4cYuvZq>f@9O-$meV0>euUI z+_-g5fyMAKad^^3XKWA@zh85it{(oVIC!8d$wtVeI7 z7u#N^w#bI>2dDdfc{gOQzu~yfCn2?J=W9kgxbIRrU&Qs=nB}#hL4JWup0xGiMANlZ za?!R7FV}z*tWv|GuzX|h{IOMX%ytavYgUDyxo}4P+>)DUX7115I8}eFiAmi%qd=T_ zD?amSanH9M-=@5Ab2rX5Zgq>4b?f4AsyS*}11Hmd2Yhren=6`67#k*~Zoi(-_a?YF)owJ)?p)e%S=F)M zt5~0cKiwO%TdC-SVUdMu(NcNE)0ubFGu0yWTJ0csxIUq@uu;uxW9E=Y6nYYDyyakV zMR@PyxyInS26$R<6`U4?!h(RxAEVl~=gxq=IFR`Fq~pNBdwAtzkjt*G0mI#zyIm0$ zn8;rgn7t~Q3n<)WGe z^msNX6aYmAM^3JJ5!b(|IS%j44$5Tkew<^7~>%Dg$d&iTZ_tB^~SpS z+_iKG1LyMf=2BzT{`Z?UWUm9Uzx1DMVoh)Ye>@{cXyN64u^P6+mg_sI3Ep!p?8F-X<29d%ehDfabrx%V z&W&%re)g=@T&HbwD!%!{O?=>R!kPKCiC}wsw{N@BNRPE{*8pK2TMYIPjhgiU@FHey4 z?im-RAV*D|r^U)TeBbQ=vf|h*raZV3ZI1)T^an67b#5zgox1EL z#md@#-)##TRcA7#!$wuHGu4>~K7)c6bRC!;d2op1O*Q8=_3F>U451~M9@J6RN{(H4 znPBxYB*u*?L#=jCLSLW!J^>v~Vs)K(wTy{q!Dnl|htx6DN{?O0Ot8ufY55dy->7A( z1vJBjah??Li#HQLIHoQr)LV;wV|$VM*?O$rTCZjRB)BLNzIGb>1SsI|B4k29$UbWU zl~J>jBJ3|xO>D-@Z1nydEDpUCYy^j{2O$5G^};7>t4|@{LI+z=tAlGD4=Sv_9 z1b4(Mk5l&#DzzgPwLYUS^9j`Rjf6&!N(b-OPH~V*hi7#^m>s}xuY`C9s*t)1*iaN< z89m|i@vT1%`rfHa>3Rr#n^h zBapgLL1z&N6zWFhg#sR)8M5D$npQPC`U)zWO$_U2K!V~NK*FMUcM})*jSS^2T{|^n zW_tE3eOpr?b@^lF+m@tu@Uw)W{=__c_4%XGi44V=BSrgFybDwp2`69G2wByDOw=a> zMxTKQknOnm2N7;&-W$wT=sy$HW-x+4)C%gX(APB`1QNY-T_JpHYLw2*c?x(HgM9oa zJw|H5)j5m1vbGl*T0c-O8V;)-q3LJ#4)uoLa|o zO=uzgF{rOOD_aCo@$TBNH;K^_!;I9ZCU8O<%i5uN>a|*}YFa7PN=$i42;PN9pOzkq8QhwZFPb`%nv&t>>{}`euJOj% zRzHGA0pU#q0iN4P1lX?!u5wrwa#(2DHY3ad;0P@_1y8RLiQ1=2iP~^@O(n}hB@0mA z&OWTTaIm5&=78RKTRVhWlW|a>e`aY)b~vM+a!P4y){O%DRjN7e2U;062wbTHiIbsO zWy#9toZmis7ba6nQRaJvTC@3E!RD*f8zlF@;C-L#O=`)03HM`U??P(1p4D8hP)jyH zH05}MJRxi~+ndy!{Suz&rFt)E!S%DSGLIjcV!aDtg5&h}nck$P?5L&>sy7cApNpPh z)H`XyLd&L}a$eLz+I z*rJ+P70c7>HbtP2^0VBiq}@5OVQ~0nLs{(y)so-3M+G;lBX0KiM|loXRzHV%OkR&K zLzMJh%7+;~71znqON-ZY!-;;Ux$Kk|_|>fVL!CPx;ZF6}9vME+3xuwT?x^;~b7w|W zChfQInHsr@x&RITdf=SylSj?vxTJxDFxJN|X$3B05iSGG zEP*zy1h5A`exbGBwpAs|CQ45-I3ApL>PpV)NuEgv=8FfD<L5trUTEvLZOa2kbYZXThw#2m z8kW*}BLrCM(A{cFt(EOw7|6Ja3a`x2Q)vQNP1l>t(5p+AO6lEeKfu<}aP};C_g-oO zBU^@*;g793m(~wc0hxNY;L>`{S2vSdnC8~afa0Wt&ZL&3XKbDcWHA(g6y81oOIG4n zfAOy}Gk;p&v}wB`7RSu=JoSe5h@`Eq=+NBf+XvcjsKhZdJWn;z9(iJ`>pN5iY;89L zaiMZpV-5EGgs~AroFG`pRew7#qtn%#k zYa|X>e%u=6#~E7?{yiw1Z(?9yYZI03p1&OkRw5;tXuZ>j*PFJqAU;#P=>m1~)kZ>f`mWy;0nt4%;jYjHVOu{BFE z?WYr;&39$YqOO1H#G8mHX_j<$S9E5+?UdEmCtglu?g$>c%6$EPC;lk-?q+BAgU-xb zozslrY1x4~_fBi3WKXAMC!{!cVg*CgI&F4?M#nn`)jRVQI(vw(cS(G)No>)U*;&*| zG6MY;wQ?0*V=0n#n;g9TCi^#gCzyWi$_gI#I;~2{n(fMx>X@`=Sg5+MAI6Y$W*#>b zarR8xz(U)ARok_tpX!rbgs~bOeXX{N;ZXApxa%M8Tj(9I>J4$;QO8#aa%7coi?}r} zr@&=4$i=K+yt1{~-8^_^$2yf5P2!}Jt>NXNNZH$;snvoBv0#0By?T7o)^Kd7EQ>qG zRZ19EPyS%4G0eZFnhz#Id9yn#t*RX-SGVU~12yY?-``4rL;Foyo6dAGT7x}SNLrCCdieMlI!% z(*+quZ?Ac39h~z(MZ@>EIGAhbbBML>G6A?hTcFU=NZey6DPa$`C>yS;WvB{Gw?5O$ z67Ova6Rz`SX@z@=E9IW2ue=)C*qT!nE@0n#7e{FRtaC)gJ4|r<=>xSNIqbP|OLT9l zov#Y8Zk}4d&Q2*orX(yc^<>)#VsYlWkiv+IUbnzYyYK8ATF`2B=zO*w>){*6$JkgH zKvMJN)E*sBAwO#ox6gi^m%;%K1|LkuHdf-gj~q7_?Xz>EHI z*DOXRQ{tzc7tEMi-!Xj=D19gV!ZE6({atEz*Y@XC*95`K2+jf|h9^@5XPn*44p)Zk zxPE@_DWp*rK9HJ}`C#>Mt3wPuU?sGi`wB~J zfIerb_~e>%bJZ!EQ&%H}U$BK1wUdp@$)ciRi5(2CQlV*!ps4S4RYy`sGB`i#`!>o_ zm<~DZRo)@gp3L74(EXXEFnQSocNC37llDC*ZXJ;J_;xd@;PRWG%PXe{s|sN$>A(?Y zV)rfaZZ+4{yH$k2Q7^YnC8(d<(*e$bCV?*KmHB*)(;bv!gMzi|T;Q3#14y6w-R`-v zu6GzE!Azr$>9;72?PgPizen74kb^Oj5LG9Ciu zv`pGRvTUB~N`6k@bT@%ZU?J;#0;fftw>|hPX7G$^uibItcZDE_J*_!g_+hSOonBRY z&c&)6utN;tbf@ktpR&$}aDo{OsyHr!M5{BkwDN}Q(wqdzY*0-NbOxwCs@d{|IV;Qfm)?z z8Z?idrAzob{FtKZ%}k&-je}K^kH?HSzfXe+K_I*{FJpFQqJ12sD?n-H=^UknWL2x= zYd=CSMTkl=7T%BcA~K%o|MtLSF2ZrtI^SXf{Fyr!xihI+jF6VV=?z-%@JD%$Vx z94I{8P_)~LkA2>L6i3np3NU6>GWCpZ6o1%7lpGK5s0dv9VnK!1Hk2EzZ0}Qn(&pGC zeFWs|$CEsrfT|upT>Icq+;>ng+XNzyA+o#%8RbHd5#u=rJ&L}C9<2sL5{Tq{s1Y9M z#La@n>F_p*ECtxvjV??DAS+uBYdJ%3pzJWmuo~1AENvQ;Lb#}fh+~71lDiHX6f{0J z^y47DSp=dSOpN(YJ9eHHZGGMN<-FhN+gV_YM?vmLTgKpZBiK!yez#<)k?VZllpe-Sd1VRStROAbpiWn5egQ1|B^u{!s{qYuqXdl&>9Vx)Beg;9iHd za9rI~)3LSMIc5TnV!@$o%}6_}oXdd~ao>UxKpmUk;VD{;=L@S$YT4*}T8-!9#70X{ z2N$!a0J;_{*UG`i!6MO(b4x{{ddm)a5e|Il9eDF;&??~)?8~)ak!VOfyn$$o%+KO_ zp!#R8Ln3qMFZuzM8Mb`8~DP^RE~{jnG&Qzx_;TZU}-{eyuicUDFSTo7N6!^pL*h zmyHnB%4ybrT1~)H{lm3c8fkFI{qfCj>-v`{Ya5A&Q$esi(|ak0u&TTid7)g|K}&Fq zaJFKl$0L>T_kuw7pf*jcSt1h;$b5E_n7~h6siqyRj}H)Af7-wgUt*Ycv^u_0TmV;o z<1G6N-I4nEN-+WZ^1F&@+_lFowC2PG#LCwhq?vpcJn5hj#7Zn*_tVQaDW!EL={~d2 z>J4J`#mmPsBiwm>j-Rs9G7n;w9`yXRNV26-<8 zd5e`RF3j@ zXdy9UCGlBoIRtfN2&ZWw;HX9C+_k>cYP<*wi7N46m7p~-p?-MZ0{lvq`pNO8qn6{Frq7}B^ zI9s8V_Q5dCGpcc^BJlYYtsvEfAXPD1B|LX++Hz3U;=!sgsK@xU0=%edT3})$0gg+& zSn#}futiY0eK{UZC$krg{Yi}~)r2T3iD3A!1j_Nma(ob8)F7>q7Q(ERM73D(x1e%3 zUxbv>8V%C|qZ(D}2@)1;&#!0%l`jO9is8ZkCN{!XWIRGlZ%$m#JZSj}_7{zvNsULV z3D2xD;S77tU(QA>XA8owH%Ozt1ez9^Q&yRkVtTzn`(e;YN@?JoycyMaw4NXWgVqe% zzYw%vteh@AldmP;(d#-~q}4i-1g+A5`$ z8>X$$35H<(w_0#&2!DeI2!Xyh{N(sDO|0$9!C&=}k9DHM69_>75yA?uz6A}y2Qh@8 z#TD(KfrX#}v2w>8d@g(txt|Gt!wofr+ycCmYFbEQqYa!32>vK#s$R^Ty_{KnsQKH| z0oeuUsr!sH|&+9k94NV96_n!Sw@Ynlc(HL0z#j`qk5mRo;1)mkaN)i6B-*QCa7 zE$PYj+_ZVCMXs!clvnz-KYb@aC0p)^y^Wbw>3@_(&gQ46G)rb$faTvl=}fBi9?RPS z>XU*s6W-oUARXQM-H*`xvgx<(>Lbb-*Zz!y5Sl#9+boglcxT$a!o<40As*nX^0nHB zOz*^vJBJ_3S zQo_BTxe}{i*P3B+Y5&O&xYCSHSPZ7so5<>GC9fo*k;qD{Uss-S)F~lA9}I#gwSt>k zJy!DNoX;awKdX}VjH8zmDh&j1^?>GW3&RR+P-Ap|}^byvhI ziGS0OigfxbhH8Ug>X-r_;HRUbUP=6$hPz0ozhKC$G|;1t>Dz|J&6mIBSL*BaChn)c z9LHZ}PUU9)nn4rk<5vvd5)-I_0UtBDnVd`v0oI z0O|Bs4Brw5sF4C6v$>ho`py5M;eC{T^SnW`MdE;cy(3(pP0u6_EF=zy)jQ@`<$lQE z=1tvO??|k746>4H&1eNHG^WwdD!0H&syriPu*n9j@t%azjMnyykgw+&B_s&8w$nzl z!njoL^qrS?&9}R%wlO3-T)nFNk%6JTRAR=l>~|Ih7eSNM+S9slHhZexm~&J>0%m?W=qES+?L8NFVeOn#Ewz_Y<*cLcAX)JYv@ z3|l^_1ZTV%yJf#|qdb}Hn>@@bD1r6}xMPm~xDmq^O1ddzoT9j`_}C4EN1lJ&;LtGd z4gv-x@-Uothog^OhvL6#c!_lSD~3_t9o8^X;KRws?u+7~f79?B>GW3&BfL+kWBQ!; zDHzjE#Y6w5As*@UR}5pkPpM-He1I|SRy_1?8X}NRf5DJF%&SiwQxPYLZdX+JFpvHe z<^X&-PF7(KNS)07HA5}Z$FCTsF^SZ`YB7l*uu&fUf74KnbovX1mMM%4HPUK~4TyAv z=U+9{Bc1+=VHz_?jkF#!2qGQhY55loBvs|?A#TbiU%MXV>}IeaVf{h1 ziVax86&un?vl}sk(rBlAQm!hQ8)saN2!!TD%{Q4~kLI$S9%cv+AgL-kzkjviIzbHm zQQ^t(h`&E017>6JqhX)R91KCE3z5oG&X8*8+pr;^nkqT9iq|#o#RZ1zq&HDK(qEpU zuH%dwdoeN)baG_lGnieM)K2z_YpvTE_JSk(8-is#s}X&Y!fCkN=!#~BJUv>8*(i1L z&@j)ADa=MVOF#>Hn1N0X^>b4SeeF7w4?*N&Zur|Z$dldqD1}e#k^xddFO*~t(kgYb zyAZ_)KJq)~$i~cQ=1|fqLvj(IvhU^$(wmK#jnZi5e3Az>QcLvhojg07F)M-8AOl(9 z9gS6J4dp|F+?4mec3+eaHNik4{Owxg$q)G`@1NME!$6Mhr(}DO_NbE|3Q^2yfm~!p zp9m%GF(g;f0_oa_xi5`Akxz=G24aDJ2Lf@y+;>HvppM9A%zZE-qdYsNG54t>g2WkG z5gEv%zXg*pXY9Npio~Kh7HEJM8TA_874-Ifrihb=ml@B$-5lQv8Ymz5> z@==xpF+~RQemM|PLvkZEkPOn;M$9K^v{^nWjT(p*x(5W}g8Af%Hlqeohxr5o8RL06 zjrp`32p#fZAYc_J^R??%K15vw?)uxc$&&;5C}mIVGU149-A~E$Ac?Az1BECAI3oP# z$S%xivry7$5x8z_p)&_f?r z&IZ$$>}y9+&ZbUZ5E|Ga-sGc@pV+}2A^Xy3fy!mzC1?;n@sjl64-^p zO{MRt3=-Hx9*{<}=aZ-}+A~Y^lbt;Je+y&VtMt!7=2aD9_7`C`vkP6ayFR0 zrM`Awm9weSH`d>-Ri6Bqk5c-?E`t_Gjt5CVo%~pcVo3|cff=nGN)j+6Yhs<|F5CgX zfru3Ko4(U^yRY)uqrd4}Zw8)K|HvL>pp<&pef=Z5i5pCVpj&pWjO546l+xRF8S>y3 z#aJjgt4IQy$d5NsEIq(2nsbmHnAd9WB5`t&%TeGKE5%678#miXua%S`1+##)Sc>zg@FD*_)5@_6hhsDIiw+ z{gg}(5~n)ZTZn>(qtJVfY|V_83?)e!l3U^9sLVhR<(UF}Ug6kp@T*d!EKbjL&vM~hI$J@*dB|J7t1`?2^n1rJ+!5#c)Jc$ zUeG}3+fQT`=j(2&dg-d^=eC+RvHYkN^7|3ysIc~~JziQiKSHzs?=zmQGaX~%qU0yc z!LuQhRP;pH5~Frd#S^38K`QbUp28@ok`-_5)gYVu2s>j?hUAxuhdv1NDs5xIpr~@P zhUcki0ESnPg{Br`;P*p|hMM{LL+8a9e%^*xNr!_5`qRF4kBpW4lEr9}^aYN>^X91r z`7=$!`UjDGH(XXgD=%Xl##pu;(W%)_95|2iN?R>mAkE1m?Sct)MOV-~R-n-8p(H*- zavH76GsangB|C*BopMQhN+ZTwYHXBtxnqXb=K$dgNblSg^u#nF7* zqZH6q9;C;7#$T0n;BA2(>QHE~{FOdQu7eMQgEyW9qZLYeEM%MjZ(_fa4ku5%G#adi z=U|BE{E{V3>bPLE@<|!+uG9IAt$mXJ3cx~xOcy|P1TBCOUII0M<7hn(k~g1mmvRGj zvUp)KQE0I8ynT{f3j<)|C9q&5LP_32#&JslG;r_`q|uy)WGz|%;wKxNF%tQt1Q>w6 z2Dy&gxJ$8N3X@5FE{G1wSP>4j{gVG*2hJnBdDN*fJNSKeP<)kOD2d&W97pRTPM++= zM=5zS91DZe_8YeJ8SYeExrUWDkAo-A8FSthokWWw356E=%SDR@ncjsH(#1}sixcRd zxF~-zoCu=;E^K^;yA_?sc=M=p6u98z$#cQ9xuS=tQJg>zq0qLWBuPVZF1!&CMXo$K zn2+)^7b*`hZ7i5JX|!!V$q7!VZ^$c-C^<`>bROf$o5r+JA1JbqAN-V7Zc4dt@)&PF zt-)0fQV5@Mk8%Tb%00kLpwK|9e0q{x51;rh-hLL0V<;&^$T$h!))A!!PM&^gG(gXJ z_{6XHB}<-caKSj{lU~D{kk%l#aU1t2HcVqC;9ZU#L(_FohDA73|A~XCVP0426UXwp za`3o1V`N;>VKk3nC^T0nX_Fy2n$~5sJoz>s<;{~}>Kdi)H*DcEOi}!)i^CBlbq~@e zb@FZSrzyc*$e%!5(R&9Y!-A2KMswwp)WJxjc50C6`Uu~nG$nR&s**>V*?^qoD|a7aUDnby%&=o62HMmaT~J76;~?@fA}3b zE})LnV}n0}RK;yP%(Ee%qyYzP3-3J?+Jnz{nD-uhCU^Ob#ZGRMMtcYuLu#C&hYafR zKl&PGEa4nI8$o)poWcAzKHDR3(|Zr&kD{eeVf2*<{Dh0r^GtpjN6WN1j6elwKo1wt z105<*AqZ4}E|yRsJ&g&a-XqfGGE4sV1~hn_LcrvgKYP)`>C`{{Ok)eUo{lxY`neK; zmT&bGAot#AA@3Qp-&#@g43|c818UM3N^b zlBDfHV*e|M6;{ze(|ezu5~x-LCBmf;lmJ1{kq8DsrNnTzvNNQ>DFk>>*cbK9)MO`+KpaNacQKm=%L74_5WjGO(F;1`w6;Ra4KN%h{y>R^)S>gt1D2JT|r2AIjl(_;Asyp57 z+z*qzxhc7W$5&PI#Q!H^mRtD>BYmy##2mBSqY8N~CjUFo34g`4%%Kj&ZLa7@fNqc9 zXlkQFc^e$#4fJBf2*IR3=$W*Qo=HVK^v+cN+1KD44L(g_PkJc)>gQwxRE!W%DZ;1>y=p1e$KWK=vVqNVb6n zbh$3j1zobuACYVWJ=Fa@*`|X?wk0D_W2}ovwxuGHZ5I#$d_*MM{1Le@L4*L(K_uHi z0CWNd20)i9JBMJ46{3T9gd$2t!0OGigJs1N|DVY=(1Z>?zz2P@4RivNZJ~a{SwqD6 ziF(^1g{irY2OEpnM`Aq>eMr{YI%2tbZ@iowbj?!aA5N1+F?9al4oV2b})WtNgii$Uf9;L$UVcgc~+Lt zRGY_HlNWXtn!e^)U4o{sd7NMJ!u+6VJkRP1G>zwR{>Tff`AMrKUxE)T+gL2y)MKZs zwoI9{iHq=U_dg*rgc7k$43IP|%f)r`ycy;1ZsqPSXC3SIa;YzVYO1q~8qzD1Hdm3M zpa9tJOU)O%RaHE(Hiu#m^dZ|gb3l2Ji*XN-)-b9?$;NQGAuifz5K}7Wow$` zoyJ!tj`;zvmwLe4Zce*g((fvARkcj<)>nLcc6xFc=#s{y5F#m#lVQvwvJhB9;4iy9xidUgu{$2apfp>%{Gy76$ztt8HN(! zN(|U!SQZUq1TLfH%Wez&)J6Xmgo~@kMCe`YLb^DCh=S(grOA1Z1K?NPhVA<8WAcg3 zV<1Jhr7rxg3rkJ_NYU-#F=^X#XBuE-?OBl|dG;|NmPp6SuC5k=IW+fu-Qv9_AcuC( z=Z?z*?rxxr_M9roLm89-AZ@{j3~ecf*}c`V0rlZt(;&Nd6o>zhD?PW%mw|kr!e4!w znkc|HBDO5YR=PGY;ODLc@WUnd;4pG(l$mc9%{D<9mc4}IzNO?IO2p%ze$9J#JBtZQ zyR5@&JDjPR$3!CK%R26EcNK|*kI0`NFLr0UzKDkqz6Q+G1`K^?dJzFt+<3bZL01uF zILr2HlzryLQ|{_cnfSw4!S^rZ%gC&0!zF?=_sSjtHwEw%FI_lC2%aYXD3SHrWn}g= zntwqS6Sl;Fn?iW%q%zx@CU!?R+k`DY;025)6w$#|1ra)j{o70ae+QwiA{8(qa6tu1 zL_INp&#)|w<}ppa%vYfM1N&G!98a^YV}#9PU+%h$mPo@l1GtptES7#{@>3Ue{N0V* z-5*%TzIeIR!BOHsT%i{kVCE6Pr(NbN)U6BORx3mw1aFg27L!nY5dp)pb4v}eh!kpUUfXqb2dwfmRT) z@(6e=fdA^H3vYtpWm1O{5zsCxWly7q$W{{1VxpB8@K^|+0PlMLU0u%N_`d?s+e#lm zCM^JhtB4*9z*?iMjvL=~w{glO69&*65s)BX_Lenmq=Y~X;JApMM}W5gzRRnT`lP)~ zGEpL&+GTIq(`w-uv6T>5Oe7KmyoK;_FaYhXY2tSpvrQ!O0}|jJpGS0X72&X-^(PL_ zyNV>ih-UL=XY#L>uk{k>E@2;wUFu`Za`RZ{U6+xPJQx)4k;hS-mu<3q4d^5ZB_fm< zz;0L;M~fm(zU*%B8dye|I%^_Z!wRiq|w;p@xx2l8FdV_XyaeU3Ocj`wSTA zA|!#P?wH81n8=(J8G>N>qW-|=!Z3B2Hzgf;Y0^f;Qt4XHfNLwvII>KeMk=WwA^yi^ ze*?+ne==#=|KFIjX^De>W72YuE3Og)ir7WrTXTrE=x@jm(116L0MLDUWZ2OY#bXaW zaP$$*5Ip)XzozjA^@Ja9u{mvpN5A|z41pV&NP3>RBJeYHkDh14%Q&LZ#-jp(3ebQa zE}#cGR1_g`1iDy4g?fH~8F+C~^$3@C%Pjey8!W>^9|4nJ{oE2k52t_pnZ_1yJsoR) z^|LDiEmL>tSv8D6O^3kUMvh{Fz6hsbnHGElmf5w8k!MKqfGb?Y@3>qn$(u4c4;M?& zB^_uylK8u8xw}hP$2z@SARj@W^jyi04AAxnVAn4566)53ogzszb>HMXi^+L?5uyA5 zZ8$O75#Z^NS`K1*NtU=GIO8#dkR`)NGJznLWC;x`FbFyjWg}f8x%1yQpedaW1U7#8 zGatQjDq5xpO*wgl@zW_Mlq>>EZV^k|TOk6HA)o<05s=iG@}v?$UxX_^Kpj3Q&;=c* z>=Y23dWxiu84`8d|9=o#=aHA#0D$}ffcIy8`p)*yB-pYlc}S0)Ti|;- z83f$Z$)Nkk=v52wPbY&8iQd)aC>GQgS#MZ&8ocY2GDHWW2o8NhaA(B1mTtxIzJ!be#E57v=~NvjYL1Tag-NbkfRB4AIB^WidumA)o=B z3Za-IR7e#<27w;vWY7r&x$YmQmq9xaGUyOO2H6QB0??rau&hc_`0-Yo(=L`Q%b-6I zD&-vlO&|a|83Y2LlR<|ND51n7I!Hq}{DffBiUZoJf9rDlwQKFK@ua^{0-Dgn2l${P z#VybY9a}&Y^fWrOf({zLJ|SRpD-D4sO8-w?(C7nPw9zRL;DQb=&;?zV3`RkfBzZ^| zL(IiFgrg z^Yu2Hb785FUihuA;Ho=cTd#ke-{H@7u7i=kfZ!hF=eyxuq@R&TitW?S*6bP{0bMadBU2;i_5KP* zXe@-rZ-;=fuYuFPzv9~zF#14a6*PWs;56^AsDef#XnX~YISrip{S~i(@qlnjy~i6Bqk4L!%OS3NvK%uEUji_eQ*d_;L_ZelB(GN#hc9?)QgQ#<$+ ztJ=?ka}4#IXTn}BFIK#DIl}XGQSm3ykynMq(fCfDH@{aEM;8^}HtW3X?x{{|q3+?i zsiL@t2^&W1Bn*Y+3iYg5gOd@*g4MwjC&Pl1k;aCtS8=sm>cy2q#nl-n!yYhI0|Gs$ zAU0wlJVFVa(l_cn0|NW74bctm&tq6RuYvcrsQ$lBo&`>A$oI6BBwleB^cA_`Ih6B6 z&<<5zY&NXwnyahJjX$U$JOWZ_Ys_&n9=4s$<)us_OYPYA%ZZL`cg42bXtCV^{#9V6 zjxoryq9b_9F)dZD%=Dg7CrIe6uT*hGwHIdvKVEYXyC(piFfoZ?!-^zF2Jjc$%Zk_H zKovte!(UyBQp5PW`}Zn8cO{MOV!}p(vG#R0HxUci_V0cEt*Y2uSi~9kb`4GeJUZMT z5uQ~>Cc`TC)~nnDPfq35F>GW}aYx`b_JD2R!3A#c#3^`q7Kw@+5Eg;YZ97Kw9t!JW zW&$R|Y50_U%uOtWQ-)Op*#mTF4Fp+mY@wcCnXt;V9$pj`lSNbXjZ9(!4}CB_DV8D@ zpyQ15U#}ua>%t#}U0+dr$=&k>yl0U}Px>p$kbQ^->2RnBN@G8+!TH0e-`>Oh|1L)I z3X9WdKFvHl`6`OXn6MSJOF~(2q0-oj^(xYE-ftHTa+U~i9#xSR5*~?%ftHzfHX3z) z5dFE6TMF0;6jnXdvu6!1lzK1TID}UYRcTHYX%}25dw_EtoabW5Zp_6-2*M*@0(FFh zQ)n%8I91}MvESF=>Zs2|0c+*q`Pj_lbz$*2IOdh+Cf33!qbl)W%&DPssK&G4v_d_{ znXp#WF^}}jC@L-$O*wC5k^pZ-M=V7mK*t4Fw_YWl8mAYo4uut{D8AzEnE}VgxT?6x z$mHu^K?nvRf;dhKBDb(u3kH#FZek^zGNM8N>jw3~v#AnTa1x=O158*w7{r?h&xE4l zx1uQqMkaBzAjAV2oN<}!RS2{oGErF0ieg81&jc7m3i670WFG=S4IC;2X>9WvTqgA? z-o^d@E=F<+i{qfri%WcSFA-fafo`-tJlQLXzcXQzXkN~<;Lb~9lh&)`QSU_{$XPtV zc|;}efbd8xj6L4Gv(~8d?@l6-PVVCnPNa}d`hV(VmI*sVjpRPAjRn^xjU57!P#-OD zA{pR3rjiF{Wg?6OIB7NNEEgTgFD%Zbj#{LrlZU5dMe)y_>{89+RLOI}wSh?psc=vl z>D5_m#720eJJ8wCsM7#G-eF`nl&a#~qT=8caDW!{;Ml&49vrwgkxSr6F*Gtsf}uN$ zrAP)exZoz%tMpSRzysU_3M*An?B?$In)jw04IOX3mg8| zhJj1nq%$n{t;Gg#bQRm~By{fj1(WR_Hk}oc0_#n2Z(n;3<+ATDJeYD%UUH;|io5>| zCeZVuZRaeY;$IxOPR}hYchEK#9IB!?yRi5rmUns2o0-sXh89GS z1%yy%WYQJb0H#bWoKjx&q`@NDRD?j$f8SskGOL%$_Skg(0ugXZ50!snK!U007Yxf> z0zT+L^=}y5Phf{oSldv~$u+n(2#7)?+B#?u>b&Oe=>(@Q5>wb^kTrna6hs{pf-#^0 zJ%m6XRC%+^oYhE-AvsrsKn@lOssFwKO)sg~A!+h&7)+6J>HQr9_#Ptl)9yV85*}Mp zWzPb)QFT(-dG3$LsM_h#8ewzXTbe2|G1*>J45}5_!fEXwpDwJ%f@+9!*YPG)Ehey@ z2j{<{r$nZ3`K=IbIx9+S*%{shd7&xp7aN(G(73Q0ft@V~wX+t1q16brbOS-PhyT*& zWgT-2ft_PK2%+=8H^3v*)_WwV0;`HY8<|i7m)W=*DXvTvu*x2uH~&J$K_r+!3wjv@ zItg78SIjDN-@3RA56a=l7i?28j|1%@5)KQ4m~Mr?tlds$8+lWw$z zDd5xC?^xON!c{o8TBaBW-!-Xfk?-*yo;{awFt4IA7rW;4ciei@5QT^3C~QTK%3LMW zrhqBU_0Q{6+1?-aUhV^AMubP=*iI${3;H;49G3t(EKGDnXyN+n~pDJZcobsc`D}(AuCIk_UVoIdr2~gzI{Y=AsR+EzUYk4y_})4WD@8 z% z;6n$tm~iliMSHU6-ZNW#y{s#WG6Q#Te4qKMCy(D<0EROtzJF-o1wO_V4-jV;>TN;w zoXyROO$)skR|%_9im7LO+OhR41g!(X<4jb;t@yO5$2+Wz(ncEyo06wBu{wQ}L-I|! zH9_LpjiHyv{=g2uCd7DvLI2drUL9ZbapLKd#mU(r8Q05`PpW#}x!E)4`zG{$N!P3T zP}gC4_0xxfxf#O+H-ypU`TL;DA|`P`v`u%SgY(TA*o1Qr#EUB2EGrXQzrdBBiv zv8XFFz53|GV&VF;U6&gVqRf<^8x#kL+ck!M8TAl4HNbeVpubiFPa)h&_cBRCi8f!x zyY<#?X)p8FJ*3Ay5K$9fR5tN6aM4}+1Sl=RQ3$uwz0RhgM4B&~fOb`@&Vf0z{f743 zIf1)<#7?j8}j~ED?{)6j&QDX*VTJM9v#x<{;oDB z^RQK}XMRV>;zJ@s+BB(cueUF6>fo{L0o2iDQhU=QC$kxw%zI-G~;vzy5ivr{fq(X7;kH+gw`g0z-sh#vhhlrnlpzw%D~9nG-)% zK5*5lCryiCVXM`txjjxx`VJR8|D z!nOOW!DfY~Ev)c8tgf;o9EmKC!qTHv|CZW2mh_Oh0n{mnO%ql!D8 zCipmMpreaE_WTb1I6RZ#M?MX^oTFe-$qYg559>*v8(z2R&U8hEwCo>8DfZxvFp^?1 zm8p36YWQ1j*gR!&sO{QJn62#V`Mw_8#i?&^WM3~%ROdc0bakC<7HXekTI?DN`yLmz zI59C?&y_#lMRc8f!#Qr4KRsFw)~7dyZlfh(ZEmw)gNX|>hV66xplN@S`a*xfVtv8P zbj5;WZ(JC0ab(^p%x!vpldXrW>&UE=ZGp>T>(Ih*y*zPpWL|P{cHU{|(FwQl!D_=c zUg9F9Yj$yFxHUSf-EDp_SA9rk!Fo_=;m2TC^kjjjI_!hEIN>z3P>{t%oLtBSE(dbk z-DXD1rwTF$J;tAK&6cxs$u15FxO7+F9{NA>-a0CduW1(r0)*fpcp!L!TX2E|cbDMq zGPt`32@>1}ch}%9!CeCccO85N=1hL?_ny1%S?7LP_xtyS#msb7?b@}Ur;FaRyQ|yZ z1M&lN+5ce^(0P9ot_T!_NIuSC`M0~1`Fo7Oy$ldOBU* zfWW!~?``-&pJ&^;Iyt)@?r)p@y#e6yHbB?YW1l}{s0|j><|y}u@BP_%(LHdZ3wkvU z*=)W|!FawM1_=5vAL z3O$`x2Uhz%Z^AYfPYLdi_JzOzA?U?8H_(4z5(|2>4}DtF6oT$;uR?ubJayjR3$6Qu zb~9pOeV%e(*Fzx}mm7d{0)rItSwhopEz@l?I*;*cKf!v#z4Q zuP4oMj}#y3m&%iwc1tK`p?+YXP-Ht8_$hAq{c02VslX3cI%}YMQa8-$w)h zn>I7Rwp^RG?1`~hMO?>*W!wY5&PD8WKo>KgS|4q5*)yCp!$0>`mS+hSo>%fRg4`^p z_$Gsn!`SWR^|0{9>u(%R$>!NpK27Rp*}PjYvrFbpo2>4HIzt}7bGe^|QdsP{n?~8( z33Xy8o(L0=+d$KJl|Qq|T35m-D7<<7sLzq6KQS!!oQvt-8)jbPI3Kfs(rg+*Na^J4w@anYEfKIsG4%I~0s)c~9 zlWR+rUH9MX?e(74G>qEDUUkGrTZ;@Ve}|3T{i92inL>XIj_0j)J3kF6I5^|6*P@>L zM$?_J+&#_0m*kC>ayGOw>`c zc18GASk*L(bCQKo+TDY7t$}h~>gmg`YvRJQQRS*CtfBqblva7% zdKMm|Ig(~~s@Xw>AsYivKkC11Y=-Oq5g<0;cmHD>!8>>U&j%FLU&=gu3?5^sp9B4d zrnP!ZG*D2-1bP1v^#m&S{7VG?>-=9<@Q%s(^+7`w*u*NZVZ5ssvHauuHyZA4sMSY;h*+Fw?7g8(TV3YiT?4Ei!$YglZD4_9vY-UK*PsiI)*wB zNR%jM5h{10$%?=jFYWSWxIYXjcra9~7$*C|YU!<$w=MF%iIEUqgMpfl#njk8(oKT6dMCaLvh};R<4PL<-xCT35(EgTDe38Fu3^4L-*h;IQbY{ zg7Bu=@Q7iO9@GPu0GNqFR;JmMEc!vsRB3*_;iPDBs6u8|q2Z$FP^bb)cHxwte&9qD zrK4B!Yr{O1oEQ00B)~!(LSiI7w#XeXTviTL7gOA?H?(B|yLAXzMB>H*k@S|9IimSe z6_UzGO8LUY67hM+4VKC|s`*mNFSH40r%IIzN?vyubG3P4wERMH=N^3hBLqIDAm_oF zt!<|gKdag9$N69m#_~d9k{yuQ5iXmV4Q{>oQ>ues)`}y>;M&4_J6Las zsGcsb2UzG|X9t`&DF}Fo*(xKyx-R|}kC?#Q<0|Tv`;b{S3!JDwjJY#ia6{K&HGL(* zLE$_?UFckOWxK5_WidWcOW>xrkd$?abvqwjEqtrlgEW|mUc9&wYoK`c-jgf!$DPSx z5`V)+Q&GppTcE{+&TJT)AWb9p8-=2TV|$dS`oNNe!2)?{WHI zL$1MIrOn2VEmeyY-nRu=J`U1aZ4;P+q@u`jl}_AT!WzrtgC4VC{KsHf<^3IS*(3OQ zrdktCQ(cuKV&2&8W?6mS)KNyzzmwUvktYl?40)-;oN=2`O|}1 zwTe(Mq#J*&PwI@#j(?Ynf2?(JobnaWr?$TQ71f89un&j8_Hc9Dii1^TC99(td_a#L zQi|5bc-&@nF;u)LWYJSy56w8S1r>I17ril9R9{mF23M`N6UMA;tyh3nGZ7N4VVc-DXpLco8eha8 zK}xrzRIxu7koFlDJwaw|4=pvv^6N>!(Xx|w;cqa_zf(Z%s5H#x)Aq9T(yd_6X?ZjD zJ_9nrD0ers*OVqNk>XFPTfcKyuH zW@LA@j_WjcdUG_^jk|gN{JlZ?-d4AeoC!`ru zNtZwExIOWluThz>iyLU6qP3;8EZdDd@*UWm7Xybh0&BnCvT5lb>(g{A3snbllUQrNjVI81Fti7)$OTU}9iOyX;6yZy@_)q8hS`RCda1$UswYeL zu8ga*&T4U=q`@AxZMIQcm8CM$XNE|-)#V$C>8gI0B=u2{t(T72RHg-?iru!K$X=9A{Y?<3=a1h&mG zI8DNX%`)JA8Ii7Dv>H2wF6VF57XrE_E=EK42s3A#0kmm2P6Rnsugt&CpA994sE-uNmGp&C6gDb2LWhw4A!k-8r+Ri~zoiJhidlkQ{2eU_*Fii`uxc5k`w>}_fGQ~=#0L3Co-o-W zTPxAv8L zA=9rdmuglWQFc#xFh=3RPSjee;HAn^k5*}p4%rXt+1t})FN^Hk+L=q#gE89703F=!+t$dLr z{uu!>eKN9$nh2*71xCmp_|0`%@?5evgI_MpW9m&U-OUG8tdd55jB}mbtHUe(A)U`H zl$mIjR}e0NzEFf1R9w0ZvN{?7hu)iVn|;nssZn?DK@;=*r8K5=lv+3kSC|z_&4y#0 zy0L17p8HKp1Vfpq5g#V_12ZA~P{oE91--L1IwPDOjq?jt&&dFaGB#N?3i|vBDv7*5 zC=lfl*Nfrhv0J||rY`#v;8GB|Nhs(h-sI0RwszEi2V9l%usHW#_&RNcDo$d0Z{hS6sH5+dsBt zR(S@;@E3N|8qnpumg=r!YsQtb{dlB~)A?FzBBmRh0`yTg)Pj$`QirdSlht)pI1B>W zz|hHequs2QlcjFqU(c|&$Y23SnI!SQ5swSh!HT$=58mX!NuCX$ZEdp4CNG8;^_^@E z`7hB?(EclJb>u%|pP)42MT;O-wTLITfd79Bx?Q(~wit23>ZQI+Amk0sX;BYrb^qB{ z|4+f7gMbmnB89bFj6_fv>|f3hPv{k}wJuFc=5;^;vFd~3!xb=l6k1LXXsg2p*mdGA zdL}J~*8hIV?vQ;;xa+x6JoTc$kiEO|rOGnf4IJIZi-KwA8*D5W;g`}sXdYgR#3CLZKB4*Z?)x&UQLWh$kRf$n}h+3Qh4cPdvPYhJD$!l$VZK<>g zULd1H%|W9WSqw#&jH@Go7df2rR7T-NSPE!HGg%6)5({QVbA7@ckB%t7BfZb!UdUb}IL)0!A$IY`Q+2d4$(H;wnp^&!&*EI#h|TK%YTeAC2p`cad2%P=b9ykqV_y)VhQHdKSgD zdo;CnhunmTSD2Pm#W^vT=4A~$j1R4!U(AtmU8Kfk!p2bl7_oK5)$S2s%Sg_(nOge6 zbNx0$Pa!cCUM~b)QHmT!JcdVi?UB!>R7V*AqFBChuyypD;&TVq}eDGuQ zyqjKBFXr2-lG(e{%V3Y;a;uAGs{#M#r|Rs{=i}M%+iNSJH5ZXDz=>;_!)(oW2|eS( z*S2kqPiV7Q^xS;mC+>(|DctU6Ymp-rtyb9jg?yxvKQ9f4Bh0(l(0FE+<)KeJv$=Ay z&^qB0_qf3Dvv9qDM^Q&yGi6+vBq^dJ4r~S+exHLHo$0_sE2{ic3EZNxJ-0RQR5#+e zCayr*lOm4On!BH6CxXkf6YSw#v8z*vTkBlA+&b=_uJv@qfvA1LOGO;6+_u7;7+g(< z>Fp;7)7%faL?tYzRnIPfBP^_hXWH}14_ynAtKtCH5%?$Mr`W2BQ7Wm5n1prL;8r0ajLQj!ZI zP{^Xg!J*6j55ACa{`o@EpSj_*%7s68en-diqnZvON6L)a)tYVH{JkB!V{6tKDU%5P z2kIUqik}lt>!(yFow`8NaDVF2?$5|0B{?iOL=YFu&KKB__+(b-WhrC3z#I9AawJsy z_roUh=@yA?0!iZYj8hsTk1^-m z$4m^fdtr+eUi48I1ZMOZZ<*gc72z|Ew{j5IcXM*vl%YlyT@CcgCaRaKeP@iLTa`KCK<<5JzReSNuedKG$kSbQI_a-h&jv9mv8H7{J=@&5H8wIGfUnceTkFsz zS5=P#K`eHvZ{24w#0T1o!L7q)tG@-XSY9-W5_%qL?|I*{*(ol*WTs(R-Cna|T-|&F zVJL5{J(QXKroHwxTxtk~1>eB$9K6j5B_1R~bWT}s9NUg_x#A?e%8wS zq)ZZSJrK14lCvkE?dDbu+J*}+c7*g}3DvtPFe+iMi&0#4viHQw_aSaR$$3oPR^0bv z>BUa0YP27`?Dn4z-1QlcDgrl?LMbaV+`=$EFSbcsIUQ&Tg*SO7*P_a;?lR66+p~_g zA3XzhoVml}+zHVq?6-bYPPwXXQP3c(%=~^&zNjc2mWU|zHUI4u!H)t_8Pvi8|F5GC zQbZzj!5Myz*I=zV1As~z^L`N7r)ev2|5FJ6E?>r&42#zTx4HWw=lF(Gr#-0ggJ-=k z+tm&NrzP(O3)`!$mM#E4Z-o8l>61oFq^}n{jkNIMJvP%iN+F7r1{Zy$hD)wJH47~c zML*i-Ia3Yu=8kEvVjJN%#En+_8|{pZbQTSRL7k$w^g0z zx@QhPooYOt>TRm(;m8?zz>J7yF0Rs3VA4GzmV05Q@F8IMfZgeoz0RT3h7}``E)$M2 ze{`vFbg8!x)*u2m1*Uh}TiKO6)|E>-zNoC~QR~R7hTZm%oRTL@cABztRl9*`o?<9o zhPf3*l~m75-Qis%B7G}dZuCbg2P`K(&O-}0@?N!Y4(x6@g{(JU41)~=P*jsR-bk6b z9g(ymWW^NK3%jDi;R^Ka8bz*_;7FMX?qPfKvT_ zr4+7Ajk#HcCTHXe_P!VaoRnnaD+D&uB5MI#wO0k~i+#LcB<%XqZn&={ZX4!>GTkAA zUOdJ9aC!V4x*2r>x7gi(NTvk3T*I~OHfx`;4 zN*bJC!xEh{JwCx6FONBIy(r+1 zA60@daw(V}lzC>!lus^w6P~C#m$(IaVjYVJe;Vx5*$$}2MdH{!b%Yd0IA>F8d_pQg zQHP!wQOR`s6pg-ioY3u$Y$3;^Il4iKHY4%e9}{;`pga;dXCm)Sv<&uo<@9=gSlk6M zvN-n$*UM63u8rys_L)T}-O`V#2zg3ovTv0UB03$}`9Cn{sp2SM=!ty@)W$&jBUHxN zSCXj6L03`E%R_}BN6Zt>j_^BK@M21ox$zwXgE~U#nCLml8cKkUY9mSOdnJO$q!`-3 zy0oZGk~0)IQ*Ac#hWs~;#9S~EiAFzXy&y*lkYjq8^R-dv<7xyBZAJ^>#AU4ZCRst= z5%3)jYw~5E!XJTvQ?OcM+1-I5W4`)6M6&W-%V&C-d45gSrjl04_p)qiFOZnLmqQI$@ul?7zMPe%s)-VZ zqd}JbON5@djBLGLg(hx97kl3p|L7B*)v*Ar%6Y9FET0}FIGMYfpW6&K^r9C%Sqw|d z_c{V>tJ3cf#(tQuA0lajV1nN(Ui0k)x`!}v(CCCZNWZ4tfb$%w{6HP_twCR2QoFi{ zs#0?{excm5;D(;qsv}ZDyE^axdlS}R3#Rpe8NY)W|390k22T0xBoAj}Pj;Ruby_*g zRyIL89dw@a*JY#qPXxk0FB-><_H(MZpO^LN4;8N3>@~}0tJM7aRU0zzbo44cY8lG8 zAZ@mR!=)X(ofo%OwZdIa=abN<;&F%d$CozkLQwEI^W~x4v*+*KU;c;PPWn;p31mn1 zKz6|B3}f{>gQiX|pXFN_yB3S9hD&sU2TlE-4PRPZSmIH6&y#(?Mv(@Fp&f2X%~T&H=2DZdgD1- zhUNV}Zb*EBe);rGvoI%tNg}>m>7)9IvtG zD>%59O8-P?jp7^^p+OW!hm^~?eiygaGK<;y!{yRtegvlqYvGEx zQ|db~KG+3Jt%Kqtj6>v|Ebcok-k$<3FdzexLiL~TRdyEM)u&IfBTU$0GU^s_Q0+P+ z`aQWpMNul!KbR%&H1xmr7~s5jyh+&&tUJHKH?i-)_0*Cy9QC~EX*za^iYmySMonQ6 z@64@`@({>BS*~IT`z{AjiC=XPygQ|&ps{4~FQ~WZ zY|uuW<_GRa8qdMkOVpk*fgRc_Yv)zTM05_zh~{kVU%M42!egsmyp0ZkWc?QPb+nt; z@%m9*v9v4g%R!3|9g(_COZ;&bgdJsYXe18;Iwlw`v|VD29asg%?=wLqgtjq+(sq8% zQcXCHI4(GYYPNalF1Kwi#X#Rf(E$m16B&dH9K|O;IzQZF2iDP9Vlpa}4-OIUdw!>@ znL!5AMFqqL+(=kmroQL>7Vr^h0D*8{9$#6jPEY=1So_-Q;+|1|BX)RaURujf;H_+Y zyjwf+3V>g+cs3LNBB)zNMd9{db|!Q2!w4@^I(Ul&WDX_t?JHa&QO+=5rH4ObBxTA} z{RI6rXfh8y;nKF)o7pcc%S93p9|A><2cmV2_L=6CYj0r(Am~Kc zU3)4IOZ!;ZVg2QRcHHbs-?^aQuS`FB@!+BB8`QYHfev|nrr`om(0CRblV9nU;tc?kCm^cD*RB3a)PHq5;yPk!P2f70&m%@T46x6gRD^k+T7Gf&7^Z z<|nY=Uw)`$8Jfb_J3iaS%x)`D#V2a2yL%-^dzpU&q z?4L05YzrzilWD4HAxr$8H6uT_s8d$grF-hqq}xuh4P|it}&_g4{}u-?h;iq zYi~>CI+^+0FsxpemCAE>KAQPE@8Bw;*=qhQzXNdAnbrE8cVE4$TGy;V@1q~UBPaUk z4*BTa{J9JI@|{gYwXUeoF7XzFX+(7#MW;yEJu1=vb>j;CGRY#M`V-6=W-y6u;2Cy5 z^08kto1*i-R6a1(+bxC-Y=Z}wio0L46Q;trOaeqy|4UWgjctGwc2CdRuNg?uiHd%y zZWvLGAnJohxb<%pN55t+Ooef&ZW&Q60#gxhl}}+C^yui9xVS$z>~C*~tj3l%1czyW z!xcU0&X{gQ+yD>Qr#uvGYZeAs54^-+;~eH?M=zG548_@>UEzXXm{#NWImg|_ms6pM z;@tw3i$iEOz@69kq>Br%WgV8yEyNlY`HJM*<#}r@HkGSz8Mz`IolMgLA3-dBA>hlb z-6YAeSi6S8==SM^4-dpCB=yc$3-3NEsN96DP1r#bYAjS1G?)i-_v_)1(1wJb(OMm? zPDvHY&3#|z@uGi&iWoMUbgby;uw|_Mx+3}DlF94hi?UA(w-BaM)nx{JKjxmKPJ?G2 zyMqy>75Zo#q%D_CX5rID7Td7}SI&0X9dZ}_ZUmsCD|o{80^bZVMc3z}Fe3d3k1Wc| z1=Z|=4S)LjjiwM_*m7kw4S~rv-2{k}303!s4}pfsTj#YVHG=({6-TTI2D(bA`eI|| z*2<9%+JGe3rP&{Kue^JY>dR-ZM3a4g0kHOCJbeBi%o(`?NaG&9B`?|9G@)FYo16;7e6Rl8+o2DwBC#Z4fAAyy0yfs*!&bu7U7jUta+)g-=Zx z1Y95K^;Vb9IJVvlcMm)-wJxu3_tL-j_w&6sI`XcRE@xzNDa3znvwi|5LsQ9IK$U9@ zX6?;&B`cv_+(plh9M;X=>P4qnRq8hy`21^$rB>%IpikDv5`|h&Ni#N_&#do~tn?ow z!^koyNW7Xyn~(GX1~TetRMPp8b33ipcb;q6%jy)03#_FPoilGCsc*ELJy+R#5DYig}f{VudC zZodvjyG;RQLuI#5uX;=N+_OqUyJVv@9!5R01j{AOo-4qhz4GS-K?8-@WYF|sYzl~x zMSb3EkJGyO!XMKg!h}y+APHg648J|Hs9rnn3$`Cgp|qRydFnAp{{&9dEYrI$^5i9j zh>|U|N~xun?(Ow=spqr2Oow;^I*$~sEtnJE`+BK`t`H}!g*-rvBimJC&v(BwGoz=i z6taXKI(<17;oje_ZsB8ul)Y)V5Xe7f9@NGYchBu?KCS68NAqX&J#Sms-R5GN>%|KG zeRSu4>#q>&7UUGM9SL3vmloqi1V?n>~Zk0@ld<+tmi|~$G#yNKZxJhkPXz?+Ct2k6qIg- zr(AT=+kp83famK{cD7ROFX#>o@6_?Pnuuv!7%=cOzeN+mb>Ehf6Mb!HZ@dAnBK8$@Il_8eA`mRqREOkZJ?-j|=^Sq@A?9ZwCW9)OSDv9&FLABb^j+&t zWo=wMM^2WaZatGrQNvD6k`HxQq|!7cjmEq;qI}LB3cd!l)pQjusos0dt3(oHxGR{nQ;RRgx*m#|=UDVPs*H)#cnL36*W8KbGO%|Io0c{>@ z7*ouU((|;?jmOc4W0m1cQ$erOginDQ*c=^5l@yk4Xswbt(hg`V!b%=!UIFBeXpcxi zc{)l6pRW*zIUgOY$TnMj5oMU)pS}=Q7Ar8IDq=Hg4c{Cr@Wqx&kdPyvMJy+7(cl#M z8IRe4Kwd>}Y+Tmspr($AN);qcK8+qluNOuC*-3SVNdvB5JXEd#?w2Sw9o$<)oP-k8 zG|CF=6YY6I8p$d{Bw<~3%*YblJ67VuiMN;u@K#xfI5D+FCX4Ccl%1|~UkdB04vV4w ze8Qdz3x0pSCruu|dkg%5?~0I+F}+F_@S}vJpPxQjf^QQUd;DM=>nq}d%aQghoy@mr z0}T>f)wRXA2y4{O*L#vVaV~p^fwoxCG#h1$1NNWa-H?Ra^PRBIOK6G9O9E(%Nb!p7 zra91cqgKRs4yP&bL>#r)2J0ViPQr-VXP^ zrlM!wiab<;bJjxFIQV50+FjZY-}nUusehMN|1~zAzZ(U;^b_2~8v7V()@lXzeG-o$ zfB>0@X>8z;No>5NX;@Nv0q|Or@Jqj|eY1$6&K7IImJ==+DLK91r*8Pt?I7LF5Nos+ z#%u-``&JP{gRQt$<`4u@_lWae_(N9s+yX;!c&FvaAZHLB0>PVE%sLU;941M4J0syD zCU(uB8=Ya!M$6-0!J*yb{hQI&{KKK}xKsE@xVG3~avEZ5OnY@0y_w#%*s1AXYCaPR z!`tzqTB5zEVFd+$Hh*`_ZSL=U+zQCrM3eh zegF`KyxJd>BX@o?{h3e%-tINQ`43jgHv|*@18Ta%W<;T{_80!qD#Nsnyr?d^J1wcl zp|t55LEoFBdqbQp-p94%mQ`ZI;{8xuavJ*jF!2Q0Nm>JsJf(7ruh|@-LGSgzK{DFubU5 zmODY+Ka(R57G*IGRTBP1afYrOSO&L7RQ`k2b99^0>1={>2VnfjBT8F?ZxzSi_u6Vm zoK_l$_-e1NT_Ym1tsaFaGqqDgn3ntu+a38u-J%f+jTJu)k7rciKiY?kRALlZRJ~S= z+K!H5t>2Jy3ku$JrjDvOQth8HiXdCaF)+ihdMTf|8PTvqnOG2fj_9nlFef%~suhAh zky=&u85XuAEU4ne)TV&Q4)yMqRn#hHXM758(UiU_Y*Zl)0SrGT zIvLunrGEVlm+Nj$JJK{sg1QUYOtSKl|$`wnbP;z@LCD z`df6~na#AYeIH(_VF6%A%0?+cVi3Mb?Nd{v6aa?VQg&TqTTY?&DXtXJPG8CoV{(!}<{s*();?CUCQcJO$5SB;<55~@mN9E77h z{a=VKq5?D)eWq+dM8jxOhV}>n;@or-6R~x*OIK8&C~-ZOKP!(e+cA=#= zYg#31PLjQ~5%9My6Oa8w@4Vb1$^GE2m)7v5e57PgRP9`y^ZmxvoBVBjqpsp{XZ=R~ zX+Q_wFZmr){BM)c_r;YhzlrjX&+cvMU$F5)GalC+(day^H_l%yWJUHl5Qhau42mGG zDH#_x_7qE`jF0JCS1Z`ef7;tnhZ?zhH|l71{al9CLd{n13lcu+OJ24d=36`}`L2~8 zfy%9Y6uDc<YfKk7j-_(sxf6_qU#N0xy<207R!4#+vYkG zuF0g$nmQAbnnK5n{Os?r4E#DVn=)gWz2TXm|NEj#0vW`Ma#T1t#sA478P7ixUTt~6 zHV;n6c{R2RnQVceEw?R}gaW&Mj>YW3^$DD}DmCAGZJb72lMfF!XueCeQIk=IQ!A`F3bJyq{?RWDf6>4Pas$&#>Yh~IqhAmT>4rU1M%(W z*2kf(oa;OD43H#yIm%DG{Qd2M5<7$a6kD*V0~7j{;&e)eQ;Q{nKcMJgk|!~VjZ2{c)UGd{!l z=t&4E!?aPi6-!6+b=(vZDW45UR^$iC`{L_3vs=v!y;P1Ei-7cwKh@Kj(!A3jl~m7U z+%e7&Bq)k8szfb}-S(!#lx?=URskp7c2!%sp2 zJ=LE>kNgxQbwq@UtB+c?&3>$`>%_|V0>ZW1{8A!icv!GpDdhQow_}nKVMMekq!YCe z7|h)I`Kk?;)OD<{4Hd})H2`@>3A2u~=9OpN!G-yucXXZp=i83yP)tt=^9kQ<9T^1c zuUU+hY3I~E-pY;6LQo$@U|Us1*MUjhLfO6So_Vti5wIT~$o4La{Xw0SD~~Cva5V2H zhf@}J?!2RA$;UghWxNd*2#3`bp zIxlO?S^0Bw)+D>{Aqt(@{2LSfHhQNlQ9xL|G^-8KV=Z%Ej~R+?-F@+oXylaF>AOC? z`DEwp?{o);%|4|)g=i_fOi|sL0oME;YRkl6wqQ-^iIc0Y{`Jh3lJ3$tb@clH^OyHo z6lCY*1ewz4`U2`K=~}DxMwh8>!Jw^yL$AU7kn0Rqv~kIr&D`$$b_Y&|+|uopw&)ZD z$0b-;6^i46_W1hAx&NV+GQc4a6V(5ps;`z-)GC?=LAEdftA_-)0s0boY!~wlL zlnvd2E#>?aScIR$oY zzcTFQN*WaaA0cV#T^|@Ylsdn>R579C;1Z1dCxHH+3&+S_RAU>k0ARCb?Q|2BeUtBe zFME(eqW&4eaOV?6gkTvQZS(;G+zX3T^}Semo8xKB*iQmDA$4EHX}!Bpl^4SBa*EU# zY#lCo@a%^Otc8pE;nfjPkbWT1wprIoJ}!xru$m|8S{{!Ok4k82q5n+kPUs<<(LzB& zCGaX>U=o%u#aTC0)lAmrYF#pxY6x+u6{qcH5)SMQeMhv5PsiLkzh6zYy)VY1Jv1KUwC6d^!9d|ZqMSsR9E*LW`j?rcS>c;BcXd`R4v0A(~2A^eqZb2*R(t#V^;w zunV_d{RpMCDGjYP;BDW{M`Qm+jUhlIkBzDXrud93p#3r$1#eK0hCo6QXtJ&~BwuM} zc6M9^m|ybsl2ruefGqoEApZ5}62M8BaVp z9P#NCqId3OttbL*iWO{f$#yah))zP|o|5!*j%r^x+H+V>Sb zvEIz`)$m-`If2!#PG(i&ua|mz-*mwWDgSj&?AAaLPzqb$f@l68tZ(uDbGTp9iCtUh z**^q7;D(*?yJeLVyAhjYPe$odzf9%taHDyx?dC~MqwqM3rPc&WKfZj|PRQY5GCW!I z<8~dQ`Rd;HN$B~Z56tp>3EA9kOCjs>biOIBUiZ0#Y`e2;bb&9cH`eXUJp{F~RF3A1b zMmDT+_EM2WNC0|2NwyB%-R;8y2>C*0N5i}P9xjWqCIMakPqISo(5uJt>a#A$=4l(* z2E-{G`n=iY6r0io*D0yl@~t@DR%wZ=>vhAf$JTR`%A#N-{bx2+VjJc|DoRo ztRGMt8T4@#{II4o=I^nGF>KIoONdrf;=uj5)};uNd@+`9(kk6gLL!wao(}fVMsMjBSwi^zsllHnJJ74btUso?;LG~sM zy4Hn!?zdRZ*ZsYoS=)V}knxPJc3LxD6^kEnZv{s$|(bHGn={rNFAJ zM-8A?F!l2q)})Z1pM`;s$MYyR;CZqf+9@O;;M=)(lkl_#nuL``@3RO#pYHBo!JzVo zRZMRKxP1nW`r6LH?m~k8kiGF@EPp6oN(!((~u9~81yynl{0BQH#WihUF}a`up)3n^!Dm` zw-4|f>pm&u584}=+&BPp8~AuV9D<0JLEt-}&|wCw)Y-=l^u!G~18n$QcIoT;MQn8V z{uz9Eb?4(6G`8AbV19DL5_)UE;_v^Y@8^31!dmoiZ--1yUO#jibO=U~0lV%kAcs$F zione%|EI^H@@ot|SP}QBJ8=DJo45T5@&Zi80u=0kTs+(?lIP71ai8at zy`WGNP@m=bMxkqMQ%Gpb{~5}1z8@6}ovg-sjI{@WKl=L@0{}DpdQV`5<#|m5A8!z_ z{1LM358dC`Q|&zC^SM7YGGjT1R=aQbKdy2Es;Zza{?1PxuD*BYA6nWWxg>UKFh3&0X$CS1gt;+g$(WArN?XcYiVV&U;jU9eRb*`Kdin$p2|=6dYR(eQFQ5 z1NcAQx5fM3-Ngd+{qAqFp6c?tI>681eKP39(&9(h9y+tu^n5ko^SF2%3ClGQ zOLNQfkz#BtuqzkZA-N9m+8HM!@dVEUVZq&zd4iAQoBbVj=AUkW_WDA5u>H8F3&Q6I zK0Jl(Ocz%m0x}pPyE_Ki16^3)HD`tOL6#J#|EK%KyTO+b(Bg)#;5kUKdkC=p36{mP z+yKGO2hbw)9&~g1)VFBxyba2L+~fhE2YKPg+v3Y)`Yz7xw9vjN`&a_JF1_pBYNaBj zLZ#xVf~lgZ!l`1`0@fndLTr^()h{X$bQN^AbSGWGup1aaAm=x_z>aJivVGr2p020e zyz-32azCGrBl_hDvh{st*sHz^&~~41O#xLM6?WDP)ecn;)fZJ1)dW=)l_HcklqNK_ zH@!Ex*U#68pW6bkzZd(?;xS`?@U)=I{rN&L_NUwPMP9KfKlh=VN{LE|s-=ph>Ve9E zDxnIYYN`qf-54DsT|e#uZWHcp2HI+ifH!}${{;_OmrRrMv0H-ww>qJA#j8;|*w_;A z@SFecWEJLw-<#jv|C;B!k&pL2%*VnXA5O~8;RH0$8a(&E`)Gst5c1}~`^gW!eQwTz zyw~!Q&K8LmNfSvD$rAZ4k|B~J0_=_JP3=t-kup*+lBOuCDXJ-~*)Z_}J!`gtp4(-R7N`1qX`l==s!yy&rA{C2193dwqY;O9QvX1g? z9aR4t6_1d65!0y-wWw2puuOr7b-`!t0#PqhVF^MkoOrzDxThnPhIYOVZT&*! zlfPQ}w(|)H=@+^l|J70g=95alFzx8CmRK;KDEfsRhkvzPYUArT(Tl&0L;o3%Ko^f% z8joxhk9immPZa;^)o?VUl$eI8=xw=d%lXmuy1V#=C_A+zYJnJifdp}ZIA4JzvZ>g6 zYVwbDD#k-!#|9BM-=xuEiPbeI7rM?oXfPU zH4(X50T8U&|M_n~vb76#5bCR<$N#qh9?K3~JYE}n$g_$4_W`ot^&QVfZE_C$CBRNK z^lC+xuti+a|31J+mH)s1Ghhf}{0+etHFSUiOBnax5Zr?y$lF1L;$f1|hyMlmc&?*2ycGmPT@xB$ap2)_6Wg8o0$(8*v)g7r59H&xht zcsd9L|8^t^hf%zFZG12M7mCSXN%Ef;;3pV@e>;*4!4SNJAt?1X1Yt=s1f!VhZxpw~ zD263T?B6K9gi-t-7ho|A!8dEq zN&e#kY=1nuHof=SaYR;mzpFx#q(U>VLe;49;bw+BW`-KcDjABc#!$~ox{4yk+&>Cfqf;*m4-b~AoCrf-YghZd=3?UddX>e3geloe=O7ib(6=o1$x zrx%cq&rph6C2?5^Db>ZyI`16EA9A52s4(NH(5b61ajG!5s<2?p(8{aCnOnu@HOOQ% zkkKv=9wuGg47BUmi zGKFj=&A|L&p82K(Ocb?V8cr!BDKH8oh%mR6%j`u)Dn@@cNe~7VrRDepXI}c0lxGBp zR1-`#ksu+0{LL_T?%Vec$jo?#yIXG-rQBhG$hzmd=j?s(b!eOGCDw3Ep!iWXts6U0&HwF3+C)N%=jE!-EfQNUlhk zGp%~qvL&Z-9`?%#&dYgZZO+0AIdkvK3GyhPa$i`+Paq;9`eR{Sh{l5_|b7V~J6i9K*Y# zLre;TCQxfa)X$Ba8DfYSG=W+ZqO@-0%nlat*wfczl{p|cFdroKkaTmyC6^wOU9J@hL_(rr~KZbzQIAKhAuNi)ySzy4NAx}+X9v@ zU4WuA>%y}JNL2R8I zm(W_g8Q7qa%R(tmQ@Eu_hSL;s`NP>1a>?bTx13G6OK7_dolyq43^#&fC>01`_CXC^ znSlnPK?68zufSl`FhQS36+%G`{l~D(I38b@#bWm~r9fPyP z0njyAnJOUbb1hR%E>(6d^K;7y1K7c}Of@ffLjdYp=I6Bm)-U@#lj>Hg2_aqx-(17| z973m%e^%k5cH2;K83F7{*c|MWS7xAr??D5&Xk0E%0|Ho2;sP|lD>KkQC1?O=#hEw_ z2w-*^;FTF@pc*s)=g1&ZE*hK$1TZ@d@X8D{z+oLwUuzYny83;VPZ~#Qa=kWb4CuD}}icc;YNn0JGJ% zBW0#C9smvSRtj@yp*Rf)V0Iedmzm0#4;tXD6y`J_#c4nQv(o^-%v8og&;W0xFsA_} zP6Gm%od)=2rZTb~DK2}1^wb0}I}Py5EXCMBon~v2O*i)(vhA|`c3{;)gO}xA4ooN} zXEuGV8B?--x=yc|P&Zgx|8e-UgDP%L`RTn^pML$-aj8?%^KyrF%zyFl>|rTwFXhdt z7#SG<-`S^+s_x)rG)9CfzH86y2 zUsvfXjF|egaObs*bxH3<-yJHe4NVzkIo=;P=IrJDp7jZLQw+3<#_@(*Vf|v zL^lboQlGRLHf2bBAVv^?8^N=v5g2f0@D5JxIA=_WQ~PP0+TA3yJWaC+T;1=Q4P0c7)hsbL z{*uZ**4*>HEEm+YMy}gaq=e_Lue>CTOiqgn>omJM*aOI~ywZzIPjNy__LlZLTNEg^ zLtLWGzh;g>ZosW}iMSPZ4{lY5Cpr-^lL62*h#}Dsf`M1g@Gede_EF-*26beJO}_)D z(E-r4Hvd3~(8+KCE>E1;wxBdhKaJAp0O%SRf)Nbi1Dx2RaAL#x@98*=4uGzKA;69x z!|e#6II-=*X*2?-(d)l!Uiz%h^d16BEkY9b56zsz zE?o^h3<4Oq^;)324)rMRk{TGoF)##y?m8HPC(dtim(+l_LB35U z(B1iVMN)MC1_{6rD!>o~y6a#F{Tw7{^IxfkH>%>S@A^*y{}Hqva{p{rK}Z7Impk?^ zt*->$mLjGFx;x%hsB0^8?dKqYLDL*cb(LgF6?z}7^-?ZnZPTb#*0)u(xk4&q8VhwP zrgO#cmnt27KG#~Hqgz*Z)}NO$TYr%%m`=LNU_IZo#9XUUTRWsOiau9xI#aDvnHqiG z>AYyrS=!rjsphSexkAR6kLgtZlv&yfWVA)oWHr~8vH(6-U6p5nS`kPWS2c7P==P3V zt>S_dy0*$dU)FDv6>X-|3p7o-t|nayZ7$K#nNr%?kZNk|$PCmL6&)$EoU85%ZK|Qq z9b=oDG8I~Dm6SH9r&A^~bm(H0kBV+tVXdbqld(f5tE5cl3KZ5(y2QtNiB6=f_3KQv zFe+n}&eGhK$#j)6ouiUX)v)}t7(aPC3iWY?o8tf(V65R-2>}SVK@tv#T$_Q_fXcYGs z`yVUjDPt2NV-plhH?5D150@mxL^}h#6?NOPHfS?+h)6WTzO5)5U=?wZ(eY9V`}3-X z69VUX4-$zA;rkYchUEYip8508pBpH6CBe0pL2r!e$;0pSh@5r{px))8^fBt93rCSKb8 z3vmdpQAU6~K#Ren7!&<>o4%$>;CE+h9liI3_g`iW8kP-5ph~eTplKwaBhOd2 z6#&rqt9tYy*pdCXdVBN$3FyYSsuaI1BGHA?A+Vm=f8HCz0mVl>6Bik=Bq5HSgCyZJ zo*h%U7shimOeBK&ZujxnYePub6dg%yTH*Wkm(yV0-vuLay!o#maZMARSp`j{+&{#5 ze^jD)_BUwlG17SjTApu1h>DDflqRr0i2y@u>PPJW!+jZ6U9dO1&o;115TyOu7&0w-=d(Oj(rUHPhW_feG(CmR!+_Q z91!nhr-H+%mB;%)bUo-DtAETQ18z9c2Ozha5qp?30Ui-5+-hx zSr?akt3fte*a{p6HE#+ThPYEwGn0Nk4$jj4CC)IuQ^_#Ituk-MEuUoW6N%P!-Q+ZF z9-KvlAxikiz3Yybf(Pg&cbC|y+m literal 180621 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 diff --git a/internal/resources/fetching/fetcher.go b/internal/resources/fetching/fetcher.go index 9baac71de0..c09a3990b1 100644 --- a/internal/resources/fetching/fetcher.go +++ b/internal/resources/fetching/fetcher.go @@ -38,6 +38,7 @@ const ( EBSType = "aws-ebs" EC2NetworkingType = "aws-ec2-network" EC2Type = "aws-ec2" + EKSType = "aws-eks" EcrType = "aws-ecr" ElbType = "aws-elb" IAMServerCertificateType = "aws-iam-server-certificate" @@ -56,6 +57,7 @@ const ( PolicyType = "aws-policy" PwdPolicyType = "aws-password-policy" RdsType = "aws-rds" + Route53Type = "aws-route53" S3Type = "aws-s3" SNSTopicType = "aws-sns" SecurityGroupType = "aws-security-group" diff --git a/internal/resources/providers/awslib/eks/cluster.go b/internal/resources/providers/awslib/eks/cluster.go new file mode 100644 index 0000000000..1a481877c4 --- /dev/null +++ b/internal/resources/providers/awslib/eks/cluster.go @@ -0,0 +1,86 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package eks + +import ( + "time" + + "github.com/aws/aws-sdk-go-v2/service/eks/types" + + "github.com/elastic/cloudbeat/internal/resources/fetching" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" +) + +// Cluster is a flattened, normalized view of an EKS cluster. One Cluster maps to one asset. +type Cluster struct { + Name string `json:"name"` + Arn string `json:"arn"` + Status string `json:"status,omitempty"` + Version string `json:"version,omitempty"` + Endpoint string `json:"endpoint,omitempty"` + RoleArn string `json:"role_arn,omitempty"` + PlatformVersion string `json:"platform_version,omitempty"` + EndpointPublicAccess bool `json:"endpoint_public_access"` + EndpointPrivateAccess bool `json:"endpoint_private_access"` + Tags map[string]string `json:"tags,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + + region string +} + +func newCluster(c types.Cluster, region string) Cluster { + cluster := Cluster{ + Name: pointers.Deref(c.Name), + Arn: pointers.Deref(c.Arn), + Status: string(c.Status), + Version: pointers.Deref(c.Version), + Endpoint: pointers.Deref(c.Endpoint), + RoleArn: pointers.Deref(c.RoleArn), + PlatformVersion: pointers.Deref(c.PlatformVersion), + Tags: c.Tags, + CreatedAt: c.CreatedAt, + region: region, + } + if c.ResourcesVpcConfig != nil { + cluster.EndpointPublicAccess = c.ResourcesVpcConfig.EndpointPublicAccess + cluster.EndpointPrivateAccess = c.ResourcesVpcConfig.EndpointPrivateAccess + } + return cluster +} + +func (c Cluster) GetResourceArn() string { + return c.Arn +} + +func (c Cluster) GetResourceName() string { + return c.Name +} + +func (c Cluster) GetResourceType() string { + return fetching.EKSType +} + +func (c Cluster) GetRegion() string { + return c.region +} + +// GetOwnerTag returns the value of the "Owner" tag (case-insensitive), if present. +func (c Cluster) GetOwnerTag() string { + return awslib.LookupTag(c.Tags, "owner") +} diff --git a/internal/resources/providers/awslib/eks/eks.go b/internal/resources/providers/awslib/eks/eks.go new file mode 100644 index 0000000000..431aa99ae6 --- /dev/null +++ b/internal/resources/providers/awslib/eks/eks.go @@ -0,0 +1,54 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package eks + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/eks" + + "github.com/elastic/cloudbeat/internal/infra/clog" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" +) + +// Client abstracts the subset of the EKS SDK client used by the provider. +type Client interface { + ListClusters(ctx context.Context, params *eks.ListClustersInput, optFns ...func(*eks.Options)) (*eks.ListClustersOutput, error) + DescribeCluster(ctx context.Context, params *eks.DescribeClusterInput, optFns ...func(*eks.Options)) (*eks.DescribeClusterOutput, error) +} + +type ClustersDescriber interface { + DescribeClusters(ctx context.Context) ([]awslib.AwsResource, error) +} + +type Provider struct { + log *clog.Logger + clients map[string]Client +} + +func NewProvider(ctx context.Context, log *clog.Logger, cfg aws.Config, factory awslib.CrossRegionFactory[Client]) *Provider { + f := func(cfg aws.Config) Client { + return eks.NewFromConfig(cfg) + } + m := factory.NewMultiRegionClients(ctx, awslib.AllRegionSelector(), cfg, f, log) + return &Provider{ + log: log, + clients: m.GetMultiRegionsClientMap(), + } +} diff --git a/internal/resources/providers/awslib/eks/eks_mock.go b/internal/resources/providers/awslib/eks/eks_mock.go new file mode 100644 index 0000000000..9768dd2d07 --- /dev/null +++ b/internal/resources/providers/awslib/eks/eks_mock.go @@ -0,0 +1,313 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +//go:build !release + +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package eks + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/eks" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + mock "github.com/stretchr/testify/mock" +) + +// NewMockClient creates a new instance of MockClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockClient(t interface { + mock.TestingT + Cleanup(func()) +}) *MockClient { + mock := &MockClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockClient is an autogenerated mock type for the Client type +type MockClient struct { + mock.Mock +} + +type MockClient_Expecter struct { + mock *mock.Mock +} + +func (_m *MockClient) EXPECT() *MockClient_Expecter { + return &MockClient_Expecter{mock: &_m.Mock} +} + +// DescribeCluster provides a mock function for the type MockClient +func (_mock *MockClient) DescribeCluster(ctx context.Context, params *eks.DescribeClusterInput, optFns ...func(*eks.Options)) (*eks.DescribeClusterOutput, error) { + var tmpRet mock.Arguments + if len(optFns) > 0 { + tmpRet = _mock.Called(ctx, params, optFns) + } else { + tmpRet = _mock.Called(ctx, params) + } + ret := tmpRet + + if len(ret) == 0 { + panic("no return value specified for DescribeCluster") + } + + var r0 *eks.DescribeClusterOutput + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *eks.DescribeClusterInput, ...func(*eks.Options)) (*eks.DescribeClusterOutput, error)); ok { + return returnFunc(ctx, params, optFns...) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *eks.DescribeClusterInput, ...func(*eks.Options)) *eks.DescribeClusterOutput); ok { + r0 = returnFunc(ctx, params, optFns...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*eks.DescribeClusterOutput) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *eks.DescribeClusterInput, ...func(*eks.Options)) error); ok { + r1 = returnFunc(ctx, params, optFns...) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockClient_DescribeCluster_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DescribeCluster' +type MockClient_DescribeCluster_Call struct { + *mock.Call +} + +// DescribeCluster is a helper method to define mock.On call +// - ctx context.Context +// - params *eks.DescribeClusterInput +// - optFns ...func(*eks.Options) +func (_e *MockClient_Expecter) DescribeCluster(ctx interface{}, params interface{}, optFns ...interface{}) *MockClient_DescribeCluster_Call { + return &MockClient_DescribeCluster_Call{Call: _e.mock.On("DescribeCluster", + append([]interface{}{ctx, params}, optFns...)...)} +} + +func (_c *MockClient_DescribeCluster_Call) Run(run func(ctx context.Context, params *eks.DescribeClusterInput, optFns ...func(*eks.Options))) *MockClient_DescribeCluster_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *eks.DescribeClusterInput + if args[1] != nil { + arg1 = args[1].(*eks.DescribeClusterInput) + } + var arg2 []func(*eks.Options) + var variadicArgs []func(*eks.Options) + if len(args) > 2 { + variadicArgs = args[2].([]func(*eks.Options)) + } + arg2 = variadicArgs + run( + arg0, + arg1, + arg2..., + ) + }) + return _c +} + +func (_c *MockClient_DescribeCluster_Call) Return(describeClusterOutput *eks.DescribeClusterOutput, err error) *MockClient_DescribeCluster_Call { + _c.Call.Return(describeClusterOutput, err) + return _c +} + +func (_c *MockClient_DescribeCluster_Call) RunAndReturn(run func(ctx context.Context, params *eks.DescribeClusterInput, optFns ...func(*eks.Options)) (*eks.DescribeClusterOutput, error)) *MockClient_DescribeCluster_Call { + _c.Call.Return(run) + return _c +} + +// ListClusters provides a mock function for the type MockClient +func (_mock *MockClient) ListClusters(ctx context.Context, params *eks.ListClustersInput, optFns ...func(*eks.Options)) (*eks.ListClustersOutput, error) { + var tmpRet mock.Arguments + if len(optFns) > 0 { + tmpRet = _mock.Called(ctx, params, optFns) + } else { + tmpRet = _mock.Called(ctx, params) + } + ret := tmpRet + + if len(ret) == 0 { + panic("no return value specified for ListClusters") + } + + var r0 *eks.ListClustersOutput + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *eks.ListClustersInput, ...func(*eks.Options)) (*eks.ListClustersOutput, error)); ok { + return returnFunc(ctx, params, optFns...) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *eks.ListClustersInput, ...func(*eks.Options)) *eks.ListClustersOutput); ok { + r0 = returnFunc(ctx, params, optFns...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*eks.ListClustersOutput) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *eks.ListClustersInput, ...func(*eks.Options)) error); ok { + r1 = returnFunc(ctx, params, optFns...) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockClient_ListClusters_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListClusters' +type MockClient_ListClusters_Call struct { + *mock.Call +} + +// ListClusters is a helper method to define mock.On call +// - ctx context.Context +// - params *eks.ListClustersInput +// - optFns ...func(*eks.Options) +func (_e *MockClient_Expecter) ListClusters(ctx interface{}, params interface{}, optFns ...interface{}) *MockClient_ListClusters_Call { + return &MockClient_ListClusters_Call{Call: _e.mock.On("ListClusters", + append([]interface{}{ctx, params}, optFns...)...)} +} + +func (_c *MockClient_ListClusters_Call) Run(run func(ctx context.Context, params *eks.ListClustersInput, optFns ...func(*eks.Options))) *MockClient_ListClusters_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *eks.ListClustersInput + if args[1] != nil { + arg1 = args[1].(*eks.ListClustersInput) + } + var arg2 []func(*eks.Options) + var variadicArgs []func(*eks.Options) + if len(args) > 2 { + variadicArgs = args[2].([]func(*eks.Options)) + } + arg2 = variadicArgs + run( + arg0, + arg1, + arg2..., + ) + }) + return _c +} + +func (_c *MockClient_ListClusters_Call) Return(listClustersOutput *eks.ListClustersOutput, err error) *MockClient_ListClusters_Call { + _c.Call.Return(listClustersOutput, err) + return _c +} + +func (_c *MockClient_ListClusters_Call) RunAndReturn(run func(ctx context.Context, params *eks.ListClustersInput, optFns ...func(*eks.Options)) (*eks.ListClustersOutput, error)) *MockClient_ListClusters_Call { + _c.Call.Return(run) + return _c +} + +// NewMockClustersDescriber creates a new instance of MockClustersDescriber. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockClustersDescriber(t interface { + mock.TestingT + Cleanup(func()) +}) *MockClustersDescriber { + mock := &MockClustersDescriber{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockClustersDescriber is an autogenerated mock type for the ClustersDescriber type +type MockClustersDescriber struct { + mock.Mock +} + +type MockClustersDescriber_Expecter struct { + mock *mock.Mock +} + +func (_m *MockClustersDescriber) EXPECT() *MockClustersDescriber_Expecter { + return &MockClustersDescriber_Expecter{mock: &_m.Mock} +} + +// DescribeClusters provides a mock function for the type MockClustersDescriber +func (_mock *MockClustersDescriber) DescribeClusters(ctx context.Context) ([]awslib.AwsResource, error) { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for DescribeClusters") + } + + var r0 []awslib.AwsResource + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context) ([]awslib.AwsResource, error)); ok { + return returnFunc(ctx) + } + if returnFunc, ok := ret.Get(0).(func(context.Context) []awslib.AwsResource); ok { + r0 = returnFunc(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]awslib.AwsResource) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = returnFunc(ctx) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockClustersDescriber_DescribeClusters_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DescribeClusters' +type MockClustersDescriber_DescribeClusters_Call struct { + *mock.Call +} + +// DescribeClusters is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockClustersDescriber_Expecter) DescribeClusters(ctx interface{}) *MockClustersDescriber_DescribeClusters_Call { + return &MockClustersDescriber_DescribeClusters_Call{Call: _e.mock.On("DescribeClusters", ctx)} +} + +func (_c *MockClustersDescriber_DescribeClusters_Call) Run(run func(ctx context.Context)) *MockClustersDescriber_DescribeClusters_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockClustersDescriber_DescribeClusters_Call) Return(awsResources []awslib.AwsResource, err error) *MockClustersDescriber_DescribeClusters_Call { + _c.Call.Return(awsResources, err) + return _c +} + +func (_c *MockClustersDescriber_DescribeClusters_Call) RunAndReturn(run func(ctx context.Context) ([]awslib.AwsResource, error)) *MockClustersDescriber_DescribeClusters_Call { + _c.Call.Return(run) + return _c +} diff --git a/internal/resources/providers/awslib/eks/provider.go b/internal/resources/providers/awslib/eks/provider.go new file mode 100644 index 0000000000..577a90485a --- /dev/null +++ b/internal/resources/providers/awslib/eks/provider.go @@ -0,0 +1,63 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package eks + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/eks" + "github.com/samber/lo" + + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" +) + +// DescribeClusters returns every EKS cluster across all regions as Asset Discovery resources. +// EKS only exposes cluster names via ListClusters, so each is then described individually. +func (p *Provider) DescribeClusters(ctx context.Context) ([]awslib.AwsResource, error) { + clusters, err := awslib.MultiRegionFetch(ctx, p.clients, func(ctx context.Context, region string, c Client) ([]awslib.AwsResource, error) { + var names []string + input := &eks.ListClustersInput{} + for { + output, err := c.ListClusters(ctx, input) + if err != nil { + return nil, err + } + names = append(names, output.Clusters...) + if output.NextToken == nil { + break + } + input.NextToken = output.NextToken + } + + result := make([]awslib.AwsResource, 0, len(names)) + for _, name := range names { + described, err := c.DescribeCluster(ctx, &eks.DescribeClusterInput{Name: pointers.Ref(name)}) + if err != nil { + p.log.Errorf("Could not describe EKS cluster %s: %v", name, err) + continue + } + if described.Cluster == nil { + continue + } + result = append(result, newCluster(*described.Cluster, region)) + } + return result, nil + }) + return lo.Flatten(clusters), err +} diff --git a/internal/resources/providers/awslib/eks/provider_test.go b/internal/resources/providers/awslib/eks/provider_test.go new file mode 100644 index 0000000000..d3a829cc9b --- /dev/null +++ b/internal/resources/providers/awslib/eks/provider_test.go @@ -0,0 +1,81 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package eks + +import ( + "errors" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/eks" + "github.com/aws/aws-sdk-go-v2/service/eks/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" + "github.com/elastic/cloudbeat/internal/resources/utils/testhelper" +) + +func TestProvider_DescribeClusters(t *testing.T) { + t.Run("list clusters error", func(t *testing.T) { + m := &MockClient{} + m.On("ListClusters", mock.Anything, mock.Anything).Return(nil, errors.New("boom")) + p := &Provider{log: testhelper.NewLogger(t), clients: map[string]Client{awslib.DefaultRegion: m}} + + got, err := p.DescribeClusters(t.Context()) + require.Error(t, err) + assert.Empty(t, got) + }) + + t.Run("lists and describes clusters", func(t *testing.T) { + m := &MockClient{} + m.On("ListClusters", mock.Anything, mock.Anything).Return(&eks.ListClustersOutput{ + Clusters: []string{"c1"}, + }, nil) + m.On("DescribeCluster", mock.Anything, mock.Anything).Return(&eks.DescribeClusterOutput{ + Cluster: &types.Cluster{ + Name: pointers.Ref("c1"), + Arn: pointers.Ref("arn:aws:eks:us-east-1:123:cluster/c1"), + Status: types.ClusterStatusActive, + Version: pointers.Ref("1.29"), + PlatformVersion: pointers.Ref("eks.5"), + Tags: map[string]string{"Owner": "team-infra"}, + ResourcesVpcConfig: &types.VpcConfigResponse{ + EndpointPublicAccess: true, + EndpointPrivateAccess: false, + }, + }, + }, nil) + p := &Provider{log: testhelper.NewLogger(t), clients: map[string]Client{awslib.DefaultRegion: m}} + + got, err := p.DescribeClusters(t.Context()) + require.NoError(t, err) + require.Len(t, got, 1) + + c, ok := got[0].(Cluster) + require.True(t, ok) + assert.Equal(t, "c1", c.Name) + assert.Equal(t, "ACTIVE", c.Status) + assert.Equal(t, "1.29", c.Version) + assert.True(t, c.EndpointPublicAccess) + assert.False(t, c.EndpointPrivateAccess) + assert.Equal(t, "team-infra", c.GetOwnerTag()) + assert.Equal(t, awslib.DefaultRegion, c.GetRegion()) + }) +} diff --git a/internal/resources/providers/awslib/route53/provider.go b/internal/resources/providers/awslib/route53/provider.go new file mode 100644 index 0000000000..0f3bb44606 --- /dev/null +++ b/internal/resources/providers/awslib/route53/provider.go @@ -0,0 +1,84 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package route53 + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/route53" + + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" +) + +// ListRecords returns every resource record set across all hosted zones in the account as +// Asset Discovery resources. Each record set becomes a single asset. +func (p *Provider) ListRecords(ctx context.Context) ([]awslib.AwsResource, error) { + p.log.Debug("Fetching Route53 records") + + var results []awslib.AwsResource + var lastErr error + + zonesInput := &route53.ListHostedZonesInput{} + for { + zones, err := p.client.ListHostedZones(ctx, zonesInput) + if err != nil { + return results, err + } + + for _, zone := range zones.HostedZones { + hostedZoneID := pointers.Deref(zone.Id) + records, err := p.listRecordsForZone(ctx, hostedZoneID, cleanZoneID(hostedZoneID), pointers.Deref(zone.Name)) + if err != nil { + p.log.Errorf("Could not list records for hosted zone %s: %v", hostedZoneID, err) + lastErr = err + continue + } + results = append(results, records...) + } + + if !zones.IsTruncated || zones.NextMarker == nil { + break + } + zonesInput.Marker = zones.NextMarker + } + + p.log.Debugf("Fetched %d Route53 records", len(results)) + return results, lastErr +} + +func (p *Provider) listRecordsForZone(ctx context.Context, hostedZoneID, zoneID, zoneName string) ([]awslib.AwsResource, error) { + var results []awslib.AwsResource + input := &route53.ListResourceRecordSetsInput{HostedZoneId: pointers.Ref(hostedZoneID)} + for { + output, err := p.client.ListResourceRecordSets(ctx, input) + if err != nil { + return nil, err + } + for _, rrs := range output.ResourceRecordSets { + results = append(results, newRecord(rrs, zoneID, zoneName)) + } + if !output.IsTruncated { + break + } + input.StartRecordName = output.NextRecordName + input.StartRecordType = output.NextRecordType + input.StartRecordIdentifier = output.NextRecordIdentifier + } + return results, nil +} diff --git a/internal/resources/providers/awslib/route53/provider_test.go b/internal/resources/providers/awslib/route53/provider_test.go new file mode 100644 index 0000000000..946fcd789e --- /dev/null +++ b/internal/resources/providers/awslib/route53/provider_test.go @@ -0,0 +1,96 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package route53 + +import ( + "errors" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/route53" + "github.com/aws/aws-sdk-go-v2/service/route53/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" + "github.com/elastic/cloudbeat/internal/resources/utils/testhelper" +) + +func TestProvider_ListRecords(t *testing.T) { + t.Run("list hosted zones error", func(t *testing.T) { + m := &MockClient{} + m.On("ListHostedZones", mock.Anything, mock.Anything).Return(nil, errors.New("boom")) + p := &Provider{log: testhelper.NewLogger(t), client: m} + + got, err := p.ListRecords(t.Context()) + require.Error(t, err) + assert.Empty(t, got) + }) + + t.Run("maps records and cleans zone id", func(t *testing.T) { + m := &MockClient{} + m.On("ListHostedZones", mock.Anything, mock.Anything).Return(&route53.ListHostedZonesOutput{ + HostedZones: []types.HostedZone{ + {Id: pointers.Ref("/hostedzone/Z123"), Name: pointers.Ref("example.com.")}, + }, + }, nil) + m.On("ListResourceRecordSets", mock.Anything, mock.Anything).Return(&route53.ListResourceRecordSetsOutput{ + ResourceRecordSets: []types.ResourceRecordSet{ + { + Name: pointers.Ref("www.example.com."), + Type: types.RRTypeA, + Weight: pointers.Ref(int64(10)), + Region: types.ResourceRecordSetRegionUsEast1, + HealthCheckId: pointers.Ref("hc-1"), + ResourceRecords: []types.ResourceRecord{ + {Value: pointers.Ref("203.0.113.10")}, + }, + }, + { + Name: pointers.Ref("alias.example.com."), + Type: types.RRTypeA, + AliasTarget: &types.AliasTarget{ + DNSName: pointers.Ref("target.example.com."), + HostedZoneId: pointers.Ref("Z456"), + }, + }, + }, + }, nil) + p := &Provider{log: testhelper.NewLogger(t), client: m} + + got, err := p.ListRecords(t.Context()) + require.NoError(t, err) + require.Len(t, got, 2) + + first, ok := got[0].(Record) + require.True(t, ok) + assert.Equal(t, "Z123", first.ZoneID) + assert.Equal(t, "example.com.", first.ZoneName) + assert.Equal(t, "A", first.Type) + assert.Equal(t, []string{"203.0.113.10"}, first.Records) + assert.Equal(t, int64(10), *first.Weight) + assert.Equal(t, "hc-1", first.HealthCheckID) + assert.Equal(t, "arn:aws:route53:::hostedzone/Z123/recordset/www.example.com./A", first.GetResourceArn()) + assert.Equal(t, "global", first.GetRegion()) + + second, ok := got[1].(Record) + require.True(t, ok) + assert.Equal(t, "target.example.com.", second.AliasTargetDNS) + assert.Equal(t, "Z456", second.AliasTargetZoneID) + }) +} diff --git a/internal/resources/providers/awslib/route53/record.go b/internal/resources/providers/awslib/route53/record.go new file mode 100644 index 0000000000..fe24ec2f1d --- /dev/null +++ b/internal/resources/providers/awslib/route53/record.go @@ -0,0 +1,98 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package route53 + +import ( + "fmt" + "strings" + + "github.com/aws/aws-sdk-go-v2/service/route53/types" + + "github.com/elastic/cloudbeat/internal/resources/fetching" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + "github.com/elastic/cloudbeat/internal/resources/utils/pointers" +) + +// Record is a flattened, normalized view of a Route53 resource record set together with the +// hosted zone it belongs to. One Record maps to one Asset Discovery asset. +type Record struct { + Name string `json:"name"` + Type string `json:"type"` + Records []string `json:"records,omitempty"` + Weight *int64 `json:"weight,omitempty"` + RoutingRegion string `json:"routing_region,omitempty"` + ZoneID string `json:"zone_id"` + ZoneName string `json:"zone_name"` + AliasTargetDNS string `json:"alias_target_dns,omitempty"` + AliasTargetZoneID string `json:"alias_target_zone_id,omitempty"` + HealthCheckID string `json:"health_check_id,omitempty"` + + setIdentifier string +} + +func newRecord(rrs types.ResourceRecordSet, zoneID, zoneName string) Record { + r := Record{ + Name: pointers.Deref(rrs.Name), + Type: string(rrs.Type), + Weight: rrs.Weight, + RoutingRegion: string(rrs.Region), + ZoneID: zoneID, + ZoneName: zoneName, + HealthCheckID: pointers.Deref(rrs.HealthCheckId), + setIdentifier: pointers.Deref(rrs.SetIdentifier), + } + for _, rec := range rrs.ResourceRecords { + if v := pointers.Deref(rec.Value); v != "" { + r.Records = append(r.Records, v) + } + } + if rrs.AliasTarget != nil { + r.AliasTargetDNS = pointers.Deref(rrs.AliasTarget.DNSName) + r.AliasTargetZoneID = pointers.Deref(rrs.AliasTarget.HostedZoneId) + } + return r +} + +// GetResourceArn synthesizes a stable identifier for the record set. Route53 record sets have +// no ARN, so we derive one from the zone, record name, type and (for weighted/latency/geo +// records) the set identifier, which together uniquely identify a record set. +func (r Record) GetResourceArn() string { + arn := fmt.Sprintf("arn:aws:route53:::hostedzone/%s/recordset/%s/%s", r.ZoneID, r.Name, r.Type) + if r.setIdentifier != "" { + arn += "/" + r.setIdentifier + } + return arn +} + +func (r Record) GetResourceName() string { + return r.Name +} + +func (r Record) GetResourceType() string { + return fetching.Route53Type +} + +// GetRegion reports the AWS region. Route53 is a global service. +func (r Record) GetRegion() string { + return awslib.GlobalRegion +} + +// cleanZoneID strips the "/hostedzone/" prefix Route53 returns on hosted zone IDs. +func cleanZoneID(id string) string { + return strings.TrimPrefix(id, "/hostedzone/") +} diff --git a/internal/resources/providers/awslib/route53/route53.go b/internal/resources/providers/awslib/route53/route53.go new file mode 100644 index 0000000000..cb53589e29 --- /dev/null +++ b/internal/resources/providers/awslib/route53/route53.go @@ -0,0 +1,51 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package route53 + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53" + + "github.com/elastic/cloudbeat/internal/infra/clog" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" +) + +// Client abstracts the subset of the Route53 SDK client used by the provider. +// Route53 is a global service, so a single client (not per-region) is sufficient. +type Client interface { + ListHostedZones(ctx context.Context, params *route53.ListHostedZonesInput, optFns ...func(*route53.Options)) (*route53.ListHostedZonesOutput, error) + ListResourceRecordSets(ctx context.Context, params *route53.ListResourceRecordSetsInput, optFns ...func(*route53.Options)) (*route53.ListResourceRecordSetsOutput, error) +} + +type RecordsLister interface { + ListRecords(ctx context.Context) ([]awslib.AwsResource, error) +} + +type Provider struct { + log *clog.Logger + client Client +} + +func NewProvider(log *clog.Logger, cfg aws.Config) *Provider { + return &Provider{ + log: log, + client: route53.NewFromConfig(cfg), + } +} diff --git a/internal/resources/providers/awslib/route53/route53_mock.go b/internal/resources/providers/awslib/route53/route53_mock.go new file mode 100644 index 0000000000..8ff85af562 --- /dev/null +++ b/internal/resources/providers/awslib/route53/route53_mock.go @@ -0,0 +1,313 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +//go:build !release + +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package route53 + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/route53" + "github.com/elastic/cloudbeat/internal/resources/providers/awslib" + mock "github.com/stretchr/testify/mock" +) + +// NewMockClient creates a new instance of MockClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockClient(t interface { + mock.TestingT + Cleanup(func()) +}) *MockClient { + mock := &MockClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockClient is an autogenerated mock type for the Client type +type MockClient struct { + mock.Mock +} + +type MockClient_Expecter struct { + mock *mock.Mock +} + +func (_m *MockClient) EXPECT() *MockClient_Expecter { + return &MockClient_Expecter{mock: &_m.Mock} +} + +// ListHostedZones provides a mock function for the type MockClient +func (_mock *MockClient) ListHostedZones(ctx context.Context, params *route53.ListHostedZonesInput, optFns ...func(*route53.Options)) (*route53.ListHostedZonesOutput, error) { + var tmpRet mock.Arguments + if len(optFns) > 0 { + tmpRet = _mock.Called(ctx, params, optFns) + } else { + tmpRet = _mock.Called(ctx, params) + } + ret := tmpRet + + if len(ret) == 0 { + panic("no return value specified for ListHostedZones") + } + + var r0 *route53.ListHostedZonesOutput + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *route53.ListHostedZonesInput, ...func(*route53.Options)) (*route53.ListHostedZonesOutput, error)); ok { + return returnFunc(ctx, params, optFns...) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *route53.ListHostedZonesInput, ...func(*route53.Options)) *route53.ListHostedZonesOutput); ok { + r0 = returnFunc(ctx, params, optFns...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*route53.ListHostedZonesOutput) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *route53.ListHostedZonesInput, ...func(*route53.Options)) error); ok { + r1 = returnFunc(ctx, params, optFns...) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockClient_ListHostedZones_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListHostedZones' +type MockClient_ListHostedZones_Call struct { + *mock.Call +} + +// ListHostedZones is a helper method to define mock.On call +// - ctx context.Context +// - params *route53.ListHostedZonesInput +// - optFns ...func(*route53.Options) +func (_e *MockClient_Expecter) ListHostedZones(ctx interface{}, params interface{}, optFns ...interface{}) *MockClient_ListHostedZones_Call { + return &MockClient_ListHostedZones_Call{Call: _e.mock.On("ListHostedZones", + append([]interface{}{ctx, params}, optFns...)...)} +} + +func (_c *MockClient_ListHostedZones_Call) Run(run func(ctx context.Context, params *route53.ListHostedZonesInput, optFns ...func(*route53.Options))) *MockClient_ListHostedZones_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *route53.ListHostedZonesInput + if args[1] != nil { + arg1 = args[1].(*route53.ListHostedZonesInput) + } + var arg2 []func(*route53.Options) + var variadicArgs []func(*route53.Options) + if len(args) > 2 { + variadicArgs = args[2].([]func(*route53.Options)) + } + arg2 = variadicArgs + run( + arg0, + arg1, + arg2..., + ) + }) + return _c +} + +func (_c *MockClient_ListHostedZones_Call) Return(listHostedZonesOutput *route53.ListHostedZonesOutput, err error) *MockClient_ListHostedZones_Call { + _c.Call.Return(listHostedZonesOutput, err) + return _c +} + +func (_c *MockClient_ListHostedZones_Call) RunAndReturn(run func(ctx context.Context, params *route53.ListHostedZonesInput, optFns ...func(*route53.Options)) (*route53.ListHostedZonesOutput, error)) *MockClient_ListHostedZones_Call { + _c.Call.Return(run) + return _c +} + +// ListResourceRecordSets provides a mock function for the type MockClient +func (_mock *MockClient) ListResourceRecordSets(ctx context.Context, params *route53.ListResourceRecordSetsInput, optFns ...func(*route53.Options)) (*route53.ListResourceRecordSetsOutput, error) { + var tmpRet mock.Arguments + if len(optFns) > 0 { + tmpRet = _mock.Called(ctx, params, optFns) + } else { + tmpRet = _mock.Called(ctx, params) + } + ret := tmpRet + + if len(ret) == 0 { + panic("no return value specified for ListResourceRecordSets") + } + + var r0 *route53.ListResourceRecordSetsOutput + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *route53.ListResourceRecordSetsInput, ...func(*route53.Options)) (*route53.ListResourceRecordSetsOutput, error)); ok { + return returnFunc(ctx, params, optFns...) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *route53.ListResourceRecordSetsInput, ...func(*route53.Options)) *route53.ListResourceRecordSetsOutput); ok { + r0 = returnFunc(ctx, params, optFns...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*route53.ListResourceRecordSetsOutput) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *route53.ListResourceRecordSetsInput, ...func(*route53.Options)) error); ok { + r1 = returnFunc(ctx, params, optFns...) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockClient_ListResourceRecordSets_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListResourceRecordSets' +type MockClient_ListResourceRecordSets_Call struct { + *mock.Call +} + +// ListResourceRecordSets is a helper method to define mock.On call +// - ctx context.Context +// - params *route53.ListResourceRecordSetsInput +// - optFns ...func(*route53.Options) +func (_e *MockClient_Expecter) ListResourceRecordSets(ctx interface{}, params interface{}, optFns ...interface{}) *MockClient_ListResourceRecordSets_Call { + return &MockClient_ListResourceRecordSets_Call{Call: _e.mock.On("ListResourceRecordSets", + append([]interface{}{ctx, params}, optFns...)...)} +} + +func (_c *MockClient_ListResourceRecordSets_Call) Run(run func(ctx context.Context, params *route53.ListResourceRecordSetsInput, optFns ...func(*route53.Options))) *MockClient_ListResourceRecordSets_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *route53.ListResourceRecordSetsInput + if args[1] != nil { + arg1 = args[1].(*route53.ListResourceRecordSetsInput) + } + var arg2 []func(*route53.Options) + var variadicArgs []func(*route53.Options) + if len(args) > 2 { + variadicArgs = args[2].([]func(*route53.Options)) + } + arg2 = variadicArgs + run( + arg0, + arg1, + arg2..., + ) + }) + return _c +} + +func (_c *MockClient_ListResourceRecordSets_Call) Return(listResourceRecordSetsOutput *route53.ListResourceRecordSetsOutput, err error) *MockClient_ListResourceRecordSets_Call { + _c.Call.Return(listResourceRecordSetsOutput, err) + return _c +} + +func (_c *MockClient_ListResourceRecordSets_Call) RunAndReturn(run func(ctx context.Context, params *route53.ListResourceRecordSetsInput, optFns ...func(*route53.Options)) (*route53.ListResourceRecordSetsOutput, error)) *MockClient_ListResourceRecordSets_Call { + _c.Call.Return(run) + return _c +} + +// NewMockRecordsLister creates a new instance of MockRecordsLister. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockRecordsLister(t interface { + mock.TestingT + Cleanup(func()) +}) *MockRecordsLister { + mock := &MockRecordsLister{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// MockRecordsLister is an autogenerated mock type for the RecordsLister type +type MockRecordsLister struct { + mock.Mock +} + +type MockRecordsLister_Expecter struct { + mock *mock.Mock +} + +func (_m *MockRecordsLister) EXPECT() *MockRecordsLister_Expecter { + return &MockRecordsLister_Expecter{mock: &_m.Mock} +} + +// ListRecords provides a mock function for the type MockRecordsLister +func (_mock *MockRecordsLister) ListRecords(ctx context.Context) ([]awslib.AwsResource, error) { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for ListRecords") + } + + var r0 []awslib.AwsResource + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context) ([]awslib.AwsResource, error)); ok { + return returnFunc(ctx) + } + if returnFunc, ok := ret.Get(0).(func(context.Context) []awslib.AwsResource); ok { + r0 = returnFunc(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]awslib.AwsResource) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = returnFunc(ctx) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockRecordsLister_ListRecords_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListRecords' +type MockRecordsLister_ListRecords_Call struct { + *mock.Call +} + +// ListRecords is a helper method to define mock.On call +// - ctx context.Context +func (_e *MockRecordsLister_Expecter) ListRecords(ctx interface{}) *MockRecordsLister_ListRecords_Call { + return &MockRecordsLister_ListRecords_Call{Call: _e.mock.On("ListRecords", ctx)} +} + +func (_c *MockRecordsLister_ListRecords_Call) Run(run func(ctx context.Context)) *MockRecordsLister_ListRecords_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockRecordsLister_ListRecords_Call) Return(awsResources []awslib.AwsResource, err error) *MockRecordsLister_ListRecords_Call { + _c.Call.Return(awsResources, err) + return _c +} + +func (_c *MockRecordsLister_ListRecords_Call) RunAndReturn(run func(ctx context.Context) ([]awslib.AwsResource, error)) *MockRecordsLister_ListRecords_Call { + _c.Call.Return(run) + return _c +}