From ab07d08b7038103f6a539a7cbffe71827ba8bf3c Mon Sep 17 00:00:00 2001 From: Bryce Kahle Date: Wed, 9 Oct 2024 08:39:20 -0700 Subject: [PATCH 01/17] fix lock contention asset names (#29884) --- pkg/ebpf/lockcontention.go | 43 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/pkg/ebpf/lockcontention.go b/pkg/ebpf/lockcontention.go index 7f1492fbbfa3f..44f63f5d5ca95 100644 --- a/pkg/ebpf/lockcontention.go +++ b/pkg/ebpf/lockcontention.go @@ -36,26 +36,9 @@ const ( // or just system-probe resources TrackAllEBPFResources = true - lockContetionBpfObjectFile = "bytecode/build/co-re/lock_contention.o" - ksymsIterBpfObjectFile = "bytecode/build/co-re/ksyms_iter.o" - - // bpf map names - mapAddrFdBpfMap = "map_addr_fd" - lockStatBpfMap = "lock_stat" - rangesBpfMap = "ranges" - timeStampBpfMap = "tstamp" - - // bpf probe name - fnDoVfsIoctl = "do_vfs_ioctl" - - // ioctl trigget code + // ioctl trigger code ioctlCollectLocksCmd = 0x70c13 - // bpf global constants - numCpus = "num_cpus" - numRanges = "num_of_ranges" - logTwoNumOfRanges = "log2_num_of_ranges" - // maximum lock ranges to track maxTrackedRanges = 16384 ) @@ -335,7 +318,7 @@ func (l *LockContentionCollector) Initialize(trackAllResources bool) error { var ranges uint32 var cpus uint32 - if err := LoadCOREAsset(lockContetionBpfObjectFile, func(bc bytecode.AssetReader, managerOptions manager.Options) error { + if err := LoadCOREAsset("lock_contention.o", func(bc bytecode.AssetReader, managerOptions manager.Options) error { collectionSpec, err := ebpf.LoadCollectionSpecFromReader(bc) if err != nil { return fmt.Errorf("failed to load collection spec: %w", err) @@ -350,21 +333,21 @@ func (l *LockContentionCollector) Initialize(trackAllResources bool) error { ranges = constrainMaxRanges(estimateNumOfLockRanges(maps, cpus)) l.ranges = ranges - collectionSpec.Maps[mapAddrFdBpfMap].MaxEntries = ranges - collectionSpec.Maps[lockStatBpfMap].MaxEntries = ranges - collectionSpec.Maps[rangesBpfMap].MaxEntries = ranges + collectionSpec.Maps["map_addr_fd"].MaxEntries = ranges + collectionSpec.Maps["lock_stat"].MaxEntries = ranges + collectionSpec.Maps["ranges"].MaxEntries = ranges - // Ideally we would want this to be the max number of proccesses allowed + // Ideally we would want this to be the max number of processes allowed // by the kernel, however verifier constraints force us to choose a smaller // value. This value has been experimentally determined to pass the verifier. - collectionSpec.Maps[timeStampBpfMap].MaxEntries = 16384 + collectionSpec.Maps["tstamp"].MaxEntries = 16384 - constants[numCpus] = uint64(cpus) + constants["num_cpus"] = uint64(cpus) for ksym, addr := range kaddrs { constants[ksym] = addr } - constants[numRanges] = uint64(ranges) - constants[logTwoNumOfRanges] = uint64(math.Log2(float64(ranges))) + constants["num_of_ranges"] = uint64(ranges) + constants["log2_num_of_ranges"] = uint64(math.Log2(float64(ranges))) if err := collectionSpec.RewriteConstants(constants); err != nil { return fmt.Errorf("failed to write constant: %w", err) @@ -382,7 +365,7 @@ func (l *LockContentionCollector) Initialize(trackAllResources bool) error { if errors.As(err, &ve) { return fmt.Errorf("verfier error loading collection: %s\n%+v", err, ve) } - return fmt.Errorf("failed to load objects: %w", err) + return fmt.Errorf("failed to load objects (%d ranges): %w", l.ranges, err) } return nil @@ -390,7 +373,7 @@ func (l *LockContentionCollector) Initialize(trackAllResources bool) error { return err } - kp, err := link.Kprobe(fnDoVfsIoctl, l.objects.KprobeVfsIoctl, nil) + kp, err := link.Kprobe("do_vfs_ioctl", l.objects.KprobeVfsIoctl, nil) if err != nil { return fmt.Errorf("failed to attack kprobe: %w", err) } @@ -548,7 +531,7 @@ type ksymIterProgram struct { func getKernelSymbolsAddressesWithKallsymsIterator(kernelAddresses ...string) (map[string]uint64, error) { var prog ksymIterProgram - if err := LoadCOREAsset(ksymsIterBpfObjectFile, func(bc bytecode.AssetReader, managerOptions manager.Options) error { + if err := LoadCOREAsset("ksyms_iter.o", func(bc bytecode.AssetReader, managerOptions manager.Options) error { collectionSpec, err := ebpf.LoadCollectionSpecFromReader(bc) if err != nil { return fmt.Errorf("failed to load collection spec: %w", err) From 84713c69f5fddb8c5ba7d5cdac16f2889bafc257 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Wed, 9 Oct 2024 18:39:29 +0300 Subject: [PATCH 02/17] usm: go-tls: Restore full support in golang 1.23 (#29965) --- pkg/network/go/goid/goid_offset.go | 6 ++++++ ...m-go-tls-support-golang-1-23-34e08c2f5a627b95.yaml | 11 +++++++++++ 2 files changed, 17 insertions(+) create mode 100644 releasenotes/notes/usm-go-tls-support-golang-1-23-34e08c2f5a627b95.yaml diff --git a/pkg/network/go/goid/goid_offset.go b/pkg/network/go/goid/goid_offset.go index ab9c298a35a33..e604769db05af 100644 --- a/pkg/network/go/goid/goid_offset.go +++ b/pkg/network/go/goid/goid_offset.go @@ -17,11 +17,17 @@ var MinGoVersion = goversion.GoVersion{Major: 1, Minor: 13, Rev: 0} func GetGoroutineIDOffset(version goversion.GoVersion, goarch string) (uint64, error) { switch goarch { case "amd64": + if version.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 23, Rev: 0}) { + return 0xa0, nil + } if version.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 13, Rev: 0}) { return 0x98, nil } return 0, fmt.Errorf("unsupported version go%d.%d.%d (min supported: go%d.%d.%d)", version.Major, version.Minor, version.Rev, 1, 13, 0) case "arm64": + if version.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 23, Rev: 0}) { + return 0xa0, nil + } if version.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 13, Rev: 0}) { return 0x98, nil } diff --git a/releasenotes/notes/usm-go-tls-support-golang-1-23-34e08c2f5a627b95.yaml b/releasenotes/notes/usm-go-tls-support-golang-1-23-34e08c2f5a627b95.yaml new file mode 100644 index 0000000000000..7e1c8d3c71e0c --- /dev/null +++ b/releasenotes/notes/usm-go-tls-support-golang-1-23-34e08c2f5a627b95.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fix USM's GO-TLS support for Golang 1.23 From 95ea749b57023d861e9a9f8fde44b2640dd66a4e Mon Sep 17 00:00:00 2001 From: Bryce Kahle Date: Wed, 9 Oct 2024 08:39:38 -0700 Subject: [PATCH 03/17] only allow CO-RE macros in COMPILE_CORE build mode (#29962) --- pkg/ebpf/c/bpf_core_read.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/ebpf/c/bpf_core_read.h b/pkg/ebpf/c/bpf_core_read.h index ecffc864b5716..f764223882879 100644 --- a/pkg/ebpf/c/bpf_core_read.h +++ b/pkg/ebpf/c/bpf_core_read.h @@ -482,7 +482,7 @@ enum bpf_enum_value_kind { __r; \ }) -#ifdef COMPILE_RUNTIME +#ifndef COMPILE_CORE #undef BPF_CORE_READ #define BPF_CORE_READ BPF_PROBE_READ From ce5e6eb2e15d087811c22bcf02de5f5ad1e2f27b Mon Sep 17 00:00:00 2001 From: Alexandre Menasria <47357713+amenasria@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:12:59 +0200 Subject: [PATCH 04/17] [CI] Skip failing tests on the macOS runners (#29852) --- pkg/collector/check/stats/stats_test.go | 5 +++++ pkg/trace/api/api_nix_test.go | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/pkg/collector/check/stats/stats_test.go b/pkg/collector/check/stats/stats_test.go index 36897ba4408e5..37f9bf62871a2 100644 --- a/pkg/collector/check/stats/stats_test.go +++ b/pkg/collector/check/stats/stats_test.go @@ -8,6 +8,8 @@ package stats import ( "net/http" "net/http/httptest" + "os" + "runtime" "testing" "time" @@ -78,6 +80,9 @@ func TestNewStats(t *testing.T) { } func TestNewStatsStateTelemetryIgnoredWhenGloballyDisabled(t *testing.T) { + if os.Getenv("CI") == "true" && runtime.GOOS == "darwin" { + t.Skip("TestNewStatsStateTelemetryIgnoredWhenGloballyDisabled is known to fail on the macOS Gitlab runners because of the already running Agent") + } mockConfig := configmock.New(t) mockConfig.SetWithoutSource("agent_telemetry.enabled", false) mockConfig.SetWithoutSource("telemetry.enabled", false) diff --git a/pkg/trace/api/api_nix_test.go b/pkg/trace/api/api_nix_test.go index fbefae776493e..ce13638efc6b9 100644 --- a/pkg/trace/api/api_nix_test.go +++ b/pkg/trace/api/api_nix_test.go @@ -15,6 +15,7 @@ import ( "net/http" "os" "path/filepath" + "runtime" "testing" "time" @@ -27,6 +28,9 @@ import ( ) func TestUDS(t *testing.T) { + if os.Getenv("CI") == "true" && runtime.GOOS == "darwin" { + t.Skip("TestUDS is known to fail on the macOS Gitlab runners because of the already running Agent") + } sockPath := filepath.Join(t.TempDir(), "apm.sock") payload := msgpTraces(t, pb.Traces{testutil.RandomTrace(10, 20)}) client := http.Client{ From 6e35ccfee6fabefc23307a760c8f0afa69821a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:26:35 -0400 Subject: [PATCH 05/17] Fix gitlab-ci-jobs-codeowners linter to match only gitlab files (#29986) --- .gitlab/.pre/gitlab_configuration.yml | 2 +- tasks/linter.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab/.pre/gitlab_configuration.yml b/.gitlab/.pre/gitlab_configuration.yml index 2cf4e9b33c425..8f605b626b480 100644 --- a/.gitlab/.pre/gitlab_configuration.yml +++ b/.gitlab/.pre/gitlab_configuration.yml @@ -73,4 +73,4 @@ lint_gitlab_ci_jobs_codeowners: rules: - !reference [.on_gitlab_changes] script: - - inv -e linter.gitlab-ci-jobs-codeowners + - inv -e linter.gitlab-ci-jobs-codeowners --all-files diff --git a/tasks/linter.py b/tasks/linter.py index f7860ccd842e3..5e4a502e52f14 100644 --- a/tasks/linter.py +++ b/tasks/linter.py @@ -4,6 +4,7 @@ import re import sys from collections import defaultdict +from fnmatch import fnmatch from glob import glob import yaml @@ -821,7 +822,7 @@ def gitlab_ci_jobs_codeowners(ctx, path_codeowners='.github/CODEOWNERS', all_fil modified_yml_files = glob('.gitlab/**/*.yml', recursive=True) else: modified_yml_files = get_file_modifications(ctx, added=True, modified=True, only_names=True) - modified_yml_files = [path for path in modified_yml_files if path.endswith('.yml')] + modified_yml_files = [path for path in modified_yml_files if fnmatch(path, '.gitlab/**.yml')] if not modified_yml_files: print(f'{color_message("Info", Color.BLUE)}: No added / modified job files, skipping lint') From cb7a94ef5bfae8cb6e1fc92e2751d7f0ed87551f Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Wed, 9 Oct 2024 12:29:26 -0400 Subject: [PATCH 06/17] [NPM-3571] Include system-probe telemetry in agent flare (#29768) --- comp/core/flare/builder/builder.go | 6 ++-- pkg/flare/archive.go | 14 +++++++-- pkg/flare/sysprobe/archive_process.go | 20 +++++++++++++ pkg/flare/sysprobe/archive_unsupported.go | 16 ++++++++++ pkg/process/net/common.go | 25 ++++++++++++++++ pkg/process/net/common_linux.go | 1 + pkg/process/net/common_unsupported.go | 3 ++ pkg/process/net/common_windows.go | 3 +- pkg/process/net/mocks/sys_probe_util.go | 30 +++++++++++++++++++ pkg/process/net/shared.go | 1 + pkg/util/fxutil/group.go | 2 +- ...robe-flare-telemetry-c47f54b8a2842acf.yaml | 11 +++++++ 12 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 pkg/flare/sysprobe/archive_process.go create mode 100644 pkg/flare/sysprobe/archive_unsupported.go create mode 100644 releasenotes/notes/system-probe-flare-telemetry-c47f54b8a2842acf.yaml diff --git a/comp/core/flare/builder/builder.go b/comp/core/flare/builder/builder.go index 05ab9b7ecb56e..b6992c9a6f1bf 100644 --- a/comp/core/flare/builder/builder.go +++ b/comp/core/flare/builder/builder.go @@ -16,8 +16,8 @@ import ( // // When adding data to a flare the builder will do multiple things internally. // -// First a log of the archive creation will be kept and shipped with the flare. When using the the FlareBuilder you -// should not stop at the first error. We want to collect as much as possible. Any error returned by the a FlareBuilder +// First a log of the archive creation will be kept and shipped with the flare. When using FlareBuilder we +// should not stop at the first error. We want to collect as much as possible. Any error returned by a FlareBuilder // method is added to the flare log. In general, you can safely ignore those errors unless sending a flare without some // file/information would not make sense. // @@ -34,7 +34,7 @@ import ( type FlareBuilder interface { // IsLocal returns true when the flare is created by the CLI instead of the running Agent process. This happens // when the CLI could not reach the Agent process to request a new flare. In that case a flare is still created - // directly from the CLI process and will not contains any runtime informations. + // directly from the CLI process and will not contain any runtime information. IsLocal() bool // Logf adds a formatted log entry to the flare file associated with this effect. diff --git a/pkg/flare/archive.go b/pkg/flare/archive.go index 393fa43497798..37bd7cbadf517 100644 --- a/pkg/flare/archive.go +++ b/pkg/flare/archive.go @@ -30,6 +30,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/diagnose" "github.com/DataDog/datadog-agent/pkg/diagnose/diagnosis" + "github.com/DataDog/datadog-agent/pkg/flare/sysprobe" "github.com/DataDog/datadog-agent/pkg/status/health" systemprobeStatus "github.com/DataDog/datadog-agent/pkg/status/systemprobe" "github.com/DataDog/datadog-agent/pkg/util/ecs" @@ -81,7 +82,8 @@ func CompleteFlare(fb flaretypes.FlareBuilder, diagnoseDeps diagnose.SuitesDeps) addSystemProbePlatformSpecificEntries(fb) if pkgconfigsetup.SystemProbe().GetBool("system_probe_config.enabled") { - fb.AddFileFromFunc(filepath.Join("expvar", "system-probe"), getSystemProbeStats) //nolint:errcheck + fb.AddFileFromFunc(filepath.Join("expvar", "system-probe"), getSystemProbeStats) //nolint:errcheck + fb.AddFileFromFunc(filepath.Join("system-probe", "system_probe_telemetry.log"), getSystemProbeTelemetry) // nolint:errcheck } pprofURL := fmt.Sprintf("http://127.0.0.1:%s/debug/pprof/goroutine?debug=2", @@ -186,10 +188,14 @@ func getExpVar(fb flaretypes.FlareBuilder) error { return fb.AddFile(f, v) } +func getSystemProbeSocketPath() string { + return pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket") +} + func getSystemProbeStats() ([]byte, error) { // TODO: (components) - Temporary until we can use the status component to extract the system probe status from it. stats := map[string]interface{}{} - systemprobeStatus.GetStatus(stats, pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")) + systemprobeStatus.GetStatus(stats, getSystemProbeSocketPath()) sysProbeBuf, err := yaml.Marshal(stats["systemProbeStats"]) if err != nil { return nil, err @@ -198,6 +204,10 @@ func getSystemProbeStats() ([]byte, error) { return sysProbeBuf, nil } +func getSystemProbeTelemetry() ([]byte, error) { + return sysprobe.GetSystemProbeTelemetry(getSystemProbeSocketPath()) +} + // getProcessAgentFullConfig fetches process-agent runtime config as YAML and returns it to be added to process_agent_runtime_config_dump.yaml func getProcessAgentFullConfig() ([]byte, error) { addressPort, err := pkgconfigsetup.GetProcessAPIAddressPort(pkgconfigsetup.Datadog()) diff --git a/pkg/flare/sysprobe/archive_process.go b/pkg/flare/sysprobe/archive_process.go new file mode 100644 index 0000000000000..88954881b68e0 --- /dev/null +++ b/pkg/flare/sysprobe/archive_process.go @@ -0,0 +1,20 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build process + +// Package sysprobe contains flare logic that only imports pkg/process/net when the process build tag is included +package sysprobe + +import "github.com/DataDog/datadog-agent/pkg/process/net" + +// GetSystemProbeTelemetry queries the telemetry endpoint from system-probe. +func GetSystemProbeTelemetry(socketPath string) ([]byte, error) { + probeUtil, err := net.GetRemoteSystemProbeUtil(socketPath) + if err != nil { + return nil, err + } + return probeUtil.GetTelemetry() +} diff --git a/pkg/flare/sysprobe/archive_unsupported.go b/pkg/flare/sysprobe/archive_unsupported.go new file mode 100644 index 0000000000000..8bf3f4b5818fd --- /dev/null +++ b/pkg/flare/sysprobe/archive_unsupported.go @@ -0,0 +1,16 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !process + +// Package sysprobe contains flare logic that only imports pkg/process/net when the process build tag is included +package sysprobe + +import "errors" + +// GetSystemProbeTelemetry is not supported without the process agent +func GetSystemProbeTelemetry(_socketPath string) ([]byte, error) { + return nil, errors.New("getSystemProbeTelemetry not supported on build without the process agent") +} diff --git a/pkg/process/net/common.go b/pkg/process/net/common.go index eb13384a656d3..252361f6d8983 100644 --- a/pkg/process/net/common.go +++ b/pkg/process/net/common.go @@ -397,6 +397,31 @@ func (r *RemoteSysProbeUtil) GetDiscoveryServices() (*discoverymodel.ServicesRes return res, nil } +// GetTelemetry queries the telemetry endpoint from system-probe. +func (r *RemoteSysProbeUtil) GetTelemetry() ([]byte, error) { + req, err := http.NewRequest(http.MethodGet, telemetryURL, nil) + if err != nil { + return nil, err + } + + resp, err := r.httpClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + data, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf(`GetTelemetry got non-success status code: path %s, url: %s, status_code: %d, response: "%s"`, r.path, req.URL, resp.StatusCode, data) + } + + return data, nil +} + func (r *RemoteSysProbeUtil) init() error { resp, err := r.httpClient.Get(statsURL) if err != nil { diff --git a/pkg/process/net/common_linux.go b/pkg/process/net/common_linux.go index 218137d1374a0..7e6aa232e4af0 100644 --- a/pkg/process/net/common_linux.go +++ b/pkg/process/net/common_linux.go @@ -29,6 +29,7 @@ const ( pprofURL = "http://unix/debug/pprof" languageDetectionURL = "http://unix/" + string(sysconfig.LanguageDetectionModule) + "/detect" discoveryServicesURL = "http://unix/" + string(sysconfig.DiscoveryModule) + "/services" + telemetryURL = "http://unix/telemetry" netType = "unix" ) diff --git a/pkg/process/net/common_unsupported.go b/pkg/process/net/common_unsupported.go index ebdea5968e5bb..af7eaef555926 100644 --- a/pkg/process/net/common_unsupported.go +++ b/pkg/process/net/common_unsupported.go @@ -73,3 +73,6 @@ func (r *RemoteSysProbeUtil) DetectLanguage([]int32) ([]languagemodels.Language, func (r *RemoteSysProbeUtil) GetPprof(_ string) ([]byte, error) { return nil, ErrNotImplemented } + +// GetTelemetry is not supported +func (r *RemoteSysProbeUtil) GetTelemetry() ([]byte, error) { return nil, ErrNotImplemented } diff --git a/pkg/process/net/common_windows.go b/pkg/process/net/common_windows.go index 2afd2ddfa003f..005c91bbee5de 100644 --- a/pkg/process/net/common_windows.go +++ b/pkg/process/net/common_windows.go @@ -32,7 +32,8 @@ const ( // procStatsURL is not used in windows, the value is added to avoid compilation error in windows procStatsURL = "http://localhost:3333/" + string(sysconfig.ProcessModule) + "stats" // pingURL is not used in windows, the value is added to avoid compilation error in windows - pingURL = "http://localhost:3333/" + string(sysconfig.PingModule) + "/ping/" + pingURL = "http://localhost:3333/" + string(sysconfig.PingModule) + "/ping/" + telemetryURL = "http://localhost:3333/telemetry" // SystemProbePipeName is the production named pipe for system probe SystemProbePipeName = `\\.\pipe\dd_system_probe` diff --git a/pkg/process/net/mocks/sys_probe_util.go b/pkg/process/net/mocks/sys_probe_util.go index 0d0af5300fa4f..c4a1bc3492645 100644 --- a/pkg/process/net/mocks/sys_probe_util.go +++ b/pkg/process/net/mocks/sys_probe_util.go @@ -131,6 +131,36 @@ func (_m *SysProbeUtil) GetStats() (map[string]interface{}, error) { return r0, r1 } +// GetTelemetry provides a mock function with given fields: +func (_m *SysProbeUtil) GetTelemetry() ([]byte, error) { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetTelemetry") + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func() ([]byte, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // Register provides a mock function with given fields: clientID func (_m *SysProbeUtil) Register(clientID string) error { ret := _m.Called(clientID) diff --git a/pkg/process/net/shared.go b/pkg/process/net/shared.go index a0a7aa18ae327..b54f7ab7087e7 100644 --- a/pkg/process/net/shared.go +++ b/pkg/process/net/shared.go @@ -14,4 +14,5 @@ type SysProbeUtil interface { GetProcStats(pids []int32) (*model.ProcStatsWithPermByPID, error) Register(clientID string) error GetNetworkID() (string, error) + GetTelemetry() ([]byte, error) } diff --git a/pkg/util/fxutil/group.go b/pkg/util/fxutil/group.go index 829899a09947b..fb134df4db690 100644 --- a/pkg/util/fxutil/group.go +++ b/pkg/util/fxutil/group.go @@ -12,7 +12,7 @@ import ( // GetAndFilterGroup filters 'zero' values from an FX group. // -// A 'zero' value, nil in most cases, can be injected into a group whem a component declares returning a element for +// A 'zero' value, nil in most cases, can be injected into a group when a component declares returning a element for // that group but don't actually creates the element. This is common pattern with component that can be disabled or // partially enabled. // diff --git a/releasenotes/notes/system-probe-flare-telemetry-c47f54b8a2842acf.yaml b/releasenotes/notes/system-probe-flare-telemetry-c47f54b8a2842acf.yaml new file mode 100644 index 0000000000000..307bd18391737 --- /dev/null +++ b/releasenotes/notes/system-probe-flare-telemetry-c47f54b8a2842acf.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Agent flare now includes system-probe telemetry data via ``system-probe/system_probe_telemetry.log``. From 63639c4059e697daba8974865784d5f4169b850b Mon Sep 17 00:00:00 2001 From: maxime mouial Date: Wed, 9 Oct 2024 18:48:41 +0200 Subject: [PATCH 07/17] Migrate packages defining default paths to a common implementation (#29043) --- cmd/agent/common/common.go | 8 ++-- cmd/agent/common/common_windows.go | 10 ++-- cmd/agent/common/loader.go | 4 +- cmd/agent/common/path/path_darwin.go | 45 ------------------ cmd/agent/common/path/path_freebsd.go | 45 ------------------ cmd/agent/common/path/path_nix.go | 47 ------------------- cmd/agent/common/test_helpers.go | 4 +- cmd/agent/subcommands/flare/command.go | 19 ++++---- cmd/agent/subcommands/jmx/command.go | 4 +- cmd/agent/subcommands/jmx/command_test.go | 4 +- cmd/agent/subcommands/run/command.go | 16 +++---- cmd/agent/subcommands/run/command_windows.go | 4 +- .../subcommands/run/command.go | 4 +- cmd/cluster-agent/api/agent/agent.go | 6 +-- .../subcommands/start/command.go | 4 +- cmd/security-agent/command/command.go | 8 ++-- cmd/security-agent/main_windows.go | 8 ++-- cmd/serverless/dependencies_linux_amd64.txt | 2 +- cmd/serverless/dependencies_linux_arm64.txt | 2 +- cmd/systray/command/command.go | 17 ++++--- .../jmxlogger/jmxloggerimpl/jmxlogger.go | 4 +- comp/api/authtoken/go.mod | 11 +++-- comp/core/config/go.mod | 12 ++--- comp/core/config/params_test.go | 4 +- comp/core/gui/guiimpl/agent.go | 5 +- comp/core/gui/guiimpl/checks.go | 14 +++--- comp/core/log/impl-trace/go.mod | 10 ++-- comp/core/log/impl/go.mod | 10 ++-- comp/core/status/statusimpl/go.mod | 10 ++-- .../serverDebug/serverdebugimpl/debug.go | 4 +- comp/forwarder/defaultforwarder/go.mod | 10 ++-- .../orchestrator/orchestratorinterface/go.mod | 10 ++-- comp/logs/agent/config/go.mod | 10 ++-- comp/otelcol/converter/impl/go.mod | 10 ++-- comp/otelcol/ddflareextension/impl/go.mod | 10 ++-- comp/otelcol/logsagentpipeline/go.mod | 10 ++-- .../logsagentpipelineimpl/go.mod | 10 ++-- .../exporter/datadogexporter/go.mod | 10 ++-- .../exporter/logsagentexporter/go.mod | 8 ++-- .../exporter/serializerexporter/go.mod | 10 ++-- comp/serializer/compression/go.mod | 10 ++-- go.mod | 12 ++--- pkg/api/go.mod | 10 ++-- pkg/cli/subcommands/check/command.go | 6 +-- pkg/cli/subcommands/dcaflare/command.go | 6 +-- pkg/jmxfetch/jmxfetch.go | 4 +- pkg/logs/auditor/go.mod | 8 ++-- pkg/logs/client/go.mod | 8 ++-- pkg/logs/diagnostic/go.mod | 8 ++-- pkg/logs/message/go.mod | 8 ++-- pkg/logs/pipeline/go.mod | 8 ++-- pkg/logs/processor/go.mod | 8 ++-- pkg/logs/sds/go.mod | 8 ++-- pkg/logs/sender/go.mod | 8 ++-- pkg/logs/sources/go.mod | 8 ++-- pkg/logs/util/testutils/go.mod | 8 ++-- pkg/serializer/go.mod | 10 ++-- .../path => pkg/util/defaultpaths}/docs.go | 4 +- .../path => pkg/util/defaultpaths}/go.mod | 10 ++-- .../path => pkg/util/defaultpaths}/go.sum | 0 pkg/util/defaultpaths/path_darwin.go | 45 ++++++++++++++++++ pkg/util/defaultpaths/path_freebsd.go | 45 ++++++++++++++++++ pkg/util/defaultpaths/path_nix.go | 47 +++++++++++++++++++ .../util/defaultpaths}/path_windows.go | 44 ++++++++--------- tasks/modules.py | 2 +- tasks/unit_tests/modules_tests.py | 4 +- test/otel/go.mod | 10 ++-- 67 files changed, 395 insertions(+), 397 deletions(-) delete mode 100644 cmd/agent/common/path/path_darwin.go delete mode 100644 cmd/agent/common/path/path_freebsd.go delete mode 100644 cmd/agent/common/path/path_nix.go rename {cmd/agent/common/path => pkg/util/defaultpaths}/docs.go (70%) rename {cmd/agent/common/path => pkg/util/defaultpaths}/go.mod (72%) rename {cmd/agent/common/path => pkg/util/defaultpaths}/go.sum (100%) create mode 100644 pkg/util/defaultpaths/path_darwin.go create mode 100644 pkg/util/defaultpaths/path_freebsd.go create mode 100644 pkg/util/defaultpaths/path_nix.go rename {cmd/agent/common/path => pkg/util/defaultpaths}/path_windows.go (51%) diff --git a/cmd/agent/common/common.go b/cmd/agent/common/common.go index 272fed027007f..285cb3a8b5c95 100644 --- a/cmd/agent/common/common.go +++ b/cmd/agent/common/common.go @@ -13,11 +13,11 @@ import ( "net/http" "path/filepath" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config/settings" settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -26,9 +26,9 @@ import ( func GetPythonPaths() []string { // wheels install in default site - already in sys.path; takes precedence over any additional location return []string{ - path.GetDistPath(), // common modules are shipped in the dist path directly or under the "checks/" sub-dir - path.PyChecksPath, // integrations-core legacy checks - filepath.Join(path.GetDistPath(), "checks.d"), // custom checks in the "checks.d/" sub-dir of the dist path + defaultpaths.GetDistPath(), // common modules are shipped in the dist path directly or under the "checks/" sub-dir + defaultpaths.PyChecksPath, // integrations-core legacy checks + filepath.Join(defaultpaths.GetDistPath(), "checks.d"), // custom checks in the "checks.d/" sub-dir of the dist path pkgconfigsetup.Datadog().GetString("additional_checksd"), // custom checks, least precedent check location } } diff --git a/cmd/agent/common/common_windows.go b/cmd/agent/common/common_windows.go index 9bcf4cf48b75a..852d4d77d5ccd 100644 --- a/cmd/agent/common/common_windows.go +++ b/cmd/agent/common/common_windows.go @@ -9,8 +9,8 @@ import ( "os" "path/filepath" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil" "github.com/DataDog/datadog-agent/pkg/util/winutil/messagestrings" @@ -24,7 +24,7 @@ const ServiceName = "DatadogAgent" func init() { _, err := winutil.GetProgramDataDir() if err != nil { - winutil.LogEventViewer(ServiceName, messagestrings.MSG_WARNING_PROGRAMDATA_ERROR, path.DefaultConfPath) + winutil.LogEventViewer(ServiceName, messagestrings.MSG_WARNING_PROGRAMDATA_ERROR, defaultpaths.ConfPath) } } @@ -43,12 +43,12 @@ func EnableLoggingToFile() { // CheckAndUpgradeConfig checks to see if there's an old datadog.conf, and if // datadog.yaml is either missing or incomplete (no API key). If so, upgrade it func CheckAndUpgradeConfig() error { - datadogConfPath := filepath.Join(path.DefaultConfPath, "datadog.conf") + datadogConfPath := filepath.Join(defaultpaths.ConfPath, "datadog.conf") if _, err := os.Stat(datadogConfPath); os.IsNotExist(err) { log.Debug("Previous config file not found, not upgrading") return nil } - pkgconfigsetup.Datadog().AddConfigPath(path.DefaultConfPath) + pkgconfigsetup.Datadog().AddConfigPath(defaultpaths.ConfPath) _, err := pkgconfigsetup.LoadWithoutSecret(pkgconfigsetup.Datadog(), nil) if err == nil { // was able to read config, check for api key @@ -57,7 +57,7 @@ func CheckAndUpgradeConfig() error { return nil } } - err = ImportConfig(path.DefaultConfPath, path.DefaultConfPath, false) + err = ImportConfig(defaultpaths.ConfPath, defaultpaths.ConfPath, false) if err != nil { winutil.LogEventViewer(ServiceName, messagestrings.MSG_WARN_CONFIGUPGRADE_FAILED, err.Error()) return err diff --git a/cmd/agent/common/loader.go b/cmd/agent/common/loader.go index 57ae37a8356c4..890d7f7d422ee 100644 --- a/cmd/agent/common/loader.go +++ b/cmd/agent/common/loader.go @@ -10,12 +10,12 @@ import ( "fmt" "path/filepath" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/core/autodiscovery" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/secrets" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" "github.com/DataDog/datadog-agent/pkg/sbom/scanner" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/optional" ) @@ -41,7 +41,7 @@ func GetWorkloadmetaInit() workloadmeta.InitHelper { func LoadComponents(_ secrets.Component, wmeta workloadmeta.Component, ac autodiscovery.Component, confdPath string) { confSearchPaths := []string{ confdPath, - filepath.Join(path.GetDistPath(), "conf.d"), + filepath.Join(defaultpaths.GetDistPath(), "conf.d"), "", } diff --git a/cmd/agent/common/path/path_darwin.go b/cmd/agent/common/path/path_darwin.go deleted file mode 100644 index 950a127fce90d..0000000000000 --- a/cmd/agent/common/path/path_darwin.go +++ /dev/null @@ -1,45 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package path - -import ( - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/util/executable" -) - -const ( - // DefaultConfPath points to the folder containing datadog.yaml - DefaultConfPath = "/opt/datadog-agent/etc" - // DefaultLogFile points to the log file that will be used if not configured - DefaultLogFile = "/opt/datadog-agent/logs/agent.log" - // DefaultDCALogFile points to the log file that will be used if not configured - DefaultDCALogFile = "/opt/datadog-agent/logs/cluster-agent.log" - //DefaultJmxLogFile points to the jmx fetch log file that will be used if not configured - DefaultJmxLogFile = "/opt/datadog-agent/logs/jmxfetch.log" - // DefaultCheckFlareDirectory a flare friendly location for checks to be written - DefaultCheckFlareDirectory = "/opt/datadog-agent/logs/checks/" - // DefaultJMXFlareDirectory a flare friendly location for jmx command logs to be written - DefaultJMXFlareDirectory = "/opt/datadog-agent/logs/jmxinfo/" - //DefaultDogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured - DefaultDogstatsDLogFile = "/opt/datadog-agent/logs/dogstatsd_info/dogstatsd-stats.log" - //DefaultStreamlogsLogFile points to the stream logs log file that will be used if not configured - DefaultStreamlogsLogFile = "/opt/datadog-agent/logs/streamlogs_info/streamlogs.log" -) - -var ( - _here, _ = executable.Folder() - - // PyChecksPath holds the path to the python checks from integrations-core shipped with the agent - PyChecksPath = filepath.Join(_here, "..", "..", "checks.d") - // DistPath holds the path to the folder containing distribution files - distPath = filepath.Join(_here, "dist") -) - -// GetDistPath returns the fully qualified path to the 'dist' directory -func GetDistPath() string { - return distPath -} diff --git a/cmd/agent/common/path/path_freebsd.go b/cmd/agent/common/path/path_freebsd.go deleted file mode 100644 index 3885684a6be81..0000000000000 --- a/cmd/agent/common/path/path_freebsd.go +++ /dev/null @@ -1,45 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package path - -import ( - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/util/executable" -) - -const ( - // DefaultConfPath points to the folder containing datadog.yaml - DefaultConfPath = "/usr/local/etc/datadog-agent" - // DefaultLogFile points to the log file that will be used if not configured - DefaultLogFile = "/var/log/datadog/agent.log" - // DefaultDCALogFile points to the log file that will be used if not configured - DefaultDCALogFile = "/var/log/datadog/cluster-agent.log" - //DefaultJmxLogFile points to the jmx fetch log file that will be used if not configured - DefaultJmxLogFile = "/var/log/datadog/jmxfetch.log" - // DefaultCheckFlareDirectory a flare friendly location for checks to be written - DefaultCheckFlareDirectory = "/var/log/datadog/checks/" - // DefaultJMXFlareDirectory a flare friendly location for jmx command logs to be written - DefaultJMXFlareDirectory = "/var/log/datadog/jmxinfo/" - //DefaultDogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured - DefaultDogstatsDLogFile = "/var/log/datadog/dogstatsd_info/dogstatsd-stats.log" - //DefaultStreamlogsLogFile points to the stream logs log file that will be used if not configured - DefaultStreamlogsLogFile = "/var/log/datadog/streamlogs_info/streamlogs.log" -) - -var ( - // utility variables - _here, _ = executable.Folder() - // PyChecksPath holds the path to the python checks from integrations-core shipped with the agent - PyChecksPath = filepath.Join(_here, "..", "..", "checks.d") - // DistPath holds the path to the folder containing distribution files - distPath = filepath.Join(_here, "dist") -) - -// GetDistPath returns the fully qualified path to the 'dist' directory -func GetDistPath() string { - return distPath -} diff --git a/cmd/agent/common/path/path_nix.go b/cmd/agent/common/path/path_nix.go deleted file mode 100644 index 479063de13487..0000000000000 --- a/cmd/agent/common/path/path_nix.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build netbsd || openbsd || solaris || dragonfly || linux - -package path - -import ( - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/util/executable" -) - -const ( - // DefaultConfPath points to the folder containing datadog.yaml - DefaultConfPath = "/etc/datadog-agent" - // DefaultLogFile points to the log file that will be used if not configured - DefaultLogFile = "/var/log/datadog/agent.log" - // DefaultDCALogFile points to the log file that will be used if not configured - DefaultDCALogFile = "/var/log/datadog/cluster-agent.log" - // DefaultJmxLogFile points to the jmx fetch log file that will be used if not configured - DefaultJmxLogFile = "/var/log/datadog/jmxfetch.log" - // DefaultCheckFlareDirectory a flare friendly location for checks to be written - DefaultCheckFlareDirectory = "/var/log/datadog/checks/" - // DefaultJMXFlareDirectory a flare friendly location for jmx command logs to be written - DefaultJMXFlareDirectory = "/var/log/datadog/jmxinfo/" - //DefaultDogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured - DefaultDogstatsDLogFile = "/var/log/datadog/dogstatsd_info/dogstatsd-stats.log" - //DefaultStreamlogsLogFile points to the stream logs log file that will be used if not configured - DefaultStreamlogsLogFile = "/var/log/datadog/streamlogs_info/streamlogs.log" -) - -var ( - // utility variables - _here, _ = executable.Folder() - // PyChecksPath holds the path to the python checks from integrations-core shipped with the agent - PyChecksPath = filepath.Join(_here, "..", "..", "checks.d") - // DistPath holds the path to the folder containing distribution files - distPath = filepath.Join(_here, "dist") -) - -// GetDistPath returns the fully qualified path to the 'dist' directory -func GetDistPath() string { - return distPath -} diff --git a/cmd/agent/common/test_helpers.go b/cmd/agent/common/test_helpers.go index aca2815135a43..2c94cc7bd32c1 100644 --- a/cmd/agent/common/test_helpers.go +++ b/cmd/agent/common/test_helpers.go @@ -14,10 +14,10 @@ import ( "runtime" "strings" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/core/secrets" "github.com/DataDog/datadog-agent/pkg/config/model" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/optional" ) @@ -35,7 +35,7 @@ func SetupConfigForTest(confFilePath string) (*model.Warnings, error) { cfg.SetConfigFile(confFilePath) } } - cfg.AddConfigPath(path.DefaultConfPath) + cfg.AddConfigPath(defaultpaths.ConfPath) // load the configuration warnings, err := pkgconfigsetup.LoadDatadogCustom(cfg, origin, optional.NewNoneOption[secrets.Component](), nil) if err != nil { diff --git a/cmd/agent/subcommands/flare/command.go b/cmd/agent/subcommands/flare/command.go index c39613e753945..8c159e673cacd 100644 --- a/cmd/agent/subcommands/flare/command.go +++ b/cmd/agent/subcommands/flare/command.go @@ -23,8 +23,6 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/agent/subcommands/streamlogs" - - commonpath "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/aggregator/diagnosesendermanager/diagnosesendermanagerimpl" authtokenimpl "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/collector/collector" @@ -53,6 +51,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/input" "github.com/DataDog/datadog-agent/pkg/util/optional" @@ -92,7 +91,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams.args = args config := config.NewAgentParams(globalParams.ConfFilePath, config.WithSecurityAgentConfigFilePaths([]string{ - path.Join(commonpath.DefaultConfPath, "security-agent.yaml"), + path.Join(defaultpaths.ConfPath, "security-agent.yaml"), }), config.WithConfigLoadSecurityAgent(true), config.WithIgnoreErrors(true), @@ -109,12 +108,12 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { LogParams: log.ForOneShot(command.LoggerName, "off", false), }), flare.Module(flare.NewLocalParams( - commonpath.GetDistPath(), - commonpath.PyChecksPath, - commonpath.DefaultLogFile, - commonpath.DefaultJmxLogFile, - commonpath.DefaultDogstatsDLogFile, - commonpath.DefaultStreamlogsLogFile, + defaultpaths.GetDistPath(), + defaultpaths.PyChecksPath, + defaultpaths.LogFile, + defaultpaths.JmxLogFile, + defaultpaths.DogstatsDLogFile, + defaultpaths.StreamlogsLogFile, )), // workloadmeta setup wmcatalog.GetCatalog(), @@ -285,7 +284,7 @@ func makeFlare(flareComp flare.Component, ) streamLogParams := streamlogs.CliParams{ - FilePath: commonpath.DefaultStreamlogsLogFile, + FilePath: defaultpaths.StreamlogsLogFile, Duration: cliParams.withStreamLogs, Quiet: true, } diff --git a/cmd/agent/subcommands/jmx/command.go b/cmd/agent/subcommands/jmx/command.go index b827558dbdb73..b56915eb1b406 100644 --- a/cmd/agent/subcommands/jmx/command.go +++ b/cmd/agent/subcommands/jmx/command.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/agent" "github.com/DataDog/datadog-agent/comp/agent/jmxlogger" "github.com/DataDog/datadog-agent/comp/agent/jmxlogger/jmxloggerimpl" @@ -59,6 +58,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/cli/standalone" pkgcollector "github.com/DataDog/datadog-agent/pkg/collector" "github.com/DataDog/datadog-agent/pkg/config/model" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" ) @@ -107,7 +107,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { if cliParams.saveFlare { // Windows cannot accept ":" in file names filenameSafeTimeStamp := strings.ReplaceAll(time.Now().UTC().Format(time.RFC3339), ":", "-") - cliParams.logFile = filepath.Join(path.DefaultJMXFlareDirectory, "jmx_"+cliParams.command+"_"+filenameSafeTimeStamp+".log") + cliParams.logFile = filepath.Join(defaultpaths.JMXFlareDirectory, "jmx_"+cliParams.command+"_"+filenameSafeTimeStamp+".log") cliParams.jmxLogLevel = "debug" } diff --git a/cmd/agent/subcommands/jmx/command_test.go b/cmd/agent/subcommands/jmx/command_test.go index 8bc173ac46037..bd162de9cc1bd 100644 --- a/cmd/agent/subcommands/jmx/command_test.go +++ b/cmd/agent/subcommands/jmx/command_test.go @@ -14,9 +14,9 @@ import ( "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/cmd/agent/command" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/secrets" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) @@ -64,7 +64,7 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "collect", cliParams.command) require.Equal(t, "debug", cliParams.jmxLogLevel) // overrides --log-level require.Equal(t, "debug", coreParams.LogLevelFn(nil)) // overrides --log-level - require.True(t, strings.HasPrefix(cliParams.logFile, path.DefaultJMXFlareDirectory)) + require.True(t, strings.HasPrefix(cliParams.logFile, defaultpaths.JMXFlareDirectory)) require.Equal(t, cliParams.logFile, coreParams.LogFileFn(nil)) require.Equal(t, "CORE", coreParams.LoggerName()) require.Equal(t, true, secretParams.Enabled) diff --git a/cmd/agent/subcommands/run/command.go b/cmd/agent/subcommands/run/command.go index 4a349c58e4017..c1cf43618fe79 100644 --- a/cmd/agent/subcommands/run/command.go +++ b/cmd/agent/subcommands/run/command.go @@ -25,7 +25,6 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/agent/common/misconfig" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/cmd/agent/common/signals" "github.com/DataDog/datadog-agent/cmd/agent/subcommands/run/internal/clcrunnerapi" internalsettings "github.com/DataDog/datadog-agent/cmd/agent/subcommands/run/internal/settings" @@ -146,6 +145,7 @@ import ( pkgTelemetry "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util" pkgcommon "github.com/DataDog/datadog-agent/pkg/util/common" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/fxutil/logging" @@ -183,7 +183,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { ConfigParams: config.NewAgentParams(globalParams.ConfFilePath, config.WithExtraConfFiles(cliParams.ExtraConfFilePath), config.WithFleetPoliciesDirPath(cliParams.FleetPoliciesDirPath)), SecretParams: secrets.NewEnabledParams(), SysprobeConfigParams: sysprobeconfigimpl.NewParams(sysprobeconfigimpl.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath), sysprobeconfigimpl.WithFleetPoliciesDirPath(cliParams.FleetPoliciesDirPath)), - LogParams: log.ForDaemon(command.LoggerName, "log_file", path.DefaultLogFile), + LogParams: log.ForDaemon(command.LoggerName, "log_file", defaultpaths.LogFile), }), fx.Supply(pidimpl.NewParams(cliParams.pidfilePath)), logging.EnableFxLoggingOnDebug[log.Component](), @@ -331,12 +331,12 @@ func run(log log.Component, func getSharedFxOption() fx.Option { return fx.Options( flare.Module(flare.NewParams( - path.GetDistPath(), - path.PyChecksPath, - path.DefaultLogFile, - path.DefaultJmxLogFile, - path.DefaultDogstatsDLogFile, - path.DefaultStreamlogsLogFile, + defaultpaths.GetDistPath(), + defaultpaths.PyChecksPath, + defaultpaths.LogFile, + defaultpaths.JmxLogFile, + defaultpaths.DogstatsDLogFile, + defaultpaths.StreamlogsLogFile, )), core.Bundle(), lsof.Module(), diff --git a/cmd/agent/subcommands/run/command_windows.go b/cmd/agent/subcommands/run/command_windows.go index fc3a05bec3adf..e4bb454a1f182 100644 --- a/cmd/agent/subcommands/run/command_windows.go +++ b/cmd/agent/subcommands/run/command_windows.go @@ -28,7 +28,6 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/cmd/agent/command" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/cmd/agent/common/signals" // checks implemented as components @@ -74,6 +73,7 @@ import ( processAgent "github.com/DataDog/datadog-agent/comp/process/agent" "github.com/DataDog/datadog-agent/comp/remote-config/rcclient" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" // runtime init routines @@ -186,7 +186,7 @@ func StartAgentWithDefaults(ctxChan <-chan context.Context) (<-chan error, error ConfigParams: config.NewAgentParams(""), SecretParams: secrets.NewEnabledParams(), SysprobeConfigParams: sysprobeconfigimpl.NewParams(), - LogParams: log.ForDaemon(command.LoggerName, "log_file", path.DefaultLogFile), + LogParams: log.ForDaemon(command.LoggerName, "log_file", defaultpaths.LogFile), }), getSharedFxOption(), getPlatformModules(), diff --git a/cmd/cluster-agent-cloudfoundry/subcommands/run/command.go b/cmd/cluster-agent-cloudfoundry/subcommands/run/command.go index 4a691db8a2b03..aac5d3639a948 100644 --- a/cmd/cluster-agent-cloudfoundry/subcommands/run/command.go +++ b/cmd/cluster-agent-cloudfoundry/subcommands/run/command.go @@ -21,7 +21,6 @@ import ( "github.com/spf13/cobra" "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/cmd/cluster-agent-cloudfoundry/command" "github.com/DataDog/datadog-agent/cmd/cluster-agent/api" dcav1 "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1" @@ -59,6 +58,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/cloudfoundry" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" @@ -80,7 +80,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { fx.Supply(core.BundleParams{ ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath), SecretParams: secrets.NewEnabledParams(), - LogParams: log.ForDaemon(command.LoggerName, "log_file", path.DefaultDCALogFile), + LogParams: log.ForDaemon(command.LoggerName, "log_file", defaultpaths.DCALogFile), }), core.Bundle(), forwarder.Bundle(defaultforwarder.NewParams(defaultforwarder.WithResolvers())), diff --git a/cmd/cluster-agent/api/agent/agent.go b/cmd/cluster-agent/api/agent/agent.go index 86a536d77cb20..d5d3ded9ebdb3 100644 --- a/cmd/cluster-agent/api/agent/agent.go +++ b/cmd/cluster-agent/api/agent/agent.go @@ -15,7 +15,6 @@ import ( "github.com/gorilla/mux" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/cmd/agent/common/signals" "github.com/DataDog/datadog-agent/comp/core/autodiscovery" "github.com/DataDog/datadog-agent/comp/core/settings" @@ -25,6 +24,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/status/health" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/hostname" httputils "github.com/DataDog/datadog-agent/pkg/util/http" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -146,9 +146,9 @@ func makeFlare(w http.ResponseWriter, r *http.Request, statusComponent status.Co logFile := pkgconfigsetup.Datadog().GetString("log_file") if logFile == "" { - logFile = path.DefaultDCALogFile + logFile = defaultpaths.DCALogFile } - filePath, err := flare.CreateDCAArchive(false, path.GetDistPath(), logFile, profile, statusComponent) + filePath, err := flare.CreateDCAArchive(false, defaultpaths.GetDistPath(), logFile, profile, statusComponent) if err != nil || filePath == "" { if err != nil { log.Errorf("The flare failed to be created: %s", err) diff --git a/cmd/cluster-agent/subcommands/start/command.go b/cmd/cluster-agent/subcommands/start/command.go index a471d986d2bdc..37b1305a9ec9d 100644 --- a/cmd/cluster-agent/subcommands/start/command.go +++ b/cmd/cluster-agent/subcommands/start/command.go @@ -21,11 +21,11 @@ import ( "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/controllers" "github.com/DataDog/datadog-agent/pkg/util/optional" "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" admissioncmd "github.com/DataDog/datadog-agent/cmd/cluster-agent/admission" "github.com/DataDog/datadog-agent/cmd/cluster-agent/api" dcav1 "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1" @@ -132,7 +132,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { fx.Supply(core.BundleParams{ ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath), SecretParams: secrets.NewEnabledParams(), - LogParams: log.ForDaemon(command.LoggerName, "log_file", path.DefaultDCALogFile), + LogParams: log.ForDaemon(command.LoggerName, "log_file", defaultpaths.DCALogFile), }), core.Bundle(), forwarder.Bundle(defaultforwarder.NewParams(defaultforwarder.WithResolvers(), defaultforwarder.WithDisableAPIKeyChecking())), diff --git a/cmd/security-agent/command/command.go b/cmd/security-agent/command/command.go index 216fd7682307b..23639e147fb20 100644 --- a/cmd/security-agent/command/command.go +++ b/cmd/security-agent/command/command.go @@ -13,7 +13,7 @@ import ( "github.com/fatih/color" "github.com/spf13/cobra" - commonpath "github.com/DataDog/datadog-agent/cmd/agent/common/path" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" ) // GlobalParams contains the values of agent-global Cobra flags. @@ -37,11 +37,11 @@ const LoggerName = "SECURITY" var ( defaultSecurityAgentConfigFilePaths = []string{ - path.Join(commonpath.DefaultConfPath, "datadog.yaml"), - path.Join(commonpath.DefaultConfPath, "security-agent.yaml"), + path.Join(defaultpaths.ConfPath, "datadog.yaml"), + path.Join(defaultpaths.ConfPath, "security-agent.yaml"), } - defaultSysProbeConfPath = path.Join(commonpath.DefaultConfPath, "system-probe.yaml") + defaultSysProbeConfPath = path.Join(defaultpaths.ConfPath, "system-probe.yaml") ) // MakeCommand makes the top-level Cobra command for this command. diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go index 2a1563f34f160..d2e6ab66b4441 100644 --- a/cmd/security-agent/main_windows.go +++ b/cmd/security-agent/main_windows.go @@ -15,7 +15,6 @@ import ( "go.uber.org/fx" - commonpath "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/cmd/internal/runcmd" "github.com/DataDog/datadog-agent/cmd/security-agent/command" saconfig "github.com/DataDog/datadog-agent/cmd/security-agent/config" @@ -51,6 +50,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/security/utils" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" "github.com/DataDog/datadog-agent/pkg/util/startstop" @@ -63,10 +63,10 @@ type service struct { var ( defaultSecurityAgentConfigFilePaths = []string{ - path.Join(commonpath.DefaultConfPath, "datadog.yaml"), - path.Join(commonpath.DefaultConfPath, "security-agent.yaml"), + path.Join(defaultpaths.ConfPath, "datadog.yaml"), + path.Join(defaultpaths.ConfPath, "security-agent.yaml"), } - defaultSysProbeConfPath = path.Join(commonpath.DefaultConfPath, "system-probe.yaml") + defaultSysProbeConfPath = path.Join(defaultpaths.ConfPath, "system-probe.yaml") ) // Name returns the service name diff --git a/cmd/serverless/dependencies_linux_amd64.txt b/cmd/serverless/dependencies_linux_amd64.txt index 74c53eee7a5fa..90772c5f91fa6 100644 --- a/cmd/serverless/dependencies_linux_amd64.txt +++ b/cmd/serverless/dependencies_linux_amd64.txt @@ -62,7 +62,6 @@ github.com/DataDog/appsec-internal-go/httpsec github.com/DataDog/appsec-internal-go/limiter github.com/DataDog/appsec-internal-go/log github.com/DataDog/appsec-internal-go/netip -github.com/DataDog/datadog-agent/cmd/agent/common/path github.com/DataDog/datadog-agent/cmd/serverless-init/cloudservice github.com/DataDog/datadog-agent/cmd/serverless-init/cloudservice/helper github.com/DataDog/datadog-agent/comp/api/api/def @@ -266,6 +265,7 @@ github.com/DataDog/datadog-agent/pkg/util/common github.com/DataDog/datadog-agent/pkg/util/containers github.com/DataDog/datadog-agent/pkg/util/containers/image github.com/DataDog/datadog-agent/pkg/util/containers/metrics/provider +github.com/DataDog/datadog-agent/pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/dmi github.com/DataDog/datadog-agent/pkg/util/docker github.com/DataDog/datadog-agent/pkg/util/ec2 diff --git a/cmd/serverless/dependencies_linux_arm64.txt b/cmd/serverless/dependencies_linux_arm64.txt index 7514fcaf47b30..6734f6d29fec8 100644 --- a/cmd/serverless/dependencies_linux_arm64.txt +++ b/cmd/serverless/dependencies_linux_arm64.txt @@ -62,7 +62,6 @@ github.com/DataDog/appsec-internal-go/httpsec github.com/DataDog/appsec-internal-go/limiter github.com/DataDog/appsec-internal-go/log github.com/DataDog/appsec-internal-go/netip -github.com/DataDog/datadog-agent/cmd/agent/common/path github.com/DataDog/datadog-agent/cmd/serverless-init/cloudservice github.com/DataDog/datadog-agent/cmd/serverless-init/cloudservice/helper github.com/DataDog/datadog-agent/comp/api/api/def @@ -266,6 +265,7 @@ github.com/DataDog/datadog-agent/pkg/util/common github.com/DataDog/datadog-agent/pkg/util/containers github.com/DataDog/datadog-agent/pkg/util/containers/image github.com/DataDog/datadog-agent/pkg/util/containers/metrics/provider +github.com/DataDog/datadog-agent/pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/dmi github.com/DataDog/datadog-agent/pkg/util/docker github.com/DataDog/datadog-agent/pkg/util/ec2 diff --git a/cmd/systray/command/command.go b/cmd/systray/command/command.go index cd421597483e1..c237b0aa65bb3 100644 --- a/cmd/systray/command/command.go +++ b/cmd/systray/command/command.go @@ -14,11 +14,9 @@ import ( "strings" "github.com/spf13/cobra" - "go.uber.org/fx" "golang.org/x/sys/windows" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/aggregator/diagnosesendermanager/diagnosesendermanagerimpl" authtokenimpl "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/collector/collector" @@ -33,6 +31,7 @@ import ( "github.com/DataDog/datadog-agent/comp/systray/systray" "github.com/DataDog/datadog-agent/comp/systray/systray/systrayimpl" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" "github.com/DataDog/datadog-agent/pkg/util/winutil" @@ -93,18 +92,18 @@ func MakeCommand() *cobra.Command { return fxutil.Run( // core fx.Supply(core.BundleParams{ - ConfigParams: config.NewParams(path.DefaultConfPath), + ConfigParams: config.NewParams(defaultpaths.ConfPath), LogParams: logParams, }), core.Bundle(), // flare flare.Module(flare.NewParams( - path.GetDistPath(), - path.PyChecksPath, - path.DefaultLogFile, - path.DefaultJmxLogFile, - path.DefaultDogstatsDLogFile, - path.DefaultStreamlogsLogFile, + defaultpaths.GetDistPath(), + defaultpaths.PyChecksPath, + defaultpaths.LogFile, + defaultpaths.JmxLogFile, + defaultpaths.DogstatsDLogFile, + defaultpaths.StreamlogsLogFile, )), fx.Supply(optional.NewNoneOption[autodiscovery.Component]()), fx.Supply(optional.NewNoneOption[workloadmeta.Component]()), diff --git a/comp/agent/jmxlogger/jmxloggerimpl/jmxlogger.go b/comp/agent/jmxlogger/jmxloggerimpl/jmxlogger.go index 9b0824b8fad41..27cd8485147fa 100644 --- a/comp/agent/jmxlogger/jmxloggerimpl/jmxlogger.go +++ b/comp/agent/jmxlogger/jmxloggerimpl/jmxlogger.go @@ -11,10 +11,10 @@ import ( "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/agent/jmxlogger" "github.com/DataDog/datadog-agent/comp/core/config" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" @@ -53,7 +53,7 @@ func newJMXLogger(deps dependencies) (jmxlogger.Component, error) { syslogURI := pkglogsetup.GetSyslogURI(pkgconfigsetup.Datadog()) jmxLogFile := config.GetString("jmx_log_file") if jmxLogFile == "" { - jmxLogFile = path.DefaultJmxLogFile + jmxLogFile = defaultpaths.JmxLogFile } if config.GetBool("disable_file_logging") { diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index 6363331f7262c..2999282aa6d21 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/api/authtoken go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../comp/api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../comp/core/flare/builder @@ -22,6 +21,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/setup => ../../../pkg/config/setup github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/config/utils => ../../../pkg/config/utils + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../pkg/util/fxutil @@ -36,6 +36,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/testutil => ../../../pkg/util/testutil github.com/DataDog/datadog-agent/pkg/util/winutil => ../../../pkg/util/winutil github.com/DataDog/datadog-agent/pkg/version => ../../../pkg/version + ) require ( @@ -62,16 +63,16 @@ require ( github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.58.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index ecb4490838824..b5520c11cb099 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/core/config go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../api/api/def github.com/DataDog/datadog-agent/comp/core/flare/builder => ../flare/builder github.com/DataDog/datadog-agent/comp/core/flare/types => ../flare/types @@ -18,6 +17,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/setup => ../../../pkg/config/setup github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/telemetry => ../../../pkg/telemetry + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../pkg/util/fxutil @@ -33,16 +33,16 @@ replace ( ) require ( - github.com/DataDog/datadog-agent/cmd/agent/common/path v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/core/flare/types v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/core/secrets v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/core/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/mock v0.58.0-devel github.com/DataDog/datadog-agent/pkg/config/model v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/defaultpaths v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 github.com/DataDog/viper v1.13.5 github.com/stretchr/testify v1.9.0 go.uber.org/fx v1.22.2 @@ -56,12 +56,12 @@ require ( github.com/DataDog/datadog-agent/pkg/config/env v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/comp/core/config/params_test.go b/comp/core/config/params_test.go index 0709912824c91..583daffb4e87a 100644 --- a/comp/core/config/params_test.go +++ b/comp/core/config/params_test.go @@ -8,7 +8,7 @@ package config import ( "testing" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -49,7 +49,7 @@ func TestNewSecurityAgentParams(t *testing.T) { configComponentParams := NewSecurityAgentParams(test.input) require.Equal(t, true, configComponentParams.configLoadSecurityAgent, "configLoadSecurityAgent values not matching") - require.Equal(t, path.DefaultConfPath, configComponentParams.defaultConfPath, "defaultConfPath values not matching") + require.Equal(t, defaultpaths.ConfPath, configComponentParams.defaultConfPath, "defaultConfPath values not matching") require.Equal(t, false, configComponentParams.configMissingOK, "configMissingOK values not matching") } } diff --git a/comp/core/gui/guiimpl/agent.go b/comp/core/gui/guiimpl/agent.go index e75b92b66946c..222697759a122 100644 --- a/comp/core/gui/guiimpl/agent.go +++ b/comp/core/gui/guiimpl/agent.go @@ -19,13 +19,12 @@ import ( "github.com/gorilla/mux" yaml "gopkg.in/yaml.v2" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/comp/core/status" - configmodel "github.com/DataDog/datadog-agent/pkg/config/model" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" @@ -111,7 +110,7 @@ func getLog(w http.ResponseWriter, r *http.Request, config configmodel.Reader) { logFile := config.GetString("log_file") if logFile == "" { - logFile = path.DefaultLogFile + logFile = defaultpaths.LogFile } logFileContents, e := os.ReadFile(logFile) diff --git a/comp/core/gui/guiimpl/checks.go b/comp/core/gui/guiimpl/checks.go index f57acb9cbac1d..058a75b08f05c 100644 --- a/comp/core/gui/guiimpl/checks.go +++ b/comp/core/gui/guiimpl/checks.go @@ -21,7 +21,6 @@ import ( "github.com/gorilla/mux" yaml "gopkg.in/yaml.v2" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/collector/collector" "github.com/DataDog/datadog-agent/comp/core/autodiscovery" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -29,19 +28,20 @@ import ( checkstats "github.com/DataDog/datadog-agent/pkg/collector/check/stats" core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/log" ) var ( configPaths = []string{ - pkgconfigsetup.Datadog().GetString("confd_path"), // Custom checks - filepath.Join(path.GetDistPath(), "conf.d"), // Default check configs + pkgconfigsetup.Datadog().GetString("confd_path"), // Custom checks + filepath.Join(defaultpaths.GetDistPath(), "conf.d"), // Default check configs } checkPaths = []string{ - filepath.Join(path.GetDistPath(), "checks.d"), // Custom checks + filepath.Join(defaultpaths.GetDistPath(), "checks.d"), // Custom checks pkgconfigsetup.Datadog().GetString("additional_checksd"), // Custom checks - path.PyChecksPath, // Integrations-core checks + defaultpaths.PyChecksPath, // Integrations-core checks } ) @@ -253,7 +253,7 @@ func setCheckConfigFile(w http.ResponseWriter, r *http.Request) { log.Errorf("Error: Unable to join provided \"confd_path\" setting path with checkFolder: %s", err.Error()) return } - defaultCheckConfFolderPath, err = securejoin.SecureJoin(filepath.Join(path.GetDistPath(), "conf.d"), checkFolder) + defaultCheckConfFolderPath, err = securejoin.SecureJoin(filepath.Join(defaultpaths.GetDistPath(), "conf.d"), checkFolder) if err != nil { http.Error(w, "invalid checkFolder path", http.StatusBadRequest) log.Errorf("Error: Unable to join conf folder path with checkFolder: %s", err.Error()) @@ -261,7 +261,7 @@ func setCheckConfigFile(w http.ResponseWriter, r *http.Request) { } } else { checkConfFolderPath = pkgconfigsetup.Datadog().GetString("confd_path") - defaultCheckConfFolderPath = filepath.Join(path.GetDistPath(), "conf.d") + defaultCheckConfFolderPath = filepath.Join(defaultpaths.GetDistPath(), "conf.d") } if r.Method == "POST" { diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index 83a5ff06f3969..510f2eca02898 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/core/log/impl-trace go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../flare/builder @@ -24,6 +23,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/remoteconfig/state => ../../../../pkg/remoteconfig/state github.com/DataDog/datadog-agent/pkg/telemetry => ../../../../pkg/telemetry github.com/DataDog/datadog-agent/pkg/trace => ../../../../pkg/trace + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem/ github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -45,7 +45,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/env v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect; v2.6 github.com/stretchr/testify v1.9.0 go.uber.org/fx v1.22.2 // indirect @@ -66,15 +66,15 @@ require ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index f7af93efceae3..47007a77d0f94 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/core/log/impl go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../../comp/api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../../comp/core/flare/builder @@ -19,6 +18,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel => ../../../../pkg/config/nodetreemodel github.com/DataDog/datadog-agent/pkg/config/setup => ../../../../pkg/config/setup github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../../pkg/config/teeconfig + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -39,7 +39,7 @@ require ( github.com/DataDog/datadog-agent/comp/core/log/def v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/comp/def v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/mock v0.58.0-devel - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/util/log/setup v0.0.0-00010101000000-000000000000 github.com/stretchr/testify v1.9.0 ) @@ -54,16 +54,16 @@ require ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index 7888225f62762..049706fa2fa1c 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/core/status/statusimpl go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../../comp/core/flare/builder @@ -22,6 +21,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/setup => ../../../../pkg/config/setup github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/telemetry => ../../../../pkg/telemetry + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/flavor => ../../../../pkg/util/flavor @@ -66,17 +66,17 @@ require ( github.com/DataDog/datadog-agent/pkg/config/mock v0.58.0-devel // indirect github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go b/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go index cfc062f825108..90c528919bef1 100644 --- a/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go +++ b/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go @@ -20,7 +20,6 @@ import ( "go.uber.org/atomic" "go.uber.org/fx" - commonpath "github.com/DataDog/datadog-agent/cmd/agent/common/path" configComponent "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logComponentImpl "github.com/DataDog/datadog-agent/comp/core/log/impl" @@ -30,6 +29,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/DataDog/datadog-agent/pkg/tagset" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) @@ -286,7 +286,7 @@ func (d *serverDebugImpl) getDogstatsdDebug(cfg model.Reader) slog.LoggerInterfa // Configuring the log file path logFile := cfg.GetString("dogstatsd_log_file") if logFile == "" { - logFile = commonpath.DefaultDogstatsDLogFile + logFile = defaultpaths.DogstatsDLogFile } // Set up dogstatsdLogger diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index 322e697c6969b..2ef744a994c31 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../core/flare/builder @@ -32,6 +31,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/trace => ../../../pkg/trace github.com/DataDog/datadog-agent/pkg/util/backoff => ../../../pkg/util/backoff github.com/DataDog/datadog-agent/pkg/util/common => ../../../pkg/util/common + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/flavor => ../../../pkg/util/flavor @@ -68,7 +68,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 github.com/golang/protobuf v1.5.3 github.com/hashicorp/go-multierror v1.1.1 @@ -88,14 +88,14 @@ require ( github.com/DataDog/datadog-agent/pkg/config/env v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index 1aba5a59e8179..387c3efd071cc 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/forwarder/orchestrator/orchestrator go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../core/flare/builder @@ -34,6 +33,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/backoff => ../../../../pkg/util/backoff github.com/DataDog/datadog-agent/pkg/util/buf => ../../../../pkg/util/buf github.com/DataDog/datadog-agent/pkg/util/common => ../../../../pkg/util/common + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -85,18 +85,18 @@ require ( github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index fb62f3ed0964a..7a626f1fd4a1c 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/logs/agent/config go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../../comp/core/flare/builder @@ -21,6 +20,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/config/utils => ../../../../pkg/config/utils github.com/DataDog/datadog-agent/pkg/telemetry => ../../../../pkg/telemetry + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -43,7 +43,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/structure v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 github.com/DataDog/viper v1.13.5 github.com/stretchr/testify v1.9.0 @@ -60,14 +60,14 @@ require ( github.com/DataDog/datadog-agent/pkg/config/mock v0.58.0-devel // indirect github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index 3e376db91ca89..11ce8150078db 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/otelcol/converter/impl go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../../comp/api/api/def github.com/DataDog/datadog-agent/comp/api/authtoken => ../../../../comp/api/authtoken github.com/DataDog/datadog-agent/comp/core/config => ../../../../comp/core/config @@ -24,6 +23,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/setup => ../../../../pkg/config/setup github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/config/utils => ../../../../pkg/config/utils + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -66,16 +66,16 @@ require ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/setup v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.2 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.2 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.2 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.2 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 7b7a87dff02ba..60a9a73c8577b 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/impl go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../api/api/def github.com/DataDog/datadog-agent/comp/api/authtoken => ../../../api/authtoken github.com/DataDog/datadog-agent/comp/core/config => ../../../core/config @@ -79,6 +78,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/cgroups => ../../../../pkg/util/cgroups github.com/DataDog/datadog-agent/pkg/util/common => ../../../../pkg/util/common github.com/DataDog/datadog-agent/pkg/util/containers/image => ../../../../pkg/util/containers/image + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -221,24 +221,24 @@ require ( github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.58.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/tagger v0.56.2 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.26.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index 9ec153f229d1d..5cfd5062adfdb 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/otelcol/logsagentpipeline go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../core/flare/builder @@ -40,6 +39,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/status/health => ../../../pkg/status/health github.com/DataDog/datadog-agent/pkg/telemetry => ../../../pkg/telemetry github.com/DataDog/datadog-agent/pkg/util/backoff => ../../../pkg/util/backoff + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../pkg/util/fxutil @@ -90,20 +90,20 @@ require ( github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index 0a941558d1d9e..9e6766aeb3fdb 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/otelcol/logsagentpipeline/logsagent go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../core/flare/builder @@ -41,6 +40,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/status/health => ../../../../pkg/status/health github.com/DataDog/datadog-agent/pkg/telemetry => ../../../../pkg/telemetry github.com/DataDog/datadog-agent/pkg/util/backoff => ../../../../pkg/util/backoff + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../pkg/util/fxutil @@ -107,18 +107,18 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index c8f5278dcceed..188449908fceb 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/da go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../../../core/flare/builder @@ -67,6 +66,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/buf => ../../../../../../pkg/util/buf/ github.com/DataDog/datadog-agent/pkg/util/cgroups => ../../../../../../pkg/util/cgroups/ github.com/DataDog/datadog-agent/pkg/util/common => ../../../../../../pkg/util/common/ + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../../../pkg/util/executable/ github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../../../pkg/util/filesystem/ github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../../../pkg/util/fxutil/ @@ -173,21 +173,21 @@ require ( github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.26.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 73a4a2567e5cb..23de2584987fe 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -47,7 +47,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/testutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.20.0 github.com/stormcat24/protodep v0.1.8 @@ -69,16 +69,16 @@ require ( github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/proto v0.55.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.13.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.20.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 9bd6ba81918c4..7853c785bd358 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/se go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../../../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../../../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../../../../core/flare/builder @@ -41,6 +40,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/backoff => ../../../../../../pkg/util/backoff/ github.com/DataDog/datadog-agent/pkg/util/buf => ../../../../../../pkg/util/buf/ github.com/DataDog/datadog-agent/pkg/util/common => ../../../../../../pkg/util/common/ + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../../../pkg/util/executable/ github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../../../../pkg/util/filesystem/ github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../../../../pkg/util/fxutil/ @@ -66,7 +66,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/serializer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.20.0 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 @@ -118,7 +118,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect @@ -126,11 +126,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.4 // indirect diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index f9cecb310caf8..b32eef1d18b4e 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/comp/serializer/compression go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../core/flare/builder @@ -19,6 +18,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/setup => ../../../pkg/config/setup github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/telemetry => ../../../pkg/telemetry + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../../../pkg/util/fxutil @@ -36,7 +36,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/core/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/zstd v1.5.5 go.uber.org/fx v1.22.2 ) @@ -53,15 +53,15 @@ require ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/go.mod b/go.mod index 122729f142404..e1c930f803c27 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,6 @@ replace ( ) replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ./cmd/agent/common/path/ github.com/DataDog/datadog-agent/comp/api/api/def => ./comp/api/api/def/ github.com/DataDog/datadog-agent/comp/api/authtoken => ./comp/api/authtoken github.com/DataDog/datadog-agent/comp/core/config => ./comp/core/config/ @@ -115,6 +114,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/cgroups => ./pkg/util/cgroups github.com/DataDog/datadog-agent/pkg/util/common => ./pkg/util/common github.com/DataDog/datadog-agent/pkg/util/containers/image => ./pkg/util/containers/image + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ./pkg/util/defaultpaths/ github.com/DataDog/datadog-agent/pkg/util/executable => ./pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ./pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/flavor => ./pkg/util/flavor @@ -152,9 +152,9 @@ require ( github.com/DataDog/datadog-agent/pkg/security/secl v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 github.com/DataDog/datadog-go/v5 v5.5.0 github.com/DataDog/datadog-operator v1.8.0-rc.1 github.com/DataDog/ebpf-manager v0.7.1 @@ -604,6 +604,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/def v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/impl v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/config/structure v0.0.0-00010101000000-000000000000 + github.com/DataDog/datadog-agent/pkg/util/defaultpaths v0.0.0-00010101000000-000000000000 github.com/containerd/containerd/api v1.7.19 github.com/containerd/errdefs v0.1.0 github.com/distribution/reference v0.6.0 @@ -616,7 +617,6 @@ require ( require ( github.com/DATA-DOG/go-sqlmock v1.5.2 github.com/DataDog/agent-payload/v5 v5.0.132 - github.com/DataDog/datadog-agent/cmd/agent/common/path v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/api/api/def v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/core/config v0.56.2 github.com/DataDog/datadog-agent/comp/core/flare/types v0.56.2 @@ -689,7 +689,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/cache v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/containers/image v0.56.2 - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 github.com/DataDog/datadog-agent/pkg/util/flavor v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.2 @@ -705,7 +705,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/tagger v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/util/testutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/uuid v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 github.com/DataDog/datadog-agent/pkg/version v0.57.0 github.com/DataDog/go-libddwaf/v3 v3.3.0 github.com/DataDog/go-sqllexer v0.0.16 diff --git a/pkg/api/go.mod b/pkg/api/go.mod index 8f5fe182bfbb4..33c534533c7ae 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/pkg/api go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../comp/api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../comp/core/flare/builder @@ -21,6 +20,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/config/teeconfig => ../../pkg/config/teeconfig github.com/DataDog/datadog-agent/pkg/config/utils => ../config/utils github.com/DataDog/datadog-agent/pkg/telemetry => ../telemetry + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ../util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ../util/fxutil @@ -41,7 +41,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 github.com/stretchr/testify v1.9.0 ) @@ -57,14 +57,14 @@ require ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/cli/subcommands/check/command.go b/pkg/cli/subcommands/check/command.go index 9e33f24d63548..a9788a143c7f1 100644 --- a/pkg/cli/subcommands/check/command.go +++ b/pkg/cli/subcommands/check/command.go @@ -25,7 +25,6 @@ import ( "gopkg.in/yaml.v2" "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/agent/jmxlogger" "github.com/DataDog/datadog-agent/comp/agent/jmxlogger/jmxloggerimpl" "github.com/DataDog/datadog-agent/comp/aggregator/demultiplexer" @@ -79,6 +78,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/serializer" statuscollector "github.com/DataDog/datadog-agent/pkg/status/collector" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" "github.com/DataDog/datadog-agent/pkg/util/scrubber" @@ -653,11 +653,11 @@ func runCheck(cliParams *cliParams, c check.Check, _ aggregator.Demultiplexer) * } func writeCheckToFile(checkName string, checkFileOutput *bytes.Buffer) { - _ = os.Mkdir(path.DefaultCheckFlareDirectory, os.ModeDir) + _ = os.Mkdir(defaultpaths.CheckFlareDirectory, os.ModeDir) // Windows cannot accept ":" in file names filenameSafeTimeStamp := strings.ReplaceAll(time.Now().UTC().Format(time.RFC3339), ":", "-") - flarePath := filepath.Join(path.DefaultCheckFlareDirectory, "check_"+checkName+"_"+filenameSafeTimeStamp+".log") + flarePath := filepath.Join(defaultpaths.CheckFlareDirectory, "check_"+checkName+"_"+filenameSafeTimeStamp+".log") scrubbed, err := scrubber.ScrubBytes(checkFileOutput.Bytes()) if err != nil { diff --git a/pkg/cli/subcommands/dcaflare/command.go b/pkg/cli/subcommands/dcaflare/command.go index 30a00d7f19f3d..a1bdcacea1275 100644 --- a/pkg/cli/subcommands/dcaflare/command.go +++ b/pkg/cli/subcommands/dcaflare/command.go @@ -15,7 +15,6 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/flare/helpers" @@ -27,6 +26,7 @@ import ( settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/input" ) @@ -160,7 +160,7 @@ func run(cliParams *cliParams, _ config.Component) error { logFile := pkgconfigsetup.Datadog().GetString("log_file") if logFile == "" { - logFile = path.DefaultDCALogFile + logFile = defaultpaths.DCALogFile } if cliParams.profiling >= 30 { @@ -208,7 +208,7 @@ func run(cliParams *cliParams, _ config.Component) error { fmt.Fprintln(color.Output, color.RedString("The agent was unable to make a full flare: %s.", e.Error())) } fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally, some logs will be missing.")) - filePath, e = flare.CreateDCAArchive(true, path.GetDistPath(), logFile, profile, nil) + filePath, e = flare.CreateDCAArchive(true, defaultpaths.GetDistPath(), logFile, profile, nil) if e != nil { fmt.Printf("The flare zipfile failed to be created: %s\n", e) return e diff --git a/pkg/jmxfetch/jmxfetch.go b/pkg/jmxfetch/jmxfetch.go index 1a65b1acb5886..34e2e74f9bbe9 100644 --- a/pkg/jmxfetch/jmxfetch.go +++ b/pkg/jmxfetch/jmxfetch.go @@ -20,7 +20,6 @@ import ( "gopkg.in/yaml.v2" - "github.com/DataDog/datadog-agent/cmd/agent/common/path" "github.com/DataDog/datadog-agent/comp/agent/jmxlogger" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" dogstatsdServer "github.com/DataDog/datadog-agent/comp/dogstatsd/server" @@ -28,6 +27,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/status/health" jmxStatus "github.com/DataDog/datadog-agent/pkg/status/jmx" + "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -187,7 +187,7 @@ func (j *JMXFetch) setDefaults() { func (j *JMXFetch) Start(manage bool) error { j.setDefaults() - classpath := filepath.Join(path.GetDistPath(), "jmx", jmxJarName) + classpath := filepath.Join(defaultpaths.GetDistPath(), "jmx", jmxJarName) if j.JavaToolsJarPath != "" { classpath = fmt.Sprintf("%s%s%s", j.JavaToolsJarPath, string(os.PathListSeparator), classpath) } diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index 32b7fa9944ff3..e6870318f519f 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -46,7 +46,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/stretchr/testify v1.9.0 ) @@ -61,16 +61,16 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index 4e43cd26019fb..64ce43b6c1095 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -58,7 +58,7 @@ require ( github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 github.com/stretchr/testify v1.9.0 golang.org/x/net v0.29.0 @@ -76,17 +76,17 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index 5cf3b26b0b20b..d12ed31e3f79d 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -63,18 +63,18 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index f146129d495c7..9fc65b78e2517 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -42,7 +42,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/logs/agent/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/stretchr/testify v1.9.0 ) @@ -57,16 +57,16 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index 4248a782f0a22..12f52cf246613 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -68,7 +68,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/sender v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/status/statusinterface v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 github.com/hashicorp/go-multierror v1.1.1 github.com/stretchr/testify v1.9.0 @@ -92,18 +92,18 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 8d93c6d5c497c..b55f7c8b50dcb 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -56,7 +56,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/metrics v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sds v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/stretchr/testify v1.9.0 ) @@ -73,17 +73,17 @@ require ( github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index 46702bc7ff99e..7d3ffc4d4d8dd 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -52,7 +52,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.57.0 github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 github.com/stretchr/testify v1.9.0 ) @@ -71,17 +71,17 @@ require ( github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index e45f718956ac4..0ccb5a58c923c 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -56,7 +56,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/status/statusinterface v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/benbjohnson/clock v1.3.5 github.com/stretchr/testify v1.9.0 ) @@ -75,18 +75,18 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/metrics v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index 7d5e7daa3d8ef..751f0e820006c 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -41,7 +41,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/logs/agent/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 github.com/stretchr/testify v1.9.0 ) @@ -56,15 +56,15 @@ require ( github.com/DataDog/datadog-agent/pkg/config/structure v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index e6082a450d4db..4e40296f5232b 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -55,17 +55,17 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.0.0-00010101000000-000000000000 // indirect github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 0d3f6ac44d82a..eed0ccd272a58 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/pkg/serializer go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ../../comp/api/api/def github.com/DataDog/datadog-agent/comp/core/config => ../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ../../comp/core/flare/builder @@ -41,6 +40,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/backoff => ../util/backoff/ github.com/DataDog/datadog-agent/pkg/util/buf => ../util/buf/ github.com/DataDog/datadog-agent/pkg/util/common => ../util/common + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ../util/executable/ github.com/DataDog/datadog-agent/pkg/util/filesystem => ../util/filesystem/ github.com/DataDog/datadog-agent/pkg/util/fxutil => ../util/fxutil/ @@ -75,7 +75,7 @@ require ( github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.20.0 github.com/gogo/protobuf v1.3.2 @@ -105,18 +105,18 @@ require ( github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.4 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/cmd/agent/common/path/docs.go b/pkg/util/defaultpaths/docs.go similarity index 70% rename from cmd/agent/common/path/docs.go rename to pkg/util/defaultpaths/docs.go index 73c5296081f23..8a0d733b31e8e 100644 --- a/cmd/agent/common/path/docs.go +++ b/pkg/util/defaultpaths/docs.go @@ -3,5 +3,5 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package path defines paths used by the agent on each platform -package path +// Package defaultpaths defines default paths used by the agent on each platform +package defaultpaths diff --git a/cmd/agent/common/path/go.mod b/pkg/util/defaultpaths/go.mod similarity index 72% rename from cmd/agent/common/path/go.mod rename to pkg/util/defaultpaths/go.mod index 9da4bda341f96..62b44ff579d71 100644 --- a/cmd/agent/common/path/go.mod +++ b/pkg/util/defaultpaths/go.mod @@ -1,12 +1,12 @@ -module github.com/DataDog/datadog-agent/cmd/agent/common/path +module github.com/DataDog/datadog-agent/pkg/util/defaultpaths go 1.22.0 replace ( - github.com/DataDog/datadog-agent/pkg/util/executable => ../../../../pkg/util/executable - github.com/DataDog/datadog-agent/pkg/util/log => ../../../../pkg/util/log - github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../../../pkg/util/scrubber - github.com/DataDog/datadog-agent/pkg/util/winutil => ../../../../pkg/util/winutil + github.com/DataDog/datadog-agent/pkg/util/executable => ../../../pkg/util/executable + github.com/DataDog/datadog-agent/pkg/util/log => ../../../pkg/util/log + github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../../pkg/util/scrubber + github.com/DataDog/datadog-agent/pkg/util/winutil => ../../../pkg/util/winutil ) require ( diff --git a/cmd/agent/common/path/go.sum b/pkg/util/defaultpaths/go.sum similarity index 100% rename from cmd/agent/common/path/go.sum rename to pkg/util/defaultpaths/go.sum diff --git a/pkg/util/defaultpaths/path_darwin.go b/pkg/util/defaultpaths/path_darwin.go new file mode 100644 index 0000000000000..fcfca77e5ae3d --- /dev/null +++ b/pkg/util/defaultpaths/path_darwin.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package defaultpaths + +import ( + "path/filepath" + + "github.com/DataDog/datadog-agent/pkg/util/executable" +) + +const ( + // ConfPath points to the folder containing datadog.yaml + ConfPath = "/opt/datadog-agent/etc" + // LogFile points to the log file that will be used if not configured + LogFile = "/opt/datadog-agent/logs/agent.log" + // DCALogFile points to the log file that will be used if not configured + DCALogFile = "/opt/datadog-agent/logs/cluster-agent.log" + //JmxLogFile points to the jmx fetch log file that will be used if not configured + JmxLogFile = "/opt/datadog-agent/logs/jmxfetch.log" + // CheckFlareDirectory a flare friendly location for checks to be written + CheckFlareDirectory = "/opt/datadog-agent/logs/checks/" + // JMXFlareDirectory a flare friendly location for jmx command logs to be written + JMXFlareDirectory = "/opt/datadog-agent/logs/jmxinfo/" + // DogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured + DogstatsDLogFile = "/opt/datadog-agent/logs/dogstatsd_info/dogstatsd-stats.log" + // StreamlogsLogFile points to the stream logs log file that will be used if not configured + StreamlogsLogFile = "/opt/datadog-agent/logs/streamlogs_info/streamlogs.log" +) + +var ( + _here, _ = executable.Folder() + + // PyChecksPath holds the path to the python checks from integrations-core shipped with the agent + PyChecksPath = filepath.Join(_here, "..", "..", "checks.d") + // DistPath holds the path to the folder containing distribution files + distPath = filepath.Join(_here, "dist") +) + +// GetDistPath returns the fully qualified path to the 'dist' directory +func GetDistPath() string { + return distPath +} diff --git a/pkg/util/defaultpaths/path_freebsd.go b/pkg/util/defaultpaths/path_freebsd.go new file mode 100644 index 0000000000000..7b722806b0c70 --- /dev/null +++ b/pkg/util/defaultpaths/path_freebsd.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package defaultpaths + +import ( + "path/filepath" + + "github.com/DataDog/datadog-agent/pkg/util/executable" +) + +const ( + // ConfPath points to the folder containing datadog.yaml + ConfPath = "/usr/local/etc/datadog-agent" + // LogFile points to the log file that will be used if not configured + LogFile = "/var/log/datadog/agent.log" + // DCALogFile points to the log file that will be used if not configured + DCALogFile = "/var/log/datadog/cluster-agent.log" + //JmxLogFile points to the jmx fetch log file that will be used if not configured + JmxLogFile = "/var/log/datadog/jmxfetch.log" + // CheckFlareDirectory a flare friendly location for checks to be written + CheckFlareDirectory = "/var/log/datadog/checks/" + // JMXFlareDirectory a flare friendly location for jmx command logs to be written + JMXFlareDirectory = "/var/log/datadog/jmxinfo/" + // DogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured + DogstatsDLogFile = "/var/log/datadog/dogstatsd_info/dogstatsd-stats.log" + // StreamlogsLogFile points to the stream logs log file that will be used if not configured + StreamlogsLogFile = "/var/log/datadog/streamlogs_info/streamlogs.log" +) + +var ( + // utility variables + _here, _ = executable.Folder() + // PyChecksPath holds the path to the python checks from integrations-core shipped with the agent + PyChecksPath = filepath.Join(_here, "..", "..", "checks.d") + // DistPath holds the path to the folder containing distribution files + distPath = filepath.Join(_here, "dist") +) + +// GetDistPath returns the fully qualified path to the 'dist' directory +func GetDistPath() string { + return distPath +} diff --git a/pkg/util/defaultpaths/path_nix.go b/pkg/util/defaultpaths/path_nix.go new file mode 100644 index 0000000000000..1c319ba1fc38d --- /dev/null +++ b/pkg/util/defaultpaths/path_nix.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build netbsd || openbsd || solaris || dragonfly || linux + +package defaultpaths + +import ( + "path/filepath" + + "github.com/DataDog/datadog-agent/pkg/util/executable" +) + +const ( + // ConfPath points to the folder containing datadog.yaml + ConfPath = "/etc/datadog-agent" + // LogFile points to the log file that will be used if not configured + LogFile = "/var/log/datadog/agent.log" + // DCALogFile points to the log file that will be used if not configured + DCALogFile = "/var/log/datadog/cluster-agent.log" + // JmxLogFile points to the jmx fetch log file that will be used if not configured + JmxLogFile = "/var/log/datadog/jmxfetch.log" + // CheckFlareDirectory a flare friendly location for checks to be written + CheckFlareDirectory = "/var/log/datadog/checks/" + // JMXFlareDirectory a flare friendly location for jmx command logs to be written + JMXFlareDirectory = "/var/log/datadog/jmxinfo/" + // DogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured + DogstatsDLogFile = "/var/log/datadog/dogstatsd_info/dogstatsd-stats.log" + // StreamlogsLogFile points to the stream logs log file that will be used if not configured + StreamlogsLogFile = "/var/log/datadog/streamlogs_info/streamlogs.log" +) + +var ( + // utility variables + _here, _ = executable.Folder() + // PyChecksPath holds the path to the python checks from integrations-core shipped with the agent + PyChecksPath = filepath.Join(_here, "..", "..", "checks.d") + // DistPath holds the path to the folder containing distribution files + distPath = filepath.Join(_here, "dist") +) + +// GetDistPath returns the fully qualified path to the 'dist' directory +func GetDistPath() string { + return distPath +} diff --git a/cmd/agent/common/path/path_windows.go b/pkg/util/defaultpaths/path_windows.go similarity index 51% rename from cmd/agent/common/path/path_windows.go rename to pkg/util/defaultpaths/path_windows.go index 750f3a8bbac2a..50f08bf357810 100644 --- a/cmd/agent/common/path/path_windows.go +++ b/pkg/util/defaultpaths/path_windows.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package path +package defaultpaths import ( "path/filepath" @@ -24,32 +24,32 @@ var ( ) var ( - // DefaultConfPath points to the folder containing datadog.yaml - DefaultConfPath = "c:\\programdata\\datadog" - // DefaultLogFile points to the log file that will be used if not configured - DefaultLogFile = "c:\\programdata\\datadog\\logs\\agent.log" - // DefaultDCALogFile points to the log file that will be used if not configured - DefaultDCALogFile = "c:\\programdata\\datadog\\logs\\cluster-agent.log" - //DefaultJmxLogFile points to the jmx fetch log file that will be used if not configured - DefaultJmxLogFile = "c:\\programdata\\datadog\\logs\\jmxfetch.log" - // DefaultCheckFlareDirectory a flare friendly location for checks to be written - DefaultCheckFlareDirectory = "c:\\programdata\\datadog\\logs\\checks\\" - // DefaultJMXFlareDirectory a flare friendly location for jmx command logs to be written - DefaultJMXFlareDirectory = "c:\\programdata\\datadog\\logs\\jmxinfo\\" - //DefaultDogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured - DefaultDogstatsDLogFile = "c:\\programdata\\datadog\\logs\\dogstatsd_info\\dogstatsd-stats.log" - //DefaultStreamlogsLogFile points to the stream logs log file that will be used if not configured - DefaultStreamlogsLogFile = "c:\\programdata\\datadog\\logs\\streamlogs_info\\streamlogs.log" + // ConfPath points to the folder containing datadog.yaml + ConfPath = "c:\\programdata\\datadog" + // LogFile points to the log file that will be used if not configured + LogFile = "c:\\programdata\\datadog\\logs\\agent.log" + // DCALogFile points to the log file that will be used if not configured + DCALogFile = "c:\\programdata\\datadog\\logs\\cluster-agent.log" + //JmxLogFile points to the jmx fetch log file that will be used if not configured + JmxLogFile = "c:\\programdata\\datadog\\logs\\jmxfetch.log" + // CheckFlareDirectory a flare friendly location for checks to be written + CheckFlareDirectory = "c:\\programdata\\datadog\\logs\\checks\\" + // JMXFlareDirectory a flare friendly location for jmx command logs to be written + JMXFlareDirectory = "c:\\programdata\\datadog\\logs\\jmxinfo\\" + // DogstatsDLogFile points to the dogstatsd stats log file that will be used if not configured + DogstatsDLogFile = "c:\\programdata\\datadog\\logs\\dogstatsd_info\\dogstatsd-stats.log" + // StreamlogsLogFile points to the stream logs log file that will be used if not configured + StreamlogsLogFile = "c:\\programdata\\datadog\\logs\\streamlogs_info\\streamlogs.log" ) func init() { pd, err := winutil.GetProgramDataDir() if err == nil { - DefaultConfPath = pd - DefaultLogFile = filepath.Join(pd, "logs", "agent.log") - DefaultDCALogFile = filepath.Join(pd, "logs", "cluster-agent.log") - DefaultDogstatsDLogFile = filepath.Join(pd, "logs", "dogstatsd_info", "dogstatsd-stats.log") - DefaultStreamlogsLogFile = filepath.Join(pd, "logs", "streamlogs_info", "streamlogs.log") + ConfPath = pd + LogFile = filepath.Join(pd, "logs", "agent.log") + DCALogFile = filepath.Join(pd, "logs", "cluster-agent.log") + DogstatsDLogFile = filepath.Join(pd, "logs", "dogstatsd_info", "dogstatsd-stats.log") + StreamlogsLogFile = filepath.Join(pd, "logs", "streamlogs_info", "streamlogs.log") } } diff --git a/tasks/modules.py b/tasks/modules.py index 219e1b34c3d74..b2f1a523ce17f 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -132,7 +132,7 @@ def dependency_path(self, agent_version): ".", targets=["./pkg", "./cmd", "./comp"], ), - "cmd/agent/common/path": GoModule("cmd/agent/common/path", independent=True, used_by_otel=True), + "pkg/util/defaultpaths": GoModule("pkg/util/defaultpaths", independent=True, used_by_otel=True), "comp/api/api/def": GoModule("comp/api/api/def", independent=True, used_by_otel=True), "comp/api/authtoken": GoModule("comp/api/authtoken", independent=True, used_by_otel=True), "comp/core/config": GoModule("comp/core/config", independent=True, used_by_otel=True), diff --git a/tasks/unit_tests/modules_tests.py b/tasks/unit_tests/modules_tests.py index 1c7da0cc716af..ee5889b71f1b3 100644 --- a/tasks/unit_tests/modules_tests.py +++ b/tasks/unit_tests/modules_tests.py @@ -28,8 +28,8 @@ "New": {"Path": "github.com/cihub/seelog", "Version": "v0.0.0-20151216151435-d2c6e5aa9fbf"}, }, { - "Old": {"Path": "github.com/DataDog/datadog-agent/cmd/agent/common/path"}, - "New": {"Path": "./cmd/agent/common/path/"}, + "Old": {"Path": "github.com/DataDog/datadog-agent/pkg/util/defaultpaths"}, + "New": {"Path": "./pkg/util/defaultpaths/"}, }, ], "Retract": [{"Low": "v0.9.0", "High": "v0.9.0"}, {"Low": "v0.8.0", "High": "v0.8.0"}], diff --git a/test/otel/go.mod b/test/otel/go.mod index fcd52c95f4217..810c3b553d6e6 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -3,7 +3,6 @@ module github.com/DataDog/datadog-agent/test/otel go 1.22.0 replace ( - github.com/DataDog/datadog-agent/cmd/agent/common/path => ./../../cmd/agent/common/path github.com/DataDog/datadog-agent/comp/api/api/def => ./../../comp/api/api/def github.com/DataDog/datadog-agent/comp/core/config => ./../../comp/core/config github.com/DataDog/datadog-agent/comp/core/flare/builder => ./../../comp/core/flare/builder @@ -70,6 +69,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/buf => ../../pkg/util/buf github.com/DataDog/datadog-agent/pkg/util/cgroups => ./../../pkg/util/cgroups github.com/DataDog/datadog-agent/pkg/util/common => ../../pkg/util/common + github.com/DataDog/datadog-agent/pkg/util/defaultpaths => ./../../pkg/util/defaultpaths github.com/DataDog/datadog-agent/pkg/util/executable => ./../../pkg/util/executable github.com/DataDog/datadog-agent/pkg/util/filesystem => ./../../pkg/util/filesystem github.com/DataDog/datadog-agent/pkg/util/fxutil => ./../../pkg/util/fxutil @@ -157,22 +157,22 @@ require ( github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/cgroups v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/common v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/executable v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/executable v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.57.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.57.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.26.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect From 44211a09cc6905c899ca21a3ee0603eda4f08278 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Wed, 9 Oct 2024 19:27:39 +0200 Subject: [PATCH 08/17] fix(token): Remove useless calls to gitlab (#29949) --- .gitlab/source_test/windows.yml | 2 +- tasks/libs/common/junit_upload_core.py | 5 +--- tasks/unit_tests/junit_tests.py | 35 ++++++++------------------ tasks/winbuildscripts/unittests.ps1 | 5 ---- tools/ci/junit_upload.sh | 4 +-- 5 files changed, 13 insertions(+), 38 deletions(-) diff --git a/.gitlab/source_test/windows.yml b/.gitlab/source_test/windows.yml index 2832ad9db5577..fa4b857241a24 100644 --- a/.gitlab/source_test/windows.yml +++ b/.gitlab/source_test/windows.yml @@ -25,6 +25,7 @@ -e CI_JOB_NAME="${CI_JOB_NAME}" -e CI_JOB_ID="${CI_JOB_ID}" -e CI_PIPELINE_ID="${CI_PIPELINE_ID}" + -e CI_PIPELINE_SOURCE="${CI_PIPELINE_SOURCE}" -e CI_REPOSITORY_URL="${CI_REPOSITORY_URL}" -e CI_COMMIT_SHA="${CI_COMMIT_SHA}" -e CI_PROJECT_NAME="${CI_PROJECT_NAME}" @@ -43,7 +44,6 @@ -e CODECOV_TOKEN="${CODECOV_TOKEN}" -e S3_PERMANENT_ARTIFACTS_URI="${S3_PERMANENT_ARTIFACTS_URI}" -e COVERAGE_CACHE_FLAG="${COVERAGE_CACHE_FLAG}" - -e GITLAB_TOKEN="${GITLAB_READ_API_TOKEN}" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\unittests.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/tasks/libs/common/junit_upload_core.py b/tasks/libs/common/junit_upload_core.py index d5d0283f93f19..fdbd052760974 100644 --- a/tasks/libs/common/junit_upload_core.py +++ b/tasks/libs/common/junit_upload_core.py @@ -16,7 +16,6 @@ from invoke.exceptions import Exit from tasks.flavor import AgentFlavor -from tasks.libs.ciproviders.gitlab_api import get_gitlab_repo from tasks.libs.common.utils import gitlab_section from tasks.libs.pipeline.notifications import ( DEFAULT_JIRA_PROJECT, @@ -282,8 +281,6 @@ def set_tags(owner, flavor, flag: str, additional_tags, file_name): codeowner = CODEOWNERS_ORG_PREFIX + owner slack_channel = GITHUB_SLACK_MAP.get(codeowner.lower(), DEFAULT_SLACK_CHANNEL)[1:] jira_project = GITHUB_JIRA_MAP.get(codeowner.lower(), DEFAULT_JIRA_PROJECT)[0:] - agent = get_gitlab_repo() - pipeline = agent.pipelines.get(os.environ["CI_PIPELINE_ID"]) tags = [ "--service", "datadog-agent", @@ -296,7 +293,7 @@ def set_tags(owner, flavor, flag: str, additional_tags, file_name): "--tags", f"jira_project:{jira_project}", "--tags", - f"gitlab.pipeline_source:{pipeline.source}", + f"gitlab.pipeline_source:{os.environ['CI_PIPELINE_SOURCE']}", "--xpath-tag", "test.agent_is_known_flaky=/testcase/@agent_is_known_flaky", ] diff --git a/tasks/unit_tests/junit_tests.py b/tasks/unit_tests/junit_tests.py index 37876198a4668..42ea6123cbb6f 100644 --- a/tasks/unit_tests/junit_tests.py +++ b/tasks/unit_tests/junit_tests.py @@ -82,21 +82,15 @@ def test_e2e_kitchen(self): class TestSetTag(unittest.TestCase): @patch.dict("os.environ", {"CI_PIPELINE_ID": "1515"}) - @patch("tasks.libs.common.junit_upload_core.get_gitlab_repo") - def test_default(self, mock_gitlab): - mock_instance = MagicMock() - mock_instance.pipelines.get.return_value = MagicMock() - mock_gitlab.return_value = mock_instance + @patch.dict("os.environ", {"CI_PIPELINE_SOURCE": "putsch"}) + def test_default(self): tags = junit.set_tags("agent-devx-infra", "base", "", {}, "") self.assertEqual(len(tags), 14) self.assertIn("slack_channel:agent-devx-ops", tags) @patch.dict("os.environ", {"CI_PIPELINE_ID": "1664"}) - @patch("tasks.libs.common.junit_upload_core.get_gitlab_repo") - def test_flag(self, mock_gitlab): - mock_instance = MagicMock() - mock_instance.pipelines.get.return_value = MagicMock() - mock_gitlab.return_value = mock_instance + @patch.dict("os.environ", {"CI_PIPELINE_SOURCE": "beer"}) + def test_flag(self): tags = junit.set_tags( "agent-devx-infra", "base", @@ -110,21 +104,15 @@ def test_flag(self, mock_gitlab): self.assertNotIn("upload_option.os_version_from_name", tags) @patch.dict("os.environ", {"CI_PIPELINE_ID": "1789"}) - @patch("tasks.libs.common.junit_upload_core.get_gitlab_repo") - def test_additional_tags(self, mock_gitlab): - mock_instance = MagicMock() - mock_instance.pipelines.get.return_value = MagicMock() - mock_gitlab.return_value = mock_instance + @patch.dict("os.environ", {"CI_PIPELINE_SOURCE": "revolution"}) + def test_additional_tags(self): tags = junit.set_tags("agent-devx-infra", "base", "", ["--tags", "simple:basique"], "") self.assertEqual(len(tags), 16) self.assertIn("simple:basique", tags) @patch.dict("os.environ", {"CI_PIPELINE_ID": "1789"}) - @patch("tasks.libs.common.junit_upload_core.get_gitlab_repo") - def test_additional_tags_from_method(self, mock_gitlab): - mock_instance = MagicMock() - mock_instance.pipelines.get.return_value = MagicMock() - mock_gitlab.return_value = mock_instance + @patch.dict("os.environ", {"CI_PIPELINE_SOURCE": "revolution"}) + def test_additional_tags_from_method(self): tags = junit.set_tags( "agent-devx-infra", "base", "", junit.read_additional_tags(Path("tasks/unit_tests/testdata")), "" ) @@ -133,15 +121,12 @@ def test_additional_tags_from_method(self, mock_gitlab): class TestJUnitUploadFromTGZ(unittest.TestCase): @patch.dict("os.environ", {"CI_PIPELINE_ID": "1664"}) - @patch("tasks.libs.common.junit_upload_core.get_gitlab_repo") + @patch.dict("os.environ", {"CI_PIPELINE_SOURCE": "beer"}) @patch("tasks.libs.common.junit_upload_core.Popen") - def test_e2e(self, mock_popen, mock_gitlab): + def test_e2e(self, mock_popen): mock_instance = MagicMock() mock_instance.communicate.return_value = (b"stdout", b"") mock_popen.return_value = mock_instance - mock_project = MagicMock() - mock_project.pipelines.get.return_value = MagicMock() - mock_gitlab.return_value = mock_project junit.junit_upload_from_tgz("tasks/unit_tests/testdata/testjunit-tests_deb-x64-py3.tgz") mock_popen.assert_called() self.assertEqual(mock_popen.call_count, 29) diff --git a/tasks/winbuildscripts/unittests.ps1 b/tasks/winbuildscripts/unittests.ps1 index 8d09afd956ae5..5f4fc6a848b70 100644 --- a/tasks/winbuildscripts/unittests.ps1 +++ b/tasks/winbuildscripts/unittests.ps1 @@ -80,11 +80,6 @@ If ($LASTEXITCODE -ne "0") { exit $LASTEXITCODE } $Env:DATADOG_API_KEY=$(cat "$tmpfile") -& "$UT_BUILD_ROOT\tools\ci\fetch_secret.ps1" -parameterName "$Env:GITLAB_TOKEN" -tempFile "$tmpfile" -If ($LASTEXITCODE -ne "0") { - exit $LASTEXITCODE -} -$Env:GITLAB_TOKEN=$(cat "$tmpfile") Remove-Item "$tmpfile" & inv -e junit-upload --tgz-path $Env:JUNIT_TAR diff --git a/tools/ci/junit_upload.sh b/tools/ci/junit_upload.sh index 32c4621acf154..27690cced9747 100755 --- a/tools/ci/junit_upload.sh +++ b/tools/ci/junit_upload.sh @@ -6,10 +6,8 @@ if [[ -n "$1" ]]; then junit_files="$1" fi -GITLAB_TOKEN="$("$CI_PROJECT_DIR"/tools/ci/fetch_secret.sh "$GITLAB_READ_API_TOKEN")" DATADOG_API_KEY="$("$CI_PROJECT_DIR"/tools/ci/fetch_secret.sh "$API_KEY_ORG2")" export DATADOG_API_KEY -export GITLAB_TOKEN error=0 for file in $junit_files; do if [[ ! -f $file ]]; then @@ -18,7 +16,7 @@ for file in $junit_files; do fi inv -e junit-upload --tgz-path "$file" || error=1 done -unset DATADOG_API_KEY GITLAB_TOKEN +unset DATADOG_API_KEY # Never fail on Junit upload failure since it would prevent the other after scripts to run. if [ $error -eq 1 ]; then echo "Error: Junit upload failed" From 5bd01b3d38b659706ba827d558ae54cabb98062b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20L=C3=B3pez=20de=20Heredia?= Date: Wed, 9 Oct 2024 19:49:19 +0200 Subject: [PATCH 09/17] [APM] Use map lookups instead of string slice (#29961) --- pkg/trace/api/info.go | 4 +++- pkg/trace/stats/span_concentrator.go | 14 +++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pkg/trace/api/info.go b/pkg/trace/api/info.go index 79d1d55d7d5ee..401ddbd4e64a9 100644 --- a/pkg/trace/api/info.go +++ b/pkg/trace/api/info.go @@ -71,7 +71,9 @@ func (r *HTTPReceiver) makeInfoHandler() (hash string, handler http.HandlerFunc) var spanKindsStatsComputed []string if r.conf.ComputeStatsBySpanKind { - spanKindsStatsComputed = stats.KindsComputed + for k := range stats.KindsComputed { + spanKindsStatsComputed = append(spanKindsStatsComputed, k) + } } txt, err := json.MarshalIndent(struct { diff --git a/pkg/trace/stats/span_concentrator.go b/pkg/trace/stats/span_concentrator.go index e48f937f267a5..8800b931a926a 100644 --- a/pkg/trace/stats/span_concentrator.go +++ b/pkg/trace/stats/span_concentrator.go @@ -6,7 +6,6 @@ package stats import ( - "slices" "strings" "sync" "time" @@ -160,16 +159,17 @@ func (sc *SpanConcentrator) NewStatSpan( // computeStatsForSpanKind returns true if the span.kind value makes the span eligible for stats computation. func computeStatsForSpanKind(kind string) bool { k := strings.ToLower(kind) - return slices.Contains(KindsComputed, k) + _, ok := KindsComputed[k] + return ok } // KindsComputed is the list of span kinds that will have stats computed on them // when computeStatsByKind is enabled in the concentrator. -var KindsComputed = []string{ - "server", - "consumer", - "client", - "producer", +var KindsComputed = map[string]struct{}{ + "server": {}, + "consumer": {}, + "client": {}, + "producer": {}, } func (sc *SpanConcentrator) addSpan(s *StatSpan, aggKey PayloadAggregationKey, containerID string, containerTags []string, origin string, weight float64) { From ac54aa74833a6573c092e533d91846fbd2222793 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Wed, 9 Oct 2024 20:14:54 +0200 Subject: [PATCH 10/17] fix(linter): Do not import codeowners globally (#29998) --- tasks/linter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/linter.py b/tasks/linter.py index 5e4a502e52f14..11726346c0bb5 100644 --- a/tasks/linter.py +++ b/tasks/linter.py @@ -8,7 +8,6 @@ from glob import glob import yaml -from codeowners import CodeOwners from invoke import Exit, task from tasks.build_tags import compute_build_tags_for_flavor @@ -817,6 +816,7 @@ def _gitlab_ci_jobs_codeowners_lint(path_codeowners, modified_yml_files, gitlab_ @task def gitlab_ci_jobs_codeowners(ctx, path_codeowners='.github/CODEOWNERS', all_files=False): """Verifies that added / modified job files are defined within CODEOWNERS.""" + from codeowners import CodeOwners if all_files: modified_yml_files = glob('.gitlab/**/*.yml', recursive=True) From bc4222435b6ca8702dd163c269259c6309c5615d Mon Sep 17 00:00:00 2001 From: grantseltzer Date: Wed, 9 Oct 2024 16:26:23 -0400 Subject: [PATCH 11/17] Add tests to CI and Add DI team to QA config (#29821) Signed-off-by: grantseltzer --- .ddqa/config.toml | 7 +++++++ .gitlab-ci.yml | 1 + 2 files changed, 8 insertions(+) diff --git a/.ddqa/config.toml b/.ddqa/config.toml index e24656da4b464..0b2d11709b4b1 100644 --- a/.ddqa/config.toml +++ b/.ddqa/config.toml @@ -216,3 +216,10 @@ jira_issue_type = "Task" jira_statuses = ["To Do", "In Progress", "Done"] github_team = "agent-release-management" github_labels = ["team/agent-release-management"] + +[teams."Dynamic Instrumentation"] +jira_project = "DEBUG" +jira_issue_type = "Task" +jira_statuses = ["To Do", "In Progress", "Done"] +github_team = "debugger-go" +github_labels = ["team/dynamic-instrumentation"] \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cd9ee6eff657d..2ac6c19deb885 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -746,6 +746,7 @@ workflow: - pkg/network/**/* - pkg/process/monitor/* - pkg/util/kernel/**/* + - pkg/dynamicinstrumentation/**/* - pkg/gpu/**/* - .gitlab/kernel_matrix_testing/system_probe.yml - .gitlab/kernel_matrix_testing/common.yml From 72a76cefba3b54a86cd5f5e39eabe00ac24902a9 Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Wed, 9 Oct 2024 16:48:18 -0400 Subject: [PATCH 12/17] test installer named pipe dacl (#29960) --- .../installer/windows/datadog_installer.go | 7 +++ .../remote_windows_host_asserts.go | 34 +++++++++++++- .../remote_windows_namedpipe_asserts.go | 29 ++++++++++++ .../suites/installer-package/base_suite.go | 7 ++- .../suites/installer-package/install_test.go | 26 ++++++++++- test/new-e2e/tests/windows/common/acl.go | 32 ++++++------- .../common/fixtures/get-acl-helpers.ps1 | 45 +++++++++++++++++++ 7 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_namedpipe_asserts.go diff --git a/test/new-e2e/tests/installer/windows/datadog_installer.go b/test/new-e2e/tests/installer/windows/datadog_installer.go index cc08a13e3c4b1..84318fac496b0 100644 --- a/test/new-e2e/tests/installer/windows/datadog_installer.go +++ b/test/new-e2e/tests/installer/windows/datadog_installer.go @@ -39,6 +39,8 @@ const ( ConfigPath string = "C:\\ProgramData\\Datadog\\datadog.yaml" // RegistryKeyPath is the root registry key that the Datadog Installer uses to store some state RegistryKeyPath string = `HKLM:\SOFTWARE\Datadog\Datadog Installer` + // NamedPipe is the name of the named pipe used by the Datadog Installer + NamedPipe string = `\\.\pipe\dd_installer` ) var ( @@ -133,6 +135,11 @@ func (d *DatadogInstaller) RemoveExperiment(packageName string) (string, error) return d.execute(fmt.Sprintf("remove-experiment %s", packageName)) } +// Status returns the status provided by the running daemon +func (d *DatadogInstaller) Status() (string, error) { + return d.execute("status") +} + // Params contains the optional parameters for the Datadog Installer Install command type Params struct { installerURL string diff --git a/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_host_asserts.go b/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_host_asserts.go index 4bddb406252cc..ea3fa8fec3f88 100644 --- a/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_host_asserts.go +++ b/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_host_asserts.go @@ -6,11 +6,14 @@ package assertions import ( + "fmt" + "io/fs" + "strings" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "io/fs" ) const ( @@ -149,3 +152,32 @@ func (r *RemoteWindowsHostAssertions) HasNoRegistryKey(key string) *RemoteWindow r.require.False(exists) return r } + +// HasNamedPipe checks if a named pipe exists on the remote host +func (r *RemoteWindowsHostAssertions) HasNamedPipe(pipeName string) *RemoteWindowsNamedPipeAssertions { + r.suite.T().Helper() + + cmd := fmt.Sprintf("Test-Path '%s'", pipeName) + out, err := r.remoteHost.Execute(cmd) + r.require.NoError(err) + out = strings.TrimSpace(out) + r.require.Equal("True", out) + + return &RemoteWindowsNamedPipeAssertions{ + RemoteWindowsHostAssertions: r, + pipename: pipeName, + } +} + +// HasNoNamedPipe checks if a named pipe does not exist on the remote host +func (r *RemoteWindowsHostAssertions) HasNoNamedPipe(pipeName string) *RemoteWindowsHostAssertions { + r.suite.T().Helper() + + cmd := fmt.Sprintf("Test-Path '%s'", pipeName) + out, err := r.remoteHost.Execute(cmd) + r.require.NoError(err) + out = strings.TrimSpace(out) + r.require.Equal("False", out) + + return r +} diff --git a/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_namedpipe_asserts.go b/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_namedpipe_asserts.go new file mode 100644 index 0000000000000..76b12c8d61272 --- /dev/null +++ b/test/new-e2e/tests/installer/windows/remote-host-assertions/remote_windows_namedpipe_asserts.go @@ -0,0 +1,29 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package assertions + +import ( + "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common" +) + +// RemoteWindowsNamedPipeAssertions is a type that extends the RemoteWindowsHostAssertions to add assertions +// specific to a named pipe. +type RemoteWindowsNamedPipeAssertions struct { + *RemoteWindowsHostAssertions + pipename string +} + +// WithSecurity asserts that the named pipe has the given security descriptor. +func (r *RemoteWindowsNamedPipeAssertions) WithSecurity(expected common.ObjectSecurity) *RemoteWindowsNamedPipeAssertions { + r.suite.T().Helper() + actual, err := common.GetNamedPipeSecurityInfo(r.remoteHost, r.pipename) + r.require.NoError(err) + common.AssertEqualAccessSecurity(r.suite.T(), r.pipename, expected, actual) + if r.suite.T().Failed() { + r.suite.T().FailNow() + } + return r +} diff --git a/test/new-e2e/tests/installer/windows/suites/installer-package/base_suite.go b/test/new-e2e/tests/installer/windows/suites/installer-package/base_suite.go index de9df45e634d8..f8ffb4d252e69 100644 --- a/test/new-e2e/tests/installer/windows/suites/installer-package/base_suite.go +++ b/test/new-e2e/tests/installer/windows/suites/installer-package/base_suite.go @@ -33,7 +33,12 @@ func (s *baseInstallerSuite) freshInstall() { s.Require().Host(s.Env().RemoteHost). HasAService(installerwindows.ServiceName). // the service cannot start because of the missing API key - WithStatus("Stopped") + WithStatus("Stopped"). + // no named pipe when service is not running + HasNoNamedPipe(installerwindows.NamedPipe) + // no status when service is not running (no daemon/named pipe) + _, err := s.Installer().Status() + s.Require().Error(err) } func (s *baseInstallerSuite) startServiceWithConfigFile() { diff --git a/test/new-e2e/tests/installer/windows/suites/installer-package/install_test.go b/test/new-e2e/tests/installer/windows/suites/installer-package/install_test.go index c4109055ae218..ab7e5754765f9 100644 --- a/test/new-e2e/tests/installer/windows/suites/installer-package/install_test.go +++ b/test/new-e2e/tests/installer/windows/suites/installer-package/install_test.go @@ -48,7 +48,31 @@ func (s *testInstallerSuite) startServiceWithConfigFile() { // Assert s.Require().Host(s.Env().RemoteHost). HasAService(installerwindows.ServiceName). - WithStatus("Running") + WithStatus("Running"). + HasNamedPipe(installerwindows.NamedPipe). + WithSecurity( + // Only accessible to Administrators and LocalSystem + common.NewProtectedSecurityInfo( + common.GetIdentityForSID(common.AdministratorsSID), + common.GetIdentityForSID(common.LocalSystemSID), + []common.AccessRule{ + common.NewExplicitAccessRule( + common.GetIdentityForSID(common.LocalSystemSID), + common.FileFullControl, + common.AccessControlTypeAllow, + ), + common.NewExplicitAccessRule( + common.GetIdentityForSID(common.AdministratorsSID), + common.FileFullControl, + common.AccessControlTypeAllow, + ), + }, + )) + status, err := s.Installer().Status() + s.Require().NoError(err) + // with no packages installed just prints version + // e.g. Datadog Installer v7.60.0-devel+git.56.86b2ae2 + s.Require().Contains(status, "Datadog Installer") } func (s *testInstallerSuite) uninstall() { diff --git a/test/new-e2e/tests/windows/common/acl.go b/test/new-e2e/tests/windows/common/acl.go index 32057ac090f8c..ddaa5c80f1f03 100644 --- a/test/new-e2e/tests/windows/common/acl.go +++ b/test/new-e2e/tests/windows/common/acl.go @@ -329,30 +329,25 @@ func placeACLHelpers(host *components.RemoteHost) error { // // https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-acl func GetSecurityInfoForPath(host *components.RemoteHost, path string) (ObjectSecurity, error) { - var s ObjectSecurity - - err := placeACLHelpers(host) - if err != nil { - return s, err - } - - // Get the ACL information cmd := fmt.Sprintf(`. %s; Get-Acl -Audit -Path '%s' | ConvertTo-ACLDTO`, aclHelpersPath, path) - output, err := host.Execute(cmd) - if err != nil { - return s, err - } - - err = json.Unmarshal([]byte(output), &s) - if err != nil { - return s, fmt.Errorf("failed to unmarshal ACL information: %w\n%s", err, output) - } + return objectSecurityDTOFromCommand(host, cmd) +} - return s, nil +// GetNamedPipeSecurityInfo returns the security information for the given named pipe +// - Example pipe name: \\.\pipe\mypipe +// - Example pipe name: mypipe +func GetNamedPipeSecurityInfo(host *components.RemoteHost, pipeName string) (ObjectSecurity, error) { + cmd := fmt.Sprintf(`. %s; Get-PipeSecurity('%s') | ConvertTo-ACLDTO`, aclHelpersPath, pipeName) + return objectSecurityDTOFromCommand(host, cmd) } // GetServiceSecurityInfo returns the security information for the given service func GetServiceSecurityInfo(host *components.RemoteHost, serviceName string) (ObjectSecurity, error) { + cmd := fmt.Sprintf(`. %s; GetServiceSDDL('%s') | ConvertTo-ServiceSecurityDTO`, aclHelpersPath, serviceName) + return objectSecurityDTOFromCommand(host, cmd) +} + +func objectSecurityDTOFromCommand(host *components.RemoteHost, cmd string) (ObjectSecurity, error) { var s ObjectSecurity err := placeACLHelpers(host) @@ -361,7 +356,6 @@ func GetServiceSecurityInfo(host *components.RemoteHost, serviceName string) (Ob } // Get the ACL information - cmd := fmt.Sprintf(`. %s; GetServiceSDDL('%s') | ConvertTo-ServiceSecurityDTO`, aclHelpersPath, serviceName) output, err := host.Execute(cmd) if err != nil { return s, err diff --git a/test/new-e2e/tests/windows/common/fixtures/get-acl-helpers.ps1 b/test/new-e2e/tests/windows/common/fixtures/get-acl-helpers.ps1 index bb5a868d0b3e9..6a1f1c760b1d4 100644 --- a/test/new-e2e/tests/windows/common/fixtures/get-acl-helpers.ps1 +++ b/test/new-e2e/tests/windows/common/fixtures/get-acl-helpers.ps1 @@ -45,6 +45,8 @@ function Get-RuleRights($rule) { $rights = $rule.FileSystemRights } elseif ($rule.RegistryRights) { $rights = $rule.RegistryRights + } elseif ($rule.PipeAccessRights) { + $rights = $rule.PipeAccessRights } else { throw "Could not determine rights for rule: $rule" } @@ -164,6 +166,49 @@ function ConvertTo-ServiceSecurityDTO { } } +function Get-PipeSecurity($pipename) { + # split the pipe name to get the server name + # https://learn.microsoft.com/en-us/windows/win32/ipc/pipe-names + $parts = $pipename -split "\\" + if ($parts.Length -eq 1) { + # pipename + $pipename = $parts[0] + $server = "." + } elseif ($parts.Length -eq 5) { + # \\.\pipe\pipename + $server = $parts[2] + $pipename = $parts[4] + } else { + throw "Invalid pipe name: $pipename" + } + # have to connect to pipe to get security info + $pipe = New-Object System.IO.Pipes.NamedPipeClientStream($server, $pipename, [System.IO.Pipes.PipeDirection]::In) + $pipe.Connect() + try { + if (Get-Member -InputObject $pipe -Name "GetAccessControl" -Membertype Methods) { + # This method works on PS5 + return $pipe.GetAccessControl() + } else { + # https://github.com/PowerShell/PowerShell/issues/23962 + # PS7/.NET moved security related methods into extensions, which must be called directly + # in PowerShell + $ac = [System.IO.Pipes.PipesAclExtensions]::GetAccessControl($pipe) + # Unfortunately the extension doesn't have the properties, so fetch them ourselves + return @{ + Owner = $ac.GetOwner([System.Security.Principal.SecurityIdentifier]) + Group = $ac.GetGroup([System.Security.Principal.SecurityIdentifier]) + Access = $ac.GetAccessRules($true, $true, [System.Security.Principal.SecurityIdentifier]) + Audit = $ac.GetAuditRules($true, $true, [System.Security.Principal.SecurityIdentifier]) + AreAccessRulesProtected = $ac.AreAccessRulesProtected + AreAuditRulesProtected = $ac.AreAuditRulesProtected + Sddl = $ac.GetSecurityDescriptorSddlForm([System.Security.AccessControl.AccessControlSections]::All) + } + } + } finally { + $pipe.Close() + } +} + function GetServiceSDDL($serviceName) { Write-Output ((sc.exe sdshow $serviceName) -join "").Trim() } \ No newline at end of file From 96b6e118241ed0b5bdb97510bfbf32c3f255af51 Mon Sep 17 00:00:00 2001 From: Bryce Kahle Date: Wed, 9 Oct 2024 15:09:34 -0700 Subject: [PATCH 13/17] always remove extracted BTF on deb/rpm rm/upgrade (#30003) --- omnibus/package-scripts/agent-deb/preinst | 5 +++++ omnibus/package-scripts/agent-deb/prerm | 4 ++++ omnibus/package-scripts/agent-rpm/preinst | 5 +++++ omnibus/package-scripts/agent-rpm/prerm | 4 ++++ 4 files changed, 18 insertions(+) diff --git a/omnibus/package-scripts/agent-deb/preinst b/omnibus/package-scripts/agent-deb/preinst index 1de9a129dce3e..ed2843bfb585a 100755 --- a/omnibus/package-scripts/agent-deb/preinst +++ b/omnibus/package-scripts/agent-deb/preinst @@ -42,4 +42,9 @@ if [ -d $TUF_REPO_DIR ]; then rm -rf $TUF_REPO_DIR fi +# Remove any unpacked BTF files +find "$INSTALL_DIR/embedded/share/system-probe/ebpf/co-re/btf" -name "*.btf*" -type f -delete || true +# And remove empty directories +find "$INSTALL_DIR/embedded/share/system-probe/ebpf/co-re" -type d -empty -delete || true + exit 0 diff --git a/omnibus/package-scripts/agent-deb/prerm b/omnibus/package-scripts/agent-deb/prerm index e04749335cbcb..d1f7efd0f04b0 100755 --- a/omnibus/package-scripts/agent-deb/prerm +++ b/omnibus/package-scripts/agent-deb/prerm @@ -131,7 +131,10 @@ remove_sysprobe_secagent_files() if [ -d "$INSTALL_DIR/run" ]; then rmdir "$INSTALL_DIR/run" 2>/dev/null || true fi +} +remove_sysprobe_core_files() +{ # Remove any unpacked BTF files find "$INSTALL_DIR/embedded/share/system-probe/ebpf/co-re/btf" -name "*.btf*" -type f -delete || true # And remove empty directories @@ -186,6 +189,7 @@ stop_agent deregister_agent remove_custom_integrations remove_py_compiled_files +remove_sysprobe_core_files case "$1" in remove) diff --git a/omnibus/package-scripts/agent-rpm/preinst b/omnibus/package-scripts/agent-rpm/preinst index c8bccf324140b..24733dd871353 100755 --- a/omnibus/package-scripts/agent-rpm/preinst +++ b/omnibus/package-scripts/agent-rpm/preinst @@ -93,4 +93,9 @@ if [ -f "$INSTALL_DIR/embedded/.py_compiled_files.txt" ]; then cat $INSTALL_DIR/embedded/.py_compiled_files.txt | grep -v '^#' | xargs rm -f fi +# Remove any unpacked BTF files +find "$INSTALL_DIR/embedded/share/system-probe/ebpf/co-re/btf" -name "*.btf*" -type f -delete || true +# And remove empty directories +find "$INSTALL_DIR/embedded/share/system-probe/ebpf/co-re" -type d -empty -delete || true + exit 0 diff --git a/omnibus/package-scripts/agent-rpm/prerm b/omnibus/package-scripts/agent-rpm/prerm index ac4c3593fc14b..2506a3a13c269 100755 --- a/omnibus/package-scripts/agent-rpm/prerm +++ b/omnibus/package-scripts/agent-rpm/prerm @@ -115,7 +115,10 @@ remove_sysprobe_secagent_files() if [ -d "$INSTALL_DIR/run" ]; then rmdir "$INSTALL_DIR/run" 2>/dev/null || true fi +} +remove_sysprobe_core_files() +{ # Remove any unpacked BTF files find "$INSTALL_DIR/embedded/share/system-probe/ebpf/co-re/btf" -name "*.btf*" -type f -delete || true # And remove empty directories @@ -168,6 +171,7 @@ case "$*" in esac stop_agent deregister_agent +remove_sysprobe_core_files case "$*" in 0) From b83d36e827f653b9a847ae144c689c79a6c26349 Mon Sep 17 00:00:00 2001 From: Derek Brown Date: Wed, 9 Oct 2024 23:19:23 -0700 Subject: [PATCH 14/17] =?UTF-8?q?[windows][e2e]=20On=20windows,=20add=20th?= =?UTF-8?q?e=20ability=20to=20check=20for=20a=20specifc=20fil=E2=80=A6=20(?= =?UTF-8?q?#30000)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/windows/common/agent/agent.go | 2 +- test/new-e2e/tests/windows/common/msi.go | 10 ++- test/new-e2e/tests/windows/common/version.go | 81 +++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 test/new-e2e/tests/windows/common/version.go diff --git a/test/new-e2e/tests/windows/common/agent/agent.go b/test/new-e2e/tests/windows/common/agent/agent.go index 8833fb0f3cb6e..93158144f4d60 100644 --- a/test/new-e2e/tests/windows/common/agent/agent.go +++ b/test/new-e2e/tests/windows/common/agent/agent.go @@ -113,7 +113,7 @@ func UninstallAgent(host *components.RemoteHost, logPath string) error { if err != nil { return err } - return windowsCommon.UninstallMSI(host, product, logPath) + return windowsCommon.UninstallMSI(host, product, "", logPath) } // HasValidDatadogCodeSignature an error if the file at the given path is not validy signed by the Datadog Code Signing certificate diff --git a/test/new-e2e/tests/windows/common/msi.go b/test/new-e2e/tests/windows/common/msi.go index 0364f3cf1eb64..5fe61cdc70910 100644 --- a/test/new-e2e/tests/windows/common/msi.go +++ b/test/new-e2e/tests/windows/common/msi.go @@ -8,6 +8,7 @@ package common import ( "fmt" + "strings" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" ) @@ -19,6 +20,11 @@ import ( // - https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.4#example-7-specifying-arguments-to-the-process // - https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7.4 func MsiExec(host *components.RemoteHost, operation string, product string, args string, logPath string) error { + + if !strings.HasPrefix(operation, "/") { + return fmt.Errorf("unexpected operation: %s", operation) + } + remoteLogPath, err := GetTemporaryFile(host) if err != nil { return err @@ -48,8 +54,8 @@ func InstallMSI(host *components.RemoteHost, msiPath string, args string, logPat } // UninstallMSI uninstalls an MSI on the VM and collects the uninstall log -func UninstallMSI(host *components.RemoteHost, msiPath string, logPath string) error { - err := MsiExec(host, "/x", msiPath, "", logPath) +func UninstallMSI(host *components.RemoteHost, msiPath string, args string, logPath string) error { + err := MsiExec(host, "/x", msiPath, args, logPath) if err != nil { return fmt.Errorf("failed to uninstall MSI: %w", err) } diff --git a/test/new-e2e/tests/windows/common/version.go b/test/new-e2e/tests/windows/common/version.go new file mode 100644 index 0000000000000..0c42fa69bffd9 --- /dev/null +++ b/test/new-e2e/tests/windows/common/version.go @@ -0,0 +1,81 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2023-present Datadog, Inc. + +package common + +import ( + "fmt" + "os/exec" + "strings" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" +) + +// GetFileVersion gets the file version information from the versioninfo resource +// of the specified file. It returns as a slice of strings, each element being part +// of the version (major, minor, patch, build) +// +// // for the remote file, it uses the powershell version information command +func GetFileVersion(host *components.RemoteHost, remoteFileName string) ([]string, error) { + pscommand := fmt.Sprintf(`(Get-Item "%s").VersionInfo.FileVersion`, remoteFileName) + remoteversion, err := host.Execute(pscommand) + if err != nil { + return nil, fmt.Errorf("failed to get version: %w", err) + } + return strings.Split(strings.TrimSpace(remoteversion), "."), nil +} + +// GetExpectedVersion gets the expected version from the most recent tag +// returns in the form of slice of strings, each element being a part of the version +// (major, minor, patch) +// +// expectedVersion can be empty; if so, then it uses `git` to determine the +// expected version from the most recent tag. It also then assumes that +// git is in the path +func GetExpectedVersion(expectedVersion string) ([]string, error) { + if expectedVersion == "" { + // this needs to be executed locally + output, err := exec.Command("git", "describe", "--tags", "--candidates=50", "--match", "[0-9]*", "--abbrev=7").Output() + if err != nil { + return nil, fmt.Errorf("failed to get git version: %w", err) + } + // we only want the M.m.p version number, so up to the first `-` if it exists + expectedVersion = strings.TrimSpace(string(output)) + } + dashindex := strings.Index(expectedVersion, "-") + if dashindex > 1 { + expectedVersion = expectedVersion[:dashindex] + } + + expectedparts := strings.Split(expectedVersion, ".") + fmt.Printf("Looking for version %v\n", expectedparts) + if len(expectedparts) != 3 { + return nil, fmt.Errorf("expected version must be in the form (M.m.p), got %v", expectedparts) + } + return expectedparts, nil +} + +// VerifyVersion takes a filename and an expected version and determines +// if the file matches the expected version. +func VerifyVersion(host *components.RemoteHost, remoteFileName, expectedVersion string) error { + + expectedparts, err := GetExpectedVersion(expectedVersion) + if err != nil { + return fmt.Errorf("failed to get expected version: %w", err) + } + + remoteversionparts, err := GetFileVersion(host, remoteFileName) + if err != nil { + return fmt.Errorf("failed to get version: %w", err) + } + fmt.Printf("Found version %v\n", remoteversionparts) + + for idx, v := range expectedparts { + if v != remoteversionparts[idx] { + return fmt.Errorf("expected version %v, got %v", expectedVersion, remoteversionparts) + } + } + return nil +} From 54f5d04e5e10ab587b3b7b58c102e9c05c3af61c Mon Sep 17 00:00:00 2001 From: NouemanKHAL Date: Thu, 10 Oct 2024 12:30:40 +0200 Subject: [PATCH 15/17] [PLINT-519] Fix parsing voltage fields in Nvidia Jetson Integration (#29925) --- .../corechecks/nvidia/jetson/jetson_test.go | 84 +++++++++++++++++-- .../nvidia/jetson/powerMetricsSender.go | 2 +- ...voltage-fields-error-1837f15ab893c309.yaml | 11 +++ 3 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/fix-nvidia-jetson-voltage-fields-error-1837f15ab893c309.yaml diff --git a/pkg/collector/corechecks/nvidia/jetson/jetson_test.go b/pkg/collector/corechecks/nvidia/jetson/jetson_test.go index 6fde9697b0d9f..2a5a04e571d1d 100644 --- a/pkg/collector/corechecks/nvidia/jetson/jetson_test.go +++ b/pkg/collector/corechecks/nvidia/jetson/jetson_test.go @@ -17,11 +17,12 @@ import ( ) const ( - tx1Sample = "RAM 1179/3983MB (lfb 120x4MB) IRAM 0/252kB(lfb 252kB) CPU [1%@102,4%@102,0%@102,0%@102] EMC_FREQ 7%@408 GR3D_FREQ 0%@76 APE 25 AO@42.5C CPU@37.5C GPU@39C PLL@37C Tdiode@42.75C PMIC@100C Tboard@42C thermal@38.5C VDD_IN 2532/2698 VDD_CPU 76/178 VDD_GPU 19/19" - tx2Sample = "RAM 2344/7852MB (lfb 1154x4MB) SWAP 0/3926MB (cached 0MB) CPU [1%@345,off,off,1%@345,0%@345,2%@345] EMC_FREQ 4%@1600 GR3D_FREQ 0%@624 APE 150 PLL@37.5C MCPU@37.5C PMIC@100C Tboard@32C GPU@35C BCPU@37.5C thermal@36.5C Tdiode@34.25C VDD_SYS_GPU 152/152 VDD_SYS_SOC 687/687 VDD_4V0_WIFI 0/0 VDD_IN 3056/3056 VDD_SYS_CPU 152/152 VDD_SYS_DDR 883/883" - nanoSample = "RAM 534/3964MB (lfb 98x4MB) SWAP 5/1982MB (cached 1MB) IRAM 0/252kB(lfb 252kB) CPU [16%@204,9%@204,0%@204,0%@204] EMC_FREQ 0%@204 GR3D_FREQ 0%@76 APE 25 PLL@34C CPU@36.5C PMIC@100C GPU@36C AO@39.5C thermal@36.25C POM_5V_IN 1022/1022 POM_5V_GPU 0/0 POM_5V_CPU 204/204" - agXSample = "RAM 721/31927MB (lfb 7291x4MB) SWAP 0/15963MB (cached 0MB) CPU [2%@1190,0%@1190,0%@1190,0%@1190,off,off,off,off] EMC_FREQ 0%@665 GR3D_FREQ 0%@318 APE 150 MTS fg 0% bg 0% AO@37.5C GPU@37.5C Tdiode@40C PMIC@100C AUX@36C CPU@37.5C thermal@36.9C Tboard@37C GPU 0/0 CPU 311/311 SOC 932/932 CV 0/0 VDDRQ 621/621 SYS5V 1482/1482" - xavierNxSample = "RAM 4412/7772MB (lfb 237x4MB) SWAP 139/3886MB (cached 2MB) CPU [9%@1190,6%@1190,6%@1190,5%@1190,4%@1190,8%@1267] EMC_FREQ 10%@1600 GR3D_FREQ 62%@306 APE 150 MTS fg 0% bg 0% AO@41.5C GPU@43C PMIC@100C AUX@41.5C CPU@43.5C thermal@42.55C VDD_IN 4067/4067 VDD_CPU_GPU_CV 738/738 VDD_SOC 1353/1353" + tx1Sample = "RAM 1179/3983MB (lfb 120x4MB) IRAM 0/252kB(lfb 252kB) CPU [1%@102,4%@102,0%@102,0%@102] EMC_FREQ 7%@408 GR3D_FREQ 0%@76 APE 25 AO@42.5C CPU@37.5C GPU@39C PLL@37C Tdiode@42.75C PMIC@100C Tboard@42C thermal@38.5C VDD_IN 2532/2698 VDD_CPU 76/178 VDD_GPU 19/19" + tx2Sample = "RAM 2344/7852MB (lfb 1154x4MB) SWAP 0/3926MB (cached 0MB) CPU [1%@345,off,off,1%@345,0%@345,2%@345] EMC_FREQ 4%@1600 GR3D_FREQ 0%@624 APE 150 PLL@37.5C MCPU@37.5C PMIC@100C Tboard@32C GPU@35C BCPU@37.5C thermal@36.5C Tdiode@34.25C VDD_SYS_GPU 152/152 VDD_SYS_SOC 687/687 VDD_4V0_WIFI 0/0 VDD_IN 3056/3056 VDD_SYS_CPU 152/152 VDD_SYS_DDR 883/883" + nanoSample = "RAM 534/3964MB (lfb 98x4MB) SWAP 5/1982MB (cached 1MB) IRAM 0/252kB(lfb 252kB) CPU [16%@204,9%@204,0%@204,0%@204] EMC_FREQ 0%@204 GR3D_FREQ 0%@76 APE 25 PLL@34C CPU@36.5C PMIC@100C GPU@36C AO@39.5C thermal@36.25C POM_5V_IN 1022/1022 POM_5V_GPU 0/0 POM_5V_CPU 204/204" + agXSample = "RAM 721/31927MB (lfb 7291x4MB) SWAP 0/15963MB (cached 0MB) CPU [2%@1190,0%@1190,0%@1190,0%@1190,off,off,off,off] EMC_FREQ 0%@665 GR3D_FREQ 0%@318 APE 150 MTS fg 0% bg 0% AO@37.5C GPU@37.5C Tdiode@40C PMIC@100C AUX@36C CPU@37.5C thermal@36.9C Tboard@37C GPU 0/0 CPU 311/311 SOC 932/932 CV 0/0 VDDRQ 621/621 SYS5V 1482/1482" + xavierNxSample = "RAM 4412/7772MB (lfb 237x4MB) SWAP 139/3886MB (cached 2MB) CPU [9%@1190,6%@1190,6%@1190,5%@1190,4%@1190,8%@1267] EMC_FREQ 10%@1600 GR3D_FREQ 62%@306 APE 150 MTS fg 0% bg 0% AO@41.5C GPU@43C PMIC@100C AUX@41.5C CPU@43.5C thermal@42.55C VDD_IN 4067/4067 VDD_CPU_GPU_CV 738/738 VDD_SOC 1353/1353" + voltageUnitSample = "RAM 6334/15388MB (lfb 1770x4MB) SWAP 491/7694MB (cached 0MB) CPU [6%@729,9%@729,5%@729,16%@729,off,off,off,off] EMC_FREQ 0%@2133 GR3D_FREQ 0%@611 VIC_FREQ 729 APE 174 CV0@45.812C CPU@47.937C SOC2@46.093C SOC0@46.968C CV1@46.406C GPU@45.875C tj@48.875C SOC1@48.875C CV2@45.75C VDD_IN 5299mW/5299mW VDD_CPU_GPU_CV 773mW/773mW VDD_SOC 1424mW/1424mW" ) func TestNano(t *testing.T) { @@ -314,3 +315,76 @@ func TestXavierNx(t *testing.T) { mock.AssertNumberOfCalls(t, "Gauge", 37) mock.AssertNumberOfCalls(t, "Commit", 1) } + +func TestVoltageUnits(t *testing.T) { + tegraCheck := new(JetsonCheck) + mock := mocksender.NewMockSender(tegraCheck.ID()) + tegraCheck.Configure(mock.GetSenderManager(), integration.FakeConfigHash, nil, nil, "test") + + assert.Equal(t, tegraCheck.tegraStatsPath, "/usr/bin/tegrastats") + + // RAM 6334/15388MB (lfb 1770x4MB) SWAP 491/7694MB (cached 0MB) + mock.On("Gauge", "nvidia.jetson.mem.used", 6334.0*mb, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.mem.total", 15388.0*mb, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.mem.n_lfb", 1770.0, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.mem.lfb", 4.0*mb, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.swap.used", 491.0*mb, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.swap.total", 7694.0*mb, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.swap.cached", 0.0*mb, "", []string(nil)).Return().Times(1) + + // CPU [6%@729,9%@729,5%@729,16%@729,off,off,off,off] + mock.On("Gauge", "nvidia.jetson.cpu.usage", 6.0, "", []string{"cpu:0"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 729.0, "", []string{"cpu:0"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 9.0, "", []string{"cpu:1"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 729.0, "", []string{"cpu:1"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 5.0, "", []string{"cpu:2"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 729.0, "", []string{"cpu:2"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 16.0, "", []string{"cpu:3"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 729.0, "", []string{"cpu:3"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 0.0, "", []string{"cpu:4"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 0.0, "", []string{"cpu:4"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 0.0, "", []string{"cpu:5"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 0.0, "", []string{"cpu:5"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 0.0, "", []string{"cpu:6"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 0.0, "", []string{"cpu:6"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.usage", 0.0, "", []string{"cpu:7"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.freq", 0.0, "", []string{"cpu:7"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.inactive_count", 4.0, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.cpu.total_count", 8.0, "", []string(nil)).Return().Times(1) + + // EMC_FREQ 0%@2133 + mock.On("Gauge", "nvidia.jetson.emc.usage", 0.0, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.emc.freq", 2133.0, "", []string(nil)).Return().Times(1) + + // GR3D_FREQ 0%@611 + mock.On("Gauge", "nvidia.jetson.gpu.usage", 0.0, "", []string(nil)).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.gpu.freq", 611.0, "", []string(nil)).Return().Times(1) + + // CV0@45.812C CPU@47.937C SOC2@46.093C SOC0@46.968C CV1@46.406C GPU@45.875C tj@48.875C SOC1@48.875C CV2@45.75C + mock.On("Gauge", "nvidia.jetson.temp", 45.812, "", []string{"zone:CV0"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 47.937, "", []string{"zone:CPU"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 46.093, "", []string{"zone:SOC2"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 46.968, "", []string{"zone:SOC0"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 46.406, "", []string{"zone:CV1"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 45.875, "", []string{"zone:GPU"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 48.875, "", []string{"zone:tj"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 48.875, "", []string{"zone:SOC1"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.temp", 45.75, "", []string{"zone:CV2"}).Return().Times(1) + + // VDD_IN 5299mW/5299mW VDD_CPU_GPU_CV 773mW/773mW VDD_SOC 1424mW/1424mW"*/ + mock.On("Gauge", "nvidia.jetson.power.instant", 5299.0, "", []string{"probe:VDD_IN"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.power.average", 5299.0, "", []string{"probe:VDD_IN"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.power.instant", 773.0, "", []string{"probe:VDD_CPU_GPU_CV"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.power.average", 773.0, "", []string{"probe:VDD_CPU_GPU_CV"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.power.instant", 1424.0, "", []string{"probe:VDD_SOC"}).Return().Times(1) + mock.On("Gauge", "nvidia.jetson.power.average", 1424.0, "", []string{"probe:VDD_SOC"}).Return().Times(1) + + mock.On("Commit").Return().Times(1) + + err := tegraCheck.processTegraStatsOutput(voltageUnitSample) + assert.Equal(t, err, nil) + + mock.AssertExpectations(t) + mock.AssertNumberOfCalls(t, "Gauge", 44) + mock.AssertNumberOfCalls(t, "Commit", 1) +} diff --git a/pkg/collector/corechecks/nvidia/jetson/powerMetricsSender.go b/pkg/collector/corechecks/nvidia/jetson/powerMetricsSender.go index de16698675427..9670ee2a37840 100644 --- a/pkg/collector/corechecks/nvidia/jetson/powerMetricsSender.go +++ b/pkg/collector/corechecks/nvidia/jetson/powerMetricsSender.go @@ -21,7 +21,7 @@ type voltageMetricsSender struct { } func (voltageMetricsSender *voltageMetricsSender) Init() error { - regex, err := regexp.Compile(`(?P\w+)\s+(?P\d+)/(?P\d+)(?:\s+|$)`) + regex, err := regexp.Compile(`(?P\w+)\s+(?P\d+)(?:mW)?/(?P\d+)(?:mW)?(?:\s+|$)`) if err != nil { return err } diff --git a/releasenotes/notes/fix-nvidia-jetson-voltage-fields-error-1837f15ab893c309.yaml b/releasenotes/notes/fix-nvidia-jetson-voltage-fields-error-1837f15ab893c309.yaml new file mode 100644 index 0000000000000..ccc86250990d8 --- /dev/null +++ b/releasenotes/notes/fix-nvidia-jetson-voltage-fields-error-1837f15ab893c309.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fix `could not parse voltage fields` error in Nvidia Jetson integration when tegrastats output contains mW units. From 304623b44b1ab9e180ba67f99f04b8baf6d2da2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Thu, 10 Oct 2024 12:31:00 +0200 Subject: [PATCH 16/17] [EBPF] gpu: Add fatbin parser (#29918) --- go.mod | 2 +- pkg/gpu/cuda/cubin.go | 296 ++++++++++++++++++++++++++++++++ pkg/gpu/cuda/cubin_string.go | 108 ++++++++++++ pkg/gpu/cuda/fatbin.go | 261 ++++++++++++++++++++++++++++ pkg/gpu/cuda/fatbin_string.go | 25 +++ pkg/gpu/cuda/fatbin_test.go | 80 +++++++++ pkg/gpu/cuda/testdata/Makefile | 33 ++++ pkg/gpu/cuda/testdata/README.md | 5 + pkg/gpu/cuda/testdata/sample | Bin 0 -> 1048704 bytes pkg/gpu/cuda/testdata/sample.cu | 34 ++++ pkg/gpu/cuda/testdata/sample.o | Bin 0 -> 97272 bytes 11 files changed, 843 insertions(+), 1 deletion(-) create mode 100644 pkg/gpu/cuda/cubin.go create mode 100644 pkg/gpu/cuda/cubin_string.go create mode 100644 pkg/gpu/cuda/fatbin.go create mode 100644 pkg/gpu/cuda/fatbin_string.go create mode 100644 pkg/gpu/cuda/fatbin_test.go create mode 100644 pkg/gpu/cuda/testdata/Makefile create mode 100644 pkg/gpu/cuda/testdata/README.md create mode 100644 pkg/gpu/cuda/testdata/sample create mode 100644 pkg/gpu/cuda/testdata/sample.cu create mode 100644 pkg/gpu/cuda/testdata/sample.o diff --git a/go.mod b/go.mod index e1c930f803c27..6c2a739c3d56a 100644 --- a/go.mod +++ b/go.mod @@ -503,7 +503,7 @@ require ( github.com/pborman/uuid v1.2.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect - github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/pierrec/lz4/v4 v4.1.21 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/prometheus/common v0.55.0 diff --git a/pkg/gpu/cuda/cubin.go b/pkg/gpu/cuda/cubin.go new file mode 100644 index 0000000000000..3b89316324f95 --- /dev/null +++ b/pkg/gpu/cuda/cubin.go @@ -0,0 +1,296 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +// Generate String() methods for nvInfoAttr,nvInfoFormat enums so they can be printed in logs/error messages +//go:generate go run golang.org/x/tools/cmd/stringer@latest -output cubin_string.go -type=nvInfoAttr,nvInfoFormat -linecomment + +package cuda + +import ( + "bytes" + "debug/elf" + "encoding/binary" + "fmt" + "io" + "regexp" + "strings" +) + +// CubinKernelKey is the key to identify a kernel in a fatbin +type CubinKernelKey struct { + Name string + SmVersion uint32 +} + +// CubinKernel holds the information of a CUDA kernel +type CubinKernel struct { + Name string // Name of the kernel + attributes map[nvInfoAttr]nvInfoParsedItem // Attributes of the kernel + SymtabIndex int // Index of this kernel in the ELF symbol table + KernelSize uint64 // Size of the kernel in bytes + SharedMem uint64 // Size of the shared memory used by the kernel + ConstantMem uint64 // Size of the constant memory used by the kernel +} + +// nvInfoFormat defines the format (size) of a value of a .nv.info item +type nvInfoFormat uint8 + +const ( + nviFmtNone nvInfoFormat = 0x01 + nviFmtBval nvInfoFormat = 0x02 + nviFmtHval nvInfoFormat = 0x03 + nviFmtSval nvInfoFormat = 0x04 +) + +// nvInfoAttr defines the attribute of a .nv.info item +type nvInfoAttr uint8 + +const ( + nviAttrError nvInfoAttr = iota + nviAttrPad + nviAttrImageSlot + nviAttrJumptableRelocs + nviAttrCtaidzUsed + nviAttrMaxThreads + nviAttrImageOffset + nviAttrImageSize + nviAttrTextureNormalized + nviAttrSamplerInit + nviAttrParamCbank + nviAttrSmemParamOffsets + nviAttrCbankParamOffsets + nviAttrSyncStack + nviAttrTexidSampidMap + nviAttrExterns + nviAttrReqntid + nviAttrFrameSize + nviAttrMinStackSize + nviAttrSamplerForceUnnormalized + nviAttrBindlessImageOffsets + nviAttrBindlessTextureBank + nviAttrBindlessSurfaceBank + nviAttrKparamInfo + nviAttrSmemParamSize + nviAttrCbankParamSize + nviAttrQueryNumattrib + nviAttrMaxregCount + nviAttrExitInstrOffsets + nviAttrS2rctaidInstrOffsets + nviAttrCrsStackSize + nviAttrNeedCnpWrapper + nviAttrNeedCnpPatch + nviAttrExplicitCaching + nviAttrIstypepUsed + nviAttrMaxStackSize + nviAttrSuqUsed + nviAttrLdCachemodInstrOffsets + nviAttrLoadCacheRequest + nviAttrAtomSysInstrOffsets + nviAttrCoopGroupInstrOffsets + nviAttrCoopGroupMaxRegids + nviAttrSw1850030War + nviAttrWmmaUsed + nviAttrHasPreV10Object + nviAttrAtomf16EmulInstrOffsets + nviAttrAtom16EmulInstrRegMap + nviAttrRegcount + nviAttrSw2393858War + nviAttrIntWarpWideInstrOffsets + nviAttrSharedScratch + nviAttrStatistics + + // New between cuda 10.2 and 11.6 + nviAttrIndirectBranchTargets + nviAttrSw2861232War + nviAttrSwWar + nviAttrCudaAPIVersion + nviAttrNumMbarriers + nviAttrMbarrierInstrOffsets + nviAttrCoroutineResumeIDOffsets + nviAttrSamRegionStackSize + nviAttrPerRegTargetPerfStats + + // New between cuda 11.6 and 11.8 + nviAttrCtaPerCluster + nviAttrExplicitCluster + nviAttrMaxClusterRank + nviAttrInstrRegMap +) + +// nvInfoItem is the in-file representation of an item header in the .nv.info section. The value follows +// according to the format +type nvInfoItem struct { + Format nvInfoFormat + Attr nvInfoAttr +} + +type sectionParserFunc func(*elf.Section, string) error + +// cubinParser is a helper struct to parse the cubin ELF sections +type cubinParser struct { + kernels map[string]*CubinKernel + sectPrefixToParser map[string]sectionParserFunc +} + +func newCubinParser() *cubinParser { + cp := &cubinParser{ + kernels: make(map[string]*CubinKernel), + sectPrefixToParser: make(map[string]sectionParserFunc), + } + + cp.sectPrefixToParser[".nv.info"] = cp.parseNvInfoSection + cp.sectPrefixToParser[".text"] = cp.parseTextSection + cp.sectPrefixToParser[".nv.shared"] = cp.parseSharedMemSection + cp.sectPrefixToParser[".nv.constant"] = cp.parseConstantMemSection + + return cp +} + +func (cp *cubinParser) getOrCreateKernel(name string) *CubinKernel { + if _, ok := cp.kernels[name]; !ok { + cp.kernels[name] = &CubinKernel{ + Name: name, + } + } + return cp.kernels[name] +} + +const elfVersionOffset = 20 + +func (cp *cubinParser) parseCubinElf(data []byte) error { + // Hacks to be able to parse the ELF: the ELF version is not supported by the Go ELF parser, so we need to + // trick it into thinking it's the old version. Check for boundaries first + if len(data) <= elfVersionOffset { + return fmt.Errorf("invalid cubin data, too short") + } + data[elfVersionOffset] = 1 + + cubinElf, err := elf.NewFile(bytes.NewReader(data)) + if err != nil { + return fmt.Errorf("failed to parse cubin ELF: %w", err) + } + defer cubinElf.Close() + + // Iterate through all the sections, parse all the ones we know how to parse + for _, sect := range cubinElf.Sections { + for prefix, parser := range cp.sectPrefixToParser { + prefixWithDot := prefix + "." + + if !strings.HasPrefix(sect.Name, prefix) { + continue + } + + var kernelName string + if strings.HasPrefix(sect.Name, prefixWithDot) { + kernelName = strings.TrimPrefix(sect.Name, prefixWithDot) + } + + err = parser(sect, kernelName) + if err != nil { + return fmt.Errorf("failed to parse section %s: %w", sect.Name, err) + } + } + } + + return nil +} + +// nvInfoParsedItem is the parsed representation of an item in the .nv.info section, including the value +type nvInfoParsedItem struct { + nvInfoItem + value []byte +} + +func (cp *cubinParser) parseNvInfoSection(sect *elf.Section, kernelName string) error { + items := make(map[nvInfoAttr]nvInfoParsedItem) + buffer := sect.Open() + + for { + var item nvInfoItem + if err := binary.Read(buffer, binary.LittleEndian, &item); err != nil { + if err == io.EOF { + break + } + + return fmt.Errorf("failed to read item: %w", err) + } + + var valueSize int + + switch item.Format { + case nviFmtBval: + valueSize = 1 + case nviFmtHval: + valueSize = 2 + case nviFmtSval: + var nval uint16 + if err := binary.Read(buffer, binary.LittleEndian, &nval); err != nil { + return fmt.Errorf("failed to parse value size: %w", err) + } + valueSize = int(nval) + case nviFmtNone: + valueSize = 2 // Doesn't really make sense as that data isn't used, but we need to skip it + default: + return fmt.Errorf("unsupported nvInfoFormat %d", item.Format) + } + + parsedItem := nvInfoParsedItem{ + nvInfoItem: item, + value: make([]byte, valueSize), + } + if _, err := io.ReadFull(buffer, parsedItem.value); err != nil { + return fmt.Errorf("failed to read value: %w", err) + } + items[item.Attr] = parsedItem + } + + if kernelName != "" { + cp.getOrCreateKernel(kernelName).attributes = items + } + + return nil +} + +func (cp *cubinParser) parseTextSection(sect *elf.Section, kernelName string) error { + if kernelName == "" { + return nil + } + + kernel := cp.getOrCreateKernel(kernelName) + kernel.SymtabIndex = int(sect.Info & 0xff) + kernel.KernelSize = sect.Size + + return nil +} + +func (cp *cubinParser) parseSharedMemSection(sect *elf.Section, kernelName string) error { + if kernelName == "" { + return nil + } + + kernel := cp.getOrCreateKernel(kernelName) + kernel.SharedMem = sect.Size + + return nil +} + +var constantSectNameRegex = regexp.MustCompile(`\.nv\.constant\d\.(.*)`) + +func (cp *cubinParser) parseConstantMemSection(sect *elf.Section, _ string) error { + // Constant memory sections are named .nv.constantX.Y where X is the constant memory index and Y is the name + // so we have to do some custom parsing + match := constantSectNameRegex.FindStringSubmatch(sect.Name) + if match == nil { + // Not a constant memory section. We might be missing the kernel name, for example, which happens + // on some binaries. In that case just ignore the section + return nil + } + + kernelName := match[1] + kernel := cp.getOrCreateKernel(kernelName) + kernel.ConstantMem += sect.Size + + return nil +} diff --git a/pkg/gpu/cuda/cubin_string.go b/pkg/gpu/cuda/cubin_string.go new file mode 100644 index 0000000000000..3558bc610621b --- /dev/null +++ b/pkg/gpu/cuda/cubin_string.go @@ -0,0 +1,108 @@ +// Code generated by "stringer -output cubin_string.go -type=nvInfoAttr,nvInfoFormat -linecomment"; DO NOT EDIT. + +package cuda + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[nviAttrError-0] + _ = x[nviAttrPad-1] + _ = x[nviAttrImageSlot-2] + _ = x[nviAttrJumptableRelocs-3] + _ = x[nviAttrCtaidzUsed-4] + _ = x[nviAttrMaxThreads-5] + _ = x[nviAttrImageOffset-6] + _ = x[nviAttrImageSize-7] + _ = x[nviAttrTextureNormalized-8] + _ = x[nviAttrSamplerInit-9] + _ = x[nviAttrParamCbank-10] + _ = x[nviAttrSmemParamOffsets-11] + _ = x[nviAttrCbankParamOffsets-12] + _ = x[nviAttrSyncStack-13] + _ = x[nviAttrTexidSampidMap-14] + _ = x[nviAttrExterns-15] + _ = x[nviAttrReqntid-16] + _ = x[nviAttrFrameSize-17] + _ = x[nviAttrMinStackSize-18] + _ = x[nviAttrSamplerForceUnnormalized-19] + _ = x[nviAttrBindlessImageOffsets-20] + _ = x[nviAttrBindlessTextureBank-21] + _ = x[nviAttrBindlessSurfaceBank-22] + _ = x[nviAttrKparamInfo-23] + _ = x[nviAttrSmemParamSize-24] + _ = x[nviAttrCbankParamSize-25] + _ = x[nviAttrQueryNumattrib-26] + _ = x[nviAttrMaxregCount-27] + _ = x[nviAttrExitInstrOffsets-28] + _ = x[nviAttrS2rctaidInstrOffsets-29] + _ = x[nviAttrCrsStackSize-30] + _ = x[nviAttrNeedCnpWrapper-31] + _ = x[nviAttrNeedCnpPatch-32] + _ = x[nviAttrExplicitCaching-33] + _ = x[nviAttrIstypepUsed-34] + _ = x[nviAttrMaxStackSize-35] + _ = x[nviAttrSuqUsed-36] + _ = x[nviAttrLdCachemodInstrOffsets-37] + _ = x[nviAttrLoadCacheRequest-38] + _ = x[nviAttrAtomSysInstrOffsets-39] + _ = x[nviAttrCoopGroupInstrOffsets-40] + _ = x[nviAttrCoopGroupMaxRegids-41] + _ = x[nviAttrSw1850030War-42] + _ = x[nviAttrWmmaUsed-43] + _ = x[nviAttrHasPreV10Object-44] + _ = x[nviAttrAtomf16EmulInstrOffsets-45] + _ = x[nviAttrAtom16EmulInstrRegMap-46] + _ = x[nviAttrRegcount-47] + _ = x[nviAttrSw2393858War-48] + _ = x[nviAttrIntWarpWideInstrOffsets-49] + _ = x[nviAttrSharedScratch-50] + _ = x[nviAttrStatistics-51] + _ = x[nviAttrIndirectBranchTargets-52] + _ = x[nviAttrSw2861232War-53] + _ = x[nviAttrSwWar-54] + _ = x[nviAttrCudaAPIVersion-55] + _ = x[nviAttrNumMbarriers-56] + _ = x[nviAttrMbarrierInstrOffsets-57] + _ = x[nviAttrCoroutineResumeIDOffsets-58] + _ = x[nviAttrSamRegionStackSize-59] + _ = x[nviAttrPerRegTargetPerfStats-60] + _ = x[nviAttrCtaPerCluster-61] + _ = x[nviAttrExplicitCluster-62] + _ = x[nviAttrMaxClusterRank-63] + _ = x[nviAttrInstrRegMap-64] +} + +const _nvInfoAttr_name = "nviAttrErrornviAttrPadnviAttrImageSlotnviAttrJumptableRelocsnviAttrCtaidzUsednviAttrMaxThreadsnviAttrImageOffsetnviAttrImageSizenviAttrTextureNormalizednviAttrSamplerInitnviAttrParamCbanknviAttrSmemParamOffsetsnviAttrCbankParamOffsetsnviAttrSyncStacknviAttrTexidSampidMapnviAttrExternsnviAttrReqntidnviAttrFrameSizenviAttrMinStackSizenviAttrSamplerForceUnnormalizednviAttrBindlessImageOffsetsnviAttrBindlessTextureBanknviAttrBindlessSurfaceBanknviAttrKparamInfonviAttrSmemParamSizenviAttrCbankParamSizenviAttrQueryNumattribnviAttrMaxregCountnviAttrExitInstrOffsetsnviAttrS2rctaidInstrOffsetsnviAttrCrsStackSizenviAttrNeedCnpWrappernviAttrNeedCnpPatchnviAttrExplicitCachingnviAttrIstypepUsednviAttrMaxStackSizenviAttrSuqUsednviAttrLdCachemodInstrOffsetsnviAttrLoadCacheRequestnviAttrAtomSysInstrOffsetsnviAttrCoopGroupInstrOffsetsnviAttrCoopGroupMaxRegidsnviAttrSw1850030WarnviAttrWmmaUsednviAttrHasPreV10ObjectnviAttrAtomf16EmulInstrOffsetsnviAttrAtom16EmulInstrRegMapnviAttrRegcountnviAttrSw2393858WarnviAttrIntWarpWideInstrOffsetsnviAttrSharedScratchnviAttrStatisticsnviAttrIndirectBranchTargetsnviAttrSw2861232WarnviAttrSwWarnviAttrCudaAPIVersionnviAttrNumMbarriersnviAttrMbarrierInstrOffsetsnviAttrCoroutineResumeIDOffsetsnviAttrSamRegionStackSizenviAttrPerRegTargetPerfStatsnviAttrCtaPerClusternviAttrExplicitClusternviAttrMaxClusterRanknviAttrInstrRegMap" + +var _nvInfoAttr_index = [...]uint16{0, 12, 22, 38, 60, 77, 94, 112, 128, 152, 170, 187, 210, 234, 250, 271, 285, 299, 315, 334, 365, 392, 418, 444, 461, 481, 502, 523, 541, 564, 591, 610, 631, 650, 672, 690, 709, 723, 752, 775, 801, 829, 854, 873, 888, 910, 940, 968, 983, 1002, 1032, 1052, 1069, 1097, 1116, 1128, 1149, 1168, 1195, 1226, 1251, 1279, 1299, 1321, 1342, 1360} + +func (i nvInfoAttr) String() string { + if i >= nvInfoAttr(len(_nvInfoAttr_index)-1) { + return "nvInfoAttr(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _nvInfoAttr_name[_nvInfoAttr_index[i]:_nvInfoAttr_index[i+1]] +} +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[nviFmtNone-1] + _ = x[nviFmtBval-2] + _ = x[nviFmtHval-3] + _ = x[nviFmtSval-4] +} + +const _nvInfoFormat_name = "nviFmtNonenviFmtBvalnviFmtHvalnviFmtSval" + +var _nvInfoFormat_index = [...]uint8{0, 10, 20, 30, 40} + +func (i nvInfoFormat) String() string { + i -= 1 + if i >= nvInfoFormat(len(_nvInfoFormat_index)-1) { + return "nvInfoFormat(" + strconv.FormatInt(int64(i+1), 10) + ")" + } + return _nvInfoFormat_name[_nvInfoFormat_index[i]:_nvInfoFormat_index[i+1]] +} diff --git a/pkg/gpu/cuda/fatbin.go b/pkg/gpu/cuda/fatbin.go new file mode 100644 index 0000000000000..09ea20e05cd27 --- /dev/null +++ b/pkg/gpu/cuda/fatbin.go @@ -0,0 +1,261 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +// This file contains a parser for the Cubin/Fatbin format. +// References: +// - https://github.com/VivekPanyam/cudaparsers +// - https://pdfs.semanticscholar.org/5096/25785304410039297b741ad2007e7ce0636b.pdf +// - https://github.com/cloudcores/CuAssembler/blob/master/CuAsm/CuNVInfo.py +// - https://datadoghq.atlassian.net/wiki/spaces/EBPFTEAM/pages/4084204125/Fatbin+Cubin+binary+format + +// Generate String() methods for fatbinDataKind enums so they can be printed in logs/error messages +//go:generate go run golang.org/x/tools/cmd/stringer@latest -output fatbin_string.go -type=fatbinDataKind -linecomment + +// Package cuda provides helpers for CUDA binary parsing +package cuda + +import ( + "debug/elf" + "encoding/binary" + "fmt" + "io" + "unsafe" + + "github.com/pierrec/lz4/v4" +) + +type fatbinDataKind uint16 + +const fatbinDataKindPtx fatbinDataKind = 1 +const fatbinDataKindSm fatbinDataKind = 2 + +const fatbinMagic uint32 = 0xBA55ED50 +const fatbinHeaderVersion uint16 = 1 +const fatbinDataVersion uint16 = 0x0101 +const fatbinDataMinKind = fatbinDataKindPtx +const fatbinDataMaxKind = fatbinDataKindSm + +// Fatbin holds all CUDA binaries found in one fatbin package +type Fatbin struct { + Kernels map[CubinKernelKey]*CubinKernel +} + +// GetKernel returns the kernel with the given name and SM version from the fatbin +func (fb *Fatbin) GetKernel(name string, smVersion uint32) *CubinKernel { + key := CubinKernelKey{Name: name, SmVersion: smVersion} + if _, ok := fb.Kernels[key]; !ok { + return nil + } + return fb.Kernels[key] +} + +type fatbinHeader struct { + Magic uint32 + Version uint16 + HeaderSize uint16 + FatSize uint64 // not including the header +} + +func (fbh *fatbinHeader) validate() error { + if fbh.Magic != fatbinMagic { + return fmt.Errorf("invalid fatbin header, magic number %x does not match expected %x", fbh.Magic, fatbinMagic) + } + if fbh.Version != fatbinHeaderVersion { + return fmt.Errorf("invalid fatbin header, version %d does not match expected %d", fbh.Version, fatbinHeaderVersion) + } + + return nil +} + +type fatbinData struct { + Kind uint16 + Version uint16 + HeaderSize uint32 + PaddedPayloadSize uint32 + Unknown0 uint32 // check if it's written into separately + PayloadSize uint32 + Unknown1 uint32 + Unknown2 uint32 + SmVersion uint32 + BitWidth uint32 + Unknown3 uint32 + Unknown4 uint64 + Unknown5 uint64 + UncompressedPayloadSize uint64 +} + +func (fbd *fatbinData) dataKind() fatbinDataKind { + return fatbinDataKind(fbd.Kind) +} + +func (fbd *fatbinData) validate() error { + dataKind := fbd.dataKind() + if dataKind < fatbinDataMinKind || dataKind > fatbinDataMaxKind { + return fmt.Errorf("kind %d is not in the expected range [%d, %d]", dataKind, fatbinDataMinKind, fatbinDataMaxKind) + } + if fbd.Version != fatbinDataVersion { + return fmt.Errorf("version %d does not match expected %d", fbd.Version, fatbinDataVersion) + } + + return nil +} + +// ParseFatbinFromELFFilePath opens the given path and parses the resulting ELF for CUDA kernels +func ParseFatbinFromELFFilePath(path string) (*Fatbin, error) { + elfFile, err := elf.Open(path) + if err != nil { + return nil, fmt.Errorf("failed to open ELF file %s: %w", path, err) + } + defer elfFile.Close() + + return ParseFatbinFromELFFile(elfFile) +} + +func getBufferOffset(buf io.Seeker) int64 { + offset, _ := buf.Seek(0, io.SeekCurrent) + return offset +} + +// ParseFatbinFromELFFile parses the fatbin sections of the given ELF file and returns the information found in it +func ParseFatbinFromELFFile(elfFile *elf.File) (*Fatbin, error) { + fatbin := &Fatbin{ + Kernels: make(map[CubinKernelKey]*CubinKernel), + } + + for _, sect := range elfFile.Sections { + // CUDA embeds the fatbin data in sections named .nv_fatbin or __nv_relfatbin + if sect.Name != ".nv_fatbin" && sect.Name != "__nv_relfatbin" { + continue + } + + // Use the Open method to avoid reading everything into memory + buffer := sect.Open() + + // The fatbin format will have a header, then a sequence of data headers + payloads. + // After the data corresponding to the first header, we might have more headers so + // we need to loop until we reach the end of the section data. + // Illustration of the format + // + // fatbinHeader (16 bytes) + // fatbinDataHeader (64 bytes minimum) + // fatbinDataPayload (variable size) + // fatbinDataHeader (64 bytes minimum) + // fatbinDataPayload (variable size) + // fatbinHeader (16 bytes) + // fatbinDataHeader (64 bytes minimum) + // fatbinDataPayload (variable size) + for { + var fbHeader fatbinHeader + err := binary.Read(buffer, binary.LittleEndian, &fbHeader) + if err != nil { + if err == io.EOF { + break + } + + return nil, fmt.Errorf("failed to parse fatbin header: %w", err) + } + + // Check the header is valid + if err := fbHeader.validate(); err != nil { + return nil, fmt.Errorf("invalid fatbin header: %w", err) + } + + // We need to read only up to the size given to us by the header, not to the end of the section. + readStart := getBufferOffset(buffer) + for currOffset := getBufferOffset(buffer); uint64(currOffset-readStart) < fbHeader.FatSize; currOffset = getBufferOffset(buffer) { + if err := parseFatbinData(buffer, fatbin); err != nil { + if err == io.EOF { + break + } + + return nil, fmt.Errorf("failed to parse fatbin data: %w", err) + } + } + } + } + + return fatbin, nil +} + +func parseFatbinData(buffer io.ReadSeeker, fatbin *Fatbin) error { + // Each data section starts with a data header, read it + var fbData fatbinData + err := binary.Read(buffer, binary.LittleEndian, &fbData) + if err != nil { + if err == io.EOF { + return err + } + + return fmt.Errorf("failed to parse fatbin data: %w", err) + } + + // Check that we have a valid header + if err := fbData.validate(); err != nil { + return fmt.Errorf("invalid fatbin data: %w", err) + } + + // The header size is the size of the struct, but the actual header in file might be larger + // If that's the case, we need to skip the rest of the header + fatbinDataSize := uint32(unsafe.Sizeof(fbData)) + if fbData.HeaderSize > fatbinDataSize { + _, err = buffer.Seek(int64(fbData.HeaderSize-fatbinDataSize), io.SeekCurrent) + if err != nil { + return fmt.Errorf("failed to skip rest of fatbin data header: %w", err) + } + } + + if fbData.dataKind() != fatbinDataKindSm { + // We only support SM data for now, skip this one + _, err := buffer.Seek(int64(fbData.PaddedPayloadSize), io.SeekCurrent) + if err != nil { + return fmt.Errorf("failed to skip PTX fatbin data: %w", err) + } + + return nil // Skip this data section + } + + // Now read the payload. Fatbin format could have both compressed and uncompressed payloads. The way this is + // determined is by the UncompressedPayloadSize field. If it's non-zero, it indicates the size the payload will + // have once uncompressed. If it's zero, the payload is not compressed. + var payload []byte + if fbData.UncompressedPayloadSize != 0 { + compressedPayload := make([]byte, fbData.PaddedPayloadSize) + _, err := io.ReadFull(buffer, compressedPayload) + if err != nil { + return fmt.Errorf("failed to read fatbin compressed payload: %w", err) + } + + // Keep only the actual payload, ignore the padding for the uncompression + compressedPayload = compressedPayload[:fbData.PayloadSize] + + payload = make([]byte, fbData.UncompressedPayloadSize) + _, err = lz4.UncompressBlock(compressedPayload, payload) + if err != nil { + return fmt.Errorf("failed to decompress fatbin payload: %w", err) + } + } else { + payload = make([]byte, fbData.PaddedPayloadSize) + _, err := io.ReadFull(buffer, payload) + if err != nil { + return fmt.Errorf("failed to read fatbin payload: %w", err) + } + } + + // The payload is a cubin ELF, parse it with the cubin parser + parser := newCubinParser() + err = parser.parseCubinElf(payload) + if err != nil { + return fmt.Errorf("failed to parse cubin ELF: %w", err) + } + + // Retrieve all the kernels found in the cubin parser and add them to the fatbin, including + // the SM version they were compiled for which is only available in the fatbin data + for _, kernel := range parser.kernels { + key := CubinKernelKey{Name: kernel.Name, SmVersion: fbData.SmVersion} + fatbin.Kernels[key] = kernel + } + + return nil +} diff --git a/pkg/gpu/cuda/fatbin_string.go b/pkg/gpu/cuda/fatbin_string.go new file mode 100644 index 0000000000000..0eba866243604 --- /dev/null +++ b/pkg/gpu/cuda/fatbin_string.go @@ -0,0 +1,25 @@ +// Code generated by "stringer -output fatbin_string.go -type=fatbinDataKind -linecomment"; DO NOT EDIT. + +package cuda + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[fatbinDataKindPtx-1] + _ = x[fatbinDataKindSm-2] +} + +const _fatbinDataKind_name = "fatbinDataKindPtxfatbinDataKindSm" + +var _fatbinDataKind_index = [...]uint8{0, 17, 33} + +func (i fatbinDataKind) String() string { + i -= 1 + if i >= fatbinDataKind(len(_fatbinDataKind_index)-1) { + return "fatbinDataKind(" + strconv.FormatInt(int64(i+1), 10) + ")" + } + return _fatbinDataKind_name[_fatbinDataKind_index[i]:_fatbinDataKind_index[i+1]] +} diff --git a/pkg/gpu/cuda/fatbin_test.go b/pkg/gpu/cuda/fatbin_test.go new file mode 100644 index 0000000000000..54eb62729c8ec --- /dev/null +++ b/pkg/gpu/cuda/fatbin_test.go @@ -0,0 +1,80 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2024-present Datadog, Inc. + +//go:build linux_bpf + +package cuda + +import ( + "path/filepath" + "testing" + + "golang.org/x/exp/maps" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" +) + +// The test data is a CUDA fatbin file compiled with the Makefile present in the same directory. +func getCudaSample(t testing.TB) string { + curDir, err := testutil.CurDir() + require.NoError(t, err) + + sample := filepath.Join(curDir, "testdata", "sample") + require.FileExists(t, sample) + + return sample +} + +func TestParseFatbinFromPath(t *testing.T) { + path := getCudaSample(t) + res, err := ParseFatbinFromELFFilePath(path) + require.NoError(t, err) + + kern1MangledName := "_Z7kernel1Pfi" // = kernel1(float*) + kern2MangledName := "_Z7kernel2Pfi" // = kernel2(float*) + + seenSmVersionsAndKernels := make(map[uint32][]string) + + expectedSharedMemSizes := map[string]uint64{ + kern1MangledName: 0, + kern2MangledName: 256, + } + + for key, kernel := range res.Kernels { + seenSmVersionsAndKernels[key.SmVersion] = append(seenSmVersionsAndKernels[key.SmVersion], key.Name) + require.Equal(t, key.Name, kernel.Name) + + expectedMemSize, ok := expectedSharedMemSizes[key.Name] + require.True(t, ok, "unexpected kernel %s", key.Name) + + // The memory sizes are different for sm_90, checked with cuobjdump + if key.SmVersion != 90 { + require.Equal(t, expectedMemSize, kernel.SharedMem, "unexpected shared memory size for kernel %s, sm=%d", key.Name, key.SmVersion) + } + + require.Greater(t, kernel.KernelSize, uint64(0), "unexpected kernel size for kernel %s, sm=%d", key.Name, key.SmVersion) + } + + // From the Makefile, all the -gencode arch=compute_XX,code=sm_XX flags + expectedSmVersions := []uint32{50, 52, 60, 61, 70, 75, 80, 86, 89, 90} + require.ElementsMatch(t, expectedSmVersions, maps.Keys(seenSmVersionsAndKernels)) + + // Check that all the kernels are present in each version + for version, kernelNames := range seenSmVersionsAndKernels { + require.ElementsMatch(t, []string{kern1MangledName, kern2MangledName}, kernelNames, "missing kernels for version %d", version) + } +} + +func BenchmarkParseFatbinFromPath(b *testing.B) { + path := getCudaSample(b) + for i := 0; i < b.N; i++ { + _, err := ParseFatbinFromELFFilePath(path) + if err != nil { + b.Fatalf("unexpected error: %v", err) + } + } +} diff --git a/pkg/gpu/cuda/testdata/Makefile b/pkg/gpu/cuda/testdata/Makefile new file mode 100644 index 0000000000000..8cd04ebcdd52e --- /dev/null +++ b/pkg/gpu/cuda/testdata/Makefile @@ -0,0 +1,33 @@ +NVCC = /usr/local/cuda/bin/nvcc + +all: sample + +sample.o: sample.cu + $(NVCC) -ccbin g++ -m64 -Xcompiler -ggdb -Xcompiler -pg --threads 0 --std=c++11 \ + -gencode arch=compute_50,code=sm_50 \ + -gencode arch=compute_52,code=sm_52 \ + -gencode arch=compute_60,code=sm_60 \ + -gencode arch=compute_61,code=sm_61 \ + -gencode arch=compute_70,code=sm_70 \ + -gencode arch=compute_75,code=sm_75 \ + -gencode arch=compute_80,code=sm_80 \ + -gencode arch=compute_86,code=sm_86 \ + -gencode arch=compute_89,code=sm_89 \ + -gencode arch=compute_90,code=sm_90 \ + -gencode arch=compute_90,code=compute_90 \ + -o sample.o -c sample.cu + +sample: sample.o + $(NVCC) -ccbin g++ -m64 -Xcompiler -ggdb -Xcompiler -pg \ + -gencode arch=compute_50,code=sm_50 \ + -gencode arch=compute_52,code=sm_52 \ + -gencode arch=compute_60,code=sm_60 \ + -gencode arch=compute_61,code=sm_61 \ + -gencode arch=compute_70,code=sm_70 \ + -gencode arch=compute_75,code=sm_75 \ + -gencode arch=compute_80,code=sm_80 \ + -gencode arch=compute_86,code=sm_86 \ + -gencode arch=compute_89,code=sm_89 \ + -gencode arch=compute_90,code=sm_90 \ + -gencode arch=compute_90,code=compute_90 \ + -o sample sample.o diff --git a/pkg/gpu/cuda/testdata/README.md b/pkg/gpu/cuda/testdata/README.md new file mode 100644 index 0000000000000..9cc17bf246126 --- /dev/null +++ b/pkg/gpu/cuda/testdata/README.md @@ -0,0 +1,5 @@ +This folder contains sample data to test the fatbin parser. The sample.cu file can be compiled just with running `make`. + +The compiler required is `nvcc`, to install in Ubuntu run `sudo apt-get install nvidia-cuda-dev`. Use `cuobjdump` (from the same package) to dump the fatbin file manually and check the results. + +The sample binary is checked into source for tests, to avoid having the dependency on the compiler in the CI. diff --git a/pkg/gpu/cuda/testdata/sample b/pkg/gpu/cuda/testdata/sample new file mode 100644 index 0000000000000000000000000000000000000000..5796cba02a7a5a5b7be57cdbf1439ba1663e436d GIT binary patch literal 1048704 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%0DbWh08sOre1X$^R$C`dYgHA zi+O5BKe~~5+R8j-qu=d}p7c$8o9^T|mpPh&esv(V$#0;(`DRauS-ZRn-G^$KXRtpM z$WNgcynEy)87=RnlXp0M@#5QW_a8v_aI-ltaR;)=Bl?pks#-R#(f~Q!S(|^Lzgc4} zxo{#ihn0hND|&-skJ0i7YrD?vUQ9fa_|%#_lNWWT)IOa0d%7YZgBbpiLiK|eE0 z*lngxw{vDth7>#CoHPCBgRh$t$ph*^Ukbbme}cXEzr4dZpTPe` zc|fN_ze?Tsz~V2^Z$pOnC-jGN-NcemC$%qhi$3gq`{#M;P ze3)dY)$A$aVb4HrElVITE&m1cw8SX3lmT0fe^xX6O7Q*facyvW3vKDf_MG8beuVjw zzM~Ypo`#+y3%{9^POMG(mWWPFIDQ>_OgE2v@d)-84}7qr(^9@!=|C3PIONm=uD9#$ zDxYj88!lZ(kt^P;2V8I03zkozbRoLm)SflIvJ`RF%32T!M=-{{3UIK+N(PpE75NRS%f^J9B>zp8q6zvB~I1BDud9{YZcGBO~m6)Y6Ywb-uKR zj-~I~L$3pu#LJ3T_z`^3K6Dnxg?!KOt$|#@qze&TaSI`=_mTT8{|{Z;m;Zu!R$q_6 zio6bZ-HU6E5Kk7&BX_ii*T9EqEX!JDGi>ANW88e3lP_>Q_J>u_A^A+`ogcHG$ZtY2 z#aC{RDN}4@FWJgovW30m9rluK$ON0&OWtKKnaUpVohQ25k{=>X`5}JnHKvd470-9*1JnDe+e{7aP8XxBgWL*H`{uB<=nmi8YQ^7m%2Nf zdi!RZ28u?JsMCb2W_gx7&D7gB-#*h{#J>9-@Ef2}y5H2_y0HtO?`XE|4)QM+jS^gX zeQbRujhfDUTKe1A(lX@rX7oXh{&p&3CmmZIJmw6pYht~gY15}z=+ks?^CxcNSM`8xK_9l#UN z->w&Zb7PCP^|vnQQ!Mk@4gKv{>XknWeF}v>RYIQzK%b7XPpe-ReX{CY&PH!PRDEZk z)_!LCR^j(j!h0OOSv~X}nK>x-^W>Op-K+gmxPBo=d}vJFka984WIXU~GwT#P|L^91 zhn98j9_$a%PVf7QYGzrwUuZvk&IrEG@nJW0m6=9vH{{>vSzGt8u2jQ;nh|FGhSQOM zdm#VzL;mfH{JVr&4LQia1CW1r;P3x6GDJLe83v+Hn!TZdfB+_t>Y-?dzFI(+!j9?aW2@ZpzqGCqigHzDUljqCOa{tfWQlAU>|Y4^~& zTi{~d;S=S;{xS?+SG)htFMr`8SFE}2pJ#u@r#@#Gxs|eGjKXsK1D$n0ow3sxlQ*X3 zMXod0Z)E=$U*cii<10`zg>^Zf@m?D7aYp=WsooFa&u6kOH`)C8CaMg(M5j4 z?xca_Cb@z7dBxC!#xQEHVyAD6vT`Ri#xhpyL5+!wrH-k<8N)^|aK^9!+&|8<6SIxA z8_8);Ui3UdGsq4`{vLZa1RitYl90e;#nv;Tps|6qsY_ zs%~J+2XUSYY!>GQjAdalYuXDz-u#PDS=eOP(BoYN z{I`lch~M*#@>wRAqKUsdum7F@7Oh*>ht|x+@-t=KKEfK^$$uA^?WF1?+RJGB%(hjR zS-REp?CVolv%3Bq`}*aqQC**FU!O=@*Pmfu{|IYV*Y~5H%X-z^{+T(JKmIV66_7U6#gDrR#?OEu%mUktOj63N-9kqovyOXvZ;#>E2$a&`j@0IfozS_)rR|bA9 z2+Db9fcMII=L7GR^R5iM*Ec`FvkRDmHRc*1CJ6j*Kvx*tF6hv1z>mBgyhFR8r42rd zb3L<>9LRO}Ea<)$X&)#4Xqlhukj0K8=MCa~8RyIO{vY^1hMKA+;J?n}IWGtQb)L-m zD)67W%xls)uc!YyCkIDOvr+MqOY|e=z?$y@CeELVcI16dJ|Wh@`Os~RK^bGP2Apxm ze;R&Kb>E&m{-W2L7=Pi~c*b8fP@jcnZ?oL)$ z*`n8~s~+55!O(>C`9#@V9T;pX@!GUiELc)$L) zX|~4Sq1hULhh}U19h$B2??|%~`A>94W9zKxFHN0=wKpa1v-)*4|7raO>lL&|{+Zkp z-w|K(W~=SZ^0P0a|BjFSQ!&IALodf76HG)l?g}q80sh^z?ZU&4gHKir>T|@Odf=61 z_pL-ewrsv0@5we_5B72cUjq;Er?UBayeHgI#GiV+i?BDWn&Sdp-BY#;k zeAVDYBX<^SeqwbVxmQC=pHDCfBf`+<6B9ONH91pV(WT-17mlCZJMl*D)Yp_xGp6(= zYPoferG69tP5%>lJIOu!PMlE~hpu*MoRK@@NvjU&d%ENcg{BUmqe&#oDd=tNjMO?EAJy0)>`>{uixFg)w zfrNW6Wj>#$9UZYVWAUma+E-<^fuq~tI8mCHv%zU8yCz#ld&zm>I&^TW`ib>Kx7`3KdPO7=eaXjC2xe<-HH4jUmcRH#ju8%o6Y__3;*_JPc@K}57sr)e{53VD2MC(-Y z%ExY3g>kuMBiGv7HQbIZz&8V3`G?6t_OrA4TDn(cy_#)Yr+1*2YmN1F;(WUzpZDRL zMi6g10ehF?d@njxoGDfaJnDb6?Bw4Y7jy(PT&U&Z+z zu=n|nalX6AchZ7y*D-V;8i$9|j9hrbR$ISxc2khOW#?Q1J$ev&v{d>!bafA*d;1gm zx-xX08vo(w?cUGP7{qudpu2mPqa{hR9cK4H?U>W~U zjog*7_Pu29C&c=0$H!2%&Qx%_#kO_gJ5qB5+LQ$^AsJq{Af643YB_O0&NU6gKl+j+}q1@I!L`@j#8P(;66P%lV%c?F z>0#l!GWM1wdsVk~i(#}(q<(A;^gwk>uLJL=MC{6V;H6}<4&-IvvF!RonA-u+{_{Pm z*S9Mpetoj{7QQ3bL!M9R3E*Kj0hgYjgy(m?Kbbm_WBqRdpO1d8C;Z2^Hhx=jeuBxz z3b%*bxGh`}&fEgskgY-A;OG2vzGpo(Ar<%L{4e{1@VQqO`5gKGM%t&?@0Xf7PkX-? z9eIjpxflZ{Z*RBWZGJYj>>23=M($&*t##1mM@5%eTi1Hh@)KEG53;t(?6q|dYwOVb zMDOoeTNSLW*U-Ja&VDn3|E95CKEET;`_{O^{OWm$tf#pAt{g99pWni z<9`btj6er5oIPUNyq6#U9RC5;!<}q|jLsu2CC^QK7;!0zi@1>IUBUCVa9v-nQ+?ex z$%jxtTtorS8%{mko5724p6B6t#vLy|9>aT|qaJR&D{S;tb7%Myc-|Fr&-8bL|Lkn* zfvmXc&Zhss+4v8+z!}vs(N6`De2K zFkjS1G3nnr@JTo^yT3)Rop>AV`BRAz(|-RDICUpDwFG)CKhUp>*Wa)p z-n-4?$)C*s*Oe6J_oV#}F*R=5KEA^R56}<$)LpcfLCjh@sEPW3f7|gpreDh zZ;(l2Cz&)>Fwxjy+^0MbsGy6)yB#!0Rg0y;I;9E^&#@X8X@zUBzVh zYU5ci>wu@eo(`S;oj-|na`T+C{b#bCx&iM3d{X!)8C@SpH|cB-;4`4JU7)iUv5wR) zi_Tj4jac}#dwW}UUeQ_UAY}{L4y`E<;w2`6n?1nyP;gVe)C<8)`B4iuUz``}l^^x* z!A<#5AHuJD`yHX))$kMK8ArwmMaC)2FW@*If9kpgp@iE+z%z$>Ux4_s<~<+5mAFpqo&_^mZlPQMO8LeDAvPRY>)XIFJ!%J(fV*Dn*PgS_%VM&`v^R;i~CN;$MIFx&A`Y_86)2I zcpG9oi|dH}$quqlXs)$pjIJlInRW1}w=nJxF|M6hGnd(GMzJGhtQmtfV|26PMzm(c zL&&E?7wMjZbj@fX5V@fTLy$c_F>ZN5afAK<=$ z;Qni7+{je_2-b|ADc(ctVhJ!SZe*PQ2AeO@T3f($A;dm?*|vtDGca@LLh+hxm1@)vUCBo}$g9lrKdH3!Ahx_Ryp#(}!JX55i@+I(=w z=OHc@+zADjb{Ou(ap2DtaYju!cI}IWBiP0q|FSa1-Ut4aW0Q`Ne;F{*<1FU-D6kpe zPx2a!^5SsxBgHY7`z0Scv^jz;*Om2 zV*6ZlyaL+zB;UU9-z>Y3bB*#dtY=M~|4aM-ujKzK_NFR)b9j%*GwV4Ec#dP!zV0-O zZ+7tcQtq+%XUneS$l<#F$=z+agUuWb@SwXrsl<4vRR1R4u6dcQ*bY}!9sJdH`kHph z0Blfc2kOvix;@4=@@G|F&_SmuTZ(j=#psl!)08ezI?X0@$xfQMwiM|!E72)C zI>}ksLL#KsWZsUWr;%N%kMxXoTXw17w(L^D?O7e#$FP00gWGNDKbbmCJ-0W{*SnTs z4;h4eaxk)Oz+Is9FTaR62>#>V$ zJ$8|;$1bw<*hSJ~_c97=SlfP2NOcY4EBm+82D#g{YZ%XV@DA-7Y<}(Fc01q>G3Qv% zeVXU%UDU8xTLT~B_jIa0o@}gL&iSLjmUCW%9(!G}QGr0Zwg!9Ix-#mjByoM zaf{Bem#wR#HlEJ0m#u3uDxSgisCV6xXxYo&MOUfX5hc`h(7I}XpCE6)xvu7Rw%65Z z#^84u*J5O0?VH3clK*pd`~08IynzQRn73(W+sglWoc3e~4ju?T(Sg$ze5?Zp4+Ou# zfzuZJdIt_(2!0K1<784EO@@qLDpRd!cgDw8d$iY?mrVk29Kl z;*}|eX_H!J+oZBQNe3#yBg2!l?J#)nfqqQJCNi4+ZVGjnWRqHH+oV=fhp7zuvC_6l zt)vc<0sUBM+oV(wW_AL~_PynyvuCwm|3Rb#w> z^=jJvSg*4CiI%|kR>=06WUgI!=xo+4V;bDf?a;1aOxwXbv}+hw2TpAT(*_lg-@upn zGVz{B-r;ATxrK2}GS_ZobrR==jPaN*yq~d5V(q3C8x@5*XYHnyF)xf|5^FcDlJ%`~ z)^1uI{nt5bH?7I?8_>I!+hZKhetB}PrIT?R{Zr0==y;B$HHc#BA@lBcNOrT?3HIgw@p5bIG*7Byiy+{zAo+#1H; zl?|N(|D~VRd~^wFuVL(i+k-l^H6QKZ9olP{1Hl8x9hKmq-qVA&-qpbVEkBs!?Dw-c zU&DC~utfb2oyaX_zS+MAK__y{m~Wj!Cvq#9Z}#v((23kS=(WzF6S+;)Ei(6b zi+%lad;V{>uTP|{>!;Y)|AG0}^*7NLO?KoJOV8T2Zx;j4BA@OCcscFc(#2~J(H=kU z`@o8(B7>SQM$WVBA+vaXfxS-;v-jz2_UUizeYzA{Foiwj0ecVGVDHl#?0tHJy-#nj z_vsDxKD{AmpMH>iTKIa*qzlB;bzwf(GlJXlTL^B;Zy~rns6%@V`-THA;9Sof=7}|N zL;oM9eH?q%EcT6KCSAa9i}MD~ck2D@8^@pv$4kHmokJInmxB-N6~~|p$5(+5I)^SC zuc!Yyhb|m%HY&a`=|b#*W%eE-TB?28&lpo*hkYWYHO|PC%NYMt=@7&(1-@&WkDj(K zk24;>YRzP5cy_ClMT`jsR8H}`bmW0^f4iRN0h_H@lha9i^c-2V6cNW>FpKAh_{ zANo)Gtk$ajkD`4Xnxpx!{7RzC`IyCg+|tFG567=W^WpfFXg(5It4WpCd?d0~lj^Mb z2=*({yPWxO^b3jX?M|Nt?G3CIU!m9-Yd>y_<9>uVm52F#G!xmKJ+gqf1ntkW7XI4g zL$qfq*Y(rri2?)gr_~tpO-_ur>hQGSYtl5%RdGIX`PeZBZ{!-jH>YGc{%FJ>pT++^ z;=mN6Y{Zv+IIEj$xzWkETsCskmvOi;q%p&&ZA>s)8Z-Gpw;NA{Rn@u6eqFb4;dzPa z>>=1*;n!L|p6IFik{IN-Ldn$&jrjT@YB)75x=OKUs#pFJd+{3R-miFPmTEzzuFRo}Zaas#$37;uiwTk* zUU~J4vFirwB{a^*>~EKjVi4a~!aBMQ9;lABvQgtqEU6bX&ZP|z)QT1j+*VZ?>OYZ>9_i^ z&wcJsc(>NXvy#S?Go>PiZ> z?Q1-&d9~sxG?!XSnqTeBk1Qm24LGOugg+DhO~iinA}5~g!pJkkxm2u6qrU1`-w@=$ z+=bk$|15bYtr~yl7S&$309*!Nams^VkaHEhK&H zD;G~!Czd0|z`UA|g!1J%ga zcMxOSNWE~)Z8LoLp(1jDFwRd$U=5{>Zhwc?jQX#+5mwoK$R@|^52E|eiu5tj0gM4o%n+3`sG@4zH^uig>m-#>3enyi0e>MLdpugH@L|@|U|DWc6=iS$*hz>aGz}bJTb>QUc za`MJv`1~rzn0$U;!2Vo?{rP!p&+n2a>^bbu?ejcEVGmc$nXB;~b$dVZ zMC5PcsMx=9uJ4H*d@IM%`1~rrm{W5mjG8mDhkIEovWF`!yovG3vU5PATWJx06OG() zzuRchcZAb#Gq*2$SV_=&DmVGFyH%No^MO+arYy;>!;kF_4zdupP1&+bjk zD>SybfI8DWL$%TmUW?B$b<#`VZ4W`;4vCLWr4CQFYx(Z53r$+y^$VT{e}3z)j2cJR z^*(v>w&Pp@o3<>~ zRBvLhQ%!Z~s995;ecP<5UP*tB@vV|I8zPLg&B!u?7!%=Z0qrix98R0WyY1Qq9oh|H z9pD|>4WSl%n8$U%hhMkz+(iB#1a6(ryN=_-v@FC}+kowPC%W4~oI5&@hEAN@IuP_% ztvZlIo!dH)H6G4w9Y_J^(u3%I(tnX7CMg6zJclB__Zy9oLa67R>dl`C&cJL1E zWyrn`d=Te)<}goN9G7CaBm);PUl*D46;^#r`Ul#_^?uF^klhN4nLC{`Uxj6s&7c4| zxUkZ)85A&Ig?02F`M7}jDr`cAMjxTt_IjV@%Ng5w*km;3;PBure0R8E>`<+HPhM6< z4!EoRPy1Idmu0I$X3zZ|_@9v(#0TC05254MEXgX#Id^4R&vSH3cQB8Bu9y8$Jn>cL z^=Z}Xx!$=(zM#(ejG*(Yp@CCre}c@k6PYPEpVDi(pS>s>pU8UPW$cA{_)7G}Co&43 z$V~LG zuMdoG=te&83*4U36XuNfTYgvF{m;6|V}l>Ud*HXB1TWahxlDX zezrNPgHy8_e}namUmfp_<+>yBu~8qm;zrA__7%OFc|GpVBAD z`?vCq%Oa^4$@ksDjklpcz zoXp?qFC!K@Mq634k3K&)8OYYS0~dSGJ-L6=JEvk6a!zF zVSEStPfK_3NPaM*i19wex5RWZTHvu-a>{>QaY?yRv4nMA=jvqUTry0bnDPFV_%11z z0)@9tUnk{P%5sxqnV9c#aw`qP$3!vPeWB6vg=)!Jb(Gz9He80=QTRw`>rImb7J^1bT zTz#8q;eQi2UdMIW$j6;nFL$yIit)Lk|25&@Y6NrS#>em?d=Mw%GZV@@6yr0~2b}K# zjw%MC8Xv<;A5J%Y!TW=os&OWt8Tn*21CIv>25w9@bJ?5#KAl_-U6}X2JYW356rO+2 zOX=Qm_;hvS`6c*tWkWj`g4^=9Dl$5m{sh8lt}`D@H_qBYj4BHsu;T2)R%Z{#=es4@7CVOch&P8N6+8_m!Oet zJR1D|sdT>b|G1vGP1*M9u*vzmiHA+A&U!>~Pm;wFs~;k+P;mWE?asm3z?vAF-Sj~+ z$w*`6W6#i!&-pJMnCeSh%Xm6t=kU^&UZ$^G_g0p|Gm=mR2%;%d95zQ^1p|_d_{Z3*T^o?qg(y&NW*6 zo2+lvJ9FU8G~Uwh7+lxHeNo)kwC2L9gIw>^{gPc7PmTW}_(E#Yne~Olf4F$AGY5I_ z0l{-{D!FqP{!$uSJx~0{2X^})=NkKC{LBXX(F@2_8R$(x6*3% z8duO>(}TT6aQQekdOF$pMXdZJ${V!J_JP-46fm6pBGz7{{2^P}Yjl5W{t)PcD=06~ zyS6X9Vv&Zq$Unkf#m6Wsr|*=zKE zbFZVGfO4PR!@Pd)vGR*(uPF)2D|9X62ai~-y=Dp58Tc9YxAz;T9>8Vn6+YI&=7^6n z4y;S@K81hf2=Y+Yz_(vIU-Id~fp1eiMAGn^pMLFy>o!j~M5?6v=^%3@)?({tw z|IAa#&LyUfvSYsElXH0>i<`ciq5}`|{V(H-DSG4l{}unAh!2*l+t!`-8qrp*JJB@J z%K$V&dCx>QU5tsNn@}y+e~8xMgRAE+(_Yd+-Y?1MNXJg@?^xa;J?(eUmyxWAO4?g^ zuGaAQA1oS%{%o+?(~z@u{PZ-}^2vN#DQlbY%w5IWeimNyZg@@Q?(9XpOf+lzCD!)p zAic;p7LpeI@JjxqJEu`YB^A~a)NqoR6jy=(fZ02}~{9&uf-MNL> zsD2#piC}HN8tI)L6S=sUb&%~3)QAptVts#OuWw{pGk4GicWUeUp3VCH4jg-dz9+E0 zN3*_fw%50hoM8s*JANU4J@ArU@CR>%*HeC;jW#c-^|?~(ll9#Ne_!!}Ujo0#hHL$8 zP~I=rLl=0b0Pw@Wx7fU-eEAz)(Izk11$-8-C|*%Y4(`9!x85&acY_gT zuJ0Mlt>u3mU)sd?xPttzix@wxZ@#l;s=dBXx7T+#yyQ*rk_PKjwf180k6w-ceigZw zBN+SV=k)jYV}0KPd@1lq@&jGID%JY}^3`JCFCt$l-X#I~Dg->d0srld+ftzqV+p~h zz7zh{J>Vr*K_8xHE%fC1oAKX&mGOSnpynIAYH!weOuO|RW3KPtvA+A!cdc*j*}3Na zIil)Jj?UWrf%Ex%(+zgM9p``Xlftn$)~&-Eb2#o2@`z#O;Tehk;aPA`C0Q!eIbVc%iuJ29k zKI0I9-o{`abzX&@#yKAqbiNPWjPw7!LFaw!^Oe-F*8B8~aGo^@olOMv0N#IXLV=v3mN*NyWp zfHoS56auKSw#7X8@({iy^8%ZWeB;u`S>f-9a#wT$W{$J(?>d0PcjJV=o{b8-{7 zQ_eoV0JU=6M8frexnQYXp|j)XX$MsOnUS;=utR*FMuBD`{rEMeQ}W|@jw%E zImVNS?=60P-SBTlr!4>GoAA>qV{YU_S;;)ehtkk7$cM5H`XC?5Y#nXCsR;Tt>MP5S zM(6v!Y&*X<=)6zR`Iax*u9*~c9$}vsQIpM~717|%s67FbRzz^Tmvy;iH*ILey*ffG zM(GHxh|m#Qv89=#O)K=QQM5%Xqze*lK87wxG(&C2PyCbn*^; zSMAGSzO0P=&>L+!RmO1y>-}?+pGvBZ`wp6ftR%k^@8_aVN!7p4a4nZkQo6Nr@;EFC zl9MLea#AGpPqCNx!%ID2$6g+u7iq>`DlT{jv6u1lBh7f_t2wSG=CW=vrSc8(A(N~m zzv_>nS-Gr_G4%Z#^l;?-JMw7(|L|qNExn#(rBd-yz{N`ijA%1Yw9D4pN$)mQbPu@l zM9a?VW4*X+y_@LHH1SfvMe7=kSTj$wi+t>&J<9cXt9U8kW_|{Dl9?ykMP7>y@KR>~ zMK6K3_MdeY-2ZW`1;Hijp~q^aU+*x#R-T6N(n@UN&D4!?=vNeDC|SEH+^E^Xbxr8J z0@<88@ zywo3lYCG^c;75TEBu~Si>^##;oII@1uSn*#D|s3&zAM>#C%QQg^s7vHAfR7I-bcAzt%uL_L^*b77M=) ztaa8x{nvrPdam>w&hwR9?5;6CUotUFpI*-Tp3ms3?Iljz_Ia-6A(1|%J z(D|?UzuAg8(z|3k)VOQRpJFYxt^JdIx`YeDgT&+3UR}iXZTs&3;D1svw%h-M_@7Ii zuK&S*@VNxr`2ThM|8r}d^<&squ$3&8Of3I#t(g&*3@1;2C+M21LbcXQSWC^9TYFa1 zMbv+faV?+2zFo{->59%++&sc)8HQX=ykB8=bPwWR7j=lyGLR4dGcj6S&NWQkc@y@P z!I9R!AzixKYw=mpKH{_ocWAH0XQdsyLwhaz&b|@sn>=Hf%Q#TRp5{Dj7kf@J`$i*+XK=j0*Yt>|)?d(eM#T}qX&+TzSQD*tp;?kB`JZL3#2v zdqPJ~f)A~N&zuS$x*tANdA*g#rtiGJJU)f|PY+OMs=pC4dOGs-@jp@{}Je#I3wGUHuc`u{Oi^$bVuV&&%O?dDPiHV7Ty~D7F13 z`kM8#`y*eg-xhyr<%t?Vo~Q?BlH-Q&?a#OBI|m_aYg|ZVluNvSf|KihK62Jf>fU7{ zXBCrgaV+^3Cy;M(BDoeXnxE;NM83tzeH-{kn95t4t5 z;|zQx?jBB_HSY0IGsMlcBdLGBhU5Im9T_{e$9Xps55Hyh&3+c{+8dFxz9xS_AI9un z^0DVIR|||tQ_i}cdH?iCVC`DQY1cP_wclZ{{1F_i?P^pMdD0IU2Lpw_@uY7%itTV7 zdV(c^5e*IK3FhN_Rwh5D|71?;!QfO2xPB(SURNIstR2jIkE+f4b{%NnzPdwu*ZvOh z4((m!VRfE&E9YPF9eQpf^%fPY>%bl+wq`Im-wW8+ygQlpcdYaM+15IL82Ml@wek9n zwbpsE+T?)mw$P~9!}SlN=NOC}-S0_j-6yM!-(K&H=)nX>$1ymQI%vDCb)HQ7TlK~5 zswi^Dx323*_z;8INWz`3v131$;#%I!TIr7LAv_v(m*GEv&Dhh)Xz9(5c+lEnm(kJ> z{oMojq?{gRw49DUsvdu!mFUrAhm%jr2HQ>;P~C52-+FX}!;mdy=j)1{P;kkW(wV^|l>Avax(p1Xn(x05yuTp_lcxok4blJCS__H*+1L z3zSSyZ|edN0$+mcE4Zn%vwc$PZM~e?e`H_5Wrr~Pj|>sqfBB>c?${}%yL*7OcG$EN z#*~)rYoEvEaH&yy3F9gnRJk`$vq;yLTI;xnt-p&HGtaCe-2=MPi#4)7{QZm_D>~zw za&D_<{_FPY_&fhffe3z97Tl69gBZpuPn0 z3964J9^om*csg^l_fm^TaDk7lJOX@FlgE3KzVn~)2?OC1u7OY33ElevK0&qF&O`rl zZZ}`;qp{w_D?Mokn$QtsdQRK+mFKkTjqDGq_kb?EqWk}5e0B@ZdBQ^u7~+^^GyIJC zY@rUrZ#%RF%-<)KM#X75XYM|!Gb;WX%{lY-Nt03WTh8BRzVtpv zUvNF&IR`oRM|^hnGoKf+ClfAexik}2mI~AYtr;Lgdg2NjO1sA(*Vow%a?JV$fk5Tcn z;P3|8JBQ%EuzO+jz6S}^AId~$uDr)1 zI4?m*-ksy3;w!NAQKJZ7)_ojv(5d^VVbqx#Nbhlc5gXrPjx!>*XAD>!>&=XbUF@Mw z&{Obn_nS68PxUzFvm5*VP4p$p9d7b*Gx_gk`0x)s(l2_dkKngHpG&Z|dxUX1yZG z8FkFl{_xK;M*T6X+&fFYs7(%I350?_sX>EuHz6pXk5ld@THe=;+Vzw&!(YjG)zJpJ6ArX?0&{^>p-$ zd!Z`{*!+s2D@Ar3Ns%2#Qe?-G6xnekMJX0tDax?uifHxSJX`PiD?F}4Lq)gG>(Kry zHobQ64(-2U(`yG0YJY}3&-5RGb{2mWD0HqnjsM%xYV3Qhw3_o)THVCCL#uV}&}yAK zw7QXVhgNeQOsgM(7lJ-~D4b9{+g$METCE`KPa$&kLbN$z}4Hl3XVKX;HT}{^_sapBcku^H0HT@lV0+^E$M}KedAgwZ%U@!!xry zAtwLiTqpiX{L*W{T8OiM0-ou&$Yj?clbt7C3R$6A%(c9DtZxW>Ztghl*FD92YcsZXd>UF7anGgrPbpuE z!Q3^G7h@vVlXomv_g~8WGq@iAkE=d#8!fNN2Ggs3?I`j`qhD#Cm*`Z!C^z!{V)S5p z$=wnGe{m-71#bo~Ag4;?2;Y!=VtE$e?;<{=L_RU}aSC}`9^l&ET#H>UCyTr-#lk7_ zwwSm@-j*ie7I|9?{ZHPOIBmLuJucf98vcvpR665qI$ z^L4RS9u@r;%YTJ_YBSl_>?AitB>&aX{whSiFCliEn-ljI^H1V_to&7)GwfJ9?qvKd z-!@mZWp5-7h`E&RFdf`ctdePKWN%Zvl^@ym(@<)Tzti$wa#vAWtc>f-g zK^>+!W*sKwi};CHuWuNKSajs7!_?@GGj$R_^(Ai=IH$S1gSmTDYX)7Ha=JJ?bu;yt zz_XKdlE2J7IhU7#t>j9^;Y-%E_T)3kdo~dL9U6aQ{Cqcz~a$|KtF&@_s^6q1ekOl z0bqaTng5HuH;<31y8r+0%mhf-_f1+hMU86_MC!tXAfQkeq-twF1w=#}T&Qie#Y!M3 zT3iyfrG?L@fT%cWwY0U>w6%a(#icc3tG4!AvayCGpb!Ry`8{9fo;$g-B|-Rnn&0Em zKk}H&nS0MY_q_M@9Kf%Uhu`2H#X{2{HmPv)9lv+^V_y^h_$F|eL;OSa6u)Ku z70mxH=3o0^U*acI<=2YN;QWz+_%~Wx{9j=5|5}^)hj3pw^nNE7|AkYt;5~|Uh*l2r z{}JBjk2_<-`f{B&u5+4%?=NM=7GJ}-a(zs|V{%NYO9 z-+%U?rQ$##GGGlj>+hXIF7)aR$jMe;nR(aKj??*1&z!VqxzqnWF9%iclEZylLOHoP zot-lIG5g=`L>}oEE{k<=W;>jhazA}#V)UpfRGm+bGn-u4$*r@Tveu4+ymFo|M1LOu zeO}N1^UxFX_}_t+R(=wDem-=pHSt^2zb-v@2j?=j=Gkp|u6kc->`gn?jxp7NYwYJ5 z0nTw^?=6Jyd@G~d~FtTSWkJEyTOcB~6y(pfaN zk9W{>yE68BJN73#){3#;+Obu3tPNwov}5<%v24av3!wR454rPcpI6zjQah$Sc*2e? z(im&j9;gqO?ww`FvV`thi?Sam_)V-bTnD*cSJ66a1dN=LC0z3AO z9n&7nwPU}sW7>o7*|B@=nD*e?c5J2{(;nPz$Hv<+?LmPZJJpV94{o$$muj!FTs$DB z->i9p#<*5{@HIQ8Yx?v3TJJl*>-%KyJMW|KSJ>~T+j+HT6YQ9J5^7%U*;qR!eOG&- zJ&@SFy{^$t_7-n#TgtGlW`QM&5^;w?I_ zLAq-_`mlPdO7Z?gOziy`0y0z8A7Fo!->(x74mtTU*V%dWPF;UA-H6 zn&)kM-mGPqYKAji^UGQEOrSTN*0$ve=kX7@c1zH$FP;J}W_8A%VL!B&%TA%@l-_>J z`Z=?o>AY!mAL%0>-zW-DjCb2fbi2a(GX>YO_d zzSOn@IT!rjmi%RAui#oP4j`5fo*ExVob zk=W~HH#xJ%pU7vJPp(-ujI&AkG<%qbjNpIeRu_HC?lHZ2b2$Gq`MJ4;g_Cl#pI~p= z7OXwnnM^L<9$!bn6qucRNYVBl4L~(v#%Y@*csRoXTuXao3YLX z&PmSXEP5LXW&?M}Cg(HfVCD+5*I_=NX3i@a>tfbU4KlF#61X{?IR=}tkQsXjIk}Lr zlg(J0f{H=TJGn73`gG-BL~nBz3&JDv4R|JbDYJ!S9C3$bOoQ6 zGshRg#gn?2>$?;TV9kU33KpS)JodPd>(MRBF7C}4ntbMS{iDp^)m-1TU@frp)|gij zn|!Zb<0|GCJ}8#ohWXo=>)R9z+!UMq0M}rzl!@o-JrdypTly4E!uL})i0ic%9!=9DaB^vPUEj7~AhFZ2{3e_{jWti;vnSVIR#-UcOoJC4 z3j!ZD>_cbZrG4nYH3PWMF|dQ5fCtD@=4@lua4NrP&25=e@DFgk#&Qf@pSMxVM9Orw#>SXn8f)i*5sdjZGH4;IAs1#Gdg| zWq;%PPG;^-1%Y>ClfU5o&ZmC=Grz|;>%D^CiZwTO7x^o*PrQH3_vXFh@-h0DQhNoD zh7VODpIgDV*YN*5{x`gPv?~vmza5*bv&6*X?#pwo+;rCo->l#o<-lFW^UmaXkMJIs z^Z5(LJi032H^Hlvu?74uS}6jLL@Q4*Hjc5A`Ct2f37^Y-V?)>r;nGsZ&gS>C`F}6> zidW08>CxVFe$#w9GtI-RGq_H8^&n#p@w?#m95gDpEo98w%b|>EujVs$Bi9Lj4=|>+ ze4nu*#>BU#@+rP`7h@i-ms-5JgRw{XeJH0NrSzpxIy*OiQU`*bCHr+u2p zn8zb0a=q|!9Ah5Lq{|CtqZvEdKI2rz^!^tzR>GLUImWb4=P~BVhqkO)baM`4Kj1p? z(KlJ2;C&`z!hP{(j~-5C%zN%0iz~`?oWyn7yDauad)J>a?YDT;3}B)C>&uw*Lg_oB z!DHzp7h1Xtx*Av)e;b#Uca*}K^>Fxjd`_CSx$`UpIH1 zZG!mYpcmA4(#?|{Xt?L5ChnOhf1jNn-$aVf!9V}SzH4VRa_t#+hadCiyrq%r zPP?oBRo->8z8`*URwLJ*`mN8$ug&G!Z)CU@IURqW8oH%; zH@)DoL5nM~EmfN(yHNd(6}yU&=dS$4sj@Sv&tknBD~R=16osDsCA~|C1q~aW6I-mF zQ< zUOV-!70BWNX=E`xYf^QnP3~4`M{>P#96kx?NjA2Fy>dTx(kN`+LTvC+_%H@;i%qWP zEUK-GM@K3K2TQh)Z(MyHXH)fR6WN-NzlVN`4mmHPnJIS#XP<)YKP4QTy@Aj1qM`3Q zv$MCvCcj=;xN#u#d8)H~U+#dHmz?UX-A5mZ9Rsk%c8<6>^5D5nq;|yk$nH^NBM)B` zh}4Z67a`B!o#L^<$lgF;QBAM$kp(?Nk)dtZE&2LA9hUxd5NG{D`#HR~_@MN^5V}$g z@Aak~yGUca?-9mcwPUggL)a1f7+Yt@bf0+1OWt?x(RVh+%&qJ7U1tO6S<+!O?_S1M z+p#O`ymgHI%#Nu}PIK>JOm?^Kz08iOMrVZ`yTy*}V(h=|*n@U#Cu584*w5@(En|<` zu{Z444#pm`W83Z6cE;|vW7*j9TFW-ZitO0Qc1*Z%j~yFp$F?x`T{|{SW6W8}nEJ%( zJqqnu1!K3_v8U|4n;H9t9ec%&2`)42*iW@rtVM8<-L3h4Wyb`U>+IM&c1-(xwH>Ro zW7_8{?N}$~()zT|6YbcUc1-&$+R!t;WXH76qwSdd4qA)$`9eFk$c|~B&$DBtc1-(B z&vP^1>l)*^+Gp9_dd4<8rhPt@u~GQ50)K&qW)c@5N9+v7rmPJb`pS1gSI#{h`uKBf zvS{NXev{0h{!)%iL6|UFIN89{rGAR z;j2|GvwXFm;;XG-Jq~friq~AZ`3cwRj1={Ljm6qTVvC%zilVG%W7j#+KK9Iw<($JY z4Shd0w_`;1)4=5~Ul^O)Epk2oLw_4%bK6H^b2~(;s*%fcJMn*K{<`qjHBxkw1;(yNFLY|*n2N5dy^t$$uEpzqWT_XEe zQZw>v`rrQEiN4LboDS#0ETk5c^Fm5CJAD^Xm%LGHeh(OFu4jY27u7M>Wue}0?qwVw z!$!^TpS#Y^y^Fc`GWYILy&^9%_ebQkC=Vr){r4rBtCo36na_X!c5*?qzFIrS4!geS z$-N@0v_AalJMoiiUGD|kFZ%JcK1=nkVf>gMFt?uZ3qH>SpAzxs=?wT2H2AY0e5nU- zgg@&2c8I)E;m<+pb3R!)cBH|bw_V&(olQm2*pcD|6`^3sX5mo2_A@&YTdJ{E&&H-Z z(S^tgt*0=KN1Y7rxOmiEI0X)M06#iLsy-49HQe$C!t<%YCeNQ zEB!dsyL59tbd(<|slTp6Wb;BNx@9r%zLflnUjRGsD7xN>UI47{?G4`=>}PPP23#V> zzfo&f%&&?$p9}U`v=9DGylEIx&eAMv}357eaFXYAt{dt+TAyP5wZ=HHXwJ947M zC&d6C$o}UN&FA7%pG7;F%Rk3<^8U2eoy=3qJUi?ipWEq-v}y#t=>5a4kuAs`@uEJ!DHAXH+fneMz0ALx`9HGr?_+-PqJYIE>D3C6vj~6K?q41Mre0s*nH_5E8flr?d9y{{>%SRi3g3cgT9_B~L zG{v#qTujBR9V72(h>N~tW!xH9#z`KkHdS$K(<49DIue^B*@ljEl@l$eC%y1!3$bGP zpJ&E-P=|`E{qwrv=ImAWNh> z?T5}jz8u{No==SV@gm-*a!q24T(RYp82KF+)0^vq6q$AodnUh&pMS^qYh}ZJePs7b zJ@<`XfPVQgdslCBR}V_REVBFcn$-!|AEQqu>5@_8@V)HS0CInCX#3YCH?vPW&|lcI zjjCt4@2&1jYu^m>z8%fJX)m;Q+BfNv)Oq^$PWog|_RrNjx1)D%m7av&u;sBXkpt+Q z`&a3EkI2X1)DHHo7IKLhK?+(1r-hp$% z&CM(A-dUV$=k3`s;M|YcvqZk{+A)pcop4Qg(%Lt2+jB*;Zr%y|b`*HG_0VU)>qrQfDJlkWQ$D_L`cj@&MzFdiq zO=l3C&wke;+g|5Ayt79~Fc zQgNUV|66P7F*cBwhtGO=d-#q657K#^w}|$L`#cfw(H?n7(vQ-`eFF4a9x|Z&XZD}3 zB|m69e}4aY0N;0G{_|YU`B{62JVoekZXr2@u4s8*}lOpEhv)l3e`d za|3O66q0we6MmwzrUetf-~0dBF~8qiJ|JD^_j|u<$K>~vU;AzEJA0|`p8wqQdwb9F z`@LVb_xSzZp8wqM_kPh{=l6U6+K&1C-s&x`b^86@5j*Dhd#e|LuJil7m)SAD-+PH2 z^ZUJjXvh41Z{@9NKEL04ksb5X$#W7jkZ#^-q->nORg%{4U@^QXT zKCWwAK9&zD?E9JJqeD#i{v`Q0koa$7^6`3fXuo_s1)a30IWhd%#)LU_P$#=`MUSr#)sv5*BpL1xz>*P<)reu zb)8>M{??B9<)l}CV7~%r7VZ$By~sKxR3K{aYR|c~z?;MqY-Tk{LF)3R|&U zHn8kkV*{V#M4ylijBitZP07%T>xi=%^h=HFlK;^mz<<#|OZ^iqeN!@VZeqT{zya2$Zu~XnDgK&M zV@DQ;Ib$X6`&k(%xocl+@h<2Ro3eaJ#en9?Oz5lfns8Yx)-Gc{R;A?S8mFvgS$?Eq zWvFD!$;5VlPu!q?he*vGPV`5d_fny{cxW#`CR=i1)BD z<{o30@;xOVi?Nh^EXICj?~BV@#-6rgae2$w3Og2;w~VFaV=@^Z8oOUcJ#EF~X{ zvFq$}?6KzdO&oe4*|MCtasC zAD;7Uq!u}U7`@=5c1{$XV0C3EyCfEC8`)7kX5>xq#8IDqA+mG*n33w;vwbmnm&`3b zwcT9TKEhc@vnz=?j5>TaZX0rVVjcPG6bVxkyPdt@jHKBW)WvR+Ux3=a*xV2?sMe7! z=fJxPoU*!c`H{NU+C{dVJT_7_(}`9SliIebW2B;pm|eFnkc{8-<}}vO7;f63bW??3&uomK))KQ z-w(xxE#Y_hY$zoJL^UHnsPRNWD0Y?$>ahjB~){K%GN?M%*W zm0jQNHS8JsnYU-BQ@<>Ko93SI944gv=a2AYRzPg6kXpr6mtqh#+dvJ7g0r$Mt%>8=I?3YVd z9=>Vb1UfozbhGJbu9+{9j@)&+aZwu+U9FhqHrBX}xMwzeJ`7A0M^^of@;~(MPqyVe zOXBg`7v;++9)BRziab$b^C9TZak`Gl4j&qzzH;<-E9Jf4blSF^OFxRK?BCoT^eaFv z_|G66$Tj!yZ1wb4uBPJzYr%z$c_!aCVDf#_#Y?BKhM=>o?-TTUSjil(IH9)7kTYw^ zwOZEQ?YFQd*w^&s+x$`BS6ld-@#P=x8~f$W`?BY@TAI^p!(*cYt!tm5U%L27% zs%ql5MdbRN~ajPAKk^AKg8o zHL>GfrF+hY4^0o0bPa~1(IThpbMP76H-MgWd(R3-2_O@jA8pQL)wxBAr|7%%XRXy~ zH}=qS)}#1||2lo|K<=F8@{j+@To+`%5a%FeMK0JUeWhyxt$BGDhvytUykGIb`+$Y_ zLE!AdyVY@p_q5Ll?}}!?d&50P2k+Jv-i1l*P$-t;ud6}&m1xJm zx#((#=L8~$^Qo0%&*&>Zc`o|da_Dg`bW=&6iC5|Kb}9IMNuRuED}2lA(Q#U%D+%Wx z2#krIfsR5A{o{w{8M|IYu? z$0FyAF?sru{Wn*Hqtdgaw`}IKj`JCvU_J}z8M${?C_HlK;PA*Nk)OiF zb;tne>%tp9yhk~q+B1ubmTU@S)h<6T@6a<`r)zex7dzRDzkZ5MhF>A&KCTgddw9L8 zC_Hij=ND{4hv6*tu3LD&HNtUVcfaf{YTTxR?`xd!KCQo^TVdZ!IJibO3wGUZ)=&c+ zcCil0^{t_7;Ns>~QR9%?3S52*|4XKM^uC#X)A-g{M}mEUF6mv_Cin21 z(GjjUbnS=FCi;kPXHS z?0v6uUwl7&__EW7FT0ZPWt;E?o;eMC5uCOIbHPcr#MV%Ia(hFpy+f|-0Ku(-bLRxR zAMS&%vnT7gU-&D1TsSPe@$jYJN1qK}gtM7&DfwC2L+wGJk!Ot({aE~{<-K`lAUn)TW* z(N_D?>S`Bn#QU_b3!w?|fJ))O`5x{BN^A0+k(JzAJze*TR|ZR6{ApkMD)gb;_U2x% z{VL-g)k6qhrohLx^A6f4*#*_1@W>nK|4Gj;)2Het_G1U@)!s?IN$1}h3PH!bOQ%z{#xqWGa0ZD@Hj{`Izq=6fUcn;6%lv z9c1j&+0K>lo!OUwFQTW4y9*}`pr?@b=hv*IiX5-$=v||c9oS?Wrx9oNa^TbDc|H8S zaM>pI#Odx#emjSrsQj-!ZITb`h*NFCM$t0{!oQ?j-MWPSR-A2kJ39NqvEk^_vlfLhxO*7hULW&BQ8 zCwlLYaCAmb&X&&&N2h+?iQcF89*(1izC0FXXcck zvv+{_ZI?-hDjDC0PozCMk=8n!@!72RQTB;*c4mj!^B-}BgjmO9BRCD0vi+77uTvd3X z>Rs;Hb!4#vk7)&uxsf%;s4EdpJkdTJsd}VMq^eU+WF@?#8ec^w>0C$Kk zx|f~>O+eGbE2lsc)tvhaO;q4-o;oNT-M@95V(P#72KQacSrD_j0;A5(^U=ZTBU?D> zJ@Kbsgrn>E-Q!Oy$no^}lW^_uocB_EpITE6`ul#?^)c)E2e8reMzY8IRYQdA(Hix? z)>s7&v|^oM^m#qIitBane(sh3So3{s=Tbgr<#h3!-lgU6ph9Ao1+4Eh&b;40^ODGI zyhEo$vFC4RANzAY*3HoAG;sNb(c!4h9oxY7sqAfkbU}bIc?LK&2tP{yV6b)@zV>Qx zP&`Zi{ylv;>x+B0Kx;F(ZYy+l6Yp^|bhj9RkBXi3r*v<%1fQ-c<^~G zzUP`nVIKOtHwoEa@O08PLD+guev1i zx9qDI4uHZt!qftcm2K%YfF$@%+|=-0^&X8pUaccQnp4oBb4*|4PU`@yAk z(8cVw_~zTbzGNT#;~vh#J<^t5;6rqN=?6>Z;~%VoKg`JG%*pJ(E~y^sMDKu~e1r_p zp5JTtS-7NqzlHC+*bDW3E8G*Cd@JkR&2QqX(}KJwG~AK*ETl)J?pOZHY}Pf3J>SlI zev^H>hxeNj{CsT{z0IZb=(+-~%h?rs{w~3Xvxv7N7iXOdPvF`$f%dfW?Bw;|K^!q<4lZ0TRy$2!q(a__!Lyf4=sx!Q@!-@gYw^C+L+VxDEf z0p|P$*A-|zfp)dmGmmWU?W3J&9iPIlWzed0hJ;waj&iC7R ze#4F}ZZms~nHM`8--J7F9=|1@+2Hr5%9ovSo!#B}{Odf!zs`!$DeFARTjz$9a<2vwA=jWjdQcHJ2WCdeU>guM@E4x0wb;&>Y9-G@Iasj+XygN3xZ{(9-i$C{+ zSAUMb&-2$m@=3d3+1$GWk;>cX;RviM&kC4xD~NZ(`^A@fl`iA=ipQwYKP?b#xAVy2 zR`Bwt;pK0DN3mE=WW$N!$hK8&iTm}5ybd4VJ_TO)C+(jMME^4pV2I0Nko##KjDp*o=P7og6uk?@P5z<$3 zc;zGTy_La|N5#|mzIISJx@XU&kv-_1$cNvocC9lD&9%=XICF|iw)x>B2mHoz&*6_c*@U<<|o#^>FA1)cq z_xIS#Bg@)H3bX&Rr0NlJHg4+`Ik4V|RuEs6-gyxEtopV38>r@zIws)QA!d7Mot2l+ zL#vYBScm6?BYs&XU$**ifU7CKgKgm8L5p*h=jVY>pNmA<*DbxqKHGn;6Uiznzkq&0 zk>I@Y3!>m#sOX&wD#5YMcZQ>zH-Q&(z>jJt`U&|tpKNuayH>)(+XbRKSB0ZHI|ZUU ze#SYI-2&0d{u7?vvbg=TS@V`&5SsVj7X;`1&jppsx;(pkeK@)sJbe9EvBmuc1WM+` zHr?->jjUA77Uz@?-U56M#)hxs_a6Md;)wfu<@MkZwW%lQ_j+<`67~mQKmAeUm%jy{ z->2ZjC%}6O--TNP&q# z->~;4(I<*?3#!2zi3F~XYs#y`FuXl)Y?NG zOLwy#@%(i>Z;o4dPasZr(~b@bSw4IdWVzvU(b_$ z{%7Vx#_p9L`!76a6VJIHd8KD4PO6?Mnr9IIYiui@AJ@8dsIu!lzpv!L0xPec;&UK> zV~|HD(U1I0YU`6fn}&9!T>$1+`8hrKU9cO8BR_tW)z zC;Mu(55RHn0{jWfftM%0U$y(OmCw=q;d38;GVgjeYv{5OT`8ElA2ZmGnOt+4-f7nu z^G-**AMm=m=ep-d-)1kH+K*GXHs^==(Oj-=dOy7U1aBWY*?mcjmAUW#qLH(*c~qZ# z-4)@;*N{=muyJoVA$({7fAX0MKH`CH|Dg>jy1ZobGW0a{VUo@CBlhtH{^l>qJJc-; zT^PKd8|qej6SOQ@-G?*CmIeEm??Il|8`(O=Iia@j(XSku8oKIG82drL7t*Wwi@f^) z{szzOwsa(Ow%$1=x&=DTTbv)QUf4R)7uxOD-Wl;7de8J~>kK=KYt;{*o&@L$eR6ld z1I>oIm2PD3WDooee45I&b=2f@CR0i8Q0GNg^Sz$)r!GpmcSEmyb8jnq@9(%5J~O<^ z-a94KueNt6xQKIZ65_niLw^Id0Wf*6d&Ne;p(rW`-XtG>F%R>?c)x4InQ(7TJBSfM16GRr#>U;{h#ZR zA2n-F8qY2dM}NolI$9Uzu=4St?2_{%l`OFci`vv1X!u`AUN;fuh{-M_Yr2JVYZ zR$k+Rd-^SXWq<7XLBP2u*S*lj88(t<3zj3^b>a9C@1^&r2k7HdKaLG+Y)|KWe5BV1 z_T)r6hwxz`G^e#mH~04PQq4s!({1d@06u@jTCU-pF0l9MeU|PSW3K;p$bJ4e-BTAE zR>8HRW&iuGVt=+VUUbh1ORvAX-_k*QV$X}$UXAW?4X_=`^?HXZULF%|&HD^tE@yXa z*q^!QT>H%Td*(-VKHD(=8h(^-VqCqjn{&;04}%L6;K{-h)oQP;jSc%f_X(DI#&hqu zJf;V~RqO!n{O0b5d+$Q{to9;Dzi*EXQ~gDQE#c;nH1JsOJh=9jrzG;0I&jnF!9C2U zXM;%Za{0~gBEk{R?=qYguIn9abNSrS zpPzxxhu{g~)2Bm!vx3;B`GJyK*eiTFlh(nTreOy^$M?5*|Eb-bVY|uw(t3X*zXo{> zD}j&a*T|!`$B%D^=e(N23+LiT8;CA4ooC74SUEUQvNr6LyvDO;@~jR0@T*~azTO?a zh`;WQ-uTtJI?)riqA%f>tZH+~sngm9Po4V%r%ZhKmA>Ia>hTrhe}^?^!IQz!$uagL zhW|N+|2c;LIfnl^hW|N+|5;~lZQ=Q$Ht5PcGmG578tnX5ouEyg*=BIKZ0jJWEc;~6 z_ZZ@o<(w8S+n(!`^*$?HcJNF$Pg(qG4Y)AZ{~o*pyfeB|_5gaKe~k`nTE?2Xpi^DW z-!j&wnxJK@ZyD=b#`>1AzGXw5=*D2U>`~_ZSL<-uPg^@>@3sw>J=T`9d^(293OkZJ zJ(OPXeffTF_@%KWxOZvho2W-Is0VJXj@2)*yb+9eP7Q-XAC&AOFJ*@ z`vb;C2TmBeZZuht1IU9-vd^LMO?L+)o9?E^qXSH!WruSk?uVA==SZ?X7KDP<>uk#%Fg0Mc^tkxl2S#(&1OHFxGxps@W8q!w;~LH)x*y&0S@O`aj|@#d z$2FS*;eA!Tmi3(vzCOi1B*Snsd+{e947UNh4ZyAfm~o!d;o55GZC`BIZ0@a~{>0nE z8SLHKy|H2PPyU7)wlzD*S?Br4mW|bCUHPl(x%cf`Fz|0nmN}sv(->dI^Y7)_2l*`G z^O0?t=;n`cJ^ZTj^Z%wi#1Ec>7dXo|I?nukl1KW(W?U2qUpkU_`>^ESuID%4WqifL z?Zb0kPLWN4=VOZ%chOw3hx%g=orpc87^F+T4eQVvDgsWqVxXb5CzpUP(cr-`(Sgv> zDDoD=&|_=HUxO|-pu>;C9uEVPc8txM=ak&iMPnUmr!w{w?{e;~`0nuy4Wb^;)w{Zv zj=5cZY8uvB%-nlJojG%%A#dphU^N3;SmR{X&V$c&2DiJkzWZHtsMTMeKd8jv`@5ko zi>7l;5o^Ss+FdmI4ZhQVxpp4-eKyy8#Ct#7intWxu|UUK@j}U`U5pRl({HOPR^(ro z|2ORue%|MmmomEQ-bs4?8pZ}eYyRsrr^fwb+V_O}x#qLne|XMIaeUEP$!>k4qqDW1 zS3Tn7mxA1BGerRtuJhZFH`~2*=iF?3$31gnALc}A zr@+_2$#c1XHMx!SVJf?wXY08E_`d9d*}i8D!dEt!u{#*k-d3!F?;9Ux&s^dE=lM-| ztC(9Qeb4_W**BBe95zc__5n|FfK6`g;W>X!!2#Vb9`PXSQ9h==@8-MqPkZ$Bt>R$; ztLMA*LSF5HmrvhdFC_XLJp6Ai{1!i(3cnMR;rDpc@cZqt!Y{9B_`TP{;P5Z|O(B=sAKJ2MMz?3uDNExSAD;v6m z2mE3dWAq{;zbtnpafYeTW$?d8mkmPSlfOuGNglSL%lbQrJ)$pG&E`9EKEKuUo=odxfgg`9 zn`U7f5^UGIJhvVmdVsnu!L}MWN2^_)`+?{exFx{$Iv;HFEo_S{Y^Ph;US(ms;%s1> zWB9KN+qS^AU8MFlKWuyEDo*jVV9UGsVS5g+y555=&%GL+f4YUOY>}GRJU-kz_glbL zJX(BH@U5ZVS$w#X7?1cc^^PWoYasR;Jq6-54u|Kwot78x1)kuIS=(IJrhU}hwU#Ff z*3r$P>11Dx%X{mP53Wz9r~OQXwJT4bOM^H&r5f{$X!sN#00&DjCEDLL7 zX&lynC~#q|SfqjVtc%OmSy%@J>y^P0oum3mQK;nLQo;I!Qpwu`o3bO{J&j!0mE?mI zxiozR`{>HrzNHm+xbXfGW9r%O%G#hy%h0`K?VgVUCAq|3Csu}lcY6!(KF~7tnp-j#J=p)QsBNZBi#LK%w~;(eFd>-!C(Gf(U;(_{k+TIfLr_2P_vi` zClYa>ztu|*&q=0tr*s8)5aWCl={JU_TY6vpvs602(86AEXT!snk1iVx?8Prc=Lex@ zJoW^?@8b68O1PAF_ zHRMexZ^h_amd-tW%jM%PooAwP>04UY_PPf879aO?F726P;Op`8OmI!4^;CZD%56_? z)>#@U{5(l!pKIZ4WVPkz>%ZaBxCiIJu>7(-KR@?m^>uB~b>ZbcIsGE}7Wjcm8erTY zrwxo7m(z6kRtJ1<@M@`m7?Qp%fCg(z*vlP+fIIQLoT#n3VDm6ncqW(pm@;K}MVbd0Qy z)A4PIc2go9|0ONYwsf4kun{`$XkdF>=@|GnO~+#_oc(nC&do`5{QT(V)3M;(G##(r zwLY!By?WxjbDB-Z`=yg5>Dw)Zj{jnHvWhfx{8;s|((x~n>DaHAt$D4SjY9U7e^=RWz(%*mLDoPfSmR8vij*=POW;(Df_$Nou5W8EAZ)M zS6R9SFN}>FGJt$S-QfL)4W$ky^QC_^|Gx^ z=w)~M^s1FSvrE&3atCyKI-sQnRgI?Cv;J|U!%hJ<(k{veQ;((vt|8`Rny{}E8 z_x08eyNd#T8G~L@{CLCh19Qm_V#ra z&db|b8|;xWRB^+ zwarA=JB_hJF+ZPhZFcE^aXoJtF*e!kFC^-D1BrPg+U)OVc2f5Fw5YR*K@|pZA;F(@bvvm`4$QGT(kJb z7cD;d`NnHAllaDl=JSnfkCkss8{TZbQN&)hRKD>wADsPs;|G<;gKxNJv&gRV_{Mr4 z-!OW@8lRr93f^&z6J4{)>IpvHG10=h!s8upp(nsQ#5auprrPQW>+#>*5h(jE@O`r9 zXnN;y1`Yf{_I%Z^oifqx?or($qTRZ2-6P9e)6cI>&&Vq5`})PMelZ1_yV=ku{*^h< zCcNWojOi>r@|RXuugogBiQjiT7A*NC{+&+nkV<&YzIE`B(>g$3eM}DbzE0FwZS54< zi;t=`yhAeT=jT#Cg?;$kMbIBIY4upncZG*M*)t!yYt7o)u&!*@ofA3B;~(sc^bGM1 z=^}Ue)+U}3ByM&lS=68t~16VGNm&OcVUdWPX4YZCR0yc8aidaj4&k)Ba{ruz=h z3~~A2)1M!0-bFk_{R_qaw)D^DeR3j4d^SgwkB`VVw6{VymTYq*^Op3y#Pts*^O4Mc zpwXQtSbuQg&%9w)!hn?Bek`-Q%j7Pekabb23f6MmuMBtL(y(K|f95PGi8P+k4B z%RBsX;=&|22PTirU{7{BRX!ofYQ=9}99px3e?91|r^G1OK(kbQF@9X;gYa9IjBbkF7U~DT#wwRg$ul!iwpfqsXv`` zBK-dpu65&i?izlJ?_WA%wB9Lm<%0W+Zsb_X7p&a)D(uUjvZodJ{MQldai}F#j+pE7 z4<^L&6dO7`C)M|#yuN!_pY~PzE1$pi^ZN!5+&*)e<33(4t{eC9Xg&=;7rp!az%ISt zY3+<_p!c)L8+*#7cRydx1Mb4rLNC@ceq8#v9)3aB-=7%QyB4@N!=^0GU{lsj9O(G? zdZRXF?$v@b@8YNV77*712Ycn7WobUyrVJf3y(h?R;G9`*UyugAuiua)xBuCExn19U zxm}z=ZWm9SHo^zr%yRq99W67S^AzjyY`bK+{oudS>10PMw-fyQf^SAY|0_?X((jeY z@U2LKFZxs_KYy=Y&~8z){QSik{QSge1>dIq{M8*L zoGH)kOTacc&+Q-6lk(hl<~5n;_MJ|^G{0GSZpCTx+=?fz7|>*%+kcZk){^qv?qWUZ z^4y;Mf1=Ohn&*}ge*bS}D*V2Y48Ma-!|%OghTp&@;aAtf;P+Mr_zgQQ@Jq;ZD?XY$ zx0`@za-Q4%>(k`9IY*c0*1L1F^4y9u#NCjogW$Q%%X9m)U_CQYXZm;Nxjn<0{CRG_ z`=?)ydU2La`4P>^dr7u`OO5@Tqz~6Ukt$EW4}25!;ZO6@>%-@y&vQE{`o*qoEXI;U z{YyH1ct^mgn-~ymn~br@&Mf_%VB7NaVY9Z!SevIe`F*9M46HN3*7ILAmgm->5BFdn z8`FpHN(0|k7QSBIOYqtxeW^OLAM5?DE^M3fV;T6aO!Z?K_~zyM;G0<=Ud8?yJEw*D zvF7>Unye3R_|Q+s&4aOL)Aob$3*U_Tu#*P94^2z5cg82d7r127hp!QQi<;Jl z4Se%cW26SY(@trYKD@?*Zwu3hf6@qiuQ)F7ZP14W-%R@O11nPXsh+@Adfr;E?&Fkj zllt)0f#&JM2Bw1(>pp-d{-`fBsZZTN&!Cp14~JP#I(@j}AIDc8ZVY~X(!lTOsY&oV zy=nM;=UCxK9$Hg%JDpn?{C3j!B^~^3KQ8b~l%Mh=Qzw{f=n$W90Do~MdXjve&n%~g zlKL~%cZ>jbVR{x+gu3UR$NE%Ts65IF@&)`g59E*%U+-QjKbU%Fq|29`M*YB`G5KYq z=?#%CulQqpjq(xPVDpMc^hIA@A1Jw(_`(SMv^ScVo}1(Q8u@?NHP3ty?8|1q^L zUGXEU2E?u5a-XRhu5OGa<`v5q-7EJy#1VV)n{tYkhp4{zn!6T1gQ>@4?q4yc_m&*` z4)b$>Pi#g znVL6g;CXhq?1{s%26(dno}B&I=9e0H0^7yV^a0=`cq$h^4o`eQf~VrMiccAM=3979 zcj37mo_t!~P~a(_li-~V6SgK|x4ojXVSaxJA4$Bu5 z3v7U87k=|#ss33W+#Wh+xFynIV|whX%Tn!>tAL;M>$o1Ef`iA3|}t=I8nT(4+G^g@YODul~(>zOy_W z$dKpT+u(uce`+c=+q56b#e+0-pX7(S%;JDQF8kqsCDDEP#ffykzVUj?AD`*+_$K^N z<>~xT)Y1~y>Eh$>8RN2sww}wvC)z^&Pzza`$LIZisQ-EYv(tQX{N2L2$@u$U|0h+B zPfLb#RuX^r;G7};e%{%~2EJ5_$qvaoKD-%0h; z(;KhT>2vCFkl)k3cvSNHsl1r0r?+7FeK%_qjc2N#KE>d`vC8j;I(ko!dorGf9mrJ< zwd%C!MV_0GTQ?US9v{SY;Dh>N`1QGM*Tqb{%V}%#>ORdctF(D_%E$Kd>Y~)r9~dX! zLqB@fbUjtMb+XY^Pk*RCI8hWVxje4NH{{h#WK4N=MxPs;T2F8Exq+g8uT~>9ua1M4 zAFn1C+g}%T1pAr(AMw08)zmAmuA!#hT|>NftDf_}jc-Qzn|*W7A+PRK=9Mo}e{PR8dN7$0~0Ew?%L+Y}3HKfUk#s^wE&PG#NL%=X)q&Zl~H zng&MFf6a1;G z8_UP5SdyyG-(q3!(RnbOQ-AH{hh)wlINyVB3(Ftq(FlBBd{^{) ztnf|ny8_=d{+A@b>+YYV((xP%=R%K%j}IsMUz+f{UMpCKn)JJ-?X6(oJh1tG*WT=D zOZB_%rRR;|+2EmQ+TSDP0t4@3mD|nd*WXG5=Rh(&PfVg`=+KK}CG+b$j|ab=Cpb6F zuis}MjeKrl{Q8#`zUlb&D;tjoJvX0UfBNH8I)32VBz}Dbapz|Cvsz5t`55_i`NS1j zKHWPrzkb$(Zwuqs3mbv&#Q$UXE=U94F3IrCO3L@DZbTlFhkK0hT|IG~KVLI5eDC%0 zy;>N2r!c={PQrd*>gOJpQ2fG09{4-dqG7H!lu)0ejj~ z<#7)S?{sm{YYn`QRURk!QH_4x96S1<#V+sm+tGb3%qu({?3AO6gMOv?anRKn;-KXd zryX4!bdRTZw_H2A^i`{ad;YTIK9uj39}hb^S#BrPr>6CrwYNCn_nZCX>O}b+cs{95 zVPk%?&$;})3BOs|en;rwX^2zRuF;L^1YA2dUH#0gKHSy{v+(K$oOKW^Kmp=yj zH3R2krS}9l7bn#rr-k#QKXPf^59j{LaDK7*aQ>iqa86r;44m_h!(dn_)t2Wd-c4yDh)H{|AP*0E~ADH_3pAJmDddC5_FG$&B z#%y2zBCoIiwHKEKZLi>jzW&#^y@LHc{XYP{P4)CQu!XLZ^AC*-j`s?7`|dZ=)4%j; z(QH!w;lH`ovGfb9$zSU@*TC5GaeA?eOuRW=JTf6Zjl4~hXZT3GPgtqf=lwU2yE3=J z7n2+fY~`Da$EBxUY~s@KK4B|;ecms3`+b={@5HF-A6VAsD0;oS^qV#|O^rM1&vJvDmP+(vQ@@9^~$t@rl|?DN0b>pi~45tc`1(yyJhJ2NSCO^UU`yT}!kZb%E;Q{#I#Vi|g6zBg{%LYbqWL zviS+-oCkV9#e4oI^_I;`=?~s$Z`t@7zija!+4rrUZg(F84)l-LOS<~E@*TwQZ7-xUp8x)uo?k!a@`2@+zvo%l!|#WiI*t?b%c|rbJ;8~p=hJ@j(p7uo_4r@Q8RUvz zUB$jBpM2dQr^M^;ud^QZPjR9@EnSZKXSCE*g*5RE2;GOfK`BdYfGh8@7?Q!+~uRkFiRo^H2KbgMpUhn^b z7Vd&yrg|p5k8*$BB=1D)8sgFZz zZqh+?h^dnCmi}Xw_J;v`$#?br8j$1Gb*-D^%6Ijrn(y`f`X|0M&RkX8L-M_zyo3Y! zZhp%C>NXMWbq(~Mf(Mq?4ITii{lWvrv_H!m!-Hz@030)TKrcA(V0HBK;6YwD@Sq*= z=M3l(k`Fygqj!J@=q?@}R2f(jLuKC|X5Xg^A9!D_@!R03Y;g7ZGI+{bdUbRAJjUyN z;0bQMPoLcD!H3UreHDB_wOhi63iv=%eZUUSN#z9wC*XHF``y1r#oe{n^0{b#=e#93 z;OPU&dO#u`)bWn)IWXz;0#_c``mZ`)UpR8f;(g)VoHdIV;7X}?uG6!Rx_N71ix=mE z7t&kSdN@&$U$#OxVS9*1Ek4wP_sUxt5DJv+=d1|fgk-_h?4$U@z`^hbix=V<`@xGI z@E#8@bgrBD!=QYZKS)k!?>JzmPW>_;n@+9K;FdclzxA<_5ix2hqejW~VhEKTlfV=6VYUBm^kb7pjd_p|~#UBO` z%QEtU_w?k2YCjX?1?$k+PvQ?oUc4aPqCsBhe7+jaBaX`p>LvYW^954mMQXjI;SJ|E z$csaqCm}t2C-9c6_>O`1vB`?h3h$qlB*J@SGQ8LRd*R(na$#Qc;5{E&YKidv8td}I z`_LOlWA`V@gw*~SiE^L{dY+%6BZN#Ia}+%x?9&sf;W?f>IB**MGr@%l?pHpuW97nc zu5jf-p(ht!$uFCSTrhSavOv0mbcX#i+eCB@rvtB*Opw0d$%H^NWkRr-GU1EDiAv#w zY=_>B$b??-+MdV+@$??0#qa~k1mTF*c`ol+h7Kv2a3}Qdt+R?6Vey0mahV`}qd_Kk z@*r7PNGA{6+~&;sf-4ge*LfrBluVF3xXs{-r!R!8KG2j*=wq()aK+UlGs^*2j|}Ac z<$!lK>&oIp{_q9xLAV^32X$l0f)*c){Q&+*9@OJQ@?=3Za^Xt$Gj2avd2ktHk_W$$ z-e~2))Fi!8KEk*>Ko-;uw(_8xD-V8rGPuAw6^ZhockV%-JUEXzTwg+u(#OsQ$H%!i zp!K}~{D<;;vP>Arm|rHidPQ%e7xd$|nsIL5*h(u8yfXsxlH`G_6J(YNZvbO&ZL?UL z_EtGldtdkKiOq$3Iz92{=6niI{#QNHI+DyE6vOd)2pja+gP7W4L{UyN@dyNdI}|@Tq2F^R z=yf?pf2>*Wl|Vs^vnHp5&FVnS6>*#9O^H;85*yFSNQeFJB2U2yLg7y zu3p2xwLIf{zV%+)&9yzEy#i(Kxs%jN@SJNn*INDwQxCDw_8MN6Xk%0woJl-4)a4t0 zO*yN==n@4^RAS^Q%&*9Zn*H@MUk&q(aSRmXlbb-pM)sOuWbr+xepmv>B+ z?*V^>`icw$SA^qJEv^LnUEJ*atol>jc#!0a^hDu{_`m0mF!|ERr0udLR%XbjT{qGf ziuHCR-XBWxG zaEI$-@N9=lpRdW-4)~gktgyZ&PgYb}UsHnZP=u_QZe_()uB_+{{yaSGTzG+eO}*d+ z@--nVrZ@PSWIK2^W-(tUx z@D@E5Kah?vZ+LTb1fwVBis!dH9l@+EWa(cz!nW7^^#0j&ga*4YK~E@ehMrK`l%CKX zoDe@Kw0go5UvhEQ@$`h7#+C&d(-R8X8T~+d!g10Oz>gFiq4;a(NQXSBxjI5=vW~D( z_|md7%?22e@+sLQr zorR%5$tTE-{U2sW)PJfPUGppOWc8q$XLZdD#0_MtX3{n1TU}E!$m*KqyU;W7>l}Oe zEWP#0XDOTIAiAbof7`EA&;BCyw`b}Z)ZH3clcZL?#Q znCR!8H_^rWwI1%=J~q+M4NN7Y>haedoa6bqTf2VlBBx9?N!-sp-L+Gsuk6S7X#Cua z2}hFs+&Uj6jyuS`WZh(mcu?gKa7Q`E@^dQ=f}a~*e-ApA;vW|dK z%Wt-UAENz{21lAJvl4M7(Xa8W-@YxsHx0k>Y+J*3LRq=X#bdDjbOx)(V{W#1;_;aJ z2`-+*c}#d*StYuw;<&2e7oRz_K3EclPPO;ZpJC6!WA1}qb(Y#S?5Xf1PdsLhizkyA z+YgR@868Pu+As7YW6zGZJmyPW6UUP@Jmv(>UwL@lMc|3fQad4c_XydweM>(n0#6=s z@kHmKiMJr95@HQIfq`&a{6*^)fB6mTJ(uf+E8bd#E5e_HoS7#6qUY!tUVXpn`V}`9 zkEvXoh%1$8aK*J{-%W4JqI>@doJhCcwH9X--!rx>d;haPiMKQ*r@Z?9#_*;gj}<$% zyfHhrYEh~kdmH$XV8?cEejUmS&8$PgjxA4T$G%~5l}~Jz9lM9K##*8s`#S5&WXBFQ zF!p?&$*^v&9otZc;=;G-y3m`_z?hm7I|s-eAB)QcWvdY zP5UYvc7%cbvBf@<^JLHyS9^If;_HIH&Sh2~pQ*n1mzO8=4dAbsH+HG9FAiQ}Y2MQj z-=Y^EvS0ZdlKskmsLyxx!~^e>1Izv@2SR>H$#~4i_V`!p z#Sf0ohm~xLHuyCX=cz+HsabOV z3}D?7<$N2~l}XN@XW)FSa=!WSy*&+l506jM<4$Zod`BD)_|9t{d@G@omI&Y9Tl!5G zk68P%==lE*z6bA5rQds#;X9!D@a=Ux;5)E+@O`X>!uOU&;5+`fz}KyBu<-_;+zuMK zeNgfn*=^)D_O0J$zZ-ZbpKF@~yekTl&b2*#blE(A{mROQI)?+7JF;&}rPCeUlpXml zFt1sOEnnpJ<5GU2k>}XI6?eFHymU47-$QR-EkB^CV+jS_zCHK?(c3w{dI)@5IjoX% zsWlGL)!f_^6Dums_u!9huJtH4WiUEhF4x7+H0SxsXVsau2kKovj^@@gyj)h<+VcN- z_IdKTwgZjcmgoaaf2OVSX56*)V{OL2$G$4wB>#>4ARE^C={u7z$J65za}zSl=cen1 zk1TZQJS<(^#+4V1OXTB$@nf3ZZ|~YcuAFYDN5e)V#;6`#V+8Ab3+p0lqfNIxnuseJ z8*Sb|pNww2ZnzD5DZSkAa&W38)eTp0{-r0Y1!wK8V11c^bMx%*%=TGB9TWDr(ZhUw z0utyOJw0B>RAga|zcvo*&KA}co=rY+Ok%%1AARf0YLC7Th`xcf`fGk{>07p0GJVSj z*93i2TROn9LgQ@$muK=pG*s z&!2D%IN;jp3Ho|*WA@mB`%?9}E*9o-du;NUX6FyRVEMf4^ag)i+Wa9?tCZZ2&%k@y zU>~o~oIfAc+IwieEQ zdA|7KBzb;ql05fv3aLRMPF7k?Y%V(3)!9A}oI_3eT+^PnYG7O`7&qy2g;si%4rf1G zpwHE;t)qo?I-l!T46K_6<7Aoc(s6>`UR<%TmB|fr^MyiIcMs+U@V8Z>x2v|KO1%6| z{zj1_yy@b|gZElJ&idW@T9_m2-P*)c#+E%HzZ*J;a)zSFY@?^cxA!C02ZRD82c~43 z*laa2Js~!0b#)V)#pi2cvy92d)<|r&Sbc%&@V}Ybw08p~^1Xib3;5m!o`COF`n+PZ zioFq=okPqGS=A7m?LqFSd|T3+dzOApxWW4>e@tr~fy{pqnXh=ha>xb}8|OWR+6lHUKeF@3BJo5hXICa!a+#SdB0-HfSq>|aat-&J$wx@Yqx>jUL4HO2=#JwNdb=TvXqI!0n$?yg=She0M zD}W9QJUT22M`v{jM{iwYX;dIj^{d1$G|nJMc9WdIf5K{8=uhL zyjCR}=rLLm>Q=gMPRGdJ{7#W=i=60^dt!^JOW*rS-|(SiX~^JGw0gAg_GuI zjfqx~uQG#L0_C{Z@J?It`Bd>PTgdaM=3O=;b1Hck$sOtMk~`nAa_470` zHTUS|*3~QSGX$QqgQ z%;P)lZJuIB`_orn;iQcnZyRlK()P~@ z{J}l@$LKC2+!*44_gh8k*SocHRmdvE=aiQij~!b7lkyVff7&sf9K*qZl3m>bC9k8C zoVJcL9)`QPw38ax+SA%bV!v+}X=8EeNpNXiYiIIagG;?i?*Yyg!wV-3Z9OKs?=~m8 zo?O9^%o+-I%lZ{Uq;r;Ptm@j}*=1>VU27>^geX5)p-Eqz6~@T!dx z&Qy}?J|CR%^2pr$!(^O!J4ILVuW6pe3)RY2f%BF50fQI2h}jN^#)j_!_xBu(JzodS z)y;J4VxIVepKp0GDwDs$#f`@J)?cZEI99&(&iq8aHO0dbk8hnfrls<&;=R-QmuwiA z%C}~HKap>}!al|M*1)6ZTfaLNzQyzY9enGd41DWi@Ut<#75%+%^my>C27CK&?7!ry z&##(m;wFB*dL}#z9(0DqN55b7ciwqRo?kVb$knZ@+`$Kjh)3Ar173WNqMk&CU%k)Key=coYWjx z&9m3=Dq{zlHQs1(M875b)9y5Q&=imIbgje~ieGNY?snmyCeO{2SJtL_ZeFS$eZGZ# zp$Gf(lFmO^Z}Xzj#}1&68J`PsD_ZT!un%-@J1}i5hGO7elo~@RRX$_oP@f*1F^0l^ z_A0&cL)T_%VKEf5wo$B2dW>N0kD(m?o#;K;PV(TIs6(gsw>0=oEu8)5PnL#dKPSO? zn1!?7ueL6nXfFjWX#TlW2agrTc{;1cvz0Q!xKuDcS+W3pZDBArYjb?`?1%A!V}No0 zcz>^k_((>6j_sj1xbc&q=gXf~R_M~SpP!Glu&(fEdQ1{OpWYB3Ie?DYz|Xs!s@TX# z@$>wq&!sYS9kOw7_<=dU2Ajw5^MQ(uW{!{8I9Z&Zf8XQhyqBM!C&bCftBc3UwtD`M z27a#I4RL;s4HM_*N&S1KrSS9AJ`L&k`D6?KOmVWH!Gq7n(;M*M=;{4Divxao|I?@> zdT&3j*>Ul^sGa|;JRR7R194un>0S0;OQrYR4D^0~*=OhJ4RCJoqsz|l{G>Q}n| zy6lL~p!^;+Ceq>LQ?D-ymZ)~g)#Vz_pj7-!G4e)ezkK34_0pHmT>kLXGbmmAvrnmN zKfGG9knn)_a`}G0QuSNV8I-5+Jd?Ld%vApJ-{KFI9U857%G~@I_Zi)=YfoZaHEs0v zbL-&nnK#wb&8<;M^_y4WEAX%HL;Pi4E{uA*X)jwFJji5UdNSUtNlC1^Zoq?Nde3}L z*+sxx`N~s$IT3GOlt|~ny1Zt`MHhE!o*&e}dZpFh(Br&w%Fy5HCRR#s_hftKxagnR zKLgtq78hN`x;(ut*$?{gi++DX^K`gWe?kI$%NvV(zlskh8NOE~!}sIn!}o>e!#8cc z5%4XanCH)N$_(HCYN7BQ(FlBd9vApF^x=Y!mshlDh=-b*XKE0X&tl@C=x>ULdi4kU z@nKzJVeZ&C*ZUW`^b9|DW1-&~Q+B^o7Rg-SaVfeBJXcH;b=B_f6a9ui{rrp??n_JYD{Sq&l?qP1xr>o2AQ@ z?}D!zzs&T897jX{mFN2Sdq&&M*uZ~yzeVbDW^F%YZ62TZ+ipD!%$vvC)7$3>dR(SD zb<_6%JuWw$9ycDiC+9Q&?Sck9F6h-GjVH!MK68p52mQPGjt#opSBWz$)q7TN9b z^W?29@5zGK?zX+ve7fCaa6qy5xE+7u#U|fX@K-(Br}-f_FJ@+!QxA~aC|&-O>8{-_ zJN}EOx_10!@YuK>56@M8vvm8|RYs3DJm1j%dQ1Di4wM+!2hIofo((TOzI`NC+aXem zUs*m`w=Y5bEO~VOo~7Lcdw9O5$1BfKdi-fTPqpUi#U{QV_shcblh2Zu&M%&BdZ)qv z|EQQ!k_|u4)**U)-__&O+wnuZG`jvWp3Zw_brdymCoLb*t zaAIH&aH50hJ%FDEoah*d?dcS$#WodAxOzaZT=gLE^MoGYg~18lZ!^6Fg%`uYi~or5HR<7zU6Fl&dkYT9san#dM6?Co%255yFBk! zja&%(5G6L`S%?k#1#WW)IOAQ!czV_e<`7t8Jc$c?pM%6k@*D!pHc2|?F5p7z2I7M6 z_nzOUiuZMVr~LstCd@c5SwC3vH8Q_!@_TWu7d93q^Lv*73$$g1UfAHhciy(g0Xic4 zT>tgYi2Gc1!`sZ)O|8mBIF1`VH0s4j7H}Jgwa1S{T?-V)P;{NjX6m%(mrkb`b{|oWH5W`LtiJ^Ebc#UHfBx^S;~Sy>gFu z&pP+gHQsyUW*P5oP&l|8IN*7q6J)%1Wkl@kON#d}k50#WEs%dZVm;Shc7cOZ;vj9T zC+5vrW4%>>&B$0U>6};NoEj54)*C1=;l&50j`dvXvV@;k3jRXxXd7dx*ZCS`?&Nzn zO|skftSchE^Ld+;eWwm!o>p=`$$gH(uPbxS=atOPx9-mM&iCZwK4oG)Z>mM-JM(!D z{U7gp=glQSolZ*mey}WAz6+f4z1F{c=PJA2G5K0;ySIF^GgQ6@KQVoDr+ml#o8|j$ z7x`{G*KvOr`j_vp&X8}7zx(@WhRXMr6!$k?{_nlNn{P_Kze}9*?UCnOKhGU5{c<1o z*R}6V*yNh?Eist){rz)>$~TrmzGrocd~JTYrJpA&%v?;WxkA@K-r65uqx`Ug=a~Mu zk%zlp`s2*$a3190GRs^c@b8*$5p#ubr~S?qf?dY$^JL!rzgTBeO1+(Su8`s~hR3^p zZ2Dk4PX^2tGS2qTznFd(<8Qu4_80u_8SDKHDX!Ja7qfG$rax}u*-QNLY}ZTyRnznB00eI@gS7JjX1qQib)?SF3EB*>g~vmMg!rIfek*u3@oQZ45U ztEaozB3q|__Tq1?_uK1U+j+L+db;-O_q{hJ>-R#)Ti44P`u#`#_4|XJrQb!Jjeq@~ zqvel$YNqM;BOkfz_w#J>*LU0t2VVN!dB4;1=s$wo8E1n_F=mM!J==cIgE#u;S6@(m zdYYamF)zZ&qYGP}Kgn{(Q}gKmz`M*;9{qWoP3v(hkG|o5dC$G%YQNvknkv(d%X_Z+ z+n~o?7{j!Q8g0JZQ5_;)+OsXV~Bpv75H&YR(E0QS7HCY`eZIB$k^@qdC3w?C8>y&6B~ z41i~_^L{gWVtxx=wQBiE(F47C$Jw(oJj`7Vt+oAPoF#K7dis>^@ zBWmPDU5%P6qxV>rCiTW7*T(a2u-EbR6XaPd)mgWW?i#DbSs%0Dg1b!h9I^8RF7(WA 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%0Dt zyR>YK?_Y?o9%?T;p=Yq&R3|a}*NgjZ8p%5jc^zLI8+((y%=u^+hfIDd?;k$!9tB$C zR6<_Xmrd)X4_f0$-giKG>w+v-$Hn(G7rGyV^5(coRZe~N+(&)}j`Fq^vIf33c6mDl zd0k)s=y{`Z4no$kZ+`T9hDg@p9E?{lp8Lq}cAz#_4_T-GHNJBs(lZD>>;EmjddLTg z7GOR9l4&fDZrc%iQuvPT1>Ofu@;V@ISJ&8#)isbe1bM4oJ~!^q*9Wgwm4!#oh2Ik& zZI|$z@^*UL!ujvWh;`>WziMH*{+@*s(Bb&5$;ajWmi~^6fBgA+@pNxF?3i~A{PsW2 zh2QxhFV9DMe+0F+!_d|Jy>nyoK8_*CI`xBd;crIBZFIqBYbjp^3$gzG&wu3p$O`HG zkqwaL>KU7Soq{aSk3M?7Xq}n02=}QS|Hs#v#9Ip9p`ZNYym{bl2k()en)U@7Vx1d{ z0}btdYzanu)WeB$XUI4W87)7%D4Txd_e}(@#X09|=i>Ih3F-@vKu5#t=f>oFFf=Au zufsg`WPIm)q^A;kI{V_U=LD7Kt@!F8zh0b+^1N*t<4pTDAN2i-TJYAqb8bw(UqR2w z^+N8#Uzp~=bszmXxnju8x*q3y{TFD5AMra!q+>U9bpFaTZ;YAu5C5GOYCD6_QF(f7 z+73O3op%HJ>))J<+xzv~A%E?FX$@lXG1K1QdG9r(yqyAX*6-qzH}bW`H)5T5X6${f z5puJBA75V^f{rtPI2X6~&lJNx>lfqv?~n2GXVTFP9lQP=4KK#6-82PP-j>?pg z@V_+%EH=M*eKe=%(&{5);6-QsY+VHb2BzSPu5U7)>4 zpC9D+ZBku0mZJT6N8}VR`dh>>!ZF?k@|v+LhKJ-Y3d8Op9#GiV~n3KsE5AF*&}g%4ukxB5PD9}iNBtr zUX|1jlB`gjin__KbwJ9 zHGcYrps(%L@zIxt@|E9#=gw}!8VuLesLnx)4Kw6h1Z4hb4Bx$ZS*q@Q4Wg+d9 zB&`5x1Cq32q@9hCmWO=qMB3o$k6B-l!dmT*){$_iNt<}2E z;@hu@*JMW>?$Vx8H)O28V`Q|^#xmM12NoW@#=keG>8j;>u5Mh=I&a@x`Yy+tZ-w71 zrfqM@Zl3RNo4tRI)^@V*?Nh$y`7PP|=d{gUJ^`-?JN0(Hb0xv~M3zrv3f1AfwYabL zu94A9T;rt{KB_~)3xGGoz}EwBiGkMuZwKxLFY1n}O~}~|ydw%Oxy>Dyl&pQX#PVJxIfBV+`6NG=9g}lQ1 zM@Gs2P>uq_cgUAK>+t+B(mE-Pbmbjz98B=aiX)t3ZR}OI>fBdcbqg?QeCgY)smdT+rm) z>+-iGHcz-8W7He3=l7jljylx`s5*5|a%0k7SCg}OLQ7(+gBY_5UOVyn8z=kx#GOyv z`NXYI8P7sjM)Alf={4JPPpW8gdd87NwB9?>&tD|%D$q7uByBBdk6#2W`PU)PI!Z9U z;hOSm_{&k?3UE=6{_JH2ege2R27U&3UJTrN7v>4T=jrl8ax#I}0?#4bpS{$OzYuss z415*vju?0;@a`D+PT+kp@J8T+G4R8{9UITj&oSWMD4g2ODd4%l@i?qr&;1VHf!*rC zr&ZtHdbR1ZYQdhT)W*-L{^lpumd~ggT6d|--du%Sb7<~kc)A}b*va4L6+!REREpr2EVX-sJ$!+wHKo40?l#IaGjmkrpPBwfu;{M-MAL{5c&1*(Hhm&rnY>W z=~|)nTiV_5hf-7i#h6q;W0G&LMy#(J)>&tcP}u|Eb(M{b;#kt8a|!9ByIIYA#x*(u z{gTSkK>V9WMh_YMdjGT6D!QPD%<7ab(07A=*Ormdexq+Ry}#nNJyRQ}`1eh0P21Ko zsd=)mEoFbI-&W|+-V*PDq<-FBh|lGO%%9w^5(~ZKnZ6d-nznD^{?xXV1DOXe0b91V zfd&P8VZnruxB}olCw+Lw%mDCKofIj4BF?8=^jJ83psB2MY{yo;U zWOcnuqrPMibeY?D4CAqf{LFE$s>}o)syD;#O%`GK@`$|XGwRxlq@AFv2c77@LVmt9!q3}5(*_!upA&uzG##L+H|!|p5tu@Vsf3nq zb{f)q7W7KBTqflwV?F#3G~Kw?+py)p4F|9H?a6Jtu3+!AO^bZZ3#oq0Z8reY0Qefg z*J0$PTRo6*Fx|gra^ocb-n6EPcQmIyKx0>^Vw1a7N~E;rRHDsZebV2Ynt#&QoT}UT z5M&N)4~^HN|0g>i1@5RB87(mKX!J)AFRC2)D*T@YT^8tO8hO&~L-VYHX8W3^guRZt z-gq5MC%H)`7gHKd!J6$fCCgs=#_K*J)5q$C_d(DO*iWCg`I6hG`wlc(5AL!0_BL3X zp0gJ0`MkC9d8@zqS!>HP*2<_JwW{rN*8NXeZ=FE%EZ@GTt*yJQ+DbGbOt|z|zD_~o zb31e$dl>5;V~*I6;6G4(@Dsj0!NzUAy;V(H?`V0jx$>db2OfR1P&A8x(KuGW^KRJ4 z4GF|R^v#tm50Zpz(SE?2-}(U7bI|3wAN}5=n5RU(Gf^BD7VNpA5#OH0_uhh3>!tw$ zd*a|N1n;VyIBzs;JZLXCP<3#te@|uOgTB2FJPsp-dQH%izMbGHe{3ZDKHNI2&x;Rk z@a+1sV=}(&4`=HHt;QoX6`Sz@DytiQQJxzBPk;c$4 zMtM8~p1|X#x!s`6Z{{IQ(RuW4z&JxZM!6d7z5^Q%miYGG-*lgUPjTZ0U-SAHdCY^p z_2A8W!n6n6j`Ecr+~jM%zvaGyJsTTKmh3HV+R(aw-@V#q=#HA+3mdgV#+gsS_YM7q zjmSI&WGL9EL-YZaz`KEu06$Ce(Vy${ z^#Yo&7c^NgY__P)+N~4Bj5*)veErS>0U#TCi(i(UM;v>tO_pY@MWrc!_OeJGh^O-A zlwiF54DU}DK%d^f6*Q-|q!b$c*zNn=tsZ|{(*ER6h)>e3ifAzr9bQXHt7o5ke{x%r z==xT@`PSQ~mJoYBvFr1xL(n<&By4E-fN6|hLIXC9y*`ZcXqj(Dcmd{Y$n$CNd+J9< z>u?<&8^s#izgMH_PuT0l{AVNj0V(~;Fnxg&lQQOoXfOT);5`Ih@)MyeYOO;wHK6GL z&3d9)V)#UOen<7)0-DpH@e&P>)8x~gz|Q~|{$!qmHmdl{rCyuF(+4`&i)VFz35~5` zzoWi&1T;gCWi|RceeLX{C9|K_&SDkqr?v4Nv+I|F#tOb%E!Mp(8v$YSzRI z=^p4Y%?6f4Mhi`eG*7ODytLgTqlXQ7`rNPC+G6pwLLjDpOK2iUHw{JmH2G*3_;-Q7 z-QXAb@lgx*Qxg_hI`4!@^9`@ajz@rbIS1k%V$jEL3?;FqJZ`y ze6$zgr_BhBOc33tQ+?GyM(4Ak_UP01yf9a7v@9k22g0)>u}5|Y^vZK1qYZj~eWpE$ zrJ(}fZqBZLugEFz6@d?3r0y4WmIFBluk!Di-Q7R2<`n0wVBtr&EbpcCIiq5iT{ zJuvy;q!oM88Yk{eZA!Vl#og>#x-Y3U+27{e@6z8;kCn-aunqj+G02-eE$-IjeM$RW zZBCMt9XQ!XU8au`3i?j^NL)UN%O`QThYoo-jXXF$Z#uKr_t|KECuYb?T5QdB|2|8r zH6I&o`r7Diw6M_Z!8{+-cjWeKVqPe=%V_3?p(RA^ETS3MdFZkb>Rid`$Xh4=cWuFa z#Ct|Yj~V@toTUUeQ&%j_Rw<6(f;L5+^;DHStam(;JJoBHmCRme+SUogmc4{L)rrk8Kk-05 z^((#5ainErv=`Us_k~R=^(Wz)GI<%u$(KD9Xy2_Pqa)|@-wIZv|6OXj#-6}^uT#5T z1zyL#k!v9&OsNjQ)HMAHfUP!xRu@E*qN4d2q+ z5Ut~U)X>FVdI4{yx2ZH$I`8dCMUdlp5c7^Nz^_RT*)nW<%$1r{x=k|dKer_-w9Wd? zyV(WFIn;j>2_0a-In8u>pIHgnju%EoYav=$3fabbwNb?`jP6=qBsGGr2y~PmWf|zi z94b6NqCU6_G`kI&(EO$lTJ=8NnCVboeHye~pv@t9<~ft8uO>QICFbEDK<5SBLeTYq zj(k;g~TA=A24pUW^$z-$s>!y};YzDRnq z!D*8J&yjUO_z3XaDBKG?tqSu);0tjbu3v2Ol50^q{&PW75XHL+cmVif;QhE3ykcG_ z=5zjL>(VCMUi2`oQZ*ZL2uor)8`sGgfC#m%H<`REYQ?Iri_O4t^!Sc485fid}j=t ze7=$KJX{MK8vO*aWX!F+NID9-cIYD?3fEKkT#0;Fzx$>`|9O1)xi`e)F1l8b1yOD^1(Z( z0b!7^s6Q?Qo(8;# zalOx`X#zP>0WH{sH<64Q(B?(SAbdCQ+$fy<;Slf~;A;)p#yQ67us;ypanKcmF4U(P zeq-wADX(WiR}Q-MhP;R|4nnyHCR%Sb#%It*&4>1CV*6l6h?eSg6=;M1g8SYKxnW-u zZFL###oXU_GGc0d{>DpT-${Kg)&_YQUo*|+BIHF36{bU(d?)!qA9xRgx75gsVG9}} z`8>clw(^3;u^r<+=ocFFq7Mk~#gl#Kfo2Faiwzn>rpdlkk845aIUMODgjWK00QV9< z?pYw;q3c~tACfC{V`IS7|8#(69(XV0f ztaraLGP;xKXiuX7{t1%@FC3aJ5A$$xUGga zW#|P3QF|)6$k#6L=Dvt>8u<#>Yk`=+(@MDXeBN^Kc7r$bTc$Gv)86PZ+8bRa&MI5e zs+w*x>;MTcxCY=W?y2R|&Z?6C&*a6|8A8hr6qU*8qgcCawoR3stqrf9* z2S-iMp9o(rpec*+DGOZ^TGd;B>qn*(8+88+5ppx;>Kj{48*4w?anLnuhd@fX4H^nCAf4hsIF{y9?EK)=rFn zpcUg*WS+1m6}d*GdMpBc8|Xv6XpFC>`Il*^6?@9N!7~J&Rp1wS4%;WR9-uNG0iE~z zk@dY0_;KJFzz-Y!6Ynq5zM-Es5V6y!-3tqvdRmfaeGKcDA4JwK{61+=-_e$^q z2|gsjJ?_}{$&uiN61-f3*Guqr3EnNidnI_k1Rs>(4o~dzdL?+S1TU1}#S*+$f;UL; zP6^&4!TTlnkOcRn#I{3@1TU1}#S*+ug11ZXZVBEm!G|PxMr!PG6PHQ61-S~*Guqr3Em~a`y{xM7CZkL5kl;#YWOg^>*f(Imctpsn8;GGh@SAq{o@Qll1=Ra412PAkS~ z@PGs_m*BM$yg`C@NbnvBJ|MvzmrKek!3!mLu>`M^;4KooOM>@F@IeXgnGw5OITAb| z!GjXKPJ*{c@Jw zP=eP*;dz(o?Yc#RcS-Ob2|f^o8~ujk3Q7JYc%cLjO7Ip5-X+2NB)D>=B%cyI5QQ7| z3`+2ZDBQ45R}`K#L$8-U39e*C=F_0}O7KDnUL1vcuGIC`N$?H{-Y3C_BzVT`$ow06 z^CWn=1h1Fiof5oPf)7Y=WlrpTdL(#`1P@5?atU51!P_Nxw*>E#;6oBTV{Yv7=1A~> z1P@B^1_|CF!Mh}Qp9CM2;Es8*%atX;3nh5D1h1Fi?Gn68g7--9ehEG#!9CfM@=EYR z30^G0>m+!K1n-jIeG+_7f;;9%mTM~aS6LFgP=W^~cuN#MljV0u;eCt`N^r+jk@+;} zy-~O!zfgh)C3u4b?});O=IH%-w*>E(;EtTg{2OwzBzU0&FPGr;61-i4cT4a-2|g5s zYjbrwco#&L%NTcZBzR#IZpbN@;0+SIQ-b$NaOLXAd>VSa5m+!G1n-gHgAzRB zn%McwmEgq^yk3HLNbnvBJ|Mw83nlrK;6)O=HVSvKU$sc^4hh~Z!Fwh6fCN_-MV8CR zPlg1~k>G_AyjX(QO7I2=-XX!eC3v3%SFVj+-Yf}TD8b7mc%1}qm*71Td`N#)uG|!vPeYDJg6Bx^JP97X z?l9yRN$AU?@UvX5Itkt)!Mh}QuLK{E;EtOk?ellePlg1~mEgq^yk3I0OYm+9J|Mvz zx5UnWmITj};KdTWUV?W@@ct;=ah2}3j=acx8hDNbFO0%dSx!)b>ss)BT2AlakRHRO zzb=mVa!9W_puYi*JM#7X(d)eFFN5Q`9O`!;<2_m&4{}JKccH&}j(2cKul=XLevT_X zU4DWNE4dsm;?Ti(Eyr6pyqxhaj`woNZmJA&+~e2fmoj}J$BQ{EW4xZ@?Hq14Vh(#54|2So z!=EwU&hc&zf6lnFRF~`J@HNKsI9|lz2}3@|8#tury6LZz(0yo19x86V)dqfnRg7UOvwFXHfR#%np=!r>{#yE)#^;X90bm+Nx#IDD7! za*o$?_zT8+I6lB(KjWSix}01Nf5~`|;|(0n9@Oj2_IUeBf^NiPXyq&|djQ4STki#PGI2^aKd=8H? zp3Ct7hu>kmj^phdewXncj`wr;ABOzZy8IjtyBROycpZn|W4zs<<50Y_7IibgamQ`C zy#HkSJdPK0_zL5-9Ixl_zZmb}csGYVj1O?!6VT=VknsS=YdQQ8<6Ru@thgUM*$?;wevl#cR z)9G_KoXvP0$2&Nj!?<#%PVeP#F5^WUujNpDTLXU8$MGQ!cQJk8UAmkgho51*gX6s% zKFPSFNT<)@@Ux7UbG+UN8SmzJKZl<)(DS6z}{1PaVhGIW(TG>f(4WhsJYR0~~kUuS-s0y1S(FBjcXCMYBcZ=Ojw>5<`IB^5@p3$m!^w=7bG)8IzTHIW;CK&*8B9OG zaYwN(e+uKd953Qo|Oz@m`J(aA@qW zJGSWbUJeJ})MwT?#&d&j>G1%^JsdAK(pkO{@H9aAK2P+G_;HRK?Wq45ox^B9BR#qv z!@m@kZ}^Xw6&QZz<#fZ3jP~~4-$%C*sWD!$S|x)Up0UmtVXE9107sP0n#=6C5U&VF01OxBq2Bw!9{R%H2^xDwB|4AH|>THTZ zcWzWKAM7fizjM5f<&ARO$k!mp@8FF5jpHk=EO@+vXIat5p>Bwe?eMW3$O0ex!MONA zf1%z%_dKMBo=tj~#qr!4Jzn^*9(GphVevLStgqEW&t^UB;droGkJpv!VeUpf^fG^4 zsUEN0p@*Fh=wUI-sbl(vPw05=qk5>YydsWgaG1sU?BIL{9@OdEIn<4b@sH(sSxz_W zQ5Y|0IbM$US8%@AE=6pIV&?DXeD`eE={i|o5tnO_gd+o{_&o=4;_{ z3~@Y{!yL}XAnPr9M3>{O(!;n$p^YyWwB10eNTVeS?24wh5L<;vlF*BW#zx0vO$vwb=^pLJaBB9_-{_ygOw*YFpX-_L%T#pw-3 zzPNr0je6sHtTX(G>uHen7cpHo=eLgKc-cF09wFntEw*Tel=H_L73d7xk0R#F zV*B)R`hXE=``9a z%L#J+99-Y^jC(krIn1BM{0*!p$nB_{>GRmH6t1T()~~R>Zmy?1=Feq2^>VpAT%K;O z{|@Fa=JX)vC&=>Zxt{AdADzsnFnurUDc`4iPy_P^n0|om-_7~0WBm@p{wyz#(`yZT zvRn__t(?mdWZcVsFvxz?&HB6?D$EyTd)09`!14HCdxvwY7F z^%Yq=`)LE`zn#lh#C98Ee;?#}?`M7OgZcujhxHUQUm=$>hx3ucausf8S)A{F#)sH% z>Np<`_8$+Y2e{wqSMZMmY>J+ zy&O0A`nY_3EPsIW7vTCCWV`mVy^Gl&x>-&q=d*+5zn$ehgRLveeB2Sv`0?+)>q=6_HnVNJDSJyo%+T4y5~jz#-)_j z^MJl%T+i|dr#<)b=Zu|XMDVxF@4vyDwQl2%s+t|%1qBp0n zb&#k&olG~|BwCEBw3D0(NJ%EDJyyl~H-whCKr9ocQ$nJ}sDAe(La$dZe-$K-L`xx; z%X1@e_3HH75TsC%l~lT8NL`c^Z9KJ2`RyFt(p09I**JNb`YYnVpK)qK*X8(k9Kkt< zswU;(I?>X=$`Vz_b2z_o6FQ5294)9dRlSbRHWDo@OqM`)xWWPICyBa>619W}aFUZ~ zO>j`L^vX+A?e!o?)NE^T3Uj4y+(f;86Y{{7una#bbCEgw&(iC0?R^N2>C%o}GKk2; zT19&$^$A=l6Cc6lB)YUtd=!@%bm@RP>nq40L=q9SQjNLkC(&WWx8;;HlBexbXMYb^ z)?*-ZY5$^L@>L{VQmg2)FL^}KC13KWqRX95gx^#PkoS8)i4PYllfHo;^$AD`|0sg4 zQ?=n_>QhL5CPbHlD`oap(*2@3<9{chkU+jj>0OkhxGzPJKtFC0oIn{$BdyxYY8JtB zzJ=qS1nU!^P58-_Or%(gsSd3*I44uBpF*l;{Tf<=#oCG!Cad*&SlDJwM6KGbo3JuT zuwLheiL8&3eXNskdhD{&3^>VpAByF%{u8)Ttl4P7sn!~t$xXDrivA|ex)Yh6WcA^c zY_hc%lm-!-r&fBINw4*Ble%{GL}@mg#T!%EXFw%e$hEw%>m&9K;}L*Gn`EgvMaEVgvy`U;Ef>!7^SVrzni zEQ_rO+GksAJ7LB-7Te3n=Uj{JePn)~#da@(T^8F5DD-D6wkeSEq{a4q1fR9o{tiX; z7TdcBK4-E04t4jG#kL7DpSIYZ1Gw8_s|MdQ7MmB~vliPDVsR<53EyG1GWAh#Z#=`L0MJnpCCfB{yXZxV!aonRwZE#Wijn#{3hf& z=l+P=Xf@IkZgS>S5x5;c*^j{~6ZPR~{`C+y+2L61xEt0#jMUT}$cp18+W{mf6RXR% zDvp~)#Hys+0~*IImR%s5>~R!0RCq{#h-ZoYP?%?_h&YrK4K$8rmM)!VwIdVGm4-s= zdTw+6HOvzb5%5d{jpKI98StcaqLLjs7I!vy60XM2Rg|-(xKPO;;z!BZUQ?<}nyfnC zLQQFjk0(+|w8XkZ%AJ<@WTK9LF7dA-eRpCid`3%rCNWEd&nDh1!sim#itzcw$3@tf zxL<@#iQf`oYvQXS+?V(}5$;dSMDDc21Bo|@us!iU5q>E#D8heEd`yI2PJC8`UrGFi z2s;vA72#JCe=owXCE8#mE%9*TToDeYl7+Oy_fmI@_+L^xL^zasOoV?+oeB$SiNmRH ziTJtHVG)j`E&}c;*|=Sqa9jFq@aS5Ue=9|;8{TbEOzf+2+G+j?_(i+%;YW{Uf5iZ~ft+?wn&y%*BN(5z_BXzZRF2(aR9ib1V|>N*RVA%4aSmhzz@$;EPr1Gd()T?O_f| zcp&8}BoN^PVU9B>&J*dc!Q!Oj(_s!ucr4|8n4CD;!W`rkjp^^8Ln4ls4Gzv4r8cBI zf?s0mGuYUmo3?FNoJZ4-qGE{oPX@E%5h-0MuW$}sD4WicyuG4I`MR3khx`!F6_i33 zib(mYn(`~8kg~imPfbac@*6dM2}(_*bgLWlP|B~=6ntl0@YIBOTxa1WKTV&+EYE~k zM8c0#hS8UhmM@1mEdPW~!P%{*4|CSO7vj;Aj;bj(<~kMT+6G%Y|E8w5q8p{m{WZ)b zlHOBOzKSH$m5L6REmu|>RGhy`&qvQsO!Fv3SivJw-c9)%vQIoqLp+wRz{8w5YFd{^ zXWDEqVQvCSJ$;^Gz>Sb^6uxN8kjc>&qd2>TMK@NWVo*8H66aXsGd}&rtIbV z&Y>h?S1eB=ht8d9+EfT4u7JU%ZWSdJ>9uO|kJ+$6gH?T$(vySR9#-nr^edVDxe&WB zu}I#frmVxDLHfQC;?}jl1l;)=+zpzE;fDshVi8F{RZ{|hiTJd^s<@`11${N$%l`I$ zh({#+bIOAl^@w9KgzKerrC~UIFa1w!&Z{UvW?_iKvJT~SI@I*{xewVC z;?a|=YDywk{wKp+_d}2K5;a}nUg4m@#T6ma)76w&>~h~VSh+SHg-1JQXzt6wPoD6m z!LL|E(xsZ47Jrm>DmN^)aRXMul1*X+DO^LWsjMv>n+lq8C75lPo- zo|PEGC}{~L=>kR4)tcur=Au;(3%rH|uG2i97=5fQ&B=C4xph$X9^H@0Pw_$-IX_MxuLO)1c8mz)OT#xE^KB;*Yz)L7; z8YSsP7D=DdJePA)E+y$j7D=DfJb9e7CM@s_wY>M=6Y91H7fTW%_q;g(G`qxl%NTYNsTD~Ye zTi|P`QRh!I&s}VsnUqczVEH2bhnnXLa3SI^pmZ_=%NObYsd=bZqx8}!`I(42f2(!(Hqx{jRZnn?6h&wN_;473|eo8mlN2I4)Jl}!8iSkFu7wHo%p65AzSCsr9 z^&N{Wp8GicP?UU;zQE$4T{4n?EK0se&$f7GaQ;q5$^SF?&-bnACosxTw&`o$T(u(U zyVjI`Bn_e~n2Oa1d&Q%W<~(6de+yP6u0@nY7wB6ksn?qF5(E=hAk0;TI&}WVn*I&u zdN9l-l73}Pc^t(ct|!A>K@vD*P5&OnJ?!P2U`ziNdQsv! zWpHseMY`RV@)e$1jTo$Y36smJH!GLg($~YJ#6B4vfzByXrrJ_ABZYFBLn(BjSf)|= za%|~807OhHLri+oJX^}EfQWc=nCqL=CHQRVe?dzlt|!7=BI#yZipmqYwlG&77Ff=; zSRumiiR;^8E|CH2w?>vma?HYa6W5Ge~WWZi)WJzi%5UUmhv8Y zP!h5)LWp8HM6KeBw)8!47t;T76u(G6XiJ%k-j4X+isG*XpYtVK`u{_(M*PE3{388Z zwv?YBpTs{E`b>7P%!J*XKeD-RMtA_}izuB0DSFZ?Hunln3K*=4<=5oN@7U5GV^4lC z%q5cEw52@7p8RB(YaSfU`3Kvi6Bv>I3JouWxkS?c+9v&yla7YDK20^P+9zF)k`mX+ zFqcSr-!^F(C;chR)rE?6PPC`5WVP%KYSZC+tdA4HMK z2>vjaNV?pfat=vEe1Dj079eM?J-rQeOk9tIxkS=Jd&*b1`WwSs*<_6scF#3vEr%fR zn_(`IwAAjog_C|1=GsNpSa0_%L<=RZ{|&03Dg+A%m5*{tkt9HrmsFgFF&{ zQxv~QZ?LDRC?@g06yn#jHibsKFWb|90H+}2jVOMR{zZFAGI~hj|4WFUVv6M+$aTJK zPYbY@UV{9Htm{AeqD2tBWKaGs9ER9vsuOM?ymFaOb@eLz0wLw(UPF>%5lKI?r~H~b znuiR2#qt@dtA2a>ezyAaVJ?w$%ARtT`@_Rwt|_$k_>(>T_XtVXaf3@=*IPvT@9imr z@NCNP8H1J6KZh~NX-!DK4m}3(yI=*qz|_7Ki%3@zQl9eY{PQTC1gUy@FX^A0kiL`o zml^zuMI@yrq|k(pI5rxrie&+8?956?Kf(RjV_`0lG&3QkA4$a365?905BZy1H^J%s z3aU_b1sty+?P`j+0<&$j|MnjMCcQTUY>N8@TwgN>#&oTjPK217IW^R|;~vdLdH*9} z^rIxu5VX*uK#*gDmP#QJ(1w&wkaQ6Fb!>Li{EoJ#)J`NTNiPywA%xM!1Eb$3v@(gB z8*N?bsPkzQ$FbOwTnU(VvcfxM>c0Wff4nfJvWRwS9P2H~v|&b@UBc43xt(>$f#V4+ z`D-Ag4KS8I8$R#2-{Pj79oi2Qm8;jV^J(~%lQaS4sj|A!!RP9WM%dzZ#LQ zOHcX|D%bIElj}kI`xxoY?-GByULxA_W0T%5#OkKGf?!gniYu~~l8_Dp=c8nfujcl-4x)kPkrC9QUmCuvCmm)Imuy4^*a#3{dlYbSrnP1Z?qqVkgud8o(G z+*j!3L@3IMP?Qs)C?`TuPWP2AJGyBNA#Jy6?kpGWu2M*wshWGXi}p?_q^(lTJ;y~m zqZHCcsOFyQqAgDfX>U_=&vVgECWW+bskyUVv`a}L?MZ6x`7YXlq>wfoHTP96+FzuQ zHWM{>j*E5s+)`Mj>s9Y3^JX?R`;5dt93PdKYbI zQAqn&n)?P9ZC6o9yHlF`Mi*^HQAj&antQQ}wwWlTJtfV3i;MP-D5O0i3TZ%T%{cD;_#3N z3th)JJk6oiL;TBKGdV2auvCOAT)Q|t#Nja!u6CW~kQT|B`!*M?h$*DyujUT8Xst^j zEo?RS?JioyQbAB`EbJ1L!LYjDM?#-@iIlNPZ zTU-xu*d)So*Gn9}A;JpRUpS;Gtmb~eMYB{2X(Fn*A9T^IlR}zeYVJxG%_k|O$)o1p z>Y_;^g)|w|+*K}`^ifEYJI%e#MKd`HY1(G@^rwpMOmc_wB7Swsu%~v1q}pt&tFo-NFXj~D6o6}nkxEw zaY3EE-7}ObdUJ6>-FYH5_omV8&htkMQVBF&zTwCC$=rcX*gX@+^7Xh#R@|eQPdn~~ zi(9^SDdCBhfz>E8{%%CSq*y$vdkexuO9%Cf_?w)OqTfFCX;7!q?Nce2iorrjrTeE+ zE)x-JD&0Vp;+;lRj?~|QF=cvUB?6Cx zR%O~k81YYe6sH8WlYYJyx}t$k6{+H93DJoku}Dmy+jJ7XgCFPb;ZYOwQ_|Mj6y;H( z66fQTq>3LQ{NG4g2`H2#9}H-@^Kv5p0+EL$izpdKNg(>9b`-<%c6uJJUnWXXm}zvI z*Y|!DiaSeD!D+?LNl$=mkl?Utp_OhxP@H#zYT}>ML@r%durOXBjKUC(Oiip?W>6aO zDL4NHEViGjl+pDs5TYmzdZ4InUjf}MYn40z6Yj&@)YdBus6AghVO9d7KNH!|o-d#9 z1^AKe=Nv7X@PFu!ZLf*4XwL^Gti~{5J0Ub`&lgSzV9sTGU06zcK2N#y+YoKlPPOZL z>+}HXe*^XDX`HJZh8-^>$5!pCKOzws!OESkbh9N8$EEj80)gsn*BOq6#I3v%#n^<^ zrBz)-Rt9%^0aIZ-6n~E2VI;DuHxq55rJH>Xbrk@Runs@@8R9tANjG7g{({c6n7P%q zCQwY+g5s*q$#f=2rV5Jai~}Ijp080dlEG*I4R=SkpRo{haPtXkziGQL<`$H{s)a0Q9b#{EbduW+V{X3*< zG|4wbm?rtAkZF#y)JW4Lx9X@Uqdx2a%`b$S)R7-O^C*+0_66e4mW$;%^^Bk%T z_?mEEOY;KVecKK9T~dM^sguO5M#h6(xgnoh0Xb93H{>hoWQXpvfhnaF&EROEvUC}! zi$JG6hM#3Lo%&ZGmpxRgEP4W}FMH?_Wrcq6sIq}BltL0)g!*hp7=2H$+V(x5Q-#Fm zYp0eVf~GO`0TBkLZWm#tvi#}^$hTT%++w_#1mjO_TY_R4&~n_I z5gX;KUUgDlJoD9CrWn~P5oQih#oWrivjgVTkT!&yiQ z5sTW;^OY<>#|IxRYEu>ngIppM!{MeMwiqs#X*kq0!!Q=O z-}H3d0GG~JxyGj_nRQ$STf;1n^i3fNw^>dErQvXtjp>Fw4Yr#;qbhmvlv3fjmm3KV zN=VWb%`jYWX4tRSrKhOm*RvK0FS|nb>np=xyXSMu03}9)@KldmWK;^kU zBur$0#9?~9P+5kw8_ms`Tw<}&&~GxQa6`X2RO!f+xz=yF3bjtXP~Ie!ROT;2A$&|N z@@1y>b9)pCq_lv$2>=Ei?q3NNSF}4Lfy6JJuP&QdI?*eNw~VCe&7yF=x?o~ea%n`~ zmWMNK$WW9O!c9&6sZxp@+i(Yd9zv_Cp2N|Mia*5gkBiH!xKvi+e-r*&@UN+tX>Myi zu2k_uL$vlHek@oUBx=Uf43Uc|D z!k6&>1N@)F{~-Q_{`B7>RlNj4m09@F7UIX^$B+6reyq>p$JUG=?aTPFe-l3m-^P!F zUOJgTZ-#VGLc-7SW2c{lH}PYkqF8^2D|Hf0HtCIomK*VtxC}oDHr#iXs2L-gy2AEt z{2#@?%aXQuv2EJ(Hs>w2X}8#}bfnsDz%9s@`L<~YY&Y4iq#%qYQ1lj?Lr+vGm~Q`+ z)nZ#8}KVsgG? za86*(0&w1FsRHNCD{POiuzgmYZ+lyP!}d+>4cokxi)~k}ux)V^S#41E6Lm3kPqidM z;ny_{m2TB+Ghi}f4q^F*MXj+_tgr-;M`dNOrh2xr zZ1p;?f9~7`*YN{X-t4WF6*V=LW!Ys_r4=Prh?i`vxT!LD?Lu$%mMx_lz1cx;_U4l9 zk5p|cuijR*ZO8WP9aRrkRF!7elx(al+m6KTH6@!K%nnv>t0~)5v#mONdkqM;gc3GY zmTWIKk}I}VaRJsaxm; zst3zTkr38ax@`x_raV+uy`3_=rL3l`>LF#rJ!@*Nqa19kz+K}MTZG#;7vyY?NZG7V z^(?8b-d4S?YWt30a9edvSt&BQrlPcL4a}&(J~i7=A%g81+`C&Ay4tKD(^bl*@{;On zu0{otl7*ls*Ga^st}eG?`{s(OikdP#B^1@w-&(eHQ}B_MsHSjkR+a2P9WI51*KFDr zEGu2J19#C-UUlMvvdtwsDr*!ZRhOU|y*ps#Yr^cys~#$;tSDvTifYs~*(O$D12wgG zvgty}Yqo8!dAOvy>`oF=QS->^Z8b~aI2$V~wwITga>;7eY}--2i3^SUp3AAwtJl;k5kH((1D9+i%&UMd(XKbdM^~2V!sV*zo z>Mse_Aj7woRd3OSUV~eLHg7fwy*0QU1+UWUZYjzK({J9o&1C;T^)_mR)%lf>So#QT zNbajtR#tD@0dLxhc2T8lF0I%aRvxIX*j62BGAdmzyzCLtU`-}mW6tQhs;wn8o2dFX zY}it@W5cG}THWJGJ{&t#JUC0Bta>XtDnVN+TK$IYH9IzL*l^Ev4~j~;IN7>*~m+(NC0&ytI>_KC9c7t>Jk_v#O5yza;v(v zV!JS$vVBuY<;F@=BlK_E8Z4=Sxz-pR&uvxFUb>_feQs4rCF7gXD}db^PWFQ_;mGIYp=cc z+WYLJiCG-XEH)nc(4^tYZJuQeuwiq9GfImmRg{>bIH|Z~46Q+pNy*HogN`-}?UW(q zL*~qxG~b#!$5fJr{-U`yzGM!qA@u7Po4Le=e@4b+<7|(f6dG0%tOyJb6_=DuK_WTr zG^9(*X_YN6nLT&X49nDrMhD!18A1(>q)0T;DvnFwOFPD_BNz&Dy`cyC(WYrIHhn7 z#!p~=kah+o*3=nglQL!jx7}~H9kZqlrQ%ZIXuphrsWWJ0pE08>V~ipeT4kucXAdZ( znP+wZsvh*Fdf+Gt8LRQ|P)YHSsrLFw8v!#gXtH5JZX94VET;y|?xnnRs_YkJ7&q)A zhEq}GT#umDcy!s6xzr5}Y2z-MFw3merL^*0N4?wdL&+)SjusV~N5ykWgS7Hm4MW_H zt*_~I3T5V`kj160Hy+RCpPPwU;z#GxpJ|vrETo<(pLA`>pLS0}Bs5fM5H_w1&6zTH=FItp!AWx_%`BW#!qtE_UkyDpl@=-U zMikn-P**mzZ9MIzN~VmRd<`vnri-xZHT=9`>Z4FNr@mCe26L*tv>&4Zn>i60e(G37 z(7!adxaJIOC|8(e{b^ODwsX(nKRoAna`0{=qbc)ePA;24<>W$pEj9zUckj~jxwFdV zPz@}ZGG&TYPD6~=8Y;;Zw5l760a&`(i~Nt%*M~+6^@0h1{9JoQvh1E=VlUO$g!VHP zn08@QH7Cs}4)DO6I+OOUtg8ox356C|TS)eo_Ez1o|Do;MEbQ|7+0Qd7&Zx5T^7-TD zme5vxQbpnHxuwO^3rj+!TvQrUiSX@h-q14Myp~>Df_1E{Y}6!sGh|moe_3!S)e>jl z9g;%;AZNNm*D( zy;WXVIwfSyGxtE5vHh*I!t8Enp)+gGu+nngGjS)_VLIkQ=D0XyPg`b|?Z((;=9g7m zU{9>#$<&hBbIU61Hu7LM;tdNilBrJubkD)D0g+DloXsp7d**Xf}*HaM6@jZH)} zLyBqYQ*9%$G4{eh_j;QQHqkrTev^jY*>@a%5YClYjp{Y2Gg~4YiXt-m3|sfQ>RiM8nTY~u;pyz zqf0~ffdO@`*{IBI*tpTw1j{A&MC1RbTBYP{a<&r0yCf2*JUe5zGGhxTlgeOf(e zhh^Cdt8HwTl8mv#wRFU+V*BQzl=hiCVWd3tvu_O#t(qA(%dAU(wj=lS=4pnD3A3ip zDw}7HhGb>$YxW!%%jRi@@$jKTCr~hR%n^jW>ut#BMRf8-+vt+w2|+sjDUlID+wz&2 zoq4S}@@YZ>_s~;@UrV=*jeRm=#*C6_lV*&-k%Qyp1G}dgrSuyOJEw-28VdZ7a(|gw z?dLSA@*c^aT9?RDWh$U;;aoQDRiHssDjJD56j~I4{-{$K{b5d>%;8<>bs5E&w&S$b zEG(qmBW+o!=F-sn05jw+>703OnIuVP5s&#|YWJ3E>Vs{G+pqhZ-7 z574n3&Jk&EX(x781)WRDPStD_Ce!(mHFN^yg$`FJJ+@!uH*6`fZgjv_nY%;4j?R)Hwp(9W(Wt{GY|8m9~{+luExUe;z zh*DW=^hOhM^rTty&CtwP;CRN;Ax0UU7TEW|RNYOjn%r2cCTF;4)H4I>V!Fqs#jJcx z$-I&|!{*RFm1ZCb*t_eqslyw4-{$tvkj+NM(4bM&&cRiez41QXK0hAh*agjq>#nt3nGcK!L#*6|-wGliZC z8u!^$+G*1+j<#|*p0e{5$c+D5b7YTD>9rbjUUSHgajrf-NQY&nQX!SQY_L(;WnK$)(b4H_!?~3IWuHOIeuW-?a z01Ymt7sY!2|M6m%8ECZY&1k26ram_)yAzX&K2$-to6Ixmar=zY&XhUrXX>~Qp+wRR zJ?Dn)?4{MR@1@mHp|L~#Zl8@9Q|w4f%+9=FI9a?bHjH$0Fk>6@?THK|`(9(~Jpi>Tp9Z+OLM#ztM-L6YKM#WW!=g zlRhJ57UYWYYBzhw@j%`Jxs$>fn08p{WkmOfNN_($d$C7W- zOTN8|=T!7EHv~P+>q%A<7Fl`Ep1tVhF?w~lyw@aiD%QVm4-%Ri>Qy?cc*fi*C04JB znL)fHO*^2%a(>;dXTTyJnp#nqo7+2gO22;n=?Pyw`qHVbdC{tHiXGBa`&H?l#kP`B zYxu3cQwKKwR)73fPg8g2R+JPD%2#@dvUsiZl@-r+TPBtD~b zGI3gP%`>XUQwpiD8$z$=1?c}X=t!h=4gvFjJQSK&=*(Wz7&bWs`p6Jy7&4hr6;2A4 z(r@F1l1xF$Rk3}RZNw=xg%xuqnH1C8ur2d$By+Wrcl0FMwUT$LOtgQ}^gr~DCM!tq z6Vg`;tGRV&R^Gy@%F0_dd_P{MRtt(wz8BBQ4{!MXJST5u$@j`RxyzF8qjU1smVED> zlOJIfRb~=?-ok2Q$@c_i{F}vtQl%NFh6u0ijI75k4Uloq4}qGnNmEB+u;Q(#-;91-@gd+z#jgiXEB*?&>r!$=m&EfuxL5Hr zsGp5rpW?;f0mWB6Dc znc!i?&Bv43`B!{5cvA7s^k*2xKCSo!a94pd{=31wif;z@Dc*vHvC$7GJ{UZ#_&o5q z;xB+F72gYyz(~AEDP9M7Ch~NBulO4a}rQklr9|aF6{yBJ9ar3c&MnA6jIPj$6=Hq#ceOmF2 z;4brF-WmD-1Kg|lKq`+$$EUdYx+lW}ia!e;R^0yN2ot~JUCm#r5lJIU#a{!DE508*srXs+x2ksj6)ypIUFD2_CAe4d9pFC2 zJJ4Sg+WA*}GL)iZ1{UD82?ftoYC1amCFC>KeaE#ixU(6@Lue zHHqW**j0$WBm&%9%)AQwtK;Y|yNrJA6y|kQr_41TJpK^#Fk@>mcycy#*`I6zPb+Rd zk<;kA<~Z#KfqNC73+_|ge8Q*E2`K(8cv$gM%;znUeOz(-bEJqT6<-GXwBp;qUFFXB z+tBAX8GWzf!@+%u-wYm5{B`iK;s?Oviua&|8^1}#r-7#xUj^=}aK^tA+^cv;x)nG2 zKE=m^2NX9S_h;N^q~@_ksHq-wGa3ymfcPulP{#xZ*d0Cl!AUJgxYCaMz8_ z_|NLWe!Ys9fcq3*2_8^<2Y6WV4n0{vuJ~y1q~eRf(~7SHcirTS|2J^2;{AHDU!US- z-~q*-1P?3z6?k0n6LMKUsrY5!X~ma-yKZ*I|30`^@xyu}e#OrR4=6q#JgoRj;Bm#j z15YY``q}I^t@tExSEV!l2f@9He**4Pyj>sG4=6qYJgoQv@VMe@z>|vq44ziJcVG5P zpW*9RzovtG6@Luer}!@Lfa1sXWBst=S{U#Nk2A)=Y6}anGXZ$h{BrQH;`f5b72g7$RJ_$-#IN`eaMx|l_^$`|D*g(% zPx0@;1B#z<9{UX|UJM>rdqTif;xFE8gM)#IN{Z@TB7Nz|)Gq z0PecIxn-^{_P>_37u>7(sYBVXPw_(Vfa1%+!-{_l9#_2WFxF2hei3+D@ms)M|8U0t zCb(DepTK>J_ZrTA1B#b|hZTPmJg)fX;7P?hUC8=r#m9lW?r_F`2e?=9jo?1T{{Rmt zKJX&;8&mQyae2*_)74A;yb{@igy^v`f@RQxjVwBk#^U3WX-M@Ah=iYPr!YOxAU`pK=BdaVZ|4K z#}!`#o>cs2@U-H+$FX165@-C=!M%z<2JTaQ7kEJN<1S|Xu;Syvpo}vPlJ0E{~Fw<_(_+uen9cd!NZE*3m#W|3wToTR#zZ? z#fN~q?svw2J-Ao#SHOLWe-9o|{EREvZ&>kS@VMeDz>|t^2Tv>Bej@9;mO0}e3GP*V zA-GTRwcr88e*q6G-sdXz8&`ZLcvA5vz|)HF26siB@przO^}UKu0QV_=H+Vqt&ER3h zTNEOG#Rr2Y6`u#5R{RBU*K&?O)`D*U_JRlRXE1|t!}|m4n|QyUf0GNA{BW%OK(Eh6 z9oRax2>lLD+X?$>ZU5WxkoOxir}rg(;M6ZHGVk}x;LTWPx$rG)?`CX$3?5Xx?IhNz zRQw|Fh~l?^$H4QU|0Z|}JOR$}A8+LrwFTjapKSX^-qK;;gre+ z&sBUsc)sFiO=G`)#Y@186kiD*P<#h?NbwE<)(%glO{|!8;c)wEi zTdO$zv7tR4(uzL`Ua$C9;I3k4znpLl>*OeY8Ms&RCE$6AzYp$H{IKb)U!eH;-~q+w zgNGD<2|TR$ci>UQPp3j{-ftgQoIdr#=GBTn2%c2@6YyHa+s$O1wBjSc>lI%B?waDv z{~GWd#eW9(D&Bh*`^{5)I=D~q$H4uH?*cDU{J1jK4=6q!Jf!$y@UY^Wz@v&c3$lJ( z@j>9#iq8d4D*ilpt>WK;rxibCHv6qt{3>u)iL+mpf#)c`4cx1En>pwg#fO9Y6u%j~ zK=IeX1BxF24=LWGoc)Fsrw>%I$9YuoRp4>OcY;?d-m!vpl8TQ7uT}hZ@U-IV!Rr8^Gv%$TJKMkIz_}Ab*#ZS7H^$Qfg96X@-z2G6mw}6KgZ#573S9}O~ zT=DC{s}+9*JgNBi;I)dM5n{h-#f!n~6<-1Fn&!;^cJLg<+s|ixui_)Y^AukQ?o)g% zc!A=-fCm)sa~=B)DLxZCtoRe)QN?$I#})5Oif;x_E8gM;)~{E5 zFt{t=%>O*_9K~M%_bR>@JWugcZ)Cqd#S6g;6kiS=Q2b-?km7A`V*Rk<7lB6=zXd$5 z_?zI>ivI+jRJ_;C?6+3&Qt-6mkAl}L{yDg-)S3TIm8_qm_&9K{;&*`ODZUZhr}!V> z1&R;6h5ZH;F9#1P{w#P{@o&JRig*1x>&F$p61-aR`@oZmZw0Say!8UsPb)qYyk7Ae z!Clul^Zy!nj^g{ly^5c8EBnn;yae2*_)72s#dm-Q6z{N*^+Sq}1`jK~2t2CzI`FvS zzkydP-tRW{n^e3EyjJli!PAO=1zxZC35!_YHQky2%fNFKUjpt`{C)5|#SaU!zEAP< z!3z|h4<1nbCGe2q-+_k}KmB(08&!M~cwF%Z!K)Sj1U#vDyMM5Lt>PoV(~2(uuUC8x zIDIj>WiFTfuVwuVo}+m0JJ_#R@#)}sia!SKQ+yYAf#S#A$@&4s$AgCyUkn~rd=q$7 z@n(xzKd$&7@M^{9f+rP!9=ulZZ^6@wpK=%btylaiaM#SXj{GkJ&ry6ExL5Huce8$; z;={pxir)-gp!n7~_-t^m;!lI;DgHIMPw|uPW&HxhF9#1OelK`P@h#wC#ak_9 z{ixzYz~hQv4_>YKE8t1RzXz{X{EYk9Z(8wU@Os5pfV;|^`QHwnqj>xKS>LPpNbo$x z7lQi~UkhHK_%GlA#rrH{zahnEf`=7<0z9htZt%F`oujN@t@s4+q~dpj*DAglJgs<( z<*Z+?_+W5X(3$^v;5mxF0PaSO4g4nekFLd;`f0k72gV8t9a`e>!%eT z3SO`Hjo_|1&iuayo}>7FaIfNLtzy4xT@zWn?zY)bJfyWeo5WGt9Prwt3w|j#1YZM;= zo>F`Pc%9;Fz^w{r{(lB{E8aWKem#m$2hUafG4OoFcY*sAKkiA^FH(Fwcu?`h;FXGR z0*@%(>?zidDLx3iO7Xei3B{iWuTlJ4@RZ`GJk5UV6u%1Gn(NH}GH|!z+rT}Fw|R#3 za}^&Bp0D`L;C{tl2QO0m0C-UG9?!DhO2wyvM-*QL9#ecLc$MNEpJV-m;$y*U6u%uj zrTBXAI>mnnx2|pLs6PXqXTNU6XM=kbe;Pbj@vp)26+fwp_5F%p4ql}Az2HH`w}4kF z-s%O`k0?F_Jf`^d;8lvh0-jL(d+-{?&v=pjrW7v*uTy*lxHZq2|Lx#z#oNEc`X0qc zg6Ar}5IkS;wcvime*rI2ywA(*H>mhb@Jhv>0FNlX8$70X=T}(2O7RKc3B~UQuTgw6 zcuMgWud;rf;)B7hkTd`Dz}_?6&Qir)vGP<$(RjpD7> zuzpJMq2P6j-w1A9=gj|W;BLkDgL@P|>uvU%t9S``zTzvv{fh4ZFH*e2TGkILJ{r7I z@kQVf#n*wyz?<2tUgPKQrS}~H!VkZZebb+>*w%_BS~%=m+y854Rb~C0zz$a8#5NB5 zwuwL24{gq_AN$bd(2@812`5?m;&?h(ExS7XddT3<+U3b@2?c%_K=$Ty9%?RQPTN=e zlJ*vDb;dKB?CtkMg1ce=Gz40qN(ER_!Z#%1IhckZ3&y>E- zcy9QMc)WGacwZ)TZ9fX`VI~Y@!REGr{9f#;WwuIO25>pc6~xRX8Z`3@zd@d z=GLd22jL^Y-HNk*CoAUT`X&urVB0tHeAOeuWn)zkatfZ{qhy<@d9{@SAhM znV%owS9reiThxSK_h9FE>$xF&du3dO+we2UH@t7$gK^^IovfhpJD&8LS)Hs9xVt<5 z#^S&58_mz|H&^+M+xqRSeDIddS)YIVcq^~Sng1^lPxxHsIY(yNcd~>_ySi-r^ZZy{ zoN*p&|6*IKK=l_}b+EiD|AYQQzp4rS>b)qm2vqbpY-rJ)g-_o$-7^?KSmTcvTDTb=G}FJIk;Bo@D{)n{`mQv~CS}5$uKk z3?5Xx_a@e<1aI$%^LVSTsx#AV`$pcj#znaPUfHe=~Sk*}o1RRrUwKW6HkA2kf^>*-rznR(utB zLh+s8NyR&EVf`A#$AZ@?emi(d@%7+o#eWB{19y(+4%U(XY9mA0ejM;&_H|S0K;3*9 zY5Z%g?T16_5A!ZoJ^YH3(WGz2zi?4o1a95X);1N+IvuP#zjemB?l0nuE)WIwyq)Y# z-4lK!0&2gNc^vk6&G-i+!Be-gP7Um(y;alr8F0h?D$zuJi>mszkn~M`6E5>{EqEOE z!hZp;2AB9H&o1Om;^{*Hn>-7bY|I3A!(Q}d+I0`$PE_=+`NIj;EvLQtRvvTjx+Nd8=06-@&{wPRUX| z>16Ad<{xppD$y?K9nldkI#M@&RPlEq9g~0IdH96^&<|(TKlJ-|#@qIdJl2hcIG#hl zr>5ApZ{#`fEBVQ}^#}>wehiU)wmiImI3ucmw}3~p#^1$S0xnJ@Kk~It!Vi#+$&YZk zUlx1$ZYZ(m_}f`I>U%@Fer)=yk;^zd*XCWUn2K{UapO1kAS+A1u>PUnb5v>TH1c)` zNXAKA>E8$aTIdgh{j122Uuy3Ob$`3%muL&ETJbSAui=9WA$-*UURu zd1`#7NhjO*lyQ>EdcV-YiZyfA&maCmr>+T|YNgXu9hUfOl>HH(n0$7yG&kwU)~+0~ zx5wvTJ}{_5-Yy3B?qTpU_?_TYSMkW7feG*~c(NJmtcJbyFV?Soh7CQiKL~j|aROJm`H-j;Pzus{5B){pFFAmcV4yuLfz*TeogaO)C|vj%y189cm}^Gw6WzWxJV z^*9>}_kO{C!~bCW4`4qTJXFB?2a$(|z$3I@HdmS-tbc*mjAFwmxO*4$Td}^h>u=zd zHOwh3_H`?G(HPe04!#mR@)gG;^iV(M5v-Ith4`fGHGd29pQ=h{ED ztVQ5qHNVz@2jkAX{RUpyopllxU;TEoe$9XR|H8|_>t1DhnJ-U*S8a6ae+BNnj>k_I z(S>JyX^9|safqOlti-{)6C^vzX_={uA&B z#*Yv7--F9~?FRoZc);b%Pwv+okBjDwxl;DOmURudHJC$oBh_UWStcFOz^7zFi3(w0Uq4SIb@2K9~K2D(GwmclUJ0*@7Bq=3OcqGoQG*66v`WF_E zx_2db-a7Ux{66r4Go0~k1y7#Dex)9^{+{(~-sXNh25}ArugqtA$}l2?#^GA+Xdh#@%Y1<*T@{=rYXo@i7!L3Q)V&4ZmFKge z#JNUzIXjf~{b%s{By*|5y?sm8+BhH=RF#tF0JO0l4DSRGa7v?R6|5dAl9lox|}L zKz}`W$b3;OU4H(t^}F!iY$*8|@IUrjiT%Sc_?-=2@Bn ze15RDgV(fW`-c!``{t})FrR@J6MH0h^=mAEu&jl`7diP_@F*twKjHTm@O&B<=1STB zT2`MH?6+zK51c&M&jk10$zTucp8(IF$b1IucY{YLf9Bc%`_5G8%y{s<#|8T{*mncZ z@iABp`>Vl|D>*-M9uftQzQpz^*nb3`*Pl5}H~TvBF!o!k_U9LZhkj#wnO~LQ5sX9W z-#5VXJFvafhabV~)-ad4+LP|bOna*aG5-MZ1iW)bo}6Xe>ipi0iNjQ_7EFk(W z+9#QIxo&2T>11619@^rJ=LYcPJOqM=SHZo1XAl9e1NSXtAb!uJfo=C!500}QaZUkG zv|ujw4};gwa@m%bz`hndMf2NSVt;g7)(>yu{@sUoMuDd=K;DARZQ#MNY`7Xc0q##Q z5dB|8A8#a-e(ZY``z`pLb!5KG0(XsMF7qx9p4iV^^uGkJ4{&?CAf7JmSU*DdujUf_ zOTm5rVjYw}D*|4y&uRZ2c>dFzpMw}bEor^6$HO?zzlY_lj^O_H7z_g+3+{V`!DsBo zx*fc35_6e%>&5;PUPoHO@9*I857|BnodNARo;s|jlIPjrehi!h?4Jft()oe8BtKt+ zN6T0r<-M(|-3uN+lk<}R-y%9CY)@sxzFJXTHu+3p z07^VVz(XIiU4kF1>%n6+X=PvA!P93r+uOb)>*sG}!w8#OBf+cJJN+&MPYrkSwcyFOnJ1w03%K<* z_X|G8+Uj#G`%OO18Hl5zDrxZlk@g?I*Z zV!xiRStl2MXM=~IXM6WL{)MN(lj=VGYw!fkZ*#fX+&U?T_0#J7vc1%+d%!e^(L21)*~7nP9St5?!9d36DB+7(N7j+sz@r_Vc}sv-EoA$H zXxFdc)f>6L{NR0$=Xg?soOzxF9>w}7buSKH6XQ6gzrF-#@szg^JY zOTp{*G0)@SWktYaU$9{w?B4^gJePsg?Up2H=5_Q-<`u9%54?T@3s)na5O^H>nL7A= zQS9$x0m<7w@Lbv#n@iez+6nBpdJ_xN^t7)c@PhUH{{%l+4}gbmWJBrSe}ab(GMDjl z)QPNLb-L5958OqqHdh_={|=s0%K4YN^cHxW_P^#5zyAfVna^D6WbR4q*VUim73{>(@TderIsF))?@_BRtTgeulw=>Rjs`@M!_}nE05)@>%impGneu3GPwI4C;tz4MBNvA z&tSg+s*C0d^Mf@RJldbz+t>c7WjzEQqVZ*}VX*%fxO)!+H@KVDSJSTWV?3_%!T$#C ze}>1;KIq>HUZd9Wx4{zwSx5ZVi~bX=vj;k7pT&M76F7dUdo#c*=WrmhE<6rivx{}k zMVu+{-0qxs84t&IXZ^}<%q9Lyz`g%tfg_=F7kB~I>xqan2_Edj?OF=^=Ct23d5dBo z-wA#$c!bWI&6TkKwXAEwQ?zcIOZu@2Jcie2t2rIk|B3$lY)@g>SGS(**ZnDjm%*_6hLMz|$WxSPgz`Z`Mz5;eHH& z`@sX_SYO7^KfvAiyPlU}zX3dNH``C-2kU>};X!<3=i#udPG_^<0xtv69|s;hj0K*7 z{vF^s>lh@!H-g7{vyK~n{{VLnWiIU<*oXbPZ(~F8TMq6Y%sd7CXT^Ru_g4S6fqmoAD57#rk4D6kOh~ zJ_UKW5j^J>c38>3X1xYpx1QtivwLelc=AfNNB3A~^=H3%I6o2l67ax4XaC*+UXOi( z;5IoFCCIBHql}|3^ywU2`ey0~a{Q+oRwGm$QBd{qi|@9n~9i?Xmy0 ztWE>jZ}?00>w^6_@aQ{in1KBq;K5HBkgR=e1Wz8$Ai>!B1KdON!(0K_4?Ktc)dO}qd}fWb?|#7c%|A$-3MNP!Yp-lE4Uv6 zyd`v6)52%^%d?b$jGv+4wY!*0UAht6brJX1ozQs=Jn#j_Df!tC?$2REAMDSfdSU#^ z=TXSIPy(KKlMM@CzY<*j9$)%v2Y7fbCrt9+;XKx_0q{a+G`OoRgO|Yre*!%38JDe4jW~Y= zPkz840sX%D>^HuOc?x_Mc$n(0ec>Svo_7Mr9|ZpryzUJ)Uk%=62bCrzlmenUdD3~xNA7qlh5Gy0dW7n84LseCwNf3@A@b*FylO?_CG%G z=r>NCzk}EH<@|Jq{#)Qxc%Sek;Qs}WoX7Sue{+YkUk}b3Wn5hYUUUx&q&S_{YVd+) z%>N1g1$Y84(20G{g{+^e*4c}}i>9)U3vu2F?#9HGet#D{^dlQeKUx>De$98xyFlk0 z@B|78ZjY@B@TxUDkNk-LIq)Rr*SX+naMvL2-#t9dtdmLC^jEMwb3Z>=6Tx#I;6Nzt z_H{paD#~CKcnx^YCI$)kJz@mwC;ZG;gAW7GZSU;Io4`F+IM@9Mco2ok1;6hRx2&VB z`Y}g9nIArfeJIWiO~Ag>-#DK9dl{tgTjPkE^*S`RtwU!T?2~u0P8d3?!1FM0M1LoE z_z^ZtK&|6Q_8U2sxx_yf+}DZoAmjFSaQ_3`zkB${)_U+kL^+5cMB@8I=|nI8ln zKpkZI*YyZ@EXt5I8$3ksk29C}eHz?~vptnZ`}!I@=Wq_B0{o=WtRFp&0SyEDx*Xhh zB!dKF>t66kZ`PMOvjseGmNO5n#;|_X+03!Mvxb1zy~+7`3x2N$_w;A`BJfwhy{|IZ zfOx(KufaJ$75Eur*{|m**3Sno22XTEez4D90q(=Ois)lInrE zR)dcOuf;s_ApV8m1rIZj^<^!1;5crt*#81vwUO-u(CI_>X~u8mSL{&y&IEVA=WOp2 z;HfgSS6&AJuiMMQ(yq=IBX7;w{#JglCV;H+atXtdl|>HiOsDxHH#k@D{Y6 zF!9%o;P&RCU4y}EaPBAdY94sxbhejq{sMTy!+am~_kySJ{z=L6sk8tYzqy}t;Fs{r zAyy&rY@fe08}=T0Kasgo_P>_(G`O4gHRh5!|223$wcA|c_oNBzH}D zJ$TIq2BLGuW$ZUd>yo*oe~ZCA^En=w*DJvD=swI`lArD1IrM%~b4kCqFJS%r7gQ}>~SMb1W$=zd}Ox)Su-`q% z{|(@k6P^4%@S?S>FXu~J!M%%l{}4hvyNR1TtUH-?Xp-C41>n|d<{^Z7 z1979{Q=e1%s zx#0end7PvX=Vjpay`1sP0FNX855fL%@bFBw&w>6+!gny2@$&(AK^6Oz_U;Ck&!Lie z^n>9Iz1R5UutLs%k@|j$^TGYih3P#7*Av-{Cla#5fGYK5sJLFQ9r@@4(*uF&jpapM$XXsQKH!nB$45 z?_CXoS1SG#aT8DEYRCX>`eeib9TQ%Z8nie>d=PFfaMiDpqwY|B$GGDHO zy+`%SGVmhBw?QY0`Rhg=+LVw!o@YLI4JW^r*Et^Y!K)r|&WmZ_-Z|VZsWXd-n|4*I ze%S;bQQxo8jPBdb_?OQ^lkq=@xQQqF6~`m>a6EYaNRDS8@;OuZUg!9{nYf83Pkk=d z>)@6eZwH_gSjr4Y;wJtYHJ*3CzPgJ2RzknS zbdD$IY33gA(csnHS-%_V^E7bxV7AXi{HwqN2iRWf_S=SM$-}lL_?OTr8sY561H?_c zJZfI_pc@vG&#O`wX9X(iOJ6Tyc0Se?2Eb~=8iL2$5QzmOWgSNCRka{ z({2YZ=wZOJf)E8$ERRlsa`MM18%*^`m$b}I4gTTdmB#i_z=JJ%XH!<4*@kF zAA@}wf8Qkc9lO9Ii=6S-8J?vdTb8lkXa&a^gUxy1X}s?u1s(#gAI1BEQWpZV~$hi(ZjGWQ1=(Lu#XLQ zwrel(Z2PxU=WskV_yh486&Pzt42yrXTC@zA2eskAWwV&oJWO1)VBYhmWgZ{Q|ZB8BaW0oYxpme)Epw zIwt$l+re`m=J+o`!`6e>+{N~?@A?!x_8a$$@NdE6vsotqom1wr-@w?OF2#}&|V|HAFs2c4IQn|dXmC+x-VdR()iT(- zVjPde839ieu-}$^tZBUmUNf2Pr60d0Zu(I^cUt=Kq#HS&UT4_}!N2cZ+&#yV1;U%Z3&X?ghkPx+lwZsPd; zGcm64gR6+!^(W}8tIJ@YUhkaO)v&KuDSM--2N7nL~U`INXB z523M~{}|#wARM2=&=Rj@B8;qf*DW*mt;v{pPE4lF{H{RR2Fj<{)8eG#|oA;j|=cg(II#KY{P}bRl_C61tTvf-uHTIbui|5T3vELeX z&UP+wwgCQx|Yqe>WqPX>Tz!G4bTsR*Uw=tuZO-PJi=V=3l4(kzRP|`p$;5R z8})4Q_com3OblUr5A277=c{vuo53rSY%k+vDR^=W$0K#)L-6nkJWiy}r@#~Synjn0 zKL?1LaZ;)JvB&KkXSf~vm3|)sUSEv-KqqW?mi~HxxY19k{`x0$a$>AgkKaA&AMDrq zH_r>{$8N-pPEg(NTn%oi^)w3ZRrgsRf%{dRJd)NyqhGJ)#f8L=Zhn+?Fv)RB6Gz#c z&LN99PT8+c15e!Q?63LYHJhFFEeam~jk)ZLULbDHPxQLHhPa6{t=jc7baL=_i*n!H z`%ccMAMa;yqravTH##xZ?~lPgf%_WK*##a}>)H?Co^j6le8gh*n;gY?lXYhpc<4Q6 zey$*H;we&fU@7c9&pGSf(}qiDWIV2ceU4gBe}=wajl$jwiK?b@HKe0&(Lvtm?^Su#aIKDL~tn7@pBidHMwGUE`he>n(8q zIE)kg!hgZ5J8=9`m%84|@#IW)?%%3o+5KKg_9xTp>HAi(@I>feL)`Rl4$gt)zHGJO z5_HDn2H1yj4lm~h{{v4!Cy3w4Tgq_;RNm%*`_=2t&w%?>yZ#McrOt~y_pyGi+NWJX z+_bA|A?I1vor%ksr^a$Vr4Cd*oV~qe(22Hkj{n8r9?aiiXzwPmKZg5J#?QCl@sl_n zS+5Too{?X9+Vy^pGxulqEAgKT9{Hbh-M@;s8J{V&ZY~4&sq^z~&`E|^e+tI=SK#Tb z&b<8!9>?EpNqhU6d`i$6kHebaS0Mj&_sH&m@%zy@tCsZzbbJH2 zZpgf@7yZk)UHCIF>#!*2GkrW1&|VLC)%nb2A9w|L_4}+Z`>q9I{~X)L(dISa);nx3 z8l<=ozU)!vK23)Ji5cM><_+3MmPhcCdsMx7t-HTD_(Ay1EZfc*y5erXu- zZ1$HKPJZ?Kqn1D?t?K{#uupa5IHh0yBlha`EboJ?pVyD`CihcAh@0`?SM&OM*!wm( z>*qfVmqunh#$lg(wsYQX0MF^`UIryMD6#EFm;vmeYh`MiZ%>uqTXIg+~hM)`HeuQ-~!H@ z+?PGqgiZoF`Dz~h3Z2m3SV#7IN3YDD|1%Az_yYqup8>=_1w8!+=S||d5j?D3M|h36 zX;)Oum;JD>`Ih@p)`iw)9VfrlL)h=R=$E13(Kc)^b>{LW*8OXU8^5)x{;!5k@Dk30 z^!sZ~=xl~gfzoNQisKBf;CN(zavX8nui9UY2e(xHSqz=JtGKV_QzXy-2emvuGj;B(s%f;Zis(!8@ZnxLXer5h9z$@i*HW25p&AGl@S5g4 ze(Eva{t2GrXMs_O|Nn^F^H#Eza?IR2Az~uiLKwslJ6Op^QCq#u-|HRUNHhZPvv0&xKGuwHN>;k z$*oQB-G);>gGJ8#{0g4N>jD)RKYd@!u79E7q*J55kE4>f$!Cr_H+uv2RvG6_=How` z&`(3BQk}b={1W?3Ji+mI$9T91JoizaM^d+M0Z;X0d->ephYd#?Gaue)g4Z^||A2m8 zPj1&fjFaPE<~Va+b>{h*#o7J#gMIo!K5wbO`v=O1n|uboYxWxZO?||EWgS0(xUnx#^XoG3 zgxZfS0k2eb<9+B?srr0ab@qPmVL0WXeg)@Q)|U&xbE}-~EhcW_^r&@b1$aW$;qB1L zznAsX7@r5gE8B7&WL-YybrUDO&WHmuIe$Baxb0W9_bTujwf|WL9#Z?>ZAPEk>tDw4 zNZtMgJogihNB9YEkl)M+is#pUlRcm37<gdYavhL(DqtU1>&0`h zx6Wk0Qdi#r&w0@~es&3emhHQtT|YwKuf|VLy1_B=RNcn&{R8AbK-}axrPirOVDHU! z=J|EQv-IP8P4J!2sou+R(tqviJMj1p)|Ykpf5c5ZNj2W`)^Pkacz>)1G0Xw4#Ow94 z-aP|eJ&^s%e0hhs(a%x$tp~x~svrBm&3==gaGakZ{t?8DPD0J21+dTgiThpJyBxgw z7S@sTz}KJ?Q|se?*!#D0{CVi#oVD!Nug2}g#7+OkhH?Lf1Q~Kcc^WgpNxU8b;^DbapN~Rj^mf} zv3tNH^EjW9=QqK_V=&<`Piw$^s8=%1k9e2k38}v?8%Est^*_#jWt~K6EM%>KP0+s)pz`g2z zp&I(p$DQNwLvZUf_AB%5-{3WB|L;k%-x}54D~OxCrPpwNWStEfPWzudD>?9U5&uol zN$WVFQ>6U<03Q3C_4gn@?#=8sb`Iw=0R6v#hv)Fd{{sw*TfsfoI(3#2Z{NI=mFwp7 z3J-L)!CrrlPn-AHZ}nEE&N<*Qyw08joeJW1T~+n)IoQ{o$ni`5--Ufh)fwx3*2z)( zmUD=k{O2XPf2E%M&2Yq!`EUhvs#RTG3Z3*|){%aE6g(e)k0bZppF_v5_Vb-S;CQUH z+%7o>8)tZCAb4I3`x^B==M~@u`#I0jt{1`U@WCgtzSj^p?=RKs-4R=|`|WHv+1KFx zw?2%k3B*l*Mb+yRcf&qClIM%W^GXx?Tbtm!p;LbW=VvwicK(p#3FCc7MnD$5{m-C(B5@N>rF#E!0k})m`Fo&K zi}#rak&_Q#pR3w+_%`+%n&lkN`QWj)(Jts*2Od0)`z3_+XbEu>r&rCp_hIk(KW>l@ zI){D4_8xUkcs_A^+@9&IKjUEUR(ZGsJfZft8=;fN=O;{o-#=hqug3qtk2#(y6;C;M zSoPPlVz2yu10GfV()FL&-*0&uanoL_C(k?Cj}0Pjk3+S8m(ukmsZxJ;@GW@V zlblc4SGYexp6_wyxd(Wk;BY~dBjbeuF1~x@E2@*+FvbaYuOKMhJBUV zueSIX>x5O_1`{{=$$y>Wk$N}}_HMQAya1l7`tgG2O#E~{jPnZFFYSfC>vL}CC1~8K z+u5(bjQz@bQ3#%=-v7BAJnePn^Eu)sKSip&X|azu?GLMEd#@UA=My)1sQ#VnLoVjs zIB-AauNU#(0iB4NFB@TB3wsaj{~&JG7yl-1uk6nU?qI)_^O#q{z8u_tD#s)Jaw~XU zH?|l3w~3oP#MC&chkb4y+vj1to&BlluS2h4#Eni+y&vW#@PHaW)kcTfRW+aEl>6L0 zu+LZbYbWkx``93!kJ9gX#EoA|ofpjkuU7Ts8L?OO;osm1wJvz5;2Zs1)vhbR^Ho1C zC7$j5laIpQqw2=z;CX6a-HFD%$&c^v++KOzaRVx2ye#!P8oCC-{a|(F4J?B~K=VI{Ccg){HyB;QP&v%voTG+>r z;&^1-{tBL7&H0i0`fgvbPK}zsR}(kwN=#wQr1=)w+1@7&`T=tnO4X1T2 z@Bj}Ash_KfoA_fYKVN`H)HunZ8&4BY^(xMT#M2WzvB0@bT}a&MyH$Tx!rpTo+e;pz z;Ff$qAl9$V;Cc8yj$1LdTYPQWb?DWJc(!$FTod+F3^(Jp3+Gw-_d4Pxe!q(UW!OiS za2_Z;``QHiw7NfS_HWjSsQEPrJfYT$xx`I8uA4YNY3Sb%o_js}9fkZn3-0O0_QE%S zhb(TF)YZ?4n|4*Idf4e3<}Ou##t}F1L|e088P9VKKQ#T;BIx9+akZ`q`<-I1^3ahQ zZv48B=5__q-af=l{6Uq^ncyK6{}a#&p>F3R=G}(VyzoE7;2Gq(<+toN+0r?GyBeOQ zy=N0Q@l>h#I|JOU_Ti61Km9tlOYU3O!9JkY-`~Jvs=fW_e#zv=x19S$&hy6*xAUXo z3ERA#dye;CZ2?vN3)H67X1aV zPhy`Y=d^2@u-|Gp#ZwvQaW4C@J>d1zInP}%etriJJjHh$wTNK=6|`*e{LOHqKa$6T z598!k@Ou26@14+jo49GON42*e_H}DH9;w^M(7A@uFH-x8G2nGKv%S=rS;URLrN)&x zAITQ~<|g<~=mgdNw&Q=Y>zqy8)K&eypc%%VxHrIY%6PZ~y!Ic?dbI+)9)F)(iF|G+ zZrW9;;%Waq^R$}RBf))YKfjQ8wmd`)r#L-(ob~W2=(v^NJ>dCjUYuCR@%YvJDj;t3 z^VE6lJ>W%evtOy7FMx;roHya`LO-g`hpqjrUvPlO?OVv38$5j{>rh#zVINWV%iqAhXe`eQxnJ)31IJl+zBA9gh#S8twJwyx zzV^S|E*a-Hfa~vldlkI$BB%al=v!*uwK%}>gr_^#ucN?=a-2G6frr#NNeQ?$hjrvW zaV~h`8|E^v?+35J>qmQ#{~GXuZ=Lh{YvOL}sD{@=VQ%e(z3*_2Q}WY{HrOVg9<{F? z1RhiOcXPobYMp%^JWrj=eJeU@pK!`g?6*Me+phwzFLIvqEF*5u3w+xXzY!hv_my3L=5`ew#tYHQ@O>q?7w6ux-rYysw5v$ve=F=`f3RO^*IvUj z+9OZ@2c0@KPV(wm->3E)bHH;|eS1c@8bALgp3U#?hEqKZ;d82QML+|7VIKX(*)JD? zhn{ox@73Uy19&`yp%W!;@?)uXeFXcW`*=Red`ZLJtJaH?f8}@*QP$6c{zUNjU}xQ! zN8BE7Di1HfzIHFiFMboSuUGZ+SJA)FSqIww#__n`<#>jn4qpUrs1 z?DhNQJ_E18=WJ9#|JZ}U?qq?CbD; z47u-q89e_T)_(^2|ACHM<=Oi?>-*LFjVBW~TqZ-tV+8hrBe}gr*dIOy z{ivE3yI}9f-{VA}b=?2pm-a8_@`8^iZt_s2;#>^-z-V?DhJ6g&gV$w-fqx2Kc?`E} z2IBk``THELoIHhj) z1FxUX{d)=ew+uY;JKM{;c?WTmw;a{3jm921$$Z!jdrQUHz8UKz)c$QGaTBLi?Hngl zVV_cYi@`pk&htMtJTnkH-v|3N_7B~_PixM8tEO`Pz39hb#7%pH>Ky4NaJP!T8anCg zS?4q4GYMX|p7TtV(Y~6~_Z%2~x2g~461Veku5&z$hJCeK?-s$nb_@p|gZ^^Z=c+hA zhP^Aqd6xUrZ^82~<~ZYs{}dW9+44ESaO$skJJy+kyp17l+7(lEH4OXekDdMd3b0DN8H5YUd8d(;Fm(Mx751%BJ2xhv;8R8?*os!nallhYx-Uv zqhB+C>%8pePXxD4=5~3Ihd$ux0o;$&9Q(S2xQV|`&5OHWA64h2N!WYT{=7MTZ>8Pd z(^>y5^w+V(?fk3zP(SR8p5S)LeaAn*gSWE|m3RAE37wRxlRLnJDxMCs;W6>(*D*&E zx8qUo-&+KGPjAi}{nx(k1FzZ0T-LAW!K-#T*V(n;$!*T~w;2BaF?P2xyXDt;&`+aQ ziuxk8s%WaDw1z|iAv)dre&0~Q#c^a57deSjSytf5e!FK5K6B2|nKRD#6Gl~w5j40J z^i4>l6p6HokX4~7Kxre8z|bOD{p3m%oYD^#qN+boL_{R`UHiG8#^?F3gP2UlGxxdo zz4!j_^swEn-#d(HFtHy`2WKjib=*T?_ro9F%T_W6^K z-(Tm0{_2n4KL6@XFZBCwXaDQB&%gb_{rdmH?epK@{m}XS_ipj!Az%9!e4gw1=#jtu z((U^%fAIc(AN-+t#ikL>?{zJ33zHwW;&x99#ly*Kx_ea{a( z`P406cv!q2@_DtM|4cr2{g=OZe_!9a9q@Yl9d)rsb&CJ=_Wk#M`TjZ|?CpQNeg3si z+~3zjp8LzU-}(3>d;S48nDzPiqxkrfx6i-z$Z!9?|Bd_meZZgp*6s6;9`OMG&F%BA|AYH=c=-Oe zZomJPNBHOay?t_1i(e&wJ~0-pBdHQ=jKLzy8Q?|M}bJ-+Z)gfBW`3U%kbJ z2R`uo0FwO9Pe1ZMKj!nC_sRFaxldo-zW=R9`PyH6_?<`l;_v2nzIy>~|Ng7D-~Yvb z@6G4fY_xAnI<@4fqKJxkYydLd~zjXWjV~?)qe}BvG{5tR7%I|!2 zdNWV|XMLXQ`P#4EKlca!@Y&nvU%t%+`lZ{o{p{^`zWE4Od_CVUuK#~~`2HjN|DoT0 zJMZtiUx#nsFVmBM)#tg+myhznKYjcB+mHP1-@JYPnMcp-H}g}uuirY~Ki^N?;>8d8 zJiq^)NBPLVlJ6JS|E0Hl{>N{>^NmM%?62QG|LI5k)o=Jm?yu+TfB$|TfxFvZ-{*#y|hw?fXCf z=sErqzvKRTE{~qq==17#K6uOLfAsb{-+bhMektGgTz>w~-9PY$=km91pMUMo-hciO z$G>y?{2PDx{(c|q^Z&X1{?9-9{lR-5H+z2cUVsm7pa0xX-Tw}HcKhp(_&n?XsYiD8 z*B-uq)7Aft+v@$w?eoul&;9Q_;JV-Df^*)l|A~8h{^<7oAN6_o_Q&r-`6IXQf9uh8 z{xzTHdcOK-zyHeZ^DjU0+k5XR%y~a|@sf1RJc-S6MJeSZ0y_qyxfb+eP-{sZ^x z_POaz|M>@fp5OWE4JW_6-PgaF&x`y0Gq>-5`FGr(_rae3^6m4_{g(Unf4H9i;Vr-O zcW&SR%8%cF|KYj(AGgmx_E+xL^C7?ZK83Sf=gVKXKkq|+@lW4A|HglIZ?_Nck-To7 z|E4G3`eSe2#It<<=11Fq{X0I7U48oz{`_xmzyE(d;^m%rZ*=uL-KXv>5dynw#pUn4*`~3^I?>~8jlmFM-?|=N) zziC&$@|NHEO+R>loi87)^Cx|t>-_Sq|L7q<{nu~b|E-U3^?#o47uWgU-+t%vm+r6U z0na>ncYgJ{f9J)MA6lN=-Hp@JyVv8pPk!j5C-eC1*}A;bJ@MyH{dxZT?q}BV3wPJ& z`RuvRo;{uB50~-P>$?wLkFTH3cf;|xbnE4K7v<4ovyp{ zu03)*U5CRso#t+wy3^rsn9j?v?+(K}k5hlX9?t93A5W+D$bG->&cpS(9G1g;>aN{o z+8y`HGECRYv_FrBYqy)ur%QWew>Zzf?+(ZP?s#4M{b61A-EntZdKYoIOv7$ikB6l_ za=c#l=gYia$NqF#=lyPfafSVUa?WnrU-rjicRJ41k^AX-7^dSe?$_gd-mkm;d_J9a zyLmsa-Ei#ByTj!3_MDetv;h0vX&$e0f83A#r5oqjWu6Y}@p#-HmSrAy#R?6lX=g3w z!B;w zth+AfwLdS%;c)D%(qSI1^LbzpbANVEjyDXTF;K!Hcxa>~D{y3kG`_q0n?E3LA zScSgZ?U!|2&hywFdD^?qwbS+iWM4myQ|afPu6wp=I(Or#$nj4L(eS7ahgU?^13^; z=kyql<6`+d#&frJ<8?h>*29?FT+hc7d)f8FP#xJ{Jjr=)&+X6M?mG3$Wwl$n>A+@A z*WOv@`B)q|%!liIJRMH1>3VYNlc#u{hyA=ejpt#1IvxAtxWBen%W`(Mbay_F*TZh~ zY&)CyGVTt$!EW`W_rrKtiX)GgzU$U=f4W}A@nBW<*M&ulOTS+GOK=L=uZo^x5c zGoP~SF1vL)j84tD*rmJUuw?IbyRlz)^SM2;?>Lx#cVhMZX?H#iyL~q=!}Y-5T=v7> zZ=J?#S6JWaa-JP*tByR-^?dCQ^Z9T+tlj0XUQg`!;2G@-Z@BJu*mwE zO#5+nw!xRVKkd&~H@mDud$pH-ce#%I;5r|y=$SjaaKWc#S@);&(DBLhbvRG$k@Jz? z-i?EY;(+UDhj)kWd_3&eF55hZU0G6lB){iD&%^FGuUx$AI(P<$)8WeUreQiw!}V;p zv`1dp^>SG*yS}^j%lUXb%*%Y-?fZT>a^tLM8OF=L*q<{i_4J0_w067Qz}p@?`)Rdb zcjx1dA71^?SR8rWb5L&Qa+=oZ$m`EeJuIiA)9)AqFU;WQuD#krcRWqg@v?dXwmy5{ zH^qr#znf3z@pKSH4*jvX&sdBNaoO=97G^)6T=g=Zx@qVCPP3hU*>51)CtIfTWHGwy;X1nRVH{la$W8E4#gW&U z51OpzGM{#b;dB<>F6{QYIQf2^)-`dcFDzl%A9=g06L^el=G;xA{UI)N^L!nb>%|<~ZlB8eIQ6@|HQ_tP;R<97ySW!b53G^F_LD!p6f1N&ySCHHz4HScoipvuQ)k=S zbIet!lC*KR7F%Cx`Q zScmm2=+Bp{FzP6q^aPSE!7Jy>_1st3YUlRG157o?M-CU(z0SM!)Bzg3pug+(BKp4Y z)P0=X-ZMXRmn%1U^4N3Lpyxacr{S>dnZv%Ygq>|a%}Wnkj4;)qUq_L5$GzJ?Fc)XU zRUeCJf9~vGkCQjBw*7L73%NiTB+vNDI$ zg-6`4*ACz=j)XHW1Jt+hQt)-Z9~ZZGamANIzw1w~W)dk2KQwVBhvW4)bH9I0-0r*zW55ZgJj;aDexbTwq`96_}D|g)i3u3{ET zadLYT#CLGS$V)S~e!AG0Rx~+`cyW*#v{$=hG?E`XM&7gQnK!U{6|W_59@xrT3>RUh zJ@R^4I>CDF*X0cPuRJ8vU^G3098U6)ME$X_KG8>VcbJ4iJLTw>&S$xrxE2g~6q5a9 znRP&z*CUs}vF?_OoDk%ndHHitRj|^<7T;ICk9%4!9o)@#^aopexB$BAkoSAPvuhOj~e2^^< z4a%P<-nTs`+Y>k}Ue-?ZnPd7aBex&mi{?H9f>*^$^O1fGxmXuVlsaZXEfU~#kcfoBEJs~k39 zZZ~y{9FkEDlStT}6H>e!j$?lq$9aDmZ0U6#`XfW10P5~~@h~M9g&*oA$080xK_m>z zUe_<0`2??PPy*!q^o$o%u0$-FYe}(X5k}^z!G14>^KCvs`;# z#XZh%ox!y;$FuCmy&y5bO8r#rPdnMp_P{;D7_Y>Am_3i<>B_BPIrx;}x)v)m@YL5{ z2)ynlUcm!NAUz$9i+k8f|IaLG-WAp-*%Zue>xep-EckOFWURO zUIspTJ@gV9cmyJvCLUYh#HFBP4uGK4pt#yO&Y+)VRdLnJ=?tu(Kx|Jz+XcZiE@UkH zkmD{c@6sQnECV=?29oa1QwOn1vW_<1@pvul);&qxj$OCR!1NB1zIv$FWoGTO3}_Ss zrC7z0T$VV!f=%#(^&dc5>8reD+zoq?x4WLQ@7fi@UD%)J1$APas?}{l18w=fio2%7P03pEGj>N)HIV z^{_`a9xOZlbBi$MgQcgLZp~-gP)}BmFv{#wtDmIkXP!>w@h&oe_Yx zH9#lbKPQE>zOw^|!ry|+JgiXQ$F0o(ta3?xe}QG}K6ph~f^^%pm9oX~hVZlF!8t|f z?r7(9VQaBIyYm5UQmhd4fI_^?p{*1gc%Xx+H=b0k;nKbac{Tf zyzs(sIojmQK{~Ktl4a9{zun=o;^${S&Ho655<9$~U~}kQHV*pOp^DmbUe3TNhl^V5 zPH-0=nP9e`!I}Ol<_pRz{<1w%ZZX5nV&3_%@*lk{R4#u3HW$g{Dx{+YN_O%f9RoiQ z3OpRTkN=UbhRDJ|pQQ&bXV@2ZyK+1nm+d)qyMEu>r9kS`cNQ8dUl2_z@}*cIAbmVp zJ}ByV9{clp?)GdRnmNpk=Oumm<_fRLNAJZTt~7EHYPV zBPzj$8L(O$2hVW@P;iII26@cAHFCx6Iak19JRGNkhb}ulU=%UA03BV-+iO zSVxI;KQb0+6(q)~Z-{2grC#APRrpu0DO{9ckL2~Mbd+l8J6OyEJ;_z9BGk2&sw*l$D({PPkU@B4<@lV z7FRnDmktS@F3+2bm@WV0Baa?=9tOIV8#@ltGwxk%6RtXZ z$g$X;=RpeI$uf8W$r7x_NI{F4Q(5s;SN{DX32xUmxygQA5f7Y5GLr*0a*#Nj`TFqQ zOQL60tHFF;8PMt(OtPbuJHS%O>U>+q-FKiMQz{S!B(a}+alw~?Z` z#2dJKSc>NvlFT!8LS&obi1hbjm9gHAJfca(4fTb>`mifk!Sgg6v6>nn2%Uz}S z-To*TbxHLCvt_ZzVr?gAf82{cyY)OfDGxErS=RB`!RR>i0c^1R?bYtD9v1Ym2Q^_I z48GviW4W)Yo%1CH(Gi9yR!Hu~`wdXVb%)%MJi>^|j*<;AX=SrmA}FIc=f$H0h0lD- zb-Dm zPl@hmPjwgs9C&%)2T=nXcdJAsrEHJn;3dZ=yqv$0G6>1@S*&5MiGTv26coAN9*K40 zfK;h*zLH`!Yvq{aYP{hwTnIAmFjpv*aZL)!XBA>bfHRD9RnW9Rp#VK*b?D6J4JrV(^M@-=&0O>wKIJHrWU+l7VR2snXgjL_E$B7g@9&UlAY+Hn*l}kCIy-yoS zeQK3PNzIf^v34r(oP0utQu`6nJ*ow?M@lpIXQU^F+aaM%2mZvBob21vX~7ey1zn4^ zy>e1`NkQ^D?L7sEL|g;OFP)3IOqgpvyy9<1K&jsk*D?7Ha(NcLyS2v{9T)6Ua>D_! zSJ*AQ*AH>yu=KHa)1U<;maBIiK(4!WvxN->77pQ}RrCdrFgh_tPVmZv_byttkBMzp zXp)SnP{|;Yl`mmn)m!aMWQt^@Wu=((fH1ecG%hj3L^dVu9{CY1mK z+O-{5#ex+&cE$bjw)D(E?8Dh%C9*p$H%=A3g}DP4 z6@c3#xwUv$l|A*Vi;7U-M&uu8l&eTAfJ+do%vH!B>X3rVF_K9_v}cTD%7W<5ozQ?X z-BlSKt{o$PQH0`LC4>AP^@`#*l1Vyx^l@DeJO>|iE20q$ApdsFR@Zs5vo z-BWSSy(3u|hE@RDdmd6U#q6_u>57OT9+2l8*TS1fuOp*?3h-a*%!5maqh?5!TEQ8k zc2Xv4pXcQ&i^hR5-}QQ)?PqtWh-MRDZeT%STVbHsWgb4*J@N@DUMmM5@e5ccyRMUX zidG2reP6IVsm3IARU8qUakbo#f3o}w{(`&4V?)+O)lOb%f22}k{82(`?Xb?p)t=9AlX%}jCQ4`W4s}b4jI0fV zRO4oyb74a#juj$FB^n>5?sN_>%32{0$qJ4iEVJ|4bGkcD4}-8o%V05-6{W9Rm26KP zBYrB1uf=_;s4(|VQBSay-O2!Vs$YnfFjAf{zP+cFXwT`05dDKpc`w;UCnU}!VaI++ zlP)`EQmVSREy9#|1|U%>Qb^+KWREfi+%_G6^p`@WJttoZp(^%*Y7Pcp8mOiEP(D0MFY z)aDZ%m_@s`cx8E?8p+)Gg=tI{8Ye;)qf`-jEzb+qwMRzCg2aiIZ&NjqJ_&(9GL}>V zk&=Db^TPVzEvXQEFwVG8SWmKLv%=Qm#5EF5K1Hh3o)dY7BvVYg0@9Eg*T7v$nRz64 zNt?TZXq9G(#(*<9kPB?&C$`OLBx|xWv5*8)$Z?~^eJV>t$Dly4gvM16;ZlScNhi8S zSq5Jq`zVftV4z^~NFD)9Af$U_N|>sFVP6U`aA8Y8+ZE z`7Zt@`NLG;K16uv$qQ$4key?-lhDzcA|XO+BK2&irSO{EBkDw|f>Tx^iT;S^jHbwa z2X>B&+EA56f+P5F$v+WdKPko_@RM#RzzdButB6t$u6UlXrsOTPG^e36k}OAcCimqJ zXvx+C3#bMbT(K}RBopU!{N6&8cYydcvkOG!Uf(%5u zO@;zcD{>Y&lFg{T!b?pKmDd3m>N*+)ATl88D{k0`E|FmjV*0UCm|QlMmzZiJRG!G)>|rni9Yk+z|*rNlHu2g}#VkN^uI7>Q7ke=;&R$Sc6NWAP;9_4{+P(Ae?#v!7+;A zsAN{8RahVzo4$x;Fp~$!Z%V?VLOoIlqQzx+Od?4)ex1~%IA_v6O%);u!L=X{zDefQ z3x;?CtZ0NTWJ2xLuIi?f{DBeyg@sL}R|94gl~;Kz+F4aqs4LFNjbFta3hamz7RrB5 z9*2*Jbykej1%smS+@4dQ57V3!gF;hvMOFnUz(`S(sHTbgynV4(*d?1ACqxIOf_50? zSpg~MMBbur!QJDvvUqfo+O;}R2%)`9jy32z0QqK#4D=WK)dEsnt@I%K(sq!EF$ex$ zNZ=$ zC9Z;@T9*2WyR<#aOvf|BMMU?(4Ip{|Z{ij13!viFBg@pt) z+e;$G7L%c;BP)#cRCtqdi~?Hb8Dyho0dW$^Q`o`&5=kv!bQ&_C_M8{Chs0tA5|ll_ zt^f-`VtLfQ2)N}*D7}i4B1b`|#zOcBykKd#uHg(m3RFNJJeO0Yie-8bT{;uEBpM45y};gxJq zw!;Gum|#ZvG!D$F(OtDy3lWNbl)uty4M7AFqlUwXPlOk%N*!;ZD$dwm)V)Sd5pRy; zwnX?cA_vMg_Vffb9OKq{TS^kqDI0Uk)(XTNEFmV($WR7pHO z+61biBqgfaDmmSq?yUnN4xg4L%l1g|N=u_eh}RGhIlSpaQtv-qhO2h+g-jBIx}~ZMg;$nI z&FT%Fx=O9!OAjxW3N=;$LgEGO-ga%}Cux4>fhZtF`{rlZ;v1+%Y#lYPSR%gpDBV)+BW!>G!3W~W>Uly0 z)Wyo#1kn^fayW%_E{NbmU_jqR=7$VxuU6FKkoBWcfWhlQxl!Ts@W38g;>;G&VMVmx zBWCF8NI=MrQVoyvms%~|6Vy()Xz;b{nc?E%T&dn92`RgSkXJb_UyozQa;bF-XvGS- zH_le664L@Ooudzp?DIqo#!*D=hiR|6#H@mgB99>$vg1UyG(IGZFR8w#R_(b~OoWOJ zE%r(U;Wv&e52kew^>xJCYUxAeQpPEnwQH+a6r~^*apkBE!Gfit)9_OIyi`4eeg3Fe zTPiF?5}H;C4gP)HYm3l#%j)=m(y4TU_S)ezX=F9mU#jxrzA64IgU<}-+Jg42Dc1yiW+BQn3E6oyk(Q(q7cXmvj24Y`7#? zcqQCed!*2c$5)Iayww(n>&w`ODBv)FRvK34b1TjmIP;*blD>=xz)rM0NEZz#+AM$$ zuECDK6xr2Cf|Y=;R!$`#I!78TqKtfUahpi9?}t_=82XEw=7PyfEXhN zO-~_ca5e3bpo9W~?Zg1F51x!R!*tt^Nb@LBkT#HRu|lGOC!W~jDatXh&C)<*9XdDc zc*-EQL2)Gg-=2b1-wfq0OVfahn2efIOaUEh92pBNmDkr*`8&Pw{KLZ`CC zv&aM#3D|slpD04GlDb(z4rc?hr(q%5XzFNCHHFaw8o51^$ksPgw*sBPM=~R=(itD3 zKp343;xIzu_DIoklj(^F(5N~UFF=8aWJf#mZQMfGzv6jH7M1k~uq`h?trDu&D`P_t z6SD6sr|Iu9)8XIA50D4Q4rz_LM#eQD_miGYSiqpTs*WTV#GI-;tA=mFGYl!;ha^n9 zf2ej2g8OanQ)4$v(-mP)ETdKpI{t-@F|?G7S^KLUq*T)$2_&kq+0d4S)SN)imo@AY z=wnxzY+5mOxD-dCU{!pCY*=#_^QAsg42bD?s_92f5>w>7JmNw9kqr>KM|PVOKVcED z;8rMCaNvHbJ*VHZCc3)pwRmOXCU>T-D23*zLIR8xHQOT-f|v+>i`d{_q)Ir^94A@7 za$cCrIM4P-^bzAr?LP7(IVFUNFxCT_UO(`G3Mf74?U6d3JZvGL@l_j;U{r%g*QRYMZ*DN5dNTQRfN?KrIEId zG6uv0-f;QtIn5I=n zG8jE)sQf_Z17*`LRFT()z@8FQ3Aa47EC5*!J&J`}hdKHVp+6Vrg!;os<&+30qg%iP z*Ps^($3Q{0Q>%u7i@2f>UENvzQ|3S^49kdQhwMFM_mOCxwj;>Ay-%P|FryZdx1^k7 z6o)Xf6(r@ph!K_bXzto0#q0qk3iNXaG-t@$O^{`4<$#F2$Rn!!Q}Dn>W`=;!%uuz5 zp)W*U7Ei@P1BcU-!M5jACmZqTbnO-g?2NDznV|7Tr4}wpT|Ieed!)2az{Bx+jHoHx zAYiL=%f2Nbp{*b&L{$`C6U!?;!lx23ATMpFx(F1$()f&t=SYF=3J+}~Q*h#*p0XEq z*(OJm_&vm;Y+Fs8CZodCh9Yh79o=C6Zd%fGz)RGF10ey@Ts@uD&gO6IUR)9rC9S|f zDUrFqGy%8{qB|wnlBcF+f!-o2(HkKll=L!FE?ym$yhf0b7!HLc9Q5xKF<4O7m_W9b zLe<^T+*{FD53yA%e4i@2pJ%FuJ>V8yCeP;w$T9etO&_7sSWUXQNJ>O5E>$m^lK>?t z{W^+xRXG_mvJcVXhg3@ZPisSw+=SrZ=}DxR9A=cW zg`?06l6)o1z>~sLCwxfj1$}@?o3!|Vl8Ru35`#PQQ$TK|`OV}Qsy^kJDfbm0PD3RrjxJCYN1 z!p!iHmsE4y6c><5>6c1Uwa7h3!_6>C*v_bG$UDTyil?@nH0z^4C4_v(IfWrjLIAi_ zHwA}y4CS-d5+tjEPu7D*j~SYflM!16S;0d5Log>PND<4BTvD7fWZ9Dx1N$;(x+i;5 zcZdQV=c@_1ih|UJl0h9u8WJrAx+t-fwuglv?vM~3uAZ3oYU%qTTwrPGQsg~AaIgxJ z^Stc35Z?M|irgM+t22@Td)J&wH_pnSVoCx+FzhUDsBy~ zY*1km%=TnSwAv$80jUbmG$2NrXHpcROw>T-^k+?AQcKPA1+xSuA2Ey}2Pr09q)a={}Va>i@4M@A0C3z>hJvanfb z7)1dC`Z8h>e3Z0^hgIYS2aU?iOh(>WY7|dRokvQoy~h-Y^l8A9g*OpU6l@a`q6`LU z72e@^efMk!i^ez6y!M4R!S&%Z4M0>73M|U#0+SQual|>&DgX@bsrt*TVg#N?`(8SY zkdl3p=Gc+y4dmuvCTCG8kJJk?_yQZC#=*y?cstQ-vPT(*d)BK@$5dE6DnXVY9sqaN zQcMFNi4y5k!p3^qbRa4(?Nd?QbEj!^)^@YAJ9Z{qN_RY7h>xbw_EUx^d;(ah14wf$ zPD+MF`-KpQbPYwtUs5FrNhB=oIY}%wCnuKzxvX;1BJ~F-JNi4*7)1$>xjoY84wsfG zL^8sRPza@AUY63QMVG3@$H2PnktFoeV>)c1ny^ky4>lpgq#lu5+NtJ9cD~Ub>2@-B z05t%=hn_UffQp*L#und$+a_ITYbcHsrFrsB3kt~`hDV6^Bqb?f3M?Ntp^xQ4>w*}H1AZA{eyy(i-l?nnNTT1lCN5C029mNgDT2=h1 zIdxD-nC+$u|A@|{Na(PKe5qLtz%6d8QVVMmE-HTC*e_$3)z=Kt_;6UfW(RB1cFL#?^G6DQrL{fw0I;AnPY_ z^Dh2W>@tyzP%oY6U?xgjy-m}!R08*cY(z5A8c_7K=R}wTYT3>9hPe{<3qyhxY%bMC z42Fs?gw!4>Xb3B^`mo|8LmaGl;xF0(#X|jlf}CyN9w}*4&$sr9>C77$CLs_`>Fe}6 z;N3DgRgh_ql+L9}fNIHTB}2DDT3B4kpfZ@`SumD}7We6Ss!}Rk8l7_CEs?gFV(j@G z1UQvD34!FGi1yU78eP>qk#pP~|IBBaa!7QHj!#b-xs)Pvd$kNskL%{*(6xBxRHRk( zNIg|P<)6qgh_gCUwt-B|6pf65=AhMhG}Xed)(^o;o|&oeH8s7<73&nZO$mo#sT9GDE7D`bMI zj3Bmj-L#ryPnA|(;K0pcp@^Q8Ij9(%gC(1epj-03hRK0f@l%OG7LNwdqzB@`Gl6-4 z36V_nM~VpPM`*8>G?IswZej!BLk*~UPdzEJdIY7IC`C+C+a4KaM7+0w)gjfAGOrg= zg9-4r1V*{#;x-CoZ0#ksX8u`Omza5d+S|y*0b_RWkzi-(7us_=pX^CJ!=Mu&n9=Dh zkH9YjG17MIk`&{LBayIa7@0|0^p!&vd_<(b6p%PMDnZS7=G_$5XWJ$r3WgK*6P*Z3 ziCBfV=qYp&qNxa^+pE<)MvvNQan{-+Njrno%z&%drurmx<@_$i3gKrn|IAz{?4Vt# z0Ig=Oo#2AbrC`g&=skl!a{i%m!;5Vg- z0c5yW@rztbqL*GpcOg+Pye5tnO0YFAT(xNeG6i#iameJ~joPMC{#e{uQ1@}$3AWWgeN`fvWbE_B3O*^xY zjphq$OQNhU$d)sfpqzS|Az(^rne#Bm5rs&ySt8|72D7X6DMCc8B}goQe^v_2no`Gw zDtQ4K{H!e5I zhsje!5v7te-%wH7M4GItPA2BTR(K4_6)6j)G{t9*qt7{`LdS47TD zMYXPc0mWNVg7F03^w_pntFntd%iI=}@xRea5Qkdv32bs?{rprT!v? z7Y9v_rVy2}(mCkl!oOusaDg@P4N4DGc|;6IX-Tt0GUNG$7)1p6E4Dy^sXeEUGb#fG z#t%gCpI2Q-3!!6m7A+6az$oCiM{3%0Bj({}_Ng(PdQCAWq*bI8246upB1Wl`LijQk zeUk_QxX7GHR!-oWDNibHrq2$5dJl%ms;~sE4u(i8xDAZwak?xG4i2hLx0%?hIj`_TNPkboE(Q5A zP|Qza)PkZ&rXy^J|5{v=Ks55vjo4sF19#w@=XfO@je>!2rm{O1+j+CGoB_ zM@k3zFHsfZ#kT6AsUOrC^0}(!svHsu07d75<#MLXSYS%(WVA{rQWjg93fgzGK*Eiw^!6G;)#k~21=8t8+l~>nhc979U@Y6k*#|iL9h`cjRpIG3RK2S z`}WR!YT2q9Nk;pk0yJSk#;Q^_c9C_MbE^JL0+DfNX?>BTYb(NPnlKTyyh&QB;e`$1 z+S8`uM7rJqB2=Tvxw@yQ1pO-<9_r;##4?N*{zplNsgd(>=qC8+o|E^eNm33OIk$Jc ztqoCCaYLCEf*dgi$aae12u}hSKI87G8w$NH6%8a7& zCT8Z+A*$@bcxI1z?5N(2Gfw{vWe2bssZ_f{grsT(;(Ii9VlBo|go(Z;ZHwVg0CbSE zJyMlKj+rVy*Mm}^UqWSCELae}H)>CXM*mKGB;FhslUMiT9R`60>7SGv$(~i^iCJaZ za>@2clj51TMi9-Ze6q!0Go}iqyO7j@xH>w+uD}UMuuR^_m}OvC{1a#7=mHy3BEvOE zUrco?&WY_(QbW<8($N{XL6T4kek#_OVBQNA11V5y+Snu-%oGs!U}a0n%y28kL0V2R zhSs~{q{5O23wCeEO6r-79rP8> z9I@Q4EvC)@V$ei0c1omav5;lx2GYEf@m5aD9~aM)B@l>%wW>^}=5h`h2YU8EkY_1k z*)UP@w&!HlN*pAuqEH%)cIheMfpHTE%BVA(Q7CMW#2S%5dt~4*X383IWf2^tG1IhX zW&mYZye5FBi_EkF6ju7B@UN!y)3*W(yq8{1QemN`J!gcjnJN*lYe(Z`v3vBB+AJfh zPWzX%c`oiV0!Wfs3*^iSo>s^*WsqkefQB2tAbT&)$@@z*38AQ-B)(jzMxyAi`9O3d zuWvIL=h0rRwdQlKb?b;*^1LOrU{Umq_zOY0XhPB}+fPy@FCpMgcLPac8%a-Sel}4=-oQa3yx3;em;82XTG81k zav~{32JW-!X+xB{(|k?JkTGGJt0}J`MtNZ%S!U;phV9joRskgH92hG+BORH=@lDI5 zU*M1|xkmqOcNCxE4{Z$+zsh7+h?!jfFU$wVkojEU_ zH%d-u(xfoFKzp?Z{>i*hr4hT|ZnCD{t%gX~Nn-%G#zvJ3NVPpu1Baem9oeS0FqL%t z2jgm@xkv@|RvOewRaP9Cx35@scrl5Fcbx$%z$IMc4G4A!RBNURm#c6knsRK#)dEWpl zPIA%UG@DRQj{ug-CeLL^W!6EvAa`}S(O0I}W>lp%7)TE4l&wcc2NShxn^pz>9cL^* zO|gU+g6x>AD>D`|`%6yCjkiZ4FR@OhSJAa3nw<;-kR2n5WV3FR>Pt1W(zwX06g5C; zfj;kyN=-+1w~Dfk1dJwtvd>u2_MEBU2?WZ3n1PIb0BRK?pg9HJDDzbn=`oAvX+WvI zJ*=z55AuniOlw$fPc<-&Y48xPyNXD(+PH9ruCT`g&@j0|3N2Nyt${`D1CT5j7em8I z5Up!w>e*3X9EhkescPpr`BUbu*4*AFI#L0dXTJO6ZQLZijjMM{!Emz#Iz0&^~> zIMPm`Rob)=>0hQ3kSVFRrK{INrgg%`RZ~i~CRn*l-rSd&aKZ>yfOyPnbufLj^{OW} zT6<1V$IU?hLMN$$=~W6k41wczdoX!#IvS$2J#rfb3gs_q@CsgXPB@1=#jXwX&rYS_ zEbW$l0(RE$<+^CNr1riWb$EFXWEe<5RYl*WATIC%Jl>>2s?we_6pPEmCmKB9(b`=Cf(ay+DrA@m z31(DO7Vl-F8gWn^U@1L+nwdmy#YEYI+44J=9K=!Nf^aW0Ag7>f0r!kf;;A!!K{eIA ziZx^zP+fbq9IG4-awF@{VD|JLb7vdLti9hv7=Bs_zdh29lI$d%mjbxd$V1s4aVjBN zhVo0y=q-w?m058cf;yYe%w-T~8%FBOif4YrkBJtA?_)Oh67-}*2bW5*aep8XK@y9E ztt59=v4~~5U^704a8_4@gc{|WT4{PYiS@(SC~FBa?R^r1*}TbD6gZ-WN2R(vbSxb& zfdg1gmQ<~gS5Tst&OwtR5)w60;0zQz?o2F#<<(v z4wbl+eOF*TAPo| z=z6gY?KxG}GV>*`yF%heghbRV&lV^U&M5T^pQNj8k32vGO08&Y%z;P8@YIS4AVJ-{ z$3P=BQ>t)0rHU6 z?CbO=5p`5JUh{br6G{b{jS}*TpgXOunL4Lz8{CkAP3<`~^)S1_(Fm>6;VYqjk5_fG3uPo2lTwx{8x?;0Xyq=b_O`7wOSj5oe{R$RV zEiaV}bR9GkWEXFvxlD3V(v^1Om#5KIByhI}Ca{Mz&YT;lpI= z5_J$RuL{%Bw<{tN?I^~D^fdjvrb82a)5gj(671z_TUw?_*sd+`0c)Ox_KY)>sp|?B z4>Gg~uE2Op=xEW3b21a8d1;L%CG@r;X|EcM zMn~n;bm)4-*dpqYDhdjksMk0#3qfrX1C&3|DhWz9o;t@>kSX>jMW!-k%!hVIUP${U zuS1cFM47%v#Da#c-t@sd(z`^VA9vfV}t`G3XQzGDV_>hATp4vm#T)NMl@@TqmYmX=e;e=9u-*Z&%ClpiDH|dOKJ-P z@!3j>nZ-_kOAu?Io?fc#VK;r1@I^udZiz zI_@$D-yyC7sRh!+Pv`6|Q7!1C1 zmAo{8OtgtYJwK2}4;u&#QoRM+#+?x$o`M(dC|d#+wDqQk@LZH6Dbk<;E1i_OALTc= zs1~hROvgm}EY$DK`ry~pvRE;@Xs_0`!W3r8Ag>c;yE=ywzxp6akLsxm4UJPBNw}ML z;9ww`xyBiaytrxw1Zf)0je;RGS9#6o2n8}8I<^oloyy(?e&LOF6?TlT?*( zaPEX}YOHb)_#52;BE=9O4QxTFOC>u}D$^0i1=%p-QZ#7R4Xq}tP}0i$%4&u97>jE4 zGv`a_=PTs`>@e}xE-@w`vwPdM1+=Bf2$wLwNp7glxIrZ#7b$U#y_>0A?N4G?rI?Ic zaF(rQj@m;f4e^G5p>Q<)w|rxtr$#6QxtO-Wzk4Q`m!8)QW~><^*Kkq$weZyHtVzg- z3e+A|epKP*T4{ny&CUdKoFN*pxK9F~2%&}Ny!*v6(p(6EM>tMNo)uwVa8(6|f#;PY zpjA8=jttQjmnlhs7xMm75RSC1;=$n4$kf!WaY9CH(Tx$r6445X1WXbb%`Bp7`&1}= z6=mrh0R>4Qj?Qb6jl7C(p2_EpsT$&{`((`o=e#U#2dTe>OAkr~DZI7Am1`(zi>yNu zCqkwGnb(DLnWocFf*kFem^H$H4S+qw=W28q4UdOzDBJ*3&)50%A&4`$idSDGjn(#N8h3CX!dC^0LOykens}*xp7>KQj*}<+%BI5~pPen=zh38A# zi&blnw3gaZ4GxGW(oRQELk}&}&nrcetLxdo#unBG_ISNG+^tHHF$lh!qOfX2j)4Kf z^U#d8=hRPwX2jBQIz%RsgK6?2zQ`z<_IJ9--`*DvMO?mXM{O3;?liHEE87?~TQ)gXith zez~|$YO|OfBLi!<$w920G>hXlpb!{i6Z;AZza+)T^Pl}_wo-}hG1z>(Ojyv-q z70TPEqFSqdpaPHoQi;|{%XG=wnQUI1X9q=kQmNMn6)7%gxg^)XGy()u&Q8sIlLmtj zCJ0G~3+v-NQm@W=C^l0N0EU=(nn83L$#EHEppj1JQru3KT4ehu}7(NdCT z9~c!dwmoudHGz)tyBXJ_?3$EYDarh0FHy)$7`9g_k1|jq6Y37!2fwn-UO6L&`#R$Mg5(1z&abDb3JQZ>n$d0$%di1sIWjK2%Ypv4) zjIw4%TUE7=Krl%LsU22<&O{wNQYfGF)20$lpU+WVA!VFz{Sq=s#6NuxYp8VeyQ zjGmq*9=^&yZBKJLfId1H8QmVS9*O{BK(k{S^uxfbRnJV`w5Qi4g={+u399Zyyh+Yu zh8`RWn#r9iZd|DM0!zt;w<7=>2wwmiAtu1y?;en!$uL zrW4$WXnbLWbA_i?;n#)%xS4OK;S`yzcTg^jhnzdwWiTFEkD^3AZ9^v8mHz zNVJ*P2q8XDWFSb@14Zu0W`!Y59f(ha6hw}%Ap}dmj^+hf7UH=$=O$Hh!A6PEza=K6 zn+2_p=+SOu@Yd0sfvN%&wr# zoWf6PWqeM(CggAYFt;V0@gx>^_#BY{I}R|wT__=X5drC^K+ zoF)!NYN}-|O{DjY0o4>+w1u0}1E=dQW5*>Y)awxqkf}>Um08lES?p}tH{BaU6A061 zfX~R}2zZ`I9@&@eCbkr78&{lHsQY8@`ypVpt9_Fm6|I`m9=WOk=Ecr-CibJ?!L{Ro z^at9b5qb(#l1CnVfJLj^{+LptN;c8Q)}^8MPGtu49074eOgNm?fn!?$4%|Hj78*$0UBsBW;8jlTt#a02gZ;%^|X$=t-1S zjB#u#*i;qDpv0|O2Qw6?SRuiSCMV2$UUbT8xp^fTZ0|u5suY@u1iV;bL*Dd}afWCf z0xe{y^el>2?%LcAo6{yDEGnWP*1!XWCK4)9%iN_WL6eY2jATSLajR8yprPg|peBE330w*hpg(9Pr^87Z|0wkmJqogbsMJ;yxustXfMd z!cQNO4d7YW>8Nf6&@6bG^NJ(4w?F3{FUrFDu8?k^UfwMu7h@BqP7oV#C4v65=4S)R9r-wLY{OR$nkLVGt45}p}o(HRFbx- zlet^Om0>4JDs=0ftz#d)K2vL9y*xNFa8 z8U)yH79#VrkN|}=NhzO}Pz+9Ty{9!t7oMKhsLC<;tWHISBv5yElM zeeqN@#nbKrE>bznGxAeAtpK6CBEy#!<7Ty$ z=cIk{R7~o|@+q_0AQChMX;BxOWqyRNvFIX+pNY2GwS|Brn31>XxV+GzQU50emK|~v zd6tqaMS=E6vMmIHtQNr=KW)b;rSl@Xe2^g9=rw73VSQ*E+@zN~FdPLd0vW)~j?8Pk zk&j|0TG-p3+jAn60dQ_FgNZX>Ogp1ULGx#)Mj^jv`Z@EIs;4o}1DH*7F0IWY^^Me_bm@eK-;4Z8Wa*|N1s$}*G^2%fpO#l+W z(RJcU6e|NU<)$?%2@6Ff(W-#fu27~-hlPbJ42TO6HsjR1 zv5gm1D$M`cDpg%DlQV!t-UFGS4#^G51HH>BuZA#9BmGS}6$`J4x=2&B>{HA`t}`iU zGw)x)r_AhuH zG;|Vbk>tttD%}n3VDUWVMk$h`Yy?v0^d=kmD@hmVrF|5_ff>vEQ=SJNqU$r>gNO@} zg%*>0ha;tiCfdX4SKX@2U1?9jGcUPJ&Vb5A)EKF!t_}H-0r;U({Y@X5oHc1!igSv} z=3g*%MwC4pKcNqz@Fsch`u5%%y`|b#-77F6>}TKyo1kUl%_ykawdGOuRFlBSRYU#i zjr9oWpn*=)yz$T=kE?2rBrNua{JdkS2{L|4Ze!*&c`EZjg!uwyw>>g5tjwA>4n?r% ztvPP~g`30>X2Sy!^rGcNcFZN>Q(D7an_z_yu(tqIot>#A;#BaHyK03XHfk6%B|Lj$ zcxdD`%*5>F?U{W@bOON^M>-d-#>E+c0#V>zGpb1i0W&Ic<|jfA6uC)HPwNkBZVc%6C!r<50!V@ zGf0^UAW#+FleDRoq&dAfr)ZZsgOQ7+$wDDXx!B8G#0Irg#WsTn%9>6F?Ik~syqDDd z{tYjhfj~bRwoq^eSxOh%bK3Goq5#zyjw<0GNt7E>?*MOzM_p8Dw5;a$0fd6J1)-$j zYBkzhN`aULJ=rkGAy!Bhi*wSrLze=64@{ zIhitX2v`kg#QOY<;d6eV(oWhI;Nhl$gyHi-^ho5WU_(@4TDJH7DnhhZi}29=Bty1R z#L$s;hJ6O9!^f-NA#8AXMJzLA6~SW-(~B)UnR}eKearOCAPM{6Gl0kJpuzeAQHUaK3KB`=ul-KO6I!kEnv-z?nKI+{ zq%M+WRxga;1mFWTEnV26V^w{}1R^X%4!auYBSce;VNi~@1R{o3>b&~BU0Vz>!$eEs z`AH?cSRj)EM0zi}#H*5M3&-@Z?U9Od>d<@!Kb8bv$u9d0*#p(G0vZI;qN;q&&HL$9BYDf~=tx!6Vd1mF$GbO5C2IE2pR}pMfs>-uwrLX?8IV@(isdoY zPxEh@Bs^9Kp3zOe?P_&#D5^`o<0nevr0+gh?D09lGfpcZMke5=@> zVIkCp*#kROSVj&RZ=s;5{hF50ZYS;&lUo}?;8?(@k(0A%P~hBy+z{kaCM5(^5r|P- zE$KuWQ&pp(qEJ0jWOEIKTu4_n(MHpTHx-sZIb-w%yOl5J?J_tBI%?1_1Ii^F7&x-n z3df6@UUZQ8ysQcDC48qq6dAw#Q^O4upxL89H69yQ57CTC<95Ywg(Q=Qgj=+oolBub zXI$)0SxE*Wsv&2pJIapm+PExOLna4e&}$OBRJymcCnEZ^S7d6R%SPBD3tS+Skxal6U4LyH^k8w-KxfPBOLjc`CuBkx989(ZT{i74Jz78wV$H z@)-hb;$g8u;14-ZMzQ!V(gVb!NQ-DrP8L^Yhbn9rD@2Ik6q$FFQ4-vM)VCp!slk9S88)c@UiH%^ z0aVa5JTfQTp3|zw#_%#3#=>}HapZO6jGG`#Pm`Rb#MF5z$USdw$-IVKo5aOt7ypcC zlzB@+Q9Z>9*-j~^Wul_+poYW+@g-jB9%dkPh$_CP-CnKHL((p-g4*;UFp5ix*ln}t zMFiy8)cuI1;+*nxHa&B0*(xj8RJ%-{ z*-ETr>M`hY)`*_<=q&9+S+S~_nx-i%lq%?4=$iBNpID-HZ9z&&4eh?RaTRnuK{PA8 znaGqbfAC&_l$Nwds(9)*<#IC(6Hg9#f`CF}Y7wFuUm}^PYLSqZT7icup%#g#xr9zs z-o{lEDe9dNmaEyqij`Oq!Zl{Z7WBN(x>#k@9T)`dsF-NzD%RHBKm{6>WUI;vH%Fz_N2pA0cHo<2k?6Bk=o_8(y8O&;4lc# z7~)2k0tX+xsdOZ_Q*~#=JE?VLij=~&X&8VmbzuZnxJJn@i%&;Rdrqfw9MmLC+MQ9? zxdgwZhe1g(gR`(1)!Pf~PEsuPr%X!i60xqrq;QxPRxO8w93V#NsUr{4#->+*Sc#uk zyGW;t%s%67CHLN5>htz$%|w!CvIjeq3owU+u198*S5@+0TfJHSP*^+#a>mW)g+u}m z@>4cIDgrsAkx;e!q~<0AYR_rU%fH}nn91X?O7cp5THt4zy;Vu1@EV8OBlDW;viKOIy=@BtOj&s%%6FhIM(ZM45clxk7MQ;9N$j6TE3Q_qyEM>?Asi)5Rq#B9QB zb|n#6xY0+vUixe>#lT<~+>BH7KY(CypQ#>1#ZNTLIU40@uOMatTvv(2^BQGw;!s2f z{y(!{X)`kmGd(LxWXc^<$t(}iRBGFmCEyQm#k$aB=lqw!8hL@FvQ<>%Hl3iMiL+uq z(vpq2@>JD>Y-$`9lT|k0L1^k};9x8Hdizv_A8mo^#4=9eoM?~q9-tuzb9DtMWg}#T zjP^(*Kwee>=)t&r7Xv=1zJdDKHrR#161TP*+~NM;{UKTRe-@ zO!>aOPl`b55SN>DRb^OxB8^PxWlkoSH$(I)qlLv2dTU-M9%Bjm#b{GR7+{QA5LpDv z3rpNvVevR$LLYUjRI(kDw_s}m_C)+k-rbUcyuf~YwHddOGzV>r9;drV6Q9Hk{f4dC ziW!K}s?rvO#*U+3Q>g|zUl7=72D{duzd4T{Oti~s6 z6ZK~%Ot1@CW_zTq;Uy4)LAnpvp!N^^qNTU4Q9;rYo$xvX)l&y?vm2{}cNY>F`3Cc17m9XMINnxS(l(v$W zXpcbcnERZ*eN|A*l33;;70(l1hKMog21arW_(psb5s+Eed`ad%MEX{B_<)2)7;Ei@ zZ)u4nJ2aI1djz~FB4mhQChWKOsfK6k5@Lm9u}gU_l^womvQvDH1dA^$R>&&^6!Rih z0swLP@R2dL@;{`cP$WrI?gie+<(L_L2?6cv@v(M?nLJ(;mt41QuN% z(WX#3fkkN*O-rWOf?S9QmvOX5hUXQbfi@t)>^3A0G;6yQxN(H==x0*JV; z^cdJ%@*;Wz#t1ZSV@xwW3)X6nq>D5ESe2L>5ixBrQ|6#pHXs}8Lq%)|Ae*%UjuxN@#A1|G`LSAmqocJ%wDK$-`Y=(Db6mXFN2t>AYS`RYNP6WfYpnSXZO+-FoYsSG8Yimxq zN~D4wr8qz=Pe{iMjH9-UAQW{`DVXv*Y`FGL9ij(? zfJ0LRn#cB5)f4w=@l{YVF9~Q-c6_+6@ztyGOZDX&P=T%tsETAtB14spQr6_=6(>rD znm+lcet7t)_ts}G*S9PM?EzjG*9ZeVoT9#0v9=hu?br?1TEE5Mu-` z=(Egova0X^upi1eq112E4oh68haXyBPtWRK+DheNsg0Td_AHx`2sR+%DIK@^E@g^V zyrWhL4hO*Q-&$EM_PF(48y75A7MepD#&}&_^gpx9F2a@ z&9z5n)C&?9aS?rSIxStRHW-^6$&tC6Q8TMbzJBrI*#~#8K79WA>HF*5)8}mQ`MlOk z07*z-hAS8J$uXAWLT^ef~l&a$!cV=;6%#mTV5~W4aKOP z@ZI(K`f7Z=E_d1e|8V8Umrw7WkMFNn+HiGEAnM*q&jux&sTL}ew$$_ zMP#&=|KO2mPL!~zBGl8>9@HU7>f2qMJVXk_dzo6#S*zprU}*9x1-r zS({=-9qQZXRDbX!aN@Y&mwLrDupVRCoYgacXK$X6cbE4*Pptu?^93rl!4uK8S zZRkMcVkA;FIBtqg4Xe71eUKFr9~6iLKgj5CdMYqm6NxM}j70Qnm_^K%$p-*Ld!Kk5 zY_2{_IdR0#3h!Vp7ptoqjV_T>7#Ew{Bjphsmsy^K62J&A47A%;m@w#vHY`)eO~PxB z42NQeXD&WRtXjaIOL~QxjJlyZG8IgwSD?Kl!Flg+=n-$pP_oWsBb!>p=Kd_P{p_>$ zoCpSAg$6Y)(Ph#dktA5wjOkMPG%UtDKg`iX32*hA|=(Y{Wy# zbcO4UQ%2Y;8~_j&3)}k6{T4~Q(o>qy1v6!?jZ z_fkqH=B=tnGH)Q?%Q1+XG*ZZRgTl1z~uZ?dn6SX{+gl_qV@Zl zjv0}TO_v~7B3@Ce^GFN3MN8w=5cNnb3NsBMhC8T4X%@gnnjHv?X>cn1kQ^$L&sjlU z!2~_4Iv|OX_ENRdWk7v=a*-M7D&=Is6JntZPtp7nPb9U^4NC2Ft^i_%2U9-F%)N}| zhaB?Orwlz%2FSZNSzn}io@rsX#-A{HWes*quxpW1Y*pQ&10;NuFQjlV6qcYA%mYzb z@*~F1W>zVe$0`WVC4+gZ8_ZZSQAY46Z<_zW8910#(7_{No!gru$<>rrEMQSDMdNUe zsRPRSGffW9ZNH-MB#;O-zlw;jDjdutRW%iEJjsDPE>pMcA4?ndgjz-N3Ieq@gnv(C zO{P=@`qC8GZ)hup>u|lKBc3%>f~=P4Pf4I_NnpF%qki0KaM4qAfzj3-p;8H6HK z6g4sGG+h>oD=w7wE$>swFb%Xnyd~p!@xdP&e|&uY?)t$e#`(Rs0L##5Qea*@IcX<5 zXGxh@B3Y9#WAQ9u-Disx5H~%8PdsXGvL>1Ur~{!BcAAH$P?$Hg z?frY%x65z4nDnN=+Uf;nau7ZWuv!Vz4yhKG5z&Pgun(h%Y&KfGSw znV&4{tM%QdA4mi4UcY}gKYQ_f{ou*n-SXn@-DfYR@!8$-`o*gc?#2&4dcvk(K3nBl z?{xJy?ygUtKfT*Xjl1>v>sMcTa(yKUyIVed|NSpH$H3{4YLzKEC?WPr9$|pxynSf9BPi zA6pkkJJ#)d{?qBB$$$Lt_ueK6+6-^u-d_lop^Dl1qBolpqd_KPGe_y@MnfCX8c7OW! zw)?od%6=bx>%9HK2jdslT$d{?zxtWae9>?I#OqJ@!^@|tH9zz8gO#trGran6>&2 zW&5pd)$d-89>LwK_4=7Fe$qYrmt0gXxc*Z9wD-mLUo0O!Lt!j;etSFQ^!C-yMLpc; z_F#YQ=I(yx>Ff7yzjlB1pWnIHWm|Z^{o!qHhXZ>fcPyPMLy=UVWu?d#> z)8mKF=l6be`@+98e{#rYpA3KSnIHY^-C=q9{{ANpcYgW(&-DE#e$vIR?)QUjE#7*f z-J2(J?fteI+i&A;UVrJwZ=2#1H|E0$zH9mZ|9pL0v%{TBd78D(Pe1(VA9(ici%*ai zA3c5j&WoRTf+U*1a5umA1yBCzv%6<6&@K7=?(Ro^{15!WPu_jCQ9>iB8lP?v!&oJ0vI+Ioss)Si zE&cvVG$fkzc9Ie@#0V!dz!hVol%^e`0NPP^!jZC3As%0?BOz~pOpyg3NwG;R$Gx;` z>-*xbvWY+tZ9<4-=@Z5nQySf1M8rx(?U62#-f|nrk!d`eHW27Z$rx0~U=ejQtZRED z5CGYN7`n-oij{_>E?NV$5=a>QnL7vx)*hMB(x~82pvm~fi;Ni)_RLqK0!%cccCB8B zt>IY3Lei7wRT`*FHX}pRKx4oQQUx+nhpF01FwvL`wPdl}T~QlCC4^Q0mITFeks)XV zD(({wFo!>_-A`P9WvYr;K1!{<5 zxoW8ki6Z6q!Z!tc`W=%pO(>LuARH}jUMi#_Qi+w7BEdiqCL?0$I|&+qZI8up0LTD6 zkvSig_*`E(Q2@vxF@R*eI8y6i)L}>!1v{XbJbPc!699+(Zx}9M4-7~4g07UoP*hS< zd0{4LPB}(KwMnxxj!V<*Rc?TsO|6;tR-%?R()W{4SA%xISmn7u@UW#)Jy{=tl`c&- zWZZ-|21tLZp>b&>u*`1y$&Ly&J&tVg8nePGNrJmd#Ns2&v!|r9lP_LE6 z>ZKE%2cy{cfIVKtq4r4Rl7~;PK&GOh1MivFb7qn_nFVzYrH>a+RI(oWTf!wQ0-2Qe ziqR~kp9#|dDSFW&ZdvPxhTHa>GJKd>||0-41fr4{X#H`cbul0wHF_-%B;B6{1_! zIY6Id^Jk8zpa!91NvZ8zZ(gyvv5DVSRaTJkkVPlXv*!wQ@p|P5|W-L(}~RYe1S5 zYwI16l-TZ1k(YZ%jpD)WXXP)6LuxmaG%}m^KD~euNv->xi;aHLw17y@5#Z?H41^ak z==Te|RV+_U&cX%~geOZ6gkf4*A9PHLNK#MXqCF>(y-JN~tr$zbhgzP!0W7pDhz`{^ z-bCtLkVX#CQKpSW^PfV1AWag9Y)5(HTBBZO@i^G_oD_Cy=cI?mi>sbmN+#phRHyOF z3FdhbUpW$uMhnTPLs9)kgx9>!N|9XN&Yn5}3X{U;SVUeklFVvgdsq`@zBLvoU1mBp zngiWtc2}m@w^y4|tg=pmUEbY^V3KR9gk)(AVgdPX1r3qRT`kbGF zF!c&=X5gm%N!MGfP+BroInemN0^*6>Dxz98Tq#D#Qx-kNsau})09Suxe0`s2ee!v+ z1d)KEY9+1e+}h9pOY{uYplMQ2onGs_r>3g2M=iy{fs87vVk4xsG3dC26h36a#&{sr z+r={_$k6kUpa?xh#;Dp@HBpLy4vCPnLTgoMB^is($kwAJQI9Z1b~7}lPNC$)1gd_b zSawwfLuix#3(e=Rp#gU>Wu0Jomc1!pkBqY-Ue-Mq_s_1V1 z6qnGR6V8Dk?0ZrzdemeSpi_J-_EhhT_(AYfX%H#cR|-w>d@XTvSuEx`GX(A)z<@ zDf7y`K)7P=JaLeYYE@}V!w1Biw-f-D=1Ra?E`aOMqu<`ALUi8TEqv(3(6Y-B(pzx& zI4~j>Nd=E9#cYo>!$DOQ>P@4qGakYSsQXKq&rS?zQS<4-0 zx4oH^C{!z~8ckuhnRyAL@>aqs z@iHXGCtf_iK7IE?T8gJHo>!L>kq;qVUWA)gO&L^rU@6|T@hSre&mL`29myDTDst;7 zuv$@dRfIR!j?AT4*9@Ei)75)?0ahggxell=IZF@6=9*+~av0GHY0V)Q&jsyi_K|TH znQ_3*nJ=tvrzt(z5C1P?ciUZ8k!5Myzo-Yc0mHWku%Q?YnLHS(M%Nb&SvoSRv?aGB zQ@DS9U-#bUO^%T1uI#GB_?)v}B37(5=Uj7{`WN6Z<2Vq84O?lvcAenG2Vgag?so(vbrL1x_?t3VD-?E9*N8+wOlxYa z5exbOBHz_x^<|Hrq}0xTIw)Ks$o#Ig&c4%0NJkp0F2&TNJ$@2q&*ipx`=|7-*bp=a(gv-w;b7OlDdLkOFip^J~Ra;G`i)N8uqYltch_1|_&`Wf0`fHOXkH4w10xMt|bej<3 zxZnJ#lQV$nA}(T=s#EwsuljLcua6AY+~IGia!Eu{}%#jl9y)g(kx(h4A&Y#waQ3$E$UCC_312#Oi2J zP&N@^Qn&Ds$Q6Lhm_B0Wr=Lt(W=&ZpCPG)CQ zjoBg^SF+%&&B|df322Dtc(o2Mcp!;UEdyoHji2)urg{gbLl5_qUFNKwrl!UYIJ06g^d(7 z^QrGHgIOUs;0m`vJTmKyW{9SvSRIgkr#2TY1Mts9-ffUlo;c)oK&9i&Qv z3kL-ML53Fw888BOn`N6=d5-#+de2d+DA3YjXdppc6IF`EAP}*0hXf{3NVL=1u*V zFMj7q%3O#8Ohww9c5WF{Gs#UrgjTDJ*a}sEN|s97bkA}U8D;UbvcIRIHpm(?k!EdL}7lRr~SjK8T-1@tX1 zh64$);1H-x!zJZL6vN^m_#WIg`D87_nXGC45UuU6+6Y5BOUxGKfQH#wq!x#h#6TV` z9CfF9hoaSX1+HiXX$rZ$FasbL+**?^DXcuzt7H=4j8a8pOaYn{s2Fxk&N7O3YV?{m z93WP?WoM%UhQ%&2LU%2gPJ4**nGhQVKxWI*D2*F>&zV=SveMAwd~*}9-|-2NUa4oA zR_EssXT(Kt45~)8p-e!@uRVX->8?v8;W$|yBQpG!yi1#vW4JNmsxHEbD&R@f1mZaL znx=|{poV4rqF&LqDFngP!DcFUhsJoddRuhk6S+4EOD}`-&sn56fGbLPQW9I6GtUF3 zRX&pj6XoeeK`uJL{_1&Ai)x_CaYL#x{-%T`k9en7mAn>9-W@rCdbw6I?VE-vt7~%d zA~X0@fYX@1pz06}0VNI?)g{1udA5Mz$%zE;(Cwoww6<+WEvS{*vuafI%#VV@PX2h4 z-xS}Z&T4VQTb4NXqUalIS-GpQgnHruCcmjus!4nnz4OS6P?;l42tY8GB`6RsGMgEU zSjGjIvVQbasm|DR1e40#?J!d`Kvs^4S$|dvId?**3%f?)Ci~Tgu5Zt2FF{&{E;wGs zx8ijmJ7oJ%(;(u!E4chB7O||%O;RC7bdH~d0G39Ht3U^ZiIo3KEo>51G>?0f8!7o_ zKDpY*l)BDOU<i%?u!uGe zG;KCn!O?>o1marwOXUsgcX-NopK8u1*6MGz6UN`nci09bm%=xK=u()eN1-r9Fii*6 zrVL<$Md)Xdf|;yL zRALPZlZ?><#|34;!xK^2D#C*`+#FmZ?wr%A-~4QHB9R#3rPN=#Z6UCn)+HM0DAm_q zC+lRpUA&$=AxS8%xSng_(Q8LrnhD~IG>htXha$ErCZE($$}B_Xm3=laQ$JSSP!^+9 z7cfyAb>vSz$sI-$G+RtB5scQsLaZ$!Ib|Ge>QW*^uA<}BBCfm>%x$kzji%d|Z6E$D zGjgsEc_!qzKYsFS4RcUGc4wLdEC>IOaURLJvyd=Nl-JG;A{ajzZfDLHO(=T|DNuqg zRUHZ=i=7}esW=d5{A6{Uq=Z|$qCu*m+!UI?Z}K=rL;tB!YqI)ks4&5@-V?zJM416V zD31?7M|A+u?vdM%ziGud=Dl=hkX<94_Zl<;fL!2V&U(05wfp$VDERcQk*{`VeG;iq zY-Y37c%)NfBH_*^dA!^|qcu_ivCs13GHTV6(o)MiEj&M~OIR9z6V(F((CZP9k-V;u z<>ve$v|Is7e60UuvR5eY>oAbh62B_O1Zu!v(1|uv>k2g7Fo?+~Yf@8dM|nsG953>` z1hb$=UJ><>~1JLjGBzCus|g;V~n@7+N1TDqa$Y(ofhr@RPq>?<wSX2psK0z${cEXnXDnNpOC=*ccJh?aIQnaYjCQ_hoM8VD(`y|H5VH}i3E1tqe3DY zv@RiH^`Y=UlCu<2qRsqcy?(f)rZCbHkxUay9-iWN##6F7IkM7!<^hF=ci2`MN3enY z2>>CLVbgL)CqEJ{v+r@m!?ZQ#>sC=Mko@661TI-MZ3jLmc@sE+8e;rpuJ@pKRk(wa z$A@i-W<-auW6_0|MUCh=^Cfp~W{f9)j^WFS!iLjUktKCJwF9fYJ9)PD3auWX&&i}X z!>cX6;Ls*DCA0{@C`p>(w`xeu9vM@Ke6-$mBP&!n)Hy0@q4P=w{K@%gtY*VG9Nht0 zFfdkGWyMO!X2a8dAZMmd6fznVX#+1b@!-pvgcR}%yigs(@QfZnOFP+TZi5!DUU`b42A}<@srB2#(mW* zOd#eI69BZLbr~k2Sk)@899G6p0aX3RVorSY$M`DG9`9qr|T$Nr3!HvV5oDLqG%_&Ng zgHT;1vX$9N!r+y!IKbzA3}Bl4CK^~BO=u{MM?eAoa1}KxVzVNg>6z@5FDH3|(8J2N ziM*~V6!XC%x}RaZYgA&*Y} z<;`$Q)CGlgM|@fSnZ}dE#bgNDvt8B{DaX8{R(lwV2*3!u4I6}dDtK%mXUaCeI5O73_+H?aAUw96A7cwaoM+SJ4_lb4( z>^bsrJCJ_K6+Ia!wNF9>zN%X%ZNmiDbfn08s4r#VHa|d8WCl+nI*eG#jiuQfv%XJ& zBwgbo<1{Zt#ma^y?gK&yolqR5x0_0)E$_zRQm<)dWqFa}Lk*l|vG z&lF12x$V3Z2sp*nl+;PBT(Mh$a}?)-DOK1kxh6tV-dl4PzjW6ruaxvgte{+D#D1Yg z@6Wg-F6dpHJtXw#5_!C62pSbysvppMe%Apr8?u&XEka!oB2BEcQ_$iow2T3;-65TL zW)zcUSg9oR2=@80MoKy$O=pJTz$d_us&z49@@&BXj>854!rk=Od8UYPwR>Z16SLDJ zhyjzps~13`sH48_((pcKDR)&5oZ{MUa~_ixe?Ga|=H1yY5>l8mh*SQS%o3u4da#Vr z$l(bl>1xEZ!&B%K8{~VI9aAUrzgmmi!3Z@N%;Yy^YOor)G)^b+ria?p#zWr>_jDv`n=WWXBHA>i2olcr?`jXEO~@<~1wFRl+8Npi1<$WAS@8A-l0 zX>zr4rUswLkl|?_CJ}sMMBp}JJ_u68f=Wz+gD?+ z>^EioCiB^q)sX;Wx@%FfB%hQx0 z{3PmK2A8HAd{5>=ZLcsCiIoF-^`X${Gg;;M$v{Gguijx;2pNY8yGcGokV3dbfvI|= z*5rNK1`;@BPQ-!BUSv*LSwSP}+_pK<)w427cv38-s6ZP?sri&Bjyi8>Sa`2CzSPs3 zq*Ow?g)Kp)yTgMaDd3c_F+MtYVA->P!3$|}pAM7oR=wP`=}qb+661%b($ma?8nFFp zzL|Vd@s}eC=?{#CFf`W)6Gm{Nn60oJOba+;QVNKDa#|}KL_~y~hPft+RC>}J8iaiQ zJ-hL(7$Qh*vYenm1vV3cwr6QAdoV6sj;s;rw0_9r2Csv>Yv>}-macKuo0Y^^zUnAh zB_UspFVZt0wZlUeJYI|YwD*9b4pMMR@H6I*Up5{G1mxIoU;`n>Pm)-%RB2jQV4If| zTO)5#gWHkF8=`EL?<|5t$vFq2Cp9B+7NXl*W>Y}lWi<{0&%~3Q>;$i+qeY~b{2HH2 z_~rdtoYYt@x${eB?QA50aHLC28d6L>^|+bRgtpS+S~qD(VJjXNv*HlK;3^^$SeQc<&M|qmQa8Dxe+gnR zOGy8d<)G+KJ?++k92v=?%GYT6qZaX>mp0^aQ7JK%3mPw+AFf`dl1VQhEl?+Y6-lCW zck;-h_r*YPqDuior4cvfyqTYVUz&j)QmIcWIioWel86Nm8QF@LL!?<7RmR)PIM>FQ z&l(p2I;8k28DK?7LM{(3y}saZi4n4zLYsM(Gueb z?_pBwLJ7cX;a-#`bRRlw3w>AbQ+_4%rhh z4qrbB-DUJdj=DcIf$015@>GqgGLj02fM5kgaO92miDg%#(a4<(Kge!`rPI#TI4CNn zmQs^4))@BjlhDVeHM_LXY@h{EyE+BW&i+u$$$X{YagOU3{j%=$S_~m0Z@}X25tpQ zg-jBhiGUW0&mtAa-?UDhf3$x9%&-ely6n@jN}*srv;70rIGsG(Wsd-ZUO5QK&SY|* zd&~+@1)XiJHmVC_b}Y)eEI2|MZ`CsdBqBPS_5wFhc@V4WRWMs**LLy#_K*LEz6<=l zLk1EmPKeowvTcE;ua%_I4^VD9=qGm)4kEO9V3Jp>OZ>)a1Gse7k`Y)t`HjxbIm{B} zfNo_ItLh}F4>9^ha=`O7xe_To_sM=*1A!W0+4G$e@=|K3radV1>nta@{%rPE zJRJm~d|8C7X0@5U9z+3%URjeI6g%;3!8(7|mvcP{bn^dXD~<7%J-}npnvu`yB^j75 z4z~fcn_RdP3zM(x67Ybz1a4H1_7&A<9F3hl?Q#kjp3L zquQ1<&g`oEl#KzRY+cy+nmnpFL3%Epx=rb@=yu0v3kK78As^1Yf^!_L4xN|XB0!qB z^(8@$8=no*XhsbVgbIzY3|TCtZLEO}>yWNtMrO@ObMkDpvD#oNbd*gM2H5UZ`H&V6 zCm^p1omqC#WZS?emV*_fCS`}%AT7N^)xO+!NUpnq ze4qVHEWZUkOJ?Q0QeI)4L97xsW~fd=t#FG48|`hq{<9$nnpJVe^f`_SX-JNYh$#U= zB(-O8HgVsxUVX`tD6SnQ>PuamGY-+HNS3bxy0Q*M%VK<=O+HSGD+y8SdKb&2R?2Pg zSfVX{`tsUYQheUPF2`Yxqsz4fk%|o@xP>960ZY%2|kP5#lK%Pse5n*f>dlS3#2y9iVH)i=^!E z5<%bt>+qV8^D;bX1E_*9hzihjFIpno4sqT&0k@=mu+zu)xlZ7wBG4rO$hF8NdWJus zwoq5(bk30Ku-B3mD zLn{jr*0dthn9au%1S1;K3u&;JVz>^9`a?l_<#|Ko3pT8K$(tw$;;l~A46O$2;y#-(Uqk;c+<{Nz&+omPN0S`{N5 zRoWUx)ubJIRjF)%wlZ$I;*IA9b;~5U0y%`JZK&f4g^mdD8~$6WJ9(c#QpY9yi%F|M z1UFW2sI4WVi4IlqEH)INJ&-GLzps ziU4?yKZUIr@xz z0K9$9r$_-IO@v4(Vl4TlP0vP>sd`~D`U3!8MAJw+M>v=e4$q5!JC>$GB&=wp&=?H;9B_gJBWBf{Z;ROSKk@(`gh}x)}SsyOe8A*4P4+{)yIUUt8cR;_Kraz6QU{X6&HdmWT z(lAl!$SDBD0+OGcvPA8yK#JC1NGtNh~fOokSB=1#m?^ zz@iShVNc3|h=pt+w50^nl@l^do~`#F?-M2)A<{r>T^Lra6q(rv0t}4ixzC;u?y<&j zS*p~>(V{&o0%4iL&`d1Lnoe!jB1P%$M=6X%g_@h9sd_Hba2Tac(-9@WjPH{voY*gO zb2s(!1I?8ygb11WIp>I0<>OB#PpI37=s*m*tuz_L^fn1BB}6r2Y9VF@K$XEGYoUh} z0GStyXpRcvJF764ApnJtJXw8|6-s+tJ~0{LU>O3`x0ZKwl)WPrz%4zStpv&f&xrQD zASbKGP?68c_?yTw zkeKNvMQTqiOC??h0QD;IgOxGc*{UPS z3k(?Q4&ow^bC7wd^=SEnMqW5wXCui7)^XmV5wJd~WNxqYn2>*GjCD(QYq!i+0%Lf$ z0<{Jm$b?j5%wS!srzUt)R(aA!Bu&;(gI@y%Gr@P3iOaMKf+hZ-geKj#%bM*KG=%g- zr-vmN#ef5Je}a$y$T&ejR+H5=z7_2-aI>JgE?hsD($j12f2vtwzI)-v`u0>_Y>PW)f)**4TAVQ&xJ)Jy15~`Vy*&g@<|80 zGf*%QZMl*tUg;G}Gc__uSL|wWMT8lz7WggQ493uwg1Ui<+n9vqSaJC^rw{oi_-Onj z-?n%xjFLs}U;$mQQP*HlY#`&x*CHAJ_(_K+L{H_(#Dp5%D)N&=mdm1*Wh){{X=XLA zZx1yKwKcfXKq3vMP!=blBfF`kpmocB62S<`$mR)yWQY2FB}7Q5^;BhNdx4eEDWL%107Z4Cz~Qy)`t$(9}E(!A`-?t=;ndSvr9H+ z&z9_6I*9_q!q~->t3Zp?28vlAAWWD-O^!4EX3lFZ0h+&xGlfpGl!?mqkkQk41OR$j z_V`HzRuUNU4~jBuYiD4zYJwY1>=yge^Sy9c(E7_z1lC$XMMocc_osM13=cn5ZJ5@5%X0t7gjOi5Ks zo#92z^q*B!QXnaJ3Q&+8n8t1|qB(Lk4bTE+z%t&aV2LTF)1NnQ&)$9b{^t7aH_b;pd3SeyJAS3=yEhHT(dQzo)+}qVaiU3l40!OI zKnMmtNp~DAA_SPpqt%2gqZeIqnPem?HEys%7TS5TEL8?BTm`M-hKd!>V*WjUwp#=- zs$2aUGbhJ9aDX9@9=VBLy)YTbA8;h@R|tU&!|x}@W33y_Xd%K^6axFT9nc7=t{ujH zJUiCJn&T592UQ_@(2Ow&W0;fjZ0PhBDbQkc9WC6m$#2He0XIp$gu=?whDbXd!-h$N z0sU|tDv|Lw>qHZR8NOL#Y8YvNTjxDTIm~O!7@(#^1C*(W{P$X0lk+5?Du!6ub9hW(V{^+A>Qe#p@J3VN;8A6y2-wq^gK6 z3H%sOW>HKI9JM)CKW{-TOz1EX5dbAmtIfY@HS+HA#PMo*oU*(Szv&=DK!D3QMtfL| zLFvH0ioA^%#P~@KJwgob12LXWHDVWYCaHIV0fb1ep$Xbh$4?5m`V<&=h%Mf|O9b_6 zl$GK&UQL{{qGhM!C-rk!J{lTp{gjqrYFwNP5YA1U=eDidbMB0v#LGbf^*iYq&hE>} z<8&tFpxCNu59I_VnE|`mmghgvsA1J8PAqR(4lIx#{^zog4Y+e^?p=o_l+Y{iV&y5O zkvq4*6hJ^JtOCy2!MErTW`4W=RFFv$DlYbPK zc270EATI$^wYpa^*22*Sf%GyE5jmzDnKj&zR1+8^XQDGoghrQ6l0n%AWw4llNL3<} z<;G8~Rv3JsWZI5yTD=4Xte~BYCP? zw9GkC6(jHtxl9Vw@oJ3)b(o?I(i|!A9;=ycI42_YXVdPK)IK>$1(UZjGUV?M9`H~= z;7M~cMJ6(}W0_Ba5+|Re9^pbmr39Cgui8{8AK_>jG65fGE46&jq8>d-dTg;h&VpHo zv%8EyN=INwc&zn`RmlW)EJaCG*A6G(LmI)jkL68L1 zA>U_3m$OrOQq#TlOtUdbKP7Go=*Gb{7>kut9_B_cWbi=fkKV8mby1JMsl`P;A!q^3 zQwwn0lRXmI8N*?-%g?nlsVc@#W}Pp6BF^+Yn|3D>>e#Z=+wOLoc%=Vfl9i~AR5!K- zGQQJ6`J`Oe%VURH_&7MRRiZxrW{y}ku$XBp+tDxrAW(fHb)JiEax!@G6bv!Q%Bn!q27 znxma(^x%@Q0@^pUKS*no313ZCpTEK}3}52hlEF!}0nc4JbX2|F!7WP^Vy47Y03_vVn`H=#XFx&(Qb)_7XUK5?=-RK0ObFy(M(kylg z9tib#`}qX60X33&!H&xg4Ed|ik@I>_*{6Fa<0l(Un{|Yv0pXmGi%_|)Xpkl|lkAKN z=99Ww_X6HnMaAI8D|V$~8p*b^1K*K*91z{x9)FYfipB4D#8Rz>N)GUClf+8{B%e?S zY}Bmu5zVx{weBNT!6OA>IzZ_beyq{L4xuUggA>DY`WXp%#!QTMf^H>ej<`lOs^}%n zlckjd47k>Eatwm$2_S0Ww~r~^^xZcnrZRiHPj4UeB9Lg65s>s$WcM4NBblIG_huB_ zGw~zT$?DO&EEB^YvRy+q5)%Z0)XMKsX)~YUn4P}@7{o#0s+mSG%2iMelLk^5Vmv1u z|KzPWYb^9cDS9s@A7Ts&&dDsrmauoMGcTCQCYzXvuhOHOu2v(3zl$Z2mPy;NbG{gZ zFzWD4MymqBNNsuWf@S$$_gvf5(#32A?DzBye<6s$jdJ@BYfF&rT`L)JDZym) zs6?6d+bwjXQr$Ljuv*%DxcyI1VSq2^CwZdCFs>mtlX%o4&|>P(c7P;5#{?7- zQ984f1%@E_tGYD`c~%siejQ*eCd66j3<_DAwbIasv2~K#`0fsIB(P{As{$X%lYv_$ zlC!88OTb35R$i3#4HXG#5HM>-~#5#E@2Af4Y!Ujv!M(@lzfz_o;4O-?aO@9m{P$dFBFPH_e> zsCO2?H94p(XkibmOGn7RFyTa<i1 zzq2A#+;$`5Z-&;ZZmrpjepOmBYp0U9BxjM}mq}=_o$M9uR`##_%PSGVp!`;wv{#$H znl1Y>&&+W({wCnvFz5zhtJc&r)T|CfNR=8Yhbj#TrG=B<3^0>x5D{qe!~NM|%>m37 z)&J9X79Hvo9)A-h)Fcg1u`mF;u3n;667SopmO{-N{3<4&tV4~QL?pLs!1mb_LHW-B zHY(h(SmpIhFVy%gT2oL_V{w-8fN0ayI)pb_K>&@KlrsKi9Ts^km4_<936goYd6|{N za1+`QU?f@E_(>Im(iyO%h|H%qHV=uYBi%n>Q?wzehGsCH6s7@nP(MH(pr1D*fumwd z?*e#a>8`Z%C(o9+2qp^Rv|JSy9+9ja2vG0mQ@n!)ig<%b0i^!1)>VbsUXi0afUOMm zJGMjh=#C8(_b6ufNpqzeFwuXQtc53+O2YkwRFcM}X+4O~@smIs9A3D!)oEX5Zoy2( z%BoCcX#+2_z2Z7 zj!nWLW#A+=eo|Kx#VY=v5+OSuxR#x)*0YwZXSgge<&@?^lT!=TSzO~61BafsZUI$0 zs=sE*Q2tqvFGGM2I0tjwVidwiL;6Q)kd81x1}F;tKVB`i8iK);NCz#R2S)Dr^`MCB zEIX%|V_$#CB%JtSyNJli0V^KmsQ_1W8N^+Fv*t1k$c)3N_b<{LgxeVR0n~@dp1IXuCc_KU2tDA`lsu#OB>wg7UV!tKc1kKzM@ZYv>%!i!W zZ9|zCDtZ!#5|Db3y0g7vM!*1if2H9hky^4;ZD#3wn*wJRey6{pBYFXy_C*7 zRnQ6~B2J|=my_f~p(pi{Jc+e6v(dKMYLYe`p6D>DJw8FOuJJx8@45X!p<$OeK|a26 zHMIr;&*JO(czO)r^8aIYMa^Kwkb3K zZ|EwtPGzVnqXI{NIr*f+4yX=Pquh|*kVndE$u`JgiT7P99T;D@$@|n}1e~RSarzbp zY>nnuCbtyXDPZOFlJm)Lf(861`Bx)GlJ#Z*QBo$A%Q|%r|DiAA1Cs?vj$Lfl{kxJHS zq9rEDA>IxQNz5ojn64*}81IuQIvKn707&zsyhU$@E`_3iHYy1@f`P7K{3KjgW=da6 zpG4{50ohu5LFrNy+`cJyQ5%2!Bq@SmLI>lCWL_u@cZd2Xk)u%9h@rv+Yfvf@2?0a|+ECp<<4uD>h}rpKaFlX*C92tdZ)wEw&` z-6kxV90uIa5g3XiFBpTYinTI;l9N*q=H>@gkWD9LhamX}qo5@~BI9uW>~yTO`iR!Lo*-geCARjp|qwwJ0T@b%eU6s?WhPhA!e&ssl2v{Jk7tB87^8I&12O zy9~4Os%uAsgrHcLaSD)qi5qE(T9laEY?PDVetLQG^FN>eE(!eho0qdp&`2OB2GN8N zBu7UypsW0BS+NOafUai*Y9sWgK4d0+112@kkHUg2OnUjOXH^k((MjgKPxyvPWBg5h z6}VV9-hoZMbTf0_j8Hs=Nx^2(Kc%>s7rX;Qjn?wjxv1!*e*ANIz}<+`O55DcKFj1X?Qe6WEgcPL(Dl*9e_;r}G7H zf*^XkNGJclAAb7r+wV@E{116rfX)v$r|qv=IZp#%Z=ars+PYyuk z5eRch2`Ni)M?pE{?P|it-*TKezwe#Yy&Dr*~jQ0iuQ9Fi6(EK}}q$bj2l{#ew z#s*3es{#5sEbAxFmw#Aa=y%ueKJ25_x}RLj^XvB_+xOQu|8{-5zWyJ6vh~+^a{EZU zyScf(+27ra7^JeS*W1Bd_biylp}bVwpgaLxaR_^pX^gjoR7sd^sjKFl8jefF9I%cz zine@pJMe>f`Xej#?)v?k{bdLq{^-r->iAE(?|+`1y?=Llb@t)s)4zVXzS~^gU7o)A z?#=sKk>cg$|5=0gD&l_fd@qMwW!!!K#ScI2p4Qdv`?s4LujtCg_>arGKfZr+`ucXf z3FovV*2xs>Pg&TkGAU9RI|S1GE9g~LtA70V+uc(8&H-{a+1BlO-6#@z*{E2&v0>h&5H}qFPC>`e~cIAjFxoeZmfADWSvK`Bm}m~%?(W8f5hpnclr9l zf4{ofyuR#VEzA8M*LRl}muKtT?d`H6fB)_J<+7%izq6iu{mX4A-<-Yp({n$H;LAUc z*N2;OBhqZ=F~(WyLl-OCS7Dhx#V3L6mv{3%P9IL?2SdNYkUuN>J=1^arVXD9hO|Ux z`+3kG?<)n<q2aO`!Bes~Nx+J|)Zww8k zqjDR(BJER_<)xwDGHVcZ-mI?)x-QGm+5iDpACZE3N6KypzBcWelIu#JiK}b}50{W1 zPiMeiFe?(;!K2>;8AJChw?T3pg}o)3w;&%#(EOGfq+?gM>;wh=IzfY)n)0MCM~fpo z<81lL=Qo#sZf?ZKf8X5PPKVLEZs;wv1mu)`iiSM<3^PV#0q1D%#+R?#ciAxy27IYU zOuj?1N|JxFwkxnDu?4DBPSBf${!SPeO9}NM@2aCH=2{_RMR*2HOOIR%Y*9KE1g+d3$9MvXZxK$Ap~mJZ`@b^~P==wMTb?Ow#)`X%*wLNi`1L1Jc>>r~0?m145 z9{be~pwC%ysm18Ju$zkM$UdKh>j0{H@sDU>l7q|7Gi z0>)1&u?U5l?Tal^%iV`Z%2w`lwicchT4+I605O&-i z3|&am%e3lIbJp?(HPI?hmkXSoiB(lP_0yBwlNmT(!7^$5;Bq+v>ub=C1;v^i{M?iR zgCNvEe~b{s3d-idKW8nUEXy518YeLvX0ET^PkGzWU2Pv!@KpOQw~lb=0NPsL*!UQU z0`q4P^0<}h5YwzgH{yM&{PmhuFK1k}MyqvqKEJ$eGgo1*wdP^FZg>0h&AZLj`R3~E za&vp~=la=3qpXWyzpS5cUcG<){QB;f8+DvZlXV<|$PC4YdS+rsu8F(^Nz(FwWY`)J zF)myp8FTgBc$+x2rBe(GKyHWIQS|D{V{fQ)1NN_ZiEd;zjS)`{kg-d&dU+_I+~m#; z4(Aq%34n(w>qUl>AAkE|$rKsa(`GvZ|F*aJ8=*CucH zq@XMZ&ey7PTQq!kdiKZWs9;#%#&UwlXMel7d^`RQj~PX)^00ZE8KP<`P+?-!Y1Ar@ zlMG=~#!o`;<=ynpP!d)l@(0mEB?^VeBy8!$}iNob4quIOejfHhv+i^(6T@}u$W z3J1I(vc`wa+h1jqt}}| z$?d&L?e>qi=XW315Xa$od@|Ly&3LmC>b#{Jpi*(VV_Q?egiq=4d@_47B8gnm0nCrY zlA=k=*pfclD#k16-$826COmm>v<$krFkO%!3(wmSE-8G(BG8KyD5H|`YEQL7XlR9` zLuL}936X+JnpS^8y(aTXA31)KQ@M)F22`fq!e5*aE&)kCGyrf2dP0+yhOv|JZxYIBD*T} zyX*G?$jQm8+uLnEGLg`9_QQW_K4Qe$G(s)rB>GvqaAX5uM`p|@K$;(&L&|J9BJD|% zwOYOtPuRjvKLRgL|FdO%y}!S{hLud#5_(4uEVbG$ zCB5CeJ^62F$bN^+%72(XK8Cu`h)%j%Ffx||z-6No?NdY|mApiHTw-kU@k!yoxTjVk z5m`br?&i8B^1L{uQ${~;Uw4u4+Yf8)Ier@!%OP317x#^8^&lZ7NDv%94}lyOvt=1S zDTzbWswpfvKPvXshM}Iqhv8vu_^@`|k8zklT+}7uU|mLjnEUA5y^c7k{1oaeDQ7vkgP*-!*Gs^XO(X!|~R?w=Z+X z+cOs2j_L_eg`fxU1XXA1OC4sPVUOfWxZz1+5wk@5&uX9EgH;b}u4PIfKT4Uk=!bbA zbeiPFd;vlAnW}N~);p${z%n%#=P|xXK@oFGmpWdpl})Bm4~OHBa2DIIxiJwIBL_vM z;Hj=+Ue}@swAul!<5zXwpxe7x94GMIW+!&TIO|g`w53Rc4KH667PerG55PQ36#}hIy$Ze1D3Sg{#`HmMY!2NPTx*KDu1J6zQ zQWZnZnqDT%!!q;NWK+ZBX=Z6c^_HWEY=#&C;jLwkYrh+2q07O-`pC|6#vt0-RR)5f zoBZwNirRT(tW6hbs<^rl!D1*& zN>W{eU_4F#+fW^+v*f>za4VauKR>ycfC@1jz1hnG#Ii>FVp28>wvG_}kM&6C@_`k~{Rp+4epJSZ4Uv&EAucTrSu?pr zWRty(>umC#(@GR1)dG0Z@mjt|&u2?F9g!OADem>=)7Ybu3G0$aN&7kX=e=%}`m^Dgj7l(5$rgbV<$uC8|RE(Z${7 z%{^>?_^PTiup<4PrGY7@m$6c0EwzF=amiEC(k!#i{yIImxI`vG`;XV%{+fS(_vZTa z{DBut`c&dTvC*(0Tqy~AjfCP&v(KnUVU+|}M;qp&4LUwnvMpLe%E>0QS?PpW`S&=@ zKn(IhpeG!|tkf>iiVhsAp8M^3_a}DIiWVthKFToPUB0__n_#u8^UHg&WPF;MU^NZa z|Bozt1vR4hhvI0(Mi}Dsa5+>c>+aYyBEQ_2cXYP7`PDVtTz!v}og8hMh5;TaN~KQ_ zH(m;&w1kiy6q^{L)+C%W+cO9$GCu=E2|yq{L#Pb#ls3c-A;jQ$4cYaudd0Ytzm5{q zZOHuLCkWv^LT|Wv+s}LS)q&pnwLJ(aDx3tB3i#&$OG{>hj_)xQKX?t)K*kU0!(rOD zNnf3-i9$I1%6KN{2rWg1XsMqC0Bi)+nXbzaA`UWwa~)I`^Z1*5YKT9G!gI~j64)W@ zs>Ss>Tyd-pVOi~j&~V7sSnjP#fBAvibjm*7Y-xMIo3tn-9GYF;-7RV7iM4h6ZgUpl zv)?zfeBW_zSV@YO#QknvS_Lp&9GVhs6#>IbFB|5V1N=sV^PihWY2XgOjaDCS62Sw=Wt<&QO9EnmGJ2`}j${Xa5Qa@VNbj2l<(F{g6MU z32=;uCC!D#Ezp!WK$`|F0mracdGxQ#`)5+uv7l`dr(OCn>QyE?xayaFF{xw6mAy}z z+ZY2H|0Wwo;ZW(0p9B*yyv&44P6s5Q8m*rO^bTGp595n#XK!hhm3)oo`gL=5eRJNC zYy&+&z1F4;+AIax=roy1K3A*6td6ijb@DnN8l9*F0Q68LkoUtubZ2tJ zBn4K?kGDhV0iW=f5ZQ)&L8~>P={8KPlbwv1CNY|k6;@cv#GJ=b5(+M8Ce2nJ)P-wJ zGvuoYXop}gW%7ROGN-R>-Krcn>UBA1t}WV);J>owkCyJwr&p)1H|PI;I#CxX0_A&D zC1&&~fQVQeAvGenA7*?;Q>e73?jjC;b``o$F5)O_pU&ey$b!vXyYeZ0lxObXHGR&Sh&MwY|SJYOZPjy4g=KRCkjH2h2gO zh;vv&DVhuusmy+XT2wW!HHsLoQHtZWIy&)DT8eG!YBcz)-uk=^^RQZGrW0XAyvbxKFjW?><`vkTstyih)^SHcMCoKB zz&IPxjE=|F@u7oQ?g+HcL0h z`^-x=#uqiJ(?&Xgc*`W;n#-jte*|5oTa&{rwXlTQlF?;Zt$!$_>?nu5mgwkTuSD-h z+)%Kcki23cx0}tsj*r7(%Pt*=4f|LXA`ZTzRtm&c!+@qzPv*?v|aK^!=oYA_Rep$ykqOEa9n#=GBed#G`I=hX3X zIX`(SCgo9|QM_AIP#Mr$(^(La!0njQnjPERuL-b5}h(qZ0v8XBs0+q%&(b`&L5Svre)0_+JzMXa%tTRN+UM6>Y(MZ zt|u#H-gxT2ynLzF11lsWn zu+7_(GO6>wMgK9YA`fcYO6NM^y&Gfzc0quH@uUO9MK$BDkFuQpho9C^GQLo`KNl&< zCL@h3+%!k30EtRjA8B}T_?y`Qv>QL^4Pv-8+h%T@9k|hvxFY;4G#;n~HL*68*u&eQ z>8GNU3}{cORYUu`6%bHOdmlhvZ!Q(ja{VKS^4s;YJk|$x^Wo#ib(}QzZlc47OMr&T zeXvYGLtT9QD4-DXZKNQi8w^2j907ZD2`{eBA4GAGkitt&(|~SL@((-i@>D$fSljrNU?sE6R|EJ5hm+|ti`conwQlGoavlEF{17vIv7&IduC7ie> zAK{FBk(FM`W3h34;j6lPbLMvl2mfYyzG48K!;yiS86wf|I#pwmkp0L5az?)dyLfbQ zN&5L|h&r>DgoO@{FG+K9>k>?Ccc>O|3E_Pt?o5##g(OX{y@-finxhvYEg@N_$Qu>78a1HpS{?XTDxpFUX3Zp;E25gov8YBgexqHT z`POP6V9iY?)`JWu`#}c9ZU(o(N(8%OciK=|E#(@dDN^O8lyQFLEThf7ROLH?=MDPjy}V765yU>9P!mMw7o#(wZ#D zHEmQT{jc@JYQe1whH_}p(FIwr+JHc?V9 ze3bvjrb=W}{d&aYi!;L%hlczNd|ERlauOS?b-+r}x~18t?qB_CGe3q4n7YuC4AgH) ziyZtmSc)xxT0H~IS{?v zO+oBkt?&KE+ckz=UcDY4l=TLyw^OCm4W_0E1p%tr@(7e=h|tc{FOJSW?|zMDMVUtz z0GQi*z{_ySgpkYjsZlT|Bq?~kL<$C7Pxu>NsTC8GrJf%&CQ~X$mjL*y0|XpssS7Tc z3{q07XxCx8{a^CxwX9Zz-4?dL*cJ9I$tgUY7EXO_vtT}n#{tymggRIbnj zrKaH~HoO4uh2sIoc=(k|Xef@$oP3f#$cZ7jhdT)NNTn)u(V43l9lh|Kcxi@=;6ezp z;KT?yJ5R3QO)fp*x?&NuIAet%57gJ2yLa~$8HeR(L2u8{i1_iw8e4!glZAMq!oI}D zA+3}ERw4|Y&{9-0NgiE!V0v5XuWR$Nz z{Iq-XD?~V6p{8`@tuYUbiPgFW>1dsZ@#0123yBY!`uFuD3{k$o5dk`!yQTBaYfeKrNQ9%=JuC3Inp0LA1@L`EB&v1SXj_2MKDFl3;~X>$&%37M_n_? zi}a0zZUe7vO(%$FM&fRci8vrjG&@OagI@9FsV(9{uXK5r%S&Ez^D$>%50qi+AjP4A z`a!K=*`rmRz651mea}m?{ z1}$^rC)Kc^i^XUUV*vso<&K6=`Lu?P^A*zc_ zk5PuTwW|5puuzFP_2?(*67o85Opq~e8%_2_(B!Qjio@|vR9N^RJy+rZ`o>ay1!aXK z2~qSoXhzL3+%zEH|M>j;^6k^_9>4gn|N5`-i=JxxRur1-$1g>84`a&V0K1g842($y zm9@~L*H`a@-B)=!v3@fBcksmSfA zAfG6+RIpl%$dg>6jyFjcLxU#wu+EwNrdd3yURAi^nO<}phGNTdLPCd_Y0+|Y%~B7f zm5Q8BB`Y07f6S#cCks536p&6M0`Pp2O>&|kbtHjCNSK}#!{6E$cF2&lqFNAmsmE(B zz2tUBbi^SV{&=PMsFmw(bI`{RFA~8fG>fJZRP`~FK!U|Gk~j~`tTW~rIpXrY`-68! zYto_KLeE!TvjDQHvFxC=5ZcjXZ}s~Ab$WMqb7J$|eK=xYca0Ap#qA>!eqURyyOZ+y z`sVWP!>`G`#wCyRN56Y&CTRF?9-T5B-4CR!Nd=_C+I6abB#ho7h}>@#J1v#1%Neov#BJ*uPRHqUhCFwk;Ps*qhZ9TlsE-NRVkhAY|Qn=7}pdra%Pn#W+z|;rkv3%(gV`Z`9nRURK#s{Nzq-9lYa6ltqa=4LjfzarlX4pB-2txB37}#3b0v3c>)aKB59FW{MQid-L;nZ(vijm-)x> zqGWs~lyD_h@Tq-?!&rCG8J6o9nV=a0ylXv2QNKe&#q^YveboXcc1*SN+>lt#|)rDzUVm= z3A6YzKcN)~XTdmi;^@F!3dV1oiDp#zk^04mZ^kJ$fkl_!6COtmf3zArzR96JOXZ|7 zfD16BwMES&-r}YFVMe?TV)!li&0w76%YEmtlP0gbYjWzv$MVavOXJl3fo_-jKGr^W>zd14&&Xx${&0Ampcl48RssX9tSLcS zBn|nW=@o16pz;dnxTU9;B>Cwi`Gxh`gIaH>9c4Ob-#q%jV`Owq+T_s|#k7w-A2-(? zUeo;*ZqF{O{n5p1y%YOem;0TZY`oC-cQu}@YWU?l)&oaK(?#N@A4r0&DQSr$O(AI& zIjRvRU{IJ5Scg3mIe+~h<9p2cm@jMh3As#5uR=@kC7rY&!4s(^xq93?S&w^KhF2h5 zIH}-t48oEENA58qMEyYFXqv@6((aj2h*!l3i!CC=uQ3{lLuE!r_TXll<>^f{ym7n@ z)uSU;^%RN0Em}!n28o`uMQOMEIr4W#utA!cq-(WssML#FNvm^{47RRP+WUNv%>2lW zLE>=y%7!~9n}U9D&T6iw)QN0H@!?^pbKOGIOtgM{xm|qsCz361cEuMi&i}SB^|r`@ z$mh75<_gr1QgIywP_(Gwl%@&KvfI(^pqEESV+D3R!L=DkA3k|cX-_m?6JBZU4rs~F zS_+$CrJrH;h}stMcE4mNJbC`<0Z7>)XOE0&0}$~*rHV|{5dDrK1ZZeoqwpACvlDAl7&LXGUu_^{Ue7WU zET&t-Jjl_X$Xiwnf7!YnTfTagH0eV+{q&lU-@tBR?ErA%Y4Dxac1fI0keb@`#8HLm zd)Pg{-qfy* z+wpl|06~=8+@R>7w7R9TY9zSHLj_br2OjP{ev;TfyLA#tQ!<-g(ZuR%a4mP{vjL6J zUQDOPPa6MdG1wlke{G;O03#=)&?&Mk4H{8j!!xWHw7i2N;TuA&k_PYMAqFo9pbZK1 zBOl?LT90vslkRD6bg+zS)$M7qn^San4BOk^ zA?FWu8zUaIP(X{3DC$9&u_{#mgA&VQ=D8a^jz?X{uy>g0eL$GW2x$?`mh);FG1@c? z&4qNvS}e?07A>p;h&U&{rAAp!*i!A*^-+u)7P3-a!IVT%-Dv`kF!QxqQ=s4sg?xuY z0KW}$QtX|7~35AHL@r9eCZ^`-#)-zbQUI$9kDaupxE4qYOXPlBnr1z}_K z<>kPpLzDbN{$`catw@&O64UhN zv;3$@+Y}(dL(ac?a3ChAPD8&?F&Up_oi{V*Clk{I=eUf*(~V5I?SUZft?%k8{WOjG z+xk;%JDA?z{_(>vzdt9AJiGh#`On|{2bf`YY@uloLa&fOrhK{?*^V+&ee8NIt;GUB z5;)0}YSN=cK+ot4ks`|VnCr>3c#EO4NJjPQI7h}6sB|>hO%m4RiNym7x2kyxKIm#N zjqK>ylumw=DntgQwT|F0_f8v{@xEh*NDIxRCB*`gnP zK*}y3vPrB|aGu-~G72YeI5MdVjFdRjMm5Z7yu&7qV5u_uV`=E9Ht2*nP-i2l2~s+4 zn#IOZ)n77jzj8e;aLzYxw9)KuXBJJ76mp@%Jcc?dg;_#ByM36Y-=V#wyrBh zov|z$HONBIr37!S9(0UcFkP+{v&MrZ7Zw!HFPjE;`eyaHT;a`e0Rxyor<8+8cxL4> zWh61!56A{XLIPD-zYc%x%BSZawIcbWk0bN2we)^tDKHC25y6I4INp`4x4C_ynJNQERB`u}0%3vu36Cm8sZTXl{~W5Grg&@k7d- ztB68mmZymIPC%*`DjEABK|y0rf~(VUh@vPH`vowQ(s~QY3^y&Vp4y4d8HGaq_|6Mw z1?jZ}*}4MV7ll7U>~q!mbd9W62(3;tA)mq$!Rw?sR8TZ>NCl3#H9kz``iOgF11q1e zoTwhRrrF_i3>;+{nh2; z>v3=y<JT%|G@d zJs|KR%R_Zyrn0PX@tIlbZ?L=MsL*T>KOBn+1J!M1PO3dp3)3YmZn6t59Ym~Zfm8XA z1}&VqVWecpP{$>XtmU`s_;Fnh>pvg2c5YRP2bsxoSBG}rdl1gB7L#pBUI>G9TM*=V z^R4MRA|d5=7#>`5G}(aq+J!gW}rw$Fa_iY3FtaNu=8@ikL7&elIx=0fiT$X2@+TYL96+kfZ;4}T;_U`8V{XN|M zVp=+E%>|E7kO|;}ke7B;{pw-T)IcEvuI85v*QmT{IFr#&8xETHP`KH~&>Z2CjkiEW zLp$KjHiM!`>LEwsC)p4qx%hbV&=A7gBu9`Nfl<;??jQg!bK;?E$_h#B(YiTEN4Lu( zozzERdRP)%sA+P6DB!?`ml;VF463gj_bk`-xB+=4q3zG;!vSrvts7=%8#%cR`m3d- zg{s4t8ViiZkz@^b0>^=MnwAiCw0ym9#?>Bq2JI{~P71CxglB*J>*V6}@?J;rE}dSB zbNa&rI3Ww!{oC@C9ku)JHrwX|YUaf)H#eez_d>@mYx+c(NMS7eGUrpJ3J_E8)8sBpANr2Jo2|6@jlD$-Ys)~}_ z!pyw3Rg#Kv3M57Y2SZc*g4ioJGF?A{sP*EBi7#Zu0 z8q~q5#@ayFwE0gSMf0-w#;wj5jI4*hc9{^am;!cA2CvG{u#& zfL)yzV111*s$OZ1MrWJdzgrhv+3{pIjjKZmlu`)?f#c5Rl{Kf+JAI49p9D!^EoGd9 z5$#VsI-pVqn62ljDpxrR3Y?G@wO`!wn%wS>pW}D@=VZ;vKXor_I1;*>g`;cF^lZ6d zj$Mrem51tNnA9um3tbAZlvtXmIFSo2NBnQ1DUU7b8eVAf420ivXNfd|whrNpUtIhW zG@y7G>fk&|iS~vC<$0MD@VUukknZ-8M3O~~PHoOgM8dE+gKIw9?1RNUA;<&K;<(}N z#b4ijv=zM7+tu6g6VXEV0tXTO6mHBxQ)X;0t_`5gQ$>!-hh_^s!zc6`{#52#LQC1E z*jB#7mY=Bp$Pw}RYtUZp?uX>)ummey?qv|$Ea>Fq_1o*KHLsnitW~Exkt;h%!u6NP zAd&-NOOy|oQDOo<0bfp5fj!3k$G8L(qF!R2K=Ucl8KOp?Y{2g4CESki4kNVP+n45mf`(O7vFt;A+$=+fW<>woJ*|M>Y&msgw98~)w@ zae00>@jBM1P4CyYEe6u$gd`%u%GWYLaDFk5hv4UoeO>%qNe%r8R_{qB=7SiIv*; zn^=pQrP0B%A_qSpQo9<+*&1TF!1P*;XU^Ah3w!0m0p7d#xb5=vl?e)aL~#qmAUNx+ zxp|qX@A6e!l>Y%sEGgdtk;!)r{McxaEcs?J){&-=fib{|W}Y@oqWOJ;t#fG8Wunu< z)0A4MvsvhB8%A^6q?0F+OAf|F3DYJz2(rx8G3>IJ74qspJ$4bc~RB11gd?0yZuBcVR z)8m0;FoJ@C%smSS+C5A>7>loyceni7-^9JL-ysAve@mL_kYVYkEMX(7JW-~QGeCX8 zQpyQNisL6c=!8bnMKUwJ2LH7vwF&IyG&U$WkG+VPX*#*2-LSf({rD+!sS!_HJG=!fW%EgmX)a;}ie zI8G#evcSy#sEQZkE|;urhQ3PY5{zjLzUxu3tIO6SWVnBsR{ABas5!GeBRo)}8_7wO zlj$Rn!(y6ZV|;W}qKz=NJ-j!Cqi1KIaebgL=k)`2=E*tUKS1BP&1eAqEs}U%&Zck( zkw(Nw0mF{u^EJlr-l4l;2IeT4qQ}F1kqbyZEG`;lAiOqnsUIUVCaa;YqH4^l2pxew5unBuK)BOY zyd49vu85-^^6~ppsB7pV$k2ub;id9T*r*_F$Ac4zdUt_VY@+8+-?vjT0t|R zg=&52ddJ_iCzxnZ3;@H*g|Huen5RACLj93Qf3?Jx>0Xz`QD}cKF~7Hzb^^9#O4j5O zDE8oa3f}@QQ*{OsGD`rwn9cMM-&@n)4BvfTHp4B#$T|(2ti%vt%vh zJR&~FrM8-C{*i%7OMbn&?4@@6JFzoE zPLgbqEa;T0l;-j*h2T~CmN6l;j~X7h4h|7qzOBnJLm%DeO{lih`6|f5WKm>Nju5Az zx7F6(x{&O1;>u64`2@1|4?ze5i~|0U^I{QK;9l_gI$_Jtbl$V=@i5ZbJp+EfV2 z0T6psfo)Mf;26@d)uRgtE&OF4uy1eew3)-9l|1?7$j$HQvAX0V8p45Y;c( zp{5)^2;L||slz~OYB1pVNjw8kft=PFWh#xnYT^qkR0jz#O0EUKh?f78oKJX-5YG{!n1Ok-l z3@sLnE_rC4xny@OspW<3vX6ro*nulLl$OJq;sV3jD0b1ex*i}-9-D$B86Dn89Yu*W zhjkbb1GZjFw9{K3=MJ>8f>Ah8P1RJ{D*GtGxF8Uz{$rvBfS|_o3e2- z(t1gtLPDMsZG0@w9CAF~jn6a>DeRJrXRk|?NaO{>RP5)MHh$8YV@>0`v8@7S9Wc&z z+FGeJKoyeJq?FGoCI5JPc6X1c7#@V|AO5b5z>xLSzEGO{hc#H0hGq)?N-+8SDD>K& zFV0^dW^a6V_ZMk}+^S~C+dJ*{KRsEL_v3{_<=9;3d}>6i{w)Bb;7p7A7y>C@g;O|i zm>1o={X5DC#AqFm(>w9AvB+dV6{xUhVnrP67%DZJJa>?tmoKfhpcr>)+~NQ#Z#4nl z-LsFDJgGv~>eS7C++F|ehpqeHdh+kco%2o25Bm%dpQ8f2yZ-dkCjtUpQCVR6@H3bx ziMONxmMZMCh=5^0$tP=oXfLB`dPiiLlS~pujR4e>0Lhq}ATI_Jj0|twX{7)nLOk1 z!9yFCnV~W@3N!Oafjf@v$#?F(E+HZ0xNFJVO&M~kmAOGMMo%#;g0>6sI zuqis-*+eWIEi!1oi*2vXmhz2{h3ik z8A}(`n^qjNej8#6_rUy4DmGA(x(l;w)*MN=I9_HOLW20Fx1nnLF^nws>@!OkoGTj@`NmI5qx=<) z2HvmPJ<@n$3g!llWdcIdC-E_vLSq`vseL|&Ipcsdanc{E4rJI0A!+Zzo)dmeN;Dv` z_A!mWzCYJ5at7dwg4Q%V&8Zw_+^~FgyjqzILJ3WhafPJJR?5>zIfOt4#5CZW3R(A^ zrh-G z4oUHa>g@^SR)>)Gu;DjtR4oD;N1dVUP$krQ+hDQ_rK)4E5r0C({j~q=Bj2u%1eePJ zG$RIwU$=B6J@q!|EuxL1Lvtg@W?CV-c?X58j?kxL<)C(+ohoi$H<|G)(qw5g(t+Yg zg{H>?CMFpwbthkYbaMXYOWiRegXKYdbUDE5?n*3|E$dgGvXGTtg#|WeVg&<5_UHYsI zrA7IutE+p&(C=|+>T$T z_2(ImNgIB&1eXu;L$@VtYDFS&=Z3sI)WZ%wtm{t{y^iEO@I4-9H>+r*lnRjlZ;NI`Z>o>=BVku`pqx20yrJH@JrSh7~(TH z6^Wv(7biC^3zwt=`8*hKFZ>MLM|)by#tuLAG&-*o%Zt_prV7LJxW z888g+FeIJ4Nk^);IbJ{YH;`0fhyb;jRL0~q-kZ_o(T1v094TI7{D*3Eex0e>I$;BAY>_Qci7HQt$OKs_F2`A*>iSrnS9Dn z0dz=R_m6g+Y>=96&t?50GEG+Xj6%{9wIZX&SlEjVQM7yGq$hLZB)BBymts{Qpp8Qc zBDf{EqJ#|0CY5y1flnBVr!uUDztBD*rA^0%31M=@2=+}77&i@~IT(p9aqVxrcO=L9 zpHNOMcF)EtV9kRIb(#7gt$3os*{rp5RD|TA2@wbdTQ)CPK}Y&R35i&guR}W@?*&>* z*U3Fc)~(KAjlnC)wXE6&lM>4Du>$-Q=I)Vkg!+HfDC}0qiink29mlPhR%CLk z1guy%Sx)8lb>KLBRiaXF_8@>X%sYvP2^jbfSqIy;tJACN+c%rdJ*2E6V(UM)y3~)W z&R058t!M{1!$?;JG1IL01!F!i0yvf~I=i`Hy~^Elw>JkRpCFYJXalv#*ow3wh0RmS z6PWJ!NkE`{mX6m!;vD3jtrq0fwXh2SQ#rCq>g&leT1fgm~N(+Bi$ zc0gIO*5Y_Uylz6oGc!G|LC$CQWHZAPTnuUiMbQbsj_6Ju%Dly?8d2-2U|Z+2P7(@x zE+ZL@NXs=!;9Jn`T1gOXLN62nFi#RW-hej>$tQMn=m`!?lD_cZ{rBdwLzQh`+Q!XS z_jbmjbN*Ne-QrpgiX(H*2hIhu0vL(7AaewUHJeEWm2Q%BLte#)8GJgM|DGdsPuZuf zmo89sDhVO061`!Xb&p!NbY}aRp5t9BwV?(U>St=~SNSY3w65cw2afjfG9^F%YLY6s zV5NOohdc!WBWqS7Yc??P(eMq=CJ^xVE3Cn;OK|1y z{PH*Fe_q}$&f1NkAAg@-g&!UoOgPR@Gz&Vlm7kU$Q$WURsv{=r1cJ@YK8}q%!eI&g zA^;{_rA(<`8CfMx+{>>%7GF^2+n+X}wLiOxG%uwWPkCfypY0bG18D0|tJauf4nxIFs=x$f0qu|1fVg?rQ$ zvIv|{jhDM!FZklWGcPz^BEywx$Pjt;d+I_Z86dY4+3FC~9M&q3Ojyn8&>a_ahPXKT z&e<9^FO-_d7w{x-U|YcP2VMzq#-tXR0;3GRL(BVFAODk`Zs=3uYqgZJUXG;V^*}vd z4e6ckmPWJQ_^Nero}&)t)$WRhiB5z zJyzVwmDUZjZDPM~n>Kzah(Mi8s8pvR-4EffmrjYxo=v4vLu!MmC*>qjlp9f9>zC1a zm5Bh6ic}J4PG{+6($MQPX?xDJxwDI5$wEu6T@oD5q@{9H)?DChgfeGSY0HyIChRd9 z&J5nM1+W|d4LPh5Pu{6sLVCc_SR+g-)N(_55uF(H$KohhnK00{H(%6TKUj>o4V`(E z&+vUDqZ>;Tl1TjU(4EsCuZm&6y2a+aI8f3ZTMUeiXgftd#sQdr&z8prpYpfwJMurd z_f^!nRGF^`ov7WDZOj+(W=KmN`(ay)A9{9y?+5hr9JnNVg@eeG%!Yo2BE(1tAr>B9iUH{Mzk#zPU~6ef;MA0kq=yPsTN>->re4 z+8p5unrh|gTHw_sR%gZ`nq_2@U+#ZwfgA3nMlF~)Ezto-1Bs5b31~=t+Ko@~+fc>CE7{3b}J_&}0L<6PW z7EB+GOEhd_x1Kc5>OQptq0i$dQ3?6^K(u*%Pyq-L{3t>D+m&bWdPSQfHOvE1daHXsCx>eaS%D zra)VI4SLWV$&qSNFdEgI!Chc@FMw57822Lm|g$Rq;XK(ZG$zoq%~ zUYF0#e|%V7bRZ5OwLQ`unhgz=r9$tZSdw&tJwQZL#dmRby{HE&AjK1PQgOPoUv^G= z#FMYKWLPF_-dQ4;>{|kNZ-4z#xBPPHmbVGNyS}=(oD6gUZ0b{W$-dOm@+v^RQVuL! z>SK#U&LIKZMKD>?}V`69#G!-X71X0NYb z-MO}vwf@G={Sm9Jzt*Kq;-m0d7S}@(A4(19zgq%j#UbLb$lh5)5m1DGgJsfxumw{6SjH z_8UK`VxT25bgFrKPBbYs86~+o{Dr<>jIoeqf#WCZz6s5h5a#m(X4Fw^4hO=e**u(O z{9kK({G`QQgFYi2Xr?fROVI^o7%Tx9wLO8P*Ck&VKS_im?N#Y)xTi0~G(<7q0c{g> zuYB+jBkpAUq;AQAmu5hr#_Ul&TFz@~M%KaTG}M6>7Vz%)N$9LVXU2#6|&v#OXj%$r(wS~mciA+R3cUt3))scr!bPCQQ62cG-qix zUu8mj#A2^kKUD8aR^VrUy}o|Ps*_-d6v1MOTcBul3V>FFwDIJr@9g{*`cCkPq79*!fdv1P55;b%@F8ZXC*EWBN8cRhO)KU+~`G}08klZ zR0{UVMr8kC#bM7pG{(~OF63o0mqs^h3xs6Tv7yTIbpAt02ipBK>SDTT!v&wP_fg8# ztC=xw+I?GyYK?+`jnKuaCR)=oi+J0m-YI$g9)|q=_02=aWlL4#Ak%Kdhb6m={n99v zrV_)`tlehnO#&Ugw3Uei^7Dq4$U|M3z872$UJjcH?$=`%#4!?7UpK8&nIZ=Ay7jK)p?pA+p=0-#=+RlU z#oa$epY!ODp-W=Hsh`n$vG}FhA_fC3HEPPr(~-`$voH1J1&jHNE2t*jf#_q>7uf>= zquiDd1OF#GP4Z|qm5z?(i>mcM6(zti+6!S!q7H#`j@mXbR)~P#E+&~~GNT$e+-h*O z%acs}4Lt37yfRmWLr0~hw`-zrmenFXAPG80y)p?Sp#7X8pgi*S#4y_K6d9sG45f%f z<|`GPtRV>@4PxqBx@-BJ(iLx-dQj@>4jsMv3QeQzAsBKxD0WN&ZA6^Vv% z5@SR3BiBqH5U-Fn3{N%49R!9|=lSG`)NPPSEO0$v{GgBj+uFT^Sawxm0KUH88c{H! zVEaHswCtqYn9NKkYA2A`*fBT|E7euEy059aRn()?5z(N63hG2failYy2?{!JAdYkv zr;a-4z<~n?A`Zm({b!$j>)vyARUBB_Irp{Cb3fMl*T4QnJ{?V(l?m)cg2SART{Rj7 zDRy8%#fF2Ao79bDSTb~t{t%Fg;bdVjVoz>MnJ;>~tdCl3?HoS6yYTyZK_*7pC)Ho` z`_pVR%K#oNMiz5f6bQR0RXw*Y6MSJG8JRGodm2-w2?nHSbnzAO*8Dtm-^G%WMQ3!d zjU}YCY7<9#6=KJUMuhUvPtbHuW7(v(~vJVh!WfXFy<(sG~4 z)r)r~jS`m)EE%CXmMi?k|CdjFG+gf^Y9ZxKPN0Vsz$Q3A3{@l@8H~c-cMI(Ug-0z> z9xMRHMS_S)-L$wc*AlA>_W@9vct@XX-rcS$n8qMDEjYs2azV^7KrN5ZV6c$czW05c*L_AUmEBEY6IRvk!N|3 zn31L&%pWU8Vl(0a(q}KxQEUpv`%=A?vM`MH3jo?oJuAQ{E800SE=-}sB5JbJ@Ys_pfHBL>)47Cg#fG|$w1kn2A6vvJ_3?Wk5acb;Kbgy7 zP#&@@J{rYVJvQydh8t`4Go2=>IMQ4fSlv!F=o7c(uIs4B#*! zspUivm_fysvZ$jCv9CeDcTH{{D%3WcAD!(5B`+}1@t{Yz6xMSvf}l9{crUWjU9bd@PI)I9n4)H^bGm+*9f+JP z8jDe@A_t}|qG2lO$W7$YDx*Scm4V3FcY~8@%JA!XI3oiNxV5m}P7L(IcP;BxXU#4> zKkDtp*y65q}qY1vU-^n*tf|(NEVwkHeekKblmAV%!HRD zHjCXL(xo_na2jMSN)-SBO@VEQY@<0yQj8d|MTtRZtZ-yes7z;~O87xQieNn|vUJyY zWjcNG{-ZM(+0t+vF1$?S7!qT8g(MvoALKO!95@$|ac%^v0X!rIvW8_cvYvqmk{|&D zW`S{Sl>60Xic8teXdm0z*r)OHm?A{u%Ss6lX98@Mdw@C%{z(aQ0S%Kl)6SeG>UM9V zgBj4eEa(Dc0;dLem^oaK#Hv)1!G;k0#i|=06MCKkax#EPugV!>jzlJgj}k#e;daR> z5UIv+07-}pAg)-hI+C+2S+F}U4qpYQL>SofthLZ8@u_tC=BgLpg<~wZ-dt&=JL5y zYBi}L7Uahsd0_oxk3L8MvhW1m^zNQ4m8H?m5gWCg7~_LfD9W#){H5F8PphH zurg9w)Tuoead)<=sZvzOjb`u@pNTY26029H-tHz@gcmb!_cf#Q@r|7s>pCigjmcQt zyvt9HEIW-^{B(R^^6AMrNgg_|B?R!+3<7lGfh5FBz(1a|^qlB=xnigYwzz#Zc|Nf1 zFpDD4LNisg&-Eq?ITMKNKoW=dbiDB-m#hzo1x)+-3x&3m&I-2-bi(H3gPH7PUvh?Z zV;p~=5(la!$%*cmEL7ZNle$ZnplHoNDU}W(jSp3ZRjgBwdm*ra(<@aD2aqy|`x-@g zs}oQm_*p6*F(i5fV89BfQSZlR)2G_h0PABCVL(BW0t6XlOj$^D=6l%*U3Cg z4~)q;pr=3sbkEE?qS0(_@l5BGY$6p5Wxq%FA&e@|tTC}OOVvpr=VzjgiH>c;eM#m# zCJIW7oNQ z#_M?)SYo-n4(eE~Kr&a+h`~4W2;rHM6l9HXD%%~*T@(+23R!l3RZZ3e#66$(mZ^%zK{})eq zY6%58TGg&47(zM09o5vprsfx$A8Ob4) zK(?T>98Pyu?Eb|{bCMJJz@8YbO4ze&$Ia?e@UN8Q)At352oD#MmiV1aT?ukzOQZm} zH;ZEeN4KyK&0(u_ozY?~CWq6)!AJ%wQx}LOyaVu%*rHnmWlyGPV;-W@2?BC5sv{$U zFhXEt47#v;h>#{LnY8eQ^ON=6O_HJW)rtY56ESBd-~)qYoD!>-c$f-d9y@ygk%j4C z0%9kwEJkP2ZjnqmAuwqMizyNAh>xXW_f%k+n}$gfI$%q@h`k~>%d*ur<-}B}VStgl zh+bU?SSB)b*saC=K9R6q;VrdRUBn3ZvsfbbyQfE!F+&m{D%t=djU*1qacKDH7O@gg zh7svyd!skY9JU|U77*AH2t))kv6&kajR(kW=#(r7F_1;3Dob0!(r6mAS74G*c*~E7 zLB+p^`19`&0D;uvK-iJ8Ghp|ge#j-QB9f8YvDBIlIShdhL>ZJk_AoJ)O_|dCQiiQi zG>TK-EhoKgI=+1HM+kjnA*pVJMFR{mdz(N-&QjHeT`4Y}WS8l|!F;cS?Nf(m8KJAZ z<n8LbKD zu5Vk!sD?{Ta! zG2zR}@e9T~nau)DpgyxMSCT~?!4wJcROj?<6ET*Am1%qu{LJVICTNuON9TjWWbR|M zvIj{^@XVv|o6zfYesl4JIb`eWBcyr!=rF?>>H*wY9DGe|9YPhD_i&jo*KypC&X$xZ zO3;a&7_eHY@5SW4@LG)A_p(J8X zdKVvGr9mVaHYHL!O%U`fhEK$mfRI6}b7lohW%y-X7@vh~RKHrXOIMeBSvSIF=3LhBF0FS>p%d_N{t;Yool7TU3&V;0}ov~K2&~Z z^eEUp9Ok47bgE&jBpLb41XY0IT$;>rdkoBROE3r4o#Y$#21_SZK9q%IWP}P3u~>!~ zC%noED1~)7^CnV$RdRM9u&8dPX%E68*Q#O{ogNYuFgVX4nu(FuW%F^JVNk?E zR6e(gG`KkwR)u&|FBzKX(c>qx`}9Dg05eDsD_%}ZgpwK`W&k>%j9+46UZbpw6!4== z@oZv~Z&roQyE&fk%;qmpL{$iY%4Wa@%OgwHf6ZSUL5eUT2|`eq3rhj^69b0Rd@^<9 z8Lw7BFuh9$9zQDee08dzwU}%0Z+@Lh(&RXT>!5pvBE-Td$VMTN*;OB&+%=ya4YEjc z=x&^SYPz|1Fj$|nAe`I+Q^MBHW`w5}vxIdZY!yJy;-hZjFqxq5;5%# zcv{R<)SJTrlLf2_G0Vm0adS(#w2WwzxR^eatI>~fvqF}l^Dk4KuAnRg03?$uwpon! zWK58F8sAp(A-V*}O>B^jDshZ{QtE?6u2?b}Z%D=$pkiz1W+M>1Kv{=W#9VV(sUepK z9X7kLfcEB_D>t(LZ3wd^D$w1rAZlZ%y`a40&(o-v7ws_jHrIkNgRBA>Wm!m8;f$F2 zlP-dlX9k048%l27q|2{coMGXx8wi75Fq(QW4}lH5C`PO}d!qPkW6>a9NDA$mi7sT7 z8Q=JXm-sh=Kf)`b0YGE(7$gOyg$_vsp4GXOSd`?yp?Ti2LZUD&NP?}6AH_o!d6kEb z33a#Y10_m35|rP(uzHajT#451b9;-Ew2W>B@XC7&_sSfhlaFqVsG&phrJ3eBnRuia zQ-U{4Ks1DiLJ5C;xG}eK6|rff$w|O1{9t?->P%wh0w@=x@M8hQ|LXcccalA2p~h1^D@r5wgq#K4%6HEvwTG5z%l(nQ zB65D|7~S%qJ3-&1XZMtWy>6g{IMB}m*-2SzHD0Oivow3Q#Q6G>Y2zDjdK8Ca=_ZF3 zTS^B<;{l$Dp>~k_t*6Xu%WKByno|8QrDfR^);Qj!s4kr@BY}k>ODWn++^dFxz)~Sy zV^R^a7sMuLfO=~(f~8oa8CPNNdU%aK;}EH&3oYcnP=|sFb7nt+o`feUO(B9NqW9yL zGDxJU)^;snDp8VhU6KhAK0USP)69lh7Q3 zC>ArXLoT|K>Jbc*3rg=fNX6dqeCa_pc(@E}opOcPrBU{{zLC1I zlWvdob@rN5aDeV~BkSN4_Z+?+@Z%dtmuB;;)9brgb=SJxZSL)sce3M-uiM$ioba$V z-P_rGJ9{f%UAuNLy;d$%{Q@UOQ2R{x@I-?RK64m4p2~>iui{tL^{Zzo^^yy}mSfxy?)btL^VBA5R|dKdh?)L|IbqUXZjPX+b7EICOM6?spsE+ zJo$nbxuW`^@$7%X<9UzFz;=`u3N~&n8biQ(n~VGp{S})Bdgg4cmXmXSu|B zn{I#G8-I0Mk5fJ!_n&Y2V!8b!JIr6dJ@=~ew*L2y`l8={&vv=}M}JVhsN3J%RnNHp zyl+=GKk{O^{l9--eqXn5u0QOzx!22oKlUc=>;1pu52bzG{`x1&zn)Bn=l|0|``>@Q zTyWi<`^#$k)vK9IelckO*GFI7HK^M+tTtafzxwg-2JQdVx3AmJUaY??+u`*;J81uz zua@K2?H9k4yL0k4JpVuWDxbZi?)Z+r!`<=P(r9?Y2JdhCRfc%RcK0`Ef3E+yZtC&t z_HVw(J*w@`_3h8~#~&PSasO)je`%X5tnJVD?a%k^e}1nom;P$I`q9fYu5(j9yM4J_ z|Lx2D_4ggCj<4Fjp4aQOUq1frhx_&qm-as$bb#8vZr?O$KY60R|4)?mm+Oi4+uE*v z{MJGH%YFOHef#tEho`iEzxLT@y??j*_P6@>za1=K!{dLbKmPDIwf)0`HnQ`*1$ zyQTeC>cn(P``y0%@cw<{`=$Lm-_bt*dLFk + +#include + +__global__ void kernel1(float *A, int n) { + A[0] = 0; +} + +__global__ void kernel2(float *A, int n) { + __shared__ char globalArray[256]; + + for (int i = 0; i < n; i++) { + globalArray[threadIdx.x] = A[i]; + } + + A[0] = globalArray[threadIdx.x]; +} + +int main(void) { + float *h_A = (float *)malloc(sizeof(float)); + + float *d_A; + cudaMalloc((void **)&d_A, 1); + + // clang-format off + kernel1<<<10, 10>>>(d_A, 100); + kernel2<<<10, 10>>>(d_A, 100); + // clang-format on + + printf("Done\n"); + return 0; +} diff --git a/pkg/gpu/cuda/testdata/sample.o b/pkg/gpu/cuda/testdata/sample.o new file mode 100644 index 0000000000000000000000000000000000000000..74dd70547f049253fc24372f8eede04d7b015845 GIT binary patch literal 97272 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�TS@>LwexZfi^h+5(K+lXzJzveZ(OVhk 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 b0SjjxTpSm{xjPeoZ$eYz`?2gpT&n*EoW)Sq literal 0 HcmV?d00001 From d51e1147cca8d4a029392a58c9a8853116d29122 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 10 Oct 2024 12:18:57 +0100 Subject: [PATCH 17/17] Marking pkg/logs/launchers/integration/LauncherTestSuite as flaky (#30013) --- pkg/logs/launchers/integration/launcher_test.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/logs/launchers/integration/launcher_test.go b/pkg/logs/launchers/integration/launcher_test.go index 8dfa126798833..4f68b18b81754 100644 --- a/pkg/logs/launchers/integration/launcher_test.go +++ b/pkg/logs/launchers/integration/launcher_test.go @@ -8,6 +8,7 @@ package integration import ( "os" "path/filepath" + "runtime" "testing" "github.com/stretchr/testify/assert" @@ -25,6 +26,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/pipeline/mock" "github.com/DataDog/datadog-agent/pkg/logs/sources" "github.com/DataDog/datadog-agent/pkg/logs/status" + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" ) type LauncherTestSuite struct { @@ -40,6 +42,10 @@ type LauncherTestSuite struct { } func (suite *LauncherTestSuite) SetupTest() { + if runtime.GOOS == "windows" { + flake.Mark(suite.T()) + } + suite.pipelineProvider = mock.NewMockProvider() suite.outputChan = suite.pipelineProvider.NextPipelineChan() suite.integrationsComp = integrationsmock.Mock()